joncatanio/cannoli
Cannoli Programming Language
- Repository: https://github.com/joncatanio/cannoli
- Commit:
410f6bea362bf9e33eecc0e01fb080dadd14ef23 - Generated: 2026-11-13T23:30:40+00:00
- Scorer 0.1.0, scoring prov-4+qual-2+sec-2, report schema v2
Scores
| Pillar | Score | Signal | Confidence | Coverage |
|---|---|---|---|---|
| AI provenance (estimated AI-generated share) | 0 | none-detected | 65% | 100% |
| Code quality | 72 | adequate | 90% | 100% |
| Security | 81 | adequate | 85% | 100% |
AI provenance
No AI attribution or AI-consistent velocity signals detected.
-
Explicitly attributed share (lower bound): 0.0%
-
Unattributed share in AI-consistent velocity bursts: 0.0%
-
Estimated AI-generated share: 0.0%
-
Stylometry index: 0.15 per 1,000 lines (narrated steps 0, placeholders 0, assistant phrasing 0, emoji 2). Reported as a signal, not scored.
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2017-12 | 4,602 | 0% |
| 2018-01 | 6,158 | 0% |
| 2018-02 | 1,102 | 0% |
| 2018-03 | 1,632 | 0% |
| 2018-05 | 368 | 0% |
| 2018-06 | 43 | 0% |
AI provenance describes how code was produced; it is not a quality judgment. Unless attribution is explicit, these are signals consistent with AI generation, not proof. Squash/rebase workflows, imported code, and rewritten history reduce accuracy.
Code quality
Code quality is adequate: test-to-source ratio 0.48, no CI test run detected; 7% of function code in complex or long functions; 6% duplicated lines. Weakest area: testing.
| Area | Score |
|---|---|
| Complexity (lizard) | 80 |
| Duplication | 70 |
| Code smells (Opengrep) | 100 |
| Tests and CI | 53 |
| Documentation | 65 |
| Type safety | n/a |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 280; mean complexity 5.1, 90th percentile 13; 8 complex and 0 long functions
- Duplicated lines: 5.8% of 4,561 compared
- Tests: 3,141 test lines for 6,545 source lines (ratio 0.48); CI test commands: none detected; 23% of recent source commits also change tests
- Docs missing or thin: contributing, changelog
Most complex functions:
- parse_atom in src/parser/mod.rs: complexity 34, 70 lines
- output_expr in src/compiler/mod.rs: complexity 26, 35 lines
- parse_try_stmt in src/parser/mod.rs: complexity 23, 54 lines
- output_stmt in src/compiler/mod.rs: complexity 22, 33 lines
- valid_expr in src/parser/util.rs: complexity 19, 23 lines
Security
Security posture is adequate: no high-impact findings. Weakest area: posture.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 100 |
| Static analysis (Opengrep) | 99 |
| Vulnerable dependencies (OSV) | n/a |
| CI workflows (zizmor) | n/a |
| Posture (policy, updates, signing, lockfiles) | 0 |
| OpenSSF Scorecard | n/a |
- Posture checks passed: none; missing: security policy, dependency updates, signed commits, lockfiles
Top findings
| Severity | Finding | Location |
|---|---|---|
| low | opengrep/rust.lang.security.unsafe-usage: Detected 'unsafe' usage, please audit for secure usage [confidence high] |
src/compiler/local.rs:10 |
Static signals only: the scorer never runs the project's code. Secret findings are pattern matches that were not verified, and secret values are never stored.
Repository profile
- Source lines: 6,545; test lines: 3,141
| Language | Lines |
|---|---|
| Rust | 8,925 |
| Python | 761 |