0.83.0-alpha · core 2026-10-22
release 0.83.0-alpha on GitHub →
Fixed
- The review-mode skip layer had three owners.
stages.yamldeclared which stages a review mode skips, the transitions template hand-tabulated the same fact in prose, and the helper enforced a third copy in acasestatement. Editingstages.yamlchanged the published catalog and left the helper running the old rules; only the two gates somebody remembered to hardcode were refused, and every other skipped stage was enterable. The generator now renders the machine-readable policy, the gate-condition table and the per-gate prose from the one list, and the helper parses that instead of acase. - One list said two things.
selectionsat in the same list asplan-gate, so "skipped" meant both "does not run" and "runs without a human". ButselectionRUNS in Auto — the agent decides the pick — and it produces the two artifacts the architecture stage reads. The kinds are now named:skipped(the stage does not run) andno_human_wait(it runs, but nobody is asked to pick). The validator refuses a mode that declares only one, and a stage that claims to be both. - An unknown review mode skipped enforcement entirely. The vocabulary is closed and owned by
stages.yaml, so a mode the helper did not know used to leave the worker free to walk into a stage that does not run in its mode, and park there. It now fails fast, naming the modes it knows. - Every skill's hand-off block claimed it needed no approval. The script that writes the blocks parsed
stages.yamlby hand and never readrequires_approval, so the plan-gate and diff-gate skills told the worker their gate wasnone. The blocks are now generated from the YAML. - A workflow skill's stage was found by accident. The script stripped only the
stelow-product-prefix, so everystelow-workflow-*skill fell to a substring match: the diff-gate skill (codebase-critique) matchedcritiqueand handed off to the wrong stage. The skill-to-stage mapping now comes from the catalog, which owns it. - The hand-off blocks had no drift check. The script was a one-shot writer that skipped any skill already carrying a block, so a stage renamed in
stages.yamlleft every shipped skill naming the old one — forever, with a green CI. It is a checked generator now, andverify:executionfails on drift. - The next candidate was a copy of a graph edge. Every hand-off block pre-filled
next-candidatewith a static edge, and that edge is not the same in every review mode:diff-gatedoes not run in Auto and the helper refuses it there. The block now asks the helper. - The router re-derived the transition rule a fourth time. It parsed
transitions.mdwith its own awk and grep — no intent route, no review mode — and accepted moves the helper then refused, so the workflow stalled between the two answers.stelow nextis the one answer now, computed by the same ruleadvanceenforces.
Added
stelow next— the legal moves from the current stage under the current review mode, with the forward move named.advanceenforces the set;nextreports it.scripts/scope3_blocks.py --check— the drift gate for the skills' hand-off blocks, wired intoverify:execution.