kunal12203-codex-cli-compact 57 / 100 · F
Remediation Priority
Files ranked by combined risk score (weighted by check severity and finding type). Top 30 shown.
| # | File | Risk score | Findings | Flagged by |
|---|---|---|---|---|
| 1 | dashboard/server.py | 25.5 | 23 | complexityerror-handlingline-countmagic-numberssemdup |
| 2 | audit.py | 22.5 | 20 | complexityerror-handlingline-countmagic-numbers |
| 3 | benchmark/generate_analysis.py | 20 | 17 | complexityline-countmagic-numbers |
| 4 | benchmark/run_challenge_v3835.py | 19.5 | 18 | complexityerror-handlingline-countmagic-numbers |
| 5 | benchmark/run_preinjection_benchmark.py | 17.5 | 16 | complexityerror-handlingline-countmagic-numbers |
| 6 | bench/codex_token_bench.py | 13.5 | 13 | complexityerror-handlingmagic-numbers |
| 7 | bin/dual_graph_launch.sh | 13.2 | 8 | couplinghotspotline-countscripts |
| 8 | dashboard/static/app.js | 10.5 | 11 | line-countmagic-numbers |
| 9 | bin/undo_shield.py | 9.5 | 9 | complexityerror-handlingmagic-numbers |
| 10 | benchmark/results/raw_challenge_v3.8.35.jsonl | 6 | 1 | secrets |
| 11 | pick_instances.py | 5 | 5 | magic-numbers |
| 12 | bin/dg.ps1 | 3.7 | 4 | couplinghotspotline-count |
| 13 | bin/graperoot.ps1 | 3.7 | 4 | couplinghotspotline-count |
| 14 | bin/dgc.ps1 | 3.2 | 3 | couplinghotspotline-count |
| 15 | install.sh | 3.2 | 3 | hotspotscripts |
| 16 | Dockerfile | 3 | 2 | infra |
| 17 | bin/dg.cmd | 2.2 | 2 | couplinghotspot |
| 18 | install.ps1 | 2.2 | 2 | couplinghotspot |
| 19 | bin/dgc.cmd | 1.2 | 1 | hotspot |
| 20 | mcp_graph_server.py | 1.2 | 1 | hotspot |
| 21 | git log | 1 | 1 | ai-stack |
| 22 | bin/changelog.txt | 0.6 | 2 | couplinghotspot |
| 23 | . | 0.3 | 1 | test-presence |
| 24 | CLAUDE.md | 0.3 | 1 | ai-stack |
| 25 | CODEX.md | 0.3 | 1 | ai-stack |
| 26 | bench | 0.3 | 1 | test-presence |
| 27 | benchmark | 0.3 | 1 | test-presence |
| 28 | bin | 0.3 | 1 | test-presence |
| 29 | bin/version.txt | 0.3 | 1 | hotspot |
| 30 | dashboard | 0.3 | 1 | test-presence |
Project Overview
74
Total files
15
Directories
4
Max directory depth
436
Total commits
102
Repo age (days)
2
Contributors
128.2
Commits / month
1
Branches
0
Entry points
Languages & Stack
Python 43.2%
Shell 25.6%
Markdown 21.6%
JavaScript 5.2%
JSON 1.9%
CSS 1.3%
HTML 1.2%
Infrastructure
CI/CD
github-actions
github-actions
Docker
Score Breakdown
57
F
change_risk
45
15%
complexity
5
15%
maintainability
92
20%
security
57
30%
testing
70
20%
Check Results
AI Stack
3 findings
Complexity
27 findings
| Severity | File | Line | Detail |
|---|---|---|---|
| warning | bench/codex_token_bench.py | 166 | function 'main' has cyclomatic complexity 14 |
| warning | audit.py | 319 | function 'format_report' has cyclomatic complexity 33 |
| warning | audit.py | 90 | function 'check_test_coverage' has cyclomatic complexity 16 |
| warning | audit.py | 277 | function 'fix_roadmap' has cyclomatic complexity 15 |
| warning | audit.py | 169 | function 'check_copy_paste' has cyclomatic complexity 13 |
| warning | audit.py | 245 | function 'check_missing_error_handling' has cyclomatic complexity 10 |
| warning | audit.py | 429 | function 'write_audit_context' has cyclomatic complexity 10 |
| warning | bin/undo_shield.py | 46 | function 'main' has cyclomatic complexity 38 |
| warning | dashboard/server.py | 366 | method 'serve_bench_log' has cyclomatic complexity 30 |
| warning | dashboard/server.py | 247 | method 'serve_token_summary' has cyclomatic complexity 13 |
| warning | dashboard/server.py | 88 | method 'do_POST' has cyclomatic complexity 12 |
| warning | dashboard/server.py | 57 | method 'do_GET' has cyclomatic complexity 11 |
| warning | dashboard/server.py | 506 | method 'chat_fix' has cyclomatic complexity 10 |
| warning | dashboard/server.py | 590 | method 'serve_static' has cyclomatic complexity 10 |
| warning | benchmark/run_preinjection_benchmark.py | 568 | function 'generate_report' has cyclomatic complexity 106 |
| warning | benchmark/run_preinjection_benchmark.py | 349 | function 'score_quality' has cyclomatic complexity 59 |
| warning | benchmark/run_preinjection_benchmark.py | 842 | function 'main' has cyclomatic complexity 41 |
| warning | benchmark/run_challenge_v3835.py | 429 | function 'generate_report' has cyclomatic complexity 35 |
| warning | benchmark/run_challenge_v3835.py | 621 | function 'main' has cyclomatic complexity 24 |
| warning | benchmark/run_challenge_v3835.py | 125 | function 'score_quality' has cyclomatic complexity 14 |
| warning | benchmark/run_challenge_v3835.py | 408 | function 'print_running_totals' has cyclomatic complexity 10 |
| warning | benchmark/generate_analysis.py | 989 | function 'generate_report' has cyclomatic complexity 48 |
| warning | benchmark/generate_analysis.py | 658 | function 'chart_complex' has cyclomatic complexity 17 |
| warning | benchmark/generate_analysis.py | 496 | function 'chart_win_rate' has cyclomatic complexity 10 |
| warning | benchmark/generate_analysis.py | 767 | function 'chart_v835_per_prompt_cost' has cyclomatic complexity 10 |
| warning | benchmark/generate_analysis.py | 803 | function 'chart_v835_quality' has cyclomatic complexity 10 |
| warning | benchmark/generate_analysis.py | 906 | function 'chart_v835_savings' has cyclomatic complexity 10 |
Coupling
9 findings
| Severity | File | Line | Detail |
|---|---|---|---|
| warning | bin/changelog.txt | — | bin/changelog.txt ↔ bin/version.txt: co-changed 83 times (confidence 94%) |
| warning | bin/dgc.ps1 | — | bin/dgc.ps1 ↔ bin/version.txt: co-changed 68 times (confidence 82%) |
| warning | bin/dual_graph_launch.sh | — | bin/dual_graph_launch.sh ↔ bin/version.txt: co-changed 61 times (confidence 59%) |
| warning | install.ps1 | — | install.ps1 ↔ bin/version.txt: co-changed 30 times (confidence 56%) |
| warning | bin/dg.ps1 | — | bin/dg.ps1 ↔ bin/dgc.ps1: co-changed 27 times (confidence 82%) |
| warning | bin/dg.ps1 | — | bin/dg.ps1 ↔ bin/version.txt: co-changed 27 times (confidence 82%) |
| warning | bin/graperoot.ps1 | — | bin/graperoot.ps1 ↔ bin/version.txt: co-changed 24 times (confidence 92%) |
| warning | bin/graperoot.ps1 | — | bin/graperoot.ps1 ↔ bin/changelog.txt: co-changed 23 times (confidence 88%) |
| warning | bin/dg.cmd | — | bin/dg.cmd ↔ bin/dgc.cmd: co-changed 23 times (confidence 79%) |
Dead Code
pass
No findings.
Dependency Audit
pass
No findings.
Duplication
pass
No findings.
Error Handling
19 findings
| Severity | File | Line | Detail |
|---|---|---|---|
| warning | audit.py | 47 | bare except clause on line 47 silences all exceptions |
| warning | audit.py | 56 | bare except clause on line 56 silences all exceptions |
| warning | audit.py | 120 | bare except clause on line 120 silences all exceptions |
| warning | bench/codex_token_bench.py | 77 | bare except clause on line 77 silences all exceptions |
| warning | bench/codex_token_bench.py | 213 | bare except clause on line 213 silences all exceptions |
| warning | benchmark/run_challenge_v3835.py | 292 | bare except clause on line 292 silences all exceptions |
| warning | benchmark/run_challenge_v3835.py | 305 | bare except clause on line 305 silences all exceptions |
| warning | benchmark/run_challenge_v3835.py | 369 | bare except clause on line 369 silences all exceptions |
| warning | benchmark/run_preinjection_benchmark.py | 223 | bare except clause on line 223 silences all exceptions |
| warning | benchmark/run_preinjection_benchmark.py | 305 | bare except clause on line 305 silences all exceptions |
| warning | bin/undo_shield.py | 54 | bare except clause on line 54 silences all exceptions |
| warning | bin/undo_shield.py | 128 | bare except clause on line 128 silences all exceptions |
| warning | bin/undo_shield.py | 157 | bare except clause on line 157 silences all exceptions |
| warning | bin/undo_shield.py | 166 | bare except clause on line 166 silences all exceptions |
| warning | dashboard/server.py | 28 | bare except clause on line 28 silences all exceptions |
| warning | dashboard/server.py | 139 | bare except clause on line 139 silences all exceptions |
| warning | dashboard/server.py | 165 | bare except clause on line 165 silences all exceptions |
| warning | dashboard/server.py | 490 | bare except clause on line 490 silences all exceptions |
| warning | dashboard/server.py | 575 | bare except clause on line 575 silences all exceptions |
Hotspot
11 findings
| Severity | File | Line | Detail |
|---|---|---|---|
| warning | bin/version.txt | — | changed in 50% of commits (219 times in 365 days) |
| warning | bin/dual_graph_launch.sh | — | changed in 24% of commits (103 times in 365 days) |
| warning | bin/changelog.txt | — | changed in 20% of commits (88 times in 365 days) |
| warning | bin/dgc.ps1 | — | changed in 19% of commits (83 times in 365 days) |
| warning | install.ps1 | — | changed in 12% of commits (54 times in 365 days) |
| warning | bin/dgc.cmd | — | changed in 12% of commits (51 times in 365 days) |
| warning | install.sh | — | changed in 8% of commits (34 times in 365 days) |
| warning | bin/dg.ps1 | — | changed in 8% of commits (33 times in 365 days) |
| warning | bin/dg.cmd | — | changed in 7% of commits (29 times in 365 days) |
| warning | mcp_graph_server.py | — | changed in 6% of commits (28 times in 365 days) |
| warning | bin/graperoot.ps1 | — | changed in 6% of commits (26 times in 365 days) |
Import Graph
pass
No findings.
Infrastructure
2 findings
| Severity | File | Line | Detail |
|---|---|---|---|
| error | Dockerfile | 1 | no non-root USER in final stage: container runs as root |
| warning | Dockerfile | 1 | no HEALTHCHECK instruction: orchestrators cannot detect unhealthy containers |
Line Count
10 findings
| Severity | File | Line | Detail |
|---|---|---|---|
| warning | audit.py | — | file has 550 lines (threshold: warn=500, error=1000) |
| error | benchmark/generate_analysis.py | — | file has 1475 lines (threshold: warn=500, error=1000) |
| warning | benchmark/run_challenge_v3835.py | — | file has 752 lines (threshold: warn=500, error=1000) |
| error | benchmark/run_preinjection_benchmark.py | — | file has 1057 lines (threshold: warn=500, error=1000) |
| warning | bin/dg.ps1 | — | file has 722 lines (threshold: warn=500, error=1000) |
| error | bin/dgc.ps1 | — | file has 1392 lines (threshold: warn=500, error=1000) |
| error | bin/dual_graph_launch.sh | — | file has 2573 lines (threshold: warn=500, error=1000) |
| warning | bin/graperoot.ps1 | — | file has 593 lines (threshold: warn=500, error=1000) |
| warning | dashboard/server.py | — | file has 656 lines (threshold: warn=500, error=1000) |
| warning | dashboard/static/app.js | — | file has 703 lines (threshold: warn=500, error=1000) |
Scripts
7 findings
| Severity | File | Line | Detail |
|---|---|---|---|
| error | bin/dual_graph_launch.sh | 271 | possible hardcoded credential (api_key): use environment variables or a secrets manager |
| error | bin/dual_graph_launch.sh | 632 | curl|bash pattern: executing remotely fetched code is a supply-chain risk |
| error | bin/dual_graph_launch.sh | 635 | curl|bash pattern: executing remotely fetched code is a supply-chain risk |
| error | bin/dual_graph_launch.sh | 2094 | curl|bash pattern: executing remotely fetched code is a supply-chain risk |
| error | bin/dual_graph_launch.sh | 2386 | curl|bash pattern: executing remotely fetched code is a supply-chain risk |
| warning | install.sh | 89 | eval with variable input: risk of code injection if the variable contains user-controlled data |
| warning | install.sh | 164 | eval with variable input: risk of code injection if the variable contains user-controlled data |
Secret Scanning
1 findings
| Severity | File | Line | Detail |
|---|---|---|---|
| error | benchmark/results/raw_challenge_v3.8.35.jsonl | 2 | Identified a pattern that may indicate AWS credentials, risking unauthorized cloud resource access and data breaches on AWS platforms. [rule: aws-access-token] |
Test Presence
6 findings
| Severity | File | Line | Detail |
|---|---|---|---|
| warning | . | — | directory has 2 source file(s) but no test files |
| warning | bench | — | directory has 1 source file(s) but no test files |
| warning | benchmark | — | directory has 3 source file(s) but no test files |
| warning | bin | — | directory has 1 source file(s) but no test files |
| warning | dashboard | — | directory has 1 source file(s) but no test files |
| warning | dashboard/static | — | directory has 1 source file(s) but no test files |
Source files: 9
Untested dirs: 6
TODO Density
pass
No findings.
Semantic Duplication
1 findings
| Severity | File | Line | Detail |
|---|---|---|---|
| warning | dashboard/server.py | 57 | semantic duplicate of dashboard/server.py:88 (similarity 0.95) |
Magic Numbers
79 findings
| Severity | File | Line | Detail |
|---|---|---|---|
| info | audit.py | 28 | magic literal 033 — consider a named constant (color code) |
| info | audit.py | 28 | magic literal 033 — consider a named constant (color code) |
| info | audit.py | 28 | magic literal 033 — consider a named constant (color code) |
| info | audit.py | 29 | magic literal 033 — consider a named constant (color) |
| info | audit.py | 29 | magic literal 033 — consider a named constant (color) |
| info | audit.py | 29 | magic literal 033 — consider a named constant (color) |
| info | audit.py | 30 | magic literal 033 — consider a named constant (color) |
| info | audit.py | 30 | magic literal 033 — consider a named constant (color) |
| info | audit.py | 83 | magic literal 50 — consider a named constant (test coverage) |
| info | audit.py | 112 | magic literal 100 — consider a named constant (sort by size) |
| info | bench/codex_token_bench.py | 31 | magic literal 8080 — consider a named constant |
| info | bench/codex_token_bench.py | 31 | magic literal 8100 — consider a named constant |
| info | bench/codex_token_bench.py | 37 | magic literal 8080 — consider a named constant |
| info | bench/codex_token_bench.py | 40 | magic literal 20.0 — consider a named constant |
| info | bench/codex_token_bench.py | 69 | magic literal 1000 — consider a named constant |
| info | bench/codex_token_bench.py | 70 | magic literal 2000 — consider a named constant |
| info | bench/codex_token_bench.py | 87 | magic literal 1000 — consider a named constant |
| info | bench/codex_token_bench.py | 116 | magic literal 1000 — consider a named constant |
| info | bench/codex_token_bench.py | 162 | magic literal 500 — consider a named constant |
| info | bench/codex_token_bench.py | 162 | magic literal 500 — consider a named constant |
| info | benchmark/generate_analysis.py | 7 | magic literal 15 — consider a named constant |
| info | benchmark/generate_analysis.py | 7 | magic literal 2026 — consider a named constant |
| info | benchmark/generate_analysis.py | 7 | magic literal 13 — consider a named constant |
| info | benchmark/generate_analysis.py | 8 | magic literal 15 — consider a named constant |
| info | benchmark/generate_analysis.py | 8 | magic literal 2026 — consider a named constant |
| info | benchmark/generate_analysis.py | 8 | magic literal 13 — consider a named constant |
| info | benchmark/generate_analysis.py | 9 | magic literal 20 — consider a named constant |
| info | benchmark/generate_analysis.py | 9 | magic literal 2026 — consider a named constant |
| info | benchmark/generate_analysis.py | 9 | magic literal 13 — consider a named constant |
| info | benchmark/generate_analysis.py | 10 | magic literal 15 — consider a named constant |
| info | benchmark/run_challenge_v3835.py | 2 | magic literal 10 — consider a named constant |
| info | benchmark/run_challenge_v3835.py | 15 | magic literal 201 — consider a named constant |
| info | benchmark/run_challenge_v3835.py | 15 | magic literal 210 — consider a named constant |
| info | benchmark/run_challenge_v3835.py | 17 | magic literal 5000 — consider a named constant |
| info | benchmark/run_challenge_v3835.py | 46 | magic literal 600 — consider a named constant |
| info | benchmark/run_challenge_v3835.py | 46 | magic literal 10 — consider a named constant |
| info | benchmark/run_challenge_v3835.py | 94 | magic literal 500 — consider a named constant |
| info | benchmark/run_challenge_v3835.py | 126 | magic literal 100 — consider a named constant |
| info | benchmark/run_challenge_v3835.py | 128 | magic literal 100 — consider a named constant |
| info | benchmark/run_challenge_v3835.py | 129 | magic literal 30 — consider a named constant |
| info | benchmark/run_preinjection_benchmark.py | 4 | magic literal 15 — consider a named constant |
| info | benchmark/run_preinjection_benchmark.py | 12 | magic literal 4000 — consider a named constant |
| info | benchmark/run_preinjection_benchmark.py | 45 | magic literal 300 — consider a named constant |
| info | benchmark/run_preinjection_benchmark.py | 64 | magic literal 8200 — consider a named constant |
| info | benchmark/run_preinjection_benchmark.py | 64 | magic literal 8300 — consider a named constant |
| info | benchmark/run_preinjection_benchmark.py | 73 | magic literal 30.0 — consider a named constant |
| info | benchmark/run_preinjection_benchmark.py | 106 | magic literal 500 — consider a named constant |
| info | benchmark/run_preinjection_benchmark.py | 171 | magic literal 500 — consider a named constant |
| info | benchmark/run_preinjection_benchmark.py | 257 | magic literal 300 — consider a named constant |
| info | benchmark/run_preinjection_benchmark.py | 291 | magic literal 5000 — consider a named constant |
| info | bin/undo_shield.py | 75 | magic literal 120 — consider a named constant |
| info | bin/undo_shield.py | 78 | magic literal 120 — consider a named constant |
| info | bin/undo_shield.py | 144 | magic literal 3600.0 — consider a named constant |
| info | bin/undo_shield.py | 196 | magic literal 60 — consider a named constant |
| info | dashboard/server.py | 134 | magic literal 60 — consider a named constant |
| info | dashboard/server.py | 189 | magic literal 250 — consider a named constant |
| info | dashboard/server.py | 190 | magic literal 500 — consider a named constant |
| info | dashboard/server.py | 217 | magic literal 15.0 — consider a named constant |
| info | dashboard/server.py | 218 | magic literal 18.75 — consider a named constant |
| info | dashboard/server.py | 220 | magic literal 75.0 — consider a named constant |
| info | dashboard/server.py | 225 | magic literal 15.0 — consider a named constant |
| info | dashboard/server.py | 289 | magic literal 30 — consider a named constant |
| info | dashboard/server.py | 359 | magic literal 200 — consider a named constant |
| info | dashboard/server.py | 405 | magic literal 100 — consider a named constant |
| info | pick_instances.py | 42 | magic literal 150 — consider a named constant |
| info | pick_instances.py | 48 | magic literal 40 — consider a named constant |
| info | pick_instances.py | 49 | magic literal 90 — consider a named constant |
| info | pick_instances.py | 50 | magic literal 15 — consider a named constant |
| info | pick_instances.py | 51 | magic literal 40 — consider a named constant |
| info | dashboard/static/app.js | 41 | magic literal 250 — consider a named constant |
| info | dashboard/static/app.js | 95 | magic literal 667 — consider a named constant |
| info | dashboard/static/app.js | 97 | magic literal 20 — consider a named constant |
| info | dashboard/static/app.js | 97 | magic literal 30 — consider a named constant |
| info | dashboard/static/app.js | 121 | magic literal 465 — consider a named constant |
| info | dashboard/static/app.js | 123 | magic literal 16 — consider a named constant |
| info | dashboard/static/app.js | 248 | magic literal 10 — consider a named constant |
| info | dashboard/static/app.js | 249 | magic literal 24 — consider a named constant |
| info | dashboard/static/app.js | 250 | magic literal 40 — consider a named constant |
| info | dashboard/static/app.js | 423 | magic literal 180 — consider a named constant |
Codebase Map
Source file size by directory. Click a segment to zoom in, click the centre to zoom out.
Key Entities
The most-referenced declared types across the codebase. Bubble area scales with mention count; colour reflects the language. Click a bubble for details.
Entry-point fan-out
Declared types referenced from each detected entry-point file (main(), __main__, …).
Handler
Coupling Matrix
| File A | File B | Co-changes | Confidence |
|---|---|---|---|
| bin/changelog.txt | bin/version.txt | 83 | 94% |
| bin/dgc.ps1 | bin/version.txt | 68 | 82% |
| bin/dual_graph_launch.sh | bin/version.txt | 61 | 59% |
| install.ps1 | bin/version.txt | 30 | 56% |
| bin/dg.ps1 | bin/dgc.ps1 | 27 | 82% |
| bin/dg.ps1 | bin/version.txt | 27 | 82% |
| bin/graperoot.ps1 | bin/version.txt | 24 | 92% |
| bin/graperoot.ps1 | bin/changelog.txt | 23 | 88% |
| bin/dg.cmd | bin/dgc.cmd | 23 | 79% |
Import Graph
Static package-level import dependencies. Red edges indicate circular dependencies. Node size reflects fan-in. Click a node to highlight its direct neighbours.
Test Gap Map
Complex files in a codebase with low test coverage. High remediation value.
| File | Max complexity |
|---|---|
| benchmark/run_preinjection_benchmark.py | 106 |
| benchmark/generate_analysis.py | 48 |
| bin/undo_shield.py | 38 |
| benchmark/run_challenge_v3835.py | 35 |
| audit.py | 33 |
| dashboard/server.py | 30 |
| bench/codex_token_bench.py | 14 |