Review Task Done
Run this before saying a coding task is done.
Command
metareview review task-done <task-id-or-path> [--base <ref>] [--previous-run <run-id>] [--max-attempts <n>] [--evidence <path>] [--shard-result <path>]... [--cross-shard-result <path>]
Use --base for the reviewed diff, --previous-run after fixes, and --evidence for validation output. Use --max-attempts only on the first run; it sets the chain budget (default 3), with the first blocker run as attempt 1.
Prefer structured evidence receipts:
go run ./cmd/metareview evidence run -- go test ./...
Freeform evidence remains accepted as a fallback, but receipts preserve command, exit code, timestamps, and output hashes.
Workflow
- Run the command from the repository root.
- Exit handling:
0means verifyPASS/PASS_ADVISORYwith zero blockers;1with a review path means follow that log; nonzero without a path means read stderr. NEEDS_REVISION: fix blockers and re-run with--previous-run <run-id>.ESCALATED: stop same-target retries; human must narrow, split, or redesign the target.
The review updates .metareview/findings.jsonl, .metareview/runs.jsonl, docs/metareview/FINDINGS.md, and Markdown review/context artifacts.
Sharded review
When the branch diff exceeds the review context limit, the gate returns NEEDS_REVISION with the
context-risk blocker and writes one prompt pack per shard under
.metareview/shards/<scope>/<target-slug>/<planHash>/, plus a plan.json naming every shard, its
hash, and resultsDir.
- Set
--max-attemptson the first run: a sharded gate costs a plan run, a results run, and one run per fix round. Mid-chain the flag is ignored. - Read
plan.json. Dispatch one subagent pershard-<id>.mdagainstrubrics/task-done-review-rubric.md, and one overcross-shard.mdwhen there is more than one shard. - Write one result per shard into
resultsDirasshard-<id>.<shardHash>.result.json, andcross-shard.<planHash>.result.jsonfor a multi-shard plan. Each pack states the exact contract.--shard-result(repeatable) and--cross-shard-result(once: a plan has one cross-shard result) pass a file in from elsewhere.--cross-shard-resultreplaces a committed one, since a plan holds a single cross-shard slot;--shard-resultdoes not — an explicit path is ingested alongside theresultsDirlisting, so passing a shard whose result is already committed raises aduplicate shard resultblocker. Replace the committed file instead. - Re-run with
--previous-run <run-id>. With every shard covered and the aggregate passing, the context-risk blocker becomes advisory and the lints run over the whole branch diff. - Commit the results in
docs/metareview/shards/with the review log. Editing a file changes only its own bucket's shards, unless the total branch diff crosses a bits boundary, which re-cuts every shard in the plan. After a fix round, re-review only the affected shards and the cross-shard result; leave the rest.
Local content is in no pack. Commit or remove staged, worktree and untracked files first — an
untracked file over 4,000 bytes raises UNTRACKED_TRUNCATED, which shard results can never satisfy.