Files
msd-core/.changeset/2012-phase-complete-progress-row.md
Tom Boucher f77179248d fix(#2012): scope phase.complete Progress-row regex to ## Progress section (#2032)
* fix(#2012): scope Progress-row regex to ## Progress section (was binding to earlier table)

The Progress-row writer used a non-global regex that matched ANY table row
starting with the phase number. When an earlier table (e.g. Requirements
coverage | Phase | Requirements | Count |) preceded ## Progress, the regex
bound to the wrong row (3-column), no-op'd, and never reached the real
Progress row. roadmap_updated stayed true (it's existsSync), masking the
failure.

- src/phase.cts: scope the tableRowPattern regex to the ## Progress section
  (indexOf + slice) so it only matches Progress-table rows.
- tests/phase.test.cjs: regression test — ROADMAP with a phase-numbered
  Requirements table before ## Progress → Progress row updated, Requirements
  row untouched.

Closes #2012

* docs(#2012): backfill changeset pr 2032
2026-07-05 17:39:11 -04:00

647 B

type, pr
type pr
Fixed 2032

phase.complete now updates the ## Progress rollup row even when an earlier phase-numbered table precedes it — the Progress-row writer used a non-global regex that matched any table row starting with the phase number, so it bound to the first such row (e.g. a | Phase | Requirements | Count | coverage table), no-op'd on the wrong 3-column row, and never reached the real Progress row. The regex is now scoped to the ## Progress section so it binds to the correct table. The command still returned roadmap_updated: true (that field is fs.existsSync(ROADMAP.md)), masking the silent failure. (#2012)