@bluewombat/runtime 0.9.0 → 0.10.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 (69) hide show
  1. package/README.md +122 -52
  2. package/SPECS.md +36 -14
  3. package/dist/cli.js +4 -4
  4. package/dist/config/agent-shorthand.d.ts +24 -3
  5. package/dist/config/agent-shorthand.d.ts.map +1 -1
  6. package/dist/config/agent-shorthand.js +64 -19
  7. package/dist/config/agent-shorthand.js.map +1 -1
  8. package/dist/config/home.d.ts +2 -0
  9. package/dist/config/home.d.ts.map +1 -1
  10. package/dist/config/home.js +2 -0
  11. package/dist/config/home.js.map +1 -1
  12. package/dist/config/load-config.d.ts.map +1 -1
  13. package/dist/config/load-config.js +298 -46
  14. package/dist/config/load-config.js.map +1 -1
  15. package/dist/config/parse-args.d.ts +1 -1
  16. package/dist/config/parse-args.d.ts.map +1 -1
  17. package/dist/config/parse-args.js +83 -56
  18. package/dist/config/parse-args.js.map +1 -1
  19. package/dist/config/types.d.ts +104 -16
  20. package/dist/config/types.d.ts.map +1 -1
  21. package/dist/config/types.js +13 -1
  22. package/dist/config/types.js.map +1 -1
  23. package/dist/loop/authority.d.ts +38 -1
  24. package/dist/loop/authority.d.ts.map +1 -1
  25. package/dist/loop/authority.js +41 -2
  26. package/dist/loop/authority.js.map +1 -1
  27. package/dist/loop/context.d.ts +16 -1
  28. package/dist/loop/context.d.ts.map +1 -1
  29. package/dist/loop/drive.d.ts +9 -3
  30. package/dist/loop/drive.d.ts.map +1 -1
  31. package/dist/loop/drive.js +17 -7
  32. package/dist/loop/drive.js.map +1 -1
  33. package/dist/loop/features.d.ts.map +1 -1
  34. package/dist/loop/features.js +322 -59
  35. package/dist/loop/features.js.map +1 -1
  36. package/dist/loop/open-host.d.ts.map +1 -1
  37. package/dist/loop/open-host.js +109 -7
  38. package/dist/loop/open-host.js.map +1 -1
  39. package/dist/loop/report.d.ts.map +1 -1
  40. package/dist/loop/report.js +21 -9
  41. package/dist/loop/report.js.map +1 -1
  42. package/dist/loop/trace.js +1 -1
  43. package/dist/loop/trace.js.map +1 -1
  44. package/dist/loop/transformers.d.ts +16 -2
  45. package/dist/loop/transformers.d.ts.map +1 -1
  46. package/dist/loop/transformers.js +137 -22
  47. package/dist/loop/transformers.js.map +1 -1
  48. package/dist/loop/warm.js +1 -1
  49. package/dist/loop/warm.js.map +1 -1
  50. package/dist/operator/agent-plugins.d.ts.map +1 -1
  51. package/dist/operator/agent-plugins.js +14 -8
  52. package/dist/operator/agent-plugins.js.map +1 -1
  53. package/dist/operator/doctor.d.ts +1 -1
  54. package/dist/operator/doctor.d.ts.map +1 -1
  55. package/dist/operator/doctor.js +79 -29
  56. package/dist/operator/doctor.js.map +1 -1
  57. package/dist/operator/explain.d.ts.map +1 -1
  58. package/dist/operator/explain.js +37 -8
  59. package/dist/operator/explain.js.map +1 -1
  60. package/dist/operator/film.js +0 -3
  61. package/dist/operator/film.js.map +1 -1
  62. package/dist/operator/init.js +13 -8
  63. package/dist/operator/init.js.map +1 -1
  64. package/dist/operator/log.js +9 -2
  65. package/dist/operator/log.js.map +1 -1
  66. package/dist/operator/setup.d.ts.map +1 -1
  67. package/dist/operator/setup.js +2 -0
  68. package/dist/operator/setup.js.map +1 -1
  69. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"agent-shorthand.js","sourceRoot":"","sources":["../../src/config/agent-shorthand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-shorthand.js","sourceRoot":"","sources":["../../src/config/agent-shorthand.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@ export declare const HOME_LAYOUT: {
11
11
  readonly workspaces: "workspaces";
12
12
  readonly ledger: "ledger";
13
13
  readonly workLine: "work-line";
14
+ readonly targetLine: "target-line";
15
+ readonly featureWorkspaces: "feature-workspaces";
14
16
  };
15
17
  export declare function homeOf(configDir: string, home: string | undefined): string;
16
18
  export declare function inHome(home: string, part: keyof typeof HOME_LAYOUT): string;
@@ -1 +1 @@
1
- {"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../src/config/home.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,aAAkB,CAAC;AAE5C,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX,wBAAgB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE1E;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,WAAW,GAAG,MAAM,CAE3E"}
1
+ {"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../src/config/home.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,aAAkB,CAAC;AAE5C,eAAO,MAAM,WAAW;;;;;;CAMd,CAAC;AAEX,wBAAgB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE1E;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,WAAW,GAAG,MAAM,CAE3E"}
@@ -13,6 +13,8 @@ export const HOME_LAYOUT = {
13
13
  workspaces: "workspaces",
14
14
  ledger: "ledger",
15
15
  workLine: "work-line",
16
+ targetLine: "target-line",
17
+ featureWorkspaces: "feature-workspaces",
16
18
  };
17
19
  export function homeOf(configDir, home) {
18
20
  return resolve(configDir, home ?? DEFAULT_HOME);
@@ -1 +1 @@
1
- {"version":3,"file":"home.js","sourceRoot":"","sources":["../../src/config/home.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,QAAQ,EAAE,CAAC;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,WAAW;CACb,CAAC;AAEX,MAAM,UAAU,MAAM,CAAC,SAAiB,EAAE,IAAwB;IAChE,OAAO,OAAO,CAAC,SAAS,EAAE,IAAI,IAAI,YAAY,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,IAA8B;IACjE,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"home.js","sourceRoot":"","sources":["../../src/config/home.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,QAAQ,EAAE,CAAC;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,WAAW;IACrB,UAAU,EAAE,aAAa;IACzB,iBAAiB,EAAE,oBAAoB;CAC/B,CAAC;AAEX,MAAM,UAAU,MAAM,CAAC,SAAiB,EAAE,IAAwB;IAChE,OAAO,OAAO,CAAC,SAAS,EAAE,IAAI,IAAI,YAAY,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,IAA8B;IACjE,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../../src/config/load-config.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAIV,SAAS,EAMV,MAAM,YAAY,CAAC;AA+BpB,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/F;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAiKrD"}
1
+ {"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../../src/config/load-config.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAIV,SAAS,EASV,MAAM,YAAY,CAAC;AA+CpB,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/F;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAuKrD"}
@@ -2,6 +2,7 @@ import { existsSync, readFileSync, statSync } from "node:fs";
2
2
  import { dirname, resolve } from "node:path";
3
3
  import { parse as parseYaml } from "yaml";
4
4
  import { expandAgentPass, readAgents, SHORT_PASS_KEYS, } from "./agent-shorthand.js";
5
+ import { SKIP_WHEN } from "./types.js";
5
6
  const KNOWN_KEYS = new Set([
6
7
  "featureTracker",
7
8
  "ticketTracker",
@@ -12,18 +13,33 @@ const KNOWN_KEYS = new Set([
12
13
  "persist",
13
14
  "agents",
14
15
  "builder",
15
- "assembly",
16
+ "ticket",
17
+ "feature",
16
18
  "authority",
17
19
  "observability",
18
20
  "timeoutMs",
19
- "maxRefusals",
20
21
  "pollIntervalMs",
21
22
  ]);
22
- const WORK_LINE_KEYS = new Set(["stable", "branch", "isolation", "isolationOptions", "warm"]);
23
+ const WORK_LINE_KEYS = new Set([
24
+ "stable",
25
+ "targetStable",
26
+ "branch",
27
+ "isolation",
28
+ "isolationOptions",
29
+ "warm",
30
+ ]);
23
31
  const PASS_KEYS = new Set(["cmd", "timeoutMs"]);
24
32
  const GATED_PASS_KEYS = new Set(["cmd", "timeoutMs", "gates"]);
25
- const STAGE_KEYS = new Set(["producer", "repair", "maxAttempts"]);
26
- const ASSEMBLY_KEYS = new Set(["fix", "validate", "maxAttempts", "gates"]);
33
+ const STAGE_KEYS = new Set(["tests", "e2e", "producer", "repair", "gates", "maxAttempts"]);
34
+ const TICKET_KEYS = new Set([
35
+ "maxParallel",
36
+ "maxAttempts",
37
+ "maxRefusals",
38
+ "fix",
39
+ "validate",
40
+ "gates",
41
+ ]);
42
+ const FEATURE_KEYS = new Set(["maxAttempts", "maxRefusals", "fix", "validate", "gates"]);
27
43
  const GATES_KEYS = new Set(["defaultTimeoutMs", "gates"]);
28
44
  const AUTHORITY_KEYS = new Set(["enabled", "publish", "refresh", "describe"]);
29
45
  const OBSERVABILITY_KEYS = new Set(["streams"]);
@@ -85,6 +101,9 @@ export function loadConfig(path) {
85
101
  if (workLine.stable !== undefined) {
86
102
  invocation.workLineStable = workLine.stable;
87
103
  }
104
+ if (workLine.targetStable !== undefined) {
105
+ invocation.workLineTargetStable = workLine.targetStable;
106
+ }
88
107
  if (workLine.branch !== undefined) {
89
108
  invocation.workLineBranch = workLine.branch;
90
109
  }
@@ -134,12 +153,19 @@ export function loadConfig(path) {
134
153
  }
135
154
  invocation.builder = builder.value;
136
155
  }
137
- if (object.assembly !== undefined) {
138
- const assembly = readAssembly(object.assembly, configDir, agents);
139
- if (assembly.ok === false) {
140
- return assembly;
156
+ if (object.ticket !== undefined) {
157
+ const ticket = readTicket(object.ticket, configDir, agents);
158
+ if (ticket.ok === false) {
159
+ return ticket;
141
160
  }
142
- invocation.assembly = assembly.value;
161
+ invocation.ticket = ticket.value;
162
+ }
163
+ if (object.feature !== undefined) {
164
+ const feature = readFeature(object.feature, configDir, agents);
165
+ if (feature.ok === false) {
166
+ return feature;
167
+ }
168
+ invocation.feature = feature.value;
143
169
  }
144
170
  if (object.authority !== undefined) {
145
171
  const authority = readAuthority(object.authority, configDir, agents);
@@ -162,15 +188,6 @@ export function loadConfig(path) {
162
188
  if (timeoutMs.value !== undefined) {
163
189
  invocation.timeoutMs = timeoutMs.value;
164
190
  }
165
- for (const key of ["maxRefusals"]) {
166
- const read = positiveIntField(object, key);
167
- if (read.ok === false) {
168
- return read;
169
- }
170
- if (read.value !== undefined) {
171
- invocation[key] = read.value;
172
- }
173
- }
174
191
  const pollIntervalMs = positiveIntField(object, "pollIntervalMs");
175
192
  if (pollIntervalMs.ok === false) {
176
193
  return pollIntervalMs;
@@ -178,8 +195,48 @@ export function loadConfig(path) {
178
195
  if (pollIntervalMs.value !== undefined) {
179
196
  invocation.pollIntervalMs = pollIntervalMs.value;
180
197
  }
198
+ const e2eRefusal = checkE2eDeclaration(invocation);
199
+ if (e2eRefusal !== undefined) {
200
+ return { ok: false, reason: e2eRefusal };
201
+ }
181
202
  return { ok: true, invocation };
182
203
  }
204
+ /**
205
+ * The e2e check is declared by a pair: `builder.e2e`, which makes the Ticket that holds the
206
+ * suite, and a Feature Gate with `skipWhen: skip-test-e2e`, which runs it. One without the other
207
+ * is a check that never runs or a Ticket nobody judges, so neither is accepted alone. A `skipWhen`
208
+ * outside a Feature's Gates has nothing to read.
209
+ */
210
+ function checkE2eDeclaration(invocation) {
211
+ const outside = [
212
+ ["builder.gates", invocation.builder?.producer.gates],
213
+ ["builder.tests.gates", invocation.builder?.tests?.gates],
214
+ ["builder.e2e.gates", invocation.builder?.e2e?.gates],
215
+ ["ticket.gates", invocation.ticket?.gates],
216
+ ["ticket.fix.gates", invocation.ticket?.fix?.gates],
217
+ ["ticket.validate.gates", invocation.ticket?.validate?.gates],
218
+ ];
219
+ for (const [key, gates] of outside) {
220
+ const bad = gates?.find((gate) => gate.skipWhen !== undefined);
221
+ if (bad !== undefined) {
222
+ return `Config "${key}" gate "${bad.id}" has "skipWhen", which only a Feature's gates (feature.validate, feature.gates, feature.fix) can have.`;
223
+ }
224
+ }
225
+ const feature = invocation.feature;
226
+ const skippable = [
227
+ ...(feature?.validate.gates ?? []),
228
+ ...(feature?.gates ?? []),
229
+ ...(feature?.fix.gates ?? []),
230
+ ].filter((gate) => gate.skipWhen === "skip-test-e2e");
231
+ const declared = invocation.builder?.e2e !== undefined;
232
+ if (skippable.length > 0 && !declared) {
233
+ return `Config gate "${skippable[0]?.id}" has "skipWhen: skip-test-e2e", so the e2e check is declared: "builder.e2e" is required (the pass that makes the Ticket holding the suite).`;
234
+ }
235
+ if (declared && feature !== undefined && skippable.length === 0) {
236
+ return 'Config "builder.e2e" is declared, but no Feature gate runs the suite. Add a gate to "feature.validate.gates" with "skipWhen: skip-test-e2e".';
237
+ }
238
+ return undefined;
239
+ }
183
240
  const MANAGER_SPEC_KEYS = new Set(["package", "options"]);
184
241
  function readManagerSpec(value, side) {
185
242
  if (value === undefined) {
@@ -257,6 +314,10 @@ function readWorkLine(value, configDir) {
257
314
  if (stable.ok === false) {
258
315
  return { ok: false, reason: `Config "workLine.stable" must be a non-empty string.` };
259
316
  }
317
+ const targetStable = stringField(object, "targetStable");
318
+ if (targetStable.ok === false) {
319
+ return { ok: false, reason: `Config "workLine.targetStable" must be a non-empty string.` };
320
+ }
260
321
  const branch = stringField(object, "branch");
261
322
  if (branch.ok === false) {
262
323
  return { ok: false, reason: `Config "workLine.branch" must be a non-empty string.` };
@@ -286,6 +347,9 @@ function readWorkLine(value, configDir) {
286
347
  return {
287
348
  ok: true,
288
349
  ...(stable.value === undefined ? {} : { stable: resolve(configDir, stable.value) }),
350
+ ...(targetStable.value === undefined
351
+ ? {}
352
+ : { targetStable: resolve(configDir, targetStable.value) }),
289
353
  ...(branch.value === undefined ? {} : { branch: branch.value }),
290
354
  ...(isolation.value === undefined ? {} : { isolation: isolation.value }),
291
355
  ...(isolationOptions === undefined
@@ -457,8 +521,9 @@ function readGates(value, configDir, key) {
457
521
  if (fallback.ok === false) {
458
522
  return { ok: false, reason: `Config "${key}.defaultTimeoutMs" must be a positive integer.` };
459
523
  }
524
+ // A bare `gates:` in YAML is a null: an empty list, written the short way.
460
525
  const entries = object.gates;
461
- if (entries === undefined) {
526
+ if (entries === undefined || entries === null) {
462
527
  return { ok: true, value: [] };
463
528
  }
464
529
  if (!Array.isArray(entries)) {
@@ -496,7 +561,19 @@ function readGates(value, configDir, key) {
496
561
  reason: `Config gate "${id}" has no "timeoutMs", and "${key}" names no "defaultTimeoutMs".`,
497
562
  };
498
563
  }
499
- gates.push({ id, argv: resolveArgv(argv, configDir), timeoutMs });
564
+ const skipWhen = entry.skipWhen;
565
+ if (skipWhen !== undefined && !SKIP_WHEN.includes(skipWhen)) {
566
+ return {
567
+ ok: false,
568
+ reason: `Config gate "${id}" has "skipWhen: ${String(skipWhen)}". Known: ${SKIP_WHEN.join(", ")}.`,
569
+ };
570
+ }
571
+ gates.push({
572
+ id,
573
+ argv: resolveArgv(argv, configDir),
574
+ timeoutMs,
575
+ ...(skipWhen === undefined ? {} : { skipWhen: skipWhen }),
576
+ });
500
577
  }
501
578
  return { ok: true, value: gates };
502
579
  }
@@ -505,7 +582,7 @@ function readGates(value, configDir, key) {
505
582
  *
506
583
  * `timeoutMs` is required: without it nothing bounds an agent, and an agent
507
584
  * that never returns is the failure this shape exists to prevent. `repair` and
508
- * `assembly` inherit both the command and the ceiling, so a Project with one
585
+ * `ticket` inherit both the command and the ceiling, so a Project with one
509
586
  * agent writes one command.
510
587
  */
511
588
  function readPass(value, configDir, key) {
@@ -538,12 +615,13 @@ function readPass(value, configDir, key) {
538
615
  };
539
616
  }
540
617
  /**
541
- * A command, and its own Gate sequence — `builder.producer`,
542
- * `builder.repair`, `assembly.fix`, `assembly.validate`. Deliberately its own
543
- * ~10 lines rather than a parameterized `readPass`: each reader's error
544
- * messages and key set stay independently legible.
618
+ * A command, and its own Gate sequence — `ticket.fix`, `ticket.validate`.
619
+ * `builder.producer` and `builder.repair` read the same shape with `gated`
620
+ * false: their Gates are the one `builder.gates` list, read by `readBuilder`.
621
+ * Deliberately its own ~10 lines rather than a parameterized `readPass`: each
622
+ * reader's error messages and key set stay independently legible.
545
623
  */
546
- function readGatedPass(value, configDir, key, agents) {
624
+ function readGatedPass(value, configDir, key, agents, gated = true) {
547
625
  if (value === null || typeof value !== "object" || Array.isArray(value)) {
548
626
  return {
549
627
  ok: false,
@@ -553,6 +631,13 @@ function readGatedPass(value, configDir, key, agents) {
553
631
  const object = value;
554
632
  const short = object.agent !== undefined;
555
633
  for (const name of Object.keys(object)) {
634
+ if (!gated && name === "gates") {
635
+ return {
636
+ ok: false,
637
+ reason: `Config "${key}" has no "gates". The builder's Gates are "builder.gates": ` +
638
+ "one list, judging the producer and the repair alike.",
639
+ };
640
+ }
556
641
  const known = GATED_PASS_KEYS.has(name) || (short && SHORT_PASS_KEYS.has(name));
557
642
  if (!known) {
558
643
  return { ok: false, reason: `Config "${key}" has unknown key "${name}".` };
@@ -593,6 +678,79 @@ function readGatedPass(value, configDir, key, agents) {
593
678
  }
594
679
  return { ok: true, value: { cmd, timeoutMs: timeoutMs.value, gates } };
595
680
  }
681
+ /**
682
+ * The pass that writes the tests first: an agent and the Gates that check what
683
+ * it wrote, or `agent: false` and nothing else, which writes none. Gates with
684
+ * no agent would have nothing to check, so they are refused rather than ignored.
685
+ */
686
+ function readTests(value, configDir, agents) {
687
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
688
+ return {
689
+ ok: false,
690
+ reason: 'Config "builder.tests" must be a YAML mapping with an agent (or "cmd") and "timeoutMs", or "agent: false".',
691
+ };
692
+ }
693
+ const object = value;
694
+ if (object.agent !== false) {
695
+ return readGatedPass(value, configDir, "builder.tests", agents, true);
696
+ }
697
+ for (const name of Object.keys(object)) {
698
+ if (name !== "agent" && name !== "gates") {
699
+ return {
700
+ ok: false,
701
+ reason: `Config "builder.tests" has "agent: false", so it has no "${name}": no tests are written first.`,
702
+ };
703
+ }
704
+ }
705
+ const emptyList = Array.isArray(object.gates) && object.gates.length === 0;
706
+ if (object.gates !== undefined && object.gates !== null && !emptyList) {
707
+ const gates = readGates(object.gates, configDir, "builder.tests.gates");
708
+ if (gates.ok === false) {
709
+ return gates;
710
+ }
711
+ if (gates.value.length > 0) {
712
+ return {
713
+ ok: false,
714
+ reason: 'Config "builder.tests" has "agent: false", so its gates would have no tests to check. Remove them, or give it an agent.',
715
+ };
716
+ }
717
+ }
718
+ return { ok: true, value: { agent: false, gates: [] } };
719
+ }
720
+ /**
721
+ * A review: an agent and its Gates, or `agent: false` and the Gates alone.
722
+ * The agent is turned off by saying so; a review with neither an agent nor a
723
+ * Gate would judge nothing, and is refused.
724
+ */
725
+ function readReview(value, configDir, key, agents) {
726
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
727
+ return {
728
+ ok: false,
729
+ reason: `Config "${key}" must be a YAML mapping with an agent (or "cmd") and "timeoutMs", or "agent: false" and "gates".`,
730
+ };
731
+ }
732
+ const object = value;
733
+ if (object.agent !== false) {
734
+ return readGatedPass(value, configDir, key, agents);
735
+ }
736
+ for (const name of Object.keys(object)) {
737
+ if (name !== "agent" && name !== "gates") {
738
+ return {
739
+ ok: false,
740
+ reason: `Config "${key}" has "agent: false", so it has no "${name}": only its "gates" run.`,
741
+ };
742
+ }
743
+ }
744
+ // No Gates either: the review is off, which is how a Project says it.
745
+ if (object.gates === undefined || object.gates === null) {
746
+ return { ok: true, value: { agent: false, gates: [] } };
747
+ }
748
+ const gates = readGates(object.gates, configDir, `${key}.gates`);
749
+ if (gates.ok === false) {
750
+ return gates;
751
+ }
752
+ return { ok: true, value: { agent: false, gates: gates.value } };
753
+ }
596
754
  /**
597
755
  * Making the unit of work: both passes named, neither borrowing the other's command.
598
756
  */
@@ -606,23 +764,53 @@ function readBuilder(value, configDir, agents) {
606
764
  return { ok: false, reason: `Config "builder" has unknown key "${name}".` };
607
765
  }
608
766
  }
767
+ if (object.tests === undefined) {
768
+ return {
769
+ ok: false,
770
+ reason: 'Config "builder" needs "tests": the agent that writes the tests before the code. To write none first, say "tests: { agent: false }".',
771
+ };
772
+ }
773
+ const readTestsPass = readTests(object.tests, configDir, agents);
774
+ if (readTestsPass.ok === false) {
775
+ return readTestsPass;
776
+ }
777
+ let e2e;
778
+ if (object.e2e !== undefined) {
779
+ const read = readGatedPass(object.e2e, configDir, "builder.e2e", agents);
780
+ if (read.ok === false) {
781
+ return read;
782
+ }
783
+ e2e = read.value;
784
+ }
609
785
  if (object.producer === undefined) {
610
786
  return { ok: false, reason: 'Config "builder" needs a "producer".' };
611
787
  }
612
788
  if (object.repair === undefined) {
613
789
  return { ok: false, reason: 'Config "builder" needs a "repair".' };
614
790
  }
615
- const readProducer = readGatedPass(object.producer, configDir, "builder.producer", agents);
791
+ const readProducer = readGatedPass(object.producer, configDir, "builder.producer", agents, false);
616
792
  if (readProducer.ok === false) {
617
793
  return readProducer;
618
794
  }
619
- const readRepair = readGatedPass(object.repair, configDir, "builder.repair", agents);
795
+ const readRepair = readGatedPass(object.repair, configDir, "builder.repair", agents, false);
620
796
  if (readRepair.ok === false) {
621
797
  return readRepair;
622
798
  }
799
+ let gates = [];
800
+ if (object.gates !== undefined) {
801
+ const read = readGates(object.gates, configDir, "builder.gates");
802
+ if (read.ok === false) {
803
+ return read;
804
+ }
805
+ gates = read.value;
806
+ }
807
+ // One list, two passes: a repair is judged by exactly what judged the producer,
808
+ // so it cannot undo what a Gate refused. Implementer still takes two sequences.
623
809
  const spec = {
624
- producer: readProducer.value,
625
- repair: readRepair.value,
810
+ tests: readTestsPass.value,
811
+ producer: { ...readProducer.value, gates },
812
+ repair: { ...readRepair.value, gates: [...gates] },
813
+ ...(e2e === undefined ? {} : { e2e }),
626
814
  };
627
815
  const maxAttempts = positiveIntField(object, "maxAttempts");
628
816
  if (maxAttempts.ok === false) {
@@ -637,47 +825,55 @@ function readBuilder(value, configDir, agents) {
637
825
  * Judging the assembled ticket. A command here is a fix of what a judgement
638
826
  * refused, not a second first-pass of the request.
639
827
  */
640
- function readAssembly(value, configDir, agents) {
828
+ function readTicket(value, configDir, agents) {
641
829
  if (value === null || typeof value !== "object" || Array.isArray(value)) {
642
- return { ok: false, reason: 'Config "assembly" must be a YAML mapping.' };
830
+ return { ok: false, reason: 'Config "ticket" must be a YAML mapping.' };
643
831
  }
644
832
  const object = value;
645
833
  for (const name of Object.keys(object)) {
646
834
  if (name === "producer" || name === "repair") {
647
835
  return {
648
836
  ok: false,
649
- reason: `Config "assembly" has no "${name}". The assembled ticket is judged ` +
650
- '("assembly.gates"); a refusal is "assembly.fix".',
837
+ reason: `Config "ticket" has no "${name}". The assembled ticket is judged ` +
838
+ '("ticket.gates"); a refusal is "ticket.fix".',
651
839
  };
652
840
  }
653
- if (!ASSEMBLY_KEYS.has(name)) {
654
- return { ok: false, reason: `Config "assembly" has unknown key "${name}".` };
841
+ if (!TICKET_KEYS.has(name)) {
842
+ return { ok: false, reason: `Config "ticket" has unknown key "${name}".` };
655
843
  }
656
844
  }
845
+ if (object.validate === undefined) {
846
+ return {
847
+ ok: false,
848
+ reason: 'Config "ticket" needs a "validate": the review of the assembled ticket. To turn it off, write "validate: { agent: false }".',
849
+ };
850
+ }
657
851
  const spec = { gates: [] };
658
852
  if (object.fix !== undefined) {
659
- const read = readGatedPass(object.fix, configDir, "assembly.fix", agents);
853
+ const read = readGatedPass(object.fix, configDir, "ticket.fix", agents);
660
854
  if (read.ok === false) {
661
855
  return read;
662
856
  }
663
857
  spec.fix = read.value;
664
858
  }
665
859
  if (object.validate !== undefined) {
666
- const read = readGatedPass(object.validate, configDir, "assembly.validate", agents);
860
+ const read = readReview(object.validate, configDir, "ticket.validate", agents);
667
861
  if (read.ok === false) {
668
862
  return read;
669
863
  }
670
864
  spec.validate = read.value;
671
865
  }
672
- const maxAttempts = positiveIntField(object, "maxAttempts");
673
- if (maxAttempts.ok === false) {
674
- return { ok: false, reason: 'Config "assembly.maxAttempts" must be a positive integer.' };
675
- }
676
- if (maxAttempts.value !== undefined) {
677
- spec.maxAttempts = maxAttempts.value;
866
+ for (const key of ["maxParallel", "maxAttempts", "maxRefusals"]) {
867
+ const read = positiveIntField(object, key);
868
+ if (read.ok === false) {
869
+ return { ok: false, reason: `Config "ticket.${key}" must be a positive integer.` };
870
+ }
871
+ if (read.value !== undefined) {
872
+ spec[key] = read.value;
873
+ }
678
874
  }
679
875
  if (object.gates !== undefined) {
680
- const gates = readGates(object.gates, configDir, "assembly.gates");
876
+ const gates = readGates(object.gates, configDir, "ticket.gates");
681
877
  if (gates.ok === false) {
682
878
  return gates;
683
879
  }
@@ -685,6 +881,62 @@ function readAssembly(value, configDir, agents) {
685
881
  }
686
882
  return { ok: true, value: spec };
687
883
  }
884
+ /**
885
+ * Judging a Feature's whole line, and repairing what that judgement refused.
886
+ * Its own gates, fix and budget: nothing is shared with a Ticket's.
887
+ */
888
+ function readFeature(value, configDir, agents) {
889
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
890
+ return { ok: false, reason: 'Config "feature" must be a YAML mapping.' };
891
+ }
892
+ const object = value;
893
+ for (const name of Object.keys(object)) {
894
+ if (!FEATURE_KEYS.has(name)) {
895
+ return { ok: false, reason: `Config "feature" has unknown key "${name}".` };
896
+ }
897
+ }
898
+ if (object.fix === undefined) {
899
+ return {
900
+ ok: false,
901
+ reason: 'Config "feature" needs a "fix": what repairs the line when its gates refuse it. There is no feature without one.',
902
+ };
903
+ }
904
+ if (object.validate === undefined) {
905
+ return {
906
+ ok: false,
907
+ reason: 'Config "feature" needs a "validate": the review of the whole line against the Feature\'s request, whose gates run the project\'s own checks on it.',
908
+ };
909
+ }
910
+ if (object.gates === undefined) {
911
+ return {
912
+ ok: false,
913
+ reason: 'Config "feature" needs "gates": what judges the published line before it is folded (the CI). They are not borrowed from "ticket".',
914
+ };
915
+ }
916
+ const validate = readReview(object.validate, configDir, "feature.validate", agents);
917
+ if (validate.ok === false) {
918
+ return validate;
919
+ }
920
+ const fix = readGatedPass(object.fix, configDir, "feature.fix", agents);
921
+ if (fix.ok === false) {
922
+ return fix;
923
+ }
924
+ const gates = readGates(object.gates, configDir, "feature.gates");
925
+ if (gates.ok === false) {
926
+ return gates;
927
+ }
928
+ const spec = { fix: fix.value, validate: validate.value, gates: gates.value };
929
+ for (const key of ["maxAttempts", "maxRefusals"]) {
930
+ const read = positiveIntField(object, key);
931
+ if (read.ok === false) {
932
+ return { ok: false, reason: `Config "feature.${key}" must be a positive integer.` };
933
+ }
934
+ if (read.value !== undefined) {
935
+ spec[key] = read.value;
936
+ }
937
+ }
938
+ return { ok: true, value: spec };
939
+ }
688
940
  /**
689
941
  * Flags whose value is a path this system writes to.
690
942
  *