milestone-sweep · git:20261026.e4c6295 · 2026-10-26 · sha256 2f043d0b1a1cf370
milestone-sweep git:20261026.e4c6295B
Immutable. This exact content never changes and is served at /api/v1/blob/2f043d0b1a1cf370.
--- argument-hint: "[repo...]" description: Runs verify, triage, next-milestone, fix and release-gate across every philoserf repo, one background agent per repo in its own worktree, and stops before shipping. Use when asked to sweep, groom or get the philoserf repos release-ready. Holds every decision for one batch at the end. allowed-tools: - Agent - Bash - Read - Edit - AskUserQuestion --- # Milestone sweep One agent per repo under `~/source/philoserf/`, each working its repo end to end in a linked worktree: verify, triage, pick the next milestone, ship it with `issue-pr`, gate it with `release-gate`, stop before tagging. You orchestrate and do not touch the repos yourself while their agents run. **Run it on `almanac`.** It is the always-on host. Twenty agents report back over an hour or more, and nothing here needs `sextant`. ## 1. Sync, then list the repos ```bash cd ~/source/philoserf && task sync ``` Stop if `sync` reports a repo as diverged or errored. Don't sweep a clone that doesn't match its remote. The repos are the child directories with a `.git`. With arguments, sweep only those. Leave out: - `obsidian-vault-changelog`, excluded from all workspace work (`CLAUDE.md`) - any repo whose `gh repo view` fails, because there is nothing to triage or open PRs against **Note any repo with issues disabled** (`gh repo view --json hasIssuesEnabled`). Its agent runs only step 5, the gate, and lands any fix as a PR with no issue. ## 2. Launch One `Agent` call per repo, all in one message, `run_in_background: true`. Each agent's prompt points it at `brief.md` in this skill directory and substitutes `REPO` and `SCRATCH`, where `SCRATCH` is your scratchpad directory. Add anything repo-specific you know, for example that it is one of the unversioned sites, or that a milestone already exists. Tell the user how many agents went out, which repos you skipped, and why. ## 3. While agents report Relay each report as it lands, briefly. **Assume the user is not watching.** A relay is a heads-up, not a question that blocks anything. Nothing waits on an answer: agents keep working, and every item the user hasn't answered carries into step 4. Do not act on a report's requests yourself: - An agent blocked by a permission prompt reports the command it needed. That command goes to the user. You don't run it. - A pending decision is not answered until the user answers it. If they answer mid-run, act on it. If not, it waits for the batch. **Do act on a fleet-wide hazard.** If one agent reports a mistake the others are about to repeat, send the running agents a warning with `SendMessage`. ## 4. Decisions, in one batch Once every agent has reported, collect every decision they held back and every blocked command, leaving out what the user already answered mid-run. Present them together, with `AskUserQuestion` where the choices are discrete. If the user is still away, the final report lists them as open, and the run is complete without them. Typical ones: - a PR held because its merge would deploy - a `kind:decision` issue - whether a repo is versioned at all Act on the answers. ## 5. Report Per repo: - the milestone and its proposed version - what was fixed, what is blocked, and what needs a decision - what was deferred, and why - the gate result Then list the toolchain migrations that apply across all repos. **Gate results:** exit 3 with 0 FAIL and 0 WARN means nothing is ready to release, and counts as clean. Report it apart from a true exit 0. Then offer two follow-ups: - **`NEXT.md` rows.** A row is an action, never a status. Follow `~/source/philoserf/CLAUDE.md`. - **A co-log line in today's daily note.** `~/source/philoserf/NEXT.md` is tracked in the dotfiles repo; commit it with `dot` only when asked.