LearnNewsExamplesServices
Frontmatter
id12216
titleDiscussionSyncer: structured threaded replies (depth-aware emit)
stateClosed
labels
enhancementaibuild
assigneesneo-gpt
createdAtMay 30, 2026, 7:26 PM
updatedAtJun 7, 2026, 7:17 PM
githubUrlhttps://github.com/neomjs/neo/issues/12216
authorneo-opus-ada
commentsCount2
parentIssue12204
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 1, 2026, 5:23 PM

DiscussionSyncer: structured threaded replies (depth-aware emit)

Closed v13.0.0/archive-v13-0-0-chunk-15 enhancementaibuild
neo-opus-ada
neo-opus-ada commented on May 30, 2026, 7:26 PM

Context

Part of epic #12204, syncer step 11. Discussion replies are already fetched but currently flattened into opaque > blockquote prose, losing parent to child structure and per-reply identity.

The Fix

Emit replies as identifiable sub-units with depth instead of flattened blockquote prose, enabling the Discussion view to render faithful nesting while preserving the existing top-level comment grammar. Replies are already fetched by DiscussionSyncer.mjs; this is an emit-shape and consumer-parser contract change, not a new GitHub fetch lane.

Contract Ledger

Target Surface Source of Authority Proposed Behavior Fallback / Edge Case Docs Evidence
DiscussionSyncer discussion reply emitter #12216 + #12204 syncer step 11 Preserve top-level ### comment headers; emit each reply immediately after its parent comment with a parseable depth marker, e.g. #### Reply depth=1 by @user on <ISO_Z>, followed by optional [!ANSWER] and the raw reply markdown body Current GitHub query exposes one reply level; use depth=1 now and keep the marker future-proof if deeper API data arrives JSDoc near the emitter + CONTENT_GRAMMAR.md Discussions section Focused DiscussionSyncer.spec.mjs assertion for parent comment + reply marker + accepted-answer reply
CONTENT_GRAMMAR.md discussion grammar #12216 + current grammar doc Replace the flattened blockquote reply rule with the structured reply marker rule; specify parent association is lexical: replies belong to the preceding top-level comment until the next ### comment header Existing flattened reply blocks remain legacy-readable as parent-body markdown; do not split on bare --- CONTENT_GRAMMAR.md Grammar diff plus parser fixture
Portal discussion consumer #12216 + #12204 shared timeline contract Parse structured reply markers into child reply records under the parent comment; render nested-in-bubble for MVP while preserving .neo-timeline-item[data-record-id] and sections store stability Legacy flattened blockquotes remain rendered inside the parent comment body; per-reply canvas nodes stay v2 unless this ticket explicitly expands Portal.view.news.discussions.Component parser summary/update if parser changes Focused component/parser test or L3 portal discussion sample with nested reply

Acceptance Criteria

  • Synced discussions carry depth-tagged reply structure parseable by the view.
  • CONTENT_GRAMMAR.md documents the structured reply marker and the legacy flattened fallback.
  • Portal discussion parsing preserves existing top-level comment timeline entries and nests parsed replies under their parent comment.
  • Existing flattened reply markdown remains readable inside the parent comment body.

Related

  • Epic #12204.
  • Corrects the earlier #12207 reference; #12207 is the timeline-section rename sub, not the parent epic.
  • Unblocks the v2 per-reply-canvas-node enhancement; the Discussion view ships v1 nested-in-bubble unless a later ticket explicitly promotes per-reply canvas nodes.
tobiu referenced in commit 8128929 - "feat(portal): structure discussion replies (#12216) (#12308) on Jun 1, 2026, 5:23 PM
tobiu closed this issue on Jun 1, 2026, 5:23 PM