@ai-dossier/sched 0.48.0 → 0.49.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
@@ -28,7 +28,7 @@ ai-dossier sched enqueue --issues 101,105..109 --deps 100 --tier strong # flag
28
28
  ai-dossier sched enqueue --from-manifest batch-prep.json # batch-prep output
29
29
  ai-dossier sched start # the dispatch engine: spawn, verify, escalate, watch parked PRs (Ctrl-C stops it)
30
30
  ai-dossier sched start --once # a single reconcile+refill tick (cron-style)
31
- ai-dossier sched status # queue (+pr/cleanup), engine lease, slots, batches, blocked/failed; --anchors adds the open-batch-anchor sweep (#768)
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
34
  ai-dossier sched stop --issue 42 # terminate one full-cycle agent and record it stopped (no recovery)
@@ -1123,11 +1123,18 @@ import {
1123
1123
  // so batch-dispatch.ts can share it.
1124
1124
  TRANSITIONS, // the transition tables themselves (for previews)
1125
1125
  buildStatusReport, // machine-readable status incl. blocked/failed sets
1126
- // (+ optional `anchorSweep` → `anchors`, #768; null without it)
1126
+ // (+ optional `anchorSweep` → `anchors`/`orphan_anchors`, #768/#790)
1127
+ // (+ optional `worktreeReader` → `kept-worktree` warnings, #791)
1128
+ keptWorktreeCandidates, buildKeptWorktreeWarnings, defaultKeptWorktreeReader, // #791
1127
1129
  sweepAnchors, classifyAnchor, membersShippedVerdict, anchorLedgerBlockers,
1128
1130
  shippingEvidence, // #768 anchor-close predicate (pure; readers injected)
1129
1131
  closeAnchor, // #768 idempotent comment-then-close, `-R <repo>` explicit
1130
1132
  anchorCloseMarker, renderAnchorCloseComment, openAnchorBatches, formatBatchStatus,
1133
+ sweepOrphanAnchors, classifyOrphanAnchor, parseOrphanAnchorBody, batchAnchorStillOpen,
1134
+ // #790 orphan sweep — batches gone from state.batches entirely;
1135
+ // pure, GitHub/git only via the injected list/read (never exec)
1136
+ ORPHAN_SWEEP_MAX_ANCHORS, ORPHAN_SWEEP_MAX_MEMBERS, DEFAULT_ORPHAN_BASE_BRANCH, // #790
1137
+ BATCH_ANCHOR_LABEL, // #790, also used by cli/src/batch-compose.ts (single source)
1131
1138
  issueCloseReader, parseIssueCloseTruthJson, parseRepoName,
1132
1139
  resolveProjectRepo, // #768 owner/name of the cwd repo only when it IS the project's
1133
1140
  hasLabel, // case-insensitive label match (#768)
@@ -1327,10 +1334,14 @@ after-the-fact recovery, not a missing-data bug.
1327
1334
  can be manual (`sched pause`) or automatic (dispatch-health, #505/#629 above); `sched
1328
1335
  resume` clears the flag and both dispatch-health streaks.
1329
1336
 
1330
- ## Status health warnings (#776)
1337
+ ## Status health warnings (#776, #791)
1331
1338
 
1332
- `sched status` (and `warnings[]` in `--json`, built by `buildStatusWarnings`) flags state
1333
- nobody came back to, each with its exact remedy:
1339
+ `sched status` (and `warnings[]` in `--json`) flags state nobody came back to, each with
1340
+ its exact remedy. Most kinds come from `buildStatusWarnings`, pure over state + engine
1341
+ lease + clock; `kept-worktree` (below) comes from the separate `buildKeptWorktreeWarnings`,
1342
+ since it needs local git/fs reads — it only appears when the caller passes a
1343
+ `KeptWorktreeReader` to `buildStatusReport` (the CLI always does; a test harness omits it
1344
+ to skip the check entirely):
1334
1345
 
1335
1346
  - **`long-pause`** — paused for more than 24 h (`STATUS_HEALTH_WARNING_AGE_MS`), measured
1336
1347
  from `paused_at`, which `setPaused` stamps on the running → paused edge and clears on
@@ -1344,6 +1355,25 @@ nobody came back to, each with its exact remedy:
1344
1355
  closed issue sets the entry's sticky `stale_closed_at`, journals `stale-closed` once, and
1345
1356
  the recovery rail never respawns it (even after `sched resume`). Report slots are exempt:
1346
1357
  their issue is closed at merge by design. Remedy: `sched stop --issue N`.
1358
+ - **`kept-worktree`** (#791) — a `done` batch whose `worktree` or `member_worktree` is
1359
+ still set in the ledger: the `members-closed` stale-blocked reconcile below
1360
+ intentionally leaves it in place (it may hold unpushed operator repair work), and
1361
+ nothing else surfaced it until now. For each kept path, `sched status` reports:
1362
+ whether it still exists on disk; whether it is pool-claimed (the claim is held
1363
+ indefinitely until returned); and, via two local, read-only `git` probes scoped to
1364
+ that worktree's own `HEAD` (`git --no-optional-locks status --porcelain`, `git log
1365
+ HEAD --not --remotes`), whether it has uncommitted or unpushed work. The remedy is the
1366
+ exact `git worktree remove <path>` or `worktree-pool return --path <path>` command,
1367
+ properly shell-quoted — report-only, never executed. `reconcileKeptWorktrees`
1368
+ (`batch-dispatch.ts`, run every tick) separately clears the ledger's `worktree`/
1369
+ `pool_claimed` fields once there is DEFINITIVE evidence the cleanup already
1370
+ happened — the path no longer exists, or the pool itself reports it back as a warm
1371
+ spare — so the warning does not persist after the operator (or the pool) has already
1372
+ dealt with it; it never removes anything itself. A candidate whose path is currently
1373
+ claimed by a different, still in-flight batch is skipped (a returned pool worktree can
1374
+ be re-issued before the done batch's own field clears). Local-git-only, capped at 10
1375
+ probed candidates per run — no network call, so unlike `sched status --anchors` this
1376
+ runs by default.
1347
1377
 
1348
1378
  ## Batch anchors close only on positive evidence (#768)
1349
1379
 
@@ -1380,7 +1410,9 @@ predicate in `anchor-close.ts`) over `blocked`/`done` batches touched within the
1380
1410
  for #686's stale-blocked reconcile (`members-closed`), which survives the mandated
1381
1411
  rebase-merge that makes the ancestry probe structurally dead. It finishes the terminal
1382
1412
  rail inline but never tears the blocked worktree down (it may hold unpushed work);
1383
- the journal line says the worktree was kept.
1413
+ the journal line says the worktree was kept, and `sched status` then raises a
1414
+ `kept-worktree` warning for it on every run until the ledger field clears — see
1415
+ above and `reconcileKeptWorktrees` (#791).
1384
1416
 
1385
1417
  Everything else is surfaced, never closed: `sched status --anchors` (opt-in; `status`
1386
1418
  makes no GitHub call without it) lists each still-open anchor of a batch no longer in
@@ -1392,6 +1424,51 @@ Journal: `anchor-closed` (including "found already closed") and `anchor-close-fa
1392
1424
  (deduped like `pr-watch-failed`: once per streak, re-announced every
1393
1425
  `JOURNAL_DEDUP_REANNOUNCE_TICKS`).
1394
1426
 
1427
+ ### Orphaned anchors — batches dropped from the ledger entirely (#790)
1428
+
1429
+ The sweep above only ever walks `state.batches` (`openAnchorBatches`) — an anchor whose
1430
+ batch fell out of the ledger ENTIRELY (a lost or reset `state.json`; imboard#4244/#4253
1431
+ were exactly this shape: `sched status --json` showed `batches: []` with both anchors
1432
+ still open) is invisible to it. The same `--anchors` flag also runs a GitHub-only sweep
1433
+ for exactly that: `gh issue list --label batch-epic --state open` for the pinned
1434
+ project repo, excluding anchors the ledger sweep already covers, recovering each
1435
+ orphan's members from its own issue-body checklist (`parseOrphanAnchorBody`) and
1436
+ classifying with the same shipping-evidence logic (`classifyOrphanAnchor`, sharing
1437
+ `readMembersShipping`/`anchorGroundVerdict` with `classifyAnchor` above) — minus the
1438
+ ledger check, which cannot apply to something not in the ledger. Reported under
1439
+ `== Orphaned batch anchors (not in ledger) ==` (`orphan_anchors` in `--json`, `null` when
1440
+ the sweep did not run OR the GitHub list call itself failed — rendered `(unavailable)`,
1441
+ never silently as `(none)`) as `orphan-closable-candidate`, `orphan-needs-operator`, or
1442
+ `orphan-unknown` — deliberately never the ledger sweep's bare `closable`: without a
1443
+ ledger there is no eviction/requeue trail to rule out, so even a clean read is a
1444
+ CANDIDATE for a human to confirm. Capped at `ORPHAN_SWEEP_MAX_ANCHORS` (20) classified
1445
+ per run — ledger-tracked anchors are excluded BEFORE that cap, from a GitHub fetch
1446
+ (`ORPHAN_LIST_FETCH_LIMIT`, 100) wider than it, so a busy repo's tracked anchors cannot
1447
+ crowd real orphans out; `orphan_anchors_truncated` (`StatusReport`) and a rendered
1448
+ truncation line fire when candidates still exceeded the cap. The anchor body is
1449
+ untrusted input (anyone who can edit an open `batch-epic` issue controls it): member
1450
+ numbers outside the valid GitHub issue range are dropped, a body over
1451
+ `ORPHAN_SWEEP_MAX_MEMBERS` (50) refuses with NO reads at all (`members-over-cap`), and
1452
+ `base_branch` is checked twice — syntactically (`SAFE_REF_RE`, falling back to
1453
+ `DEFAULT_ORPHAN_BASE_BRANCH`/`main` when unsafe) and then against the expected/configured
1454
+ base (`expectedBaseBranch`, default `main`): a value that names a DIFFERENT — even
1455
+ syntactically valid — branch can never produce `orphan-closable-candidate`, only
1456
+ `orphan-needs-operator` with reason `base-branch-nonstandard:<value>`, since it decides
1457
+ what counts as shipped and an editable issue field is not trusted to pick that
1458
+ unsupervised. Report-only by construction, exactly like the ledger sweep — `list`/`read`
1459
+ are pure lookups with no write capability, proven by a recording-`ExecFn` test over the
1460
+ real gh-argv-building path (`anchor-close.test.ts`).
1461
+
1462
+ Separately, `sched abandon --batch` warns — stderr line plus a journaled
1463
+ `batch-anchor-open-on-abandon` event, and an additive `anchor_open` field on
1464
+ `abandon --json` — rather than refuses, when it dissolves a batch whose anchor is still
1465
+ open on GitHub. Nothing in this codebase currently removes a batch row from
1466
+ `state.batches` (`abandonBatch` dissolves in place, status `dissolved`, still
1467
+ ledger-swept above), so this is a courtesy at the one real moment an operator ends a
1468
+ batch's active lifecycle — never a gate, and never a substitute for the orphan sweep. The
1469
+ CLI's repo-verification exec is timed (10s) on this path too, so an abandon that used to
1470
+ make no network calls at all cannot hang on an unresponsive `gh`.
1471
+
1395
1472
  ## Hard-block labels are re-read every tick (#544)
1396
1473
 
1397
1474
  #507's enqueue pre-screen resolves an issue's GitHub labels in the CLI and lands the
@@ -169,4 +169,164 @@ export declare function sweepAnchors(state: SchedState, read: IssueCloseReader,
169
169
  repo?: string;
170
170
  commitInBase?: CommitInBase;
171
171
  }): AnchorReportItem[];
172
+ /** The base branch `parseOrphanAnchorBody` falls back to, and `classifyOrphanAnchor` treats as the expected/project-standard base absent an `expectedBaseBranch` override — what `gate-issue` itself defaults to. */
173
+ export declare const DEFAULT_ORPHAN_BASE_BRANCH = "main";
174
+ /**
175
+ * #790 (security review): the anchor body is untrusted input — anyone who can
176
+ * comment-and-edit an open `batch-epic` issue controls it. Without a cap, a
177
+ * body with thousands of checklist lines would cost thousands of GraphQL
178
+ * reads per sweep (`classifyOrphanAnchor` runs `exhaustive: true`), and one
179
+ * crafted out-of-range member number would error that member's read,
180
+ * `orphan-unknown` it, and abort {@link sweepOrphanAnchors}'s reads for every
181
+ * later anchor. Both are answered the same way: a body over the cap is
182
+ * reported `orphan-needs-operator` (reason `members-over-cap`) with NO reads
183
+ * performed at all — see {@link classifyOrphanAnchor}.
184
+ */
185
+ export declare const ORPHAN_SWEEP_MAX_MEMBERS = 50;
186
+ /**
187
+ * Recover a batch anchor's members and base branch from its own issue body —
188
+ * the only record left once the batch has dropped out of `state.batches`.
189
+ * The body is the batch-compose format (RFC-0001): one member checklist line
190
+ * per issue, then metadata lines including `base_branch: <name>`. Nothing in
191
+ * this codebase edits an anchor's body after creation (verified: no
192
+ * `gh issue edit ... --body` targets an anchor), so the checklist is already
193
+ * the complete, stable membership — a `batch-setup` runstate milestone would
194
+ * only repeat the same list less reliably (missing entirely for an anchor
195
+ * that predates runstate, or belonging to a requeued run's earlier attempt).
196
+ *
197
+ * Both fields are untrusted (#790 security review) and validated before use:
198
+ * a member number outside `1..MAX_GITHUB_ISSUE_NUMBER` is dropped (never sent
199
+ * to `read`), and `base_branch` falls back to `main` — never propagating a
200
+ * string {@link SAFE_REF_RE} would reject as a git ref — when the metadata
201
+ * line is missing OR unsafe. `main` is what `gate-issue` defaults to, so it
202
+ * is what `shippingEvidence` checks a closer against either way.
203
+ * `members_over_cap` is set (members truncated to {@link ORPHAN_SWEEP_MAX_MEMBERS})
204
+ * rather than silently proceeding on a partial list — the caller reports it,
205
+ * never reads a partial membership as if it were the whole batch.
206
+ */
207
+ export declare function parseOrphanAnchorBody(body: string): {
208
+ members: number[];
209
+ base_branch: string;
210
+ members_over_cap: boolean;
211
+ };
212
+ /** A batch-epic anchor recovered from GitHub, with no `state.batches` row behind it. */
213
+ export interface OrphanAnchorCandidate {
214
+ anchor: number;
215
+ members: number[];
216
+ base_branch: string;
217
+ /** Set when {@link parseOrphanAnchorBody} truncated the member list at {@link ORPHAN_SWEEP_MAX_MEMBERS} — `classifyOrphanAnchor` refuses to read a partial membership. */
218
+ members_over_cap?: boolean;
219
+ }
220
+ /**
221
+ * {@link classifyOrphanAnchor}'s answer. Deliberately its own vocabulary —
222
+ * `orphan-closable-candidate`, never bare `closable` — because without a
223
+ * ledger there is no failure-trail evidence (no eviction/requeue record to
224
+ * rule out, the operator's rule from #768 is POSITIVE evidence only): even a
225
+ * verdict with zero disqualifying reasons is a CANDIDATE for a human to
226
+ * confirm, not the ledger-backed `sweepAnchors`' stronger `closable`.
227
+ */
228
+ export type OrphanAnchorVerdict = {
229
+ kind: 'orphan-closable-candidate' | 'orphan-needs-operator' | 'orphan-unknown';
230
+ reasons: string[];
231
+ members: AnchorMemberReport[];
232
+ };
233
+ /**
234
+ * Classify one orphan anchor candidate, or `null` when it turns out not to be
235
+ * an orphan at all — the anchor CLOSED between the GitHub list and this read
236
+ * (the caller only ever lists open anchors), the same list-then-read race
237
+ * `sweepAnchors` answers by `continue`-ing past a freshly `anchor-closed`
238
+ * verdict rather than reporting one. Deliberately NOT `classifyAnchor` /
239
+ * `membersShippedVerdict` verbatim: those consult `anchorLedgerBlockers`,
240
+ * which pushes `member-not-in-ledger:#N` for every member of ANY batch not
241
+ * in `state.batches` — for an orphan that is true by construction, so the
242
+ * ledger-backed predicate would answer `needs-operator` unconditionally and
243
+ * this sweep could never report a clean batch as a candidate. This reuses
244
+ * the SAME shipping-evidence logic ({@link readMembersShipping}, which is
245
+ * {@link shippingEvidence} plus the open/not-completed/handed-back checks)
246
+ * and the SAME anchor-level ground truth ({@link anchorGroundVerdict}) that
247
+ * `classifyAnchor` uses — the ledger check is the one piece structurally
248
+ * inapplicable to something not in the ledger.
249
+ */
250
+ export declare function classifyOrphanAnchor(candidate: OrphanAnchorCandidate, read: IssueCloseReader, opts?: {
251
+ repo?: string;
252
+ commitInBase?: CommitInBase;
253
+ expectedBaseBranch?: string;
254
+ }): OrphanAnchorVerdict | null;
255
+ /** One open `batch-epic` anchor issue, as listed from GitHub. */
256
+ export interface OpenAnchorIssue {
257
+ number: number;
258
+ title: string;
259
+ body: string;
260
+ }
261
+ /** Lists open `batch-epic` anchor issues for the pinned project repo, or `undefined` on a failed read (unverified repo, `gh` unreachable). */
262
+ export type OpenAnchorLister = () => OpenAnchorIssue[] | undefined;
263
+ /**
264
+ * The exact `gh issue list` argv for the #790 orphan lister — exported so
265
+ * the CLI's real lister (`orphanAnchorListerFor`, `cli/src/commands/sched.ts`)
266
+ * and this package's own tests build the SAME command from ONE definition
267
+ * (#790 review: the earlier AC6 test built its own copy of this argv, so a
268
+ * future change to the production command would not have been caught by
269
+ * it). Read-only by construction — `gh issue list` never writes.
270
+ */
271
+ export declare function orphanAnchorListArgs(repo: string, limit: number): string[];
272
+ /** `sched status --anchors`' orphan sweep (#790): bounded read cost per run — a GitHub-side sweep must never grow with the repo's total anchor count. */
273
+ export declare const ORPHAN_SWEEP_MAX_ANCHORS = 20;
274
+ /** One `sched status --anchors` orphan-sweep row. */
275
+ export interface OrphanAnchorReportItem {
276
+ anchor: number;
277
+ title: string;
278
+ verdict: OrphanAnchorVerdict['kind'];
279
+ reasons: string[];
280
+ members: AnchorMemberReport[];
281
+ }
282
+ /**
283
+ * {@link sweepOrphanAnchors}'s result: the classified rows plus whether the
284
+ * cap left anything unprobed. `truncated` distinguishes "these are ALL the
285
+ * open orphans" from "more may exist beyond what was classified" — silently
286
+ * capping without saying so would read as a complete, clean sweep on a busy
287
+ * repo where it is neither.
288
+ */
289
+ export interface OrphanAnchorSweepResult {
290
+ items: OrphanAnchorReportItem[];
291
+ /** True when more ledger-unbound open `batch-epic` anchors existed than {@link ORPHAN_SWEEP_MAX_ANCHORS} could classify this run. */
292
+ truncated: boolean;
293
+ }
294
+ /**
295
+ * `sched status --anchors`' orphan sweep (#790): every open `batch-epic`
296
+ * anchor in the pinned project repo whose batch is no longer in
297
+ * `state.batches` — invisible to {@link sweepAnchors}, which only walks the
298
+ * ledger. Report-only by construction, exactly like `sweepAnchors`: `list`
299
+ * and `read` are both pure lookups with no write capability, so this
300
+ * function has no way to close, comment on, label, or edit anything — it
301
+ * only ever builds and returns {@link OrphanAnchorReportItem} rows.
302
+ *
303
+ * `null` means the list itself failed (an unverified repo, or `gh`
304
+ * unreachable) — distinct from `{items: [], truncated: false}` ("asked,
305
+ * found zero orphans"), the same null-vs-empty convention
306
+ * `StatusReport.anchors`/`orphan_anchors` already use for "the sweep did not
307
+ * run at all". Ledger-tracked anchors are excluded BEFORE the
308
+ * {@link ORPHAN_SWEEP_MAX_ANCHORS} cap is applied — a busy repo with 20+ open
309
+ * ledger-tracked `batch-epic` anchors must not let them crowd out the
310
+ * orphans this sweep exists to find; `truncated=true` when the cap still
311
+ * left real orphan candidates unprobed. Classifying stops at the first
312
+ * failed member/anchor read (the same fail-closed posture as
313
+ * `sweepAnchors`): every anchor after that point is reported `orphan-unknown`
314
+ * without a further call.
315
+ */
316
+ export declare function sweepOrphanAnchors(state: SchedState, list: OpenAnchorLister, read: IssueCloseReader, opts?: {
317
+ repo?: string;
318
+ commitInBase?: CommitInBase;
319
+ expectedBaseBranch?: string;
320
+ }): OrphanAnchorSweepResult | null;
321
+ /**
322
+ * Whether dissolving `batch` (`sched abandon --batch`) should warn an
323
+ * operator: its anchor is set and, per `read`, still OPEN. Pure predicate —
324
+ * the CLI performs the actual GitHub read and the print/journal side effect
325
+ * (`sched abandon --batch`'s handler). `null` covers both "no anchor to warn
326
+ * about" and "read failed / anchor already closed or missing" alike: this
327
+ * function only ever tells the caller whether to warn, never why not to —
328
+ * `abandonBatch` itself must NEVER refuse over this (#790: refusing would
329
+ * wedge exactly the cleanup `abandon` exists for).
330
+ */
331
+ export declare function batchAnchorStillOpen(batch: Pick<BatchEntry, 'anchor'>, read: IssueCloseReader): number | null;
172
332
  //# sourceMappingURL=anchor-close.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"anchor-close.d.ts","sourceRoot":"","sources":["../src/anchor-close.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anchor-close.d.ts","sourceRoot":"","sources":["../src/anchor-close.ts"],"names":[],"mappings":"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"}