knodin 0.7.6 → 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 (130) hide show
  1. package/README.md +19 -7
  2. package/benchmarks/competitors/SYNTHESIS.md +66 -0
  3. package/dist/bin/cli.js +2164 -108
  4. package/dist/bin/launcher.js +25 -3
  5. package/dist/src/agent-integration.js +304 -0
  6. package/dist/src/artifact-refresh.js +82 -0
  7. package/dist/src/cli-args.js +292 -0
  8. package/dist/src/cli-model.js +384 -0
  9. package/dist/src/codeflow-replay.js +81 -0
  10. package/dist/src/compact-structural.js +96 -0
  11. package/dist/src/compare.js +39 -0
  12. package/dist/src/competitive-cold-mcp.js +40 -0
  13. package/dist/src/competitive-constraints.js +21 -0
  14. package/dist/src/competitive-manifest.js +411 -0
  15. package/dist/src/competitive-measurement.js +183 -0
  16. package/dist/src/competitive-runner.js +487 -0
  17. package/dist/src/competitive-sandbox.js +108 -0
  18. package/dist/src/context-export.js +423 -0
  19. package/dist/src/context.js +102 -0
  20. package/dist/src/deterministic-random.js +34 -0
  21. package/dist/src/diagnostics-write-helper.js +473 -0
  22. package/dist/src/diagnostics.js +1476 -0
  23. package/dist/src/docs-sections.js +141 -0
  24. package/dist/src/doctor.js +382 -0
  25. package/dist/src/engine/ann-hnsw.js +261 -0
  26. package/dist/src/engine/embeddings.js +193 -0
  27. package/dist/src/engine/file-walker.js +49 -0
  28. package/dist/src/engine/git-history.js +289 -0
  29. package/dist/src/engine/index.js +14238 -0
  30. package/dist/src/engine/perf.js +115 -0
  31. package/dist/src/engine/prune.js +112 -0
  32. package/dist/src/engine/sarif-import.js +341 -0
  33. package/dist/src/engine/scip-import.js +423 -0
  34. package/dist/src/engine/source-policy.js +85 -0
  35. package/dist/src/engine/sqlite.js +71 -0
  36. package/dist/src/engine/state-paths.js +175 -0
  37. package/dist/src/engine/symbol-delete.js +58 -0
  38. package/dist/src/execution-profile.js +208 -0
  39. package/dist/src/failure-diagnosis.js +655 -0
  40. package/dist/src/fleet.js +7 -0
  41. package/dist/src/git-executable.js +31 -0
  42. package/dist/src/graph-layout.js +173 -0
  43. package/dist/src/graph-query-health.js +115 -0
  44. package/dist/src/hook-manager-integration.js +156 -0
  45. package/dist/src/index-activity.js +126 -0
  46. package/dist/src/init-progress-worker.js +106 -2
  47. package/dist/src/init-progress.js +155 -0
  48. package/dist/src/init.js +1295 -0
  49. package/dist/src/lifecycle-health.js +282 -0
  50. package/dist/src/lsp-readonly.js +217 -0
  51. package/dist/src/mcp-graph-worker.js +69 -0
  52. package/dist/src/mcp-reliability.js +154 -0
  53. package/dist/src/mcp-worker-supervisor.js +350 -0
  54. package/dist/src/mirror.js +290 -0
  55. package/dist/src/node-runtime.js +157 -0
  56. package/dist/src/output-compression.js +630 -0
  57. package/dist/src/output-telemetry.js +368 -0
  58. package/dist/src/pr-triage.js +638 -0
  59. package/dist/src/progressive-evidence.js +477 -0
  60. package/dist/src/pure-compression-cli.js +102 -0
  61. package/dist/src/relationship-adapters.js +377 -0
  62. package/dist/src/release-attestation.js +533 -0
  63. package/dist/src/release-preflight.js +513 -0
  64. package/dist/src/repair-lease.js +85 -0
  65. package/dist/src/repair-progress-worker.js +120 -2
  66. package/dist/src/repair-progress.js +262 -0
  67. package/dist/src/repository-init-process.js +177 -0
  68. package/dist/src/repository-management.js +1261 -0
  69. package/dist/src/response-budget.js +196 -0
  70. package/dist/src/server.js +217 -0
  71. package/dist/src/structural-fast-path.js +344 -0
  72. package/dist/src/structural-snapshot.js +37 -0
  73. package/dist/src/system-config.js +638 -0
  74. package/dist/src/terminal-help.js +83 -0
  75. package/dist/src/tools/knodin-tools.js +1640 -0
  76. package/dist/src/update-ceremony.js +162 -0
  77. package/dist/src/update-policy.js +944 -0
  78. package/dist/src/update-trust.js +504 -0
  79. package/dist/src/version.js +13 -0
  80. package/dist/src/visualization.js +515 -0
  81. package/dist/src/wait-for-fresh.js +98 -0
  82. package/dist/src/worktree-lifecycle.js +234 -0
  83. package/docs/BEHAVIORAL-CONTRACT.md +72 -0
  84. package/docs/CLI.md +20 -1
  85. package/docs/COMPARISON.md +403 -0
  86. package/docs/COMPETITIVE-LANDSCAPE-2026-08.md +267 -0
  87. package/docs/CONTAINED-EXECUTION.md +77 -0
  88. package/docs/DIAGNOSTICS.md +80 -0
  89. package/docs/GIT-HISTORY-REVIEW.md +39 -0
  90. package/docs/HANDOFF.md +180 -0
  91. package/docs/INSTALLATION.md +21 -18
  92. package/docs/MCP.md +59 -8
  93. package/docs/PROGRESSIVE-EVIDENCE.md +37 -0
  94. package/docs/PT-ACCESS-RECOMMENDATION.md +89 -0
  95. package/docs/RELEASE-0.3-EVIDENCE.md +73 -0
  96. package/docs/REPOSITORIES-AND-WORKTREES.md +18 -6
  97. package/docs/SCIP-IMPORT.md +62 -0
  98. package/docs/SIGNED-UPDATES.md +151 -0
  99. package/docs/TELEMETRY.md +46 -0
  100. package/docs/TOKEN-OPTIMIZER-SCORECARD.md +79 -0
  101. package/docs/assets/knodin-favicon.svg +4 -0
  102. package/docs/releases/0.3.0.md +46 -0
  103. package/docs/releases/0.4.0.md +68 -0
  104. package/docs/releases/0.4.1.md +28 -0
  105. package/docs/releases/0.4.2.md +27 -0
  106. package/docs/releases/0.4.3.md +23 -0
  107. package/docs/releases/0.5.0.md +29 -0
  108. package/docs/releases/0.5.1.md +17 -0
  109. package/docs/releases/0.6.0.md +18 -0
  110. package/docs/releases/0.7.0.md +24 -0
  111. package/docs/releases/0.7.1.md +21 -0
  112. package/docs/releases/0.7.2.md +21 -0
  113. package/docs/releases/0.7.3.md +23 -0
  114. package/docs/releases/0.7.4.md +17 -0
  115. package/docs/releases/0.7.5.md +20 -0
  116. package/docs/releases/0.8.0.md +74 -0
  117. package/docs/releases/0.8.2.md +34 -0
  118. package/package.json +127 -4
  119. package/roadmap/competitive-roadmap.md +3801 -0
  120. package/schemas/release-attestation-v1.schema.json +210 -0
  121. package/schemas/support-bundle-v2.schema.json +212 -0
  122. package/dist/chunks/chunk-DMQAGX77.js +0 -654
  123. package/dist/chunks/chunk-F4Z3Z766.js +0 -4
  124. package/dist/chunks/chunk-SIJAQVSX.js +0 -3
  125. package/dist/chunks/chunk-X6M4HUUE.js +0 -2
  126. package/dist/chunks/chunk-YPRMY2LP.js +0 -8
  127. package/dist/chunks/pure-compression-cli-4TA2TQD5.js +0 -5
  128. package/dist/chunks/server-7EDF4CBY.js +0 -14
  129. package/dist/chunks/structural-fast-path-KD5KQSPX.js +0 -4
  130. package/docs/releases/0.7.6.md +0 -25
@@ -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
@@ -34,22 +39,12 @@ manager-owned tool.
34
39
 
35
40
  ## Exact npm installation
36
41
 
37
- Knodin itself requires Node.js 24 or newer. The repository being analyzed may
38
- remain pinned to Node.js 20. When a repository-local version-manager shim
39
- selects Node 20, the launcher searches `PATH` and standard mise, nvm, fnm, asdf,
40
- Volta, and Homebrew installation locations, then relaunches the same command
41
- with a version-checked Node 24+ runtime. Discovery
42
- trusts and probes executables from absolute, user-controlled `PATH` entries and
43
- version-manager locations. Override discovery explicitly when a
44
- runtime lives elsewhere:
42
+ Node.js 24 or newer is required:
45
43
 
46
- ```bash
47
- KNODIN_NODE_RUNTIME=/absolute/path/to/node knodin status
48
- ```
49
-
50
- The override is version-checked before execution. Installation through npm
51
- should still be performed from Node 24+ so package-manager engine checks remain
52
- truthful:
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.
53
48
 
54
49
  ```bash
55
50
  npm install --global --ignore-scripts knodin@0.4.3
@@ -98,7 +93,6 @@ mise which knodin
98
93
  knodin --version
99
94
  cd /path/to/node-24-project && knodin --version
100
95
  cd /path/to/node-26-project && knodin --version
101
- cd /path/to/node-20-project && knodin --version
102
96
  ```
103
97
 
104
98
  ## Volta
@@ -202,6 +196,15 @@ knodin status --deep
202
196
  knodin doctor
203
197
  ```
204
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
+
205
208
  Upgrade with the manager that owns the executable:
206
209
 
207
210
  ```bash
package/docs/MCP.md CHANGED
@@ -17,10 +17,13 @@ recoverable hard-budget continuations. See `docs/PROGRESSIVE-EVIDENCE.md`.
17
17
  - **CLI-only:** `knodin init --scope cli-only` keeps the local graph and Git
18
18
  refresh behavior without MCP registration.
19
19
 
20
- knodin supports project adapters for Claude Code, Codex, Gemini CLI, and
21
- Antigravity. A generic MCP handshake is release-gated. Named-client status is
22
- reported only when its adapter/configuration is detected; it is not proof of
23
- every client version or platform.
20
+ knodin supports project adapters for GitHub Copilot in VS Code, Claude Code,
21
+ Codex, Gemini CLI, and Antigravity. A generic MCP handshake is release-gated.
22
+ Named-client status is reported only when its adapter/configuration is
23
+ detected; it is not proof of every client version or platform. Personal-scope
24
+ Copilot detection requires the VS Code CLI and an installed `GitHub.copilot`
25
+ or `GitHub.copilot-chat` extension; team scope can write the adapter without
26
+ claiming that the local client is installed.
24
27
 
25
28
  ## Canonical command
26
29
 
@@ -48,6 +51,21 @@ Manual JSON configuration:
48
51
  }
49
52
  ```
50
53
 
54
+ GitHub Copilot in VS Code uses `.vscode/mcp.json` and the VS Code `servers`
55
+ shape:
56
+
57
+ ```json
58
+ {
59
+ "servers": {
60
+ "knodin": {
61
+ "type": "stdio",
62
+ "command": "knodin",
63
+ "args": ["serve"]
64
+ }
65
+ }
66
+ }
67
+ ```
68
+
51
69
  Codex TOML:
52
70
 
53
71
  ```toml
@@ -103,10 +121,43 @@ If the handshake fails:
103
121
  MCP requests never trigger update-network checks. Cached update state is
104
122
  available through the `doctor` operation without changing stdio framing.
105
123
  When local diagnostics have been explicitly enabled for the repository, an MCP
106
- operation failure records the same bounded, sanitized failure envelope as the
107
- CLI. It never records request arguments, queries, source, or raw responses. Use
108
- the CLI `knodin diagnostics collect` and `inspect` workflow to review and share
109
- support evidence; no MCP failure is uploaded automatically.
124
+ operation failure records the same bounded failure envelope as the CLI. It
125
+ never records request arguments, queries, source, or raw responses. The single
126
+ gateway also exposes `operation: "diagnostics"` with `telemetryAction: "report"`
127
+ for preview or `"export"` for archive. It uses the exact schema-v2 explicit-allowlist builder
128
+ as `knodin diagnostics preview|archive`; no failure or archive is uploaded
129
+ automatically. See `docs/DIAGNOSTICS.md`.
130
+
131
+ ## Request reliability and recovery
132
+
133
+ Every tool call has a client request ID and generated trace ID. Graph operations
134
+ are serialized inside one warm child process per repository/worktree; no engine
135
+ or database handle is shared across those workers. The gateway owns deadlines,
136
+ cancellation, a 250 ms cooperative cleanup grace, hard termination, and a
137
+ bounded three-start-per-minute restart policy. The graph-independent `docs`
138
+ operation remains available in the gateway while a worker is being replaced.
139
+ `KNODIN_MCP_DEADLINE_MS` may be set to a positive value up to 300000 for local
140
+ testing of the cooperative repair path.
141
+
142
+ Checked-in process replays prove a real SQLite held lock, abrupt worker exit,
143
+ disconnect/cancellation race against a stuck worker, hard kill, bounded restart,
144
+ warm-worker reuse, worktree isolation, and the next independent success. The
145
+ raw CLI stdio replay also executes a real MCP status call through the child
146
+ boundary. Memory and deadline diagnoses remain bounded signals, not proof of an
147
+ operating-system root cause.
148
+
149
+ The gateway appends metadata-only lifecycle records to
150
+ `.knodin/mcp-reliability.jsonl`. Synchronously appended complete JSONL records
151
+ are retained after ordinary or abrupt worker exit, rotate at 256 KiB or
152
+ seven days (one prior generation), and contain only operation, correlation,
153
+ timing, progress sequence, and classified state. Restart and recovery records
154
+ link the failed predecessor trace to the next successful request.
155
+ They never include request arguments, queries, source, responses, environment,
156
+ credentials, remotes, or repository paths. Progress is advisory, emitted only
157
+ when the client supplies a progress token, and bounded to the request deadline;
158
+ the journal retains at most 64 progress records per request. Each linked
159
+ worktree writes only inside its own `.knodin` directory. Power-loss durability
160
+ beyond complete synchronous records is not claimed.
110
161
 
111
162
  The `review` operation serializes graph impact, test gaps, structural
112
163
  centrality, and bounded Git-history facts separately. Churn, co-change, and
@@ -0,0 +1,37 @@
1
+ # Progressive source evidence
2
+
3
+ `knodin evidence` returns exact local source through four deterministic levels:
4
+
5
+ 1. `locate` — stable file identity, path, hash, size, freshness, and confidence.
6
+ 2. `outline` — top-level declaration signatures and exact line ranges.
7
+ 3. `evidence` — requested verbatim source lines with edit anchors intact.
8
+ 4. `expand` — the complete verbatim file within caller-selected hard budgets.
9
+
10
+ CLI:
11
+
12
+ ```bash
13
+ knodin evidence locate src/widget.ts
14
+ knodin evidence evidence src/widget.ts --start 10 --end 30
15
+ knodin evidence evidence src/widget.ts --continuation <evidence-handle> \
16
+ --baseline-hash <sha256> --baseline-bytes <bytes>
17
+ ```
18
+
19
+ The single MCP gateway uses `operation: "evidence"`, `file`, and
20
+ `evidenceLevel`. Supply a returned `continuation` to recover omitted source.
21
+ Every response names returned and omitted material, a reason, whether more
22
+ exists, a stable continuation and evidence handle, freshness, confidence, the
23
+ path taken, and exact item/UTF-8-byte/local-token-estimate budgets.
24
+ The mandatory recoverability envelope requires at least 1,600 effective bytes
25
+ (the lower of the byte cap and four times the local token-estimate cap); smaller
26
+ requests fail closed instead of dropping contract fields.
27
+
28
+ Source omission occurs only when a server-issued evidence handle is valid and
29
+ both `baselineHash` and `baselineBytes` equal the current complete local file.
30
+ Missing or partial metadata/handle, a stale/tampered hash, source changed since
31
+ a handle was issued, or a renamed path selects a named `full-*` recovery path.
32
+ Invalid or tampered handles fail closed. Inputs
33
+ must identify an exact repository-relative regular file; ambiguous selection,
34
+ absolute/traversal paths, and symlinks are refused.
35
+
36
+ This protocol does not summarize source and does not support token-savings or
37
+ task-success claims. See the C83 checked-in replay and limitations for bounds.
@@ -0,0 +1,89 @@
1
+ # P&T access through Docusign GitHub Enterprise Server
2
+
3
+ The knodin GHES path is
4
+ `github.docusignhq.com/Enterprise-Apps/knodin`. It is a read-only downstream
5
+ mirror of the authoritative GitHub SaaS repository
6
+ `DTS-Productivity-Engineering/knodin`; product changes must originate in
7
+ that source repository, never in the mirror or the `knodin/knodin` Homebrew tap.
8
+
9
+ The legacy `v0.3.0` release and its original artifact digest were verified on
10
+ 2026-08-01. That evidence does not certify a renamed knodin artifact or path.
11
+
12
+ ## Quick install without GitHub SaaS
13
+
14
+ Node.js 24 or newer and an authenticated GHES CLI are required. Download the
15
+ versioned release asset from GHES, verify its observed SHA-256, install it
16
+ without dependency lifecycle scripts, and initialize the existing checkout:
17
+
18
+ ```bash
19
+ mkdir knodin-install && cd knodin-install
20
+ GH_HOST=github.docusignhq.com gh release download v0.3.0 \
21
+ --repo Enterprise-Apps/reckon-graph \
22
+ --pattern 'reckon-graph-0.3.0.tgz'
23
+ printf '%s %s\n' \
24
+ 373ca7540e745915f195e51f4ed6383374e4df4a2b8663872b2f279380e60989 \
25
+ reckon-graph-0.3.0.tgz | shasum -a 256 --check
26
+ npm install --global --ignore-scripts ./reckon-graph-0.3.0.tgz
27
+ cd /path/to/existing/repository
28
+ reckon init
29
+ reckon doctor
30
+ reckon status --deep
31
+ ```
32
+
33
+ Unverified Windows guidance: PowerShell provides
34
+ `Get-FileHash -Algorithm SHA256` instead of `shasum`, and the npm/CLI commands
35
+ are intended to be portable. A native Windows named-client run has not yet been
36
+ certified, so this is not a Windows support claim. The release page records the
37
+ versioned filename and observed digest; do not substitute a branch archive or a
38
+ mutable `latest` URL. GHES does not currently enforce immutable releases, which
39
+ is why digest verification and the separate signed-update trust remain
40
+ required.
41
+
42
+ The same 0.3.0 tarball was published to Docusign Artifactory at
43
+ `dts-productivity-engineering-npm-dev-local/knodin-0.3.0.tgz`. That raw
44
+ artifact path requires normal corporate Artifactory authentication and is not
45
+ an npm registry endpoint. GHES release download is the supported P&T bootstrap
46
+ until an approved internal npm virtual repository exposes the package metadata.
47
+
48
+ ## Mirror operating model
49
+
50
+ 1. Source commits and reviewed release tags originate in the GitHub SaaS
51
+ repository.
52
+ 2. The GHES `main` branch and release tag are synchronized without rewriting
53
+ history.
54
+ 3. The exact retained release tarball is attached to the matching GHES release;
55
+ it is not rebuilt on GHES.
56
+ 4. A release is not certified merely because it appears on GHES. The final
57
+ cross-channel attestation must prove that npm, Artifactory, GitHub SaaS,
58
+ Homebrew, and GHES represent the same source and bytes.
59
+ 5. Developers do not dual-push feature branches. Mirror synchronization is a
60
+ release/operations responsibility and must eventually use a narrowly scoped
61
+ workload identity rather than a personal SSH key.
62
+
63
+ The destination must eventually enforce repository visibility, branch
64
+ protection, required reviews/checks, security scans, commit/tag provenance, and
65
+ license notices. Today the repository is internal, but `main` is unprotected and
66
+ maintainers retain push access. Those are open governance controls, not
67
+ completed evidence. Future mirror automation must fail closed and must not
68
+ accept changes back into the authoritative repository.
69
+
70
+ ## Required governance follow-up
71
+
72
+ Record or complete:
73
+
74
+ - repository-owner approval to disclose the source to P&T;
75
+ - enterprise GitHub/security approval for cross-organization private forks or
76
+ mirrors;
77
+ - legal/compliance confirmation for source and license visibility;
78
+ - the exact destination GitHub organization and repository name;
79
+ - confirmation of destination visibility and membership controls;
80
+ - the required branch-protection, review, scan, and retention policy;
81
+ - approval of a narrowly scoped GitHub App/workload identity, its installation
82
+ owners, secret store, rotation owner, and audit-log owner;
83
+ - an owner for incident response and mirror decommissioning.
84
+
85
+ The destination repository and current release asset are live. Branch
86
+ protection, enforced read-only direction, automated mirror synchronization,
87
+ production threshold-update trust, timed onboarding evidence, and a Windows
88
+ named-client release certification remain open gates; the existence of this
89
+ access path is not evidence that those separate controls are complete.
@@ -0,0 +1,73 @@
1
+ # Reckon Graph 0.3 evidence ledger
2
+
3
+ This ledger freezes the field and competitor evidence used to define the 0.3
4
+ release. Historical observations are not rewritten as current measurements.
5
+
6
+ ## Minions field observation
7
+
8
+ The prior 0.1.22 field run recorded:
9
+
10
+ - 3,006 source files;
11
+ - 2,949 indexed files and 157 health findings before repair;
12
+ - 3,006 indexed files after repair;
13
+ - current HEAD `cbf058aa...`;
14
+ - recorded indexed HEAD `4d45fe02...`;
15
+ - a 16-commit distance while 0.2.0 status incorrectly reported healthy;
16
+ - 195 repair operations, including reconciliation of stale/orphaned state and
17
+ regeneration of 1,874 symbol embeddings.
18
+
19
+ The workload fast-forwarded main across 15 merged commits and removed 16 linked
20
+ worktrees. The checked-in lifecycle regression recreates those lifecycle
21
+ shapes, including additions, edits, renames, deletions, policy transitions,
22
+ overlapping hook workers, immediate queries, and cleanup.
23
+
24
+ The Minions checkout is a read-only field fixture for this release. Its current
25
+ HEAD on 2026-07-30 was `44c91f6d013fd8d6f4e106d063a87eab94b19866`;
26
+ the historical SHAs above belong to the original observation, not that later
27
+ checkout state. Existing modified and untracked Minions files were left intact.
28
+
29
+ ## Token Optimizer observation
30
+
31
+ The complete 102.8-second demo artifact has SHA-256
32
+ `a8085ec26d56ab220f3b31578f818a911caf277e604ed9f8d46c0d9f31fbb60d`.
33
+ It demonstrates seven named surfaces: file outline, symbol extraction, symbol
34
+ find, batch outline, project overview, output compression, and command running.
35
+ It describes Python AST parsing and heuristic/regular-expression coverage for
36
+ other languages.
37
+
38
+ At release time, no authorized immutable source commit, packaged executable,
39
+ README, version, or raw measurement data was available, so the original
40
+ observation was `demo-only`. A post-release source audit now pins the authorized
41
+ GHES implementation at
42
+ `a2b9cef5efdfcf0393e9e7a5ded229ffd9f613d7`. It verifies the source inventory
43
+ and selected implementation observations, including a behavioral compression
44
+ budget probe. Equivalent end-to-end measurements remain incomplete, and the
45
+ displayed savings remain hypotheses: the demo showed two calls, used a bytes/4
46
+ token estimate, and showed inconsistent 83% and 93% targeted-lookup figures.
47
+
48
+ The reproducible comparison contract is
49
+ [`../benchmarks/evaluations/token-optimizer-20260730/comparison-manifest.json`](../benchmarks/evaluations/token-optimizer-20260730/comparison-manifest.json).
50
+ The immutable source result is
51
+ [`../benchmarks/evaluations/token-optimizer-20260730/raw-source-audit-20260730.json`](../benchmarks/evaluations/token-optimizer-20260730/raw-source-audit-20260730.json).
52
+ Missing behavioral measurements are `null`, never zero.
53
+
54
+ The later C56 replay now executes all seven pinned workflows with shared
55
+ fixtures, real-token counts, 20 warm samples, five cold-process samples, and
56
+ explicit correctness oracles. Both products pass the five structural oracles.
57
+ The result is intentionally `complete-with-gaps`: Token Optimizer is smaller
58
+ and faster on all five small-fixture structural calls, Reckon has no output
59
+ compressor yet, and command execution remains containment-gated. See
60
+ [`../benchmarks/evaluations/token-optimizer-20260730/summary.md`](../benchmarks/evaluations/token-optimizer-20260730/summary.md).
61
+
62
+ ## Implemented and deferred
63
+
64
+ Reckon now provides parser-grounded bounded file and batch outlines, compact
65
+ source-only extraction, deterministic project overview, natural-prompt routing,
66
+ real-token local telemetry, and a static local report through the existing
67
+ single `reckon` gateway.
68
+
69
+ `reckon run` is not shipped. A no-shell launcher alone could not prove portable
70
+ hard memory limits and process-tree termination across POSIX and Windows. The
71
+ full gate and adversarial fixtures remain documented in
72
+ [`COMMAND-OUTPUT-COMPRESSION.md`](COMMAND-OUTPUT-COMPRESSION.md). This is a
73
+ security decision, not a claim that the competitor implementation is unsafe.
@@ -55,14 +55,26 @@ doctor` and the single MCP gateway are unchanged.
55
55
 
56
56
  Sibling location never establishes system membership or a relationship.
57
57
  `repos init` works sequentially and performs each live repository operation in
58
- a disposable process with a 768 MiB RSS ceiling. A worker that exceeds the
58
+ a disposable process. Memory is uncapped by default so a legitimate large
59
+ repository is not killed by a product-wide guess. Operators can set an explicit
60
+ per-repository RSS ceiling for one run with `--memory-limit-mib <mib>` or for a
61
+ configured portfolio in `knodin.yaml`; the CLI value takes precedence:
62
+
63
+ ```yaml
64
+ schemaVersion: 1
65
+ repositoryInitialization:
66
+ memoryLimitMiB: 1024
67
+ ```
68
+
69
+ The minimum explicit ceiling is 128 MiB. A worker that exceeds a configured
59
70
  ceiling or its deadline has its process group terminated, produces a
60
71
  repository-scoped failure, and does not prevent later repositories from being
61
- processed. JSON records the observed per-repository peak, enforced ceiling,
62
- and count of ceiling failures. The 50 ms RSS heartbeat is a bounded enforcement
63
- interval rather than a claim that transient allocation can never overshoot by
64
- one sample. Windows can terminate the worker process but cannot provide the
65
- same descendant process-group guarantee as macOS/Linux.
72
+ processed. JSON records the observed per-repository peak, the enforced ceiling
73
+ or `null` when uncapped, and the count of ceiling failures. The 250 ms RSS
74
+ heartbeat is a bounded enforcement interval rather than a claim that transient
75
+ allocation can never overshoot by one sample. Windows can terminate the worker
76
+ process but cannot provide the same descendant process-group guarantee as
77
+ macOS/Linux.
66
78
 
67
79
  Initialization supports `--dry-run` and preserves a healthy graph when only
68
80
  managed integration needs refreshing. Dry-run never starts a worker, opens a
@@ -0,0 +1,62 @@
1
+ # Optional SCIP import
2
+
3
+ > **Bounds are overridable.** Every limit below can be raised with a flag, and
4
+ > each refusal names the flag and a value that would admit the file:
5
+ > `--scip-max-bytes`, `--scip-max-files`, `--scip-max-facts`,
6
+ > `--scip-timeout-ms`. A ceiling the operator cannot move is just a failure.
7
+
8
+ knodin can add compiler-produced SCIP facts to its local graph without running a
9
+ language server. The tier is deliberately opt-in:
10
+
11
+ ```sh
12
+ knodin index --scip path/to/index.scip
13
+ ```
14
+
15
+ The input must be a regular file inside the repository. knodin never discovers,
16
+ downloads, or produces a SCIP index, and a normal `knodin init` or `knodin
17
+ index` does not import one. Repositories without the flag keep the existing
18
+ native and LSIF behavior byte-for-byte at the command boundary.
19
+
20
+ ## Evidence and conflicts
21
+
22
+ Imported definitions use stable repository/file/range identities, `SCIP_*`
23
+ kinds, a summary containing the original SCIP symbol and `scip` provenance,
24
+ `scip_reference`, `scip_relationship_reference`, `scip_implementation`,
25
+ `scip_type_definition`, or `scip_definition` reference kinds, and `scip_import`
26
+ file edges. Native and LSIF facts are not deleted or overwritten. If two tiers
27
+ define the same name, normal ambiguity-safe resolution returns all candidates
28
+ and requires a file, kind, or identity selector. A stale SCIP input is refused
29
+ rather than replacing fresher source-derived evidence.
30
+
31
+ Every successful index result includes the producer name/version and represented
32
+ languages from the SCIP file plus the exact limits used. Defaults are 64 MiB,
33
+ 10,000 documents, 250,000 decoded facts, and 30 seconds. Inputs that are
34
+ missing, malformed, oversized, stale relative to a represented source file, or
35
+ contain absolute, traversal, missing, symlink, or non-file document paths fail
36
+ before the SCIP tier is replaced.
37
+
38
+ ## Known bounds and limitations
39
+
40
+ - The importer supports standard SCIP `Index`, `Document`, `Occurrence`,
41
+ `SymbolInformation`, and `Relationship` fields needed for definitions,
42
+ references, source ranges, and relationships. Unknown protobuf fields are
43
+ skipped, but unsupported wire types and malformed ranges fail closed.
44
+ - Precision and coverage are bounded by the producer. Checked-in coverage is
45
+ npm-integrity-pinned `@sourcegraph/scip-typescript@0.4.0` over TypeScript. Its
46
+ emitted documents omit the optional language field, so the import report says
47
+ `unknown`; other conforming producers and languages are not certified by C84.
48
+ - The index mtime must be at least as new as every represented source file.
49
+ This is a conservative local freshness check, not a claim that the producer
50
+ indexed the exact Git commit or compiler configuration.
51
+ - An import replaces the prior SCIP tier as one snapshot. It does not merge
52
+ multiple SCIP files, watch an index, start a daemon, or provide live LSP.
53
+ Live LSP requires a separately approved roadmap item.
54
+ - SCIP local symbols are scoped by document. Relationship flags remain distinct
55
+ (`reference`, `implementation`, `type-definition`, or `definition`); only an
56
+ actual cross-file occurrence reference contributes a `scip_import` file edge.
57
+ - The checked-in replay is synthetic and authorizes no superiority,
58
+ production-readiness, trusted-distribution, or cross-platform claim.
59
+
60
+ The replay, verifier, raw results, and resource report live under
61
+ `benchmarks/evaluations/c84-scip-import/`; run `npm run verify:c84` entirely
62
+ offline to reproduce them.