Skip to content

feat(ui): show agent-sent messages as left-rule rows, not as your own messages - #90

Open
jimprince wants to merge 1 commit into
product/mobile-identities-20261012from
product/msgstyle-20261013
Open

jimprince wants to merge 1 commit into
product/mobile-identities-20261012from
product/msgstyle-20261013

Conversation

@jimprince

@jimprince jimprince commented Oct 12, 2026 •

Copy link
Copy Markdown
Owner

Problem

Messages sent by agents and automations looked like your own messages, making their source hard to distinguish.

Fix

Use Brad's approved option A: a left-aligned row with a left rule, without a user bubble or You heading, across web, desktop, phone and native mobile. Link a sender known to the environment; show other senders as text. Put the CLI sender header and reply command behind Details, while keeping the message body readable. Steer and interrupt messages keep their human styling.

Both implementation and Opus review fixes form one droppable patch above PR #89. This PR targets Oct 13 and changes no Oct 12 product branches.

Checks

Local combined-tip gates passed: 328 focused tests, eight affected-package typechecks, vp check (0 errors; 957 existing warnings), isolated 160-patch stack check, docs and 248 release-note entries. Deliberately disabled header parsing and no-change suppression produced 15 failed assertions, then restored production code passed.

Exact-tip combined candidate CI 38218642669 is green on fbe9de6 (attempt 1), including Fork patch policy; the exact-candidate verification contract passed. No baseline flakes or reruns. All 158 lower patch objects are unchanged.

E alone also passed its 94 focused tests before F was added.

Not included

Real-app screenshots and visual UAT follow from an isolated proof worker. No changes to message delivery, provider permissions or the Oct 12 stack.

Built by Claude Sonnet 5.5, Claude Opus 5.5 and GPT-6.1 Sol agents via T3 Code

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L labels Oct 12, 2026
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ No successful main baseline artifact is available yet. This run establishes the initial measurement.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire — 4.9 KiB — 6.8 KiB ✅
Codex Thread snapshot wire — 3.8 KiB — 4.9 KiB ✅
Codex Live turn WebSocket wire — 1.2 KiB — 2.0 KiB ✅
Codex Live turn WebSocket decoded — 20.8 KiB — 29.3 KiB ✅
Codex Live turn messages — 1 — 8 ✅
Claude Total thread wire — 5.0 KiB — 6.8 KiB ✅
Claude Thread snapshot wire — 3.8 KiB — 4.9 KiB ✅
Claude Live turn WebSocket wire — 1.2 KiB — 2.0 KiB ✅
Claude Live turn WebSocket decoded — 21.2 KiB — 29.3 KiB ✅
Claude Live turn messages — 2 — 8 ✅

Baseline: unavailable · PR result: e920729 · Source CI: failure

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@jimprince

Copy link
Copy Markdown
Owner Author

UI before / after

Method: a component render, not the running app. The real UserTimelineRow from MessagesTimeline (with the real message body, the "Show full message" clamp and the Details disclosure), the app's CSS and dark theme, a message column of 720 px on desktop and 390 px on a phone, mounted on synthetic data (invented senders, tasks and text). Only the data hooks and the row context are stubbed. Before = PR #89 tip (a82f686), after = this PR's head (e920729). The same six messages are rendered at both commits: a human message, an agent message from a known sender, one from an unknown (remote) sender, a long agent message, an automation message, and a steer message. Harness script: throwaway, not committed.

Desktop (720 px column)

Before: every agent and automation message is a right-aligned bubble with the small "Sent by another agent" / "Sent by automation" label above it, and the raw sender header is printed in the bubble text. After: a left-rule row with no fill and no "You" heading; the sender is a link when this environment knows it ("Release canary") and plain text when it does not ("deploy-watcher"); the header and reply command are behind Details; the human message and the steer message stay human-shaped bubbles.

Before After

Details open (header and reply command), and the long message after "Show full message":

Details open Details open, long message expanded

Phone (390x844, dark)

Before After Details open Expanded

Native mobile: not shown

The native ThreadFeed rows cannot be rendered on this VM, so there is no native image. The web render above is the only visual evidence. The first native use of the left rule (border-l-2) is unverified until it is looked at on a device.

Images live on the throwaway branch pr-assets/90 (images only, not part of this PR). Everything shown is synthetic data.

Rendered by Claude Sonnet 5.5 via Claude Code in T3 Code.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant