diff --git a/docs/plans/2026-10-08-approve-only-what-needs-judging.md b/docs/plans/2026-10-08-approve-only-what-needs-judging.md new file mode 100644 index 0000000..6a2c8ba --- /dev/null +++ b/docs/plans/2026-10-08-approve-only-what-needs-judging.md @@ -0,0 +1,7 @@ +--- +canonical: decisions:docs/plans/2026-10-08-approve-only-what-needs-judging.md +phases: [3] +status: active +--- +Part of [Approve only what needs judging](https://github.com/fredericrous/decisions/blob/feat/approve-only-what-needs-judging/docs/plans/2026-10-08-approve-only-what-needs-judging.md). +This repository carries Phase 3: the worktree-task skill (the `question_prefix`, the `## Preview` evidence path, a resumed Delta review) and the plan template's `## Preview` section, after bringing the skill's source in line with the deployed copy. diff --git a/dot_claude/skills/worktree-task/SKILL.md b/dot_claude/skills/worktree-task/SKILL.md index fa9fa92..1f36c54 100644 --- a/dot_claude/skills/worktree-task/SKILL.md +++ b/dot_claude/skills/worktree-task/SKILL.md @@ -201,7 +201,10 @@ below names one of them. named deliberate: continue to F5. A fix that changes code returns to F1, and the **second** pass through F4b is the `Delta`: a fresh block for the new tree, `Delta.`, the round-1 findings, the diff since, - "answer resolved / not resolved / new blocker for each". There is no + "answer resolved / not resolved / new blocker for each". The Delta may + resume the same reviewer with `SendMessage` (the block first in the + message) instead of a fresh launch: the hook counts a resumed round on + its new tree (amont-agent ≥ 2.30). There is no third pass: a `rework` that survives the Delta goes to the person with a **marked** AskUserQuestion — its text starts with `[implementation-review @]` (the full id from @@ -219,9 +222,23 @@ below names one of them. `git ls-remote origin refs/heads/`, and open ONE pull request whose body carries the verification record. - **F7. UI push** (the push carries interface changes in a repository with a - user interface; fleet ADR-0023, `work.preview-is-guided`). The person works + user interface; fleet ADR-0028, `work.preview-unless-planned-evidence`, + `work.preview-is-guided`). The person works on several projects at once and will not remember where this one stood. **Never ask for an approval without a guide.** + 0. **Planned evidence** (ADR-0028, `work.preview-unless-planned-evidence`). + If the plan approved through ExitPlanMode has, in its body, a + `## Preview` section whose first non-empty line starts with + `evidence:`, do steps 1–3 (server, screenshots, guide), compare every + existing screen against the base, and put the + guide, screenshots and comparison in the PR body. Ask nothing, then push + as in F6: the hook passes the push and journals `evidence`. If the + comparison shows a visible change the plan did not decide, the + exemption lapses: run steps 1–7 as usual. The hook still holds the push, + so ask as usual, when the section was added after the plan's first + commit, the branch carries only a pointer plan (`canonical:`), the plan + landed on main before the branch, the base ref is missing, or the push + touches screens drawn from a picked mockup. 1. Dependencies are already there from the Start bootstrap; re-run that step only if the rebase in F1 changed the lockfile. Start the dev server on a free port and keep it up until the person answers. @@ -239,22 +256,23 @@ below names one of them. - Reference; - Already checked. Write it for someone who has not seen this session. - 4. **Register it**, as its own foreground command (a leading - `cd &&` is fine; copying images next to the guide is a - separate command before it, never chained): + 4. **Register it** in the foreground, as the last command of its Bash call + (anything joined by `&&` or `;` may come before it; never pipe it, + redirect it or put it in `$(…)`): `amont-agent preview register --url --guide --open` It refuses an incomplete guide. `--open` opens the rendered guide page in the person's browser. - Its JSON prints `label` (and `aliases`): the question in step 6 names - one of them, or the answer approves nothing. A register that did not + Its JSON prints `question_prefix` (`[preview ]