@feigi/fleet-ctl 3.82.25 → 3.82.27

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feigi/fleet-ctl",
3
- "version": "3.82.25",
3
+ "version": "3.82.27",
4
4
  "description": "Agent fleet: run-team controller, merge bot, PR reviewer, and the ticket pipeline they share",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -39,17 +39,20 @@
39
39
  // A claim worktree that cannot be checked — `git worktree list`
40
40
  // failing, a .worktrees/ that cannot be read, or a directory there
41
41
  // named for N that git does not list — keeps it, with that reason.
42
- // reports/<member>.json
43
- // a member's report file. `reports/` itself is never removed, and
44
- // is not aged out whole: each file is judged on its own, by the
45
- // entry it goes with. A fix-pr-<M>[-x], finisher-pr-<M>[-x] or
46
- // review-pr-<M>[-x] report goes with pr<M>/ — the same verdict,
47
- // the same live-token holds, though no pr<M>/ need exist; an
48
- // impl-<N>[-x] report goes with impl-<N>/ the same way; any other
49
- // file in it (a merge-bot-<n> report, which names no PR and no
50
- // ticket) is judged as "anything else" below, so it is removed
51
- // only when idle past the retention and its member's token is not
52
- // live.
42
+ // reports/<member>.json, reports/<member>.check.json
43
+ // a member's report file, and the Check-step record written beside
44
+ // it. `reports/` itself is never removed, and is not aged out
45
+ // whole: each file is judged on its own, by the entry it goes
46
+ // with. A fix-pr-<M>[-x], finisher-pr-<M>[-x] or review-pr-<M>[-x]
47
+ // report goes with pr<M>/ — the same verdict, the same live-token
48
+ // holds, though no pr<M>/ need exist; an impl-<N>[-x] report goes
49
+ // with impl-<N>/ the same way; the <member>.check.json record is
50
+ // judged exactly as <member>.json is (one `.check` infix only:
51
+ // <member>.check.check.json and <member>.checkx.json are "anything
52
+ // else"); any other file in it (a merge-bot-<n> report or record,
53
+ // which names no PR and no ticket) is judged as "anything else"
54
+ // below, so it is removed only when idle past the retention and
55
+ // its member's token is not live.
53
56
  // anything else, and a keyed name whose number GitHub resolves to the
54
57
  // other type (a pr<N> that is an issue, an impl-<N> that is a PR) or to
55
58
  // nothing
@@ -140,11 +143,12 @@ const REMOVE = [
140
143
  const PR_ENTRY = /^pr([1-9][0-9]*)$/;
141
144
  const IMPL_ENTRY = /^impl-([1-9][0-9]*)$/;
142
145
  const DISPOSITIONS_ENTRY = /^dispositions-fix-pr-([1-9][0-9]*)(?:-[a-z])?\.json$/;
143
- // A member's report file, `reports/<member>.json`: one that names a PR goes
144
- // with that PR's entries, one that names a ticket with that ticket's.
146
+ // A member's report file, `reports/<member>.json`, and its Check-step record,
147
+ // `reports/<member>.check.json`: one that names a PR goes with that PR's
148
+ // entries, one that names a ticket with that ticket's.
145
149
  const REPORTS_DIR = "reports";
146
- const REPORT_PR_ENTRY = /^(?:fix-pr|finisher-pr|review-pr)-([1-9][0-9]*)(?:-[a-z])?\.json$/;
147
- const REPORT_IMPL_ENTRY = /^impl-([1-9][0-9]*)(?:-[a-z])?\.json$/;
150
+ const REPORT_PR_ENTRY = /^(?:fix-pr|finisher-pr|review-pr)-([1-9][0-9]*)(?:-[a-z])?(?:\.check)?\.json$/;
151
+ const REPORT_IMPL_ENTRY = /^impl-([1-9][0-9]*)(?:-[a-z])?(?:\.check)?\.json$/;
148
152
  const RUN_ROOT = /^run-/;
149
153
 
150
154
  function how(r) {
@@ -179,7 +179,7 @@ Dispatching the next member on top of an unchecked or mismatched dispatch multip
179
179
 
180
180
  ## A carried implementer after `/resume` holds the whole tick
181
181
 
182
- **After `/resume`, a carried implementer can hold the whole tick.** It holds when the check given this run's `session` finds no `<member>.jsonl` and exits 2, writing nothing. `HOLD (tier unchecked impl-<N>)` then stops the whole tick, not only that member's ticket. It clears once the member settles: one settled `killed` or `released` gets `tier-unverifiable=` from the same check, and one settled any other way ran, so pass the directory that dispatched it, as above. Until it settles, follow the carried token's reconciliation in references/phase-0.md, the "Resume the claims a dead run left without a PR" section, under its `prior: ancestor` branch: `proc://` reads `running` → wait; dead → the Member-killed row.
182
+ **After `/resume`, a carried implementer can hold the whole tick.** It holds when the check given this run's `session` finds no `<member>.jsonl` and exits 2, writing nothing. `HOLD (tier unchecked impl-<N>)` then stops the whole tick, not only that member's ticket. It clears once the member settles: one settled `killed` or `released` gets `tier-unverifiable=` from the same check, and one settled any other way ran, so its transcript exists and the `session` given is the wrong directory: pass the session directory that dispatched it, the one the exit-2 refusal in `scripts/tier-check.mjs` asks for. Until it settles, follow the carried token's reconciliation in references/phase-0.md, the "Resume the claims a dead run left without a PR" section, under its `prior: ancestor` branch: `proc://` reads `running` → wait; dead → the Member-killed row.
183
183
 
184
184
  A mismatch on a ticket whose issue is already CLOSED holds nothing: the tick probes that issue and drops it, since there is nothing left to replace.
185
185