* fix(#1659): dedup By-Phase rows across padded/unpadded phase numbers phaseRowPattern matched the phase number literally (escapeRegex(String(phaseNum))), so a seeded zero-padded row '| 05 |' was not matched by 'phase complete 5' (pattern '| 5 |'), producing a duplicate row that double-counted the phase. Canonicalize a numeric phase to its integer form (Number('05')===Number('5')===5) and match with a 0* prefix so 5/05/005 all collapse to the same row in either direction. Regression folded into state.test.cjs: seeded '| 05 |' + 'phase complete 5' yields exactly one phase-5 row. Non-numeric phase IDs retain the literal escapeRegex match. * chore(#1659): backfill changeset pr ref to 1663 * fix(#1659): add verification fixture to padded-dedup test under #1522 gate
527 B
527 B
type, pr
| type | pr |
|---|---|
| Fixed | 1663 |
phase complete no longer duplicates a By-Phase row when the phase number's padding differs — completing a phase by its unpadded number (e.g. phase complete 5) against an existing zero-padded By-Phase row (| 05 |) appended a second | 5 | row instead of updating it, double-counting the phase in any column sum. The row matcher now canonicalizes a numeric phase to its integer form (matching 5, 05, 005 in either direction), so the existing row is upserted regardless of padding.