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.
- package/LICENSE +21 -0
- package/README.md +590 -0
- package/dist/bin/cli.js +1704 -0
- package/dist/src/agent-integration.js +250 -0
- package/dist/src/artifact-refresh.js +81 -0
- package/dist/src/cli-args.js +267 -0
- package/dist/src/cli-model.js +324 -0
- package/dist/src/compact-structural.js +96 -0
- package/dist/src/competitive-constraints.js +20 -0
- package/dist/src/competitive-manifest.js +330 -0
- package/dist/src/competitive-measurement.js +183 -0
- package/dist/src/competitive-runner.js +453 -0
- package/dist/src/competitive-sandbox.js +108 -0
- package/dist/src/context-export.js +422 -0
- package/dist/src/context.js +102 -0
- package/dist/src/docs-sections.js +141 -0
- package/dist/src/doctor.js +380 -0
- package/dist/src/engine/ann-hnsw.js +271 -0
- package/dist/src/engine/embeddings.js +193 -0
- package/dist/src/engine/file-walker.js +43 -0
- package/dist/src/engine/index.js +13030 -0
- package/dist/src/engine/perf.js +115 -0
- package/dist/src/engine/prune.js +112 -0
- package/dist/src/engine/source-policy.js +69 -0
- package/dist/src/engine/sqlite.js +71 -0
- package/dist/src/engine/symbol-delete.js +58 -0
- package/dist/src/failure-diagnosis.js +590 -0
- package/dist/src/fleet.js +7 -0
- package/dist/src/git-executable.js +31 -0
- package/dist/src/graph-query-health.js +115 -0
- package/dist/src/index-activity.js +125 -0
- package/dist/src/init-progress-worker.js +107 -0
- package/dist/src/init-progress.js +155 -0
- package/dist/src/init.js +985 -0
- package/dist/src/lifecycle-health.js +213 -0
- package/dist/src/lsp-readonly.js +217 -0
- package/dist/src/output-compression.js +629 -0
- package/dist/src/output-telemetry.js +359 -0
- package/dist/src/pr-triage.js +638 -0
- package/dist/src/relationship-adapters.js +370 -0
- package/dist/src/release-attestation.js +533 -0
- package/dist/src/repair-progress-worker.js +121 -0
- package/dist/src/repair-progress.js +262 -0
- package/dist/src/repository-init-process.js +173 -0
- package/dist/src/repository-management.js +1089 -0
- package/dist/src/response-budget.js +184 -0
- package/dist/src/server.js +53 -0
- package/dist/src/system-config.js +615 -0
- package/dist/src/terminal-help.js +83 -0
- package/dist/src/tools/knodin-tools.js +1438 -0
- package/dist/src/tools/reckon-tools.js +5 -0
- package/dist/src/update-policy.js +944 -0
- package/dist/src/update-trust.js +503 -0
- package/dist/src/version.js +13 -0
- package/dist/src/visualization.js +162 -0
- package/dist/src/wait-for-fresh.js +98 -0
- package/dist/src/worktree-lifecycle.js +231 -0
- package/docs/CLI.md +39 -0
- package/docs/COMMAND-OUTPUT-COMPRESSION.md +194 -0
- package/docs/DEAD-CODE-AND-IMPACT.md +27 -0
- package/docs/DOCTOR-AND-UPDATES.md +84 -0
- package/docs/INDEXING-POLICY-AND-PROVENANCE.md +37 -0
- package/docs/INSTALLATION.md +208 -0
- package/docs/MCP.md +100 -0
- package/docs/PT-ACCESS-RECOMMENDATION.md +91 -0
- package/docs/RELEASE-0.3-EVIDENCE.md +73 -0
- package/docs/REPOSITORIES-AND-WORKTREES.md +81 -0
- package/docs/SIGNED-UPDATES.md +146 -0
- package/docs/SYSTEMS-AND-RELATIONSHIPS.md +45 -0
- package/docs/TELEMETRY.md +42 -0
- package/docs/releases/0.3.0.md +46 -0
- package/docs/releases/0.4.0.md +68 -0
- package/docs/releases/0.4.1.md +28 -0
- package/docs/releases/0.4.2.md +27 -0
- package/docs/releases/0.4.3.md +23 -0
- package/docs/releases/0.5.0.md +29 -0
- package/package.json +110 -0
- package/schemas/release-attestation-v1.schema.json +210 -0
- package/tree-sitter-prisma.wasm +0 -0
- package/tree-sitter-sql.wasm +0 -0
- 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.
|