Checkwright v0.6.0
2026-07-18
Checkwright is the verification layer under agent orchestration, and this release extracts the stage cursor to a single source. The lifecycle stage a unit of work is in is now read from the evidence-stamp file’s last stamp — the one surface that already proved each stage was entered — and the queue header narrows to the iteration name alone. The redundant [stage:] header field and the queue-write that maintained it are retired. No gate landed or got stricter, so this is a behavior release; residual-field healing keeps a pre-upgrade header inert, so a clean upgrade reconciles nothing mechanically.
Tightened gates
None — no gate landed or got stricter. The stage-machine gates (check-stage-entry, check-stage-evidence, check-evidence-manifest) changed the surface they read — the queue header’s [stage:] field gives way to the state file’s last stamp — without tightening what a consistent tree must satisfy.
Renamed knobs
None — nothing was renamed or removed.
Behavior changes
The whole of this release lands here, the fixed section for what shifts that no gate scans.
- stage cursor — the lifecycle stage is now derived from the evidence-stamp file’s last data line (the shared
lifecycle_current_stage/ek_state_stageadapters), not the queue header’s[stage:]field. Four readers move together: evidence-kit’s manifest coupling, lifecycle-kit’s entry and evidence gates, context-kit’s session-context hook, and delegation-kit’s statusline all read the stage from the state file. A consumer that scripted against[stage:]in the header reads the last stamp instead. - enter-stage.sh — the flip dies: entering a stage no longer writes the queue, so the entry stamp is the sole transition, a departing session writes nothing, and no uncommitted stage state can strand a merge. Stage motion never touches the queue.
- queue header grammar — queue-kit retires the
[stage:]field, narrowing the header to## Iteration: <name>. The surviving name-axis readers strip an optional trailing bracketed field, so a pre-upgrade header still carrying[stage:]parses to the bare iteration name — the retire is blind-upgrade-safe.
Upgrading
Sync the vendored kit directories wholesale at v0.6.0 and regenerate the generated artifacts (the pre-commit hook and the graph projection), then run the full battery. Residual-field healing means a TASK-QUEUE.md header still carrying [stage:] needs no edit — it reads as the bare iteration name — though you may drop the field at leisure.
No allowed reds. The Tightened gates section is empty: a clean upgrade turns no gate red. The behavior changes above are declared for reading, not a mechanical scan. If a gate reds that this note does not name, the upgrade smoke was supposed to catch it first — open an issue, because that is a defect in the release rather than work for you.