to-acceptance-plan
Create the durable behavioral and interface contract at
docs/acceptance/<slug>.md, then stop at the delivery-specific handoff: a Split plan PR or
a prepared Combined branch.
Contract
Claude Code's disable-model-invocation: true prevents model-initiated invocation in that
host. It does not protect mecatl or any other harness. Another harness must require an
explicit user request before creating a worktree or branch, committing, pushing, or opening
a PR. Without that request, draft and report only; do not perform those side effects.
- Before classification or drafting, load
references/WORK-CLASSIFICATION.md. Spike and Routine
bypass this skill. Continue only for Bounded or Architectural work; if evidence is
insufficient, escalate or stop for human-authorized Spike work rather than silently
downgrading.
- Use the eventual delivery branch in exactly one validated writable worktree. Split uses a
dedicated
plan/<slug> branch; Combined uses the eventual combined implementation branch.
Never write in the primary checkout when operating from an isolated worktree.
- Start at
draft; new and materially amended plans use exact
**Contract:** human-reviewed/v2 metadata plus a concise
**Work classification:** Bounded|Architectural — <rationale>. Existing v1 plans remain
valid until materially amended. A Bounded plan records
**Decision record:** None — <substantive rationale>; an Architectural plan links the new
or superseding ADR for its genuinely durable decision. Existing ADRs may still be cited.
Never create an ADR merely to narrate Routine or Bounded work. Unresolved human judgments
about material behavior or interfaces are unchecked items in ## Human decisions and keep
the plan draft.
- Set
proposed only when ## Human decisions declares None — <rationale> or every
decision is checked and records — Decision: ...; record whether the path is Split or
Combined.
- Default to
Split. Combined is a narrow exception for a compact one-task, exactly
one-### Scenario change only when it declares exact **Expected tasks:** 1 metadata,
a non-placeholder **Combined rationale:** explaining why separate plan review adds no
value, and gRPC/protobuf, exported Go APIs/interfaces, tool schemas, CLI/config,
events/persistence, and security/authority each begin None — <rationale>;
compatibility/migration may describe workflow migration. A workflow-only meta-change may
instead treat repository process documents and skills as the interface reviewed in that
same PR.
- Split opens a dedicated Plan / Interface PR and stops. Combined opens no plan PR:
/plan-orchestrate must be explicitly invoked to add implementation on the same branch
and open the sole Combined PR.
- Never implement code, merge, or use a closing issue keyword.
Authoring
Read AGENTS.md, docs/architecture.md, docs/acceptance/README.md, relevant ADRs,
and docs/design/IMPLEMENTATION-NOTES.md when applicable.
Draft from
references/ACCEPTANCE-PLAN-TEMPLATE.md.
Keep focused work compact. Every scenario has numbered AC<n>.<m>: assertions,
non-empty verify: lines, and at least one repository citation.
Complete mandatory ## Human decisions with exactly one machine-readable shape:
None — <rationale>, or checklist items where open decisions are - [ ] ... and resolved
decisions are - [x] ... — Decision: .... Place every material behavior/interface
judgment there; do not hide one as a deferred decision. Any unchecked item keeps the plan
draft.
Complete ## Interface contract using all seven exact canonical labels from the
template: gRPC/protobuf, exported Go APIs, tool schemas, CLI/config,
events/persistence, security/authority, and compatibility/migration. Every category
needs non-placeholder content; use None — <rationale> only when genuinely absent.
Public or material decisions may not be deferred to implementation.
Apply the declared decision-record outcome. Create a new ADR only for the
Architectural decision named by the plan; update living docs where behavior changes. Add
the plan to docs/acceptance/README.md.
Run:
bash .claude/skills/to-acceptance-plan/scripts/check-acceptance-plan.sh docs/acceptance/<slug>.md
bash .claude/skills/to-acceptance-plan/scripts/check-acceptance-plan-test.sh
task docs
The regression fixture script is also wired through task docs:check and therefore
task docs; the explicit command makes its authoring-time coverage visible.
Run one advisory devils-advocate pass and at most two relevant specialist spot-checks.
Fold clear corrections in; batch material open decisions for the human. Re-run checks.
Amendment mode
Use amendment mode only after a blocked-contract-drift handoff and a separate, explicit
user authorization to invoke /to-acceptance-plan for that amendment. The orchestrator
cannot authorize or perform it. Amend the durable plan and related decision/task docs using
the Split Plan / Interface PR flow regardless of the original delivery mode: run the
checker and docs gates, open the amendment PR, then stop for human review. Merging the amended
Plan / Interface PR is the approval event; no separate status-line edit is required. Report the
amendment PR and full merged commit so /plan-orchestrate can prove approval by git ancestry,
correct a lagging proposed label if needed, record both in run.md, establish the required
ancestry, regenerate decomposition and briefs, and only then resume dispatch. The normal side-effect authority
rules above still apply; amendment mode does not imply permission to branch, commit, push,
or open a PR.
Worktree ownership record
Before any permitted branch/worktree side effect, create
.scratch/orchestrate/<slug>/run.md and record the integration/plan worktree path, owner
classification (harness-owned-native, orchestrator-created-disposable, or
primary-current where applicable), branch, creation baseline, and cleanup eligibility.
On resume, verify the record against git worktree list. Only an explicitly
orchestrator-created-disposable worktree that completed successfully may be eligible for
removal; never infer ownership from its path.
Delivery handoff
For Split, explicitly stage only the plan/interface docs and generated docs, commit on
plan/<slug>, push that branch, and open a PR with stage Plan / Interface. Use
Relates to #N or Tracking: #N as ordinary text. GitHub has no Related-to keyword: do
not use closing keywords or sidebar-link this PR as the issue-closing PR. Report the PR
URL, branch, worktree, checker result, and docs result, then STOP. Merging the PR is the
approval event — no separate status-line edit is required before merge;
/plan-orchestrate proves approval by git ancestry and corrects the label if it lags.
For Combined, prepare the proposed plan on the eventual combined implementation branch
and STOP without pushing or opening a separate plan PR. If the explicit user request
authorizes a local commit, commit the plan there; otherwise leave it as the recorded handoff
and let the explicitly invoked orchestrator make the first combined candidate commit before
dispatch. The user must explicitly invoke /plan-orchestrate to add the one-task
implementation, verify the combined candidate, and open the sole Combined PR.
1---2name: to-acceptance-plan3description: Turn Bounded or Architectural work into a concise scenario-first acceptance plan with exact interfaces and a decision-record outcome, then hand off at the selected Split or Combined checkpoint. Stops before implementation or orchestration. NOT for Spike, Routine, or task decomposition.4---56# to-acceptance-plan78Create the durable behavioral and interface contract at9`docs/acceptance/<slug>.md`, then stop at the delivery-specific handoff: a Split plan PR or10a prepared Combined branch.1112## Contract1314Claude Code's `disable-model-invocation: true` prevents model-initiated invocation in that15host. It does not protect mecatl or any other harness. Another harness must require an16explicit user request before creating a worktree or branch, committing, pushing, or opening17a PR. Without that request, draft and report only; do not perform those side effects.1819- Before classification or drafting, load20 [`references/WORK-CLASSIFICATION.md`](references/WORK-CLASSIFICATION.md). Spike and Routine21 bypass this skill. Continue only for Bounded or Architectural work; if evidence is22 insufficient, escalate or stop for human-authorized Spike work rather than silently23 downgrading.24- Use the eventual delivery branch in exactly one validated writable worktree. Split uses a25 dedicated `plan/<slug>` branch; Combined uses the eventual combined implementation branch.26 Never write in the primary checkout when operating from an isolated worktree.27- Start at `draft`; new and materially amended plans use exact28 `**Contract:** human-reviewed/v2` metadata plus a concise29 `**Work classification:** Bounded|Architectural — <rationale>`. Existing v1 plans remain30 valid until materially amended. A Bounded plan records31 `**Decision record:** None — <substantive rationale>`; an Architectural plan links the new32 or superseding ADR for its genuinely durable decision. Existing ADRs may still be cited.33 Never create an ADR merely to narrate Routine or Bounded work. Unresolved human judgments34 about material behavior or interfaces are unchecked items in `## Human decisions` and keep35 the plan draft.36- Set `proposed` only when `## Human decisions` declares `None — <rationale>` or every37 decision is checked and records `— Decision: ...`; record whether the path is `Split` or38 `Combined`.39- Default to `Split`. `Combined` is a narrow exception for a compact one-task, exactly40 one-`### Scenario` change only when it declares exact `**Expected tasks:** 1` metadata,41 a non-placeholder `**Combined rationale:**` explaining why separate plan review adds no42 value, and gRPC/protobuf, exported Go APIs/interfaces, tool schemas, CLI/config,43 events/persistence, and security/authority each begin `None — <rationale>`;44 compatibility/migration may describe workflow migration. A workflow-only meta-change may45 instead treat repository process documents and skills as the interface reviewed in that46 same PR.47- Split opens a dedicated Plan / Interface PR and stops. Combined opens no plan PR:48 `/plan-orchestrate` must be explicitly invoked to add implementation on the same branch49 and open the sole Combined PR.50- Never implement code, merge, or use a closing issue keyword.5152## Authoring53541. Read `AGENTS.md`, `docs/architecture.md`, `docs/acceptance/README.md`, relevant ADRs,55 and `docs/design/IMPLEMENTATION-NOTES.md` when applicable.562. Draft from57 [`references/ACCEPTANCE-PLAN-TEMPLATE.md`](references/ACCEPTANCE-PLAN-TEMPLATE.md).58 Keep focused work compact. Every scenario has numbered `AC<n>.<m>:` assertions,59 non-empty `verify:` lines, and at least one repository citation.603. Complete mandatory `## Human decisions` with exactly one machine-readable shape:61 `None — <rationale>`, or checklist items where open decisions are `- [ ] ...` and resolved62 decisions are `- [x] ... — Decision: ...`. Place every material behavior/interface63 judgment there; do not hide one as a deferred decision. Any unchecked item keeps the plan64 `draft`.654. Complete `## Interface contract` using all seven exact canonical labels from the66 template: gRPC/protobuf, exported Go APIs, tool schemas, CLI/config,67 events/persistence, security/authority, and compatibility/migration. Every category68 needs non-placeholder content; use `None — <rationale>` only when genuinely absent.69 Public or material decisions may not be deferred to implementation.705. Apply the declared decision-record outcome. Create a new ADR only for the71 Architectural decision named by the plan; update living docs where behavior changes. Add72 the plan to `docs/acceptance/README.md`.736. Run:7475 ```sh76 bash .claude/skills/to-acceptance-plan/scripts/check-acceptance-plan.sh docs/acceptance/<slug>.md77 bash .claude/skills/to-acceptance-plan/scripts/check-acceptance-plan-test.sh78 task docs79 ```8081 The regression fixture script is also wired through `task docs:check` and therefore82 `task docs`; the explicit command makes its authoring-time coverage visible.83847. Run one advisory `devils-advocate` pass and at most two relevant specialist spot-checks.85 Fold clear corrections in; batch material open decisions for the human. Re-run checks.8687## Amendment mode8889Use amendment mode only after a `blocked-contract-drift` handoff and a separate, explicit90user authorization to invoke `/to-acceptance-plan` for that amendment. The orchestrator91cannot authorize or perform it. Amend the durable plan and related decision/task docs using92the **Split** Plan / Interface PR flow regardless of the original delivery mode: run the93checker and docs gates, open the amendment PR, then stop for human review. Merging the amended94Plan / Interface PR is the approval event; no separate status-line edit is required. Report the95amendment PR and full merged commit so `/plan-orchestrate` can prove approval by git ancestry,96correct a lagging `proposed` label if needed, record both in `run.md`, establish the required97ancestry, regenerate decomposition and briefs, and only then resume dispatch. The normal side-effect authority98rules above still apply; amendment mode does not imply permission to branch, commit, push,99or open a PR.100101## Worktree ownership record102103Before any permitted branch/worktree side effect, create104`.scratch/orchestrate/<slug>/run.md` and record the integration/plan worktree path, owner105classification (`harness-owned-native`, `orchestrator-created-disposable`, or106`primary-current` where applicable), branch, creation baseline, and cleanup eligibility.107On resume, verify the record against `git worktree list`. Only an explicitly108`orchestrator-created-disposable` worktree that completed successfully may be eligible for109removal; never infer ownership from its path.110111## Delivery handoff112113For **Split**, explicitly stage only the plan/interface docs and generated docs, commit on114`plan/<slug>`, push that branch, and open a PR with stage **Plan / Interface**. Use115`Relates to #N` or `Tracking: #N` as ordinary text. GitHub has no `Related-to` keyword: do116not use closing keywords or sidebar-link this PR as the issue-closing PR. Report the PR117URL, branch, worktree, checker result, and docs result, then **STOP**. Merging the PR is the118approval event — no separate status-line edit is required before merge;119`/plan-orchestrate` proves approval by git ancestry and corrects the label if it lags.120121For **Combined**, prepare the proposed plan on the eventual combined implementation branch122and **STOP without pushing or opening a separate plan PR**. If the explicit user request123authorizes a local commit, commit the plan there; otherwise leave it as the recorded handoff124and let the explicitly invoked orchestrator make the first combined candidate commit before125dispatch. The user must explicitly invoke `/plan-orchestrate` to add the one-task126implementation, verify the combined candidate, and open the sole **Combined** PR.