@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 +111 -7
- package/dist/batch-dispatch.d.ts +12 -0
- package/dist/batch-dispatch.d.ts.map +1 -1
- package/dist/batch-dispatch.js +339 -22
- package/dist/batch-dispatch.js.map +1 -1
- package/dist/dispatch.d.ts +9 -0
- package/dist/dispatch.d.ts.map +1 -1
- package/dist/dispatch.js +19 -1
- package/dist/dispatch.js.map +1 -1
- package/dist/groundtruth.d.ts +29 -1
- package/dist/groundtruth.d.ts.map +1 -1
- package/dist/groundtruth.js +64 -0
- package/dist/groundtruth.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -6
- package/dist/index.js.map +1 -1
- package/dist/recovery.d.ts +5 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +11 -6
- package/dist/recovery.js.map +1 -1
- package/dist/scheduler.d.ts +34 -0
- package/dist/scheduler.d.ts.map +1 -1
- package/dist/scheduler.js +91 -3
- package/dist/scheduler.js.map +1 -1
- package/dist/state.d.ts +17 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +70 -5
- package/dist/state.js.map +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +39 -3
- package/dist/status.js.map +1 -1
- package/dist/types.d.ts +54 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
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
|
|
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.
|
|
57
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
package/dist/batch-dispatch.d.ts
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAUH,OAAO,EAIL,KAAK,YAAY,EAGjB,KAAK,gBAAgB,EAGtB,MAAM,gBAAgB,CAAC;AAUxB,OAAO,EAaL,KAAK,gBAAgB,EAGrB,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"batch-dispatch.d.ts","sourceRoot":"","sources":["../src/batch-dispatch.ts"],"names":[],"mappings":"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"}
|