fix(init): include shipped-milestone phases in deps_satisfied check (#2269)

- Build completedNums from current milestone phases as before
- Also scan full rawContent for [x]-checked Phase lines across all
  milestone sections (including <details>-wrapped shipped milestones)
- Phases from prior milestones are complete by definition, so any
  dep on them should always resolve to deps_satisfied: true
- Add regression tests in tests/init-manager-deps.test.cjs

Closes #2267
This commit is contained in:
Tom Boucher
2026-04-15 14:59:07 -04:00
committed by GitHub
parent e1fe12322c
commit 2f28c99db4
2 changed files with 131 additions and 0 deletions

View File

@@ -1024,6 +1024,17 @@ function cmdInitManager(cwd, raw) {
// Dependency satisfaction: check if all depends_on phases are complete
const completedNums = new Set(phases.filter(p => p.disk_status === 'complete').map(p => p.number));
// Also include phases from previously shipped milestones — they are all
// complete by definition (a milestone only ships when all phases are done).
// rawContent is the full ROADMAP.md (including <details>-wrapped shipped
// milestone sections that extractCurrentMilestone strips out).
const _allCompletedPattern = /-\s*\[x\]\s*.*Phase\s+(\d+[A-Z]?(?:\.\d+)*)[:\s]/gi;
let _allMatch;
while ((_allMatch = _allCompletedPattern.exec(rawContent)) !== null) {
completedNums.add(_allMatch[1]);
}
for (const phase of phases) {
if (!phase.depends_on || /^none$/i.test(phase.depends_on.trim())) {
phase.deps_satisfied = true;