fix(core): prefer in-progress milestone marker in getMilestoneInfo
getMilestoneInfo matches the first version string in ROADMAP.md, which is typically the oldest shipped milestone. For list-format roadmaps that use emoji markers (e.g. "🚧 **v2.1 Belgium**"), the function now checks for the in-progress marker first before falling back to the heading-based and bare version matching. Closes #700 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -388,7 +388,18 @@ function generateSlugInternal(text) {
|
||||
function getMilestoneInfo(cwd) {
|
||||
try {
|
||||
const roadmap = fs.readFileSync(path.join(cwd, '.planning', 'ROADMAP.md'), 'utf-8');
|
||||
// Strip <details>...</details> blocks so shipped milestones don't interfere
|
||||
|
||||
// First: check for list-format roadmaps using 🚧 (in-progress) marker
|
||||
// e.g. "- 🚧 **v2.1 Belgium** — Phases 24-28 (in progress)"
|
||||
const inProgressMatch = roadmap.match(/🚧\s*\*\*v(\d+\.\d+)\s+([^*]+)\*\*/);
|
||||
if (inProgressMatch) {
|
||||
return {
|
||||
version: 'v' + inProgressMatch[1],
|
||||
name: inProgressMatch[2].trim(),
|
||||
};
|
||||
}
|
||||
|
||||
// Second: heading-format roadmaps — strip shipped milestones in <details> blocks
|
||||
const cleaned = roadmap.replace(/<details>[\s\S]*?<\/details>/gi, '');
|
||||
// Extract version and name from the same ## heading for consistency
|
||||
const headingMatch = cleaned.match(/## .*v(\d+\.\d+)[:\s]+([^\n(]+)/);
|
||||
|
||||
Reference in New Issue
Block a user