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,146 @@
|
|
|
1
|
+
# Signed update metadata trust
|
|
2
|
+
|
|
3
|
+
knodin's update trust is local and channel-independent. npm, Homebrew,
|
|
4
|
+
Artifactory, GitHub SaaS, and GHES may transport metadata and artifacts, but no
|
|
5
|
+
one transport is an authority to install code.
|
|
6
|
+
|
|
7
|
+
`src/update-trust.ts` is the pure verification boundary. It performs no network
|
|
8
|
+
request, package-manager command, filesystem activation, or telemetry write.
|
|
9
|
+
`src/update-policy.ts` composes that verifier with bounded HTTPS fetching,
|
|
10
|
+
private monotonic state, policy, channel cross-checking, quarantine, exact local
|
|
11
|
+
manager artifacts, health validation, and rollback. C64 adds the release-time
|
|
12
|
+
CycloneDX/Sigstore evidence and fail-closed five-channel attestation machinery;
|
|
13
|
+
C65 must still certify the smoke sandbox and recovery drills, and a real release
|
|
14
|
+
must produce verified evidence before activation is enabled.
|
|
15
|
+
|
|
16
|
+
## Trust model
|
|
17
|
+
|
|
18
|
+
The metadata model has four disjoint Ed25519 roles:
|
|
19
|
+
|
|
20
|
+
| Role | Purpose | Maximum signed lifetime | Required threshold |
|
|
21
|
+
| --- | --- | ---: | ---: |
|
|
22
|
+
| `root` | Delegates keys and rotates trust | 366 days | At least 2 |
|
|
23
|
+
| `targets` | Authorizes immutable release artifacts and channels | 93 days | At least 2 |
|
|
24
|
+
| `snapshot` | Binds an exact targets version, length, and digest | 32 days | At least 1 |
|
|
25
|
+
| `timestamp` | Publishes the current snapshot and bounds freezes | 8 days | At least 1 |
|
|
26
|
+
|
|
27
|
+
Root and targets thresholds prevent one stolen signing key from authorizing a
|
|
28
|
+
release. All four roles must use separate, content-addressed keys. A root
|
|
29
|
+
rotation is accepted one version at a time and only when both the previously
|
|
30
|
+
trusted root threshold and the candidate root threshold sign the new root.
|
|
31
|
+
|
|
32
|
+
The initial root envelope is trusted only when its SHA-256 matches an
|
|
33
|
+
independently pinned digest shipped by a previously trusted knodin build. The
|
|
34
|
+
pin must never be learned from fetched metadata or a package registry.
|
|
35
|
+
|
|
36
|
+
Metadata is signed over deterministic UTF-8 JSON: object keys use ECMAScript
|
|
37
|
+
code-unit ordering, arrays retain order, and undefined, cyclic, non-finite, or
|
|
38
|
+
non-plain values are rejected. Key IDs are the SHA-256 of the canonical public
|
|
39
|
+
key record.
|
|
40
|
+
|
|
41
|
+
## Verification order
|
|
42
|
+
|
|
43
|
+
The verifier fails closed in this order:
|
|
44
|
+
|
|
45
|
+
1. Validate the installed trusted root and its independent digest pin.
|
|
46
|
+
2. Verify the trusted root's own threshold signatures.
|
|
47
|
+
3. Accept the same root byte-for-byte, or verify a one-step rotation under both
|
|
48
|
+
old and new root thresholds.
|
|
49
|
+
4. Validate role separation, schema, generation time, expiry, and maximum
|
|
50
|
+
metadata lifetime.
|
|
51
|
+
5. Verify threshold signatures for targets, snapshot, and timestamp.
|
|
52
|
+
6. Bind timestamp to the exact canonical snapshot envelope by version, byte
|
|
53
|
+
length, and SHA-256.
|
|
54
|
+
7. Bind snapshot to the exact canonical targets envelope the same way.
|
|
55
|
+
8. Compare every role's version and digest with durable prior state. Lower
|
|
56
|
+
versions are rollback; changed bytes at the same version are equivocation.
|
|
57
|
+
9. Select only the requested relative target path.
|
|
58
|
+
10. Before quarantine, compare the downloaded artifact with its signed byte
|
|
59
|
+
length and SHA-256.
|
|
60
|
+
|
|
61
|
+
The successful result returns the exact verified root envelope. C63 persists it
|
|
62
|
+
for evidence, but never promotes a root merely because mutable local state says
|
|
63
|
+
it is trusted: each check and rollback remains anchored to the independently
|
|
64
|
+
shipped initial root and pin. When more than one rotation was missed, the client
|
|
65
|
+
fetches each numbered intermediate root, bounds one check to 32 rotations,
|
|
66
|
+
cross-checks every intermediate across configured mirrors, and advances only
|
|
67
|
+
one dual-threshold version at a time. A skipped, substituted, malformed, or
|
|
68
|
+
wrong-version intermediate root fails closed without persisting new trust.
|
|
69
|
+
|
|
70
|
+
The signed target also carries the semantic version, release channel, full
|
|
71
|
+
source commit, and digests for build provenance, the CycloneDX SBOM, its signed
|
|
72
|
+
attestation, and the cross-channel release attestation. Metadata validation
|
|
73
|
+
accepts these fields so notify-only clients can read a staged repository, but
|
|
74
|
+
download/apply refuses when any digest is absent. The verifier does not invent
|
|
75
|
+
missing provenance or promote a merely claimed channel result.
|
|
76
|
+
|
|
77
|
+
## Defenses and limits
|
|
78
|
+
|
|
79
|
+
Executable tests cover valid threshold authorization, missing threshold
|
|
80
|
+
signatures, signed-field mutation, artifact substitution, expired timestamp
|
|
81
|
+
freeze, rollback, same-version equivocation, mix-and-match metadata, role-key
|
|
82
|
+
reuse, root-pin substitution, future metadata, and root rotation without the
|
|
83
|
+
old threshold. Recovery tests additionally cover missed sequential rotations,
|
|
84
|
+
skipped roots, intermediate mirror disagreement, and malicious version jumps.
|
|
85
|
+
|
|
86
|
+
An isolated 0.4.3 adversarial drill executed the trust, policy, CLI, and release-
|
|
87
|
+
attestation suites together: 4 files and 52 scenarios passed on macOS with Node
|
|
88
|
+
26. Its machine-readable record is
|
|
89
|
+
`docs/evidence/0.4.3-update-defense-drill.json`. The record separately identifies
|
|
90
|
+
the post-tag commit from which the drill executed and the immutable 0.4.3 source
|
|
91
|
+
commit whose implementation it exercised, plus the environment, command,
|
|
92
|
+
defenses, and exclusions. Injected transport, package-manager, smoke, and health
|
|
93
|
+
adapters make this repeatable evidence of the verification and recovery logic;
|
|
94
|
+
they do not certify a real npm/Homebrew mutation path or replace the production
|
|
95
|
+
ceremony and live drills.
|
|
96
|
+
|
|
97
|
+
The verifier cannot make the first installation trustworthy by itself. A
|
|
98
|
+
production release still requires an offline root-key ceremony, independent
|
|
99
|
+
pin distribution, durable trusted-state storage, compromised-key rotation
|
|
100
|
+
drills, and verified artifacts on every approved channel. Until that ceremony
|
|
101
|
+
and C64–C65 are complete:
|
|
102
|
+
|
|
103
|
+
- the former npm `latest` hint is not used by doctor, status, MCP, or update commands;
|
|
104
|
+
- no release is authorized by `src/update-trust.ts` in production;
|
|
105
|
+
- no automatic update may be enabled; and
|
|
106
|
+
- a registry, formula, release page, or mutable URL must not be treated as a
|
|
107
|
+
root of trust.
|
|
108
|
+
|
|
109
|
+
## Production key ceremony gate
|
|
110
|
+
|
|
111
|
+
Private root keys must be created and retained offline under separate
|
|
112
|
+
custodians. No production private key or recovery secret belongs in this
|
|
113
|
+
repository, CI variables, npm, Homebrew, GitHub, GHES, or Artifactory. Before
|
|
114
|
+
activating signed checks, the release owners must record:
|
|
115
|
+
|
|
116
|
+
- custodians and a two-person approval path;
|
|
117
|
+
- public key IDs and the independently reviewed root-envelope digest;
|
|
118
|
+
- offline backup and recovery controls;
|
|
119
|
+
- online targets/snapshot/timestamp key storage and rotation periods;
|
|
120
|
+
- emergency revocation and root-rotation rehearsal evidence; and
|
|
121
|
+
- the exact knodin source commit that first embeds the trusted root pin.
|
|
122
|
+
|
|
123
|
+
This external ceremony is deliberately a release gate rather than generated
|
|
124
|
+
test material masquerading as production trust.
|
|
125
|
+
|
|
126
|
+
## Client policy and recovery
|
|
127
|
+
|
|
128
|
+
The implemented policy modes are `notify-only`, `download-verify-only`,
|
|
129
|
+
`apply-patch`, and `apply-minor`; major updates always require manual approval.
|
|
130
|
+
Policies also bound release age, approved channels, enterprise mirror origins,
|
|
131
|
+
optional exact metadata/artifact cross-checks, and UTC maintenance windows.
|
|
132
|
+
|
|
133
|
+
`knodin update status` and `explain` are offline reads. `check` uses no
|
|
134
|
+
repository context. `apply` first quarantines and verifies the candidate plus a
|
|
135
|
+
signed artifact for the currently installed version. A missing rollback target,
|
|
136
|
+
provenance object, SBOM, release attestation, smoke sandbox, manager adapter, or
|
|
137
|
+
health check is a refusal, not a warning. Explicit rollback re-verifies the
|
|
138
|
+
stored signed metadata, artifact, provenance, SBOM, both attestations, and every
|
|
139
|
+
quarantine path before invoking the manager; nested symlink redirection is a
|
|
140
|
+
hard refusal. Apply also requires the candidate attestation's rollback version,
|
|
141
|
+
path, and derived digest to match the separately downloaded and verified rollback
|
|
142
|
+
artifact. Signed
|
|
143
|
+
non-SemVer target versions are ineligible before path construction; quarantine
|
|
144
|
+
uses fresh exclusive files under a symlink-rejecting private root; and automatic
|
|
145
|
+
rollback succeeds only after a second health check validates the restored
|
|
146
|
+
installation.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Systems and relationships
|
|
2
|
+
|
|
3
|
+
A system is an explicitly configured set of cooperating components. Components
|
|
4
|
+
may represent APIs, resources, repositories, or artifacts. Unrelated
|
|
5
|
+
repositories remain separate even when they share a parent directory or match
|
|
6
|
+
the same search query.
|
|
7
|
+
|
|
8
|
+
Team configuration belongs in repository-root `reckon.yaml` and contains stable
|
|
9
|
+
identities without local absolute paths. Personal checkout paths belong in:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
$XDG_CONFIG_HOME/knodin/repositories.yaml
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Commands:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
knodin system list
|
|
19
|
+
knodin system show <system-id>
|
|
20
|
+
knodin system validate <system-id>
|
|
21
|
+
knodin system query <system-id>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The existing single MCP gateway exposes the same `system` operation with
|
|
25
|
+
`systemAction=list|show|validate|query`.
|
|
26
|
+
|
|
27
|
+
Relationship types include dependency, API provider/consumer, deployment,
|
|
28
|
+
provisioning, output/config/path references, events, images, and provenance.
|
|
29
|
+
Every relationship carries its target identity, exact evidence location,
|
|
30
|
+
adapter, evidence kind, confidence, freshness, and index generation when one
|
|
31
|
+
exists.
|
|
32
|
+
|
|
33
|
+
Declared relationships have highest confidence. Extracted package/contract/
|
|
34
|
+
infrastructure relationships are source-evidenced. Inferred literal or key
|
|
35
|
+
matches remain labeled and cannot silently create system membership. Optional
|
|
36
|
+
runtime evidence corroborates static evidence; it does not replace canonical
|
|
37
|
+
source.
|
|
38
|
+
|
|
39
|
+
`.reckon/federation.json` remains a compatibility input and is never silently
|
|
40
|
+
discarded. Loaded entries are labeled `legacy-federation` until migrated to
|
|
41
|
+
stable identities.
|
|
42
|
+
|
|
43
|
+
System validation fails closed for unresolved repository identities or missing
|
|
44
|
+
required checkouts. Partial query behavior must be explicit and name every
|
|
45
|
+
omitted component; absent evidence is never reported as zero.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Local savings telemetry
|
|
2
|
+
|
|
3
|
+
knodin's optional telemetry is local, metadata-only, and disabled by default.
|
|
4
|
+
It uses `gpt-tokenizer@3.4.0` with the `o200k_base` encoding and records:
|
|
5
|
+
|
|
6
|
+
- the actual optimized response contract, bytes, and tokens;
|
|
7
|
+
- an executed full-file baseline only when the operation identifies bounded
|
|
8
|
+
repository-contained files;
|
|
9
|
+
- byte and token savings, including negative savings;
|
|
10
|
+
- latency p50/p95 inputs, process RSS, cold/warm operation state, success/error
|
|
11
|
+
outcome, agent round trips, truncation, detail mode, and MCP schema token cost;
|
|
12
|
+
- freshness failures, compression-fidelity samples, indexing time, and current
|
|
13
|
+
local index storage where those measurements are available;
|
|
14
|
+
- a one-way SHA-256-derived repository identifier for per-repository grouping.
|
|
15
|
+
|
|
16
|
+
Unknown baselines remain `null`; knodin does not invent a full-file comparison.
|
|
17
|
+
Persisted records contain no source or file paths. Enable persistence for an MCP
|
|
18
|
+
call with `persistTelemetry: true`. Records default to 30-day retention and are
|
|
19
|
+
stored mode `0600` with atomic replacement. Inspect and manage them with:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
knodin telemetry status
|
|
23
|
+
knodin telemetry report
|
|
24
|
+
knodin telemetry export
|
|
25
|
+
knodin telemetry clear
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
`--retention-days 1..3650` changes the read/persistence window. `--input` and
|
|
29
|
+
`--output` accept only repository-contained, non-symlink paths. `clear` is the
|
|
30
|
+
only command that deletes the private JSONL file; report and export never do.
|
|
31
|
+
|
|
32
|
+
The default report is `.reckon/telemetry-report.html`. It includes summary,
|
|
33
|
+
operation, time-series, private repository, indexing-cost, latency, freshness,
|
|
34
|
+
and fidelity views with light/dark styling. The default machine-readable export
|
|
35
|
+
is `.reckon/telemetry-export.json` and labels measured, modeled, and unknown
|
|
36
|
+
baselines explicitly. Neither artifact needs a daemon, hosted service,
|
|
37
|
+
authentication, or source egress.
|
|
38
|
+
|
|
39
|
+
Telemetry never persists source, raw tool output, command text, usernames, or
|
|
40
|
+
absolute paths. A measured baseline is an executed, bounded, repository-local
|
|
41
|
+
full-file read; it is not inferred from file counts. Unsupported baselines and
|
|
42
|
+
metrics remain `null` or are counted as unavailable instead of being modeled.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Reckon Graph 0.3.0 release notes
|
|
2
|
+
|
|
3
|
+
Reckon Graph 0.3.0 makes graph freshness revision-truthful and closes the
|
|
4
|
+
lifecycle and completion-audit gaps observed in a large multi-worktree field
|
|
5
|
+
run. It is a backward-compatible minor release.
|
|
6
|
+
|
|
7
|
+
## Freshness and lifecycle
|
|
8
|
+
|
|
9
|
+
- Every graph answer carries a canonical current/indexed revision and
|
|
10
|
+
dirty-working-tree freshness envelope.
|
|
11
|
+
- Durable, coalescing hook events survive contention and failures; status,
|
|
12
|
+
`wait --fresh`, and `status --watch` expose queue progress.
|
|
13
|
+
- Deep repair binds a revision only after complete content verification.
|
|
14
|
+
- Worktree status, reconciliation, and safe dry-run removal expose per-worktree
|
|
15
|
+
graph ownership and detect removed worktrees.
|
|
16
|
+
|
|
17
|
+
## Diagnostics and completion audits
|
|
18
|
+
|
|
19
|
+
- Doctor reports separate Claude, Codex, Gemini, and Antigravity configuration,
|
|
20
|
+
protocol checks, and active-session evidence.
|
|
21
|
+
- Repair plans distinguish health findings from planned operations.
|
|
22
|
+
- PR listing and audits return explicit repository/login/error/zero-result
|
|
23
|
+
context, reviews, threads, checks, merge commits, branches, and graph impact.
|
|
24
|
+
|
|
25
|
+
## Bounded structural context
|
|
26
|
+
|
|
27
|
+
- File and batch outlines include stable identity, signatures, ranges,
|
|
28
|
+
visibility, containment, and parser evidence.
|
|
29
|
+
- Source-only explain and deterministic project overview reduce unnecessary
|
|
30
|
+
full-file reads.
|
|
31
|
+
- Go and Rust outlines use checked-in local Tree-sitter grammars.
|
|
32
|
+
- Optional local telemetry uses
|
|
33
|
+
`gpt-tokenizer@3.4.0:o200k_base`, preserves negative savings, measures schema
|
|
34
|
+
cost, and can render a static repository-local report without egress.
|
|
35
|
+
|
|
36
|
+
Command execution/output compression was evaluated but is not shipped because
|
|
37
|
+
portable hard memory and process-tree containment were not proven. Competitor
|
|
38
|
+
behavioral measurements remain incomplete without an authorized packaged
|
|
39
|
+
release or raw usage dataset. A post-release audit now pins and verifies the
|
|
40
|
+
authorized source revision without treating source inspection as end-to-end
|
|
41
|
+
performance evidence. See
|
|
42
|
+
[`../RELEASE-0.3-EVIDENCE.md`](../RELEASE-0.3-EVIDENCE.md) and
|
|
43
|
+
[`../COMMAND-OUTPUT-COMPRESSION.md`](../COMMAND-OUTPUT-COMPRESSION.md).
|
|
44
|
+
|
|
45
|
+
No tag, npm publication, Homebrew publication, or P&T mirror is created by this
|
|
46
|
+
release PR; each remains a separately authorized release action.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Reckon Graph 0.4.0 release notes
|
|
2
|
+
|
|
3
|
+
Reckon Graph 0.4.0 delivers the implemented portions of the Token Optimizer
|
|
4
|
+
parity program and adds trusted-update, release-attestation, large-portfolio,
|
|
5
|
+
and compact-response capabilities. It is a backward-compatible minor release.
|
|
6
|
+
|
|
7
|
+
## Compact structural and diagnostic context
|
|
8
|
+
|
|
9
|
+
- Compact file and batch outlines, symbol extraction, symbol search, and
|
|
10
|
+
project overview reduce response tokens while retaining stable identity,
|
|
11
|
+
source locations, parser evidence, ambiguity, and freshness.
|
|
12
|
+
- Deterministic log compression preserves diagnostic structures, enforces hard
|
|
13
|
+
budgets, records omissions, and supports bounded retrieval without rerunning
|
|
14
|
+
the original command.
|
|
15
|
+
- Failure diagnosis links log evidence to files, symbols, callers,
|
|
16
|
+
dependencies, tests, and recent changes in the local graph.
|
|
17
|
+
- The checked-in Token Optimizer replay and evidence-linked scorecard pin the
|
|
18
|
+
competitor and Reckon revisions and keep unsupported claims explicit.
|
|
19
|
+
|
|
20
|
+
## Portfolio and lifecycle reliability
|
|
21
|
+
|
|
22
|
+
- Repository filters are applied before inventory, large `git ls-files`
|
|
23
|
+
responses are supported, and selected repositories are processed
|
|
24
|
+
sequentially.
|
|
25
|
+
- Portfolio initialization is bounded, resumable, and truthful in dry-run
|
|
26
|
+
mode, including nested repositories and noisy Salesforce metadata.
|
|
27
|
+
- Lifecycle queues, `wait --fresh`, and installed-versus-active client status
|
|
28
|
+
provide revision-truthful observability.
|
|
29
|
+
- Terminal help uses a declarative command model and the available terminal
|
|
30
|
+
width while remaining snapshot-testable.
|
|
31
|
+
|
|
32
|
+
## Private ROI evidence
|
|
33
|
+
|
|
34
|
+
- Local, opt-in telemetry uses a real tokenizer and records bounded operation,
|
|
35
|
+
latency, indexing, schema, fidelity, and savings metrics without source,
|
|
36
|
+
command text, absolute paths, usernames, or network egress.
|
|
37
|
+
- The self-contained dashboard and export bundle distinguish directly measured
|
|
38
|
+
observations from modeled counterfactuals.
|
|
39
|
+
|
|
40
|
+
## Trusted distribution and updates
|
|
41
|
+
|
|
42
|
+
- Signed-only update status, check, explain, apply, and rollback policies bind
|
|
43
|
+
artifact length/digest, channel, provenance, SBOM, release age, maintenance
|
|
44
|
+
window, and rollback state.
|
|
45
|
+
- TUF-inspired root, targets, snapshot, and timestamp verification detects
|
|
46
|
+
rollback, freeze, mix-and-match, expiry, threshold, and compromised-channel
|
|
47
|
+
failures. Bounded sequential root recovery handles missed rotations.
|
|
48
|
+
- The release workflow builds one tarball, creates and independently verifies
|
|
49
|
+
provenance and CycloneDX SBOM attestations, then publishes the exact bytes to
|
|
50
|
+
npm and Docusign Artifactory.
|
|
51
|
+
- Final certification additionally requires byte-identical GitHub SaaS, GHES,
|
|
52
|
+
and Homebrew observations plus the machine-readable cross-channel release
|
|
53
|
+
attestation.
|
|
54
|
+
|
|
55
|
+
## Intentional boundary
|
|
56
|
+
|
|
57
|
+
Reckon does not expose unrestricted shell execution. Portable process-tree,
|
|
58
|
+
filesystem, network, credential, and resource containment has not been proven,
|
|
59
|
+
so command execution remains an explicit safety-based non-goal. Existing
|
|
60
|
+
trusted execution tools can pass their output to Reckon's compression and
|
|
61
|
+
failure-diagnosis operations.
|
|
62
|
+
|
|
63
|
+
Version preparation does not itself publish any channel. The release is
|
|
64
|
+
certified only after the separately authorized tag workflow and five-channel
|
|
65
|
+
verification complete. Production offline root custody, compromised-runner
|
|
66
|
+
drills, automated non-personal GHES mirroring, timed onboarding, and native
|
|
67
|
+
Windows named-client certification remain documented limitations until their
|
|
68
|
+
evidence is recorded.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Reckon Graph 0.4.1 release notes
|
|
2
|
+
|
|
3
|
+
Reckon Graph 0.4.1 is the publishable patch release of the 0.4 line. It contains
|
|
4
|
+
all functionality described in the 0.4.0 release notes plus a fail-closed
|
|
5
|
+
release-verification compatibility fix.
|
|
6
|
+
|
|
7
|
+
## Release verification fix
|
|
8
|
+
|
|
9
|
+
- The workflow now verifies signed provenance and the CycloneDX SBOM using the
|
|
10
|
+
exact certificate identity together with repository, source digest, source
|
|
11
|
+
ref, predicate type, and GitHub Actions OIDC issuer constraints accepted by
|
|
12
|
+
the current GitHub CLI.
|
|
13
|
+
- The release-attestation CLI test double now runs with `set -eu`, ensuring an
|
|
14
|
+
assertion mismatch actually fails the test instead of continuing to a later
|
|
15
|
+
successful command.
|
|
16
|
+
|
|
17
|
+
## Why 0.4.0 was not published
|
|
18
|
+
|
|
19
|
+
The immutable `v0.4.0` tag reached the signed-evidence stage, then failed closed
|
|
20
|
+
before npm or Artifactory publication because the installed GitHub CLI rejects
|
|
21
|
+
combining `--cert-identity` with `--signer-workflow`. The tag remains unchanged
|
|
22
|
+
for auditability and 0.4.0 was not published to any package channel. This patch
|
|
23
|
+
release contains the corrected workflow rather than rewriting the existing
|
|
24
|
+
tag.
|
|
25
|
+
|
|
26
|
+
As with every release, version preparation alone does not certify distribution.
|
|
27
|
+
Certification requires the tag workflow and byte-for-byte verification across
|
|
28
|
+
npm, Docusign Artifactory, GitHub SaaS, GHES, and Homebrew.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Reckon Graph 0.4.2 release notes
|
|
2
|
+
|
|
3
|
+
Reckon Graph 0.4.2 is the publishable patch release of the 0.4 line. It contains
|
|
4
|
+
all functionality described in the 0.4.0 and 0.4.1 release notes plus a
|
|
5
|
+
canonical CycloneDX attestation-predicate fix.
|
|
6
|
+
|
|
7
|
+
## CycloneDX attestation verification fix
|
|
8
|
+
|
|
9
|
+
- The release workflow and final cross-channel verifier now use the canonical
|
|
10
|
+
`https://cyclonedx.org/bom` predicate type emitted by GitHub's SBOM
|
|
11
|
+
attestation action. The CycloneDX document's `specVersion` remains validated
|
|
12
|
+
independently as 1.4, 1.5, or 1.6.
|
|
13
|
+
- Regression tests require the canonical attestation predicate for SBOM bundles
|
|
14
|
+
and reject accidental coupling to a document-version URI.
|
|
15
|
+
|
|
16
|
+
## Why 0.4.1 was not published
|
|
17
|
+
|
|
18
|
+
The immutable `v0.4.1` tag produced a verified release tarball, signed SLSA
|
|
19
|
+
provenance, and a signed CycloneDX SBOM, then failed closed before npm or
|
|
20
|
+
Artifactory publication. Inspection of the signed bundle proved that GitHub
|
|
21
|
+
emitted `https://cyclonedx.org/bom`, while the verifier requested
|
|
22
|
+
`https://cyclonedx.org/bom/v1.5`. The tag remains unchanged for auditability;
|
|
23
|
+
this patch release corrects the verifier instead of rewriting it.
|
|
24
|
+
|
|
25
|
+
Version preparation alone does not certify distribution. Certification still
|
|
26
|
+
requires the tag workflow and byte-for-byte verification across npm, Docusign
|
|
27
|
+
Artifactory, GitHub SaaS, GHES, and Homebrew.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Reckon Graph 0.4.3
|
|
2
|
+
|
|
3
|
+
Reckon Graph 0.4.3 corrects the approved Docusign Artifactory channel identity
|
|
4
|
+
used by final release attestation.
|
|
5
|
+
|
|
6
|
+
## Release-integrity correction
|
|
7
|
+
|
|
8
|
+
- Final channel evidence now requires the authoritative
|
|
9
|
+
`artifactory-corp.docusignhq.com` host returned by Docusign Artifactory.
|
|
10
|
+
- The obsolete `artifactory.docusignhq.com` alias is rejected. It does not
|
|
11
|
+
serve the published raw artifact and must not appear in a verified release
|
|
12
|
+
record.
|
|
13
|
+
- Regression fixtures cover the production host and prevent the obsolete alias
|
|
14
|
+
from returning.
|
|
15
|
+
|
|
16
|
+
Version 0.4.2 was successfully published to npm, Artifactory, GitHub SaaS, and
|
|
17
|
+
Homebrew, but its final five-channel attestation was intentionally withheld when
|
|
18
|
+
the real Artifactory observation exposed this host mismatch. No mismatched
|
|
19
|
+
artifact was installed: all four observed 0.4.2 artifacts had identical bytes.
|
|
20
|
+
|
|
21
|
+
As with every release, 0.4.3 is certified only after the tag workflow and final
|
|
22
|
+
cross-channel verification complete successfully. Preparing this version does
|
|
23
|
+
not itself publish it.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# knodin 0.5.0
|
|
2
|
+
|
|
3
|
+
knodin 0.5.0 completes the public product and package rename from Reckon Graph.
|
|
4
|
+
|
|
5
|
+
## New identity
|
|
6
|
+
|
|
7
|
+
- The unscoped npm package is `knodin`.
|
|
8
|
+
- The canonical executable is `knodin`.
|
|
9
|
+
- The MCP server and its single gateway tool are named `knodin`.
|
|
10
|
+
- The display name is always lowercase, with the caret-beak mark as the
|
|
11
|
+
canonical logo and `<◀ knodin` as the terminal lockup.
|
|
12
|
+
|
|
13
|
+
## Compatibility
|
|
14
|
+
|
|
15
|
+
- The package still exposes `reckon` as a compatibility executable.
|
|
16
|
+
- Existing `.reckon/` state, `reckon.yaml`, and `RECKON_*` environment
|
|
17
|
+
variables are retained so the rename does not force a reindex or invalidate
|
|
18
|
+
local configuration.
|
|
19
|
+
- `knodin init` migrates managed MCP registrations and recognizes lifecycle
|
|
20
|
+
hooks created by Reckon Graph.
|
|
21
|
+
- Historical benchmark and release evidence retains its original product name
|
|
22
|
+
and source identities.
|
|
23
|
+
|
|
24
|
+
## Distribution
|
|
25
|
+
|
|
26
|
+
Public npm is the initial supported installation channel. The previous
|
|
27
|
+
`reckon-graph` package remains available as a deprecated compatibility
|
|
28
|
+
signpost; it is not unpublished. The legacy Homebrew formula is not a supported
|
|
29
|
+
knodin 0.5.0 channel.
|
package/package.json
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "knodin",
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "knodin — source-evidenced local code intelligence with known bounds. Stable identity, fresh evidence, truthful budgets, and recoverable bounded views.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/knowdin/knodin.git"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/knowdin/knodin#readme",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/knowdin/knodin/issues"
|
|
13
|
+
},
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public",
|
|
16
|
+
"registry": "https://registry.npmjs.org/"
|
|
17
|
+
},
|
|
18
|
+
"type": "module",
|
|
19
|
+
"bin": {
|
|
20
|
+
"knodin": "./dist/bin/cli.js",
|
|
21
|
+
"reckon": "./dist/bin/cli.js"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"docs/DEAD-CODE-AND-IMPACT.md",
|
|
26
|
+
"docs/DOCTOR-AND-UPDATES.md",
|
|
27
|
+
"docs/INDEXING-POLICY-AND-PROVENANCE.md",
|
|
28
|
+
"docs/INSTALLATION.md",
|
|
29
|
+
"docs/MCP.md",
|
|
30
|
+
"docs/COMMAND-OUTPUT-COMPRESSION.md",
|
|
31
|
+
"docs/CLI.md",
|
|
32
|
+
"docs/PT-ACCESS-RECOMMENDATION.md",
|
|
33
|
+
"docs/REPOSITORIES-AND-WORKTREES.md",
|
|
34
|
+
"docs/RELEASE-0.3-EVIDENCE.md",
|
|
35
|
+
"docs/SIGNED-UPDATES.md",
|
|
36
|
+
"docs/releases/0.3.0.md",
|
|
37
|
+
"docs/releases/0.4.0.md",
|
|
38
|
+
"docs/releases/0.4.1.md",
|
|
39
|
+
"docs/releases/0.4.2.md",
|
|
40
|
+
"docs/releases/0.4.3.md",
|
|
41
|
+
"docs/releases/0.5.0.md",
|
|
42
|
+
"docs/SYSTEMS-AND-RELATIONSHIPS.md",
|
|
43
|
+
"docs/TELEMETRY.md",
|
|
44
|
+
"schemas/release-attestation-v1.schema.json",
|
|
45
|
+
"*.wasm"
|
|
46
|
+
],
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=24.0.0"
|
|
49
|
+
},
|
|
50
|
+
"scripts": {
|
|
51
|
+
"prepack": "npm run build",
|
|
52
|
+
"hooks:install": "tsx scripts/prepare-hooks.ts",
|
|
53
|
+
"dev": "tsx watch src/server.ts",
|
|
54
|
+
"start": "tsx src/server.ts",
|
|
55
|
+
"cli": "tsx bin/cli.ts",
|
|
56
|
+
"clean": "node scripts/clean-dist.mjs",
|
|
57
|
+
"build": "npm run clean && tsc -p tsconfig.build.json",
|
|
58
|
+
"typecheck": "tsc --noEmit",
|
|
59
|
+
"test": "tsx scripts/run-vitest-shards.ts",
|
|
60
|
+
"test:handles": "vitest run --reporter=verbose --reporter=hanging-process",
|
|
61
|
+
"test:watch": "vitest --watch",
|
|
62
|
+
"test:coverage": "tsx scripts/run-vitest-shards.ts --coverage",
|
|
63
|
+
"scan:sonar": "npm run test:coverage && sh scripts/run-sonar-scan.sh",
|
|
64
|
+
"test:pack-install": "tsx scripts/pack-install-smoke.ts",
|
|
65
|
+
"test:package-managers": "tsx scripts/package-manager-smoke.ts",
|
|
66
|
+
"test:naming-screen": "node --test scripts/naming-screen.test.js",
|
|
67
|
+
"measure:schema": "tsx scripts/measure-tool-schema.ts",
|
|
68
|
+
"check:dependency-deprecations": "tsx scripts/check-dependency-deprecations.ts",
|
|
69
|
+
"check:hygiene": "node scripts/check-repository-hygiene.mjs",
|
|
70
|
+
"bench:ann": "bun scripts/ann-bench.ts",
|
|
71
|
+
"bench:perf": "tsx scripts/perf-bench.ts",
|
|
72
|
+
"bench:competitive": "tsx scripts/competitive-bakeoff.ts",
|
|
73
|
+
"bench:token-optimizer": "tsx benchmarks/evaluations/token-optimizer-20260730/runner.ts",
|
|
74
|
+
"audit:token-optimizer": "tsx scripts/token-optimizer-source-audit.ts",
|
|
75
|
+
"release:attestation": "tsx scripts/release-attestation.ts",
|
|
76
|
+
"lint": "biome check .",
|
|
77
|
+
"lint:fix": "biome check --write ."
|
|
78
|
+
},
|
|
79
|
+
"dependencies": {
|
|
80
|
+
"@huggingface/transformers": "^4.2.0",
|
|
81
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
82
|
+
"chokidar": "^5.0.0",
|
|
83
|
+
"commander": "15.0.0",
|
|
84
|
+
"gpt-tokenizer": "3.4.0",
|
|
85
|
+
"ora": "9.4.1",
|
|
86
|
+
"re2-wasm": "1.0.2",
|
|
87
|
+
"tree-sitter-wasms": "^0.1.13",
|
|
88
|
+
"web-tree-sitter": "0.20.8",
|
|
89
|
+
"web-tree-sitter-sfapex": "2.4.1",
|
|
90
|
+
"yaml": "2.9.0",
|
|
91
|
+
"zod": "^4.3.6"
|
|
92
|
+
},
|
|
93
|
+
"overrides": {
|
|
94
|
+
"@hono/node-server": "^2.0.5",
|
|
95
|
+
"adm-zip": "^0.6.0",
|
|
96
|
+
"fast-uri": "^4.1.1",
|
|
97
|
+
"sharp": "^0.35.3"
|
|
98
|
+
},
|
|
99
|
+
"devDependencies": {
|
|
100
|
+
"@biomejs/biome": "2.4.6",
|
|
101
|
+
"@types/bun": "^1.3.14",
|
|
102
|
+
"@types/node": "^24.10.0",
|
|
103
|
+
"@vitest/coverage-v8": "^4.1.10",
|
|
104
|
+
"ajv": "8.20.0",
|
|
105
|
+
"lefthook": "^2.1.5",
|
|
106
|
+
"tsx": "^4.21.0",
|
|
107
|
+
"typescript": "^5.9.3",
|
|
108
|
+
"vitest": "^4.1.3"
|
|
109
|
+
}
|
|
110
|
+
}
|