Checkwright v0.17.0
2026-07-27
Checkwright is the verification layer under agent orchestration, and this
release gives it a delivery channel that works. The previous release announced
an install command that never functioned: v0.16.0 was tagged and its note
published, but the publish job handed npm a package spec npm read as a GitHub
owner/repo shorthand rather than as a path, so it exited before reaching the
registry and nothing was ever published. Every tagged release now attaches the
installer tarball and its .sha256 to the GitHub Release, which needs no Node
to consume and is the primary path from here on.
Tightened gates
check-action-run-shell— new, in gate-sdk. Every GitHub Actionsrun:literal block scalar must be ShellCheck-clean at-S warningunder the dialect the step actually runs. It closes a real hole: a workflow’srun:body is shell that nothing lints or executes until a push or a tag, so a defect in it surfaces in CI rather than at your pre-commit. The scan walks*.yml/*.yamlfrom the scan root and then narrows to files carrying a top-leveljobs:key (a workflow) orruns:key (a composite action); everything else is skipped and counted, never linted, so a non-Actions CI dialect in your tree is not read as shell. Expect it to reach your own workflows and any kit workflow template you have copied out — gate-sdk’stemplates/gates-workflow.ymland site-kit’stemplates/site-health.ymlboth carryrun:shell.
This repository’s own scripts/ gate directory also gained
check-npm-publish-spec this release, holding the npm publish spec that broke
v0.16.0. It does not ship inside a kit, so it cannot appear in a vendored
tree and is not part of the allowed-red set below.
Renamed knobs
None. check-action-run-shell takes an optional positional scan root and adds
no environment knob, so no configuration surface moved.
Behavior changes
- Release assets — new. Every tagged release now carries the installer
tarball and a
.sha256beside it, attached by areleasejob that consumes the same artifact the npm job publishes. One pack, two transports. This is the Node-free install path: download, verify, extract, runinit. The checksum travels from the same origin over the same session as the tarball, so it catches a corrupted or truncated download and is not evidence the release host was uncompromised — the property carrying that is a build attestation, which the npm channel’s--provenancemints and this channel does not yet. docs/install.md§Quick start — rewritten around the tarball path, with one step that is easy to get wrong called out: unpack outside the repository.initrefuses a worktree that is not clean, and an extractedpackage/sitting in your root is untracked content that makes it exactly that — so a tarball unpacked in place blocks the install it was downloaded for.
Upgrading
Replace the vendored kit directories wholesale at v0.17.0, then regenerate the
generated artifacts — the pre-commit hook and the graph projection. Then run the
full battery.
The allowed red. check-action-run-shell is new and may red once you
register it. Clear it by making each Actions run: block ShellCheck-clean at
-S warning — most reds are an unquoted expansion or an unchecked cd. A
run: block you do not want linted belongs in a file the Actions-shape
predicate does not match; there is no per-block valve.
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.