@ai-dossier/sched 0.50.0 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -31,7 +31,8 @@ ai-dossier sched start --once # a single reconcile+refill tick (cron-style)
31
31
  ai-dossier sched status # queue (+pr/cleanup), engine lease, slots, batches, blocked/failed; --anchors adds the ledger anchor sweep (#768) plus orphaned anchors no longer in state.batches (#790)
32
32
  ai-dossier sched pause # prevent every new agent process; live units keep running
33
33
  ai-dossier sched resume
34
- ai-dossier sched stop --issue 42 # terminate one full-cycle agent and record it stopped (no recovery)
34
+ ai-dossier sched resume --batch b1 # recheck a gate-inconclusive block (#583), or re-run gate + tail over a batch blocked over landed work (#822)
35
+ ai-dossier sched stop --issue 42 # terminate one full-cycle agent (or stop a parked batch member, #832) and record it stopped (no recovery)
35
36
  ai-dossier sched stop --batch b1 # terminate every batch agent (incl. parallel members) and stop unfinished members
36
37
  ai-dossier sched abandon --issue 42 --reason "operator abort"
37
38
  ai-dossier sched abandon --batch b1 # dissolve; every unshipped member — parked and validated ones included — requeues as full-cycle
@@ -53,8 +54,10 @@ directory directly, reconstructing costs from the raw dispatch logs rather than
53
54
  `pause` prevents every new agent process, including escalation and same-tier recovery
54
55
  takeovers; it does not terminate agents that are already running. `stop --issue <n>` is the
55
56
  single-command stop path: it PID-start-safely terminates that issue's live agent, releases its
56
- slot, and records a terminal `stopped` outcome that will not recover or escalate. An active
57
- slot-mode member must instead be stopped through `stop --batch <id>`, which terminates every agent
57
+ slot, and records a terminal `stopped` outcome that will not recover or escalate. A slot-mode
58
+ member still in a live batch (pending, in work, or validated) must instead be stopped through
59
+ `stop --batch <id>` — a parked (`handed-back`/`evicted`) member can be stopped on its own (#832) —
60
+ which terminates every agent
58
61
  the batch holds (its own slot plus one per running parallel member, `batch:<id>#<issue>`) and atomically stops the batch and its unfinished members. `abandon` only records failure
59
62
  and releases the slot; it intentionally does not terminate its process.
60
63
 
@@ -247,7 +250,9 @@ where every mechanical supervision decision is code, not remembered prose:
247
250
  `reconcileRecovering`, held in `recovering` until `sched resume`) and every batch
248
251
  respawn wedge in `runBatchTick` (tail, member continuation, fix, report, and the
249
252
  `ready` → `claimAndSetup` claim — `runValidate`'s local suite run is unaffected) stop
250
- respawning into the wall, which previously ignored `paused` entirely. `dispatch-
253
+ respawning into the wall, which previously ignored `paused` entirely. (Unverified
254
+ tail/report exits that are NOT API errors are capped separately since #832 —
255
+ `respawn-cap:tail`, or a merged batch closed without its report.) `dispatch-
251
256
  health.ts` is its own module (not `engine.ts`) specifically so it is shared by BOTH
252
257
  dispatch paths without `engine.ts` and `batch-dispatch.ts` importing each other.
253
258
  Batch dispatch logs (per-role, append-mode) are fenced to `log_offset_at_spawn`,
@@ -767,6 +772,9 @@ failure rails: executing → dissolving (a member self-reports blocked)
767
772
  validating → blocked (suite report unreadable, #562) → validating
768
773
  executing → blocked (gate-inconclusive:<cap>, #583) → executing
769
774
  (`sched resume --batch <id>` re-runs the gate; nothing requeued/reverted)
775
+ (dissolve refused | tail) → blocked (dissolve-refused:* / tail-blocked:* /
776
+ members-mismatch:* / respawn-cap:tail) → validating
777
+ (`sched resume --batch <id>` re-runs gate + tail over the landed members, #822)
770
778
  ```
771
779
 
772
780
  - **One shared worktree/branch per batch**, claimed once by a deterministic (no LLM)
@@ -1000,17 +1008,101 @@ Dissolve never throws validated work away:
1000
1008
  `gh pr create --head <integration branch> --base <base>` — once it merges,
1001
1009
  `reconcileStaleBlockedBatches` settles the validated members to shipped; for a red suite
1002
1010
  or a partial revert, inspect/fix the branch first; `sched abandon --batch` requeues them
1003
- full-cycle instead. (A `sched resume --batch` arm for these blocks is a follow-up.) Without validated members it dissolves
1011
+ full-cycle instead. Since #822, `sched resume --batch <id>` re-runs the gate and the tail
1012
+ over the validated members instead (see [below](#resuming-a-batch-blocked-over-landed-work-822)). Without validated members it dissolves
1004
1013
  as before, except that in-flight members with a member branch are parked `evicted` and
1005
1014
  every requeue carries the batch's dispatch profile (`carryDispatchProfile: false` only
1006
1015
  for `dispatch-profile-missing:*`, where the profile itself is what broke).
1007
1016
  - Not changed: the `halved` PR-conflict split still re-batches its members, and
1008
1017
  aggregate-suite evictions (`evictMembers`, post-landing, member branch already deleted)
1009
- still requeue full-cycle — now on the batch profile.
1018
+ still requeue full-cycle — now on the batch profile. Both, plus an engine-set requeue base,
1019
+ are tracked in #840.
1010
1020
 
1011
1021
  State schema 1.24.0: `IssueStatus` gains `handed-back`; `EvictionRecord` gains optional
1012
1022
  `kind`/`branch`, `FailureEvidence` optional `branch`.
1013
1023
 
1024
+ ### The tail runs over landed members; a tail verdict is final (#832)
1025
+
1026
+ - **Landed members only.** The tail (aggregate review + integrate/ship) is dispatched with
1027
+ `{members}` = the batch's validated members (`validatedMembersOf`), never the raw
1028
+ `batch.members`, which still lists members that were stopped, handed back, evicted,
1029
+ parked or requeued. Before claiming a slot the engine makes the tail's own two-way check
1030
+ for free (`tailMembersRefusal`): no landed members blocks `no-landed-members`; when
1031
+ `batch.ranges` records boundary commits, a landed member with none blocks
1032
+ `members-mismatch:no-boundary-commit-<n>`, and a boundary commit for a member that did
1033
+ not land blocks `members-mismatch:unlanded-boundary-commit-<n>`. No tail agent is spent.
1034
+ - **`sched stop --issue` on a parked member.** A `handed-back`/`evicted` member of a live
1035
+ batch can be stopped on its own (the operator's cleanup after a hand-back). It moves to
1036
+ `stopped` and keeps its exit record, so it stays out of the landed set. A member still in
1037
+ the batch (pending, in work, or validated) is still refused: use `sched stop --batch`.
1038
+ - **A blocked tail blocks the batch.** A `batch-review` or `batch-ship` `status=blocked`
1039
+ milestone posted by THIS tail dispatch (fenced by the slot's `spawned_at`, which tail and
1040
+ report spawns now stamp; a slot from an older engine with no `spawned_at` skips this
1041
+ check and falls to the capped path below) releases the slot and blocks the batch
1042
+ `tail-blocked:<reason>` once, in one lock. It is never read as an unverified exit to
1043
+ respawn. The agent's milestone is already on the anchor, so the engine posts none. The
1044
+ reason is reduced to a slug.
1045
+ - **Per-phase respawn cap.** `BatchEntry.agent_exits` (`{ phase: 'tail'|'report', count }`,
1046
+ schema 1.26.0) counts unverified exits of the phase's agent; each is journaled with its
1047
+ position (`unverified exit 2/3 (log: …)`). #629 API-error exits are not counted: they
1048
+ have their own pause. After `MAX_BATCH_AGENT_RESPAWNS` (2) respawns, the next unverified
1049
+ exit ends the phase:
1050
+ - **tail** → the batch blocks `respawn-cap:tail`;
1051
+ - **report** → the batch (whose PR is already merged and deployed) closes
1052
+ `deployed → reported → done` without its report, journaling `report-failed
1053
+ respawn-cap:report — batch closed without its report`. A block would not hold there:
1054
+ `reconcileStaleBlockedBatches` walks a blocked batch with a merged PR straight back to
1055
+ `deployed`, and the report agent would respawn.
1056
+
1057
+ Verified progress (review done, park, report done) clears the count, and so does blocking
1058
+ the batch. A spawn that finds the count already spent (a crash between the count and the
1059
+ block) refuses instead of spawning. Before #832, b-20260924-04's tail was respawned four
1060
+ times at the strong tier (~375k tokens) until an operator stopped the batch.
1061
+ - **Clearing these blocks.** `sched status` names the evidence (the anchor's blocked
1062
+ milestone, or the tail log) and the exits. For `members-mismatch:*`, `tail-blocked:*` and
1063
+ `respawn-cap:tail`: fix the cause, then `sched resume --batch <id>` (#822, below), or open
1064
+ the integration branch's PR by hand (`gh pr create --head <branch> --base <base>`; once it
1065
+ merges, `reconcileStaleBlockedBatches` settles the batch), or `sched abandon --batch <id>`
1066
+ (requeues the landed members full-cycle). `no-landed-members` has nothing to resume:
1067
+ abandon it.
1068
+
1069
+ ### Resuming a batch blocked over landed work (#822)
1070
+
1071
+ `sched resume --batch <id>` on a batch blocked `dissolve-refused:*` (#810) or on one of #832's
1072
+ tail blocks (`tail-blocked:*`, `members-mismatch:*`, `respawn-cap:tail`) —
1073
+ `LANDED_RESUMABLE_BLOCK_PREFIXES` — calls `resumeLandedBatch`: `blocked → validating`, with
1074
+ `blocked_reason`/`agent_exits` cleared and `executing_member` pinned to the last member (so
1075
+ `runValidate` never re-admits a member the dissolve released). The engine's next tick
1076
+ re-runs the batch gate and then the tail over the landed members only; a gate still red
1077
+ re-blocks it once. It journals `batch-resumed` (naming any tail exits it cleared). Refused,
1078
+ with the reason, when no member is landed, the batch still holds a slot, it has no
1079
+ integration worktree/branch/anchor, a PR is already recorded against it (let the stale-blocked
1080
+ reconcile settle it), or the tail's own members check would refuse the same landed set again
1081
+ (`tailMembersRefusal`). The CLI also refuses when the integration worktree is gone from disk
1082
+ or a profiled batch's dispatch profile no longer resolves (restore it first).
1083
+ `gate-inconclusive:*` keeps its own recheck (`resumeBlockedGate`).
1084
+
1085
+ ### Wrong-procedure members are re-prompted once (#822)
1086
+
1087
+ A member whose dispatch posts a full-cycle-line milestone (`gate` … `report`) carrying neither
1088
+ `batch=` nor `mode=slot` ran the WRONG PROCEDURE (imboard #4174 ran full-cycle as a
1089
+ member: `review done next=ship`) — `isWrongProcedureMilestone`, fenced to this dispatch. A
1090
+ hand-back shape (`blocked`, `review partial`) never counts: it keeps its own path. Both
1091
+ member rails then:
1092
+
1093
+ - stop a live agent and wait for it to be gone before anything else (a dying full-cycle run
1094
+ could still push, post or open a PR in that worktree);
1095
+ - if the milestone shows the run already SHIPPED (a `ship`/`report` phase or a `pr=` key —
1096
+ `wrongProcedureShippedPr`), evict it at once `wrong-procedure-shipped`, naming the stray PR
1097
+ (`stray_pr`) for the operator to close or reconcile — a re-prompt cannot undo a PR;
1098
+ - otherwise, the first time, record it in `BatchEntry.reprompted_members`
1099
+ (`{ issue, milestone_at, reprompted_at }`, schema 1.27.0) and journal `member-reprompted`:
1100
+ it respawns in place, in the same worktree, with `wrongProcedureDirective` appended to its
1101
+ prompt (engine values only — no milestone text);
1102
+ - a later wrong-procedure milestone posted strictly after `reprompted_at` (no skew tolerance:
1103
+ the killed first dispatch's milestones would otherwise still count inside the 60s fence)
1104
+ evicts it `wrong-procedure` (parked `evicted`, branch kept, #810).
1105
+
1014
1106
  ## API surface
1015
1107
 
1016
1108
  ```ts
@@ -1176,6 +1268,11 @@ import {
1176
1268
  type CapOutcome, // ok | task-failed | automation-broken | capability-unavailable
1177
1269
  type CapabilityGateResult, // {outcome: CapOutcome, outputTail?, reason?} — runCapability's return shape (#583)
1178
1270
  resumeBlockedGate, // #583: sched resume --batch <id> — re-run the gate that blocked a batch
1271
+ resumeLandedBatch, // #822: sched resume --batch <id> over landed work — blocked → validating
1272
+ isLandedResumableBlock, LANDED_RESUMABLE_BLOCK_PREFIXES, // #822: which blocks resumeLandedBatch accepts
1273
+ isWrongProcedureMilestone, wrongProcedureShippedPr, // #822: wrong-procedure detection; did the stray run already ship?
1274
+ wrongProcedureDirective, WRONG_PROCEDURE_MARKER, // #822: the re-prompt text and its fixed opening
1275
+ type RepromptRecord, // #822: BatchEntry.reprompted_members ({ issue, milestone_at, reprompted_at })
1179
1276
  buildMemberPrompt, buildBatchTailPrompt, buildBatchReportPrompt, // #523 prompt builders (#677: member carries {issue}/{batch}/{worktree}/{integration_branch})
1180
1277
  memberBranchFor, // #677: the member branch name, `batch/<id>-m<n>-<issue>` — one definition, every recovery surface derives from it
1181
1278
  DEFAULT_MEMBER_PROMPT_TEMPLATE, DEFAULT_BATCH_TAIL_PROMPT_TEMPLATE,
@@ -1183,6 +1280,9 @@ import {
1183
1280
  isMemberComplete, isMemberBlocked, // member milestone predicates (member-trail gated: mode=slot or batch=<id>, #677)
1184
1281
  isBatchTailParked, // batch-ship awaiting-merge + pr= — the batch park signal
1185
1282
  isBatchPhaseDone, // <phase> done on the anchor (batch-review/batch-report)
1283
+ batchPhaseBlockedReason, // #832: slugged reason of a `<phase> blocked` anchor milestone posted by THIS dispatch; null otherwise
1284
+ MAX_BATCH_AGENT_RESPAWNS, // #832: tail/report respawns after unverified exits before the phase ends (2)
1285
+ type BatchAgentExits, type BatchAgentPhase, // #832: BatchEntry.agent_exits ({ phase: 'tail'|'report', count })
1186
1286
  batchOfUnit, // batch:<id> → <id>; null for issue units or malformed ids
1187
1287
  } from '@ai-dossier/sched';
1188
1288
  ```
@@ -1314,7 +1414,7 @@ after-the-fact recovery, not a missing-data bug.
1314
1414
  queue data.
1315
1415
  - **Schema**: state/config files from #460 (schema 1.0.0), #464 (1.1.0), #468 (1.2.0),
1316
1416
  #472 (1.3.0), #500 (1.4.0), #505 (1.5.0), #504 (1.6.0), #523 (1.7.0) and #524 (1.8.0)
1317
- load and migrate to the current schema (1.25.0 — 1.24.0 was #810: no backfill,
1417
+ load and migrate to the current schema (1.27.0 — 1.24.0 was #810: no backfill,
1318
1418
  `kind`/`branch` optional, absent = an `evicted` record with no branch) automatically
1319
1419
  (slot `branch`/`last_head`/`pid_start`, slot `role` (inferred from the
1320
1420
  unit's queue entry, with the persisted `phase` as a fallback — #500), entry
@@ -1333,6 +1433,10 @@ after-the-fact recovery, not a missing-data bug.
1333
1433
  `IssueStatus` gains `handed-back`, `EvictionRecord`/`FailureEvidence` gain optional
1334
1434
  `kind`/`branch` — #810, schema 1.24.0; batch `pr_detect_ambiguous_reason`/`_since`/`_ticks`
1335
1435
  backfill to `null`/`null`/`0` — #789, schema 1.25.0).
1436
+ Schema 1.26.0 (#832): `BatchEntry` gains `agent_exits` (the per-phase tail/report
1437
+ respawn counter); `null` is backfilled on load.
1438
+ Schema 1.27.0 (#822): `BatchEntry` gains `reprompted_members`
1439
+ (`{ issue, milestone_at, reprompted_at }` records; `[]` backfilled).
1336
1440
  - **`max_slots`** bounds live units (`assigned | running | recovering`); dependency
1337
1441
  edges gate readiness — an issue with an unmerged dependency, and a batch behind an
1338
1442
  unmerged batch, are never runnable.
@@ -68,8 +68,10 @@ import { type Journal } from './journal';
68
68
  import type { SchedStore } from './persist';
69
69
  import type { ExecFn } from './project';
70
70
  import { type BatchSuiteContext, type SuiteResult } from './recovery';
71
+ import { tailMembersRefusal } from './state';
71
72
  import { type FsExists } from './teardown';
72
73
  import type { BatchEntry, CapabilityGateResult, MemberDispatchMode, MemberExitKind, SchedConfig, SchedState } from './types';
74
+ export { tailMembersRefusal };
73
75
  export type { CapOutcome } from './types';
74
76
  /** Everything batch dispatch needs from the outside world. */
75
77
  export interface BatchDispatchDeps {
@@ -238,6 +240,16 @@ export declare function resumeBlockedGate(deps: BatchDispatchDeps, config: Sched
238
240
  blockedBy?: 'inconclusive' | 'unevidenced-failure';
239
241
  detail?: string;
240
242
  };
243
+ /**
244
+ * #832: how many times one tail-work phase's agent (`tail` or `report`) is
245
+ * RESPAWNED after exiting unverified — the first dispatch plus this many
246
+ * respawns; the next unverified exit ends the phase instead. The #629 class:
247
+ * the tick loop's "same wedge" arm respawns a dead tail/report agent on its
248
+ * own, so without a cap an agent that exits without a verdict is
249
+ * redispatched forever (b-20260924-04: the strong-tier tail four times,
250
+ * ~375k tokens, stopped only by hand).
251
+ */
252
+ export declare const MAX_BATCH_AGENT_RESPAWNS = 2;
241
253
  /**
242
254
  * #686: reconcile a `blocked` batch whose work demonstrably shipped anyway.
243
255
  * `reconcilePrWatch` above only watches `awaiting-merge` batches, and
@@ -1 +1 @@
1
- {"version":3,"file":"batch-dispatch.d.ts","sourceRoot":"","sources":["../src/batch-dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"batch-dispatch.d.ts","sourceRoot":"","sources":["../src/batch-dispatch.ts"],"names":[],"mappings":"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"}