@cat-factory/contracts 0.168.0 → 0.170.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 (83) hide show
  1. package/dist/agent-presentation.d.ts +2 -2
  2. package/dist/errors.d.ts +1 -1
  3. package/dist/errors.d.ts.map +1 -1
  4. package/dist/errors.js +6 -0
  5. package/dist/errors.js.map +1 -1
  6. package/dist/execution.d.ts +103 -568
  7. package/dist/execution.d.ts.map +1 -1
  8. package/dist/execution.js +14 -199
  9. package/dist/execution.js.map +1 -1
  10. package/dist/gate.d.ts +283 -0
  11. package/dist/gate.d.ts.map +1 -0
  12. package/dist/gate.js +209 -0
  13. package/dist/gate.js.map +1 -0
  14. package/dist/index.d.ts +2 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +2 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/judge.d.ts +181 -0
  19. package/dist/judge.d.ts.map +1 -0
  20. package/dist/judge.js +147 -0
  21. package/dist/judge.js.map +1 -0
  22. package/dist/merge.d.ts +17 -0
  23. package/dist/merge.d.ts.map +1 -1
  24. package/dist/merge.js +19 -0
  25. package/dist/merge.js.map +1 -1
  26. package/dist/notification-webhooks.d.ts +3 -3
  27. package/dist/notifications.d.ts +3 -3
  28. package/dist/notifications.d.ts.map +1 -1
  29. package/dist/notifications.js +2 -0
  30. package/dist/notifications.js.map +1 -1
  31. package/dist/pr-report.d.ts +101 -0
  32. package/dist/pr-report.d.ts.map +1 -1
  33. package/dist/pr-report.js +40 -0
  34. package/dist/pr-report.js.map +1 -1
  35. package/dist/public-api.d.ts +1 -1
  36. package/dist/public-decisions.d.ts +94 -1
  37. package/dist/public-decisions.d.ts.map +1 -1
  38. package/dist/public-decisions.js +34 -1
  39. package/dist/public-decisions.js.map +1 -1
  40. package/dist/result-views.d.ts +1 -1
  41. package/dist/result-views.d.ts.map +1 -1
  42. package/dist/result-views.js +1 -0
  43. package/dist/result-views.js.map +1 -1
  44. package/dist/routes/agent-runs.d.ts +86 -0
  45. package/dist/routes/agent-runs.d.ts.map +1 -1
  46. package/dist/routes/execution.d.ts +344 -0
  47. package/dist/routes/execution.d.ts.map +1 -1
  48. package/dist/routes/human-review.d.ts +43 -0
  49. package/dist/routes/human-review.d.ts.map +1 -1
  50. package/dist/routes/human-test.d.ts +215 -0
  51. package/dist/routes/human-test.d.ts.map +1 -1
  52. package/dist/routes/index.d.ts +1 -0
  53. package/dist/routes/index.d.ts.map +1 -1
  54. package/dist/routes/index.js +1 -0
  55. package/dist/routes/index.js.map +1 -1
  56. package/dist/routes/judge.d.ts +158 -0
  57. package/dist/routes/judge.d.ts.map +1 -0
  58. package/dist/routes/judge.js +28 -0
  59. package/dist/routes/judge.js.map +1 -0
  60. package/dist/routes/merge.d.ts +12 -0
  61. package/dist/routes/merge.d.ts.map +1 -1
  62. package/dist/routes/notification-webhooks.d.ts +3 -3
  63. package/dist/routes/notifications.d.ts +3 -3
  64. package/dist/routes/public-api.d.ts +3 -3
  65. package/dist/routes/public-decisions.d.ts +246 -0
  66. package/dist/routes/public-decisions.d.ts.map +1 -1
  67. package/dist/routes/public-decisions.js +10 -1
  68. package/dist/routes/public-decisions.js.map +1 -1
  69. package/dist/routes/runners.d.ts +10 -0
  70. package/dist/routes/runners.d.ts.map +1 -1
  71. package/dist/routes/slack.d.ts +3 -3
  72. package/dist/routes/visual-confirm.d.ts +129 -0
  73. package/dist/routes/visual-confirm.d.ts.map +1 -1
  74. package/dist/routes/workspaces.d.ts +94 -4
  75. package/dist/routes/workspaces.d.ts.map +1 -1
  76. package/dist/runners.d.ts +90 -0
  77. package/dist/runners.d.ts.map +1 -1
  78. package/dist/runners.js +9 -0
  79. package/dist/runners.js.map +1 -1
  80. package/dist/slack.d.ts +2 -2
  81. package/dist/snapshot.d.ts +47 -2
  82. package/dist/snapshot.d.ts.map +1 -1
  83. package/package.json +1 -1
@@ -225,287 +225,6 @@ export declare const priorStepOutputSchema: v.ObjectSchema<{
225
225
  readonly truncated: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
226
226
  }, undefined>;
227
227
  export type PriorStepOutput = v.InferOutput<typeof priorStepOutputSchema>;
228
- /**
229
- * State a polling **gate** step carries (today `ci` and `conflicts`). A gate is
230
- * special (like a `deployer` step): it is NOT itself an LLM/container agent. It
231
- * runs a programmatic precheck against a provider (CI check runs / PR mergeability)
232
- * for the PR head commit and only escalates to a helper container agent (`ci-fixer`
233
- * / `conflict-resolver`) on a negative verdict, looping until the precheck passes or
234
- * the attempt budget is spent. Which gate a step is comes from its `agentKind`, so it
235
- * is not duplicated here. See the engine's `GateDefinition` registry.
236
- * - `phase: 'checking'` — running the precheck / waiting for the provider.
237
- * - `phase: 'working'` — a helper agent is in flight (tracked via the step's
238
- * `jobId`); on completion the gate returns to `checking`.
239
- */
240
- /** One failing check the CI gate's precheck saw, flattened for display. */
241
- export declare const gateFailingCheckSchema: v.ObjectSchema<{
242
- readonly name: v.StringSchema<undefined>;
243
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
244
- readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
245
- /**
246
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
247
- * failed run's logs. Null when GitHub didn't report one.
248
- */
249
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
250
- /**
251
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
252
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
253
- */
254
- readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
255
- }, undefined>;
256
- export type GateFailingCheck = v.InferOutput<typeof gateFailingCheckSchema>;
257
- /**
258
- * One helper-agent attempt the gate dispatched (a ci-fixer / conflict-resolver run),
259
- * recorded when the job finishes so the UI can show what each attempt tried and how it
260
- * ended — detail that used to be discarded the moment the gate re-probed.
261
- */
262
- export declare const gateAttemptSchema: v.ObjectSchema<{
263
- /** 1-based attempt number (matches `attempts` at the time the helper was dispatched). */
264
- readonly attempt: v.NumberSchema<undefined>;
265
- /** Epoch ms when the helper job finished. */
266
- readonly at: v.NumberSchema<undefined>;
267
- /**
268
- * How the helper job ended:
269
- * - `completed` — the container finished (it may or may not have fully fixed the
270
- * issue; the gate's next precheck is the source of truth, and `summary` carries
271
- * the agent's own account, e.g. which files it left conflicting).
272
- * - `failed` — the job errored / was evicted without finishing.
273
- */
274
- readonly outcome: v.PicklistSchema<["completed", "failed"], undefined>;
275
- /** The PR head commit the helper worked against, when known. */
276
- readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
277
- /**
278
- * The fixing instructions handed to the helper for this round — the failing-check
279
- * summary the CI gate fed the `ci-fixer`, the conflict reason / human-review comments
280
- * the other gates fed their fixer. Stashed at dispatch and recorded with the attempt so
281
- * the run-detail UI can show WHAT each round was asked to fix (not only that a round
282
- * happened) — the gate analogue of the Tester attempt's `concerns`. Null when the gate
283
- * hands its fixer no textual instructions (the conflicts gate: GitHub reports mergeability
284
- * as a single bit and the harness leaves the conflict markers for the resolver).
285
- */
286
- readonly instructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
287
- /**
288
- * Structured failing checks handed to this attempt's helper (the CI gate's red check runs
289
- * behind {@link instructions}), snapshotted at dispatch so each attempt shows the checks it
290
- * set out to fix. Absent for the conflicts gate (no file-level detail) and when the round
291
- * carried no structured checks.
292
- */
293
- readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
294
- readonly name: v.StringSchema<undefined>;
295
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
296
- readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
297
- /**
298
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
299
- * failed run's logs. Null when GitHub didn't report one.
300
- */
301
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
302
- /**
303
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
304
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
305
- */
306
- readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
307
- }, undefined>, undefined>, undefined>, undefined>;
308
- /** The helper's own summary (or the failure reason), naming what it did / what remains. */
309
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
310
- }, undefined>;
311
- export type GateAttempt = v.InferOutput<typeof gateAttemptSchema>;
312
- export declare const gateStepStateSchema: v.ObjectSchema<{
313
- readonly phase: v.PicklistSchema<["checking", "working"], undefined>;
314
- /** How many helper-agent attempts have been dispatched so far. */
315
- readonly attempts: v.NumberSchema<undefined>;
316
- /** Ceiling on attempts, resolved from the task's merge preset at step start. */
317
- readonly maxAttempts: v.NumberSchema<undefined>;
318
- /** The PR head commit being gated, once resolved (the own-service PR on a multi-repo block). */
319
- readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
320
- /**
321
- * Per-PR head commits for a MULTI-REPO block (service-connections phase 4), keyed by repo
322
- * full name (owner/name) — own-service PR plus each peer-service PR. Set by the CI /
323
- * conflicts gates whose precheck aggregates across every PR the task opened. Absent for a
324
- * single-repo block (the scalar {@link headSha} is the only head).
325
- */
326
- readonly headShas: v.OptionalSchema<v.NullableSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>, undefined>;
327
- /**
328
- * The repo the conflicts gate's most recent `fail` verdict found conflicted, so the
329
- * single-repo conflict-resolver is dispatched at THAT repo (own-service or a peer) rather
330
- * than always the own-service one. Absent ⇒ the own-service repo. Only the conflicts gate
331
- * sets it (the CI-fixer runs across all repos, so the CI gate leaves it undefined).
332
- */
333
- readonly conflictTarget: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
334
- readonly repo: v.StringSchema<undefined>;
335
- readonly frameId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
336
- readonly branch: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
337
- }, undefined>, undefined>, undefined>;
338
- /**
339
- * The most recent precheck verdict, so the UI can show why the gate is looping
340
- * (failing → a helper is fixing) vs idle-passing. Set on every probe.
341
- */
342
- readonly lastVerdict: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["pass", "pending", "fail"], undefined>, undefined>, undefined>;
343
- /**
344
- * Human-readable summary of the latest failing precheck (the failing CI checks /
345
- * the conflict reason) — the conclusion detail that used to be fed only to the
346
- * helper agent and then discarded. Carried across the helper dispatch so the
347
- * window keeps showing what is being fixed. Null when the last probe passed.
348
- */
349
- readonly lastFailureSummary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
350
- /**
351
- * Structured failing checks behind {@link lastFailureSummary} for the CI gate, so
352
- * the UI can list each red check by name + conclusion. Absent for the conflicts
353
- * gate (GitHub reports no file-level detail) and when the last probe passed.
354
- */
355
- readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
356
- readonly name: v.StringSchema<undefined>;
357
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
358
- readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
359
- /**
360
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
361
- * failed run's logs. Null when GitHub didn't report one.
362
- */
363
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
364
- /**
365
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
366
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
367
- */
368
- readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
369
- }, undefined>, undefined>, undefined>, undefined>;
370
- /**
371
- * The fixing instructions handed to the most-recently dispatched helper (the failing-check
372
- * summary / conflict reason / human fix prompt), stashed at dispatch so the attempt recorded
373
- * when that helper's job settles can carry WHAT the round was asked to fix onto its
374
- * {@link gateAttemptSchema} entry. Transient bookkeeping — the durable per-round history lives
375
- * on {@link attemptLog}. Null when the gate hands its fixer no textual instructions.
376
- */
377
- readonly lastDispatchedInstructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
378
- /**
379
- * Epoch ms of the release marker for a time-windowed gate (post-release-health) — the
380
- * moment it began watching the deployed release. The gate keeps polling `pending`
381
- * until this + the preset's watch window has elapsed (then a clean run passes) or a
382
- * monitor/SLO regresses (then it escalates to the on-call agent). Absent for the
383
- * CI/conflicts gates.
384
- */
385
- readonly watchSince: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
386
- /**
387
- * The watch-window length (minutes) for a time-windowed gate (post-release-health),
388
- * resolved from the task's merge preset ONCE on first entry (alongside `maxAttempts`)
389
- * so the probe doesn't re-load the block + re-resolve the preset on every poll. Absent
390
- * for the CI/conflicts gates.
391
- */
392
- readonly watchWindowMinutes: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
393
- /**
394
- * The regressed signals captured when the post-release-health gate escalated to the
395
- * on-call agent, so the agent's completion handler can build the `release_regression`
396
- * notification + incident enrichment from the SAME evidence the agent investigated
397
- * — rather than re-reading Datadog (a third round-trip that could also disagree with
398
- * what the agent saw if the window moved). Absent for the CI/conflicts gates.
399
- */
400
- readonly regressedSignals: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
401
- readonly kind: v.PicklistSchema<["monitor", "slo"], undefined>;
402
- readonly id: v.StringSchema<undefined>;
403
- readonly name: v.StringSchema<undefined>;
404
- readonly state: v.PicklistSchema<["ok", "warn", "alert", "no_data"], undefined>;
405
- readonly detail: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
406
- }, undefined>, undefined>, undefined>, undefined>;
407
- /**
408
- * Append-only history of the helper-agent attempts this gate dispatched (ci-fixer /
409
- * conflict-resolver runs), each recorded when its job finished. Lets the UI show what
410
- * every attempt tried and how it ended, instead of only a bare `attempts` count.
411
- * Absent for the post-release-health gate (its on-call helper is resolved specially).
412
- */
413
- readonly attemptLog: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
414
- /** 1-based attempt number (matches `attempts` at the time the helper was dispatched). */
415
- readonly attempt: v.NumberSchema<undefined>;
416
- /** Epoch ms when the helper job finished. */
417
- readonly at: v.NumberSchema<undefined>;
418
- /**
419
- * How the helper job ended:
420
- * - `completed` — the container finished (it may or may not have fully fixed the
421
- * issue; the gate's next precheck is the source of truth, and `summary` carries
422
- * the agent's own account, e.g. which files it left conflicting).
423
- * - `failed` — the job errored / was evicted without finishing.
424
- */
425
- readonly outcome: v.PicklistSchema<["completed", "failed"], undefined>;
426
- /** The PR head commit the helper worked against, when known. */
427
- readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
428
- /**
429
- * The fixing instructions handed to the helper for this round — the failing-check
430
- * summary the CI gate fed the `ci-fixer`, the conflict reason / human-review comments
431
- * the other gates fed their fixer. Stashed at dispatch and recorded with the attempt so
432
- * the run-detail UI can show WHAT each round was asked to fix (not only that a round
433
- * happened) — the gate analogue of the Tester attempt's `concerns`. Null when the gate
434
- * hands its fixer no textual instructions (the conflicts gate: GitHub reports mergeability
435
- * as a single bit and the harness leaves the conflict markers for the resolver).
436
- */
437
- readonly instructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
438
- /**
439
- * Structured failing checks handed to this attempt's helper (the CI gate's red check runs
440
- * behind {@link instructions}), snapshotted at dispatch so each attempt shows the checks it
441
- * set out to fix. Absent for the conflicts gate (no file-level detail) and when the round
442
- * carried no structured checks.
443
- */
444
- readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
445
- readonly name: v.StringSchema<undefined>;
446
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
447
- readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
448
- /**
449
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
450
- * failed run's logs. Null when GitHub didn't report one.
451
- */
452
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
453
- /**
454
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
455
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
456
- */
457
- readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
458
- }, undefined>, undefined>, undefined>, undefined>;
459
- /** The helper's own summary (or the failure reason), naming what it did / what remains. */
460
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
461
- }, undefined>, undefined>, undefined>, undefined>;
462
- /**
463
- * The number of approving reviews the PR had at the last probe, so the UI can show
464
- * "1 / N approvals". The "required" side is derived from {@link requiredApprovingReviewCount}
465
- * via the same `max(1, …)` floor the gate applies (see review.logic.ts) rather than persisted
466
- * a second time. Absent for the other gates.
467
- */
468
- readonly lastApprovals: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
469
- /**
470
- * The raw branch-protection required-approving-review count, cached after the FIRST probe
471
- * resolves it so subsequent polls skip the static protection read (branch protection is repo
472
- * config, not PR activity — re-reading it every poll over a multi-day review only burns GitHub
473
- * rate budget). The UI's displayed "required" count is `max(1, this)` (the gate's effective
474
- * floor). Absent for the other gates.
475
- */
476
- readonly requiredApprovingReviewCount: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
477
- /**
478
- * The GraphQL ids of the review threads the gate just handed the `fixer`, stashed at
479
- * dispatch so the helper-completion hook can post a reply + RESOLVE exactly those threads
480
- * on GitHub before the next probe reads them. Absent for the other gates.
481
- */
482
- readonly pendingThreadIds: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>, undefined>;
483
- /**
484
- * Epoch ms of the newest plain PR comment the gate has already handed the `fixer`. Plain
485
- * conversation comments (unlike review threads) can't be "resolved" on GitHub, so they are
486
- * tracked by timestamp: a comment newer than this is outstanding; the dispatch advances it to
487
- * the batch max. A reviewer's later comment (newer timestamp) re-opens the work. Absent for
488
- * the other gates.
489
- */
490
- readonly lastAddressedCommentAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
491
- /**
492
- * The grace window (minutes) the human-review gate waits after the latest review comment
493
- * before dispatching the fixer, resolved from the task's merge preset ONCE on first entry
494
- * (alongside `maxAttempts`) so the probe doesn't re-resolve the preset every poll. Absent
495
- * for the other gates.
496
- */
497
- readonly humanReviewGraceMinutes: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
498
- /**
499
- * A human-initiated freeform fix request parked on the gate (an in-app prompt). Consumed at
500
- * the top of the next `evaluateGate` pass, which dispatches the fixer with these instructions
501
- * folded in — bypassing the grace window. Absent for the other gates.
502
- */
503
- readonly pendingFix: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
504
- readonly instructions: v.StringSchema<undefined>;
505
- readonly at: v.NumberSchema<undefined>;
506
- }, undefined>, undefined>, undefined>;
507
- }, undefined>;
508
- export type GateStepState = v.InferOutput<typeof gateStepStateSchema>;
509
228
  /**
510
229
  * State a `tester` step carries while it runs the Tester → Fixer loop. Unlike `ci`,
511
230
  * the gate's own work IS a container job (the Tester); on a withheld greenlight the
@@ -517,7 +236,7 @@ export type GateStepState = v.InferOutput<typeof gateStepStateSchema>;
517
236
  /**
518
237
  * One round of the Tester→Fixer loop, recorded when a `fixer` job finishes so the test
519
238
  * window can show what each fixer attempt set out to fix and how it ended — the analogue of
520
- * a polling gate's {@link gateAttemptSchema}, since a fixer run is otherwise an opaque
239
+ * a polling gate's `gateAttemptSchema`, since a fixer run is otherwise an opaque
521
240
  * sub-job with no surface of its own (only a bare `attempts` count).
522
241
  */
523
242
  export declare const testerAttemptSchema: v.ObjectSchema<{
@@ -1104,92 +823,26 @@ export declare const pipelineStepSchema: v.ObjectSchema<{
1104
823
  */
1105
824
  readonly gate: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
1106
825
  readonly phase: v.PicklistSchema<["checking", "working"], undefined>;
1107
- /** How many helper-agent attempts have been dispatched so far. */
1108
826
  readonly attempts: v.NumberSchema<undefined>;
1109
- /** Ceiling on attempts, resolved from the task's merge preset at step start. */
1110
827
  readonly maxAttempts: v.NumberSchema<undefined>;
1111
- /** The PR head commit being gated, once resolved (the own-service PR on a multi-repo block). */
1112
828
  readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1113
- /**
1114
- * Per-PR head commits for a MULTI-REPO block (service-connections phase 4), keyed by repo
1115
- * full name (owner/name) — own-service PR plus each peer-service PR. Set by the CI /
1116
- * conflicts gates whose precheck aggregates across every PR the task opened. Absent for a
1117
- * single-repo block (the scalar {@link headSha} is the only head).
1118
- */
1119
829
  readonly headShas: v.OptionalSchema<v.NullableSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>, undefined>;
1120
- /**
1121
- * The repo the conflicts gate's most recent `fail` verdict found conflicted, so the
1122
- * single-repo conflict-resolver is dispatched at THAT repo (own-service or a peer) rather
1123
- * than always the own-service one. Absent ⇒ the own-service repo. Only the conflicts gate
1124
- * sets it (the CI-fixer runs across all repos, so the CI gate leaves it undefined).
1125
- */
1126
830
  readonly conflictTarget: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
1127
831
  readonly repo: v.StringSchema<undefined>;
1128
832
  readonly frameId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1129
833
  readonly branch: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1130
834
  }, undefined>, undefined>, undefined>;
1131
- /**
1132
- * The most recent precheck verdict, so the UI can show why the gate is looping
1133
- * (failing → a helper is fixing) vs idle-passing. Set on every probe.
1134
- */
1135
835
  readonly lastVerdict: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["pass", "pending", "fail"], undefined>, undefined>, undefined>;
1136
- /**
1137
- * Human-readable summary of the latest failing precheck (the failing CI checks /
1138
- * the conflict reason) — the conclusion detail that used to be fed only to the
1139
- * helper agent and then discarded. Carried across the helper dispatch so the
1140
- * window keeps showing what is being fixed. Null when the last probe passed.
1141
- */
1142
836
  readonly lastFailureSummary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1143
- /**
1144
- * Structured failing checks behind {@link lastFailureSummary} for the CI gate, so
1145
- * the UI can list each red check by name + conclusion. Absent for the conflicts
1146
- * gate (GitHub reports no file-level detail) and when the last probe passed.
1147
- */
1148
837
  readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
1149
838
  readonly name: v.StringSchema<undefined>;
1150
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
1151
839
  readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
1152
- /**
1153
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
1154
- * failed run's logs. Null when GitHub didn't report one.
1155
- */
1156
840
  readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1157
- /**
1158
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
1159
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
1160
- */
1161
841
  readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1162
842
  }, undefined>, undefined>, undefined>, undefined>;
1163
- /**
1164
- * The fixing instructions handed to the most-recently dispatched helper (the failing-check
1165
- * summary / conflict reason / human fix prompt), stashed at dispatch so the attempt recorded
1166
- * when that helper's job settles can carry WHAT the round was asked to fix onto its
1167
- * {@link gateAttemptSchema} entry. Transient bookkeeping — the durable per-round history lives
1168
- * on {@link attemptLog}. Null when the gate hands its fixer no textual instructions.
1169
- */
1170
843
  readonly lastDispatchedInstructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1171
- /**
1172
- * Epoch ms of the release marker for a time-windowed gate (post-release-health) — the
1173
- * moment it began watching the deployed release. The gate keeps polling `pending`
1174
- * until this + the preset's watch window has elapsed (then a clean run passes) or a
1175
- * monitor/SLO regresses (then it escalates to the on-call agent). Absent for the
1176
- * CI/conflicts gates.
1177
- */
1178
844
  readonly watchSince: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1179
- /**
1180
- * The watch-window length (minutes) for a time-windowed gate (post-release-health),
1181
- * resolved from the task's merge preset ONCE on first entry (alongside `maxAttempts`)
1182
- * so the probe doesn't re-load the block + re-resolve the preset on every poll. Absent
1183
- * for the CI/conflicts gates.
1184
- */
1185
845
  readonly watchWindowMinutes: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1186
- /**
1187
- * The regressed signals captured when the post-release-health gate escalated to the
1188
- * on-call agent, so the agent's completion handler can build the `release_regression`
1189
- * notification + incident enrichment from the SAME evidence the agent investigated
1190
- * — rather than re-reading Datadog (a third round-trip that could also disagree with
1191
- * what the agent saw if the window moved). Absent for the CI/conflicts gates.
1192
- */
1193
846
  readonly regressedSignals: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
1194
847
  readonly kind: v.PicklistSchema<["monitor", "slo"], undefined>;
1195
848
  readonly id: v.StringSchema<undefined>;
@@ -1197,102 +850,25 @@ export declare const pipelineStepSchema: v.ObjectSchema<{
1197
850
  readonly state: v.PicklistSchema<["ok", "warn", "alert", "no_data"], undefined>;
1198
851
  readonly detail: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1199
852
  }, undefined>, undefined>, undefined>, undefined>;
1200
- /**
1201
- * Append-only history of the helper-agent attempts this gate dispatched (ci-fixer /
1202
- * conflict-resolver runs), each recorded when its job finished. Lets the UI show what
1203
- * every attempt tried and how it ended, instead of only a bare `attempts` count.
1204
- * Absent for the post-release-health gate (its on-call helper is resolved specially).
1205
- */
1206
853
  readonly attemptLog: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
1207
- /** 1-based attempt number (matches `attempts` at the time the helper was dispatched). */
1208
854
  readonly attempt: v.NumberSchema<undefined>;
1209
- /** Epoch ms when the helper job finished. */
1210
855
  readonly at: v.NumberSchema<undefined>;
1211
- /**
1212
- * How the helper job ended:
1213
- * - `completed` — the container finished (it may or may not have fully fixed the
1214
- * issue; the gate's next precheck is the source of truth, and `summary` carries
1215
- * the agent's own account, e.g. which files it left conflicting).
1216
- * - `failed` — the job errored / was evicted without finishing.
1217
- */
1218
856
  readonly outcome: v.PicklistSchema<["completed", "failed"], undefined>;
1219
- /** The PR head commit the helper worked against, when known. */
1220
857
  readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1221
- /**
1222
- * The fixing instructions handed to the helper for this round — the failing-check
1223
- * summary the CI gate fed the `ci-fixer`, the conflict reason / human-review comments
1224
- * the other gates fed their fixer. Stashed at dispatch and recorded with the attempt so
1225
- * the run-detail UI can show WHAT each round was asked to fix (not only that a round
1226
- * happened) — the gate analogue of the Tester attempt's `concerns`. Null when the gate
1227
- * hands its fixer no textual instructions (the conflicts gate: GitHub reports mergeability
1228
- * as a single bit and the harness leaves the conflict markers for the resolver).
1229
- */
1230
858
  readonly instructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1231
- /**
1232
- * Structured failing checks handed to this attempt's helper (the CI gate's red check runs
1233
- * behind {@link instructions}), snapshotted at dispatch so each attempt shows the checks it
1234
- * set out to fix. Absent for the conflicts gate (no file-level detail) and when the round
1235
- * carried no structured checks.
1236
- */
1237
859
  readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
1238
860
  readonly name: v.StringSchema<undefined>;
1239
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
1240
861
  readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
1241
- /**
1242
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
1243
- * failed run's logs. Null when GitHub didn't report one.
1244
- */
1245
862
  readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1246
- /**
1247
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
1248
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
1249
- */
1250
863
  readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1251
864
  }, undefined>, undefined>, undefined>, undefined>;
1252
- /** The helper's own summary (or the failure reason), naming what it did / what remains. */
1253
865
  readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1254
866
  }, undefined>, undefined>, undefined>, undefined>;
1255
- /**
1256
- * The number of approving reviews the PR had at the last probe, so the UI can show
1257
- * "1 / N approvals". The "required" side is derived from {@link requiredApprovingReviewCount}
1258
- * via the same `max(1, …)` floor the gate applies (see review.logic.ts) rather than persisted
1259
- * a second time. Absent for the other gates.
1260
- */
1261
867
  readonly lastApprovals: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1262
- /**
1263
- * The raw branch-protection required-approving-review count, cached after the FIRST probe
1264
- * resolves it so subsequent polls skip the static protection read (branch protection is repo
1265
- * config, not PR activity — re-reading it every poll over a multi-day review only burns GitHub
1266
- * rate budget). The UI's displayed "required" count is `max(1, this)` (the gate's effective
1267
- * floor). Absent for the other gates.
1268
- */
1269
868
  readonly requiredApprovingReviewCount: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1270
- /**
1271
- * The GraphQL ids of the review threads the gate just handed the `fixer`, stashed at
1272
- * dispatch so the helper-completion hook can post a reply + RESOLVE exactly those threads
1273
- * on GitHub before the next probe reads them. Absent for the other gates.
1274
- */
1275
869
  readonly pendingThreadIds: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>, undefined>;
1276
- /**
1277
- * Epoch ms of the newest plain PR comment the gate has already handed the `fixer`. Plain
1278
- * conversation comments (unlike review threads) can't be "resolved" on GitHub, so they are
1279
- * tracked by timestamp: a comment newer than this is outstanding; the dispatch advances it to
1280
- * the batch max. A reviewer's later comment (newer timestamp) re-opens the work. Absent for
1281
- * the other gates.
1282
- */
1283
870
  readonly lastAddressedCommentAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1284
- /**
1285
- * The grace window (minutes) the human-review gate waits after the latest review comment
1286
- * before dispatching the fixer, resolved from the task's merge preset ONCE on first entry
1287
- * (alongside `maxAttempts`) so the probe doesn't re-resolve the preset every poll. Absent
1288
- * for the other gates.
1289
- */
1290
871
  readonly humanReviewGraceMinutes: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1291
- /**
1292
- * A human-initiated freeform fix request parked on the gate (an in-app prompt). Consumed at
1293
- * the top of the next `evaluateGate` pass, which dispatches the fixer with these instructions
1294
- * folded in — bypassing the grace window. Absent for the other gates.
1295
- */
1296
872
  readonly pendingFix: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
1297
873
  readonly instructions: v.StringSchema<undefined>;
1298
874
  readonly at: v.NumberSchema<undefined>;
@@ -1800,6 +1376,57 @@ export declare const pipelineStepSchema: v.ObjectSchema<{
1800
1376
  }, "Provide exactly one of forkId or custom.">]>, undefined>, undefined>;
1801
1377
  readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1802
1378
  }, undefined>, undefined>, undefined>;
1379
+ /**
1380
+ * Live JUDGE state on a judge step (the fourth taxonomy bucket): the rubric identity, the
1381
+ * latest structured verdict, the per-task threshold it was compared against, the bounce
1382
+ * budget, and the round history. Created lazily by the engine on first entry and — like
1383
+ * `forkDecision` / `followUps` — deliberately PRESERVED across `resetStepForRerun`, so a
1384
+ * bounce that re-runs the producer plus this step does not erase the verdict it is looping
1385
+ * on. Absent for non-judge steps. See {@link judgeStepStateSchema}.
1386
+ */
1387
+ readonly judge: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
1388
+ readonly status: v.PicklistSchema<["evaluating", "awaiting_decision", "bouncing", "passed", "failed", "skipped"], undefined>;
1389
+ readonly rubricId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1390
+ readonly rubricName: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1391
+ readonly rubricOverridden: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
1392
+ readonly verdict: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
1393
+ readonly score: v.SchemaWithFallback<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, 0>;
1394
+ readonly summary: v.SchemaWithFallback<v.StringSchema<undefined>, "">;
1395
+ readonly findings: v.OptionalSchema<v.SchemaWithFallback<v.ArraySchema<v.ObjectSchema<{
1396
+ readonly title: v.SchemaWithFallback<v.StringSchema<undefined>, "Untitled finding">;
1397
+ readonly detail: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
1398
+ readonly severity: v.SchemaWithFallback<v.PicklistSchema<["low", "medium", "high", "critical"], undefined>, "medium">;
1399
+ readonly where: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
1400
+ }, undefined>, undefined>, readonly []>, readonly []>;
1401
+ }, undefined>, undefined>, undefined>;
1402
+ readonly threshold: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1403
+ readonly disposition: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["pass", "park", "bounce", "fail"], undefined>, undefined>, undefined>;
1404
+ readonly bounces: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
1405
+ readonly maxBounces: v.OptionalSchema<v.NumberSchema<undefined>, 1>;
1406
+ readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1407
+ readonly rounds: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1408
+ readonly round: v.NumberSchema<undefined>;
1409
+ readonly at: v.NumberSchema<undefined>;
1410
+ readonly verdict: v.ObjectSchema<{
1411
+ readonly score: v.SchemaWithFallback<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, 0>;
1412
+ readonly summary: v.SchemaWithFallback<v.StringSchema<undefined>, "">;
1413
+ readonly findings: v.OptionalSchema<v.SchemaWithFallback<v.ArraySchema<v.ObjectSchema<{
1414
+ readonly title: v.SchemaWithFallback<v.StringSchema<undefined>, "Untitled finding">;
1415
+ readonly detail: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
1416
+ readonly severity: v.SchemaWithFallback<v.PicklistSchema<["low", "medium", "high", "critical"], undefined>, "medium">;
1417
+ readonly where: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
1418
+ }, undefined>, undefined>, readonly []>, readonly []>;
1419
+ }, undefined>;
1420
+ readonly disposition: v.PicklistSchema<["pass", "park", "bounce", "fail"], undefined>;
1421
+ readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1422
+ }, undefined>, undefined>, readonly []>;
1423
+ readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1424
+ readonly resolution: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
1425
+ readonly choice: v.PicklistSchema<["proceed", "bounce", "stop"], undefined>;
1426
+ readonly feedback: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1427
+ readonly at: v.NumberSchema<undefined>;
1428
+ }, undefined>, undefined>, undefined>;
1429
+ }, undefined>, undefined>, undefined>;
1803
1430
  /**
1804
1431
  * Live "Ralph loop" state carried on a `ralph` step: the persistent retry-until-done
1805
1432
  * loop's iteration count, budget, validation command, and per-iteration history. Seeded
@@ -2596,92 +2223,26 @@ export declare const executionInstanceSchema: v.ObjectSchema<{
2596
2223
  */
2597
2224
  readonly gate: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2598
2225
  readonly phase: v.PicklistSchema<["checking", "working"], undefined>;
2599
- /** How many helper-agent attempts have been dispatched so far. */
2600
2226
  readonly attempts: v.NumberSchema<undefined>;
2601
- /** Ceiling on attempts, resolved from the task's merge preset at step start. */
2602
2227
  readonly maxAttempts: v.NumberSchema<undefined>;
2603
- /** The PR head commit being gated, once resolved (the own-service PR on a multi-repo block). */
2604
2228
  readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2605
- /**
2606
- * Per-PR head commits for a MULTI-REPO block (service-connections phase 4), keyed by repo
2607
- * full name (owner/name) — own-service PR plus each peer-service PR. Set by the CI /
2608
- * conflicts gates whose precheck aggregates across every PR the task opened. Absent for a
2609
- * single-repo block (the scalar {@link headSha} is the only head).
2610
- */
2611
2229
  readonly headShas: v.OptionalSchema<v.NullableSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>, undefined>;
2612
- /**
2613
- * The repo the conflicts gate's most recent `fail` verdict found conflicted, so the
2614
- * single-repo conflict-resolver is dispatched at THAT repo (own-service or a peer) rather
2615
- * than always the own-service one. Absent ⇒ the own-service repo. Only the conflicts gate
2616
- * sets it (the CI-fixer runs across all repos, so the CI gate leaves it undefined).
2617
- */
2618
2230
  readonly conflictTarget: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2619
2231
  readonly repo: v.StringSchema<undefined>;
2620
2232
  readonly frameId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2621
2233
  readonly branch: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2622
2234
  }, undefined>, undefined>, undefined>;
2623
- /**
2624
- * The most recent precheck verdict, so the UI can show why the gate is looping
2625
- * (failing → a helper is fixing) vs idle-passing. Set on every probe.
2626
- */
2627
2235
  readonly lastVerdict: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["pass", "pending", "fail"], undefined>, undefined>, undefined>;
2628
- /**
2629
- * Human-readable summary of the latest failing precheck (the failing CI checks /
2630
- * the conflict reason) — the conclusion detail that used to be fed only to the
2631
- * helper agent and then discarded. Carried across the helper dispatch so the
2632
- * window keeps showing what is being fixed. Null when the last probe passed.
2633
- */
2634
2236
  readonly lastFailureSummary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2635
- /**
2636
- * Structured failing checks behind {@link lastFailureSummary} for the CI gate, so
2637
- * the UI can list each red check by name + conclusion. Absent for the conflicts
2638
- * gate (GitHub reports no file-level detail) and when the last probe passed.
2639
- */
2640
2237
  readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
2641
2238
  readonly name: v.StringSchema<undefined>;
2642
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
2643
2239
  readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
2644
- /**
2645
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
2646
- * failed run's logs. Null when GitHub didn't report one.
2647
- */
2648
2240
  readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2649
- /**
2650
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
2651
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
2652
- */
2653
2241
  readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2654
2242
  }, undefined>, undefined>, undefined>, undefined>;
2655
- /**
2656
- * The fixing instructions handed to the most-recently dispatched helper (the failing-check
2657
- * summary / conflict reason / human fix prompt), stashed at dispatch so the attempt recorded
2658
- * when that helper's job settles can carry WHAT the round was asked to fix onto its
2659
- * {@link gateAttemptSchema} entry. Transient bookkeeping — the durable per-round history lives
2660
- * on {@link attemptLog}. Null when the gate hands its fixer no textual instructions.
2661
- */
2662
2243
  readonly lastDispatchedInstructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2663
- /**
2664
- * Epoch ms of the release marker for a time-windowed gate (post-release-health) — the
2665
- * moment it began watching the deployed release. The gate keeps polling `pending`
2666
- * until this + the preset's watch window has elapsed (then a clean run passes) or a
2667
- * monitor/SLO regresses (then it escalates to the on-call agent). Absent for the
2668
- * CI/conflicts gates.
2669
- */
2670
2244
  readonly watchSince: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2671
- /**
2672
- * The watch-window length (minutes) for a time-windowed gate (post-release-health),
2673
- * resolved from the task's merge preset ONCE on first entry (alongside `maxAttempts`)
2674
- * so the probe doesn't re-load the block + re-resolve the preset on every poll. Absent
2675
- * for the CI/conflicts gates.
2676
- */
2677
2245
  readonly watchWindowMinutes: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2678
- /**
2679
- * The regressed signals captured when the post-release-health gate escalated to the
2680
- * on-call agent, so the agent's completion handler can build the `release_regression`
2681
- * notification + incident enrichment from the SAME evidence the agent investigated
2682
- * — rather than re-reading Datadog (a third round-trip that could also disagree with
2683
- * what the agent saw if the window moved). Absent for the CI/conflicts gates.
2684
- */
2685
2246
  readonly regressedSignals: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
2686
2247
  readonly kind: v.PicklistSchema<["monitor", "slo"], undefined>;
2687
2248
  readonly id: v.StringSchema<undefined>;
@@ -2689,102 +2250,25 @@ export declare const executionInstanceSchema: v.ObjectSchema<{
2689
2250
  readonly state: v.PicklistSchema<["ok", "warn", "alert", "no_data"], undefined>;
2690
2251
  readonly detail: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2691
2252
  }, undefined>, undefined>, undefined>, undefined>;
2692
- /**
2693
- * Append-only history of the helper-agent attempts this gate dispatched (ci-fixer /
2694
- * conflict-resolver runs), each recorded when its job finished. Lets the UI show what
2695
- * every attempt tried and how it ended, instead of only a bare `attempts` count.
2696
- * Absent for the post-release-health gate (its on-call helper is resolved specially).
2697
- */
2698
2253
  readonly attemptLog: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
2699
- /** 1-based attempt number (matches `attempts` at the time the helper was dispatched). */
2700
2254
  readonly attempt: v.NumberSchema<undefined>;
2701
- /** Epoch ms when the helper job finished. */
2702
2255
  readonly at: v.NumberSchema<undefined>;
2703
- /**
2704
- * How the helper job ended:
2705
- * - `completed` — the container finished (it may or may not have fully fixed the
2706
- * issue; the gate's next precheck is the source of truth, and `summary` carries
2707
- * the agent's own account, e.g. which files it left conflicting).
2708
- * - `failed` — the job errored / was evicted without finishing.
2709
- */
2710
2256
  readonly outcome: v.PicklistSchema<["completed", "failed"], undefined>;
2711
- /** The PR head commit the helper worked against, when known. */
2712
2257
  readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2713
- /**
2714
- * The fixing instructions handed to the helper for this round — the failing-check
2715
- * summary the CI gate fed the `ci-fixer`, the conflict reason / human-review comments
2716
- * the other gates fed their fixer. Stashed at dispatch and recorded with the attempt so
2717
- * the run-detail UI can show WHAT each round was asked to fix (not only that a round
2718
- * happened) — the gate analogue of the Tester attempt's `concerns`. Null when the gate
2719
- * hands its fixer no textual instructions (the conflicts gate: GitHub reports mergeability
2720
- * as a single bit and the harness leaves the conflict markers for the resolver).
2721
- */
2722
2258
  readonly instructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2723
- /**
2724
- * Structured failing checks handed to this attempt's helper (the CI gate's red check runs
2725
- * behind {@link instructions}), snapshotted at dispatch so each attempt shows the checks it
2726
- * set out to fix. Absent for the conflicts gate (no file-level detail) and when the round
2727
- * carried no structured checks.
2728
- */
2729
2259
  readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
2730
2260
  readonly name: v.StringSchema<undefined>;
2731
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
2732
2261
  readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
2733
- /**
2734
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
2735
- * failed run's logs. Null when GitHub didn't report one.
2736
- */
2737
2262
  readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2738
- /**
2739
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
2740
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
2741
- */
2742
2263
  readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2743
2264
  }, undefined>, undefined>, undefined>, undefined>;
2744
- /** The helper's own summary (or the failure reason), naming what it did / what remains. */
2745
2265
  readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2746
2266
  }, undefined>, undefined>, undefined>, undefined>;
2747
- /**
2748
- * The number of approving reviews the PR had at the last probe, so the UI can show
2749
- * "1 / N approvals". The "required" side is derived from {@link requiredApprovingReviewCount}
2750
- * via the same `max(1, …)` floor the gate applies (see review.logic.ts) rather than persisted
2751
- * a second time. Absent for the other gates.
2752
- */
2753
2267
  readonly lastApprovals: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2754
- /**
2755
- * The raw branch-protection required-approving-review count, cached after the FIRST probe
2756
- * resolves it so subsequent polls skip the static protection read (branch protection is repo
2757
- * config, not PR activity — re-reading it every poll over a multi-day review only burns GitHub
2758
- * rate budget). The UI's displayed "required" count is `max(1, this)` (the gate's effective
2759
- * floor). Absent for the other gates.
2760
- */
2761
2268
  readonly requiredApprovingReviewCount: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2762
- /**
2763
- * The GraphQL ids of the review threads the gate just handed the `fixer`, stashed at
2764
- * dispatch so the helper-completion hook can post a reply + RESOLVE exactly those threads
2765
- * on GitHub before the next probe reads them. Absent for the other gates.
2766
- */
2767
2269
  readonly pendingThreadIds: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>, undefined>;
2768
- /**
2769
- * Epoch ms of the newest plain PR comment the gate has already handed the `fixer`. Plain
2770
- * conversation comments (unlike review threads) can't be "resolved" on GitHub, so they are
2771
- * tracked by timestamp: a comment newer than this is outstanding; the dispatch advances it to
2772
- * the batch max. A reviewer's later comment (newer timestamp) re-opens the work. Absent for
2773
- * the other gates.
2774
- */
2775
2270
  readonly lastAddressedCommentAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2776
- /**
2777
- * The grace window (minutes) the human-review gate waits after the latest review comment
2778
- * before dispatching the fixer, resolved from the task's merge preset ONCE on first entry
2779
- * (alongside `maxAttempts`) so the probe doesn't re-resolve the preset every poll. Absent
2780
- * for the other gates.
2781
- */
2782
2271
  readonly humanReviewGraceMinutes: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2783
- /**
2784
- * A human-initiated freeform fix request parked on the gate (an in-app prompt). Consumed at
2785
- * the top of the next `evaluateGate` pass, which dispatches the fixer with these instructions
2786
- * folded in — bypassing the grace window. Absent for the other gates.
2787
- */
2788
2272
  readonly pendingFix: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2789
2273
  readonly instructions: v.StringSchema<undefined>;
2790
2274
  readonly at: v.NumberSchema<undefined>;
@@ -3292,6 +2776,57 @@ export declare const executionInstanceSchema: v.ObjectSchema<{
3292
2776
  }, "Provide exactly one of forkId or custom.">]>, undefined>, undefined>;
3293
2777
  readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3294
2778
  }, undefined>, undefined>, undefined>;
2779
+ /**
2780
+ * Live JUDGE state on a judge step (the fourth taxonomy bucket): the rubric identity, the
2781
+ * latest structured verdict, the per-task threshold it was compared against, the bounce
2782
+ * budget, and the round history. Created lazily by the engine on first entry and — like
2783
+ * `forkDecision` / `followUps` — deliberately PRESERVED across `resetStepForRerun`, so a
2784
+ * bounce that re-runs the producer plus this step does not erase the verdict it is looping
2785
+ * on. Absent for non-judge steps. See {@link judgeStepStateSchema}.
2786
+ */
2787
+ readonly judge: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2788
+ readonly status: v.PicklistSchema<["evaluating", "awaiting_decision", "bouncing", "passed", "failed", "skipped"], undefined>;
2789
+ readonly rubricId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2790
+ readonly rubricName: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2791
+ readonly rubricOverridden: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
2792
+ readonly verdict: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2793
+ readonly score: v.SchemaWithFallback<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, 0>;
2794
+ readonly summary: v.SchemaWithFallback<v.StringSchema<undefined>, "">;
2795
+ readonly findings: v.OptionalSchema<v.SchemaWithFallback<v.ArraySchema<v.ObjectSchema<{
2796
+ readonly title: v.SchemaWithFallback<v.StringSchema<undefined>, "Untitled finding">;
2797
+ readonly detail: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
2798
+ readonly severity: v.SchemaWithFallback<v.PicklistSchema<["low", "medium", "high", "critical"], undefined>, "medium">;
2799
+ readonly where: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
2800
+ }, undefined>, undefined>, readonly []>, readonly []>;
2801
+ }, undefined>, undefined>, undefined>;
2802
+ readonly threshold: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2803
+ readonly disposition: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["pass", "park", "bounce", "fail"], undefined>, undefined>, undefined>;
2804
+ readonly bounces: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
2805
+ readonly maxBounces: v.OptionalSchema<v.NumberSchema<undefined>, 1>;
2806
+ readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2807
+ readonly rounds: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
2808
+ readonly round: v.NumberSchema<undefined>;
2809
+ readonly at: v.NumberSchema<undefined>;
2810
+ readonly verdict: v.ObjectSchema<{
2811
+ readonly score: v.SchemaWithFallback<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, 0>;
2812
+ readonly summary: v.SchemaWithFallback<v.StringSchema<undefined>, "">;
2813
+ readonly findings: v.OptionalSchema<v.SchemaWithFallback<v.ArraySchema<v.ObjectSchema<{
2814
+ readonly title: v.SchemaWithFallback<v.StringSchema<undefined>, "Untitled finding">;
2815
+ readonly detail: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
2816
+ readonly severity: v.SchemaWithFallback<v.PicklistSchema<["low", "medium", "high", "critical"], undefined>, "medium">;
2817
+ readonly where: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
2818
+ }, undefined>, undefined>, readonly []>, readonly []>;
2819
+ }, undefined>;
2820
+ readonly disposition: v.PicklistSchema<["pass", "park", "bounce", "fail"], undefined>;
2821
+ readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2822
+ }, undefined>, undefined>, readonly []>;
2823
+ readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2824
+ readonly resolution: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2825
+ readonly choice: v.PicklistSchema<["proceed", "bounce", "stop"], undefined>;
2826
+ readonly feedback: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2827
+ readonly at: v.NumberSchema<undefined>;
2828
+ }, undefined>, undefined>, undefined>;
2829
+ }, undefined>, undefined>, undefined>;
3295
2830
  /**
3296
2831
  * Live "Ralph loop" state carried on a `ralph` step: the persistent retry-until-done
3297
2832
  * loop's iteration count, budget, validation command, and per-iteration history. Seeded