@feigi/fleet-ctl 3.82.2 → 3.82.4

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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fleet-finisher
3
- description: A `/skill:run-team` finisher — dispatched by the controller in phase 3 once a PR's review has returned and CI is green; audits the worktree, re-runs the acceptance mutation, applies one release label, reports. Never invoked directly.
3
+ description: A `/skill:run-team` finisher — dispatched by the controller through the finisher gate once a PR's review has returned and CI is green; audits the worktree, re-runs the acceptance mutation, applies one release label, reports. Never invoked directly.
4
4
  model: "@smol:low"
5
5
  ---
6
6
 
@@ -19,8 +19,8 @@ the path your brief names, holding every PR you merged in `merged`. Your final
19
19
  message is the one line your brief gives, `merge-bot-<n>: done <path>`.
20
20
 
21
21
  The shell traps below are copied from the controller's skill file,
22
- `run-team/SKILL.md`. In them "Phase 3" is the controller's event loop, which you
23
- do not run, and "this file" is that skill file; each trap applies to every shell
22
+ `run-team/SKILL.md`. In them **Own the CI waits** is that file's section on the
23
+ controller's CI watcher, which you do not run, and "this file" is that skill file; each trap applies to every shell
24
24
  command and loop you run.
25
25
 
26
26
  **zsh word-splits an unquoted command substitution's result; it does NOT split
@@ -53,8 +53,8 @@ $prs
53
53
  EOF
54
54
  ```
55
55
 
56
- The inline `$(printf '%s\n' "$prs")` form splits correctly too and is what Phase
57
- 3's block uses, but it splits on *every* whitespace character, so it is safe only
56
+ The inline `$(printf '%s\n' "$prs")` form splits correctly too and is what the
57
+ watcher block under **Own the CI waits** uses, but it splits on *every* whitespace character, so it is safe only
58
58
  for values that cannot contain one — PR numbers cannot, branch names and paths
59
59
  can. Measured on a two-line list whose first value is `two words`: three
60
60
  iterations through `$(printf …)`, two through `while IFS= read -r`. On an empty
@@ -70,7 +70,7 @@ word-split bug, so a correct heredoc fix missing this half looks exactly like no
70
70
  fix at all, and reads as one.
71
71
 
72
72
  **A probe that could not look emits an event; it never `continue`s.** Stated in
73
- full at *A probe that cannot read is a transition event, not silence* in Phase 3,
73
+ full at *A probe that cannot read is a transition event, not silence* under **Own the CI waits**,
74
74
  and it binds every watcher in this file rather than that one block: the third
75
75
  value beside pass and fail is what turns a broken loop into a loud failure
76
76
  instead of a quiet one. A guard that drops an unreadable probe — `[ -n "$json" ]
@@ -43,9 +43,10 @@ commands run from the repository root by `sh -c`:
43
43
  - **Install step** — the form that installs exactly what the repository pins
44
44
  and rewrites nothing: the frozen or locked mode where the tool has one.
45
45
  `true` when nothing needs installing. It must leave every file exactly as
46
- checked out; build output the repository ignores is fine. The fleet runs the
47
- Install step with `CI` unset, so spell the frozen or locked mode in the
48
- command; never rely on the environment to imply it.
46
+ checked out; build output the repository ignores is fine. The fleet and a
47
+ standalone next-ticket session run the Install step with `CI` unset, so spell
48
+ the frozen or locked mode in the command; never rely on the environment to
49
+ imply it.
49
50
  - **Test entrypoint** — every test step in the merge-gating CI jobs that can
50
51
  run in a fresh worktree on this host. Which steps qualify is yours to
51
52
  decide, by reading CI and the repository. Members run it with their own
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feigi/fleet-ctl",
3
- "version": "3.82.2",
3
+ "version": "3.82.4",
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": {
@@ -80,6 +80,8 @@ gh issue edit <N> --add-label in-progress
80
80
 
81
81
  Infer branch/worktree convention from `git worktree list` / `git branch -r` — commonly `feat|fix|refactor/<N>-slug` and `.worktrees/<N>-slug`. Branch off fresh `origin/main`, run the Install step, run the Check step, run the Test entrypoint as the baseline — the repo's **Recipe**, read from its Recipe cache: `~/.fleet/bin/fleet-run derive-testcmd.sh . install`, `… . check` and `… . test --at origin/main` print them. **No usable cache (any of the three exits 1) → run the Recipe derivation step first:** dispatch a `task` member, agent `fleet-recipe-deriver`, its prompt naming the main checkout's absolute path as `<repo>` and `<scratch>/derive-recipe/` as its scratch directory, `<scratch>` the output of `~/.fleet/bin/fleet-run scratch-root.mjs`; it reads the repo, proves all three commands in a throwaway worktree and writes the cache only on proof. `RECIPE NOT PROVEN` → stop and give the maintainer its reason; never pick a command yourself. Exit 3 is no verdict on the cache — the reader could not run a tool it needs — so fix that environment fault and re-run instead of deriving.
82
82
 
83
+ **Run the Install step with `CI` removed**, from the new worktree's root: `env -u CI sh -c "<install>"`, `<install>` the output of `derive-testcmd.sh . install`. A setup script that skips under `CI` installs no git hooks there, and you would then commit with the repository's commit-time checks silently absent. Only the Install step loses `CI`; the Check step and the Test entrypoint baseline run in your shell's own environment.
84
+
83
85
  Abandoned before PR opens → remove `in-progress`.
84
86
 
85
87
  ## 6. Size the ticket, then pick a path