newptcai/repy
repy is a terminal epub format ebook reader inspired by epy
unreviewed-ai-risk
- Repository: https://github.com/newptcai/repy
- Commit:
0a3c3a2063af87fd5d0824cb4588ccfd043cdcf4 - Generated: 2026-11-13T23:45:21+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) | 41 | explicit | 95% | 100% |
| Code quality | 57 | weak | 90% | 100% |
| Security | 59 | weak | 85% | 100% |
AI provenance
Explicit AI attribution on 41% of first-party code added; an estimated 41% including velocity signals.
- Explicitly attributed share (lower bound): 41.3%
- Unattributed share in AI-consistent velocity bursts: 8.3%
- Estimated AI-generated share: 41.3%
| AI tool | Attributed commits | Lines added |
|---|---|---|
| Claude Code | 124 | 17,579 |
- AI tooling configured in repo: claude-code, gemini, generic-agent
Current source lines last changed by AI-attributed commits: 13,565 of 31,635.
| Findings per 1,000 lines | AI-attributed | Other | Ratio |
|---|---|---|---|
| Quality | 0.0 | 0.0 | n/a |
| Security | 0.295 | 0.387 | 0.76x |
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2025-11 | 5,961 | 69% |
| 2025-12 | 5,092 | 4% |
| 2026-01 | 620 | 0% |
| 2026-02 | 5,415 | 39% |
| 2026-03 | 1,436 | 48% |
| 2026-04 | 501 | 0% |
| 2026-05 | 4,411 | 3% |
| 2026-07 | 19,053 | 54% |
| 2026-08 | 29 | 100% |
Evidence
- Claude Code: trailer 'Co-Authored-By: Claude' (0a3c3a2063af)
- Claude Code: trailer 'Co-Authored-By: Claude' (fd23224f433c)
- Claude Code: trailer 'Co-Authored-By: Claude' (645603b28542)
- Claude Code: trailer 'Co-Authored-By: Claude' (2acd30f90733)
- Claude Code: trailer 'Co-Authored-By: Claude' (aa0a8fff54bf)
- Claude Code: trailer 'Co-Authored-By: Claude' (e8a1e6cfb637)
- Claude Code: trailer 'Co-Authored-By: Claude' (9ed9661eed6d)
- Claude Code: trailer 'Co-Authored-By: Claude' (eb7696134c37)
- Claude Code: trailer 'Co-Authored-By: Claude' (b93c6000c029)
- Claude Code: trailer 'Co-Authored-By: Claude' (24f3303af86a)
- Claude Code: trailer 'Co-Authored-By: Claude' (5e622d31bf3e)
- Claude Code: trailer 'Co-Authored-By: Claude' (67632234200c)
- Claude Code: trailer 'Co-Authored-By: Claude' (37eaeff60303)
- Claude Code: trailer 'Co-Authored-By: Claude' (84f94f4db825)
- Claude Code: trailer 'Co-Authored-By: Claude' (b6ac8056b73c)
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.03, no CI test run detected; 26% of function code in complex or long functions; 6% duplicated lines. Weakest area: docs.
| Area | Score |
|---|---|
| Complexity (lizard) | 46 |
| Duplication | 68 |
| Code smells (Opengrep) | 100 |
| Tests and CI | 41 |
| Documentation | 40 |
| Type safety | n/a |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 1,125; mean complexity 4.1, 90th percentile 9; 45 complex and 28 long functions
- Duplicated lines: 6.5% of 23,846 compared
- Tests: 914 test lines for 31,635 source lines (ratio 0.03); CI test commands: none detected; 11% of recent source commits also change tests
- Docs missing or thin: license, contributing, changelog
Most complex functions:
- run in src/ui/reader/mod.rs: complexity 82, 235 lines
- handle_normal_mode_keys in src/ui/reader/mod.rs: complexity 77, 216 lines
- handle_visual_mode_keys in src/ui/reader/mod.rs: complexity 75, 230 lines
- handle_key_event in src/ui/reader/mod.rs: complexity 64, 84 lines
- move_cursor in src/ui/reader/mod.rs: complexity 41, 205 lines
Security
Security posture is weak: 37 known vulnerabilities in 15 dependencies; 7 high-severity workflow issues. Weakest area: posture.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 100 |
| Static analysis (Opengrep) | 95 |
| Vulnerable dependencies (OSV) | 27 |
| CI workflows (zizmor) | 24 |
| Posture (policy, updates, signing, lockfiles) | 0 |
| OpenSSF Scorecard | n/a |
-
Known vulnerabilities: 37 in 15 packages (critical 4, high 10, medium 5, low 2)
-
Posture checks passed: lockfiles; missing: security policy, dependency updates, signed commits
Top findings
| Severity | Finding | Location |
|---|---|---|
| critical | osv/RUSTSEC-2026-0369: [email protected] (crates.io) is affected by RUSTSEC-2026-0369 |
Cargo.lock |
| critical | osv/GHSA-m665-v7pm-7grj: [email protected] (crates.io) is affected by GHSA-m665-v7pm-7grj |
Cargo.lock |
| critical | osv/RUSTSEC-2026-0369: [email protected] (crates.io) is affected by RUSTSEC-2026-0369 |
Cargo.lock |
| critical | osv/GHSA-m665-v7pm-7grj: [email protected] (crates.io) is affected by GHSA-m665-v7pm-7grj |
Cargo.lock |
| high | osv/RUSTSEC-2026-0414: [email protected] (crates.io) is affected by RUSTSEC-2026-0414 |
Cargo.lock |
| high | osv/RUSTSEC-2026-0433: [email protected] (crates.io) is affected by RUSTSEC-2026-0433 |
Cargo.lock |
| high | osv/RUSTSEC-2026-0340: [email protected] (crates.io) is affected by RUSTSEC-2026-0340 |
Cargo.lock |
| high | osv/RUSTSEC-2026-0341: [email protected] (crates.io) is affected by RUSTSEC-2026-0341 |
Cargo.lock |
| high | osv/RUSTSEC-2026-0367: [email protected] (crates.io) is affected by RUSTSEC-2026-0367 |
Cargo.lock |
| high | osv/GHSA-q7v9-x93c-xqv3: [email protected] (crates.io) is affected by RUSTSEC-2026-0429, GHSA-q7v9-x93c-xqv3 |
Cargo.lock |
| high | osv/RUSTSEC-2026-0367: [email protected] (crates.io) is affected by RUSTSEC-2026-0367 |
Cargo.lock |
| high | osv/GHSA-q7v9-x93c-xqv3: [email protected] (crates.io) is affected by RUSTSEC-2026-0429, GHSA-q7v9-x93c-xqv3 |
Cargo.lock |
| high | osv/GHSA-9hj8-73fh-9963: [email protected] (crates.io) is affected by GHSA-9hj8-73fh-9963 |
Cargo.lock |
| high | osv/GHSA-hjqx-j4rw-g7xv: [email protected] (crates.io) is affected by GHSA-hjqx-j4rw-g7xv |
Cargo.lock |
| high | zizmor/excessive-permissions: overly broad permissions [confidence high] |
.github/workflows/release.yml:9 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:34 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:43 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:74 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:86 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:91 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:111 |
| medium | opengrep/rust.lang.security.insecure-hashes: Detected cryptographically insecure hashing function [confidence high] |
src/state.rs:915 |
| medium | opengrep/rust.lang.security.insecure-hashes: Detected cryptographically insecure hashing function [confidence high] |
src/sync.rs:62 |
| medium | opengrep/rust.lang.security.insecure-hashes: Detected cryptographically insecure hashing function [confidence high] |
src/sync.rs:162 |
| medium | osv/RUSTSEC-2025-0141: [email protected] (crates.io) is affected by RUSTSEC-2025-0141 |
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.
Distribution signals
- binary-release-asset: release v0.25.0 ships repy-windows-x86_64.exe (28 downloads)
- binary-release-asset: release v0.24.0 ships repy-windows-x86_64.exe (6 downloads)
- binary-release-asset: release v0.23.0 ships repy-windows-x86_64.exe (2 downloads)
- binary-release-asset: release v0.22.0 ships repy-windows-x86_64.exe (2 downloads)
- binary-release-asset: release v0.21.0 ships repy-windows-x86_64.exe (2 downloads)
Signals consistent with a repository that exists to distribute a download. They are heuristics, not a verdict; release files were not downloaded or inspected.
Repository profile
- Source lines: 31,635; test lines: 914
| Language | Lines |
|---|---|
| Rust | 32,549 |