@cat-factory/contracts 0.151.0 → 0.152.1

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 (42) hide show
  1. package/dist/bootstrap.js +1 -1
  2. package/dist/bootstrap.js.map +1 -1
  3. package/dist/companion.js +1 -1
  4. package/dist/companion.js.map +1 -1
  5. package/dist/entities.d.ts +14 -3925
  6. package/dist/entities.d.ts.map +1 -1
  7. package/dist/entities.js +17 -1284
  8. package/dist/entities.js.map +1 -1
  9. package/dist/env-config-repair.js +1 -1
  10. package/dist/env-config-repair.js.map +1 -1
  11. package/dist/events.d.ts +2 -1
  12. package/dist/events.d.ts.map +1 -1
  13. package/dist/execution.d.ts +3882 -0
  14. package/dist/execution.d.ts.map +1 -0
  15. package/dist/execution.js +1290 -0
  16. package/dist/execution.js.map +1 -0
  17. package/dist/index.d.ts +1 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/observability.js +1 -1
  22. package/dist/observability.js.map +1 -1
  23. package/dist/requests.d.ts +1 -0
  24. package/dist/requests.d.ts.map +1 -1
  25. package/dist/requests.js +5 -0
  26. package/dist/requests.js.map +1 -1
  27. package/dist/routes/agent-runs.js +1 -1
  28. package/dist/routes/agent-runs.js.map +1 -1
  29. package/dist/routes/board.d.ts +1 -0
  30. package/dist/routes/board.d.ts.map +1 -1
  31. package/dist/routes/execution.d.ts.map +1 -1
  32. package/dist/routes/execution.js +2 -1
  33. package/dist/routes/execution.js.map +1 -1
  34. package/dist/routes/human-review.js +1 -1
  35. package/dist/routes/human-review.js.map +1 -1
  36. package/dist/routes/human-test.js +1 -1
  37. package/dist/routes/human-test.js.map +1 -1
  38. package/dist/routes/visual-confirm.js +1 -1
  39. package/dist/routes/visual-confirm.js.map +1 -1
  40. package/dist/snapshot.js +2 -1
  41. package/dist/snapshot.js.map +1 -1
  42. package/package.json +6 -3
@@ -242,18 +242,23 @@ export declare const blockSchema: v.ObjectSchema<{
242
242
  */
243
243
  readonly technical: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
244
244
  /**
245
- * Ids of curated best-practice prompt fragments selected for this block. Their
246
- * bodies are composed into the agent system prompt at run time. The catalog
247
- * itself lives in @cat-factory/prompt-fragments and is served separately.
245
+ * Ids of curated best-practice prompt fragments selected for this block — the block's OWN,
246
+ * authoritative selection. On a TASK this is what the engine folds into its `code-aware` /
247
+ * `doc-aware` steps (the enclosing service's fragments are NOT re-unioned at run time), seeded
248
+ * from the service at creation and then freely add/removable per task. Their bodies are composed
249
+ * into the agent system prompt at run time; the catalog itself lives in
250
+ * @cat-factory/prompt-fragments (+ the tenant library) and is served separately.
248
251
  */
249
252
  readonly fragmentIds: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
250
253
  /**
251
- * Service-level (frame-only): ids of the best-practice / guideline prompt fragments
252
- * selected as this service's programming standards (drawn from the universal pool in
253
- * @cat-factory/prompt-fragments). At run time the execution engine folds their bodies
254
- * into the system prompt of every agent under this service that carries the
255
- * `code-aware` trait. Seeded from the workspace default on new services; absent no
256
- * service-level fragments (only the block's own `fragmentIds` apply).
254
+ * Service-level (frame-only): ids of the best-practice / guideline prompt fragments selected as
255
+ * this service's programming standards (drawn from the universal pool in
256
+ * @cat-factory/prompt-fragments). They serve two roles: (1) they SEED a new task's own
257
+ * `fragmentIds` at creation (materialised onto the task, which owns its selection from then on —
258
+ * an existing task is NOT retroactively updated when this list later changes; a new fragment is
259
+ * picked up by adding it to the task by hand), and (2) at run time the engine folds them into the
260
+ * frame's OWN `code-aware` runs (e.g. `blueprints`). Seeded from the workspace default on new
261
+ * services; a task does not re-read them at run time.
257
262
  */
258
263
  readonly serviceFragmentIds: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
259
264
  /**
@@ -1252,3922 +1257,6 @@ export declare const pipelineSchema: v.ObjectSchema<{
1252
1257
  }, undefined>;
1253
1258
  export type Pipeline = v.InferOutput<typeof pipelineSchema>;
1254
1259
  export type PipelineAvailability = NonNullable<Pipeline['availability']>;
1255
- export declare const decisionSchema: v.ObjectSchema<{
1256
- readonly id: v.StringSchema<undefined>;
1257
- readonly question: v.StringSchema<undefined>;
1258
- readonly options: v.ArraySchema<v.StringSchema<undefined>, undefined>;
1259
- readonly chosen: v.NullableSchema<v.StringSchema<undefined>, undefined>;
1260
- }, undefined>;
1261
- export type Decision = v.InferOutput<typeof decisionSchema>;
1262
- /** One entry of a running step's todo list — its label and current status. */
1263
- export declare const stepSubtaskItemSchema: v.ObjectSchema<{
1264
- /** The task's human-readable subject, as the agent wrote it. */
1265
- readonly label: v.StringSchema<undefined>;
1266
- readonly status: v.PicklistSchema<["pending", "in_progress", "completed"], undefined>;
1267
- }, undefined>;
1268
- export type StepSubtaskItem = v.InferOutput<typeof stepSubtaskItemSchema>;
1269
- /**
1270
- * Live subtask counts for a running step, reported by the container agent from
1271
- * the coding tool's own todo list (e.g. "3/8 done, 1 in progress"). Present only
1272
- * while an async job is in flight and the agent maintains a todo list; the board
1273
- * renders it as a finer-grained progress indicator than `progress` alone.
1274
- *
1275
- * `items` carries the individual todo entries (label + status) so a zoomed-in
1276
- * card can render the actual task list, not just the count. It is optional — an
1277
- * older agent/poll that only reported counts, or the simpler `todos[].done`
1278
- * fallback shape, still validates without it.
1279
- */
1280
- export declare const stepSubtasksSchema: v.ObjectSchema<{
1281
- readonly completed: v.NumberSchema<undefined>;
1282
- readonly inProgress: v.NumberSchema<undefined>;
1283
- readonly total: v.NumberSchema<undefined>;
1284
- readonly items: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1285
- /** The task's human-readable subject, as the agent wrote it. */
1286
- readonly label: v.StringSchema<undefined>;
1287
- readonly status: v.PicklistSchema<["pending", "in_progress", "completed"], undefined>;
1288
- }, undefined>, undefined>, undefined>;
1289
- }, undefined>;
1290
- export type StepSubtasks = v.InferOutput<typeof stepSubtasksSchema>;
1291
- /**
1292
- * One GitHub-review-style comment left on a specific block or item of an agent's
1293
- * proposal — either by a human reviewing an approval gate, or by a quality
1294
- * companion (e.g. the Spec Reviewer) grading a structured output. `quotedSource`
1295
- * is the verbatim raw markdown of the block the comment targets (sliced from the
1296
- * proposal by its source line range), so a "request changes" re-run can quote the
1297
- * agent's own text back to it rather than a re-rendered approximation. It is
1298
- * OPTIONAL because a comment may instead anchor to a structured item via
1299
- * {@link anchorId} (e.g. a spec requirement / acceptance-criterion id), where the
1300
- * reviewed output is rendered as discrete items rather than free prose and there is
1301
- * no quoted source range — the shape a companion returns.
1302
- */
1303
- export declare const stepReviewCommentSchema: v.ObjectSchema<{
1304
- /**
1305
- * Verbatim raw-markdown source of the commented prose block. Optional: a comment
1306
- * may instead anchor to a structured item via {@link anchorId}, where there is no
1307
- * prose source to quote.
1308
- */
1309
- readonly quotedSource: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1310
- /**
1311
- * 0-based source line range [start, end) of the commented prose block, for
1312
- * best-effort re-anchoring. Optional: a comment may instead anchor to a structured
1313
- * item via {@link anchorId} (e.g. a spec requirement/acceptance-criterion id), where
1314
- * there is no prose line range.
1315
- */
1316
- readonly srcStart: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1317
- readonly srcEnd: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1318
- /**
1319
- * Stable id of the structured item the comment targets (e.g. a spec
1320
- * requirement/criterion id), when the reviewed output is rendered as structured
1321
- * items rather than free prose. Absent for prose-range comments.
1322
- */
1323
- readonly anchorId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1324
- /** The reviewer's note on this block / item. */
1325
- readonly body: v.StringSchema<undefined>;
1326
- }, undefined>;
1327
- export type StepReviewComment = v.InferOutput<typeof stepReviewCommentSchema>;
1328
- /**
1329
- * The standardized, stored verdict a quality companion produced for an output it
1330
- * graded — shared by every companion site (the pipeline companion step and the
1331
- * requirements-rework gate). The raw model response is {@link companionAssessmentSchema}
1332
- * (rating + summary + comments); this is the persisted, self-describing record of how
1333
- * that assessment was applied: the `rating`, the `threshold` it was judged against,
1334
- * whether it `passed`, and the `feedback` surfaced to the human / fed into a rework.
1335
- */
1336
- export declare const companionVerdictSchema: v.ObjectSchema<{
1337
- /** Overall quality of the graded output (0..1, higher = better). */
1338
- readonly rating: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>;
1339
- /** The quality bar the rating had to reach to pass. */
1340
- readonly threshold: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>;
1341
- /** Whether the rating met the threshold. */
1342
- readonly passed: v.BooleanSchema<undefined>;
1343
- /** The companion's challenge / justification (its assessment summary). */
1344
- readonly feedback: v.StringSchema<undefined>;
1345
- }, undefined>;
1346
- export type CompanionVerdict = v.InferOutput<typeof companionVerdictSchema>;
1347
- /**
1348
- * A human approval gate raised after a step whose pipeline marked it
1349
- * `requiresApproval`. Unlike a {@link Decision} (which an agent raises and which
1350
- * re-runs the same step on resolution), an approval gate fires once the step has
1351
- * already produced its `proposal`; approving advances the run (carrying the —
1352
- * possibly edited — proposal forward as context), requesting changes re-runs the
1353
- * same step with the human's `feedback` (+ per-block `comments`), and rejecting
1354
- * stops the run entirely (a terminal `rejected` failure the board can retry).
1355
- */
1356
- export declare const stepApprovalSchema: v.ObjectSchema<{
1357
- /** Unique id of this gate; the durable run parks on it like a decision. */
1358
- readonly id: v.StringSchema<undefined>;
1359
- /** `pending` while awaiting the human; terminal `approved`/`rejected`; `changes_requested` re-runs the step. */
1360
- readonly status: v.PicklistSchema<["pending", "approved", "changes_requested", "rejected"], undefined>;
1361
- /** The agent's output the human is reviewing (editable before approval). */
1362
- readonly proposal: v.StringSchema<undefined>;
1363
- /** When changes were requested, the human's freeform guidance fed into the re-run. */
1364
- readonly feedback: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1365
- /** When changes were requested, per-block review comments fed into the re-run. */
1366
- readonly comments: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1367
- /**
1368
- * Verbatim raw-markdown source of the commented prose block. Optional: a comment
1369
- * may instead anchor to a structured item via {@link anchorId}, where there is no
1370
- * prose source to quote.
1371
- */
1372
- readonly quotedSource: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1373
- /**
1374
- * 0-based source line range [start, end) of the commented prose block, for
1375
- * best-effort re-anchoring. Optional: a comment may instead anchor to a structured
1376
- * item via {@link anchorId} (e.g. a spec requirement/acceptance-criterion id), where
1377
- * there is no prose line range.
1378
- */
1379
- readonly srcStart: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1380
- readonly srcEnd: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1381
- /**
1382
- * Stable id of the structured item the comment targets (e.g. a spec
1383
- * requirement/criterion id), when the reviewed output is rendered as structured
1384
- * items rather than free prose. Absent for prose-range comments.
1385
- */
1386
- readonly anchorId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1387
- /** The reviewer's note on this block / item. */
1388
- readonly body: v.StringSchema<undefined>;
1389
- }, undefined>, undefined>, undefined>;
1390
- }, undefined>;
1391
- export type StepApproval = v.InferOutput<typeof stepApprovalSchema>;
1392
- /**
1393
- * The agent flows that produce an "agent run" (a container-backed job whose
1394
- * lifecycle, progress and failure the board surfaces uniformly):
1395
- * - `bootstrap` — a "bootstrap repo" run that scaffolds/adapts a new repo.
1396
- * - `execution` — a task pipeline run that implements a board task.
1397
- * - `env-config-repair` — a coding agent that repairs an environment-provider
1398
- * config file in an existing repo (no board block; surfaced on the infra window).
1399
- */
1400
- export declare const agentRunKindSchema: v.PicklistSchema<["bootstrap", "execution", "env-config-repair"], undefined>;
1401
- export type AgentRunKind = v.InferOutput<typeof agentRunKindSchema>;
1402
- /**
1403
- * How an agent run faulted, so the board can classify the failure (and hint
1404
- * whether a retry is likely to help). The union spans both flows; a given flow
1405
- * only ever produces a subset:
1406
- * - `preflight` — rejected before dispatch (repo missing/not empty, not connected). [bootstrap]
1407
- * - `dispatch` — the container accept-request itself failed (HTTP / network). [bootstrap]
1408
- * - `evicted` — the container vanished mid-run (eviction/crash). Retrying spins a fresh one.
1409
- * - `timeout` — a container watchdog fired (inactivity or max-duration).
1410
- * - `agent` — the agent / git push reported a failure.
1411
- * - `job_failed` — an async container job came back failed. [execution]
1412
- * - `rejected` — a human rejected a gated proposal, stopping the run. [execution]
1413
- * - `cancelled` — the user (or an orphan sweep) explicitly stopped the run.
1414
- * - `unknown` — anything not otherwise classified.
1415
- */
1416
- export declare const agentFailureKindSchema: v.PicklistSchema<["preflight", "dispatch", "environment", "evicted", "timeout", "agent", "job_failed", "rejected", "companion_rejected", "stalled", "cancelled", "unknown"], undefined>;
1417
- export type AgentFailureKind = v.InferOutput<typeof agentFailureKindSchema>;
1418
- /**
1419
- * Structured diagnostics captured when an agent run fails, stored on the run and
1420
- * surfaced on the board so a crash isn't just a one-line message. The container's
1421
- * stdout/stderr can't always be pulled into this record (an evicted container is
1422
- * gone), so for `evicted`/`timeout` failures the `hint` points at where to look.
1423
- */
1424
- export declare const agentFailureSchema: v.ObjectSchema<{
1425
- readonly kind: v.PicklistSchema<["preflight", "dispatch", "environment", "evicted", "timeout", "agent", "job_failed", "rejected", "companion_rejected", "stalled", "cancelled", "unknown"], undefined>;
1426
- /** Human-readable summary (mirrors the run's `error` for back-compat). */
1427
- readonly message: v.StringSchema<undefined>;
1428
- /** Extended detail when available (the harness's reason, an HTTP body, …). */
1429
- readonly detail: v.NullableSchema<v.StringSchema<undefined>, undefined>;
1430
- /** Where to look next (e.g. "check the container logs for this job id"). */
1431
- readonly hint: v.NullableSchema<v.StringSchema<undefined>, undefined>;
1432
- /**
1433
- * Optional machine-readable cause code so the SPA can render precise, actionable guidance
1434
- * without string-matching the prose `message`/`detail` (the failure analogue of a
1435
- * {@link ConflictReason}). Kind-scoped: an `environment` failure carries an
1436
- * {@link EnvironmentFailureReason} (e.g. `deploy_runner_unwired`). Absent when the cause has
1437
- * no client-specific handling.
1438
- */
1439
- readonly reason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1440
- /** Epoch ms the failure was recorded. */
1441
- readonly occurredAt: v.NumberSchema<undefined>;
1442
- /** Last subtask counts seen before the failure, for context (null if none). */
1443
- readonly lastSubtasks: v.NullableSchema<v.ObjectSchema<{
1444
- readonly completed: v.NumberSchema<undefined>;
1445
- readonly inProgress: v.NumberSchema<undefined>;
1446
- readonly total: v.NumberSchema<undefined>;
1447
- readonly items: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1448
- /** The task's human-readable subject, as the agent wrote it. */
1449
- readonly label: v.StringSchema<undefined>;
1450
- readonly status: v.PicklistSchema<["pending", "in_progress", "completed"], undefined>;
1451
- }, undefined>, undefined>, undefined>;
1452
- }, undefined>, undefined>;
1453
- /**
1454
- * Index of the pipeline step that was in flight when the run failed (the run's
1455
- * `currentStep` at fail time), so the per-attempt failure trail can be attributed to a
1456
- * specific step — the step-detail overlay filters its "execution history" to the failures
1457
- * recorded for that step. Absent on a bootstrap failure (no steps) and on legacy records.
1458
- */
1459
- readonly stepIndex: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1460
- }, undefined>;
1461
- export type AgentFailure = v.InferOutput<typeof agentFailureSchema>;
1462
- /**
1463
- * A SUCCESSFUL step attempt whose output a restart later superseded — the positive
1464
- * complement of {@link agentFailureSchema}. When a run is restarted from a step, that
1465
- * step and every later one are reset and their `output` dropped; the ones that had
1466
- * already succeeded are recorded here so the step-detail overlay's "execution history"
1467
- * surfaces what a superseded attempt PRODUCED, not only the errors. Attributed to a
1468
- * `stepIndex` exactly like a failure, and rides in the run's `detail` JSON (no column).
1469
- */
1470
- export declare const priorStepOutputSchema: v.ObjectSchema<{
1471
- /** Index of the pipeline step that produced this output (see {@link agentFailureSchema} `stepIndex`). */
1472
- readonly stepIndex: v.NumberSchema<undefined>;
1473
- /** Epoch ms the superseded attempt finished (its `finishedAt`, else when it was recorded). */
1474
- readonly occurredAt: v.NumberSchema<undefined>;
1475
- /** The attempt's prose/JSON output, clipped to a stored-size bound when {@link truncated}. */
1476
- readonly output: v.StringSchema<undefined>;
1477
- /** Whether {@link output} was clipped because the original exceeded the per-entry size bound. */
1478
- readonly truncated: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1479
- }, undefined>;
1480
- export type PriorStepOutput = v.InferOutput<typeof priorStepOutputSchema>;
1481
- /**
1482
- * State a polling **gate** step carries (today `ci` and `conflicts`). A gate is
1483
- * special (like a `deployer` step): it is NOT itself an LLM/container agent. It
1484
- * runs a programmatic precheck against a provider (CI check runs / PR mergeability)
1485
- * for the PR head commit and only escalates to a helper container agent (`ci-fixer`
1486
- * / `conflict-resolver`) on a negative verdict, looping until the precheck passes or
1487
- * the attempt budget is spent. Which gate a step is comes from its `agentKind`, so it
1488
- * is not duplicated here. See the engine's `GateDefinition` registry.
1489
- * - `phase: 'checking'` — running the precheck / waiting for the provider.
1490
- * - `phase: 'working'` — a helper agent is in flight (tracked via the step's
1491
- * `jobId`); on completion the gate returns to `checking`.
1492
- */
1493
- /** One failing check the CI gate's precheck saw, flattened for display. */
1494
- export declare const gateFailingCheckSchema: v.ObjectSchema<{
1495
- readonly name: v.StringSchema<undefined>;
1496
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
1497
- readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
1498
- /**
1499
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
1500
- * failed run's logs. Null when GitHub didn't report one.
1501
- */
1502
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1503
- /**
1504
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
1505
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
1506
- */
1507
- readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1508
- }, undefined>;
1509
- export type GateFailingCheck = v.InferOutput<typeof gateFailingCheckSchema>;
1510
- /**
1511
- * One helper-agent attempt the gate dispatched (a ci-fixer / conflict-resolver run),
1512
- * recorded when the job finishes so the UI can show what each attempt tried and how it
1513
- * ended — detail that used to be discarded the moment the gate re-probed.
1514
- */
1515
- export declare const gateAttemptSchema: v.ObjectSchema<{
1516
- /** 1-based attempt number (matches `attempts` at the time the helper was dispatched). */
1517
- readonly attempt: v.NumberSchema<undefined>;
1518
- /** Epoch ms when the helper job finished. */
1519
- readonly at: v.NumberSchema<undefined>;
1520
- /**
1521
- * How the helper job ended:
1522
- * - `completed` — the container finished (it may or may not have fully fixed the
1523
- * issue; the gate's next precheck is the source of truth, and `summary` carries
1524
- * the agent's own account, e.g. which files it left conflicting).
1525
- * - `failed` — the job errored / was evicted without finishing.
1526
- */
1527
- readonly outcome: v.PicklistSchema<["completed", "failed"], undefined>;
1528
- /** The PR head commit the helper worked against, when known. */
1529
- readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1530
- /**
1531
- * The fixing instructions handed to the helper for this round — the failing-check
1532
- * summary the CI gate fed the `ci-fixer`, the conflict reason / human-review comments
1533
- * the other gates fed their fixer. Stashed at dispatch and recorded with the attempt so
1534
- * the run-detail UI can show WHAT each round was asked to fix (not only that a round
1535
- * happened) — the gate analogue of the Tester attempt's `concerns`. Null when the gate
1536
- * hands its fixer no textual instructions (the conflicts gate: GitHub reports mergeability
1537
- * as a single bit and the harness leaves the conflict markers for the resolver).
1538
- */
1539
- readonly instructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1540
- /**
1541
- * Structured failing checks handed to this attempt's helper (the CI gate's red check runs
1542
- * behind {@link instructions}), snapshotted at dispatch so each attempt shows the checks it
1543
- * set out to fix. Absent for the conflicts gate (no file-level detail) and when the round
1544
- * carried no structured checks.
1545
- */
1546
- readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
1547
- readonly name: v.StringSchema<undefined>;
1548
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
1549
- readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
1550
- /**
1551
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
1552
- * failed run's logs. Null when GitHub didn't report one.
1553
- */
1554
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1555
- /**
1556
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
1557
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
1558
- */
1559
- readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1560
- }, undefined>, undefined>, undefined>, undefined>;
1561
- /** The helper's own summary (or the failure reason), naming what it did / what remains. */
1562
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1563
- }, undefined>;
1564
- export type GateAttempt = v.InferOutput<typeof gateAttemptSchema>;
1565
- export declare const gateStepStateSchema: v.ObjectSchema<{
1566
- readonly phase: v.PicklistSchema<["checking", "working"], undefined>;
1567
- /** How many helper-agent attempts have been dispatched so far. */
1568
- readonly attempts: v.NumberSchema<undefined>;
1569
- /** Ceiling on attempts, resolved from the task's merge preset at step start. */
1570
- readonly maxAttempts: v.NumberSchema<undefined>;
1571
- /** The PR head commit being gated, once resolved (the own-service PR on a multi-repo block). */
1572
- readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1573
- /**
1574
- * Per-PR head commits for a MULTI-REPO block (service-connections phase 4), keyed by repo
1575
- * full name (owner/name) — own-service PR plus each peer-service PR. Set by the CI /
1576
- * conflicts gates whose precheck aggregates across every PR the task opened. Absent for a
1577
- * single-repo block (the scalar {@link headSha} is the only head).
1578
- */
1579
- readonly headShas: v.OptionalSchema<v.NullableSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>, undefined>;
1580
- /**
1581
- * The repo the conflicts gate's most recent `fail` verdict found conflicted, so the
1582
- * single-repo conflict-resolver is dispatched at THAT repo (own-service or a peer) rather
1583
- * than always the own-service one. Absent ⇒ the own-service repo. Only the conflicts gate
1584
- * sets it (the CI-fixer runs across all repos, so the CI gate leaves it undefined).
1585
- */
1586
- readonly conflictTarget: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
1587
- readonly repo: v.StringSchema<undefined>;
1588
- readonly frameId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1589
- readonly branch: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1590
- }, undefined>, undefined>, undefined>;
1591
- /**
1592
- * The most recent precheck verdict, so the UI can show why the gate is looping
1593
- * (failing → a helper is fixing) vs idle-passing. Set on every probe.
1594
- */
1595
- readonly lastVerdict: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["pass", "pending", "fail"], undefined>, undefined>, undefined>;
1596
- /**
1597
- * Human-readable summary of the latest failing precheck (the failing CI checks /
1598
- * the conflict reason) — the conclusion detail that used to be fed only to the
1599
- * helper agent and then discarded. Carried across the helper dispatch so the
1600
- * window keeps showing what is being fixed. Null when the last probe passed.
1601
- */
1602
- readonly lastFailureSummary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1603
- /**
1604
- * Structured failing checks behind {@link lastFailureSummary} for the CI gate, so
1605
- * the UI can list each red check by name + conclusion. Absent for the conflicts
1606
- * gate (GitHub reports no file-level detail) and when the last probe passed.
1607
- */
1608
- readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
1609
- readonly name: v.StringSchema<undefined>;
1610
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
1611
- readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
1612
- /**
1613
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
1614
- * failed run's logs. Null when GitHub didn't report one.
1615
- */
1616
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1617
- /**
1618
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
1619
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
1620
- */
1621
- readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1622
- }, undefined>, undefined>, undefined>, undefined>;
1623
- /**
1624
- * The fixing instructions handed to the most-recently dispatched helper (the failing-check
1625
- * summary / conflict reason / human fix prompt), stashed at dispatch so the attempt recorded
1626
- * when that helper's job settles can carry WHAT the round was asked to fix onto its
1627
- * {@link gateAttemptSchema} entry. Transient bookkeeping — the durable per-round history lives
1628
- * on {@link attemptLog}. Null when the gate hands its fixer no textual instructions.
1629
- */
1630
- readonly lastDispatchedInstructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1631
- /**
1632
- * Epoch ms of the release marker for a time-windowed gate (post-release-health) — the
1633
- * moment it began watching the deployed release. The gate keeps polling `pending`
1634
- * until this + the preset's watch window has elapsed (then a clean run passes) or a
1635
- * monitor/SLO regresses (then it escalates to the on-call agent). Absent for the
1636
- * CI/conflicts gates.
1637
- */
1638
- readonly watchSince: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1639
- /**
1640
- * The watch-window length (minutes) for a time-windowed gate (post-release-health),
1641
- * resolved from the task's merge preset ONCE on first entry (alongside `maxAttempts`)
1642
- * so the probe doesn't re-load the block + re-resolve the preset on every poll. Absent
1643
- * for the CI/conflicts gates.
1644
- */
1645
- readonly watchWindowMinutes: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1646
- /**
1647
- * The regressed signals captured when the post-release-health gate escalated to the
1648
- * on-call agent, so the agent's completion handler can build the `release_regression`
1649
- * notification + incident enrichment from the SAME evidence the agent investigated
1650
- * — rather than re-reading Datadog (a third round-trip that could also disagree with
1651
- * what the agent saw if the window moved). Absent for the CI/conflicts gates.
1652
- */
1653
- readonly regressedSignals: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
1654
- readonly kind: v.PicklistSchema<["monitor", "slo"], undefined>;
1655
- readonly id: v.StringSchema<undefined>;
1656
- readonly name: v.StringSchema<undefined>;
1657
- readonly state: v.PicklistSchema<["ok", "warn", "alert", "no_data"], undefined>;
1658
- readonly detail: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1659
- }, undefined>, undefined>, undefined>, undefined>;
1660
- /**
1661
- * Append-only history of the helper-agent attempts this gate dispatched (ci-fixer /
1662
- * conflict-resolver runs), each recorded when its job finished. Lets the UI show what
1663
- * every attempt tried and how it ended, instead of only a bare `attempts` count.
1664
- * Absent for the post-release-health gate (its on-call helper is resolved specially).
1665
- */
1666
- readonly attemptLog: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
1667
- /** 1-based attempt number (matches `attempts` at the time the helper was dispatched). */
1668
- readonly attempt: v.NumberSchema<undefined>;
1669
- /** Epoch ms when the helper job finished. */
1670
- readonly at: v.NumberSchema<undefined>;
1671
- /**
1672
- * How the helper job ended:
1673
- * - `completed` — the container finished (it may or may not have fully fixed the
1674
- * issue; the gate's next precheck is the source of truth, and `summary` carries
1675
- * the agent's own account, e.g. which files it left conflicting).
1676
- * - `failed` — the job errored / was evicted without finishing.
1677
- */
1678
- readonly outcome: v.PicklistSchema<["completed", "failed"], undefined>;
1679
- /** The PR head commit the helper worked against, when known. */
1680
- readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1681
- /**
1682
- * The fixing instructions handed to the helper for this round — the failing-check
1683
- * summary the CI gate fed the `ci-fixer`, the conflict reason / human-review comments
1684
- * the other gates fed their fixer. Stashed at dispatch and recorded with the attempt so
1685
- * the run-detail UI can show WHAT each round was asked to fix (not only that a round
1686
- * happened) — the gate analogue of the Tester attempt's `concerns`. Null when the gate
1687
- * hands its fixer no textual instructions (the conflicts gate: GitHub reports mergeability
1688
- * as a single bit and the harness leaves the conflict markers for the resolver).
1689
- */
1690
- readonly instructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1691
- /**
1692
- * Structured failing checks handed to this attempt's helper (the CI gate's red check runs
1693
- * behind {@link instructions}), snapshotted at dispatch so each attempt shows the checks it
1694
- * set out to fix. Absent for the conflicts gate (no file-level detail) and when the round
1695
- * carried no structured checks.
1696
- */
1697
- readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
1698
- readonly name: v.StringSchema<undefined>;
1699
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
1700
- readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
1701
- /**
1702
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
1703
- * failed run's logs. Null when GitHub didn't report one.
1704
- */
1705
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1706
- /**
1707
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
1708
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
1709
- */
1710
- readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1711
- }, undefined>, undefined>, undefined>, undefined>;
1712
- /** The helper's own summary (or the failure reason), naming what it did / what remains. */
1713
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1714
- }, undefined>, undefined>, undefined>, undefined>;
1715
- /**
1716
- * The number of approving reviews the PR had at the last probe, so the UI can show
1717
- * "1 / N approvals". The "required" side is derived from {@link requiredApprovingReviewCount}
1718
- * via the same `max(1, …)` floor the gate applies (see review.logic.ts) rather than persisted
1719
- * a second time. Absent for the other gates.
1720
- */
1721
- readonly lastApprovals: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1722
- /**
1723
- * The raw branch-protection required-approving-review count, cached after the FIRST probe
1724
- * resolves it so subsequent polls skip the static protection read (branch protection is repo
1725
- * config, not PR activity — re-reading it every poll over a multi-day review only burns GitHub
1726
- * rate budget). The UI's displayed "required" count is `max(1, this)` (the gate's effective
1727
- * floor). Absent for the other gates.
1728
- */
1729
- readonly requiredApprovingReviewCount: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1730
- /**
1731
- * The GraphQL ids of the review threads the gate just handed the `fixer`, stashed at
1732
- * dispatch so the helper-completion hook can post a reply + RESOLVE exactly those threads
1733
- * on GitHub before the next probe reads them. Absent for the other gates.
1734
- */
1735
- readonly pendingThreadIds: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>, undefined>;
1736
- /**
1737
- * Epoch ms of the newest plain PR comment the gate has already handed the `fixer`. Plain
1738
- * conversation comments (unlike review threads) can't be "resolved" on GitHub, so they are
1739
- * tracked by timestamp: a comment newer than this is outstanding; the dispatch advances it to
1740
- * the batch max. A reviewer's later comment (newer timestamp) re-opens the work. Absent for
1741
- * the other gates.
1742
- */
1743
- readonly lastAddressedCommentAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1744
- /**
1745
- * The grace window (minutes) the human-review gate waits after the latest review comment
1746
- * before dispatching the fixer, resolved from the task's merge preset ONCE on first entry
1747
- * (alongside `maxAttempts`) so the probe doesn't re-resolve the preset every poll. Absent
1748
- * for the other gates.
1749
- */
1750
- readonly humanReviewGraceMinutes: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1751
- /**
1752
- * A human-initiated freeform fix request parked on the gate (an in-app prompt). Consumed at
1753
- * the top of the next `evaluateGate` pass, which dispatches the fixer with these instructions
1754
- * folded in — bypassing the grace window. Absent for the other gates.
1755
- */
1756
- readonly pendingFix: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
1757
- readonly instructions: v.StringSchema<undefined>;
1758
- readonly at: v.NumberSchema<undefined>;
1759
- }, undefined>, undefined>, undefined>;
1760
- }, undefined>;
1761
- export type GateStepState = v.InferOutput<typeof gateStepStateSchema>;
1762
- /**
1763
- * State a `tester` step carries while it runs the Tester → Fixer loop. Unlike `ci`,
1764
- * the gate's own work IS a container job (the Tester); on a withheld greenlight the
1765
- * engine loops a `fixer` container agent and re-tests.
1766
- * - `phase: 'testing'` — a Tester job is in flight (tracked via the step's `jobId`).
1767
- * - `phase: 'fixing'` — a Fixer job is in flight; on completion the step returns to
1768
- * `testing` and a fresh Tester job is dispatched.
1769
- */
1770
- /**
1771
- * One round of the Tester→Fixer loop, recorded when a `fixer` job finishes so the test
1772
- * window can show what each fixer attempt set out to fix and how it ended — the analogue of
1773
- * a polling gate's {@link gateAttemptSchema}, since a fixer run is otherwise an opaque
1774
- * sub-job with no surface of its own (only a bare `attempts` count).
1775
- */
1776
- export declare const testerAttemptSchema: v.ObjectSchema<{
1777
- /** 1-based fixer round (matches `attempts` after the fixer for this round was dispatched). */
1778
- readonly attempt: v.NumberSchema<undefined>;
1779
- /** Epoch ms when the fixer job finished. */
1780
- readonly at: v.NumberSchema<undefined>;
1781
- /** Whether the fixer container finished (`completed`) or errored/was evicted (`failed`). */
1782
- readonly outcome: v.PicklistSchema<["completed", "failed"], undefined>;
1783
- /** The fixer's own summary (or the failure reason), naming what it changed / what failed. */
1784
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1785
- /**
1786
- * The concerns the fixer was handed for this round (from the Tester report that withheld
1787
- * its greenlight), so the window can show WHAT each round tried to address — not only that
1788
- * a round happened.
1789
- */
1790
- readonly concerns: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
1791
- readonly title: v.StringSchema<undefined>;
1792
- readonly detail: v.StringSchema<undefined>;
1793
- readonly severity: v.PicklistSchema<["low", "medium", "high", "critical"], undefined>;
1794
- }, undefined>, undefined>, undefined>, undefined>;
1795
- }, undefined>;
1796
- export type TesterAttempt = v.InferOutput<typeof testerAttemptSchema>;
1797
- export declare const testerStepStateSchema: v.ObjectSchema<{
1798
- readonly phase: v.PicklistSchema<["testing", "fixing"], undefined>;
1799
- /** How many `fixer` attempts have been dispatched so far. */
1800
- readonly attempts: v.NumberSchema<undefined>;
1801
- /** Ceiling on fixer attempts, resolved from the task's merge preset at step start. */
1802
- readonly maxAttempts: v.NumberSchema<undefined>;
1803
- /** The most recent Tester report (what was tested, outcomes, concerns, greenlight). */
1804
- readonly lastReport: v.OptionalSchema<v.NullableSchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
1805
- readonly greenlight: v.BooleanSchema<undefined>;
1806
- readonly summary: v.StringSchema<undefined>;
1807
- readonly tested: v.ArraySchema<v.StringSchema<undefined>, undefined>;
1808
- readonly outcomes: v.ArraySchema<v.ObjectSchema<{
1809
- readonly name: v.StringSchema<undefined>;
1810
- readonly status: v.PicklistSchema<["passed", "failed", "skipped"], undefined>;
1811
- readonly detail: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1812
- }, undefined>, undefined>;
1813
- readonly concerns: v.ArraySchema<v.ObjectSchema<{
1814
- readonly title: v.StringSchema<undefined>;
1815
- readonly detail: v.StringSchema<undefined>;
1816
- readonly severity: v.PicklistSchema<["low", "medium", "high", "critical"], undefined>;
1817
- }, undefined>, undefined>;
1818
- readonly environment: v.OptionalSchema<v.PicklistSchema<["local", "ephemeral"], undefined>, undefined>;
1819
- readonly screenshots: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
1820
- readonly view: v.StringSchema<undefined>;
1821
- readonly artifactId: v.StringSchema<undefined>;
1822
- readonly hash: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1823
- readonly width: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1824
- readonly height: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1825
- readonly referenceArtifactId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
1826
- }, undefined>, undefined>, undefined>;
1827
- readonly abort: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
1828
- readonly reason: v.StringSchema<undefined>;
1829
- }, undefined>, undefined>, undefined>;
1830
- }, undefined>, v.TransformAction<{
1831
- greenlight: boolean;
1832
- summary: string;
1833
- tested: string[];
1834
- outcomes: {
1835
- name: string;
1836
- status: "failed" | "passed" | "skipped";
1837
- detail?: string | undefined;
1838
- }[];
1839
- concerns: {
1840
- title: string;
1841
- detail: string;
1842
- severity: "critical" | "high" | "low" | "medium";
1843
- }[];
1844
- environment?: "ephemeral" | "local" | undefined;
1845
- screenshots?: {
1846
- view: string;
1847
- artifactId: string;
1848
- hash?: string | undefined;
1849
- width?: number | undefined;
1850
- height?: number | undefined;
1851
- referenceArtifactId?: string | undefined;
1852
- }[] | undefined;
1853
- abort?: {
1854
- reason: string;
1855
- } | null | undefined;
1856
- }, {
1857
- greenlight: boolean;
1858
- summary: string;
1859
- tested: string[];
1860
- outcomes: {
1861
- name: string;
1862
- status: "failed" | "passed" | "skipped";
1863
- detail?: string | undefined;
1864
- }[];
1865
- concerns: {
1866
- title: string;
1867
- detail: string;
1868
- severity: "critical" | "high" | "low" | "medium";
1869
- }[];
1870
- environment?: "ephemeral" | "local" | undefined;
1871
- screenshots?: {
1872
- view: string;
1873
- artifactId: string;
1874
- hash?: string | undefined;
1875
- width?: number | undefined;
1876
- height?: number | undefined;
1877
- referenceArtifactId?: string | undefined;
1878
- }[] | undefined;
1879
- abort?: {
1880
- reason: string;
1881
- } | null | undefined;
1882
- }>]>, undefined>, undefined>;
1883
- /**
1884
- * Append-only history of the `fixer` rounds this Tester step looped through, each recorded
1885
- * when its job finished. Lets the test window surface an inspectable timeline of the fixer
1886
- * attempts (what each addressed, how it ended) instead of only a bare `attempts` count.
1887
- */
1888
- readonly attemptLog: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
1889
- /** 1-based fixer round (matches `attempts` after the fixer for this round was dispatched). */
1890
- readonly attempt: v.NumberSchema<undefined>;
1891
- /** Epoch ms when the fixer job finished. */
1892
- readonly at: v.NumberSchema<undefined>;
1893
- /** Whether the fixer container finished (`completed`) or errored/was evicted (`failed`). */
1894
- readonly outcome: v.PicklistSchema<["completed", "failed"], undefined>;
1895
- /** The fixer's own summary (or the failure reason), naming what it changed / what failed. */
1896
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1897
- /**
1898
- * The concerns the fixer was handed for this round (from the Tester report that withheld
1899
- * its greenlight), so the window can show WHAT each round tried to address — not only that
1900
- * a round happened.
1901
- */
1902
- readonly concerns: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
1903
- readonly title: v.StringSchema<undefined>;
1904
- readonly detail: v.StringSchema<undefined>;
1905
- readonly severity: v.PicklistSchema<["low", "medium", "high", "critical"], undefined>;
1906
- }, undefined>, undefined>, undefined>, undefined>;
1907
- }, undefined>, undefined>, undefined>, undefined>;
1908
- /**
1909
- * The most recent in-container docker-compose dependency stand-up record (local-infra
1910
- * tester): whether the dependencies came up and the captured (redacted, bounded)
1911
- * `docker compose up` logs. Refreshed on each Tester round (it stands the infra up anew),
1912
- * so the test window can surface WHY local infra failed to come up — the failure-class
1913
- * artifact the orchestrator-side provisioning logs can't see. Absent for ephemeral /
1914
- * no-infra runs. See {@link testerInfraSetupSchema}.
1915
- */
1916
- readonly infraSetup: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
1917
- readonly started: v.BooleanSchema<undefined>;
1918
- readonly composePath: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1919
- readonly at: v.NumberSchema<undefined>;
1920
- readonly durationMs: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1921
- readonly logs: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1922
- readonly error: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1923
- }, undefined>, undefined>, undefined>;
1924
- }, undefined>;
1925
- export type TesterStepState = v.InferOutput<typeof testerStepStateSchema>;
1926
- /**
1927
- * One test quality-control companion verdict, recorded per QC evaluation of a Tester
1928
- * report (in order; newest last). `adequate` is the QC's judgement that the report is
1929
- * complete enough to conclude testing / go to the fixer; when false, `gaps` lists the
1930
- * concrete things the Tester still needs to exercise and `feedback` is the prose the
1931
- * Tester is handed on its re-run.
1932
- */
1933
- export declare const testerQualityVerdictSchema: v.ObjectSchema<{
1934
- /** Whether the report is complete/coherent enough to proceed (no QC re-run needed). */
1935
- readonly adequate: v.BooleanSchema<undefined>;
1936
- /** The QC's prose challenge / justification, folded into the Tester's re-run context. */
1937
- readonly feedback: v.StringSchema<undefined>;
1938
- /** Concrete coverage gaps the Tester must still address (empty when adequate). */
1939
- readonly gaps: v.ArraySchema<v.StringSchema<undefined>, undefined>;
1940
- /** Epoch ms the verdict was produced. */
1941
- readonly at: v.NumberSchema<undefined>;
1942
- /** The model that produced the verdict, for transparency. */
1943
- readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1944
- }, undefined>;
1945
- export type TesterQualityVerdict = v.InferOutput<typeof testerQualityVerdictSchema>;
1946
- /**
1947
- * Live test quality-control loop state carried on a run's Tester step, copied from the
1948
- * pipeline's per-step {@link testerQualityConfigSchema} at run start. The QC companion reads
1949
- * each Tester report BEFORE the greenlight/fixer decision; when the report is inadequate and
1950
- * `attempts < maxAttempts` it loops the Tester (folding the prior report + `feedback` in),
1951
- * bounded independently of the fixer budget. `verdicts` records each evaluation for the UI.
1952
- */
1953
- export declare const testerQualityStepStateSchema: v.ObjectSchema<{
1954
- /** Whether the QC companion is active on this Tester step (the builder toggle). */
1955
- readonly enabled: v.BooleanSchema<undefined>;
1956
- /** How many QC-driven Tester re-runs have been dispatched so far. */
1957
- readonly attempts: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
1958
- /** Ceiling on QC-driven re-runs, from the task's merge preset (`maxTesterQualityIterations`). */
1959
- readonly maxAttempts: v.NumberSchema<undefined>;
1960
- /** Optional estimate gating copied from the pipeline; evaluated against the block estimate. */
1961
- readonly gating: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
1962
- readonly enabled: v.BooleanSchema<undefined>;
1963
- readonly minComplexity: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
1964
- readonly minRisk: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
1965
- readonly minImpact: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
1966
- readonly onMissingEstimate: v.OptionalSchema<v.PicklistSchema<["run", "skip"], undefined>, "run">;
1967
- }, undefined>, undefined>, undefined>;
1968
- /** One verdict per QC evaluation, in order (newest last). Empty before the first grade. */
1969
- readonly verdicts: v.ArraySchema<v.ObjectSchema<{
1970
- /** Whether the report is complete/coherent enough to proceed (no QC re-run needed). */
1971
- readonly adequate: v.BooleanSchema<undefined>;
1972
- /** The QC's prose challenge / justification, folded into the Tester's re-run context. */
1973
- readonly feedback: v.StringSchema<undefined>;
1974
- /** Concrete coverage gaps the Tester must still address (empty when adequate). */
1975
- readonly gaps: v.ArraySchema<v.StringSchema<undefined>, undefined>;
1976
- /** Epoch ms the verdict was produced. */
1977
- readonly at: v.NumberSchema<undefined>;
1978
- /** The model that produced the verdict, for transparency. */
1979
- readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1980
- }, undefined>, undefined>;
1981
- /** Set true once the QC budget was spent with the report still judged inadequate. */
1982
- readonly exceeded: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1983
- }, undefined>;
1984
- export type TesterQualityStepState = v.InferOutput<typeof testerQualityStepStateSchema>;
1985
- /**
1986
- * The compact ephemeral-environment view a `human-test` gate carries on its step, so the
1987
- * dedicated window can surface the live URL/status without a second fetch. The full record
1988
- * (with encrypted access creds) lives in the `environments` table; this is the non-secret
1989
- * projection. Null in degraded manual mode (no env provider wired) or after the human
1990
- * destroys the env from the gate.
1991
- */
1992
- /**
1993
- * The compact, non-secret projection of the ephemeral environment a run's step is
1994
- * associated with — its lifecycle state, public URL, TTL, and (when failed) the
1995
- * exact provider error. Surfaced in a run's details (esp. the Tester step) so the
1996
- * env's spinning-up / running / shut-down / errored state is visible without a
1997
- * second fetch. The full record (with encrypted creds) lives in the `environments`
1998
- * table. {@link humanTestEnvironmentSchema} is the human-test gate's subset of this.
1999
- */
2000
- export declare const runEnvironmentSchema: v.ObjectSchema<{
2001
- /** The `environments` row id (lets a window fetch access creds / re-poll status). */
2002
- readonly id: v.StringSchema<undefined>;
2003
- /** The provisioned public URL (null while still provisioning). */
2004
- readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
2005
- /** The environment lifecycle status; see {@link environmentStatusSchema}. */
2006
- readonly status: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
2007
- /** Epoch ms the environment expires (TTL), when known. */
2008
- readonly expiresAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2009
- /** The verbatim provider error when the environment failed/expired, else null. */
2010
- readonly lastError: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2011
- /**
2012
- * The service's declared provision type this environment was stood up for
2013
- * (`kubernetes` | `docker-compose` | `custom` | `infraless`), recorded at provision
2014
- * time so a run's details show exactly what was provisioned. Null for legacy rows /
2015
- * pre-resolution.
2016
- */
2017
- readonly provisionType: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>, undefined>, undefined>;
2018
- /**
2019
- * The resolved engine that handled the provisioning (`local-docker` | `local-k3s` |
2020
- * `remote-kubernetes` | `remote-custom` | `none`), surfaced in run details alongside the
2021
- * environment state. Null for legacy rows / pre-resolution.
2022
- */
2023
- readonly engine: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["local-docker", "local-k3s", "remote-kubernetes", "remote-custom", "none"], undefined>, undefined>, undefined>;
2024
- }, undefined>;
2025
- export type RunEnvironment = v.InferOutput<typeof runEnvironmentSchema>;
2026
- /**
2027
- * The lifecycle status of the per-run container backing a container agent step:
2028
- * `starting` (dispatching / cold-booting), `up` (running the agent's job),
2029
- * `errored` (the container failed to start, was evicted, or its job faulted), and
2030
- * `destroyed` (the run's container has been reclaimed). The SPA additionally derives
2031
- * `destroyed` for a finished run's container steps (the container is reclaimed as a
2032
- * unit when the run terminates), so the backend only ever persists the first three.
2033
- */
2034
- export declare const runContainerStatusSchema: v.PicklistSchema<["starting", "up", "errored", "destroyed"], undefined>;
2035
- export type RunContainerStatus = v.InferOutput<typeof runContainerStatusSchema>;
2036
- /**
2037
- * The compact, non-secret projection of the per-run container a container agent step
2038
- * runs in, so a run's details can show WHAT the container is doing and WHERE it lives
2039
- * instead of a step's "spinning up container…" badge vanishing into a blank "working"
2040
- * state once the container is up. Populated by the engine across the dispatch + poll
2041
- * lifecycle of an async (container) step; only ever set on container-backed steps.
2042
- */
2043
- export declare const runContainerSchema: v.ObjectSchema<{
2044
- /** The container lifecycle status; see {@link runContainerStatusSchema}. */
2045
- readonly status: v.PicklistSchema<["starting", "up", "errored", "destroyed"], undefined>;
2046
- /**
2047
- * The coarse phase the agent's job is in while the container is `up` (`clone` →
2048
- * `agent` → `push`, seeded `starting`), forwarded from the harness. Lets the details
2049
- * distinguish "still preparing the checkout" from "the agent is making calls". Absent
2050
- * until the first poll, or when the runner doesn't report a phase.
2051
- */
2052
- readonly phase: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2053
- /** Provider container/runner id (Cloudflare DO id, docker container id), when known. */
2054
- readonly id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2055
- /** A reachable address for the running container (the local docker host URL), when one exists. */
2056
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2057
- }, undefined>;
2058
- export type RunContainer = v.InferOutput<typeof runContainerSchema>;
2059
- /** The web-search backend a run's container searches through, when search is available. */
2060
- export declare const webSearchProviderSchema: v.PicklistSchema<["brave", "searxng"], undefined>;
2061
- export type WebSearchProvider = v.InferOutput<typeof webSearchProviderSchema>;
2062
- /**
2063
- * Narrow a free-text stored value (a telemetry `provider` column, which is plain TEXT) back
2064
- * to the {@link WebSearchProvider} union, or null when it isn't one. The single source of
2065
- * truth both telemetry stores use to map their rows, so the union is defined once.
2066
- */
2067
- export declare function isWebSearchProvider(value: unknown): value is WebSearchProvider;
2068
- /**
2069
- * Whether a container agent had web search available for its run, and — when it did —
2070
- * which upstream backend served it (resolved backend-side at dispatch from the run's
2071
- * account keys, else the deployment default). Surfaced on a container step so the run
2072
- * details can say "Web search: SearXNG" vs "Web search: unavailable"; it is a static
2073
- * dispatch-time fact, NOT gated by prompt-recording telemetry (the performed queries
2074
- * are — see the agent-search-query observability sink). `provider` is null when search
2075
- * was unavailable.
2076
- */
2077
- export declare const webSearchAvailabilitySchema: v.ObjectSchema<{
2078
- readonly available: v.BooleanSchema<undefined>;
2079
- readonly provider: v.NullableSchema<v.PicklistSchema<["brave", "searxng"], undefined>, undefined>;
2080
- }, undefined>;
2081
- export type WebSearchAvailability = v.InferOutput<typeof webSearchAvailabilitySchema>;
2082
- /**
2083
- * The TERMINAL per-frame outcome of one environment a `deployer` step provisioned during a
2084
- * multi-env fan-out (the task's own service frame + every involved-service frame): `ready`
2085
- * (a live env, `url` set), `failed` (the provision broke, `error` carries the cause), or
2086
- * `skipped` (the frame is `infraless`, nothing stood up). The IN-FLIGHT frame is not recorded
2087
- * here — it lives on `step.jobId`/`step.deployFrameId` until it settles. See
2088
- * {@link pipelineStepSchema.entries.deployEnvs}.
2089
- */
2090
- export declare const deployEnvStateSchema: v.ObjectSchema<{
2091
- readonly status: v.PicklistSchema<["ready", "failed", "skipped"], undefined>;
2092
- /** The provisioned URL for a `ready` env (absent for `failed`/`skipped`). */
2093
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2094
- /** The verbatim provider error for a `failed` env. */
2095
- readonly error: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2096
- }, undefined>;
2097
- export type DeployEnvState = v.InferOutput<typeof deployEnvStateSchema>;
2098
- /** Per-frame deploy outcomes keyed by service-frame block id; see {@link deployEnvStateSchema}. */
2099
- export declare const deployEnvsSchema: v.RecordSchema<v.StringSchema<undefined>, v.ObjectSchema<{
2100
- readonly status: v.PicklistSchema<["ready", "failed", "skipped"], undefined>;
2101
- /** The provisioned URL for a `ready` env (absent for `failed`/`skipped`). */
2102
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2103
- /** The verbatim provider error for a `failed` env. */
2104
- readonly error: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2105
- }, undefined>, undefined>;
2106
- export type DeployEnvs = v.InferOutput<typeof deployEnvsSchema>;
2107
- export declare const humanTestEnvironmentSchema: v.ObjectSchema<{
2108
- /** The `environments` row id, so the window can fetch access creds / re-poll status. */
2109
- readonly id: v.StringSchema<undefined>;
2110
- /** The provisioned public URL the human tests against (null while still provisioning). */
2111
- readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
2112
- /** The environment lifecycle status; see {@link environmentStatusSchema}. */
2113
- readonly status: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
2114
- /** Epoch ms the environment expires (TTL), when known. */
2115
- readonly expiresAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2116
- }, undefined>;
2117
- export type HumanTestEnvironment = v.InferOutput<typeof humanTestEnvironmentSchema>;
2118
- /**
2119
- * One round of human-driven remediation on a `human-test` gate: the human wrote findings and
2120
- * asked for a fix (helper `fixer`), or pulled main and hit a conflict (helper
2121
- * `conflict-resolver`). Appended when the round opens and stamped with its outcome once the
2122
- * helper job settles, so the window can show the full history of what was asked and how it ended.
2123
- */
2124
- export declare const humanTestRoundSchema: v.ObjectSchema<{
2125
- /** The kind of round — a findings-driven fix or a pull-main-with-conflicts resolve. */
2126
- readonly kind: v.PicklistSchema<["fix", "pull-main"], undefined>;
2127
- /** The human's findings prompt (fix), or a one-line note for the pull-main round. */
2128
- readonly findings: v.StringSchema<undefined>;
2129
- /** The helper container kind this round dispatched (`fixer` / `conflict-resolver`). */
2130
- readonly helperKind: v.StringSchema<undefined>;
2131
- /** The helper job's id while it ran, for cross-referencing the run timeline. */
2132
- readonly jobId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2133
- /** How the helper ended once its job settled. Absent while still in flight. */
2134
- readonly outcome: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["completed", "failed"], undefined>, undefined>, undefined>;
2135
- /** Epoch ms the round opened (the human clicked Request fix / Pull main). */
2136
- readonly at: v.NumberSchema<undefined>;
2137
- }, undefined>;
2138
- export type HumanTestRound = v.InferOutput<typeof humanTestRoundSchema>;
2139
- /**
2140
- * State a `human-test` gate carries while it runs. Unlike a polling gate (`ci`/`conflicts`)
2141
- * there is no programmatic verdict — the HUMAN is the verdict — so the step spins up an
2142
- * ephemeral environment, parks for a person to validate it, and on demand dispatches the same
2143
- * helpers the other gates use (the Tester's `fixer` for findings; the `conflict-resolver` for a
2144
- * conflicting pull-main). Phases:
2145
- * - `provisioning` — an environment is being stood up (the driver polls until ready).
2146
- * - `awaiting_human` — parked: the human tests the env and confirms / requests a fix / etc.
2147
- * - `fixing` — a `fixer` job (from the human's findings) is in flight.
2148
- * - `resolving_conflicts` — a `conflict-resolver` job (from a conflicting pull-main) is in flight.
2149
- * - `passed` — the human confirmed; the env is torn down and the run advances.
2150
- */
2151
- export declare const humanTestStepStateSchema: v.ObjectSchema<{
2152
- readonly phase: v.PicklistSchema<["provisioning", "awaiting_human", "fixing", "resolving_conflicts", "passed"], undefined>;
2153
- /** The live ephemeral environment (null in degraded manual mode / after destroy). */
2154
- readonly environment: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2155
- /** The `environments` row id, so the window can fetch access creds / re-poll status. */
2156
- readonly id: v.StringSchema<undefined>;
2157
- /** The provisioned public URL the human tests against (null while still provisioning). */
2158
- readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
2159
- /** The environment lifecycle status; see {@link environmentStatusSchema}. */
2160
- readonly status: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
2161
- /** Epoch ms the environment expires (TTL), when known. */
2162
- readonly expiresAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2163
- }, undefined>, undefined>, undefined>;
2164
- /**
2165
- * Why no environment was auto-provisioned — set in degraded manual mode (no env provider
2166
- * wired, or provisioning errored) so the window can explain it and let the human test
2167
- * against the PR branch manually. Absent when an env was provisioned.
2168
- */
2169
- readonly degradedReason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2170
- /** How many helper (fixer / conflict-resolver) attempts have been dispatched so far. */
2171
- readonly attempts: v.NumberSchema<undefined>;
2172
- /** Ceiling on helper attempts, resolved from the task's merge preset (`ciMaxAttempts`). */
2173
- readonly maxAttempts: v.NumberSchema<undefined>;
2174
- /** The PR head commit being tested, when known. */
2175
- readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2176
- /** Append-only history of fix / pull-main rounds; see {@link humanTestRoundSchema}. */
2177
- readonly rounds: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
2178
- /** The kind of round — a findings-driven fix or a pull-main-with-conflicts resolve. */
2179
- readonly kind: v.PicklistSchema<["fix", "pull-main"], undefined>;
2180
- /** The human's findings prompt (fix), or a one-line note for the pull-main round. */
2181
- readonly findings: v.StringSchema<undefined>;
2182
- /** The helper container kind this round dispatched (`fixer` / `conflict-resolver`). */
2183
- readonly helperKind: v.StringSchema<undefined>;
2184
- /** The helper job's id while it ran, for cross-referencing the run timeline. */
2185
- readonly jobId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2186
- /** How the helper ended once its job settled. Absent while still in flight. */
2187
- readonly outcome: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["completed", "failed"], undefined>, undefined>, undefined>;
2188
- /** Epoch ms the round opened (the human clicked Request fix / Pull main). */
2189
- readonly at: v.NumberSchema<undefined>;
2190
- }, undefined>, undefined>, undefined>;
2191
- /**
2192
- * Transient action the human requested while the gate is parked — recorded on the parked
2193
- * step and consumed by the durable driver when it re-enters the gate (the analogue of
2194
- * `pendingIncorporation` on a requirements gate). Cleared once the driver acts on it.
2195
- */
2196
- readonly pendingAction: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2197
- readonly type: v.PicklistSchema<["confirm", "request-fix", "pull-main", "recreate"], undefined>;
2198
- /** The findings prompt for a `request-fix` action. */
2199
- readonly findings: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2200
- }, undefined>, undefined>, undefined>;
2201
- }, undefined>;
2202
- export type HumanTestStepState = v.InferOutput<typeof humanTestStepStateSchema>;
2203
- /**
2204
- * One actual-vs-reference pairing the visual-confirmation gate shows the human: a logical
2205
- * view, the screenshot the UI tester captured of it (`actualArtifactId`), and the reference
2206
- * design image for the same view when one was uploaded (`referenceArtifactId`). Either side
2207
- * may be absent (a captured view with no reference, or a reference whose view wasn't captured).
2208
- */
2209
- export declare const visualConfirmPairSchema: v.ObjectSchema<{
2210
- readonly view: v.StringSchema<undefined>;
2211
- readonly actualArtifactId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2212
- readonly referenceArtifactId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2213
- }, undefined>;
2214
- export type VisualConfirmPair = v.InferOutput<typeof visualConfirmPairSchema>;
2215
- /** One human-requested fix round on a visual-confirmation gate (dispatches the `fixer`). */
2216
- export declare const visualConfirmRoundSchema: v.ObjectSchema<{
2217
- readonly findings: v.StringSchema<undefined>;
2218
- readonly helperKind: v.StringSchema<undefined>;
2219
- readonly jobId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2220
- readonly outcome: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["completed", "failed"], undefined>, undefined>, undefined>;
2221
- readonly at: v.NumberSchema<undefined>;
2222
- }, undefined>;
2223
- export type VisualConfirmRound = v.InferOutput<typeof visualConfirmRoundSchema>;
2224
- /**
2225
- * State a `visual-confirmation` gate carries while it runs. Like `human-test` there is no
2226
- * programmatic verdict — a HUMAN reviews the UI tester's screenshots against the uploaded
2227
- * reference designs and approves, or requests a fix (which dispatches the `fixer` and then
2228
- * re-captures via the UI tester). Phases:
2229
- * - `awaiting_human`— parked: the human reviews actual-vs-reference and approves / requests a fix.
2230
- * - `fixing` — a `fixer` job (from the human's findings) is in flight.
2231
- * - `approved` — the human approved; the run advances.
2232
- *
2233
- * (A dedicated `capturing` phase for an auto re-run of the UI tester after a fix is deferred
2234
- * until that loop is wired — see the visual-confirmation handover doc — so it is intentionally
2235
- * absent from the picklist rather than carried as dead state.)
2236
- */
2237
- export declare const visualConfirmStepStateSchema: v.ObjectSchema<{
2238
- readonly phase: v.PicklistSchema<["awaiting_human", "fixing", "approved"], undefined>;
2239
- /** The actual-vs-reference pairs the human reviews, refreshed on each (re)capture. */
2240
- readonly pairs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
2241
- readonly view: v.StringSchema<undefined>;
2242
- readonly actualArtifactId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2243
- readonly referenceArtifactId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2244
- }, undefined>, undefined>, undefined>;
2245
- /** Set when no screenshots could be gathered (no UI tester ran / no storage) — manual mode. */
2246
- readonly degradedReason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2247
- /** How many fixer attempts have been dispatched so far. */
2248
- readonly attempts: v.NumberSchema<undefined>;
2249
- /** Ceiling on fixer attempts, resolved from the task's merge preset (`ciMaxAttempts`). */
2250
- readonly maxAttempts: v.NumberSchema<undefined>;
2251
- /** Append-only history of fix rounds; see {@link visualConfirmRoundSchema}. */
2252
- readonly rounds: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
2253
- readonly findings: v.StringSchema<undefined>;
2254
- readonly helperKind: v.StringSchema<undefined>;
2255
- readonly jobId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2256
- readonly outcome: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["completed", "failed"], undefined>, undefined>, undefined>;
2257
- readonly at: v.NumberSchema<undefined>;
2258
- }, undefined>, undefined>, undefined>;
2259
- /**
2260
- * Transient action the human requested while parked — consumed by the durable driver
2261
- * when it re-enters the gate. Cleared once acted on.
2262
- */
2263
- readonly pendingAction: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2264
- readonly type: v.PicklistSchema<["approve", "request-fix", "recapture"], undefined>;
2265
- /** The findings prompt for a `request-fix` action. */
2266
- readonly findings: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2267
- }, undefined>, undefined>, undefined>;
2268
- }, undefined>;
2269
- export type VisualConfirmStepState = v.InferOutput<typeof visualConfirmStepStateSchema>;
2270
- /**
2271
- * Per-step LLM observability rollup: a compact aggregate over every model call the
2272
- * step's container made, recorded by the LLM proxy and summed by the engine for the
2273
- * board. It surfaces, at a glance, token usage, how close the step ran to its
2274
- * output-token limit (truncation), the latency split between transport/proxy
2275
- * overhead and actual model execution, and any errors/warnings. The full per-call
2276
- * detail (prompts + responses) is fetched on demand for the drill-down panel.
2277
- * Absent when the observability sink is not wired.
2278
- */
2279
- export declare const stepMetricsSchema: v.ObjectSchema<{
2280
- /** Number of model calls recorded for this step. */
2281
- readonly calls: v.NumberSchema<undefined>;
2282
- /** Sum of prompt (input) tokens across the step's calls. */
2283
- readonly promptTokens: v.NumberSchema<undefined>;
2284
- /**
2285
- * Sum of prompt tokens served from the provider's prefix cache. A subset of
2286
- * promptTokens on OpenAI/DeepSeek, but on Anthropic cache reads are reported
2287
- * separately from input tokens, so this can exceed promptTokens. 0 on a cache-less
2288
- * flavour (Workers AI); the metrics bar shows the cached split when present. Absent ⇒
2289
- * unknown (older snapshot).
2290
- */
2291
- readonly cachedPromptTokens: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
2292
- /** Sum of completion (output) tokens across the step's calls. */
2293
- readonly completionTokens: v.NumberSchema<undefined>;
2294
- /** Largest single completion the model produced (closest approach to the limit). */
2295
- readonly peakCompletionTokens: v.NumberSchema<undefined>;
2296
- /** The output ceiling in effect (max requested `max_tokens`), or null when unknown. */
2297
- readonly maxOutputTokens: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
2298
- /** Calls cut short by the output limit (`finish_reason === 'length'`). */
2299
- readonly truncatedCalls: v.NumberSchema<undefined>;
2300
- /** Sum of model execution time (ms) — the "actual prompt/tool execution" slice. */
2301
- readonly upstreamMs: v.NumberSchema<undefined>;
2302
- /** Sum of transport/proxy overhead (ms) — the interim-layer cost. */
2303
- readonly overheadMs: v.NumberSchema<undefined>;
2304
- /** Calls that failed (non-2xx / refused / in-process error). */
2305
- readonly errors: v.NumberSchema<undefined>;
2306
- /** Successful calls that warned (truncated or content-filtered). */
2307
- readonly warnings: v.NumberSchema<undefined>;
2308
- }, undefined>;
2309
- export type StepMetrics = v.InferOutput<typeof stepMetricsSchema>;
2310
- export declare const pipelineStepSchema: v.ObjectSchema<{
2311
- /**
2312
- * Id of the execution run (the {@link executionInstanceSchema} `id`) this step
2313
- * belongs to — surfaced on every step so a lone step in a log line or a detail view
2314
- * can name its run, for easier debugging. A projection that always equals the parent
2315
- * instance's `id`: stamped from the enclosing instance when the run is read or
2316
- * emitted, not persisted independently. Absent only on steps not yet round-tripped.
2317
- */
2318
- readonly runId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2319
- readonly agentKind: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
2320
- readonly state: v.PicklistSchema<["pending", "working", "waiting_decision", "done"], undefined>;
2321
- readonly progress: v.NumberSchema<undefined>;
2322
- /** LLM observability rollup for this step; see {@link stepMetricsSchema}. */
2323
- readonly metrics: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2324
- /** Number of model calls recorded for this step. */
2325
- readonly calls: v.NumberSchema<undefined>;
2326
- /** Sum of prompt (input) tokens across the step's calls. */
2327
- readonly promptTokens: v.NumberSchema<undefined>;
2328
- /**
2329
- * Sum of prompt tokens served from the provider's prefix cache. A subset of
2330
- * promptTokens on OpenAI/DeepSeek, but on Anthropic cache reads are reported
2331
- * separately from input tokens, so this can exceed promptTokens. 0 on a cache-less
2332
- * flavour (Workers AI); the metrics bar shows the cached split when present. Absent ⇒
2333
- * unknown (older snapshot).
2334
- */
2335
- readonly cachedPromptTokens: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
2336
- /** Sum of completion (output) tokens across the step's calls. */
2337
- readonly completionTokens: v.NumberSchema<undefined>;
2338
- /** Largest single completion the model produced (closest approach to the limit). */
2339
- readonly peakCompletionTokens: v.NumberSchema<undefined>;
2340
- /** The output ceiling in effect (max requested `max_tokens`), or null when unknown. */
2341
- readonly maxOutputTokens: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
2342
- /** Calls cut short by the output limit (`finish_reason === 'length'`). */
2343
- readonly truncatedCalls: v.NumberSchema<undefined>;
2344
- /** Sum of model execution time (ms) — the "actual prompt/tool execution" slice. */
2345
- readonly upstreamMs: v.NumberSchema<undefined>;
2346
- /** Sum of transport/proxy overhead (ms) — the interim-layer cost. */
2347
- readonly overheadMs: v.NumberSchema<undefined>;
2348
- /** Calls that failed (non-2xx / refused / in-process error). */
2349
- readonly errors: v.NumberSchema<undefined>;
2350
- /** Successful calls that warned (truncated or content-filtered). */
2351
- readonly warnings: v.NumberSchema<undefined>;
2352
- }, undefined>, undefined>, undefined>;
2353
- /**
2354
- * Live gate state while a polling gate step (`ci` / `conflicts`) runs its
2355
- * precheck-or-escalate loop; see {@link gateStepStateSchema}. The gate kind is
2356
- * `agentKind`.
2357
- */
2358
- readonly gate: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2359
- readonly phase: v.PicklistSchema<["checking", "working"], undefined>;
2360
- /** How many helper-agent attempts have been dispatched so far. */
2361
- readonly attempts: v.NumberSchema<undefined>;
2362
- /** Ceiling on attempts, resolved from the task's merge preset at step start. */
2363
- readonly maxAttempts: v.NumberSchema<undefined>;
2364
- /** The PR head commit being gated, once resolved (the own-service PR on a multi-repo block). */
2365
- readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2366
- /**
2367
- * Per-PR head commits for a MULTI-REPO block (service-connections phase 4), keyed by repo
2368
- * full name (owner/name) — own-service PR plus each peer-service PR. Set by the CI /
2369
- * conflicts gates whose precheck aggregates across every PR the task opened. Absent for a
2370
- * single-repo block (the scalar {@link headSha} is the only head).
2371
- */
2372
- readonly headShas: v.OptionalSchema<v.NullableSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>, undefined>;
2373
- /**
2374
- * The repo the conflicts gate's most recent `fail` verdict found conflicted, so the
2375
- * single-repo conflict-resolver is dispatched at THAT repo (own-service or a peer) rather
2376
- * than always the own-service one. Absent ⇒ the own-service repo. Only the conflicts gate
2377
- * sets it (the CI-fixer runs across all repos, so the CI gate leaves it undefined).
2378
- */
2379
- readonly conflictTarget: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2380
- readonly repo: v.StringSchema<undefined>;
2381
- readonly frameId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2382
- readonly branch: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2383
- }, undefined>, undefined>, undefined>;
2384
- /**
2385
- * The most recent precheck verdict, so the UI can show why the gate is looping
2386
- * (failing → a helper is fixing) vs idle-passing. Set on every probe.
2387
- */
2388
- readonly lastVerdict: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["pass", "pending", "fail"], undefined>, undefined>, undefined>;
2389
- /**
2390
- * Human-readable summary of the latest failing precheck (the failing CI checks /
2391
- * the conflict reason) — the conclusion detail that used to be fed only to the
2392
- * helper agent and then discarded. Carried across the helper dispatch so the
2393
- * window keeps showing what is being fixed. Null when the last probe passed.
2394
- */
2395
- readonly lastFailureSummary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2396
- /**
2397
- * Structured failing checks behind {@link lastFailureSummary} for the CI gate, so
2398
- * the UI can list each red check by name + conclusion. Absent for the conflicts
2399
- * gate (GitHub reports no file-level detail) and when the last probe passed.
2400
- */
2401
- readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
2402
- readonly name: v.StringSchema<undefined>;
2403
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
2404
- readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
2405
- /**
2406
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
2407
- * failed run's logs. Null when GitHub didn't report one.
2408
- */
2409
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2410
- /**
2411
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
2412
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
2413
- */
2414
- readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2415
- }, undefined>, undefined>, undefined>, undefined>;
2416
- /**
2417
- * The fixing instructions handed to the most-recently dispatched helper (the failing-check
2418
- * summary / conflict reason / human fix prompt), stashed at dispatch so the attempt recorded
2419
- * when that helper's job settles can carry WHAT the round was asked to fix onto its
2420
- * {@link gateAttemptSchema} entry. Transient bookkeeping — the durable per-round history lives
2421
- * on {@link attemptLog}. Null when the gate hands its fixer no textual instructions.
2422
- */
2423
- readonly lastDispatchedInstructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2424
- /**
2425
- * Epoch ms of the release marker for a time-windowed gate (post-release-health) — the
2426
- * moment it began watching the deployed release. The gate keeps polling `pending`
2427
- * until this + the preset's watch window has elapsed (then a clean run passes) or a
2428
- * monitor/SLO regresses (then it escalates to the on-call agent). Absent for the
2429
- * CI/conflicts gates.
2430
- */
2431
- readonly watchSince: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2432
- /**
2433
- * The watch-window length (minutes) for a time-windowed gate (post-release-health),
2434
- * resolved from the task's merge preset ONCE on first entry (alongside `maxAttempts`)
2435
- * so the probe doesn't re-load the block + re-resolve the preset on every poll. Absent
2436
- * for the CI/conflicts gates.
2437
- */
2438
- readonly watchWindowMinutes: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2439
- /**
2440
- * The regressed signals captured when the post-release-health gate escalated to the
2441
- * on-call agent, so the agent's completion handler can build the `release_regression`
2442
- * notification + incident enrichment from the SAME evidence the agent investigated
2443
- * — rather than re-reading Datadog (a third round-trip that could also disagree with
2444
- * what the agent saw if the window moved). Absent for the CI/conflicts gates.
2445
- */
2446
- readonly regressedSignals: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
2447
- readonly kind: v.PicklistSchema<["monitor", "slo"], undefined>;
2448
- readonly id: v.StringSchema<undefined>;
2449
- readonly name: v.StringSchema<undefined>;
2450
- readonly state: v.PicklistSchema<["ok", "warn", "alert", "no_data"], undefined>;
2451
- readonly detail: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2452
- }, undefined>, undefined>, undefined>, undefined>;
2453
- /**
2454
- * Append-only history of the helper-agent attempts this gate dispatched (ci-fixer /
2455
- * conflict-resolver runs), each recorded when its job finished. Lets the UI show what
2456
- * every attempt tried and how it ended, instead of only a bare `attempts` count.
2457
- * Absent for the post-release-health gate (its on-call helper is resolved specially).
2458
- */
2459
- readonly attemptLog: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
2460
- /** 1-based attempt number (matches `attempts` at the time the helper was dispatched). */
2461
- readonly attempt: v.NumberSchema<undefined>;
2462
- /** Epoch ms when the helper job finished. */
2463
- readonly at: v.NumberSchema<undefined>;
2464
- /**
2465
- * How the helper job ended:
2466
- * - `completed` — the container finished (it may or may not have fully fixed the
2467
- * issue; the gate's next precheck is the source of truth, and `summary` carries
2468
- * the agent's own account, e.g. which files it left conflicting).
2469
- * - `failed` — the job errored / was evicted without finishing.
2470
- */
2471
- readonly outcome: v.PicklistSchema<["completed", "failed"], undefined>;
2472
- /** The PR head commit the helper worked against, when known. */
2473
- readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2474
- /**
2475
- * The fixing instructions handed to the helper for this round — the failing-check
2476
- * summary the CI gate fed the `ci-fixer`, the conflict reason / human-review comments
2477
- * the other gates fed their fixer. Stashed at dispatch and recorded with the attempt so
2478
- * the run-detail UI can show WHAT each round was asked to fix (not only that a round
2479
- * happened) — the gate analogue of the Tester attempt's `concerns`. Null when the gate
2480
- * hands its fixer no textual instructions (the conflicts gate: GitHub reports mergeability
2481
- * as a single bit and the harness leaves the conflict markers for the resolver).
2482
- */
2483
- readonly instructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2484
- /**
2485
- * Structured failing checks handed to this attempt's helper (the CI gate's red check runs
2486
- * behind {@link instructions}), snapshotted at dispatch so each attempt shows the checks it
2487
- * set out to fix. Absent for the conflicts gate (no file-level detail) and when the round
2488
- * carried no structured checks.
2489
- */
2490
- readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
2491
- readonly name: v.StringSchema<undefined>;
2492
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
2493
- readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
2494
- /**
2495
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
2496
- * failed run's logs. Null when GitHub didn't report one.
2497
- */
2498
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2499
- /**
2500
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
2501
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
2502
- */
2503
- readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2504
- }, undefined>, undefined>, undefined>, undefined>;
2505
- /** The helper's own summary (or the failure reason), naming what it did / what remains. */
2506
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2507
- }, undefined>, undefined>, undefined>, undefined>;
2508
- /**
2509
- * The number of approving reviews the PR had at the last probe, so the UI can show
2510
- * "1 / N approvals". The "required" side is derived from {@link requiredApprovingReviewCount}
2511
- * via the same `max(1, …)` floor the gate applies (see review.logic.ts) rather than persisted
2512
- * a second time. Absent for the other gates.
2513
- */
2514
- readonly lastApprovals: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2515
- /**
2516
- * The raw branch-protection required-approving-review count, cached after the FIRST probe
2517
- * resolves it so subsequent polls skip the static protection read (branch protection is repo
2518
- * config, not PR activity — re-reading it every poll over a multi-day review only burns GitHub
2519
- * rate budget). The UI's displayed "required" count is `max(1, this)` (the gate's effective
2520
- * floor). Absent for the other gates.
2521
- */
2522
- readonly requiredApprovingReviewCount: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2523
- /**
2524
- * The GraphQL ids of the review threads the gate just handed the `fixer`, stashed at
2525
- * dispatch so the helper-completion hook can post a reply + RESOLVE exactly those threads
2526
- * on GitHub before the next probe reads them. Absent for the other gates.
2527
- */
2528
- readonly pendingThreadIds: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>, undefined>;
2529
- /**
2530
- * Epoch ms of the newest plain PR comment the gate has already handed the `fixer`. Plain
2531
- * conversation comments (unlike review threads) can't be "resolved" on GitHub, so they are
2532
- * tracked by timestamp: a comment newer than this is outstanding; the dispatch advances it to
2533
- * the batch max. A reviewer's later comment (newer timestamp) re-opens the work. Absent for
2534
- * the other gates.
2535
- */
2536
- readonly lastAddressedCommentAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2537
- /**
2538
- * The grace window (minutes) the human-review gate waits after the latest review comment
2539
- * before dispatching the fixer, resolved from the task's merge preset ONCE on first entry
2540
- * (alongside `maxAttempts`) so the probe doesn't re-resolve the preset every poll. Absent
2541
- * for the other gates.
2542
- */
2543
- readonly humanReviewGraceMinutes: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2544
- /**
2545
- * A human-initiated freeform fix request parked on the gate (an in-app prompt). Consumed at
2546
- * the top of the next `evaluateGate` pass, which dispatches the fixer with these instructions
2547
- * folded in — bypassing the grace window. Absent for the other gates.
2548
- */
2549
- readonly pendingFix: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2550
- readonly instructions: v.StringSchema<undefined>;
2551
- readonly at: v.NumberSchema<undefined>;
2552
- }, undefined>, undefined>, undefined>;
2553
- }, undefined>, undefined>, undefined>;
2554
- /** Live Tester→Fixer loop state while a `tester` step runs/fixes; see {@link testerStepStateSchema}. */
2555
- readonly test: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2556
- readonly phase: v.PicklistSchema<["testing", "fixing"], undefined>;
2557
- /** How many `fixer` attempts have been dispatched so far. */
2558
- readonly attempts: v.NumberSchema<undefined>;
2559
- /** Ceiling on fixer attempts, resolved from the task's merge preset at step start. */
2560
- readonly maxAttempts: v.NumberSchema<undefined>;
2561
- /** The most recent Tester report (what was tested, outcomes, concerns, greenlight). */
2562
- readonly lastReport: v.OptionalSchema<v.NullableSchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
2563
- readonly greenlight: v.BooleanSchema<undefined>;
2564
- readonly summary: v.StringSchema<undefined>;
2565
- readonly tested: v.ArraySchema<v.StringSchema<undefined>, undefined>;
2566
- readonly outcomes: v.ArraySchema<v.ObjectSchema<{
2567
- readonly name: v.StringSchema<undefined>;
2568
- readonly status: v.PicklistSchema<["passed", "failed", "skipped"], undefined>;
2569
- readonly detail: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2570
- }, undefined>, undefined>;
2571
- readonly concerns: v.ArraySchema<v.ObjectSchema<{
2572
- readonly title: v.StringSchema<undefined>;
2573
- readonly detail: v.StringSchema<undefined>;
2574
- readonly severity: v.PicklistSchema<["low", "medium", "high", "critical"], undefined>;
2575
- }, undefined>, undefined>;
2576
- readonly environment: v.OptionalSchema<v.PicklistSchema<["local", "ephemeral"], undefined>, undefined>;
2577
- readonly screenshots: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
2578
- readonly view: v.StringSchema<undefined>;
2579
- readonly artifactId: v.StringSchema<undefined>;
2580
- readonly hash: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2581
- readonly width: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
2582
- readonly height: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
2583
- readonly referenceArtifactId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2584
- }, undefined>, undefined>, undefined>;
2585
- readonly abort: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2586
- readonly reason: v.StringSchema<undefined>;
2587
- }, undefined>, undefined>, undefined>;
2588
- }, undefined>, v.TransformAction<{
2589
- greenlight: boolean;
2590
- summary: string;
2591
- tested: string[];
2592
- outcomes: {
2593
- name: string;
2594
- status: "failed" | "passed" | "skipped";
2595
- detail?: string | undefined;
2596
- }[];
2597
- concerns: {
2598
- title: string;
2599
- detail: string;
2600
- severity: "critical" | "high" | "low" | "medium";
2601
- }[];
2602
- environment?: "ephemeral" | "local" | undefined;
2603
- screenshots?: {
2604
- view: string;
2605
- artifactId: string;
2606
- hash?: string | undefined;
2607
- width?: number | undefined;
2608
- height?: number | undefined;
2609
- referenceArtifactId?: string | undefined;
2610
- }[] | undefined;
2611
- abort?: {
2612
- reason: string;
2613
- } | null | undefined;
2614
- }, {
2615
- greenlight: boolean;
2616
- summary: string;
2617
- tested: string[];
2618
- outcomes: {
2619
- name: string;
2620
- status: "failed" | "passed" | "skipped";
2621
- detail?: string | undefined;
2622
- }[];
2623
- concerns: {
2624
- title: string;
2625
- detail: string;
2626
- severity: "critical" | "high" | "low" | "medium";
2627
- }[];
2628
- environment?: "ephemeral" | "local" | undefined;
2629
- screenshots?: {
2630
- view: string;
2631
- artifactId: string;
2632
- hash?: string | undefined;
2633
- width?: number | undefined;
2634
- height?: number | undefined;
2635
- referenceArtifactId?: string | undefined;
2636
- }[] | undefined;
2637
- abort?: {
2638
- reason: string;
2639
- } | null | undefined;
2640
- }>]>, undefined>, undefined>;
2641
- /**
2642
- * Append-only history of the `fixer` rounds this Tester step looped through, each recorded
2643
- * when its job finished. Lets the test window surface an inspectable timeline of the fixer
2644
- * attempts (what each addressed, how it ended) instead of only a bare `attempts` count.
2645
- */
2646
- readonly attemptLog: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
2647
- /** 1-based fixer round (matches `attempts` after the fixer for this round was dispatched). */
2648
- readonly attempt: v.NumberSchema<undefined>;
2649
- /** Epoch ms when the fixer job finished. */
2650
- readonly at: v.NumberSchema<undefined>;
2651
- /** Whether the fixer container finished (`completed`) or errored/was evicted (`failed`). */
2652
- readonly outcome: v.PicklistSchema<["completed", "failed"], undefined>;
2653
- /** The fixer's own summary (or the failure reason), naming what it changed / what failed. */
2654
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2655
- /**
2656
- * The concerns the fixer was handed for this round (from the Tester report that withheld
2657
- * its greenlight), so the window can show WHAT each round tried to address — not only that
2658
- * a round happened.
2659
- */
2660
- readonly concerns: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
2661
- readonly title: v.StringSchema<undefined>;
2662
- readonly detail: v.StringSchema<undefined>;
2663
- readonly severity: v.PicklistSchema<["low", "medium", "high", "critical"], undefined>;
2664
- }, undefined>, undefined>, undefined>, undefined>;
2665
- }, undefined>, undefined>, undefined>, undefined>;
2666
- /**
2667
- * The most recent in-container docker-compose dependency stand-up record (local-infra
2668
- * tester): whether the dependencies came up and the captured (redacted, bounded)
2669
- * `docker compose up` logs. Refreshed on each Tester round (it stands the infra up anew),
2670
- * so the test window can surface WHY local infra failed to come up — the failure-class
2671
- * artifact the orchestrator-side provisioning logs can't see. Absent for ephemeral /
2672
- * no-infra runs. See {@link testerInfraSetupSchema}.
2673
- */
2674
- readonly infraSetup: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2675
- readonly started: v.BooleanSchema<undefined>;
2676
- readonly composePath: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2677
- readonly at: v.NumberSchema<undefined>;
2678
- readonly durationMs: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2679
- readonly logs: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2680
- readonly error: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2681
- }, undefined>, undefined>, undefined>;
2682
- }, undefined>, undefined>, undefined>;
2683
- /**
2684
- * Live test quality-control companion state on a `tester-api`/`tester-ui` step, copied
2685
- * from the pipeline's per-step `testerQuality` config at run start. Drives the QC loop that
2686
- * gates each Tester report for completeness before the greenlight/fixer decision. Absent
2687
- * for non-Tester steps / when the companion is disabled. See {@link testerQualityStepStateSchema}.
2688
- */
2689
- readonly testerQuality: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2690
- /** Whether the QC companion is active on this Tester step (the builder toggle). */
2691
- readonly enabled: v.BooleanSchema<undefined>;
2692
- /** How many QC-driven Tester re-runs have been dispatched so far. */
2693
- readonly attempts: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
2694
- /** Ceiling on QC-driven re-runs, from the task's merge preset (`maxTesterQualityIterations`). */
2695
- readonly maxAttempts: v.NumberSchema<undefined>;
2696
- /** Optional estimate gating copied from the pipeline; evaluated against the block estimate. */
2697
- readonly gating: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2698
- readonly enabled: v.BooleanSchema<undefined>;
2699
- readonly minComplexity: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
2700
- readonly minRisk: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
2701
- readonly minImpact: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
2702
- readonly onMissingEstimate: v.OptionalSchema<v.PicklistSchema<["run", "skip"], undefined>, "run">;
2703
- }, undefined>, undefined>, undefined>;
2704
- /** One verdict per QC evaluation, in order (newest last). Empty before the first grade. */
2705
- readonly verdicts: v.ArraySchema<v.ObjectSchema<{
2706
- /** Whether the report is complete/coherent enough to proceed (no QC re-run needed). */
2707
- readonly adequate: v.BooleanSchema<undefined>;
2708
- /** The QC's prose challenge / justification, folded into the Tester's re-run context. */
2709
- readonly feedback: v.StringSchema<undefined>;
2710
- /** Concrete coverage gaps the Tester must still address (empty when adequate). */
2711
- readonly gaps: v.ArraySchema<v.StringSchema<undefined>, undefined>;
2712
- /** Epoch ms the verdict was produced. */
2713
- readonly at: v.NumberSchema<undefined>;
2714
- /** The model that produced the verdict, for transparency. */
2715
- readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2716
- }, undefined>, undefined>;
2717
- /** Set true once the QC budget was spent with the report still judged inadequate. */
2718
- readonly exceeded: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
2719
- }, undefined>, undefined>, undefined>;
2720
- /**
2721
- * Live state of a `human-test` gate (ephemeral env + human validation loop); see
2722
- * {@link humanTestStepStateSchema}. Absent for every other step kind.
2723
- */
2724
- readonly humanTest: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2725
- readonly phase: v.PicklistSchema<["provisioning", "awaiting_human", "fixing", "resolving_conflicts", "passed"], undefined>;
2726
- /** The live ephemeral environment (null in degraded manual mode / after destroy). */
2727
- readonly environment: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2728
- /** The `environments` row id, so the window can fetch access creds / re-poll status. */
2729
- readonly id: v.StringSchema<undefined>;
2730
- /** The provisioned public URL the human tests against (null while still provisioning). */
2731
- readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
2732
- /** The environment lifecycle status; see {@link environmentStatusSchema}. */
2733
- readonly status: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
2734
- /** Epoch ms the environment expires (TTL), when known. */
2735
- readonly expiresAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2736
- }, undefined>, undefined>, undefined>;
2737
- /**
2738
- * Why no environment was auto-provisioned — set in degraded manual mode (no env provider
2739
- * wired, or provisioning errored) so the window can explain it and let the human test
2740
- * against the PR branch manually. Absent when an env was provisioned.
2741
- */
2742
- readonly degradedReason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2743
- /** How many helper (fixer / conflict-resolver) attempts have been dispatched so far. */
2744
- readonly attempts: v.NumberSchema<undefined>;
2745
- /** Ceiling on helper attempts, resolved from the task's merge preset (`ciMaxAttempts`). */
2746
- readonly maxAttempts: v.NumberSchema<undefined>;
2747
- /** The PR head commit being tested, when known. */
2748
- readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2749
- /** Append-only history of fix / pull-main rounds; see {@link humanTestRoundSchema}. */
2750
- readonly rounds: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
2751
- /** The kind of round — a findings-driven fix or a pull-main-with-conflicts resolve. */
2752
- readonly kind: v.PicklistSchema<["fix", "pull-main"], undefined>;
2753
- /** The human's findings prompt (fix), or a one-line note for the pull-main round. */
2754
- readonly findings: v.StringSchema<undefined>;
2755
- /** The helper container kind this round dispatched (`fixer` / `conflict-resolver`). */
2756
- readonly helperKind: v.StringSchema<undefined>;
2757
- /** The helper job's id while it ran, for cross-referencing the run timeline. */
2758
- readonly jobId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2759
- /** How the helper ended once its job settled. Absent while still in flight. */
2760
- readonly outcome: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["completed", "failed"], undefined>, undefined>, undefined>;
2761
- /** Epoch ms the round opened (the human clicked Request fix / Pull main). */
2762
- readonly at: v.NumberSchema<undefined>;
2763
- }, undefined>, undefined>, undefined>;
2764
- /**
2765
- * Transient action the human requested while the gate is parked — recorded on the parked
2766
- * step and consumed by the durable driver when it re-enters the gate (the analogue of
2767
- * `pendingIncorporation` on a requirements gate). Cleared once the driver acts on it.
2768
- */
2769
- readonly pendingAction: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2770
- readonly type: v.PicklistSchema<["confirm", "request-fix", "pull-main", "recreate"], undefined>;
2771
- /** The findings prompt for a `request-fix` action. */
2772
- readonly findings: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2773
- }, undefined>, undefined>, undefined>;
2774
- }, undefined>, undefined>, undefined>;
2775
- /**
2776
- * Live state of a `visual-confirmation` gate (screenshot review + fix loop); see
2777
- * {@link visualConfirmStepStateSchema}. Absent for every other step kind.
2778
- */
2779
- readonly visualConfirm: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2780
- readonly phase: v.PicklistSchema<["awaiting_human", "fixing", "approved"], undefined>;
2781
- /** The actual-vs-reference pairs the human reviews, refreshed on each (re)capture. */
2782
- readonly pairs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
2783
- readonly view: v.StringSchema<undefined>;
2784
- readonly actualArtifactId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2785
- readonly referenceArtifactId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2786
- }, undefined>, undefined>, undefined>;
2787
- /** Set when no screenshots could be gathered (no UI tester ran / no storage) — manual mode. */
2788
- readonly degradedReason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2789
- /** How many fixer attempts have been dispatched so far. */
2790
- readonly attempts: v.NumberSchema<undefined>;
2791
- /** Ceiling on fixer attempts, resolved from the task's merge preset (`ciMaxAttempts`). */
2792
- readonly maxAttempts: v.NumberSchema<undefined>;
2793
- /** Append-only history of fix rounds; see {@link visualConfirmRoundSchema}. */
2794
- readonly rounds: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
2795
- readonly findings: v.StringSchema<undefined>;
2796
- readonly helperKind: v.StringSchema<undefined>;
2797
- readonly jobId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2798
- readonly outcome: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["completed", "failed"], undefined>, undefined>, undefined>;
2799
- readonly at: v.NumberSchema<undefined>;
2800
- }, undefined>, undefined>, undefined>;
2801
- /**
2802
- * Transient action the human requested while parked — consumed by the durable driver
2803
- * when it re-enters the gate. Cleared once acted on.
2804
- */
2805
- readonly pendingAction: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2806
- readonly type: v.PicklistSchema<["approve", "request-fix", "recapture"], undefined>;
2807
- /** The findings prompt for a `request-fix` action. */
2808
- readonly findings: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2809
- }, undefined>, undefined>, undefined>;
2810
- }, undefined>, undefined>, undefined>;
2811
- /**
2812
- * The ephemeral environment this step runs against (when the block has one), so a
2813
- * run's details can show its spinning-up / running / shut-down / errored state +
2814
- * the exact error. Populated by the engine for container/deployer steps from the
2815
- * block's live environment; see {@link runEnvironmentSchema}. The `human-test` gate
2816
- * keeps its own richer `humanTest.environment` and is not double-populated here.
2817
- */
2818
- readonly environment: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2819
- /** The `environments` row id (lets a window fetch access creds / re-poll status). */
2820
- readonly id: v.StringSchema<undefined>;
2821
- /** The provisioned public URL (null while still provisioning). */
2822
- readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
2823
- /** The environment lifecycle status; see {@link environmentStatusSchema}. */
2824
- readonly status: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
2825
- /** Epoch ms the environment expires (TTL), when known. */
2826
- readonly expiresAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
2827
- /** The verbatim provider error when the environment failed/expired, else null. */
2828
- readonly lastError: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2829
- /**
2830
- * The service's declared provision type this environment was stood up for
2831
- * (`kubernetes` | `docker-compose` | `custom` | `infraless`), recorded at provision
2832
- * time so a run's details show exactly what was provisioned. Null for legacy rows /
2833
- * pre-resolution.
2834
- */
2835
- readonly provisionType: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>, undefined>, undefined>;
2836
- /**
2837
- * The resolved engine that handled the provisioning (`local-docker` | `local-k3s` |
2838
- * `remote-kubernetes` | `remote-custom` | `none`), surfaced in run details alongside the
2839
- * environment state. Null for legacy rows / pre-resolution.
2840
- */
2841
- readonly engine: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["local-docker", "local-k3s", "remote-kubernetes", "remote-custom", "none"], undefined>, undefined>, undefined>;
2842
- }, undefined>, undefined>, undefined>;
2843
- /** Live subtask counts while an async (container) step runs; see {@link stepSubtasksSchema}. */
2844
- readonly subtasks: v.OptionalSchema<v.ObjectSchema<{
2845
- readonly completed: v.NumberSchema<undefined>;
2846
- readonly inProgress: v.NumberSchema<undefined>;
2847
- readonly total: v.NumberSchema<undefined>;
2848
- readonly items: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
2849
- /** The task's human-readable subject, as the agent wrote it. */
2850
- readonly label: v.StringSchema<undefined>;
2851
- readonly status: v.PicklistSchema<["pending", "in_progress", "completed"], undefined>;
2852
- }, undefined>, undefined>, undefined>;
2853
- }, undefined>, undefined>;
2854
- /**
2855
- * The per-run container this async (container) step runs in — its lifecycle status
2856
- * (starting / up / errored), the agent's current phase (clone / agent / push), and
2857
- * the container's id + reachable URL once up. Lets a run's details surface what the
2858
- * container is doing and where it lives, so the board shows an explicit "Spinning up
2859
- * container…" → live-phase progression instead of a blank "working" state. Set the
2860
- * moment the job is dispatched (the dispatch blocks until the container accepts the
2861
- * job) and refined on each poll. Only ever set on async (container) steps; absent on
2862
- * non-container steps and steps not yet dispatched. See {@link runContainerSchema}.
2863
- */
2864
- readonly container: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2865
- /** The container lifecycle status; see {@link runContainerStatusSchema}. */
2866
- readonly status: v.PicklistSchema<["starting", "up", "errored", "destroyed"], undefined>;
2867
- /**
2868
- * The coarse phase the agent's job is in while the container is `up` (`clone` →
2869
- * `agent` → `push`, seeded `starting`), forwarded from the harness. Lets the details
2870
- * distinguish "still preparing the checkout" from "the agent is making calls". Absent
2871
- * until the first poll, or when the runner doesn't report a phase.
2872
- */
2873
- readonly phase: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2874
- /** Provider container/runner id (Cloudflare DO id, docker container id), when known. */
2875
- readonly id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2876
- /** A reachable address for the running container (the local docker host URL), when one exists. */
2877
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
2878
- }, undefined>, undefined>, undefined>;
2879
- /**
2880
- * Whether web search was available to this container step, and which upstream backend
2881
- * served it. Set at dispatch (a static per-run fact resolved from the account's
2882
- * web-search keys, else the deployment default). Only ever set on async (container)
2883
- * steps; absent on non-container steps and steps not yet dispatched. Distinct from the
2884
- * telemetry-gated per-query log — this is always surfaced. See {@link webSearchAvailabilitySchema}.
2885
- */
2886
- readonly search: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2887
- readonly available: v.BooleanSchema<undefined>;
2888
- readonly provider: v.NullableSchema<v.PicklistSchema<["brave", "searxng"], undefined>, undefined>;
2889
- }, undefined>, undefined>, undefined>;
2890
- readonly decision: v.NullableSchema<v.ObjectSchema<{
2891
- readonly id: v.StringSchema<undefined>;
2892
- readonly question: v.StringSchema<undefined>;
2893
- readonly options: v.ArraySchema<v.StringSchema<undefined>, undefined>;
2894
- readonly chosen: v.NullableSchema<v.StringSchema<undefined>, undefined>;
2895
- }, undefined>, undefined>;
2896
- /**
2897
- * Whether a human approval gate fires after this step completes. Copied from
2898
- * the pipeline's `gates` at run start; absent means no gate.
2899
- */
2900
- readonly requiresApproval: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
2901
- /**
2902
- * The live approval gate for this step (see {@link stepApprovalSchema}). Set
2903
- * once the step's proposal is ready and `requiresApproval` is true; null/absent
2904
- * otherwise.
2905
- */
2906
- readonly approval: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2907
- /** Unique id of this gate; the durable run parks on it like a decision. */
2908
- readonly id: v.StringSchema<undefined>;
2909
- /** `pending` while awaiting the human; terminal `approved`/`rejected`; `changes_requested` re-runs the step. */
2910
- readonly status: v.PicklistSchema<["pending", "approved", "changes_requested", "rejected"], undefined>;
2911
- /** The agent's output the human is reviewing (editable before approval). */
2912
- readonly proposal: v.StringSchema<undefined>;
2913
- /** When changes were requested, the human's freeform guidance fed into the re-run. */
2914
- readonly feedback: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2915
- /** When changes were requested, per-block review comments fed into the re-run. */
2916
- readonly comments: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
2917
- /**
2918
- * Verbatim raw-markdown source of the commented prose block. Optional: a comment
2919
- * may instead anchor to a structured item via {@link anchorId}, where there is no
2920
- * prose source to quote.
2921
- */
2922
- readonly quotedSource: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2923
- /**
2924
- * 0-based source line range [start, end) of the commented prose block, for
2925
- * best-effort re-anchoring. Optional: a comment may instead anchor to a structured
2926
- * item via {@link anchorId} (e.g. a spec requirement/acceptance-criterion id), where
2927
- * there is no prose line range.
2928
- */
2929
- readonly srcStart: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
2930
- readonly srcEnd: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
2931
- /**
2932
- * Stable id of the structured item the comment targets (e.g. a spec
2933
- * requirement/criterion id), when the reviewed output is rendered as structured
2934
- * items rather than free prose. Absent for prose-range comments.
2935
- */
2936
- readonly anchorId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
2937
- /** The reviewer's note on this block / item. */
2938
- readonly body: v.StringSchema<undefined>;
2939
- }, undefined>, undefined>, undefined>;
2940
- }, undefined>, undefined>, undefined>;
2941
- /**
2942
- * Live state of a companion step that reviews a preceding producer step. Set when
2943
- * this step's `agentKind` is a companion kind. `threshold` is the quality bar the
2944
- * companion's latest rating (the last `verdicts` entry) must reach; `attempts`
2945
- * counts only the AUTOMATIC reworks performed, and once it reaches `maxAttempts` the
2946
- * step parks on the iteration-cap gate (`exceeded`) for a human rather than failing.
2947
- * A human "request changes" on the companion's gate also re-runs the producer but does
2948
- * NOT consume `attempts` (only the automatic loop is budgeted). Absent for non-companion steps.
2949
- */
2950
- readonly companion: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2951
- /** The quality bar (0..1) the latest verdict's rating must reach; seeded from the pipeline. */
2952
- readonly threshold: v.NumberSchema<undefined>;
2953
- /** The automatic rework budget: once `attempts` reaches this the gate parks for a human (`exceeded`). */
2954
- readonly maxAttempts: v.NumberSchema<undefined>;
2955
- /**
2956
- * How many AUTOMATIC reworks the companion has driven so far (the producer is
2957
- * looped back once per failed verdict). Human "request changes" cycles are not
2958
- * counted. Defaults to 0; once it reaches `maxAttempts` the step parks on the
2959
- * iteration-cap gate (`exceeded`) — an "extra round" raises `maxAttempts` by one.
2960
- */
2961
- readonly attempts: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
2962
- /**
2963
- * One standardized {@link companionVerdictSchema} per grading cycle, in order —
2964
- * the full sequence of correction iterations (the producer is re-run after each
2965
- * rejected verdict), including any human-driven ones. Empty before the first
2966
- * grade; the last entry is the latest.
2967
- */
2968
- readonly verdicts: v.ArraySchema<v.ObjectSchema<{
2969
- /** Overall quality of the graded output (0..1, higher = better). */
2970
- readonly rating: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>;
2971
- /** The quality bar the rating had to reach to pass. */
2972
- readonly threshold: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>;
2973
- /** Whether the rating met the threshold. */
2974
- readonly passed: v.BooleanSchema<undefined>;
2975
- /** The companion's challenge / justification (its assessment summary). */
2976
- readonly feedback: v.StringSchema<undefined>;
2977
- }, undefined>, undefined>;
2978
- /**
2979
- * Set true when the automatic rework budget (`maxAttempts`) was spent with the
2980
- * rating still below the bar: instead of failing the run, the step parks on its
2981
- * approval gate for a human to resolve via the shared iteration-cap surface
2982
- * (one more round / proceed anyway / stop & reset). Cleared once the human grants
2983
- * an extra round (the loop resumes). Absent until/unless the cap is hit.
2984
- */
2985
- readonly exceeded: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
2986
- }, undefined>, undefined>, undefined>;
2987
- /**
2988
- * Live Follow-up companion state while a `coder` step runs/parks: the items the Coder
2989
- * streamed (loose ends / side-tasks / questions), whether the companion is enabled, and
2990
- * the send-back loop budget. Items accrue live as the harness streams them (the blinking
2991
- * companion); at the step's completion the engine parks the run while any item is
2992
- * `pending`, then loops the Coder for any `queued` follow-up / `answered` question. See
2993
- * {@link followUpsStepStateSchema}. Absent for non-`coder` steps / when the companion is off.
2994
- */
2995
- readonly followUps: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
2996
- readonly enabled: v.BooleanSchema<undefined>;
2997
- readonly items: v.ArraySchema<v.ObjectSchema<{
2998
- readonly id: v.StringSchema<undefined>;
2999
- readonly kind: v.PicklistSchema<["follow_up", "question"], undefined>;
3000
- readonly title: v.StringSchema<undefined>;
3001
- readonly detail: v.StringSchema<undefined>;
3002
- readonly suggestedAction: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3003
- readonly status: v.PicklistSchema<["pending", "filed", "queued", "answered", "dismissed"], undefined>;
3004
- readonly answer: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3005
- readonly sentToCoder: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
3006
- readonly ticketExternalId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3007
- readonly ticketUrl: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3008
- readonly createdAt: v.NumberSchema<undefined>;
3009
- readonly updatedAt: v.NumberSchema<undefined>;
3010
- }, undefined>, undefined>;
3011
- readonly loops: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
3012
- readonly maxLoops: v.OptionalSchema<v.NumberSchema<undefined>, 3>;
3013
- }, undefined>, undefined>, undefined>;
3014
- /**
3015
- * Live implementation-fork decision state while a `coder` step runs its optional
3016
- * two-phase flow: the proposer explore job (`proposing`), the human park
3017
- * (`awaiting_choice` / `answering`), the resolved choice (`chosen`), or one of the
3018
- * pass-through terminals (`single_path` / `skipped`). Created lazily by the engine
3019
- * when the phase activates — the config lives on the block + the risk policy, never
3020
- * on the step. Absent for non-`coder` steps / when the phase never activated. See
3021
- * {@link forkDecisionStepStateSchema}.
3022
- */
3023
- readonly forkDecision: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3024
- readonly status: v.PicklistSchema<["proposing", "awaiting_choice", "answering", "chosen", "single_path", "skipped"], undefined>;
3025
- readonly seamSummary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3026
- readonly forks: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
3027
- readonly id: v.StringSchema<undefined>;
3028
- readonly title: v.StringSchema<undefined>;
3029
- readonly summary: v.StringSchema<undefined>;
3030
- readonly approach: v.StringSchema<undefined>;
3031
- readonly tradeoffs: v.ArraySchema<v.StringSchema<undefined>, undefined>;
3032
- readonly riskNotes: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3033
- readonly recommended: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
3034
- }, undefined>, undefined>, readonly []>;
3035
- readonly singlePathReason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3036
- readonly chat: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
3037
- readonly id: v.StringSchema<undefined>;
3038
- readonly role: v.PicklistSchema<["human", "assistant"], undefined>;
3039
- readonly text: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 4000, undefined>]>;
3040
- readonly createdAt: v.NumberSchema<undefined>;
3041
- }, undefined>, undefined>, readonly []>;
3042
- readonly maxChatTurns: v.OptionalSchema<v.NumberSchema<undefined>, 15>;
3043
- readonly chosen: v.OptionalSchema<v.NullableSchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
3044
- readonly forkId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3045
- readonly custom: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3046
- readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3047
- readonly at: v.NumberSchema<undefined>;
3048
- }, undefined>, v.CheckAction<{
3049
- forkId?: string | null | undefined;
3050
- custom?: string | null | undefined;
3051
- note?: string | null | undefined;
3052
- at: number;
3053
- }, "Provide exactly one of forkId or custom.">]>, undefined>, undefined>;
3054
- readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3055
- }, undefined>, undefined>, undefined>;
3056
- /**
3057
- * Live "Ralph loop" state carried on a `ralph` step: the persistent retry-until-done
3058
- * loop's iteration count, budget, validation command, and per-iteration history. Seeded
3059
- * from the block's per-task agent config at step start, then advanced each iteration by
3060
- * the engine's `RalphController`. Because it rides the run's persisted `detail` blob, both
3061
- * durable drivers + both stale-run sweepers re-drive a mid-loop run from exactly this
3062
- * state after a restart. Absent for non-`ralph` steps. See {@link ralphStepStateSchema}.
3063
- */
3064
- readonly ralph: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3065
- readonly phase: v.PicklistSchema<["iterating"], undefined>;
3066
- readonly attempts: v.NumberSchema<undefined>;
3067
- readonly maxIterations: v.NumberSchema<undefined>;
3068
- readonly validationCommand: v.StringSchema<undefined>;
3069
- readonly progressPath: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3070
- readonly lastExitCode: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
3071
- readonly lastValidationTail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3072
- readonly attemptLog: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
3073
- readonly attempt: v.NumberSchema<undefined>;
3074
- readonly at: v.NumberSchema<undefined>;
3075
- readonly validationPassed: v.BooleanSchema<undefined>;
3076
- readonly exitCode: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
3077
- readonly outputTail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3078
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3079
- }, undefined>, undefined>, undefined>, undefined>;
3080
- }, undefined>, undefined>, undefined>;
3081
- /**
3082
- * Transient re-entry marker carried on a parked `coder` step whose fork decision is
3083
- * `answering`: set when the human sends a chat message so the run is signalled to
3084
- * wake and the durable driver, on re-entering, runs the inline chat LLM and appends
3085
- * the assistant reply (the LLM work that must not block the HTTP request). Cleared
3086
- * once that async cycle completes. Documented beside `pendingIncorporation` /
3087
- * `pendingInterview`. Absent when no chat turn is pending.
3088
- */
3089
- readonly pendingForkChat: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3090
- readonly messageId: v.StringSchema<undefined>;
3091
- }, undefined>, undefined>, undefined>;
3092
- /**
3093
- * Live PR deep-review state carried on a `pr-reviewer` step: the sliced, severity-ordered
3094
- * findings the read-only reviewer produced, the human's curated selection, and how it was
3095
- * resolved. Recorded by the engine when the reviewer container job completes; the run then
3096
- * parks (`awaiting_selection`) for the human to select findings through the dedicated
3097
- * window and resolve. Absent for non-`pr-reviewer` steps. See {@link prReviewStepStateSchema}.
3098
- */
3099
- readonly prReview: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3100
- readonly status: v.PicklistSchema<["reviewing", "awaiting_selection", "fixing", "posting", "done", "skipped"], undefined>;
3101
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3102
- readonly slices: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
3103
- readonly id: v.StringSchema<undefined>;
3104
- readonly title: v.StringSchema<undefined>;
3105
- readonly rationale: v.StringSchema<undefined>;
3106
- readonly paths: v.ArraySchema<v.StringSchema<undefined>, undefined>;
3107
- }, undefined>, undefined>, readonly []>;
3108
- readonly findings: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
3109
- readonly id: v.StringSchema<undefined>;
3110
- readonly sliceId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3111
- readonly path: v.StringSchema<undefined>;
3112
- readonly line: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
3113
- readonly side: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["LEFT", "RIGHT"], undefined>, undefined>, undefined>;
3114
- readonly severity: v.PicklistSchema<["blocker", "high", "medium", "low", "nit"], undefined>;
3115
- readonly category: v.PicklistSchema<["correctness", "security", "performance", "maintainability", "style", "test", "other"], undefined>;
3116
- readonly title: v.StringSchema<undefined>;
3117
- readonly detail: v.StringSchema<undefined>;
3118
- readonly suggestedFix: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3119
- }, undefined>, undefined>, readonly []>;
3120
- readonly selectedFindingIds: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, readonly []>;
3121
- readonly resolution: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["finish", "fix", "post"], undefined>, undefined>, undefined>;
3122
- readonly prUrl: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3123
- readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3124
- }, undefined>, undefined>, undefined>;
3125
- /**
3126
- * The at-most-once driver marker for the PR-review "post" resolution: set when the human
3127
- * resolves a parked review with `post`, so the durable driver — on re-entry, off the HTTP
3128
- * request — publishes the selected findings as inline PR review comments (via
3129
- * `RepoFiles.createReview`) exactly once. Consumed (cleared + persisted) BEFORE the posting
3130
- * side effect so a Workflows retry/replay can't post the review twice. Cleared once posted.
3131
- */
3132
- readonly pendingPrReviewPost: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
3133
- /**
3134
- * Transient rework feedback carried on a PRODUCER step while it is being re-run by
3135
- * a downstream companion (the analogue of an approval's `changes_requested`
3136
- * feedback for the automatic path). Folded into the agent's revision context on the
3137
- * re-run, then cleared. Absent when no companion rework is in flight.
3138
- */
3139
- readonly rework: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3140
- /** The producer's previous proposal the companion challenged. */
3141
- readonly previousProposal: v.StringSchema<undefined>;
3142
- /** The companion's prose feedback driving the rework. */
3143
- readonly feedback: v.StringSchema<undefined>;
3144
- /** Optional per-item / per-block challenges to address. */
3145
- readonly comments: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
3146
- /**
3147
- * Verbatim raw-markdown source of the commented prose block. Optional: a comment
3148
- * may instead anchor to a structured item via {@link anchorId}, where there is no
3149
- * prose source to quote.
3150
- */
3151
- readonly quotedSource: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3152
- /**
3153
- * 0-based source line range [start, end) of the commented prose block, for
3154
- * best-effort re-anchoring. Optional: a comment may instead anchor to a structured
3155
- * item via {@link anchorId} (e.g. a spec requirement/acceptance-criterion id), where
3156
- * there is no prose line range.
3157
- */
3158
- readonly srcStart: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
3159
- readonly srcEnd: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
3160
- /**
3161
- * Stable id of the structured item the comment targets (e.g. a spec
3162
- * requirement/criterion id), when the reviewed output is rendered as structured
3163
- * items rather than free prose. Absent for prose-range comments.
3164
- */
3165
- readonly anchorId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3166
- /** The reviewer's note on this block / item. */
3167
- readonly body: v.StringSchema<undefined>;
3168
- }, undefined>, undefined>, undefined>;
3169
- }, undefined>, undefined>, undefined>;
3170
- /**
3171
- * Transient incorporation intent carried on a parked `requirements-review` gate step.
3172
- * Set when the human answers the findings and asks to incorporate: the run is signalled
3173
- * to wake and the durable driver, on re-entering the gate, folds the answers into a
3174
- * document and re-reviews it (the LLM work that used to block the HTTP request). Cleared
3175
- * once that async cycle completes. `feedback` is the human's optional "do it differently"
3176
- * direction (a redo). Absent when no incorporation is pending.
3177
- */
3178
- readonly pendingIncorporation: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3179
- readonly feedback: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3180
- }, undefined>, undefined>, undefined>;
3181
- /**
3182
- * Transient recommendation intent carried on a parked `requirements-review` gate step.
3183
- * Set when the human asks the Requirement Writer to suggest answers for a batch of findings
3184
- * (or re-requests one): the run is signalled to wake and the durable driver, on re-entering
3185
- * the gate, runs the Writer per finding — filling in the `pending` placeholder
3186
- * recommendations — then re-parks (recommendations never advance the run). Cleared once that
3187
- * async batch completes. `itemIds` are the findings to recommend for; `note` steers the
3188
- * whole batch. Absent when no recommendation batch is pending.
3189
- */
3190
- readonly pendingRecommendation: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3191
- readonly itemIds: v.ArraySchema<v.StringSchema<undefined>, undefined>;
3192
- readonly note: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3193
- }, undefined>, undefined>, undefined>;
3194
- /**
3195
- * Transient interview intent carried on a parked `initiative-interviewer` gate step. Set
3196
- * when the human has answered the planning questions and asked to continue (or proceed):
3197
- * the run is signalled to wake and the durable driver, on re-entering the gate, runs the
3198
- * interviewer LLM again against the answers — asking follow-ups (re-park) or synthesizing
3199
- * the goal/constraints brief and advancing. `proceed` skips any remaining questions.
3200
- * Cleared once that async re-entry completes. Absent when no continuation is pending.
3201
- */
3202
- readonly pendingInterview: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3203
- readonly proceed: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
3204
- }, undefined>, undefined>, undefined>;
3205
- /**
3206
- * Consensus configuration for this step, copied from the pipeline's `consensus`
3207
- * array at run start. Present (with `enabled: true`) when this step should run
3208
- * through the multi-model consensus mechanism; read by the consensus executor
3209
- * (and to decide gating against the block estimate). Absent ⇒ standard agent.
3210
- * See {@link consensusStepConfigSchema}.
3211
- */
3212
- readonly consensus: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3213
- readonly enabled: v.BooleanSchema<undefined>;
3214
- readonly strategy: v.PicklistSchema<["specialist-panel", "debate", "ranked-voting"], undefined>;
3215
- readonly participants: v.ArraySchema<v.ObjectSchema<{
3216
- readonly id: v.StringSchema<undefined>;
3217
- readonly role: v.StringSchema<undefined>;
3218
- readonly systemFraming: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3219
- readonly modelId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3220
- }, undefined>, undefined>;
3221
- readonly synthesizerModelId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3222
- readonly rounds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 5, undefined>]>, undefined>;
3223
- readonly gating: v.OptionalSchema<v.ObjectSchema<{
3224
- readonly enabled: v.BooleanSchema<undefined>;
3225
- readonly minComplexity: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
3226
- readonly minRisk: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
3227
- readonly minImpact: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
3228
- readonly onMissingEstimate: v.OptionalSchema<v.PicklistSchema<["consensus", "standard"], undefined>, "consensus">;
3229
- }, undefined>, undefined>;
3230
- }, undefined>, undefined>, undefined>;
3231
- /**
3232
- * Estimate-based gating for this step, copied from the pipeline's `gating` array at
3233
- * run start. When present (with `enabled: true`) the step is skipped at runtime unless
3234
- * the block's task estimate meets the threshold. Absent ⇒ always run. See
3235
- * {@link stepGatingSchema}.
3236
- */
3237
- readonly gating: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3238
- readonly enabled: v.BooleanSchema<undefined>;
3239
- readonly minComplexity: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
3240
- readonly minRisk: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
3241
- readonly minImpact: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
3242
- readonly onMissingEstimate: v.OptionalSchema<v.PicklistSchema<["run", "skip"], undefined>, "run">;
3243
- }, undefined>, undefined>, undefined>;
3244
- /**
3245
- * Per-step options bag copied from the pipeline's `stepOptions` array at run start (see
3246
- * {@link stepOptionsSchema}). Absent ⇒ all defaults for this step. Read by the engine —
3247
- * e.g. the requirements-review gate consults `stepOptions.autoRecommend`.
3248
- */
3249
- readonly stepOptions: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3250
- /**
3251
- * `requirements-review` only. When enabled (the default), the reviewer classifies each
3252
- * finding, and the ones it judges answerable from universal best-practice / the context
3253
- * already provided get a recommended answer AUTO-generated and offered as the finding's
3254
- * default answer (the human can override or dismiss it); findings that need a genuine
3255
- * business/product decision are left for the human. `false` disables the automation — the
3256
- * human answers (or manually requests recommendations for) every finding. Absent / `true`
3257
- * ⇒ enabled. Ignored on non-`requirements-review` steps.
3258
- */
3259
- readonly autoRecommend: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
3260
- /**
3261
- * `skill` steps only. The id of the account-tier repo-sourced Claude Skill this step
3262
- * executes (`src:<sourceId>:<dirName>`; see `docs/initiatives/repo-skills.md`). The one
3263
- * generic `skill` agent kind is parametrized by THIS field — the picked skill's
3264
- * instructions + resources are resolved at dispatch and folded into the step (natively for
3265
- * the claude-code harness, as prompt + `.cat-context/skill/*` for Pi/codex). A `skill` step
3266
- * with no `skillId` has nothing to run and is rejected at pipeline save. Ignored on every
3267
- * other kind.
3268
- */
3269
- readonly skillId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3270
- }, undefined>, undefined>, undefined>;
3271
- /**
3272
- * True when this step was skipped at runtime because its `gating` was not satisfied
3273
- * (the task estimate fell below the threshold). The step's `state` is `done` with no
3274
- * output; the UI renders it as "skipped (gated)". Absent ⇒ the step ran normally.
3275
- */
3276
- readonly skipped: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
3277
- /**
3278
- * Set `true` on a `spec-writer` step that determined the task is purely technical and
3279
- * produced no business specs (its result's `noBusinessSpecs`). Recorded on the step so
3280
- * the spec-companion's convergence — the one point both signals coexist — can combine it
3281
- * with the companion's `technicalCorroborated` verdict to infer the block's `technical`
3282
- * label. Absent for every other kind / a writer that produced specs.
3283
- */
3284
- readonly noBusinessSpecs: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
3285
- /**
3286
- * Set on a `spec-companion` step from its `technicalCorroborated` verdict (whether it
3287
- * agreed the task is purely technical). Recorded on the step — not just read off the
3288
- * live assessment — so the engine can infer the block's `technical` label both on the
3289
- * companion's automatic convergence AND on a human "proceed" past the iteration cap,
3290
- * where only the persisted step survives. Absent for every other kind / no opinion.
3291
- */
3292
- readonly technicalCorroborated: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
3293
- /** Text the agent produced for this step (when LLM execution is enabled). */
3294
- readonly output: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3295
- /**
3296
- * The structured JSON a registered CUSTOM kind's agent step returned (the generic
3297
- * manifest-driven `agent` dispatch's `custom` channel). Recorded so the SPA can render
3298
- * it in the `generic-structured` result view (and a post-op already consumed it
3299
- * server-side). Absent for built-in / prose kinds.
3300
- */
3301
- readonly custom: v.OptionalSchema<v.UnknownSchema, undefined>;
3302
- /** Identifier of the model that produced `output`, for transparency. */
3303
- readonly model: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3304
- /**
3305
- * Ids of the prompt-fragment library entries that were folded into this step's
3306
- * system prompt — the manual selection on the block unioned with the relevance
3307
- * selector's pick. Recorded for observability and replay-stability; absent when
3308
- * the fragment-library module is not configured.
3309
- */
3310
- readonly selectedFragmentIds: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
3311
- /**
3312
- * The repo-sourced Claude Skill this step was PINNED to at dispatch (a `skill` step; see
3313
- * `docs/initiatives/repo-skills.md`). Recorded so a run executes a stable version of the
3314
- * skill even if its source resyncs mid-run, and so a later investigation knows exactly
3315
- * which skill (and at which commit / manifest blob) ran. `commit` is the source dir's head
3316
- * commit the resources were fetched at (null if the skill was never synced to a commit);
3317
- * `sha` is the `SKILL.md` blob sha. Absent for every non-`skill` step.
3318
- */
3319
- readonly skillVersion: v.OptionalSchema<v.ObjectSchema<{
3320
- readonly skillId: v.StringSchema<undefined>;
3321
- readonly commit: v.NullableSchema<v.StringSchema<undefined>, undefined>;
3322
- readonly sha: v.StringSchema<undefined>;
3323
- }, undefined>, undefined>;
3324
- /**
3325
- * Identifier of an in-flight asynchronous agent job (a container run polled by
3326
- * the durable driver). Set while the step is dispatched-but-not-yet-finished so
3327
- * a Workflows replay re-attaches to the running job instead of starting a new
3328
- * one; cleared once the job's result is recorded.
3329
- */
3330
- readonly jobId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3331
- /**
3332
- * Epoch ms the step first began executing (transitioned to `working`). Set once
3333
- * and never overwritten on subsequent state changes, so a re-run/replay keeps the
3334
- * original start. Absent until the step starts.
3335
- */
3336
- readonly startedAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
3337
- /**
3338
- * Epoch ms the step finished (transitioned to `done`). With {@link startedAt}
3339
- * this yields the step's execution duration. Absent until the step completes.
3340
- */
3341
- readonly finishedAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
3342
- /**
3343
- * Epoch ms the step parked on a human (an approval gate, a raised decision, or an
3344
- * iteration-cap gate), freezing its duration clock: while parked, elapsed time stops
3345
- * accruing — the symmetric counterpart of {@link finishedAt}'s terminal freeze, so a
3346
- * step waiting on input is not billed for the human's deliberation. Set once on park,
3347
- * cleared (null) when the step resumes working or finishes. Absent until first parked.
3348
- */
3349
- readonly pausedAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
3350
- /**
3351
- * How many times this step's container was evicted/crashed and recovered by
3352
- * automatically re-dispatching a fresh container (bounded by
3353
- * `MAX_EVICTION_RECOVERIES`). Once spent, a further eviction fails the run as
3354
- * `evicted` rather than looping. Absent/0 until the first eviction.
3355
- */
3356
- readonly evictionRecoveries: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
3357
- /**
3358
- * How many times this step's container was evicted by *transient infrastructure
3359
- * churn* — an event the runtime facade flags as not-a-crash (e.g. a deploy
3360
- * draining the sandbox) — and recovered by re-dispatching a fresh container.
3361
- * Counted separately from {@link evictionRecoveries} and bounded by a larger
3362
- * `MAX_TRANSIENT_EVICTION_RECOVERIES`, since such churn can recur several times in
3363
- * a short window, unlike a crash. Absent/0 until the first transient eviction.
3364
- */
3365
- readonly transientEvictionRecoveries: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
3366
- /**
3367
- * The service-provisioning config a `deployer` step PINNED when it dispatched its async,
3368
- * container-backed deploy job, so the later poll/finalize maps the job against the same config
3369
- * the container was built from — NOT a fresh read of the service frame (which a person may have
3370
- * edited mid-flight, e.g. flipping it to `infraless`, which would otherwise fail a deploy whose
3371
- * container already succeeded). Absent for the synchronous raw-manifest path and the undeclared
3372
- * legacy single-connection path (re-resolution is harmless there). See {@link serviceProvisioningSchema}.
3373
- */
3374
- readonly deployProvisioning: v.OptionalSchema<v.ObjectSchema<{
3375
- readonly type: v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>;
3376
- readonly manifestSource: v.OptionalSchema<v.VariantSchema<"type", [v.ObjectSchema<{
3377
- readonly type: v.LiteralSchema<"colocated", undefined>;
3378
- readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
3379
- readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
3380
- }, undefined>, v.ObjectSchema<{
3381
- readonly type: v.LiteralSchema<"separate", undefined>;
3382
- readonly repo: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>;
3383
- readonly ref: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
3384
- readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
3385
- readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
3386
- }, undefined>], undefined>, undefined>;
3387
- readonly composePath: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3388
- readonly localDevOnly: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
3389
- readonly composeBuild: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
3390
- readonly recipe: v.OptionalSchema<v.ObjectSchema<{
3391
- readonly composeFiles: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>, v.MinLengthAction<string[], 1, undefined>]>, undefined>;
3392
- readonly composeProfiles: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>, undefined>;
3393
- readonly envFiles: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
3394
- readonly template: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
3395
- readonly target: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
3396
- }, undefined>, undefined>, undefined>;
3397
- readonly externalNetworks: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>, undefined>;
3398
- readonly sharedStackRefs: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>, undefined>;
3399
- readonly prerequisites: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
3400
- readonly check: v.PicklistSchema<["docker-daemon", "disk-space", "memory", "registry-auth", "tcp-reachable", "http-reachable", "mkcert-ca", "hosts-entries", "env-secrets-marker"], undefined>;
3401
- readonly params: v.OptionalSchema<v.ObjectSchema<{
3402
- readonly minGib: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1024, undefined>]>, undefined>;
3403
- readonly registry: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3404
- readonly host: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3405
- readonly port: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 65535, undefined>]>, undefined>;
3406
- readonly url: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
3407
- readonly expectStatus: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 100, undefined>, v.MaxValueAction<number, 599, undefined>]>, undefined>;
3408
- readonly expectBodyContains: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3409
- readonly hostnames: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>, undefined>;
3410
- readonly file: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3411
- readonly marker: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3412
- }, undefined>, undefined>;
3413
- readonly required: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
3414
- readonly remediation: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 4000, undefined>]>, undefined>;
3415
- readonly label: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3416
- }, undefined>, undefined>, undefined>;
3417
- readonly setupSteps: v.OptionalSchema<v.ArraySchema<v.VariantSchema<"kind", [v.ObjectSchema<{
3418
- readonly kind: v.LiteralSchema<"compose-exec", undefined>;
3419
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
3420
- readonly service: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
3421
- readonly command: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, v.MinLengthAction<string[], 1, undefined>]>;
3422
- readonly stdinFile: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3423
- readonly user: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
3424
- readonly workdir: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3425
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
3426
- }, undefined>, v.ObjectSchema<{
3427
- readonly kind: v.LiteralSchema<"copy-file", undefined>;
3428
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
3429
- readonly from: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
3430
- readonly to: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
3431
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
3432
- }, undefined>, v.ObjectSchema<{
3433
- readonly kind: v.LiteralSchema<"wait-http", undefined>;
3434
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
3435
- readonly url: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
3436
- readonly expectStatus: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 100, undefined>, v.MaxValueAction<number, 599, undefined>]>, undefined>;
3437
- readonly expectBodyContains: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3438
- readonly intervalMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 250, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
3439
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
3440
- }, undefined>, v.ObjectSchema<{
3441
- readonly kind: v.LiteralSchema<"wait-file", undefined>;
3442
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
3443
- readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
3444
- readonly service: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
3445
- readonly intervalMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 250, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
3446
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
3447
- }, undefined>, v.ObjectSchema<{
3448
- readonly kind: v.LiteralSchema<"host-command", undefined>;
3449
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
3450
- readonly command: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, v.MinLengthAction<string[], 1, undefined>]>;
3451
- readonly workdir: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3452
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
3453
- }, undefined>], undefined>, undefined>, undefined>;
3454
- readonly healthGate: v.OptionalSchema<v.VariantSchema<"kind", [v.ObjectSchema<{
3455
- readonly kind: v.LiteralSchema<"compose-healthy", undefined>;
3456
- }, undefined>, v.ObjectSchema<{
3457
- readonly kind: v.LiteralSchema<"http", undefined>;
3458
- readonly url: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
3459
- readonly expectStatus: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 100, undefined>, v.MaxValueAction<number, 599, undefined>]>, undefined>;
3460
- readonly expectBodyContains: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3461
- readonly intervalMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 250, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
3462
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
3463
- }, undefined>, v.ObjectSchema<{
3464
- readonly kind: v.LiteralSchema<"compose-exec", undefined>;
3465
- readonly service: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
3466
- readonly command: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, v.MinLengthAction<string[], 1, undefined>]>;
3467
- readonly intervalMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 250, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
3468
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
3469
- }, undefined>], undefined>, undefined>;
3470
- readonly teardownSteps: v.OptionalSchema<v.ArraySchema<v.VariantSchema<"kind", [v.ObjectSchema<{
3471
- readonly kind: v.LiteralSchema<"compose-exec", undefined>;
3472
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
3473
- readonly service: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
3474
- readonly command: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, v.MinLengthAction<string[], 1, undefined>]>;
3475
- readonly stdinFile: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3476
- readonly user: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
3477
- readonly workdir: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3478
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
3479
- }, undefined>, v.ObjectSchema<{
3480
- readonly kind: v.LiteralSchema<"copy-file", undefined>;
3481
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
3482
- readonly from: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
3483
- readonly to: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
3484
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
3485
- }, undefined>, v.ObjectSchema<{
3486
- readonly kind: v.LiteralSchema<"wait-http", undefined>;
3487
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
3488
- readonly url: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
3489
- readonly expectStatus: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 100, undefined>, v.MaxValueAction<number, 599, undefined>]>, undefined>;
3490
- readonly expectBodyContains: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3491
- readonly intervalMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 250, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
3492
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
3493
- }, undefined>, v.ObjectSchema<{
3494
- readonly kind: v.LiteralSchema<"wait-file", undefined>;
3495
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
3496
- readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
3497
- readonly service: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
3498
- readonly intervalMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 250, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
3499
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
3500
- }, undefined>, v.ObjectSchema<{
3501
- readonly kind: v.LiteralSchema<"host-command", undefined>;
3502
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
3503
- readonly command: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, v.MinLengthAction<string[], 1, undefined>]>;
3504
- readonly workdir: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3505
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
3506
- }, undefined>], undefined>, undefined>, undefined>;
3507
- }, undefined>, undefined>;
3508
- readonly manifestId: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>, undefined>;
3509
- readonly manifestPath: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3510
- readonly images: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
3511
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
3512
- readonly newNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3513
- readonly newTagTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3514
- readonly digestTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3515
- }, undefined>, v.CheckAction<{
3516
- name: string;
3517
- newNameTemplate?: string | undefined;
3518
- newTagTemplate?: string | undefined;
3519
- digestTemplate?: string | undefined;
3520
- }, "an image override must set at least one of newNameTemplate, newTagTemplate, or digestTemplate.">, v.CheckAction<{
3521
- name: string;
3522
- newNameTemplate?: string | undefined;
3523
- newTagTemplate?: string | undefined;
3524
- digestTemplate?: string | undefined;
3525
- }, "newTagTemplate and digestTemplate are mutually exclusive on an image override.">]>, undefined>, undefined>;
3526
- readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
3527
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
3528
- readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
3529
- readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
3530
- readonly version: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "version must be a pinned semver (e.g. 1.2.3), not a floating tag like latest or ^1.0.">]>;
3531
- readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
3532
- readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
3533
- readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
3534
- readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
3535
- readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
3536
- }, undefined>, undefined>, undefined>;
3537
- readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
3538
- readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
3539
- readonly secretRef: v.ObjectSchema<{
3540
- readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
3541
- }, undefined>;
3542
- }, undefined>, undefined>, undefined>;
3543
- readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
3544
- }, undefined>, undefined>, undefined>;
3545
- readonly secretInjections: v.OptionalSchema<v.ArraySchema<v.VariantSchema<"mode", [v.ObjectSchema<{
3546
- readonly mode: v.LiteralSchema<"secret", undefined>;
3547
- readonly secretName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
3548
- readonly secretType: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
3549
- readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
3550
- readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
3551
- readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
3552
- readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
3553
- }, undefined>, undefined>;
3554
- readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
3555
- }, undefined>, v.CheckAction<{
3556
- key: string;
3557
- secretRef?: {
3558
- key: string;
3559
- } | undefined;
3560
- valueTemplate?: string | undefined;
3561
- }, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
3562
- }, undefined>, v.ObjectSchema<{
3563
- readonly mode: v.LiteralSchema<"generatorEnvFile", undefined>;
3564
- readonly envFilePath: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
3565
- readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
3566
- readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
3567
- readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
3568
- readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
3569
- }, undefined>, undefined>;
3570
- readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
3571
- }, undefined>, v.CheckAction<{
3572
- key: string;
3573
- secretRef?: {
3574
- key: string;
3575
- } | undefined;
3576
- valueTemplate?: string | undefined;
3577
- }, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
3578
- }, undefined>], undefined>, undefined>, undefined>;
3579
- }, undefined>, undefined>;
3580
- /**
3581
- * A `deployer` step fanning out over several service frames (the task's own frame + each
3582
- * involved-service frame; see the connections initiative) records each frame's TERMINAL
3583
- * outcome here, keyed by frame block id — so a durable replay knows which frames are already
3584
- * provisioned and only the remaining ones are dispatched. The in-flight frame is tracked by
3585
- * {@link deployFrameId} + {@link jobId} until it settles into this map. Absent for a
3586
- * single-frame deploy that never fanned out. See {@link deployEnvsSchema}.
3587
- */
3588
- readonly deployEnvs: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.ObjectSchema<{
3589
- readonly status: v.PicklistSchema<["ready", "failed", "skipped"], undefined>;
3590
- /** The provisioned URL for a `ready` env (absent for `failed`/`skipped`). */
3591
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3592
- /** The verbatim provider error for a `failed` env. */
3593
- readonly error: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3594
- }, undefined>, undefined>, undefined>;
3595
- /**
3596
- * The service FRAME the deployer step's currently in-flight deploy job ({@link jobId}) is
3597
- * provisioning, during a multi-env fan-out — so the poll/finalize maps the settled job onto the
3598
- * right frame's {@link deployEnvs} entry. Cleared once that frame settles; absent when no deploy
3599
- * job is in flight or the step never fanned out.
3600
- */
3601
- readonly deployFrameId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3602
- /**
3603
- * The task's OWN (primary) service frame, pinned on the FIRST target resolution of a `deployer`
3604
- * fan-out and reused on every re-entry/replay. Keeps the primary classification STABLE against a
3605
- * mid-flight reparent (which would otherwise re-derive a different own frame and flip an
3606
- * own-service provisioning failure from terminal to a non-terminal peer failure — completing the
3607
- * run `done` despite a failed deploy). Absent until the first resolution / for a step that never
3608
- * fanned out.
3609
- */
3610
- readonly deployPrimaryFrameId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3611
- }, undefined>;
3612
- export type PipelineStep = v.InferOutput<typeof pipelineStepSchema>;
3613
- export declare const executionStatusSchema: v.PicklistSchema<["running", "blocked", "done", "paused", "failed"], undefined>;
3614
- export type ExecutionStatus = v.InferOutput<typeof executionStatusSchema>;
3615
- /**
3616
- * Per-run diagnostic context captured for AFTER-THE-FACT investigation of a run (esp. a
3617
- * failure) — the "where/what did this run actually execute on" facts that were previously
3618
- * spread across the DB (repo↔service↔installation joins), the harness transcript (model), or
3619
- * lost entirely (which backend a step ran on). Stamped by the engine at dispatch and refined
3620
- * on the first poll; it reflects the MOST RECENT container-step dispatch (the step most likely
3621
- * relevant to a failure), not a per-step history. Rides in the run's `detail` JSON (no dedicated
3622
- * column), like {@link ExecutionInstance.notes}/`frontendBindings`. Absent on legacy runs and on
3623
- * runs with no container step (pure inline/gate pipelines). NEVER carries a token or secret.
3624
- */
3625
- export declare const runDiagnosticsSchema: v.ObjectSchema<{
3626
- /** Context of the most recent container-step dispatch. */
3627
- readonly lastDispatch: v.OptionalSchema<v.ObjectSchema<{
3628
- /** Index of the dispatched step within the pipeline. */
3629
- readonly stepIndex: v.NumberSchema<undefined>;
3630
- /** The step's agent kind (`coder`, `merger`, a custom kind, …). */
3631
- readonly agentKind: v.StringSchema<undefined>;
3632
- /** Resolved model ref `provider:model` (e.g. `anthropic:claude-opus-4-8`); null if unresolved. */
3633
- readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3634
- /**
3635
- * Which runner backend the step actually ran on — the datum that distinguishes a native
3636
- * host-process run from a sandboxed container: `local-native` | `local-container` |
3637
- * `runner-pool` | `cloudflare-container`. Filled on the first poll (the transport reports
3638
- * it); absent until then or on an older runtime.
3639
- */
3640
- readonly executionBackend: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3641
- /** The repo the step operated on. */
3642
- readonly repo: v.OptionalSchema<v.ObjectSchema<{
3643
- readonly owner: v.StringSchema<undefined>;
3644
- readonly name: v.StringSchema<undefined>;
3645
- /** The base branch the work branched from. */
3646
- readonly baseBranch: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3647
- /** VCS provider (`github` | `gitlab`), resolved from the run's repo origin. */
3648
- readonly provider: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3649
- }, undefined>, undefined>;
3650
- /** Epoch ms the dispatch was recorded. */
3651
- readonly at: v.NumberSchema<undefined>;
3652
- }, undefined>, undefined>;
3653
- /**
3654
- * The control-plane (orchestrator) host running the engine — NOT necessarily where the agent
3655
- * ran (a container step runs elsewhere; see `lastDispatch.executionBackend`). `platform` is the
3656
- * orchestrator's `process.platform` (e.g. `win32` pins a Windows local deployment — the class
3657
- * of host that surfaced the native-Windows git-auth break). Best-effort.
3658
- */
3659
- readonly host: v.OptionalSchema<v.ObjectSchema<{
3660
- readonly platform: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3661
- }, undefined>, undefined>;
3662
- }, undefined>;
3663
- export type RunDiagnostics = v.InferOutput<typeof runDiagnosticsSchema>;
3664
- export declare const executionInstanceSchema: v.ObjectSchema<{
3665
- readonly id: v.StringSchema<undefined>;
3666
- readonly blockId: v.StringSchema<undefined>;
3667
- readonly pipelineId: v.StringSchema<undefined>;
3668
- readonly pipelineName: v.StringSchema<undefined>;
3669
- readonly steps: v.ArraySchema<v.ObjectSchema<{
3670
- /**
3671
- * Id of the execution run (the {@link executionInstanceSchema} `id`) this step
3672
- * belongs to — surfaced on every step so a lone step in a log line or a detail view
3673
- * can name its run, for easier debugging. A projection that always equals the parent
3674
- * instance's `id`: stamped from the enclosing instance when the run is read or
3675
- * emitted, not persisted independently. Absent only on steps not yet round-tripped.
3676
- */
3677
- readonly runId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3678
- readonly agentKind: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
3679
- readonly state: v.PicklistSchema<["pending", "working", "waiting_decision", "done"], undefined>;
3680
- readonly progress: v.NumberSchema<undefined>;
3681
- /** LLM observability rollup for this step; see {@link stepMetricsSchema}. */
3682
- readonly metrics: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3683
- /** Number of model calls recorded for this step. */
3684
- readonly calls: v.NumberSchema<undefined>;
3685
- /** Sum of prompt (input) tokens across the step's calls. */
3686
- readonly promptTokens: v.NumberSchema<undefined>;
3687
- /**
3688
- * Sum of prompt tokens served from the provider's prefix cache. A subset of
3689
- * promptTokens on OpenAI/DeepSeek, but on Anthropic cache reads are reported
3690
- * separately from input tokens, so this can exceed promptTokens. 0 on a cache-less
3691
- * flavour (Workers AI); the metrics bar shows the cached split when present. Absent ⇒
3692
- * unknown (older snapshot).
3693
- */
3694
- readonly cachedPromptTokens: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
3695
- /** Sum of completion (output) tokens across the step's calls. */
3696
- readonly completionTokens: v.NumberSchema<undefined>;
3697
- /** Largest single completion the model produced (closest approach to the limit). */
3698
- readonly peakCompletionTokens: v.NumberSchema<undefined>;
3699
- /** The output ceiling in effect (max requested `max_tokens`), or null when unknown. */
3700
- readonly maxOutputTokens: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
3701
- /** Calls cut short by the output limit (`finish_reason === 'length'`). */
3702
- readonly truncatedCalls: v.NumberSchema<undefined>;
3703
- /** Sum of model execution time (ms) — the "actual prompt/tool execution" slice. */
3704
- readonly upstreamMs: v.NumberSchema<undefined>;
3705
- /** Sum of transport/proxy overhead (ms) — the interim-layer cost. */
3706
- readonly overheadMs: v.NumberSchema<undefined>;
3707
- /** Calls that failed (non-2xx / refused / in-process error). */
3708
- readonly errors: v.NumberSchema<undefined>;
3709
- /** Successful calls that warned (truncated or content-filtered). */
3710
- readonly warnings: v.NumberSchema<undefined>;
3711
- }, undefined>, undefined>, undefined>;
3712
- /**
3713
- * Live gate state while a polling gate step (`ci` / `conflicts`) runs its
3714
- * precheck-or-escalate loop; see {@link gateStepStateSchema}. The gate kind is
3715
- * `agentKind`.
3716
- */
3717
- readonly gate: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3718
- readonly phase: v.PicklistSchema<["checking", "working"], undefined>;
3719
- /** How many helper-agent attempts have been dispatched so far. */
3720
- readonly attempts: v.NumberSchema<undefined>;
3721
- /** Ceiling on attempts, resolved from the task's merge preset at step start. */
3722
- readonly maxAttempts: v.NumberSchema<undefined>;
3723
- /** The PR head commit being gated, once resolved (the own-service PR on a multi-repo block). */
3724
- readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3725
- /**
3726
- * Per-PR head commits for a MULTI-REPO block (service-connections phase 4), keyed by repo
3727
- * full name (owner/name) — own-service PR plus each peer-service PR. Set by the CI /
3728
- * conflicts gates whose precheck aggregates across every PR the task opened. Absent for a
3729
- * single-repo block (the scalar {@link headSha} is the only head).
3730
- */
3731
- readonly headShas: v.OptionalSchema<v.NullableSchema<v.RecordSchema<v.StringSchema<undefined>, v.StringSchema<undefined>, undefined>, undefined>, undefined>;
3732
- /**
3733
- * The repo the conflicts gate's most recent `fail` verdict found conflicted, so the
3734
- * single-repo conflict-resolver is dispatched at THAT repo (own-service or a peer) rather
3735
- * than always the own-service one. Absent ⇒ the own-service repo. Only the conflicts gate
3736
- * sets it (the CI-fixer runs across all repos, so the CI gate leaves it undefined).
3737
- */
3738
- readonly conflictTarget: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3739
- readonly repo: v.StringSchema<undefined>;
3740
- readonly frameId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3741
- readonly branch: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3742
- }, undefined>, undefined>, undefined>;
3743
- /**
3744
- * The most recent precheck verdict, so the UI can show why the gate is looping
3745
- * (failing → a helper is fixing) vs idle-passing. Set on every probe.
3746
- */
3747
- readonly lastVerdict: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["pass", "pending", "fail"], undefined>, undefined>, undefined>;
3748
- /**
3749
- * Human-readable summary of the latest failing precheck (the failing CI checks /
3750
- * the conflict reason) — the conclusion detail that used to be fed only to the
3751
- * helper agent and then discarded. Carried across the helper dispatch so the
3752
- * window keeps showing what is being fixed. Null when the last probe passed.
3753
- */
3754
- readonly lastFailureSummary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3755
- /**
3756
- * Structured failing checks behind {@link lastFailureSummary} for the CI gate, so
3757
- * the UI can list each red check by name + conclusion. Absent for the conflicts
3758
- * gate (GitHub reports no file-level detail) and when the last probe passed.
3759
- */
3760
- readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
3761
- readonly name: v.StringSchema<undefined>;
3762
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
3763
- readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
3764
- /**
3765
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
3766
- * failed run's logs. Null when GitHub didn't report one.
3767
- */
3768
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3769
- /**
3770
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
3771
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
3772
- */
3773
- readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3774
- }, undefined>, undefined>, undefined>, undefined>;
3775
- /**
3776
- * The fixing instructions handed to the most-recently dispatched helper (the failing-check
3777
- * summary / conflict reason / human fix prompt), stashed at dispatch so the attempt recorded
3778
- * when that helper's job settles can carry WHAT the round was asked to fix onto its
3779
- * {@link gateAttemptSchema} entry. Transient bookkeeping — the durable per-round history lives
3780
- * on {@link attemptLog}. Null when the gate hands its fixer no textual instructions.
3781
- */
3782
- readonly lastDispatchedInstructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3783
- /**
3784
- * Epoch ms of the release marker for a time-windowed gate (post-release-health) — the
3785
- * moment it began watching the deployed release. The gate keeps polling `pending`
3786
- * until this + the preset's watch window has elapsed (then a clean run passes) or a
3787
- * monitor/SLO regresses (then it escalates to the on-call agent). Absent for the
3788
- * CI/conflicts gates.
3789
- */
3790
- readonly watchSince: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
3791
- /**
3792
- * The watch-window length (minutes) for a time-windowed gate (post-release-health),
3793
- * resolved from the task's merge preset ONCE on first entry (alongside `maxAttempts`)
3794
- * so the probe doesn't re-load the block + re-resolve the preset on every poll. Absent
3795
- * for the CI/conflicts gates.
3796
- */
3797
- readonly watchWindowMinutes: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
3798
- /**
3799
- * The regressed signals captured when the post-release-health gate escalated to the
3800
- * on-call agent, so the agent's completion handler can build the `release_regression`
3801
- * notification + incident enrichment from the SAME evidence the agent investigated
3802
- * — rather than re-reading Datadog (a third round-trip that could also disagree with
3803
- * what the agent saw if the window moved). Absent for the CI/conflicts gates.
3804
- */
3805
- readonly regressedSignals: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
3806
- readonly kind: v.PicklistSchema<["monitor", "slo"], undefined>;
3807
- readonly id: v.StringSchema<undefined>;
3808
- readonly name: v.StringSchema<undefined>;
3809
- readonly state: v.PicklistSchema<["ok", "warn", "alert", "no_data"], undefined>;
3810
- readonly detail: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3811
- }, undefined>, undefined>, undefined>, undefined>;
3812
- /**
3813
- * Append-only history of the helper-agent attempts this gate dispatched (ci-fixer /
3814
- * conflict-resolver runs), each recorded when its job finished. Lets the UI show what
3815
- * every attempt tried and how it ended, instead of only a bare `attempts` count.
3816
- * Absent for the post-release-health gate (its on-call helper is resolved specially).
3817
- */
3818
- readonly attemptLog: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
3819
- /** 1-based attempt number (matches `attempts` at the time the helper was dispatched). */
3820
- readonly attempt: v.NumberSchema<undefined>;
3821
- /** Epoch ms when the helper job finished. */
3822
- readonly at: v.NumberSchema<undefined>;
3823
- /**
3824
- * How the helper job ended:
3825
- * - `completed` — the container finished (it may or may not have fully fixed the
3826
- * issue; the gate's next precheck is the source of truth, and `summary` carries
3827
- * the agent's own account, e.g. which files it left conflicting).
3828
- * - `failed` — the job errored / was evicted without finishing.
3829
- */
3830
- readonly outcome: v.PicklistSchema<["completed", "failed"], undefined>;
3831
- /** The PR head commit the helper worked against, when known. */
3832
- readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3833
- /**
3834
- * The fixing instructions handed to the helper for this round — the failing-check
3835
- * summary the CI gate fed the `ci-fixer`, the conflict reason / human-review comments
3836
- * the other gates fed their fixer. Stashed at dispatch and recorded with the attempt so
3837
- * the run-detail UI can show WHAT each round was asked to fix (not only that a round
3838
- * happened) — the gate analogue of the Tester attempt's `concerns`. Null when the gate
3839
- * hands its fixer no textual instructions (the conflicts gate: GitHub reports mergeability
3840
- * as a single bit and the harness leaves the conflict markers for the resolver).
3841
- */
3842
- readonly instructions: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3843
- /**
3844
- * Structured failing checks handed to this attempt's helper (the CI gate's red check runs
3845
- * behind {@link instructions}), snapshotted at dispatch so each attempt shows the checks it
3846
- * set out to fix. Absent for the conflicts gate (no file-level detail) and when the round
3847
- * carried no structured checks.
3848
- */
3849
- readonly failingChecks: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
3850
- readonly name: v.StringSchema<undefined>;
3851
- /** GitHub conclusion (e.g. `failure`, `timed_out`), or null when not reported. */
3852
- readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
3853
- /**
3854
- * The check run's GitHub web URL (`html_url`), so the UI can link straight to the
3855
- * failed run's logs. Null when GitHub didn't report one.
3856
- */
3857
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3858
- /**
3859
- * The repo (owner/name) this check belongs to, on a MULTI-REPO block — so the UI can group
3860
- * failing checks by service. Absent on a single-repo block (there is only the own repo).
3861
- */
3862
- readonly repo: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3863
- }, undefined>, undefined>, undefined>, undefined>;
3864
- /** The helper's own summary (or the failure reason), naming what it did / what remains. */
3865
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
3866
- }, undefined>, undefined>, undefined>, undefined>;
3867
- /**
3868
- * The number of approving reviews the PR had at the last probe, so the UI can show
3869
- * "1 / N approvals". The "required" side is derived from {@link requiredApprovingReviewCount}
3870
- * via the same `max(1, …)` floor the gate applies (see review.logic.ts) rather than persisted
3871
- * a second time. Absent for the other gates.
3872
- */
3873
- readonly lastApprovals: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
3874
- /**
3875
- * The raw branch-protection required-approving-review count, cached after the FIRST probe
3876
- * resolves it so subsequent polls skip the static protection read (branch protection is repo
3877
- * config, not PR activity — re-reading it every poll over a multi-day review only burns GitHub
3878
- * rate budget). The UI's displayed "required" count is `max(1, this)` (the gate's effective
3879
- * floor). Absent for the other gates.
3880
- */
3881
- readonly requiredApprovingReviewCount: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
3882
- /**
3883
- * The GraphQL ids of the review threads the gate just handed the `fixer`, stashed at
3884
- * dispatch so the helper-completion hook can post a reply + RESOLVE exactly those threads
3885
- * on GitHub before the next probe reads them. Absent for the other gates.
3886
- */
3887
- readonly pendingThreadIds: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>, undefined>;
3888
- /**
3889
- * Epoch ms of the newest plain PR comment the gate has already handed the `fixer`. Plain
3890
- * conversation comments (unlike review threads) can't be "resolved" on GitHub, so they are
3891
- * tracked by timestamp: a comment newer than this is outstanding; the dispatch advances it to
3892
- * the batch max. A reviewer's later comment (newer timestamp) re-opens the work. Absent for
3893
- * the other gates.
3894
- */
3895
- readonly lastAddressedCommentAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
3896
- /**
3897
- * The grace window (minutes) the human-review gate waits after the latest review comment
3898
- * before dispatching the fixer, resolved from the task's merge preset ONCE on first entry
3899
- * (alongside `maxAttempts`) so the probe doesn't re-resolve the preset every poll. Absent
3900
- * for the other gates.
3901
- */
3902
- readonly humanReviewGraceMinutes: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
3903
- /**
3904
- * A human-initiated freeform fix request parked on the gate (an in-app prompt). Consumed at
3905
- * the top of the next `evaluateGate` pass, which dispatches the fixer with these instructions
3906
- * folded in — bypassing the grace window. Absent for the other gates.
3907
- */
3908
- readonly pendingFix: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3909
- readonly instructions: v.StringSchema<undefined>;
3910
- readonly at: v.NumberSchema<undefined>;
3911
- }, undefined>, undefined>, undefined>;
3912
- }, undefined>, undefined>, undefined>;
3913
- /** Live Tester→Fixer loop state while a `tester` step runs/fixes; see {@link testerStepStateSchema}. */
3914
- readonly test: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3915
- readonly phase: v.PicklistSchema<["testing", "fixing"], undefined>;
3916
- /** How many `fixer` attempts have been dispatched so far. */
3917
- readonly attempts: v.NumberSchema<undefined>;
3918
- /** Ceiling on fixer attempts, resolved from the task's merge preset at step start. */
3919
- readonly maxAttempts: v.NumberSchema<undefined>;
3920
- /** The most recent Tester report (what was tested, outcomes, concerns, greenlight). */
3921
- readonly lastReport: v.OptionalSchema<v.NullableSchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
3922
- readonly greenlight: v.BooleanSchema<undefined>;
3923
- readonly summary: v.StringSchema<undefined>;
3924
- readonly tested: v.ArraySchema<v.StringSchema<undefined>, undefined>;
3925
- readonly outcomes: v.ArraySchema<v.ObjectSchema<{
3926
- readonly name: v.StringSchema<undefined>;
3927
- readonly status: v.PicklistSchema<["passed", "failed", "skipped"], undefined>;
3928
- readonly detail: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3929
- }, undefined>, undefined>;
3930
- readonly concerns: v.ArraySchema<v.ObjectSchema<{
3931
- readonly title: v.StringSchema<undefined>;
3932
- readonly detail: v.StringSchema<undefined>;
3933
- readonly severity: v.PicklistSchema<["low", "medium", "high", "critical"], undefined>;
3934
- }, undefined>, undefined>;
3935
- readonly environment: v.OptionalSchema<v.PicklistSchema<["local", "ephemeral"], undefined>, undefined>;
3936
- readonly screenshots: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
3937
- readonly view: v.StringSchema<undefined>;
3938
- readonly artifactId: v.StringSchema<undefined>;
3939
- readonly hash: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3940
- readonly width: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
3941
- readonly height: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
3942
- readonly referenceArtifactId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
3943
- }, undefined>, undefined>, undefined>;
3944
- readonly abort: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
3945
- readonly reason: v.StringSchema<undefined>;
3946
- }, undefined>, undefined>, undefined>;
3947
- }, undefined>, v.TransformAction<{
3948
- greenlight: boolean;
3949
- summary: string;
3950
- tested: string[];
3951
- outcomes: {
3952
- name: string;
3953
- status: "failed" | "passed" | "skipped";
3954
- detail?: string | undefined;
3955
- }[];
3956
- concerns: {
3957
- title: string;
3958
- detail: string;
3959
- severity: "critical" | "high" | "low" | "medium";
3960
- }[];
3961
- environment?: "ephemeral" | "local" | undefined;
3962
- screenshots?: {
3963
- view: string;
3964
- artifactId: string;
3965
- hash?: string | undefined;
3966
- width?: number | undefined;
3967
- height?: number | undefined;
3968
- referenceArtifactId?: string | undefined;
3969
- }[] | undefined;
3970
- abort?: {
3971
- reason: string;
3972
- } | null | undefined;
3973
- }, {
3974
- greenlight: boolean;
3975
- summary: string;
3976
- tested: string[];
3977
- outcomes: {
3978
- name: string;
3979
- status: "failed" | "passed" | "skipped";
3980
- detail?: string | undefined;
3981
- }[];
3982
- concerns: {
3983
- title: string;
3984
- detail: string;
3985
- severity: "critical" | "high" | "low" | "medium";
3986
- }[];
3987
- environment?: "ephemeral" | "local" | undefined;
3988
- screenshots?: {
3989
- view: string;
3990
- artifactId: string;
3991
- hash?: string | undefined;
3992
- width?: number | undefined;
3993
- height?: number | undefined;
3994
- referenceArtifactId?: string | undefined;
3995
- }[] | undefined;
3996
- abort?: {
3997
- reason: string;
3998
- } | null | undefined;
3999
- }>]>, undefined>, undefined>;
4000
- /**
4001
- * Append-only history of the `fixer` rounds this Tester step looped through, each recorded
4002
- * when its job finished. Lets the test window surface an inspectable timeline of the fixer
4003
- * attempts (what each addressed, how it ended) instead of only a bare `attempts` count.
4004
- */
4005
- readonly attemptLog: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
4006
- /** 1-based fixer round (matches `attempts` after the fixer for this round was dispatched). */
4007
- readonly attempt: v.NumberSchema<undefined>;
4008
- /** Epoch ms when the fixer job finished. */
4009
- readonly at: v.NumberSchema<undefined>;
4010
- /** Whether the fixer container finished (`completed`) or errored/was evicted (`failed`). */
4011
- readonly outcome: v.PicklistSchema<["completed", "failed"], undefined>;
4012
- /** The fixer's own summary (or the failure reason), naming what it changed / what failed. */
4013
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4014
- /**
4015
- * The concerns the fixer was handed for this round (from the Tester report that withheld
4016
- * its greenlight), so the window can show WHAT each round tried to address — not only that
4017
- * a round happened.
4018
- */
4019
- readonly concerns: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
4020
- readonly title: v.StringSchema<undefined>;
4021
- readonly detail: v.StringSchema<undefined>;
4022
- readonly severity: v.PicklistSchema<["low", "medium", "high", "critical"], undefined>;
4023
- }, undefined>, undefined>, undefined>, undefined>;
4024
- }, undefined>, undefined>, undefined>, undefined>;
4025
- /**
4026
- * The most recent in-container docker-compose dependency stand-up record (local-infra
4027
- * tester): whether the dependencies came up and the captured (redacted, bounded)
4028
- * `docker compose up` logs. Refreshed on each Tester round (it stands the infra up anew),
4029
- * so the test window can surface WHY local infra failed to come up — the failure-class
4030
- * artifact the orchestrator-side provisioning logs can't see. Absent for ephemeral /
4031
- * no-infra runs. See {@link testerInfraSetupSchema}.
4032
- */
4033
- readonly infraSetup: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4034
- readonly started: v.BooleanSchema<undefined>;
4035
- readonly composePath: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4036
- readonly at: v.NumberSchema<undefined>;
4037
- readonly durationMs: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
4038
- readonly logs: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4039
- readonly error: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4040
- }, undefined>, undefined>, undefined>;
4041
- }, undefined>, undefined>, undefined>;
4042
- /**
4043
- * Live test quality-control companion state on a `tester-api`/`tester-ui` step, copied
4044
- * from the pipeline's per-step `testerQuality` config at run start. Drives the QC loop that
4045
- * gates each Tester report for completeness before the greenlight/fixer decision. Absent
4046
- * for non-Tester steps / when the companion is disabled. See {@link testerQualityStepStateSchema}.
4047
- */
4048
- readonly testerQuality: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4049
- /** Whether the QC companion is active on this Tester step (the builder toggle). */
4050
- readonly enabled: v.BooleanSchema<undefined>;
4051
- /** How many QC-driven Tester re-runs have been dispatched so far. */
4052
- readonly attempts: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
4053
- /** Ceiling on QC-driven re-runs, from the task's merge preset (`maxTesterQualityIterations`). */
4054
- readonly maxAttempts: v.NumberSchema<undefined>;
4055
- /** Optional estimate gating copied from the pipeline; evaluated against the block estimate. */
4056
- readonly gating: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4057
- readonly enabled: v.BooleanSchema<undefined>;
4058
- readonly minComplexity: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
4059
- readonly minRisk: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
4060
- readonly minImpact: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
4061
- readonly onMissingEstimate: v.OptionalSchema<v.PicklistSchema<["run", "skip"], undefined>, "run">;
4062
- }, undefined>, undefined>, undefined>;
4063
- /** One verdict per QC evaluation, in order (newest last). Empty before the first grade. */
4064
- readonly verdicts: v.ArraySchema<v.ObjectSchema<{
4065
- /** Whether the report is complete/coherent enough to proceed (no QC re-run needed). */
4066
- readonly adequate: v.BooleanSchema<undefined>;
4067
- /** The QC's prose challenge / justification, folded into the Tester's re-run context. */
4068
- readonly feedback: v.StringSchema<undefined>;
4069
- /** Concrete coverage gaps the Tester must still address (empty when adequate). */
4070
- readonly gaps: v.ArraySchema<v.StringSchema<undefined>, undefined>;
4071
- /** Epoch ms the verdict was produced. */
4072
- readonly at: v.NumberSchema<undefined>;
4073
- /** The model that produced the verdict, for transparency. */
4074
- readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4075
- }, undefined>, undefined>;
4076
- /** Set true once the QC budget was spent with the report still judged inadequate. */
4077
- readonly exceeded: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
4078
- }, undefined>, undefined>, undefined>;
4079
- /**
4080
- * Live state of a `human-test` gate (ephemeral env + human validation loop); see
4081
- * {@link humanTestStepStateSchema}. Absent for every other step kind.
4082
- */
4083
- readonly humanTest: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4084
- readonly phase: v.PicklistSchema<["provisioning", "awaiting_human", "fixing", "resolving_conflicts", "passed"], undefined>;
4085
- /** The live ephemeral environment (null in degraded manual mode / after destroy). */
4086
- readonly environment: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4087
- /** The `environments` row id, so the window can fetch access creds / re-poll status. */
4088
- readonly id: v.StringSchema<undefined>;
4089
- /** The provisioned public URL the human tests against (null while still provisioning). */
4090
- readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
4091
- /** The environment lifecycle status; see {@link environmentStatusSchema}. */
4092
- readonly status: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
4093
- /** Epoch ms the environment expires (TTL), when known. */
4094
- readonly expiresAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
4095
- }, undefined>, undefined>, undefined>;
4096
- /**
4097
- * Why no environment was auto-provisioned — set in degraded manual mode (no env provider
4098
- * wired, or provisioning errored) so the window can explain it and let the human test
4099
- * against the PR branch manually. Absent when an env was provisioned.
4100
- */
4101
- readonly degradedReason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4102
- /** How many helper (fixer / conflict-resolver) attempts have been dispatched so far. */
4103
- readonly attempts: v.NumberSchema<undefined>;
4104
- /** Ceiling on helper attempts, resolved from the task's merge preset (`ciMaxAttempts`). */
4105
- readonly maxAttempts: v.NumberSchema<undefined>;
4106
- /** The PR head commit being tested, when known. */
4107
- readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4108
- /** Append-only history of fix / pull-main rounds; see {@link humanTestRoundSchema}. */
4109
- readonly rounds: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4110
- /** The kind of round — a findings-driven fix or a pull-main-with-conflicts resolve. */
4111
- readonly kind: v.PicklistSchema<["fix", "pull-main"], undefined>;
4112
- /** The human's findings prompt (fix), or a one-line note for the pull-main round. */
4113
- readonly findings: v.StringSchema<undefined>;
4114
- /** The helper container kind this round dispatched (`fixer` / `conflict-resolver`). */
4115
- readonly helperKind: v.StringSchema<undefined>;
4116
- /** The helper job's id while it ran, for cross-referencing the run timeline. */
4117
- readonly jobId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4118
- /** How the helper ended once its job settled. Absent while still in flight. */
4119
- readonly outcome: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["completed", "failed"], undefined>, undefined>, undefined>;
4120
- /** Epoch ms the round opened (the human clicked Request fix / Pull main). */
4121
- readonly at: v.NumberSchema<undefined>;
4122
- }, undefined>, undefined>, undefined>;
4123
- /**
4124
- * Transient action the human requested while the gate is parked — recorded on the parked
4125
- * step and consumed by the durable driver when it re-enters the gate (the analogue of
4126
- * `pendingIncorporation` on a requirements gate). Cleared once the driver acts on it.
4127
- */
4128
- readonly pendingAction: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4129
- readonly type: v.PicklistSchema<["confirm", "request-fix", "pull-main", "recreate"], undefined>;
4130
- /** The findings prompt for a `request-fix` action. */
4131
- readonly findings: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4132
- }, undefined>, undefined>, undefined>;
4133
- }, undefined>, undefined>, undefined>;
4134
- /**
4135
- * Live state of a `visual-confirmation` gate (screenshot review + fix loop); see
4136
- * {@link visualConfirmStepStateSchema}. Absent for every other step kind.
4137
- */
4138
- readonly visualConfirm: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4139
- readonly phase: v.PicklistSchema<["awaiting_human", "fixing", "approved"], undefined>;
4140
- /** The actual-vs-reference pairs the human reviews, refreshed on each (re)capture. */
4141
- readonly pairs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4142
- readonly view: v.StringSchema<undefined>;
4143
- readonly actualArtifactId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4144
- readonly referenceArtifactId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4145
- }, undefined>, undefined>, undefined>;
4146
- /** Set when no screenshots could be gathered (no UI tester ran / no storage) — manual mode. */
4147
- readonly degradedReason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4148
- /** How many fixer attempts have been dispatched so far. */
4149
- readonly attempts: v.NumberSchema<undefined>;
4150
- /** Ceiling on fixer attempts, resolved from the task's merge preset (`ciMaxAttempts`). */
4151
- readonly maxAttempts: v.NumberSchema<undefined>;
4152
- /** Append-only history of fix rounds; see {@link visualConfirmRoundSchema}. */
4153
- readonly rounds: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4154
- readonly findings: v.StringSchema<undefined>;
4155
- readonly helperKind: v.StringSchema<undefined>;
4156
- readonly jobId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4157
- readonly outcome: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["completed", "failed"], undefined>, undefined>, undefined>;
4158
- readonly at: v.NumberSchema<undefined>;
4159
- }, undefined>, undefined>, undefined>;
4160
- /**
4161
- * Transient action the human requested while parked — consumed by the durable driver
4162
- * when it re-enters the gate. Cleared once acted on.
4163
- */
4164
- readonly pendingAction: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4165
- readonly type: v.PicklistSchema<["approve", "request-fix", "recapture"], undefined>;
4166
- /** The findings prompt for a `request-fix` action. */
4167
- readonly findings: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4168
- }, undefined>, undefined>, undefined>;
4169
- }, undefined>, undefined>, undefined>;
4170
- /**
4171
- * The ephemeral environment this step runs against (when the block has one), so a
4172
- * run's details can show its spinning-up / running / shut-down / errored state +
4173
- * the exact error. Populated by the engine for container/deployer steps from the
4174
- * block's live environment; see {@link runEnvironmentSchema}. The `human-test` gate
4175
- * keeps its own richer `humanTest.environment` and is not double-populated here.
4176
- */
4177
- readonly environment: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4178
- /** The `environments` row id (lets a window fetch access creds / re-poll status). */
4179
- readonly id: v.StringSchema<undefined>;
4180
- /** The provisioned public URL (null while still provisioning). */
4181
- readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
4182
- /** The environment lifecycle status; see {@link environmentStatusSchema}. */
4183
- readonly status: v.PicklistSchema<["provisioning", "ready", "failed", "expired", "tearing_down", "torn_down"], undefined>;
4184
- /** Epoch ms the environment expires (TTL), when known. */
4185
- readonly expiresAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
4186
- /** The verbatim provider error when the environment failed/expired, else null. */
4187
- readonly lastError: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4188
- /**
4189
- * The service's declared provision type this environment was stood up for
4190
- * (`kubernetes` | `docker-compose` | `custom` | `infraless`), recorded at provision
4191
- * time so a run's details show exactly what was provisioned. Null for legacy rows /
4192
- * pre-resolution.
4193
- */
4194
- readonly provisionType: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>, undefined>, undefined>;
4195
- /**
4196
- * The resolved engine that handled the provisioning (`local-docker` | `local-k3s` |
4197
- * `remote-kubernetes` | `remote-custom` | `none`), surfaced in run details alongside the
4198
- * environment state. Null for legacy rows / pre-resolution.
4199
- */
4200
- readonly engine: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["local-docker", "local-k3s", "remote-kubernetes", "remote-custom", "none"], undefined>, undefined>, undefined>;
4201
- }, undefined>, undefined>, undefined>;
4202
- /** Live subtask counts while an async (container) step runs; see {@link stepSubtasksSchema}. */
4203
- readonly subtasks: v.OptionalSchema<v.ObjectSchema<{
4204
- readonly completed: v.NumberSchema<undefined>;
4205
- readonly inProgress: v.NumberSchema<undefined>;
4206
- readonly total: v.NumberSchema<undefined>;
4207
- readonly items: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4208
- /** The task's human-readable subject, as the agent wrote it. */
4209
- readonly label: v.StringSchema<undefined>;
4210
- readonly status: v.PicklistSchema<["pending", "in_progress", "completed"], undefined>;
4211
- }, undefined>, undefined>, undefined>;
4212
- }, undefined>, undefined>;
4213
- /**
4214
- * The per-run container this async (container) step runs in — its lifecycle status
4215
- * (starting / up / errored), the agent's current phase (clone / agent / push), and
4216
- * the container's id + reachable URL once up. Lets a run's details surface what the
4217
- * container is doing and where it lives, so the board shows an explicit "Spinning up
4218
- * container…" → live-phase progression instead of a blank "working" state. Set the
4219
- * moment the job is dispatched (the dispatch blocks until the container accepts the
4220
- * job) and refined on each poll. Only ever set on async (container) steps; absent on
4221
- * non-container steps and steps not yet dispatched. See {@link runContainerSchema}.
4222
- */
4223
- readonly container: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4224
- /** The container lifecycle status; see {@link runContainerStatusSchema}. */
4225
- readonly status: v.PicklistSchema<["starting", "up", "errored", "destroyed"], undefined>;
4226
- /**
4227
- * The coarse phase the agent's job is in while the container is `up` (`clone` →
4228
- * `agent` → `push`, seeded `starting`), forwarded from the harness. Lets the details
4229
- * distinguish "still preparing the checkout" from "the agent is making calls". Absent
4230
- * until the first poll, or when the runner doesn't report a phase.
4231
- */
4232
- readonly phase: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4233
- /** Provider container/runner id (Cloudflare DO id, docker container id), when known. */
4234
- readonly id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4235
- /** A reachable address for the running container (the local docker host URL), when one exists. */
4236
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4237
- }, undefined>, undefined>, undefined>;
4238
- /**
4239
- * Whether web search was available to this container step, and which upstream backend
4240
- * served it. Set at dispatch (a static per-run fact resolved from the account's
4241
- * web-search keys, else the deployment default). Only ever set on async (container)
4242
- * steps; absent on non-container steps and steps not yet dispatched. Distinct from the
4243
- * telemetry-gated per-query log — this is always surfaced. See {@link webSearchAvailabilitySchema}.
4244
- */
4245
- readonly search: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4246
- readonly available: v.BooleanSchema<undefined>;
4247
- readonly provider: v.NullableSchema<v.PicklistSchema<["brave", "searxng"], undefined>, undefined>;
4248
- }, undefined>, undefined>, undefined>;
4249
- readonly decision: v.NullableSchema<v.ObjectSchema<{
4250
- readonly id: v.StringSchema<undefined>;
4251
- readonly question: v.StringSchema<undefined>;
4252
- readonly options: v.ArraySchema<v.StringSchema<undefined>, undefined>;
4253
- readonly chosen: v.NullableSchema<v.StringSchema<undefined>, undefined>;
4254
- }, undefined>, undefined>;
4255
- /**
4256
- * Whether a human approval gate fires after this step completes. Copied from
4257
- * the pipeline's `gates` at run start; absent means no gate.
4258
- */
4259
- readonly requiresApproval: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
4260
- /**
4261
- * The live approval gate for this step (see {@link stepApprovalSchema}). Set
4262
- * once the step's proposal is ready and `requiresApproval` is true; null/absent
4263
- * otherwise.
4264
- */
4265
- readonly approval: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4266
- /** Unique id of this gate; the durable run parks on it like a decision. */
4267
- readonly id: v.StringSchema<undefined>;
4268
- /** `pending` while awaiting the human; terminal `approved`/`rejected`; `changes_requested` re-runs the step. */
4269
- readonly status: v.PicklistSchema<["pending", "approved", "changes_requested", "rejected"], undefined>;
4270
- /** The agent's output the human is reviewing (editable before approval). */
4271
- readonly proposal: v.StringSchema<undefined>;
4272
- /** When changes were requested, the human's freeform guidance fed into the re-run. */
4273
- readonly feedback: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4274
- /** When changes were requested, per-block review comments fed into the re-run. */
4275
- readonly comments: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4276
- /**
4277
- * Verbatim raw-markdown source of the commented prose block. Optional: a comment
4278
- * may instead anchor to a structured item via {@link anchorId}, where there is no
4279
- * prose source to quote.
4280
- */
4281
- readonly quotedSource: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4282
- /**
4283
- * 0-based source line range [start, end) of the commented prose block, for
4284
- * best-effort re-anchoring. Optional: a comment may instead anchor to a structured
4285
- * item via {@link anchorId} (e.g. a spec requirement/acceptance-criterion id), where
4286
- * there is no prose line range.
4287
- */
4288
- readonly srcStart: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
4289
- readonly srcEnd: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
4290
- /**
4291
- * Stable id of the structured item the comment targets (e.g. a spec
4292
- * requirement/criterion id), when the reviewed output is rendered as structured
4293
- * items rather than free prose. Absent for prose-range comments.
4294
- */
4295
- readonly anchorId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4296
- /** The reviewer's note on this block / item. */
4297
- readonly body: v.StringSchema<undefined>;
4298
- }, undefined>, undefined>, undefined>;
4299
- }, undefined>, undefined>, undefined>;
4300
- /**
4301
- * Live state of a companion step that reviews a preceding producer step. Set when
4302
- * this step's `agentKind` is a companion kind. `threshold` is the quality bar the
4303
- * companion's latest rating (the last `verdicts` entry) must reach; `attempts`
4304
- * counts only the AUTOMATIC reworks performed, and once it reaches `maxAttempts` the
4305
- * step parks on the iteration-cap gate (`exceeded`) for a human rather than failing.
4306
- * A human "request changes" on the companion's gate also re-runs the producer but does
4307
- * NOT consume `attempts` (only the automatic loop is budgeted). Absent for non-companion steps.
4308
- */
4309
- readonly companion: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4310
- /** The quality bar (0..1) the latest verdict's rating must reach; seeded from the pipeline. */
4311
- readonly threshold: v.NumberSchema<undefined>;
4312
- /** The automatic rework budget: once `attempts` reaches this the gate parks for a human (`exceeded`). */
4313
- readonly maxAttempts: v.NumberSchema<undefined>;
4314
- /**
4315
- * How many AUTOMATIC reworks the companion has driven so far (the producer is
4316
- * looped back once per failed verdict). Human "request changes" cycles are not
4317
- * counted. Defaults to 0; once it reaches `maxAttempts` the step parks on the
4318
- * iteration-cap gate (`exceeded`) — an "extra round" raises `maxAttempts` by one.
4319
- */
4320
- readonly attempts: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
4321
- /**
4322
- * One standardized {@link companionVerdictSchema} per grading cycle, in order —
4323
- * the full sequence of correction iterations (the producer is re-run after each
4324
- * rejected verdict), including any human-driven ones. Empty before the first
4325
- * grade; the last entry is the latest.
4326
- */
4327
- readonly verdicts: v.ArraySchema<v.ObjectSchema<{
4328
- /** Overall quality of the graded output (0..1, higher = better). */
4329
- readonly rating: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>;
4330
- /** The quality bar the rating had to reach to pass. */
4331
- readonly threshold: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>;
4332
- /** Whether the rating met the threshold. */
4333
- readonly passed: v.BooleanSchema<undefined>;
4334
- /** The companion's challenge / justification (its assessment summary). */
4335
- readonly feedback: v.StringSchema<undefined>;
4336
- }, undefined>, undefined>;
4337
- /**
4338
- * Set true when the automatic rework budget (`maxAttempts`) was spent with the
4339
- * rating still below the bar: instead of failing the run, the step parks on its
4340
- * approval gate for a human to resolve via the shared iteration-cap surface
4341
- * (one more round / proceed anyway / stop & reset). Cleared once the human grants
4342
- * an extra round (the loop resumes). Absent until/unless the cap is hit.
4343
- */
4344
- readonly exceeded: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
4345
- }, undefined>, undefined>, undefined>;
4346
- /**
4347
- * Live Follow-up companion state while a `coder` step runs/parks: the items the Coder
4348
- * streamed (loose ends / side-tasks / questions), whether the companion is enabled, and
4349
- * the send-back loop budget. Items accrue live as the harness streams them (the blinking
4350
- * companion); at the step's completion the engine parks the run while any item is
4351
- * `pending`, then loops the Coder for any `queued` follow-up / `answered` question. See
4352
- * {@link followUpsStepStateSchema}. Absent for non-`coder` steps / when the companion is off.
4353
- */
4354
- readonly followUps: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4355
- readonly enabled: v.BooleanSchema<undefined>;
4356
- readonly items: v.ArraySchema<v.ObjectSchema<{
4357
- readonly id: v.StringSchema<undefined>;
4358
- readonly kind: v.PicklistSchema<["follow_up", "question"], undefined>;
4359
- readonly title: v.StringSchema<undefined>;
4360
- readonly detail: v.StringSchema<undefined>;
4361
- readonly suggestedAction: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4362
- readonly status: v.PicklistSchema<["pending", "filed", "queued", "answered", "dismissed"], undefined>;
4363
- readonly answer: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4364
- readonly sentToCoder: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
4365
- readonly ticketExternalId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4366
- readonly ticketUrl: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4367
- readonly createdAt: v.NumberSchema<undefined>;
4368
- readonly updatedAt: v.NumberSchema<undefined>;
4369
- }, undefined>, undefined>;
4370
- readonly loops: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
4371
- readonly maxLoops: v.OptionalSchema<v.NumberSchema<undefined>, 3>;
4372
- }, undefined>, undefined>, undefined>;
4373
- /**
4374
- * Live implementation-fork decision state while a `coder` step runs its optional
4375
- * two-phase flow: the proposer explore job (`proposing`), the human park
4376
- * (`awaiting_choice` / `answering`), the resolved choice (`chosen`), or one of the
4377
- * pass-through terminals (`single_path` / `skipped`). Created lazily by the engine
4378
- * when the phase activates — the config lives on the block + the risk policy, never
4379
- * on the step. Absent for non-`coder` steps / when the phase never activated. See
4380
- * {@link forkDecisionStepStateSchema}.
4381
- */
4382
- readonly forkDecision: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4383
- readonly status: v.PicklistSchema<["proposing", "awaiting_choice", "answering", "chosen", "single_path", "skipped"], undefined>;
4384
- readonly seamSummary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4385
- readonly forks: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4386
- readonly id: v.StringSchema<undefined>;
4387
- readonly title: v.StringSchema<undefined>;
4388
- readonly summary: v.StringSchema<undefined>;
4389
- readonly approach: v.StringSchema<undefined>;
4390
- readonly tradeoffs: v.ArraySchema<v.StringSchema<undefined>, undefined>;
4391
- readonly riskNotes: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4392
- readonly recommended: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
4393
- }, undefined>, undefined>, readonly []>;
4394
- readonly singlePathReason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4395
- readonly chat: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4396
- readonly id: v.StringSchema<undefined>;
4397
- readonly role: v.PicklistSchema<["human", "assistant"], undefined>;
4398
- readonly text: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 4000, undefined>]>;
4399
- readonly createdAt: v.NumberSchema<undefined>;
4400
- }, undefined>, undefined>, readonly []>;
4401
- readonly maxChatTurns: v.OptionalSchema<v.NumberSchema<undefined>, 15>;
4402
- readonly chosen: v.OptionalSchema<v.NullableSchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
4403
- readonly forkId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4404
- readonly custom: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4405
- readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4406
- readonly at: v.NumberSchema<undefined>;
4407
- }, undefined>, v.CheckAction<{
4408
- forkId?: string | null | undefined;
4409
- custom?: string | null | undefined;
4410
- note?: string | null | undefined;
4411
- at: number;
4412
- }, "Provide exactly one of forkId or custom.">]>, undefined>, undefined>;
4413
- readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4414
- }, undefined>, undefined>, undefined>;
4415
- /**
4416
- * Live "Ralph loop" state carried on a `ralph` step: the persistent retry-until-done
4417
- * loop's iteration count, budget, validation command, and per-iteration history. Seeded
4418
- * from the block's per-task agent config at step start, then advanced each iteration by
4419
- * the engine's `RalphController`. Because it rides the run's persisted `detail` blob, both
4420
- * durable drivers + both stale-run sweepers re-drive a mid-loop run from exactly this
4421
- * state after a restart. Absent for non-`ralph` steps. See {@link ralphStepStateSchema}.
4422
- */
4423
- readonly ralph: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4424
- readonly phase: v.PicklistSchema<["iterating"], undefined>;
4425
- readonly attempts: v.NumberSchema<undefined>;
4426
- readonly maxIterations: v.NumberSchema<undefined>;
4427
- readonly validationCommand: v.StringSchema<undefined>;
4428
- readonly progressPath: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4429
- readonly lastExitCode: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
4430
- readonly lastValidationTail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4431
- readonly attemptLog: v.OptionalSchema<v.NullableSchema<v.ArraySchema<v.ObjectSchema<{
4432
- readonly attempt: v.NumberSchema<undefined>;
4433
- readonly at: v.NumberSchema<undefined>;
4434
- readonly validationPassed: v.BooleanSchema<undefined>;
4435
- readonly exitCode: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
4436
- readonly outputTail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4437
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4438
- }, undefined>, undefined>, undefined>, undefined>;
4439
- }, undefined>, undefined>, undefined>;
4440
- /**
4441
- * Transient re-entry marker carried on a parked `coder` step whose fork decision is
4442
- * `answering`: set when the human sends a chat message so the run is signalled to
4443
- * wake and the durable driver, on re-entering, runs the inline chat LLM and appends
4444
- * the assistant reply (the LLM work that must not block the HTTP request). Cleared
4445
- * once that async cycle completes. Documented beside `pendingIncorporation` /
4446
- * `pendingInterview`. Absent when no chat turn is pending.
4447
- */
4448
- readonly pendingForkChat: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4449
- readonly messageId: v.StringSchema<undefined>;
4450
- }, undefined>, undefined>, undefined>;
4451
- /**
4452
- * Live PR deep-review state carried on a `pr-reviewer` step: the sliced, severity-ordered
4453
- * findings the read-only reviewer produced, the human's curated selection, and how it was
4454
- * resolved. Recorded by the engine when the reviewer container job completes; the run then
4455
- * parks (`awaiting_selection`) for the human to select findings through the dedicated
4456
- * window and resolve. Absent for non-`pr-reviewer` steps. See {@link prReviewStepStateSchema}.
4457
- */
4458
- readonly prReview: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4459
- readonly status: v.PicklistSchema<["reviewing", "awaiting_selection", "fixing", "posting", "done", "skipped"], undefined>;
4460
- readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4461
- readonly slices: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4462
- readonly id: v.StringSchema<undefined>;
4463
- readonly title: v.StringSchema<undefined>;
4464
- readonly rationale: v.StringSchema<undefined>;
4465
- readonly paths: v.ArraySchema<v.StringSchema<undefined>, undefined>;
4466
- }, undefined>, undefined>, readonly []>;
4467
- readonly findings: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4468
- readonly id: v.StringSchema<undefined>;
4469
- readonly sliceId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4470
- readonly path: v.StringSchema<undefined>;
4471
- readonly line: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
4472
- readonly side: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["LEFT", "RIGHT"], undefined>, undefined>, undefined>;
4473
- readonly severity: v.PicklistSchema<["blocker", "high", "medium", "low", "nit"], undefined>;
4474
- readonly category: v.PicklistSchema<["correctness", "security", "performance", "maintainability", "style", "test", "other"], undefined>;
4475
- readonly title: v.StringSchema<undefined>;
4476
- readonly detail: v.StringSchema<undefined>;
4477
- readonly suggestedFix: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4478
- }, undefined>, undefined>, readonly []>;
4479
- readonly selectedFindingIds: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, readonly []>;
4480
- readonly resolution: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["finish", "fix", "post"], undefined>, undefined>, undefined>;
4481
- readonly prUrl: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4482
- readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4483
- }, undefined>, undefined>, undefined>;
4484
- /**
4485
- * The at-most-once driver marker for the PR-review "post" resolution: set when the human
4486
- * resolves a parked review with `post`, so the durable driver — on re-entry, off the HTTP
4487
- * request — publishes the selected findings as inline PR review comments (via
4488
- * `RepoFiles.createReview`) exactly once. Consumed (cleared + persisted) BEFORE the posting
4489
- * side effect so a Workflows retry/replay can't post the review twice. Cleared once posted.
4490
- */
4491
- readonly pendingPrReviewPost: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
4492
- /**
4493
- * Transient rework feedback carried on a PRODUCER step while it is being re-run by
4494
- * a downstream companion (the analogue of an approval's `changes_requested`
4495
- * feedback for the automatic path). Folded into the agent's revision context on the
4496
- * re-run, then cleared. Absent when no companion rework is in flight.
4497
- */
4498
- readonly rework: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4499
- /** The producer's previous proposal the companion challenged. */
4500
- readonly previousProposal: v.StringSchema<undefined>;
4501
- /** The companion's prose feedback driving the rework. */
4502
- readonly feedback: v.StringSchema<undefined>;
4503
- /** Optional per-item / per-block challenges to address. */
4504
- readonly comments: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4505
- /**
4506
- * Verbatim raw-markdown source of the commented prose block. Optional: a comment
4507
- * may instead anchor to a structured item via {@link anchorId}, where there is no
4508
- * prose source to quote.
4509
- */
4510
- readonly quotedSource: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4511
- /**
4512
- * 0-based source line range [start, end) of the commented prose block, for
4513
- * best-effort re-anchoring. Optional: a comment may instead anchor to a structured
4514
- * item via {@link anchorId} (e.g. a spec requirement/acceptance-criterion id), where
4515
- * there is no prose line range.
4516
- */
4517
- readonly srcStart: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
4518
- readonly srcEnd: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
4519
- /**
4520
- * Stable id of the structured item the comment targets (e.g. a spec
4521
- * requirement/criterion id), when the reviewed output is rendered as structured
4522
- * items rather than free prose. Absent for prose-range comments.
4523
- */
4524
- readonly anchorId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4525
- /** The reviewer's note on this block / item. */
4526
- readonly body: v.StringSchema<undefined>;
4527
- }, undefined>, undefined>, undefined>;
4528
- }, undefined>, undefined>, undefined>;
4529
- /**
4530
- * Transient incorporation intent carried on a parked `requirements-review` gate step.
4531
- * Set when the human answers the findings and asks to incorporate: the run is signalled
4532
- * to wake and the durable driver, on re-entering the gate, folds the answers into a
4533
- * document and re-reviews it (the LLM work that used to block the HTTP request). Cleared
4534
- * once that async cycle completes. `feedback` is the human's optional "do it differently"
4535
- * direction (a redo). Absent when no incorporation is pending.
4536
- */
4537
- readonly pendingIncorporation: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4538
- readonly feedback: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4539
- }, undefined>, undefined>, undefined>;
4540
- /**
4541
- * Transient recommendation intent carried on a parked `requirements-review` gate step.
4542
- * Set when the human asks the Requirement Writer to suggest answers for a batch of findings
4543
- * (or re-requests one): the run is signalled to wake and the durable driver, on re-entering
4544
- * the gate, runs the Writer per finding — filling in the `pending` placeholder
4545
- * recommendations — then re-parks (recommendations never advance the run). Cleared once that
4546
- * async batch completes. `itemIds` are the findings to recommend for; `note` steers the
4547
- * whole batch. Absent when no recommendation batch is pending.
4548
- */
4549
- readonly pendingRecommendation: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4550
- readonly itemIds: v.ArraySchema<v.StringSchema<undefined>, undefined>;
4551
- readonly note: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4552
- }, undefined>, undefined>, undefined>;
4553
- /**
4554
- * Transient interview intent carried on a parked `initiative-interviewer` gate step. Set
4555
- * when the human has answered the planning questions and asked to continue (or proceed):
4556
- * the run is signalled to wake and the durable driver, on re-entering the gate, runs the
4557
- * interviewer LLM again against the answers — asking follow-ups (re-park) or synthesizing
4558
- * the goal/constraints brief and advancing. `proceed` skips any remaining questions.
4559
- * Cleared once that async re-entry completes. Absent when no continuation is pending.
4560
- */
4561
- readonly pendingInterview: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4562
- readonly proceed: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
4563
- }, undefined>, undefined>, undefined>;
4564
- /**
4565
- * Consensus configuration for this step, copied from the pipeline's `consensus`
4566
- * array at run start. Present (with `enabled: true`) when this step should run
4567
- * through the multi-model consensus mechanism; read by the consensus executor
4568
- * (and to decide gating against the block estimate). Absent ⇒ standard agent.
4569
- * See {@link consensusStepConfigSchema}.
4570
- */
4571
- readonly consensus: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4572
- readonly enabled: v.BooleanSchema<undefined>;
4573
- readonly strategy: v.PicklistSchema<["specialist-panel", "debate", "ranked-voting"], undefined>;
4574
- readonly participants: v.ArraySchema<v.ObjectSchema<{
4575
- readonly id: v.StringSchema<undefined>;
4576
- readonly role: v.StringSchema<undefined>;
4577
- readonly systemFraming: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4578
- readonly modelId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4579
- }, undefined>, undefined>;
4580
- readonly synthesizerModelId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4581
- readonly rounds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 5, undefined>]>, undefined>;
4582
- readonly gating: v.OptionalSchema<v.ObjectSchema<{
4583
- readonly enabled: v.BooleanSchema<undefined>;
4584
- readonly minComplexity: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
4585
- readonly minRisk: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
4586
- readonly minImpact: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
4587
- readonly onMissingEstimate: v.OptionalSchema<v.PicklistSchema<["consensus", "standard"], undefined>, "consensus">;
4588
- }, undefined>, undefined>;
4589
- }, undefined>, undefined>, undefined>;
4590
- /**
4591
- * Estimate-based gating for this step, copied from the pipeline's `gating` array at
4592
- * run start. When present (with `enabled: true`) the step is skipped at runtime unless
4593
- * the block's task estimate meets the threshold. Absent ⇒ always run. See
4594
- * {@link stepGatingSchema}.
4595
- */
4596
- readonly gating: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4597
- readonly enabled: v.BooleanSchema<undefined>;
4598
- readonly minComplexity: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
4599
- readonly minRisk: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
4600
- readonly minImpact: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
4601
- readonly onMissingEstimate: v.OptionalSchema<v.PicklistSchema<["run", "skip"], undefined>, "run">;
4602
- }, undefined>, undefined>, undefined>;
4603
- /**
4604
- * Per-step options bag copied from the pipeline's `stepOptions` array at run start (see
4605
- * {@link stepOptionsSchema}). Absent ⇒ all defaults for this step. Read by the engine —
4606
- * e.g. the requirements-review gate consults `stepOptions.autoRecommend`.
4607
- */
4608
- readonly stepOptions: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4609
- /**
4610
- * `requirements-review` only. When enabled (the default), the reviewer classifies each
4611
- * finding, and the ones it judges answerable from universal best-practice / the context
4612
- * already provided get a recommended answer AUTO-generated and offered as the finding's
4613
- * default answer (the human can override or dismiss it); findings that need a genuine
4614
- * business/product decision are left for the human. `false` disables the automation — the
4615
- * human answers (or manually requests recommendations for) every finding. Absent / `true`
4616
- * ⇒ enabled. Ignored on non-`requirements-review` steps.
4617
- */
4618
- readonly autoRecommend: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
4619
- /**
4620
- * `skill` steps only. The id of the account-tier repo-sourced Claude Skill this step
4621
- * executes (`src:<sourceId>:<dirName>`; see `docs/initiatives/repo-skills.md`). The one
4622
- * generic `skill` agent kind is parametrized by THIS field — the picked skill's
4623
- * instructions + resources are resolved at dispatch and folded into the step (natively for
4624
- * the claude-code harness, as prompt + `.cat-context/skill/*` for Pi/codex). A `skill` step
4625
- * with no `skillId` has nothing to run and is rejected at pipeline save. Ignored on every
4626
- * other kind.
4627
- */
4628
- readonly skillId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4629
- }, undefined>, undefined>, undefined>;
4630
- /**
4631
- * True when this step was skipped at runtime because its `gating` was not satisfied
4632
- * (the task estimate fell below the threshold). The step's `state` is `done` with no
4633
- * output; the UI renders it as "skipped (gated)". Absent ⇒ the step ran normally.
4634
- */
4635
- readonly skipped: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
4636
- /**
4637
- * Set `true` on a `spec-writer` step that determined the task is purely technical and
4638
- * produced no business specs (its result's `noBusinessSpecs`). Recorded on the step so
4639
- * the spec-companion's convergence — the one point both signals coexist — can combine it
4640
- * with the companion's `technicalCorroborated` verdict to infer the block's `technical`
4641
- * label. Absent for every other kind / a writer that produced specs.
4642
- */
4643
- readonly noBusinessSpecs: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
4644
- /**
4645
- * Set on a `spec-companion` step from its `technicalCorroborated` verdict (whether it
4646
- * agreed the task is purely technical). Recorded on the step — not just read off the
4647
- * live assessment — so the engine can infer the block's `technical` label both on the
4648
- * companion's automatic convergence AND on a human "proceed" past the iteration cap,
4649
- * where only the persisted step survives. Absent for every other kind / no opinion.
4650
- */
4651
- readonly technicalCorroborated: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
4652
- /** Text the agent produced for this step (when LLM execution is enabled). */
4653
- readonly output: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4654
- /**
4655
- * The structured JSON a registered CUSTOM kind's agent step returned (the generic
4656
- * manifest-driven `agent` dispatch's `custom` channel). Recorded so the SPA can render
4657
- * it in the `generic-structured` result view (and a post-op already consumed it
4658
- * server-side). Absent for built-in / prose kinds.
4659
- */
4660
- readonly custom: v.OptionalSchema<v.UnknownSchema, undefined>;
4661
- /** Identifier of the model that produced `output`, for transparency. */
4662
- readonly model: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4663
- /**
4664
- * Ids of the prompt-fragment library entries that were folded into this step's
4665
- * system prompt — the manual selection on the block unioned with the relevance
4666
- * selector's pick. Recorded for observability and replay-stability; absent when
4667
- * the fragment-library module is not configured.
4668
- */
4669
- readonly selectedFragmentIds: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
4670
- /**
4671
- * The repo-sourced Claude Skill this step was PINNED to at dispatch (a `skill` step; see
4672
- * `docs/initiatives/repo-skills.md`). Recorded so a run executes a stable version of the
4673
- * skill even if its source resyncs mid-run, and so a later investigation knows exactly
4674
- * which skill (and at which commit / manifest blob) ran. `commit` is the source dir's head
4675
- * commit the resources were fetched at (null if the skill was never synced to a commit);
4676
- * `sha` is the `SKILL.md` blob sha. Absent for every non-`skill` step.
4677
- */
4678
- readonly skillVersion: v.OptionalSchema<v.ObjectSchema<{
4679
- readonly skillId: v.StringSchema<undefined>;
4680
- readonly commit: v.NullableSchema<v.StringSchema<undefined>, undefined>;
4681
- readonly sha: v.StringSchema<undefined>;
4682
- }, undefined>, undefined>;
4683
- /**
4684
- * Identifier of an in-flight asynchronous agent job (a container run polled by
4685
- * the durable driver). Set while the step is dispatched-but-not-yet-finished so
4686
- * a Workflows replay re-attaches to the running job instead of starting a new
4687
- * one; cleared once the job's result is recorded.
4688
- */
4689
- readonly jobId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4690
- /**
4691
- * Epoch ms the step first began executing (transitioned to `working`). Set once
4692
- * and never overwritten on subsequent state changes, so a re-run/replay keeps the
4693
- * original start. Absent until the step starts.
4694
- */
4695
- readonly startedAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
4696
- /**
4697
- * Epoch ms the step finished (transitioned to `done`). With {@link startedAt}
4698
- * this yields the step's execution duration. Absent until the step completes.
4699
- */
4700
- readonly finishedAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
4701
- /**
4702
- * Epoch ms the step parked on a human (an approval gate, a raised decision, or an
4703
- * iteration-cap gate), freezing its duration clock: while parked, elapsed time stops
4704
- * accruing — the symmetric counterpart of {@link finishedAt}'s terminal freeze, so a
4705
- * step waiting on input is not billed for the human's deliberation. Set once on park,
4706
- * cleared (null) when the step resumes working or finishes. Absent until first parked.
4707
- */
4708
- readonly pausedAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
4709
- /**
4710
- * How many times this step's container was evicted/crashed and recovered by
4711
- * automatically re-dispatching a fresh container (bounded by
4712
- * `MAX_EVICTION_RECOVERIES`). Once spent, a further eviction fails the run as
4713
- * `evicted` rather than looping. Absent/0 until the first eviction.
4714
- */
4715
- readonly evictionRecoveries: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
4716
- /**
4717
- * How many times this step's container was evicted by *transient infrastructure
4718
- * churn* — an event the runtime facade flags as not-a-crash (e.g. a deploy
4719
- * draining the sandbox) — and recovered by re-dispatching a fresh container.
4720
- * Counted separately from {@link evictionRecoveries} and bounded by a larger
4721
- * `MAX_TRANSIENT_EVICTION_RECOVERIES`, since such churn can recur several times in
4722
- * a short window, unlike a crash. Absent/0 until the first transient eviction.
4723
- */
4724
- readonly transientEvictionRecoveries: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
4725
- /**
4726
- * The service-provisioning config a `deployer` step PINNED when it dispatched its async,
4727
- * container-backed deploy job, so the later poll/finalize maps the job against the same config
4728
- * the container was built from — NOT a fresh read of the service frame (which a person may have
4729
- * edited mid-flight, e.g. flipping it to `infraless`, which would otherwise fail a deploy whose
4730
- * container already succeeded). Absent for the synchronous raw-manifest path and the undeclared
4731
- * legacy single-connection path (re-resolution is harmless there). See {@link serviceProvisioningSchema}.
4732
- */
4733
- readonly deployProvisioning: v.OptionalSchema<v.ObjectSchema<{
4734
- readonly type: v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>;
4735
- readonly manifestSource: v.OptionalSchema<v.VariantSchema<"type", [v.ObjectSchema<{
4736
- readonly type: v.LiteralSchema<"colocated", undefined>;
4737
- readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
4738
- readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
4739
- }, undefined>, v.ObjectSchema<{
4740
- readonly type: v.LiteralSchema<"separate", undefined>;
4741
- readonly repo: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>;
4742
- readonly ref: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, undefined>;
4743
- readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
4744
- readonly renderer: v.OptionalSchema<v.PicklistSchema<["raw", "kustomize"], undefined>, undefined>;
4745
- }, undefined>], undefined>, undefined>;
4746
- readonly composePath: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4747
- readonly localDevOnly: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
4748
- readonly composeBuild: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
4749
- readonly recipe: v.OptionalSchema<v.ObjectSchema<{
4750
- readonly composeFiles: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>, v.MinLengthAction<string[], 1, undefined>]>, undefined>;
4751
- readonly composeProfiles: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>, undefined>;
4752
- readonly envFiles: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4753
- readonly template: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
4754
- readonly target: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
4755
- }, undefined>, undefined>, undefined>;
4756
- readonly externalNetworks: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>, undefined>;
4757
- readonly sharedStackRefs: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>, undefined>;
4758
- readonly prerequisites: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4759
- readonly check: v.PicklistSchema<["docker-daemon", "disk-space", "memory", "registry-auth", "tcp-reachable", "http-reachable", "mkcert-ca", "hosts-entries", "env-secrets-marker"], undefined>;
4760
- readonly params: v.OptionalSchema<v.ObjectSchema<{
4761
- readonly minGib: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1024, undefined>]>, undefined>;
4762
- readonly registry: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4763
- readonly host: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4764
- readonly port: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 65535, undefined>]>, undefined>;
4765
- readonly url: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
4766
- readonly expectStatus: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 100, undefined>, v.MaxValueAction<number, 599, undefined>]>, undefined>;
4767
- readonly expectBodyContains: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4768
- readonly hostnames: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>, undefined>;
4769
- readonly file: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4770
- readonly marker: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4771
- }, undefined>, undefined>;
4772
- readonly required: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
4773
- readonly remediation: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 4000, undefined>]>, undefined>;
4774
- readonly label: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4775
- }, undefined>, undefined>, undefined>;
4776
- readonly setupSteps: v.OptionalSchema<v.ArraySchema<v.VariantSchema<"kind", [v.ObjectSchema<{
4777
- readonly kind: v.LiteralSchema<"compose-exec", undefined>;
4778
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
4779
- readonly service: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
4780
- readonly command: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, v.MinLengthAction<string[], 1, undefined>]>;
4781
- readonly stdinFile: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4782
- readonly user: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
4783
- readonly workdir: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4784
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
4785
- }, undefined>, v.ObjectSchema<{
4786
- readonly kind: v.LiteralSchema<"copy-file", undefined>;
4787
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
4788
- readonly from: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
4789
- readonly to: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
4790
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
4791
- }, undefined>, v.ObjectSchema<{
4792
- readonly kind: v.LiteralSchema<"wait-http", undefined>;
4793
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
4794
- readonly url: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
4795
- readonly expectStatus: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 100, undefined>, v.MaxValueAction<number, 599, undefined>]>, undefined>;
4796
- readonly expectBodyContains: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4797
- readonly intervalMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 250, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
4798
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
4799
- }, undefined>, v.ObjectSchema<{
4800
- readonly kind: v.LiteralSchema<"wait-file", undefined>;
4801
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
4802
- readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
4803
- readonly service: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
4804
- readonly intervalMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 250, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
4805
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
4806
- }, undefined>, v.ObjectSchema<{
4807
- readonly kind: v.LiteralSchema<"host-command", undefined>;
4808
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
4809
- readonly command: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, v.MinLengthAction<string[], 1, undefined>]>;
4810
- readonly workdir: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4811
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
4812
- }, undefined>], undefined>, undefined>, undefined>;
4813
- readonly healthGate: v.OptionalSchema<v.VariantSchema<"kind", [v.ObjectSchema<{
4814
- readonly kind: v.LiteralSchema<"compose-healthy", undefined>;
4815
- }, undefined>, v.ObjectSchema<{
4816
- readonly kind: v.LiteralSchema<"http", undefined>;
4817
- readonly url: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
4818
- readonly expectStatus: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 100, undefined>, v.MaxValueAction<number, 599, undefined>]>, undefined>;
4819
- readonly expectBodyContains: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4820
- readonly intervalMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 250, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
4821
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
4822
- }, undefined>, v.ObjectSchema<{
4823
- readonly kind: v.LiteralSchema<"compose-exec", undefined>;
4824
- readonly service: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
4825
- readonly command: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, v.MinLengthAction<string[], 1, undefined>]>;
4826
- readonly intervalMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 250, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
4827
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
4828
- }, undefined>], undefined>, undefined>;
4829
- readonly teardownSteps: v.OptionalSchema<v.ArraySchema<v.VariantSchema<"kind", [v.ObjectSchema<{
4830
- readonly kind: v.LiteralSchema<"compose-exec", undefined>;
4831
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
4832
- readonly service: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
4833
- readonly command: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, v.MinLengthAction<string[], 1, undefined>]>;
4834
- readonly stdinFile: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4835
- readonly user: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
4836
- readonly workdir: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4837
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
4838
- }, undefined>, v.ObjectSchema<{
4839
- readonly kind: v.LiteralSchema<"copy-file", undefined>;
4840
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
4841
- readonly from: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
4842
- readonly to: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
4843
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
4844
- }, undefined>, v.ObjectSchema<{
4845
- readonly kind: v.LiteralSchema<"wait-http", undefined>;
4846
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
4847
- readonly url: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
4848
- readonly expectStatus: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 100, undefined>, v.MaxValueAction<number, 599, undefined>]>, undefined>;
4849
- readonly expectBodyContains: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4850
- readonly intervalMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 250, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
4851
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
4852
- }, undefined>, v.ObjectSchema<{
4853
- readonly kind: v.LiteralSchema<"wait-file", undefined>;
4854
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
4855
- readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
4856
- readonly service: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
4857
- readonly intervalMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 250, undefined>, v.MaxValueAction<number, 60000, undefined>]>, undefined>;
4858
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
4859
- }, undefined>, v.ObjectSchema<{
4860
- readonly kind: v.LiteralSchema<"host-command", undefined>;
4861
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
4862
- readonly command: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, v.MinLengthAction<string[], 1, undefined>]>;
4863
- readonly workdir: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4864
- readonly timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1000, undefined>, v.MaxValueAction<number, 3600000, undefined>]>, undefined>;
4865
- }, undefined>], undefined>, undefined>, undefined>;
4866
- }, undefined>, undefined>;
4867
- readonly manifestId: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>, undefined>;
4868
- readonly manifestPath: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4869
- readonly images: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
4870
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
4871
- readonly newNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4872
- readonly newTagTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4873
- readonly digestTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4874
- }, undefined>, v.CheckAction<{
4875
- name: string;
4876
- newNameTemplate?: string | undefined;
4877
- newTagTemplate?: string | undefined;
4878
- digestTemplate?: string | undefined;
4879
- }, "an image override must set at least one of newNameTemplate, newTagTemplate, or digestTemplate.">, v.CheckAction<{
4880
- name: string;
4881
- newNameTemplate?: string | undefined;
4882
- newTagTemplate?: string | undefined;
4883
- digestTemplate?: string | undefined;
4884
- }, "newTagTemplate and digestTemplate are mutually exclusive on an image override.">]>, undefined>, undefined>;
4885
- readonly helmReleases: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4886
- readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
4887
- readonly chart: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
4888
- readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
4889
- readonly version: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "version must be a pinned semver (e.g. 1.2.3), not a floating tag like latest or ^1.0.">]>;
4890
- readonly namespaceTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
4891
- readonly values: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
4892
- readonly set: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4893
- readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
4894
- readonly valueTemplate: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 2000, undefined>]>;
4895
- }, undefined>, undefined>, undefined>;
4896
- readonly valuesSecretRefs: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
4897
- readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
4898
- readonly secretRef: v.ObjectSchema<{
4899
- readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
4900
- }, undefined>;
4901
- }, undefined>, undefined>, undefined>;
4902
- readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
4903
- }, undefined>, undefined>, undefined>;
4904
- readonly secretInjections: v.OptionalSchema<v.ArraySchema<v.VariantSchema<"mode", [v.ObjectSchema<{
4905
- readonly mode: v.LiteralSchema<"secret", undefined>;
4906
- readonly secretName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
4907
- readonly secretType: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
4908
- readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
4909
- readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
4910
- readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
4911
- readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
4912
- }, undefined>, undefined>;
4913
- readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
4914
- }, undefined>, v.CheckAction<{
4915
- key: string;
4916
- secretRef?: {
4917
- key: string;
4918
- } | undefined;
4919
- valueTemplate?: string | undefined;
4920
- }, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
4921
- }, undefined>, v.ObjectSchema<{
4922
- readonly mode: v.LiteralSchema<"generatorEnvFile", undefined>;
4923
- readonly envFilePath: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
4924
- readonly entries: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
4925
- readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 256, undefined>]>;
4926
- readonly secretRef: v.OptionalSchema<v.ObjectSchema<{
4927
- readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
4928
- }, undefined>, undefined>;
4929
- readonly valueTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
4930
- }, undefined>, v.CheckAction<{
4931
- key: string;
4932
- secretRef?: {
4933
- key: string;
4934
- } | undefined;
4935
- valueTemplate?: string | undefined;
4936
- }, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
4937
- }, undefined>], undefined>, undefined>, undefined>;
4938
- }, undefined>, undefined>;
4939
- /**
4940
- * A `deployer` step fanning out over several service frames (the task's own frame + each
4941
- * involved-service frame; see the connections initiative) records each frame's TERMINAL
4942
- * outcome here, keyed by frame block id — so a durable replay knows which frames are already
4943
- * provisioned and only the remaining ones are dispatched. The in-flight frame is tracked by
4944
- * {@link deployFrameId} + {@link jobId} until it settles into this map. Absent for a
4945
- * single-frame deploy that never fanned out. See {@link deployEnvsSchema}.
4946
- */
4947
- readonly deployEnvs: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.ObjectSchema<{
4948
- readonly status: v.PicklistSchema<["ready", "failed", "skipped"], undefined>;
4949
- /** The provisioned URL for a `ready` env (absent for `failed`/`skipped`). */
4950
- readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4951
- /** The verbatim provider error for a `failed` env. */
4952
- readonly error: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4953
- }, undefined>, undefined>, undefined>;
4954
- /**
4955
- * The service FRAME the deployer step's currently in-flight deploy job ({@link jobId}) is
4956
- * provisioning, during a multi-env fan-out — so the poll/finalize maps the settled job onto the
4957
- * right frame's {@link deployEnvs} entry. Cleared once that frame settles; absent when no deploy
4958
- * job is in flight or the step never fanned out.
4959
- */
4960
- readonly deployFrameId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4961
- /**
4962
- * The task's OWN (primary) service frame, pinned on the FIRST target resolution of a `deployer`
4963
- * fan-out and reused on every re-entry/replay. Keeps the primary classification STABLE against a
4964
- * mid-flight reparent (which would otherwise re-derive a different own frame and flip an
4965
- * own-service provisioning failure from terminal to a non-terminal peer failure — completing the
4966
- * run `done` despite a failed deploy). Absent until the first resolution / for a step that never
4967
- * fanned out.
4968
- */
4969
- readonly deployPrimaryFrameId: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
4970
- }, undefined>, undefined>;
4971
- readonly currentStep: v.NumberSchema<undefined>;
4972
- readonly status: v.PicklistSchema<["running", "blocked", "done", "paused", "failed"], undefined>;
4973
- /**
4974
- * Structured failure diagnostics when `status` is `failed`; absent/null
4975
- * otherwise. Lets a failed task surface the same failure banner + retry as a
4976
- * failed bootstrap (shared {@link agentFailureSchema}).
4977
- */
4978
- readonly failure: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
4979
- readonly kind: v.PicklistSchema<["preflight", "dispatch", "environment", "evicted", "timeout", "agent", "job_failed", "rejected", "companion_rejected", "stalled", "cancelled", "unknown"], undefined>;
4980
- /** Human-readable summary (mirrors the run's `error` for back-compat). */
4981
- readonly message: v.StringSchema<undefined>;
4982
- /** Extended detail when available (the harness's reason, an HTTP body, …). */
4983
- readonly detail: v.NullableSchema<v.StringSchema<undefined>, undefined>;
4984
- /** Where to look next (e.g. "check the container logs for this job id"). */
4985
- readonly hint: v.NullableSchema<v.StringSchema<undefined>, undefined>;
4986
- /**
4987
- * Optional machine-readable cause code so the SPA can render precise, actionable guidance
4988
- * without string-matching the prose `message`/`detail` (the failure analogue of a
4989
- * {@link ConflictReason}). Kind-scoped: an `environment` failure carries an
4990
- * {@link EnvironmentFailureReason} (e.g. `deploy_runner_unwired`). Absent when the cause has
4991
- * no client-specific handling.
4992
- */
4993
- readonly reason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4994
- /** Epoch ms the failure was recorded. */
4995
- readonly occurredAt: v.NumberSchema<undefined>;
4996
- /** Last subtask counts seen before the failure, for context (null if none). */
4997
- readonly lastSubtasks: v.NullableSchema<v.ObjectSchema<{
4998
- readonly completed: v.NumberSchema<undefined>;
4999
- readonly inProgress: v.NumberSchema<undefined>;
5000
- readonly total: v.NumberSchema<undefined>;
5001
- readonly items: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
5002
- /** The task's human-readable subject, as the agent wrote it. */
5003
- readonly label: v.StringSchema<undefined>;
5004
- readonly status: v.PicklistSchema<["pending", "in_progress", "completed"], undefined>;
5005
- }, undefined>, undefined>, undefined>;
5006
- }, undefined>, undefined>;
5007
- /**
5008
- * Index of the pipeline step that was in flight when the run failed (the run's
5009
- * `currentStep` at fail time), so the per-attempt failure trail can be attributed to a
5010
- * specific step — the step-detail overlay filters its "execution history" to the failures
5011
- * recorded for that step. Absent on a bootstrap failure (no steps) and on legacy records.
5012
- */
5013
- readonly stepIndex: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
5014
- }, undefined>, undefined>, undefined>;
5015
- /**
5016
- * Failures from the run's PRIOR attempts, oldest→newest. Each retry/restart appends
5017
- * the then-current {@link failure} here and clears `failure` on the fresh attempt, so
5018
- * the top failure banner (keyed on `status === 'failed'`) disappears once the task is
5019
- * restarted while the full error trail stays viewable in the "previous errors" history.
5020
- * Absent/empty for a run that has never been failed-then-retried.
5021
- */
5022
- readonly failureHistory: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
5023
- readonly kind: v.PicklistSchema<["preflight", "dispatch", "environment", "evicted", "timeout", "agent", "job_failed", "rejected", "companion_rejected", "stalled", "cancelled", "unknown"], undefined>;
5024
- /** Human-readable summary (mirrors the run's `error` for back-compat). */
5025
- readonly message: v.StringSchema<undefined>;
5026
- /** Extended detail when available (the harness's reason, an HTTP body, …). */
5027
- readonly detail: v.NullableSchema<v.StringSchema<undefined>, undefined>;
5028
- /** Where to look next (e.g. "check the container logs for this job id"). */
5029
- readonly hint: v.NullableSchema<v.StringSchema<undefined>, undefined>;
5030
- /**
5031
- * Optional machine-readable cause code so the SPA can render precise, actionable guidance
5032
- * without string-matching the prose `message`/`detail` (the failure analogue of a
5033
- * {@link ConflictReason}). Kind-scoped: an `environment` failure carries an
5034
- * {@link EnvironmentFailureReason} (e.g. `deploy_runner_unwired`). Absent when the cause has
5035
- * no client-specific handling.
5036
- */
5037
- readonly reason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
5038
- /** Epoch ms the failure was recorded. */
5039
- readonly occurredAt: v.NumberSchema<undefined>;
5040
- /** Last subtask counts seen before the failure, for context (null if none). */
5041
- readonly lastSubtasks: v.NullableSchema<v.ObjectSchema<{
5042
- readonly completed: v.NumberSchema<undefined>;
5043
- readonly inProgress: v.NumberSchema<undefined>;
5044
- readonly total: v.NumberSchema<undefined>;
5045
- readonly items: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
5046
- /** The task's human-readable subject, as the agent wrote it. */
5047
- readonly label: v.StringSchema<undefined>;
5048
- readonly status: v.PicklistSchema<["pending", "in_progress", "completed"], undefined>;
5049
- }, undefined>, undefined>, undefined>;
5050
- }, undefined>, undefined>;
5051
- /**
5052
- * Index of the pipeline step that was in flight when the run failed (the run's
5053
- * `currentStep` at fail time), so the per-attempt failure trail can be attributed to a
5054
- * specific step — the step-detail overlay filters its "execution history" to the failures
5055
- * recorded for that step. Absent on a bootstrap failure (no steps) and on legacy records.
5056
- */
5057
- readonly stepIndex: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
5058
- }, undefined>, undefined>, undefined>;
5059
- /**
5060
- * Successful outputs from the run's PRIOR attempts that a restart discarded, oldest→newest —
5061
- * the positive complement of {@link failureHistory}. A restart-from-step resets the chosen
5062
- * step and every later one, dropping their `output`; those that had already SUCCEEDED are
5063
- * recorded here (attributed by `stepIndex`) so the step-detail overlay's execution history
5064
- * surfaces the successful outputs a restart superseded, not only the errors. Bounded in count
5065
- * and per-entry size so the run's `detail` JSON doesn't bloat. Absent/empty for a run never
5066
- * restarted past a completed step (a plain retry re-runs only unfinished steps, so it records
5067
- * nothing).
5068
- */
5069
- readonly outputHistory: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
5070
- /** Index of the pipeline step that produced this output (see {@link agentFailureSchema} `stepIndex`). */
5071
- readonly stepIndex: v.NumberSchema<undefined>;
5072
- /** Epoch ms the superseded attempt finished (its `finishedAt`, else when it was recorded). */
5073
- readonly occurredAt: v.NumberSchema<undefined>;
5074
- /** The attempt's prose/JSON output, clipped to a stored-size bound when {@link truncated}. */
5075
- readonly output: v.StringSchema<undefined>;
5076
- /** Whether {@link output} was clipped because the original exceeded the per-entry size bound. */
5077
- readonly truncated: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
5078
- }, undefined>, undefined>, undefined>;
5079
- /**
5080
- * Non-fatal advisories computed once at run start — today the frontend UI-test flow's
5081
- * resolved-binding notes ({@link buildFrontendRunNotes}: duplicate env vars, or a partial-live
5082
- * set of bound services where some fall back to WireMock). Mirrors the harness's own
5083
- * `buildInfraNotes` but surfaced on the RUN so the SPA renders it in the run/step detail
5084
- * (distinct from a `failure`, which aborts the run). Absent/empty when there is nothing to
5085
- * flag. Rides in the `detail` JSON column (no dedicated column), reflecting the start-time
5086
- * state even after the underlying envs change.
5087
- */
5088
- readonly notes: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
5089
- /**
5090
- * The frontend UI-test flow's backend bindings RESOLVED once at run start (env var → the bound
5091
- * service's live ephemeral URL, or absent ⇒ mocked; see {@link resolveFrontendBindings}). Stamped
5092
- * on the run so the SPA's run/step detail projects what the run ACTUALLY drove against — a frozen
5093
- * snapshot that stays truthful after the underlying envs are torn down, rather than re-resolving
5094
- * against current live state (which for a finished run could disagree with the co-located
5095
- * start-time {@link notes}). Rides in the `detail` JSON column; absent for a non-frontend run.
5096
- */
5097
- readonly frontendBindings: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
5098
- readonly envVar: v.StringSchema<undefined>;
5099
- readonly serviceUrl: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
5100
- }, undefined>, undefined>, undefined>;
5101
- /**
5102
- * Internal user id (`usr_*`) of whoever started this run (or retried it). Recorded
5103
- * so the individual-usage restricted mode can use the initiator's OWN personal
5104
- * subscription (e.g. Claude) for the run's steps — a personal credential is never
5105
- * shared, so only its owner's runs may use it. Absent for runs started without a
5106
- * signed-in user (auth-disabled/local dev) and for legacy runs.
5107
- */
5108
- readonly initiatedBy: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
5109
- /**
5110
- * Epoch-ms creation time, stamped when the run is first started. Gives a run a stable
5111
- * creation timestamp independent of when its first step actually starts (the public-API
5112
- * job view reports it as `createdAt`). Absent on legacy runs persisted before this field.
5113
- */
5114
- readonly createdAt: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
5115
- /**
5116
- * Optimistic-concurrency token: a monotonic revision of the persisted run row,
5117
- * bumped on every write. Read back by the repository and used by
5118
- * `compareAndSwap` so a human-action write (resolve decision / approve /
5119
- * request changes) that raced another writer is detected and retried on fresh
5120
- * state instead of silently clobbering it. Defaults to 0 for a run that has
5121
- * never been persisted. The SPA's execution store also keys its monotonic
5122
- * reconcile on it, so a lagging snapshot refresh can't regress a run a live
5123
- * event already advanced.
5124
- */
5125
- readonly rev: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
5126
- /**
5127
- * After-the-fact investigation context — where/what the run's most recent container step
5128
- * executed on (backend, model, repo) plus the control-plane host. Rides in the `detail` JSON
5129
- * (see {@link runDiagnosticsSchema}); absent on legacy runs and pure inline pipelines.
5130
- */
5131
- readonly diagnostics: v.OptionalSchema<v.ObjectSchema<{
5132
- /** Context of the most recent container-step dispatch. */
5133
- readonly lastDispatch: v.OptionalSchema<v.ObjectSchema<{
5134
- /** Index of the dispatched step within the pipeline. */
5135
- readonly stepIndex: v.NumberSchema<undefined>;
5136
- /** The step's agent kind (`coder`, `merger`, a custom kind, …). */
5137
- readonly agentKind: v.StringSchema<undefined>;
5138
- /** Resolved model ref `provider:model` (e.g. `anthropic:claude-opus-4-8`); null if unresolved. */
5139
- readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
5140
- /**
5141
- * Which runner backend the step actually ran on — the datum that distinguishes a native
5142
- * host-process run from a sandboxed container: `local-native` | `local-container` |
5143
- * `runner-pool` | `cloudflare-container`. Filled on the first poll (the transport reports
5144
- * it); absent until then or on an older runtime.
5145
- */
5146
- readonly executionBackend: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
5147
- /** The repo the step operated on. */
5148
- readonly repo: v.OptionalSchema<v.ObjectSchema<{
5149
- readonly owner: v.StringSchema<undefined>;
5150
- readonly name: v.StringSchema<undefined>;
5151
- /** The base branch the work branched from. */
5152
- readonly baseBranch: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
5153
- /** VCS provider (`github` | `gitlab`), resolved from the run's repo origin. */
5154
- readonly provider: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
5155
- }, undefined>, undefined>;
5156
- /** Epoch ms the dispatch was recorded. */
5157
- readonly at: v.NumberSchema<undefined>;
5158
- }, undefined>, undefined>;
5159
- /**
5160
- * The control-plane (orchestrator) host running the engine — NOT necessarily where the agent
5161
- * ran (a container step runs elsewhere; see `lastDispatch.executionBackend`). `platform` is the
5162
- * orchestrator's `process.platform` (e.g. `win32` pins a Windows local deployment — the class
5163
- * of host that surfaced the native-Windows git-auth break). Best-effort.
5164
- */
5165
- readonly host: v.OptionalSchema<v.ObjectSchema<{
5166
- readonly platform: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
5167
- }, undefined>, undefined>;
5168
- }, undefined>, undefined>;
5169
- }, undefined>;
5170
- export type ExecutionInstance = v.InferOutput<typeof executionInstanceSchema>;
5171
1260
  export declare const workspaceSchema: v.ObjectSchema<{
5172
1261
  readonly id: v.StringSchema<undefined>;
5173
1262
  readonly name: v.StringSchema<undefined>;