Introduce thread_state_ledger_validator for the mandatory two-comment workflow: tagged [CONTROLLER HANDOFF] paired with [THREAD STATE LEDGER]. Wire validation into final_report_validator and gitea_create_issue_comment, add runbook docs, worked examples, and tests. Closes #507 Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
43 lines
1.3 KiB
Markdown
43 lines
1.3 KiB
Markdown
# 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. |