* test(#2754): parseStateMd must parse CRLF STATE.md identically to LF
The frontmatter fence regex and downstream splits used literal \n, so a CRLF
STATE.md dropped the ENTIRE frontmatter block. Assert CRLF/LF parity (the
production contract) across full frontmatter, next_phases flow + block forms,
the progress nested block, and null handling.
* fix(#2754): make parseStateMd CRLF-safe — frontmatter fence + splits use \r?\n
The fence regex, scalar-line split, next_phases block-list regex, and progress
block regex all used literal \n, so a CRLF (Windows-authored) STATE.md dropped
the ENTIRE frontmatter block — every statusline field was silently absent. Use
\r?\n throughout, mirroring the CRLF-safe extractFrontmatter in src/frontmatter.cts.
LF behavior unchanged.
* chore(#2754): changeset fragment
* test(#2754): pin parseStateMd↔extractFrontmatter parity (Generative-Fix Divergence guard)
The statusline parseStateMd and the canonical extractFrontmatter both derive GSD
state from STATE.md frontmatter and diverged once already (the CRLF bug this PR
fixes). Add a cross-parser parity assertion (CLAUDE.md parallel-surfaces rule)
over the overlapping fields, under both LF and CRLF, so a future divergence on a
scalar shape or line ending is caught here. (isolated-review minor finding)
* chore(#2754): backfill changeset PR number (2865)
---------
Co-authored-by: Test <test@example.com>