feat: normalize generated markdown for markdownlint compliance (#1112)
Add normalizeMd() utility that fixes common markdownlint violations
in GSD-generated .planning/ files, improving IDE readability:
MD022 — Blank lines around headings
MD031 — Blank lines around fenced code blocks
MD032 — Blank lines around lists
MD012 — No multiple consecutive blank lines (collapsed to max 2)
MD047 — Files end with a single newline
Applied at key write points:
- state.cjs: writeStateMd() normalizes STATE.md on every write
- frontmatter.cjs: frontmatter set/merge commands normalize output
- template.cjs: template fill normalizes generated plan/summary files
- milestone.cjs: MILESTONES.md archive writes normalized
Includes 14 new tests covering all rules, edge cases (CRLF, frontmatter,
ordered lists, code blocks, real-world STATE.md patterns).
Closes #1040