Triage
Confirmed as a web/desktop markdown rendering bug (minor / cosmetic). The Explanatory Output Style plugin is doing what it is supposed to: a SessionStart hook tells Claude to emit ASCII-art insight fences like:
| 1 | ★ Insight ───────────────────────────────────── |
| 2 | [2–3 educational points] |
| 3 | ───────────────────────────────────────────────── |
Claude Code’s own CLI special-cases that into a boxed callout. T3 does not. We persist the text as a normal assistant message and run it through ChatMarkdown.
We already tried to meet this halfway in #4344 (closed #3652) by turning on lineBreaks when the message matches ★ Insight. That restored newlines so the block no longer collapses to one paragraph, but the ─ box-drawing still wraps (overflow-wrap: anywhere) and draws a rule through the first insight line — matching the second screenshot. This is leftover from that fix, not a duplicate of #3652.
Not the same class of issue as #7644 (terminal), #3747 (error JSON), or #1147 (tool metadata leak).
Where to fix
- Web/desktop:
MessagesTimeline.logic.ts/AssistantTimelineRow/ChatMarkdown - Mobile also missing:
ThreadFeedAssistantMarkdownContenthas no insight detection and does not preserve soft breaks for these blocks
Suggested fix
Parse the ★ Insight / trailing ─ fences out of assistant text and render a dedicated callout (title + body). Do not send the box-drawing through markdown. Same split on web and mobile. The learning-output-style plugin uses the same fence, so one parser covers both.
Workaround for now: disable the plugin.