From 81a6aaad15d288c393f4fea1759905cf20c1cc10 Mon Sep 17 00:00:00 2001 From: Tibsfox Date: Sat, 28 Feb 2026 04:48:09 -0800 Subject: [PATCH] fix(core): prefer in-progress milestone marker in getMilestoneInfo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- get-shit-done/bin/lib/core.cjs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/get-shit-done/bin/lib/core.cjs b/get-shit-done/bin/lib/core.cjs index 6ef6ccb2a..fbca469d3 100644 --- a/get-shit-done/bin/lib/core.cjs +++ b/get-shit-done/bin/lib/core.cjs @@ -388,7 +388,18 @@ function generateSlugInternal(text) { function getMilestoneInfo(cwd) { try { const roadmap = fs.readFileSync(path.join(cwd, '.planning', 'ROADMAP.md'), 'utf-8'); - // Strip
...
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
blocks const cleaned = roadmap.replace(/
[\s\S]*?<\/details>/gi, ''); // Extract version and name from the same ## heading for consistency const headingMatch = cleaned.match(/## .*v(\d+\.\d+)[:\s]+([^\n(]+)/);