@smartmemory/stratum 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 (81) hide show
  1. package/dist/cli/guard.js +91 -0
  2. package/dist/cli/guard.js.map +1 -0
  3. package/dist/cli/mcp_install.js +302 -0
  4. package/dist/cli/mcp_install.js.map +1 -0
  5. package/dist/cli/query_gate.js +316 -0
  6. package/dist/cli/query_gate.js.map +1 -0
  7. package/dist/cli/stratum.js +291 -0
  8. package/dist/cli/stratum.js.map +1 -0
  9. package/dist/connectors/background.js +531 -0
  10. package/dist/connectors/background.js.map +1 -0
  11. package/dist/connectors/base.js +12 -0
  12. package/dist/connectors/base.js.map +1 -0
  13. package/dist/connectors/claude-bg-worker.js +99 -0
  14. package/dist/connectors/claude-bg-worker.js.map +1 -0
  15. package/dist/connectors/claude.js +170 -0
  16. package/dist/connectors/claude.js.map +1 -0
  17. package/dist/connectors/codex.js +319 -0
  18. package/dist/connectors/codex.js.map +1 -0
  19. package/dist/connectors/index.js +7 -0
  20. package/dist/connectors/index.js.map +1 -0
  21. package/dist/connectors/proc_identity.js +90 -0
  22. package/dist/connectors/proc_identity.js.map +1 -0
  23. package/dist/connectors/runner.js +63 -0
  24. package/dist/connectors/runner.js.map +1 -0
  25. package/dist/contracts/events.json +65 -0
  26. package/dist/contracts/mcp-surface.json +215 -0
  27. package/dist/engine/checkpoint.js +50 -0
  28. package/dist/engine/checkpoint.js.map +1 -0
  29. package/dist/engine/engine.js +2356 -0
  30. package/dist/engine/engine.js.map +1 -0
  31. package/dist/engine/ledger.js +36 -0
  32. package/dist/engine/ledger.js.map +1 -0
  33. package/dist/engine/state.js +42 -0
  34. package/dist/engine/state.js.map +1 -0
  35. package/dist/eval/expr.js +679 -0
  36. package/dist/eval/expr.js.map +1 -0
  37. package/dist/eval/files.js +130 -0
  38. package/dist/eval/files.js.map +1 -0
  39. package/dist/guard/canonical.js +116 -0
  40. package/dist/guard/canonical.js.map +1 -0
  41. package/dist/guard/errors.js +80 -0
  42. package/dist/guard/errors.js.map +1 -0
  43. package/dist/guard/evidence.js +475 -0
  44. package/dist/guard/evidence.js.map +1 -0
  45. package/dist/guard/fingerprint.js +13 -0
  46. package/dist/guard/fingerprint.js.map +1 -0
  47. package/dist/guard/lock.js +360 -0
  48. package/dist/guard/lock.js.map +1 -0
  49. package/dist/guard/store.js +396 -0
  50. package/dist/guard/store.js.map +1 -0
  51. package/dist/guard/transition.js +477 -0
  52. package/dist/guard/transition.js.map +1 -0
  53. package/dist/ir/refs.js +69 -0
  54. package/dist/ir/refs.js.map +1 -0
  55. package/dist/ir/schema.js +123 -0
  56. package/dist/ir/schema.js.map +1 -0
  57. package/dist/ir/validate.js +595 -0
  58. package/dist/ir/validate.js.map +1 -0
  59. package/dist/judge/codex_judged.js +85 -0
  60. package/dist/judge/codex_judged.js.map +1 -0
  61. package/dist/judge/fixture_judged.js +62 -0
  62. package/dist/judge/fixture_judged.js.map +1 -0
  63. package/dist/judge/judged.js +89 -0
  64. package/dist/judge/judged.js.map +1 -0
  65. package/dist/judge/pricing.js +22 -0
  66. package/dist/judge/pricing.js.map +1 -0
  67. package/dist/mcp/contracts.js +162 -0
  68. package/dist/mcp/contracts.js.map +1 -0
  69. package/dist/mcp/main.js +7 -0
  70. package/dist/mcp/main.js.map +1 -0
  71. package/dist/mcp/server.js +370 -0
  72. package/dist/mcp/server.js.map +1 -0
  73. package/dist/migrate/check.js +164 -0
  74. package/dist/migrate/check.js.map +1 -0
  75. package/dist/parallel/certificate.js +37 -0
  76. package/dist/parallel/certificate.js.map +1 -0
  77. package/dist/parallel/evaluate.js +73 -0
  78. package/dist/parallel/evaluate.js.map +1 -0
  79. package/dist/speckit/compiler.js +162 -0
  80. package/dist/speckit/compiler.js.map +1 -0
  81. package/package.json +47 -0
@@ -0,0 +1,595 @@
1
+ import { z } from "zod";
2
+ import { expressionUsesFilePredicate } from "../eval/expr.js";
3
+ import { extractReferences, referenceEdges } from "./refs.js";
4
+ import { SpecificationSchema } from "./schema.js";
5
+ const PRIMITIVES = new Set(["string", "integer", "number", "boolean", "object", "array"]);
6
+ const CONTRACT_NAME = /^[A-Z][a-zA-Z0-9_]*$/;
7
+ function formatPath(path) {
8
+ let formatted = "";
9
+ for (const part of path) {
10
+ formatted += typeof part === "number" ? `[${part}]` : formatted ? `.${part}` : part;
11
+ }
12
+ return formatted;
13
+ }
14
+ function schemaErrors(error) {
15
+ return error.issues.flatMap((issue) => {
16
+ if (issue.code === z.ZodIssueCode.unrecognized_keys) {
17
+ return issue.keys.map((key) => ({
18
+ code: "E2_UNKNOWN_FIELD", path: formatPath([...issue.path, key]), message: issue.message,
19
+ }));
20
+ }
21
+ if (issue.code === z.ZodIssueCode.custom && issue.message.startsWith("E2_")) {
22
+ return { code: issue.message, path: formatPath(issue.path), message: issue.message };
23
+ }
24
+ return { code: "SCHEMA_INVALID", path: formatPath(issue.path), message: issue.message };
25
+ });
26
+ }
27
+ function parseContractType(value) {
28
+ let raw = value;
29
+ let optional = false;
30
+ if (raw.endsWith("?")) {
31
+ optional = true;
32
+ raw = raw.slice(0, -1);
33
+ }
34
+ if (raw.length === 0 || raw.endsWith("?"))
35
+ return undefined;
36
+ const enumArray = /^\(([^()]+)\)\[\]$/.exec(raw);
37
+ if (enumArray?.[1]) {
38
+ const values = enumArray[1].split("|");
39
+ if (values.some((item) => item.length === 0))
40
+ return undefined;
41
+ return { kind: "typed-array", item: { kind: "enum", values, optional: false }, optional };
42
+ }
43
+ if (raw.endsWith("[]")) {
44
+ const item = parseContractType(raw.slice(0, -2));
45
+ if (!item || item.optional)
46
+ return undefined;
47
+ return { kind: "typed-array", item, optional };
48
+ }
49
+ if (raw === "object" || raw === "array")
50
+ return { kind: raw, optional };
51
+ if (PRIMITIVES.has(raw))
52
+ return { kind: "scalar", scalar: raw, optional };
53
+ if (raw.includes("|")) {
54
+ const values = raw.split("|");
55
+ if (values.some((item) => item.length === 0 || /[\[\]()]/.test(item)))
56
+ return undefined;
57
+ return { kind: "enum", values, optional };
58
+ }
59
+ if (CONTRACT_NAME.test(raw))
60
+ return { kind: "ref", name: raw, optional };
61
+ return undefined;
62
+ }
63
+ function primitiveToZod(name) {
64
+ switch (name) {
65
+ case "string": return z.string();
66
+ case "integer": return z.number().int();
67
+ case "number": return z.number();
68
+ case "boolean": return z.boolean();
69
+ default: return z.never();
70
+ }
71
+ }
72
+ function parseContracts(contracts) {
73
+ const parsed = Object.create(null);
74
+ for (const [name, contract] of Object.entries(contracts)) {
75
+ const fields = Object.create(null);
76
+ for (const [field, type] of Object.entries(contract)) {
77
+ const node = parseContractType(type);
78
+ if (!node)
79
+ return { errors: [{ code: "CONTRACT_INVALID_TYPE", path: `contracts.${name}.${field}`, message: `invalid contract type ${type}` }] };
80
+ fields[field] = node;
81
+ }
82
+ parsed[name] = { fields };
83
+ }
84
+ const visiting = new Set();
85
+ const visited = new Set();
86
+ const walk = (node, path) => {
87
+ if (node.kind === "typed-array")
88
+ return walk(node.item, path);
89
+ if (node.kind !== "ref")
90
+ return undefined;
91
+ if (!parsed[node.name])
92
+ return { code: "CONTRACT_UNKNOWN_REF", path, message: `unknown contract ${node.name}` };
93
+ if (visiting.has(node.name))
94
+ return { code: "CONTRACT_RECURSIVE_REF", path, message: `recursive contract ${node.name}` };
95
+ if (visited.has(node.name))
96
+ return undefined;
97
+ visiting.add(node.name);
98
+ for (const [field, child] of Object.entries(parsed[node.name].fields)) {
99
+ const error = walk(child, `contracts.${node.name}.${field}`);
100
+ if (error)
101
+ return error;
102
+ }
103
+ visiting.delete(node.name);
104
+ visited.add(node.name);
105
+ return undefined;
106
+ };
107
+ for (const [name, contract] of Object.entries(parsed)) {
108
+ if (visited.has(name))
109
+ continue;
110
+ visiting.add(name);
111
+ for (const [field, node] of Object.entries(contract.fields)) {
112
+ const error = walk(node, `contracts.${name}.${field}`);
113
+ if (error)
114
+ return { errors: [error] };
115
+ }
116
+ visiting.delete(name);
117
+ visited.add(name);
118
+ }
119
+ return { parsed, errors: [] };
120
+ }
121
+ function compileContracts(parsed) {
122
+ const cache = Object.create(null);
123
+ const compileNode = (node) => {
124
+ let schema;
125
+ if (node.kind === "scalar")
126
+ schema = primitiveToZod(node.scalar);
127
+ else if (node.kind === "object")
128
+ schema = z.record(z.unknown());
129
+ else if (node.kind === "array")
130
+ schema = z.array(z.unknown());
131
+ else if (node.kind === "enum")
132
+ schema = z.enum(node.values);
133
+ else if (node.kind === "ref")
134
+ schema = compile(node.name);
135
+ else if (node.kind === "typed-array")
136
+ schema = z.array(compileNode(node.item));
137
+ else
138
+ schema = z.never();
139
+ return node.optional ? schema.optional() : schema;
140
+ };
141
+ const compile = (name) => {
142
+ if (cache[name])
143
+ return cache[name];
144
+ const shape = Object.create(null);
145
+ for (const [field, node] of Object.entries(parsed[name].fields))
146
+ shape[field] = compileNode(node);
147
+ const schema = z.object(shape).strict();
148
+ cache[name] = schema;
149
+ return schema;
150
+ };
151
+ for (const name of Object.keys(parsed))
152
+ compile(name);
153
+ return cache;
154
+ }
155
+ function compileFields(fields, contracts) {
156
+ const compileNode = (node) => {
157
+ let schema;
158
+ if (node.kind === "scalar")
159
+ schema = primitiveToZod(node.scalar);
160
+ else if (node.kind === "object")
161
+ schema = z.record(z.unknown());
162
+ else if (node.kind === "array")
163
+ schema = z.array(z.unknown());
164
+ else if (node.kind === "enum")
165
+ schema = z.enum(node.values);
166
+ else if (node.kind === "ref")
167
+ schema = contracts[node.name] ?? z.never();
168
+ else if (node.kind === "typed-array")
169
+ schema = z.array(compileNode(node.item));
170
+ else
171
+ schema = z.never();
172
+ return node.optional ? schema.optional() : schema;
173
+ };
174
+ const shape = Object.create(null);
175
+ for (const [field, node] of Object.entries(fields))
176
+ shape[field] = compileNode(node);
177
+ return z.object(shape).strict();
178
+ }
179
+ function containsPath(node, path, parsed) {
180
+ if (path.length === 0)
181
+ return true;
182
+ const [head, ...tail] = path;
183
+ if (node.kind === "ref")
184
+ return containsPathInContract(node.name, path, parsed);
185
+ if (node.kind === "typed-array")
186
+ return typeof head === "number" && containsPath(node.item, tail, parsed);
187
+ if (node.kind === "object")
188
+ return typeof head === "string" ? true : false;
189
+ if (node.kind === "array")
190
+ return typeof head === "number";
191
+ return false;
192
+ }
193
+ function containsPathInContract(name, path, parsed) {
194
+ if (path.length === 0)
195
+ return true;
196
+ const [head, ...tail] = path;
197
+ return typeof head === "string" && !!parsed[name]?.fields[head] && containsPath(parsed[name].fields[head], tail, parsed);
198
+ }
199
+ function containsPathInFields(fields, path, parsed) {
200
+ if (path.length === 0)
201
+ return true;
202
+ const [head, ...tail] = path;
203
+ return typeof head === "string" && !!fields[head] && containsPath(fields[head], tail, parsed);
204
+ }
205
+ function unknownContractIn(node, parsed) {
206
+ if (node.kind === "ref")
207
+ return parsed[node.name] ? undefined : node.name;
208
+ if (node.kind === "typed-array")
209
+ return unknownContractIn(node.item, parsed);
210
+ return undefined;
211
+ }
212
+ function leaves(value, path) {
213
+ if (typeof value === "string")
214
+ return [{ value, path: formatPath(path) }];
215
+ if (Array.isArray(value))
216
+ return value.flatMap((item, index) => leaves(item, [...path, index]));
217
+ if (value && typeof value === "object")
218
+ return Object.entries(value).flatMap(([key, item]) => leaves(item, [...path, key]));
219
+ return [];
220
+ }
221
+ function referencesInStep(step, base) {
222
+ const result = [];
223
+ const add = (value, path, fanoutStage = false) => {
224
+ result.push(...leaves(value, path).map((leaf) => ({ ...leaf, fanoutStage })));
225
+ };
226
+ if (step.do !== undefined)
227
+ add(step.do, [...base, "do"]);
228
+ if (step.when !== undefined)
229
+ add(step.when, [...base, "when"]);
230
+ if (step.set !== undefined)
231
+ add(step.set, [...base, "set"]);
232
+ if (step.run !== undefined && step.with !== undefined)
233
+ add(step.with, [...base, "with"]);
234
+ if (step.fanout !== undefined) {
235
+ add(step.fanout.over, [...base, "fanout", "over"]);
236
+ step.fanout.steps.forEach((stage, index) => {
237
+ add(stage.do, [...base, "fanout", "steps", index, "do"], true);
238
+ if (stage.when !== undefined)
239
+ add(stage.when, [...base, "fanout", "steps", index, "when"], true);
240
+ });
241
+ }
242
+ return result;
243
+ }
244
+ /** Mirrors engine.dependencies(): direct `after` plus direct step-output references. */
245
+ function dependencyIds(step) {
246
+ const dependencies = new Set(step.after ?? []);
247
+ for (const leaf of referencesInStep(step, [])) {
248
+ for (const extracted of extractReferences(leaf.value) ?? []) {
249
+ if (extracted.reference.kind === "step")
250
+ dependencies.add(extracted.reference.stepId);
251
+ }
252
+ }
253
+ return dependencies;
254
+ }
255
+ function addEdge(adjacency, edge) {
256
+ if (edge.from === edge.to)
257
+ return { code: "ROUTING_SELF_TARGET", path: edge.path, message: "routing edge targets itself" };
258
+ const queue = [edge.to];
259
+ const seen = new Set(queue);
260
+ while (queue.length > 0) {
261
+ const current = queue.shift();
262
+ if (current === edge.from) {
263
+ return { code: "ROUTING_CYCLE", path: edge.path, message: "routing edge creates a cycle" };
264
+ }
265
+ for (const next of adjacency.get(current) ?? []) {
266
+ if (!seen.has(next.to)) {
267
+ seen.add(next.to);
268
+ queue.push(next.to);
269
+ }
270
+ }
271
+ }
272
+ adjacency.set(edge.from, [...(adjacency.get(edge.from) ?? []), edge]);
273
+ return undefined;
274
+ }
275
+ function reaches(adjacency, from, target) {
276
+ const queue = [from];
277
+ const seen = new Set(queue);
278
+ while (queue.length > 0) {
279
+ const current = queue.shift();
280
+ if (current === target)
281
+ return true;
282
+ for (const edge of adjacency.get(current) ?? []) {
283
+ if (!seen.has(edge.to)) {
284
+ seen.add(edge.to);
285
+ queue.push(edge.to);
286
+ }
287
+ }
288
+ }
289
+ return false;
290
+ }
291
+ function flowEntries(spec) {
292
+ return Object.entries(spec.flows).filter(([name]) => name !== "entry");
293
+ }
294
+ function contractForStep(step, flows) {
295
+ if (step.do !== undefined || step.set !== undefined)
296
+ return step.out;
297
+ if (step.fanout !== undefined)
298
+ return step.fanout.steps.at(-1)?.out;
299
+ if (step.run !== undefined)
300
+ return flows[step.run]?.output.contract;
301
+ return undefined;
302
+ }
303
+ function preflightRuns(flows) {
304
+ for (const [flowName, flow] of Object.entries(flows)) {
305
+ for (const [index, step] of flow.steps.entries()) {
306
+ if (step.run === undefined)
307
+ continue;
308
+ const callee = flows[step.run];
309
+ if (!callee)
310
+ return { code: "SUBFLOW_UNKNOWN", path: `flows.${flowName}.steps[${index}].run`, message: `unknown subflow ${step.run}` };
311
+ const expected = Object.keys(callee.input).sort();
312
+ const actual = Object.keys(step.with ?? {}).sort();
313
+ if (expected.length !== actual.length || expected.some((key, keyIndex) => key !== actual[keyIndex])) {
314
+ return { code: "SUBFLOW_WITH_MISMATCH", path: `flows.${flowName}.steps[${index}].with`, message: "with keys must exactly match callee input" };
315
+ }
316
+ }
317
+ }
318
+ return undefined;
319
+ }
320
+ /** Validates all P0 structural and static-routing invariants. */
321
+ export function validateSpec(input) {
322
+ const structural = SpecificationSchema.safeParse(input);
323
+ if (!structural.success)
324
+ return { ok: false, errors: schemaErrors(structural.error) };
325
+ const spec = structural.data;
326
+ const contractsInput = spec.contracts;
327
+ const parsedResult = parseContracts(contractsInput);
328
+ if (!parsedResult.parsed)
329
+ return { ok: false, errors: parsedResult.errors };
330
+ const parsed = parsedResult.parsed;
331
+ const contracts = compileContracts(parsed);
332
+ const flows = Object.fromEntries(flowEntries(spec));
333
+ const inputs = Object.create(null);
334
+ if (!flows[spec.flows.entry])
335
+ return { ok: false, errors: [{ code: "FLOW_UNKNOWN_ENTRY", path: "flows.entry", message: "entry must name an existing flow" }] };
336
+ const runError = preflightRuns(flows);
337
+ if (runError)
338
+ return { ok: false, errors: [runError] };
339
+ for (const [flowName, flow] of Object.entries(flows)) {
340
+ if (!contracts[flow.output.contract])
341
+ return { ok: false, errors: [{ code: "CONTRACT_UNKNOWN_REF", path: `flows.${flowName}.output.contract`, message: "unknown output contract" }] };
342
+ const inputFields = {};
343
+ for (const [field, type] of Object.entries(flow.input)) {
344
+ const node = parseContractType(type);
345
+ if (!node)
346
+ return { ok: false, errors: [{ code: "CONTRACT_INVALID_TYPE", path: `flows.${flowName}.input.${field}`, message: "invalid input contract type" }] };
347
+ if (unknownContractIn(node, parsed))
348
+ return { ok: false, errors: [{ code: "CONTRACT_UNKNOWN_REF", path: `flows.${flowName}.input.${field}`, message: "unknown input contract reference" }] };
349
+ inputFields[field] = node;
350
+ }
351
+ inputs[flowName] = compileFields(inputFields, contracts);
352
+ const ids = new Map();
353
+ for (const [index, step] of flow.steps.entries()) {
354
+ if (ids.has(step.id))
355
+ return { ok: false, errors: [{ code: "STEP_DUPLICATE_ID", path: `flows.${flowName}.steps[${index}].id`, message: "duplicate step id" }] };
356
+ ids.set(step.id, { step, index });
357
+ if (step.fanout) {
358
+ for (const [stageIndex, stage] of step.fanout.steps.entries()) {
359
+ if (stage.out !== undefined && !contracts[stage.out]) {
360
+ return { ok: false, errors: [{ code: "CONTRACT_UNKNOWN_REF", path: `flows.${flowName}.steps[${index}].fanout.steps[${stageIndex}].out`, message: "unknown output contract" }] };
361
+ }
362
+ }
363
+ }
364
+ const out = contractForStep(step, flows);
365
+ if (out !== undefined && !contracts[out])
366
+ return { ok: false, errors: [{ code: "CONTRACT_UNKNOWN_REF", path: `flows.${flowName}.steps[${index}].out`, message: "unknown output contract" }] };
367
+ }
368
+ const adjacency = new Map();
369
+ const add = (edge) => {
370
+ if (!ids.has(edge.from))
371
+ return { code: "ROUTING_UNKNOWN_TARGET", path: edge.path, message: `unknown step ${edge.from}` };
372
+ if (!ids.has(edge.to))
373
+ return { code: "ROUTING_UNKNOWN_TARGET", path: edge.path, message: `unknown step ${edge.to}` };
374
+ return addEdge(adjacency, edge);
375
+ };
376
+ for (const [index, step] of flow.steps.entries()) {
377
+ const base = ["flows", flowName, "steps", index];
378
+ for (const [afterIndex, source] of (step.after ?? []).entries()) {
379
+ const error = add({ from: source, to: step.id, path: formatPath([...base, "after", afterIndex]) });
380
+ if (error)
381
+ return { ok: false, errors: [error] };
382
+ }
383
+ if (step.on_fail !== undefined) {
384
+ const error = add({ from: step.id, to: step.on_fail, path: formatPath([...base, "on_fail"]) });
385
+ if (error)
386
+ return { ok: false, errors: [error] };
387
+ }
388
+ for (const leaf of referencesInStep(step, base)) {
389
+ const extracted = extractReferences(leaf.value);
390
+ if (!extracted)
391
+ return { ok: false, errors: [{ code: "REF_INVALID", path: leaf.path, message: "invalid reference syntax" }] };
392
+ for (const extractedReference of extracted) {
393
+ const reference = extractedReference.reference;
394
+ if ((reference.kind === "item" || reference.kind === "prev") && !leaf.fanoutStage) {
395
+ return { ok: false, errors: [{ code: "REF_INVALID_SCOPE", path: leaf.path, message: `${reference.kind} is only available in fanout stages` }] };
396
+ }
397
+ if (reference.kind === "input" && !containsPathInFields(inputFields, reference.path, parsed)) {
398
+ return { ok: false, errors: [{ code: "REF_UNKNOWN_PATH", path: leaf.path, message: "unknown input path" }] };
399
+ }
400
+ if (reference.kind === "step") {
401
+ const source = ids.get(reference.stepId);
402
+ if (!source)
403
+ return { ok: false, errors: [{ code: "REF_UNKNOWN_STEP", path: leaf.path, message: `unknown step ${reference.stepId}` }] };
404
+ if (source.step.fanout !== undefined && !source.step.fanout.steps.at(-1)?.out) {
405
+ return { ok: false, errors: [{ code: "FANOUT_OUTPUT_REQUIRES_FINAL_OUT", path: `flows.${flowName}.steps[${source.index}].fanout.steps[${source.step.fanout.steps.length - 1}].out`, message: "fanout output requires final stage out" }] };
406
+ }
407
+ const sourceContract = contractForStep(source.step, flows);
408
+ if (!sourceContract)
409
+ return { ok: false, errors: [{ code: "REF_OUTPUT_CONTRACT_REQUIRED", path: leaf.path, message: "referenced output requires an out contract" }] };
410
+ if (source.step.fanout !== undefined) {
411
+ // A fanout's output is the ARRAY of per-item final-stage outputs:
412
+ // `${fan.output}` is the array itself, `${fan.output[0].field}`
413
+ // indexes an element — a bare field path is a type error.
414
+ const [head, ...rest] = reference.path;
415
+ if (reference.path.length > 0 && (typeof head !== "number" || !containsPathInContract(sourceContract, rest, parsed))) {
416
+ return { ok: false, errors: [{ code: "REF_UNKNOWN_PATH", path: leaf.path, message: "fanout output is an array — index it before accessing fields" }] };
417
+ }
418
+ }
419
+ else if (!containsPathInContract(sourceContract, reference.path, parsed)) {
420
+ return { ok: false, errors: [{ code: "REF_UNKNOWN_PATH", path: leaf.path, message: "unknown output path" }] };
421
+ }
422
+ for (const refEdge of referenceEdges(step.id, [extractedReference])) {
423
+ const error = add({ ...refEdge, path: leaf.path });
424
+ if (error)
425
+ return { ok: false, errors: [error] };
426
+ }
427
+ }
428
+ }
429
+ }
430
+ if (step.gate) {
431
+ for (const key of ["on_approve", "on_kill"]) {
432
+ const target = step.gate[key];
433
+ if (target !== null) {
434
+ const error = add({ from: step.id, to: target, path: formatPath([...base, "gate", key]) });
435
+ if (error)
436
+ return { ok: false, errors: [error] };
437
+ }
438
+ }
439
+ }
440
+ }
441
+ for (const [index, step] of flow.steps.entries()) {
442
+ // Fanout in non-entry flows is rejected later by the existing root-only
443
+ // rule; preserve that stable diagnostic ahead of consumer-specific rules.
444
+ if (flowName !== spec.flows.entry
445
+ || step.fanout?.dispatch !== "consumer"
446
+ || step.fanout.isolation !== "worktree")
447
+ continue;
448
+ for (const [stageIndex, stage] of step.fanout.steps.entries()) {
449
+ const ensureIndex = stage.ensure?.findIndex((predicate) => "file_exists" in predicate
450
+ || "file_contains" in predicate
451
+ || ("expr" in predicate && expressionUsesFilePredicate(predicate.expr))) ?? -1;
452
+ if (ensureIndex >= 0) {
453
+ return { ok: false, errors: [{
454
+ code: "CONSUMER_WORKTREE_FILESYSTEM_UNSUPPORTED",
455
+ path: `flows.${flowName}.steps[${index}].fanout.steps[${stageIndex}].ensure[${ensureIndex}]`,
456
+ message: "consumer worktree stages cannot use engine filesystem predicates",
457
+ }] };
458
+ }
459
+ if (stage.when !== undefined && expressionUsesFilePredicate(stage.when)) {
460
+ return { ok: false, errors: [{
461
+ code: "CONSUMER_WORKTREE_FILESYSTEM_UNSUPPORTED",
462
+ path: `flows.${flowName}.steps[${index}].fanout.steps[${stageIndex}].when`,
463
+ message: "consumer worktree stages cannot use engine filesystem predicates",
464
+ }] };
465
+ }
466
+ }
467
+ // The gate must be guaranteed to enter waiting_gate: a `when` can skip it
468
+ // (engine advance), and a routing target (on_fail/on_approve/on_kill)
469
+ // only activates when routed (engine.isActivated) — either would bypass
470
+ // the mandatory merge handshake.
471
+ const routedTargets = new Set();
472
+ for (const candidate of flow.steps) {
473
+ if (candidate.on_fail !== undefined)
474
+ routedTargets.add(candidate.on_fail);
475
+ if (candidate.gate?.on_approve)
476
+ routedTargets.add(candidate.gate.on_approve);
477
+ if (candidate.gate?.on_kill)
478
+ routedTargets.add(candidate.gate.on_kill);
479
+ }
480
+ const hasDirectGateSuccessor = flow.steps.some((candidate) => candidate.gate !== undefined
481
+ && candidate.when === undefined
482
+ && !routedTargets.has(candidate.id)
483
+ && dependencyIds(candidate).has(step.id));
484
+ if (!hasDirectGateSuccessor) {
485
+ return { ok: false, errors: [{
486
+ code: "CONSUMER_WORKTREE_GATE_REQUIRED",
487
+ path: `flows.${flowName}.steps[${index}].fanout.isolation`,
488
+ message: "consumer worktree fanout requires an unconditional, normally-activated direct-successor gate",
489
+ }] };
490
+ }
491
+ }
492
+ const reviseGates = flow.steps.flatMap((step, index) => step.gate?.on_revise ? [{ step, index, target: step.gate.on_revise }] : []);
493
+ if (reviseGates.length > 0 && flow.max_rounds === undefined) {
494
+ const revise = reviseGates[0];
495
+ return { ok: false, errors: [{ code: "GATE_REVISE_REQUIRES_MAX_ROUNDS", path: `flows.${flowName}.steps[${revise.index}].gate.on_revise`, message: "on_revise requires flow max_rounds" }] };
496
+ }
497
+ for (const revise of reviseGates) {
498
+ if (!ids.has(revise.target))
499
+ return { ok: false, errors: [{ code: "ROUTING_UNKNOWN_TARGET", path: `flows.${flowName}.steps[${revise.index}].gate.on_revise`, message: "unknown revise target" }] };
500
+ if (revise.target === revise.step.id) {
501
+ return { ok: false, errors: [{ code: "ROUTING_SELF_TARGET", path: `flows.${flowName}.steps[${revise.index}].gate.on_revise`, message: "routing edge targets itself" }] };
502
+ }
503
+ if (!reaches(adjacency, revise.target, revise.step.id)) {
504
+ return { ok: false, errors: [{ code: "GATE_REVISE_NOT_ANCESTOR", path: `flows.${flowName}.steps[${revise.index}].gate.on_revise`, message: "on_revise must target a strict ancestor" }] };
505
+ }
506
+ }
507
+ const outputRefs = extractReferences(flow.output.from);
508
+ if (!outputRefs || outputRefs.length !== 1 || !outputRefs[0].fullValue || outputRefs[0].reference.kind !== "step") {
509
+ return { ok: false, errors: [{ code: "REF_INVALID", path: `flows.${flowName}.output.from`, message: "flow output must be a full step-output reference" }] };
510
+ }
511
+ const outputReference = outputRefs[0].reference;
512
+ const source = ids.get(outputReference.stepId);
513
+ if (!source)
514
+ return { ok: false, errors: [{ code: "REF_UNKNOWN_STEP", path: `flows.${flowName}.output.from`, message: "unknown flow output source" }] };
515
+ if (source.step.fanout !== undefined && !source.step.fanout.steps.at(-1)?.out) {
516
+ return { ok: false, errors: [{ code: "FANOUT_OUTPUT_REQUIRES_FINAL_OUT", path: `flows.${flowName}.steps[${source.index}].fanout.steps[${source.step.fanout.steps.length - 1}].out`, message: "fanout output requires final stage out" }] };
517
+ }
518
+ const sourceContract = contractForStep(source.step, flows);
519
+ if (!sourceContract)
520
+ return { ok: false, errors: [{ code: "REF_OUTPUT_CONTRACT_REQUIRED", path: `flows.${flowName}.output.from`, message: "flow output source has no contract" }] };
521
+ if (source.step.fanout !== undefined) {
522
+ // Same array typing as ordinary refs — and the bare array itself can
523
+ // never satisfy an object flow contract, so it must be indexed here.
524
+ const [head, ...rest] = outputReference.path;
525
+ if (typeof head !== "number" || !containsPathInContract(sourceContract, rest, parsed)) {
526
+ return { ok: false, errors: [{ code: "REF_UNKNOWN_PATH", path: `flows.${flowName}.output.from`, message: "fanout output is an array — index it before using it as flow output" }] };
527
+ }
528
+ }
529
+ else if (!containsPathInContract(sourceContract, outputReference.path, parsed)) {
530
+ return { ok: false, errors: [{ code: "REF_UNKNOWN_PATH", path: `flows.${flowName}.output.from`, message: "unknown flow output path" }] };
531
+ }
532
+ }
533
+ const calls = new Map();
534
+ for (const [flowName, flow] of Object.entries(flows)) {
535
+ const flowCalls = [];
536
+ for (const [index, step] of flow.steps.entries()) {
537
+ if (step.run === undefined)
538
+ continue;
539
+ const path = `flows.${flowName}.steps[${index}].run`;
540
+ const callee = flows[step.run];
541
+ if (!callee)
542
+ return { ok: false, errors: [{ code: "SUBFLOW_UNKNOWN", path, message: `unknown subflow ${step.run}` }] };
543
+ const expected = Object.keys(callee.input).sort();
544
+ const actual = Object.keys(step.with ?? {}).sort();
545
+ if (expected.length !== actual.length || expected.some((key, keyIndex) => key !== actual[keyIndex])) {
546
+ return { ok: false, errors: [{ code: "SUBFLOW_WITH_MISMATCH", path: `flows.${flowName}.steps[${index}].with`, message: "with keys must exactly match callee input" }] };
547
+ }
548
+ flowCalls.push({ target: step.run, path });
549
+ }
550
+ calls.set(flowName, flowCalls);
551
+ }
552
+ const visited = new Set();
553
+ const visiting = new Set();
554
+ const walkCalls = (name) => {
555
+ visiting.add(name);
556
+ for (const call of calls.get(name) ?? []) {
557
+ if (visiting.has(call.target))
558
+ return { code: "SUBFLOW_RECURSIVE", path: call.path, message: "recursive subflow call" };
559
+ if (!visited.has(call.target)) {
560
+ const error = walkCalls(call.target);
561
+ if (error)
562
+ return error;
563
+ }
564
+ }
565
+ visiting.delete(name);
566
+ visited.add(name);
567
+ return undefined;
568
+ };
569
+ for (const name of Object.keys(flows)) {
570
+ if (!visited.has(name)) {
571
+ const error = walkCalls(name);
572
+ if (error)
573
+ return { ok: false, errors: [error] };
574
+ }
575
+ }
576
+ // One-level subflow gates are supported by the scoped gate state machine.
577
+ // Fanout and nested run remain forbidden in EVERY non-entry flow, reachable
578
+ // or not, so the v1 depth and fanout bounds stay intact.
579
+ for (const [flowName, flow] of Object.entries(flows)) {
580
+ if (flowName === spec.flows.entry)
581
+ continue;
582
+ for (const [index, step] of flow.steps.entries()) {
583
+ const kind = step.fanout !== undefined ? "fanout" : step.run !== undefined ? "run" : undefined;
584
+ if (kind !== undefined) {
585
+ return { ok: false, errors: [{
586
+ code: "SUBFLOW_BODY_RESTRICTED",
587
+ path: `flows.${flowName}.steps[${index}].${kind}`,
588
+ message: "non-entry flows may contain task steps only",
589
+ }] };
590
+ }
591
+ }
592
+ }
593
+ return { ok: true, value: spec, contracts, inputs };
594
+ }
595
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/ir/validate.ts"],"names":[],"mappings":"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"}