Done
1. Full verify
Run the full tier now: verify-full when present, otherwise verify. Quote
the shortest decisive line.
- Red → you are not here yet. Return to the loop.
- No verify command exists → use
/ready; do not claim done.
- It must actually have run now, not earlier in the session.
2. Skeptic diff pass
Re-read the final diff as a hostile reviewer. Check:
- Edge cases: empty, zero, unicode, boundaries, concurrency.
- Error paths: failures, missing files, dropped network, cleanup.
- Changed contracts: APIs, formats, schema, config, old consumers.
- Accidental content: unrelated files, debug code, secrets, loose pins.
- Test honesty: would changed tests fail if implementation is reverted?
When applicable run
<this-skill-dir>/scripts/revert-probe.sh "<verify-cmd>", preferring a command
aimed at the changed tests. Exit 2 is UNASSESSABLE: report it as no proof, not
as a pass. Weakened checks are findings. Fix findings and repeat full verify.
3. Risk-routed independent review
Choose focus:
security: auth, permissions, input, paths, commands, secrets, endpoints.
contract: public API/CLI, schema, config, migration, consumers.
general: money, concurrency, resources, or a wide uncertain diff.
Prefer the harness's built-in review command; otherwise use one reviewer agent.
If security and contract both apply, request two independent focused passes.
The reviewer reads callers and consumers.
Fix and re-verify every blocker or major, unless the user explicitly
accepts the named risk. A minor may be deferred only when reported. A small,
well-understood diff with no routed risk may stop after the skeptic pass.
4. Scope check
Re-read the original request. Every item is delivered, or named as left out with
a reason. Never drop scope silently. A bus task you claimed through
/lucia-bus must be completed or blocked, with its result published,
unless the user cancelled it.
5. Lessons
For a dead end, footgun, or disproved approach, run /retro. If unfinished
state must transfer, use /lucia-relay instead.
6. Report
Done: <what changed, one line>
Proof: <verify command> → <decisive line>
Not covered: <verification gap>
Left out: <scope omitted + reason, or nothing>
No hedging: report done only after every step passes. Machine output mirrors the
same facts; blocked output uses "status": "blocked" and its failing line.
{
"status": "done",
"verify": {"command": "./test.sh", "exit_code": 0, "decisive_line": "PASS all checks green"},
"not_covered": "<verification gap>",
"left_out": "nothing"
}
1---2name: done3description: Run the closeout ritual before handing back non-trivial work; full verification, revert-probe honesty, independent review, and scope reporting. Use before declaring completion, opening a PR, wrapping up a change, or "ปิดงาน".4---56# Done78## 1. Full verify910Run the **full** tier now: `verify-full` when present, otherwise verify. Quote11the shortest decisive line.1213- Red → you are not here yet. Return to the loop.14- No verify command exists → use `/ready`; do not claim done.15- It must actually have run **now**, not earlier in the session.1617## 2. Skeptic diff pass1819Re-read the final diff as a hostile reviewer. Check:2021- **Edge cases**: empty, zero, unicode, boundaries, concurrency.22- **Error paths**: failures, missing files, dropped network, cleanup.23- **Changed contracts**: APIs, formats, schema, config, old consumers.24- **Accidental content**: unrelated files, debug code, secrets, loose pins.25- **Test honesty**: would changed tests fail if implementation is reverted?2627When applicable run28`<this-skill-dir>/scripts/revert-probe.sh "<verify-cmd>"`, preferring a command29aimed at the changed tests. Exit 2 is UNASSESSABLE: report it as no proof, not30as a pass. Weakened checks are findings. Fix findings and repeat full verify.3132## 3. Risk-routed independent review3334Choose focus:3536- `security`: auth, permissions, input, paths, commands, secrets, endpoints.37- `contract`: public API/CLI, schema, config, migration, consumers.38- `general`: money, concurrency, resources, or a wide uncertain diff.3940Prefer the harness's built-in review command; otherwise use one reviewer agent.41If security and contract both apply, request two independent focused passes.42The reviewer reads callers and consumers.4344Fix and re-verify every `blocker` or `major`, unless the user explicitly45accepts the named risk. A `minor` may be deferred only when reported. A small,46well-understood diff with no routed risk may stop after the skeptic pass.4748## 4. Scope check4950Re-read the original request. Every item is delivered, or named as left out with51a reason. Never drop scope silently. A bus task you claimed through52`/lucia-bus` must be `completed` or `blocked`, with its result published,53unless the user cancelled it.5455## 5. Lessons5657For a dead end, footgun, or disproved approach, run `/retro`. If unfinished58state must transfer, use `/lucia-relay` instead.5960## 6. Report6162```63Done: <what changed, one line>64Proof: <verify command> → <decisive line>65Not covered: <verification gap>66Left out: <scope omitted + reason, or nothing>67```6869No hedging: report done only after every step passes. Machine output mirrors the70same facts; blocked output uses `"status": "blocked"` and its failing line.7172```json73{74 "status": "done",75 "verify": {"command": "./test.sh", "exit_code": 0, "decisive_line": "PASS all checks green"},76 "not_covered": "<verification gap>",77 "left_out": "nothing"78}79```