# 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.