meetingSections.test.tsfeat(meetings,timeline): open the real thing, not a card about it
A meeting, an email thread and a Slack channel each had two renderings: the
real surface, and a read-only summary that some other view drew for itself.
Clicking a timeline row or a chat citation got you the summary — a transcript
above two note columns, a Slack message with no neighbours and no composer —
which looked nothing like the same object everywhere else and could do nothing
with it.
Both modals now hand off to the real surface. Meetings get one view for every
caller: transcript / notes / AI notes as tabs, the recording BESIDE the
transcript rather than behind a tab of its own, and every stamped transcript
line a way into the recording. A citation says which object and which quote;
the surface finds the quote to pick its tab, paints it, and cues the player to
the second it was said at. Slack rows open their channel, scrolled to the
message — or the thread, when the message is a reply the stream never carried.
The fuzzy quote matcher moves out of useMarkHighlight so the DOM highlighter
and the tab routing cannot disagree about where a quote is. getEventFullContent
gains the four ids the chat path needed to reach those surfaces at all.
Co-Authored-By: Claude Opus 5 (1M context) <<email>>Aug 30, 2026, 8:49 PMtranscriptLines.test.tsfeat(meetings,timeline): open the real thing, not a card about it
A meeting, an email thread and a Slack channel each had two renderings: the
real surface, and a read-only summary that some other view drew for itself.
Clicking a timeline row or a chat citation got you the summary — a transcript
above two note columns, a Slack message with no neighbours and no composer —
which looked nothing like the same object everywhere else and could do nothing
with it.
Both modals now hand off to the real surface. Meetings get one view for every
caller: transcript / notes / AI notes as tabs, the recording BESIDE the
transcript rather than behind a tab of its own, and every stamped transcript
line a way into the recording. A citation says which object and which quote;
the surface finds the quote to pick its tab, paints it, and cues the player to
the second it was said at. Slack rows open their channel, scrolled to the
message — or the thread, when the message is a reply the stream never carried.
The fuzzy quote matcher moves out of useMarkHighlight so the DOM highlighter
and the tab routing cannot disagree about where a quote is. getEventFullContent
gains the four ids the chat path needed to reach those surfaces at all.
Co-Authored-By: Claude Opus 5 (1M context) <<email>>Aug 30, 2026, 8:49 PM