fengsp/pencil
A web application microframework for Rust
- Repository: https://github.com/fengsp/pencil
- Commit:
05abcffbccacb122e398af572fa7e07277d608a1 - Generated: 2026-11-13T23:30:39+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 | 71 | adequate | 90% | 100% |
| Security | 73 | 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%
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2014-12 | 1,971 | 0% |
| 2015-01 | 345 | 0% |
| 2015-02 | 255 | 0% |
| 2015-12 | 238 | 0% |
| 2016-01 | 297 | 0% |
| 2016-02 | 1,074 | 0% |
| 2016-03 | 594 | 0% |
| 2016-04 | 111 | 0% |
| 2016-05 | 25 | 0% |
| 2016-06 | 71 | 0% |
| 2016-09 | 116 | 0% |
| 2016-10 | 36 | 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.06, CI runs tests; 11% of function code in complex or long functions; 2% duplicated lines. Weakest area: process.
| Area | Score |
|---|---|
| Complexity (lizard) | 72 |
| Duplication | 89 |
| Code smells (Opengrep) | 100 |
| Tests and CI | 62 |
| Documentation | 85 |
| Type safety | n/a |
| Process (Scorecard review/maintenance) | 5 |
- Functions: 208; mean complexity 2.4, 90th percentile 4; 4 complex and 0 long functions
- Duplicated lines: 1.9% of 2,050 compared
- Tests: 196 test lines for 3,126 source lines (ratio 0.06); CI test commands: make test; 9% of recent source commits also change tests
- Docs missing or thin: contributing
Most complex functions:
- get_status_from_code in src/httputils.rs: complexity 59, 63 lines
- code in src/http_errors.rs: complexity 25, 29 lines
- get_description in src/http_errors.rs: complexity 25, 53 lines
- new in src/http_errors.rs: complexity 25, 29 lines
Security
Security posture is adequate: no high-impact findings. Weakest area: posture.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 100 |
| Static analysis (Opengrep) | 100 |
| Vulnerable dependencies (OSV) | n/a |
| CI workflows (zizmor) | n/a |
| Posture (policy, updates, signing, lockfiles) | 0 |
| OpenSSF Scorecard | 25 |
- Posture checks passed: none; missing: security policy, dependency updates, signed commits, lockfiles
- OpenSSF Scorecard aggregate: 2.1/10 (published 2026-11-02)
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: 3,126; test lines: 196
| Language | Lines |
|---|---|
| Rust | 3,302 |
| Shell | 20 |