Checkwright for OpenSpec
Install from your repository’s root, in a clean worktree, with your system’s line on the install page and these arguments. Run the commands init prints.
checkwright init --profile prose --recipe openspec
The recipe governs the markdown under openspec/, exempts openspec/changes/ from the rule against history words once you register it, since a change’s delta records what a requirement said before, and points check-task-path-claim at each in-flight change’s tasks.md. The install records it, so an upgrade re-applies it with the release it was tested against.
Keep each title unique within a spec. OpenSpec specs often repeat a scenario title under two requirements. A citation of the second title would reach the first, so set CANON_KIT_SPEC_POINTER_TITLE_ONCE = on in canon-config.knobs to have check-spec-pointer red the repeat. Rename one apart, for instance Idle timeout, web and Idle timeout, API.
Every kit OpenSpec does not replace. The second line installs complement:
checkwright init --profile full --without-kit lifecycle-kit --without-kit queue-kit --without-kit doctrine-kit --recipe openspec
complement leaves out each kit whose job OpenSpec already does. companion/exclusions.list records the OpenSpec surface each one defers to, and the line carries one --without-kit per kit. It seeds evidence files under .workflow/, beside OpenSpec’s own. Drop a kit’s --without-kit to adopt it later. It applies no lifecycle layer, since it leaves the stage machine to OpenSpec.
Every kit. The third line installs full:
checkwright init --profile full --recipe openspec --recipe openspec-lifecycle
It costs what the Spec Kit full line costs: Checkwright’s own workflow files beside OpenSpec’s. The line also applies the lifecycle layer, which lets lifecycle-kit’s stage machine read OpenSpec’s in-flight changes: once you run the stage machine, a change touching two capabilities owes the align stage before build.
What the gates catch, what is tested and the limits: Spec toolkits.