You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
SDD progress ledger carries no plan identity — a second superpowers run in the same repo reads the previous run's progress.md and silently skips the new plan's tasks #1936
I searched existing issues and this is not a duplicate
Related issues (searched before filing)
#1888 and #1816 report the artifact side of this (scratch files never pruned, task-N-report.md clobbered across efforts), and PRs #1858 / #1905 namespace briefs/reports per plan. This report is about the control-flow side, which those don't cover and the namespacing PRs don't fully fix:
The interleaved case (run paused mid-plan for debugging in the same working tree, second superpowers flow started, original run resumed) interleaves two runs' ledger lines with no way to attribute them — precisely in the post-compaction situation where the skill says to trust the ledger over recollection.
I confirmed this issue does not occur without Superpowers installed
(N/A in the usual sense: the affected files — .superpowers/sdd/, docs/superpowers/specs|plans/ — and the resume logic that misreads them are defined entirely by Superpowers' own skills and scripts.)
What happened?
Superpowers' durable documents (docs/superpowers/specs/, docs/superpowers/plans/) and the SDD scratch workspace (.superpowers/sdd/) are shared, flat locations keyed only by date or task number. When the workflow runs more than once in the same repo — sequentially (feature A finishes, feature B starts) or interleaved (a run is paused mid-plan to debug on another branch and a second superpowers flow starts) — artifacts from different runs collide, and the controller misreads the previous run's records as belonging to the current run.
Three specific mechanisms:
.superpowers/sdd/ is one flat directory per worktree, keyed by task number only.skills/subagent-driven-development/scripts/sdd-workspace resolves a single <repo-root>/.superpowers/sdd/ for all runs. task-brief writes task-<N>-brief.md and reports are task-<N>-report.md — so plan B's Task 1 collides with plan A's Task 1. The script comment acknowledges the sharing ("per worktree; concurrent runs in the same working tree share it"), but the skill text never says what to do when the workspace already holds another run's files. (Artifact side tracked in subagent-driven-development: .superpowers/sdd scratch artifacts are never pruned and silently collide across efforts #1888/New Task-XX-Reports Overwriting Previous Tasks #1816.)
progress.md ledger entries carry no plan identity, yet the resume logic trusts them unconditionally. Ledger lines are Task N: complete (commits <base7>..<head7>, review clean) — no plan filename, branch, or run id. subagent-driven-development/SKILL.md ("Durable Progress") instructs: "At skill start, check for a ledger … Tasks listed there as complete are DONE — do not re-dispatch them; resume at the first task not marked complete." Followed literally on a second run, the controller reads the previous plan's ledger and silently skips the new plan's tasks. Nothing in finishing-a-development-branch clears or archives the workspace, so the stale ledger is always there. This is the core of this report.
Specs and plans have no lifecycle or cross-links.brainstorming saves to docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md, writing-plans to docs/superpowers/plans/YYYY-MM-DD-<feature-name>.md. Date prefixes avoid most filename collisions, but nothing marks a spec/plan completed or superseded, plans don't name their spec, and the ledger doesn't name its plan. A session resuming after compaction — or a new session told to "continue" — has several identical-looking documents and no recorded pointer to the active one. (Per Improvement: Add cleanup prompt for superpower-generated artifacts #729, specs/plans are durable history to keep — the ask here is cross-linking/status, not deletion.) The interleaved-run case is worst: worktree isolation is consent-gated in using-git-worktrees and mid-task debugging typically happens in place, so both runs share one workspace, overwrite each other's briefs/reports, and interleave ledger lines.
Steps to reproduce
In one repo, run the full flow (brainstorm → write plan A → subagent-driven-development) to completion. Note that nothing cleans up .superpowers/sdd/.
In a new session, brainstorm and write plan B for a different feature, then invoke subagent-driven-development in the same worktree.
At skill start the controller runs the prescribed ledger check, finds plan A's progress.md with Tasks 1–5 complete, and resumes at "Task 6" of plan B.
Variant: pause an SDD run after Task 2, start a second superpowers flow on a debug branch in the same working tree, then resume the original run — task-<N>-brief/report.md for overlapping task numbers now belong to the wrong run, and progress.md contains both runs' lines with no way to tell them apart.
Expected behavior
Each brainstorm→plan→execute run keeps its artifacts separate; the ledger check only trusts completion entries that belong to the plan currently being executed; finished runs leave the workspace clean (or clearly archived) for the next run.
Actual behavior
The second run inherits the first run's ledger and scratch files: tasks are skipped as "already complete", briefs/reports are overwritten across runs, review packages accumulate unattributed, and resumed sessions can pick up the wrong spec/plan.
Debug log or conversation transcript
No single transcript attached; the failure follows deterministically from the skill text and scripts cited above (sdd-workspace, task-brief, review-package, and SKILL.md's "Durable Progress" section). Happy to reproduce and attach a transcript if useful.
Cross-link the chain — plan header names its spec, ledger names its plan, so a resuming session can walk to the active documents instead of guessing among identical-looking dated files.
Related issues (searched before filing)
#1888 and #1816 report the artifact side of this (scratch files never pruned,
task-N-report.mdclobbered across efforts), and PRs #1858 / #1905 namespace briefs/reports per plan. This report is about the control-flow side, which those don't cover and the namespacing PRs don't fully fix:Environment (required)
Is this a Superpowers issue or a platform issue?
(N/A in the usual sense: the affected files —
.superpowers/sdd/,docs/superpowers/specs|plans/— and the resume logic that misreads them are defined entirely by Superpowers' own skills and scripts.)What happened?
Superpowers' durable documents (
docs/superpowers/specs/,docs/superpowers/plans/) and the SDD scratch workspace (.superpowers/sdd/) are shared, flat locations keyed only by date or task number. When the workflow runs more than once in the same repo — sequentially (feature A finishes, feature B starts) or interleaved (a run is paused mid-plan to debug on another branch and a second superpowers flow starts) — artifacts from different runs collide, and the controller misreads the previous run's records as belonging to the current run.Three specific mechanisms:
.superpowers/sdd/is one flat directory per worktree, keyed by task number only.skills/subagent-driven-development/scripts/sdd-workspaceresolves a single<repo-root>/.superpowers/sdd/for all runs.task-briefwritestask-<N>-brief.mdand reports aretask-<N>-report.md— so plan B's Task 1 collides with plan A's Task 1. The script comment acknowledges the sharing ("per worktree; concurrent runs in the same working tree share it"), but the skill text never says what to do when the workspace already holds another run's files. (Artifact side tracked in subagent-driven-development: .superpowers/sdd scratch artifacts are never pruned and silently collide across efforts #1888/New Task-XX-Reports Overwriting Previous Tasks #1816.)progress.mdledger entries carry no plan identity, yet the resume logic trusts them unconditionally. Ledger lines areTask N: complete (commits <base7>..<head7>, review clean)— no plan filename, branch, or run id.subagent-driven-development/SKILL.md("Durable Progress") instructs: "At skill start, check for a ledger … Tasks listed there as complete are DONE — do not re-dispatch them; resume at the first task not marked complete." Followed literally on a second run, the controller reads the previous plan's ledger and silently skips the new plan's tasks. Nothing infinishing-a-development-branchclears or archives the workspace, so the stale ledger is always there. This is the core of this report.Specs and plans have no lifecycle or cross-links.
brainstormingsaves todocs/superpowers/specs/YYYY-MM-DD-<topic>-design.md,writing-planstodocs/superpowers/plans/YYYY-MM-DD-<feature-name>.md. Date prefixes avoid most filename collisions, but nothing marks a spec/plan completed or superseded, plans don't name their spec, and the ledger doesn't name its plan. A session resuming after compaction — or a new session told to "continue" — has several identical-looking documents and no recorded pointer to the active one. (Per Improvement: Add cleanup prompt for superpower-generated artifacts #729, specs/plans are durable history to keep — the ask here is cross-linking/status, not deletion.) The interleaved-run case is worst: worktree isolation is consent-gated inusing-git-worktreesand mid-task debugging typically happens in place, so both runs share one workspace, overwrite each other's briefs/reports, and interleave ledger lines.Steps to reproduce
.superpowers/sdd/.subagent-driven-developmentin the same worktree.progress.mdwith Tasks 1–5 complete, and resumes at "Task 6" of plan B.Variant: pause an SDD run after Task 2, start a second superpowers flow on a debug branch in the same working tree, then resume the original run —
task-<N>-brief/report.mdfor overlapping task numbers now belong to the wrong run, andprogress.mdcontains both runs' lines with no way to tell them apart.Expected behavior
Each brainstorm→plan→execute run keeps its artifacts separate; the ledger check only trusts completion entries that belong to the plan currently being executed; finished runs leave the workspace clean (or clearly archived) for the next run.
Actual behavior
The second run inherits the first run's ledger and scratch files: tasks are skipped as "already complete", briefs/reports are overwritten across runs, review packages accumulate unattributed, and resumed sessions can pick up the wrong spec/plan.
Debug log or conversation transcript
No single transcript attached; the failure follows deterministically from the skill text and scripts cited above (
sdd-workspace,task-brief,review-package, and SKILL.md's "Durable Progress" section). Happy to reproduce and attach a transcript if useful.Suggested direction (optional)
progress.md(plan path, branch, started date), and amend the resume instruction in SKILL.md: trust completion entries only if the ledger's plan matches the plan being executed; on mismatch, archive the stale ledger (e.g.progress-<run-id>.md) and start fresh. This closes the skip bug even for flows that land on the legacy flat directory after fix: namespace SDD task reports per-plan so multiple plans don't overwrite task-N-report.md #1858/Scope SDD task briefs by plan file #1905.sdd-workspacefrom plan filename (date+slug) and/or branch coversprogress.mdand review packages too, not just briefs/reports.finishing-a-development-branch— scoped to.superpowers/sdd/only, leavingdocs/superpowers/specs|plansas durable history per Improvement: Add cleanup prompt for superpower-generated artifacts #729.