cmdRoadmapAnalyze called fs.readdirSync(phasesDir) inside the per-phase while loop, causing O(N^2) directory reads for N phases. At 50 phases this produced 100 redundant syscalls; at 100 phases, 200. Move the directory listing before the loop and build a lookup array that is reused for each phase match. This reduces the pattern from O(N^2) to O(N) directory reads. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>