@weftlet/toolkit 0.2.0 → 0.3.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 (37) hide show
  1. package/README.md +69 -3
  2. package/dist/application/agent-context.d.ts +3 -1
  3. package/dist/application/agent-context.js +15 -6
  4. package/dist/application/hydration-plan.d.ts +57 -0
  5. package/dist/application/hydration-plan.js +79 -0
  6. package/dist/application/hydrator.js +12 -16
  7. package/dist/extraction/document.js +1 -6
  8. package/dist/extraction/providers.js +2 -2
  9. package/dist/extraction/repository-nodes.d.ts +7 -0
  10. package/dist/extraction/repository-nodes.js +20 -0
  11. package/dist/extraction/semantic-cache.d.ts +12 -0
  12. package/dist/extraction/semantic-cache.js +59 -0
  13. package/dist/extraction/semantic-identity.d.ts +7 -0
  14. package/dist/extraction/semantic-identity.js +29 -0
  15. package/dist/extraction/semantic-sources.d.ts +27 -0
  16. package/dist/extraction/semantic-sources.js +35 -0
  17. package/dist/extraction/semantic.js +27 -21
  18. package/dist/graph/rdf.d.ts +1 -1
  19. package/dist/graph/rdf.js +13 -28
  20. package/dist/graph/shacl-shapes.d.ts +5 -0
  21. package/dist/graph/shacl-shapes.js +27 -0
  22. package/dist/index.d.ts +1 -0
  23. package/dist/index.js +1 -0
  24. package/dist/interfaces/cli.js +47 -3
  25. package/dist/repository/git.d.ts +1 -1
  26. package/dist/repository/git.js +5 -1
  27. package/docs/ADR-015-repository-document-identity.md +57 -0
  28. package/docs/ADR-016-hydration-preview.md +91 -0
  29. package/docs/ADR-017-shacl-validation-union.md +102 -0
  30. package/docs/CONSUMER-TRIAL.md +6 -5
  31. package/docs/RELEASE-1.0-PLAN.md +288 -0
  32. package/docs/RELEASING.md +27 -8
  33. package/docs/ROADMAP.md +32 -2
  34. package/docs/VALIDATION.md +202 -0
  35. package/docs/WEFTLET-2.0-PLAN.md +283 -0
  36. package/docs/extraction-manifest.json +29 -12
  37. package/package.json +3 -2
@@ -0,0 +1,288 @@
1
+ # Consumer hardening and the 1.0 release plan
2
+
3
+ Status: maintainer-directed work; source checkpoint on 2026-10-26 before the planned 0.3.0 release.
4
+ The report concerned `@weftlet/toolkit@0.2.0`. **T01's upstream patch shipped in 0.2.1**;
5
+ genuine consumer acceptance remains pending. T02 is merged and awaits release. T05's focused
6
+ cold-validation optimization is implemented in development source, with validation/release pending;
7
+ its broader follow-ups and T03, T04, T06 and T07 remain open. These tasks improve setup, reuse, diagnostics and document coverage
8
+ without expanding the consumer's migration. An official 1.0
9
+ follows this work and genuine consumer acceptance, with its exact release scope reviewed when
10
+ the evidence is available.
11
+
12
+ This is the near-term release task list. The [Weftlet 2.0 product plan](WEFTLET-2.0-PLAN.md)
13
+ remains a separate future direction for generation, approvals, a companion website and hosted
14
+ AI. None of those platform features is a dependency of the fixes here.
15
+
16
+ ## Reported evidence and boundaries
17
+
18
+ The consumer reported a cold extraction in which two source documents referred to the same
19
+ repository Markdown document. Semantic assertions gave that one repository-path identity
20
+ different node kinds, `Component` and `Document`. An isolated, unchanged two-fact graph failed
21
+ the public RDF validator's single-kind constraint. The references describe the same document;
22
+ this is an extraction identity conflict, not evidence of conflicting product intent.
23
+
24
+ The consumer stopped its larger hydration after independently proving that failure. No full-run
25
+ SHACL result or published snapshot is claimed. Several minutes spent in the larger validation
26
+ phase is a separate observation; the two-fact reproduction does not diagnose its latency.
27
+ Fresh-install checks and the package/adapter boundary were reported as successful.
28
+
29
+ Private source paths, assertions, artifacts and application data remain with the consumer.
30
+ Upstream work uses public-safe reproductions and preserves the original application's existing
31
+ integration. Consumer acceptance is reported separately from upstream deterministic tests.
32
+
33
+ ## Task list and order
34
+
35
+ | ID | Task | Priority/status | Dependencies and release boundary |
36
+ | --- | --- | --- | --- |
37
+ | **T01** | Coherent repository-document identity and kind | **Upstream patch shipped in 0.2.1; consumer acceptance pending** | SHACL and assertions preserved; genuine consumer re-run is still required |
38
+ | **T02** | No-model hydration/setup preview | Merged in PR #18; not published in 0.2.1 | Shared selection/cache inspection, human/JSON plans; extend with T07 traversal coverage |
39
+ | **T03** | Artifact reuse across operational configuration changes | Planned efficiency work | Preserve T01's semantic identity separation; keep snapshot/config identity distinct from reusable artifact identity |
40
+ | **T04** | Actionable, privacy-safe timeout diagnostics | Planned diagnostics work | Use stable source identifiers and run progress; document recovery with T02/T03 |
41
+ | **T05** | Early identity checks and validation progress/profiling | **Adoption blocker; cold-validation fix in source** | Validate and release union-projection optimization now; early checks, detailed progress and validation reuse remain open |
42
+ | **T06** | Packaged release-documentation consistency | Open; README version pins removed in 0.2.1 | Automated archive/version consistency check remains to be implemented |
43
+ | **T07** | Coverage-aware traversal from SOT/roadmap entry points | Planned bounded feature work | Use canonical identity from T01, preview from T02 and incremental reuse from T03; split selection/classification/extraction changes |
44
+
45
+ T02 passed the local publication checks and hosted Ubuntu/Windows checks before
46
+ [PR #18](https://github.com/jchewitt/weftlet/pull/18) merged. Prioritize the focused T05 performance
47
+ release following the maintainer's reported timeout; do not wait for the remaining 1.0 features.
48
+ T03, T04, T06 and T07 remain independently useful increments. Keep them
49
+ separate from the optional platform work. Publication follows the normal release process; no new
50
+ npm release is claimed for T02. Normal release checks apply to every shipped increment.
51
+
52
+ ## T01 — Resolve repository-document identity conflicts
53
+
54
+ Define and enforce a coherent ID/kind policy for repository document references across semantic
55
+ and deterministic extraction. A prompt instruction alone is insufficient when separately valid
56
+ model outputs can conflict after assembly. Preserve both source assertions and their citations,
57
+ source authority and assertion-review state. Retain single-kind SHACL validation; do not discard
58
+ an assertion or relax the shape to conceal the conflict.
59
+
60
+ Acceptance:
61
+
62
+ - A public regression has two committed documents referring to the same Markdown document,
63
+ with one provider assertion labeling it `Component` and the other `Document` under the same
64
+ repository-path identity. Both assertions survive under the coherent policy and align with
65
+ deterministic document links; the assembled graph passes RDF/SHACL validation.
66
+ - Verify subject and object references, preserved provenance and unreviewed/inferred assertion
67
+ authority. Other incompatible identities remain diagnosable rather than silently merged away.
68
+ - Version the relevant extractor/prompt/cache identity so incompatible old artifacts cannot
69
+ satisfy a fresh extraction. Test a fresh build, subsequent artifact reuse and unchanged
70
+ snapshot identity/content on repeat input. Keep historical saved snapshots readable and unchanged.
71
+ - Run the normal deterministic/publication gate and a fresh installed-package smoke. Publish
72
+ the patch, then request a genuine consumer re-run against the recorded inputs; do not infer
73
+ consumer acceptance from the upstream fixture.
74
+
75
+ Upstream completion evidence:
76
+
77
+ - [Fix PR #15](https://github.com/jchewitt/weftlet/pull/15) implements the policy in
78
+ [ADR 015](ADR-015-repository-document-identity.md), with public cross-document regressions and
79
+ fresh/cache-reuse coverage. [Release PR #16](https://github.com/jchewitt/weftlet/pull/16)
80
+ advances the fixed core/toolkit group to 0.2.1.
81
+ - [Release run 40382864083](https://github.com/jchewitt/weftlet/actions/runs/40382864083)
82
+ completed preparation, publication and release records on its first attempt at commit
83
+ `5d1db91bf19ed493a20849b2d0f92d3aeac35dfe`. Required checks included 227 deterministic tests,
84
+ 12 advisory architecture findings, fresh packed-consumer checks and hosted Ubuntu/Windows CI.
85
+ - Registry archives, provenance and tags match the reviewed release. A fresh public-registry
86
+ consumer passes the two-document regression, real SCIP, RDF/SHACL, queries and unchanged
87
+ snapshot identity/content on artifact reuse, without live model calls. See the detailed
88
+ [validation record](VALIDATION.md) for commits, checks and result boundaries.
89
+
90
+ The private consumer has not yet supplied a successful full hydration/repeat against 0.2.1.
91
+ Upstream publication and regression success do not close that acceptance gate or diagnose the
92
+ separate full-graph validation latency observation.
93
+
94
+ ## T02 — Preview scope and work without calling a model
95
+
96
+ Implemented in development source: `hydrate --plan` renders a human summary and `--json` returns
97
+ the structured plan. This feature is not in published 0.2.1. Shared source selection and identity
98
+ logic report selected documents and sizes, inclusion reasons, configured role/source approval,
99
+ unreviewed assertion status, artifact reuse/extraction estimates and document/per-source byte limits.
100
+ See [ADR 016](ADR-016-hydration-preview.md) and [validation](VALIDATION.md).
101
+
102
+ Missing or unsupported-only selectors and bounded agent omissions remain visible as warnings;
103
+ incomplete plans need review and exit 1. They do not introduce new hydration gates that would
104
+ break deletion of the last document. Budget, duplicate-ID and corrupt/unavailable cache errors
105
+ block planning checks without truncating selected sources. An explicit empty source list selects
106
+ none. Requested refs now govern agent scope; corrected snapshots use graph-v6 while valid 0.2.1
107
+ semantic artifacts remain reusable. T03's operational cache changes and T07's traversal/default
108
+ validation-document separation remain separate work.
109
+
110
+ Acceptance:
111
+
112
+ - Preview calls no provider and performs no extraction, indexing, snapshot publication or active
113
+ checkout mutation. Distinguish unavailable/corrupt cache entries from known reusable artifacts.
114
+ - Identify the commit, configuration and selection assumptions; a later changed input can
115
+ invalidate the estimate. Report uncertainty explicitly instead of promising a cache hit.
116
+ - Test empty/no-document scope, cold and warm artifacts, missing sources, budget violations and
117
+ semantic-identity changes. Provide machine-readable output and a concise human summary.
118
+ - With T07, show complete inclusion/exclusion reasons, unresolved links, ownership/classification
119
+ gaps, coverage and budget effects before any model call. Do not silently trim the selection.
120
+
121
+ ## T03 — Reuse valid artifacts after operational changes
122
+
123
+ The consumer reported that changing only a timeout selected a different cache profile and made
124
+ completed extractions unavailable for reuse. Investigate both storage-location selection and
125
+ artifact key construction. Separate operational controls from semantic-output identity, while
126
+ retaining complete configuration metadata on snapshots and queries.
127
+
128
+ Acceptance:
129
+
130
+ - Changing supported operational settings such as timeout does not hide or invalidate an
131
+ otherwise reusable extraction. Explicitly classify each setting rather than assuming all
132
+ non-source changes are harmless; retain provider-specific extension behavior.
133
+ - Changing source bytes/identity, model or relevant model settings, prompt/schema/extractor/
134
+ ontology identity, or other output-affecting policy invalidates reuse as required. T01's new
135
+ identity must not accidentally reuse old conflicting artifacts.
136
+ - Preserve force-extraction semantics, concurrent-writer safety, isolation between consumers,
137
+ credentials and private cache contents. Record reuse and reasons for a miss without secrets.
138
+ - Test interrupted work followed by a changed timeout: valid completed artifacts are reused,
139
+ incomplete/invalid ones are re-extracted, and source provenance remains correct.
140
+
141
+ ## T04 — Explain timeouts and recovery
142
+
143
+ Report a privacy-safe source identifier, phase, elapsed time, configured limit and completed/
144
+ remaining counts when extraction times out. Explain which completed artifacts can be retained
145
+ and how to inspect the plan or adjust a bound before retrying. The documented two-minute default
146
+ was insufficient for the reported workload; that observation alone does not select a new default.
147
+
148
+ Acceptance:
149
+
150
+ - Use a stable opaque identifier by default, with an explicit local mapping or opt-in detail for
151
+ identifying the source. Avoid leaking source text, full prompts, credentials or provider stderr.
152
+ - Distinguish extraction timeout, cancellation, provider failure and infrastructure problems.
153
+ Preserve completed artifacts and the last valid published snapshot.
154
+ - Test timeout/cancellation during a multi-source run, accurate progress counts, safe recovery
155
+ instructions and secret-free logs. MCP protocol stdout remains clean.
156
+
157
+ ## T05 — Detect inexpensive conflicts early and explain validation work
158
+
159
+ The implementation uses JavaScript on Node:
160
+ `rdf-validate-shacl` validates an in-memory N3 dataset. Hydration constructs and validates the
161
+ entire assembled graph, including when semantic artifacts were reused. There is no persistent
162
+ GraphDB backend or incremental validation. Querying a saved snapshot does not rerun SHACL.
163
+
164
+ The maintainer reports that validation pushes the consumer's overall generation beyond its
165
+ 30-minute timeout, preventing snapshot publication and making adoption unusable. This is now
166
+ a release blocker, not an optional observability improvement. Upstream has measured a specific
167
+ named-graph lookup cost in public synthetic fixtures, but has not measured that consumer graph or
168
+ diagnosed its complete timeout. Ship the focused performance release once its correctness and
169
+ improvement are demonstrated, ahead of the remaining 1.0 tasks.
170
+
171
+ [ADR 017](ADR-017-shacl-validation-union.md) records the implemented cold-validation optimization:
172
+ build a temporary union of every SPO triple for the same validator/shapes, while keeping original
173
+ named assertion graphs canonical for queries and serialization. It removes repeated wildcard
174
+ lookups across one graph per fact. In a bounded single-run public 2,000-fact unique-node case,
175
+ the original SHACL path took 31.502 seconds; union construction took 0.153 seconds and SHACL
176
+ took 0.467 seconds. A 10,000-fact unique-node union case used about 1.3 GiB process RSS. These
177
+ are synthetic phase measurements, not a private consumer reproduction or end-to-end guarantee.
178
+
179
+ The focused change still validates the whole graph each time. It does not add Rust, GraphDB,
180
+ incremental validation or a validation-result cache. Early checks and broader observability/reuse
181
+ remain follow-ups rather than reasons to delay the cold-path fix. Native code or a database does
182
+ not by itself establish faster or correct incremental SHACL.
183
+
184
+ Acceptance:
185
+
186
+ - Early errors identify the conflicting identity/kinds and relevant evidence using the configured
187
+ privacy policy. Preserve all underlying assertions for diagnosis; early checks are not a
188
+ substitute for RDF/SHACL validation.
189
+ - Report elapsed time and honest progress for long validation. Current phase boundaries remain
190
+ the supported progress signal: the synchronous validator blocks same-thread timers. Evaluate
191
+ bounded worker execution before promising an in-phase heartbeat or cancellation; never display
192
+ a fabricated completion percentage when the validator exposes no meaningful denominator.
193
+ - Record reproducible public-fixture sizes, fact/node counts, runtime versions, wall time and
194
+ resource observations for construction and validation separately. Separate measured bottlenecks
195
+ from hypotheses; include repeated identical input and small changed-input cases.
196
+ - Demonstrate improved cold full-graph validation, because reusing a previous validation result
197
+ cannot unblock a first graph that has never completed. Keep private consumer acceptance and
198
+ the overall generation timeout separate from synthetic validator-only benchmarks.
199
+ - Evaluate reuse of a successful conformance result only when validated graph content, shapes,
200
+ validator version and applicable policy/semantics match. This reuse must not make historical
201
+ evidence satisfy current-diff freshness, scope or provenance requirements.
202
+ - Evaluate dependency-aware incremental validation with insertions, updates, deletions, renames,
203
+ affected relationships and global constraints. Revalidate the complete affected scope or fall
204
+ back to full validation when it cannot be bounded safely; changed nodes alone are insufficient.
205
+ - Benchmark a suitable native/Rust-backed validator or optional persistent graph database if
206
+ measurements justify a candidate. Compare supported SHACL behavior, positive/negative parity,
207
+ installation, licensing, portability and maintenance cost. T02 adds no backend migration, and
208
+ this evaluation does not commit the standalone toolkit to a mandatory service.
209
+ - Any optimized validation/projection path has equivalence tests, including negative cases;
210
+ failure must preserve the prior snapshot. Keep model-independent profiling separate from live
211
+ extraction performance and from the reported two-fact correctness defect.
212
+
213
+ ## T06 — Keep packaged documentation consistent with the release
214
+
215
+ The consumer installed 0.2.0 while its packaged README still named 0.1.2 and some archive examples
216
+ used 0.1.1. Release 0.2.1 removes the README version pins; immutable 0.2.0 archives retain their
217
+ original text. The automated release-documentation consistency check remains open. Add that
218
+ repeatable check rather than relying on manual edits alone.
219
+
220
+ Acceptance:
221
+
222
+ - Distinguish current setup/version statements and executable installation examples from valid
223
+ historical release evidence. Do not rewrite historical versions indiscriminately.
224
+ - Validate current instructions against the actual prepared core/toolkit versions and tarball
225
+ contents before publication. Test both mismatches and intentionally historical references.
226
+ - Define how versioning updates or generates current-release documentation so normal Changesets
227
+ bumps cannot silently leave it stale. Verify installation examples from fresh packed output.
228
+
229
+ ## T07 — Traverse canonical documents with explicit coverage and authority
230
+
231
+ Start from configured SOT and master-roadmap entry points and recursively follow supported
232
+ canonical Markdown links to owner/task documents. Resolve against the chosen repository commit,
233
+ with cycle detection, canonical identities and deduplication. Report missing, ambiguous, outside-
234
+ scope or unsupported links instead of inventing targets or automatically fetching external URLs.
235
+
236
+ Extract requirements, business rules, constraints and cross-feature dependencies while retaining
237
+ source citations and explicit ownership. Reaching a document through a link does not approve it.
238
+ Routine implementation checklists and inferred plans cannot become approved intent through
239
+ traversal. Classify sources/claims explicitly; flag rules without clear SOT ownership and retain
240
+ their inferred/unreviewed state. Validation documents are excluded from product-intent extraction
241
+ by default and retained through a separately classified validation-evidence path.
242
+
243
+ Acceptance:
244
+
245
+ - Split delivery into canonical selection/traversal, role/ownership classification and semantic
246
+ extraction/linkage increments. Keep the existing direct-source configuration usable.
247
+ - The T02 preview exposes entry points, traversed paths, inclusion/exclusion reasons, roles,
248
+ approval/ownership state, unresolved links and exact budget/coverage limits without model calls.
249
+ - Support cycles, shared targets, relative links/fragments and rename/delete cases without
250
+ duplicate extraction. Test cross-feature owner/task references and validation documents,
251
+ including mixed or ambiguous content that needs explicit classification.
252
+ - Compute the necessary selection before scheduling model work. If limits prevent full requested
253
+ coverage, stop or require an explicit narrower scope/budget decision; never silently truncate
254
+ dependencies to fit a document count. Persist incomplete coverage and its reason where relevant.
255
+ - Reuse unchanged extraction artifacts incrementally. Recompute reachability/classification when
256
+ links or configuration change; invalidate affected relationships and preserve removed-source
257
+ history. Partial failures retain completed artifacts and the last valid snapshot.
258
+ - Prove cross-source linkage using extracted public prose and real code relationships, with
259
+ missing links, ambiguous ownership, conflicting claims and false cross-domain matches as
260
+ negative cases. Separate deterministic fixtures from budgeted live-provider evaluation.
261
+
262
+ ## Official 1.0 acceptance
263
+
264
+ With T01's upstream patch published, work through T02–T07 in bounded increments and record implementation
265
+ PRs and validation evidence here or in the linked validation record. Review the exact 1.0 scope
266
+ against completed evidence; any deferral needs an explicit maintainer decision and must remain
267
+ visible rather than being treated as done. The companion website, hosted AI and broader 2.0
268
+ product plan remain separate.
269
+
270
+ Before calling the consumer migration accepted or publishing 1.0:
271
+
272
+ 1. Confirm the patched identity policy in a genuine consumer hydration, including completed full
273
+ graph validation and snapshot publication, querying and an unchanged repeat. Keep provider
274
+ details, source scope and remaining gaps explicit; the consumer performs its own application work.
275
+ 2. Verify no-model scope preview, budget/coverage reporting, operational cache reuse and recovery
276
+ diagnostics against the implemented task scope. Exercise SOT traversal and authority separation
277
+ with public fixtures and reviewed consumer evidence.
278
+ 3. Pass supported-platform build/tests, fresh packed and public-registry installation, real
279
+ TypeScript indexing, RDF/SHACL, CLI/MCP, provenance and source-inventory checks. Check packaged
280
+ release instructions before publishing the exact reviewed archives.
281
+ 4. Record independently assessed usefulness and semantic-quality limits. Preserve the distinction
282
+ between deterministic checks, live-provider tests, browser checks and private consumer results.
283
+ Existing untested environments or deferred capabilities remain explicitly labeled.
284
+ 5. Review the changelog, compatibility/migration guidance and remaining known issues, then use the
285
+ normal reviewed version PR and trusted-publishing workflow. No 1.0 publication is claimed now.
286
+
287
+ The patch's upstream pass is necessary but does not replace consumer acceptance. Track follow-up
288
+ results without auditing or refactoring the source application's business logic from this repository.
package/docs/RELEASING.md CHANGED
@@ -1,8 +1,27 @@
1
1
  # Weftlet npm releases
2
2
 
3
- `@weftlet/core@0.1.2` and `@weftlet/toolkit@0.1.2` are published. The first automatic
4
- release completed in [run 39672652013](https://github.com/jchewitt/weftlet/actions/runs/39672652013),
5
- including package tags and GitHub Releases at commit `3d8d1f38a9e70b38178921cdabf5e8714c417c1c`. Their first trusted
3
+ `@weftlet/core@0.2.1` and `@weftlet/toolkit@0.2.1` are published through GitHub OIDC.
4
+ [Run 40382864083](https://github.com/jchewitt/weftlet/actions/runs/40382864083) completed
5
+ preparation, publication and release records on its first attempt at commit
6
+ `5d1db91bf19ed493a20849b2d0f92d3aeac35dfe`. Registry archives match the reviewed archives;
7
+ provenance and package tags identify that commit. A fresh public-registry installation passes
8
+ the identity regression, real SCIP/RDF/SHACL, querying and repeat artifact reuse without live
9
+ model calls. [Fix PR #15](https://github.com/jchewitt/weftlet/pull/15) and
10
+ [release PR #16](https://github.com/jchewitt/weftlet/pull/16) record the change. Genuine consumer
11
+ acceptance remains pending in the [1.0 plan](RELEASE-1.0-PLAN.md); detailed upstream evidence
12
+ is in [validation](VALIDATION.md).
13
+
14
+ The earlier 0.2.0 release also used GitHub OIDC.
15
+ [Run 40344526047](https://github.com/jchewitt/weftlet/actions/runs/40344526047) completed at
16
+ commit `ffe7f1d81f0421b35220bd7ba5b1555246c7a0e1`, including registry integrity checks,
17
+ package tags and GitHub Releases. The first attempt published core, then toolkit publication
18
+ stopped with Sigstore `TLOG_CREATE_ENTRY_ERROR` HTTP 409. Re-running failed jobs on the same
19
+ workflow restored the prepared archives and acceptance receipt; attempt 2 completed without
20
+ changing versions. See [validation](VALIDATION.md) for the verification record.
21
+
22
+ The first automatic release, 0.1.2, completed in
23
+ [run 39672652013](https://github.com/jchewitt/weftlet/actions/runs/39672652013),
24
+ including package tags and GitHub Releases at commit `3d8d1f38a9e70b38178921cdabf5e8714c417c1c`. The first trusted
6
25
  publication passed in [run 39661957651](https://github.com/jchewitt/weftlet/actions/runs/39661957651)
7
26
  from commit `720a5f964fe3cb6c438be6d22b4aa8b4ad44de17`, with matching registry archive integrity,
8
27
  npm provenance and a fresh public CLI installation. Earlier Weftlet and `@launch-echo` releases
@@ -26,8 +45,8 @@ preparation route; native Windows has focused CI coverage. See [validation](VALI
26
45
  **before** npm publication. Do not manually bump manifests or edit the generated plan.
27
46
  4. The plan change triggers **Weftlet release**. It validates and prepares both archives, publishes
28
47
  core followed by toolkit using npm trusted publishing, then verifies registry integrity.
29
- 5. After both versions are verified, a separate job creates tags such as `@weftlet/core@0.1.2`
30
- and `@weftlet/toolkit@0.1.2`, plus corresponding GitHub Releases, at that exact source commit.
48
+ 5. After both versions are verified, a separate job creates tags such as `@weftlet/core@0.2.1`
49
+ and `@weftlet/toolkit@0.2.1`, plus corresponding GitHub Releases, at that exact source commit.
31
50
  Existing tags are never moved. The publication job does not commit back to main.
32
51
 
33
52
  The bot uses GitHub's built-in token, not a personal access token. GitHub may require Settings →
@@ -140,7 +159,7 @@ Package-specific tags identify the exact published source, for example:
140
159
 
141
160
  ```sh
142
161
  git fetch --tags
143
- git switch --detach '@weftlet/toolkit@0.1.2'
162
+ git switch --detach '@weftlet/toolkit@0.2.1'
144
163
  ```
145
164
 
146
165
  Tags support inspection and reproduction, not mutation of npm history. To roll a consumer back,
@@ -150,8 +169,8 @@ Verify a new public release in a fresh disposable project, substituting its vers
150
169
 
151
170
  ```sh
152
171
  npm init -y
153
- npx --yes @weftlet/toolkit@0.1.1 init --yes
154
- npx --yes @weftlet/toolkit@0.1.1 config validate
172
+ npx --yes @weftlet/toolkit@0.2.1 init --yes
173
+ npx --yes @weftlet/toolkit@0.2.1 config validate
155
174
  ```
156
175
 
157
176
  Check registry hashes, transitive core resolution and provenance. Deprecating the previous
package/docs/ROADMAP.md CHANGED
@@ -1,8 +1,38 @@
1
1
  # Delivery roadmap
2
2
 
3
+ Source checkpoint: 2026-10-26, before the planned 0.3.0 release. Publication evidence is
4
+ recorded separately in [validation](VALIDATION.md); this roadmap is not a live registry status.
5
+
3
6
  Project: `jchewitt/weftlet`. Extraction provenance is recorded in the
4
7
  [source inventory](SOURCE-INVENTORY.md).
5
8
 
9
+ Forward direction is captured in the [Weftlet 2.0 product plan](WEFTLET-2.0-PLAN.md):
10
+ consumer hardening, cited code-derived drafts, scoped approvals and reconciliation, an optional
11
+ review website, source publication, managed AI and guided setup. “2.0” is a planning label;
12
+ the published packages are 0.2.1. The received consumer findings are tracked in the
13
+ [consumer hardening and 1.0 task list](RELEASE-1.0-PLAN.md): the document-identity patch is
14
+ published and passes upstream checks; genuine consumer acceptance remains pending. T02's
15
+ no-model preview is implemented in development source but is not in published 0.2.1. Cache reuse,
16
+ diagnostics and document coverage remain open before official 1.0 acceptance.
17
+ The 2.0 plan distinguishes proposed work from delivered capability.
18
+
19
+ T05 now blocks adoption: the maintainer reports SHACL pushing generation past a 30-minute
20
+ timeout before graph publication. T02 merged in [PR #18](https://github.com/jchewitt/weftlet/pull/18)
21
+ after local and hosted Ubuntu/Windows checks. The focused T05 cold-validation optimization is
22
+ implemented in development source, awaiting validation/release; the other 1.0 features must not
23
+ delay it. Neither increment is in the published 0.2.1 packages.
24
+
25
+ [Hydration planning](ADR-016-hydration-preview.md) shares committed selection and semantic cache
26
+ identity with execution, reports human/JSON scope and work estimates, and preserves source versus
27
+ assertion authority. It performs no model work or graph writes. The current JavaScript validator
28
+ still checks the complete in-memory N3 graph on each hydration; saved queries do not repeat
29
+ validation. [The T05 union optimization](ADR-017-shacl-validation-union.md) indexes all SPO triples
30
+ in one temporary validation graph, preserving the same shapes and canonical named evidence.
31
+ Bounded public experiments measured substantial cold-path improvement, alongside about 1.3 GiB
32
+ RSS at 10,000 unique-node facts. They do not reproduce the private consumer's overall timeout.
33
+ Early checks, in-phase progress, result reuse and incremental validation remain open; no Rust
34
+ engine, graph database or validation-result cache is introduced by this focused release.
35
+
6
36
  | Milestone | Delivered and checked | Remaining limits |
7
37
  | --- | --- | --- |
8
38
  | 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 |
@@ -89,8 +119,8 @@ preparation/publication under `@launch-echo`; the maintainer completed the 0.1.0
89
119
  source-application reintegration remain outside the authorized scope. See [release instructions](RELEASING.md).
90
120
 
91
121
  The maintainer authorized the Weftlet migration on 2026-10-21. Both `@weftlet/core` and
92
- `@weftlet/toolkit` are published at 0.1.2 through GitHub OIDC, with provenance and a fresh public
93
- installation verified. Changesets now prepares reviewed version PRs for the fixed package group;
122
+ `@weftlet/toolkit` are published at 0.2.1 through GitHub OIDC; the publication and verification
123
+ record is in [validation](VALIDATION.md). Changesets prepares reviewed version PRs for the fixed package group;
94
124
  merging a release plan triggers publication and package-specific tags/GitHub Releases.
95
125
  See [ADR 009](ADR-009-release-automation.md) and [release instructions](RELEASING.md).
96
126
  Earlier Tently packages remain available and undeprecated.
@@ -8,6 +8,208 @@ 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
+ ## T05 cold SHACL validation improvement, 2026-10-26
12
+
13
+ Implemented in development source following the T02 preview merge. Published npm packages
14
+ remain 0.2.1 until a separately recorded release succeeds. [ADR 017](ADR-017-shacl-validation-union.md)
15
+ records the measured graph-wildcard lookup cost and the temporary all-triples union used by the
16
+ unchanged JavaScript SHACL validator. The canonical named dataset and every assertion remain intact.
17
+
18
+ Public synthetic production measurements use Linux/Node 24.19.0, N3 2.7.2 and
19
+ rdf-validate-shacl 0.6.5. Each case ran once in a fresh child process with a 45-second hard deadline:
20
+
21
+ | Facts / topology | Nodes / original quads | Canonical construction | Production validation, including union | Whole-process maximum RSS |
22
+ | --- | --- | ---: | ---: | ---: |
23
+ | 2,000 unique | 4,000 / 56,003 | 0.194 s | 0.779 s | 490 MiB |
24
+ | 10,000 unique | 20,000 / 280,003 | 1.091 s | 2.920 s | 1,638 MiB |
25
+
26
+ Both production cases conform and retain the exact before/after serialized dataset digest.
27
+ The original-path public experiment measured 31.502 seconds of SHACL for the 2,000-fact unique
28
+ case; its 5,000-fact shared case produced no verdict before the 45-second process deadline.
29
+ The ADR records those separate prototype measurements and their boundaries. These are single-run
30
+ measurements, not latency guarantees or a reproduction of the consumer's complete 30-minute run.
31
+ Memory includes libraries, fixture generation and before/after serialization; the production
32
+ harness peaked near 1.6 GiB at 10,000 unique facts. Its legacy comparison also reparses a second
33
+ named store, so its RSS must not be treated as an old-versus-new production memory comparison.
34
+
35
+ Reproduce from a built source checkout with
36
+ `pnpm benchmark:shacl --counts 2000,10000 --topologies unique --modes optimized`.
37
+ The bounded harness records runtime, build hashes, sizes, phase timings, conformance and
38
+ serialization preservation. It exercises the public production validator; no private-store mutation,
39
+ provider call or private consumer data is used. A small paired legacy/optimized smoke agreed;
40
+ a 1 ms deadline probe killed the children and correctly reported no verdict.
41
+
42
+ Local `pnpm context-graph:publication-check` passes: 264 deterministic tests (1 core,
43
+ 263 toolkit), one optional OML skip, 12 existing advisory architecture findings, source inventory,
44
+ licenses and fresh packed-consumer CLI/npx/MCP, preview, real SCIP, RDF/SPARQL/SHACL and viewer
45
+ checks. All 79 original source path/hash pairs remain unchanged. No architecture baseline or
46
+ exception was added. The new internal shape module is required in the packed runtime inventory.
47
+
48
+ The 25 new regressions compare complete normalized diagnostics with direct validation of the
49
+ original named dataset. Cases cover empty/duplicate input, kinds, authorities, confidence and
50
+ citation bounds/types/order, empty provenance fields and colliding fact IDs. Separate assertions
51
+ preserve exact serialization, named-graph attributes/citations/review state and `facts()` through
52
+ repeated validation. A 2,200-fact case detects the invalid final assertion without timing gates.
53
+ The existing full hydration integration still verifies that failed SHACL preserves the last head.
54
+ The shape Turtle is byte-for-byte unchanged from the T02 merge; no shape or assertion was dropped.
55
+
56
+ Hosted checks and release status remain pending at this source checkpoint.
57
+ Early identity preflight, in-phase progress, validation-result reuse and incremental validation
58
+ remain separate work. Each hydration still performs full SHACL before publishing; saved queries
59
+ do not repeat validation. Private consumer full hydration/repeat acceptance remains pending.
60
+
61
+ ## T02 no-model hydration preview, 2026-10-26
62
+
63
+ Implemented in development source; published npm packages remain 0.2.1. See
64
+ [ADR-016](ADR-016-hydration-preview.md) for source, cache and readiness semantics.
65
+
66
+ [PR 18](https://github.com/jchewitt/weftlet/pull/18) merged at
67
+ `63c70f85b26a6cc60f8bc0615a86f6042a61ecd0`. Its final head
68
+ `6711362f9ff234d65ac3101dcf3ec0b0033519ec` passed hosted Ubuntu and Windows checks in
69
+ [run 40400487168](https://github.com/jchewitt/weftlet/actions/runs/40400487168) and
70
+ [run 40400478490](https://github.com/jchewitt/weftlet/actions/runs/40400478490).
71
+ An earlier Ubuntu run exposed a temporary-fixture cleanup race; disabling automatic Git
72
+ maintenance in that fixture and bounded cleanup retries resolved it before merge.
73
+
74
+ - Local `pnpm context-graph:publication-check` passed: 239 deterministic tests (1 core,
75
+ 238 toolkit), one optional OML skip, 12 advisory architecture findings, inventory, licenses
76
+ and fresh packed-consumer checks. No additional architecture baseline or exception was added.
77
+ - Ten independent-repository planner cases cover exact committed bytes despite dirty/untracked
78
+ files, unchanged Git index and filesystem hashes, approved sources versus unreviewed assertions,
79
+ explicit evidence-root classification, empty selection, cold/warm/forced cache, malformed or
80
+ unreadable artifacts, output-digest corruption, budgets, duplicate IDs, missing selectors and
81
+ historical agent selection with explicit omissions. The warm test independently checks the
82
+ literal released 0.2.1 key formula, then verifies actual SemanticHydrator reuse.
83
+ - Two real-process CLI cases cover human/JSON output, blocked and warning-only exit codes,
84
+ historical refs and force preview. Side-effecting provider/adapter modules are never imported;
85
+ unavailable Codex/SCIP/OML configuration does not prevent planning. Source bodies/raw provider
86
+ output are excluded from the plan. No snapshot or artifact directory is created by preview.
87
+ - Existing hydration rename/delete tests still pass, including removal of the last document.
88
+ Explicit empty semantic scope now performs zero semantic extraction even with committed docs
89
+ present. New graph-v6 snapshots remain distinct from old assemblies; valid semantic cache keys
90
+ and output digests retain the 0.2.1 contract.
91
+ - A fresh packed consumer exercises installed `hydrate --plan --json` with absent provider and
92
+ repository adapter modules, selects its committed document, reports one expected extraction,
93
+ and creates no graph storage. The public planner export and every runtime helper are present.
94
+ The remaining installed smoke covers real SCIP, RDF/SPARQL/SHACL, visualization and MCP.
95
+ - Independent review found and resolved an initial selector-gating regression: unmatched selectors
96
+ are warnings, preserving deletion behavior. Incomplete preview scope needs review and exits 1;
97
+ it does not establish a new execution policy. No blocking review finding remains.
98
+
99
+ No paid/live model call, npm publication or private source-application change was made for T02.
100
+ Recursive document coverage and operational-config cache reuse remain separate. This increment
101
+ does not optimize SHACL. The maintainer's report that validation pushes generation past a
102
+ 30-minute timeout makes [T05](RELEASE-1.0-PLAN.md#t05--detect-inexpensive-conflicts-early-and-explain-validation-work)
103
+ the next focused release priority; no consumer timing diagnosis is claimed here.
104
+
105
+ ## Weftlet 0.2.1 document identity patch, 2026-10-26
106
+
107
+ The public reproduction confirms the reported 0.2.0 defect: two unchanged semantic
108
+ assertions give one repository document ID different kinds and fail single-kind SHACL.
109
+ [ADR-015](ADR-015-repository-document-identity.md) records the canonical identity policy,
110
+ cache contract and immutable snapshot migration. The consumer follow-ups are tracked in
111
+ the [1.0 plan](RELEASE-1.0-PLAN.md).
112
+
113
+ [Fix PR 15](https://github.com/jchewitt/weftlet/pull/15) was validated at
114
+ `42ba9b79dc0562a412cd5a048e42b77234530d94` by both hosted Ubuntu/Windows runs
115
+ [40381728487](https://github.com/jchewitt/weftlet/actions/runs/40381728487) and
116
+ [40381772577](https://github.com/jchewitt/weftlet/actions/runs/40381772577).
117
+ [Release PR 16](https://github.com/jchewitt/weftlet/pull/16) advanced both package versions
118
+ to 0.2.1. Its exact head `da07772110d4c762e3178a7345b426263e14a22f` passed local
119
+ `pnpm release:prepare` and the explicitly dispatched
120
+ [Ubuntu/Windows checks](https://github.com/jchewitt/weftlet/actions/runs/40382270147).
121
+ The bot PR's separate automatic run required GitHub approval; the dispatched run tested
122
+ that same commit and completed successfully.
123
+
124
+ [Trusted-publishing run 40382864083](https://github.com/jchewitt/weftlet/actions/runs/40382864083)
125
+ completed on attempt 1 at merged commit `5d1db91bf19ed493a20849b2d0f92d3aeac35dfe`.
126
+ Both public npm `latest` tags resolve to 0.2.1. Package tags `@weftlet/core@0.2.1`
127
+ and `@weftlet/toolkit@0.2.1`, plus their GitHub Releases, identify that exact commit.
128
+ Main's package versions match the publication.
129
+
130
+ - Local `pnpm context-graph:publication-check` passed: 227 deterministic tests (1 core,
131
+ 226 toolkit), one optional OML skip, 12 advisory architecture findings, inventory,
132
+ licenses and a fresh packed-consumer CLI/npx/MCP, real SCIP and RDF/SHACL smoke.
133
+ - The new public regression uses two committed source documents and a deterministic
134
+ module provider that reproduces the conflicting classifications. Both semantic facts
135
+ retain their citations, confidence and separate source/assertion authority; deterministic
136
+ document links and SPARQL join the canonical document. Real TypeScript indexing and
137
+ SHACL pass. Fresh extraction reports 2 extracted/0 reused; repeat reports 0/2 with
138
+ identical snapshot identity/content digest. Raw provider output is preserved byte for byte.
139
+ - Seeded artifacts using the released 0.2.0 cache-key formula are not reused or overwritten.
140
+ Historical graph-v4 snapshot bytes remain unchanged and readable. Subject references
141
+ normalize too; unrelated concept-kind conflicts still fail SHACL. A missing document
142
+ mentioned in plain prose retains a cited implementation-gap diagnostic.
143
+ - Independent review found and resolved that missing-path diagnostic regression. No blocking
144
+ findings remained. All 79 original imported source paths and source hashes are preserved.
145
+ - Independent release review inspected the actual core/toolkit archives (11/184 file entries),
146
+ generated versions, changelogs and plan. Runtime assets, public examples and licenses/notices
147
+ are present; no Git history, credentials, caches or private consumer report data were included.
148
+ The packed toolkit dependency is `@weftlet/core: ^0.2.1`.
149
+ - Public npm archives match the hosted prepared archives and locally reviewed archives byte
150
+ for byte. Public SLSA provenance subjects match the SHA-512 archive hashes and identify this
151
+ source commit, repository, `publish.yml` and workflow attempt. This checks provenance content
152
+ and source identity, not a separate cryptographic signature audit.
153
+ - A fresh Linux/Node 24.19.0 public-registry consumer installed only toolkit 0.2.1 directly
154
+ (`npm install --ignore-scripts`); core resolved transitively to 0.2.1. Both package-lock
155
+ registry URLs and integrity hashes matched the reviewed archives. The installed CLI
156
+ initialized and validated an independent public fixture with two source documents. A
157
+ deterministic provider reproduced the legacy conflicting classifications: hydration retained
158
+ 2 semantic facts within 17 total facts, including 4 real SCIP facts, and SHACL conformed.
159
+ Cold hydration extracted 2/reused 0; the repeat extracted 0/reused 2 with unchanged snapshot
160
+ identity, content digest and bytes. Impact returned 17 facts and SPARQL returned the four
161
+ canonical document references. Saved queries still worked after the provider was disabled.
162
+ No live model call was made.
163
+
164
+ These are deterministic upstream checks, not live semantic-quality or private consumer
165
+ acceptance results. The consumer's full hydration was stopped after its isolated reproduction;
166
+ no complete consumer SHACL verdict or published snapshot is claimed. Full-graph validation
167
+ latency remains a separate investigation. The first refresh requires new semantic extraction;
168
+ historical cache/snapshot files should be retained. T01's upstream patch is published, while
169
+ genuine consumer acceptance and the remaining T02–T07 work are still pending.
170
+
171
+ ## Weftlet 0.2.0 publication, 2026-10-26
172
+
173
+ The maintainer authorized publication of both packages. [Release PR 4](https://github.com/jchewitt/weftlet/pull/4)
174
+ committed their `0.2.0` versions to main at `ffe7f1d81f0421b35220bd7ba5b1555246c7a0e1`.
175
+ [Trusted-publishing run 40344526047](https://github.com/jchewitt/weftlet/actions/runs/40344526047)
176
+ completed successfully on attempt 2. Both npm `latest` tags resolve to `0.2.0`.
177
+
178
+ - Exact release-PR head `a818ee6312f6970015cea66f55cf6bb2cc62e363` passed the
179
+ [dispatched Ubuntu/Windows checks](https://github.com/jchewitt/weftlet/actions/runs/40042137308).
180
+ Local `pnpm release:prepare` also passed 222 deterministic tests, one optional OML skip,
181
+ 12 advisory architecture findings, inventory, licenses and fresh packed-consumer checks.
182
+ The publication workflow repeated preparation at the merged source commit.
183
+ - Independent review checked the generated release plan, versions/changelogs, all 79 original
184
+ source identities and the actual archives. Core contains 11 entries and toolkit 179;
185
+ runtime assets, public examples and licenses/notices are present. No credentials, Git history,
186
+ caches or generated graph snapshots were included. Toolkit's packed core dependency is `^0.2.0`.
187
+ - Both public npm tarballs match the hosted prepared archives byte for byte, and those hashes
188
+ match the locally reviewed archives. Public SLSA provenance subjects match their SHA-512
189
+ digests and reference this exact commit, repository and `publish.yml` workflow. This checks
190
+ provenance content and source identity; it is not a separate cryptographic signature audit.
191
+ - Attempt 1 published and verified core, then toolkit's provenance submission failed with
192
+ `TLOG_CREATE_ENTRY_ERROR` / HTTP 409 for an equivalent transparency-log entry. The core
193
+ acceptance receipt and original archives were retained. Registry state was inspected before
194
+ rerunning only failed jobs in the same run. Attempt 2 completed toolkit publication using the
195
+ unchanged version/archives; core was already present. No provenance setting was disabled.
196
+ - Package tags `@weftlet/core@0.2.0` and `@weftlet/toolkit@0.2.0`, and their public GitHub
197
+ Releases, point to `ffe7f1d81f0421b35220bd7ba5b1555246c7a0e1`. The release records contain
198
+ the verified archive digests. Main's package versions agree with npm.
199
+ - A fresh public-registry consumer on Linux / Node 24.19.0 installed only
200
+ `@weftlet/toolkit@0.2.0` directly (`npm install --ignore-scripts`); core resolved transitively
201
+ to `0.2.0`. Both lockfile registry URLs and integrity hashes match the prepared archives.
202
+ CLI init/configuration and the npm-exec launcher passed. Real TypeScript indexing produced
203
+ 15 SCIP facts within 22 total facts; the impact query returned 22 and SHACL conformed.
204
+ Repeat hydration preserved snapshot identity/content. Saved queries preserved snapshot bytes
205
+ and labeled excluded working edits. MCP initialized, discovered `impact.scan`, returned a
206
+ bounded 20-fact response and reported a missing snapshot as an error. No semantic documents
207
+ were selected: both hydrations extracted/reused zero artifacts, so this does not establish
208
+ model extraction or semantic artifact reuse.
209
+
210
+ Live model/authentication quality, browser interaction and genuine fresh-task cloud restoration
211
+ remain separate. No source application was changed and no live model call was made for release.
212
+
11
213
  ## Development workspace recovery, 2026-10-23
12
214
 
13
215
  The existing Codex development workspace became executable again at repository commit