leolaporte/beatcheck
Opinionated TUI RSS reader for Linux and Mac
unreviewed-ai-risk
- Repository: https://github.com/leolaporte/beatcheck
- Commit:
df63006cb02de130716378042f8a1f492ac936ce - Generated: 2026-11-13T23:54:06+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) | 86 | explicit | 92% | 100% |
| Code quality | 62 | weak | 90% | 100% |
| Security | 60 | weak | 85% | 100% |
AI provenance
Explicit AI attribution on 87% of first-party code added; an estimated 87% including velocity signals.
- Explicitly attributed share (lower bound): 86.5%
- Unattributed share in AI-consistent velocity bursts: 0.0%
- Estimated AI-generated share: 86.5%
| AI tool | Attributed commits | Lines added |
|---|---|---|
| Claude Code | 75 | 5,177 |
- AI tooling configured in repo: claude-code, generic-agent
Current source lines last changed by AI-attributed commits: 4,231 of 4,995.
| Findings per 1,000 lines | AI-attributed | Other | Ratio |
|---|---|---|---|
| Quality | 0.0 | 0.0 | n/a |
| Security | 0.709 | 0.0 | n/a |
- Stylometry index: 0.30 per 1,000 lines (narrated steps 0, placeholders 0, assistant phrasing 0, emoji 3). Reported as a signal, not scored.
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2026-01 | 3,974 | 95% |
| 2026-02 | 1,494 | 61% |
| 2026-03 | 21 | 0% |
| 2026-04 | 88 | 100% |
| 2026-06 | 405 | 100% |
Evidence
- Claude Code: trailer 'Co-Authored-By: Claude' (df63006cb02d)
- Claude Code: trailer 'Co-Authored-By: Claude' (71a2af85a59a)
- Claude Code: trailer 'Co-Authored-By: Claude' (d2938abd50a1)
- Claude Code: trailer 'Co-Authored-By: Claude' (9aefb91a57c5)
- Claude Code: trailer 'Co-Authored-By: Claude' (8346ac4d1629)
- Claude Code: trailer 'Co-Authored-By: Claude' (8b70a960b653)
- Claude Code: trailer 'Co-Authored-By: Claude' (65d4260b27e7)
- Claude Code: trailer 'Co-Authored-By: Claude' (6b7616815ea1)
- Claude Code: trailer 'Co-Authored-By: Claude' (dd711e7c7e97)
- Claude Code: trailer 'Co-Authored-By: Claude' (510b2ac21c8c)
- Claude Code: trailer 'Co-Authored-By: Claude' (35caa4c544ca)
- Claude Code: trailer 'Co-Authored-By: Claude' (a47d534b1c02)
- Claude Code: trailer 'Co-Authored-By: Claude' (84335ad89fe8)
- Claude Code: trailer 'Co-Authored-By: Claude' (4efa951a8f16)
- Claude Code: trailer 'Co-Authored-By: Claude' (fb35a995755f)
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.00, CI runs tests; 14% of function code in complex or long functions; 8% duplicated lines. Weakest area: docs.
| Area | Score |
|---|---|
| Complexity (lizard) | 65 |
| Duplication | 61 |
| Code smells (Opengrep) | 100 |
| Tests and CI | 45 |
| Documentation | 40 |
| Type safety | n/a |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 189; mean complexity 3.7, 90th percentile 7; 5 complex and 1 long functions
- Duplicated lines: 8.2% of 3,474 compared
- Tests: 0 test lines for 4,995 source lines (ratio 0.00); CI test commands: go test, cargo test; 0% of recent source commits also change tests
- Docs missing or thin: license, contributing, changelog
Most complex functions:
- handle_action in src/app.rs: complexity 75, 200 lines
- handle_key_event in src/tui/handler.rs: complexity 47, 83 lines
- main in src/main.rs: complexity 21, 73 lines
- find_firefox_cookies in src/services/content_fetcher.rs: complexity 20, 56 lines
- discover_feed in src/feed/fetcher.rs: complexity 17, 67 lines
Security
Security posture is weak: 27 known vulnerabilities in 16 dependencies; 8 high-severity workflow issues. Weakest area: posture.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 100 |
| Static analysis (Opengrep) | 95 |
| Vulnerable dependencies (OSV) | 38 |
| CI workflows (zizmor) | 19 |
| Posture (policy, updates, signing, lockfiles) | 0 |
| OpenSSF Scorecard | n/a |
-
Known vulnerabilities: 27 in 16 packages (critical 0, high 4, medium 3, low 3)
-
Posture checks passed: lockfiles; missing: security policy, dependency updates, signed commits
Top findings
| Severity | Finding | Location |
|---|---|---|
| high | osv/RUSTSEC-2026-0194: quick-xml@0.37.5 (crates.io) is affected by RUSTSEC-2026-0194 |
Cargo.lock |
| high | osv/RUSTSEC-2026-0195: quick-xml@0.37.5 (crates.io) is affected by RUSTSEC-2026-0195 |
Cargo.lock |
| high | osv/GHSA-4w2j-m93h-cj5j: quinn-proto@0.11.14 (crates.io) is affected by RUSTSEC-2026-0185, GHSA-4w2j-m93h-cj5j |
Cargo.lock |
| high | osv/RUSTSEC-2026-0340: quinn-proto@0.11.14 (crates.io) is affected by RUSTSEC-2026-0340 |
Cargo.lock |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:17 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:20 |
| high | zizmor/excessive-permissions: overly broad permissions [confidence high] |
.github/workflows/release.yml:10 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:36 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:39 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:63 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:75 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:80 |
| medium | osv/RUSTSEC-2026-0190: anyhow@1.0.100 (crates.io) is affected by RUSTSEC-2026-0190 |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0258: h2@0.4.13 (crates.io) is affected by RUSTSEC-2026-0258 |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0459: libsqlite3-sys@0.30.1 (crates.io) is affected by RUSTSEC-2026-0459 |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0253: lru@0.12.5 (crates.io) is affected by RUSTSEC-2026-0253 |
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/RUSTSEC-2026-0338: quinn-proto@0.11.14 (crates.io) is affected by RUSTSEC-2026-0338 |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0339: quinn-proto@0.11.14 (crates.io) is affected by RUSTSEC-2026-0339 |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0342: quinn-proto@0.11.14 (crates.io) is affected by RUSTSEC-2026-0342 |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0523: quinn-proto@0.11.14 (crates.io) is affected by RUSTSEC-2026-0523 |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0524: quinn-proto@0.11.14 (crates.io) is affected by RUSTSEC-2026-0524 |
Cargo.lock |
| medium | osv/RUSTSEC-2026-0538: quinn-udp@0.5.14 (crates.io) is affected by RUSTSEC-2026-0538 |
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 |
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 v1.2.1 ships beatcheck-linux-aarch64.tar.gz (6 downloads)
- binary-release-asset: release v1.2.1 ships beatcheck-linux-x86_64.tar.gz (15 downloads)
- binary-release-asset: release v1.2.1 ships beatcheck-macos-aarch64.tar.gz (9 downloads)
- binary-release-asset: release v1.2.1 ships beatcheck-macos-x86_64.tar.gz (10 downloads)
- binary-release-asset: release v1.1.2 ships speedy-reader-linux-aarch64.tar.gz (6 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: 4,995; test lines: 0
| Language | Lines |
|---|---|
| Rust | 4,944 |
| Shell | 51 |