v4.2.11-beta
Pre-releaseFixed — a missing derived state snapshot bricked nearly every skill on load
session-state.yaml is a per-session derived snapshot, not a tracked file.
Since ec771ea (ISSUE-193), 85 skills loaded it with a bare
!cat .sweetclaude/state/session-state.yaml`` bang preamble, assuming the
SessionStart preflight always regenerated it first. Whenever the snapshot was
absent — preflight hadn't run this session, an update/doctor run regenerated
state mid-session, a worktree with a different working directory, a fresh
checkout — the bare cat exited non-zero and the skill aborted on load with
`cat: .sweetclaude/state/session-state.yaml: No such file or directory`.
`/sweetclaude:go` and the rest of the skill surface became unusable.
All 86 bang-preamble state loaders (85 × session-state, plus orchestrator's
sweetclaude.yaml) now route through hooks/read-state.sh, invoked via
${CLAUDE_SKILL_DIR}/../../hooks/ so it resolves on fresh installs regardless
of working directory. The wrapper emits file contents when present and a
STATE_NOT_FOUND sentinel (which skills already handle) when absent, always
exiting 0 — a missing snapshot can no longer abort skill load.
Fixed — orphan scan missed legacy formats and had no catch-all for unknowns
The scan-orphans step in the v3→v4 migrator had two gaps:
-
Missing formats.
EP-*.md,EPIC-*.md,US-*.md, andspike-BL-*.md
were never in_WORK_ITEM_PATTERNS, so they were invisible to the scan.
BL-*.mdfiles in backlog/ were shielded by anexpected_filesentry that
was meant to protect migratedISSUE-*.mdfiles. All five patterns are now
detected, and the S2 migrator can migrate every one of them. -
No catch-all. Files with frontmatter but an unrecognized prefix (e.g.
FEAT-001,REQ-042) passed through silently. A new Step 5 catch-all
flags these as "martian" unknowns. V4-format files (ISSUE-,EP-,MS-,
SP-,TH-,RM-,REL-,PITCH-,CYC-,I-) are excluded.
Martians can be acknowledged (stored in a registry so they stop being
flagged) or archived (archive-martianssubcommand).