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,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
+ }