Checkwright v0.18.0

2026-07-31

Checkwright is the verification layer under agent orchestration, and this release spends the pre-adoption window on two grammar breaks that only get more expensive once trees depend on them: the deferred-queue tag becomes [design-pending], and the template tree splits on the stage/boundary axis. It also puts a budget on the deferred pool, so a filing that grows into an inlined amendment reds instead of drifting there quietly.

Tightened gates

  • check-amendment-queue — reds once per entry in a design-pending section still tagged [needs-spec]. The rename below is the whole of it: the gate’s rule is unchanged and only the token it requires moved. Clear it by rewriting your queue’s tags.
  • check-skill-binding — reds once per bound shim whose binding directive still names a template under lifecycle-kit/templates/skills/, one binding directive names template '…' — no such file per shim. The upgrade smoke cannot prove this one for you: its phase A never touches consumer shims, so the red surfaces on your tree rather than in the proof. Clear it with the retarget spelled out under Behavior changes.
  • check-queue-entry-budget — new, in queue-kit. Assertions (A) size and (C) cost bind your deferred section unconditionally, so a vendored queue holding an entry longer than QUEUE_KIT_ENTRY_LINE_CAP lines, or one missing its Cost while deferred field, reds on upgrade. Only (B), the icebox one-line shape, is knob-gated, and it skips clean while QUEUE_KIT_ICEBOX_SECTION is empty — which is its default, so the new tier costs you nothing until you opt into it.

Renamed knobs

None. This release’s renames are consumer content and copied-out-template residue rather than configuration — the queue tag and the template paths, both declared under Behavior changes. The three knobs queue-kit gains (QUEUE_KIT_ICEBOX_SECTION, QUEUE_KIT_ENTRY_LINE_CAP, QUEUE_KIT_ICEBOX_AGE_DAYS) are added, not renamed.

Behavior changes

  • [needs-spec][design-pending] — the deferred-queue tag is renamed in the vocabulary every queue reader compiles against. spec is feature-bound everywhere else in the system, but this tag is mandatory on every deferred entry and a promoted debt entry drops it rather than converting it, so the old token asserted what its own definition does not. You reconcile by rewriting your queue’s tags, and check-amendment-queue names each entry that still needs it. The consumer hazard is check-tag-lead-line, and it is a hazard precisely because it does not red: after the rename it stops firing on the old token altogether, so a [needs-spec] tag sitting off its bullet’s lead line is simply no longer guarded. A gate that stops firing is not an allowed red, which is why it is named here rather than in the section above.
  • lifecycle-kit/templates/ — the template tree splits on the stage/boundary axis. templates/skills/ becomes templates/stages/, and release-sweep.md and upgrade.md move up beside lead.md, so templates/*.md is now exactly the boundary skills and templates/stages/*.md exactly the stage-class templates — both adoption globs mean what the SPEC’s own classification says. If you have copied the shims out, retarget each shim directive from lifecycle-kit/templates/skills/STAGE.md to lifecycle-kit/templates/stages/STAGE.md, and from templates/skills/release-sweep.md and templates/skills/upgrade.md to templates/release-sweep.md and templates/upgrade.md.
  • queue-kit/bin/queue-index.sh — a tagged entry’s one-line title no longer carries the doubled separator the stripped tag left behind (it rendered slug-dash-dash-prose on every tagged entry), and an entry whose lead line is nothing but tags now renders as the bare slug rather than a dangling em-dash. You reconcile nothing: the change is to rendered output only, and no tool or gate parses that separator.

Upgrading

Replace the vendored kit directories wholesale at v0.18.0, then regenerate the generated artifacts — the pre-commit hook and the graph projection. Then run the full battery.

The allowed reds. check-amendment-queue clears once every entry in your deferred and icebox sections carries [design-pending]. check-skill-binding clears once each copied-out shim names its template’s new path — the retarget is spelled out above. check-queue-entry-budget is new: register it, then clear it by compressing each over-cap deferred entry, adding the Cost while deferred field where it is missing, or evicting the entry to an icebox section if you configure one.

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.