@weftlet/toolkit 0.1.2 → 0.2.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 (50) hide show
  1. package/README.md +36 -1
  2. package/THIRD_PARTY_NOTICES.md +33 -0
  3. package/dist/application/hydrator.js +18 -5
  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 +44 -46
  17. package/dist/extraction/module-request.d.ts +3 -0
  18. package/dist/extraction/module-request.js +25 -0
  19. package/dist/extraction/routing.d.ts +14 -0
  20. package/dist/extraction/routing.js +151 -0
  21. package/dist/extraction/scip-project.d.ts +3 -0
  22. package/dist/extraction/scip-project.js +33 -0
  23. package/dist/extraction/semantic-process.js +17 -5
  24. package/dist/extraction/semantic.js +13 -2
  25. package/dist/extraction/static.d.ts +7 -3
  26. package/dist/extraction/static.js +15 -9
  27. package/dist/graph/query.js +21 -34
  28. package/dist/graph/ranking.d.ts +10 -0
  29. package/dist/graph/ranking.js +85 -0
  30. package/dist/interfaces/doctor.js +12 -3
  31. package/docs/ADR-002-saved-evidence.md +7 -1
  32. package/docs/ADR-003-draft-overlays.md +6 -0
  33. package/docs/ADR-004-rdf-query-path.md +6 -0
  34. package/docs/ADR-006-provider-boundaries.md +5 -0
  35. package/docs/ADR-010-committed-source-indexing.md +77 -0
  36. package/docs/ADR-011-explicit-document-links.md +48 -0
  37. package/docs/ADR-012-impact-ranking.md +50 -0
  38. package/docs/ADR-013-relative-module-requests.md +58 -0
  39. package/docs/ADR-014-routing-declarations.md +108 -0
  40. package/docs/CONSUMER-TRIAL.md +165 -0
  41. package/docs/ENVIRONMENT-VALIDATION.md +9 -0
  42. package/docs/IMPACT-EVALUATION.md +363 -0
  43. package/docs/PROVIDERS.md +30 -2
  44. package/docs/RELEASING.md +3 -1
  45. package/docs/ROADMAP.md +44 -4
  46. package/docs/SOURCE-INVENTORY.md +10 -0
  47. package/docs/VALIDATION.md +366 -0
  48. package/docs/VIEWER.md +5 -0
  49. package/docs/extraction-manifest.json +87 -16
  50. package/package.json +5 -2
@@ -0,0 +1,363 @@
1
+ # Impact retrieval evaluations
2
+
3
+ For an installed toolkit in your own project, start with the
4
+ [consumer trial](CONSUMER-TRIAL.md). It covers private log retention and human review using
5
+ existing CLI/MCP commands. The evaluator below is development tooling in this source checkout.
6
+
7
+ This is an advisory, reproducible evaluation of candidate-file retrieval on the real
8
+ repository. It is not a quality gate, a live model benchmark, or an assertion that a
9
+ proposed change is safe. The four scenarios and their expected findings were written
10
+ before the first run in `evaluations/weftlet/cases.json`. They are reviewable hypotheses;
11
+ they do not approve product intent or architecture policy.
12
+ The later dispatch evaluation below adds a separate synthetic project with new cases
13
+ declared before measurement, while keeping the implemented ranking fixed.
14
+
15
+ ## Reproduce the control
16
+
17
+ From a source checkout with the frozen dependencies installed:
18
+
19
+ ```sh
20
+ pnpm build
21
+ pnpm evaluate:impact --ref eeaaa342d62c11eeef44bfdf81fa8dedcfeb205d
22
+ ```
23
+
24
+ That exact commit must exist in local Git history. Omit `--ref` to measure the current
25
+ HEAD with the same cases. The runner rejects cases whose paths no longer exist; review
26
+ the expectations when the product changes instead of silently shrinking the denominator.
27
+ Keep the evidence SHA fixed for controlled comparisons. The earlier ordering used
28
+ commit-dependent fact IDs for ties; current ranking uses structural/citation fields first.
29
+ Freezing evidence still prevents changes in extracted facts from confounding the comparison.
30
+
31
+ The configuration uses real committed source bytes, bundled TypeScript SCIP, document
32
+ linking, RDF projection, SHACL, immutable publication and the normal saved-evidence query
33
+ service. The control provider returns **zero semantic assertions**. It permits measuring
34
+ literal document links without pretending to understand prose. No Codex login, API key,
35
+ Docker container or model call is required. The source checkout is not cleaned or modified.
36
+
37
+ Each scenario asks for 60 facts per page, up to three pages at depth 32. Reports distinguish
38
+ first-page recall, recall over the examined pages, relationships absent from the snapshot,
39
+ and relationships present but not retrieved within budget. A target counts only when a
40
+ returned fact names its exact file/document identity and is more than project membership.
41
+ Its provenance and extraction method accompany the score. This is still a generous
42
+ candidate-file metric: an import reference is weaker evidence than a typed symbol link,
43
+ and neither alone proves an end-to-end product dependency or that a test passed.
44
+
45
+ Unjudged results are not counted as false positives. Explicit distraction controls measure
46
+ noise in these tasks; their presence does not establish that the underlying graph assertion
47
+ is false. There is no claimed precision score without exhaustive human judgments.
48
+
49
+ The full local report is `.context-graph/evaluation/weftlet/report.json`. It records the
50
+ evidence commit, snapshot/content/configuration digests, exact configuration, suite and
51
+ runner-source digests, runtime, excluded working changes, coverage, witnesses and
52
+ continuations. Reports stay outside Git by default; review before sharing consumer results.
53
+ A failed refresh or scan exits nonzero and leaves the preceding report intact. Missing
54
+ coverage appears in a completed report; it is never converted into a passing quality gate.
55
+
56
+ To rescore saved evidence without rebuilding, installing a provider or reading its cache:
57
+
58
+ ```sh
59
+ pnpm evaluate:impact --snapshot <snapshot-id> --output .context-graph/evaluation/weftlet/rescored.json
60
+ ```
61
+
62
+ An absent snapshot is an error, with no refresh fallback. For a separately prepared provider
63
+ configuration, pass `--config <configuration.json> --snapshot <snapshot-id>`. Configuration
64
+ identity must match the snapshot. The runner refuses to refresh with a live provider.
65
+ Provider extraction is a separate, explicitly budgeted hydration operation; keep the same
66
+ six-document scope and review costs/authentication before running it. Source approval and
67
+ assertion review remain separate; the control configuration approves no intent sources.
68
+
69
+ ## Initial findings
70
+
71
+ The baseline uses Weftlet `eeaaa342d62c11eeef44bfdf81fa8dedcfeb205d`, before any
72
+ evaluation-specific links or indexing changes. The compact, public-safe measurement record
73
+ is [baseline.json](https://github.com/jchewitt/weftlet/blob/main/evaluations/weftlet/baseline.json);
74
+ full snapshots remain local. The evaluator is development tooling in the source repository,
75
+ not an installed `weftlet` CLI subcommand.
76
+
77
+ | Change scenario | Expected targets | First page | Three pages |
78
+ | --- | ---: | ---: | ---: |
79
+ | Atomic snapshot publication | 6 | 3 | 4 |
80
+ | Impact-query result/continuation | 6 | 2 | 3 |
81
+ | Codex executable discovery | 6 | 3 | 4 |
82
+ | Working-file capture and freshness | 6 | 5 | 5 |
83
+ | Total | 24 | 13 (54.2%) | 16 (66.7%) |
84
+
85
+ All four scans reached 1,368 of 1,369 snapshot facts; each stopped at 180 returned facts
86
+ with continuation available. The query scenario missed the MCP implementation within that
87
+ budget despite its presence in the graph. One of four distraction controls appeared within
88
+ three pages (telemetry for the atomic-publication task). These observations justify examining
89
+ ranking and overly broad relationships before treating eventual traversal recall as usefulness.
90
+
91
+ There were 849 SCIP facts from 45 paths, and 520 repository-file facts from 75 paths.
92
+ SCIP contributed **no test-file relationships**. Colocated tests appeared only through basic
93
+ import extraction; `tests/snapshot-lifecycle.test.ts` had no extracted relationship.
94
+ The core contract file had only project membership, without a useful consumer relationship.
95
+ `evidenceRoots` selects change scope; it does not itself add tests to the TypeScript project
96
+ or the repository-file extractor's roots. The committed archive also has no installed
97
+ workspace dependencies. These are configuration/indexing limitations to investigate, not
98
+ evidence that tests or core contracts are missing from the repository.
99
+
100
+ None of the six existing prose documents produced a document-link fact, and the five
101
+ distinct expected intent documents were absent from every result. The sources describe
102
+ behavior but lack explicit resolved implementation paths. This control cannot recover
103
+ conceptual prose-to-code mappings. A live provider comparison and human citation review
104
+ are needed before drawing any conclusion about semantic comprehension. Zero runtime
105
+ references and zero approved intent sources were configured intentionally.
106
+
107
+ ## Committed source-project comparison
108
+
109
+ The opt-in [source-project profile](ADR-010-committed-source-indexing.md) selects tests and
110
+ core source files explicitly and resolves `@weftlet/core` to its committed source entry.
111
+ It leaves the original profile and baseline intact. Run the comparison with:
112
+
113
+ ```sh
114
+ pnpm evaluate:impact --config evaluations/weftlet/source-project.config.json --ref eeaaa342d62c11eeef44bfdf81fa8dedcfeb205d --output .context-graph/evaluation/weftlet-source-project/report.json
115
+ ```
116
+
117
+ The commit, four cases, six documents, query budget and ranking are unchanged. The new
118
+ snapshot has 3,490 facts, including 2,970 SCIP facts and typed relationships from 33 test
119
+ files. The shared core contract and lifecycle test now appear in the results. The new
120
+ measurement is recorded in `evaluations/weftlet/source-project-baseline.json`.
121
+
122
+ | Change scenario | Original first / three pages | Source project first / three pages |
123
+ | --- | ---: | ---: |
124
+ | Atomic snapshot publication | 3 / 4 | 3 / 5 |
125
+ | Impact-query result/continuation | 2 / 3 | 4 / 4 |
126
+ | Codex executable discovery | 3 / 4 | 3 / 4 |
127
+ | Working-file capture and freshness | 5 / 5 | 5 / 5 |
128
+ | Total, out of 24 targets | 13 / 16 | 15 / 18 |
129
+
130
+ The original six test targets now have SCIP relationships as well as any simple import
131
+ facts. All four scans still reach the same broad component (3,490 facts) and stop at 180
132
+ returned facts; the MCP implementation remains outside the query budget. No labeled
133
+ distraction control appears within the examined pages in this run, which is not an
134
+ exhaustive precision result. The five expected intent documents are still unlinked.
135
+ There are still zero model assertions, approved intent sources and runtime references.
136
+
137
+ ## Explicit document-link measurement
138
+
139
+ [ADR 011](ADR-011-explicit-document-links.md) replaces loose path matching with cited committed
140
+ Markdown references. The original v2 snapshot remains queryable and unchanged. Under the new
141
+ linker, refreshing the same frozen old input adds two document references but preserves the
142
+ 15/24 first-page and 18/24 three-page scores. It cannot infer missing conceptual mappings.
143
+
144
+ The six documents now explicitly link descriptions of responsibilities to implementation and
145
+ test sources. Their evidence revision is `dcef64001d8d47cd1aeb4c1434992612158a104a`;
146
+ implementation and measurement identities are recorded in
147
+ `evaluations/weftlet/document-links-baseline.json`. Reproduce with:
148
+
149
+ ```sh
150
+ pnpm evaluate:impact --config evaluations/weftlet/source-project.config.json --ref dcef64001d8d47cd1aeb4c1434992612158a104a --output .context-graph/evaluation/weftlet-source-project/linked-documents.json
151
+ ```
152
+
153
+ | Change scenario | First page | Three pages | Labeled distraction within three pages |
154
+ | --- | ---: | ---: | --- |
155
+ | Atomic snapshot publication | 6 / 6 | 6 / 6 | None |
156
+ | Impact-query result/continuation | 5 / 6 | 6 / 6 | Codex command discovery |
157
+ | Codex executable discovery | 5 / 6 | 6 / 6 | Viewer interaction |
158
+ | Working-file capture and freshness | 6 / 6 | 6 / 6 | Codex command discovery (also on first page) |
159
+ | Total | 22 / 24 | 24 / 24 | 3 / 4 controls |
160
+
161
+ The graph contains 3,648 facts: 3,065 SCIP, 550 repository-file and 33 document-link facts.
162
+ All five expected intent-document paths now have cited links to actual file identities.
163
+ Every case still reaches the broad graph and stops at 180 returned facts with continuation.
164
+ The higher recall comes with additional noise; it is not a precision or completeness pass.
165
+
166
+ This changes the evidence input, including the preceding source-indexing implementation,
167
+ and the earlier commit-dependent tie-breaking could change ordering. The cases, query budget and ranking
168
+ implementation stay fixed, but the scores are not a controlled claim about semantic model
169
+ quality or ranking. Document links prove explicit references, not fulfillment of intent or
170
+ passing tests. There are still zero approved intent sources, model assertions, live model
171
+ calls and runtime observations. The new refresh reused six unchanged control artifacts.
172
+
173
+ ## Fixed-snapshot ranking comparison
174
+
175
+ [ADR 012](ADR-012-impact-ranking.md) changes ordering without changing extraction, reachability
176
+ or evidence authority. The version is `proximity-diversity-v1`; the measurement record is
177
+ `evaluations/weftlet/ranking-baseline.json`. Both existing snapshots were queried directly
178
+ and remained byte-for-byte unchanged. No indexer or model ran. The four cases, expected
179
+ paths, distraction labels, 60-fact page size, three-page budget and depth 32 stayed fixed.
180
+
181
+ | Saved evidence | Previous first / three pages | Ranked first / three pages | Distractions, previous / ranked within three pages |
182
+ | --- | ---: | ---: | ---: |
183
+ | Document links (3,648 facts) | 22 / 24 | 24 / 24 | 3 / 1 |
184
+ | Older source project (3,490 facts) | 15 / 18 | 19 / 19 | 0 / 1 |
185
+
186
+ Recall is out of 24 expected candidate files; distractions are out of four labeled controls.
187
+ On the document-link input all six targets in each case now appear on page one, including
188
+ the query test and setup doctor previously found later. No labeled distraction appears on
189
+ page one, down from one. On the older input, all 19 targets with extracted relationships now
190
+ appear on page one, including the MCP implementation previously outside the budget. The
191
+ five expected document links remain missing; ranking cannot supply absent evidence.
192
+
193
+ Telemetry now appears on a later page for atomic publication in both inputs. That case
194
+ previously had no labeled distraction, and the older control's noise score therefore worsens.
195
+ This is a tradeoff, not uniformly better relevance. The same broad graph remains reachable;
196
+ every scan stops at 180 facts with continuation. Four cases in one repository do not
197
+ establish generalization, precision, complete dependency discovery or change safety.
198
+
199
+ Reproduce against the saved document-link input:
200
+
201
+ ```sh
202
+ pnpm evaluate:impact --config evaluations/weftlet/source-project.config.json --snapshot dcef64001d8d47cd1aeb4c1434992612158a104a-graph-v3-links-2.0.0-42f885befb5ce881-4f68cb388720 --output .context-graph/evaluation/weftlet-source-project/ranking.json
203
+ ```
204
+
205
+ For the older control, substitute snapshot
206
+ `eeaaa342d62c11eeef44bfdf81fa8dedcfeb205d-graph-v2-42f885befb5ce881-4f68cb388720`.
207
+ These snapshots must already exist locally; the command does not rebuild missing evidence.
208
+ The report records the ranking version and query-source digests. After an ordering upgrade,
209
+ restart scans with old continuation tokens; they fail explicitly instead of silently
210
+ applying their offset to a different order.
211
+
212
+ ## Prospective dispatch evaluation
213
+
214
+ The dependency-free fictional Parcel Desk project, three cases and configuration were
215
+ committed at `fa902165a1f212a6d3245c847e1ab9b64a69715b` **before the first query**. It is
216
+ separate from Weftlet internals and the earlier pipeline fixture, but was authored after
217
+ ranking v1 existed. It is a prospective synthetic evaluation, not an independent external
218
+ benchmark. Production query/ranking bytes and both original case inputs remain unchanged.
219
+ Protocol and public-safe evidence are in `evaluations/dispatch/README.md` and
220
+ `evaluations/dispatch/baseline.json`.
221
+
222
+ Real committed TypeScript indexing, document links and RDF/SHACL produced 227 facts:
223
+ 164 SCIP, 50 repository-file and 13 document-link facts. The three draft documents generated
224
+ zero semantic assertions; no sources were approved and no runtime traces were imported.
225
+ Repeated hydration extracted zero and reused all three artifacts, with identical snapshot
226
+ identity/content. Fixture behavior checks passed separately; their execution is not a graph fact.
227
+
228
+ | Scenario | First page | Three pages | Distractions within three pages |
229
+ | --- | ---: | ---: | ---: |
230
+ | Upstream request contract | 6 / 6 | 6 / 6 | 2 / 2 |
231
+ | Asynchronous submission consumers | 5 / 6 | 5 / 6 | 2 / 2 |
232
+ | Same-name domain policy | 4 / 4 | 4 / 4 | 3 / 3 |
233
+ | Total | 15 / 16 | 15 / 16 | 7 / 7 |
234
+
235
+ No labeled distraction appears on page one. The seven labels are case-specific judgments
236
+ over three distinct files, not seven different files or exhaustive precision labels. Each
237
+ scan reaches the same 214 facts and stops at the unchanged three-page budget of 180 facts.
238
+ The source and labels were not adjusted after seeing these scores.
239
+
240
+ Two findings need separate treatment:
241
+
242
+ - The expected archival consumer has local definitions/test relationships but no extracted
243
+ route from dispatch. A supplemental scan exhausts all four pages (60/60/60/34) without
244
+ retrieving any of its facts. The generic scorer calls this `not-retrieved-within-budget`
245
+ because the file has relationships somewhere in the snapshot; here the diagnosis is a
246
+ disconnected operational route, not a lower-ranked reachable result. Matching topic text
247
+ does not establish delivery or a typed dependency.
248
+ - SCIP gives dispatch and refund `evaluatePolicy` functions distinct identities. The simpler
249
+ repository-file extractor nevertheless joins their planners through the shared literal
250
+ `contract:module:./policy.js`, even though those relative imports name different files.
251
+ A test importing both refund and audit sources extends that graph connection. This explains
252
+ a path to irrelevant candidates; it does not establish product causality. The missing
253
+ `docs/policy.md` Markdown reference produces a cited diagnostic and no guessed target.
254
+
255
+ Reproduce the frozen input from the toolkit checkout:
256
+
257
+ ```sh
258
+ pnpm evaluate:impact --suite evaluations/dispatch/cases.json --config evaluations/dispatch/context-graph.config.json --ref fa902165a1f212a6d3245c847e1ab9b64a69715b --output .context-graph/evaluation/dispatch/report.json
259
+ ```
260
+
261
+ `--suite` defaults to the original Weftlet cases. Both suite/config paths resolve from the
262
+ toolkit checkout; case paths resolve from the configured evidence root. Evaluator and evidence
263
+ commits are recorded separately, including when evidence is an independent Git repository.
264
+ Only the resolved bundled no-assertion control can refresh; other provider configurations
265
+ must use already-built evidence. Selecting a suite does not authorize a live model run.
266
+
267
+ Both prior saved snapshots were rescored: document-link retrieval remains 24/24 on page
268
+ one with one three-page distraction, and the older control remains 19/24 with one distraction.
269
+ Their cases, reachable counts and snapshot bytes are unchanged. The new measurement adds
270
+ evidence of limits; it does not claim a ranking improvement or broad semantic comprehension.
271
+
272
+ ## Fixed-input relative import correction
273
+
274
+ [ADR 013](ADR-013-relative-module-requests.md) corrects generic request identity without
275
+ changing ranking or guessing resolved implementation files. The two `./policy.js` imports
276
+ now identify `./src/dispatch/policy.js` and `./src/refund/policy.js` separately. Equivalent
277
+ relative spellings requesting the same location share canonical metadata. Bare imports keep
278
+ their existing identities; opaque requests remain importer-local.
279
+
280
+ Implementation `26c47d5b55f9390fe38b4928d1a8274eaf893583` refreshed the same committed inputs,
281
+ using the same configuration, labels, ranking and 60-fact/three-page/depth-32 budget.
282
+ The original records remain frozen; the comparison and cited witnesses are recorded in
283
+ `evaluations/dispatch/relative-imports-baseline.json`.
284
+
285
+ | Input | First-page candidates, before → after | Three-page candidates | Three-page distractions, before → after |
286
+ | --- | ---: | ---: | ---: |
287
+ | Dispatch | 15/16 → 15/16 | 15/16 → 15/16 | 7/7 → 0/7 |
288
+ | Weftlet document links | 24/24 → 24/24 | 24/24 → 24/24 | 1/4 → 1/4 |
289
+
290
+ Neither input returns a labeled distraction on page one. Dispatch reachability falls from
291
+ 214 to 183 facts for each case. Supplemental continuation exhausts 60/60/60/3 facts with no
292
+ refund/audit distraction, while the archival consumer remains disconnected. Its six local
293
+ facts are still present; correcting module identity does not establish topic-string routing.
294
+ The missing `docs/policy.md` reference still has a diagnostic. Weftlet reachability remains
295
+ 3,648 facts with 180 returned per case; telemetry remains a later-page distraction.
296
+
297
+ Hydration preserves fact counts (227 dispatch; 3,648 Weftlet) and all SCIP/document fact
298
+ fields except the containing snapshot ID. It reuses three and six semantic control artifacts
299
+ respectively, with zero extraction/model calls. A repeated dispatch refresh preserves snapshot
300
+ identity/content and reuses all three again. All three legacy saved graphs retain their byte
301
+ hashes, original scores and reachability when queried without hydration.
302
+
303
+ New graph-v4/file-v2 identities keep corrected evidence distinct from old snapshots; draft
304
+ overlay publication also binds the extractor version. Explicitly refresh to obtain the new
305
+ facts. Saved queries do not silently repair old evidence. These synthetic/self-repository
306
+ cases measure candidate retrieval and labeled distractions, not exhaustive precision,
307
+ operational delivery, approved intent or safety of the current diff.
308
+
309
+ ## Explicit routing source comparison
310
+
311
+ [ADR 014](ADR-014-routing-declarations.md) adds opt-in committed mappings with exact producer
312
+ and consumer paths. The declaration, configuration and protocol were committed at
313
+ `e5510479c0545e38a41a902b65839529a3e66e73` before measurement. The original 27 inputs, cases,
314
+ ranking and budgets remain frozen. This new source was deliberately authored; it is not a
315
+ discovered deployment configuration. See `evaluations/dispatch/routing-protocol.md` and
316
+ `evaluations/dispatch/routing-baseline.json` for the protocol and public-safe record.
317
+
318
+ Implementation `5b8d49679f48837fe2ea465940b8c852e543cf5d` compares the original configuration
319
+ with routing disabled and the new configuration with one mapping enabled, both at that new
320
+ input SHA. The mapping names the executor and archival consumer with `dispatch.completed.v1`
321
+ in `example/dispatch` scope. Its binding identity includes repository, scope and declaration
322
+ ID; channel text is not a shared join key. Both added facts are inferred/deterministic and
323
+ cite the committed mapping, without approval or observed-delivery claims.
324
+
325
+ | Scenario | First page, control → enabled | Three pages, control → enabled | Enabled distractions |
326
+ | --- | ---: | ---: | ---: |
327
+ | Upstream request contract | 6/6 → 6/6 | 6/6 → 6/6 | 0/2 |
328
+ | Asynchronous submission consumers | 5/6 → 6/6 | 5/6 → 6/6 | 0/2 |
329
+ | Same-name domain policy | 4/4 → 4/4 | 4/4 → 4/4 | 0/3 |
330
+ | Total | 15/16 → 16/16 | 15/16 → 16/16 | 0/7 |
331
+
332
+ Both configurations have zero labeled distractions at both budgets. Enabled hydration adds
333
+ two routing facts to the same 227 facts; all other fields match apart from containing snapshot
334
+ ID. Reachability increases from 183 to 198 facts per case. The normal three-page result still
335
+ stops at 180 with continuation. Supplemental full continuation exhausts 60/60/60/18 unique
336
+ facts, including all six archival implementation facts and seven archival test facts. Three
337
+ implementation facts and one test fact appear on page one. Their retrieval does not prove
338
+ the tests ran, the payloads agree, or a message was delivered.
339
+
340
+ Direct SPARQL finds the cited pair; RDF projection is field-equivalent and SHACL conforms.
341
+ Existing diagnostics, SCIP digest and semantic artifact keys remain unchanged. Both refreshes
342
+ reuse three control artifacts with zero extraction/model calls, and repeated enabled hydration
343
+ retains identity/content. Five historical snapshot byte hashes are preserved; saved-only
344
+ rescoring of the latest dispatch/Weftlet snapshots preserves their original scores/reachability.
345
+
346
+ The no-routing control still misses the archival consumer. The improvement demonstrates
347
+ extraction and cross-source use of an explicit map, not automatic operational discovery or
348
+ broader semantic quality. Review real mappings and validate actual deployment/runtime evidence
349
+ separately before treating these candidate relationships as stronger evidence.
350
+
351
+ ## Next bounded increments
352
+
353
+ 1. Evaluate actual deployment configuration or runtime routing evidence as a separate source.
354
+ Preserve the frozen no-routing control and distinguish authored declarations, configured
355
+ subscriptions and observed delivery; matching topic text alone must not bridge them.
356
+ 2. Review the explicit mappings with a consumer owner, then compare a bounded Codex extraction
357
+ against the control when ready. Preserve inferred/unreviewed assertion labels.
358
+
359
+ The six-stage public fixture continues testing extraction/linkage, queues, missing links,
360
+ ambiguous intent and inconsistent identities. The evaluator's unit tests separately check
361
+ measurement correctness, including truncation, duplicate results and stale expectation paths.
362
+ Neither set substitutes for a real semantic-quality evaluation. Browser interaction, live
363
+ authentication, fresh-cloud restoration and larger-graph performance remain separate work.
package/docs/PROVIDERS.md CHANGED
@@ -4,6 +4,12 @@ Codex CLI is the shipped model adapter. The module extension contract is tested
4
4
  providers; no additional CLI or API integration is advertised as working. An arbitrary executable
5
5
  is not compatible merely because it accepts stdin.
6
6
 
7
+ For contributors, [provider dispatch](../src/extraction/providers.ts) enforces this contract.
8
+ [Codex discovery](../src/extraction/codex-command.ts), [authentication](../src/extraction/codex-auth.ts)
9
+ and [semantic hydration](../src/extraction/semantic.ts) implement the shipped adapter;
10
+ [setup diagnostics](../src/interfaces/doctor.ts) probe its readiness. These source references
11
+ identify the implementation, not an approval of every extracted assertion or a live test result.
12
+
7
13
  `SemanticExtractor` has a stable `identity` and
8
14
  `extract(source, context, {signal, timeoutMs}) -> {parsed, rawModelOutput}`.
9
15
  The exported `SemanticOutput`, `semanticOutputSchema` and `assertSemanticOutput` define structured
@@ -114,8 +120,30 @@ HDesk subsequently reported a live end-to-end pass at commit
114
120
  `gpt-6-astra`/`medium`, using the unchanged adapter and public example. Citation/schema
115
121
  validation, real SCIP, RDF/SHACL, snapshot publication/querying and repeat artifact reuse passed.
116
122
  See [validation](VALIDATION.md#hdesk-validation-of-6710e9391a6a01345dab5f5be4ae0656e1c9d1ae)
117
- for counts and scope. Native Windows npm Codex executable discovery still needs improvement;
118
- this public-example pass does not establish broader semantic quality.
123
+ for counts and scope. The public-example pass does not establish broader semantic quality. Windows launcher coverage
124
+ is recorded separately below.
119
125
 
120
126
  Provider-dependent tests must remain opt-in, use tiny public fixtures, avoid credentials in
121
127
  untrusted CI, and record model/version/date separately from deterministic test results.
128
+
129
+ ## Windows launchers
130
+
131
+ Diagnostics, login checks and extraction share Codex discovery. On Windows, each nonempty PATH
132
+ directory is searched in order for `codex.exe`, then a standard npm `codex.cmd` launcher. Supported
133
+ npm layouts are a global prefix with `node_modules/@openai/codex` and a project-local
134
+ `node_modules/.bin`. The resolver verifies the package name, JavaScript bin entry and npm shim
135
+ reference, then runs that entry with the current Node executable. It never invokes cmd.exe or
136
+ PowerShell, so spaces and shell metacharacters stay literal. Arbitrary wrappers and alternative
137
+ package-manager layouts are not advertised as supported. An unsupported earlier launcher fails
138
+ instead of silently selecting a different installation later on PATH.
139
+
140
+ Discovery is bounded to five seconds (or the shorter requested timeout) and honors cancellation.
141
+ Extraction cancellation/timeout terminates the launcher process tree with Windows taskkill;
142
+ on POSIX the existing process-group termination remains in use. Authentication selection, secret
143
+ filtering, source isolation and semantic cache identities are unchanged. Saved-evidence queries
144
+ still do not discover or start Codex.
145
+
146
+ Deterministic tests install a public synthetic CLI with npm locally and globally, then exercise
147
+ doctor, login probing and isolated extraction without contacting a model or using real credentials.
148
+ These prove launcher plumbing, not live Codex authentication or semantic quality. Browser and live
149
+ authentication follow-up remain deferred at the maintainer's request.
package/docs/RELEASING.md CHANGED
@@ -1,6 +1,8 @@
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.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
4
6
  publication passed in [run 39661957651](https://github.com/jchewitt/weftlet/actions/runs/39661957651)
5
7
  from commit `720a5f964fe3cb6c438be6d22b4aa8b4ad44de17`, with matching registry archive integrity,
6
8
  npm provenance and a fresh public CLI installation. Earlier Weftlet and `@launch-echo` releases
package/docs/ROADMAP.md CHANGED
@@ -10,7 +10,7 @@ Project: `jchewitt/weftlet`. Extraction provenance is recorded in the
10
10
  | 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
11
  | 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
12
  | 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 |
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 npm launcher discovery and CRLF integrity validated in hosted Windows; live auth follow-up and other real providers remain |
14
14
  | 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
15
 
16
16
  HDesk results for `6710e9391a6a01345dab5f5be4ae0656e1c9d1ae` are recorded in
@@ -32,8 +32,48 @@ See [provider configuration](PROVIDERS.md#codex-authentication) and the validati
32
32
  Native Windows archive conversion, concurrent head-replacement and MCP file-symlink fixes are
33
33
  implemented with regression tests and pass focused hosted Windows CI. HDesk confirmation and
34
34
  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
35
+ The Windows reliability increment adds native/npm Codex discovery, process-tree cancellation
36
+ and Git-aware CRLF inventory/license checks. Hosted Windows passed 34 selected tests plus
37
+ repository inventory and licenses; hosted Ubuntu passed the full 178-test publication gate.
38
+ Browser and live authentication checks remain deferred. An advisory [self-repository impact
39
+ evaluation](IMPACT-EVALUATION.md) now measures four realistic changes with real SCIP/RDF/SHACL
40
+ and zero model assertions: 13/24 expected candidate files on the first page, 16/24 within
41
+ three pages. The opt-in [committed source-project increment](ADR-010-committed-source-indexing.md)
42
+ adds test/workspace indexing and improves the same cases to 15/24 first-page and 18/24
43
+ three-page candidates, with typed relationships from 33 test files. [Explicit document linkage](ADR-011-explicit-document-links.md) now resolves cited Markdown
44
+ references against committed files. With new contributor source mappings, a separately recorded
45
+ input returns 22/24 first-page and 24/24 three-page candidates; three labeled distractions also
46
+ appear. The old-source control remains 15/24 and 18/24 for that ordering.
47
+ [Query ranking](ADR-012-impact-ranking.md) was measured against those exact saved snapshots
48
+ without hydration: the document-link input improves to 24/24 on page one, with labeled distractions
49
+ reduced from three to one within three pages. The older control improves to 19/24 on page
50
+ one, but its distraction count worsens from zero to one. Missing document relationships stay
51
+ missing, and all reachable facts remain available through versioned continuation. See the
52
+ [fixed-input comparison](IMPACT-EVALUATION.md#fixed-snapshot-ranking-comparison).
53
+ Broad query reachability and live semantic quality remain gaps; these four cases do not
54
+ establish generalization or exhaustive precision.
55
+ The [prospective dispatch evaluation](IMPACT-EVALUATION.md#prospective-dispatch-evaluation)
56
+ adds three frozen synthetic cases outside Weftlet internals. Unchanged ranking retrieves
57
+ 15/16 expected files on page one; all seven case-specific distractions appear on later pages.
58
+ Full continuation confirms the topic-string archival consumer is disconnected, while generic
59
+ relative-import identity joins distinct domain modules. No cases or ranking were tuned after
60
+ measurement. Original saved-snapshot results remain unchanged.
61
+ [Relative module request identity](ADR-013-relative-module-requests.md) now scopes imports
62
+ to their requesting directory. On those same frozen inputs, dispatch retains 15/16 candidates
63
+ while three-page distractions fall from 7/7 to 0/7; Weftlet retains 24/24 first-page candidates
64
+ and one later-page distraction. Refreshes and overlays have versioned identities, and old
65
+ snapshots remain readable with their original facts. The archival routing gap remains without
66
+ additional source evidence. [Explicit routing declarations](ADR-014-routing-declarations.md)
67
+ now supply opt-in, cited producer/consumer bindings with inferred authority. A separately
68
+ committed authored mapping improves same-SHA dispatch retrieval from 15/16 to 16/16 on page
69
+ one, with zero labeled distractions. Drafts rebuild and invalidate affected bindings; these
70
+ results do not establish deployed subscriptions or observed delivery.
71
+ Next work should be separate, reviewed increments:
72
+ run the [private consumer trial](CONSUMER-TRIAL.md) on predeclared real-project tasks;
73
+ evaluate actual deployment/runtime routing evidence against the unchanged dispatch control;
74
+ review explicit mappings
75
+ and run a bounded live semantic comparison when the maintainer is ready;
76
+ retain the passing hosted Ubuntu CI gate; validate fresh-cloud
37
77
  restoration; resolve the cloud-specific live provider block; add browser
38
78
  interaction/accessibility tests; benchmark larger RDF graphs; evaluate a second real provider.
39
79
  Figma and source-application reintegration are future adapter work.
@@ -49,7 +89,7 @@ preparation/publication under `@launch-echo`; the maintainer completed the 0.1.0
49
89
  source-application reintegration remain outside the authorized scope. See [release instructions](RELEASING.md).
50
90
 
51
91
  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
92
+ `@weftlet/toolkit` are published at 0.1.2 through GitHub OIDC, with provenance and a fresh public
53
93
  installation verified. Changesets now prepares reviewed version PRs for the fixed package group;
54
94
  merging a release plan triggers publication and package-specific tags/GitHub Releases.
55
95
  See [ADR 009](ADR-009-release-automation.md) and [release instructions](RELEASING.md).
@@ -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.