@cat-factory/orchestration 0.172.1 → 0.174.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 (44) hide show
  1. package/dist/container.d.ts.map +1 -1
  2. package/dist/container.js +10 -1
  3. package/dist/container.js.map +1 -1
  4. package/dist/modules/execution/AgentContextBuilder.d.ts.map +1 -1
  5. package/dist/modules/execution/AgentContextBuilder.js +48 -2
  6. package/dist/modules/execution/AgentContextBuilder.js.map +1 -1
  7. package/dist/modules/execution/ExecutionService.d.ts +2 -0
  8. package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
  9. package/dist/modules/execution/ExecutionService.js +17 -7
  10. package/dist/modules/execution/ExecutionService.js.map +1 -1
  11. package/dist/modules/execution/PrReviewController.d.ts +39 -0
  12. package/dist/modules/execution/PrReviewController.d.ts.map +1 -1
  13. package/dist/modules/execution/PrReviewController.js +98 -0
  14. package/dist/modules/execution/PrReviewController.js.map +1 -1
  15. package/dist/modules/execution/RunAdmission.d.ts.map +1 -1
  16. package/dist/modules/execution/RunAdmission.js +10 -4
  17. package/dist/modules/execution/RunAdmission.js.map +1 -1
  18. package/dist/modules/execution/RunDispatcher.d.ts +2 -0
  19. package/dist/modules/execution/RunDispatcher.d.ts.map +1 -1
  20. package/dist/modules/execution/RunDispatcher.js +11 -0
  21. package/dist/modules/execution/RunDispatcher.js.map +1 -1
  22. package/dist/modules/execution/RunRepoOpsController.d.ts.map +1 -1
  23. package/dist/modules/execution/RunRepoOpsController.js +10 -2
  24. package/dist/modules/execution/RunRepoOpsController.js.map +1 -1
  25. package/dist/modules/execution/prReview.logic.d.ts.map +1 -1
  26. package/dist/modules/execution/prReview.logic.js +8 -0
  27. package/dist/modules/execution/prReview.logic.js.map +1 -1
  28. package/dist/modules/execution/prReviewSlices.logic.d.ts +71 -0
  29. package/dist/modules/execution/prReviewSlices.logic.d.ts.map +1 -0
  30. package/dist/modules/execution/prReviewSlices.logic.js +181 -0
  31. package/dist/modules/execution/prReviewSlices.logic.js.map +1 -0
  32. package/dist/modules/execution/stepGating.logic.d.ts +25 -1
  33. package/dist/modules/execution/stepGating.logic.d.ts.map +1 -1
  34. package/dist/modules/execution/stepGating.logic.js +30 -0
  35. package/dist/modules/execution/stepGating.logic.js.map +1 -1
  36. package/dist/modules/pipelines/PipelineService.d.ts +14 -1
  37. package/dist/modules/pipelines/PipelineService.d.ts.map +1 -1
  38. package/dist/modules/pipelines/PipelineService.js +21 -2
  39. package/dist/modules/pipelines/PipelineService.js.map +1 -1
  40. package/dist/modules/pipelines/pipelineShape.d.ts +48 -16
  41. package/dist/modules/pipelines/pipelineShape.d.ts.map +1 -1
  42. package/dist/modules/pipelines/pipelineShape.js +34 -19
  43. package/dist/modules/pipelines/pipelineShape.js.map +1 -1
  44. package/package.json +11 -11
@@ -1,4 +1,5 @@
1
1
  import type { PipelineAvailability, StepGating, StepOptions, TesterQualityConfig } from '@cat-factory/kernel';
2
+ import type { AgentKindRegistry } from '@cat-factory/agents';
2
3
  /**
3
4
  * How a run was LAUNCHED, threaded into {@link ExecutionService.start} so the launch-constraint
4
5
  * gate can reject a `'manual'` start of a `'recurring'`-only pipeline (and vice versa). A retry
@@ -34,21 +35,40 @@ export declare function pipelineHasEnabledBugIntake(agentKinds: string[], enable
34
35
  * validation enforces exactly that adjacency: a companion's nearest preceding enabled step
35
36
  * must be one of its targets. (The engine still reviews the nearest preceding target, but
36
37
  * that target is now guaranteed to be the immediate predecessor.)
37
- * - {@link assertValidGating}: a step gated on the task estimate must be a companion (the
38
- * only kind it is safe to skip skipping a producer would starve its downstream steps),
39
- * must set at least one axis threshold (or it would always skip), and needs a
40
- * `task-estimator` to have run before it (or the gate has nothing to consult).
38
+ * - {@link assertValidGating}: a step gated on the task estimate must declare itself GATABLE
39
+ * (`isGatableKind` a kind whose output later steps read as context rather than depend on
40
+ * structurally), must not also carry a human approval gate, must set at least one axis
41
+ * threshold (or it would always skip), and needs a `task-estimator` to have run before it (or
42
+ * the gate has nothing to consult).
41
43
  * - {@link assertValidTesterQualityGating}: the test quality-control companion's optional
42
44
  * estimate gate lives on the Tester step itself (not a companion row), so it is validated
43
45
  * separately — but under the same "threshold set + estimator earlier" rules, since a
44
46
  * QC gate with no estimator would silently never gate.
47
+ *
48
+ * Each check takes the whole shape rather than the two or three arrays it happens to read today:
49
+ * the gating check needed `gates` + the kind registry after the estimate-gating rules were
50
+ * generalised past companions, and threading those as further positional parameters through one
51
+ * of four otherwise-similar signatures is how these drift apart.
45
52
  */
46
53
  export interface PipelineShape {
47
54
  agentKinds: string[];
48
55
  enabled?: boolean[];
56
+ /**
57
+ * The per-step HUMAN approval gate flags. Read by {@link assertValidGating} to refuse a step
58
+ * that carries both a human gate and an estimate gate — the estimate may ADD a human
59
+ * checkpoint, never cancel one a pipeline author asked for.
60
+ */
61
+ gates?: boolean[];
49
62
  gating?: (StepGating | null)[];
50
63
  testerQuality?: (TesterQualityConfig | null)[];
51
64
  stepOptions?: (StepOptions | null)[];
65
+ /**
66
+ * The app-owned agent-kind registry, so a DEPLOYMENT-registered kind's own `gatable` flag is
67
+ * honoured. Absent ⇒ built-in kinds only, which is correct for a caller validating a built-in
68
+ * catalog (the kernel seed test) but would wrongly refuse a registered gatable kind at a
69
+ * boundary that has the registry — so both real boundaries (builder save, run start) pass it.
70
+ */
71
+ agentKindRegistry?: AgentKindRegistry;
52
72
  }
53
73
  export declare function validatePipelineShape(pipeline: PipelineShape): void;
54
74
  /**
@@ -58,7 +78,7 @@ export declare function validatePipelineShape(pipeline: PipelineShape): void;
58
78
  * since both boundaries share this validation) rather than failing deep in dispatch. A DISABLED
59
79
  * skill step never runs, so it imposes no requirement.
60
80
  */
61
- export declare function assertValidSkillSteps(agentKinds: string[], enabled?: boolean[], stepOptions?: (StepOptions | null)[]): void;
81
+ export declare function assertValidSkillSteps({ agentKinds, enabled, stepOptions }: PipelineShape): void;
62
82
  /**
63
83
  * A companion step is only valid when the step IMMEDIATELY before it (over the enabled
64
84
  * subset) produces output it is allowed to review (a step whose kind is in the companion's
@@ -68,23 +88,35 @@ export declare function assertValidSkillSteps(agentKinds: string[], enabled?: bo
68
88
  * producer and its companion". Companions are surfaced in the builder as toggles attached to
69
89
  * their producer and run immediately after it, so adjacency is required.
70
90
  */
71
- export declare function assertValidCompanionPlacement(agentKinds: string[], enabled?: boolean[]): void;
91
+ export declare function assertValidCompanionPlacement({ agentKinds, enabled }: PipelineShape): void;
72
92
  /**
73
93
  * Validate every ENABLED step that carries enabled estimate gating. A disabled gated step
74
- * never runs, so it imposes no requirement; an enabled one must satisfy all three rules:
94
+ * never runs, so it imposes no requirement; an enabled one must satisfy all four rules:
95
+ *
96
+ * 1. The gated step's kind must be GATABLE ({@link isGatableKind}). Gating means "skip this
97
+ * step when the task is light", which is safe for a kind whose output later steps read as
98
+ * CONTEXT (a design proposal, a research note, an extra verification pass) and unsafe for one
99
+ * some other mechanism reads STRUCTURALLY — `merger` (whose mere presence in `instance.steps`
100
+ * is what makes a committing kind deliver via a PR), `deployer` (which provisions the
101
+ * environment its consumer reads), `conflicts`/`ci` (the guards), `bug-intake` (the run's
102
+ * subject). Gatability is declared per kind rather than derived from a category, because the
103
+ * answer is a property of what the kind produces and who reads it.
75
104
  *
76
- * 1. The gated step must be a COMPANION kind. Gating means "skip this step when the task is
77
- * light", and skipping is only safe for a dependent companion skipping a producer
78
- * (coder / spec-writer / architect) would leave its downstream steps (tester, merger,
79
- * …) running against output that was never produced. (The consensus-gating sibling can
80
- * degrade to the standard agent; step-gating removes the step, so it is companion-only.)
81
- * 2. It must set at least one axis threshold. With none, the axis loop in
105
+ * This rule used to be "must be a COMPANION", on the reasoning that skipping a producer would
106
+ * starve downstream steps. The old catalog disproved it: `pl_simple` shipped with no architect
107
+ * and no spec-writer, `pl_quick` with no reviewer.
108
+ * 2. It must NOT also carry a human approval gate (`gates[i]`). The estimate may ADD a human
109
+ * checkpoint that is what gating a `human-review` step on risk does — but it may never
110
+ * CANCEL an approval pause the pipeline author asked for, which is what an estimate-gated
111
+ * human-gated step would do below its threshold. A model's own triage must not be able to
112
+ * decide that nobody needs to look.
113
+ * 3. It must set at least one axis threshold. With none, the axis loop in
82
114
  * `shouldRunGatedStep` never matches, so a step with an estimate would ALWAYS skip — the
83
115
  * opposite of the usual intent — making the toggle a silent footgun.
84
- * 3. An enabled `task-estimator` must run earlier in the chain, or the gate has no estimate
116
+ * 4. An enabled `task-estimator` must run earlier in the chain, or the gate has no estimate
85
117
  * to consult.
86
118
  */
87
- export declare function assertValidGating(agentKinds: string[], enabled?: boolean[], gating?: (StepGating | null)[]): void;
119
+ export declare function assertValidGating({ agentKinds, enabled, gates, gating, agentKindRegistry, }: PipelineShape): void;
88
120
  /**
89
121
  * Validate every ENABLED Tester step whose test quality-control companion carries an enabled
90
122
  * estimate gate. The QC gate lives on the Tester step itself (not a companion), so it is
@@ -94,7 +126,7 @@ export declare function assertValidGating(agentKinds: string[], enabled?: boolea
94
126
  * estimate to consult). The QC companion being enabled/disabled itself imposes no requirement —
95
127
  * only an enabled GATE does.
96
128
  */
97
- export declare function assertValidTesterQualityGating(agentKinds: string[], enabled?: boolean[], testerQuality?: (TesterQualityConfig | null)[]): void;
129
+ export declare function assertValidTesterQualityGating({ agentKinds, enabled, testerQuality, }: PipelineShape): void;
98
130
  /**
99
131
  * Enforce a pipeline's launch constraints (design §2 of the bug-triage pipeline):
100
132
  *
@@ -1 +1 @@
1
- {"version":3,"file":"pipelineShape.d.ts","sourceRoot":"","sources":["../../../src/modules/pipelines/pipelineShape.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EACV,WAAW,EACX,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAS5B;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAA;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,eAAe,CAAA;AAEjD;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAE9F;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,EAAE,CAAA;IACnB,MAAM,CAAC,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAA;IAC9B,aAAa,CAAC,EAAE,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE,CAAA;IAC9C,WAAW,CAAC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAA;CACrC;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAKnE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,CAAC,EAAE,OAAO,EAAE,EACnB,WAAW,CAAC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,GACnC,IAAI,CAUN;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAoB7F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,CAAC,EAAE,OAAO,EAAE,EACnB,MAAM,CAAC,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,GAC7B,IAAI,CA0BN;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,CAAC,EAAE,OAAO,EAAE,EACnB,aAAa,CAAC,EAAE,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE,GAC7C,IAAI,CAuBN;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAAE,EACpB,YAAY,EAAE,oBAAoB,GAAG,SAAS,EAC9C,MAAM,CAAC,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE,OAAO,EAAE,GAClB,IAAI,CAkBN"}
1
+ {"version":3,"file":"pipelineShape.d.ts","sourceRoot":"","sources":["../../../src/modules/pipelines/pipelineShape.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EACV,WAAW,EACX,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAQ5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAG5D;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAA;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,eAAe,CAAA;AAEjD;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAE9F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,EAAE,CAAA;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAA;IAC9B,aAAa,CAAC,EAAE,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE,CAAA;IAC9C,WAAW,CAAC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAA;IACpC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;CACtC;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAKnE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,aAAa,GAAG,IAAI,CAU/F;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,aAAa,GAAG,IAAI,CAoB1F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,OAAO,EACP,KAAK,EACL,MAAM,EACN,iBAAiB,GAClB,EAAE,aAAa,GAAG,IAAI,CA+BtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,EAC7C,UAAU,EACV,OAAO,EACP,aAAa,GACd,EAAE,aAAa,GAAG,IAAI,CAuBtB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAAE,EACpB,YAAY,EAAE,oBAAoB,GAAG,SAAS,EAC9C,MAAM,CAAC,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE,OAAO,EAAE,GAClB,IAAI,CAkBN"}
@@ -1,5 +1,5 @@
1
1
  import { ValidationError } from '@cat-factory/kernel';
2
- import { companionTargets, isCompanionKind, SKILL_AGENT_KIND, TASK_ESTIMATOR_AGENT_KIND, } from '@cat-factory/agents';
2
+ import { companionTargets, isCompanionKind, isGatableKind, SKILL_AGENT_KIND, TASK_ESTIMATOR_AGENT_KIND, } from '@cat-factory/agents';
3
3
  import { isTesterKind } from '../execution/ci.logic.js';
4
4
  /**
5
5
  * The `bug-intake` engine step pulls one issue from the schedule's configured tracker board, so
@@ -19,10 +19,10 @@ export function pipelineHasEnabledBugIntake(agentKinds, enabled) {
19
19
  return agentKinds.some((kind, i) => kind === BUG_INTAKE_AGENT_KIND && enabled?.[i] !== false);
20
20
  }
21
21
  export function validatePipelineShape(pipeline) {
22
- assertValidCompanionPlacement(pipeline.agentKinds, pipeline.enabled);
23
- assertValidGating(pipeline.agentKinds, pipeline.enabled, pipeline.gating);
24
- assertValidTesterQualityGating(pipeline.agentKinds, pipeline.enabled, pipeline.testerQuality);
25
- assertValidSkillSteps(pipeline.agentKinds, pipeline.enabled, pipeline.stepOptions);
22
+ assertValidCompanionPlacement(pipeline);
23
+ assertValidGating(pipeline);
24
+ assertValidTesterQualityGating(pipeline);
25
+ assertValidSkillSteps(pipeline);
26
26
  }
27
27
  /**
28
28
  * Every ENABLED `skill` step must name the skill it runs (`stepOptions[i].skillId`). The one
@@ -31,7 +31,7 @@ export function validatePipelineShape(pipeline) {
31
31
  * since both boundaries share this validation) rather than failing deep in dispatch. A DISABLED
32
32
  * skill step never runs, so it imposes no requirement.
33
33
  */
34
- export function assertValidSkillSteps(agentKinds, enabled, stepOptions) {
34
+ export function assertValidSkillSteps({ agentKinds, enabled, stepOptions }) {
35
35
  const isEnabled = (i) => enabled?.[i] !== false;
36
36
  for (let i = 0; i < agentKinds.length; i++) {
37
37
  if (agentKinds[i] !== SKILL_AGENT_KIND || !isEnabled(i))
@@ -50,7 +50,7 @@ export function assertValidSkillSteps(agentKinds, enabled, stepOptions) {
50
50
  * producer and its companion". Companions are surfaced in the builder as toggles attached to
51
51
  * their producer and run immediately after it, so adjacency is required.
52
52
  */
53
- export function assertValidCompanionPlacement(agentKinds, enabled) {
53
+ export function assertValidCompanionPlacement({ agentKinds, enabled }) {
54
54
  const isEnabled = (i) => enabled?.[i] !== false;
55
55
  for (let i = 0; i < agentKinds.length; i++) {
56
56
  const kind = agentKinds[i];
@@ -72,20 +72,32 @@ export function assertValidCompanionPlacement(agentKinds, enabled) {
72
72
  }
73
73
  /**
74
74
  * Validate every ENABLED step that carries enabled estimate gating. A disabled gated step
75
- * never runs, so it imposes no requirement; an enabled one must satisfy all three rules:
75
+ * never runs, so it imposes no requirement; an enabled one must satisfy all four rules:
76
76
  *
77
- * 1. The gated step must be a COMPANION kind. Gating means "skip this step when the task is
78
- * light", and skipping is only safe for a dependent companion skipping a producer
79
- * (coder / spec-writer / architect) would leave its downstream steps (tester, merger,
80
- * …) running against output that was never produced. (The consensus-gating sibling can
81
- * degrade to the standard agent; step-gating removes the step, so it is companion-only.)
82
- * 2. It must set at least one axis threshold. With none, the axis loop in
77
+ * 1. The gated step's kind must be GATABLE ({@link isGatableKind}). Gating means "skip this
78
+ * step when the task is light", which is safe for a kind whose output later steps read as
79
+ * CONTEXT (a design proposal, a research note, an extra verification pass) and unsafe for one
80
+ * some other mechanism reads STRUCTURALLY `merger` (whose mere presence in `instance.steps`
81
+ * is what makes a committing kind deliver via a PR), `deployer` (which provisions the
82
+ * environment its consumer reads), `conflicts`/`ci` (the guards), `bug-intake` (the run's
83
+ * subject). Gatability is declared per kind rather than derived from a category, because the
84
+ * answer is a property of what the kind produces and who reads it.
85
+ *
86
+ * This rule used to be "must be a COMPANION", on the reasoning that skipping a producer would
87
+ * starve downstream steps. The old catalog disproved it: `pl_simple` shipped with no architect
88
+ * and no spec-writer, `pl_quick` with no reviewer.
89
+ * 2. It must NOT also carry a human approval gate (`gates[i]`). The estimate may ADD a human
90
+ * checkpoint — that is what gating a `human-review` step on risk does — but it may never
91
+ * CANCEL an approval pause the pipeline author asked for, which is what an estimate-gated
92
+ * human-gated step would do below its threshold. A model's own triage must not be able to
93
+ * decide that nobody needs to look.
94
+ * 3. It must set at least one axis threshold. With none, the axis loop in
83
95
  * `shouldRunGatedStep` never matches, so a step with an estimate would ALWAYS skip — the
84
96
  * opposite of the usual intent — making the toggle a silent footgun.
85
- * 3. An enabled `task-estimator` must run earlier in the chain, or the gate has no estimate
97
+ * 4. An enabled `task-estimator` must run earlier in the chain, or the gate has no estimate
86
98
  * to consult.
87
99
  */
88
- export function assertValidGating(agentKinds, enabled, gating) {
100
+ export function assertValidGating({ agentKinds, enabled, gates, gating, agentKindRegistry, }) {
89
101
  if (!gating)
90
102
  return;
91
103
  const isEnabled = (i) => enabled?.[i] !== false;
@@ -94,8 +106,11 @@ export function assertValidGating(agentKinds, enabled, gating) {
94
106
  if (!g?.enabled || !isEnabled(i))
95
107
  continue;
96
108
  const kind = agentKinds[i];
97
- if (kind === undefined || !isCompanionKind(kind)) {
98
- throw new ValidationError(`Step '${kind}' cannot be estimate-gated — only companion steps (reviewer / architect-companion / spec-companion) may be skipped on the estimate.`);
109
+ if (kind === undefined || !isGatableKind(kind, agentKindRegistry)) {
110
+ throw new ValidationError(`Step '${kind}' cannot be estimate-gated — its output is required by the rest of the run. Only a step whose result later steps read as context (a design, a review, an extra verification pass) may be skipped on the estimate.`);
111
+ }
112
+ if (gates?.[i] === true) {
113
+ throw new ValidationError(`Step '${kind}' carries a human approval gate, so it cannot also be estimate-gated — the estimate may add a human checkpoint but never remove one. Drop the approval gate to make the step conditional, or drop the estimate gate to keep it unconditional.`);
99
114
  }
100
115
  if (g.minComplexity === undefined && g.minRisk === undefined && g.minImpact === undefined) {
101
116
  throw new ValidationError(`Step '${kind}' is estimate-gated but sets no threshold — set at least one of complexity / risk / impact, or it would always be skipped.`);
@@ -117,7 +132,7 @@ export function assertValidGating(agentKinds, enabled, gating) {
117
132
  * estimate to consult). The QC companion being enabled/disabled itself imposes no requirement —
118
133
  * only an enabled GATE does.
119
134
  */
120
- export function assertValidTesterQualityGating(agentKinds, enabled, testerQuality) {
135
+ export function assertValidTesterQualityGating({ agentKinds, enabled, testerQuality, }) {
121
136
  if (!testerQuality)
122
137
  return;
123
138
  const isEnabled = (i) => enabled?.[i] !== false;
@@ -1 +1 @@
1
- {"version":3,"file":"pipelineShape.js","sourceRoot":"","sources":["../../../src/modules/pipelines/pipelineShape.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipelineShape.js","sourceRoot":"","sources":["../../../src/modules/pipelines/pipelineShape.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/orchestration",
3
- "version": "0.172.1",
3
+ "version": "0.174.0",
4
4
  "description": "Delivery-workflow engine for the Agent Architecture Board (execution, bootstrap, pipelines, board, boardScan, requirements, and composition root).",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,20 +25,20 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "ai": "^7.0.37",
28
- "@cat-factory/agents": "0.89.1",
29
- "@cat-factory/caching": "0.11.25",
30
- "@cat-factory/contracts": "0.198.0",
31
- "@cat-factory/integrations": "0.112.0",
32
- "@cat-factory/kernel": "0.196.0",
33
- "@cat-factory/prompt-fragments": "0.15.21",
34
- "@cat-factory/sandbox": "0.11.10",
35
- "@cat-factory/spend": "0.12.126",
36
- "@cat-factory/workspaces": "0.21.3"
28
+ "@cat-factory/agents": "0.91.0",
29
+ "@cat-factory/caching": "0.11.27",
30
+ "@cat-factory/contracts": "0.200.0",
31
+ "@cat-factory/integrations": "0.113.1",
32
+ "@cat-factory/kernel": "0.198.0",
33
+ "@cat-factory/prompt-fragments": "0.15.23",
34
+ "@cat-factory/sandbox": "0.11.12",
35
+ "@cat-factory/spend": "0.12.128",
36
+ "@cat-factory/workspaces": "0.21.5"
37
37
  },
38
38
  "devDependencies": {
39
39
  "typescript": "7.0.2",
40
40
  "vitest": "^4.1.10",
41
- "@cat-factory/sandbox-fixtures": "0.7.229"
41
+ "@cat-factory/sandbox-fixtures": "0.7.231"
42
42
  },
43
43
  "scripts": {
44
44
  "build": "tsc -b tsconfig.build.json",