@cat-factory/server 0.321.0 → 0.323.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 (41) hide show
  1. package/dist/modules/assistant/AssistantController.d.ts.map +1 -1
  2. package/dist/modules/assistant/AssistantController.js +6 -0
  3. package/dist/modules/assistant/AssistantController.js.map +1 -1
  4. package/dist/modules/bugHunt/BugHuntController.d.ts.map +1 -1
  5. package/dist/modules/bugHunt/BugHuntController.js +8 -5
  6. package/dist/modules/bugHunt/BugHuntController.js.map +1 -1
  7. package/dist/modules/documents/DocumentSourceController.d.ts.map +1 -1
  8. package/dist/modules/documents/DocumentSourceController.js +4 -2
  9. package/dist/modules/documents/DocumentSourceController.js.map +1 -1
  10. package/dist/modules/providers/personalCredentialGate.d.ts +24 -0
  11. package/dist/modules/providers/personalCredentialGate.d.ts.map +1 -1
  12. package/dist/modules/providers/personalCredentialGate.js +62 -3
  13. package/dist/modules/providers/personalCredentialGate.js.map +1 -1
  14. package/dist/modules/publicApi/PublicApiController.d.ts.map +1 -1
  15. package/dist/modules/publicApi/PublicApiController.js +17 -0
  16. package/dist/modules/publicApi/PublicApiController.js.map +1 -1
  17. package/dist/modules/publicApi/decisions/gateRoutes.d.ts.map +1 -1
  18. package/dist/modules/publicApi/decisions/gateRoutes.js +26 -1
  19. package/dist/modules/publicApi/decisions/gateRoutes.js.map +1 -1
  20. package/dist/modules/publicApi/decisions/projection.d.ts +10 -1
  21. package/dist/modules/publicApi/decisions/projection.d.ts.map +1 -1
  22. package/dist/modules/publicApi/decisions/projection.js +97 -7
  23. package/dist/modules/publicApi/decisions/projection.js.map +1 -1
  24. package/dist/modules/publicApi/decisions/resumeBudget.d.ts +22 -0
  25. package/dist/modules/publicApi/decisions/resumeBudget.d.ts.map +1 -0
  26. package/dist/modules/publicApi/decisions/resumeBudget.js +41 -0
  27. package/dist/modules/publicApi/decisions/resumeBudget.js.map +1 -0
  28. package/dist/modules/publicApi/openapiDocument.generated.d.ts +1 -1
  29. package/dist/modules/publicApi/openapiDocument.generated.d.ts.map +1 -1
  30. package/dist/modules/publicApi/openapiDocument.generated.js +1 -1
  31. package/dist/modules/publicApi/openapiDocument.generated.js.map +1 -1
  32. package/dist/modules/publicApi/publicApiAdmission.d.ts +57 -27
  33. package/dist/modules/publicApi/publicApiAdmission.d.ts.map +1 -1
  34. package/dist/modules/publicApi/publicApiAdmission.js +108 -37
  35. package/dist/modules/publicApi/publicApiAdmission.js.map +1 -1
  36. package/dist/modules/sandbox/SandboxController.d.ts.map +1 -1
  37. package/dist/modules/sandbox/SandboxController.js +4 -1
  38. package/dist/modules/sandbox/SandboxController.js.map +1 -1
  39. package/dist/persistence/rpc-allowlist.d.ts +1 -1
  40. package/dist/persistence/rpc-allowlist.js +1 -1
  41. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"openapiDocument.generated.js","sourceRoot":"","sources":["../../../src/modules/publicApi/openapiDocument.generated.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,EAAE;AACF,0FAA0F;AAC1F,8FAA8F;AAC9F,8FAA8F;AAC9F,8EAA8E;AAE9E,MAAM,CAAC,MAAM,YAAY,GAAG,i/wvBAAi/wvB,CAAA"}
1
+ {"version":3,"file":"openapiDocument.generated.js","sourceRoot":"","sources":["../../../src/modules/publicApi/openapiDocument.generated.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,EAAE;AACF,0FAA0F;AAC1F,8FAA8F;AAC9F,8FAA8F;AAC9F,8EAA8E;AAE9E,MAAM,CAAC,MAAM,YAAY,GAAG,8y9vBAA8y9vB,CAAA"}
@@ -63,25 +63,42 @@ export declare const BINARY_CANDIDATE_PARK_SURFACE = "binary-candidates";
63
63
  export declare const PUBLIC_JOB_CANCEL_PATH = "POST /api/v1/jobs/:id/cancel";
64
64
  export declare const PUBLIC_TASK_STOP_PATH = "POST /api/v1/tasks/:taskId/stop";
65
65
  /**
66
- * The park surfaces `/api/v1/runs/:runId/decisions` can actually ANSWER today.
66
+ * The park surfaces `/api/v1/runs/:runId/decisions` can actually ANSWER today, each mapped to the
67
+ * `decisions[]` entry that answers it.
67
68
  *
68
- * Deliberately a SEPARATE set from {@link PARKING_INLINE_KINDS}, because the asymmetry between the
69
- * two is the thing worth stating: admission decides what a `decide` key may set in motion, and
69
+ * Deliberately a SEPARATE table from {@link PARKING_INLINE_KINDS}, because the asymmetry between
70
+ * the two is the thing worth stating: admission decides what a `decide` key may set in motion, and
70
71
  * this decides what the refusal is allowed to PROMISE it can then answer.
71
72
  *
72
73
  * Keeping the answerable set EXPLICIT rather than implied is what stops the refusal below drifting
73
- * from what the surface really serves: landing a slice moves a member here and the message it
74
+ * from what the surface really serves: landing a slice adds a member here and the message it
74
75
  * builds updates itself, where a hand-written sentence would keep promising an answer path that
75
76
  * does not exist — which is exactly the defect this replaced.
76
77
  *
77
- * TWO members of {@link parkSurfacesOf} are absent, for opposite reasons. `human-review` is not a
78
- * slice waiting to be built: its answer is a person approving the pull request on the VCS host,
79
- * not an API call this surface could offer. {@link BINARY_CANDIDATE_PARK_SURFACE} is the other
80
- * way round, a real route not yet projected onto `/api/v1`. Either way a run parked there is
81
- * honestly reported as `parked: true` with nothing to answer and the refusal says as much. See
78
+ * A MAP rather than a set, because a park surface and the decision kind that answers it are not
79
+ * always spelled the same, and the refusal is read by somebody who then has to FIND the entry:
80
+ * the `pr-reviewer` step is answered by `kind: 'pr-review'`, and both brainstorm kinds are
81
+ * answered by the one `kind: 'brainstorm'`. Naming the surface in a message that points at
82
+ * `decisions[]` sent an integration looking for a kind that is never in it. The values are typed
83
+ * against {@link PublicDecisionKind}, so a kind that does not exist on the wire fails to compile
84
+ * and a decision kind renamed on that side breaks the build here rather than the message.
85
+ *
86
+ * THREE members of {@link parkSurfacesOf} are absent, for three different reasons:
87
+ *
88
+ * - `human-review` is not a slice waiting to be built: its answer is a person approving the pull
89
+ * request on the VCS host, not an API call this surface could offer.
90
+ * - {@link BINARY_CANDIDATE_PARK_SURFACE} is the other way round, a real route not yet projected
91
+ * onto `/api/v1`.
92
+ * - `bug-fisher` (a curating kind, like `pr-reviewer` below, which IS here) parks so a person can
93
+ * mark which of the bugs it found are worth fixing, and marking has no public route at all yet.
94
+ *
95
+ * Either way a run parked there is honestly reported as `parked: true` with the wait NAMED in
96
+ * `unanswerable` and nothing offered to answer it, and the refusal says as much. That report is
97
+ * built from THIS table too (`curationWait`), so what the start surface refuses and what the
98
+ * decision surface admits it cannot answer are one decision. See
82
99
  * `backend/docs/adr/0043-public-decision-surface.md`.
83
100
  */
84
- export declare const PUBLICLY_ANSWERABLE_PARK_SURFACES: Set<string>;
101
+ export declare const PUBLICLY_ANSWERABLE_PARK_SURFACES: Map<string, "agent-decision" | "approval-gate" | "brainstorm" | "clarity-review" | "follow-ups" | "fork" | "human-test" | "input-gate" | "interview" | "judge" | "pr-review" | "requirements-review" | "visual-confirmation">;
85
102
  /** The pipeline shape admission reasons about: the step chain plus its parallel flag arrays. */
86
103
  export interface AdmissiblePipelineShape {
87
104
  agentKinds: string[];
@@ -135,14 +152,15 @@ export declare function admissionRegistries(source: {
135
152
  }): AdmissionRegistries;
136
153
  /**
137
154
  * Whether a pipeline can PARK the run on a human decision: an approval gate on an enabled step, one
138
- * of the {@link PARKING_INLINE_KINDS} review/brainstorm kinds, or a gate that waits on a person
139
- * with no deadline ({@link isHumanWaitGate}). Parking is not a defect: it is the clarification
140
- * loop. It just needs an answerer, which is what the `decide` scope asserts.
155
+ * of the {@link PARKING_INLINE_KINDS} review/brainstorm kinds, a gate that waits on a person with
156
+ * no deadline ({@link isHumanWaitGate}), or a step that curates ({@link isCurationGate}). Parking
157
+ * is not a defect: it is the clarification loop. It just needs an answerer, which is what the
158
+ * `decide` scope asserts.
141
159
  */
142
160
  export declare function canParkOnHuman(pipeline: AdmissiblePipelineShape, registries: AdmissionRegistries): boolean;
143
161
  /**
144
162
  * Every park surface an ENABLED step of `pipeline` can put the run on, in step order and deduped.
145
- * Five mechanisms, each a separate check because each parks for a different reason:
163
+ * Six mechanisms, each a separate check because each parks for a different reason:
146
164
  *
147
165
  * 1. an approval gate flag on the step ({@link APPROVAL_GATE_PARK_SURFACE});
148
166
  * 2. the step's own kind being an inline review/brainstorm ({@link PARKING_INLINE_KINDS});
@@ -150,19 +168,24 @@ export declare function canParkOnHuman(pipeline: AdmissiblePipelineShape, regist
150
168
  * ({@link isHumanWaitGate});
151
169
  * 4. the step's own kind carrying the `interview-gate` TRAIT ({@link INTERVIEW_PARK_SURFACE});
152
170
  * 5. the step's OPTIONS configuring a binary-candidate comparison
153
- * ({@link BINARY_CANDIDATE_PARK_SURFACE}).
171
+ * ({@link BINARY_CANDIDATE_PARK_SURFACE});
172
+ * 6. the step's own kind carrying the `curation-gate` TRAIT ({@link isCurationGate}).
154
173
  *
155
174
  * This is the single enumeration {@link canParkOnHuman} derives its boolean from, so the predicate
156
175
  * and the explanation a caller is given can never disagree about what parks.
157
176
  *
158
- * Cases 4 and 5 each arrived after the earlier ones had shipped, which is the lesson the human-wait
159
- * gates already taught repeating itself: an enumeration written against the park mechanisms
160
- * somebody thought of misses the ones they did not, so ask what each entry is DERIVED from. Cases
161
- * 2, 3 and 4 derive from a declaration a deployment's own registrations flow through (a kind list,
162
- * a gate's registered `pollExhaustion`, a registered trait). Case 5 derives from the step's stored
163
- * configuration, which is the same property one level down: it is what a deployment AUTHORS rather
164
- * than what it registers, and it was invisible here until a shipped preset finally set it.
165
- * Whatever is added next should be derivable too.
177
+ * Cases 4, 5 and 6 each arrived after the earlier ones had shipped, which is the lesson the
178
+ * human-wait gates already taught repeating itself: an enumeration written against the park
179
+ * mechanisms somebody thought of misses the ones they did not, so ask what each entry is DERIVED
180
+ * from. Cases 2, 3, 4 and 6 derive from a declaration a deployment's own registrations flow
181
+ * through (a kind list, a gate's registered `pollExhaustion`, a registered trait). Case 5 derives
182
+ * from the step's stored configuration, which is the same property one level down: it is what a
183
+ * deployment AUTHORS rather than what it registers, and it was invisible here until a shipped
184
+ * preset finally set it. Whatever is added next should be derivable too.
185
+ *
186
+ * Case 6 is the one that had been missed LONGEST, and the shape of the miss is worth keeping: the
187
+ * two kinds that carry it park through machinery of their OWN rather than through anything shared,
188
+ * so there was no declaration to read until the trait was added to make one.
166
189
  *
167
190
  * TWO THINGS ARE DELIBERATELY NOT HERE, and they are absent for two different reasons:
168
191
  *
@@ -192,10 +215,17 @@ export declare function parkSurfacesOf(pipeline: AdmissiblePipelineShape, regist
192
215
  * got a run whose only exit is `POST /api/v1/jobs/:id/cancel` — the platform's degrade-loudly rule
193
216
  * inverted, since the refusal was confidently describing a capability it does not have.
194
217
  *
195
- * Both public start paths apply the parking rule now: `POST /jobs` always has, and
196
- * `POST /tasks/:taskId/start` adopted it with the API-stability commitment (the tracker's open
197
- * question, settled): a `write` key must not be able to set in motion a park it is by definition
198
- * not trusted to answer.
218
+ * Every public path that sets a run in motion applies the parking rule now: `POST /jobs` always
219
+ * has, `POST /tasks/:taskId/start` adopted it with the API-stability commitment (the tracker's
220
+ * open question, settled), and `POST /tasks/:taskId/retry` re-drives the run's STORED steps under
221
+ * the same rule. A `write` key must not be able to set in motion a park it is by definition not
222
+ * trusted to answer, and which of the three calls started it makes no difference to that.
223
+ *
224
+ * The park surfaces are listed verbatim (they are what a reader matches against the pipeline's own
225
+ * steps) while the answer promise names DECISION KINDS, out of
226
+ * {@link PUBLICLY_ANSWERABLE_PARK_SURFACES}. Three surfaces are spelled differently in the two
227
+ * places, so naming the surface in a sentence that points at `decisions[]` told an integration to
228
+ * look for a `pr-reviewer` entry that is never there.
199
229
  *
200
230
  * `cancelPath` is REQUIRED rather than defaulted, because which route frees an abandoned park is a
201
231
  * property of the START SURFACE and every surface answers differently: a headless job is cancelled
@@ -1 +1 @@
1
- {"version":3,"file":"publicApiAdmission.d.ts","sourceRoot":"","sources":["../../../src/modules/publicApi/publicApiAdmission.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,KAAK,iBAAiB,EAQvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,oBAAoB,aAK/B,CAAA;AASF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,eAAe,CAAA;AAuBnD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,6BAA6B,sBAAsB,CAAA;AA8BhE;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,iCAAiC,CAAA;AACpE,eAAO,MAAM,qBAAqB,oCAAoC,CAAA;AAEtE;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,iCAAiC,aAQ5C,CAAA;AAEF,gGAAgG;AAChG,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,6FAA6F;IAC7F,OAAO,CAAC,EAAE,OAAO,EAAE,CAAA;IACnB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;IACjB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;QAAE,YAAY,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,OAAO,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAA;CACjG;AASD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,uBAAuB,EACjC,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAIT;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,UAAU,EAAE,iBAAiB,CAAA;IAC7B,2GAA2G;IAC3G,KAAK,EAAE,YAAY,CAAA;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,YAAY,EAAE,YAAY,CAAA;CAC3B,GAAG,mBAAmB,CAEtB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,uBAAuB,EACjC,UAAU,EAAE,mBAAmB,GAC9B,OAAO,CAET;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,uBAAuB,EACjC,UAAU,EAAE,mBAAmB,GAC9B,MAAM,EAAE,CAeV;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAgBjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,uBAAuB,EACjC,UAAU,EAAE,mBAAmB,EAC/B,OAAO,EAAE;IAAE,eAAe,EAAE,OAAO,CAAA;CAAE,GACpC,MAAM,EAAE,CAKV;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,uBAAuB,EACjC,UAAU,EAAE,mBAAmB,GAC9B,OAAO,CAIT"}
1
+ {"version":3,"file":"publicApiAdmission.d.ts","sourceRoot":"","sources":["../../../src/modules/publicApi/publicApiAdmission.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,KAAK,iBAAiB,EAUvB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,oBAAoB,aAK/B,CAAA;AASF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,eAAe,CAAA;AAuBnD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,6BAA6B,sBAAsB,CAAA;AAkDhE;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,iCAAiC,CAAA;AACpE,eAAO,MAAM,qBAAqB,oCAAoC,CAAA;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,iCAAiC,+NAW5C,CAAA;AAEF,gGAAgG;AAChG,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,6FAA6F;IAC7F,OAAO,CAAC,EAAE,OAAO,EAAE,CAAA;IACnB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;IACjB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;QAAE,YAAY,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,OAAO,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAA;CACjG;AASD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,uBAAuB,EACjC,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAIT;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,UAAU,EAAE,iBAAiB,CAAA;IAC7B,2GAA2G;IAC3G,KAAK,EAAE,YAAY,CAAA;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,YAAY,EAAE,YAAY,CAAA;CAC3B,GAAG,mBAAmB,CAEtB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,uBAAuB,EACjC,UAAU,EAAE,mBAAmB,GAC9B,OAAO,CAET;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,uBAAuB,EACjC,UAAU,EAAE,mBAAmB,GAC9B,MAAM,EAAE,CAwBV;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CA2BjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,uBAAuB,EACjC,UAAU,EAAE,mBAAmB,EAC/B,OAAO,EAAE;IAAE,eAAe,EAAE,OAAO,CAAA;CAAE,GACpC,MAAM,EAAE,CAKV;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,uBAAuB,EACjC,UAAU,EAAE,mBAAmB,GAC9B,OAAO,CAIT"}
@@ -10,7 +10,7 @@
10
10
  // cross-runtime conformance suite.
11
11
  //
12
12
  // See backend/docs/adr/0047-headless-clarification-loop.md (D1).
13
- import { ARCHITECTURE_BRAINSTORM_AGENT_KIND, CLARITY_REVIEW_AGENT_KIND, hasTrait, INTERVIEW_GATE_TRAIT, isInlineModelStep, REQUIREMENTS_BRAINSTORM_AGENT_KIND, REQUIREMENTS_REVIEW_AGENT_KIND, } from '@cat-factory/agents';
13
+ import { ARCHITECTURE_BRAINSTORM_AGENT_KIND, CLARITY_REVIEW_AGENT_KIND, CURATION_GATE_TRAIT, INTERVIEW_GATE_TRAIT, isInlineModelStep, PR_REVIEWER_KIND, REQUIREMENTS_BRAINSTORM_AGENT_KIND, REQUIREMENTS_REVIEW_AGENT_KIND, traitsFor, } from '@cat-factory/agents';
14
14
  /**
15
15
  * Inline agent kinds that PARK a run on a human/gate decision. This MUST list every
16
16
  * inline-and-parking kind: the two review gates AND the two brainstorm dialogues (all four set the
@@ -96,6 +96,25 @@ const INTERVIEW_PARK_SURFACE = 'interview';
96
96
  * Over-counting is the safe direction here, the same way the interview gate's is.
97
97
  */
98
98
  export const BINARY_CANDIDATE_PARK_SURFACE = 'binary-candidates';
99
+ /**
100
+ * Whether a step's kind CURATES: its completion parks the run so a person can pick which of the
101
+ * things it found are worth acting on, read off the kind's registered `curation-gate` trait.
102
+ *
103
+ * A SIXTH mechanism, and the one that shows the enumeration's lesson has not run out. Every check
104
+ * above reads a park the engine raises through shared machinery (an approval flag, an inline
105
+ * review, a gate's `pollExhaustion`, an interview gate, a step option). A curation step raises its
106
+ * own: each kind's completion interceptor writes its own state shape (`step.prReview`,
107
+ * `step.bugFishing`) and parks from there, so there was no shared declaration to read and the park
108
+ * was invisible here. `pl_review` and `pl_bug_fishing` are single-step pipelines built out of
109
+ * exactly those kinds, so both reported NO park surface and a plain `write` key could start either
110
+ * and then hold a run whose every verb needs `decide`.
111
+ *
112
+ * Derived from a registration rather than a kind list, like the interview gate and for the same
113
+ * reason: a deployment that curates through its own registered kind is seen with no edit here.
114
+ */
115
+ function isCurationGate(traits) {
116
+ return traits.has(CURATION_GATE_TRAIT);
117
+ }
99
118
  /**
100
119
  * Whether a polling-GATE kind parks the run on a human, read off the gate's OWN registration.
101
120
  *
@@ -132,32 +151,52 @@ function isHumanWaitGate(kind, gates) {
132
151
  export const PUBLIC_JOB_CANCEL_PATH = 'POST /api/v1/jobs/:id/cancel';
133
152
  export const PUBLIC_TASK_STOP_PATH = 'POST /api/v1/tasks/:taskId/stop';
134
153
  /**
135
- * The park surfaces `/api/v1/runs/:runId/decisions` can actually ANSWER today.
154
+ * The park surfaces `/api/v1/runs/:runId/decisions` can actually ANSWER today, each mapped to the
155
+ * `decisions[]` entry that answers it.
136
156
  *
137
- * Deliberately a SEPARATE set from {@link PARKING_INLINE_KINDS}, because the asymmetry between the
138
- * two is the thing worth stating: admission decides what a `decide` key may set in motion, and
157
+ * Deliberately a SEPARATE table from {@link PARKING_INLINE_KINDS}, because the asymmetry between
158
+ * the two is the thing worth stating: admission decides what a `decide` key may set in motion, and
139
159
  * this decides what the refusal is allowed to PROMISE it can then answer.
140
160
  *
141
161
  * Keeping the answerable set EXPLICIT rather than implied is what stops the refusal below drifting
142
- * from what the surface really serves: landing a slice moves a member here and the message it
162
+ * from what the surface really serves: landing a slice adds a member here and the message it
143
163
  * builds updates itself, where a hand-written sentence would keep promising an answer path that
144
164
  * does not exist — which is exactly the defect this replaced.
145
165
  *
146
- * TWO members of {@link parkSurfacesOf} are absent, for opposite reasons. `human-review` is not a
147
- * slice waiting to be built: its answer is a person approving the pull request on the VCS host,
148
- * not an API call this surface could offer. {@link BINARY_CANDIDATE_PARK_SURFACE} is the other
149
- * way round, a real route not yet projected onto `/api/v1`. Either way a run parked there is
150
- * honestly reported as `parked: true` with nothing to answer and the refusal says as much. See
166
+ * A MAP rather than a set, because a park surface and the decision kind that answers it are not
167
+ * always spelled the same, and the refusal is read by somebody who then has to FIND the entry:
168
+ * the `pr-reviewer` step is answered by `kind: 'pr-review'`, and both brainstorm kinds are
169
+ * answered by the one `kind: 'brainstorm'`. Naming the surface in a message that points at
170
+ * `decisions[]` sent an integration looking for a kind that is never in it. The values are typed
171
+ * against {@link PublicDecisionKind}, so a kind that does not exist on the wire fails to compile
172
+ * and a decision kind renamed on that side breaks the build here rather than the message.
173
+ *
174
+ * THREE members of {@link parkSurfacesOf} are absent, for three different reasons:
175
+ *
176
+ * - `human-review` is not a slice waiting to be built: its answer is a person approving the pull
177
+ * request on the VCS host, not an API call this surface could offer.
178
+ * - {@link BINARY_CANDIDATE_PARK_SURFACE} is the other way round, a real route not yet projected
179
+ * onto `/api/v1`.
180
+ * - `bug-fisher` (a curating kind, like `pr-reviewer` below, which IS here) parks so a person can
181
+ * mark which of the bugs it found are worth fixing, and marking has no public route at all yet.
182
+ *
183
+ * Either way a run parked there is honestly reported as `parked: true` with the wait NAMED in
184
+ * `unanswerable` and nothing offered to answer it, and the refusal says as much. That report is
185
+ * built from THIS table too (`curationWait`), so what the start surface refuses and what the
186
+ * decision surface admits it cannot answer are one decision. See
151
187
  * `backend/docs/adr/0043-public-decision-surface.md`.
152
188
  */
153
- export const PUBLICLY_ANSWERABLE_PARK_SURFACES = new Set([
154
- REQUIREMENTS_REVIEW_AGENT_KIND,
155
- CLARITY_REVIEW_AGENT_KIND,
156
- REQUIREMENTS_BRAINSTORM_AGENT_KIND,
157
- ARCHITECTURE_BRAINSTORM_AGENT_KIND,
158
- INPUT_GATE_PARK_SURFACE,
159
- APPROVAL_GATE_PARK_SURFACE,
160
- INTERVIEW_PARK_SURFACE,
189
+ export const PUBLICLY_ANSWERABLE_PARK_SURFACES = new Map([
190
+ [REQUIREMENTS_REVIEW_AGENT_KIND, 'requirements-review'],
191
+ [CLARITY_REVIEW_AGENT_KIND, 'clarity-review'],
192
+ [REQUIREMENTS_BRAINSTORM_AGENT_KIND, 'brainstorm'],
193
+ [ARCHITECTURE_BRAINSTORM_AGENT_KIND, 'brainstorm'],
194
+ [INPUT_GATE_PARK_SURFACE, 'input-gate'],
195
+ [APPROVAL_GATE_PARK_SURFACE, 'approval-gate'],
196
+ [INTERVIEW_PARK_SURFACE, 'interview'],
197
+ // The PR deep review's finding curation: `…/decisions/pr-review/resolve` (finish / fix / post),
198
+ // plus per-finding dismiss, challenge and resume.
199
+ [PR_REVIEWER_KIND, 'pr-review'],
161
200
  ]);
162
201
  /** The enabled steps of a pipeline, paired with their ORIGINAL index (gates are index-aligned). */
163
202
  function enabledSteps(pipeline) {
@@ -189,16 +228,17 @@ export function admissionRegistries(source) {
189
228
  }
190
229
  /**
191
230
  * Whether a pipeline can PARK the run on a human decision: an approval gate on an enabled step, one
192
- * of the {@link PARKING_INLINE_KINDS} review/brainstorm kinds, or a gate that waits on a person
193
- * with no deadline ({@link isHumanWaitGate}). Parking is not a defect: it is the clarification
194
- * loop. It just needs an answerer, which is what the `decide` scope asserts.
231
+ * of the {@link PARKING_INLINE_KINDS} review/brainstorm kinds, a gate that waits on a person with
232
+ * no deadline ({@link isHumanWaitGate}), or a step that curates ({@link isCurationGate}). Parking
233
+ * is not a defect: it is the clarification loop. It just needs an answerer, which is what the
234
+ * `decide` scope asserts.
195
235
  */
196
236
  export function canParkOnHuman(pipeline, registries) {
197
237
  return parkSurfacesOf(pipeline, registries).length > 0;
198
238
  }
199
239
  /**
200
240
  * Every park surface an ENABLED step of `pipeline` can put the run on, in step order and deduped.
201
- * Five mechanisms, each a separate check because each parks for a different reason:
241
+ * Six mechanisms, each a separate check because each parks for a different reason:
202
242
  *
203
243
  * 1. an approval gate flag on the step ({@link APPROVAL_GATE_PARK_SURFACE});
204
244
  * 2. the step's own kind being an inline review/brainstorm ({@link PARKING_INLINE_KINDS});
@@ -206,19 +246,24 @@ export function canParkOnHuman(pipeline, registries) {
206
246
  * ({@link isHumanWaitGate});
207
247
  * 4. the step's own kind carrying the `interview-gate` TRAIT ({@link INTERVIEW_PARK_SURFACE});
208
248
  * 5. the step's OPTIONS configuring a binary-candidate comparison
209
- * ({@link BINARY_CANDIDATE_PARK_SURFACE}).
249
+ * ({@link BINARY_CANDIDATE_PARK_SURFACE});
250
+ * 6. the step's own kind carrying the `curation-gate` TRAIT ({@link isCurationGate}).
210
251
  *
211
252
  * This is the single enumeration {@link canParkOnHuman} derives its boolean from, so the predicate
212
253
  * and the explanation a caller is given can never disagree about what parks.
213
254
  *
214
- * Cases 4 and 5 each arrived after the earlier ones had shipped, which is the lesson the human-wait
215
- * gates already taught repeating itself: an enumeration written against the park mechanisms
216
- * somebody thought of misses the ones they did not, so ask what each entry is DERIVED from. Cases
217
- * 2, 3 and 4 derive from a declaration a deployment's own registrations flow through (a kind list,
218
- * a gate's registered `pollExhaustion`, a registered trait). Case 5 derives from the step's stored
219
- * configuration, which is the same property one level down: it is what a deployment AUTHORS rather
220
- * than what it registers, and it was invisible here until a shipped preset finally set it.
221
- * Whatever is added next should be derivable too.
255
+ * Cases 4, 5 and 6 each arrived after the earlier ones had shipped, which is the lesson the
256
+ * human-wait gates already taught repeating itself: an enumeration written against the park
257
+ * mechanisms somebody thought of misses the ones they did not, so ask what each entry is DERIVED
258
+ * from. Cases 2, 3, 4 and 6 derive from a declaration a deployment's own registrations flow
259
+ * through (a kind list, a gate's registered `pollExhaustion`, a registered trait). Case 5 derives
260
+ * from the step's stored configuration, which is the same property one level down: it is what a
261
+ * deployment AUTHORS rather than what it registers, and it was invisible here until a shipped
262
+ * preset finally set it. Whatever is added next should be derivable too.
263
+ *
264
+ * Case 6 is the one that had been missed LONGEST, and the shape of the miss is worth keeping: the
265
+ * two kinds that carry it park through machinery of their OWN rather than through anything shared,
266
+ * so there was no declaration to read until the trait was added to make one.
222
267
  *
223
268
  * TWO THINGS ARE DELIBERATELY NOT HERE, and they are absent for two different reasons:
224
269
  *
@@ -245,9 +290,19 @@ export function parkSurfacesOf(pipeline, registries) {
245
290
  if (PARKING_INLINE_KINDS.has(kind) || isHumanWaitGate(kind, registries.gates)) {
246
291
  surfaces.add(kind);
247
292
  }
248
- if (hasTrait(kind, INTERVIEW_GATE_TRAIT, registries.agentKinds)) {
293
+ // Resolved ONCE per step: `traitsFor` unions the kind's standard traits, its registration's
294
+ // own and any assigned to it into a fresh Set on every call, and two trait questions asking it
295
+ // twice doubles that per step of every pipeline the discovery list projects.
296
+ const traits = traitsFor(kind, registries.agentKinds);
297
+ if (traits.has(INTERVIEW_GATE_TRAIT)) {
249
298
  surfaces.add(INTERVIEW_PARK_SURFACE);
250
299
  }
300
+ // Named by the KIND, the way the inline review/brainstorm kinds are, rather than by one shared
301
+ // label: what a caller has to be able to answer differs per curation kind (a PR review's
302
+ // findings have public verbs, an expedition's catch does not), so collapsing them would make
303
+ // the refusal promise an answer path for whichever one it did not mean.
304
+ if (isCurationGate(traits))
305
+ surfaces.add(kind);
251
306
  if (pipeline.stepOptions?.[i]?.binaryOutput?.comparison) {
252
307
  surfaces.add(BINARY_CANDIDATE_PARK_SURFACE);
253
308
  }
@@ -264,10 +319,17 @@ export function parkSurfacesOf(pipeline, registries) {
264
319
  * got a run whose only exit is `POST /api/v1/jobs/:id/cancel` — the platform's degrade-loudly rule
265
320
  * inverted, since the refusal was confidently describing a capability it does not have.
266
321
  *
267
- * Both public start paths apply the parking rule now: `POST /jobs` always has, and
268
- * `POST /tasks/:taskId/start` adopted it with the API-stability commitment (the tracker's open
269
- * question, settled): a `write` key must not be able to set in motion a park it is by definition
270
- * not trusted to answer.
322
+ * Every public path that sets a run in motion applies the parking rule now: `POST /jobs` always
323
+ * has, `POST /tasks/:taskId/start` adopted it with the API-stability commitment (the tracker's
324
+ * open question, settled), and `POST /tasks/:taskId/retry` re-drives the run's STORED steps under
325
+ * the same rule. A `write` key must not be able to set in motion a park it is by definition not
326
+ * trusted to answer, and which of the three calls started it makes no difference to that.
327
+ *
328
+ * The park surfaces are listed verbatim (they are what a reader matches against the pipeline's own
329
+ * steps) while the answer promise names DECISION KINDS, out of
330
+ * {@link PUBLICLY_ANSWERABLE_PARK_SURFACES}. Three surfaces are spelled differently in the two
331
+ * places, so naming the surface in a sentence that points at `decisions[]` told an integration to
332
+ * look for a `pr-reviewer` entry that is never there.
271
333
  *
272
334
  * `cancelPath` is REQUIRED rather than defaulted, because which route frees an abandoned park is a
273
335
  * property of the START SURFACE and every surface answers differently: a headless job is cancelled
@@ -279,7 +341,16 @@ export function parkSurfacesOf(pipeline, registries) {
279
341
  */
280
342
  export function parkingRefusalMessage(surfaces, options) {
281
343
  const { cancelPath } = options;
282
- const answerable = surfaces.filter((s) => PUBLICLY_ANSWERABLE_PARK_SURFACES.has(s));
344
+ // The ANSWERABLE half is named by DECISION KIND, deduped, because the sentence points a caller
345
+ // at `decisions[]` and that is the field it will look the entry up by. The surfaces are still
346
+ // listed verbatim in the first sentence, which is where a reader matches the message against
347
+ // the pipeline's own step chain.
348
+ const answerable = [
349
+ ...new Set(surfaces.flatMap((s) => {
350
+ const kind = PUBLICLY_ANSWERABLE_PARK_SURFACES.get(s);
351
+ return kind ? [kind] : [];
352
+ })),
353
+ ];
283
354
  const unanswerable = surfaces.filter((s) => !PUBLICLY_ANSWERABLE_PARK_SURFACES.has(s));
284
355
  const parts = [`This pipeline can park on a human decision (${surfaces.join(', ')}).`];
285
356
  parts.push(answerable.length > 0
@@ -1 +1 @@
1
- {"version":3,"file":"publicApiAdmission.js","sourceRoot":"","sources":["../../../src/modules/publicApi/publicApiAdmission.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publicApiAdmission.js","sourceRoot":"","sources":["../../../src/modules/publicApi/publicApiAdmission.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SandboxController.d.ts","sourceRoot":"","sources":["../../../src/modules/sandbox/SandboxController.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAU/C;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,CAkHhD"}
1
+ {"version":3,"file":"SandboxController.d.ts","sourceRoot":"","sources":["../../../src/modules/sandbox/SandboxController.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAU/C;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,CAwHhD"}
@@ -89,7 +89,10 @@ export function sandboxController() {
89
89
  // Run + grade every cell of the experiment, then return the full result grid.
90
90
  buildHonoRoute(app, launchSandboxExperimentContract, async (c) => {
91
91
  const sandbox = requireSandbox(c);
92
- return c.json(await sandbox.runService.launch(param(c, 'workspaceId'), c.req.valid('param').experimentId), 200);
92
+ return c.json(
93
+ // The launcher, so every cell's model call draws on their credential tier too: an
94
+ // experiment has no run, so this is the only tier beyond the workspace it can carry.
95
+ await sandbox.runService.launch(param(c, 'workspaceId'), c.req.valid('param').experimentId, c.get('user')?.id), 200);
93
96
  });
94
97
  return app;
95
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SandboxController.js","sourceRoot":"","sources":["../../../src/modules/sandbox/SandboxController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SandboxController.js","sourceRoot":"","sources":["../../../src/modules/sandbox/SandboxController.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ import type { PersistenceMethodTable } from './rpc.js';
13
13
  *
14
14
  * Still EXCLUDED (added in later gate slices, with their own scope rules, or kept
15
15
  * mothership-internal):
16
- * - `subscriptionActivationRepository.deleteByExecution` the activation row is the local
16
+ * - `subscriptionActivationRepository.deleteByScope`: the activation row is the local
17
17
  * `node:sqlite` bucket (per the per-repo checklist), not the remote surface, so it is not
18
18
  * exposed here.
19
19
  * - Global sweeper methods (`listStale`, `deleteOlderThan`) and high-impact unscoped ops
@@ -27,7 +27,7 @@ import { VCS_PERSISTENCE_METHODS } from './rpc-allowlist-vcs.js';
27
27
  *
28
28
  * Still EXCLUDED (added in later gate slices, with their own scope rules, or kept
29
29
  * mothership-internal):
30
- * - `subscriptionActivationRepository.deleteByExecution` the activation row is the local
30
+ * - `subscriptionActivationRepository.deleteByScope`: the activation row is the local
31
31
  * `node:sqlite` bucket (per the per-repo checklist), not the remote surface, so it is not
32
32
  * exposed here.
33
33
  * - Global sweeper methods (`listStale`, `deleteOlderThan`) and high-impact unscoped ops
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/server",
3
- "version": "0.321.0",
3
+ "version": "0.323.0",
4
4
  "description": "Runtime-neutral HTTP layer for the Agent Architecture Board: the Hono controllers, middleware (auth/authz/CORS/error), request helpers and the gateway seams shared by every deployment facade (Cloudflare Worker, Node service).",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,13 +24,13 @@
24
24
  "access": "public"
25
25
  },
26
26
  "dependencies": {
27
- "@cat-factory/agents": "0.163.0",
28
- "@cat-factory/contracts": "0.352.0",
29
- "@cat-factory/integrations": "0.172.16",
30
- "@cat-factory/kernel": "0.345.0",
31
- "@cat-factory/mcp-server": "0.49.3",
32
- "@cat-factory/orchestration": "0.309.0",
33
- "@cat-factory/spend": "0.21.5",
27
+ "@cat-factory/agents": "0.165.0",
28
+ "@cat-factory/contracts": "0.353.0",
29
+ "@cat-factory/integrations": "0.173.1",
30
+ "@cat-factory/kernel": "0.346.1",
31
+ "@cat-factory/mcp-server": "0.50.0",
32
+ "@cat-factory/orchestration": "0.311.0",
33
+ "@cat-factory/spend": "0.21.7",
34
34
  "@toad-contracts/core": "0.4.0",
35
35
  "@toad-contracts/hono": "0.3.2",
36
36
  "@toad-contracts/valibot": "0.5.0",