feat: Task Close Gate + HEUREKA Completion Sequence for state-hub projects

workplan-spec.md:
- Task Close Gate: when marking a task done in the file, also call
  update_task_status(state_hub_task_id, "done") in the State Hub
- HEUREKA Completion Sequence: before HEUREKA, for hub-integrated workplans:
  update all tasks, update_workstream_status → done, add_progress_event
  milestone, then set status: done and output HEUREKA

plugin/ralph-workplan.md:
- Added State-Hub Integration Notes section injected via stop-hook prompt
  so the worker follows Task Close Gate and HEUREKA Completion Sequence

Resolves: state-hub progress event 1e73441e (2026-03-16)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-16 08:06:11 +00:00
parent 2fb2bb5cb8
commit 9d57ce430f
2 changed files with 63 additions and 0 deletions

View File

@@ -59,6 +59,45 @@ A workplan is **done** when:
The skill updates both as work progresses — tasks individually, then the
workplan when all tasks are complete.
## Task Close Gate (State-Hub Projects)
When a workplan contains `state_hub_workstream_id` in its frontmatter and a
task block contains `state_hub_task_id`, the worker must call
`update_task_status(state_hub_task_id, "done")` in the State Hub at the same
time as marking the task `done` in the file.
**Why:** The file is the authoritative source of truth (ADR-001), but the hub
is the read model used for dashboards and consistency checks. Keeping them in
sync per-task prevents drift from accumulating and avoids the manual repair
sessions that result from batch-syncing at the end only.
Example task block with hub binding:
```task
id: MRKD-WP-0003-T01
status: todo
priority: high
state_hub_task_id: 51e1b53e-a62f-496b-892d-615513c35d67
```
## HEUREKA Completion Sequence (State-Hub Projects)
When all task blocks are `done` and the workplan is about to be closed, a
state-hub-integrated workplan requires a close-out sequence **before**
outputting `<promise>HEUREKA</promise>`:
1. For each task with a `state_hub_task_id`: call `update_task_status(id, "done")`
(idempotent — safe to call even if the Task Close Gate already did it)
2. Call `update_workstream_status(state_hub_workstream_id, "done")`
3. Call `add_progress_event(summary="...", event_type="milestone",
topic_id=..., workstream_id=...)` summarising what was delivered
4. Update the workplan frontmatter: `status: active → status: done`
5. Output `<promise>HEUREKA</promise>`
This sequence ensures the hub dashboard reflects completion without requiring
a separate manual sync. The C-13 consistency check will WARN (and auto-fix)
if step 2 is missed, but completing it proactively avoids the warning.
## Naming Convention
The skill works with any filename. A common convention used in custodian-family