Commit 35f6176
feat: cognitive & cyclomatic complexity metrics (#130)
* feat: add codegraph path for A→B symbol pathfinding
Add `codegraph path <from> <to>` — BFS shortest-path search on the
call graph. Given two symbol names, finds the shortest call chain
with hop count, intermediate nodes, edge kinds, and alternate path
count. Supports --reverse, --max-depth, --kinds, --from-file/--to-file,
-T, -j, -k flags. Exposed as symbol_path MCP tool.
Impact: 4 functions changed, 3 affected
* docs: add Titan Paradigm use case, update docs with roles/co-change/path
- Create docs/use-cases/titan-paradigm.md — maps Johannes R.'s multi-agent
codebase cleanup architecture (RECON, GAUNTLET, GLOBAL SYNC, STATE MACHINE)
to codegraph commands, roadmap items, and post-LLM-integration recommendations
- Update roadmap/BACKLOG.md: mark #4 (node classification), #9 (git change
coupling), #1 (dead code), #2 (shortest path), #12 (execution flow) as DONE;
add 6 new Titan Paradigm-inspired items (#21-#26): composite audit, batch
querying, triage priority queue, change validation predicates, graph
snapshots, MCP orchestration tools
- Update README.md: add roles + co-change to features table, differentiators,
commands section, agent template, common flags, comparison table; update MCP
tool count 18 → 19
- Update docs/recommended-practices.md: update MCP tool count and tool list,
add roles/co-change/path to CLAUDE.md template and developer workflow, add
"Understand architectural roles" and "Surface hidden coupling" sections,
add co-change step to setup checklist
- Add full examples with real output for roles, co-change, and path to
docs/examples/CLI.md and docs/examples/MCP.md
- Update GitHub repo description with new capabilities
* docs: restore Architecture Refactoring phase, fix references
- Restore Phase 3 (Architectural Refactoring) to ROADMAP
- Renumber phases 4-8 and all cross-references
- Fix MCP tool count per Greptile review
* fix: correct MCP tool counts and backlog ID collisions
Address Greptile review comments on #121:
- Update MCP tool counts from 18/19 to 21 (22 in multi-repo mode)
across README, recommended-practices, dogfood skill, titan-paradigm
- Add missing execution_flow and list_entry_points to tool enumeration
- Renumber new backlog items 21-26 → 27-32 to avoid collision with
existing items 21-22
* feat: add token savings benchmark (codegraph vs raw navigation)
Adds a benchmark suite that measures how much codegraph reduces token
usage when AI agents navigate the Next.js codebase (~4k TS files).
- scripts/token-benchmark-issues.js: 5 real Next.js PRs as test cases
- scripts/token-benchmark.js: runner using Claude Agent SDK (baseline
vs codegraph MCP), with --perf flag for build/query benchmarks
- scripts/update-token-report.js: JSON → markdown report generator
- docs/benchmarks/: methodology docs and placeholder report
Impact: 21 functions changed, 7 affected
* feat: extend benchmarks with incremental builds and expanded query coverage
benchmark.js now measures no-op rebuilds, 1-file rebuilds, and query
latency (fn-deps, fn-impact, path, roles) alongside full builds.
update-benchmark-report.js renders new Incremental Rebuilds and Query
Latency sections in BUILD-BENCHMARKS.md and adds incremental/query rows
to the README performance table. All new fields are additive for backward
compatibility.
Impact: 5 functions changed, 2 affected
* ci: include version in automated benchmark commits and PRs
Extract version from benchmark result JSON and include it in branch
names, commit messages, PR titles, and PR bodies across all 4 benchmark
jobs (build, embedding, query, incremental).
* fix: update remaining 19-tool references to 21-tool in README
* docs: remove "viral" from titan paradigm LinkedIn reference
* fix: use endLine for scope-aware caller selection in nested functions
Nested/closure functions (e.g. nodeId inside exportMermaid) were
incorrectly classified as [dead] because the caller selection loop
picked the last definition where line <= call.line, creating self-call
edges that got filtered out. Now uses endLine to find the innermost
enclosing scope, so calls within an outer function correctly attribute
the outer function as caller rather than the nested function itself.
Fixes false-positive [dead] for nodeId in branch-compare.js, export.js,
and queries.js.
Impact: 1 functions changed, 17 affected
* feat: add cognitive & cyclomatic complexity metrics
Compute per-function complexity during build via single-traversal DFS
of tree-sitter ASTs: cognitive (SonarSource), cyclomatic (McCabe), and
max nesting depth. Stores results in new function_complexity table
(migration v8) and surfaces them in stats, context, explain, and a
dedicated `complexity` CLI command + MCP tool.
Adds manifesto config section with warn thresholds (cognitive: 15,
cyclomatic: 10, maxNesting: 4) seeding the future rule engine.
Phase 1 supports JS/TS/TSX; unsupported languages are skipped gracefully.
Impact: 18 functions changed, 32 affected
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>1 parent 2d79f18 commit 35f6176
11 files changed
Lines changed: 1238 additions & 0 deletions
File tree
- src
- tests
- integration
- unit
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
496 | 496 | | |
497 | 497 | | |
498 | 498 | | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
499 | 507 | | |
500 | 508 | | |
501 | 509 | | |
502 | 510 | | |
| 511 | + | |
503 | 512 | | |
504 | 513 | | |
505 | 514 | | |
506 | 515 | | |
507 | 516 | | |
508 | 517 | | |
509 | 518 | | |
| 519 | + | |
510 | 520 | | |
511 | 521 | | |
512 | 522 | | |
| |||
996 | 1006 | | |
997 | 1007 | | |
998 | 1008 | | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
| 1016 | + | |
999 | 1017 | | |
1000 | 1018 | | |
1001 | 1019 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
712 | 712 | | |
713 | 713 | | |
714 | 714 | | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
715 | 764 | | |
716 | 765 | | |
717 | 766 | | |
| |||
0 commit comments