@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.
- package/README.md +139 -14
- package/dist/application/cache-adoption.d.ts +2 -1
- package/dist/application/cache-adoption.js +12 -5
- package/dist/application/document-coverage.d.ts +28 -0
- package/dist/application/document-coverage.js +58 -0
- package/dist/application/document-overlay.d.ts +14 -0
- package/dist/application/document-overlay.js +31 -0
- package/dist/application/extraction-identity.d.ts +2 -1
- package/dist/application/extraction-identity.js +7 -0
- package/dist/application/hydration-inputs.d.ts +15 -0
- package/dist/application/hydration-inputs.js +55 -0
- package/dist/application/hydration-plan.d.ts +7 -0
- package/dist/application/hydration-plan.js +18 -5
- package/dist/application/hydrator.js +26 -14
- package/dist/application/overlay.js +26 -8
- package/dist/application/saved-evidence.d.ts +2 -2
- package/dist/application/semantic-scope.d.ts +1 -1
- package/dist/application/semantic-scope.js +2 -2
- package/dist/configuration/cache.js +13 -1
- package/dist/configuration/config.d.ts +2 -0
- package/dist/configuration/config.js +5 -0
- package/dist/configuration/document-traversal.d.ts +7 -0
- package/dist/configuration/document-traversal.js +13 -0
- package/dist/extraction/canonical-document-links.d.ts +28 -0
- package/dist/extraction/canonical-document-links.js +95 -0
- package/dist/extraction/document-classification.d.ts +44 -0
- package/dist/extraction/document-classification.js +161 -0
- package/dist/extraction/document-evidence.d.ts +21 -0
- package/dist/extraction/document-evidence.js +83 -0
- package/dist/extraction/document-traversal.d.ts +76 -0
- package/dist/extraction/document-traversal.js +210 -0
- package/dist/extraction/document.d.ts +3 -1
- package/dist/extraction/document.js +3 -1
- package/dist/extraction/ontology.js +2 -2
- package/dist/extraction/static.js +25 -20
- package/dist/graph/authority.js +3 -0
- package/dist/graph/coverage.d.ts +8 -0
- package/dist/graph/coverage.js +96 -0
- package/dist/graph/document-role-description.d.ts +5 -0
- package/dist/graph/document-role-description.js +18 -0
- package/dist/graph/query.d.ts +2 -2
- package/dist/graph/query.js +22 -62
- package/dist/graph/rdf.js +11 -0
- package/dist/graph/shacl-shapes.js +26 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +4 -0
- package/dist/infrastructure/artifact-paths.d.ts +4 -0
- package/dist/infrastructure/artifact-paths.js +14 -0
- package/dist/interfaces/cli.js +18 -1
- package/dist/interfaces/document-coverage.d.ts +9 -0
- package/dist/interfaces/document-coverage.js +117 -0
- package/dist/repository/git.d.ts +11 -0
- package/dist/repository/git.js +38 -0
- package/dist/storage/storage.js +41 -13
- package/dist/visualization/visualization.js +21 -6
- package/docs/ADR-017-shacl-validation-union.md +4 -0
- package/docs/ADR-021-identity-preflight-and-validation-timing.md +5 -2
- package/docs/ADR-022-release-documentation.md +44 -0
- package/docs/ADR-023-document-coverage-preview.md +64 -0
- package/docs/ADR-024-implementation-coverage.md +51 -0
- package/docs/ADR-025-document-classification.md +78 -0
- package/docs/ADR-026-traversal-hydration.md +94 -0
- package/docs/ADR-027-validation-closeout.md +155 -0
- package/docs/ADR-028-bounded-artifact-paths.md +58 -0
- package/docs/CONSUMER-TRIAL.md +7 -5
- package/docs/GRAPHIFY-EVALUATION.md +70 -0
- package/docs/MIGRATING-TO-WEFTLET.md +1 -1
- package/docs/PRE-1.0-BASELINE.md +94 -0
- package/docs/PROVIDERS.md +10 -1
- package/docs/RELEASE-1.0-PLAN.md +145 -23
- package/docs/RELEASING.md +46 -8
- package/docs/ROADMAP.md +48 -16
- package/docs/VALIDATION.md +390 -0
- package/docs/assessments/pre-1.0-2026-10-28.json +200 -0
- package/docs/benchmarks/validation-2026-10-28/README.md +25 -0
- package/docs/benchmarks/validation-2026-10-28/large.json +1 -0
- package/docs/benchmarks/validation-2026-10-28/lifecycle.json +1 -0
- package/docs/benchmarks/validation-2026-10-28/native.json +1 -0
- package/docs/benchmarks/validation-2026-10-28/rich.json +1 -0
- package/docs/extraction-manifest.json +78 -20
- package/examples/generic-typescript/document-policy.json +9 -0
- 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.
|
package/docs/CONSUMER-TRIAL.md
CHANGED
|
@@ -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.
|
|
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,
|
|
138
|
-
`storagePath` is `.context-graph`.
|
|
139
|
-
|
|
140
|
-
|
|
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
|
|
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).
|