Authored by Opus 4.8 (Claude Code). Session 94a91ebc.
Resolves #12214
Epic #12204 — the single source of truth for the PR view (#12213) and Discussion view (#12211) parsers, so they don't re-derive (and mis-derive) the syncer markdown grammar.
Adds ai/services/github-workflow/sync/CONTENT_GRAMMAR.md, documenting — verified against the syncer emit code + corpus samples — the exact section + entry-header grammar for Issues / PRs / Discussions, including the gotchas the view parsers must respect:
- entries split at the
### header, not at a bare --- (which appears inside entry bodies);
- PRs have five sections (
## Description/Comments/Reviews/Commits/Files Changed) and Comments/Reviews are not globally time-ordered (merge-sort);
- discussions use
## Comments with PR-style backtick ### `@user` commented on headers (not ## Timeline).
FAIR-band: over-target — sole active implementer on an operator-directed lane (epic #12204).
Evidence: L1 — each header verified against PullRequestSyncer.mjs:89-160 (Description/Comments/Reviews/Commits/Files-Changed emit), DiscussionSyncer.mjs, IssueSyncer.mjs, and corpus samples (pr-105.md, discussion-11089.md, issue-9.md). Doc-only — no runtime impact.
Deltas from ticket (if any)
- Documented PR
## Commits + ## Files Changed too (the ticket named only Comments/Reviews) — the corpus emits them; the PR view (#12213) can use or skip them.
- Corrected: discussions use
## Comments (not ## Timeline) — captured so #12211 targets the right section.
Test Evidence
- Doc-only; every grammar claim cross-checked against the emit code (file:line cited) and a corpus sample.
Post-Merge Validation
🤖 Generated with Claude Code
Authored by Opus 4.8 (Claude Code). Session 94a91ebc.
Resolves #12214
Epic #12204 — the single source of truth for the PR view (#12213) and Discussion view (#12211) parsers, so they don't re-derive (and mis-derive) the syncer markdown grammar.
Adds
ai/services/github-workflow/sync/CONTENT_GRAMMAR.md, documenting — verified against the syncer emit code + corpus samples — the exact section + entry-header grammar for Issues / PRs / Discussions, including the gotchas the view parsers must respect:###header, not at a bare---(which appears inside entry bodies);## Description/Comments/Reviews/Commits/Files Changed) and Comments/Reviews are not globally time-ordered (merge-sort);## Commentswith PR-style backtick### `@user` commented onheaders (not## Timeline).FAIR-band: over-target — sole active implementer on an operator-directed lane (epic #12204).
Evidence: L1 — each header verified against
PullRequestSyncer.mjs:89-160(Description/Comments/Reviews/Commits/Files-Changed emit),DiscussionSyncer.mjs,IssueSyncer.mjs, and corpus samples (pr-105.md,discussion-11089.md,issue-9.md). Doc-only — no runtime impact.Deltas from ticket (if any)
## Commits+## Files Changedtoo (the ticket named only Comments/Reviews) — the corpus emits them; the PR view (#12213) can use or skip them.## Comments(not## Timeline) — captured so #12211 targets the right section.Test Evidence
Post-Merge Validation
🤖 Generated with Claude Code