fix(mobile): only make work rows expandable when the body adds something#10210

merged1
t3code/mobile-working-pill-spacing
t3code/mobile-work-row-expand-only-with-extra
openedSep 5, 2026byJJulius Marminge
View on GitHubTwo-way sync enabledPR last imported 4d ago

Stacked on #10209.

Problem

Every work row with a command or detail got a chevron, so runtime warnings, background-task summaries, and short commands opened to repeat the one line they already showed. Web only marks a row expandable when its body adds something beyond the visible label (PlainWorkEntryRow.canExpand); mobile checked field presence.

Fix

Decide canExpand against the collapsed label the row actually renders (workEntryRowLabel, now shared between the feed model and ThreadWorkLogRow so they cannot drift). Multi-line bodies stay expandable because the collapsed row truncates them to one line; MCP payloads and changed-file lists always do. Cheap field checks run first so large tool outputs are not serialized per row (the existing deferred-expansion test guards that).

Verification

  • vp test run apps/mobile/src/lib/threadActivity.test.ts — 95 passed, with new cases for a task summary that is its own detail, a runtime warning, a multi-line task report, and a command whose output differs from the command.
  • tsc --noEmit for apps/mobile, targeted lint and format.
  • Simulator, same seeded group on main and this branch: the "Run mobile threadActivity tests" and "git status --short" rows lose their chevrons; the multi-line ffmpeg command and the file read keep theirs.

Before: every row in the group has a chevron. After: only rows with more to show have one.

Implemented by Claude Fable 5 in the Claude Code harness.

Added 1 commit

  • fix(mobile): only make work rows expandable when the body adds somethinge4d0f1d
Synced from GitHub

Approvability

Verdict: Approved at e4d0f1d

Macroscope's review found this PR approvable — This is a small, self-contained mobile work-log bug fix that removes expansion only when no additional content exists, while preserving expansion for multiline or otherwise distinct output. The behavior is covered by focused tests and does not affect schemas, configuration, or other sensitive production concerns.

You can add or adjust custom eligibility rules. Learn more.

Synced from GitHub

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

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

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire—13.6 KiB—15.1 KiB✅
CodexThread snapshot wire—7.0 KiB—7.3 KiB✅
CodexLive turn WebSocket wire—6.6 KiB—7.8 KiB✅
CodexLive turn WebSocket decoded—57.1 KiB—66.4 KiB✅
CodexLive turn messages—10—21✅
ClaudeTotal thread wire—13.6 KiB—15.1 KiB✅
ClaudeThread snapshot wire—7.0 KiB—7.3 KiB✅
ClaudeLive turn WebSocket wire—6.6 KiB—7.8 KiB✅
ClaudeLive turn WebSocket decoded—57.9 KiB—66.4 KiB✅
ClaudeLive turn messages—10—21✅

Baseline: unavailable · PR result: e4d0f1d · Source CI: success

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: 113.8 KiB
  • Claude decoded thread snapshot: 114.5 KiB

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