From 2c27ef8247a1b4e64e40bea080da27c0b06176b7 Mon Sep 17 00:00:00 2001 From: mdsmithaustin <15272014+mdsmithaustin@users.noreply.github.com> Date: Sat, 24 Oct 2026 00:03:03 -0600 Subject: [PATCH 1/8] fix(pr-recap): refresh the recap after any push and skip major pin bumps Add a poteto-mode task trigger that refreshes a PR's recap after any push that changes its diff, including Babysit and Shipping waves and gate fix rounds, once the new head is published and the gate run has an outcome. The rule used to live only in the Opening a PR playbook, so recaps went stale after later pushes. Say that a version pin counts as a skip even across a major version. --- skills/poteto-mode/references/task-triggers.md | 1 + skills/pr-recap/SKILL.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/skills/poteto-mode/references/task-triggers.md b/skills/poteto-mode/references/task-triggers.md index 7fd03463..46b0ad34 100644 --- a/skills/poteto-mode/references/task-triggers.md +++ b/skills/poteto-mode/references/task-triggers.md @@ -18,6 +18,7 @@ Read this reference for the actions named by the mode entry, or when scope chang - Shipping UI / IDE / CLI → use the project's verification skill (`verify-`, generated by the **create-verification-skill** skill), which drives the real surface — browser, Electron, web UI, CLI, or TUI. For bug fixes, reproduce first on the same surface yourself. Hand to the user only under the narrow Bug fix step 1 exception. - Running a benchmark, measuring perf yourself, or reporting a speedup or regression you measured → use the **benchmark-checklist** skill before you report or act on the number. - Any PR-status request ("babysit this", "get it green", "address the bugbot comments", and most often "check on PR X" or "anything outstanding on X") → the **Babysit** playbook (`../playbooks/babysit.md`), not any built-in babysit skill your CLI ships, even when its description matches the same words. Never triggered by merely opening a PR. Declare its mode before polling. The playbook's step 1 owns the request-to-mode mapping. Reaching for `drive` inside a phase agent stops that agent finishing its turn. +- A push changed an open PR's diff, whether yours, a Babysit or Shipping wave, or a gate fix round → once the new head is published and any gate run has reached its outcome, use the **pr-recap** skill to refresh the PR's recap. - Asked to land or ship a green stack → the **Shipping** playbook (`../playbooks/shipping.md`). Green is not safe. Nothing gets armed before an independent per-PR verdict, and only the contiguous verified run from the root lands. - Bugbot, Copilot code review, GitHub Advanced Security, or another automated security reviewer commented → skeptical posture. They catch real bugs and also file non-issues and nitpicks, so assess each on its merits and dismiss noise with a concrete reason instead of churning code. Triage fix / dismiss / ask per `bugbot-triage.md`. - Broken skill mid-task → fix it in its own PR. Don't block. Don't silently work around it. diff --git a/skills/pr-recap/SKILL.md b/skills/pr-recap/SKILL.md index 211d7a03..d4c0bf45 100644 --- a/skills/pr-recap/SKILL.md +++ b/skills/pr-recap/SKILL.md @@ -11,7 +11,7 @@ Run this workflow locally. The recap is one PR comment: GitHub Markdown plus one ## Decide whether the PR gets a recap -Skip the recap when the diff has no behavior that a reviewer must trace. Examples are a version pin and its hashes, a typo or wording fix, a formatting-only change, a lockfile-only change, and the revert of one commit. +Skip the recap when the diff has no behavior that a reviewer must trace. Examples are a version pin and its hashes, even across a major version, a typo or wording fix, a formatting-only change, a lockfile-only change, and the revert of one commit. For a skipped PR, post nothing on GitHub. Put one line in your reply: From 27577550b5e9dfbaef7aadaf7feb9b4dded64b8f Mon Sep 17 00:00:00 2001 From: mdsmithaustin <15272014+mdsmithaustin@users.noreply.github.com> Date: Sat, 24 Oct 2026 00:04:07 -0600 Subject: [PATCH 2/8] no-mistakes(review): Clarify major-version pin recap skips and CI rationale --- skills/pr-recap/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/pr-recap/SKILL.md b/skills/pr-recap/SKILL.md index d4c0bf45..7e413a13 100644 --- a/skills/pr-recap/SKILL.md +++ b/skills/pr-recap/SKILL.md @@ -11,7 +11,7 @@ Run this workflow locally. The recap is one PR comment: GitHub Markdown plus one ## Decide whether the PR gets a recap -Skip the recap when the diff has no behavior that a reviewer must trace. Examples are a version pin and its hashes, even across a major version, a typo or wording fix, a formatting-only change, a lockfile-only change, and the revert of one commit. +Skip the recap when the diff has no behavior that a reviewer must trace. Examples are a version pin and its hashes, a typo or wording fix, a formatting-only change, a lockfile-only change, and the revert of one commit. A version pin skips even across a major version, because CI, not a sketch, covers a dependency's behavior. For a skipped PR, post nothing on GitHub. Put one line in your reply: From a20a448519cbfebb745f16c2e3f0b2ac6bec3a7b Mon Sep 17 00:00:00 2001 From: mdsmithaustin <15272014+mdsmithaustin@users.noreply.github.com> Date: Sat, 24 Oct 2026 00:06:06 -0600 Subject: [PATCH 3/8] no-mistakes(document): Point recap refresh guidance to shared task trigger --- README.md | 2 +- skills/poteto-mode/playbooks/opening-a-pr.md | 2 +- skills/pr-recap/SKILL.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4c974094..f0cc1f72 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ the full rules and playbooks live in [`skills/poteto-mode/SKILL.md`](./skills/po | [`/poteto-tdd`](./skills/poteto-tdd/SKILL.md) | you're fixing a bug and there's a cheap local test path. write the failing test first, then the fix. | | [`/benchmark-checklist`](./skills/benchmark-checklist/SKILL.md) | you ran a benchmark or measured a speedup or regression. vets the number (limiter, tuning, errors, repeat runs, end-to-end relevance) before you report or act on it. | | [`/no-comments`](./skills/no-comments/SKILL.md) | strip comments before review; spawns Comment Sicko, fixes accepted findings, offers encodings for claimed constraints. | -| [`/pr-recap`](./skills/pr-recap/SKILL.md) | (port addition) you opened or pushed to a pull request and want its reviewers to see the story first. posts one comment: two sentences on why and what, one hand-drawn sketch of the changed mechanism attached as an image, one line on what the PR does not prove, and a collapsed block with the risk, SHAs, and reading order. the sketch tool needs bun. Opening a PR runs it after each PR opens and after each push that changes the diff. its sources are credited in [`skills/pr-recap/CREDITS.md`](./skills/pr-recap/CREDITS.md). | +| [`/pr-recap`](./skills/pr-recap/SKILL.md) | (port addition) you opened or pushed to a pull request and want its reviewers to see the story first. posts one comment: two sentences on why and what, one hand-drawn sketch of the changed mechanism attached as an image, one line on what the PR does not prove, and a collapsed block with the risk, SHAs, and reading order. the sketch tool needs bun. [Opening a PR](./skills/poteto-mode/playbooks/opening-a-pr.md) invokes it for a new PR. [Task triggers](./skills/poteto-mode/references/task-triggers.md) govern post-push refresh timing. its sources are credited in [`skills/pr-recap/CREDITS.md`](./skills/pr-recap/CREDITS.md). | | [`/deslop`](./skills/deslop/SKILL.md) | (port addition) you're about to commit and the diff reads padded. removes narrating comments, guards on impossible states, dead compatibility paths, one-caller wrappers, and unrelated edits from the changed hunks, then reruns the touched tests. a comment its rules don't settle goes through `/no-comments` in the same pass, and the report says what that review did. code only; `/unslop` is for prose. | | [`/typescript-best-practices`](./skills/typescript-best-practices/SKILL.md) | you're reading or editing typescript. grounds the type-system-discipline principle in syntax. | | [`/figure-it-out`](./skills/figure-it-out/SKILL.md) | no bundled playbook fits. designs a rigorous, auditable playbook for the task. | diff --git a/skills/poteto-mode/playbooks/opening-a-pr.md b/skills/poteto-mode/playbooks/opening-a-pr.md index 956d1b1a..c013b0c0 100644 --- a/skills/poteto-mode/playbooks/opening-a-pr.md +++ b/skills/poteto-mode/playbooks/opening-a-pr.md @@ -78,7 +78,7 @@ The URL check below is for github.com attachments and uses its token. For Enterp For upstream-sync publication routes and draft requirements, follow [Syncing from upstream](../../../PORTING.md#syncing-from-upstream). -**Recap.** After a PR opens, and after each push that changes its diff, use the **pr-recap** skill. +**Recap.** After a PR opens, use the **pr-recap** skill. For post-push refresh timing, follow [task triggers](../references/task-triggers.md). **Babysit.** Opening a PR does not start a babysit. Post the URL and keep building. Finish the phase or stack first. Run a separate babysit pass only when the user asks for one after the whole stack exists. A babysit for each new PR stalls the build and spends checks on commits later waves restart. Push back when feedback drifts from intent. diff --git a/skills/pr-recap/SKILL.md b/skills/pr-recap/SKILL.md index 7e413a13..45f59fbe 100644 --- a/skills/pr-recap/SKILL.md +++ b/skills/pr-recap/SKILL.md @@ -17,7 +17,7 @@ For a skipped PR, post nothing on GitHub. Put one line in your reply: `Recap skipped for PR : , .` -Otherwise, write the recap. Write it again after each push that changes the diff. +Otherwise, write the recap. For post-push refresh timing, follow the shared [task trigger](../poteto-mode/references/task-triggers.md). ## Gather the facts From 7a10d79155e1e3ae1387a782a0c7287711c59b85 Mon Sep 17 00:00:00 2001 From: mdsmithaustin <15272014+mdsmithaustin@users.noreply.github.com> Date: Sat, 24 Oct 2026 00:36:20 -0600 Subject: [PATCH 4/8] fix(pr-recap): keep the refresh rule inside the skill pr-recap runs without poteto-mode on some hosts, so state the refresh timing in the skill itself instead of linking into poteto-mode. --- skills/pr-recap/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/pr-recap/SKILL.md b/skills/pr-recap/SKILL.md index 45f59fbe..3ca11068 100644 --- a/skills/pr-recap/SKILL.md +++ b/skills/pr-recap/SKILL.md @@ -17,7 +17,7 @@ For a skipped PR, post nothing on GitHub. Put one line in your reply: `Recap skipped for PR : , .` -Otherwise, write the recap. For post-push refresh timing, follow the shared [task trigger](../poteto-mode/references/task-triggers.md). +Otherwise, write the recap. Write it again after each push that changes the diff, once the new head is published and any gate run on it has reached its outcome. ## Gather the facts From cfe4ab6a7126d0f52f7c943ceb620bc3425e7737 Mon Sep 17 00:00:00 2001 From: mdsmithaustin <15272014+mdsmithaustin@users.noreply.github.com> Date: Sat, 24 Oct 2026 00:37:58 -0600 Subject: [PATCH 5/8] no-mistakes(document): Centralize recap refresh timing documentation --- docs/guide/06-verify-and-ship.md | 2 +- skills/pr-recap/SKILL.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/guide/06-verify-and-ship.md b/docs/guide/06-verify-and-ship.md index 2814f4d9..9d03880e 100644 --- a/docs/guide/06-verify-and-ship.md +++ b/docs/guide/06-verify-and-ship.md @@ -150,7 +150,7 @@ Babysit reports documentation readiness alongside forge status. A status-only re /poteto-mode open the pr. small ordered commits, evidence in the description. ``` -The [Opening a PR playbook](../../skills/poteto-mode/playbooks/opening-a-pr.md) works from a worktree, rebases the work into small ordered commits, cleans the diff, unslops the prose, and returns the PR link. Five narrow PRs beat one fat one, and stacked follow-ups beat a growing branch. The playbook also invokes [pr-recap](../../skills/pr-recap/SKILL.md), which defines when to post a reviewer recap and its comment format. +The [Opening a PR playbook](../../skills/poteto-mode/playbooks/opening-a-pr.md) works from a worktree, rebases the work into small ordered commits, cleans the diff, unslops the prose, and returns the PR link. Five narrow PRs beat one fat one, and stacked follow-ups beat a growing branch. The playbook also invokes [pr-recap](../../skills/pr-recap/SKILL.md), which defines recap eligibility and the comment format. [Task triggers](../../skills/poteto-mode/references/task-triggers.md) govern post-push refresh timing. When a repository gates pushes through [no-mistakes](https://kunchenguid.github.io/no-mistakes/), the agent publishes each branch and opens each PR through the no-mistakes pipeline, and restacks with `no-mistakes rerun` once a run ends. It pushes nothing else except work-in-progress snapshots under `refs/pstack/wip/`, or under the agent ref convention the repository names. When the gate is broken, it stops and reports. It pushes around the gate only after you say "bypass no-mistakes" in the session. An agent in a Docker sandbox commits and leaves the push to the host. Run `no-mistakes init` in your main checkout, from the exact path spelling that git reports, because on a case-insensitive disk no-mistakes matches the spelling `init` used. diff --git a/skills/pr-recap/SKILL.md b/skills/pr-recap/SKILL.md index 3ca11068..3941297c 100644 --- a/skills/pr-recap/SKILL.md +++ b/skills/pr-recap/SKILL.md @@ -17,7 +17,7 @@ For a skipped PR, post nothing on GitHub. Put one line in your reply: `Recap skipped for PR : , .` -Otherwise, write the recap. Write it again after each push that changes the diff, once the new head is published and any gate run on it has reached its outcome. +Otherwise, write the recap. For post-push refresh timing, follow [task triggers](../poteto-mode/references/task-triggers.md). ## Gather the facts From ab7dcbde7bee96cdf3e66fddc11dd4bb9c889a5d Mon Sep 17 00:00:00 2001 From: mdsmithaustin <15272014+mdsmithaustin@users.noreply.github.com> Date: Sat, 24 Oct 2026 00:38:36 -0600 Subject: [PATCH 6/8] no-mistakes(lint): Restore classified guide wording to fix lint --- docs/guide/06-verify-and-ship.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/06-verify-and-ship.md b/docs/guide/06-verify-and-ship.md index 9d03880e..2814f4d9 100644 --- a/docs/guide/06-verify-and-ship.md +++ b/docs/guide/06-verify-and-ship.md @@ -150,7 +150,7 @@ Babysit reports documentation readiness alongside forge status. A status-only re /poteto-mode open the pr. small ordered commits, evidence in the description. ``` -The [Opening a PR playbook](../../skills/poteto-mode/playbooks/opening-a-pr.md) works from a worktree, rebases the work into small ordered commits, cleans the diff, unslops the prose, and returns the PR link. Five narrow PRs beat one fat one, and stacked follow-ups beat a growing branch. The playbook also invokes [pr-recap](../../skills/pr-recap/SKILL.md), which defines recap eligibility and the comment format. [Task triggers](../../skills/poteto-mode/references/task-triggers.md) govern post-push refresh timing. +The [Opening a PR playbook](../../skills/poteto-mode/playbooks/opening-a-pr.md) works from a worktree, rebases the work into small ordered commits, cleans the diff, unslops the prose, and returns the PR link. Five narrow PRs beat one fat one, and stacked follow-ups beat a growing branch. The playbook also invokes [pr-recap](../../skills/pr-recap/SKILL.md), which defines when to post a reviewer recap and its comment format. When a repository gates pushes through [no-mistakes](https://kunchenguid.github.io/no-mistakes/), the agent publishes each branch and opens each PR through the no-mistakes pipeline, and restacks with `no-mistakes rerun` once a run ends. It pushes nothing else except work-in-progress snapshots under `refs/pstack/wip/`, or under the agent ref convention the repository names. When the gate is broken, it stops and reports. It pushes around the gate only after you say "bypass no-mistakes" in the session. An agent in a Docker sandbox commits and leaves the push to the host. Run `no-mistakes init` in your main checkout, from the exact path spelling that git reports, because on a case-insensitive disk no-mistakes matches the spelling `init` used. From f4fb342fe61b3c629d83d63182f873200b9aa8ac Mon Sep 17 00:00:00 2001 From: mdsmithaustin <15272014+mdsmithaustin@users.noreply.github.com> Date: Sat, 24 Oct 2026 00:47:28 -0600 Subject: [PATCH 7/8] fix(pr-recap): keep the refresh rule inside the skill pr-recap runs without poteto-mode on some hosts, so state the refresh timing in the skill itself instead of linking into poteto-mode. --- skills/pr-recap/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/pr-recap/SKILL.md b/skills/pr-recap/SKILL.md index 3941297c..3ca11068 100644 --- a/skills/pr-recap/SKILL.md +++ b/skills/pr-recap/SKILL.md @@ -17,7 +17,7 @@ For a skipped PR, post nothing on GitHub. Put one line in your reply: `Recap skipped for PR : , .` -Otherwise, write the recap. For post-push refresh timing, follow [task triggers](../poteto-mode/references/task-triggers.md). +Otherwise, write the recap. Write it again after each push that changes the diff, once the new head is published and any gate run on it has reached its outcome. ## Gather the facts From 1cbc13d7ee9dd467b291a371b0185711917fe58b Mon Sep 17 00:00:00 2001 From: mdsmithaustin <15272014+mdsmithaustin@users.noreply.github.com> Date: Sat, 24 Oct 2026 01:04:08 -0600 Subject: [PATCH 8/8] fix(pr-recap): name autopilot pushes, keep recaps from acknowledging bot reviews Name Autopilot owners' pushes in the refresh trigger. Tell recap writers never to link a bot review, because watch-pr and merge-gate read a trusted comment that links one as acknowledging it. Ground the major version skip in what a sketch can show, and record the trigger line as a port addition to keep on sync. --- PORTING.md | 2 +- skills/poteto-mode/references/task-triggers.md | 2 +- skills/pr-recap/SKILL.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/PORTING.md b/PORTING.md index 65ae874a..f0650686 100644 --- a/PORTING.md +++ b/PORTING.md @@ -46,7 +46,7 @@ Upstream is the source of truth for the workflows themselves. This file records - `worktree-audit.sh` and the [Worktree cleanup playbook](skills/poteto-mode/playbooks/worktree-cleanup.md) guard kept files, a port fix for #167 from 2026-10 that can be offered upstream. Steps 4 and 5 own the output contract and removal guard. On sync, preserve the script's NUL-delimited status parsing and explicit `--ignored=matching`, `--untracked-files=normal`, and `--ignore-submodules=none` flags. Preserve the nested `.git` scan, which reports a checkout even under an ignored build cache and skips one under an already reported kept directory. Preserve the `git ls-files -v` count of present skip-worktree and assume-unchanged files as `wip`, the case-insensitive fixed-string `rg -F -i` transcript match, and the `unreadable` result with bucket `hold-kept` when status, `ls-files`, or the scan fails. Preserve the porcelain worktree-path parsing with `sed -n 's/^worktree //p'` for paths with spaces. Keep the regression coverage in `tools/test_worktree_audit.py` and `WorktreeAuditPromises` in `evals/promises/test_scripts.py` when upstream rewrites either file, and keep the `ripgrep` install in the `lint.yml` skills job, without which most of `tools/test_worktree_audit.py` skips. Do not restore upstream's disposable `scratch:N` classification. - **documentation-impact** (`skills/documentation-impact/`) is a port addition for authoring and independently reviewing documentation affected by a change. Preserve its auto-invocable metadata, `tools/skill-trigger-cases.json` entry, README and guide entries, central Poteto completion trigger, and Babysit and Shipping readiness hooks during sync. Preserve its canonical author result rules. The pass covers local work without a PR and binds any required independent review verdict to the examined artifact and documentation context. Visual tools remain optional. Keep model selection and lifecycle orchestration in the calling workflow. -- **pr-recap** (`skills/pr-recap/`) is a port addition that posts one reviewer recap comment per pull request: a two-sentence story, one hand-drawn sketch rendered by the bundled Bun tool in `scripts/sketch` and attached with `gh`, a "Not covered" line, and a collapsed details block. `skills/pr-recap/CREDITS.md` carries the MIT notices for the six skills its rules adapt and the OFL notice for the vendored Excalifont subset. On sync, keep the skill, its trigger row, the **Recap** paragraph in Opening a PR, the sketch tests in `tests/skills/pr-recap/`, and their `lint.yml`, `tools/gate-check.sh`, and Dependabot entries. +- **pr-recap** (`skills/pr-recap/`) is a port addition that posts one reviewer recap comment per pull request: a two-sentence story, one hand-drawn sketch rendered by the bundled Bun tool in `scripts/sketch` and attached with `gh`, a "Not covered" line, and a collapsed details block. `skills/pr-recap/CREDITS.md` carries the MIT notices for the six skills its rules adapt and the OFL notice for the vendored Excalifont subset. On sync, keep the skill, its trigger row, the **Recap** paragraph in Opening a PR, the sketch tests in `tests/skills/pr-recap/`, and their `lint.yml`, `tools/gate-check.sh`, and Dependabot entries. Its refresh trigger in `skills/poteto-mode/references/task-triggers.md` is also a port addition, so keep that line when a sync rewrites the trigger list. - **statechart** (`skills/statechart/`) keeps upstream's scripts. Its tests live in `tests/skills/statechart/scripts/test/`, per the tests-out-of-`skills/` rule. Upstream runs them in a `validate-plugins.yml` step. Here they run in the `statechart script tests` step of the `lint.yml` skills job and in the `statechart node tests` line of the `gate-check.sh` test tier, both as `node --test` over `*.test.mjs`. CI uses the runner's preinstalled Node, because `tools/test_repository_hardening.py` bans `setup-node`. On sync, carry upstream changes to that step into both places. - **deslop** (`skills/deslop/`) is a port addition that replaces cursor-team-kit's `/deslop` with a pstack-owned code cleanup pass: nineteen numbered rules over the branch's changed hunks, a test run that proves behavior unchanged, and a report. `skills/deslop/CREDITS.md` ships inside the skill directory so the MIT notices travel with every `npx skills` copy. On sync, keep the skill, its trigger row in `tools/skill-trigger-cases.json`, the README and guide entries, poteto-mode's Before every commit or amend trigger, the deslop lines in Opening a PR, both autopilot playbooks, and the multi-phase checklist, step 5's hand-off to the no-comments skill and its Report line, and the ledger promises `deslop-available-for-code`, `opening-a-pr-deslops-diff`, `deslop-cleans-code-slop`, and `deslop-hands-unsettled-comments-to-no-comments`. Upstream never writes `skills/deslop/`; if it ever does, keep whichever version has the rule table. - **Gated publish** (port addition, 2026-10). In a repository that gates pushes through no-mistakes, Opening a PR's **Gated publish** section routes every publish, PR creation, restack, and retarget through the no-mistakes CLI, sends work-in-progress snapshots to `refs/pstack/wip/` or the repository's own agent ref convention, and hands sandbox work to the host. On sync, keep that section, the gated pointers in Babysit, Shipping, Autopilot-full, Autopilot-stack, Orchestrate, and the multi-phase checklist, the guide paragraph in `docs/guide/06-verify-and-ship.md`, the `no-mistakes` line in `tools/cross-suite-foreign.txt`, and the `opening-a-pr-gated-publish-*` ledger promises with the `open-pr-gated-run` case. diff --git a/skills/poteto-mode/references/task-triggers.md b/skills/poteto-mode/references/task-triggers.md index 46b0ad34..95b83bb2 100644 --- a/skills/poteto-mode/references/task-triggers.md +++ b/skills/poteto-mode/references/task-triggers.md @@ -18,7 +18,7 @@ Read this reference for the actions named by the mode entry, or when scope chang - Shipping UI / IDE / CLI → use the project's verification skill (`verify-`, generated by the **create-verification-skill** skill), which drives the real surface — browser, Electron, web UI, CLI, or TUI. For bug fixes, reproduce first on the same surface yourself. Hand to the user only under the narrow Bug fix step 1 exception. - Running a benchmark, measuring perf yourself, or reporting a speedup or regression you measured → use the **benchmark-checklist** skill before you report or act on the number. - Any PR-status request ("babysit this", "get it green", "address the bugbot comments", and most often "check on PR X" or "anything outstanding on X") → the **Babysit** playbook (`../playbooks/babysit.md`), not any built-in babysit skill your CLI ships, even when its description matches the same words. Never triggered by merely opening a PR. Declare its mode before polling. The playbook's step 1 owns the request-to-mode mapping. Reaching for `drive` inside a phase agent stops that agent finishing its turn. -- A push changed an open PR's diff, whether yours, a Babysit or Shipping wave, or a gate fix round → once the new head is published and any gate run has reached its outcome, use the **pr-recap** skill to refresh the PR's recap. +- A push changed an open PR's diff, whether yours, an Autopilot owner's, a Babysit or Shipping wave, or a gate fix round → once the new head is published and any gate run has reached its outcome, use the **pr-recap** skill to refresh the PR's recap. - Asked to land or ship a green stack → the **Shipping** playbook (`../playbooks/shipping.md`). Green is not safe. Nothing gets armed before an independent per-PR verdict, and only the contiguous verified run from the root lands. - Bugbot, Copilot code review, GitHub Advanced Security, or another automated security reviewer commented → skeptical posture. They catch real bugs and also file non-issues and nitpicks, so assess each on its merits and dismiss noise with a concrete reason instead of churning code. Triage fix / dismiss / ask per `bugbot-triage.md`. - Broken skill mid-task → fix it in its own PR. Don't block. Don't silently work around it. diff --git a/skills/pr-recap/SKILL.md b/skills/pr-recap/SKILL.md index 3ca11068..f2b476db 100644 --- a/skills/pr-recap/SKILL.md +++ b/skills/pr-recap/SKILL.md @@ -11,7 +11,7 @@ Run this workflow locally. The recap is one PR comment: GitHub Markdown plus one ## Decide whether the PR gets a recap -Skip the recap when the diff has no behavior that a reviewer must trace. Examples are a version pin and its hashes, a typo or wording fix, a formatting-only change, a lockfile-only change, and the revert of one commit. A version pin skips even across a major version, because CI, not a sketch, covers a dependency's behavior. +Skip the recap when the diff has no behavior that a reviewer must trace. Examples are a version pin and its hashes, a typo or wording fix, a formatting-only change, a lockfile-only change, and the revert of one commit. A version pin skips even across a major version, because a pin has no mechanism to sketch. For a skipped PR, post nothing on GitHub. Put one line in your reply: @@ -64,7 +64,7 @@ When your runtime cannot run Bun, or cannot show you an image, skip the sketch. 1. List each factual sentence in the recap and each label in the sketch. 2. Check each one against a hunk of the diff or a SHA-pinned line. Mark it verified, corrected, unsupported, or unverifiable. 3. Fix each corrected claim. Delete each unsupported or unverifiable claim, or rewrite it as a guess. Re-render the sketch if a label changed. -4. Check each link. Pin source links to the recorded head SHA. Review and CI links must point at records on the PR, with CI runs on that head. +4. Check each link. Pin source links to the recorded head SHA. Review and CI links must point at records on the PR, with CI runs on that head. Never link a bot's review, because watch-pr and merge-gate read a trusted comment that links one as acknowledging its findings. 5. Read `headRefOid` again. If it moved, rebuild the recap from the new diff. Keep the marks in your notes, not in the comment. Report the counts in your reply.