@weftlet/toolkit 0.1.1 → 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 (52) hide show
  1. package/README.md +39 -3
  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-008-weftlet-packages.md +2 -1
  36. package/docs/ADR-009-release-automation.md +39 -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/CONSUMER-TRIAL.md +165 -0
  43. package/docs/ENVIRONMENT-VALIDATION.md +9 -0
  44. package/docs/IMPACT-EVALUATION.md +363 -0
  45. package/docs/PROVIDERS.md +30 -2
  46. package/docs/RELEASING.md +128 -116
  47. package/docs/ROADMAP.md +49 -8
  48. package/docs/SOURCE-INVENTORY.md +10 -0
  49. package/docs/VALIDATION.md +394 -0
  50. package/docs/VIEWER.md +5 -0
  51. package/docs/extraction-manifest.json +104 -16
  52. package/package.json +9 -3
@@ -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.