wabachi 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/.codex-plugin/plugin.json +1 -1
  2. package/README.md +5 -0
  3. package/dist/architecture/cli.js +47 -32
  4. package/dist/architecture/cli.js.map +1 -1
  5. package/dist/architecture/documentation/react-flow.d.ts +23 -0
  6. package/dist/architecture/documentation/react-flow.js +436 -0
  7. package/dist/architecture/documentation/react-flow.js.map +1 -0
  8. package/dist/architecture/documentation/site.d.ts +10 -13
  9. package/dist/architecture/documentation/site.js +58 -24
  10. package/dist/architecture/documentation/site.js.map +1 -1
  11. package/dist/architecture/projection/react-flow.d.ts +96 -0
  12. package/dist/architecture/projection/react-flow.js +388 -0
  13. package/dist/architecture/projection/react-flow.js.map +1 -0
  14. package/dist/cli.js +1 -1
  15. package/dist/command-contract.d.ts +3 -2
  16. package/dist/command-contract.js +6 -5
  17. package/dist/command-contract.js.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js +1 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/runtime/repository.d.ts +3 -0
  22. package/dist/runtime/repository.js +140 -16
  23. package/dist/runtime/repository.js.map +1 -1
  24. package/dist/runtime/run.js +3 -1
  25. package/dist/runtime/run.js.map +1 -1
  26. package/dist/working-set/codec.d.ts +7 -0
  27. package/dist/working-set/codec.js +53 -0
  28. package/dist/working-set/codec.js.map +1 -0
  29. package/dist/working-set/conflicts.d.ts +46 -0
  30. package/dist/working-set/conflicts.js +97 -0
  31. package/dist/working-set/conflicts.js.map +1 -0
  32. package/dist/working-set/derive.d.ts +34 -0
  33. package/dist/working-set/derive.js +634 -0
  34. package/dist/working-set/derive.js.map +1 -0
  35. package/dist/working-set/index.d.ts +3 -0
  36. package/dist/working-set/index.js +3 -0
  37. package/dist/working-set/index.js.map +1 -0
  38. package/dist/working-set/model.d.ts +93 -0
  39. package/dist/working-set/model.js +204 -0
  40. package/dist/working-set/model.js.map +1 -0
  41. package/dist/working-set/quality.d.ts +201 -0
  42. package/dist/working-set/quality.js +447 -0
  43. package/dist/working-set/quality.js.map +1 -0
  44. package/dist/working-set/seeds.d.ts +135 -0
  45. package/dist/working-set/seeds.js +433 -0
  46. package/dist/working-set/seeds.js.map +1 -0
  47. package/docs/USAGE.md +30 -22
  48. package/docs/examples/minimal-canon.json +24 -0
  49. package/package.json +10 -3
  50. package/skills/wabachi/SKILL.md +10 -1
@@ -0,0 +1,433 @@
1
+ import { createRepositoryMapping, normalizeRepositoryPath, } from "../architecture/canon/repository-mappings.js";
2
+ /** Version of the bounded task and entrypoint seed contract. */
3
+ export const WORKING_SET_SEED_SCHEMA_VERSION = 1;
4
+ export const WORKING_SET_SEED_KIND = "working-set-seeds";
5
+ export const WORKING_SET_SEED_RESOLUTION_KIND = "working-set-seed-resolution";
6
+ export const WORKING_SET_SEED_KINDS = ["path", "symbol-export", "architecture-component"];
7
+ /** V1 intent metadata is an identifier, not a task description or authority. */
8
+ export const WORKING_SET_TASK_INTENTS = ["implement", "investigate", "verify"];
9
+ export const WORKING_SET_SEED_LIMITS = Object.freeze({
10
+ maxSeeds: 128,
11
+ maxTaskIdLength: 128,
12
+ maxRepositoryFieldLength: 256,
13
+ maxRevisionLength: 64,
14
+ maxPathLength: 1024,
15
+ maxSymbolLength: 512,
16
+ maxExportNameLength: 512,
17
+ maxComponentIdLength: 512,
18
+ maxResolutionCandidates: 64,
19
+ maxResolutionEvidence: 64,
20
+ });
21
+ const seedKindOrder = Object.freeze({
22
+ path: 0,
23
+ "symbol-export": 1,
24
+ "architecture-component": 2,
25
+ });
26
+ const targetKindOrder = Object.freeze({
27
+ file: 0,
28
+ symbol: 1,
29
+ test: 2,
30
+ });
31
+ function isRecord(value) {
32
+ return value !== null && typeof value === "object" && !Array.isArray(value);
33
+ }
34
+ function assertAllowedKeys(value, keys, label) {
35
+ const allowed = new Set(keys);
36
+ for (const key of Object.keys(value)) {
37
+ if (!allowed.has(key))
38
+ throw new TypeError(`${label} contains unknown field: ${key}`);
39
+ }
40
+ }
41
+ function normalizeIdentifier(value, label, maxLength) {
42
+ if (typeof value !== "string")
43
+ throw new TypeError(`${label} must be a string`);
44
+ const normalized = value.normalize("NFC").trim();
45
+ if (normalized.length === 0 ||
46
+ normalized.length > maxLength ||
47
+ /[\p{White_Space}\p{Cc}\p{Cf}\p{Cs}]/u.test(normalized)) {
48
+ throw new TypeError(`${label} is malformed or exceeds its bound`);
49
+ }
50
+ return normalized;
51
+ }
52
+ function normalizeRepositoryField(value, label) {
53
+ if (typeof value !== "string")
54
+ throw new TypeError(`${label} must be a string`);
55
+ const normalized = value.normalize("NFC");
56
+ if (normalized.length === 0 ||
57
+ normalized.length > WORKING_SET_SEED_LIMITS.maxRepositoryFieldLength ||
58
+ /[\p{White_Space}\p{Cc}\p{Cf}\p{Cs}]/u.test(normalized)) {
59
+ throw new TypeError(`${label} is malformed or exceeds its bound`);
60
+ }
61
+ return normalized;
62
+ }
63
+ function normalizeRevision(value) {
64
+ const revision = normalizeIdentifier(value, "revision", WORKING_SET_SEED_LIMITS.maxRevisionLength);
65
+ if (!/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/iu.test(revision)) {
66
+ throw new TypeError("revision must be a full immutable hexadecimal revision");
67
+ }
68
+ return revision.toLowerCase();
69
+ }
70
+ function normalizeRepository(value) {
71
+ if (!isRecord(value))
72
+ throw new TypeError("repository must be an object");
73
+ assertAllowedKeys(value, ["repositoryHost", "repositoryId", "repository"], "repository");
74
+ return Object.freeze({
75
+ repositoryHost: normalizeRepositoryField(value.repositoryHost, "repository repositoryHost"),
76
+ repositoryId: normalizeRepositoryField(value.repositoryId, "repository repositoryId"),
77
+ repository: normalizeRepositoryField(value.repository, "repository repository"),
78
+ });
79
+ }
80
+ function normalizeTask(value) {
81
+ if (!isRecord(value))
82
+ throw new TypeError("task must be an object");
83
+ assertAllowedKeys(value, ["taskId", "intent"], "task");
84
+ if (!WORKING_SET_TASK_INTENTS.includes(value.intent)) {
85
+ throw new TypeError("task intent is unsupported");
86
+ }
87
+ return Object.freeze({
88
+ taskId: normalizeIdentifier(value.taskId, "task taskId", WORKING_SET_SEED_LIMITS.maxTaskIdLength),
89
+ intent: value.intent,
90
+ });
91
+ }
92
+ function normalizeSeedPath(value) {
93
+ if (typeof value !== "string" || value.length > WORKING_SET_SEED_LIMITS.maxPathLength) {
94
+ throw new TypeError("seed path is malformed or exceeds its bound");
95
+ }
96
+ return normalizeRepositoryPath(value);
97
+ }
98
+ function normalizeSeed(value) {
99
+ if (!isRecord(value))
100
+ throw new TypeError("working-set seed must be an object");
101
+ if (!WORKING_SET_SEED_KINDS.includes(value.kind)) {
102
+ throw new TypeError("working-set seed kind is unsupported");
103
+ }
104
+ switch (value.kind) {
105
+ case "path":
106
+ assertAllowedKeys(value, ["kind", "path"], "path seed");
107
+ return Object.freeze({ kind: "path", path: normalizeSeedPath(value.path) });
108
+ case "symbol-export":
109
+ assertAllowedKeys(value, ["kind", "path", "symbol", "exportName"], "symbol-export seed");
110
+ return Object.freeze({
111
+ kind: "symbol-export",
112
+ path: normalizeSeedPath(value.path),
113
+ symbol: normalizeIdentifier(value.symbol, "symbol-export seed symbol", WORKING_SET_SEED_LIMITS.maxSymbolLength),
114
+ ...(value.exportName === undefined
115
+ ? {}
116
+ : {
117
+ exportName: normalizeIdentifier(value.exportName, "symbol-export seed exportName", WORKING_SET_SEED_LIMITS.maxExportNameLength),
118
+ }),
119
+ });
120
+ case "architecture-component":
121
+ assertAllowedKeys(value, ["kind", "componentId"], "architecture-component seed");
122
+ return Object.freeze({
123
+ kind: "architecture-component",
124
+ componentId: normalizeIdentifier(value.componentId, "architecture-component seed componentId", WORKING_SET_SEED_LIMITS.maxComponentIdLength),
125
+ });
126
+ }
127
+ }
128
+ function compareSeeds(left, right) {
129
+ const kind = seedKindOrder[left.kind] - seedKindOrder[right.kind];
130
+ if (kind !== 0)
131
+ return kind;
132
+ if (left.kind === "path" && right.kind === "path")
133
+ return left.path.localeCompare(right.path);
134
+ if (left.kind === "architecture-component" && right.kind === "architecture-component") {
135
+ return left.componentId.localeCompare(right.componentId);
136
+ }
137
+ if (left.kind !== "symbol-export" || right.kind !== "symbol-export")
138
+ return 0;
139
+ return (left.path.localeCompare(right.path) ||
140
+ left.symbol.localeCompare(right.symbol) ||
141
+ (left.exportName ?? "").localeCompare(right.exportName ?? ""));
142
+ }
143
+ function seedKey(seed) {
144
+ if (seed.kind === "path")
145
+ return `path\u0000${seed.path}`;
146
+ if (seed.kind === "architecture-component")
147
+ return `architecture-component\u0000${seed.componentId}`;
148
+ return `symbol-export\u0000${seed.path}\u0000${seed.symbol}\u0000${seed.exportName ?? ""}`;
149
+ }
150
+ function normalizeInput(input, requireVersion) {
151
+ if (!isRecord(input))
152
+ throw new TypeError("working-set seed document must be an object");
153
+ assertAllowedKeys(input, ["kind", "schemaVersion", "task", "repository", "revision", "seeds"], "working-set seed document");
154
+ if (input.kind !== undefined && input.kind !== WORKING_SET_SEED_KIND) {
155
+ throw new TypeError("working-set seed document kind is unsupported");
156
+ }
157
+ if (requireVersion && input.schemaVersion !== WORKING_SET_SEED_SCHEMA_VERSION) {
158
+ throw new TypeError("working-set seed schema version is unsupported");
159
+ }
160
+ if (input.schemaVersion !== undefined && input.schemaVersion !== WORKING_SET_SEED_SCHEMA_VERSION) {
161
+ throw new TypeError("working-set seed schema version is unsupported");
162
+ }
163
+ if (!Array.isArray(input.seeds))
164
+ throw new TypeError("working-set seeds must be an array");
165
+ if (input.seeds.length > WORKING_SET_SEED_LIMITS.maxSeeds) {
166
+ throw new TypeError("working-set seeds exceed their bound");
167
+ }
168
+ const unique = new Map();
169
+ for (const value of input.seeds) {
170
+ const seed = normalizeSeed(value);
171
+ unique.set(seedKey(seed), seed);
172
+ }
173
+ const seeds = [...unique.values()].sort(compareSeeds);
174
+ return Object.freeze({
175
+ kind: WORKING_SET_SEED_KIND,
176
+ schemaVersion: WORKING_SET_SEED_SCHEMA_VERSION,
177
+ task: normalizeTask(input.task),
178
+ repository: normalizeRepository(input.repository),
179
+ revision: normalizeRevision(input.revision),
180
+ seeds: Object.freeze(seeds),
181
+ });
182
+ }
183
+ /** Creates and canonicalizes a bounded structured task/seed document. */
184
+ export function createWorkingSetSeeds(input) {
185
+ return normalizeInput(input, false);
186
+ }
187
+ /** Validates a serialized-shape seed document before semantic use. */
188
+ export function validateWorkingSetSeeds(input) {
189
+ return normalizeInput(input, true);
190
+ }
191
+ function canonicalDocument(document) {
192
+ return {
193
+ kind: WORKING_SET_SEED_KIND,
194
+ schemaVersion: WORKING_SET_SEED_SCHEMA_VERSION,
195
+ task: { taskId: document.task.taskId, intent: document.task.intent },
196
+ repository: {
197
+ repositoryHost: document.repository.repositoryHost,
198
+ repositoryId: document.repository.repositoryId,
199
+ repository: document.repository.repository,
200
+ },
201
+ revision: document.revision,
202
+ seeds: document.seeds.map((seed) => {
203
+ if (seed.kind === "path")
204
+ return { kind: "path", path: seed.path };
205
+ if (seed.kind === "architecture-component") {
206
+ return { kind: "architecture-component", componentId: seed.componentId };
207
+ }
208
+ return {
209
+ kind: "symbol-export",
210
+ path: seed.path,
211
+ symbol: seed.symbol,
212
+ ...(seed.exportName === undefined ? {} : { exportName: seed.exportName }),
213
+ };
214
+ }),
215
+ };
216
+ }
217
+ /** Deterministic JSON serialization of the bounded seed contract. */
218
+ export function serializeWorkingSetSeeds(input) {
219
+ const document = validateWorkingSetSeeds({ ...createWorkingSetSeeds(input), schemaVersion: 1 });
220
+ return JSON.stringify(canonicalDocument(document));
221
+ }
222
+ /** Parses JSON and rejects malformed or unsupported seed documents. */
223
+ export function parseWorkingSetSeeds(serialized) {
224
+ if (typeof serialized !== "string")
225
+ throw new TypeError("working-set seed serialization must be a string");
226
+ let parsed;
227
+ try {
228
+ parsed = JSON.parse(serialized);
229
+ }
230
+ catch {
231
+ throw new TypeError("working-set seed serialization is malformed");
232
+ }
233
+ return validateWorkingSetSeeds(parsed);
234
+ }
235
+ export const decodeWorkingSetSeeds = parseWorkingSetSeeds;
236
+ function compareEvidence(left, right) {
237
+ return left.artifact.localeCompare(right.artifact) || left.reference.localeCompare(right.reference);
238
+ }
239
+ function canonicalEvidence(references) {
240
+ const unique = new Map();
241
+ for (const reference of references)
242
+ unique.set(`${reference.artifact}\u0000${reference.reference}`, reference);
243
+ return Object.freeze([...unique.values()]
244
+ .sort(compareEvidence)
245
+ .slice(0, WORKING_SET_SEED_LIMITS.maxResolutionEvidence)
246
+ .map((reference) => Object.freeze({ artifact: reference.artifact, reference: reference.reference })));
247
+ }
248
+ function compareTargets(left, right) {
249
+ return targetKindOrder[left.kind] - targetKindOrder[right.kind] || left.locator.localeCompare(right.locator);
250
+ }
251
+ function canonicalTargets(targets) {
252
+ const unique = new Map();
253
+ for (const target of targets)
254
+ unique.set(`${target.kind}\u0000${target.locator}`, target);
255
+ return Object.freeze([...unique.values()]
256
+ .sort(compareTargets)
257
+ .map((target) => Object.freeze({ kind: target.kind, locator: target.locator })));
258
+ }
259
+ function unresolved(seed, reason, candidates = [], evidence = []) {
260
+ return Object.freeze({
261
+ status: "unresolved",
262
+ seed,
263
+ reason,
264
+ candidates: Object.freeze([...new Set(candidates)].sort().slice(0, WORKING_SET_SEED_LIMITS.maxResolutionCandidates)),
265
+ evidence: canonicalEvidence(evidence),
266
+ });
267
+ }
268
+ function resolved(seed, targets, evidence) {
269
+ const canonical = canonicalTargets(targets);
270
+ return canonical.length === 0
271
+ ? unresolved(seed, "missing", [], evidence)
272
+ : Object.freeze({
273
+ status: "resolved",
274
+ seed,
275
+ targets: canonical,
276
+ evidence: canonicalEvidence(evidence),
277
+ });
278
+ }
279
+ function compareRepository(left, right) {
280
+ return (left.repositoryHost === right.repositoryHost &&
281
+ left.repositoryId === right.repositoryId &&
282
+ left.repository === right.repository);
283
+ }
284
+ function normalizeContext(context) {
285
+ const repository = normalizeRepository(context.repository);
286
+ const revision = normalizeRevision(context.revision);
287
+ const resolvedRepository = context.resolvedRepository;
288
+ if (resolvedRepository === undefined) {
289
+ return { repository, revision, source: repository.repository, valid: true };
290
+ }
291
+ if (typeof resolvedRepository.source !== "string" || resolvedRepository.source.length === 0) {
292
+ throw new TypeError("resolved repository source is malformed");
293
+ }
294
+ const resolvedRevision = normalizeRevision(resolvedRepository.commitSha);
295
+ return {
296
+ repository,
297
+ revision,
298
+ source: resolvedRepository.source,
299
+ valid: resolvedRevision === revision,
300
+ };
301
+ }
302
+ function normalizedMappings(inputs) {
303
+ if (inputs === undefined)
304
+ return [];
305
+ if (!Array.isArray(inputs))
306
+ throw new TypeError("repository mappings must be an array");
307
+ return Object.freeze(inputs
308
+ .map((input) => createRepositoryMapping(input))
309
+ .sort((left, right) => left.canonId.localeCompare(right.canonId) || JSON.stringify(left).localeCompare(JSON.stringify(right))));
310
+ }
311
+ function mappingEvidence(mapping, kind, locator) {
312
+ return { artifact: "canon", reference: `${mapping.canonId}:${kind}:${locator}` };
313
+ }
314
+ function symbolLocator(path, symbol, exportName) {
315
+ return `${path}#${symbol}${exportName === undefined ? "" : `@${exportName}`}`;
316
+ }
317
+ function testLocator(path, selector) {
318
+ return `${path}#${selector}`;
319
+ }
320
+ function entityMatchesBinding(entity, source, revision) {
321
+ return entity.repository.source === source && entity.repository.commitSha.toLowerCase() === revision;
322
+ }
323
+ function memberMatchesSymbol(member, seed) {
324
+ const symbolValues = [member.nativeId, member.name, member.qualifiedName, ...member.aliases].filter((value) => value !== undefined);
325
+ if (!symbolValues.includes(seed.symbol))
326
+ return false;
327
+ if (seed.exportName === undefined)
328
+ return true;
329
+ return symbolValues.includes(seed.exportName);
330
+ }
331
+ function resolvePathSeed(seed, mappings) {
332
+ const evidence = [{ artifact: "repository-binding", reference: `path:${seed.path}` }];
333
+ for (const mapping of mappings) {
334
+ for (const path of mapping.paths) {
335
+ if (path.path === seed.path)
336
+ evidence.push(mappingEvidence(mapping, "path", path.path));
337
+ }
338
+ }
339
+ return resolved(seed, [{ kind: "file", locator: seed.path }], evidence);
340
+ }
341
+ function resolveSymbolSeed(seed, mappings, correlation, source, revision) {
342
+ const mappingMatches = mappings.flatMap((mapping) => mapping.symbols
343
+ .filter((symbol) => symbol.path === seed.path &&
344
+ symbol.symbol === seed.symbol &&
345
+ (symbol.exportName ?? "") === (seed.exportName ?? ""))
346
+ .map((symbol) => ({ mapping, symbol })));
347
+ const evidence = mappingMatches.map(({ mapping, symbol }) => mappingEvidence(mapping, "symbol", symbolLocator(symbol.path, symbol.symbol, symbol.exportName)));
348
+ const candidates = new Map();
349
+ for (const entity of correlation?.canonicalEntities ?? []) {
350
+ if (!entityMatchesBinding(entity, source, revision))
351
+ continue;
352
+ if (entity.members.some((member) => member.path === seed.path && memberMatchesSymbol(member, seed))) {
353
+ candidates.set(entity.canonicalId, entity);
354
+ }
355
+ }
356
+ const candidateIds = [...candidates.keys()].sort();
357
+ for (const canonicalId of candidateIds) {
358
+ evidence.push({ artifact: "provider-correlation", reference: canonicalId });
359
+ }
360
+ const hasAmbiguousEntity = [...candidates.values()].some((entity) => entity.status === "ambiguous" || entity.candidateCanonicalIds.length > 0);
361
+ if (mappingMatches.length > 1 || candidateIds.length > 1 || hasAmbiguousEntity) {
362
+ return unresolved(seed, "ambiguous", candidateIds, evidence);
363
+ }
364
+ if (mappingMatches.length === 0 && candidateIds.length === 0)
365
+ return unresolved(seed, "missing");
366
+ const exportName = seed.exportName ?? mappingMatches[0]?.symbol.exportName;
367
+ return resolved(seed, [{ kind: "symbol", locator: symbolLocator(seed.path, seed.symbol, exportName) }], evidence);
368
+ }
369
+ function resolveComponentSeed(seed, mappings) {
370
+ const matches = mappings.filter((mapping) => mapping.canonId === seed.componentId);
371
+ const evidence = matches.map((mapping) => ({
372
+ artifact: "canon",
373
+ reference: mapping.canonId,
374
+ }));
375
+ if (matches.length === 0)
376
+ return unresolved(seed, "missing");
377
+ if (matches.length > 1)
378
+ return unresolved(seed, "ambiguous", matches.map((mapping) => mapping.canonId), evidence);
379
+ const [mapping] = matches;
380
+ const targets = [
381
+ ...mapping.paths.map((path) => ({ kind: "file", locator: path.path })),
382
+ ...mapping.symbols.map((symbol) => ({
383
+ kind: "symbol",
384
+ locator: symbolLocator(symbol.path, symbol.symbol, symbol.exportName),
385
+ })),
386
+ ...mapping.tests.map((test) => ({ kind: "test", locator: testLocator(test.path, test.selector) })),
387
+ ];
388
+ return resolved(seed, targets, evidence.concat(mapping.paths.map((path) => mappingEvidence(mapping, "path", path.path)), mapping.symbols.map((symbol) => mappingEvidence(mapping, "symbol", symbolLocator(symbol.path, symbol.symbol, symbol.exportName))), mapping.tests.map((test) => mappingEvidence(mapping, "test", testLocator(test.path, test.selector)))));
389
+ }
390
+ function resolveSeed(seed, mappings, context, correlation) {
391
+ if (seed.kind === "path")
392
+ return resolvePathSeed(seed, mappings);
393
+ if (seed.kind === "symbol-export") {
394
+ return resolveSymbolSeed(seed, mappings, correlation, context.source, context.revision);
395
+ }
396
+ return resolveComponentSeed(seed, mappings);
397
+ }
398
+ /**
399
+ * Resolves only the supplied bounded seeds against the pinned repository,
400
+ * existing Canon mappings, and supplied correlation evidence. It never scans
401
+ * the repository or treats seed metadata as execution authority.
402
+ */
403
+ export function resolveWorkingSetSeeds(input, context) {
404
+ const document = createWorkingSetSeeds(input);
405
+ const normalizedContext = normalizeContext(context);
406
+ const mappings = normalizedMappings(context.repositoryMappings);
407
+ const binding = normalizedContext.valid &&
408
+ compareRepository(document.repository, normalizedContext.repository) &&
409
+ document.revision === normalizedContext.revision;
410
+ const resolutions = document.seeds.map((seed) => binding
411
+ ? resolveSeed(seed, mappings, { source: normalizedContext.source, revision: normalizedContext.revision }, context.correlation)
412
+ : unresolved(seed, "repository-mismatch"));
413
+ return Object.freeze({
414
+ kind: WORKING_SET_SEED_RESOLUTION_KIND,
415
+ schemaVersion: WORKING_SET_SEED_SCHEMA_VERSION,
416
+ task: document.task,
417
+ repository: document.repository,
418
+ revision: document.revision,
419
+ binding: binding ? "matched" : "mismatch",
420
+ resolutions: Object.freeze(resolutions),
421
+ });
422
+ }
423
+ /** Resolves one already-canonical seed with the same bounded rules. */
424
+ export function resolveWorkingSetSeed(seed, context) {
425
+ const document = createWorkingSetSeeds({
426
+ task: { taskId: "single-seed", intent: "investigate" },
427
+ repository: context.repository,
428
+ revision: context.revision,
429
+ seeds: [seed],
430
+ });
431
+ return resolveWorkingSetSeeds(document, context).resolutions[0] ?? unresolved(document.seeds[0], "missing");
432
+ }
433
+ //# sourceMappingURL=seeds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeds.js","sourceRoot":"","sources":["../../src/working-set/seeds.ts"],"names":[],"mappings":"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"}
package/docs/USAGE.md CHANGED
@@ -38,9 +38,9 @@ reviewed. The command prints the manifest path. Keep the directory named by
38
38
 
39
39
  ## Build a provider matrix
40
40
 
41
- `matrix` runs the matrix workflow for one revision and requires retained output
42
- artifacts. A full 40-character commit SHA is the safest input for reproducible
43
- evidence.
41
+ `matrix` runs the matrix workflow for one explicit revision and requires a
42
+ retained output directory. Pass a full 40-character commit SHA with
43
+ `--revision`; unlike `run`, `matrix` never falls back to `HEAD`.
44
44
 
45
45
  ```bash
46
46
  wabachi matrix . --revision 0123456789abcdef0123456789abcdef01234567 --out ./artifacts/matrix
@@ -52,7 +52,7 @@ configured provider workflow, pass a JSON configuration file with the source,
52
52
  revision, provider IDs, and addition order:
53
53
 
54
54
  ```bash
55
- wabachi matrix --config ./matrix-workflow.json
55
+ wabachi matrix --config ./matrix-workflow.json --out ./artifacts/matrix
56
56
  ```
57
57
 
58
58
  The configured provider set must match the providers registered by the
@@ -61,33 +61,42 @@ installed Wabachi version.
61
61
  ## Architecture Canon
62
62
 
63
63
  Architecture Canon authoring is an explicit file-editing step. Wabachi does
64
- not provide an init or edit command. Create or revise the Canon document using
65
- the repository's documented schema, then validate it before rendering.
64
+ not provide an init or edit command. Create or revise the conventional
65
+ `.wabachi/architecture.json` document using the repository's documented
66
+ schema, then validate it before rendering. To discover the current Canon shape
67
+ and obtain a minimal valid starting document, run the read-only example command
68
+ and redirect it explicitly:
66
69
 
67
70
  ```bash
68
- wabachi architecture validate ./architecture.json
69
- wabachi architecture validate ./architecture.json --json
71
+ wabachi architecture --help
72
+ mkdir -p .wabachi
73
+ wabachi architecture example > ./.wabachi/architecture.json
70
74
  ```
71
75
 
72
- Rendering requires the Structurizr CLI. Wabachi writes the generated site and
73
- static diagrams beneath the directory passed to `--out`:
76
+ The example is printed from the installed package and is not written by
77
+ Wabachi. It is a starting point for explicit authoring, not an implicit init or
78
+ edit workflow. Omitted-file validation and rendering resolve exactly
79
+ `.wabachi/architecture.json`; an explicit `<file>` remains an override.
74
80
 
75
81
  ```bash
76
- wabachi architecture render ./architecture.json --out ./artifacts/site
82
+ wabachi architecture validate
83
+ wabachi architecture validate ./.wabachi/architecture.json --json
77
84
  ```
78
85
 
79
- If `structurizr` is not on `PATH`, provide one executable identity without
80
- changing the workflow:
86
+ Rendering uses the bundled React Flow + ELK renderer and requires only the
87
+ supported Node.js/npm environment. No Java, Docker, Chromium, Structurizr,
88
+ CDN, or network access is required by the render command. Wabachi writes the
89
+ generated documentation and local static diagrams beneath the directory passed
90
+ to `--out`:
81
91
 
82
92
  ```bash
83
- wabachi architecture render ./architecture.json \
84
- --out ./artifacts/site \
85
- --structurizr-command /opt/structurizr/structurizr.sh
93
+ wabachi architecture render --out ./artifacts/site
86
94
  ```
87
95
 
88
- The normal documentation path is: author the explicit Canon, validate that
89
- same file, then render it into a retained site. The matching live playbook is
90
- `wabachi skill architecture-documentation`.
96
+ The normal documentation path is: author the conventional Canon, validate it,
97
+ then render it into a retained site. The matching live playbook is
98
+ `wabachi skill architecture-documentation`. Passing an explicit Canon path to
99
+ either command preserves the same workflow for another file.
91
100
 
92
101
  ## Common failures and recovery
93
102
 
@@ -99,9 +108,8 @@ same file, then render it into a retained site. The matching live playbook is
99
108
  with the installed provider set.
100
109
  - If Canon validation fails, fix the reported document issue and validate the
101
110
  same file again before rendering. `--json` is useful for automation.
102
- - If rendering fails before export, validate the Canon and check that the
103
- Structurizr executable can run. Use `--structurizr-command` for a deliberate
104
- executable override and inspect the retained output directory.
111
+ - If rendering fails, validate the Canon and inspect the bounded output
112
+ directory. The render command does not invoke an external diagram executable.
105
113
  - If syntax is uncertain, stop relying on a copied example and resolve the
106
114
  current contract with `wabachi architecture --help` or the relevant leaf
107
115
  help. Unsupported commands fail closed.
@@ -0,0 +1,24 @@
1
+ {
2
+ "canonVersion": 1,
3
+ "documentId": "minimal-architecture-canon",
4
+ "root": { "kind": "architecture", "id": "architecture" },
5
+ "elements": [],
6
+ "interfaces": [],
7
+ "relationships": [],
8
+ "responsibilities": { "responsibilities": [] },
9
+ "authority": { "authority": [], "ownership": [] },
10
+ "boundaries": [],
11
+ "constraints": [],
12
+ "flows": [],
13
+ "deployment": {
14
+ "runtimeEnvironments": [],
15
+ "deploymentNodes": [],
16
+ "deploymentInstances": [],
17
+ "infrastructureReferences": [],
18
+ "mappings": []
19
+ },
20
+ "repositoryMappings": [],
21
+ "decisions": { "decisions": [], "references": [], "referenceAttachments": [] },
22
+ "views": [],
23
+ "globalIdentityRegistry": { "entries": [{ "id": "architecture", "namespace": "architecture" }] }
24
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wabachi",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Repository analysis and Architecture Canon tooling for deterministic codebase understanding.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,20 +11,27 @@
11
11
  "README.md",
12
12
  "LICENSE",
13
13
  "docs/USAGE.md",
14
+ "docs/examples",
14
15
  "skills",
15
16
  ".codex-plugin"
16
17
  ],
17
18
  "dependencies": {
19
+ "@xyflow/react": "12.11.6",
18
20
  "@sourcegraph/scip-typescript": "0.4.0",
21
+ "elkjs": "0.12.0",
22
+ "react": "19.3.0",
23
+ "react-dom": "19.3.0",
19
24
  "typescript": "^6.0.3"
20
25
  },
21
26
  "devDependencies": {
22
27
  "@types/node": "^26.5.1",
23
- "eslint": "10.8.1",
28
+ "@types/react": "19.3.0",
29
+ "@types/react-dom": "19.3.0",
30
+ "eslint": "10.10.0",
24
31
  "js-yaml": "^4.1.0",
25
32
  "prettier": "3.9.6",
26
33
  "tsx": "^4.23.12",
27
- "typescript-eslint": "8.67.0"
34
+ "typescript-eslint": "8.70.0"
28
35
  },
29
36
  "engines": {
30
37
  "node": ">=24"
@@ -24,7 +24,16 @@ syntax for each command through its progressive help pointer, for example:
24
24
 
25
25
  ```bash
26
26
  wabachi architecture --help
27
- wabachi architecture validate --help
27
+ wabachi architecture example
28
+ wabachi architecture validate
29
+ wabachi architecture render --out ./artifacts/site
28
30
  ```
29
31
 
32
+ Omitted-file validation and rendering use `.wabachi/architecture.json` only.
33
+ Pass an explicit Canon path to either command when overriding that default.
34
+
35
+ Architecture rendering is npm-native and uses the bundled React Flow + ELK
36
+ renderer. The default render path does not require Java, Docker, Chromium,
37
+ Structurizr, CDN, or network access.
38
+
30
39
  Use `--json` on `skill` or help when a machine-readable projection is needed.