diff --git a/.changeset/curious-jaguars-gather.md b/.changeset/curious-jaguars-gather.md new file mode 100644 index 000000000..8fa05a5b3 --- /dev/null +++ b/.changeset/curious-jaguars-gather.md @@ -0,0 +1,5 @@ +--- +type: Fixed +pr: 3114 +--- +**A split-parent phase marked complete in the ROADMAP is no longer permanently reported as `current_phase`** — a phase split into sub-phases (parent kept as shared context, zero plans by design) was stuck as `researched` because the roadmap-checkbox override required `completion.phase_complete` (always false for zero-plan phases). The override now fires for zero-plan phases when the roadmap checkbox is checked. (#3033) diff --git a/src/init.cts b/src/init.cts index 0daaeb112..b642fb690 100644 --- a/src/init.cts +++ b/src/init.cts @@ -2263,7 +2263,15 @@ function cmdInitManager(cwd: string, raw: boolean): void { } const roadmapComplete = _checkboxStates.get(phaseNum) || false; - if (roadmapComplete && completion.phase_complete && diskStatus !== 'complete') { + // #3033: a zero-plan phase (split parent — intentionally plan-less, holds + // shared context for sub-phases) whose roadmap checkbox is marked complete + // must resolve as complete. The original gate required completion.phase_complete + // (derived from plan/summary counts), which is always false for zero-plan + // phases — so the checkbox override never fired and the parent was permanently + // stuck as 'researched' (an in-progress state eligible for current-phase + // selection). Now: when the roadmap marks it complete AND it has zero plans, + // treat it as complete regardless of the plan-count derivation. + if (roadmapComplete && (completion.phase_complete || planCount === 0) && diskStatus !== 'complete') { diskStatus = 'complete'; }