@weftlet/toolkit 0.7.0 → 0.7.2
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 +40 -29
- package/THIRD_PARTY_NOTICES.md +2 -0
- package/dist/application/hydrator.js +18 -15
- package/dist/application/overlay.js +9 -9
- package/dist/application/saved-paths.d.ts +1 -1
- package/dist/application/semantic-run.d.ts +1 -1
- package/dist/extraction/ontology.d.ts +2 -0
- package/dist/extraction/ontology.js +28 -13
- package/dist/graph/code-coverage.js +2 -2
- package/dist/graph/code-rdf.d.ts +3 -2
- package/dist/graph/code-rdf.js +21 -14
- package/dist/graph/impact-signals.d.ts +7 -0
- package/dist/graph/impact-signals.js +54 -0
- package/dist/graph/neighborhood.js +3 -3
- package/dist/graph/partitioned-shacl.d.ts +14 -0
- package/dist/graph/partitioned-shacl.js +66 -0
- package/dist/graph/path-search.d.ts +6 -4
- package/dist/graph/path-search.js +50 -24
- package/dist/graph/paths-renderer.js +1 -1
- package/dist/graph/paths.d.ts +1 -1
- package/dist/graph/paths.js +5 -5
- package/dist/graph/ranking.d.ts +1 -1
- package/dist/graph/ranking.js +17 -9
- package/dist/graph/rdf-partitions.d.ts +24 -0
- package/dist/graph/rdf-partitions.js +170 -0
- package/dist/graph/rdf-projection.d.ts +7 -0
- package/dist/graph/rdf-projection.js +27 -0
- package/dist/graph/rdf-records.d.ts +12 -0
- package/dist/graph/rdf-records.js +90 -0
- package/dist/graph/rdf.d.ts +10 -10
- package/dist/graph/rdf.js +66 -97
- package/dist/graph/validation-progress.d.ts +4 -1
- package/dist/infrastructure/json-digest.d.ts +2 -1
- package/dist/infrastructure/json-digest.js +2 -2
- package/dist/interfaces/cli.js +1 -1
- package/dist/storage/storage.d.ts +3 -0
- package/dist/storage/storage.js +37 -13
- package/dist/storage/streaming-json.d.ts +5 -0
- package/dist/storage/streaming-json.js +45 -0
- package/dist/visualization/viewer-interaction.js +1 -1
- package/docs/1.0-WORK-QUEUE.md +25 -8
- package/docs/ADR-012-impact-ranking.md +2 -1
- package/docs/ADR-030-bounded-evidence-paths.md +21 -18
- package/docs/ADR-040-bounded-graph-io.md +90 -0
- package/docs/ADR-041-bounded-relationship-retrieval.md +77 -0
- package/docs/RELEASING.md +3 -3
- package/docs/VALIDATION.md +121 -0
- package/docs/benchmarks/large-graph-2026-11-02/result.json +156 -0
- package/docs/extraction-manifest.json +37 -11
- package/package.json +5 -2
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# ADR 012: order impact evidence by proximity and source diversity
|
|
2
2
|
|
|
3
|
-
Status:
|
|
3
|
+
Status: historical v1 query heuristic. [ADR 041](ADR-041-bounded-relationship-retrieval.md)
|
|
4
|
+
records the v2 library-hub and relationship-priority revision. Neither is product policy or an evidence gate.
|
|
4
5
|
|
|
5
6
|
The self-repository evaluation found distractions connected through common imports such as
|
|
6
7
|
`node:fs/promises`. The previous ordering prioritized keyword counts, then Codex/document-link
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# ADR 030: bounded cited dependency paths
|
|
2
2
|
|
|
3
|
-
Status: B1b
|
|
4
|
-
|
|
3
|
+
Status: B1b shipped in 0.7.0. The query-order revision in [ADR 041](ADR-041-bounded-relationship-retrieval.md)
|
|
4
|
+
replaces depth-first enumeration; publication and consumer acceptance are recorded separately.
|
|
5
5
|
|
|
6
6
|
## Meaning and scope
|
|
7
7
|
|
|
@@ -18,8 +18,8 @@ An empty predicate list selects all relations; a nonempty list is an OR filter.
|
|
|
18
18
|
cited associations, not causality, compatible business obligations or behavior verification.
|
|
19
19
|
They preserve authority, review state, source citations and node variants on every returned fact.
|
|
20
20
|
|
|
21
|
-
Read the same lossless RDF/SPARQL projection as other queries.
|
|
22
|
-
100,000-fact projection ceiling
|
|
21
|
+
Read the same lossless RDF/SPARQL projection as other queries. The 0.7.1 streaming changes
|
|
22
|
+
removed the former 100,000-fact projection ceiling without truncating evidence. No model,
|
|
23
23
|
indexer, SHACL rerun or graph write is involved. Duplicate fact IDs and mismatched stored snapshot
|
|
24
24
|
IDs fail. Responses reuse coverage, scoped diagnostic and checkout/overlay-state helpers.
|
|
25
25
|
Coverage describes the page's supporting evidence, not a repository completion percentage;
|
|
@@ -28,9 +28,10 @@ in snapshot metadata. An exhausted search says nothing about excluded or unextra
|
|
|
28
28
|
|
|
29
29
|
## Enumeration, work and continuation
|
|
30
30
|
|
|
31
|
-
Use deterministic
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
Use deterministic breadth-first traversal. Within each adjacency list, edges ending at the
|
|
32
|
+
requested target precede other edges, followed by assertion ID order independent of locale.
|
|
33
|
+
Completed paths arrive in nondecreasing edge count; a known direct connection is considered
|
|
34
|
+
first even on a high-branching source. This is not relevance, causality or a preferred design.
|
|
34
35
|
|
|
35
36
|
Defaults are depth 8 (maximum 32), five paths per page (maximum 20) and 1,000 new candidate-edge
|
|
36
37
|
examinations per page (maximum 10,000). Every considered edge counts, including cycles and depth
|
|
@@ -40,10 +41,11 @@ candidate count. Adjacency sorts are O(E log E); the existing RDF projection als
|
|
|
40
41
|
There is no wall-clock latency guarantee.
|
|
41
42
|
|
|
42
43
|
Continuations bind the operation version, normalized selectors and page budgets, saved manifest,
|
|
43
|
-
actual facts and diagnostics. A cursor carries only a step offset, never an external
|
|
44
|
+
actual facts and diagnostics. A cursor carries only a step offset, never an external queue or
|
|
44
45
|
assertions. Bounded replay reconstructs state and verifies the offset is a valid page boundary.
|
|
45
|
-
Responses report replayed and new steps separately. Replay is at most the total ceiling
|
|
46
|
-
|
|
46
|
+
Responses report replayed and new steps separately. Replay is at most the total ceiling.
|
|
47
|
+
At most one queued prefix is allocated per examined edge (100,001 including the root); parent
|
|
48
|
+
links share path prefixes, whose depth is bounded by 32. This trades repeated CPU work for stateless continuation
|
|
47
49
|
without snapshot/cache writes or a large serialized queue. Tokens provide query consistency,
|
|
48
50
|
not authentication. Changing selectors, depth, budgets or saved evidence requires restarting.
|
|
49
51
|
Cumulative cost over many tiny pages can exceed one search's ceiling because replay is repeated;
|
|
@@ -53,8 +55,9 @@ The page includes only its completed paths and the union of their unchanged supp
|
|
|
53
55
|
Work-limited pages may be empty and still have a continuation. Returned path count is not a
|
|
54
56
|
count of all possible paths. A continuation can lead to a final empty page after dead ends/cycles.
|
|
55
57
|
|
|
56
|
-
Report
|
|
57
|
-
|
|
58
|
+
Report the exact pending-prefix count and up to 32 examples with fact-ID prefixes, next
|
|
59
|
+
candidate fact IDs and remaining adjacency-candidate counts. Report the omitted example count
|
|
60
|
+
explicitly. These are not counts of valid paths. Depth cuts retain a total count,
|
|
58
61
|
up to 20 concrete extension examples and an explicit omitted-example count. Frontier IDs refer
|
|
59
62
|
to saved assertions; use `graph.neighbors` at that node/snapshot to retrieve their full citations.
|
|
60
63
|
|
|
@@ -73,9 +76,9 @@ path controls use one result per page, 1,000 new examinations, selectable direct
|
|
|
73
76
|
and the same total ceiling. Changing selection resets continuation. Targets show exact IDs next
|
|
74
77
|
to labels. Each highlighted edge is an unchanged fact from that displayed pack.
|
|
75
78
|
|
|
76
|
-
The
|
|
77
|
-
|
|
78
|
-
|
|
79
|
+
The viewer and service share this deterministic enumeration; labels say "cited path".
|
|
80
|
+
ADR 041 separately revises `impact.scan` ranking; `graph.neighbors` is unchanged.
|
|
81
|
+
No extraction identity, semantic artifact/cache key,
|
|
79
82
|
snapshot format, dependency, rule policy or language support changes.
|
|
80
83
|
|
|
81
84
|
## Validation boundary
|
|
@@ -92,6 +95,6 @@ fresh installed CLI/MCP assets and continuation. Execute rendered viewer control
|
|
|
92
95
|
DOM test harness and compare every highlighted path with the RDF service; this is script and
|
|
93
96
|
projection parity, not interactive browser rendering or autonomous-agent usefulness evidence.
|
|
94
97
|
|
|
95
|
-
B1a/B1b mechanisms are implemented; qualification and live product usefulness remain B6.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
+
B1a/B1b mechanisms are implemented; qualification and live product usefulness remain B6.
|
|
99
|
+
No backend replacement or business compatibility inference is implied by paths through the
|
|
100
|
+
existing evidence graph.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# ADR 040: Preserve evidence while removing whole-graph string and RDF copies
|
|
2
|
+
|
|
3
|
+
Status: implemented; public large-corpus lifecycle and hosted Linux/Windows checks pass.
|
|
4
|
+
Consumer acceptance remains open.
|
|
5
|
+
|
|
6
|
+
## Problem
|
|
7
|
+
|
|
8
|
+
The 0.7.0 consumer report reaches 561,777 facts / 174,710 nodes, reusing 18 semantic artifacts
|
|
9
|
+
without model calls, then fails at `sha256(stableJson(logical))`. Node's string ceiling is
|
|
10
|
+
536,870,888 UTF-16 code units; increasing the heap does not remove it. Snapshot JSON writing,
|
|
11
|
+
JSON reload and full RDF exports had similar allocations. The old internal SPARQL projection
|
|
12
|
+
also rejected more than 100,000 facts.
|
|
13
|
+
|
|
14
|
+
A generated public TypeScript corpus additionally demonstrated the memory cost of retaining a
|
|
15
|
+
full named N3 dataset and its validation union simultaneously. The fix must retain every assertion,
|
|
16
|
+
test fact, citation, confidence, authority and review state. It does not change extraction scope.
|
|
17
|
+
|
|
18
|
+
## Decision
|
|
19
|
+
|
|
20
|
+
- `stableJsonDigest` incrementally hashes the **existing encoding**, including sorted keys,
|
|
21
|
+
escaping, number formatting and legacy undefined-field behavior. `persistedJsonDigest` retains
|
|
22
|
+
the existing JSON-normalized digest contract. Neither is a new canonicalization standard.
|
|
23
|
+
- Stream ordinary snapshot/artifact JSON to exclusive temporary files, then publish with the
|
|
24
|
+
existing atomic hard-link/head replacement rules. Read JSON incrementally with a strict parser.
|
|
25
|
+
Header-only checks parse the complete document but retain only the manifest. Old files need no
|
|
26
|
+
migration and existing immutable winners are never rewritten.
|
|
27
|
+
- Stream default semantic N-Triples and optional openCAESAR file digests, preserving their existing
|
|
28
|
+
byte encodings and hashes. No Docker or provider is required to query saved evidence.
|
|
29
|
+
- Use one RDF encoder for named exports, SPARQL matching and validation partitions. RDF/JS matching
|
|
30
|
+
streams complete groups and indexes subject/graph lookups; Comunica remains the SPARQL engine.
|
|
31
|
+
Cardinalities are exact, never guessed for optimizer shortcuts. The traversal record projection
|
|
32
|
+
has equivalence tests against SPARQL, including duplicate-ID join multiplicity, and no graph-size
|
|
33
|
+
response cap. Public query result limits still report truncation.
|
|
34
|
+
- `serializeChunks()` / `serializeTo(writable)` export complete N-Quads with backpressure. The
|
|
35
|
+
legacy `serialize(): Promise<string>` convenience necessarily remains limited by the JavaScript
|
|
36
|
+
string ceiling. N-Quads ordering can differ from 0.7.0; its quad set is unchanged. Export order
|
|
37
|
+
is not a snapshot identity. Snapshot JSON encoding and semantic RDF digests are preserved.
|
|
38
|
+
|
|
39
|
+
## Strict SHACL without two complete RDF stores
|
|
40
|
+
|
|
41
|
+
Keep `rdf-validate-shacl` and every current constraint. Group all outgoing triples for a subject
|
|
42
|
+
together, including every occurrence of a shared identity; do not validate isolated conflicting
|
|
43
|
+
assertions as if each were a separate node. Current shapes inspect direct outgoing properties;
|
|
44
|
+
their only cross-subject constraint is `sh:class`. Supply complete graph-wide `rdf:type` membership
|
|
45
|
+
for those references. Determine the original targets before adding support-only type triples and
|
|
46
|
+
express those same targets as `sh:targetNode` for the batch. Support-only nodes are checked with
|
|
47
|
+
their complete records in their own batch.
|
|
48
|
+
|
|
49
|
+
Every subject and constraint is evaluated. Missing proof targets, contradictory metadata, kind
|
|
50
|
+
conflicts, corrupt citations and malformed code evidence still fail. Existing TypeScript proof
|
|
51
|
+
and provenance checks run over all facts after SHACL. No validation result is reused or inferred
|
|
52
|
+
from semantic cache hits. An allowlist rejects new SHACL vocabulary or non-direct paths until
|
|
53
|
+
partition locality is reviewed; unsupported constraints cannot silently pass. Batch progress
|
|
54
|
+
reports completed groups and elapsed time, not an estimated completion time.
|
|
55
|
+
|
|
56
|
+
This changes execution/storage, not asserted semantics: assembly 12, extractor identities,
|
|
57
|
+
semantic cache keys, schema version and logical snapshot IDs remain unchanged. Old snapshots stay
|
|
58
|
+
addressable; existing extraction incompatibility checks still apply.
|
|
59
|
+
|
|
60
|
+
## Validation and limits
|
|
61
|
+
|
|
62
|
+
Tests compare against a frozen 0.7.0 RDF builder at
|
|
63
|
+
`073edab3f1cef875f2fc058ffbc0ddc59cf934d2`. They compare complete named and union quad sets,
|
|
64
|
+
positive/negative verdicts and issues, real SCIP/code-proof metadata, cross-partition class
|
|
65
|
+
references, aggregates and traversal projections. Hash compatibility includes Unicode, surrogate
|
|
66
|
+
boundaries, optional fields and an encoding larger than V8's actual string ceiling. Storage tests
|
|
67
|
+
cover malformed/truncated JSON, special property names, legacy files and concurrent publication.
|
|
68
|
+
|
|
69
|
+
The repeatable public workload is generated TypeScript with shared helpers, same-file and
|
|
70
|
+
cross-file calls, spec files and 18 prose documents. Its provider is a deterministic fixture
|
|
71
|
+
parser, not a live model. It exercises real SCIP, strict hydration, snapshot reload, streaming
|
|
72
|
+
N-Quads parsing and bounded SPARQL, unchanged repeat and clean comparison; it asserts canonical
|
|
73
|
+
encoding size above the actual string ceiling, exact provenance, semantic reuse, unchanged
|
|
74
|
+
versions and immutable snapshot/artifact bytes.
|
|
75
|
+
|
|
76
|
+
```sh
|
|
77
|
+
pnpm build
|
|
78
|
+
pnpm exec vitest run tests/large-graph-lifecycle.test.ts tests/rdf-scaling-parity.test.ts
|
|
79
|
+
node --max-old-space-size=8192 --import tsx scripts/large-graph/run.ts 1100 40 --require-large
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The large run is deliberately separate from ordinary CI; its scaled fixture runs in CI.
|
|
83
|
+
The [recorded full run](benchmarks/large-graph-2026-11-02/result.json) passes with 554,516 facts,
|
|
84
|
+
a 1 GB snapshot and a complete 5.3 GB RDF export. Each strict SHACL pass takes about 35–37 minutes;
|
|
85
|
+
this does not establish a 30-minute hydration budget. Linux capacity results do not establish
|
|
86
|
+
native Windows consumer acceptance. See VALIDATION.md for source/checkpoint distinctions. This is a capacity regression, not a
|
|
87
|
+
semantic-quality or universal performance guarantee. Parsed graph objects and indexes still use
|
|
88
|
+
memory; a single very large record/identity can exceed a group target. Arbitrary SPARQL joins,
|
|
89
|
+
sorts and aggregates have their own time/memory costs. There is no persistent graph database,
|
|
90
|
+
incremental-validation cache or Rust validator in this change.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# ADR 041: useful relationships within bounded retrieval
|
|
2
|
+
|
|
3
|
+
Status: query-only patch; validation and publication status are recorded in VALIDATION.md.
|
|
4
|
+
|
|
5
|
+
## Evidence and scope
|
|
6
|
+
|
|
7
|
+
The maintainer reports successful 0.7.1 hydration, strict validation, persistence/reload and
|
|
8
|
+
unchanged repeat on the consumer's 561,777-fact graph, preserving all 18 cached artifacts.
|
|
9
|
+
Two subsequent failures concern retrieval: a known direct path was displaced by deep branches,
|
|
10
|
+
and specific consumer assertions were displaced by standard-library references.
|
|
11
|
+
|
|
12
|
+
The consumer independently confirmed that the missing `references` and `consumes` assertions
|
|
13
|
+
exist in the same snapshot and are reachable in expansion round two. Their calculated balanced
|
|
14
|
+
positions were 24,801 and 69,207, outside three pages of 60 assertions at depth three. The
|
|
15
|
+
diagnostic reproduced all 180 original result IDs in order without fetching larger pages or
|
|
16
|
+
modifying evidence. This is ranking displacement for those assertions, not missing extraction.
|
|
17
|
+
No private source, artifact or prompt was imported into this repository.
|
|
18
|
+
|
|
19
|
+
## Path order
|
|
20
|
+
|
|
21
|
+
Replace fact-ID depth-first traversal with breadth-first traversal. Adjacency preparation places
|
|
22
|
+
edges closing on the exact target first, then sorts by fact ID. A known direct edge therefore
|
|
23
|
+
appears before unrelated branches consume the first page. All distinct simple paths and parallel
|
|
24
|
+
assertions remain eligible; no global visited-node pruning is introduced. Completed paths are
|
|
25
|
+
ordered by nondecreasing edge count, not business importance or causal confidence.
|
|
26
|
+
|
|
27
|
+
Retain the existing depth, page, candidate-step and cumulative work limits, including counted
|
|
28
|
+
cycle/depth-cut examinations. Graph loading/indexing is still outside the candidate-step budget.
|
|
29
|
+
The FIFO queue allocates at most one parent-linked prefix per examined edge, bounded by 100,001
|
|
30
|
+
including the root. Return exact pending counts, 32 pending-prefix examples and an explicit
|
|
31
|
+
omitted count; retain the existing bounded depth-cut examples. Stateless replay validates page
|
|
32
|
+
boundaries. `simple-evidence-paths-v2` rejects old cursors; the shared HTML engine uses the same
|
|
33
|
+
search. No full-graph completeness or latency guarantee is added.
|
|
34
|
+
|
|
35
|
+
## Impact order
|
|
36
|
+
|
|
37
|
+
Keep the reachable set, extraction, depth semantics and evidence-lane balancing unchanged.
|
|
38
|
+
The `local-relationships-diversity-v2` policy revises the existing weighted-distance/source
|
|
39
|
+
diversity heuristic:
|
|
40
|
+
|
|
41
|
+
- A citation-only match seeds local endpoints before unresolved symbol endpoints. Referencing a
|
|
42
|
+
common library symbol in a changed function must not make all its co-users distance-zero peers.
|
|
43
|
+
- Edges touching a `CodeSymbol` with `no-indexed-definition` cost at least eight, and assertions
|
|
44
|
+
touching such a symbol receive eight additional ordering points. Explicit node/label/native-symbol
|
|
45
|
+
anchor-text matches exempt that node. Missing definitions are not classified as proven libraries;
|
|
46
|
+
omitted repository code can also be unindexed. All those assertions remain retrievable.
|
|
47
|
+
- Allocate early slots within each provenance source to saved local `calls`, their exact cited
|
|
48
|
+
reference proofs, and legacy file-to-symbol consumers matching saved local callable identities.
|
|
49
|
+
Other cross-file references follow before local occurrence detail. Existing product intent,
|
|
50
|
+
queue/data contracts, validation and adapter assertions retain their ordinary category.
|
|
51
|
+
- Within these categories use distance, focus and stable semantic tie keys. Add the per-source
|
|
52
|
+
ordinal to the distance score, then retain the existing evidence-lane balancing among equal
|
|
53
|
+
scores. Distant relationships still pay distance; local variable repetition cannot consume
|
|
54
|
+
all of a file's early slots before its consumer relationship is considered.
|
|
55
|
+
|
|
56
|
+
These are explainable ordering signals, not business rules or authority changes. A file-level
|
|
57
|
+
`consumes` relationship still does not establish invocation; a saved static call does not prove
|
|
58
|
+
runtime execution. Explicit library-symbol queries remain supported. Pagination retains every
|
|
59
|
+
reachable assertion exactly once; old ranking cursors fail with restart instructions.
|
|
60
|
+
|
|
61
|
+
## Acceptance and compatibility
|
|
62
|
+
|
|
63
|
+
The frozen [public protocol](../evaluations/relationship-retrieval/protocol.md) uses three actual
|
|
64
|
+
TypeScript producer/queue/worker/test flows, real SCIP and call extraction, and deterministic
|
|
65
|
+
cited prose. It scores 36 specific calls, callsite references and legacy consumers separately
|
|
66
|
+
from 12-file discovery. The budget remains depth three, three pages of 60, all 540 assertions
|
|
67
|
+
in the denominator. Compare the same immutable saved snapshot and unchanged reachable counts.
|
|
68
|
+
Report standard-library share independently of the production unindexed-symbol heuristic.
|
|
69
|
+
|
|
70
|
+
Also check a 1,500-branch direct-edge case at 1,000 steps, every directed four-node graph against
|
|
71
|
+
an exhaustive path oracle, continuation/replay, incoming/both directions, authority/citation
|
|
72
|
+
preservation, shared viewer parity, explicit library queries and strict extraction/publication.
|
|
73
|
+
|
|
74
|
+
No extractor/assembly identity, semantic cache, persisted encoding, RDF constraints or snapshot
|
|
75
|
+
content changes. Existing 0.7.1 snapshots use the new ordering without hydration or model calls.
|
|
76
|
+
The 0.7.1 streaming/canonical-hash fixes remain intact. This public regression does not close
|
|
77
|
+
private consumer acceptance; TradePilot must retry the original cases with unchanged budgets.
|
package/docs/RELEASING.md
CHANGED
|
@@ -202,14 +202,14 @@ Verify the matching public version in a fresh disposable project after publicati
|
|
|
202
202
|
|
|
203
203
|
```sh
|
|
204
204
|
npm init -y
|
|
205
|
-
npx --yes @weftlet/toolkit@0.7.
|
|
206
|
-
npx --yes @weftlet/toolkit@0.7.
|
|
205
|
+
npx --yes @weftlet/toolkit@0.7.2 init --yes
|
|
206
|
+
npx --yes @weftlet/toolkit@0.7.2 config validate
|
|
207
207
|
```
|
|
208
208
|
|
|
209
209
|
For local installation, use both prepared archives from the same reviewed release:
|
|
210
210
|
|
|
211
211
|
```sh
|
|
212
|
-
npm install --save-dev "/path/to/weftlet/.release/weftlet-core-0.7.
|
|
212
|
+
npm install --save-dev "/path/to/weftlet/.release/weftlet-core-0.7.2.tgz" "/path/to/weftlet/.release/weftlet-toolkit-0.7.2.tgz"
|
|
213
213
|
```
|
|
214
214
|
<!-- weftlet:release:end -->
|
|
215
215
|
|
package/docs/VALIDATION.md
CHANGED
|
@@ -1,5 +1,126 @@
|
|
|
1
1
|
# Validation evidence
|
|
2
2
|
|
|
3
|
+
## 0.7.1 consumer follow-up and bounded retrieval patch, 2026-11-03
|
|
4
|
+
|
|
5
|
+
**Maintainer-reported consumer pass:** the published 0.7.1 toolkit hydrates, strictly validates,
|
|
6
|
+
persists and reloads TradePilot's 561,777 facts / 174,710 nodes. Unchanged repeat preserves the
|
|
7
|
+
snapshot and all 18 semantic artifacts. This closes the reported whole-string capacity blocker
|
|
8
|
+
for that workload; it is not general query-usefulness or official 1.0 acceptance.
|
|
9
|
+
|
|
10
|
+
**Maintainer-reported remaining defect:** a direct connection was absent from a work-limited
|
|
11
|
+
path page, and relevant worker `references`/`consumes` assertions were absent from three 60-fact
|
|
12
|
+
impact pages at depth three. A read-only consumer diagnostic independently reproduced all
|
|
13
|
+
180 query IDs and the 420,837 reachable count. Both assertions exist in that same snapshot,
|
|
14
|
+
are reached in expansion round two, and were ranked at 24,801 and 69,207. This establishes
|
|
15
|
+
ranking displacement for those assertions. No private source or graph was accessed here.
|
|
16
|
+
|
|
17
|
+
**Public patch evidence:** [ADR 041](ADR-041-bounded-relationship-retrieval.md) and the
|
|
18
|
+
[frozen comparison](../evaluations/relationship-retrieval/README.md) record query-only changes.
|
|
19
|
+
On the same strictly validated 15,549-fact public TypeScript snapshot, both policies retain
|
|
20
|
+
5,128 reachable assertions per case and the full 540 returned-assertion denominator. Expected
|
|
21
|
+
call, callsite-reference and legacy-consumer retrieval improves from **0/36 to 36/36**;
|
|
22
|
+
12/12 file discovery is unchanged. TypeScript standard-library references change from
|
|
23
|
+
450/540 to 0/540 on those bounded pages. Library facts remain stored/reachable, and explicit
|
|
24
|
+
library-symbol queries pass. Seven evidence files, including all three semantic artifacts,
|
|
25
|
+
retain their exact byte digests after rescoring. No hydration or model calls occur in comparison.
|
|
26
|
+
|
|
27
|
+
A fresh public extraction/strict-publication test passes with all 36 targets, exact repeated
|
|
28
|
+
page IDs and unchanged evidence bytes. The high-branching query-service regression returns the
|
|
29
|
+
same cited direct edge as impact.scan on page one at depth three, three paths and 1,000 steps,
|
|
30
|
+
with explicit pending/omitted frontier counts. Exhaustive four-node path and shared viewer
|
|
31
|
+
parity checks pass. Extraction/assembly identities, canonical hashing, storage and strict SHACL
|
|
32
|
+
constraints are unchanged. Old query cursors require restart; old snapshots need no refresh.
|
|
33
|
+
|
|
34
|
+
Exact-head release qualification and hosted platform results are recorded on
|
|
35
|
+
[PR 67](https://github.com/jchewitt/weftlet/pull/67); the evidence above records the local focused checks.
|
|
36
|
+
Private fixed-budget retrieval acceptance remains open; the public comparison is not a claim
|
|
37
|
+
about TradePilot's new result positions. Browser interaction and live provider quality retain
|
|
38
|
+
their existing separate validation status.
|
|
39
|
+
|
|
40
|
+
## 0.7.0 large-graph field blocker follow-up, 2026-11-02
|
|
41
|
+
|
|
42
|
+
Status: public capacity qualification and hosted Linux/Windows checks pass; patch release pending.
|
|
43
|
+
Private consumer acceptance remains open.
|
|
44
|
+
[ADR 040](ADR-040-bounded-graph-io.md) records the encoding, storage and strict SHACL boundaries.
|
|
45
|
+
The consumer's reported 561,777-fact failure occurs before SHACL at whole-graph canonical
|
|
46
|
+
string construction. Its prior snapshots remain readable; no private inputs were imported here.
|
|
47
|
+
|
|
48
|
+
Local Linux checks currently establish:
|
|
49
|
+
|
|
50
|
+
- Production build and 38 core tests pass, including an independently checked canonical hash
|
|
51
|
+
larger than V8's actual string ceiling. Existing encoding and persisted-JSON digest semantics
|
|
52
|
+
are retained, including optional fields and Unicode boundaries.
|
|
53
|
+
- 65 focused lifecycle, RDF parity, streaming-storage and release-documentation tests pass.
|
|
54
|
+
The frozen 0.7.0 reference verifies named/union quad sets, strict positive/negative verdicts,
|
|
55
|
+
cross-subject proof checks, SPARQL aggregates and lossless traversal projection. A separate
|
|
56
|
+
100,001-fact test removes the old projection ceiling without truncation.
|
|
57
|
+
- Fresh packed-consumer installation passes setup, preview/cache adoption, traversal hydration
|
|
58
|
+
and reuse, real SCIP, RDF/SPARQL/SHACL, HTML/DOT/SVG assets and MCP.
|
|
59
|
+
- Inventory and license checks pass; all 79 original source import path/SHA pairs are unchanged.
|
|
60
|
+
Architecture passes with 15 advisory findings: two additional complexity advisories in the
|
|
61
|
+
canonical digest visitor and RDF matching function. No baseline, exception or gate changed.
|
|
62
|
+
|
|
63
|
+
The full suite exposed a corrupt-JSON error-class compatibility regression. The streaming
|
|
64
|
+
reader now preserves SyntaxError classification for malformed/truncated input while retaining
|
|
65
|
+
I/O errors as infrastructure failures; cache-adoption CLI and strict parser regressions pass.
|
|
66
|
+
The full local pass before those fixes completed with 977 passes / 8 failures / 1 optional skip.
|
|
67
|
+
All corrupt-artifact cases pass on rerun (44 cache/preview/storage tests plus 3 CLI cases).
|
|
68
|
+
An overlapping local rebuild interrupted a compiled benchmark subprocess; its 6 tests pass after
|
|
69
|
+
the build. Seven sequential CLI launches exceeded the old aggregate 30-second setup-test budget;
|
|
70
|
+
the test now bounds each process to 30 seconds and the sequence to 180 seconds, retaining all
|
|
71
|
+
assertions (3 setup tests pass). A subsequent 29-test RDF/setup run passes. These corrections
|
|
72
|
+
do not change production operation deadlines. At `85361dbb` both hosted runs
|
|
73
|
+
[41532316889](https://github.com/jchewitt/weftlet/actions/runs/41532316889) and
|
|
74
|
+
[41532326444](https://github.com/jchewitt/weftlet/actions/runs/41532326444) pass Linux and Windows.
|
|
75
|
+
Linux passes 38 core + 985 toolkit tests (1 optional ontology integration skipped), architecture,
|
|
76
|
+
inventory, licenses and fresh packed-consumer smoke. Windows passes 38 core + 878 selected tests,
|
|
77
|
+
inventory and licenses. The final local packed-consumer rerun also passes.
|
|
78
|
+
|
|
79
|
+
At `d1498a4`, hosted push run
|
|
80
|
+
[41542970652](https://github.com/jchewitt/weftlet/actions/runs/41542970652) passes both platforms.
|
|
81
|
+
The duplicate PR run
|
|
82
|
+
[41542976891](https://github.com/jchewitt/weftlet/actions/runs/41542976891) passes Linux; Windows
|
|
83
|
+
passes 877 selected tests but times out in the four-command failure-reporting test at its
|
|
84
|
+
30-second aggregate deadline, then encounters cleanup EBUSY with the child still using its cwd.
|
|
85
|
+
The harness now retains each 20-second command limit, allows 100 seconds for the combined
|
|
86
|
+
sequence and fixture setup, and aborts/waits for child closure before cleanup. All four local
|
|
87
|
+
failure-reporting tests pass; this changes no production timeout or assertion.
|
|
88
|
+
At `4bc41fd1`, both subsequent hosted runs
|
|
89
|
+
[41545800490](https://github.com/jchewitt/weftlet/actions/runs/41545800490) and
|
|
90
|
+
[41545807452](https://github.com/jchewitt/weftlet/actions/runs/41545807452) pass Linux and Windows,
|
|
91
|
+
including the corrected test and fresh packed-consumer installation.
|
|
92
|
+
|
|
93
|
+
The optional broader test-source TypeScript check still reports existing diagnostics outside
|
|
94
|
+
the production build. An isolated archive of the base commit has the same 42 diagnostics after
|
|
95
|
+
normalizing checkout paths and ignoring its two absent-build-output errors; this patch adds none.
|
|
96
|
+
|
|
97
|
+
The [public capacity result](benchmarks/large-graph-2026-11-02/result.json) passes the complete
|
|
98
|
+
hydrate → strict validation → persist/read → unchanged repeat → clean comparison lifecycle.
|
|
99
|
+
It uses 1,100 TypeScript modules with 40 functions each, actual SCIP, spec files and 18
|
|
100
|
+
deterministic prose extractions, with zero live model calls. The run produced **554,516 facts /
|
|
101
|
+
143,044 nodes**, a **1,021,806,445-byte snapshot**, and a **5,331,139,680-byte N-Quads export**
|
|
102
|
+
containing 21,522,256 quads. Every exported record was parsed and matched by ID and canonical
|
|
103
|
+
digest. Bounded real SPARQL and the complete record projection pass without dropping facts.
|
|
104
|
+
|
|
105
|
+
All three full strict SHACL passes succeed: cold **2,099,768 ms**, repeat **2,225,093 ms**, and
|
|
106
|
+
clean **2,096,881 ms** (about 35–37 minutes each). Both repeat and clean reuse all 18 artifacts
|
|
107
|
+
with zero further extraction. Snapshot identity on repeat, logical/content digests, exact
|
|
108
|
+
provenance, extractor versions, cache keys, original snapshot bytes and all semantic artifact
|
|
109
|
+
bytes are retained. The complete harness took 8,841,003 ms, including three indexing/validation
|
|
110
|
+
runs, large-file round trips, independent assertions and fixture cleanup. This establishes
|
|
111
|
+
capacity/correctness, **not a 30-minute hydration budget** or private-workload performance.
|
|
112
|
+
Other local checks overlapped part of the run; it is not an isolated comparative benchmark.
|
|
113
|
+
|
|
114
|
+
An independent read of the saved 554,516 facts confirms that 938,267,270 characters of logical
|
|
115
|
+
canonical encoding hash to
|
|
116
|
+
`e6965407b8a8d76ed6d2d7ef8d2daa0297059b5fb327723cd49e73233865c001`
|
|
117
|
+
under both the legacy per-record encoding with exact array separators and `stableJsonDigest`.
|
|
118
|
+
That assertion is now also in the lifecycle harness; its scaled CI fixture passes.
|
|
119
|
+
The long-running capacity process predates the final negative-path shape/error guards and
|
|
120
|
+
harness corrections. Those changes pass separately in the hosted checks above; this is not
|
|
121
|
+
claimed as an exact-final-head large-corpus rerun. Native Windows field acceptance, live provider
|
|
122
|
+
quality and optional openCAESAR runtime remain separate checks.
|
|
123
|
+
|
|
3
124
|
## 0.7.0 acceptance release disposition, 2026-11-02
|
|
4
125
|
|
|
5
126
|
The maintainer authorized publishing the accumulated B1–B5 implementation for live TradePilot
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"workload": "Generated committed public TypeScript, actual SCIP, deterministic prose provider",
|
|
4
|
+
"environment": {
|
|
5
|
+
"os": "Linux x64",
|
|
6
|
+
"node": "24.19.0",
|
|
7
|
+
"pnpm": "10.18.2",
|
|
8
|
+
"nodeHeapLimitMiB": 8192,
|
|
9
|
+
"cpuQuota": 4,
|
|
10
|
+
"cgroupMemoryBytes": 34359738368
|
|
11
|
+
},
|
|
12
|
+
"command": "NODE_OPTIONS=--max-old-space-size=8192 pnpm exec tsx scripts/large-graph/run.ts 1100 40 --require-large",
|
|
13
|
+
"qualificationScope": "The capacity process started before the final negative-path shape/error guards and test-harness corrections. Those changes, and the newly embedded legacy-hash assertion, passed separately in hosted Linux/Windows checks at 4bc41fd1eee4169934fc8e50960bb60b7c8ff617. This is not an exact-final-head large-corpus rerun.",
|
|
14
|
+
"result": {
|
|
15
|
+
"status": "passed",
|
|
16
|
+
"elapsedMs": 8841003,
|
|
17
|
+
"modules": 1100,
|
|
18
|
+
"functions": 40,
|
|
19
|
+
"factCount": 554516,
|
|
20
|
+
"nodeCount": 143044,
|
|
21
|
+
"bytes": 1021806445,
|
|
22
|
+
"logicalCharacters": 938267270,
|
|
23
|
+
"rdfBytes": 5331139680,
|
|
24
|
+
"quadCount": 21522256,
|
|
25
|
+
"contentDigest": "2f75e3dbc16e7ca856d177264046034f40a1560b8a39e5df8b998c653c7b8e81",
|
|
26
|
+
"immutableDigest": "4f48702636a5499e2bfde70f2cca189d2d67836531180685515b4eb3d10ca3f2",
|
|
27
|
+
"providerCalls": 0,
|
|
28
|
+
"deterministicProviderExtractions": 18,
|
|
29
|
+
"repeatReused": 18,
|
|
30
|
+
"cleanReused": 18,
|
|
31
|
+
"extractorVersions": {
|
|
32
|
+
"assembly": "standalone-graph-v12",
|
|
33
|
+
"repository-contract-extractor": "1.2.0",
|
|
34
|
+
"scip-symbol-extractor": "2.1.0",
|
|
35
|
+
"typescript-call-extractor": "1.0.0",
|
|
36
|
+
"repository-node-identity": "1",
|
|
37
|
+
"document-linker": "2.0.0",
|
|
38
|
+
"document-code-binding-extractor": "1.0.0",
|
|
39
|
+
"document-obligation-extractor": "1.0.0",
|
|
40
|
+
"semantic": "1.1.0",
|
|
41
|
+
"scip": "0.4.0",
|
|
42
|
+
"ontology": "rdf-record-v1",
|
|
43
|
+
"repository-file-extractor": "2.0.0"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"legacyCanonicalDigestParity": {
|
|
47
|
+
"status": "passed",
|
|
48
|
+
"facts": 554516,
|
|
49
|
+
"canonicalCharacters": 938267270,
|
|
50
|
+
"digest": "e6965407b8a8d76ed6d2d7ef8d2daa0297059b5fb327723cd49e73233865c001",
|
|
51
|
+
"method": "legacy per-record stableJson plus exact array separators vs stableJsonDigest"
|
|
52
|
+
},
|
|
53
|
+
"completedPhases": [
|
|
54
|
+
{
|
|
55
|
+
"totalElapsedMs": 112233,
|
|
56
|
+
"phase": "validate-identities",
|
|
57
|
+
"status": "completed",
|
|
58
|
+
"factCount": 554516,
|
|
59
|
+
"nodeCount": 143044,
|
|
60
|
+
"elapsedMs": 1118
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"totalElapsedMs": 138845,
|
|
64
|
+
"phase": "build-rdf-evidence",
|
|
65
|
+
"status": "completed",
|
|
66
|
+
"factCount": 554516,
|
|
67
|
+
"nodeCount": 143044,
|
|
68
|
+
"elapsedMs": 1
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"totalElapsedMs": 344926,
|
|
72
|
+
"phase": "build-validation-union",
|
|
73
|
+
"status": "completed",
|
|
74
|
+
"factCount": 554516,
|
|
75
|
+
"elapsedMs": 206080,
|
|
76
|
+
"nodeCount": 143044
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"totalElapsedMs": 2444694,
|
|
80
|
+
"phase": "validate-shacl",
|
|
81
|
+
"status": "completed",
|
|
82
|
+
"factCount": 554516,
|
|
83
|
+
"elapsedMs": 2099768,
|
|
84
|
+
"nodeCount": 143044
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"totalElapsedMs": 3525345,
|
|
88
|
+
"phase": "validate-identities",
|
|
89
|
+
"status": "completed",
|
|
90
|
+
"factCount": 554516,
|
|
91
|
+
"nodeCount": 143044,
|
|
92
|
+
"elapsedMs": 754
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"totalElapsedMs": 3555601,
|
|
96
|
+
"phase": "build-rdf-evidence",
|
|
97
|
+
"status": "completed",
|
|
98
|
+
"factCount": 554516,
|
|
99
|
+
"nodeCount": 143044,
|
|
100
|
+
"elapsedMs": 1
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"totalElapsedMs": 3783233,
|
|
104
|
+
"phase": "build-validation-union",
|
|
105
|
+
"status": "completed",
|
|
106
|
+
"factCount": 554516,
|
|
107
|
+
"elapsedMs": 227631,
|
|
108
|
+
"nodeCount": 143044
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"totalElapsedMs": 6008326,
|
|
112
|
+
"phase": "validate-shacl",
|
|
113
|
+
"status": "completed",
|
|
114
|
+
"factCount": 554516,
|
|
115
|
+
"elapsedMs": 2225093,
|
|
116
|
+
"nodeCount": 143044
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"totalElapsedMs": 6340553,
|
|
120
|
+
"phase": "validate-identities",
|
|
121
|
+
"status": "completed",
|
|
122
|
+
"factCount": 554516,
|
|
123
|
+
"nodeCount": 143044,
|
|
124
|
+
"elapsedMs": 977
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"totalElapsedMs": 6370727,
|
|
128
|
+
"phase": "build-rdf-evidence",
|
|
129
|
+
"status": "completed",
|
|
130
|
+
"factCount": 554516,
|
|
131
|
+
"nodeCount": 143044,
|
|
132
|
+
"elapsedMs": 0
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"totalElapsedMs": 6575068,
|
|
136
|
+
"phase": "build-validation-union",
|
|
137
|
+
"status": "completed",
|
|
138
|
+
"factCount": 554516,
|
|
139
|
+
"elapsedMs": 204340,
|
|
140
|
+
"nodeCount": 143044
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"totalElapsedMs": 8671949,
|
|
144
|
+
"phase": "validate-shacl",
|
|
145
|
+
"status": "completed",
|
|
146
|
+
"factCount": 554516,
|
|
147
|
+
"elapsedMs": 2096881,
|
|
148
|
+
"nodeCount": 143044
|
|
149
|
+
}
|
|
150
|
+
],
|
|
151
|
+
"limitations": [
|
|
152
|
+
"Capacity and correctness regression; not a 30-minute hydration qualification.",
|
|
153
|
+
"Other local checks overlapped part of the run; this is not an isolated comparative performance benchmark.",
|
|
154
|
+
"No private consumer source, native Windows field acceptance, live model-quality evaluation, or optional openCAESAR runtime is claimed."
|
|
155
|
+
]
|
|
156
|
+
}
|