@weftlet/toolkit 0.2.0 → 0.2.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 +4 -3
- package/dist/application/hydrator.js +5 -3
- package/dist/extraction/document.js +1 -6
- package/dist/extraction/repository-nodes.d.ts +7 -0
- package/dist/extraction/repository-nodes.js +20 -0
- package/dist/extraction/semantic.js +19 -3
- package/docs/ADR-015-repository-document-identity.md +57 -0
- package/docs/CONSUMER-TRIAL.md +6 -5
- package/docs/RELEASE-1.0-PLAN.md +221 -0
- package/docs/RELEASING.md +16 -8
- package/docs/ROADMAP.md +10 -2
- package/docs/VALIDATION.md +72 -0
- package/docs/WEFTLET-2.0-PLAN.md +282 -0
- package/docs/extraction-manifest.json +14 -8
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -9,11 +9,12 @@ boundaries. See the [roadmap](docs/ROADMAP.md) and [validation](docs/VALIDATION.
|
|
|
9
9
|
supported capabilities and limitations.
|
|
10
10
|
For a first real-project evaluation, use the [private consumer trial](docs/CONSUMER-TRIAL.md)
|
|
11
11
|
to retain reproducible queries, logs and human-reviewed findings.
|
|
12
|
+
Proposed future capabilities are recorded in the [Weftlet 2.0 product plan](docs/WEFTLET-2.0-PLAN.md).
|
|
12
13
|
|
|
13
14
|
## Set up a project
|
|
14
15
|
|
|
15
16
|
Weftlet uses `@weftlet/toolkit`; its neutral `@weftlet/core` dependency is installed
|
|
16
|
-
automatically. Both packages are available on npm
|
|
17
|
+
automatically. Both packages are available on npm.
|
|
17
18
|
See [release status](docs/RELEASING.md). Existing Tently users should follow
|
|
18
19
|
the [migration guide](docs/MIGRATING-TO-WEFTLET.md).
|
|
19
20
|
|
|
@@ -123,10 +124,10 @@ Each committed JSON record names a scoped binding and exact producer/consumer fi
|
|
|
123
124
|
are cited candidate dependencies; they do not assert an approved policy or observed delivery.
|
|
124
125
|
|
|
125
126
|
Install the locally packed core and toolkit tarballs together. The installed commands are
|
|
126
|
-
`weftlet`, `weftlet-mcp`, and the compatible `context-graph` / `context-graph-mcp` aliases. For example, after preparing a release
|
|
127
|
+
`weftlet`, `weftlet-mcp`, and the compatible `context-graph` / `context-graph-mcp` aliases. For example, after preparing a release, replace `<version>` with the version in `.release/manifest.json`:
|
|
127
128
|
|
|
128
129
|
```sh
|
|
129
|
-
npm install --save-dev /path/to/weftlet/.release/weftlet-core
|
|
130
|
+
npm install --save-dev "/path/to/weftlet/.release/weftlet-core-<version>.tgz" "/path/to/weftlet/.release/weftlet-toolkit-<version>.tgz"
|
|
130
131
|
npx weftlet init
|
|
131
132
|
```
|
|
132
133
|
|
|
@@ -3,6 +3,7 @@ import { contractPatternRoots } from "../repository/glob.js";
|
|
|
3
3
|
import { repositoryFileExtractorIdentity } from '../extraction/static.js';
|
|
4
4
|
import { sha256, stableJson } from "../infrastructure/util.js";
|
|
5
5
|
import { documentLinkerIdentity, linkSemanticDocuments } from "../extraction/document.js";
|
|
6
|
+
import { repositoryNodeIdentityVersion } from '../extraction/repository-nodes.js';
|
|
6
7
|
import { runtimeEvidenceFacts } from "../extraction/runtime-evidence.js";
|
|
7
8
|
import { matchesRepositoryGlob } from "../repository/glob.js";
|
|
8
9
|
import { RdfEvidenceGraph } from "../graph/rdf.js";
|
|
@@ -92,7 +93,7 @@ export class ContextGraphHydrator {
|
|
|
92
93
|
: undefined;
|
|
93
94
|
const configurationDigest = sha256(stableJson(config));
|
|
94
95
|
const scopeDigest = sha256(stableJson(selectedSemanticSources)).slice(0, 12);
|
|
95
|
-
const effectiveSuffix = ['graph-
|
|
96
|
+
const effectiveSuffix = ['graph-v5', `links-${documentLinkerIdentity.version}`, `files-${repositoryFileExtractorIdentity.version}`,
|
|
96
97
|
...(config.routingSources?.length ? [`routes-${routingExtractorIdentity.version}`] : []),
|
|
97
98
|
configurationDigest.slice(0, 16), scopeDigest, baseSuffix, runtimeSuffix].filter(Boolean).join('-');
|
|
98
99
|
const snapshotId = effectiveSuffix ? `${commitSha}-${effectiveSuffix}` : commitSha;
|
|
@@ -176,7 +177,7 @@ export class ContextGraphHydrator {
|
|
|
176
177
|
const tracked = new Set(trackedPaths);
|
|
177
178
|
for (const fact of semanticFacts) {
|
|
178
179
|
for (const node of [fact.subject, fact.object]) {
|
|
179
|
-
const path =
|
|
180
|
+
const path = /^(?:component:file:|document:)(.+)$/.exec(node.id)?.[1];
|
|
180
181
|
if (path && !tracked.has(path))
|
|
181
182
|
diagnostics.push({
|
|
182
183
|
id: sha256(stableJson({ fact: fact.id, missing: path })),
|
|
@@ -235,7 +236,8 @@ export class ContextGraphHydrator {
|
|
|
235
236
|
scope: selectedSemanticSources,
|
|
236
237
|
ontologyVersion: config.semantic.ontologyVersion,
|
|
237
238
|
extractorVersions: {
|
|
238
|
-
assembly: 'standalone-graph-
|
|
239
|
+
assembly: 'standalone-graph-v5',
|
|
240
|
+
'repository-node-identity': String(repositoryNodeIdentityVersion),
|
|
239
241
|
[documentLinkerIdentity.id]: documentLinkerIdentity.version,
|
|
240
242
|
...(config.routingSources?.length ? { [routingExtractorIdentity.id]: routingExtractorIdentity.version } : {}),
|
|
241
243
|
semantic: config.semantic.extractorVersion,
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import { sha256, stableJson } from '../infrastructure/util.js';
|
|
2
2
|
import { documentReferences, resolveDocumentReference } from './document-references.js';
|
|
3
|
+
import { repositoryFileNode as fileNode } from './repository-nodes.js';
|
|
3
4
|
export const documentLinkerIdentity = { id: 'document-linker', version: '2.0.0' };
|
|
4
|
-
function fileNode(path) {
|
|
5
|
-
if (/\.(?:md|mdx|txt)$/i.test(path))
|
|
6
|
-
return { id: `document:${path}`, kind: 'Document', label: path };
|
|
7
|
-
return { id: `component:file:${path}`, label: path,
|
|
8
|
-
kind: /\.(spec|test)\.[^.]+$/i.test(path) ? 'Evidence' : 'Component' };
|
|
9
|
-
}
|
|
10
5
|
export function linkSemanticDocuments(context, hydrated, trackedPaths, approvedSourcePaths = []) {
|
|
11
6
|
const facts = new Map();
|
|
12
7
|
const diagnostics = new Map();
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GraphNode } from '@weftlet/core';
|
|
2
|
+
/** Internal cache contract: changing this policy must also change snapshot assembly identity. */
|
|
3
|
+
export declare const repositoryNodeIdentityVersion = 1;
|
|
4
|
+
/** Physical file identity; this does not establish existence, intent, ownership or approval. */
|
|
5
|
+
export declare function repositoryFileNode(path: string): GraphNode;
|
|
6
|
+
/** Normalize only reserved document/file identities, never inferred business concept IDs. */
|
|
7
|
+
export declare function canonicalizeRepositoryDocumentNode(node: GraphNode): GraphNode;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Internal cache contract: changing this policy must also change snapshot assembly identity. */
|
|
2
|
+
export const repositoryNodeIdentityVersion = 1;
|
|
3
|
+
function isDocumentPath(path) {
|
|
4
|
+
return /\.(?:md|mdx|txt)$/i.test(path);
|
|
5
|
+
}
|
|
6
|
+
/** Physical file identity; this does not establish existence, intent, ownership or approval. */
|
|
7
|
+
export function repositoryFileNode(path) {
|
|
8
|
+
if (isDocumentPath(path))
|
|
9
|
+
return { id: `document:${path}`, kind: 'Document', label: path };
|
|
10
|
+
return { id: `component:file:${path}`, label: path,
|
|
11
|
+
kind: /\.(spec|test)\.[^.]+$/i.test(path) ? 'Evidence' : 'Component' };
|
|
12
|
+
}
|
|
13
|
+
/** Normalize only reserved document/file identities, never inferred business concept IDs. */
|
|
14
|
+
export function canonicalizeRepositoryDocumentNode(node) {
|
|
15
|
+
const match = /^(?:component:file:|document:)(.+)$/.exec(node.id);
|
|
16
|
+
if (!match || !isDocumentPath(match[1]))
|
|
17
|
+
return node;
|
|
18
|
+
const canonical = repositoryFileNode(match[1]);
|
|
19
|
+
return { ...node, id: canonical.id, kind: canonical.kind };
|
|
20
|
+
}
|
|
@@ -8,7 +8,22 @@ import { resolveCodexInvocation } from './codex-command.js';
|
|
|
8
8
|
import { runSemanticProcess, SemanticProviderError } from "./semantic-process.js";
|
|
9
9
|
export { SemanticProviderError } from "./semantic-process.js";
|
|
10
10
|
import { sha256, stableJson } from "../infrastructure/util.js";
|
|
11
|
+
import { canonicalizeRepositoryDocumentNode, repositoryNodeIdentityVersion } from './repository-nodes.js';
|
|
11
12
|
import { assertSemanticCitation, numberedSemanticSource, semanticCitationSchema, } from "./semantic-citations.js";
|
|
13
|
+
function canonicalizeRepositoryDocuments(output) {
|
|
14
|
+
const ids = new Map();
|
|
15
|
+
const assertions = output.assertions.map((assertion) => {
|
|
16
|
+
const subject = canonicalizeRepositoryDocumentNode(assertion.subject);
|
|
17
|
+
const object = canonicalizeRepositoryDocumentNode(assertion.object);
|
|
18
|
+
ids.set(assertion.subject.id, subject.id);
|
|
19
|
+
ids.set(assertion.object.id, object.id);
|
|
20
|
+
return { ...assertion, subject, object };
|
|
21
|
+
});
|
|
22
|
+
return { ...output, assertions, diagnostics: output.diagnostics?.map((diagnostic) => ({
|
|
23
|
+
...diagnostic,
|
|
24
|
+
relatedNodeIds: diagnostic.relatedNodeIds.map((id) => ids.get(id) ?? id),
|
|
25
|
+
})) };
|
|
26
|
+
}
|
|
12
27
|
function omlEscape(value) {
|
|
13
28
|
return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\r?\n/g, '\\n');
|
|
14
29
|
}
|
|
@@ -213,7 +228,7 @@ export class CodexCliSemanticExtractor {
|
|
|
213
228
|
this.config = config;
|
|
214
229
|
this.runner = runner;
|
|
215
230
|
this.loginProbe = loginProbe;
|
|
216
|
-
this.identity = `codex-cli:${config.model}:${config.reasoningEffort}:${config.promptVersion}:contract-
|
|
231
|
+
this.identity = `codex-cli:${config.model}:${config.reasoningEffort}:${config.promptVersion}:contract-v3`;
|
|
217
232
|
}
|
|
218
233
|
async extract(source, context, options = {}) {
|
|
219
234
|
options.signal?.throwIfAborted();
|
|
@@ -235,7 +250,7 @@ export class CodexCliSemanticExtractor {
|
|
|
235
250
|
'Use neutral graph kinds and the allowed precise predicates. Never guess a missing mapping.',
|
|
236
251
|
'Use product-wide canonical IDs derived from durable concepts, not IDs scoped to this file.',
|
|
237
252
|
'Reuse capability, policy, workflow, contract, and component IDs that another source would use for the same concept.',
|
|
238
|
-
'
|
|
253
|
+
'For a repository document path ending in .md, .mdx or .txt, use document:<path> with kind Document. For other repository files use component:file:<path>; test/spec files have kind Evidence, other files Component. Use exact repository-relative paths; keep business concepts in their own IDs instead of assigning their kind to a file.',
|
|
239
254
|
'Capture why a rule exists, its decision authority, and cross-domain dependencies when the source explicitly states them.',
|
|
240
255
|
'Every assertion must cite inclusive 1-based source line numbers and carry calibrated confidence.',
|
|
241
256
|
`Source lines are explicitly prefixed N| below. Cite those original-source numbers, not prompt lines or visual wraps; valid lines are 1-${lineCount}.`,
|
|
@@ -330,6 +345,7 @@ export class SemanticHydrator {
|
|
|
330
345
|
failOnUnresolved: this.config.failOnUnresolved,
|
|
331
346
|
forceRevision,
|
|
332
347
|
diagnosticContractVersion: 3,
|
|
348
|
+
repositoryNodeIdentityVersion,
|
|
333
349
|
};
|
|
334
350
|
const key = sha256(stableJson(keyInput));
|
|
335
351
|
const existing = await this.store.read(key);
|
|
@@ -340,7 +356,7 @@ export class SemanticHydrator {
|
|
|
340
356
|
if (typeof extraction.rawModelOutput !== 'string' || Buffer.byteLength(extraction.rawModelOutput) > 2 * 1024 * 1024) {
|
|
341
357
|
throw new SemanticProviderError('invalid-output', 'Invalid or oversized raw semantic output');
|
|
342
358
|
}
|
|
343
|
-
const output = extraction.parsed;
|
|
359
|
+
const output = canonicalizeRepositoryDocuments(extraction.parsed);
|
|
344
360
|
const lineCount = source.content.split('\n').length;
|
|
345
361
|
const facts = output.assertions.map((assertion, index) => {
|
|
346
362
|
assertSemanticCitation(assertion.citation, source.path, lineCount, `assertion[${index}]`);
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# ADR-015: Canonical repository document identities
|
|
2
|
+
|
|
3
|
+
Status: accepted for the document identity patch.
|
|
4
|
+
|
|
5
|
+
## Problem
|
|
6
|
+
|
|
7
|
+
The 0.2.0 semantic prompt requested `component:file:<path>` for every repository path,
|
|
8
|
+
while deterministic Markdown linking used `document:<path>` for document files.
|
|
9
|
+
Independently valid model assertions could assign Component and Document to the same
|
|
10
|
+
file ID. Combining those facts correctly failed the single-kind SHACL constraint.
|
|
11
|
+
This is an extraction identity defect, not evidence of contradictory product intent.
|
|
12
|
+
|
|
13
|
+
## Decision
|
|
14
|
+
|
|
15
|
+
Physical repository documents ending in `.md`, `.mdx` or `.txt` use
|
|
16
|
+
`document:<repository-relative-path>` with kind Document. The semantic hydration
|
|
17
|
+
boundary canonicalizes both reserved prefixes (`component:file:` and `document:`)
|
|
18
|
+
for those extensions, using the same file-node policy as deterministic document links.
|
|
19
|
+
This applies to Codex and module providers, before fact IDs, OML and artifact hashes
|
|
20
|
+
are computed. Diagnostic references are remapped with the assertions.
|
|
21
|
+
|
|
22
|
+
Paths retain their exact spelling and case; no basename matching, existence guess,
|
|
23
|
+
ownership inference or concept merging is performed. Distinct business concepts such
|
|
24
|
+
as `contract:retention` remain separate from the document that describes them.
|
|
25
|
+
Every assertion, predicate, citation, confidence and label is retained. Raw provider
|
|
26
|
+
output remains unchanged for inspection. Normalizing physical identity never approves
|
|
27
|
+
an assertion or establishes that a referenced file exists. Snapshot assembly continues
|
|
28
|
+
to mark semantic assertions inferred/unreviewed, independently of source approval.
|
|
29
|
+
|
|
30
|
+
The RDF identity and SHACL shape stay unchanged. Other conflicting kinds still fail
|
|
31
|
+
validation; this policy does not hide genuine conflicts or remove assertions.
|
|
32
|
+
|
|
33
|
+
## Artifact and snapshot migration
|
|
34
|
+
|
|
35
|
+
An implementation-owned `repositoryNodeIdentityVersion: 1` participates in every
|
|
36
|
+
semantic artifact key, including custom providers with unchanged user configuration.
|
|
37
|
+
Codex's prompt contract advances to v3. Assembly advances to `graph-v5`, records the
|
|
38
|
+
policy version in the manifest and uses a different immutable snapshot ID even for
|
|
39
|
+
the same commit/configuration. Historical snapshots and artifacts remain untouched
|
|
40
|
+
and queryable; they are not relabeled as newly validated evidence.
|
|
41
|
+
|
|
42
|
+
The first semantic refresh after upgrading requires extraction under the new contract.
|
|
43
|
+
Unchanged subsequent refreshes reuse the new artifacts. Do not delete the old cache or
|
|
44
|
+
force a revision as an upgrade workaround. Provider cost for that first refresh remains
|
|
45
|
+
subject to the consumer's configured budgets and authorization.
|
|
46
|
+
|
|
47
|
+
## Validation and limits
|
|
48
|
+
|
|
49
|
+
The public regression uses two committed documents referencing the same implementation
|
|
50
|
+
document, a deterministic module provider returning the conflicting legacy identities,
|
|
51
|
+
real TypeScript indexing, deterministic links and RDF/SHACL. It checks preserved facts,
|
|
52
|
+
citations and review authority, old-cache isolation and repeat reuse. An unnormalized
|
|
53
|
+
negative control retains the SHACL failure. This is provider-independent deterministic
|
|
54
|
+
coverage, not a claim that a private consumer's full extraction has passed.
|
|
55
|
+
|
|
56
|
+
Operational-config cache reuse, broad identity diagnostics and full-graph SHACL latency
|
|
57
|
+
remain separate work in the [1.0 plan](RELEASE-1.0-PLAN.md).
|
package/docs/CONSUMER-TRIAL.md
CHANGED
|
@@ -6,11 +6,12 @@ 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.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
same reviewed commit; see [release preparation](RELEASING.md).
|
|
13
|
-
from the package version, which does not change with every
|
|
9
|
+
Use a pinned, reviewed toolkit version and its matching documentation. npm `0.2.0` includes
|
|
10
|
+
explicit routing declarations, committed TypeScript source projects, document linkage and
|
|
11
|
+
the improved impact ranking. To evaluate a newer, unreleased commit, use both locally prepared
|
|
12
|
+
package archives from that same reviewed commit; see [release preparation](RELEASING.md).
|
|
13
|
+
Record the commit separately from the package version, which does not change with every
|
|
14
|
+
development commit.
|
|
14
15
|
|
|
15
16
|
## Choose tasks before querying
|
|
16
17
|
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# Consumer hardening and the 1.0 release plan
|
|
2
|
+
|
|
3
|
+
Status: maintainer-directed work, recorded on 2026-10-26 from a consumer integration report.
|
|
4
|
+
The starting release is `@weftlet/toolkit@0.2.0`. **Ship a patch for T01 first.** The remaining
|
|
5
|
+
items improve setup, reuse, diagnostics and document coverage; they do not block that patch
|
|
6
|
+
or justify expanding the consumer's migration. An official 1.0 follows this work and genuine
|
|
7
|
+
consumer acceptance, with its exact release scope reviewed when the evidence is available.
|
|
8
|
+
|
|
9
|
+
This is the near-term release task list. The [Weftlet 2.0 product plan](WEFTLET-2.0-PLAN.md)
|
|
10
|
+
remains a separate future direction for generation, approvals, a companion website and hosted
|
|
11
|
+
AI. None of those platform features is a dependency of the fixes here.
|
|
12
|
+
|
|
13
|
+
## Reported evidence and boundaries
|
|
14
|
+
|
|
15
|
+
The consumer reported a cold extraction in which two source documents referred to the same
|
|
16
|
+
repository Markdown document. Semantic assertions gave that one repository-path identity
|
|
17
|
+
different node kinds, `Component` and `Document`. An isolated, unchanged two-fact graph failed
|
|
18
|
+
the public RDF validator's single-kind constraint. The references describe the same document;
|
|
19
|
+
this is an extraction identity conflict, not evidence of conflicting product intent.
|
|
20
|
+
|
|
21
|
+
The consumer stopped its larger hydration after independently proving that failure. No full-run
|
|
22
|
+
SHACL result or published snapshot is claimed. Several minutes spent in the larger validation
|
|
23
|
+
phase is a separate observation; the two-fact reproduction does not diagnose its latency.
|
|
24
|
+
Fresh-install checks and the package/adapter boundary were reported as successful.
|
|
25
|
+
|
|
26
|
+
Private source paths, assertions, artifacts and application data remain with the consumer.
|
|
27
|
+
Upstream work uses public-safe reproductions and preserves the original application's existing
|
|
28
|
+
integration. Consumer acceptance is reported separately from upstream deterministic tests.
|
|
29
|
+
|
|
30
|
+
## Task list and order
|
|
31
|
+
|
|
32
|
+
| ID | Task | Priority/status | Dependencies and release boundary |
|
|
33
|
+
| --- | --- | --- | --- |
|
|
34
|
+
| **T01** | Coherent repository-document identity and kind | **Adoption blocker; patch work in progress** | First isolated patch; preserve SHACL and all assertions |
|
|
35
|
+
| **T02** | No-model hydration/setup preview | Planned usability work | Shares selection/cache identity with hydration; extend it with T07 traversal coverage |
|
|
36
|
+
| **T03** | Artifact reuse across operational configuration changes | Planned efficiency work | Preserve T01's semantic identity separation; keep snapshot/config identity distinct from reusable artifact identity |
|
|
37
|
+
| **T04** | Actionable, privacy-safe timeout diagnostics | Planned diagnostics work | Use stable source identifiers and run progress; document recovery with T02/T03 |
|
|
38
|
+
| **T05** | Early identity checks and validation progress/profiling | Planned correctness/observability work | Build on T01; profile latency independently before selecting optimizations |
|
|
39
|
+
| **T06** | Packaged release-documentation consistency | Planned release tooling work | Check the actual release archives; does not require a runtime architecture change |
|
|
40
|
+
| **T07** | Coverage-aware traversal from SOT/roadmap entry points | Planned bounded feature work | Use canonical identity from T01, preview from T02 and incremental reuse from T03; split selection/classification/extraction changes |
|
|
41
|
+
|
|
42
|
+
T02–T07 can ship in independently useful increments after the blocker patch. Do not combine
|
|
43
|
+
all seven into one diff or delay T01 for the optional platform work. Normal required release
|
|
44
|
+
checks still apply to every shipped increment.
|
|
45
|
+
|
|
46
|
+
## T01 — Resolve repository-document identity conflicts
|
|
47
|
+
|
|
48
|
+
Define and enforce a coherent ID/kind policy for repository document references across semantic
|
|
49
|
+
and deterministic extraction. A prompt instruction alone is insufficient when separately valid
|
|
50
|
+
model outputs can conflict after assembly. Preserve both source assertions and their citations,
|
|
51
|
+
source authority and assertion-review state. Retain single-kind SHACL validation; do not discard
|
|
52
|
+
an assertion or relax the shape to conceal the conflict.
|
|
53
|
+
|
|
54
|
+
Acceptance:
|
|
55
|
+
|
|
56
|
+
- A public regression has two committed documents referring to the same Markdown document,
|
|
57
|
+
with one provider assertion labeling it `Component` and the other `Document` under the same
|
|
58
|
+
repository-path identity. Both assertions survive under the coherent policy and align with
|
|
59
|
+
deterministic document links; the assembled graph passes RDF/SHACL validation.
|
|
60
|
+
- Verify subject and object references, preserved provenance and unreviewed/inferred assertion
|
|
61
|
+
authority. Other incompatible identities remain diagnosable rather than silently merged away.
|
|
62
|
+
- Version the relevant extractor/prompt/cache identity so incompatible old artifacts cannot
|
|
63
|
+
satisfy a fresh extraction. Test a fresh build, subsequent artifact reuse and unchanged
|
|
64
|
+
snapshot identity/content on repeat input. Keep historical saved snapshots readable and unchanged.
|
|
65
|
+
- Run the normal deterministic/publication gate and a fresh installed-package smoke. Publish
|
|
66
|
+
the patch, then request a genuine consumer re-run against the recorded inputs; do not infer
|
|
67
|
+
consumer acceptance from the upstream fixture.
|
|
68
|
+
|
|
69
|
+
Completion evidence will link the implementation PR, tested source commit, validation record,
|
|
70
|
+
published patch and subsequent consumer result. No patch publication or consumer pass is claimed
|
|
71
|
+
by this task list yet.
|
|
72
|
+
|
|
73
|
+
## T02 — Preview scope and work without calling a model
|
|
74
|
+
|
|
75
|
+
Add a no-model preview command, tentatively `hydrate --plan`; the CLI spelling is not implemented
|
|
76
|
+
by this plan. Use the same source-selection and identity logic as hydration to avoid preview drift.
|
|
77
|
+
Report selected sources and sizes, inclusion reasons, role/approval classification, expected
|
|
78
|
+
artifact hits/misses and extraction count, plus document/byte limits and any violations.
|
|
79
|
+
|
|
80
|
+
Acceptance:
|
|
81
|
+
|
|
82
|
+
- Preview calls no provider and performs no extraction, indexing, snapshot publication or active
|
|
83
|
+
checkout mutation. Distinguish unavailable/corrupt cache entries from known reusable artifacts.
|
|
84
|
+
- Identify the commit, configuration and selection assumptions; a later changed input can
|
|
85
|
+
invalidate the estimate. Report uncertainty explicitly instead of promising a cache hit.
|
|
86
|
+
- Test empty/no-document scope, cold and warm artifacts, missing sources, budget violations and
|
|
87
|
+
semantic-identity changes. Provide machine-readable output and a concise human summary.
|
|
88
|
+
- With T07, show complete inclusion/exclusion reasons, unresolved links, ownership/classification
|
|
89
|
+
gaps, coverage and budget effects before any model call. Do not silently trim the selection.
|
|
90
|
+
|
|
91
|
+
## T03 — Reuse valid artifacts after operational changes
|
|
92
|
+
|
|
93
|
+
The consumer reported that changing only a timeout selected a different cache profile and made
|
|
94
|
+
completed extractions unavailable for reuse. Investigate both storage-location selection and
|
|
95
|
+
artifact key construction. Separate operational controls from semantic-output identity, while
|
|
96
|
+
retaining complete configuration metadata on snapshots and queries.
|
|
97
|
+
|
|
98
|
+
Acceptance:
|
|
99
|
+
|
|
100
|
+
- Changing supported operational settings such as timeout does not hide or invalidate an
|
|
101
|
+
otherwise reusable extraction. Explicitly classify each setting rather than assuming all
|
|
102
|
+
non-source changes are harmless; retain provider-specific extension behavior.
|
|
103
|
+
- Changing source bytes/identity, model or relevant model settings, prompt/schema/extractor/
|
|
104
|
+
ontology identity, or other output-affecting policy invalidates reuse as required. T01's new
|
|
105
|
+
identity must not accidentally reuse old conflicting artifacts.
|
|
106
|
+
- Preserve force-extraction semantics, concurrent-writer safety, isolation between consumers,
|
|
107
|
+
credentials and private cache contents. Record reuse and reasons for a miss without secrets.
|
|
108
|
+
- Test interrupted work followed by a changed timeout: valid completed artifacts are reused,
|
|
109
|
+
incomplete/invalid ones are re-extracted, and source provenance remains correct.
|
|
110
|
+
|
|
111
|
+
## T04 — Explain timeouts and recovery
|
|
112
|
+
|
|
113
|
+
Report a privacy-safe source identifier, phase, elapsed time, configured limit and completed/
|
|
114
|
+
remaining counts when extraction times out. Explain which completed artifacts can be retained
|
|
115
|
+
and how to inspect the plan or adjust a bound before retrying. The documented two-minute default
|
|
116
|
+
was insufficient for the reported workload; that observation alone does not select a new default.
|
|
117
|
+
|
|
118
|
+
Acceptance:
|
|
119
|
+
|
|
120
|
+
- Use a stable opaque identifier by default, with an explicit local mapping or opt-in detail for
|
|
121
|
+
identifying the source. Avoid leaking source text, full prompts, credentials or provider stderr.
|
|
122
|
+
- Distinguish extraction timeout, cancellation, provider failure and infrastructure problems.
|
|
123
|
+
Preserve completed artifacts and the last valid published snapshot.
|
|
124
|
+
- Test timeout/cancellation during a multi-source run, accurate progress counts, safe recovery
|
|
125
|
+
instructions and secret-free logs. MCP protocol stdout remains clean.
|
|
126
|
+
|
|
127
|
+
## T05 — Detect inexpensive conflicts early and explain validation work
|
|
128
|
+
|
|
129
|
+
Add inexpensive graph-assembly checks for incompatible identities before expensive validation.
|
|
130
|
+
Keep the full conformance requirement. Separately instrument and profile large RDF/SHACL
|
|
131
|
+
validation to determine where time is spent before choosing optimizations.
|
|
132
|
+
|
|
133
|
+
Acceptance:
|
|
134
|
+
|
|
135
|
+
- Early errors identify the conflicting identity/kinds and relevant evidence using the configured
|
|
136
|
+
privacy policy. Preserve all underlying assertions for diagnosis; early checks are not a
|
|
137
|
+
substitute for RDF/SHACL validation.
|
|
138
|
+
- Report elapsed time and honest phase/heartbeat progress for long validation. Do not display a
|
|
139
|
+
fabricated completion percentage when the validator exposes no meaningful denominator.
|
|
140
|
+
- Record reproducible public-fixture sizes, fact/node counts, runtime versions, wall time and
|
|
141
|
+
resource observations. Separate measured bottlenecks from hypotheses.
|
|
142
|
+
- Any optimized validation/projection path has equivalence tests, including negative cases;
|
|
143
|
+
failure must preserve the prior snapshot. Keep model-independent profiling separate from live
|
|
144
|
+
extraction performance and from the reported two-fact correctness defect.
|
|
145
|
+
|
|
146
|
+
## T06 — Keep packaged documentation consistent with the release
|
|
147
|
+
|
|
148
|
+
The consumer installed 0.2.0 while its packaged README still named 0.1.2 and some archive examples
|
|
149
|
+
used 0.1.1. Source documentation has since been updated, but immutable published archives retain
|
|
150
|
+
their original text. Add a repeatable release-documentation check rather than relying on a
|
|
151
|
+
post-publication source edit.
|
|
152
|
+
|
|
153
|
+
Acceptance:
|
|
154
|
+
|
|
155
|
+
- Distinguish current setup/version statements and executable installation examples from valid
|
|
156
|
+
historical release evidence. Do not rewrite historical versions indiscriminately.
|
|
157
|
+
- Validate current instructions against the actual prepared core/toolkit versions and tarball
|
|
158
|
+
contents before publication. Test both mismatches and intentionally historical references.
|
|
159
|
+
- Define how versioning updates or generates current-release documentation so normal Changesets
|
|
160
|
+
bumps cannot silently leave it stale. Verify installation examples from fresh packed output.
|
|
161
|
+
|
|
162
|
+
## T07 — Traverse canonical documents with explicit coverage and authority
|
|
163
|
+
|
|
164
|
+
Start from configured SOT and master-roadmap entry points and recursively follow supported
|
|
165
|
+
canonical Markdown links to owner/task documents. Resolve against the chosen repository commit,
|
|
166
|
+
with cycle detection, canonical identities and deduplication. Report missing, ambiguous, outside-
|
|
167
|
+
scope or unsupported links instead of inventing targets or automatically fetching external URLs.
|
|
168
|
+
|
|
169
|
+
Extract requirements, business rules, constraints and cross-feature dependencies while retaining
|
|
170
|
+
source citations and explicit ownership. Reaching a document through a link does not approve it.
|
|
171
|
+
Routine implementation checklists and inferred plans cannot become approved intent through
|
|
172
|
+
traversal. Classify sources/claims explicitly; flag rules without clear SOT ownership and retain
|
|
173
|
+
their inferred/unreviewed state. Validation documents are excluded from product-intent extraction
|
|
174
|
+
by default and retained through a separately classified validation-evidence path.
|
|
175
|
+
|
|
176
|
+
Acceptance:
|
|
177
|
+
|
|
178
|
+
- Split delivery into canonical selection/traversal, role/ownership classification and semantic
|
|
179
|
+
extraction/linkage increments. Keep the existing direct-source configuration usable.
|
|
180
|
+
- The T02 preview exposes entry points, traversed paths, inclusion/exclusion reasons, roles,
|
|
181
|
+
approval/ownership state, unresolved links and exact budget/coverage limits without model calls.
|
|
182
|
+
- Support cycles, shared targets, relative links/fragments and rename/delete cases without
|
|
183
|
+
duplicate extraction. Test cross-feature owner/task references and validation documents,
|
|
184
|
+
including mixed or ambiguous content that needs explicit classification.
|
|
185
|
+
- Compute the necessary selection before scheduling model work. If limits prevent full requested
|
|
186
|
+
coverage, stop or require an explicit narrower scope/budget decision; never silently truncate
|
|
187
|
+
dependencies to fit a document count. Persist incomplete coverage and its reason where relevant.
|
|
188
|
+
- Reuse unchanged extraction artifacts incrementally. Recompute reachability/classification when
|
|
189
|
+
links or configuration change; invalidate affected relationships and preserve removed-source
|
|
190
|
+
history. Partial failures retain completed artifacts and the last valid snapshot.
|
|
191
|
+
- Prove cross-source linkage using extracted public prose and real code relationships, with
|
|
192
|
+
missing links, ambiguous ownership, conflicting claims and false cross-domain matches as
|
|
193
|
+
negative cases. Separate deterministic fixtures from budgeted live-provider evaluation.
|
|
194
|
+
|
|
195
|
+
## Official 1.0 acceptance
|
|
196
|
+
|
|
197
|
+
After T01's patch is available, work through T02–T07 in bounded increments and record implementation
|
|
198
|
+
PRs and validation evidence here or in the linked validation record. Review the exact 1.0 scope
|
|
199
|
+
against completed evidence; any deferral needs an explicit maintainer decision and must remain
|
|
200
|
+
visible rather than being treated as done. The companion website, hosted AI and broader 2.0
|
|
201
|
+
product plan remain separate.
|
|
202
|
+
|
|
203
|
+
Before calling the consumer migration accepted or publishing 1.0:
|
|
204
|
+
|
|
205
|
+
1. Confirm the patched identity policy in a genuine consumer hydration, including completed full
|
|
206
|
+
graph validation and snapshot publication, querying and an unchanged repeat. Keep provider
|
|
207
|
+
details, source scope and remaining gaps explicit; the consumer performs its own application work.
|
|
208
|
+
2. Verify no-model scope preview, budget/coverage reporting, operational cache reuse and recovery
|
|
209
|
+
diagnostics against the implemented task scope. Exercise SOT traversal and authority separation
|
|
210
|
+
with public fixtures and reviewed consumer evidence.
|
|
211
|
+
3. Pass supported-platform build/tests, fresh packed and public-registry installation, real
|
|
212
|
+
TypeScript indexing, RDF/SHACL, CLI/MCP, provenance and source-inventory checks. Check packaged
|
|
213
|
+
release instructions before publishing the exact reviewed archives.
|
|
214
|
+
4. Record independently assessed usefulness and semantic-quality limits. Preserve the distinction
|
|
215
|
+
between deterministic checks, live-provider tests, browser checks and private consumer results.
|
|
216
|
+
Existing untested environments or deferred capabilities remain explicitly labeled.
|
|
217
|
+
5. Review the changelog, compatibility/migration guidance and remaining known issues, then use the
|
|
218
|
+
normal reviewed version PR and trusted-publishing workflow. No 1.0 publication is claimed now.
|
|
219
|
+
|
|
220
|
+
The patch's upstream pass is necessary but does not replace consumer acceptance. Track follow-up
|
|
221
|
+
results without auditing or refactoring the source application's business logic from this repository.
|
package/docs/RELEASING.md
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
# Weftlet npm releases
|
|
2
2
|
|
|
3
|
-
`@weftlet/core@0.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
`@weftlet/core@0.2.0` and `@weftlet/toolkit@0.2.0` are published through GitHub OIDC.
|
|
4
|
+
[Run 40344526047](https://github.com/jchewitt/weftlet/actions/runs/40344526047) completed at
|
|
5
|
+
commit `ffe7f1d81f0421b35220bd7ba5b1555246c7a0e1`, including registry integrity checks,
|
|
6
|
+
package tags and GitHub Releases. The first attempt published core, then toolkit publication
|
|
7
|
+
stopped with Sigstore `TLOG_CREATE_ENTRY_ERROR` HTTP 409. Re-running failed jobs on the same
|
|
8
|
+
workflow restored the prepared archives and acceptance receipt; attempt 2 completed without
|
|
9
|
+
changing versions. See [validation](VALIDATION.md) for the verification record.
|
|
10
|
+
|
|
11
|
+
The first automatic release, 0.1.2, completed in
|
|
12
|
+
[run 39672652013](https://github.com/jchewitt/weftlet/actions/runs/39672652013),
|
|
13
|
+
including package tags and GitHub Releases at commit `3d8d1f38a9e70b38178921cdabf5e8714c417c1c`. The first trusted
|
|
6
14
|
publication passed in [run 39661957651](https://github.com/jchewitt/weftlet/actions/runs/39661957651)
|
|
7
15
|
from commit `720a5f964fe3cb6c438be6d22b4aa8b4ad44de17`, with matching registry archive integrity,
|
|
8
16
|
npm provenance and a fresh public CLI installation. Earlier Weftlet and `@launch-echo` releases
|
|
@@ -26,8 +34,8 @@ preparation route; native Windows has focused CI coverage. See [validation](VALI
|
|
|
26
34
|
**before** npm publication. Do not manually bump manifests or edit the generated plan.
|
|
27
35
|
4. The plan change triggers **Weftlet release**. It validates and prepares both archives, publishes
|
|
28
36
|
core followed by toolkit using npm trusted publishing, then verifies registry integrity.
|
|
29
|
-
5. After both versions are verified, a separate job creates tags such as `@weftlet/core@0.
|
|
30
|
-
and `@weftlet/toolkit@0.
|
|
37
|
+
5. After both versions are verified, a separate job creates tags such as `@weftlet/core@0.2.0`
|
|
38
|
+
and `@weftlet/toolkit@0.2.0`, plus corresponding GitHub Releases, at that exact source commit.
|
|
31
39
|
Existing tags are never moved. The publication job does not commit back to main.
|
|
32
40
|
|
|
33
41
|
The bot uses GitHub's built-in token, not a personal access token. GitHub may require Settings →
|
|
@@ -140,7 +148,7 @@ Package-specific tags identify the exact published source, for example:
|
|
|
140
148
|
|
|
141
149
|
```sh
|
|
142
150
|
git fetch --tags
|
|
143
|
-
git switch --detach '@weftlet/toolkit@0.
|
|
151
|
+
git switch --detach '@weftlet/toolkit@0.2.0'
|
|
144
152
|
```
|
|
145
153
|
|
|
146
154
|
Tags support inspection and reproduction, not mutation of npm history. To roll a consumer back,
|
|
@@ -150,8 +158,8 @@ Verify a new public release in a fresh disposable project, substituting its vers
|
|
|
150
158
|
|
|
151
159
|
```sh
|
|
152
160
|
npm init -y
|
|
153
|
-
npx --yes @weftlet/toolkit@0.
|
|
154
|
-
npx --yes @weftlet/toolkit@0.
|
|
161
|
+
npx --yes @weftlet/toolkit@0.2.0 init --yes
|
|
162
|
+
npx --yes @weftlet/toolkit@0.2.0 config validate
|
|
155
163
|
```
|
|
156
164
|
|
|
157
165
|
Check registry hashes, transitive core resolution and provenance. Deprecating the previous
|
package/docs/ROADMAP.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
Project: `jchewitt/weftlet`. Extraction provenance is recorded in the
|
|
4
4
|
[source inventory](SOURCE-INVENTORY.md).
|
|
5
5
|
|
|
6
|
+
Forward direction is captured in the [Weftlet 2.0 product plan](WEFTLET-2.0-PLAN.md):
|
|
7
|
+
consumer hardening, cited code-derived drafts, scoped approvals and reconciliation, an optional
|
|
8
|
+
review website, source publication, managed AI and guided setup. “2.0” is a planning label;
|
|
9
|
+
the published packages remain 0.2.0. The received consumer findings are tracked in the
|
|
10
|
+
[consumer hardening and 1.0 task list](RELEASE-1.0-PLAN.md): first release the blocking
|
|
11
|
+
document-identity patch, then address setup, reuse, diagnostics and document coverage before
|
|
12
|
+
official 1.0 acceptance. The 2.0 plan distinguishes proposed work from delivered capability.
|
|
13
|
+
|
|
6
14
|
| Milestone | Delivered and checked | Remaining limits |
|
|
7
15
|
| --- | --- | --- |
|
|
8
16
|
| 1. Standalone | Explicit committed inventory, core/toolkit boundary, public examples, build/tests, packed independent consumer and real TypeScript indexing | GitHub exported; both @launch-echo packages published at 0.1.0 and public installation verified |
|
|
@@ -89,8 +97,8 @@ preparation/publication under `@launch-echo`; the maintainer completed the 0.1.0
|
|
|
89
97
|
source-application reintegration remain outside the authorized scope. See [release instructions](RELEASING.md).
|
|
90
98
|
|
|
91
99
|
The maintainer authorized the Weftlet migration on 2026-10-21. Both `@weftlet/core` and
|
|
92
|
-
`@weftlet/toolkit` are published at 0.
|
|
93
|
-
|
|
100
|
+
`@weftlet/toolkit` are published at 0.2.0 through GitHub OIDC; the publication and verification
|
|
101
|
+
record is in [validation](VALIDATION.md). Changesets prepares reviewed version PRs for the fixed package group;
|
|
94
102
|
merging a release plan triggers publication and package-specific tags/GitHub Releases.
|
|
95
103
|
See [ADR 009](ADR-009-release-automation.md) and [release instructions](RELEASING.md).
|
|
96
104
|
Earlier Tently packages remain available and undeprecated.
|
package/docs/VALIDATION.md
CHANGED
|
@@ -8,6 +8,78 @@ The milestone entries below record the original cloud checks. Subsequent
|
|
|
8
8
|
establishes live Codex success on Windows and the full deterministic checks on WSL,
|
|
9
9
|
while identifying remaining native Windows issues.
|
|
10
10
|
|
|
11
|
+
## Repository document identity patch, 2026-10-26
|
|
12
|
+
|
|
13
|
+
The public reproduction confirms the reported 0.2.0 defect: two unchanged semantic
|
|
14
|
+
assertions give one repository document ID different kinds and fail single-kind SHACL.
|
|
15
|
+
[ADR-015](ADR-015-repository-document-identity.md) records the canonical identity policy,
|
|
16
|
+
cache contract and immutable snapshot migration. The consumer follow-ups are tracked in
|
|
17
|
+
the [1.0 plan](RELEASE-1.0-PLAN.md).
|
|
18
|
+
|
|
19
|
+
- Local `pnpm context-graph:publication-check` passed: 227 deterministic tests (1 core,
|
|
20
|
+
226 toolkit), one optional OML skip, 12 advisory architecture findings, inventory,
|
|
21
|
+
licenses and a fresh packed-consumer CLI/npx/MCP, real SCIP and RDF/SHACL smoke.
|
|
22
|
+
- The new public regression uses two committed source documents and a deterministic
|
|
23
|
+
module provider that reproduces the conflicting classifications. Both semantic facts
|
|
24
|
+
retain their citations, confidence and separate source/assertion authority; deterministic
|
|
25
|
+
document links and SPARQL join the canonical document. Real TypeScript indexing and
|
|
26
|
+
SHACL pass. Fresh extraction reports 2 extracted/0 reused; repeat reports 0/2 with
|
|
27
|
+
identical snapshot identity/content digest. Raw provider output is preserved byte for byte.
|
|
28
|
+
- Seeded artifacts using the released 0.2.0 cache-key formula are not reused or overwritten.
|
|
29
|
+
Historical graph-v4 snapshot bytes remain unchanged and readable. Subject references
|
|
30
|
+
normalize too; unrelated concept-kind conflicts still fail SHACL. A missing document
|
|
31
|
+
mentioned in plain prose retains a cited implementation-gap diagnostic.
|
|
32
|
+
- Independent review found and resolved that missing-path diagnostic regression. No blocking
|
|
33
|
+
findings remained. All 79 original imported source paths and source hashes are preserved.
|
|
34
|
+
|
|
35
|
+
These are deterministic upstream checks, not live semantic-quality or private consumer
|
|
36
|
+
acceptance results. The consumer's full hydration was stopped after its isolated reproduction;
|
|
37
|
+
no complete consumer SHACL verdict or published snapshot is claimed. Full-graph validation
|
|
38
|
+
latency remains a separate investigation. Release and hosted-check evidence will be recorded
|
|
39
|
+
after the patch completes the normal publishing workflow.
|
|
40
|
+
|
|
41
|
+
## Weftlet 0.2.0 publication, 2026-10-26
|
|
42
|
+
|
|
43
|
+
The maintainer authorized publication of both packages. [Release PR 4](https://github.com/jchewitt/weftlet/pull/4)
|
|
44
|
+
committed their `0.2.0` versions to main at `ffe7f1d81f0421b35220bd7ba5b1555246c7a0e1`.
|
|
45
|
+
[Trusted-publishing run 40344526047](https://github.com/jchewitt/weftlet/actions/runs/40344526047)
|
|
46
|
+
completed successfully on attempt 2. Both npm `latest` tags resolve to `0.2.0`.
|
|
47
|
+
|
|
48
|
+
- Exact release-PR head `a818ee6312f6970015cea66f55cf6bb2cc62e363` passed the
|
|
49
|
+
[dispatched Ubuntu/Windows checks](https://github.com/jchewitt/weftlet/actions/runs/40042137308).
|
|
50
|
+
Local `pnpm release:prepare` also passed 222 deterministic tests, one optional OML skip,
|
|
51
|
+
12 advisory architecture findings, inventory, licenses and fresh packed-consumer checks.
|
|
52
|
+
The publication workflow repeated preparation at the merged source commit.
|
|
53
|
+
- Independent review checked the generated release plan, versions/changelogs, all 79 original
|
|
54
|
+
source identities and the actual archives. Core contains 11 entries and toolkit 179;
|
|
55
|
+
runtime assets, public examples and licenses/notices are present. No credentials, Git history,
|
|
56
|
+
caches or generated graph snapshots were included. Toolkit's packed core dependency is `^0.2.0`.
|
|
57
|
+
- Both public npm tarballs match the hosted prepared archives byte for byte, and those hashes
|
|
58
|
+
match the locally reviewed archives. Public SLSA provenance subjects match their SHA-512
|
|
59
|
+
digests and reference this exact commit, repository and `publish.yml` workflow. This checks
|
|
60
|
+
provenance content and source identity; it is not a separate cryptographic signature audit.
|
|
61
|
+
- Attempt 1 published and verified core, then toolkit's provenance submission failed with
|
|
62
|
+
`TLOG_CREATE_ENTRY_ERROR` / HTTP 409 for an equivalent transparency-log entry. The core
|
|
63
|
+
acceptance receipt and original archives were retained. Registry state was inspected before
|
|
64
|
+
rerunning only failed jobs in the same run. Attempt 2 completed toolkit publication using the
|
|
65
|
+
unchanged version/archives; core was already present. No provenance setting was disabled.
|
|
66
|
+
- Package tags `@weftlet/core@0.2.0` and `@weftlet/toolkit@0.2.0`, and their public GitHub
|
|
67
|
+
Releases, point to `ffe7f1d81f0421b35220bd7ba5b1555246c7a0e1`. The release records contain
|
|
68
|
+
the verified archive digests. Main's package versions agree with npm.
|
|
69
|
+
- A fresh public-registry consumer on Linux / Node 24.19.0 installed only
|
|
70
|
+
`@weftlet/toolkit@0.2.0` directly (`npm install --ignore-scripts`); core resolved transitively
|
|
71
|
+
to `0.2.0`. Both lockfile registry URLs and integrity hashes match the prepared archives.
|
|
72
|
+
CLI init/configuration and the npm-exec launcher passed. Real TypeScript indexing produced
|
|
73
|
+
15 SCIP facts within 22 total facts; the impact query returned 22 and SHACL conformed.
|
|
74
|
+
Repeat hydration preserved snapshot identity/content. Saved queries preserved snapshot bytes
|
|
75
|
+
and labeled excluded working edits. MCP initialized, discovered `impact.scan`, returned a
|
|
76
|
+
bounded 20-fact response and reported a missing snapshot as an error. No semantic documents
|
|
77
|
+
were selected: both hydrations extracted/reused zero artifacts, so this does not establish
|
|
78
|
+
model extraction or semantic artifact reuse.
|
|
79
|
+
|
|
80
|
+
Live model/authentication quality, browser interaction and genuine fresh-task cloud restoration
|
|
81
|
+
remain separate. No source application was changed and no live model call was made for release.
|
|
82
|
+
|
|
11
83
|
## Development workspace recovery, 2026-10-23
|
|
12
84
|
|
|
13
85
|
The existing Codex development workspace became executable again at repository commit
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# Weftlet 2.0 product plan
|
|
2
|
+
|
|
3
|
+
Status: proposed direction captured at the maintainer's request on 2026-10-26.
|
|
4
|
+
Baseline: published `@weftlet/core` and `@weftlet/toolkit` **0.2.0**, with release evidence in
|
|
5
|
+
[VALIDATION.md](VALIDATION.md). **“2.0” names this product plan; it does not announce npm
|
|
6
|
+
version 2.0.0, a delivery date, or a single large release.** Changes should ship through small,
|
|
7
|
+
reviewed milestones using the existing Changesets workflow.
|
|
8
|
+
|
|
9
|
+
The maintainer supports developing this direction. Detailed schemas, hosting, commercial
|
|
10
|
+
terms and policy choices below remain proposals to resolve before their dependent work.
|
|
11
|
+
This planning increment implements no features, changes no license and provisions no services.
|
|
12
|
+
|
|
13
|
+
## Product outcome
|
|
14
|
+
|
|
15
|
+
Help teams establish and maintain an agreed set of product rules, connect those rules to
|
|
16
|
+
implementation and evidence, and make the relevant rules available to development agents.
|
|
17
|
+
|
|
18
|
+
A team should be able to adopt Weftlet in a poorly documented project, generate a bounded set
|
|
19
|
+
of cited proposals, approve or correct them, publish documentation through its chosen source
|
|
20
|
+
adapter, and see subsequent disagreements between intent, code and other documents.
|
|
21
|
+
An owner can confirm that the current implementation expresses the intended business rules
|
|
22
|
+
and establish an initial documentation baseline through explicit review.
|
|
23
|
+
|
|
24
|
+
The first complete demonstration is: a repository with sparse documentation produces useful
|
|
25
|
+
candidate rules; a reviewer resolves a real disagreement; a documentation PR is merged; an
|
|
26
|
+
agent retrieves the approved, scoped decision through MCP and identifies any remaining code gap.
|
|
27
|
+
|
|
28
|
+
## Current capabilities and gaps
|
|
29
|
+
|
|
30
|
+
| Area | Available in 0.2.0 | Work proposed here |
|
|
31
|
+
| --- | --- | --- |
|
|
32
|
+
| No documentation | TypeScript/code relationships, configured contracts, tests and supplied runtime/routing evidence; semantic sources may be empty | Cited implementation summaries and candidate business rules derived from code |
|
|
33
|
+
| Partial documentation | Selected committed Markdown/text extraction, document links, scoped coverage/gap reports | Cross-source reconciliation, amendment proposals and approval workflow |
|
|
34
|
+
| Evidence authority | Implementation, tests, observations, inferred/draft facts; source approval separated from model assertion review | Durable derivation history and approvals bound to specific claims/content revisions |
|
|
35
|
+
| Agent decisions | Task/checklist text helps querying and source selection | Capture explicit accepted decisions as durable evidence before polished docs exist |
|
|
36
|
+
| Queries | Local saved snapshots, RDF/SPARQL/SHACL, impact scans, continuation, CLI/MCP and draft overlays | Domain-scoped approved rules, exceptions and unresolved conflicts available to agents |
|
|
37
|
+
| Providers | Codex CLI with ChatGPT or explicit API-key mode; tested module extension contract | Tested direct API adapters and an optional Weftlet-managed inference service |
|
|
38
|
+
| Setup and UI | CLI init/config/doctor; bounded HTML/DOT/SVG viewer | Assisted setup and optional hosted review/management application |
|
|
39
|
+
| Source adapters | Repository evidence plus extractor/invariant extension points | Explicit proposal/publication capabilities; GitHub Markdown first, other sources later |
|
|
40
|
+
|
|
41
|
+
Current approval uses document paths/globs. Generated text written under an approved path could
|
|
42
|
+
appear to come from a declared source, even though model-extracted assertions remain unreviewed.
|
|
43
|
+
That is a prerequisite to address before automatic documentation backfill. Current citations
|
|
44
|
+
also do not preserve a complete code → generated document → re-extracted assertion lineage.
|
|
45
|
+
Existing gap reports do not establish completeness of a project's business requirements.
|
|
46
|
+
|
|
47
|
+
## Immediate priority: consumer integration findings
|
|
48
|
+
|
|
49
|
+
The maintainer supplied a consumer integration report on 2026-10-26. The
|
|
50
|
+
[consumer hardening and 1.0 task list](RELEASE-1.0-PLAN.md) records its seven items and acceptance
|
|
51
|
+
criteria. First ship the blocking repository-document identity/kind fix as an isolated patch;
|
|
52
|
+
then work through the other improvements toward an official 1.0. Ordinary reliability fixes
|
|
53
|
+
ship independently of the companion platform described here.
|
|
54
|
+
|
|
55
|
+
| Intake item | Status | Next action |
|
|
56
|
+
| --- | --- | --- |
|
|
57
|
+
| Consumer integration report | Received; task list recorded | Preserve private evidence with the consumer and use public-safe upstream reproductions |
|
|
58
|
+
| Reproduction and severity | Identity/kind defect is the reported adoption blocker | Reproduce two-document conflict upstream; keep validation latency a separate investigation |
|
|
59
|
+
| Fix/release mapping | Blocker patch in progress; remaining tasks planned | Release T01 first, then T02–T07 and genuine consumer acceptance before official 1.0 |
|
|
60
|
+
|
|
61
|
+
For each finding, retain toolkit/version, repository SHA, relevant configuration and scope,
|
|
62
|
+
exact command or MCP request, expected/actual behavior, logs/exit status, snapshot identity,
|
|
63
|
+
dirty-worktree state and provider details where relevant. Distinguish infrastructure failure,
|
|
64
|
+
configuration error, extraction gap, incorrect relationship, policy violation and usability issue.
|
|
65
|
+
Use the [consumer trial](CONSUMER-TRIAL.md) for evidence collection. Private application code,
|
|
66
|
+
logs and product documents stay with the consumer; publish only reviewed reproductions and summaries.
|
|
67
|
+
Consumer findings do not authorize modifying the original source application from this repository.
|
|
68
|
+
|
|
69
|
+
## Proposed product boundaries
|
|
70
|
+
|
|
71
|
+
- **Local toolkit:** indexing, immutable evidence, generation orchestration, local review data,
|
|
72
|
+
queries and MCP continue to work in a repository. Saved queries remain available when a
|
|
73
|
+
model, website or network is unavailable, with explicit version/freshness limitations.
|
|
74
|
+
- **Optional companion service:** project connections, review queues, decisions, publication
|
|
75
|
+
jobs, history, synchronization status and organization management. Customers choose which
|
|
76
|
+
proposals and source excerpts leave their machine; whole-repository upload is not a prerequisite.
|
|
77
|
+
- **Source adapters:** read versioned evidence, prepare a target-specific proposal, and apply it
|
|
78
|
+
through explicitly supported operations. Read access does not imply write capability.
|
|
79
|
+
- **Model providers:** perform bounded extraction/generation under the same structured-output,
|
|
80
|
+
citation, timeout, cancellation and cache contracts. Provider output cannot grant approval.
|
|
81
|
+
|
|
82
|
+
Initially, published documentation on the selected GitHub branch is the authoritative document
|
|
83
|
+
destination. The companion tracks proposals and decisions without silently becoming a competing
|
|
84
|
+
source of truth. Review decisions and their provenance must be exportable in a versioned format
|
|
85
|
+
usable by the toolkit; access to existing evidence cannot depend on continued subscription.
|
|
86
|
+
|
|
87
|
+
## Evidence and decision semantics
|
|
88
|
+
|
|
89
|
+
Define these records before the website depends on them; exact field names remain an ADR task:
|
|
90
|
+
|
|
91
|
+
| Record | Required meaning |
|
|
92
|
+
| --- | --- |
|
|
93
|
+
| Evidence | Source identity, revision/commit, digest, citation span, extraction method and scope |
|
|
94
|
+
| Proposed claim | Stable identity and revision; kind (implementation description or proposed requirement); statement, conditions, domain and exceptions; supporting/contradicting evidence; inference and uncertainty |
|
|
95
|
+
| Derivation | Links from source evidence through model output, generated documents and subsequent extraction; provider/model/prompt identities |
|
|
96
|
+
| Decision | Authorized actor, exact claim/content revision, scope, explicit meaning (accuracy review or adoption as intent), action, timestamp/reason and any superseded decision |
|
|
97
|
+
| Publication | Destination identity/base revision, proposed diff, idempotency identity, PR/write result and published revision |
|
|
98
|
+
| Reconciliation | Applicable rule versions, compared source revisions, potential conflict or implementation gap, and resolution status |
|
|
99
|
+
|
|
100
|
+
Preserve these distinctions throughout extraction, RDF, queries, visualization and write-back:
|
|
101
|
+
|
|
102
|
+
1. Code supports statements about implementation. Tests support what was checked; a test-file
|
|
103
|
+
link does not prove execution. Runtime traces describe observations for their recorded scope.
|
|
104
|
+
Owners can explicitly adopt a proposed rule as intent; model confidence cannot do that.
|
|
105
|
+
2. Source approval and approval of an extracted assertion are separate. Approval is scoped to
|
|
106
|
+
content/claim revisions and authorized actors, not inherited merely from a file location.
|
|
107
|
+
3. Re-ingesting generated text preserves its derivation and does not create independent
|
|
108
|
+
corroboration or automatically increase confidence or authority.
|
|
109
|
+
4. Code changes can stale supporting evidence or implementation summaries. They do not revoke
|
|
110
|
+
or rewrite approved business intent. Superseding intent requires a recorded decision.
|
|
111
|
+
5. Decision status, publication status, graph freshness and implementation compliance are
|
|
112
|
+
separate. Approval, opening a PR, merging it and refreshing a graph are distinct events.
|
|
113
|
+
6. Scope includes domain, conditions, applicable population/version and exceptions. Fourteen-day
|
|
114
|
+
and thirty-day rules may legitimately coexist in different scopes. A newer document does
|
|
115
|
+
not automatically override another domain or a shared contract's owner.
|
|
116
|
+
7. Model-identified conflicts remain potential conflicts until reviewed or deterministically
|
|
117
|
+
established. Only explicit approved deterministic rules become hard CI gates. Missing required
|
|
118
|
+
evidence remains unknown/incomplete, not a pass.
|
|
119
|
+
8. Source text is evidence input. It cannot authorize writes, impersonate an approver or instruct
|
|
120
|
+
the extraction process to alter its permissions. Approval records need a verifiable trust basis.
|
|
121
|
+
|
|
122
|
+
## Delivery sequence
|
|
123
|
+
|
|
124
|
+
M0 consumer hardening is in progress; M1–M7 remain proposed work. Each should be split into
|
|
125
|
+
independently testable PRs and retain saved-snapshot compatibility; schema changes need an
|
|
126
|
+
explicit migration ADR.
|
|
127
|
+
|
|
128
|
+
| Milestone | Depends on | Deliverable and completion evidence |
|
|
129
|
+
| --- | --- | --- |
|
|
130
|
+
| **M0 — Consumer hardening** | Received report; [1.0 task list](RELEASE-1.0-PLAN.md) | Ship the identity/kind blocker patch first, then bounded setup/reuse/diagnostics/coverage improvements and genuine consumer acceptance. Release independently of the companion platform. |
|
|
131
|
+
| **M1 — Claims, lineage and approvals** | M0 triage | Versioned records, durable derivation, revision-scoped approvals, actor trust and explicit legacy handling. Prove generated documents cannot acquire approval through paths or repeated extraction. Verify persistence/RDF/projection/query equivalence and old-snapshot readability. |
|
|
132
|
+
| **M2 — Code-derived drafts** | M1 | Opt-in generation for selected TypeScript modules using existing local Codex first; structured candidate claims and Markdown rendered from those claims. Demonstrate no-doc and partial-doc fixtures with citations, unknown rationale, bounded cost, cache reuse and rename/delete invalidation. |
|
|
133
|
+
| **M3 — Decisions and reconciliation** | M1–M2 | Capture explicit accepted requirements/decisions, compare changes from code and documents, distinguish scope differences from conflicts, and propose focused amendments. Demonstrate a resolved documentation disagreement with a remaining implementation gap. |
|
|
134
|
+
| **M4 — Review website and GitHub publication** | M1–M3 | Thin optional application using local generation, review bundles, scoped approvals, GitHub Markdown PRs and publication/refresh tracking. Demonstrate the entire review → merge → MCP workflow, including stale revisions, human edits and failed/retried publication. |
|
|
135
|
+
| **M5 — Managed inference and usage** | Stable extraction contract; M4 project identity | One tested hosted provider behind a Weftlet project key; usage ledger, budgets, metering and billing/recovery semantics. Preserve local Codex; add direct BYOK adapters individually. Prove isolation, bounded spending, cancellation and retry accounting before a paid pilot. |
|
|
136
|
+
| **M6 — Guided onboarding** | M0 findings; relevant M2/M4/M5 capabilities | Repository discovery, concrete config recommendations, execution-mode choice, upload/cost preview, small initial run and actionable diagnostics. Prove setup in independent supported projects without overwriting existing integration or approving intent. Deterministic setup improvements can ship earlier. |
|
|
137
|
+
| **M7 — Further adapters and offerings** | Evidence from the first complete workflow | Evaluate Figma, Trello, GitHub Projects, Canva or other requested sources one at a time. Document supported reads/writes and validate one adapter before expanding. Consider enterprise/self-hosted service requirements after the hosted pilot. |
|
|
138
|
+
|
|
139
|
+
### M2: bootstrap without manufacturing intent
|
|
140
|
+
|
|
141
|
+
Begin from the existing implementation graph and selected code/tests. Produce cited implementation
|
|
142
|
+
summaries, candidate rules, conditions/exceptions and questions requiring an owner. Render drafts
|
|
143
|
+
from the same structured claims used by the graph, avoiding a mandatory prose-generation then
|
|
144
|
+
prose-re-extraction round trip. Generated descriptions remain useful and queryable before approval,
|
|
145
|
+
with their status visible. Commit-only generation remains the initial reproducible baseline;
|
|
146
|
+
support for working changes must be explicit and retain draft identities.
|
|
147
|
+
|
|
148
|
+
Test dead or conditional code, ambiguous names, unsupported interpretations and behavior that could
|
|
149
|
+
be a bug. Selecting a module does not establish exhaustive coverage of its business rules.
|
|
150
|
+
Changed inputs invalidate affected generated claims; unchanged artifacts can be reused. Keep the
|
|
151
|
+
last valid snapshot/proposals when generation fails. No automatic generation during ordinary queries.
|
|
152
|
+
|
|
153
|
+
### M3: intent created during development
|
|
154
|
+
|
|
155
|
+
Capture concise, explicitly accepted decisions with their source instruction and acceptance event.
|
|
156
|
+
The actual owner instruction can be recorded before a formal document exists; an agent's proposed
|
|
157
|
+
interpretation retains proposal status. Do not treat every prompt, task argument, plan or completed
|
|
158
|
+
code change as approved intent. Review any generated paraphrase independently of the original source.
|
|
159
|
+
|
|
160
|
+
Compare code → documents, documents → code, and documents → documents. Group evidence by domain
|
|
161
|
+
and shared contract, retain contradictions and require explicit resolution of competing claims.
|
|
162
|
+
If a reviewer approves a thirty-day refund policy while code enforces fourteen days, publish the
|
|
163
|
+
decision/documentation and keep the implementation gap open. Confidence or recency alone cannot
|
|
164
|
+
select the authoritative rule. Capture new discoveries separately from frozen evaluation expectations.
|
|
165
|
+
|
|
166
|
+
### M4: review, publication and agent access
|
|
167
|
+
|
|
168
|
+
Review coherent batches by capability/workflow, emphasizing consequential changes and unresolved
|
|
169
|
+
questions. Show the proposed statement, citations/source revisions, existing rules, related code/tests
|
|
170
|
+
and exact destination diff. Offer approve, edit, reject and request-clarification actions. If bulk
|
|
171
|
+
approval is supported, bind it to an explicit immutable set of claims and revisions.
|
|
172
|
+
Make approval meaning explicit: confirming an implementation description's accuracy records that
|
|
173
|
+
review; adopting a requirement as product intent is a separate decision.
|
|
174
|
+
|
|
175
|
+
Use GitHub Markdown and PR creation as the first source-write workflow. Preserve human edits;
|
|
176
|
+
generated sections can refresh under an explicitly configured policy. Check destination revisions
|
|
177
|
+
before applying updates, use idempotent operations, and show conflicts/failures rather than overwrite.
|
|
178
|
+
Opening a PR does not mark documentation published. For the initial integration, publication on the
|
|
179
|
+
configured branch establishes the effective documentation revision; any earlier effective-decision
|
|
180
|
+
policy must be explicitly designed and displayed.
|
|
181
|
+
|
|
182
|
+
MCP should return relevant approved rules and exceptions, their revisions and provenance, unresolved
|
|
183
|
+
conflicts, implementation gaps and synchronization/freshness status. Cloud and local views must agree
|
|
184
|
+
on the underlying facts. Historical or draft evidence remains usable with labels and cannot silently
|
|
185
|
+
satisfy current-diff validation. MCP access improves consistency but does not prove model compliance.
|
|
186
|
+
|
|
187
|
+
Before a shared hosted pilot, validate project/tenant isolation, authenticated review permissions,
|
|
188
|
+
export/deletion/retention behavior, browser interaction and accessibility, and failure recovery.
|
|
189
|
+
Choose the hosting stack and operating budget in a separate design decision.
|
|
190
|
+
|
|
191
|
+
### M5–M6: execution choices and setup experience
|
|
192
|
+
|
|
193
|
+
| Execution choice | Intended behavior |
|
|
194
|
+
| --- | --- |
|
|
195
|
+
| Local Codex | Preserve the existing developer login and configured local CLI. No mandatory API billing or hosted generation. |
|
|
196
|
+
| Customer provider | Add supported direct API adapters with credentials on the chosen execution side. Decide explicitly whether any hosted BYOK mode stores customer secrets. |
|
|
197
|
+
| Weftlet-managed AI | Local tooling sends selected extraction/generation inputs to a hosted API using a project-scoped Weftlet key; the service invokes a supported provider and returns validated, cited results. |
|
|
198
|
+
|
|
199
|
+
Separate project/service authorization from upstream model credentials and business-rule approval.
|
|
200
|
+
Individual ChatGPT/Codex login sessions stay on the developer's machine. Managed inference must use
|
|
201
|
+
provider accounts and terms suitable for the offered service. Never silently fall back from local or
|
|
202
|
+
customer-paid execution to Weftlet-billed inference, or change models during recovery without policy.
|
|
203
|
+
|
|
204
|
+
Show selected source scope, model, estimated usage, budget cap and actual usage. Establish spend
|
|
205
|
+
reservations/limits, cancellation, timeouts, provider failure reporting, retry/idempotency behavior,
|
|
206
|
+
cache accounting and reconciliation of uncertain charges. Distinguish actual provider consumption
|
|
207
|
+
from an estimate; bytes/documents alone do not establish a price. Credentials stay out of configs,
|
|
208
|
+
source control and logs. Live tests require explicit bounded budgets; use deterministic fixtures in CI.
|
|
209
|
+
|
|
210
|
+
Guided setup should inspect the repository first, then suggest roots, documentation scope, TypeScript
|
|
211
|
+
projects/aliases and configuration. AI may help with ambiguous choices. Show concrete proposed
|
|
212
|
+
changes and data that would leave the machine before the first cloud operation. Make the first run
|
|
213
|
+
small, explain missing prerequisites, and preserve an existing setup. Do not advertise unsupported
|
|
214
|
+
languages, frameworks, providers or adapter write operations. The cloud dashboard can then show
|
|
215
|
+
project readiness, coverage, progress, review batches and usage.
|
|
216
|
+
|
|
217
|
+
## Evaluation and release criteria
|
|
218
|
+
|
|
219
|
+
Use public-safe fixtures covering no docs, partial docs, stale tickets, conflicting documentation,
|
|
220
|
+
same wording in different domains, changed requirements and asynchronous consumers. Freeze expected
|
|
221
|
+
findings before measurement, and supplement deterministic checks with separately reported, budgeted
|
|
222
|
+
live-model evaluations and a private real-project pilot.
|
|
223
|
+
|
|
224
|
+
Required cases include invalid/misattributed citations, generated-doc feedback loops, approval under
|
|
225
|
+
an approved directory without content review, stale/forged/unauthorized approvals, changes after
|
|
226
|
+
approval, rename/delete, supersession, conflicting effective scopes, concurrent reviewers, human edits,
|
|
227
|
+
duplicate/retried writes, partial publication failure, offline saved queries and stale MCP clients.
|
|
228
|
+
Hosted work adds tenant isolation, credential handling, cancellation and usage/billing recovery tests.
|
|
229
|
+
|
|
230
|
+
Record source/config/model revisions, expected relationships, retrieval within declared budgets,
|
|
231
|
+
missed consumers, incorrect claims, useful discoveries, review time, edits/rejections, query/generation
|
|
232
|
+
latency, cache reuse and cost. Approval rate alone is not accuracy. Set quality/performance targets
|
|
233
|
+
after obtaining the first baseline; do not invent pass thresholds or imply complete business coverage.
|
|
234
|
+
|
|
235
|
+
Keep deterministic tests, provider-dependent integration tests, browser tests and real-project
|
|
236
|
+
evaluation distinct. Existing browser/live-authentication, larger-graph and genuine fresh-cloud
|
|
237
|
+
restoration gaps remain tracked in [ROADMAP.md](ROADMAP.md) and
|
|
238
|
+
[ENVIRONMENT-VALIDATION.md](ENVIRONMENT-VALIDATION.md); this plan does not close them.
|
|
239
|
+
Only advertise capabilities after their relevant validation. Preserve the current core/toolkit
|
|
240
|
+
boundary, snapshot provenance, licenses and supported local installation through each increment.
|
|
241
|
+
|
|
242
|
+
## Commercial direction and decisions still open
|
|
243
|
+
|
|
244
|
+
The proposed commercial value is ongoing rule review, reconciliation and source synchronization.
|
|
245
|
+
Managed AI reduces setup friction and can be offered separately from the collaboration service.
|
|
246
|
+
|
|
247
|
+
| Offering | Proposed scope |
|
|
248
|
+
| --- | --- |
|
|
249
|
+
| Open-source toolkit | Local extraction/graphs/queries/MCP, portable decision records and file workflows |
|
|
250
|
+
| Hosted companion | Shared review queues, permissions/history, source synchronization, managed PRs and organization administration |
|
|
251
|
+
| Managed inference | Included usage or transparent metered credits with explicit budgets; customers can also choose local tools or supported BYOK |
|
|
252
|
+
| Enterprise options | Evaluate self-hosting, organizational controls, deployment needs and support from customer evidence |
|
|
253
|
+
|
|
254
|
+
No prices, margins, provider commitments or subscription terms are set. Keep workspace/team pricing
|
|
255
|
+
and AI consumption understandable and separable. Validate review burden, recurring usefulness and
|
|
256
|
+
actual model/hosting cost before choosing a pricing model.
|
|
257
|
+
|
|
258
|
+
The recommendation is to retain Apache-2.0 for the toolkit and evaluate the companion's commercial
|
|
259
|
+
license separately. The maintainer is open to future licensing changes, but no change is selected.
|
|
260
|
+
Existing Apache releases retain their granted permissions; future changes require the rights to
|
|
261
|
+
the affected code and preservation of applicable third-party licenses, notices and attribution.
|
|
262
|
+
|
|
263
|
+
Resolve these decisions in small ADRs as their milestones approach:
|
|
264
|
+
|
|
265
|
+
- Claim identity, derivation format, approval authenticity, revocation/supersession and legacy migration.
|
|
266
|
+
- Domain/shared-contract ownership, scope/exception resolution and when approved decisions take effect.
|
|
267
|
+
- Canonical source selection, review-record storage/export and local/cloud synchronization protocol.
|
|
268
|
+
- Companion repository/layout, hosting stack, identity/tenancy, retention and operating budget.
|
|
269
|
+
- First managed provider, direct versus hosted BYOK, supported models and provider commercial terms.
|
|
270
|
+
- Usage units, cache/retry/failed-job charges, budget enforcement, pricing and billing policy.
|
|
271
|
+
- Adapter-specific write capabilities, revision checks and failure recovery.
|
|
272
|
+
- License/product boundaries and any enterprise/self-hosting commitments.
|
|
273
|
+
|
|
274
|
+
## Next handoff
|
|
275
|
+
|
|
276
|
+
1. Resolve and publish the identity/kind blocker patch under M0, then obtain a genuine consumer re-run.
|
|
277
|
+
2. Complete the remaining [1.0 tasks](RELEASE-1.0-PLAN.md) and review acceptance without waiting for the website or managed AI.
|
|
278
|
+
3. Design M1's minimal records and compatibility rules, then implement M2 on bounded public fixtures.
|
|
279
|
+
4. Review real extraction/review results before committing to hosted scope, paid operation or more adapters.
|
|
280
|
+
|
|
281
|
+
Maintain this plan as milestones become concrete, linking implementation PRs, ADRs and validation
|
|
282
|
+
evidence. Keep [ROADMAP.md](ROADMAP.md) as the concise index of delivered capability and remaining work.
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
"destinationPath": "package.json",
|
|
109
109
|
"sourceSha256": "a575dbb2fed8c554b95e8e9b3e03a0c21cab1be7249860bbebc18e046b2ff78d",
|
|
110
110
|
"modified": true,
|
|
111
|
-
"destinationSha256": "
|
|
111
|
+
"destinationSha256": "897f14e438ff7e639f8a906c21fa8e436285180ef05dc6f3c5f73bb94c586ed6"
|
|
112
112
|
},
|
|
113
113
|
{
|
|
114
114
|
"sourcePath": "tools/context-graph/packages/core/LICENSE",
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
"destinationPath": "packages/core/package.json",
|
|
144
144
|
"sourceSha256": "2a29066eb8452f22fafcb06bb035a84dda93c5705dba32aba600a1b7e5aaf19c",
|
|
145
145
|
"modified": true,
|
|
146
|
-
"destinationSha256": "
|
|
146
|
+
"destinationSha256": "96b88f6a7de48d24b24697fb8824bf46f340eec8723aed19b06684d21784c1fb"
|
|
147
147
|
},
|
|
148
148
|
{
|
|
149
149
|
"sourcePath": "tools/context-graph/packages/core/src/core.ts",
|
|
@@ -192,7 +192,7 @@
|
|
|
192
192
|
"destinationPath": "scripts/check-publication.mjs",
|
|
193
193
|
"sourceSha256": "88692c21d34cef2d2e5b20c92ab3ec26cbe6336889dbb7b534c681ded7f466b2",
|
|
194
194
|
"modified": true,
|
|
195
|
-
"destinationSha256": "
|
|
195
|
+
"destinationSha256": "7db15ce23e217d8bc14772ff1287dfff0f81e9f402b3d8a5053d386736e8c078"
|
|
196
196
|
},
|
|
197
197
|
{
|
|
198
198
|
"sourcePath": "tools/context-graph/scripts/generate-third-party-notices.mjs",
|
|
@@ -283,7 +283,7 @@
|
|
|
283
283
|
"destinationPath": "src/extraction/document.ts",
|
|
284
284
|
"sourceSha256": "62a2da37d8cc0637b192b7e70ae7a0dce72244d335da9df0e0ad9b0eb7c4e1f1",
|
|
285
285
|
"modified": true,
|
|
286
|
-
"destinationSha256": "
|
|
286
|
+
"destinationSha256": "0235abe0e2a7a0cb06495027c5dc240cf5b0658faabbdc01d0006fa3b456432c"
|
|
287
287
|
},
|
|
288
288
|
{
|
|
289
289
|
"sourcePath": "tools/context-graph/src/git.test.ts",
|
|
@@ -311,14 +311,14 @@
|
|
|
311
311
|
"destinationPath": "src/application/hydrator.test.ts",
|
|
312
312
|
"sourceSha256": "95f20a526fe69ce3a506ef01da1c20827e09d631a34126e781a07979cc43de07",
|
|
313
313
|
"modified": true,
|
|
314
|
-
"destinationSha256": "
|
|
314
|
+
"destinationSha256": "9baaacb29c863abdb48c96b054a7f430ce18784badfe585ec5ee88a17f21c0bd"
|
|
315
315
|
},
|
|
316
316
|
{
|
|
317
317
|
"sourcePath": "tools/context-graph/src/hydrator.ts",
|
|
318
318
|
"destinationPath": "src/application/hydrator.ts",
|
|
319
319
|
"sourceSha256": "bb41c5b53b26da10274d8b967b99c78ff12b485df16bfc66445252e35c94fb9d",
|
|
320
320
|
"modified": true,
|
|
321
|
-
"destinationSha256": "
|
|
321
|
+
"destinationSha256": "356dcec76c68e76492a56fd17017e1809f8cc30f237bfe540c827ade8337ad88"
|
|
322
322
|
},
|
|
323
323
|
{
|
|
324
324
|
"sourcePath": "tools/context-graph/src/index.ts",
|
|
@@ -444,14 +444,14 @@
|
|
|
444
444
|
"destinationPath": "src/extraction/semantic.test.ts",
|
|
445
445
|
"sourceSha256": "908fe8166dd63f499c28b2c4d20db2e0110b453f66421b2154461287c2d94dac",
|
|
446
446
|
"modified": true,
|
|
447
|
-
"destinationSha256": "
|
|
447
|
+
"destinationSha256": "94c79552f70a891888a6df342fde4cd0ac097344f779f9339c3cb3140a3729a6"
|
|
448
448
|
},
|
|
449
449
|
{
|
|
450
450
|
"sourcePath": "tools/context-graph/src/semantic.ts",
|
|
451
451
|
"destinationPath": "src/extraction/semantic.ts",
|
|
452
452
|
"sourceSha256": "1a41fb3fc5a9508c76be59d1c50b74d70ec96411fcbb7f63b0e098c1813d8473",
|
|
453
453
|
"modified": true,
|
|
454
|
-
"destinationSha256": "
|
|
454
|
+
"destinationSha256": "eb31d432f0cbb7bd6799562a7e514aa04bbbd2df221f4ef916989eeeea3997f0"
|
|
455
455
|
},
|
|
456
456
|
{
|
|
457
457
|
"sourcePath": "tools/context-graph/src/snapshot-checks.test.ts",
|
|
@@ -607,17 +607,20 @@
|
|
|
607
607
|
"docs/ADR-012-impact-ranking.md",
|
|
608
608
|
"docs/ADR-013-relative-module-requests.md",
|
|
609
609
|
"docs/ADR-014-routing-declarations.md",
|
|
610
|
+
"docs/ADR-015-repository-document-identity.md",
|
|
610
611
|
"docs/CLOUD-ENVIRONMENT.md",
|
|
611
612
|
"docs/CONSUMER-TRIAL.md",
|
|
612
613
|
"docs/ENVIRONMENT-VALIDATION.md",
|
|
613
614
|
"docs/IMPACT-EVALUATION.md",
|
|
614
615
|
"docs/MIGRATING-TO-WEFTLET.md",
|
|
615
616
|
"docs/PROVIDERS.md",
|
|
617
|
+
"docs/RELEASE-1.0-PLAN.md",
|
|
616
618
|
"docs/RELEASING.md",
|
|
617
619
|
"docs/ROADMAP.md",
|
|
618
620
|
"docs/SOURCE-INVENTORY.md",
|
|
619
621
|
"docs/VALIDATION.md",
|
|
620
622
|
"docs/VIEWER.md",
|
|
623
|
+
"docs/WEFTLET-2.0-PLAN.md",
|
|
621
624
|
"docs/architecture-baseline.json",
|
|
622
625
|
"docs/architecture-policy.md",
|
|
623
626
|
"docs/extraction-manifest.json",
|
|
@@ -743,6 +746,8 @@
|
|
|
743
746
|
"src/extraction/module-request.ts",
|
|
744
747
|
"src/extraction/providers.test.ts",
|
|
745
748
|
"src/extraction/providers.ts",
|
|
749
|
+
"src/extraction/repository-nodes.test.ts",
|
|
750
|
+
"src/extraction/repository-nodes.ts",
|
|
746
751
|
"src/extraction/routing.test.ts",
|
|
747
752
|
"src/extraction/routing.ts",
|
|
748
753
|
"src/extraction/scip-project.test.ts",
|
|
@@ -773,6 +778,7 @@
|
|
|
773
778
|
"tests/rdf.test.ts",
|
|
774
779
|
"tests/routing.test.ts",
|
|
775
780
|
"tests/runtime.test.ts",
|
|
781
|
+
"tests/semantic-identity.test.ts",
|
|
776
782
|
"tests/snapshot-lifecycle.test.ts"
|
|
777
783
|
],
|
|
778
784
|
"publicationAuthorization": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weftlet/toolkit",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Evidence-backed context graphs for AI development agents: product intent, contracts, code, tests and runtime behavior",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"n3": "2.7.2",
|
|
64
64
|
"rdf-validate-shacl": "0.6.5",
|
|
65
65
|
"sparqljs": "3.7.4",
|
|
66
|
-
"@weftlet/core": "^0.2.
|
|
66
|
+
"@weftlet/core": "^0.2.1"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
69
|
"@changesets/cli": "3.0.3",
|