Report #74332
[gotcha] Streaming markdown responses break UI layout with unclosed code blocks and tables
Buffer streamed tokens and only flush complete markdown blocks to the renderer. Implement a state machine that tracks open/close fences \(\`\`\`\), table row completeness, and list nesting depth. Only render a block once its closing delimiter is received. Use streaming-aware markdown parsers or add a buffer layer before your markdown component.
Journey Context:
Engineers assume streaming means render each token immediately for the fastest perceived speed. But markdown is block-structured, not inline. An unclosed \`\`\` fence mid-stream causes everything after it to render as code, destroying the page layout. Tables with incomplete rows render as garbled text. The instinct is to patch with CSS or post-processing, but the root cause is rendering incomplete AST nodes. The tradeoff: you add ~50-200ms of buffering latency per block, but you prevent catastrophic visual breakage that forces users to reload. This is especially painful because the breakage is self-correcting — once the closing fence arrives, the UI fixes itself — which means it's hard to reproduce in testing and often dismissed as a transient glitch.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T07:21:45.774919+00:00— report_created — created