Tom Boucher
0a12b06381
feat(#39): milestone-prefixed phase IDs (M-NN convention) + migration tool + validation (#565)
* feat(#39): milestone-prefixed phase IDs (M-NN convention) + migration tool + validation
- Add getMilestoneFromPhaseId() / getPhaseDirFromPhaseId() helpers to core.cjs
- Fix isDirInMilestone to match M-NN-style dirs (02-01-setup) against M-NN ROADMAP headings
- Extend heading regex to tolerate [bracket-token] scope prefix on phase headings
- Add W021 validation rule for milestone prefix mismatch
- Add gsd-tools roadmap validate + roadmap upgrade --convention milestone-prefixed
- Add phase_id_convention config field (null default, backwards-compatible)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(#39): address 4 Codex review findings in milestone-prefixed phase ID implementation
- getMilestoneFromPhaseId: tighten regex to require a digit after the hyphen (rejects '1-' and '1-abc')
- isDirInMilestone: use convention-aware regex — only capture M-NN segments when ROADMAP itself uses hyphenated phase IDs, preventing legacy dirs like '01-02-setup' from being misread as phase '1-02'
- checkW021: add UNPREFIXED_PHASE_RE path so unprefixed headings (### Phase 1:) also fire W021 when convention is milestone-prefixed
- roadmap-upgrade: remove isMigratedDirName dir-name check (false-positive for legacy dirs); config + ROADMAP heading checks at lines 194 and 212 are sufficient
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* chore: update changeset pr reference to #565
* fix(#39): restore phaseDirNameRe 2-digit minimum; add roadmap-upgrade to inventory
- validate.cjs: \d{1,} → \d{2,} to keep single-digit prefix rejection per W005 contract
- docs/INVENTORY.md: 79 → 80, add roadmap-upgrade.cjs row
- docs/INVENTORY-MANIFEST.json: regenerated (roadmap-upgrade.cjs entry)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 23:15:55 -04:00
..
2026-05-12 20:15:43 -04:00
2026-05-24 16:32:28 -04:00
2026-05-26 11:57:39 -04:00
2026-05-11 23:01:34 -04:00
2026-05-26 18:56:00 -04:00
2026-05-06 21:51:29 -04:00
2026-05-29 10:54:49 -04:00
2026-05-26 18:56:00 -04:00
2026-05-26 11:23:53 -04:00
2026-05-29 18:21:25 -04:00
2026-05-13 12:45:16 -04:00
2026-05-30 19:19:14 -04:00
2026-05-31 23:15:55 -04:00
2026-05-27 20:21:36 -04:00
2026-05-24 16:32:28 -04:00
2026-05-31 23:15:55 -04:00
2026-05-25 09:54:50 -04:00
2026-05-30 17:08:11 -04:00
2026-05-30 17:06:23 -04:00
2026-04-30 01:04:41 -04:00
2026-05-31 23:15:55 -04:00
2026-05-30 17:06:23 -04:00
2026-05-13 19:34:23 -04:00
2026-05-15 19:52:17 -04:00
2026-05-13 21:19:47 -04:00
2026-05-29 10:54:49 -04:00
2026-05-31 14:42:18 -04:00
2026-05-15 11:59:43 -04:00
2026-05-15 19:52:17 -04:00
2026-05-26 11:23:53 -04:00
2026-05-29 11:39:52 -04:00
2026-05-20 23:10:09 -04:00
2026-05-11 14:36:14 -04:00
2026-05-16 00:07:59 -04:00
2026-05-29 18:21:25 -04:00
2026-05-30 17:08:11 -04:00
2026-05-27 20:21:18 -04:00
2026-05-31 22:05:45 -04:00
2026-05-30 17:25:02 -04:00
2026-05-29 10:32:58 -04:00
2026-05-30 17:25:02 -04:00
2026-05-26 12:25:52 -04:00
2026-05-31 20:28:43 -04:00
2026-05-30 17:44:36 -04:00
2026-05-26 12:21:04 -04:00
2026-05-30 17:06:23 -04:00
2026-05-30 17:44:36 -04:00
2026-05-26 11:24:01 -04:00
2026-05-13 20:46:02 -04:00
2026-05-30 17:06:23 -04:00
2026-05-29 10:54:49 -04:00
2026-05-31 16:15:41 -04:00
2026-05-31 23:15:55 -04:00
2026-05-31 23:15:55 -04:00
2026-05-31 23:15:55 -04:00
2026-05-29 10:54:49 -04:00
2026-05-24 14:17:03 -04:00
2026-05-26 11:24:01 -04:00
2026-05-26 11:24:01 -04:00
2026-05-30 17:06:23 -04:00
2026-05-30 17:06:23 -04:00
2026-05-23 10:15:03 -04:00
2026-05-30 19:19:14 -04:00
2026-05-30 19:19:14 -04:00
2026-05-31 20:28:43 -04:00
2026-05-31 22:05:59 -04:00
2026-05-26 12:22:08 -04:00
2026-05-26 18:56:00 -04:00
2026-05-13 20:46:02 -04:00
2026-04-30 11:38:13 -04:00
2026-05-31 14:42:37 -04:00
2026-05-30 16:53:44 -04:00
2026-05-26 11:23:53 -04:00
2026-05-31 23:15:55 -04:00
2026-05-26 12:21:04 -04:00
2026-05-31 23:15:55 -04:00
2026-05-30 17:06:23 -04:00
2026-05-26 12:20:40 -04:00
2026-05-30 17:06:23 -04:00
2026-05-26 11:24:12 -04:00
2026-05-22 11:23:34 -04:00