Repro (hit for real, 2026-09-03)
Two SDD sessions ran in this repo in parallel windows:
- Session A:
feat/104-fleet-presentation-redesign (plan 2026-09-03-fleet-presentation-p1, base d9345bb) — wrote its ledger line to .superpowers/sdd/progress.md.
- Session B (this one):
feat/1b-2-fleet-governance-adapter — followed the SDD skill's ledger check (cat .superpowers/sdd/progress.md), saw the file, and then overwrote it with > while initializing its own section. Session A's recovery map was destroyed (restored by hand from session B's scrollback).
Root cause
.superpowers/sdd/progress.md is a single repo-level path. The SDD skill treats it as the durable cross-compaction recovery map, but its identity is not scoped to the session/branch executing the work. Any second concurrent SDD session (different branch, same checkout dir or a sibling worktree of the same repo) reads-and-tramples the first one's ledger.
Secondary hazard observed in the same incident: two sessions sharing one working directory can also pull the branch out from under each other via git checkout (session B switched branches while A's tree state was live).
Expected
- Ledger writes are append/merge-safe across concurrent sessions (or ledger path is per-branch, e.g.
.superpowers/sdd/progress.<branch>.md, resolved from git branch --show-current).
- The skill's ledger-init step should detect a foreign/unrelated existing ledger and MERGE (new section + a tombstone note), never
>.
Suggested fix direction
scripts/sdd-workspace (or a small sdd-ledger helper) owns ledger init/append: resolve per-branch filename, create-if-absent, append sections. The skill text references the fixed path in multiple places and would need the pointer updated.
Environment
- armory-fleet @
aa0dbef (both sessions), SDD skill via superpowers, macOS, pi sessions in the same checkout directory.
Repro (hit for real, 2026-09-03)
Two SDD sessions ran in this repo in parallel windows:
feat/104-fleet-presentation-redesign(plan2026-09-03-fleet-presentation-p1, based9345bb) — wrote its ledger line to.superpowers/sdd/progress.md.feat/1b-2-fleet-governance-adapter— followed the SDD skill's ledger check (cat .superpowers/sdd/progress.md), saw the file, and then overwrote it with>while initializing its own section. Session A's recovery map was destroyed (restored by hand from session B's scrollback).Root cause
.superpowers/sdd/progress.mdis a single repo-level path. The SDD skill treats it as the durable cross-compaction recovery map, but its identity is not scoped to the session/branch executing the work. Any second concurrent SDD session (different branch, same checkout dir or a sibling worktree of the same repo) reads-and-tramples the first one's ledger.Secondary hazard observed in the same incident: two sessions sharing one working directory can also pull the branch out from under each other via
git checkout(session B switched branches while A's tree state was live).Expected
.superpowers/sdd/progress.<branch>.md, resolved fromgit branch --show-current).>.Suggested fix direction
scripts/sdd-workspace(or a smallsdd-ledgerhelper) owns ledger init/append: resolve per-branch filename, create-if-absent, append sections. The skill text references the fixed path in multiple places and would need the pointer updated.Environment
aa0dbef(both sessions), SDD skill via superpowers, macOS, pi sessions in the same checkout directory.