Address @trek-e's review (Option 2, interim tactical fix) on PR #2168:
- Add a fast-check property test (tests/derive-progress.property.test.cjs)
asserting deriveProgressFromRoadmap's derived counts are invariant to
header column ORDER and COUNT — shuffle the header cells and inject
unrelated columns, assert counts match the data. This pins the parser's
core new capability (header-name lookup vs. the old position-locked regex).
Named derive-progress (not phase-lifecycle) so it isn't greedily attributed
to the shorter `phase` prod prefix under lint-test-file-count; like the other
*.property.test.cjs files it maps to no module and is cap-exempt.
- Add boundary regression tests in state.test.cjs: header+separator only
(0 rows -> all-null), exactly 1 row, and ragged rows (extra/short cells,
handled without throwing).
- Mark the adhoc Progress-table scan as pending the ADR-2143
parseMarkdownTable/TABLE_SCHEMAS seam (re-point pending #1372 -> #2143).
- Fix the changeset lead-in to the required bold form.
Per the maintainer, reader/writer parity and CONTEXT.md updates are
explicitly out of scope for this stopgap — Phase 1 (ADR-2143) owns them.
Validated: property test 200 runs green; state.test.cjs #2137 block 8/8;
eslint clean; lint-test-file-count green; full `npm test` exit 0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>