Skip to content

v6.1.0 — the field-study release: no defects in raft/xstate/hatchet, seven traps fixed in the tool

Choose a tag to compare

@jdubray jdubray released this 23 Jul 12:55
· 33 commits to main since this release

Four field studies (hashicorp/raft role + commitment machines, xstate's transition-resolution engine, hatchet's workflow-status rollup) found no defects in any target — and every multi-spec failure traced to a structural gap in what the tool told the generations, never model comprehension. This release fixes all of them, each milestone adversarially reviewed.

Since v5.0.0

sam-pattern 2.2.0 vendored (includes the 6.0.0 move to 2.1.2 prime semantics, previously unreleased). Both upstream issues drafted from the field studies shipped in the library and are adopted here:

  • Union types (sam-lib #35): renderModelShape emits real union declarations ({ type: ['string','object'] }) for keys detected as unions from trace evidence, init, or pure-type-token notes — the xstate trap (5/5 generations mistyped state.value) is closed with shape checking intact.
  • Reject-after-write hard-fail (sam-lib #36): the hatchet trap (5/5 generations annotated success with reject(reason), silently discarding correct work) now throws SamFrameError at step time; verify keeps a trace-signature fallback (rejectedActedWindows, projection-basis) and findings.md surfaces per-window spec runtime errors.

verify enhancements (plan M1–M7, docs/verify-enhancements-plan.md):

  • M1 — frozen-state-key warning: a key no action changes leaves Part 2 structurally blind behind it (raft's startIndex — a deleted safety gate still model-checked clean); now warned per spec, with --initial-states plumbed through verify as the remedy.
  • M2 — runaway-exploration guardrails: drift detection flags likely-unbounded keys (raft's term bump) within seconds instead of a silent 15-minute grind, with a progress heartbeat; completed explorations loudly retract mid-run suspicion.
  • M3 — spec-vs-spec agreement: pairwise agreement, named outliers, and a per-finding split column (4-vs-1 (minority: …)) — with the report stressing the majority is NOT automatically right (in the raft study the lone dissenter was correct).
  • M4 — scripted negative control (scripts/mutate.mjs): one command replaces hand-edited controls — polynv's four mutation operators applied to the reference and replayed with pipeline-parity scoring; zero flipped windows on a distinguishable mutation = a corpus blind spot, exit 1.
  • M5 — skill guidance: real-traces prerequisite (no captured traces → wrong tool), capture-by-subscription-not-polling (the raft Candidate miss), and reading guides for every new report signal.
  • findings.md gains: frozen-key and drift warnings, the agreement/consensus line, the reject-as-annotation triage hint, and a distinct spec-runtime-errors section.

Field-study reports: eval/FINDING-raft-field-study.md, eval/FINDING-xstate-union-schema.md, eval/FINDING-hatchet-reject-annotation.md.

🤖 Generated with Claude Code