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 underlifecycle-kit/templates/skills/, onebinding directive names template '…' — no such fileper 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 thanQUEUE_KIT_ENTRY_LINE_CAPlines, or one missing itsCost while deferredfield, reds on upgrade. Only (B), the icebox one-line shape, is knob-gated, and it skips clean whileQUEUE_KIT_ICEBOX_SECTIONis 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.specis 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, andcheck-amendment-queuenames each entry that still needs it. The consumer hazard ischeck-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/becomestemplates/stages/, andrelease-sweep.mdandupgrade.mdmove up besidelead.md, sotemplates/*.mdis now exactly the boundary skills andtemplates/stages/*.mdexactly 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 fromlifecycle-kit/templates/skills/STAGE.mdtolifecycle-kit/templates/stages/STAGE.md, and fromtemplates/skills/release-sweep.mdandtemplates/skills/upgrade.mdtotemplates/release-sweep.mdandtemplates/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.