@weftlet/toolkit 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +139 -14
  2. package/dist/application/cache-adoption.d.ts +2 -1
  3. package/dist/application/cache-adoption.js +12 -5
  4. package/dist/application/document-coverage.d.ts +28 -0
  5. package/dist/application/document-coverage.js +58 -0
  6. package/dist/application/document-overlay.d.ts +14 -0
  7. package/dist/application/document-overlay.js +31 -0
  8. package/dist/application/extraction-identity.d.ts +2 -1
  9. package/dist/application/extraction-identity.js +7 -0
  10. package/dist/application/hydration-inputs.d.ts +15 -0
  11. package/dist/application/hydration-inputs.js +55 -0
  12. package/dist/application/hydration-plan.d.ts +7 -0
  13. package/dist/application/hydration-plan.js +18 -5
  14. package/dist/application/hydrator.js +26 -14
  15. package/dist/application/overlay.js +26 -8
  16. package/dist/application/saved-evidence.d.ts +2 -2
  17. package/dist/application/semantic-scope.d.ts +1 -1
  18. package/dist/application/semantic-scope.js +2 -2
  19. package/dist/configuration/cache.js +13 -1
  20. package/dist/configuration/config.d.ts +2 -0
  21. package/dist/configuration/config.js +5 -0
  22. package/dist/configuration/document-traversal.d.ts +7 -0
  23. package/dist/configuration/document-traversal.js +13 -0
  24. package/dist/extraction/canonical-document-links.d.ts +28 -0
  25. package/dist/extraction/canonical-document-links.js +95 -0
  26. package/dist/extraction/document-classification.d.ts +44 -0
  27. package/dist/extraction/document-classification.js +161 -0
  28. package/dist/extraction/document-evidence.d.ts +21 -0
  29. package/dist/extraction/document-evidence.js +83 -0
  30. package/dist/extraction/document-traversal.d.ts +76 -0
  31. package/dist/extraction/document-traversal.js +210 -0
  32. package/dist/extraction/document.d.ts +3 -1
  33. package/dist/extraction/document.js +3 -1
  34. package/dist/extraction/ontology.js +2 -2
  35. package/dist/extraction/static.js +25 -20
  36. package/dist/graph/authority.js +3 -0
  37. package/dist/graph/coverage.d.ts +8 -0
  38. package/dist/graph/coverage.js +96 -0
  39. package/dist/graph/document-role-description.d.ts +5 -0
  40. package/dist/graph/document-role-description.js +18 -0
  41. package/dist/graph/query.d.ts +2 -2
  42. package/dist/graph/query.js +22 -62
  43. package/dist/graph/rdf.js +11 -0
  44. package/dist/graph/shacl-shapes.js +26 -0
  45. package/dist/index.d.ts +5 -0
  46. package/dist/index.js +4 -0
  47. package/dist/infrastructure/artifact-paths.d.ts +4 -0
  48. package/dist/infrastructure/artifact-paths.js +14 -0
  49. package/dist/interfaces/cli.js +18 -1
  50. package/dist/interfaces/document-coverage.d.ts +9 -0
  51. package/dist/interfaces/document-coverage.js +117 -0
  52. package/dist/repository/git.d.ts +11 -0
  53. package/dist/repository/git.js +38 -0
  54. package/dist/storage/storage.js +41 -13
  55. package/dist/visualization/visualization.js +21 -6
  56. package/docs/ADR-017-shacl-validation-union.md +4 -0
  57. package/docs/ADR-021-identity-preflight-and-validation-timing.md +5 -2
  58. package/docs/ADR-022-release-documentation.md +44 -0
  59. package/docs/ADR-023-document-coverage-preview.md +64 -0
  60. package/docs/ADR-024-implementation-coverage.md +51 -0
  61. package/docs/ADR-025-document-classification.md +78 -0
  62. package/docs/ADR-026-traversal-hydration.md +94 -0
  63. package/docs/ADR-027-validation-closeout.md +155 -0
  64. package/docs/ADR-028-bounded-artifact-paths.md +58 -0
  65. package/docs/CONSUMER-TRIAL.md +7 -5
  66. package/docs/GRAPHIFY-EVALUATION.md +70 -0
  67. package/docs/MIGRATING-TO-WEFTLET.md +1 -1
  68. package/docs/PRE-1.0-BASELINE.md +94 -0
  69. package/docs/PROVIDERS.md +10 -1
  70. package/docs/RELEASE-1.0-PLAN.md +145 -23
  71. package/docs/RELEASING.md +46 -8
  72. package/docs/ROADMAP.md +48 -16
  73. package/docs/VALIDATION.md +390 -0
  74. package/docs/assessments/pre-1.0-2026-10-28.json +200 -0
  75. package/docs/benchmarks/validation-2026-10-28/README.md +25 -0
  76. package/docs/benchmarks/validation-2026-10-28/large.json +1 -0
  77. package/docs/benchmarks/validation-2026-10-28/lifecycle.json +1 -0
  78. package/docs/benchmarks/validation-2026-10-28/native.json +1 -0
  79. package/docs/benchmarks/validation-2026-10-28/rich.json +1 -0
  80. package/docs/extraction-manifest.json +78 -20
  81. package/examples/generic-typescript/document-policy.json +9 -0
  82. package/package.json +7 -4
@@ -0,0 +1,78 @@
1
+ # ADR-025: Document roles, ownership and deterministic evidence
2
+
3
+ Status: T07b merged in PR 42; local and hosted checks and independent review passed.
4
+ No npm publication or consumer acceptance is claimed. See [validation](VALIDATION.md) for
5
+ completed checks and the [1.0 plan](RELEASE-1.0-PLAN.md) for the remaining boundary.
6
+
7
+ ## Decision
8
+
9
+ Classify document sources separately from source approval, assertion review and canonical node
10
+ identity. The public classifier accepts explicit role/owner mappings; the standalone deterministic
11
+ extractor retains document presence and canonical references without semantic artifacts. T07b does
12
+ not register that extractor with hydration or overlays. T07c will connect selection, classification,
13
+ validation-document separation and artifact reuse to execution.
14
+
15
+ `documents plan --document-policy <json-file>` accepts an optional operation-time JSON sidecar,
16
+ resolved from the current working directory and bounded to 65,536 bytes. It is not a hydration
17
+ configuration field. The API equivalent is `DocumentCoverageOptions.documentPolicy`. Documents
18
+ come from the chosen commit; policy and existing configuration are current operation inputs.
19
+ The report records their digests and makes no model/provider request or graph write.
20
+
21
+ ## Roles and owner mappings
22
+
23
+ Source roles are `intent`, `plan`, `validation`, `reference` and `unclassified`. Explicit role
24
+ mappings override configured defaults. Without a matching role mapping, evidence roots imply
25
+ `validation`, approved intent sources imply `intent`, and other sources remain `unclassified`.
26
+ Different matching explicit roles produce an ambiguity; rule order never chooses a winner.
27
+ Approval still comes only from `approvedIntentSources`, independently of the selected role.
28
+
29
+ Ownership requires an explicit mapping to a canonical document path. One available, approved
30
+ owner with an unambiguous `intent` role resolves ownership. Multiple distinct owners are
31
+ `ambiguous`; an unread or outside-coverage owner is `unavailable`; an unapproved owner is
32
+ `unapproved`; an approved owner with another or ambiguous role is `ineligible`. With no mapping,
33
+ ownership is `missing` for intent/plan/unclassified sources and `not-required` for validation/reference.
34
+ Approval does not imply self-ownership; a self-owner must also be mapped explicitly.
35
+
36
+ An owner mapping never approves its child document or an extracted assertion, and produces no
37
+ inferred owner edge. Missing/ambiguous roles and ownership are source-level evidence gaps, not
38
+ proven business-rule violations. The normalized policy digest includes role/owner mappings and
39
+ the approval/evidence-root policy; it does not depend on rule order or document availability.
40
+
41
+ ## Evidence records and querying
42
+
43
+ Optional per-fact `sourceRole`, `sourceOwnership` and `sourcePolicyDigest` preserve classification
44
+ without attaching conflicting roles to a shared canonical Document node. RDF exposes the role,
45
+ ownership status, owner paths, mapping IDs and policy digest while retaining exact record projection.
46
+ Metadata-targeted SHACL constraints validate new fields; historical facts without them retain
47
+ their existing behavior. Document IDs/kinds and the existing assembly/cache identities stay intact.
48
+
49
+ `extractDocumentEvidence` uses the committed traversal and classifier. For each successfully read
50
+ document it emits a Project `contains` Document fact, including empty documents and documents
51
+ without outgoing links. It emits `references` facts only for resolved canonical file/document
52
+ links, retaining exact declaration/use citations, source digests and commit SHA. Unresolved links
53
+ and incomplete traversal remain explicit reports/diagnostics; no missing relationship is invented.
54
+ The new `document-evidence-extractor:1.0.0` identity and classification metadata enter fact IDs.
55
+
56
+ These structural facts have inferred authority and deterministic extraction review. Their source
57
+ approval remains separate. Presence, a reference or a validation role does not claim that a test
58
+ ran/passed or a product rule was approved. Explicit validation roles use validation coverage;
59
+ plan/reference/unclassified roles cannot establish product intent. Query and viewer details expose
60
+ the same role/ownership metadata; existing facts without roles retain legacy interpretation.
61
+
62
+ ## Readiness and delivery boundary
63
+
64
+ The prospective plan's top-level `ready` remains traversal completeness plus budget readiness.
65
+ `classification.complete` independently describes role/ownership gaps and must be inspected
66
+ separately. Neither flag proves complete product coverage, approved assertions or hydration
67
+ readiness. A resolved owner can remain outside a future extraction selection; T07c must enforce
68
+ the execution contract rather than infer it from a preview.
69
+
70
+ Current direct-source hydration, `hydrate --plan`, configuration/cache identity and saved snapshots
71
+ remain unchanged. In particular, existing hydration still semantically extracts selected validation
72
+ documents. T07b supplies the separate evidence path needed before T07c can exclude those documents
73
+ from product-intent extraction without dropping their presence or citations.
74
+
75
+ Validation covers role conflicts and defaults, owner eligibility and non-transfer of authority,
76
+ actual committed presence/references, exact RDF/SHACL projection, query/viewer agreement and
77
+ legacy behavior. Exact gate and review outcomes are in the validation record; neither those
78
+ checks nor this decision claim npm publication or that traversal already drives hydration.
@@ -0,0 +1,94 @@
1
+ # ADR 026: Explicit traversal hydration with separate source and assertion authority
2
+
3
+ Status: accepted and merged in PR 44 after local/hosted validation. Publication and consumer
4
+ acceptance remain separate; exact commits and checks are recorded in [validation](VALIDATION.md).
5
+
6
+ ## Context
7
+
8
+ T07a follows canonical committed Markdown links; T07b classifies source roles/owners and extracts
9
+ cited document presence/references. Neither changed hydration. Consumers need one reviewed scope
10
+ for preview, extraction, cache recovery and saved queries, including validation evidence that is
11
+ unsuitable for product-intent extraction. A broad source list or a capped agent search must not
12
+ silently replace that scope.
13
+
14
+ ## Decision
15
+
16
+ An optional `documentTraversal` object in `context-graph.config.json` activates traversal hydration.
17
+ It accepts exact `entryPoints`, optional document `roots`, bounded `maxReadDocuments`, `maxReadBytes`
18
+ and `maxDocumentBytes`, and an inline T07b `policy`. Unknown controls are rejected. It replaces the
19
+ legacy `semanticSources` list for this mode. Existing direct configurations keep their behavior and
20
+ identity. Combining traversal with `agentContext`, or a programmatic `semanticSources` override,
21
+ is rejected rather than silently narrowing or broadening scope. Requests may still filter saved
22
+ impact queries; they do not change the traversal hydration selection.
23
+
24
+ `selectHydrationInputs` is shared by hydration, `hydrate --plan`, explicit cache adoption and draft
25
+ selection. Committed Git objects provide the closure despite working changes. Every discovered
26
+ source is reported; canonical cycles/shared targets extract once. Missing/unsupported/ambiguous
27
+ links, unread coverage, ambiguous source roles and semantic budget errors stop new model work
28
+ before ontology readiness, indexing or extraction. Existing completed artifacts and snapshot heads
29
+ remain intact. The no-model plan retains the full report on failure. Ordinary hydration points to
30
+ that local report without printing document paths/content in its new selection error.
31
+
32
+ Validation roles default from `evidenceRoots`, with explicit role mappings taking precedence. They
33
+ receive deterministic presence/reference evidence, including empty reports, and no model calls.
34
+ Semantic budgets count the remaining eligible sources; separate traversal read limits bound all
35
+ read sources. The nested traversal report's comparison ceilings are the maximum supported read
36
+ values, not a paid-work estimate; the plan's top-level `budgets` describes actual extraction limits.
37
+ An explicit non-validation override is a maintainer policy choice, never model inference.
38
+
39
+ Intent, plan, reference and unclassified sources may be extracted. Unresolved/ambiguous owner
40
+ mappings remain visible diagnostics, not newly invented hard CI rules. A valid owner must itself
41
+ be reached, approved and unambiguously intent. Being linked to an owner never approves a child,
42
+ and source approval never approves a model assertion. Policy role describes source context, not
43
+ a guarantee that every sentence is a business requirement. Model assertions stay inferred and
44
+ unreviewed; structural facts stay deterministic and inferred. Neither a written “PASS” nor the
45
+ presence of a test link asserts test execution.
46
+
47
+ The canonical document extractor owns Markdown references in this mode. The legacy linker still
48
+ emits assertion containment and supported bare/inline-code references. Assembly attaches role,
49
+ source authority, ownership and policy digest without modifying immutable provider artifacts.
50
+ Strict identity checks and SHACL remain required; assertions and contradictory evidence are not
51
+ silently removed to pass validation.
52
+
53
+ ## Identity, reuse and overlays
54
+
55
+ Snapshots bind the full configuration, closure/classification digest and `document-selection-v1`
56
+ plus `document-evidence-extractor:1.0.0`. Core adds an optional `DocumentSelectionRecord`; saved
57
+ JSON, Markdown and HTML expose coverage separately from ownership and assertion approval. Older
58
+ snapshots remain queryable and cannot satisfy current-config/extractor/commit checks.
59
+
60
+ The unchanged built-in Codex adapter receives one source without traversal/owner metadata.
61
+ Its source/provider/prompt/version/confidence key remains intact. Its user-cache partition ignores
62
+ only the validated `documentTraversal` field in addition to the five existing operational semantic
63
+ controls. Enabling traversal or changing role/owner/read limits can reuse unchanged artifacts;
64
+ source selection changes and source/model/version/approval changes retain existing conservative
65
+ identity behavior. Snapshot profiles always retain the entire configuration. Explicit legacy
66
+ cache adoption keeps conflict checks and never scans unrelated profiles.
67
+
68
+ Custom modules are trusted code with an explicit versioned provider contract. Traversal modules
69
+ get a separate full-config `document-semantic-v1` artifact namespace even in workspace storage.
70
+ Direct-mode artifacts and changed configurations cannot be silently reused there. Identical
71
+ configuration and unchanged source identities reuse; providers with additional mutable inputs
72
+ must version their declared contract or force extraction. No arbitrary context-dependent module
73
+ is promised automatic dependency discovery.
74
+
75
+ Draft overlays recompute the closure from the isolated base plus captured bytes. They rebuild
76
+ presence/references with draft authority, invalidate changed/deleted/unreachable sources and
77
+ assertions whose owner changed, and retain only matching source/policy/ownership evidence. An
78
+ incomplete closure invalidates all retained document assertions and is labeled incomplete; it can
79
+ still be queried as a draft. No model runs. Temporary Git timestamps are excluded from draft
80
+ selection identity; the base SHA and capture digest bind it instead. Committed heads are unchanged.
81
+
82
+ ## Validation and limits
83
+
84
+ Public fixtures compose actual committed traversal, unchanged Codex schema/citation handling with
85
+ an offline prose parser, real SCIP and strict RDF/SHACL. They cover the six-stage asynchronous
86
+ pipeline, warm reuse, configuration/cache isolation, source authority, rename/delete/reachability,
87
+ owner edits, draft gaps and saved-history freshness. CLI preview uses unavailable infrastructure
88
+ sentinels; installed consumer smoke uses the versioned module contract and real indexing.
89
+ These tests do not claim live model quality, browser interaction or TradePilot acceptance.
90
+
91
+ `documents plan --document-policy` remains a separate prospective operation, including its own
92
+ all-document budget comparison. Use `hydrate --plan` with the execution configuration to predict
93
+ actual extraction and reuse. No documentation generation/backfill, ownership inference, approval
94
+ UI, remote source adapter or model orchestration integration is added by this decision.
@@ -0,0 +1,155 @@
1
+ # ADR 027: Retain full validation after bounded lifecycle and native evaluation
2
+
3
+ Status: accepted engineering decision for the 1.0 candidate, 2026-10-28. Private consumer
4
+ performance acceptance and official 1.0 remain separate gates. This increment changes development
5
+ benchmarks, tests and documentation; it does not change the runtime validator or publish a release.
6
+
7
+ ## Decision
8
+
9
+ Keep complete, direct `rdf-validate-shacl` validation over the full SPO union, with the unchanged
10
+ shapes and supplemental citation-order check. Preserve the canonical named graph, provenance,
11
+ authority and prior published snapshots. Saved-snapshot queries remain independent of rebuilding.
12
+
13
+ Do not add a mandatory worker, validation receipt cache, incremental validator, Rust binary or
14
+ graph database for 1.0. The evaluations below support this choice; these capabilities are not
15
+ delivered or silently assumed. Reconsider when a measured consumer workload demonstrates a need.
16
+ Memory remains a material limitation, and these results do not establish a maximum supported
17
+ repository size or diagnose the private consumer's earlier 30-minute generation timeout.
18
+
19
+ The cold-path change in [ADR 017](ADR-017-shacl-validation-union.md) and identity/phase diagnostics
20
+ in [ADR 021](ADR-021-identity-preflight-and-validation-timing.md) remain the production improvements.
21
+ This decision closes their remaining engineering evaluation items without changing those
22
+ historical measurements. It does not waive genuine consumer hydration/repeat acceptance.
23
+
24
+ ## Measurements and reproducibility
25
+
26
+ Raw, public, metrics-only records are in [the benchmark directory](benchmarks/validation-2026-10-28/README.md).
27
+ They contain versions, source/harness hashes, fixture/fact/node/quad counts, complete case results,
28
+ diagnostic hashes, timings and resource observations. There are no private graphs, model prompts,
29
+ credentials or live provider calls. Runtime code is unchanged from `174f2ae`.
30
+
31
+ Linux x64, Node 24.19.0, pnpm 10.18.2, N3 2.7.2 and rdf-validate-shacl 0.6.5 were used in a
32
+ 32 GiB cloud container. Every fixture/mode/sample used a fresh bounded child, three samples per
33
+ case; garbage collection before cases was outside measurement. Repeated cases share their
34
+ session's imports/JIT state. The pipeline uses actual committed prose, the real Codex adapter
35
+ with a deterministic offline runner, real SCIP, cross-source linkage, SHACL and snapshot storage.
36
+ Its six eligible prose artifacts were reused on repeat; this does not test a live model.
37
+
38
+ Cold full-validation medians (union construction plus SHACL and the supplemental check):
39
+
40
+ | Input | Facts / nodes / canonical quads | Direct | Worker | Largest direct process RSS |
41
+ | --- | --- | ---: | ---: | ---: |
42
+ | Extracted six-stage pipeline | 241 / 97 / 4,929 | 167 ms | 159 ms | 308 MiB |
43
+ | Shared identities | 2,000 / 50 / 40,203 | 530 ms | 596 ms | 519 MiB |
44
+ | Unique identities | 2,000 / 4,000 / 56,003 | 620 ms | 696 ms | 554 MiB |
45
+ | Dense source metadata | 2,000 / 50 / 48,203 | 1,445 ms | 1,441 ms | 900 MiB |
46
+ | Unique identities | 10,000 / 20,000 / 280,003 | 2,860 ms | 2,830 ms | 1,676 MiB |
47
+ | Dense source metadata | 10,000 / 50 / 240,203 | 5,668 ms | 5,929 ms | 1,758 MiB |
48
+
49
+ RSS is the largest sampled process high-water mark across the reported lifecycle, not SHACL's
50
+ isolated allocation. It includes imports, fixture, canonical graph, serialization and union;
51
+ worker RSS includes its parent. The largest dense 10,000-fact worker case reached 3,058 MiB.
52
+ Dense fixtures attach source role/policy/ownership metadata to every fact, exercising the new
53
+ ownership disjunction. They are stress fixtures, not a claim about consumer metadata density.
54
+ The large cases are cold-only; the smaller fixtures include repeat and edits. There are 258
55
+ completed direct/worker cases and 18 paired sample groups with exact verdict/data equality.
56
+
57
+ Same-object repeat and rebuilt-identical graphs still execute full validation. Direct medians
58
+ for repeat/rebuild were 110/113 ms (pipeline), 471/481 ms (shared), 602/636 ms (unique), and
59
+ 1,336/1,246 ms (dense). Insert, update, delete, rename, negative confidence, shared-identity
60
+ conflict and repair-by-deletion all use complete candidate graphs, retain canonical serialization,
61
+ and produce the expected verdict. This is correctness/performance evidence for full validation,
62
+ not an incremental algorithm. No timing thresholds are CI gates.
63
+
64
+ ## Worker evaluation
65
+
66
+ The development worker uses the identical validator, shapes, input and full validation call.
67
+ All compared verdicts and serialized input hashes match direct execution, including failures.
68
+ The parent timer remains responsive: around 21 ms in 10,000-fact cases versus 5.4–8.2 seconds
69
+ for the direct harness operation (construction, serialization and validation combined). This
70
+ timer measures responsiveness, not percentage complete. Worker startup was approximately 0.8
71
+ seconds, structured cloning has a cost, and throughput/memory advantages were not consistent.
72
+
73
+ A bounded prototype terminates the worker after its actual SHACL-started boundary. In the
74
+ recorded runs termination took about 19–22 ms; no verdict was returned or accepted, and there is
75
+ no storage/publication call in this probe. This does not establish production cancellation or
76
+ failure recovery across a new worker boundary. Current runtime progress remains truthful phase
77
+ boundaries; in-phase heartbeat, interruption and worker memory limits would need separate API,
78
+ packaging, cancellation and head-preservation integration. There is no measured need to introduce
79
+ that complexity into this candidate.
80
+
81
+ ## Exact successful-result reuse
82
+
83
+ The study computes an experimental key over complete named RDF serialization plus validator,
84
+ shape, authority/progress code hashes, workspace dependency lock and Node version. It never reads
85
+ a cached verdict: every case validates. Identical/rebuilt/repaired input yields the same key;
86
+ edits and a manifest-only timestamp change yield different keys even when conformance is unchanged.
87
+ Serialization plus hashing alone costs roughly 23 ms for the cold pipeline, 137 ms for 2,000
88
+ shared facts, 157 ms for 2,000 unique facts and 125 ms for 2,000 dense facts. Graph construction
89
+ is still required. A manifest timestamp therefore prevents reuse across otherwise equivalent
90
+ hydrations under this conservative key.
91
+
92
+ Do not ship this prototype as a cache. A production receipt needs a reviewed validation dependency
93
+ key, actual resolved engine/dependency identities, complete supplemental-rule inputs, coherent
94
+ immutable input, atomically written and checked successful receipts, and invalidation for every
95
+ shape/policy/semantic change. Excluding manifest fields is a separate correctness decision, not
96
+ an arbitrary optimization. A failed/missing/corrupt receipt must trigger full validation; no
97
+ receipt may satisfy current commit/scope/working-diff freshness requirements on historical data.
98
+ The measured seconds saved do not yet justify that state and trust surface for 1.0.
99
+
100
+ ## Dependency-aware incremental evaluation
101
+
102
+ The regression demonstrates a concrete counterexample: validating a changed assertion alone
103
+ passes, while joining it with the unchanged producer of the same node fails `kind` maxCount.
104
+ Revalidating all producers of that identity reproduces the full verdict. Removing the conflicting
105
+ old producer repairs the graph without adding a fact. Renames require both old and new identities;
106
+ source-role/ownership checks also depend on all contributing assertions at a fact identity.
107
+
108
+ A safe implementation would need an index of every shape target and dependency, old/new affected
109
+ subjects and property values, removed targets, identities and incoming/outgoing relationships,
110
+ plus invalidation of prior violations. Shape/validator/policy changes and unbounded/global rules
111
+ require full fallback. There is no such reviewed dependency index in the toolkit. Retain full
112
+ validation for insertions, updates, deletions and renames; do not call a changed-facts pass a valid
113
+ whole-graph verdict. No previous violation is baselined away by this decision.
114
+
115
+ ## Native candidate
116
+
117
+ Material memory use justified a bounded evaluation of **Rudof 0.3.35**, an Apache-2.0 Rust CLI.
118
+ The official Linux GNU asset was downloaded outside the repository and verified against its
119
+ release SHA-256. No binary, dependency or license requirement is added to the product.
120
+
121
+ The probe exports every SPO triple, passes the exact current shapes, and applies the same JS
122
+ citation-order supplement (which is not itself a SHACL shape). All 29 public cases agree on
123
+ conformance and diagnostic locations. Exact diagnostic multiplicity agrees on 27: for non-integer
124
+ start/end lines Rudof emits two results at the failing property where the current validator emits
125
+ one. Neither validator accepts those inputs. The raw report retains both diagnostics; no shape,
126
+ failure or assertion is suppressed. The probe exits 1 to make this exact-parity difference visible.
127
+
128
+ Each timing sample starts a fresh native process, with a 30-second whole-process-group deadline:
129
+
130
+ | Input | Native parse/startup/validation median | Node export preparation, measured once | Largest native-only RSS |
131
+ | --- | ---: | ---: | ---: |
132
+ | 2,000 unique facts | 1,049 ms | 711 ms | 488 MiB |
133
+ | 10,000 unique facts | 4,631 ms | 4,377 ms | 2,264 MiB |
134
+ | 2,000 dense facts | 968 ms | 833 ms | 552 MiB |
135
+ | 10,000 dense facts | 5,217 ms | 3,318 ms | 2,534 MiB |
136
+
137
+ Native time includes the Python measurement wrapper, process startup and RDF parsing, unlike the
138
+ JS validation-only column. Its RSS excludes the Node graph/export process; these columns are not
139
+ engine-only apples-to-apples comparisons. Native dense SHACL invocation is competitive, but this
140
+ file-transfer integration provides no demonstrated overall latency or memory win. An embedded
141
+ binding might behave differently; this experiment does not measure one or generalize to all Rust
142
+ engines. Native Windows/macOS installation, release asset delivery, supply-chain verification,
143
+ schema evolution and diagnostic compatibility would also need support. Do not make it mandatory
144
+ or add an optional backend that cannot yet be maintained and validated across supported installs.
145
+ No graph database was benchmarked: there is no demonstrated persistent-service need, and adding
146
+ one would change the toolkit's installation and operational boundary.
147
+
148
+ ## Acceptance still required
149
+
150
+ Retain full upstream positive/negative/provenance/packaged-installation gates. Publish the reviewed
151
+ minor candidate before the consumer trial. Record genuine cold and repeated hydration, successful
152
+ full SHACL and snapshot publication, semantic reuse, observed resource/phase timing, saved querying
153
+ and the approved ten-minute provider retry in TradePilot. These public measurements cannot supply
154
+ that acceptance. Browser/live-auth work remains separately tentative as previously agreed; official
155
+ 1.0 requires the consumer result and release review.
@@ -0,0 +1,58 @@
1
+ # ADR 028: bounded physical artifact names
2
+
3
+ Status: implemented; release status is recorded in [validation](VALIDATION.md).
4
+
5
+ The consumer reported that long physical artifact/temp names block the traversal → unchanged
6
+ repeat → clean-comparison sequence on Windows. A public regression using traversal, routing and
7
+ an empty runtime-evidence revision reproduces `ENAMETOOLONG` in real SCIP during clean comparison
8
+ on Linux too. Appending `.scip.<UUID>.tmp` to the complete logical identity exceeds the common
9
+ 255-byte filename-component limit. RDF and optional OML work directories also embedded the entire
10
+ identity. This is a physical storage defect, not a graph identity, business-rule or SHACL defect.
11
+
12
+ ## Physical names and compatibility
13
+
14
+ Keep portable literal artifact keys of at most 128 ASCII characters. Longer/nonportable keys
15
+ use `~` followed by the full SHA-256 of the logical key. The `~` namespace is excluded from
16
+ literal logical storage identifiers, preventing a hash from aliasing a user-supplied short key.
17
+ Windows device names are also hashed. Existing logical identifier validation and its 256-character
18
+ limit remain intact; no snapshot, fact, provenance, extractor or cache identity is shortened.
19
+
20
+ Snapshot JSON, heads, semantic cache storage and SCIP output use this mapping. Generated semantic
21
+ cache keys are already 64-character digests and retain their names. Snapshot reads fall back to
22
+ the old literal filename if the bounded path is absent. Semantic reads retain explicit legacy
23
+ root handling. Skip legacy components that cannot exist within the filename limit (and Windows
24
+ device names on Windows), but propagate other I/O and corrupt-JSON errors.
25
+
26
+ Existing legacy immutable snapshots/artifacts are checked before publication and retained byte
27
+ for byte. A different content/output digest for the same identity remains an error. Updating a
28
+ long legacy head writes the new bounded head and gives it precedence without modifying history.
29
+ No bulk cache migration, forced extraction or automatic deletion is required. Older toolkit
30
+ versions cannot necessarily read newly hashed long-name entries; use supported store/CLI queries
31
+ with the full logical ID rather than constructing a filename from it.
32
+
33
+ Staging names are independent UUIDs in the destination directory, preserving same-filesystem
34
+ atomic link/rename publication. Cross-process immutable winner and head replacement semantics
35
+ remain unchanged. SCIP staging files are cleaned after success or failure. RDF/optional OML work
36
+ directories need only a backend prefix and UUID; RDF output digests do not depend on their names.
37
+ The optional OML generated document filenames remain their existing semantic digest keys.
38
+
39
+ This bounds toolkit-generated components; it does not promise that arbitrary storage-root lengths
40
+ or user source filenames work with every external program's total-path restrictions. The original
41
+ working checkout is not moved or cleaned. Full logical IDs remain in snapshots, head records,
42
+ facts and query responses, and saved evidence remains queryable without providers.
43
+
44
+ ## Validation boundary
45
+
46
+ The public sequence uses the unchanged Codex adapter with its offline grammar runner, real SCIP,
47
+ RDF/SHACL, document traversal, configured routing and an injected empty runtime provider. First
48
+ hydration extracts six semantic documents; repeat and clean comparison reuse all six. The clean
49
+ identity retains traversal/clean/runtime suffixes and exceeds 215 characters. Content digests and
50
+ all facts/provenance except the containing snapshot ID agree; the original head stays unchanged.
51
+ Generated components are bounded and no staging files remain. The exact sequence is part of the
52
+ existing native Windows traversal suite as well as the Linux suite.
53
+
54
+ Storage regressions cover 256-character snapshot/artifact/head keys, concurrent immutable writes,
55
+ concurrent head replacement, legacy reads without rewriting bytes, legacy cache roots, collisions
56
+ and unsafe input rejection. Existing cross-process publication tests remain required. Live provider
57
+ calls, private TradePilot acceptance and live openCAESAR compilation are separate; this patch does
58
+ not claim them or change validation constraints, graph semantics or evidence authority.
@@ -6,7 +6,7 @@ development workspace. Saved evidence queries work without a model login. Hydrat
6
6
  prose uses the configured provider; an OAuth failure may block new extraction but does not
7
7
  remove an already published snapshot.
8
8
 
9
- Use a pinned, reviewed toolkit version and its matching documentation. npm `0.2.0` includes
9
+ Use a pinned, reviewed toolkit version and its matching documentation. Release `0.2.0` introduced
10
10
  explicit routing declarations, committed TypeScript source projects, document linkage and
11
11
  the improved impact ranking. To evaluate a newer, unreleased commit, use both locally prepared
12
12
  package archives from that same reviewed commit; see [release preparation](RELEASING.md).
@@ -134,10 +134,12 @@ does not establish what the agent saw. Also retain a short account of what the a
134
134
  in its implementation or test plan because of these results, and the actual test outcomes.
135
135
 
136
136
  Retain the selected immutable snapshot, not just the mutable head pointer. With workspace
137
- storage, it is `<repositoryRoot>/<storagePath>/snapshots/<snapshotId>.json`; the default
138
- `storagePath` is `.context-graph`. `storageScope: "user"` instead uses a configuration/checkout
139
- hash directory under `~/.cache/context-graph`. Preserve the original store and exact
140
- configuration if its resolved path is uncertain. Semantic artifacts under `artifacts/semantic/`
137
+ storage, snapshots are under `<repositoryRoot>/<storagePath>/snapshots/`; the default
138
+ `storagePath` is `.context-graph`. Long physical filenames are hashed: identify the selected
139
+ record by its full `manifest.snapshotId`, not by constructing a filename from that ID.
140
+ `storageScope: "user"` instead uses a configuration/checkout hash directory under
141
+ `~/.cache/context-graph`. Preserve the original store and exact configuration if its resolved
142
+ path is uncertain. Semantic artifacts under `artifacts/semantic/`
141
143
  contain model output; keep them locally if extraction debugging is needed. They are not
142
144
  required to query an existing snapshot. Do not copy credentials or whole account directories.
143
145
 
@@ -0,0 +1,70 @@
1
+ # Graphify evaluation for the pre-1.0 baseline
2
+
3
+ Status: preliminary source/document review on 2026-10-28. **No comparative execution or
4
+ replacement decision yet.** This is B2 of the [baseline plan](PRE-1.0-BASELINE.md).
5
+ No Graphify dependency, code, binary, skill or service was installed into Weftlet. Public source
6
+ was read at a pinned revision outside the repository; no private consumer material was used.
7
+
8
+ ## Reviewed candidate
9
+
10
+ - Repository: [Graphify-Labs/graphify](https://github.com/Graphify-Labs/graphify).
11
+ - Reviewed commit: `0a8cd4e1e342235fe53e881fb5d591bf0460071f` on its `v8` branch.
12
+ - That commit's [package manifest](https://github.com/Graphify-Labs/graphify/blob/0a8cd4e1e342235fe53e881fb5d591bf0460071f/pyproject.toml)
13
+ identifies distribution `graphifyy`, version `0.9.97`, Python >=3.10 and Apache-2.0 licensing.
14
+ This is source metadata, not verification that a particular registry archive matches it.
15
+
16
+ The [README](https://github.com/Graphify-Labs/graphify/blob/0a8cd4e1e342235fe53e881fb5d591bf0460071f/README.md)
17
+ describes local tree-sitter extraction, broader language coverage, document/rationale extraction,
18
+ paths and agent integration. Marketing/benchmark claims are not adopted as Weftlet measurements.
19
+ The code inspected below supports evaluating it as a richer code-evidence producer; it does not
20
+ establish that it is more accurate than compiler-backed TypeScript indexing on our tasks.
21
+
22
+ ## Findings from source inspection
23
+
24
+ | Area | Observed at the pinned revision | Implication for an experiment |
25
+ | --- | --- | --- |
26
+ | Code granularity | [Extractor models](https://github.com/Graphify-Labs/graphify/blob/0a8cd4e1e342235fe53e881fb5d591bf0460071f/graphify/extractors/models.py) represent function/call syntax, declarations, imports, aliases, exports and symbol uses. The [engine](https://github.com/Graphify-Labs/graphify/blob/0a8cd4e1e342235fe53e881fb5d591bf0460071f/graphify/extractors/engine.py) emits code relationships and source locations. | Evaluate function/method/call relationships that our current file/shared-symbol projection does not expose. AST structure alone does not establish complete dynamic calls or data flow. |
27
+ | Workspace resolution | [Resolution code](https://github.com/Graphify-Labs/graphify/blob/0a8cd4e1e342235fe53e881fb5d591bf0460071f/graphify/extractors/resolution.py) handles TypeScript aliases, project references, workspace/import/export origins and ambiguous barrel candidates. Its comments explicitly describe skipped npm-package tsconfig extensions. | Exercise our actual alias/barrel/same-name/TSX cases rather than assuming all pnpm projects resolve. Preserve unresolved and ambiguous outcomes. |
28
+ | Identity | [Base identity helpers](https://github.com/Graphify-Labs/graphify/blob/0a8cd4e1e342235fe53e881fb5d591bf0460071f/graphify/extractors/base.py) derive file/symbol prefixes from paths; comments describe a later repository-relative remap. | Test roots, collisions, repeated names, rename/delete and clean/dirty isolation. Map imported entities into Weftlet's canonical identity and snapshot provenance instead of adopting labels as join keys. |
29
+ | Evidence semantics | Extracted edges carry source file/location and `EXTRACTED` or `INFERRED` tags. | These tags do not mean owner-approved intent, observed runtime behavior or successful test execution. Measure citation precision and retain derivation when transforming facts into RDF. |
30
+ | Deployment | The manifest depends on Python, NetworkX and multiple tree-sitter grammars; its optional services/providers are separate features. | Account for installation, platform support, artifact sizes, process boundaries, licensing and maintenance. Do not introduce hosted services or paid inference to compare static code extraction. |
31
+
32
+ Graphify already covers documents and rationale too. The comparison initially isolates code
33
+ extraction so that changing document inputs/providers cannot explain an apparent code improvement.
34
+ Its [published benchmark](https://github.com/Graphify-Labs/graphify/blob/0a8cd4e1e342235fe53e881fb5d591bf0460071f/BENCHMARKS.md)
35
+ reports an ERPNext six-question evaluation and a small FastAPI inferred-edge audit, including
36
+ noisier same-name test helpers. Those are upstream-reported results, not a TypeScript comparison
37
+ against Weftlet or SCIP and not evidence for complete asynchronous or business-rule linkage.
38
+
39
+ ## Fixed comparison protocol
40
+
41
+ 1. Freeze public source commits, expected relationships, negative cases, query/page budgets,
42
+ platform, versions and resource ceilings before measurement. Reuse the A1–A3 fixtures and
43
+ the existing dispatch negative case; add function-level examples without changing old labels.
44
+ 2. Compare **the current Weftlet SCIP projection**, **a bounded richer projection of raw SCIP**,
45
+ and **pinned Graphify static extraction**. Record raw index coverage separately from what
46
+ each adapter exposes. Do not attribute information discarded by our projection to SCIP itself.
47
+ 3. Include exact symbols, local/private functions, aliases, barrel exports, overloads, duplicate
48
+ names in separate domains, test mocks, TSX and service packages. Include a declared queue
49
+ boundary, a stored-data handoff and an undeclared boundary. The expected result for an
50
+ unsupported boundary is an explicit gap, not a guessed edge based only on a matching string.
51
+ 4. Hold business documents and their approved source classifications fixed. Check that the same
52
+ business-to-code links survive, then evaluate any finer function bindings separately. Keep
53
+ inferred mappings, source approval and reviewed assertions distinct.
54
+ 5. Measure precision/recall against predeclared edges, correct task-level consumers, false joins,
55
+ unresolved targets, citation validity, identity stability, cold/repeat/edit time and peak memory.
56
+ Compare same-process and subprocess measurements honestly. Count install/transfer overhead.
57
+ 6. Exercise deletion/rename, repeated clean runs, isolated committed materialization and dirty
58
+ queries. Retain old snapshots. Prove RDF/SPARQL/traversal equivalence for imported facts;
59
+ reject incompatible identities rather than weakening SHACL or dropping contradictory evidence.
60
+ 7. Run in a disposable tool environment with model calls disabled. Record reproducible commands
61
+ and sanitized outputs. Any live semantic experiment needs a separate bounded budget and
62
+ authorization before substantial paid usage. No private application checkout is modified.
63
+ 8. Produce an ADR choosing to keep SCIP, improve its projection, add an optional supported
64
+ producer, or replace the default. Replacement is a valid outcome if evidence supports it;
65
+ two permanently required indexers are not a prerequisite. If a change is selected, implement
66
+ compatibility/versioning and fresh-install tests as a separate milestone before publication.
67
+
68
+ Graphify does not become a second authority for product intent merely by importing its graph.
69
+ Neither tool can establish an undocumented business mapping from graph density alone. B3/B4
70
+ must address those evidence and meaning questions independently of the code backend decision.
@@ -1,7 +1,7 @@
1
1
  # Migrating from Tently to Weftlet
2
2
 
3
3
  The project is now Weftlet. LaunchEcho remains the maintainer; the GitHub repository remains
4
- [jchewitt/weftlet](https://github.com/jchewitt/weftlet). Both new package names are published
4
+ [jchewitt/weftlet](https://github.com/jchewitt/weftlet). Both new package names were first published
5
5
  at 0.1.0; see [release status](RELEASING.md) for subsequent releases.
6
6
 
7
7
  | Previous package / command | Replacement |
@@ -0,0 +1,94 @@
1
+ # Business-context baseline before 1.0
2
+
3
+ Status: added at the maintainer's request on 2026-10-28 after publication of the 0.6.0
4
+ candidate. This extends the original T01–T10 task list; its completion did not establish
5
+ automatic rule-to-function discovery or complete agent exploration. The candidate remains
6
+ available for TradePilot acceptance while the work below is assessed. No new release is
7
+ announced by this plan.
8
+
9
+ The product goal is to let an agent starting with a task or code change retrieve the relevant
10
+ product obligations, understand their connections across domains and asynchronous service
11
+ boundaries, and inspect the implementations, contracts and evidence behind those connections.
12
+ The agent must be able to investigate further without confusing a bounded response with
13
+ complete coverage. A functioning extraction/publication pipeline is necessary but insufficient.
14
+
15
+ ## What we checked now
16
+
17
+ Runtime source baseline: `9b4acffe1c4d35f9fd2f91132c576f8934658677`, the documentation follow-up
18
+ to release source `b4c808b9221c5c82f9f7326a310e966d1fee2888`. Both package versions are 0.6.0.
19
+ New acceptance tests use that unchanged runtime. Results and commands are recorded in
20
+ [the assessment](assessments/pre-1.0-2026-10-28.json) and [validation](VALIDATION.md).
21
+
22
+ | Acceptance case | Current result | What remains unproven or missing |
23
+ | --- | --- | --- |
24
+ | **A1 — Business context across an asynchronous or stored-data boundary** | **Bounded mechanism PASS.** An upstream file has no code/symbol connection to the downstream service in the control. Adding a cited workflow handoff makes execution, notifications, mobile and a test reachable. Both producer and consumer freshness obligations survive with their citations and unreviewed assertion authority. An unrelated domain with the same rule label stays excluded. | This is extraction from a deterministic public prose grammar. No live semantic comprehension, actual database/BullMQ delivery, automatic business compatibility verdict or private consumer acceptance is established. |
25
+ | **A2 — Progressive agent exploration** | **Existing operations PASS; requested experience PARTIAL.** Small pages through the actual MCP facade exhaust to exactly the larger scan without duplicates. A focused follow-up retrieves the downstream rule. Depth exhaustion is explicit; changing the query rejects an old continuation. | No dedicated exact-node neighbor/path MCP operation with relation/direction filters or explicit unexplored neighbor inventory. Scripted facade requests are not an autonomous-agent usefulness study or a new transport test. |
26
+ | **A3 — Multiple services and client packages in one monorepo** | **Configured public fixture PASS.** Real SCIP resolves a re-exported workspace contract used by API and TSX client code. Document relationships connect separately located API, execution and notification services and the client. Repeat hydration reuses all five documents with unchanged snapshot identity/content. | A synthetic pnpm workspace uses explicit source includes/aliases in one indexing program. This is not a full pnpm installation, multiple service builds, Expo validation, automatic workspace discovery or a run against TradePilot. Per-service coverage and real package resolution still need consumer evidence. |
27
+
28
+ The [three new tests](../tests/business-context-acceptance.test.ts) hydrate an independent Git
29
+ repository through the real application, semantic-provider contract, SCIP, document linker,
30
+ RDF/SHACL, saved storage and query path. The fixture provider parses only its documented small
31
+ grammar; it makes no model request and does not inspect implementation bodies. The control
32
+ already includes both sides' documents. The only added source evidence is the collection-to-
33
+ execution handoff. It re-extracts one document and reuses four; the next unchanged hydration
34
+ extracts zero and reuses five. Prior snapshots remain intact. No facts are manually spliced into
35
+ the assembled graph to obtain the positive result.
36
+
37
+ The two freshness limits (600 seconds at collection, 60 seconds at execution) are deliberately
38
+ different. They can be compatible when the consumer checks freshness. The test asserts retrieval
39
+ of both obligations and **does not assert a conflict or compliance verdict**. Runtime evidence
40
+ and evaluated business invariants are empty. Source approval never approves the model assertion.
41
+
42
+ Existing routing, query, RDF and workspace-indexing tests were also rerun: **24 passed**, followed
43
+ by **3 new acceptance tests passed**. Existing routing negatives reject false same-channel joins
44
+ and ambiguous/missing endpoints. Existing indexing checks cover dirty inputs, renames and deletes.
45
+ These results supplement, and do not replace, the published release's validation record.
46
+
47
+ Reproduce the focused assessment from a configured development checkout:
48
+
49
+ ```sh
50
+ pnpm exec vitest run tests/business-context-acceptance.test.ts tests/rdf.test.ts tests/routing.test.ts src/extraction/routing.test.ts src/extraction/scip-project.test.ts src/graph/query.test.ts
51
+ ```
52
+
53
+ ## Subsequent task list
54
+
55
+ These are bounded pre-1.0 investigations and implementation tasks, not a claim that the features
56
+ are delivered. Record decisions and exact acceptance evidence per task. Any deferral must be
57
+ explicitly reviewed with the maintainer; do not convert missing evidence into a pass. TradePilot
58
+ blockers take priority when its report arrives. Do not modify or audit its application here.
59
+
60
+ | ID | Task / next action | Acceptance boundary |
61
+ | --- | --- | --- |
62
+ | **B1** | **Exact graph exploration.** Specify and add bounded node lookup/neighbor expansion and dependency-path exploration through MCP and the shared query layer. | An agent can start from a returned stable node ID, select relation/direction and inspect another business area. Return citations, authority, snapshot identity, incomplete scope, pagination and remaining frontier. Test branches, cycles, ambiguous labels, deleted nodes and stale/mismatched continuations. Keep CLI/MCP/viewer on the same facts; preserve existing `impact.scan`. |
63
+ | **B2** | **Evaluate Graphify and current SCIP representation.** Run the fixed public comparison in [the research note](GRAPHIFY-EVALUATION.md) before choosing a code extraction backend or symbol schema. | Compare the current projection, richer use of raw SCIP and pinned Graphify on identical committed inputs. Measure correct/missing/false links, provenance, identity stability, costs and packaging. Produce a keep/improve/replace decision with evidence. Parallel use during evaluation does not mandate shipping two indexers. |
64
+ | **B3** | **Resolve business-to-implementation links at symbol/function level.** After B2, define canonical scoped code identities and resolve explicit document paths/symbol references to exact code entities. Evaluate a separate bounded inference pass only where explicit evidence is insufficient. | Named functions, methods, aliases, overloads, same-name symbols and renamed/deleted targets resolve correctly or remain unresolved. Separate a cited declared mapping, a proposed inferred mapping and evidence of actual behavior. Record both document and code revisions/spans for derived links. A reviewer can follow a rule to its implementation and back. Code inference never supplies approval; full automatic documentation generation remains 2.0. |
65
+ | **B4** | **Cross-boundary obligations.** Represent and retrieve producer guarantees and consumer requirements through explicit data/event contracts, including applicable stage, domain, units, freshness and version where sources provide them. | Public cases cover a queue handoff, a write/read handoff, compatible differing limits with revalidation, a real documented incompatibility, missing links and same-name unrelated domains. Retrieve both sides and the implementation evidence. Potential model findings remain uncertain; hard failures require explicit approved deterministic rules. A graph link or SHACL pass is not a compatibility verdict. General reconciliation/approval UI remains 2.0. |
66
+ | **B5** | **Monorepo selection and coverage.** Assess diagnostics for selected services, client, shared packages, source aliases and excluded/unresolved code; improve the gaps found. | A configured multi-package TypeScript/TSX fixture and the consumer report identify which projects were selected, indexed and actually connected. Test barrel exports, independent service code, external unresolved dependencies and omitted projects. Missing resolution cannot be reported as zero impact or complete coverage. Cross-repository federation is a separate scope decision. |
67
+ | **B6** | **End-to-end product acceptance and release decision.** Combine the public evidence, B1–B5 decisions and TradePilot's actual 0.6.0 report; ship bounded candidate changes as needed. | Predeclare tasks, correct downstream business obligations/implementations, known unrelated matches and query budgets before measuring. Retain actual requests, follow-up decisions and citations. Assess helpfulness and misses separately from hydration success. Complete full hydration/repeat and supported release checks; review any remaining limitations before a versioned 1.0 publication. |
68
+
69
+ Order: retain this A1–A3 baseline; triage incoming consumer blockers; specify B1 and run the
70
+ bounded B2 comparison; use that decision for B3; implement B4/B5 in independently testable
71
+ increments; close B6. Each implementation can ship in a minor candidate before 1.0. Changes to
72
+ retrieval semantics, extraction/cache identity or snapshot compatibility need explicit decisions
73
+ and regression evidence; no silent migration or history rewrite.
74
+
75
+ ## Consumer report to reconcile when available
76
+
77
+ Retain the private configuration, documents, snapshots and transcripts with TradePilot. Share
78
+ only a sanitized report identifying package versions, source/adapter SHA, indexing/document
79
+ scope, phase timings, full validation/publication, unchanged reuse and query coverage.
80
+
81
+ For A1, choose one actual upstream-to-downstream queue or stored-data change and record how the
82
+ graph witnesses the handoff, each side's obligations and the associated implementations. Note
83
+ whether a relationship came from prose, an explicit mapping, code or an observed trace. For A2,
84
+ retain the initial request, follow-up choices and all truncation/continuation states. For A3,
85
+ record the expected service/client projects and which were indexed, reached or missing. Have a
86
+ human assess business usefulness; an automated pass here is not a replacement.
87
+
88
+ ## Boundary with 2.0
89
+
90
+ The [2.0 plan](WEFTLET-2.0-PLAN.md) still owns bulk code-derived documentation, durable approval
91
+ workflows, cross-source reconciliation management, source-document backfill, the companion
92
+ website, hosted AI/billing and unrelated source adapters. This baseline concerns connecting and
93
+ exploring local evidence accurately. No service, provider billing, new dependency, source adapter,
94
+ automatic write-back, package publication or product-policy change is introduced by this assessment.
package/docs/PROVIDERS.md CHANGED
@@ -135,7 +135,7 @@ snapshot profiles. Changing `timeoutMs`, `retries`, `concurrency`, `maxDocuments
135
135
  `maxSourceBytes` can reuse completed artifacts; selection budgets are still enforced. Snapshot
136
136
  configuration digests remain complete and saved snapshots are not accepted as current merely
137
137
  because their artifacts were reused. Workspace cache paths and custom-provider identities remain
138
- unchanged. See [ADR 018](ADR-018-operational-semantic-cache.md) for exact isolation and recovery rules.
138
+ unchanged in direct mode. See [ADR 018](ADR-018-operational-semantic-cache.md) for exact isolation and recovery rules.
139
139
 
140
140
  If an older user-cache run was interrupted and its configuration has already changed, retain an
141
141
  exact copy of the previous configuration in its original directory. Its original `repositoryRoot`
@@ -204,3 +204,12 @@ Deterministic tests install a public synthetic CLI with npm locally and globally
204
204
  doctor, login probing and isolated extraction without contacting a model or using real credentials.
205
205
  These prove launcher plumbing, not live Codex authentication or semantic quality. Browser and live
206
206
  authentication follow-up remain deferred at the maintainer's request.
207
+
208
+
209
+ Traversal hydration in the next minor candidate keeps the built-in Codex source/prompt contract
210
+ unchanged. Its validated `documentTraversal` controls are excluded from the Codex artifact pool
211
+ partition; classification is attached during assembly. Validation documents are excluded from
212
+ semantic calls and counted only against traversal read limits. Module providers use a separate
213
+ full-config namespace in traversal mode, including workspace storage. Modules with mutable
214
+ external inputs must version their declared identity or force extraction; unchanged source/config
215
+ reuse does not discover those external dependencies. See [ADR 026](ADR-026-traversal-hydration.md).