@feigi/fleet-ctl 3.21.7 → 3.21.9

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.21.7",
3
+ "version": "3.21.9",
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": {
@@ -205,12 +205,13 @@ test("duty 1 says worktree-audit.sh takes no argument and audits every worktree"
205
205
  // equal alternatives, then halted on "dirty or diverged" — and neither can
206
206
  // see diverged. Porcelain is empty over a clean tree one commit past the pin,
207
207
  // and the audit's `ahead` is counted against `origin/main`
208
- // (worktree-audit.sh's `base=${BASE_REF:-origin/main}`), which a PR worktree
209
- // is always ahead of. The only divergence check is the cause block's
210
- // head-equality against the dispatch pin. And "find this worktree's row" gave
211
- // no rule for a row that cannot answer, or for no row at all. Each pin below
212
- // holds ONE sentence (`sentences()`, #1940), so a clause deleted from inside
213
- // the duty reds its own pin rather than being satisfied by a neighbour.
208
+ // (worktree-audit.sh's `base=${BASE_REF:-origin/main}`), which a healthy
209
+ // worktree on an open, unmerged PR is ahead of too. The only divergence check
210
+ // is the cause block's head-equality against the dispatch pin. And "find this
211
+ // worktree's row" gave no rule for a row that cannot answer, or for no row at
212
+ // all. Each pin below holds ONE sentence (`sentences()`, #1940), so a clause
213
+ // deleted from inside the duty reds its own pin rather than being satisfied by
214
+ // a neighbour.
214
215
  test("duty 1 names the instrument for each check, and halts on a row that cannot answer", () => {
215
216
  const said = (re) => sentences(duty1Text()).some((s) => re.test(s));
216
217
  assert.ok(
@@ -225,6 +226,19 @@ test("duty 1 names the instrument for each check, and halts on a row that cannot
225
226
  said(/row's `ahead`.*counted against `origin\/main`.*cannot answer/),
226
227
  "duty 1 no longer says the audit's `ahead` is counted against origin/main — a finisher reading it as divergence sees every PR worktree as diverged, or learns to ignore it",
227
228
  );
229
+ // The reason `ahead` cannot answer holds for the PR the finisher runs on: an
230
+ // open, unmerged one. It is not true of every PR worktree — after a merge
231
+ // commit into a fetched origin/main the branch's `ahead` reads 0 — so the
232
+ // claim is scoped, never "always", and the scope sits in the same sentence.
233
+ assert.ok(
234
+ said(/row's `ahead`.*counted against `origin\/main`.*open, unmerged PR.*cannot answer/),
235
+ "duty 1 no longer scopes the `ahead` reason to an open, unmerged PR's worktree — after a merge into a fetched origin/main a PR worktree's `ahead` reads 0, so an unscoped claim is false",
236
+ );
237
+ assert.doesNotMatch(
238
+ flat(RUN_TEAM),
239
+ /\balways\b[^.]{0,20}\bahead\b/i,
240
+ "the run-team skill states an unconditional lead over origin/main again — a PR worktree's `ahead` reads 0 once its merge commit is in a fetched origin/main",
241
+ );
228
242
  // The three non-clean row shapes, each halting and each named. Unreadable
229
243
  // and missing share `readable:false` and differ only in their counts, so
230
244
  // each is pinned with its count shape and stderr line — dropping one leaves
@@ -2578,10 +2578,10 @@ a minute apart showed *different* mutants, so a member's report and any single
2578
2578
  the worktree unreadable. **Diverged:** the worktree's `HEAD` against your
2579
2579
  dispatch pin — the cause block's head-equality check below. Neither
2580
2580
  instrument above answers it: `git status --porcelain` reports no commits,
2581
- and the row's `ahead` is counted against `origin/main`, which a PR worktree
2582
- is always ahead of, so it cannot answer this. Three row shapes halt too,
2583
- each named in the report with the script's stderr line quoted where it
2584
- prints one: `readable:false` with `null` counts
2581
+ and the row's `ahead` is counted against `origin/main`, which a healthy
2582
+ worktree on an open, unmerged PR is ahead of too, so it cannot answer this.
2583
+ Three row shapes halt too, each named in the report with the script's
2584
+ stderr line quoted where it prints one: `readable:false` with `null` counts
2585
2585
  (`UNREADABLE: <wt> (<cause>)`) is *worktree unreadable*, `readable:false`
2586
2586
  with zero counts (`MISSING on disk: <wt>`) is *worktree missing*, and no
2587
2587
  row for this worktree at all is *worktree absent*. `git status` is no