rowboat/apps/x
Arjun 992c1883a7 fix(x): collapse quoted replies in Outlook-authored email
Quoted-chain detection only matched Gmail/Apple markup (.gmail_quote,
.gmail_attr, blockquote[type=cite]). Outlook emits none of those, so
hasQuote stayed false, no "•••" toggle rendered, and the whole quoted
history was drawn inline — each message in a long thread re-rendering
every message before it.

Outlook desktop marks the boundary with a border-top:solid #E1E1E1 div
that holds only the From:/Sent:/Subject: header; the quoted body trails
it as siblings. Hiding just the matched element is therefore not enough,
so mark the divider and everything after it, climbing ancestors. Require
the header block before treating a border-top div as a boundary —
signatures and marketing footers draw the same rule, and wrongly hiding a
signature is worse than wrongly showing a quote. Measured against a
558-message local corpus: 7/7 real quotes caught, 0 false positives.

Also fixes a pre-existing bug: a forward is quoted top to bottom, so
hiding its quote left a blank body behind a toggle nobody would press.
When nothing visible remains, show everything and drop the toggle.

The plain-text path had the same Gmail-only hole, and the fix already
existed in the file — isReplyQuoteBoundary handled Outlook headers but
was wired only to the composer. It now backs display too.

Quote tagging moves into the srcDoc build, so quotes are hidden on first
paint and the measured iframe height is the collapsed height.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 18:15:13 +05:30
..
.pnpm-store/v11 add talking mascot 2026-07-02 22:20:11 +05:30
apps fix(x): collapse quoted replies in Outlook-authored email 2026-07-09 18:15:13 +05:30
docs feat(apps): M3 UI — catalog, D18 install dialog, publish dialog, detail actions 2026-07-06 15:34:54 +05:30
packages refactor(x): one delivery path for turn events — chat, channels, deltas 2026-07-09 15:47:21 +05:30
.gitignore feat(x): reference-based model requests + wire-form composer 2026-07-02 14:20:44 +05:30
ANALYTICS.md phase 1 improvements to reduce latency: smart endpointing, streaming tts, early clause speech, ack 2026-07-04 12:51:06 +05:30
CODE_MODE_ENGINES_PLAN.md Code mode: make packaged builds work via managed engine provisioning (#625) 2026-06-17 21:53:15 +05:30
eslint.config.mts ignore renderer eslint 2026-01-16 12:05:33 +05:30
LIVE_NOTE.md Refactor builtin file tools beyond workspace scope 2026-05-25 16:21:51 +05:30
MINI_APPS_PLAN.md feat(mini-apps): copilot builder — build-mini-app skill + install/data tools 2026-07-01 01:25:45 +05:30
package.json ci(x): parent test harness + GitHub Actions workflow 2026-07-02 14:23:39 +05:30
pnpm-lock.yaml build(x): graft vscode-jsonrpc onto langium via packageExtensions 2026-07-07 02:45:09 +05:30
pnpm-workspace.yaml build(x): graft vscode-jsonrpc onto langium via packageExtensions 2026-07-07 02:45:09 +05:30
tsconfig.base.json bootstrap new electron app 2026-01-16 12:05:33 +05:30
VIDEO_MODE.md Add in-call mic mute: pauses all input (mic audio + frame capture) 2026-07-06 00:28:34 +05:30