knodin 0.7.5 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +18 -3
  2. package/benchmarks/competitors/SYNTHESIS.md +66 -0
  3. package/dist/bin/cli.js +371 -66
  4. package/dist/bin/launcher.js +16 -1
  5. package/dist/src/agent-integration.js +82 -16
  6. package/dist/src/artifact-refresh.js +2 -1
  7. package/dist/src/cli-args.js +19 -1
  8. package/dist/src/cli-model.js +28 -2
  9. package/dist/src/codeflow-replay.js +2 -1
  10. package/dist/src/compare.js +39 -0
  11. package/dist/src/competitive-constraints.js +2 -1
  12. package/dist/src/competitive-runner.js +4 -4
  13. package/dist/src/context-export.js +3 -2
  14. package/dist/src/context.js +1 -1
  15. package/dist/src/deterministic-random.js +34 -0
  16. package/dist/src/diagnostics-write-helper.js +473 -0
  17. package/dist/src/diagnostics.js +1160 -133
  18. package/dist/src/doctor.js +3 -1
  19. package/dist/src/engine/ann-hnsw.js +2 -12
  20. package/dist/src/engine/file-walker.js +8 -2
  21. package/dist/src/engine/git-history.js +12 -12
  22. package/dist/src/engine/index.js +1174 -313
  23. package/dist/src/engine/sarif-import.js +341 -0
  24. package/dist/src/engine/scip-import.js +28 -13
  25. package/dist/src/engine/source-policy.js +16 -0
  26. package/dist/src/engine/state-paths.js +175 -0
  27. package/dist/src/execution-profile.js +15 -10
  28. package/dist/src/failure-diagnosis.js +7 -1
  29. package/dist/src/graph-layout.js +173 -0
  30. package/dist/src/index-activity.js +2 -1
  31. package/dist/src/init.js +86 -45
  32. package/dist/src/lifecycle-health.js +41 -9
  33. package/dist/src/mcp-graph-worker.js +69 -0
  34. package/dist/src/mcp-reliability.js +154 -0
  35. package/dist/src/mcp-worker-supervisor.js +350 -0
  36. package/dist/src/mirror.js +290 -0
  37. package/dist/src/node-runtime.js +157 -0
  38. package/dist/src/output-compression.js +2 -1
  39. package/dist/src/output-telemetry.js +16 -11
  40. package/dist/src/progressive-evidence.js +30 -26
  41. package/dist/src/pure-compression-cli.js +4 -3
  42. package/dist/src/relationship-adapters.js +15 -8
  43. package/dist/src/release-preflight.js +13 -10
  44. package/dist/src/repair-lease.js +85 -0
  45. package/dist/src/repository-init-process.js +13 -9
  46. package/dist/src/repository-management.js +34 -4
  47. package/dist/src/response-budget.js +8 -6
  48. package/dist/src/server.js +80 -35
  49. package/dist/src/structural-fast-path.js +16 -10
  50. package/dist/src/structural-snapshot.js +6 -2
  51. package/dist/src/system-config.js +25 -2
  52. package/dist/src/tools/knodin-tools.js +142 -31
  53. package/dist/src/update-ceremony.js +9 -5
  54. package/dist/src/update-trust.js +5 -4
  55. package/dist/src/visualization.js +372 -19
  56. package/dist/src/worktree-lifecycle.js +5 -2
  57. package/docs/BEHAVIORAL-CONTRACT.md +72 -0
  58. package/docs/CLI.md +20 -1
  59. package/docs/COMPARISON.md +403 -0
  60. package/docs/COMPETITIVE-LANDSCAPE-2026-08.md +267 -0
  61. package/docs/DIAGNOSTICS.md +46 -11
  62. package/docs/HANDOFF.md +180 -0
  63. package/docs/INSTALLATION.md +21 -2
  64. package/docs/MCP.md +59 -8
  65. package/docs/PT-ACCESS-RECOMMENDATION.md +5 -7
  66. package/docs/REPOSITORIES-AND-WORKTREES.md +18 -6
  67. package/docs/SCIP-IMPORT.md +5 -0
  68. package/docs/TOKEN-OPTIMIZER-SCORECARD.md +79 -0
  69. package/docs/releases/0.5.1.md +4 -4
  70. package/docs/releases/0.8.0.md +74 -0
  71. package/docs/releases/0.8.2.md +34 -0
  72. package/package.json +17 -4
  73. package/roadmap/competitive-roadmap.md +3801 -0
  74. package/schemas/release-attestation-v1.schema.json +1 -1
  75. package/schemas/support-bundle-v2.schema.json +212 -0
@@ -0,0 +1,267 @@
1
+ # Reckon Graph — Competitive Landscape & Strategic Threat Assessment
2
+ **Date:** 2026-08-01 · **Rev 2** (post-verification) · **Subject:** `reckon-graph` v0.4.3 (Docusign / DTS-Productivity-Engineering)
3
+ **Status:** research assessment with corrections applied. Not a benchmark report. See §0 for what is verified and by whom.
4
+
5
+ ---
6
+
7
+ ## 0. Provenance and evidence discipline
8
+
9
+ This document follows the attribution rule already established in `docs/COMPARISON.md`: a claim is either **verified in this repo**, **attributed to a vendor**, **independently measured**, or **unverified**. Rev 2 applies corrections from a verification pass run in a networked environment.
10
+
11
+ ### Four classes of claim, marked throughout
12
+
13
+ | Mark | Meaning |
14
+ |---|---|
15
+ | **[repo]** | Read directly from the `reckon-graph` checkout. Highest confidence. |
16
+ | **[independent]** | Measured by a third party with published methodology (JetBrains, arXiv preprints). |
17
+ | **[vendor]** | The vendor's own claim. Not reproduced. |
18
+ | **[survey]** | Observed in this research pass. **Absence of a finding is not proof of absence in the market.** |
19
+
20
+ ### Network limitation — scoped correctly
21
+
22
+ The GitHub REST API was **unreachable from this research environment**, returning HTTP 403 with an explicit sandbox-policy body (`"GitHub access to this repository is not enabled for this session"`) — a network policy on my side, **not a GitHub outage and not a universal condition**. Rev 1 stated the caveat as though it were a fact about the world. It was a fact about my environment. A subsequent verification pass from a networked environment did reach the API.
23
+
24
+ **Star snapshot — two sources, neither independently confirmed by me:**
25
+
26
+ | Repository | Rev 1 (page reads / aggregators) | Verification pass, 2026-08-01 (live API) |
27
+ |---|---|---|
28
+ | `colbymchenry/codegraph` | 21,913 / 59.7k (disputed) | **63,942** |
29
+ | `Graphify-Labs/graphify` | 30.6k / 76k (disputed) | **100,041** |
30
+ | `Cranot/roam-code` | ~460 | **502** |
31
+ | `GlitterKill/sdl-mcp` | ~301 | **457** |
32
+ | `aovestdipaperino/tokensave` | ~249 | **523** |
33
+ | `sverklo/sverklo` | ~76 | **76** |
34
+ | `sdsrss/code-graph-mcp` | 44 | **60** |
35
+
36
+ > ⚠️ **Two of these warrant a human sanity check before external use.** A 100,041-star count would place a niche code-graph MCP tool in roughly the top tier of all GitHub repositories, and 63,942 for a repo created in January 2026 is an extraordinary four-month trajectory. Both may well be correct — the AI-tooling hype cycle produces real outliers — but I could not confirm either, and Rev 1's assertion that the *lower* codegraph figure was "more credible" was an unsupported guess and is withdrawn. **Star counts move daily; timestamp any figure you reuse.**
37
+
38
+ The separate warning about **AI-generated comparison spam in this category remains valid and unretracted** — aggregator blogs published figures differing from each other by 10–1000× (one checked case: `sdsrss/code-graph-mcp` cited at 16,000, actual double digits). That warning was about source quality, not API reachability.
39
+
40
+ ### Corrections applied in Rev 2
41
+ Codebase-Memory paper figures (transposition + a fabricated detail) · MCP operation count (13 → 19) · cross-substrate impact demoted from capability to opportunity · all market-wide superiority claims rescoped to the surveyed set · TACO characterization softened and "peer-reviewed" removed · Amazon Q retirement narrowed · Claude Code "absorbed nothing" narrowed · Graphify version/license refreshed · vendor-percentage generalization narrowed.
42
+
43
+ ---
44
+
45
+ ## 1. What Reckon Graph is **[repo]**
46
+
47
+ **A local, MIT-licensed code-intelligence MCP server that fuses four normally-separate jobs over one fresh SQLite graph, behind a single operation-routed MCP tool.**
48
+
49
+ | Layer | Detail |
50
+ |---|---|
51
+ | **Deployment** | One local Node.js 24+ process. No account, hosted index, credential flow, source egress, or mandatory database/vector daemon. `.reckon/db.sqlite` per checkout; shared MiniLM ONNX model in the user cache. |
52
+ | **MCP surface** | **Exactly one tool** (`reckon`) with **19 operation values** — verified in `src/context.ts:17-36` and `src/tools/reckon-tools.ts:216`: `explain`, `review`, `map`, `search`, `query`, `prs`, `context`, `wiki`, `docs`, `doctor`, `pack`, `compress`, `status`, `wait`, `worktrees`, `repair`, `repositories`, `system`, `telemetry`. *(Rev 1 listed 13, taken from the README rather than source.)* |
53
+ | **Core jobs** | `explain` (edit-ready verbatim source + call paths + blast radius) · `review` (risk-scored diff context, four explicit scopes) · `map` (Louvain communities + hubs + betweenness bridges) · `context`/`search`/`pack`/`compress` (bounded retrieval and export). |
54
+ | **Distinctive contracts** | Serialized **`responseBudget`** on every operation — byte/token/item limits, serialized size, truncation state, totals, continuation instruction; deterministic 4-bytes-per-token estimate, tested in `src/__tests__/unit/response-budget.spec.ts:35`. Explicit availability states (`no-match`, `not-initialized`, `empty-index`, `repair-needed`, `indexing`, `lifecycle-degraded`) that fail closed. Per-query freshness probe measured at **~30–50ms**, honestly qualified in `docs/COMPARISON.md:17`. |
55
+ | **`compress` / `compress diagnose`** | Bounded, recoverable compression of build/test output under hard line + content-byte budgets, preserving exit metadata and detected signals with exact omission reporting — then mapping a retained failure back through the graph to owning symbols, tests, callers, and bounded source. |
56
+ | **Parsers** | TS/JS, Python, Java, C#, **Apex**, SQL/PLSQL, Prisma, XML; structural indexers for **Salesforce metadata, Terraform/HCL, Dockerfile, dbt manifests, Workday Studio XML, LSIF**. Gaps: Go, Rust, PHP, Ruby, Kotlin, Swift, Bash, PowerShell — per `docs/LANGUAGE-SUPPORT.md`. |
57
+ | **Scale-out** | `reckon repos discover/init/status/doctor`, `reckon system`, `reckon.yaml`. Live 61-repository bounded certification recorded in `roadmap/competitive-roadmap.md:100`. |
58
+ | **Release posture** | npm + Homebrew tap + digest-pinned GHES assets. Signed-update machinery implemented; ceremony/drills open as C62–C67. |
59
+
60
+ ---
61
+
62
+ ## 2. The four-way squeeze
63
+
64
+ | Category | Reckon surface | 2026 pressure |
65
+ |---|---|---|
66
+ | Symbol navigation | `explain`, `query`, `search` | 🔴 **Commoditized.** Many free local OSS servers. Serena still strongest via LSP. |
67
+ | Change impact & review | `review`, `impact`, `tests_for`, `prs` | 🔴 **Squeezed both ends.** Free OSS ships risk-scored diff review; Greptile and CodeRabbit give away SaaS review at the free tier. |
68
+ | Architecture mapping | `map`, `community`, `flows`, `wiki`, `visualize` | 🟠 **Being absorbed into products teams already buy.** SonarQube shipped Architecture (beta) inside its **$34/mo Team plan** [vendor]. DeepWiki is free for public repos. |
69
+ | Retrieval & context | `context`, `pack`, `compress` | 🟢 **Bifurcated.** Packers are symbol-blind; graph servers never see a build log. **No tool in the surveyed set crosses that line.** |
70
+ | **Platform substrates** *(not in the README taxonomy)* | Apex, SF metadata, Terraform, Workday XML | 🟢 **Least contested surface found**, and the one the docs undersell — `LANGUAGE-SUPPORT.md` frames it as a *limitations* matrix. |
71
+
72
+ ---
73
+
74
+ ## 3. Known competitors — what moved
75
+
76
+ | Tool | Status change (2026) | Implication |
77
+ |---|---|---|
78
+ | **codegraph** (colbymchenry) | 🔴 **Converged on the one-tool thesis.** Lists `codegraph_explore` as its single default MCP tool with seven others functional-but-unlisted behind `CODEGRAPH_MCP_TOOLS`. Hosted-platform waitlist opened. Stars: see §0 snapshot. | **"Single operation-routed MCP tool" is no longer differentiating.** It is a shared design pattern. |
79
+ | **codebase-memory-mcp** | 🔴 Now ships **Louvain community detection** and `detect_changes` (git diff → affected symbols with risk classification). **Published preprint** — arXiv:2603.27277, verbatim from the abstract: *"parsing **66 languages**… Evaluated across **31 real-world repositories**, Codebase-Memory achieves **83% answer quality versus 92%** for a file-exploration agent, at **ten times fewer tokens** and **2.1 times fewer tool calls**."* [independent, preprint — not peer-reviewed] | Two Reckon headline features replicated in a tracked competitor — **with a published methodology Reckon has not matched.** *(Rev 1 said "31 languages, 12 question categories." Both wrong: figures transposed, and "12 question categories" does not appear in the paper.)* |
80
+ | **Graphify** | YC S26. **v0.9.31 (published 2026-07-30), Apache-2.0** per repository API. Leiden communities; `EXTRACTED`/`INFERRED`/`AMBIGUOUS` confidence tags; multi-modal ingest. Star figure disputed — see §0. | Its confidence-tier model is the closest analogue found to Reckon's evidence labeling. |
81
+ | **GitNexus** | PolyForm Noncommercial; migrated to LadybugDB; 17 MCP tools; enterprise SaaS tier. | License remains the cleanest wedge here. Unchanged. |
82
+ | **grepai** | Last release v0.35.0 (Mar 2026) — ~5 months quiet. | Deprioritize. |
83
+ | **Serena** | Reference LSP-over-MCP implementation; no token budgets. | Unchanged: better freshness and compiler accuracy, no graph analytics. |
84
+ | **Repomix** | v1.17.0 (Jul 2026). Tree-sitter "Code Compression" (**[vendor]** ~70% reduction), `--include-diffs`/`--include-logs`, `--token-count-tree`, `--split-output`, Agent Skills generation, two CVE fixes. ~26k★ / ~255k npm downloads/mo. | **`pack` alone is a commodity.** Repomix converged on nearly Reckon's `pack` feature set at far greater distribution. |
85
+ | **Aider repo-map** | Algorithm essentially unchanged since 2023. | Still the reference design; still not an MCP surface. |
86
+
87
+ ---
88
+
89
+ ## 4. New entrants not tracked in-repo
90
+
91
+ ### Tier 1 — direct architectural twins
92
+
93
+ | Tool | Threat | Why |
94
+ |---|---|---|
95
+ | **Sverklo** (76★, MIT, TS) | 🔴 Critical | **Closest competitor found.** Independently arrived at Reckon's *exact* stack — SQLite + `sqlite-vec` + local `all-MiniLM-L6-v2` ONNX — and its analytics set: `review_diff` risk-scores by symbol importance × coverage × churn; `audit` finds god nodes and hub files; `ctx_peek`/`ctx_slice` slice context. Adds bi-temporal memory Reckon lacks. **Its only clear weakness vs Reckon is 37 flat MCP tools.** [vendor] 180-task benchmark, F1 0.58 vs grep 0.34. |
96
+ | **sdl-mcp** (457★, source-available) | 🔴 Critical | Ships an explicit **gateway mode (6 tools)** alongside 38 flat ones — attacks the one-tool differentiator directly. Its **"Iris Gate Ladder"** (four-rung context escalation with proof-of-need gating before raw source is released) is a more legible, productized articulation of Reckon's response-budget idea. |
97
+ | **roam-code** (502★, Apache + open-core) | 🟠 High | `preflight` = blast radius + tests; `critique` consumes `git diff`; PageRank reranking (explicitly rejects embeddings); signed exportable index bundles. **145 MCP tools** — the best foil for the one-tool argument. Uniquely detects algorithmic anti-patterns (O(n²), N+1). |
98
+ | **sdsrss/code-graph-mcp** (60★, Rust) | 🟠 High | SQLite + `sqlite-vec`, BM25+vector RRF, optional local Candle embeddings, **BLAKE3 Merkle incremental reindex**, dead code, impact analysis with risk classification, explicit "context compression for LLM token budgets." **A double-digit-star project matches the capability list.** |
99
+ | **Code-Graph-RAG** (~2.3k★, MIT, Python) | 🟠 High | Restored and active at v0.0.535 after its GitHub-account outage. Its opt-in `READS_FROM`, `WRITES_TO`, and `FLOWS_TO` graph models environment variables, files, databases, sockets, network endpoints, and standard streams across nine language registries. This is a real gap versus Knodin's bounded TS/JS statement flow, but its Memgraph + Docker + optional Qdrant/model stack conflicts with Knodin's compact local architecture. The analysis is conservatively intra-procedural plus one argument/return handoff, not path-sensitive, and source-order limited across files. C78's local disposable prototype retained 100% precision but reached only 62.5% recall on its labeled TS/JS oracle, so Knodin retained C8 unchanged rather than persisting a partial static reachability graph. |
100
+
101
+ ### Tier 2 — adjacent, high momentum
102
+
103
+ **CocoIndex** (~10.2k★) — incremental pipeline framework now shipping a code MCP with AST-aware incremental index, call graph, blast radius; per-row provenance, hash-of-code invalidation. **The most credible competitor found to Reckon's freshness/reconciliation story.** · **Semble** (~5.7k★, MIT) — 2 MCP tools, **static Model2Vec embeddings, no transformer**; [vendor] 250ms full index, 1.5ms query, NDCG@10 0.854. · **tokensave** (523★, Rust) — composite code-health score (acyclicity, Gini, modularity, DSM); **per-branch graph DBs with cross-branch diff**, no equivalent in Reckon. · **Axon** (~709★, stalled Mar 2026) — Leiden communities, symbol-level branch diffing, **change-coupling from 6 months of git history**; on archived KuzuDB. · **RTK** — PreToolUse-hook binary compressing Bash output across 15 agents; **closest competitor to `compress`**, and independently benchmarked — see §5. · **build-output-tools-mcp** — the only other tool found with **artifact-ID drill-back** from compressed build output, but LLM-summarized (non-deterministic), no hard budget, no omission accounting, and drill-back returns raw log text rather than owning symbols.
104
+
105
+ **CodeFlow** (~3.7k★, MIT) — client-side interactive architecture map with
106
+ dependency/blast-radius views and raw JSON export. Its README explicitly calls
107
+ dependency resolution heuristic and warns that dynamic imports and runtime
108
+ renames may be missed. A LinkedIn summary further claims that individual edges
109
+ identify whether they came from Tree-sitter, a language parser, or regex, but
110
+ that finer per-edge extractor identity was not found in the current repository
111
+ or README and remains unverified. Knodin already returns edge provenance,
112
+ confidence, exact-versus-heuristic labels, source evidence, and source lines;
113
+ C77 adds a like-for-like replay to test communication and export fidelity rather
114
+ than assuming a product gap.
115
+
116
+ ### Tier 3 — ecosystem facts
117
+ 🔴 **Kuzu is dead** — archived without notice Oct 2025; an EC filing revealed an Apple acqui-hire. Successors: LadybugDB, FalkorDB Lite, Lance Graph. **Reckon's plain-SQLite choice is now a concrete talking point.** · 🟠 **SCIP moved to independent open governance (Mar 2026)** with a Meta/Uber/Sourcegraph steering committee. It is the durable interchange format and the precision upgrade path competitors are taking. **Reckon supports LSIF, which SCIP supersedes — a closable gap.**
118
+
119
+ ### Dead / stalled
120
+ er77/code-graph-rag-mcp (archived) · mcp-language-server (last release May 2025) · VectorCode · code2prompt · files-to-prompt · **CodeSee** (→GitKraken 2024, sunset) · **Structure101** (→Sonar Oct 2024, explicitly no longer sold).
121
+
122
+ ---
123
+
124
+ ## 5. The commercial tier restructured
125
+
126
+ | Player | 2026 state | Egress | Floor |
127
+ |---|---|---|---|
128
+ | **Sourcegraph** | Split from **Amp** into separate companies (Dec 2025). **Cody Free/Pro deleted.** MCP server GA (Feb 2026) with SCIP-precise navigation; **Code Finder** [vendor] 2.19× faster, up to 40% fewer tokens than agents searching locally. | Self-hosted = none | **$16K/yr** |
129
+ | **Augment** | Pivoted to **Cosmos** orchestration; killed completions Mar 2026; individual plans eliminated. Context Engine survives ([vendor] 33% fewer tokens). | SaaS, indexed on their infra | $100/mo flat |
130
+ | **Greptile** | $25–30M raised, Benchmark-led. Explicit graph-based context → impact analysis. MCP server. Reads `CLAUDE.md`. | Self-host incl. air-gapped (Ent.) | Free tier / $30 seat |
131
+ | **Qodo** | **DeepCodeBench** [vendor] (1,144 PR-derived questions): Qodo 80% fact recall vs Claude Code 64%, Gemini CLI 45%. | **On-prem supported** | ~$0.012/credit |
132
+ | **CodeRabbit** | [vendor] $40M ARR, ~700% YoY, 8,000+ paying customers. Weakest graph story — no published architecture. | SaaS; self-host Ent. only | Free / $24 user |
133
+ | **Cursor** | Trained its **own embedding model** on agent session traces: [vendor] +12.5% accuracy, +2.6% code retention on 1,000+ file repos. **Explicitly says it does not replace grep.** | SaaS, server-side chunking | $20/mo |
134
+ | **Windsurf** | Cognition acquired the remnant; **became Devin Desktop (Jun 2026)**. Cascade retired; Devin Local rewritten in Rust. | SaaS + VPC Ent. | Free / $20 |
135
+ | **Amazon Q Developer** | **IDE plugins and paid subscriptions** are being retired — new signups blocked May 2026, support ends Apr 30 2027, replaced by **Kiro**. **AWS explicitly states Q Developer in the AWS console and other first-party experiences is unaffected.** *(Rev 1 said "being retired" flatly — overbroad.)* | — | — |
136
+ | **DeepWiki** | Free, no auth, every public GitHub repo. MCP server. | Hosted only | **$0** |
137
+
138
+ > **The wedge, precisely.** In the surveyed set, nobody paid competes below $30/seat except the agent vendors themselves. **Reckon's "free + local + no-egress" wedge holds against the commercial tier** — and is gone against OSS, where it is the baseline every entrant leads with.
139
+
140
+ ### Adjacent tiers
141
+ Every DSM/architecture vendor MCP-enabled within ~6 months: Lattix 2026.0, NDepend (Feb 2026, open-sourced), CAST Imaging ($10.5K–$810.8K/yr), vFunction 4.5, and **Moderne** (local stdio MCP, Apr 2026 — auto-configures Claude Code/Cursor/Windsurf; [vendor] a Java 8→25 migration going 61M→30k tokens). **"Local graph + MCP server" became a checkbox in H1 2026.**
142
+
143
+ **SonarQube is the most dangerous long-tail threat:** Architecture (beta) + MCP GA + AI Code Assurance inside a **$34/month** product a large share of enterprise teams — including Docusign, per this repo's own `sonar-project.properties` — already license.
144
+
145
+ ### Platform substrates — leg by leg
146
+
147
+ | Substrate | Served? | Assessment |
148
+ |---|---|---|
149
+ | **Apex source graph** | 🟢 Open | Salesforce Code Analyzer v5 + Graph Engine is *violation-shaped*, not navigable — **no caller/reference API found in the surveyed set**. SFGE remains Developer Preview and its per-entry-point timeout was cut 15 min → 30 s, with Salesforce conceding "some complex code violations may be missed." |
150
+ | **SF metadata graph** | 🟡 Contested | Elements.cloud, Salto, Panaya, Copado Agentia, Gearset Org Intelligence all claim it. **Every vendor examined in this pass requires live-org credentials**; none was found operating from a local checkout with no org connection. Window: ~12–18 months. |
151
+ | **Terraform / HCL** | 🟢 Largely open | **No local-checkout Terraform dependency analyzer for agents found in the surveyed set.** HashiCorp's official Terraform MCP server is registry/HCP-oriented per its own reference docs. `terraform graph` emits DOT with no agent surface. |
152
+ | **dbt** | 🔴 Solved | **Do not lead with dbt.** Official `dbt-mcp` ships local *and* remote **column-level lineage**. Reading `manifest.json` gets node-level lineage dbt already exposes better. |
153
+ | **Workday Studio XML** | 🟡 Open | **No Studio-XML static analyzer found in this pass.** Workday's June 2026 agent launch is about *building* agents, not *understanding* existing assemblies. Tiny, shrinking market. |
154
+
155
+ > **Cross-substrate impact is an opportunity, not a shipped capability. [corrected]**
156
+ > Reckon demonstrably indexes Terraform, dbt manifests, Salesforce metadata/Apex, and Workday inputs **independently**. Rev 1 listed *"Terraform → dbt → Salesforce field → Apex trigger"* cross-substrate resolution in the implemented-differentiator matrix. **A verification pass found no implementation, test, or documentation establishing that chain.** Correct framing: *Reckon has the ingredients for cross-substrate analysis; a demonstrated end-to-end cross-substrate path remains an opportunity* — and would need a checked-in replay before it appears in any external claim. This matters because `CLAUDE.md` explicitly forbids describing the engine as planned or almost-done.
157
+
158
+ ---
159
+
160
+ ## 6. The research that should change the pitch
161
+
162
+ **Three primary studies, supported by two additional preprints.** *(Rev 1 said "three studies" and then listed five.)*
163
+
164
+ **① "Token Reduction Is Not Cost Reduction" — arXiv:2607.12161 (Jul 2026) [independent].** 2,908 Claude Code runs, 103 tasks, 7 repos, 3 models. Evaluated RTK, RTK-ML, Headroom, plus lexical/embedding/structural retrieval.
165
+ - Removing **38.4% of tool-output tokens produced a +6.8% cost *increase*** (95% CI [+2.8, +11.3]).
166
+ - Token reduction correlated with cost change at **r = 0.15** — essentially zero.
167
+ - **Prompt cache ≈ 87% of reconstructed cost.** Compressing uncached output attacks a small slice *while invalidating the cache.*
168
+ - **Compression destroyed verbatim edit anchors: patch application fell 27/40 → 15/40.**
169
+
170
+ **② JetBrains independent RTK trial (Jul 2026) [independent].** Pre-registered, paired A/B, 86 tasks, 425 billed trials. Low effort: **+7.6% cost** (p=0.004). High effort: ~0%. Output quality statistically equivalent. **RTK's own analytics reported "96.2M tokens saved" while the bill went up.**
171
+
172
+ **③ ContextBench — arXiv:2602.05892 (Feb 2026) [independent].** 1,136 tasks, 66 repos, 8 languages, human-annotated gold contexts. Headline: *"sophisticated agent scaffolding yields only marginal gains in context retrieval."* **Adverse to the entire category, Reckon included.**
173
+
174
+ *Supporting:* **TACO** (arXiv:2604.19572) — *"A Self-Evolving Framework for Efficient Terminal Agents via Observational Context Compression."* Learns compression rules from execution trajectories and preserves error/failure-signal outputs unchanged — the same invariant as Reckon's "preserve detected diagnostics." **Reports task-dependent token reductions with maintained or improved success rates; the abstract was not machine-readable at verification time, so no specific percentage is quoted here, and it is a preprint, not peer-reviewed.** *(Rev 1 characterized it as "peer-reviewed" with a clean "~10% per step" figure — both overstated.)* · **"Notation Matters"** (arXiv:2605.29676) — TOON/TRON encodings buy 18–27% at 9–14pp accuracy cost; Markdown/JSON/XML is the right call.
175
+
176
+ > **What to do with this.** The 27/40→15/40 patch-application collapse is a **correctness** failure caused by lossy, unrecoverable compression — the exact failure mode that bounded, recoverable, exact-omission-accounted compression is designed to prevent. That is a falsifiable, benchmark-backed pitch. A percentage is not. **Many surveyed vendor token-reduction claims are self-measured against undisclosed baselines** — that is a characterization of the sampled set, not a universal law *(Rev 1 said "every," which the report's own independent citations contradict)*.
177
+ >
178
+ > Two facts make `responseBudget` load-bearing: **Claude Code's ~25K-token tool-result ceiling** is documented in `anthropics/claude-code#45770` — *an issue report, not a formal product contract* — and the **MCP spec has no standardized response size limit** (open discussion `modelcontextprotocol#2211`). Every native truncation mechanism surveyed is destructive with no recovery handle.
179
+
180
+ ---
181
+
182
+ ## 7. Differentiator erosion matrix
183
+
184
+ Rescoped: **✓ holds** now means *"no equivalent found in the surveyed set"*, not market-wide uniqueness.
185
+
186
+ | Claimed differentiator | Status | Detail |
187
+ |---|---|---|
188
+ | Single operation-routed MCP tool | ✗ **Gone** | codegraph (1 default tool), sdl-mcp (gateway mode), pathfinder (7), Semble (2), probe (4). **Retire as the headline.** |
189
+ | Local, no-auth, no-egress | ✗ **Baseline** | Nearly every OSS entrant leads with it. Still a hard moat vs. every commercial player except self-hosted Sourcegraph, self-hosted Greptile, on-prem Qodo. |
190
+ | Diff-aware review with risk scoring | ✗ **Gone** | Sverklo `review_diff`, codebase-memory-mcp `detect_changes`, roam `preflight`/`critique`, jCodeMunch, sdsrss, Greptile. |
191
+ | Louvain communities / subsystem mapping | ✗ **Gone** | codebase-memory-mcp, Axon & Graphify (Leiden), SonarQube Architecture, DeepWiki. |
192
+ | Local ONNX embeddings · SQLite graph store | ✗ **Gone** | Sverklo uses the *identical* model on the identical stack. Semble's Model2Vec is faster still. |
193
+ | Context packing (`pack`) | ✗ **Gone** | Repomix, at far greater distribution, with Tree-sitter compression, diff scopes, split output, token trees. |
194
+ | Hub / bridge betweenness centrality | ~ **Partial** | roam (PageRank), Sverklo `audit`, tokensave (Gini/DSM), Axon. **True betweenness specifically remains uncommon in the surveyed set.** |
195
+ | Truthful serialized response budgets | ~ **Partial — best remaining graph claim** | sdl-mcp's Iris Gate Ladder is the only close analogue found, and it is more legible. Others offer `limit`/`offset` — pagination, not a budget. **No surveyed MCP server emits truncation state + continuation instruction.** |
196
+ | Explicit availability / freshness states | ✓ **No equivalent found** | `repair-needed`, `lifecycle-degraded`. Surveyed graph servers index and go quiet; CocoIndex has provenance but no fail-closed availability contract. |
197
+ | Recoverable bounded command-output compression | ✓ **No equivalent found** | RTK: bounded, partial recovery, no symbol drill-back. build-output-tools-mcp: recoverable but LLM-summarized. Headroom: returns the original chunk, not symbols. |
198
+ | `compress diagnose` — failure → owning symbols / tests / callers / source | ✓ **No equivalent found in the surveyed set** | The surveyed landscape is bifurcated: log compressors are symbol-blind; code-graph servers never see a build log. *(Rev 1 said "UNIQUE" — withdrawn as unprovable.)* |
199
+ | Apex + SF metadata from a local checkout, no org credentials | ✓ **No equivalent found** | Every Salesforce metadata vendor examined requires a live org connection. |
200
+ | ~~Cross-substrate impact~~ | ⚠️ **REMOVED — opportunity, not capability** | **No implementation, test, or documentation found establishing the Terraform → dbt → SF field → Apex chain.** Must not appear as a current capability until a checked-in replay demonstrates it. |
201
+
202
+ > **Honest summary.** Every *individual* graph feature is replicated in free OSS. What remains uncommon in the surveyed set is **(a)** the combination in one process — no single competitor found has all six of gateway + budgets + diff-review + communities + centrality + local embeddings; **(b)** the contracts — budget truthfulness, fail-closed availability, exact omission accounting, all verifiable in-repo; and **(c)** substrate coverage. **(a) is a race. (b) and (c) are the defensible ground** — and (b) is the only one backed by checked-in tests today.
203
+
204
+ ---
205
+
206
+ ## 8. Ranked threat assessment
207
+
208
+ | # | Threat | Severity | Horizon | Why |
209
+ |---|---|---|---|---|
210
+ | 1 | **Generic code-graph floor collapsed to $0** | 🔴 Critical | Now | codegraph, Sverklo, sdsrss, CodeGraphContext, roam all ship free, local, MCP-native graphs with impact analysis. |
211
+ | 2 | **Competitors published methodology; Reckon hasn't** | 🔴 Critical | Now | codebase-memory-mcp has a preprint with a reproducible protocol; Qodo has DeepCodeBench. Methodology is the scarcest asset in this market — and Reckon's replay harness already exists to produce it. Self-inflicted. |
212
+ | 3 | **SonarQube absorbs architecture mapping into $34/mo** | 🟠 High | 6–12 mo | In a product Docusign already runs. The internal adoption argument gets harder. |
213
+ | 4 | **Sverklo-class convergence** | 🟠 High | 3–9 mo | An independent project reached the same stack and analytics set. Feature-level differentiation has a short half-life. |
214
+ | 5 | **LSIF-only while SCIP takes over** | 🟠 High | 6–12 mo | Concrete and closable. |
215
+ | 6 | **Salesforce metadata window closing** | 🟡 Medium | 12–18 mo | Salesforce ships DX MCP toolsets monthly; Copado shipped a Context Hub Apr 2026. |
216
+ | 7 | **Free SaaS review from Greptile / CodeRabbit** | 🟡 Medium | Now | `review` is the most contested capability Reckon has. |
217
+ | 8 | **ContextBench's "bitter lesson"** | 🟡 Medium | Structural | Category ceiling may be lower than assumed. Argues for narrow, provable claims. |
218
+ | 9 | **Agent-native absorption** | 🟢 Low-Med | 12–24 mo | Asymmetric — see below. |
219
+ | 10 | **Indexing-cost undercut (Model2Vec)** | 🟢 Low | 12 mo | Onboarding-friction perception, not correctness. |
220
+
221
+ ### On absorption — narrowed
222
+
223
+ **Semantic retrieval over a single repo is being absorbed. Precise, persistent, cross-repo symbol graphs are not.**
224
+
225
+ *For:* Cursor built and shipped its own embedding model default-on. GitHub bundles Copilot Spaces + repo overview + code review inside the seat price. Gemini Code Assist Enterprise indexes private repos. DeepWiki is free for public repos.
226
+
227
+ *Against:* **Neither Claude Code nor Codex documents a persistent repository index** — Claude Code's changelog through Jul 2026 shows no codebase-indexing entries, and reporting indicates Anthropic removed an early local vector DB in favor of agentic search. *(Rev 1 said they had "absorbed nothing" — "no persistent repository index documented" is the defensible version; absence of documentation is not proof of absence.)* Sourcegraph's CodeScaleBench [vendor]: Sonnet 4.6 + Sourcegraph MCP at 0.698 / $1.02 per quality point vs a frontier model with no retrieval at 0.568 / $1.83. Every vendor standardized on **MCP as the seam**.
228
+
229
+ > **Conclusion: target Claude Code and Codex users, not Cursor users.** `reckon init` already configures Claude Code, Codex, Gemini CLI, and Antigravity — that targeting is correct and should be explicit in the positioning.
230
+
231
+ ---
232
+
233
+ ## 9. Recommendations
234
+
235
+ ### Reposition
236
+ 1. **Retire "single operation-routed MCP tool" as the headline.** Keep it as a design fact; keep roam-code's 145 tools as the foil.
237
+ 2. **Lead with the compression↔graph join.** `compress diagnose` has no equivalent in the surveyed set and is currently buried in README paragraph 2.
238
+ 3. **Reframe "no token-percentage claims" from caveat to pitch.** Cite arXiv:2607.12161 and the JetBrains RTK trial. Lead on determinism, exact omission accounting, preserved edit anchors, recoverability.
239
+ 4. **Promote the substrate story out of the appendix** — but describe it as *coverage*, not as a demonstrated cross-substrate chain. Drop dbt from the lead.
240
+ 5. **Name the target agent explicitly:** Claude Code and Codex.
241
+
242
+ ### Build
243
+ 6. **Publish the benchmark.** Highest ROI available. `bench:competitive`, the replay harness, and `benchmarks/evaluations/` already exist; codebase-memory-mcp's protocol (31 repos, 66 languages, quality-vs-tokens curve) is an adaptable template.
244
+ 7. **Add SCIP import alongside LSIF.** Mechanically small, strategically disproportionate.
245
+ 8. **Run a live bake-off against Sverklo** — same bar already applied to Serena and claude-context.
246
+ 9. **Build the cross-substrate replay** — if the Terraform → dbt → SF → Apex chain is the strategic bet, it needs a checked-in oracle before it can be claimed at all. Currently it is the largest gap between the story and the evidence.
247
+ 10. **Add git-history signals to `review`** (change-coupling, churn-weighted risk).
248
+ 11. **Evaluate Model2Vec vs MiniLM ONNX**, given R44 already found batching made indexing worse.
249
+
250
+ ### Watch
251
+ **Moderne** (closest strategic overlap in the commercial tier) · **SonarQube Architecture** (commoditization vector for `map`) · **sdl-mcp's Iris Gate Ladder** (better articulation of the budget idea) · **`modelcontextprotocol#2211`** (if the spec standardizes budgets, Reckon should be cited as prior art rather than made redundant).
252
+
253
+ ---
254
+
255
+ ## Appendix — verification register
256
+
257
+ | Claim class | Confidence | Note |
258
+ |---|---|---|
259
+ | Reckon capability set, 19 operations, `responseBudget` contract, ~30–50ms probe, 61-repo certification | **High [repo]** | Read from source; operation enum confirmed at `src/context.ts:17-36` |
260
+ | Cross-substrate impact chain | **NOT SUPPORTED** | No implementation, test, or doc found. Removed from the matrix. |
261
+ | arXiv figures (2607.12161, 2602.05892, 2603.27277) | **High [independent]** | Transcribed from abstracts; preprints, not peer-reviewed |
262
+ | TACO (2604.19572) | **Low** | Abstract not machine-readable at verification time; no figure quoted |
263
+ | Star counts | **Unconfirmed by me** | Two sources in §0; GitHub API blocked from this environment. Two figures flagged as extraordinary. **Timestamp anything you reuse.** |
264
+ | Vendor claims and percentages | **Attributed only** | Many self-measured against undisclosed baselines |
265
+ | Commercial pricing | **Med-High** | Public pricing pages; enterprise floors directional |
266
+ | Acquisitions / EOL | **High** | Press releases and vendor statements; Amazon Q narrowed to IDE plugins + paid subscriptions |
267
+ | "No equivalent found" statements | **Survey-scoped** | Bounded by what this pass examined. **Not market-wide nonexistence.** |
@@ -8,7 +8,8 @@ service.
8
8
  ```bash
9
9
  knodin diagnostics enable --retention-days 14
10
10
  knodin diagnostics status
11
- knodin diagnostics collect --since 24h
11
+ knodin diagnostics preview --since 24h
12
+ knodin diagnostics archive --since 24h
12
13
  knodin diagnostics inspect .knodin/diagnostics/knodin-diagnostics-….json.gz
13
14
  knodin diagnostics clear
14
15
  knodin diagnostics disable
@@ -22,15 +23,35 @@ environment, username, repository path, or source paths. Records are stored in
22
23
  `.knodin/diagnostics/events.jsonl`, mode `0600`, capped at 500 events, and
23
24
  pruned to the configured 1–365 day retention window.
24
25
 
25
- `collect` runs local installation and deep graph diagnostics and combines their
26
- redacted results with recent failure envelopes, metadata-only telemetry when
27
- present, and at most 64 KiB/200 lines from the lifecycle indexer log. The
28
- default collection window is 24 hours; `--since` accepts hours or days. Bundle
29
- output must remain inside the repository and cannot traverse a symlink.
26
+ `preview` runs local installation and deep graph diagnostics and returns the
27
+ exact allowlisted payload that `archive` writes. (`collect` remains a compatible
28
+ alias for `archive`.) The default window is 24 hours; `--since` accepts hours or
29
+ days. Bundle output must remain inside the current checkout and cannot traverse
30
+ a symlink. Linked worktrees therefore retain separate trace journals and
31
+ archives even when they share Git objects.
30
32
 
31
- The bundle is gzip-compressed JSON, written mode `0600`, and includes a privacy
32
- manifest, explicit omissions, and a redaction count. `inspect` validates the
33
- manifest and a 10 MiB compressed-size ceiling before returning its contents.
33
+ Preview persists a private, content-addressed snapshot and returns its
34
+ `previewId`. Pass `--preview-id <id>` to `archive` to write those exact inspected
35
+ contents without recollecting timestamps or health state. The checkout retains
36
+ at most eight previews, seven days, and 2 MiB in aggregate; older or excess
37
+ entries are pruned inside two alternating private store slots after each
38
+ preview. Each slot is capped at 1 MiB, preserving one prior valid generation
39
+ while keeping the aggregate at 2 MiB. Retrieval treats both generations as one
40
+ eight-preview window. Symlinks are never followed.
41
+
42
+ Private diagnostic writes use a short-lived local helper bound to the validated
43
+ destination parent. The helper proves the parent device and inode with a random
44
+ nonce before knodin sends any payload bytes, then bounded-writes with
45
+ no-follow/exclusive descriptors, fsyncs, and returns an identity-bound receipt.
46
+ Malformed, crashed, displaced, or overdue helpers fail closed; there is no
47
+ pathname-write fallback and no network activity.
48
+
49
+ The schema-v2 bundle is gzip-compressed JSON, written mode `0600`, and includes
50
+ a human report plus logical runtime, health, repository-scale, MCP-trace, and
51
+ failure files. Its manifest names every logical file and field, exact UTF-8 byte
52
+ size, retention rule, explicit-allowlist policy, omissions, and unavailable
53
+ sections. `inspect` validates the manifest and compressed/uncompressed bounds
54
+ before returning its contents.
34
55
  Users should inspect the bundle before attaching it to Jira, GitHub, email, or
35
56
  another support channel. knodin does not transmit it.
36
57
 
@@ -41,5 +62,19 @@ Run `clear` when deletion is intended.
41
62
 
42
63
  Diagnostics are evidence, not runtime-causality proof. Message fingerprints can
43
64
  group identical sanitized failures but cannot reconstruct the original message.
44
- Redaction is defense in depth; users remain responsible for inspecting an
45
- artifact before sharing it outside their organization.
65
+ The default bundle does not pass arbitrary doctor, graph, telemetry, lifecycle,
66
+ or future diagnostic fields through a sanitizer. A fixed allowlist admits only
67
+ aggregate repository scale, classified health/freshness, safe runtime versions,
68
+ bounded failure envelopes, and C89 request/trace lifecycle fields. Source,
69
+ diffs, raw or external paths, credentials, environment values, usernames,
70
+ command output, Git remotes/messages, and arguments have no output slot. New
71
+ fields fail closed until the allowlist, schema, privacy fixture, and tests are
72
+ updated together. Automated redaction cannot certify arbitrary future fields,
73
+ so users must still inspect the preview before sharing.
74
+
75
+ The same preview/archive builder is exposed through MCP with
76
+ `operation: "diagnostics"`, `telemetryAction: "report"` for preview or
77
+ `telemetryAction: "export"` for archive, and an
78
+ optional `sinceHours` that is interpreted as the evidence window in hours. Pass the
79
+ preview's ID as `artifactId` when archiving the exact snapshot. Both surfaces are bounded, local, credential-free, and
80
+ perform no upload or other network action.
@@ -0,0 +1,180 @@
1
+ # knodin — Handoff
2
+
3
+ Context for anyone (human or agent) picking this repo up cold. Originally
4
+ written at scaffold time on 2026-07-15 and updated after the native engine and
5
+ competitive program shipped. `CLAUDE.md` is the terse working-rules file; this
6
+ is the *why*, current product truth, and adoption path.
7
+
8
+ > **Current-state guardrail:** knodin is an implemented engine, CLI, and
9
+ > MCP server. The scaffold-era backend decision is resolved. Do not describe
10
+ > this repository as a stub, skeleton, wiring-only project, or “almost done.”
11
+
12
+ ## One-line pitch
13
+
14
+ > **knodin — source-evidenced local code intelligence with known bounds.** Your
15
+ > agent knodins the whole codebase instead of grepping it.
16
+
17
+ A **local, no-auth core code-intelligence MCP server** that composes the three
18
+ things you actually want from a code graph into a single `knodin` gateway tool.
19
+ The optional `prs` operation uses the caller's authenticated `gh`; it does not
20
+ make the graph engine credentialed.
21
+
22
+ ## Why this exists (the decision chain)
23
+
24
+ The starting question was: we already run **codegraph** and **code-review-graph**
25
+ locally — should we adopt **Graphify** instead of / in addition to them?
26
+
27
+ The original conclusion after comparing all three was:
28
+
29
+ - **Keep both incumbents.** Each wins its own slot decisively and Graphify
30
+ doesn't beat either at it:
31
+ - **codegraph** → orient→edit loop: one call returns verbatim, line-numbered,
32
+ edit-ready source + call paths + blast radius. Its whole value is
33
+ "Read-equivalent, edit-with-dependents-in-view."
34
+ - **code-review-graph** → review loop: risk-scored, ~200-token diff context
35
+ (changed functions, affected flows, test gaps) + semantic/cross-repo search.
36
+ - **Graphify's** differentiators (Leiden community/subsystem maps, god-node
37
+ centrality, multimodal ingestion of SQL/Terraform/docs, EXTRACTED/INFERRED
38
+ edge provenance) are real but are the capabilities a *self-built* daily loop
39
+ needs least. They shine for **comprehending unfamiliar code**.
40
+
41
+ The high-leverage product direction was a **composing MCP that assembles the
42
+ three winning workflows**—codegraph-style explain, code-review-graph-style
43
+ review, and Graphify-style map—behind one tool. knodin now implements those
44
+ workflows in its own native local engine; the bullets above explain the origin,
45
+ not an outstanding backend choice.
46
+
47
+ ### Build it standalone, NOT inside AtlasMCP
48
+
49
+ Decided against folding this into AtlasMCP's core, and Atlas's own code voted for
50
+ it (it already surfaces Glean via `src/client/embedded-mcp.ts` + `EmbeddedMcpTool`
51
+ rather than reimplementing it in-core):
52
+
53
+ - **Different bounded context.** Atlas is a credential-delegating gateway to
54
+ external SaaS (all its `src/auth/*` + `src/client/*` are OAuth'd API clients).
55
+ knodin is local compute: tree-sitter parsing, a per-repo on-disk graph,
56
+ file-watch freshness, **zero external auth**. Co-mingling two unrelated failure
57
+ domains in one deployable is the trap.
58
+ - **Atlas optimizes for a small tool surface** (its stated "gateway pattern, keep
59
+ it to ~8 tools"). A fat code-graph tool family fights that.
60
+ - **Standalone reuse is the point.** Like codegraph/code-review-graph, it should
61
+ work in *any* assistant with a local index and no auth. Burying it in Atlas
62
+ would only make it reachable when Atlas runs with its full OAuth apparatus.
63
+
64
+ **External and optional:** Atlas can federate knodin through its existing
65
+ embedded-MCP seam—request-scoped dispatch, same as Glean, with zero code
66
+ co-mingled. That Atlas-side integration is outside this repository and is not a
67
+ missing part of knodin's implemented standalone product.
68
+
69
+ ## The name (so nobody relitigates it)
70
+
71
+ Long hunt. The lesson: this is the most naming-saturated niche in software right
72
+ now — every transparent "code + graph / memory / map" word is already taken by a
73
+ near-clone (codegraph, coregraph, cartograph, omnigraph, graphify, lore,
74
+ mnemosyne, cairn, episteme — all gone, most in the exact Claude-Code-MCP niche).
75
+ Transparency is the collision magnet.
76
+
77
+ **Landed on: knodin, CLI `knodin`.** Rationale:
78
+ - `knodin` is how engineers already talk ("I knodin it's in the auth module",
79
+ "ask knodin", "knodin says nothing calls this") — a verb that spreads by
80
+ word-of-mouth, which is the real adoption criterion.
81
+ - Means the right thing: to figure out / judge / know.
82
+ - `graph` gives instant category legibility for a newcomer.
83
+ - Clean in the niche (no code-intelligence/MCP tool by this name; the AU
84
+ accounting co. and an old npm `knodin` weather wrapper are benign — publish
85
+ scoped as `@yourorg/knodin`, the `bin` stays `knodin`).
86
+
87
+ Deliberately **not** themed to pair with Atlas or the Council agents — this is a
88
+ tool, and catchy+memorable beats thematic coherence for a tool.
89
+
90
+ ## Implemented product surface
91
+
92
+ One flat gateway, `knodin`, with an `operation` enum. Same engine backs the CLI
93
+ and the MCP server.
94
+
95
+ | Op | CLI | Job | Wraps / builds |
96
+ |---|---|---|---|
97
+ | `explain` | `knodin explain <symbol>` | edit-ready verbatim source + call paths + blast radius | codegraph's job |
98
+ | `review` | `knodin review [base]` | risk-scored diff context: changed symbols, affected flows, test gaps | code-review-graph's job |
99
+ | `map` | `knodin map` | subsystems (Leiden communities) + EXTRACTED/INFERRED edges | Graphify's job |
100
+
101
+ The backend decision is closed: knodin uses a native TypeScript/tree-sitter
102
+ engine with local SQLite persistence, incremental watchers and reconciliation,
103
+ stable symbol identities, resolved typed edges, communities and flows, hybrid
104
+ local search, review scopes, health/repair, and response budgets. Optional
105
+ local integrations remain integrations; they are not the graph backend.
106
+
107
+ ## Show me the value
108
+
109
+ knodin gives a human or coding agent edit-ready source, resolved relationships,
110
+ blast radius, diff risk, architecture, and bounded context without manually
111
+ assembling a Grep/Read chain. The practical outcome is fewer missed dependencies
112
+ and less repeated context gathering in the orient → edit → review loop.
113
+
114
+ ## What is the ROI?
115
+
116
+ - Intended outcome: fewer agent/tool round trips for definition, caller, diff,
117
+ test, and architecture discovery. Existing replays measure operation-level
118
+ correctness, latency, and size, not an end-to-end productivity percentage.
119
+ - One MCP schema instead of a large always-loaded tool family.
120
+ - No hosted index, account, credential flow, source egress, or required
121
+ database/vector daemon.
122
+ - Measurable correctness, latency, response-size, safety, and effort gates under
123
+ `benchmarks/evaluations/` rather than a generic productivity claim.
124
+
125
+ ## What happens tomorrow?
126
+
127
+ On Windows, macOS, or Linux with Node.js 24 or newer, run
128
+ `npm install --global --ignore-scripts knodin`. pnpm, Bun, Yarn Classic,
129
+ and Node version-manager details are in
130
+ [the installation guide](INSTALLATION.md). Then run `knodin init` and use the
131
+ CLI or connect the single MCP gateway to the existing checkout. Start with
132
+ `knodin context "<task>"`,
133
+ `knodin explain <symbol>`, and `knodin review --scope all`; use `map`, `search`,
134
+ and structured `query` operations when the task needs architecture or graph
135
+ drill-down. No hosted rollout or workflow migration is required.
136
+
137
+ The external Homebrew tap and GHES mirror still use their legacy repository
138
+ names. Their knodin paths become authoritative only after each external rename
139
+ and after the renamed artifact passes the version, MCP, lifecycle, and
140
+ uninstall smoke gate. The repository-local formula is a migration candidate,
141
+ not evidence that a knodin tap is already live.
142
+
143
+ The packed-consumer gate proves a generic MCP handshake and local CLI behavior.
144
+ Do not generalize that evidence into compatibility with every named assistant
145
+ or operating system without a corresponding client/platform run.
146
+
147
+ ## What makes knodin unique? What is the secret sauce?
148
+
149
+ The moat is the constraint combination: ambiguity-safe stable symbol identity,
150
+ source-evidenced impact/review answers, honest freshness, serialized response
151
+ budgets, and a compact one-tool local surface. Competitors can match individual
152
+ features; knodin's differentiated system composes them across the daily loop
153
+ while remaining local, measurable, and explicit about unresolved evidence.
154
+
155
+ ## Current state
156
+
157
+ The engine, CLI, and MCP server are implemented and exercised by hundreds of
158
+ tests plus labeled competitive replays. The active roadmap records remaining
159
+ evidence and product-surface gaps; it does not represent an unbuilt core.
160
+
161
+ - `src/engine/index.ts` — native graph backend and query/review/map lifecycle.
162
+ - `src/tools/knodin-tools.ts` — the `knodin` gateway definition (hand-written
163
+ JSON Schema literal) + dispatcher.
164
+ - `src/server.ts` — MCP stdio server, **low-level** registration.
165
+ - `bin/cli.ts` — the `knodin` CLI over the same engine.
166
+
167
+ ### Hard rule carried over from AtlasMCP
168
+
169
+ **Never** use the SDK's high-level `server.tool()` overload — it makes `tsc`
170
+ infer handler arg types from the Zod shape via pathologically deep types
171
+ (TS2589) and OOMs typecheck on larger tool sets. Register via
172
+ `setRequestHandler(ListTools…/CallTool…)` with hand-written schema literals and
173
+ narrow args manually. Keep to the single flat gateway; add capabilities as new
174
+ operations, not new top-level tools.
175
+
176
+ ## Next work
177
+
178
+ Use [`roadmap/competitive-roadmap.md`](../roadmap/competitive-roadmap.md) as the
179
+ authoritative queue. Remaining items are evidence-backed improvements or
180
+ bounded product-surface decisions—not implementation of a missing core engine.
@@ -8,6 +8,11 @@ shells, Git hooks, and MCP clients.
8
8
 
9
9
  ## Support and evidence
10
10
 
11
+ The certified boundary is macOS. Linux and Windows are unavailable for C91
12
+ certification; success in portable unit tests must not be promoted into a
13
+ platform claim. Runtime-manager fixtures cover the supported directory and
14
+ shim layouts, not every shell customization.
15
+
11
16
  | Installer or manager | Command | Current status |
12
17
  | --- | --- | --- |
13
18
  | npm without a Node manager | `npm install --global --ignore-scripts knodin@<version>` | Verified by the packed-consumer gate on macOS/Linux |
@@ -19,8 +24,8 @@ shells, Git hooks, and MCP clients.
19
24
  | pnpm | `pnpm add --global --ignore-scripts knodin@<version>` | Executable gate provided; release verification requires the published version |
20
25
  | Bun | `bun add --global --ignore-scripts knodin@<version>` | Executable gate provided; release verification requires the published version |
21
26
  | approved npm-compatible registry | use the npm command with approved registry configuration | Same artifact; registry authentication/promotion is organization-owned |
22
- | P&T GHES release asset | after migration, download the exact `.tgz` from `Enterprise-Apps/knodin`, verify SHA-256, then use the npm command with the local file | Planned knodin path; the legacy mirror remains authoritative until the external rename and release verification complete |
23
- | Homebrew | after migration, `brew install knodin/tap/knodin` | Planned knodin path; the legacy tap remains authoritative until the external rename and formula gate complete |
27
+ | P&T GHES release asset | download the exact `.tgz` from `Enterprise-Apps/knodin`, verify SHA-256, then use the npm command with the local file | Read-only synchronized mirror; source changes originate in the authoritative SaaS repository |
28
+ | Homebrew | `brew install knodin/tap/knodin` after its formula gate | `knodin/knodin` is the tap repository, not the source or release authority |
24
29
 
25
30
  “Guidance” is not a compatibility claim. The repository records the manager
26
31
  version, command, package version, platform, and result when a release gate is
@@ -36,6 +41,11 @@ manager-owned tool.
36
41
 
37
42
  Node.js 24 or newer is required:
38
43
 
44
+ The handoff only relaunches the knodin launcher. It does not modify the
45
+ repository's runtime declaration (`package.json`, `.node-version`, `.nvmrc`,
46
+ or manager configuration). If discovery is missing or conflicting, use the
47
+ single absolute `KNODIN_NODE_RUNTIME` override named by the diagnostic.
48
+
39
49
  ```bash
40
50
  npm install --global --ignore-scripts knodin@0.4.3
41
51
  knodin --version
@@ -186,6 +196,15 @@ knodin status --deep
186
196
  knodin doctor
187
197
  ```
188
198
 
199
+ `knodin doctor` is diagnostic and preview-oriented: it enumerates manager,
200
+ duplicate executable, lifecycle, graph, and client remediation without
201
+ executing arbitrary suggested commands. Apply only the named `init`, `repair`,
202
+ or `configure` operation, rerun doctor, and roll agent configuration back with
203
+ `knodin configure --scope cli-only`. Repeating those managed operations is
204
+ idempotent. Local fixtures use zero hosted spend, no credentials, and no source
205
+ egress. Diagnostic archives remain governed by the privacy-safe preview and
206
+ archive contract in [`DIAGNOSTICS.md`](DIAGNOSTICS.md).
207
+
189
208
  Upgrade with the manager that owns the executable:
190
209
 
191
210
  ```bash