@weftlet/toolkit 0.1.2 → 0.2.1

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 (55) hide show
  1. package/README.md +39 -3
  2. package/THIRD_PARTY_NOTICES.md +33 -0
  3. package/dist/application/hydrator.js +21 -6
  4. package/dist/application/overlay.js +46 -9
  5. package/dist/application/saved-evidence.d.ts +1 -0
  6. package/dist/configuration/config.d.ts +4 -0
  7. package/dist/configuration/config.js +12 -0
  8. package/dist/configuration/scip-project.d.ts +9 -0
  9. package/dist/configuration/scip-project.js +40 -0
  10. package/dist/extraction/codex-auth.js +9 -2
  11. package/dist/extraction/codex-command.d.ts +8 -0
  12. package/dist/extraction/codex-command.js +81 -0
  13. package/dist/extraction/document-references.d.ts +18 -0
  14. package/dist/extraction/document-references.js +94 -0
  15. package/dist/extraction/document.d.ts +9 -2
  16. package/dist/extraction/document.js +40 -47
  17. package/dist/extraction/module-request.d.ts +3 -0
  18. package/dist/extraction/module-request.js +25 -0
  19. package/dist/extraction/repository-nodes.d.ts +7 -0
  20. package/dist/extraction/repository-nodes.js +20 -0
  21. package/dist/extraction/routing.d.ts +14 -0
  22. package/dist/extraction/routing.js +151 -0
  23. package/dist/extraction/scip-project.d.ts +3 -0
  24. package/dist/extraction/scip-project.js +33 -0
  25. package/dist/extraction/semantic-process.js +17 -5
  26. package/dist/extraction/semantic.js +32 -5
  27. package/dist/extraction/static.d.ts +7 -3
  28. package/dist/extraction/static.js +15 -9
  29. package/dist/graph/query.js +21 -34
  30. package/dist/graph/ranking.d.ts +10 -0
  31. package/dist/graph/ranking.js +85 -0
  32. package/dist/interfaces/doctor.js +12 -3
  33. package/docs/ADR-002-saved-evidence.md +7 -1
  34. package/docs/ADR-003-draft-overlays.md +6 -0
  35. package/docs/ADR-004-rdf-query-path.md +6 -0
  36. package/docs/ADR-006-provider-boundaries.md +5 -0
  37. package/docs/ADR-010-committed-source-indexing.md +77 -0
  38. package/docs/ADR-011-explicit-document-links.md +48 -0
  39. package/docs/ADR-012-impact-ranking.md +50 -0
  40. package/docs/ADR-013-relative-module-requests.md +58 -0
  41. package/docs/ADR-014-routing-declarations.md +108 -0
  42. package/docs/ADR-015-repository-document-identity.md +57 -0
  43. package/docs/CONSUMER-TRIAL.md +166 -0
  44. package/docs/ENVIRONMENT-VALIDATION.md +9 -0
  45. package/docs/IMPACT-EVALUATION.md +363 -0
  46. package/docs/PROVIDERS.md +30 -2
  47. package/docs/RELEASE-1.0-PLAN.md +221 -0
  48. package/docs/RELEASING.md +16 -6
  49. package/docs/ROADMAP.md +53 -5
  50. package/docs/SOURCE-INVENTORY.md +10 -0
  51. package/docs/VALIDATION.md +438 -0
  52. package/docs/VIEWER.md +5 -0
  53. package/docs/WEFTLET-2.0-PLAN.md +282 -0
  54. package/docs/extraction-manifest.json +94 -17
  55. package/package.json +5 -2
package/docs/RELEASING.md CHANGED
@@ -1,6 +1,16 @@
1
1
  # Weftlet npm releases
2
2
 
3
- `@weftlet/core@0.1.1` and `@weftlet/toolkit@0.1.1` are published. Their first trusted
3
+ `@weftlet/core@0.2.0` and `@weftlet/toolkit@0.2.0` are published through GitHub OIDC.
4
+ [Run 40344526047](https://github.com/jchewitt/weftlet/actions/runs/40344526047) completed at
5
+ commit `ffe7f1d81f0421b35220bd7ba5b1555246c7a0e1`, including registry integrity checks,
6
+ package tags and GitHub Releases. The first attempt published core, then toolkit publication
7
+ stopped with Sigstore `TLOG_CREATE_ENTRY_ERROR` HTTP 409. Re-running failed jobs on the same
8
+ workflow restored the prepared archives and acceptance receipt; attempt 2 completed without
9
+ changing versions. See [validation](VALIDATION.md) for the verification record.
10
+
11
+ The first automatic release, 0.1.2, completed in
12
+ [run 39672652013](https://github.com/jchewitt/weftlet/actions/runs/39672652013),
13
+ including package tags and GitHub Releases at commit `3d8d1f38a9e70b38178921cdabf5e8714c417c1c`. The first trusted
4
14
  publication passed in [run 39661957651](https://github.com/jchewitt/weftlet/actions/runs/39661957651)
5
15
  from commit `720a5f964fe3cb6c438be6d22b4aa8b4ad44de17`, with matching registry archive integrity,
6
16
  npm provenance and a fresh public CLI installation. Earlier Weftlet and `@launch-echo` releases
@@ -24,8 +34,8 @@ preparation route; native Windows has focused CI coverage. See [validation](VALI
24
34
  **before** npm publication. Do not manually bump manifests or edit the generated plan.
25
35
  4. The plan change triggers **Weftlet release**. It validates and prepares both archives, publishes
26
36
  core followed by toolkit using npm trusted publishing, then verifies registry integrity.
27
- 5. After both versions are verified, a separate job creates tags such as `@weftlet/core@0.1.2`
28
- and `@weftlet/toolkit@0.1.2`, plus corresponding GitHub Releases, at that exact source commit.
37
+ 5. After both versions are verified, a separate job creates tags such as `@weftlet/core@0.2.0`
38
+ and `@weftlet/toolkit@0.2.0`, plus corresponding GitHub Releases, at that exact source commit.
29
39
  Existing tags are never moved. The publication job does not commit back to main.
30
40
 
31
41
  The bot uses GitHub's built-in token, not a personal access token. GitHub may require Settings →
@@ -138,7 +148,7 @@ Package-specific tags identify the exact published source, for example:
138
148
 
139
149
  ```sh
140
150
  git fetch --tags
141
- git switch --detach '@weftlet/toolkit@0.1.2'
151
+ git switch --detach '@weftlet/toolkit@0.2.0'
142
152
  ```
143
153
 
144
154
  Tags support inspection and reproduction, not mutation of npm history. To roll a consumer back,
@@ -148,8 +158,8 @@ Verify a new public release in a fresh disposable project, substituting its vers
148
158
 
149
159
  ```sh
150
160
  npm init -y
151
- npx --yes @weftlet/toolkit@0.1.1 init --yes
152
- npx --yes @weftlet/toolkit@0.1.1 config validate
161
+ npx --yes @weftlet/toolkit@0.2.0 init --yes
162
+ npx --yes @weftlet/toolkit@0.2.0 config validate
153
163
  ```
154
164
 
155
165
  Check registry hashes, transitive core resolution and provenance. Deprecating the previous
package/docs/ROADMAP.md CHANGED
@@ -3,6 +3,14 @@
3
3
  Project: `jchewitt/weftlet`. Extraction provenance is recorded in the
4
4
  [source inventory](SOURCE-INVENTORY.md).
5
5
 
6
+ Forward direction is captured in the [Weftlet 2.0 product plan](WEFTLET-2.0-PLAN.md):
7
+ consumer hardening, cited code-derived drafts, scoped approvals and reconciliation, an optional
8
+ review website, source publication, managed AI and guided setup. “2.0” is a planning label;
9
+ the published packages remain 0.2.0. The received consumer findings are tracked in the
10
+ [consumer hardening and 1.0 task list](RELEASE-1.0-PLAN.md): first release the blocking
11
+ document-identity patch, then address setup, reuse, diagnostics and document coverage before
12
+ official 1.0 acceptance. The 2.0 plan distinguishes proposed work from delivered capability.
13
+
6
14
  | Milestone | Delivered and checked | Remaining limits |
7
15
  | --- | --- | --- |
8
16
  | 1. Standalone | Explicit committed inventory, core/toolkit boundary, public examples, build/tests, packed independent consumer and real TypeScript indexing | GitHub exported; both @launch-echo packages published at 0.1.0 and public installation verified |
@@ -10,7 +18,7 @@ Project: `jchewitt/weftlet`. Extraction provenance is recorded in the
10
18
  | 2b. Draft overlays | Base/content identity, reindexed replacement, delete/rename handling, separate checkout/agent heads | Full implementation reindex; changed prose invalidated pending re-extraction |
11
19
  | 3. Unified graph | RDF/SPARQL, SHACL, lossless projection, bounded continuation, six-stage async cross-source fixture, negative extraction/linkage cases | Local SELECT only; 100,000-fact projection bound; no universal language support |
12
20
  | 4. Governance | Canonical approved rules, dependency-cruiser/ESLint/jscpd, scoped debt/expiry, transitive inference, optional OML ADR/parity | No active OWL reasoner; live formal compilation unverified; heuristics remain advisory |
13
- | 5. Providers/DX | Codex adapter, HDesk live Windows public-example pass and cache reuse, CLI init/config and npx setup, tested module contract, validation/budgets/timeouts/cancellation/retries/cache identity, diagnostics/progress | Cloud live run remains filesystem-blocked; native Windows npm executable discovery needs improvement; other real providers planned |
21
+ | 5. Providers/DX | Codex adapter, HDesk live Windows public-example pass and cache reuse, CLI init/config and npx setup, tested module contract, validation/budgets/timeouts/cancellation/retries/cache identity, diagnostics/progress | Cloud live run remains filesystem-blocked; native npm launcher discovery and CRLF integrity validated in hosted Windows; live auth follow-up and other real providers remain |
14
22
  | 6. Viewer | Same facts as agents, clustering, drill-down, bounded path highlighting, optional commit source links, authority/coverage/staleness | No real-browser automation; bounded pages, not a complete interactive explorer |
15
23
 
16
24
  HDesk results for `6710e9391a6a01345dab5f5be4ae0656e1c9d1ae` are recorded in
@@ -32,8 +40,48 @@ See [provider configuration](PROVIDERS.md#codex-authentication) and the validati
32
40
  Native Windows archive conversion, concurrent head-replacement and MCP file-symlink fixes are
33
41
  implemented with regression tests and pass focused hosted Windows CI. HDesk confirmation and
34
42
  full native Windows release preparation remain separate checks.
35
- Next work should be separate, reviewed increments: improve CRLF checkout integrity checks;
36
- run bounded semantic-quality evaluations; retain the passing hosted Ubuntu CI gate; validate fresh-cloud
43
+ The Windows reliability increment adds native/npm Codex discovery, process-tree cancellation
44
+ and Git-aware CRLF inventory/license checks. Hosted Windows passed 34 selected tests plus
45
+ repository inventory and licenses; hosted Ubuntu passed the full 178-test publication gate.
46
+ Browser and live authentication checks remain deferred. An advisory [self-repository impact
47
+ evaluation](IMPACT-EVALUATION.md) now measures four realistic changes with real SCIP/RDF/SHACL
48
+ and zero model assertions: 13/24 expected candidate files on the first page, 16/24 within
49
+ three pages. The opt-in [committed source-project increment](ADR-010-committed-source-indexing.md)
50
+ adds test/workspace indexing and improves the same cases to 15/24 first-page and 18/24
51
+ three-page candidates, with typed relationships from 33 test files. [Explicit document linkage](ADR-011-explicit-document-links.md) now resolves cited Markdown
52
+ references against committed files. With new contributor source mappings, a separately recorded
53
+ input returns 22/24 first-page and 24/24 three-page candidates; three labeled distractions also
54
+ appear. The old-source control remains 15/24 and 18/24 for that ordering.
55
+ [Query ranking](ADR-012-impact-ranking.md) was measured against those exact saved snapshots
56
+ without hydration: the document-link input improves to 24/24 on page one, with labeled distractions
57
+ reduced from three to one within three pages. The older control improves to 19/24 on page
58
+ one, but its distraction count worsens from zero to one. Missing document relationships stay
59
+ missing, and all reachable facts remain available through versioned continuation. See the
60
+ [fixed-input comparison](IMPACT-EVALUATION.md#fixed-snapshot-ranking-comparison).
61
+ Broad query reachability and live semantic quality remain gaps; these four cases do not
62
+ establish generalization or exhaustive precision.
63
+ The [prospective dispatch evaluation](IMPACT-EVALUATION.md#prospective-dispatch-evaluation)
64
+ adds three frozen synthetic cases outside Weftlet internals. Unchanged ranking retrieves
65
+ 15/16 expected files on page one; all seven case-specific distractions appear on later pages.
66
+ Full continuation confirms the topic-string archival consumer is disconnected, while generic
67
+ relative-import identity joins distinct domain modules. No cases or ranking were tuned after
68
+ measurement. Original saved-snapshot results remain unchanged.
69
+ [Relative module request identity](ADR-013-relative-module-requests.md) now scopes imports
70
+ to their requesting directory. On those same frozen inputs, dispatch retains 15/16 candidates
71
+ while three-page distractions fall from 7/7 to 0/7; Weftlet retains 24/24 first-page candidates
72
+ and one later-page distraction. Refreshes and overlays have versioned identities, and old
73
+ snapshots remain readable with their original facts. The archival routing gap remains without
74
+ additional source evidence. [Explicit routing declarations](ADR-014-routing-declarations.md)
75
+ now supply opt-in, cited producer/consumer bindings with inferred authority. A separately
76
+ committed authored mapping improves same-SHA dispatch retrieval from 15/16 to 16/16 on page
77
+ one, with zero labeled distractions. Drafts rebuild and invalidate affected bindings; these
78
+ results do not establish deployed subscriptions or observed delivery.
79
+ Next work should be separate, reviewed increments:
80
+ run the [private consumer trial](CONSUMER-TRIAL.md) on predeclared real-project tasks;
81
+ evaluate actual deployment/runtime routing evidence against the unchanged dispatch control;
82
+ review explicit mappings
83
+ and run a bounded live semantic comparison when the maintainer is ready;
84
+ retain the passing hosted Ubuntu CI gate; validate fresh-cloud
37
85
  restoration; resolve the cloud-specific live provider block; add browser
38
86
  interaction/accessibility tests; benchmark larger RDF graphs; evaluate a second real provider.
39
87
  Figma and source-application reintegration are future adapter work.
@@ -49,8 +97,8 @@ preparation/publication under `@launch-echo`; the maintainer completed the 0.1.0
49
97
  source-application reintegration remain outside the authorized scope. See [release instructions](RELEASING.md).
50
98
 
51
99
  The maintainer authorized the Weftlet migration on 2026-10-21. Both `@weftlet/core` and
52
- `@weftlet/toolkit` are published at 0.1.1 through GitHub OIDC, with provenance and a fresh public
53
- installation verified. Changesets now prepares reviewed version PRs for the fixed package group;
100
+ `@weftlet/toolkit` are published at 0.2.0 through GitHub OIDC; the publication and verification
101
+ record is in [validation](VALIDATION.md). Changesets prepares reviewed version PRs for the fixed package group;
54
102
  merging a release plan triggers publication and package-specific tags/GitHub Releases.
55
103
  See [ADR 009](ADR-009-release-automation.md) and [release instructions](RELEASING.md).
56
104
  Earlier Tently packages remain available and undeprecated.
@@ -46,3 +46,13 @@ On 2026-10-21 the maintainer selected and created the `@weftlet` scope and autho
46
46
  to `@weftlet/core` and `@weftlet/toolkit`. This changes destination package names only; the original
47
47
  source SHA, imported-path inventory, copyright and attribution remain intact. The maintainer subsequently renamed GitHub to
48
48
  `jchewitt/weftlet` on the same date; the checkout remains `/workspace/tently`. See [migration](MIGRATING-TO-WEFTLET.md) and [release status](RELEASING.md).
49
+
50
+ ## Checkout line endings
51
+
52
+ Destination inventory hashes use Git's CRLF-to-LF conversion only when Git would apply it to that
53
+ path. Checks use `hash-object` without writing objects or staging; they do not change the index,
54
+ Git configuration or checkout bytes. Binary and `-text` files retain their exact bytes. Real
55
+ content edits still invalidate the inventory. Original imported source hashes are never normalized
56
+ or recalculated. Custom clean filters/working-tree encodings on CRLF inputs are rejected instead
57
+ of executed by the checker. Updates preserve CRLF in existing checkout files and the manifest.
58
+ Generated license-notice checks also tolerate CRLF formatting while comparing the complete text.
@@ -8,6 +8,397 @@ The milestone entries below record the original cloud checks. Subsequent
8
8
  establishes live Codex success on Windows and the full deterministic checks on WSL,
9
9
  while identifying remaining native Windows issues.
10
10
 
11
+ ## Repository document identity patch, 2026-10-26
12
+
13
+ The public reproduction confirms the reported 0.2.0 defect: two unchanged semantic
14
+ assertions give one repository document ID different kinds and fail single-kind SHACL.
15
+ [ADR-015](ADR-015-repository-document-identity.md) records the canonical identity policy,
16
+ cache contract and immutable snapshot migration. The consumer follow-ups are tracked in
17
+ the [1.0 plan](RELEASE-1.0-PLAN.md).
18
+
19
+ - Local `pnpm context-graph:publication-check` passed: 227 deterministic tests (1 core,
20
+ 226 toolkit), one optional OML skip, 12 advisory architecture findings, inventory,
21
+ licenses and a fresh packed-consumer CLI/npx/MCP, real SCIP and RDF/SHACL smoke.
22
+ - The new public regression uses two committed source documents and a deterministic
23
+ module provider that reproduces the conflicting classifications. Both semantic facts
24
+ retain their citations, confidence and separate source/assertion authority; deterministic
25
+ document links and SPARQL join the canonical document. Real TypeScript indexing and
26
+ SHACL pass. Fresh extraction reports 2 extracted/0 reused; repeat reports 0/2 with
27
+ identical snapshot identity/content digest. Raw provider output is preserved byte for byte.
28
+ - Seeded artifacts using the released 0.2.0 cache-key formula are not reused or overwritten.
29
+ Historical graph-v4 snapshot bytes remain unchanged and readable. Subject references
30
+ normalize too; unrelated concept-kind conflicts still fail SHACL. A missing document
31
+ mentioned in plain prose retains a cited implementation-gap diagnostic.
32
+ - Independent review found and resolved that missing-path diagnostic regression. No blocking
33
+ findings remained. All 79 original imported source paths and source hashes are preserved.
34
+
35
+ These are deterministic upstream checks, not live semantic-quality or private consumer
36
+ acceptance results. The consumer's full hydration was stopped after its isolated reproduction;
37
+ no complete consumer SHACL verdict or published snapshot is claimed. Full-graph validation
38
+ latency remains a separate investigation. Release and hosted-check evidence will be recorded
39
+ after the patch completes the normal publishing workflow.
40
+
41
+ ## Weftlet 0.2.0 publication, 2026-10-26
42
+
43
+ The maintainer authorized publication of both packages. [Release PR 4](https://github.com/jchewitt/weftlet/pull/4)
44
+ committed their `0.2.0` versions to main at `ffe7f1d81f0421b35220bd7ba5b1555246c7a0e1`.
45
+ [Trusted-publishing run 40344526047](https://github.com/jchewitt/weftlet/actions/runs/40344526047)
46
+ completed successfully on attempt 2. Both npm `latest` tags resolve to `0.2.0`.
47
+
48
+ - Exact release-PR head `a818ee6312f6970015cea66f55cf6bb2cc62e363` passed the
49
+ [dispatched Ubuntu/Windows checks](https://github.com/jchewitt/weftlet/actions/runs/40042137308).
50
+ Local `pnpm release:prepare` also passed 222 deterministic tests, one optional OML skip,
51
+ 12 advisory architecture findings, inventory, licenses and fresh packed-consumer checks.
52
+ The publication workflow repeated preparation at the merged source commit.
53
+ - Independent review checked the generated release plan, versions/changelogs, all 79 original
54
+ source identities and the actual archives. Core contains 11 entries and toolkit 179;
55
+ runtime assets, public examples and licenses/notices are present. No credentials, Git history,
56
+ caches or generated graph snapshots were included. Toolkit's packed core dependency is `^0.2.0`.
57
+ - Both public npm tarballs match the hosted prepared archives byte for byte, and those hashes
58
+ match the locally reviewed archives. Public SLSA provenance subjects match their SHA-512
59
+ digests and reference this exact commit, repository and `publish.yml` workflow. This checks
60
+ provenance content and source identity; it is not a separate cryptographic signature audit.
61
+ - Attempt 1 published and verified core, then toolkit's provenance submission failed with
62
+ `TLOG_CREATE_ENTRY_ERROR` / HTTP 409 for an equivalent transparency-log entry. The core
63
+ acceptance receipt and original archives were retained. Registry state was inspected before
64
+ rerunning only failed jobs in the same run. Attempt 2 completed toolkit publication using the
65
+ unchanged version/archives; core was already present. No provenance setting was disabled.
66
+ - Package tags `@weftlet/core@0.2.0` and `@weftlet/toolkit@0.2.0`, and their public GitHub
67
+ Releases, point to `ffe7f1d81f0421b35220bd7ba5b1555246c7a0e1`. The release records contain
68
+ the verified archive digests. Main's package versions agree with npm.
69
+ - A fresh public-registry consumer on Linux / Node 24.19.0 installed only
70
+ `@weftlet/toolkit@0.2.0` directly (`npm install --ignore-scripts`); core resolved transitively
71
+ to `0.2.0`. Both lockfile registry URLs and integrity hashes match the prepared archives.
72
+ CLI init/configuration and the npm-exec launcher passed. Real TypeScript indexing produced
73
+ 15 SCIP facts within 22 total facts; the impact query returned 22 and SHACL conformed.
74
+ Repeat hydration preserved snapshot identity/content. Saved queries preserved snapshot bytes
75
+ and labeled excluded working edits. MCP initialized, discovered `impact.scan`, returned a
76
+ bounded 20-fact response and reported a missing snapshot as an error. No semantic documents
77
+ were selected: both hydrations extracted/reused zero artifacts, so this does not establish
78
+ model extraction or semantic artifact reuse.
79
+
80
+ Live model/authentication quality, browser interaction and genuine fresh-task cloud restoration
81
+ remain separate. No source application was changed and no live model call was made for release.
82
+
83
+ ## Development workspace recovery, 2026-10-23
84
+
85
+ The existing Codex development workspace became executable again at repository commit
86
+ `3617c71e29af869feccec1f5b1390c3082149b12`. Runtime status reported current observations and
87
+ connected execution; shell access, the repository identity and its initially clean worktree
88
+ were confirmed. The cause of the earlier executor failure was not established. A reported
89
+ OAuth 404 from another project was not reproduced or attributed to the executor failure.
90
+
91
+ Linux, Node 24.19.0, pnpm 10.18.2:
92
+
93
+ - The existing restoration checkpoint passed `node scripts/check-restoration.mjs --verify`:
94
+ its snapshot digest was retained, ten facts were queried with an intentionally unavailable
95
+ provider, and the historical evidence remained ineligible for current-diff validation.
96
+ No checkpoint or saved evidence was regenerated to obtain that result. A build had already
97
+ run; verification preceded the new governance run.
98
+ - The full deterministic publication gate passed again: **222 tests** (1 core + 221 toolkit),
99
+ one optional OML skip, build, 12 advisory architecture findings, inventory, licenses and
100
+ fresh packed-consumer installation/indexing/RDF/SHACL/viewer-generation/MCP checks.
101
+ - The new [consumer-trial recipe](CONSUMER-TRIAL.md) was exercised in a separate public
102
+ dispatch Git repository using fresh npm installation of locally packed core/toolkit archives.
103
+ The documented Bash blocks ran with only the sample task/path replaced. The deterministic
104
+ zero-assertion provider produced three artifacts; the repeat extracted zero and reused three
105
+ with unchanged snapshot identity/content. Diagnostics, SHACL and two distinct 60-fact pages
106
+ passed. A deliberate exit-7 child retained its error/status and stopped the shell before a
107
+ subsequent marker could run. Independent review confirmed the corrected fail-fast handling,
108
+ captured-commit pinning and command compatibility. This is a command-recipe check, not a
109
+ live semantic-quality measurement. An initial source-workspace rehearsal stopped at npm's
110
+ `workspace:^` metadata handling; the successful check used the documented installed consumer.
111
+
112
+ This was recovery within the existing conversation, not the new-task procedure in
113
+ [environment validation](ENVIRONMENT-VALIDATION.md). It establishes neither fresh-cloud
114
+ restoration nor live model/authentication recovery. No model request, source-application
115
+ change or npm publication was part of these checks.
116
+
117
+ ## Explicit routing declarations, 2026-10-23
118
+
119
+ [ADR 014](ADR-014-routing-declarations.md) adds opt-in committed source mappings for explicit
120
+ producer/consumer bindings. Implementation `5b8d49679f48837fe2ea465940b8c852e543cf5d` was
121
+ measured on input/protocol commit `e5510479c0545e38a41a902b65839529a3e66e73`, frozen before
122
+ measurement. The original 27 dispatch inputs, cases and evaluator/ranking hashes are unchanged.
123
+ The public-safe comparison is `evaluations/dispatch/routing-baseline.json`.
124
+
125
+ Linux cloud, Node 24.19.0, pnpm 10.18.2:
126
+
127
+ - The same-SHA no-routing control retains **15/16 expected files** on page one and within
128
+ three pages, with **0/7 labeled distractions**. Enabling the single authored declaration
129
+ retrieves **16/16 on page one and within three pages**, retaining **0/7 distractions**.
130
+ This measures use of a supplied mapping, not discovery or verification of a deployed route.
131
+ - Hydration produces **227 control facts / 229 enabled facts**. Only two inferred,
132
+ deterministic routing facts are added; every non-routing fact field matches except its
133
+ containing snapshot ID. Diagnostics, SCIP digest and semantic artifact keys are unchanged.
134
+ Both runs reuse all three control artifacts with zero extraction/model calls. Repeating
135
+ enabled hydration retains snapshot identity/content and again reuses all three artifacts.
136
+ - Full continuation returns **198 unique facts** (60/60/60/18), versus 183 reachable in the
137
+ control. All six archival implementation facts and seven archival test facts are reachable;
138
+ three implementation facts and one test fact appear on page one. A test-file relationship
139
+ does not assert test execution or delivery. No refund/audit distraction facts are returned.
140
+ - Direct SPARQL returns the exact producer/binding/consumer pair with inferred authority.
141
+ SHACL conforms and RDF projection matches every fact field. The existing unresolved
142
+ Markdown reference remains a diagnostic; no approved intent or runtime evidence is added.
143
+ - The final full publication gate passed **222 deterministic tests** (1 core + 221 toolkit),
144
+ one optional OML skip, build, 12 advisory architecture findings, inventory, licenses and
145
+ fresh packed-consumer installation. The installed smoke extracts a committed routing file
146
+ and includes its consumer in the complete SCIP/RDF/SHACL/query/viewer/MCP path.
147
+ - Tests cover strict schemas/duplicate JSON keys, bounds, scoped identity, same-topic binding
148
+ isolation, exact regular Git blobs including Unicode/spaced paths, missing/ambiguous
149
+ endpoints, dirty committed querying, rename/delete, tracked-but-ignored manifests, repeated
150
+ overlays, draft authority, outside-scope endpoint rejection and failed-refresh preservation.
151
+ Secondary review found and resolved diagnostic ordering and draft freshness issues before
152
+ the final full gate. The isolated overlay now preserves all archived tracked inputs even
153
+ when `.gitignore` matches them.
154
+ - Five historical snapshot files retain their recorded SHA-256 digests. Saved-only rescoring
155
+ of the latest dispatch and Weftlet graphs preserves their scores and reachability (15/16
156
+ and 24/24 first-page candidates respectively). All 79 original imported source paths/source
157
+ hashes remain intact. No source application was modified.
158
+
159
+ Hosted Ubuntu/Windows results are attached to the implementation PR. Browser interaction,
160
+ live provider authentication, broader semantic quality and actual deployment/runtime routing
161
+ validation remain separate. This increment includes a minor changeset but no npm publication.
162
+
163
+ ## Relative module request identities, 2026-10-22
164
+
165
+ [ADR 013](ADR-013-relative-module-requests.md) scopes generic relative imports to the
166
+ importing directory. Implementation `26c47d5b55f9390fe38b4928d1a8274eaf893583` was measured
167
+ against the frozen dispatch input and the existing Weftlet document-link input. Cases,
168
+ configuration, budgets, evaluator and ranking bytes are unchanged. The public-safe record
169
+ is `evaluations/dispatch/relative-imports-baseline.json`.
170
+
171
+ Linux cloud, Node 24.19.0, pnpm 10.18.2:
172
+
173
+ - Dispatch retains **15/16 expected candidates** on page one and within three pages.
174
+ Three-page labeled distractions fall from **7/7 to 0/7**; page one remains 0/7.
175
+ The reachable component shrinks from 214 to 183 facts. Full continuation returns all
176
+ 183 unique facts (60/60/60/3), with no refund/audit distraction or archival consumer.
177
+ The archival file still has six local facts but no extracted operational route.
178
+ - The Weftlet input retains **24/24 first-page and three-page candidates**, with 0/4
179
+ first-page and 1/4 three-page distractions. All scans still reach 3,648 facts and stop
180
+ at 180; telemetry remains a later-page distraction for atomic publication. These results
181
+ do not establish exhaustive precision or broader semantic quality.
182
+ - Real SCIP/document/RDF/SHACL hydration retains 227 dispatch and 3,648 Weftlet facts.
183
+ SCIP and document facts match their prior versions in every field except containing
184
+ snapshot ID. Dispatch reused three semantic control artifacts and Weftlet reused six,
185
+ extracting zero. A repeated dispatch refresh preserves identity/content and reuses all
186
+ three again. No model calls, approved sources or runtime observations were added.
187
+ - Snapshot assembly v4 and file extractor v2 coexist with old saved evidence. Draft
188
+ overlay publication identity also binds the extractor version, while capture-v2 digests
189
+ remain compatible. Tests cover old/new overlay coexistence, immutable committed heads,
190
+ repeated draft identity, rename/delete behavior and manifest versions.
191
+ - The full publication gate passed **208 deterministic tests** (1 core + 207 toolkit),
192
+ one optional OML skip, build, 12 advisory architecture findings, inventory, licenses and
193
+ fresh packed-consumer installation. The installed smoke exercises the new relative-request
194
+ module alongside actual SCIP, RDF/SHACL, continuation, visualization and MCP checks.
195
+ Actionlint passed without shellcheck.
196
+ - Independent review verified all 27 frozen dispatch input hashes, six evaluator hashes,
197
+ three legacy saved-snapshot byte hashes and their original scores/reachability. All 79
198
+ imported source paths/source hashes are preserved. Code review found no blockers; its
199
+ control-character coverage observation was corrected before the final full gate.
200
+
201
+ Hosted Ubuntu/Windows results are attached to the implementation PR. Corrected extraction
202
+ requires an explicit refresh; saved queries keep their original facts and do not rebuild.
203
+ Browser interaction, live authentication and broader semantic quality remain separate.
204
+ No npm publication is part of this increment.
205
+
206
+ ## Prospective dispatch evaluation, 2026-10-22
207
+
208
+ Inputs, labels and protocol were committed at `fa902165a1f212a6d3245c847e1ab9b64a69715b`
209
+ before any queries. Production ranking remains byte-identical to `proximity-diversity-v1`.
210
+ The [evaluation protocol](IMPACT-EVALUATION.md#prospective-dispatch-evaluation) and
211
+ `evaluations/dispatch/baseline.json` record the public-safe measurements and provenance.
212
+
213
+ Linux cloud, Node 24.19.0, pnpm 10.18.2:
214
+
215
+ - Real SCIP/document/RDF/SHACL hydration produced **227 facts**, with zero model assertions,
216
+ approved intent sources or runtime references. Repeat hydration extracted zero and reused
217
+ three control artifacts, retaining snapshot identity/content digest. Fixture TypeScript
218
+ checking and four exported behavior checks passed separately.
219
+ - All three cases use the existing 60-fact/three-page/depth-32 budget. Candidate recall is
220
+ **15/16 on page one and within three pages**. No labeled distraction appears on page one;
221
+ **7/7 case-specific distraction labels** appear within three pages. These are synthetic
222
+ candidate-file measurements, not a quality gate or exhaustive precision result.
223
+ - Supplemental full continuation returned 214 unique facts across four pages, with no
224
+ archival-file fact. Its local relationships exist but the expected operational route is
225
+ disconnected. SCIP distinguishes the two domain policy functions; cited generic import
226
+ witnesses show the cross-domain `./policy.js` connection. The intentionally unresolved
227
+ Markdown reference has a diagnostic and no guessed target.
228
+ - Original Weftlet snapshots, suite, reachable counts, recall and distraction scores remain
229
+ unchanged. Both saved snapshot files match their recorded SHA-256 digests. All 79 original
230
+ imported source paths and source hashes are preserved.
231
+ - Focused evaluator checks pass with a real independent Git repository and an unrelated cwd:
232
+ selected suite/config, separate evaluator/evidence commits, real indexing/document links,
233
+ saved-only scoring, immutable snapshot content, failed-report preservation, missing-snapshot
234
+ refusal and live-provider refresh refusal. Boundary tests also reject impostor modules and
235
+ repository/suite/configuration/draft mismatches. Fixture result scores are not CI thresholds.
236
+ - The full publication gate passed **203 deterministic tests** (1 core + 202 toolkit),
237
+ one optional OML skip, build, 12 advisory architecture findings, inventory, licenses and
238
+ fresh packed-consumer installation/indexing/RDF/SHACL/MCP checks. Actionlint passed without
239
+ shellcheck; strict TypeScript checking of the evaluator also passed.
240
+
241
+ Hosted Ubuntu/Windows outcomes are recorded with the implementation PR.
242
+ No ranking/source-extraction change, live model call, browser result, authentication result
243
+ or npm publication is part of this increment. Broader real-project and semantic-quality
244
+ validation remain separate.
245
+
246
+ ## Impact ranking, 2026-10-22
247
+
248
+ [ADR 012](ADR-012-impact-ranking.md) describes query ordering by weighted proximity and
249
+ source diversity. Implementation `2e4a3bbc55bd3a15cf619f56827963a699a5b56b` was measured
250
+ against two existing immutable snapshots, with no hydration or model calls. The public-safe
251
+ record is `evaluations/weftlet/ranking-baseline.json`; cases, labels, budgets, configuration,
252
+ snapshot bytes and reachable fact counts are unchanged.
253
+
254
+ Linux cloud, Node 24.19.0, pnpm 10.18.2:
255
+
256
+ - On the document-link snapshot, first-page candidate retrieval improved from **22/24 to
257
+ 24/24**, retaining 24/24 within three pages. Labeled distractions fell from 1/4 to 0/4
258
+ on page one and from 3/4 to 1/4 within three pages. The query test and setup doctor now
259
+ appear on page one. Telemetry is a new later-page distraction for atomic publication;
260
+ the aggregate improvement does not mean that every case has less noise.
261
+ - On the older source-project control, first-page retrieval improved from 15/24 to 19/24
262
+ and three-page retrieval from 18/24 to 19/24. The five missing document relationships
263
+ remain absent. Labeled distractions worsened from 0/4 to 1/4 within three pages, again
264
+ telemetry. These four cases from one repository do not establish generalization or
265
+ exhaustive precision. Every scan remains truncated after 180 facts with continuation.
266
+ - The full publication gate passed: **197 deterministic tests** (1 core + 196 toolkit),
267
+ one optional OML skip, build, 12 advisory architecture findings, inventory, licenses
268
+ and fresh packed-consumer installation. The installed smoke now exhausts ranked
269
+ continuation over actual extracted facts, checking for duplicate or missing results.
270
+ - Focused coverage includes large-source consumer diversity, deep asynchronous flows,
271
+ generic shared imports, citation-only anchors, stable ties across commit-derived IDs,
272
+ complete pagination, versioned continuation rejection and evaluator version drift.
273
+ The real TypeScript/RDF pipeline retains field-for-field projection equivalence.
274
+ - The first full run omitted the cloud's writable cache/store settings, causing four
275
+ installation-fixture failures. Correcting the command environment produced the passing
276
+ full rerun above; no source workaround was needed. Actionlint passed without shellcheck.
277
+ All 79 original import paths and source hashes remain unchanged.
278
+
279
+ Hosted Ubuntu/Windows outcomes are attached to the implementation PR. Ranking changes
280
+ ordering only, preserving evidence authority, confidence, scope and current-diff eligibility.
281
+ Saved snapshots need no refresh; old continuation tokens require restarting the scan.
282
+ Browser interaction, live-provider/authentication checks and broader semantic quality remain
283
+ deferred. No new source approval, runtime observation or npm publication is claimed.
284
+
285
+ ## Explicit document linkage, 2026-10-22
286
+
287
+ [ADR 011](ADR-011-explicit-document-links.md) describes committed Markdown references,
288
+ precise citations, authority boundaries, and the new snapshot assembly identity. Implementation
289
+ `90726be3751cf23de7f1cdd595d1e9ddb151b139` is measured separately from the evidence inputs.
290
+ The six documents' source mappings were committed at
291
+ `dcef64001d8d47cd1aeb4c1434992612158a104a`, before the linker implementation.
292
+
293
+ Linux cloud, Node 24.19.0, pnpm 10.18.2:
294
+
295
+ - Full publication gate: **192 deterministic tests** (1 core + 191 toolkit), one optional
296
+ OML skip, build, 12 advisory architecture findings, inventory, licenses and fresh packed
297
+ consumer. The installed smoke now parses committed Markdown and combines its references
298
+ with real SCIP facts before RDF/SHACL validation. Actionlint passed without shellcheck.
299
+ - Focused cases cover relative/root/reference-style/encoded Markdown destinations, CRLF
300
+ source citations, duplicate basenames without guessing, missing/deleted/renamed paths,
301
+ directories, URLs, code examples, and distinct source approval/assertion review. Real
302
+ pipeline hydration links a test using SCIP's Evidence identity, passes SHACL and retains
303
+ field-for-field RDF projection equivalence. Cached prose is rechecked against target
304
+ deletion, while the preceding immutable snapshot stays readable.
305
+ - The original saved v2 evidence was queried without hydration: its digest and 15/24
306
+ first-page, 18/24 three-page scores remain unchanged. Fresh assembly uses a different
307
+ identity, binds the linker version, and reuses the existing semantic artifacts.
308
+ - The fixed old-source control still returns 15/24 first-page and 18/24 three-page candidates.
309
+ With the new explicit source mappings, the measurement returns **22/24 first-page and
310
+ 24/24 three-page candidates**. All five expected intent-document paths are retrieved.
311
+ This new input also contains the intervening source-indexing implementation; it is not
312
+ an isolated model-quality or ranking experiment. The original case labels and budgets
313
+ are unchanged. `evaluations/weftlet/document-links-baseline.json` records the evidence
314
+ identities, provenance witnesses, scores, noise and limitations.
315
+ - Three of four labeled distractions appear within three pages, including one on the first
316
+ page. All scans remain truncated at 180 facts. Better candidate recall does not establish
317
+ precision, complete product understanding, or a safe change. Ranking is measured separately
318
+ in the subsequent increment above.
319
+ - An initial real-document run caught false missing-file diagnostics for slash-separated
320
+ prose and package names. The final linker diagnoses unresolved explicit Markdown links;
321
+ unresolved literal mentions are ignored. Regression cases include the observed examples.
322
+ All 79 original import paths and source hashes remain unchanged.
323
+
324
+ Hosted Ubuntu/Windows outcomes are attached to the implementation PR. No live model call,
325
+ new source approval, browser interaction, runtime behavior or authentication result is claimed.
326
+ The control provider returns no assertions. Browser and live-provider validation remain deferred.
327
+
328
+ ## Committed source-project indexing, 2026-10-22
329
+
330
+ [ADR 010](ADR-010-committed-source-indexing.md) records the opt-in profile and its limits.
331
+ Toolkit implementation `1c2c699` was evaluated against the same evidence commit
332
+ `eeaaa342d62c11eeef44bfdf81fa8dedcfeb205d`, unchanged case labels and query budgets.
333
+ `evaluations/weftlet/source-project-baseline.json` records the full implementation SHA,
334
+ snapshot/configuration/index digests, scores, remaining misses and source coverage.
335
+
336
+ Linux cloud, Node 24.19.0, pnpm 10.18.2:
337
+
338
+ - First-page candidate retrieval improved from 13/24 to 15/24; three-page retrieval
339
+ improved from 16/24 to 18/24. Typed SCIP relationships now cover 33 test files, including
340
+ the lifecycle test, and link the shared core contract. Five expected intent documents
341
+ remain unlinked and the MCP file remains outside the query budget.
342
+ - The new graph has 3,490 facts (2,970 SCIP and 520 repository-file facts). Repeated
343
+ hydration reused all six document-control artifacts with identical snapshot identity
344
+ and content digest `6f30f62900e37a6d2d266bcd3bba54941b1cab3997602eefef3320b0d0e66fc3`.
345
+ Rerunning the original profile preserved its prior snapshot, digest and scores.
346
+ - Real SCIP regression fixtures prove committed contract/test linkage through a workspace
347
+ re-export, ignored/dirty-source isolation, repeat digest stability, rename/delete
348
+ replacement, and capture of draft changes outside ordinary code/evidence roots.
349
+ Invalid scopes/aliases fail before SCIP. Missing alias-definition selection was caught
350
+ during development; both entry points and definition files must be explicitly selected.
351
+ - The full publication gate passed: 187 deterministic tests (1 core + 186 toolkit),
352
+ one optional OML skip, builds, 12 advisory architecture findings, inventory and licenses.
353
+ Fresh packed-consumer checks now also exercise a source alias and a test excluded by
354
+ its build config, along with the existing npx/RDF/SHACL/viewer-output/MCP checks.
355
+ - Workflow syntax passed actionlint. All 79 original source import paths/hashes remain
356
+ unchanged. The Windows workflow includes the new real-indexing and overlay regressions;
357
+ hosted outcomes are attached to the implementation PR.
358
+
359
+ No dependency installation in evidence archives, live model run, runtime observation,
360
+ owner approval, browser interaction or new authentication result is claimed. This mode
361
+ does not inherit build compiler settings or establish complete external dependency resolution.
362
+
363
+ ## Self-repository impact evaluation, 2026-10-21
364
+
365
+ The [evaluation protocol](IMPACT-EVALUATION.md) and public-safe
366
+ `evaluations/weftlet/baseline.json` record a deterministic control against committed
367
+ Weftlet `eeaaa342d62c11eeef44bfdf81fa8dedcfeb205d`. The active checkout contained
368
+ the new evaluator; its source/suite/configuration digests are recorded separately.
369
+ No current working source bytes were substituted for that evidence commit.
370
+
371
+ On Linux, Node 24.19.0 and pnpm 10.18.2:
372
+
373
+ - Real SCIP, RDF/SHACL and publication produced 1,369 facts. Four fixed scenarios
374
+ retrieved 13/24 expected candidate files on the first page and 16/24 in three pages.
375
+ These are measurements, not a quality pass. Intent documents, workspace contracts,
376
+ test coverage and query ranking have the gaps described in the protocol.
377
+ - Repeated hydration extracted zero and reused six document-control artifacts, retaining
378
+ snapshot identity and content digest
379
+ `5b4003c527b0f797d45814679326c59da995bc677d0706768a9d9b1b21aedb4f`.
380
+ - Saved-snapshot scoring succeeded with the semantic-artifact directory temporarily
381
+ unavailable and returned identical recall. No hydration phases ran; artifacts were
382
+ restored afterward. Missing-snapshot and live-provider-refresh probes both failed
383
+ clearly without starting an indexer or model.
384
+ - Five evaluator tests passed, covering first/later-page scores, extraction versus
385
+ bounded-retrieval misses, non-relationship exclusions, duplicate/drifting pages,
386
+ stale case paths and invalid budgets. Strict TypeScript checking of the evaluator passed.
387
+ - The full publication gate passed: 183 deterministic tests (1 core + 182 toolkit),
388
+ one optional OML integration skipped, builds, 12 advisory architecture findings,
389
+ inventory, licenses and fresh packed-consumer installation/indexing/RDF/MCP smoke.
390
+ All 79 original import paths and source hashes remain unchanged.
391
+
392
+ Hosted [checks for the initial evaluation commit
393
+ 8e82453d92357451e832f3bf16666a6bef89b6de](https://github.com/jchewitt/weftlet/actions/runs/39687986720)
394
+ also passed on Ubuntu (full publication gate) and Windows (34 selected reliability tests,
395
+ inventory and licenses). The full self-repository control run above was performed in Linux
396
+ cloud; these hosted checks do not imply a Windows evaluation run or browser validation.
397
+
398
+ No live semantic assertions, runtime traces, owner approvals, browser interactions or
399
+ new authentication results are claimed. The control sends no model requests. Broader
400
+ semantic quality still needs a separately bounded live run and human citation review.
401
+
11
402
  ## Milestone 1: standalone baseline
12
403
 
13
404
  Passed `pnpm context-graph:publication-check`:
@@ -556,3 +947,50 @@ archives and conflicting tags, and resume interrupted creation without duplicate
556
947
  tests select earlier attempts and reject expired or ambiguous artifacts. No paid model call or
557
948
  new npm version was published by these tests. Hosted version-PR operation is checked separately;
558
949
  a future merged release remains the integration test of automatic publish and record creation.
950
+
951
+ ## Automatic 0.1.2 release and Windows reliability — 2026-10-21
952
+
953
+ [Release run 39672652013](https://github.com/jchewitt/weftlet/actions/runs/39672652013) completed
954
+ preparation, npm trusted publication and release records at
955
+ `3d8d1f38a9e70b38178921cdabf5e8714c417c1c`. Both registry `latest` tags now identify 0.1.2.
956
+ Both package-specific Git tags resolve to that exact commit, and GitHub Releases were created.
957
+ Versions were committed on main before publication. This validates the first merged Changesets
958
+ release through the automatic push trigger; no post-publication version commit was required.
959
+
960
+ The next Windows reliability increment adds common discovery for native Codex executables and
961
+ standard global/project-local npm launchers. Tests use actual npm-created launchers with a
962
+ synthetic public CLI to exercise diagnostics, login status and source-isolated extraction. They
963
+ also cover PATH precedence, spaces/metacharacters, rejected/broken shims, secret filtering,
964
+ discovery timeout/cancellation, and termination of a launcher with an active child. They make no
965
+ live Codex request and do not validate real account authentication or model quality.
966
+
967
+ Inventory tests use actual Git checkouts with core.autocrlf=true and explicit eol=crlf attributes.
968
+ They check unchanged source hashes, checkout bytes, Git configuration and index; genuine edits
969
+ still fail. Binary and -text imports retain exact bytes. Custom filters are rejected without
970
+ execution. License checks accept CRLF formatting while still comparing complete notice text.
971
+ All 79 original source paths/hashes remain unchanged.
972
+
973
+ The full local publication gate passed on Linux, Node 24.19.0 / pnpm 10.18.2: **177 deterministic
974
+ tests** (1 core + 176 toolkit/example/script), one optional OML test skipped, build, architecture
975
+ (12 advisory findings), inventory, licenses and fresh packed-consumer smoke. Actionlint passed
976
+ with shellcheck integration disabled. The Windows CI job now runs the added launcher, process,
977
+ inventory and license checks; its native result is recorded separately after execution. Browser
978
+ interaction and live authentication testing remain explicitly deferred by the maintainer.
979
+
980
+
981
+ The first hosted Windows run at `6f2f83f` passed all **33** selected tests and the repository
982
+ inventory check, including real npm launchers and process-tree cancellation. Its newly enabled
983
+ license check caught CRLF conversion of a pinned reviewed notice. That check now shares the
984
+ Git-aware content reader; the reviewed notice and its approved SHA-256 remain unchanged.
985
+ Discovery time is included in existing probe/extraction timeout budgets. Updated hosted checks
986
+ are required before merging this increment.
987
+
988
+
989
+ PASS: [hosted run 39676848049](https://github.com/jchewitt/weftlet/actions/runs/39676848049)
990
+ at `ef2f8e31cbcae402ca08979e90aff4f00fb91c77`. Ubuntu passed the full publication gate with **178 deterministic tests**
991
+ (1 core + 177 toolkit/example/script), one optional OML test skipped, 12 advisory architecture
992
+ findings, build, inventory, licenses and packed-consumer smoke. Native Windows passed **34**
993
+ selected tests, including global/local npm launcher installation, discovery, login/extraction
994
+ plumbing, process-tree cancellation, CRLF inventories, storage/Git and all original MCP startup
995
+ cases. The repository inventory and complete license checks also passed natively. This is focused
996
+ Windows coverage, not a full native Windows publication gate or a live Codex account/model test.
package/docs/VIEWER.md CHANGED
@@ -4,6 +4,11 @@
4
4
  renders the same Context Pack returned by `impact.scan`. HTML is self-contained; DOT and SVG
5
5
  remain available. No CDN, service, model or alternative graph extraction is involved.
6
6
 
7
+ [Visualization rendering](../src/visualization/visualization.ts) consumes the
8
+ [impact-query result](../src/graph/query.ts). [Viewer interaction](../src/visualization/viewer-interaction.ts)
9
+ handles page-local filtering and path selection. [Rendering tests](../src/visualization/visualization.test.ts)
10
+ check generated output; interactive browser validation remains a separate check.
11
+
7
12
  Nodes are grouped by evidence lane, then module/layer metadata or node kind. Filter by cluster,
8
13
  authority or source text. Select a node (click or Enter) to inspect its relationships, confidence,
9
14
  extractor, source approval, extraction review state and commit-bound citations. The neighbor