capaj/ingit
a modern git UI - fresh take on ungit
- Repository: https://github.com/capaj/ingit
- Commit:
bdde02c1fe17a45b889f48d571bc61581d5a4e3c - Generated: 2026-11-13T23:48:02+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) | 8 | explicit | 95% | 100% |
| Code quality | 62 | weak | 90% | 100% |
| Security | 59 | weak | 85% | 100% |
AI provenance
Explicit AI attribution on 8% of first-party code added; an estimated 8% including velocity signals.
- Explicitly attributed share (lower bound): 7.7%
- Unattributed share in AI-consistent velocity bursts: 12.8%
- Estimated AI-generated share: 7.7%
| AI tool | Attributed commits | Lines added |
|---|---|---|
| Claude Code | 5 | 2,865 |
| OpenAI Codex | 2 | 1,135 |
- AI tooling configured in repo: claude-code, generic-agent
Current source lines last changed by AI-attributed commits: 2,425 of 35,657.
| Findings per 1,000 lines | AI-attributed | Other | Ratio |
|---|---|---|---|
| Quality | 0.0 | 4.273 | 0.0x |
| Security | 0.0 | 0.421 | 0.0x |
- Stylometry index: 0.04 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-04 | 13,749 | 12% |
| 2026-06 | 3,820 | 26% |
| 2026-07 | 28,501 | 5% |
| 2026-08 | 1,114 | 0% |
| 2026-09 | 2,878 | 0% |
| 2026-10 | 1,960 | 0% |
| 2026-11 | 210 | 0% |
Evidence
- Claude Code: trailer 'Co-Authored-By: Claude' (8cdcdc20b221)
- OpenAI Codex: on merged branch (3fada0a177) (fdca1c061ca0)
- OpenAI Codex: on merged branch (3fada0a177) (bd067c7b64ab)
- Claude Code: trailer 'Co-Authored-By: Claude' (e3a06be7800f)
- Claude Code: trailer 'Co-Authored-By: Claude' (40e542c58042)
- Claude Code: trailer 'Co-Authored-By: Claude' (b1abdf27d52e)
- Claude Code: trailer 'Co-Authored-By: Claude' (7b4f71b7c3b2)
- .claude/skills/remotion-best-practices (claude-code configuration) (.claude/skil)
- CLAUDE.md (claude-code configuration) (CLAUDE.md)
- AGENTS.md (generic-agent configuration) (AGENTS.md)
- 1,384 lines of first-party code in ~1.1h (1,244 lines/hour, 2 commit session) (87f7fb2624fa)
- 3,043 lines of first-party code in ~4.6h (659 lines/hour, 5 commit session) (6a230962d1eb)
- 2,415 lines of first-party code in ~4.3h (566 lines/hour, 3 commit session) (31b87dfb3054)
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.22, CI runs tests; 28% of function code in complex or long functions; 6% duplicated lines. Weakest area: lint.
| Area | Score |
|---|---|
| Complexity (lizard) | 44 |
| Duplication | 71 |
| Code smells (Opengrep) | 42 |
| Tests and CI | 76 |
| Documentation | 65 |
| Type safety | 100 |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 2,477; mean complexity 3.2, 90th percentile 7; 70 complex and 23 long functions
- Duplicated lines: 5.6% of 27,239 compared
- Tests: 7,887 test lines for 35,657 source lines (ratio 0.22); CI test commands: bun test; 59% of recent source commits also change tests
- Docs missing or thin: contributing, changelog
Most complex functions:
- buildSegments in packages/graph-core/src/lane-ordering.ts: complexity 62, 158 lines
- buildEdgeRoutingData in apps/client/src/components/GraphCanvas.tsx: complexity 61, 160 lines
- GraphCanvas in apps/client/src/components/GraphCanvas.tsx: complexity 58, 767 lines
- (anonymous) in apps/client/src/components/GraphCanvas.tsx: complexity 51, 49 lines
- (anonymous) in apps/client/src/components/GraphCanvas.tsx: complexity 48, 176 lines
Security
Security posture is weak: 44 known vulnerabilities in 11 dependencies; 4 high-severity SAST findings; 15 high-severity workflow issues. Weakest area: ci actions.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 100 |
| Static analysis (Opengrep) | 95 |
| Vulnerable dependencies (OSV) | 30 |
| CI workflows (zizmor) | 6 |
| Posture (policy, updates, signing, lockfiles) | 20 |
| OpenSSF Scorecard | n/a |
-
Known vulnerabilities: 44 in 11 packages (critical 0, high 23, medium 16, low 5)
-
Posture checks passed: signed commits; missing: security policy, dependency updates, lockfiles
Top findings
| Severity | Finding | Location |
|---|---|---|
| high | opengrep/javascript.lang.security.audit.spawn-shell-true: Found '$SPAWN' with '{shell: windowsShim}'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use '{shell: false}' instead. [confidence low] |
apps/cli/src/auto-update.ts:21 |
| high | opengrep/javascript.lang.security.detect-insecure-websocket: Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] |
apps/server/src/main.ts:202 |
| high | opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
scripts/record-social-demo.ts:372 |
| high | opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a cursor.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
scripts/record-social-demo.ts:372 |
| high | osv/GHSA-73wf-gq98-2v4g: browserslist@4.28.5 (npm) is affected by GHSA-73wf-gq98-2v4g |
bun.lock |
| high | osv/GHSA-c83g-rgw3-j3cx: browserslist@4.28.5 (npm) is affected by GHSA-c83g-rgw3-j3cx |
bun.lock |
| high | osv/GHSA-5jgf-p345-68v8: fast-uri@3.1.3 (npm) is affected by GHSA-5jgf-p345-68v8 |
bun.lock |
| high | osv/GHSA-7p8r-x3mc-p8w7: fast-uri@3.1.3 (npm) is affected by GHSA-7p8r-x3mc-p8w7 |
bun.lock |
| high | osv/GHSA-f65p-4m7j-42xc: fast-uri@3.1.3 (npm) is affected by GHSA-f65p-4m7j-42xc |
bun.lock |
| high | osv/GHSA-fph4-wmhf-6fwf: fast-uri@3.1.3 (npm) is affected by GHSA-fph4-wmhf-6fwf |
bun.lock |
| high | osv/GHSA-jqff-g426-hqxp: fast-uri@3.1.3 (npm) is affected by GHSA-jqff-g426-hqxp |
bun.lock |
| high | osv/GHSA-qw65-cvwx-89v3: fast-uri@3.1.3 (npm) is affected by GHSA-qw65-cvwx-89v3 |
bun.lock |
| high | osv/GHSA-v2hh-gcrm-f6hx: fast-uri@3.1.3 (npm) is affected by GHSA-v2hh-gcrm-f6hx |
bun.lock |
| high | osv/GHSA-2883-xcg3-v3hh: js-yaml@4.3.0 (npm) is affected by GHSA-2883-xcg3-v3hh |
bun.lock |
| high | osv/GHSA-5p4m-2wfm-xmqj: js-yaml@4.3.0 (npm) is affected by GHSA-5p4m-2wfm-xmqj |
bun.lock |
| high | osv/GHSA-28wg-ghj8-5hjv: nanoid@3.3.12 (npm) is affected by GHSA-28wg-ghj8-5hjv |
bun.lock |
| high | osv/GHSA-2v37-7h3g-55p8: nanoid@3.3.12 (npm) is affected by GHSA-2v37-7h3g-55p8 |
bun.lock |
| high | osv/GHSA-r28c-9q8g-f849: postcss@8.5.16 (npm) is affected by GHSA-r28c-9q8g-f849 |
bun.lock |
| high | osv/GHSA-wq5f-xc86-pv6w: sharp@0.35.4 (npm) is affected by GHSA-wq5f-xc86-pv6w |
bun.lock |
| high | osv/GHSA-68fv-2mgg-jv7q: source-map-js@1.2.1 (npm) is affected by GHSA-68fv-2mgg-jv7q |
bun.lock |
| high | osv/GHSA-2m5v-pch6-74hx: undici@8.10.0 (npm) is affected by GHSA-2m5v-pch6-74hx |
bun.lock |
| high | osv/GHSA-4w7w-5xrc-9h26: undici@8.10.0 (npm) is affected by GHSA-4w7w-5xrc-9h26 |
bun.lock |
| high | osv/GHSA-qrxm-fqhp-jwvm: undici@8.10.0 (npm) is affected by GHSA-qrxm-fqhp-jwvm |
bun.lock |
| high | osv/GHSA-rfgv-xxqx-mfg5: undici@8.10.0 (npm) is affected by GHSA-rfgv-xxqx-mfg5 |
bun.lock |
| high | osv/GHSA-vp8m-p9jh-q5pm: undici@8.10.0 (npm) is affected by GHSA-vp8m-p9jh-q5pm |
bun.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: 35,657; test lines: 7,887
| Language | Lines |
|---|---|
| TypeScript | 43,446 |
| JavaScript | 98 |