@ai-dossier/sched 0.55.1 → 0.57.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 +75 -10
- package/dist/batch-dispatch.d.ts +11 -3
- package/dist/batch-dispatch.d.ts.map +1 -1
- package/dist/batch-dispatch.js +258 -67
- package/dist/batch-dispatch.js.map +1 -1
- package/dist/dispatch.d.ts +36 -3
- package/dist/dispatch.d.ts.map +1 -1
- package/dist/dispatch.js +97 -9
- package/dist/dispatch.js.map +1 -1
- package/dist/engine.d.ts +9 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +90 -2
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -5
- package/dist/index.js.map +1 -1
- package/dist/recovery.d.ts +66 -5
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +317 -67
- package/dist/recovery.js.map +1 -1
- package/dist/resume-seed.d.ts +36 -0
- package/dist/resume-seed.d.ts.map +1 -0
- package/dist/resume-seed.js +83 -0
- package/dist/resume-seed.js.map +1 -0
- package/dist/state.d.ts +2 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +20 -3
- package/dist/state.js.map +1 -1
- package/dist/types.d.ts +40 -13
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +14 -10
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -985,14 +985,15 @@ A batch member that leaves its batch before landing is **parked**, never auto-re
|
|
|
985
985
|
batch failure: its `evictions[]` record carries `kind: 'handed-back'` and it **never
|
|
986
986
|
counts toward the dissolve threshold**. Journals `member-handed-back`.
|
|
987
987
|
- **`evicted`** — an engine-decided failure (unverified exit, incremental-gate
|
|
988
|
-
`task-failed`, landing conflict, worktree prep
|
|
989
|
-
`unit-failed
|
|
988
|
+
`task-failed`, landing conflict, worktree prep, and — since #840 — an aggregate-suite
|
|
989
|
+
eviction after landing). Counts toward the threshold. Journals `unit-failed` (or
|
|
990
|
+
`member-evicted ... — parked on <branch>` for the post-landing case).
|
|
990
991
|
|
|
991
992
|
Both keep `mode: slot` + `batch`, record the member branch (`evictions[].branch`,
|
|
992
993
|
`failure_evidence.branch` — the pushed remote copy survives the member teardown) and stamp
|
|
993
994
|
the batch's `dispatch_profile` onto the entry. Neither is runnable until an operator runs
|
|
994
|
-
`sched requeue --issue <n>` (full-cycle on that profile
|
|
995
|
-
|
|
995
|
+
`sched requeue --issue <n>` (full-cycle on that profile, based on the member branch — see
|
|
996
|
+
below) or `sched abandon --issue <n>`.
|
|
996
997
|
`sched status` lists them under `== Parked members ==` with reason, branch, profile and
|
|
997
998
|
those exact commands (`parked_members` in `--json`).
|
|
998
999
|
|
|
@@ -1019,10 +1020,46 @@ Dissolve never throws validated work away:
|
|
|
1019
1020
|
as before, except that in-flight members with a member branch are parked `evicted` and
|
|
1020
1021
|
every requeue carries the batch's dispatch profile (`carryDispatchProfile: false` only
|
|
1021
1022
|
for `dispatch-profile-missing:*`, where the profile itself is what broke).
|
|
1022
|
-
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
are
|
|
1023
|
+
- #840: a PR-conflict give-up (`handlePrConflict`: a recurred conflict, a conflicting or
|
|
1024
|
+
failed rebase, a red suite after a clean rebase) never re-batches a validated member.
|
|
1025
|
+
Validated members stay landed in the batch; only the unshipped, UNVALIDATED members with
|
|
1026
|
+
no commits on the integration branch are split into half-batches (`batch-split`) and
|
|
1027
|
+
trimmed out of it. A clean rebase with a red
|
|
1028
|
+
suite re-runs the gate over the landed members (`re-validating → validating`,
|
|
1029
|
+
`batch-regate`, `executing_member` pinned to the end — the shape of `sched resume
|
|
1030
|
+
--batch`); anything else blocks `dissolve-refused:<reason>` (milestone `batch-ship`,
|
|
1031
|
+
`validated=`; the recorded PR can be resolved by hand, or closed before `sched resume
|
|
1032
|
+
--batch`). With no validated member it still dissolves into halves. **Library behaviour
|
|
1033
|
+
only:** the engine does not yet route a CONFLICTING batch PR into `handlePrConflict`
|
|
1034
|
+
(#867).
|
|
1035
|
+
|
|
1036
|
+
#### Member branches live until the batch ends; a requeue resumes on them (#840)
|
|
1037
|
+
|
|
1038
|
+
- A member's remote branch (`batch/<id>-m<n>-<issue>`) is **kept after it lands** — only
|
|
1039
|
+
its tree and local branch go. `teardownBatch` (batch `done`, or dissolved) deletes the
|
|
1040
|
+
batch's member branches from origin (`pruneMemberBranches`, one delete per ref,
|
|
1041
|
+
`member-branches-deleted`), except any a NON-terminal queue entry's
|
|
1042
|
+
`failure_evidence.branch` still names (a parked or branch-requeued member's work);
|
|
1043
|
+
`sched abandon --batch` prunes the same way (verified project repo only). A kept batch
|
|
1044
|
+
(`worktree_kept`) keeps them.
|
|
1045
|
+
- An aggregate-suite eviction (`evictMembers`, after `beginAttribution`) therefore PARKS the
|
|
1046
|
+
reverted member `evicted` with `branch=` recorded (`EvictionOutcome.parked`, milestone
|
|
1047
|
+
`parked=`), like a pre-landing eviction, instead of requeueing it from the base. A member
|
|
1048
|
+
whose branch is no longer on origin (a pre-#840 landing) still requeues full-cycle; when
|
|
1049
|
+
origin cannot be listed only a recorded branch is parked on (journaled `git-failed`).
|
|
1050
|
+
- `sched requeue` of a parked member is based on its branch **by the engine**: at the
|
|
1051
|
+
entry's first dispatch, `EngineDeps.resumeSeeder` (`createExecResumeSeeder`: `runstate
|
|
1052
|
+
mint` + `runstate post`) seeds the issue's trail with a `setup done` milestone
|
|
1053
|
+
(`branch=<member branch> base_branch=<batch base> pool_claimed=false remote=pushed
|
|
1054
|
+
seeded_by=sched from_batch=<id>`). The agent's gate (`runstate verify`) then resumes at
|
|
1055
|
+
`plan` on that branch, and full-cycle's Resuming path builds the worktree from it — the
|
|
1056
|
+
documented resume contract, no dossier change. The run id is stamped on
|
|
1057
|
+
`failure_evidence.resume_run` so a respawn never re-seeds; `resume-seeded` /
|
|
1058
|
+
`resume-seed-failed` journal it (a failure falls back to the `PRIOR WORK` prompt
|
|
1059
|
+
instruction, which now names the seeded run when there is one, and — for a post-landing
|
|
1060
|
+
eviction — the commits reverted on the integration branch, which a rebase onto a base
|
|
1061
|
+
carrying those reverts would silently drop; engine-side re-application is #866). A branch
|
|
1062
|
+
gone from origin makes `verify` answer `resume_from=setup` — a fresh run off the base.
|
|
1026
1063
|
|
|
1027
1064
|
State schema 1.24.0: `IssueStatus` gains `handed-back`; `EvictionRecord` gains optional
|
|
1028
1065
|
`kind`/`branch`, `FailureEvidence` optional `branch`.
|
|
@@ -1097,7 +1134,13 @@ hand-back shape (`blocked`, `review partial`) never counts: it keeps its own pat
|
|
|
1097
1134
|
member rails then:
|
|
1098
1135
|
|
|
1099
1136
|
- stop a live agent and wait for it to be gone before anything else (a dying full-cycle run
|
|
1100
|
-
could still push, post or open a PR in that worktree)
|
|
1137
|
+
could still push, post or open a PR in that worktree). The first sight sends SIGTERM
|
|
1138
|
+
(re-sent each tick), stamps `SlotEntry.kill_sent_at` and journals `member-stop-requested`
|
|
1139
|
+
once; an agent still alive `KILL_ESCALATION_MS` (120 s) later
|
|
1140
|
+
is sent SIGKILL — to its process group when its recorded start time confirms its identity
|
|
1141
|
+
(every agent is spawned detached, so it leads one), else to the pid alone — and
|
|
1142
|
+
`kill-escalated` is journaled once (#844). Pre-#844 an agent ignoring SIGTERM held its
|
|
1143
|
+
member here indefinitely;
|
|
1101
1144
|
- if the milestone shows the run already SHIPPED (a `ship`/`report` phase or a `pr=` key —
|
|
1102
1145
|
`wrongProcedureShippedPr`), evict it at once `wrong-procedure-shipped`, naming the stray PR
|
|
1103
1146
|
(`stray_pr`) for the operator to close or reconcile — a re-prompt cannot undo a PR;
|
|
@@ -1109,6 +1152,21 @@ member rails then:
|
|
|
1109
1152
|
the killed first dispatch's milestones would otherwise still count inside the 60s fence)
|
|
1110
1153
|
evicts it `wrong-procedure` (parked `evicted`, branch kept, #810).
|
|
1111
1154
|
|
|
1155
|
+
### A member's slot release and its eviction are one write (#844)
|
|
1156
|
+
|
|
1157
|
+
Every member-failure rail — serial dead/blocked, the incremental gate's `task-failed`, both
|
|
1158
|
+
wrong-procedure evictions, and their parallel twins — hands the slot release to
|
|
1159
|
+
`evictMemberDirectly`, which applies it inside the same lock that parks the member and
|
|
1160
|
+
appends its `evictions[]` record. Pre-#844 the release was its own earlier write, and an
|
|
1161
|
+
engine exit between the two left the member in-work with no slot: the serial wedge arm or
|
|
1162
|
+
`spawnParallelMembers` then dispatched it once more, with no eviction in the journal. An exit
|
|
1163
|
+
AFTER the combined write but before the serial advance is recovered too: the wedge arm finds
|
|
1164
|
+
the current member already in `evictions[]`, journals `member-advance-recovered` (carrying the
|
|
1165
|
+
record's `reason`/`kind`, since the exit may have beaten the `unit-failed` line), and finishes
|
|
1166
|
+
what the eviction would have done — the dissolve its threshold tripped, or the advance —
|
|
1167
|
+
instead of respawning it. The same one-write rule covers the parallel run's `evicted` status
|
|
1168
|
+
and `sched resume --batch`'s `blocked → executing` transition before a recheck eviction.
|
|
1169
|
+
|
|
1112
1170
|
## API surface
|
|
1113
1171
|
|
|
1114
1172
|
```ts
|
|
@@ -1137,6 +1195,10 @@ import {
|
|
|
1137
1195
|
// truth/clock/repoDir/teardownExec/fencer/batchExec/runBatchSuite/
|
|
1138
1196
|
// runBatchCapability — #523)
|
|
1139
1197
|
createSpawnDeps, // real detached-spawn process I/O
|
|
1198
|
+
KILL_ESCALATION_MS, // #844: SIGTERM → SIGKILL bound (120 s) for an agent the batch
|
|
1199
|
+
// wrong-procedure wait is stopping
|
|
1200
|
+
type KillSignal, // #844: 'SIGTERM' | 'SIGKILL' — SpawnDeps.kill's optional 3rd arg
|
|
1201
|
+
// (SIGKILL targets the agent's process group on confirmed identity)
|
|
1140
1202
|
createExecGroundTruth, // runstate/gh/git ground truth via subprocesses (injectable exec);
|
|
1141
1203
|
// since #468 also gh pr view PR state + setup info from comments;
|
|
1142
1204
|
// since #789 also mergedPrForBranch, and since #824
|
|
@@ -1431,7 +1493,7 @@ after-the-fact recovery, not a missing-data bug.
|
|
|
1431
1493
|
queue data.
|
|
1432
1494
|
- **Schema**: state/config files from #460 (schema 1.0.0), #464 (1.1.0), #468 (1.2.0),
|
|
1433
1495
|
#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)
|
|
1434
|
-
load and migrate to the current schema (1.
|
|
1496
|
+
load and migrate to the current schema (1.29.0 — 1.24.0 was #810: no backfill,
|
|
1435
1497
|
`kind`/`branch` optional, absent = an `evicted` record with no branch) automatically
|
|
1436
1498
|
(slot `branch`/`last_head`/`pid_start`, slot `role` (inferred from the
|
|
1437
1499
|
unit's queue entry, with the persisted `phase` as a fallback — #500), entry
|
|
@@ -1458,6 +1520,9 @@ after-the-fact recovery, not a missing-data bug.
|
|
|
1458
1520
|
decision, persisted; `false` backfilled) and `MemberRun` gains `teardown_failed_at`
|
|
1459
1521
|
(`null` backfilled). A 1.27.0 `done` batch still carrying a live member run loads as
|
|
1460
1522
|
kept — the old engine never recorded the decision, so the default is to keep.
|
|
1523
|
+
Schema 1.29.0 (#844): `SlotEntry` gains `kill_sent_at`/`kill_escalated_at` (the
|
|
1524
|
+
SIGTERM → SIGKILL escalation anchor and its journal dedup marker; `null`/`null`
|
|
1525
|
+
backfilled, cleared when the slot goes idle).
|
|
1461
1526
|
- **`max_slots`** bounds live units (`assigned | running | recovering`); dependency
|
|
1462
1527
|
edges gate readiness — an issue with an unmerged dependency, and a batch behind an
|
|
1463
1528
|
unmerged batch, are never runnable.
|
package/dist/batch-dispatch.d.ts
CHANGED
|
@@ -176,8 +176,14 @@ export interface MemberFailure {
|
|
|
176
176
|
export declare function memberBranchFor(batchId: string, memberIndex: number, issue: number): string;
|
|
177
177
|
/**
|
|
178
178
|
* Evict the current member and either dissolve, or continue the batch via
|
|
179
|
-
* `advanceMemberOrValidate` — the shared tail of
|
|
180
|
-
* (
|
|
179
|
+
* `advanceMemberOrValidate` — the shared tail of the serial member-failure
|
|
180
|
+
* rails (dead/blocked, the incremental gate below, the wrong-procedure
|
|
181
|
+
* evictions, and `sched resume --batch`'s recheck).
|
|
182
|
+
*
|
|
183
|
+
* #844: a caller whose member still holds its slot MUST pass its release as
|
|
184
|
+
* `preWrite` — never release under a separate lock first. `evictMemberDirectly` commits
|
|
185
|
+
* the release with the park/eviction record in one write, so an engine exit
|
|
186
|
+
* cannot leave the member slotless and un-evicted (and so respawned).
|
|
181
187
|
*
|
|
182
188
|
* #613: `evictMemberDirectly`'s duplicate check (#595) is the one atomic,
|
|
183
189
|
* lock-protected claim on "did THIS member's eviction already happen" — so
|
|
@@ -199,7 +205,9 @@ export declare function memberBranchFor(batchId: string, memberIndex: number, is
|
|
|
199
205
|
* `runBatchTick`/`resumeBlockedGate` entry points cannot reproduce since
|
|
200
206
|
* both always read state fresh.
|
|
201
207
|
*/
|
|
202
|
-
export declare function evictMemberAndContinue(deps: BatchDispatchDeps, config: SchedConfig, dispatch: ResolvedDispatch, batchId: string, batch: BatchEntry, memberIssue: number, failure: MemberFailure, now: Date, result: BatchTickResult
|
|
208
|
+
export declare function evictMemberAndContinue(deps: BatchDispatchDeps, config: SchedConfig, dispatch: ResolvedDispatch, batchId: string, batch: BatchEntry, memberIssue: number, failure: MemberFailure, now: Date, result: BatchTickResult,
|
|
209
|
+
/** #844: the member's slot release (or any pre-write) — committed in the eviction's own write. */
|
|
210
|
+
preWrite?: (s: SchedState) => SchedState): void;
|
|
203
211
|
/**
|
|
204
212
|
* `sched resume --batch <id>` (#583 AC4): an operator-triggered, synchronous
|
|
205
213
|
* one-shot recheck of a batch blocked on `gate-inconclusive:<capabilityId>`
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"batch-dispatch.d.ts","sourceRoot":"","sources":["../src/batch-dispatch.ts"],"names":[],"mappings":"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"}
|