# Two-comment workflow examples (#507) Paired `[CONTROLLER HANDOFF]` + `[THREAD STATE LEDGER]` comments for Gitea threads. See `thread_state_ledger_examples.py` for machine-checked fixtures. ## Approved review posted **Handoff** (detailed): identity, worktree, validation commands, mutation ledger with `gitea_submit_pr_review → APPROVED review posted to Gitea`. **Ledger** (concise): ```markdown [THREAD STATE LEDGER] PR #487 — APPROVED review posted to Gitea What is true now: - PR state: open - Server-side decision state: APPROVED review posted to Gitea - Local verdict/state: APPROVE verdict prepared locally What is blocked: - Blocker classification: no blocker Who/what acts next: - Next actor: merger - Required action: merge on explicit operator command - Do not do: re-post APPROVE ``` ## Approve validated locally but blocked before posting Ledger must show `no server-side state changed` under server-side decision state and `APPROVE verdict prepared locally` under local verdict/state. ## Environment / tooling blocker Ledger blocker classification: `environment/tooling blocker`. Mutation ledger: `none — no server-side state changed`. ## Stale head blocker Ledger: `approval_at_current_head is false`; classification `stale head`. Do not do: merge with stale approval.