0.51.3 · core 2026-07-13
Changed
- Hardened
Workflow.configsymmetry across the stack — appetite and review_mode now flow through identical paths (read canonical source, mirror to index.json, fallback to legacy) in every layer: - TS extension (
extensions/stelow/index.ts):stages-guardhook now readswf.config.review_modedirectly fromwf(loaded viagetActiveWorkflow()fromstelow.json), not from theindex.jsonmirror. Falls back toindex.jsononly ifwf.config.review_modeis missing (pre-v0.50.0 workflow). - TS write-through (
extensions/stelow/state.ts): already symmetric since v0.51.0 — appetite + review_mode + domains_detected all go through the sameupdateWorkflowIndexJsonblock. - Bash helper (
references/cli-tools/read-config.sh): already symmetric since v0.51.0 —stelow_read_appetiteandstelow_read_review_modeuse the samestelow_configfunction with same in-progress filter + legacy fallback. cmdStartseeding (extensions/stelow/start.ts): the initialindex.jsonwrite now includesconfig: { appetite: undefined, review_mode: undefined, domains_detected: [] }so downstream consumers (stages-guard, TUI, muxy, herdr) see config fromt=0without waiting for the firstwriteTracking().
Added
tests/unit/config-symmetry.test.ts— 9 tests verifying:- TS write-through mirrors appetite AND review_mode identically.
- Bash helper returns identical in-progress filtering for both fields.
- Bash helper returns identical defaults when stelow.json is absent.
- Bash helper returns identical legacy fallback for both fields.
- End-to-end: TS write → bash helper sees same value immediately.
Tests
- 838 tests passing (was 829 in v0.51.2).
Why this matters
Before this release, two fragility points existed:
- stages-guard hook read
idx.config.review_modefromindex.jsonmirror. IfwriteTracking()failed (corrupt JSON, disk full, permission), the hook would either not block or block based on stale data. Now reads the canonicalwf.configdirectly.
- Workflow fresh state had
index.jsonwithoutconfigblock until the firstwriteTracking()ran. Hooks reading the mirror gotundefinedinstead of explicit defaults. Now seeded at creation.
The bash helper and TS write-through were already symmetric since v0.51.0 — these tests verify that symmetry holds.