knodin 0.5.0

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 (81) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +590 -0
  3. package/dist/bin/cli.js +1704 -0
  4. package/dist/src/agent-integration.js +250 -0
  5. package/dist/src/artifact-refresh.js +81 -0
  6. package/dist/src/cli-args.js +267 -0
  7. package/dist/src/cli-model.js +324 -0
  8. package/dist/src/compact-structural.js +96 -0
  9. package/dist/src/competitive-constraints.js +20 -0
  10. package/dist/src/competitive-manifest.js +330 -0
  11. package/dist/src/competitive-measurement.js +183 -0
  12. package/dist/src/competitive-runner.js +453 -0
  13. package/dist/src/competitive-sandbox.js +108 -0
  14. package/dist/src/context-export.js +422 -0
  15. package/dist/src/context.js +102 -0
  16. package/dist/src/docs-sections.js +141 -0
  17. package/dist/src/doctor.js +380 -0
  18. package/dist/src/engine/ann-hnsw.js +271 -0
  19. package/dist/src/engine/embeddings.js +193 -0
  20. package/dist/src/engine/file-walker.js +43 -0
  21. package/dist/src/engine/index.js +13030 -0
  22. package/dist/src/engine/perf.js +115 -0
  23. package/dist/src/engine/prune.js +112 -0
  24. package/dist/src/engine/source-policy.js +69 -0
  25. package/dist/src/engine/sqlite.js +71 -0
  26. package/dist/src/engine/symbol-delete.js +58 -0
  27. package/dist/src/failure-diagnosis.js +590 -0
  28. package/dist/src/fleet.js +7 -0
  29. package/dist/src/git-executable.js +31 -0
  30. package/dist/src/graph-query-health.js +115 -0
  31. package/dist/src/index-activity.js +125 -0
  32. package/dist/src/init-progress-worker.js +107 -0
  33. package/dist/src/init-progress.js +155 -0
  34. package/dist/src/init.js +985 -0
  35. package/dist/src/lifecycle-health.js +213 -0
  36. package/dist/src/lsp-readonly.js +217 -0
  37. package/dist/src/output-compression.js +629 -0
  38. package/dist/src/output-telemetry.js +359 -0
  39. package/dist/src/pr-triage.js +638 -0
  40. package/dist/src/relationship-adapters.js +370 -0
  41. package/dist/src/release-attestation.js +533 -0
  42. package/dist/src/repair-progress-worker.js +121 -0
  43. package/dist/src/repair-progress.js +262 -0
  44. package/dist/src/repository-init-process.js +173 -0
  45. package/dist/src/repository-management.js +1089 -0
  46. package/dist/src/response-budget.js +184 -0
  47. package/dist/src/server.js +53 -0
  48. package/dist/src/system-config.js +615 -0
  49. package/dist/src/terminal-help.js +83 -0
  50. package/dist/src/tools/knodin-tools.js +1438 -0
  51. package/dist/src/tools/reckon-tools.js +5 -0
  52. package/dist/src/update-policy.js +944 -0
  53. package/dist/src/update-trust.js +503 -0
  54. package/dist/src/version.js +13 -0
  55. package/dist/src/visualization.js +162 -0
  56. package/dist/src/wait-for-fresh.js +98 -0
  57. package/dist/src/worktree-lifecycle.js +231 -0
  58. package/docs/CLI.md +39 -0
  59. package/docs/COMMAND-OUTPUT-COMPRESSION.md +194 -0
  60. package/docs/DEAD-CODE-AND-IMPACT.md +27 -0
  61. package/docs/DOCTOR-AND-UPDATES.md +84 -0
  62. package/docs/INDEXING-POLICY-AND-PROVENANCE.md +37 -0
  63. package/docs/INSTALLATION.md +208 -0
  64. package/docs/MCP.md +100 -0
  65. package/docs/PT-ACCESS-RECOMMENDATION.md +91 -0
  66. package/docs/RELEASE-0.3-EVIDENCE.md +73 -0
  67. package/docs/REPOSITORIES-AND-WORKTREES.md +81 -0
  68. package/docs/SIGNED-UPDATES.md +146 -0
  69. package/docs/SYSTEMS-AND-RELATIONSHIPS.md +45 -0
  70. package/docs/TELEMETRY.md +42 -0
  71. package/docs/releases/0.3.0.md +46 -0
  72. package/docs/releases/0.4.0.md +68 -0
  73. package/docs/releases/0.4.1.md +28 -0
  74. package/docs/releases/0.4.2.md +27 -0
  75. package/docs/releases/0.4.3.md +23 -0
  76. package/docs/releases/0.5.0.md +29 -0
  77. package/package.json +110 -0
  78. package/schemas/release-attestation-v1.schema.json +210 -0
  79. package/tree-sitter-prisma.wasm +0 -0
  80. package/tree-sitter-sql.wasm +0 -0
  81. package/tree-sitter-xml.wasm +0 -0
@@ -0,0 +1,37 @@
1
+ # Indexing policy and provenance
2
+
3
+ knodin distinguishes source, generated, vendored, mirrored, ignored, and
4
+ duplicate-candidate content.
5
+
6
+ Policy precedence is:
7
+
8
+ 1. explicit `reckon.yaml` analysis policy;
9
+ 2. established `.gitattributes` generated/vendored signals;
10
+ 3. source maps, generated headers, build metadata, SBOM, or SLSA evidence;
11
+ 4. bounded inference, always labeled with confidence.
12
+
13
+ Git ignore and knodin analysis policy are different. knodin must never add a
14
+ tracked file to `.gitignore` or `.git/info/exclude` merely because
15
+ `index.exclude` omits it from analysis.
16
+
17
+ Provenance relationships are `generated_from`, `vendored_from`, `mirror_of`,
18
+ and `duplicate_candidate`. Exact content equality creates only a
19
+ `duplicate_candidate`; a hash cannot prove lineage. Hashing must stream large
20
+ files rather than loading whole trees into memory.
21
+
22
+ Declared generated, vendored, or mirrored repositories default to
23
+ provenance-only indexing. Full indexing requires an explicit override. Queries
24
+ against a derived artifact identify or redirect to canonical source when
25
+ source-evidenced provenance is available.
26
+
27
+ System configuration imports bounded `.gitattributes`
28
+ `linguist-generated`/`linguist-vendored` entries, generated-file headers,
29
+ source-map sources, CycloneDX PURLs, and SLSA/in-toto material URIs as
30
+ source-located policy or relationship evidence. These lower-authority signals
31
+ never override an explicit repository role or `index: full` choice. A generated
32
+ header without a named source is policy evidence only; knodin does not invent a
33
+ `generated_from` target.
34
+
35
+ Every stored relationship retains evidence location, adapter/extractor,
36
+ evidence kind, confidence, target identity, freshness, and index generation.
37
+ Unknown or stale evidence remains explicit.
@@ -0,0 +1,208 @@
1
+ # Installing knodin
2
+
3
+ **knodin — source-evidenced local code intelligence with known bounds.** It is a
4
+ local code-intelligence engine, CLI, and single-tool MCP
5
+ gateway. npm is the primary cross-platform distribution. Every persistent
6
+ installation must resolve one stable `knodin` executable from interactive
7
+ shells, Git hooks, and MCP clients.
8
+
9
+ ## Support and evidence
10
+
11
+ | Installer or manager | Command | Current status |
12
+ | --- | --- | --- |
13
+ | npm without a Node manager | `npm install --global --ignore-scripts knodin@<version>` | Verified by the packed-consumer gate on macOS/Linux |
14
+ | mise npm backend | `mise use --global npm:knodin@<version>` | Executable gate provided; release verification requires the published version |
15
+ | Volta | `volta install knodin@<version>` | Guidance from Volta's tool-shim contract; not release-gated in this repository |
16
+ | nvm | select Node 24+, then use the npm command | Guidance; globals belong to the selected Node installation |
17
+ | fnm | select Node 24+, then use the npm command | Guidance; globals belong to the selected Node installation |
18
+ | asdf | select Node 24+, then use the npm command | Guidance; globals belong to the selected Node installation |
19
+ | pnpm | `pnpm add --global --ignore-scripts knodin@<version>` | Executable gate provided; release verification requires the published version |
20
+ | Bun | `bun add --global --ignore-scripts knodin@<version>` | Executable gate provided; release verification requires the published version |
21
+ | 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 knowdin/tap/knodin` | Planned knodin path; the legacy tap remains authoritative until the external rename and formula gate complete |
24
+
25
+ “Guidance” is not a compatibility claim. The repository records the manager
26
+ version, command, package version, platform, and result when a release gate is
27
+ actually run.
28
+
29
+ The executable harness is `npm run test:package-managers -- npm pnpm bun`.
30
+ Registry-backed release checks use
31
+ `RECKON_SMOKE_PUBLISHED_VERSION=<version> npm run test:package-managers -- mise volta`;
32
+ they intentionally refuse to substitute a local tarball for a published
33
+ manager-owned tool.
34
+
35
+ ## Exact npm installation
36
+
37
+ Node.js 24 or newer is required:
38
+
39
+ ```bash
40
+ npm install --global --ignore-scripts knodin@0.4.3
41
+ knodin --version
42
+ knodin doctor
43
+ ```
44
+
45
+ `0.4.3` is the version prepared by this change and becomes installable only
46
+ after the separately authorized npm publication step. Replace it with the
47
+ exact published release being deployed. Exact versions make
48
+ rollbacks and manager comparisons reproducible. A bare `knodin` resolves
49
+ the registry's `latest` tag and is less reproducible.
50
+
51
+ The package does not use an install lifecycle script to detect package
52
+ managers. It cannot intercept a package-manager command before it is installed,
53
+ and a postinstall heuristic would neither fix PATH ownership nor prove which
54
+ manager will execute the command later.
55
+
56
+ knodin's verified CPU path does not require dependency lifecycle scripts.
57
+ Preserve `--ignore-scripts`. The `boolean@3.2.0` warning is upstream transitive
58
+ debt in the local embedding runtime, not a direct runtime call. The
59
+ `check:dependency-deprecations` gate alerts when upstream movement makes removal
60
+ safe; ineffective overrides are not shipped.
61
+
62
+ ## mise
63
+
64
+ Use mise's npm backend so the executable is owned by one stable mise shim:
65
+
66
+ ```bash
67
+ mise use --global npm:knodin@<version>
68
+ mise which knodin
69
+ knodin --version
70
+ ```
71
+
72
+ The current mise npm backend uses an embedded installer by default, blocks
73
+ unreviewed lifecycle scripts, and applies a low-download policy to an unlocked
74
+ tool. A reviewed first install may require the package-specific
75
+ `allow_low_downloads` setting; a locked tool does not. Do not disable the
76
+ policy globally. knodin does not need lifecycle scripts.
77
+
78
+ Verify the same shim both outside a repository and inside repositories that pin
79
+ different Node versions:
80
+
81
+ ```bash
82
+ mise which knodin
83
+ knodin --version
84
+ cd /path/to/node-24-project && knodin --version
85
+ cd /path/to/node-26-project && knodin --version
86
+ ```
87
+
88
+ ## Volta
89
+
90
+ Volta installs package binaries behind shims and pins each tool to the default
91
+ Node engine in effect when the tool is installed:
92
+
93
+ ```bash
94
+ volta install knodin@<version>
95
+ volta which knodin
96
+ knodin --version
97
+ ```
98
+
99
+ Verify it inside a project with a different `volta.node` pin. The package tool
100
+ should remain available with its own pinned engine. This repository labels
101
+ Volta as guidance until that executable test is recorded for the release.
102
+
103
+ ## nvm, fnm, and asdf
104
+
105
+ These managers select a Node installation. npm globals belong to that selected
106
+ installation, so changing Node versions can make `knodin` disappear:
107
+
108
+ ```bash
109
+ nvm use 24
110
+ npm install --global --ignore-scripts knodin@<version>
111
+ ```
112
+
113
+ Use the equivalent `fnm use` or `asdf` selection before installing. Install
114
+ knodin for each Node version used by your repositories, use the manager's
115
+ documented package-migration facility, or choose a manager-owned tool shim such
116
+ as mise/Volta. nvm documents `--reinstall-packages-from` for migration.
117
+
118
+ ## pnpm and Bun
119
+
120
+ Persistent global installs are:
121
+
122
+ ```bash
123
+ pnpm add --global --ignore-scripts knodin@<version>
124
+ bun add --global --ignore-scripts knodin@<version>
125
+ ```
126
+
127
+ Confirm the manager's global binary directory is on PATH (`pnpm bin -g` or
128
+ `bun pm bin -g`). Temporary runners such as `npx`, `pnpm dlx`, and `bunx` are
129
+ not supported for initialized repositories because later hooks and MCP clients
130
+ need a stable executable.
131
+
132
+ ## Approved npm-compatible registries
133
+
134
+ Organizations may promote the unchanged npm artifact through an approved
135
+ npm-compatible registry. Configure the registry and credentials through the
136
+ package manager's normal user or CI configuration, never in this repository:
137
+
138
+ ```bash
139
+ npm install --global --ignore-scripts knodin@<version>
140
+ ```
141
+
142
+ Public/package documentation intentionally does not name internal registry
143
+ hosts. `knodin doctor` reports the configured channel without printing
144
+ credentials.
145
+
146
+ P&T engineers without GitHub SaaS access should use the authenticated GHES
147
+ release-asset procedure in
148
+ [`PT-ACCESS-RECOMMENDATION.md`](PT-ACCESS-RECOMMENDATION.md). It installs the
149
+ same digest-verified npm tarball without cloning source.
150
+
151
+ ## Homebrew
152
+
153
+ knodin uses a Formula, not a Cask: it is an npm CLI and does not ship a
154
+ standalone application bundle. The formula consumes the published npm tarball,
155
+ verifies SHA-256, depends on Node, installs under Homebrew `libexec`, and
156
+ disables unnecessary dependency scripts.
157
+
158
+ After the external tap is renamed and certified, install from the public
159
+ knodin tap:
160
+
161
+ ```bash
162
+ brew install knowdin/tap/knodin
163
+ ```
164
+
165
+ A version is not called Homebrew-supported until the corresponding published
166
+ npm tarball passes version, MCP initialize/tools-list, `init`, `status`,
167
+ `query`, `repair`, and uninstall smoke tests. The tap is
168
+ `knowdin/homebrew-tap`; the formula and attached release evidence must
169
+ identify the exact source commit and tarball digest.
170
+
171
+ The planned knodin formula will be maintained in `knowdin/homebrew-tap`; that
172
+ path is not represented as live by this code-only rename.
173
+ The repository-local `packaging/homebrew/knodin.rb` is a historical
174
+ candidate fixture and must not be promoted or used to certify a newer release.
175
+ For a release gate, download the live tap's version-specific formula, verify its
176
+ URL and digest against the exact release tarball, and pass that file explicitly
177
+ to `scripts/homebrew-formula-smoke.sh`. The harness builds and installs the
178
+ formula, runs the lifecycle test block, uninstalls it, and verifies Homebrew no
179
+ longer owns the formula. It refuses to replace an existing installation.
180
+
181
+ ## Initialize, upgrade, and uninstall
182
+
183
+ ```bash
184
+ knodin init
185
+ knodin status --deep
186
+ knodin doctor
187
+ ```
188
+
189
+ Upgrade with the manager that owns the executable:
190
+
191
+ ```bash
192
+ npm install --global --ignore-scripts knodin@<new-version>
193
+ mise use --global npm:knodin@<new-version>
194
+ volta install knodin@<new-version>
195
+ brew update && brew upgrade knodin
196
+ ```
197
+
198
+ Uninstall:
199
+
200
+ ```bash
201
+ npm uninstall --global knodin
202
+ mise uninstall npm:knodin
203
+ volta uninstall knodin
204
+ brew uninstall knodin
205
+ ```
206
+
207
+ Uninstalling the package does not silently delete repository indexes or user
208
+ configuration. Remove those explicitly only after reviewing their paths.
package/docs/MCP.md ADDED
@@ -0,0 +1,100 @@
1
+ # MCP configuration and diagnostics
2
+
3
+ knodin exposes exactly one MCP tool named `knodin`. Capabilities such as
4
+ context, explain, review, search, docs, doctor, repositories, and systems are
5
+ operations of that gateway, not separate top-level tools.
6
+
7
+ ## Choose a scope
8
+
9
+ - **Personal:** `knodin init --scope personal` configures detected clients with
10
+ user-owned or excluded local files.
11
+ - **Team:** `knodin init --scope team` writes merge-safe repository
12
+ configuration for supported clients. Commit only the intended files.
13
+ - **CLI-only:** `knodin init --scope cli-only` keeps the local graph and Git
14
+ refresh behavior without MCP registration.
15
+
16
+ knodin supports project adapters for Claude Code, Codex, Gemini CLI, and
17
+ Antigravity. A generic MCP handshake is release-gated. Named-client status is
18
+ reported only when its adapter/configuration is detected; it is not proof of
19
+ every client version or platform.
20
+
21
+ ## Canonical command
22
+
23
+ The server command is:
24
+
25
+ ```text
26
+ knodin serve
27
+ ```
28
+
29
+ Prefer this command when the client inherits the same PATH. If it does not,
30
+ use the absolute stable shim reported by `knodin doctor`. A mise or Volta shim
31
+ is preferable to a version-specific npm global path. nvm/fnm/asdf npm globals
32
+ can change when the selected Node version changes.
33
+
34
+ Manual JSON configuration:
35
+
36
+ ```json
37
+ {
38
+ "mcpServers": {
39
+ "knodin": {
40
+ "command": "knodin",
41
+ "args": ["serve"]
42
+ }
43
+ }
44
+ }
45
+ ```
46
+
47
+ Codex TOML:
48
+
49
+ ```toml
50
+ [mcp_servers."knodin"]
51
+ command = "knodin"
52
+ args = ["serve"]
53
+ ```
54
+
55
+ ## Compact structural responses
56
+
57
+ Use `detailLevel: "compact"` for the Token Optimizer-style structural path:
58
+
59
+ - `query` with `file_summary`, `batch_outline`, or `project_overview`;
60
+ - `search` for normalized symbol-name discovery; or
61
+ - `explain` with `includeSource: true` for exact symbol source.
62
+
63
+ The response is a deterministic compact string. Its first line reports
64
+ freshness and returned/total counts; result lines retain a stable `~` identity
65
+ handle, symbol kind, nesting where applicable, and source location. Outline
66
+ rows also retain a compact signature. An ambiguous explain begins with
67
+ `ambiguous` and lists candidates instead of selecting one. A returned `~`
68
+ handle may be supplied as `identity` on a later request; prefix collisions
69
+ remain explicit ambiguity rather than becoming a guessed match.
70
+
71
+ This mode intentionally omits unrelated graph fields, generic telemetry, and
72
+ the normal response-budget envelope. `byteBudget` still acts as a hard UTF-8
73
+ ceiling by removing complete result rows and updating the returned count. When
74
+ the requested budget cannot fit even the truthful header, the result is empty
75
+ rather than exceeding the caller's limit. The full structured response remains
76
+ the default when `detailLevel` is omitted.
77
+
78
+ ## Real handshake diagnostics
79
+
80
+ Run:
81
+
82
+ ```bash
83
+ knodin doctor
84
+ ```
85
+
86
+ Doctor resolves the executable/symlink chain, inspects duplicate candidates,
87
+ reports configured client files, and sends real JSON-RPC `initialize` and
88
+ `tools/list` requests. A healthy response identifies server
89
+ `knodin` and exactly one tool named `knodin`.
90
+
91
+ If the handshake fails:
92
+
93
+ 1. Run `command -v knodin` and `knodin --version` in the client's environment.
94
+ 2. Check `knodin doctor` for a version-manager-owned PATH or duplicate install.
95
+ 3. Re-run `knodin init` after changing the manager, Node version, or shim.
96
+ 4. Inspect client logs without copying tokens, source, or personal paths into
97
+ public reports.
98
+
99
+ MCP requests never trigger update-network checks. Cached update state is
100
+ available through the `doctor` operation without changing stdio framing.
@@ -0,0 +1,91 @@
1
+ # P&T access through Docusign GitHub Enterprise Server
2
+
3
+ The knodin GHES path is planned as
4
+ `github.docusignhq.com/Enterprise-Apps/knodin`, but this repository rename does
5
+ not create or verify that external repository. Until the mirror is renamed and
6
+ its knodin artifact is certified, P&T engineers must use the existing legacy
7
+ mirror and its documented release asset. `Enterprise-Apps` is a legacy
8
+ namespace; product changes must continue to originate in the authoritative
9
+ GitHub SaaS repository, not the downstream mirror.
10
+
11
+ The legacy `v0.3.0` release and its original artifact digest were verified on
12
+ 2026-08-01. That evidence does not certify a renamed knodin artifact or path.
13
+
14
+ ## Quick install without GitHub SaaS
15
+
16
+ Node.js 24 or newer and an authenticated GHES CLI are required. Download the
17
+ versioned release asset from GHES, verify its observed SHA-256, install it
18
+ without dependency lifecycle scripts, and initialize the existing checkout:
19
+
20
+ ```bash
21
+ mkdir knodin-install && cd knodin-install
22
+ GH_HOST=github.docusignhq.com gh release download v0.3.0 \
23
+ --repo Enterprise-Apps/reckon-graph \
24
+ --pattern 'reckon-graph-0.3.0.tgz'
25
+ printf '%s %s\n' \
26
+ 373ca7540e745915f195e51f4ed6383374e4df4a2b8663872b2f279380e60989 \
27
+ reckon-graph-0.3.0.tgz | shasum -a 256 --check
28
+ npm install --global --ignore-scripts ./reckon-graph-0.3.0.tgz
29
+ cd /path/to/existing/repository
30
+ reckon init
31
+ reckon doctor
32
+ reckon status --deep
33
+ ```
34
+
35
+ Unverified Windows guidance: PowerShell provides
36
+ `Get-FileHash -Algorithm SHA256` instead of `shasum`, and the npm/CLI commands
37
+ are intended to be portable. A native Windows named-client run has not yet been
38
+ certified, so this is not a Windows support claim. The release page records the
39
+ versioned filename and observed digest; do not substitute a branch archive or a
40
+ mutable `latest` URL. GHES does not currently enforce immutable releases, which
41
+ is why digest verification and the separate signed-update trust remain
42
+ required.
43
+
44
+ The same 0.3.0 tarball was published to Docusign Artifactory at
45
+ `dts-productivity-engineering-npm-dev-local/knodin-0.3.0.tgz`. That raw
46
+ artifact path requires normal corporate Artifactory authentication and is not
47
+ an npm registry endpoint. GHES release download is the supported P&T bootstrap
48
+ until an approved internal npm virtual repository exposes the package metadata.
49
+
50
+ ## Mirror operating model
51
+
52
+ 1. Source commits and reviewed release tags originate in the GitHub SaaS
53
+ repository.
54
+ 2. The GHES `main` branch and release tag are synchronized without rewriting
55
+ history.
56
+ 3. The exact retained release tarball is attached to the matching GHES release;
57
+ it is not rebuilt on GHES.
58
+ 4. A release is not certified merely because it appears on GHES. The final
59
+ cross-channel attestation must prove that npm, Artifactory, GitHub SaaS,
60
+ Homebrew, and GHES represent the same source and bytes.
61
+ 5. Developers do not dual-push feature branches. Mirror synchronization is a
62
+ release/operations responsibility and must eventually use a narrowly scoped
63
+ workload identity rather than a personal SSH key.
64
+
65
+ The destination must eventually enforce repository visibility, branch
66
+ protection, required reviews/checks, security scans, commit/tag provenance, and
67
+ license notices. Today the repository is internal, but `main` is unprotected and
68
+ maintainers retain push access. Those are open governance controls, not
69
+ completed evidence. Future mirror automation must fail closed and must not
70
+ accept changes back into the authoritative repository.
71
+
72
+ ## Required governance follow-up
73
+
74
+ Record or complete:
75
+
76
+ - repository-owner approval to disclose the source to P&T;
77
+ - enterprise GitHub/security approval for cross-organization private forks or
78
+ mirrors;
79
+ - legal/compliance confirmation for source and license visibility;
80
+ - the exact destination GitHub organization and repository name;
81
+ - confirmation of destination visibility and membership controls;
82
+ - the required branch-protection, review, scan, and retention policy;
83
+ - approval of a narrowly scoped GitHub App/workload identity, its installation
84
+ owners, secret store, rotation owner, and audit-log owner;
85
+ - an owner for incident response and mirror decommissioning.
86
+
87
+ The destination repository and current release asset are live. Branch
88
+ protection, enforced read-only direction, automated mirror synchronization,
89
+ production threshold-update trust, timed onboarding evidence, and a Windows
90
+ named-client release certification remain open gates; the existence of this
91
+ 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.
@@ -0,0 +1,81 @@
1
+ # Repositories and worktrees
2
+
3
+ `repos` manages local repository checkouts operationally. It does not declare
4
+ that discovered repositories form one software system.
5
+
6
+ ```bash
7
+ knodin repos discover <root...> --depth 4 --linked-worktrees=skip
8
+ knodin repos init <root...> --dry-run
9
+ knodin repos status <root...>
10
+ knodin repos doctor <root...>
11
+ knodin repos search "payment adapter" --root <root> --items 25 --tokens 16384 --json
12
+ ```
13
+
14
+ Use `--linked-worktrees=include` explicitly to include linked worktrees.
15
+ Discovery is deterministic, bounded by depth, does not follow child symlinks,
16
+ and does not prune Git metadata.
17
+
18
+ Results distinguish:
19
+
20
+ - a Git main worktree;
21
+ - a Git linked worktree owned by that repository;
22
+ - a repository nested inside another checkout;
23
+ - stale linked-worktree metadata;
24
+ - an unrelated repository under the same discovery root.
25
+
26
+ Sibling location never establishes system membership or a relationship.
27
+ `repos init` works sequentially and performs each live repository operation in
28
+ a disposable process with a 768 MiB RSS ceiling. A worker that exceeds the
29
+ ceiling or its deadline has its process group terminated, produces a
30
+ repository-scoped failure, and does not prevent later repositories from being
31
+ processed. JSON records the observed per-repository peak, enforced ceiling,
32
+ and count of ceiling failures. The 50 ms RSS heartbeat is a bounded enforcement
33
+ interval rather than a claim that transient allocation can never overshoot by
34
+ one sample. Windows can terminate the worker process but cannot provide the
35
+ same descendant process-group guarantee as macOS/Linux.
36
+
37
+ Initialization supports `--dry-run` and preserves a healthy graph when only
38
+ managed integration needs refreshing. Dry-run never starts a worker, opens a
39
+ graph database, or loads a model. JSON output is versioned and never contains
40
+ progress or deprecation messages.
41
+
42
+ For large initialization runs, add `--manifest <path>`. knodin atomically
43
+ records each completed repository after it succeeds. Repeating the identical
44
+ command with the same manifest skips completed repositories and resumes the
45
+ remaining deterministic sequence. A manifest is rejected if its repository
46
+ selection, depth, or linked-worktree policy differs. `--dry-run` never writes
47
+ the manifest. The single MCP gateway exposes equivalent `dryRun` and
48
+ `manifestPath` arguments on `repositoryAction: "init"`.
49
+
50
+ `knodin fleet init` is a deprecated compatibility alias for two minor releases.
51
+ Its warning is written only for human output, never JSON/JSONL or MCP stdio.
52
+
53
+ Repository inventory is portfolio health, not semantic federation. Configure
54
+ cooperating components explicitly in `reckon.yaml`; use
55
+ `knodin system validate` before system-scoped queries.
56
+
57
+ ## Independent repository search
58
+
59
+ `repos search` visits selected repositories sequentially, never establishes
60
+ system membership, and never uses the legacy semantic-federation peer list. Use
61
+ repeatable `--include <stable-id-or-path>` and `--exclude
62
+ <stable-id-or-path>` filters. Results retain repository-scoped symbol/file
63
+ identity, exact source evidence, confidence, graph freshness, and health.
64
+
65
+ The default is fail closed: an uninitialized, empty, indexing,
66
+ repair-required, lifecycle-degraded, or unknown selected graph makes the
67
+ answer `unavailable`, not an ordinary zero-match result. `--allow-partial`
68
+ returns `partial` and names every omitted repository and remediation. A healthy
69
+ search with no matches is `no-match`.
70
+
71
+ `--items`, `--bytes`, and `--tokens` are hard response budgets. A truncated
72
+ response includes an opaque `--cursor` value for deterministic continuation.
73
+ The cursor is bound to the query and stable selection and is rejected if reused
74
+ for a different search.
75
+
76
+ Versioned inventory records include stable identity, checkout classification,
77
+ initialization and health, HEAD/index freshness, languages, package identities,
78
+ configured system memberships, bounded documentation candidates, errors, and
79
+ remediation. Local paths are personal output; team configuration contains only
80
+ stable identities. A roadmap filename is only a candidate unless team
81
+ configuration declares authority.