* fix(#3816): handle milestone-scoped phase dirs in roadmap parser, phase.add, findPhase
- phase.ts: replace hardcoded /^v[\d.]+-phases$/ regex with sortedMilestoneArchiveDirs()
helper that matches any *-phases suffix and sorts the current-milestone dir first
- roadmap.ts: add fallback for plain-bullet phases (- [ ] Phase N:) in searchPhaseInContent
and roadmapAnalyze; truncate content at ## Backlog boundary in roadmapAnalyze to prevent
backlog phases from leaking into the active-milestone phase list
- phase-lifecycle.ts: add resolveWritePhasesDir() and findPhaseInsertionPoint() helpers;
wire both into phaseAdd and phaseAddBatch so new phase dirs land in the milestone-scoped
path and roadmap entries are inserted before ## Backlog rather than after the last ---
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(3816): sort milestone archives by version, not lexically
`sortedMilestoneArchiveDirs` was sorting in descending order (b before a),
causing v1.10-phases to be searched before v1.2-phases. Flip to ascending
so the earliest archive is searched first, matching the deterministic sort
the test at milestone-archive.test.cjs:383 asserts.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>