diff --git a/captain/SKILL.md b/captain/SKILL.md index b2cae3996..e40d72c10 100644 --- a/captain/SKILL.md +++ b/captain/SKILL.md @@ -374,10 +374,8 @@ lane builds only after the owner's word is answered into the run and it reports New scope taken on part-way gets its own plan. Read-only lanes, the flaky pass's repairs, slot stamps, CHANGELOG resolves, cap re-pins under a grant, S1 emergencies (broken install or upgrade, red main, a security bug) and fixes from an already-diagnosed, audited problem -list are exempt. Any other bug fix gets no plan review (`gstack-autoplan next --kind fix`, -R65), and its PR carries the proof: a repro on current main or a failing test written -first. A feature gets the lean run (`--kind feature`): one reviewer reading the plan and -the draft code together. The brief a +list are exempt. Other bug fixes skip plan review (`--kind fix`, R65) but carry their +proof; features get the lean run (`--kind feature`). The brief a controller hands a lane, with its `Plan: required | approved | exempt` line, is `captain/templates/brief.md`; the rule is `docs/captain.md` (Plan before build). diff --git a/captain/SKILL.md.tmpl b/captain/SKILL.md.tmpl index 485b5edf5..bf68d1180 100644 --- a/captain/SKILL.md.tmpl +++ b/captain/SKILL.md.tmpl @@ -302,10 +302,8 @@ lane builds only after the owner's word is answered into the run and it reports New scope taken on part-way gets its own plan. Read-only lanes, the flaky pass's repairs, slot stamps, CHANGELOG resolves, cap re-pins under a grant, S1 emergencies (broken install or upgrade, red main, a security bug) and fixes from an already-diagnosed, audited problem -list are exempt. Any other bug fix gets no plan review (`gstack-autoplan next --kind fix`, -R65), and its PR carries the proof: a repro on current main or a failing test written -first. A feature gets the lean run (`--kind feature`): one reviewer reading the plan and -the draft code together. The brief a +list are exempt. Other bug fixes skip plan review (`--kind fix`, R65) but carry their +proof; features get the lean run (`--kind feature`). The brief a controller hands a lane, with its `Plan: required | approved | exempt` line, is `captain/templates/brief.md`; the rule is `docs/captain.md` (Plan before build). diff --git a/capy/skill/gstack/SKILL.md b/capy/skill/gstack/SKILL.md index a00712271..3fe6230c5 100644 --- a/capy/skill/gstack/SKILL.md +++ b/capy/skill/gstack/SKILL.md @@ -52,13 +52,13 @@ Token caps on /ship: pass a brief's cap as `--token-cap `. /ship reads `cost. Every Capy thread that uses gstack follows these for new work, under a Captain or on its own. The rule in full is `docs/captain.md`, "Plan before build"; the lane side is section 3 of captain.md in this folder. -- **Plan first.** Run `/autoplan` on new functionality right after the install check. A bug fix needs none (`gstack-autoplan next --kind fix`), just a repro or failing test in the PR. A feature gets the lean run (the Capy default), one reviewer over plan and draft code; `--full` adds every phase. +- **Plan first.** Run `/autoplan` on new functionality right after the install check. The lean run (the Capy default) is one reviewer over plan and draft code; `--full` adds every phase. - **ELI5, then the word.** Send the plan and gate to the person, or the Captain, in plain language: `gstack-owner-brief render --captain --out --captain-name ""`, its choices as lettered lines in the ask format (`docs/captain.md`) and "do it" taking every recommendation at full scope. Build only after their word is answered into the run and it reports `APPROVED`; then `gstack-approvals import --autoplan --by ""`. - **/ship before ready.** Run /ship at the final pushed head before a PR is called ready; `SHIP_RECEIPT: pr= head=` must name that head, and a later push needs a new /ship. The review inside /ship, like the autoplan, is sized to the change. - **Stop a finished /ship subagent.** When a /ship subagent opens its PR, the parent subscribes to that PR with Capy's subscribe tool and keeps that one subscription until the PR merges or closes, re-subscribing if the watch expires, then cancels it. Once the subscription is in place and READY arrives, the parent stops the subagent and owns the PR from then on, slot stamp, re-READY and receipt carry included. A stopped /ship subagent woken by a check, review or merge notice, not by its parent, reports one line naming what woke it, its pin and the PR head (`gh pr view --json headRefOid --jq .headRefOid`) and ends the turn without acting, whether or not the head moved. A message from its parent is an instruction it carries out. - **No merge without the owner's word.** A thread never merges on its own; under a Captain the controller merges on a recorded standing approval, and a thread with no Captain asks the person. -Exempt from the plan step: read-only work, the daily flaky pass's repairs, slot stamps, CHANGELOG-only resolves, cap re-pins under a written grant, S1 emergencies (a broken install or upgrade, a red main, a security bug) and fixes from an already-diagnosed, audited problem list. Any other bug fix gets no plan review (`gstack-autoplan next --kind fix`, R65), and its PR carries the proof: a repro on current main or a failing test written first. A feature gets the lean run (`--kind feature`): one reviewer reading the plan and the draft code together. +Exempt from the plan step: read-only work, the daily flaky pass's repairs, slot stamps, CHANGELOG-only resolves, cap re-pins under a written grant, S1 emergencies (a broken install or upgrade, a red main, a security bug) and fixes from an already-diagnosed, audited problem list. Other bug fixes skip plan review (`--kind fix`, R65) but carry their proof; features get the lean run (`--kind feature`). ## Working under a Captain diff --git a/docs/captain.md b/docs/captain.md index 0dae70094..dd40fb2bb 100644 --- a/docs/captain.md +++ b/docs/captain.md @@ -136,8 +136,7 @@ alone is not an ask. A lane that builds something plans first. Its first act after the session-start install check, before any product code, is a `/autoplan` run on its brief, sized to the work. The phases run in order, CEO, then design, then DX, then eng, with design and DX only when the -scope has them, and a fix the exemptions below don't cover gets a short run (`--no-ui --no-dx --max-rounds 1`, with -`--estimate-usd` set so a small `--spend-cap` still seats its attempts), not no run. On Capy the +scope has them. A bug fix gets no plan review and a feature gets the lean run (both below). On Capy the unattended loop is `autoplan/DRIVER.md` in the gstack checkout. New functionality a lane takes on part-way, scope its brief did not name, gets its own plan and its own ask before the lane builds it. In the rules file this is rule 24 of the diff --git a/test/captain-skill.test.ts b/test/captain-skill.test.ts index a3f758f8b..8eb9ee154 100644 --- a/test/captain-skill.test.ts +++ b/test/captain-skill.test.ts @@ -86,7 +86,7 @@ describe('/captain skill', () => { const text = read(rel).replace(/\s+/g, ' '); expect(text, rel).toMatch(/S1 emergenc(?:y|ies) \(a? ?broken install or upgrade, a? ?red main, a security bug\)/); expect(text, rel).toMatch(/already[- ]diagnosed,? (?:and )?audited problem list|problem list that was already diagnosed and audited/); - expect(text, rel).toContain('gstack-autoplan next --kind fix'); + expect(text, rel).toContain('--kind fix'); expect(text, rel).toContain('--kind feature'); expect(text, rel).not.toContain('one-round, eng-only plan'); }