Leaderboard github.com
benedictbrady/prop-amm
unreviewed-ai-risk
AI provenance
100%
explicit
- Confidence
- 70%
- Coverage
- 100%
Estimated share of AI-generated code. Explicit attribution is a lower bound.
Code quality
58/100
weak
- Confidence
- 90%
- Coverage
- 100%
Complexity, duplication, lint density, tests, CI, docs and review process.
Security
62/100
weak
- Confidence
- 85%
- Coverage
- 100%
Secrets, static analysis, vulnerable dependencies, CI and supply-chain posture.
- Repository: https://github.com/benedictbrady/prop-amm
- Commit:
47dd714c50c57e9da8f433f71ecc5b7c8a1c7c9a - Generated: 2026-11-13T23:47:20+00:00
- Scorer 0.1.0, scoring prov-4+qual-2+sec-2, report schema v2
Scores
Unreviewed AI code risk: a large share of this code is explicitly AI-attributed, and its tests or review process are weak while quality or security scores are low.
| Pillar | Score | Signal | Confidence | Coverage |
|---|---|---|---|---|
| AI provenance (estimated AI-generated share) | 100 | explicit | 70% | 100% |
| Code quality | 58 | weak | 90% | 100% |
| Security | 62 | weak | 85% | 100% |
AI provenance
Explicit AI attribution on 100% of first-party code added; an estimated 100% including velocity signals.
- Explicitly attributed share (lower bound): 100.0%
- Unattributed share in AI-consistent velocity bursts: 0.0%
- Estimated AI-generated share: 100.0%
| AI tool | Attributed commits | Lines added |
|---|---|---|
| Claude Code | 1 | 4,474 |
Current source lines last changed by AI-attributed commits: 4,196 of 4,196.
Too few lines in one group to compare finding densities.
- Stylometry index: 0.95 per 1,000 lines (narrated steps 4, placeholders 0, assistant phrasing 0, emoji 0). Reported as a signal, not scored.
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2026-01 | 4,474 | 100% |
Evidence
- Claude Code: trailer 'Co-Authored-By: Claude' (47dd714c50c5)
- step-by-step narration comment: // Step 1: Initialize pool (client/src/i)
- step-by-step narration comment: // Step 2: Create/Get vault ATAs (client/src/i)
- step-by-step narration comment: // Step 3: Set vaults (client/src/i)
- step-by-step narration comment: // Step 4: Update Oracle with piecewise curves (PRICES ONLY) (client/src/i)
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 weak: test-to-source ratio 0.07, no CI test run detected; 23% of function code in complex or long functions; 8% duplicated lines. Weakest area: testing.
| Area | Score |
|---|---|
| Complexity (lizard) | 50 |
| Duplication | 63 |
| Code smells (Opengrep) | 100 |
| Tests and CI | 33 |
| Documentation | 40 |
| Type safety | 100 |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 130; mean complexity 3.4, 90th percentile 9; 4 complex and 3 long functions
- Duplicated lines: 7.6% of 2,998 compared
- Tests: 278 test lines for 4,196 source lines (ratio 0.07); CI test commands: none detected; 100% of recent source commits also change tests
- Docs missing or thin: license, contributing, changelog
Most complex functions:
- process_swap in programs/prop-amm/src/instructions/swap.rs: complexity 37, 172 lines
- process_withdraw in programs/prop-amm/src/instructions/withdraw.rs: complexity 27, 108 lines
- process_deposit in programs/prop-amm/src/instructions/deposit.rs: complexity 25, 93 lines
- message in programs/prop-amm/src/error.rs: complexity 19, 23 lines
- main in client/src/init-piecewise-pool.ts: complexity 4, 110 lines
Security
Security posture is weak: 37 known vulnerabilities in 28 dependencies. Weakest area: posture.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 100 |
| Static analysis (Opengrep) | 88 |
| Vulnerable dependencies (OSV) | 17 |
| CI workflows (zizmor) | n/a |
| Posture (policy, updates, signing, lockfiles) | 0 |
| OpenSSF Scorecard | n/a |
-
Known vulnerabilities: 37 in 28 packages (critical 0, high 5, medium 9, low 6)
-
Posture checks passed: none; missing: security policy, dependency updates, signed commits, lockfiles
Top findings
| Severity | Finding | Location |
|---|---|---|
| high | osv/GHSA-82j2-j2ch-gfr8: rustls-webpki@0.101.7 (crates.io) is affected by RUSTSEC-2026-0104, GHSA-82j2-j2ch-gfr8 |
Cargo.lock |
| high | osv/GHSA-3gc7-fjrx-p6mg: bigint-buffer@1.1.5 (npm) is affected by GHSA-3gc7-fjrx-p6mg |
client/package-lock.json |
| high | osv/GHSA-w5hq-g745-h8pq: uuid@8.3.2 (npm) is affected by GHSA-w5hq-g745-h8pq |
client/package-lock.json |
| high | osv/GHSA-96hv-2xvq-fx4p: ws@7.5.10 (npm) is affected by GHSA-96hv-2xvq-fx4p |
client/package-lock.json |
| high | osv/GHSA-96hv-2xvq-fx4p: ws@8.19.0 (npm) is affected by GHSA-96hv-2xvq-fx4p |
client/package-lock.json |
| medium | osv/GHSA-g98v-hv3f-hcfr: atty@0.2.14 (crates.io) is affected by RUSTSEC-2021-0145, GHSA-g98v-hv3f-hcfr |
Cargo.lock |
| medium | osv/RUSTSEC-2024-0375: atty@0.2.14 (crates.io) is affected by RUSTSEC-2024-0375 |
Cargo.lock |
| medium | osv/RUSTSEC-2025-0141: bincode@1.3.3 (crates.io) is affected by RUSTSEC-2025-0141 |
Cargo.lock |
| medium | osv/GHSA-fjx5-qpf4-xjf2: borsh@0.10.4 (crates.io) is affected by GHSA-fjx5-qpf4-xjf2 |
Cargo.lock |
| medium | osv/GHSA-434x-w66g-qw3r: bytes@1.11.0 (crates.io) is affected by RUSTSEC-2026-0007, GHSA-434x-w66g-qw3r |
Cargo.lock |
| medium | osv/RUSTSEC-2024-0388: derivative@2.2.0 (crates.io) is affected by RUSTSEC-2024-0388 |
Cargo.lock |
| medium | osv/GHSA-w5vr-6qhr-36cc: ed25519-dalek@1.0.1 (crates.io) is affected by RUSTSEC-2022-0093, GHSA-w5vr-6qhr-36cc |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0258: h2@0.3.27 (crates.io) is affected by RUSTSEC-2026-0258 |
Cargo.lock |
| medium | osv/RUSTSEC-2025-0161: libsecp256k1@0.6.0 (crates.io) is affected by RUSTSEC-2025-0161 |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0186: memmap2@0.5.10 (crates.io) is affected by RUSTSEC-2026-0186 |
Cargo.lock |
| medium | osv/RUSTSEC-2024-0436: paste@1.0.15 (crates.io) is affected by RUSTSEC-2024-0436 |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0441: pin-utils@0.1.0 (crates.io) is affected by RUSTSEC-2026-0441 |
Cargo.lock |
| medium | osv/GHSA-cq8v-f236-94qc: rand@0.7.3 (crates.io) is affected by RUSTSEC-2026-0097, GHSA-cq8v-f236-94qc |
Cargo.lock |
| medium | osv/GHSA-cq8v-f236-94qc: rand@0.8.5 (crates.io) is affected by RUSTSEC-2026-0097, GHSA-cq8v-f236-94qc |
Cargo.lock |
| medium | osv/GHSA-c8m5-c952-6cm4: rustls@0.21.12 (crates.io) is affected by RUSTSEC-2026-0346, GHSA-c8m5-c952-6cm4 |
Cargo.lock |
| medium | osv/RUSTSEC-2025-0134: rustls-pemfile@1.0.4 (crates.io) is affected by RUSTSEC-2025-0134 |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0382: rustls-webpki@0.101.7 (crates.io) is affected by RUSTSEC-2026-0382 |
Cargo.lock |
| medium | osv/GHSA-7gcf-g7xr-8hxj: serde_with@3.16.1 (crates.io) is affected by GHSA-7gcf-g7xr-8hxj |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0191: solana_rbpf@0.8.5 (crates.io) is affected by RUSTSEC-2026-0191 |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0386: tokio@1.49.0 (crates.io) is affected by RUSTSEC-2026-0386 |
Cargo.lock |
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: 4,196; test lines: 278
| Language | Lines |
|---|---|
| Rust | 3,376 |
| TypeScript | 1,098 |