Skip to content

v0.30.1 — state-machine review fixes

Choose a tag to compare

@wfukatsu wfukatsu released this 27 Aug 11:10
· 87 commits to main since this release

Four findings from reviewing 0.30.0 the day it shipped. One would have failed at runtime; the other three were contradictions between what the prose said and what the validator enforced.

Fixed

  • The state-machine validator is resolved from the plugin root. design-state-machine and review-consistency invoked it as python3 tools/lib/state_machine_manifest.py — a path that exists in this repository and nowhere a user actually runs the skill. Both now use ${CLAUDE_PLUGIN_ROOT}/tools/lib/…. The contract tests run repository-relative and so could not have caught it.
  • Rule 5 no longer claims a guard's else branch "is a matrix cell". The matrix has one cell per (state, event) and that cell is allow — the event is legal there; the guard chooses between outcomes, not between legal and illegal. The else branch lives on the transition (else), which is what the validator already enforced.
  • A transition's idempotency is now ignore | reject, and means one thing: the verdict for a redelivery of the same request (same key, retried message) — return the original outcome, or report the key reuse. allow was accepted and meant nothing, since a committed transition firing again is the (to, event) matrix cell's decision. The validator refuses it.
  • /architect:pipeline no longer calls analyze-data-model dialogue-driven. Optional means skippable; only create-domain-story and design-state-machine take --auto.

Changed

  • The manifest field contract documents states[].kind and matrix[].response, which the validator and template already used.

No manifest written by 0.30.0 should exist yet; if one does and carries idempotency: "allow" on a transition, replace it with ignore.

Full detail: CHANGELOG.md (日本語).