fix(mobile): new-session composer spacing and session bottom-inset surface - #4774
Conversation
|
(bot) On-device E2E verification (iPhone 17 / iOS 26.5 simulator, this worktree's stack, bundle provenance validated). Baseline numbers from the confirmed reproduction on the unmodified code. New-session action-row gap — PASS. Attachment-row bottom → toolbar top measured from the Maestro hierarchy: 8pt in all four combinations of keyboard open/closed × light/dark (baseline 24pt; acceptance ≤12pt). Everything else on the screen matches baseline. Session bottom strip vs composer surface — PASS. Full-width row-average sampling, keyboard closed: light Δ(−0.07, 0, 0), dark Δ(0, 0, 0) per channel (baseline: light (0,−1,+1), dark (−4,−4,−4)). Within the |Δ| ≤ 2 tolerance in both themes, dark strictly improved to exact equality, and no visible seam, hairline, or tonal step in either theme. Read-only banner state — PASS (unchanged). On a read-only session with messages, the strip below the banner samples as the solid screen background in both themes (dark (14,14,16) = Two states are environment-blocked, not silently passed:
Checks run at the barrier from |
|
(bot) Standin review of head Result: No findings. Evidence verified during the review:
Residual testing risks (recorded, non-blocking):
|
What
Two iOS-visible fixes on the Agents surfaces.
New session screen — dead space under the attachment/microphone row
The prompt card reserved 24pt of permanently empty space between the action row and the model/mode toolbar: a
min-h-[20px]wrapper aroundVoiceInputStatus, which rendersnullin every status exceptlistening(the reservation was introduced in 863d6ff so toggling voice input could not shift the composer layout).The "Listening…" caption now renders inline as the middle child of the action row, inside a height-pinned
h-9wrapper (the same 36pt as the flanking paperclip/microphone controls) withoverflow-hidden, so the row height is set by the controls and cannot change when the caption appears — at any Dynamic Type scale. The reserved block is deleted and the row's bottom padding becomespb-2, matching the card's existingpt-2top inset.Session screen — bottom safe-area strip matches the composer surface
The strip below the composer was a solid
bg-backgroundview while the composer above it is aBlurBar(expo-blur, intensity 40). A tinted blur overbg-backgrounddoes not resolve tobg-background— measured delta (−4,−4,−4) per channel in dark theme.When the composer is the bottom-most visible element, the strip now renders the same
BlurBarsurface (border-t-0, verified to merge away the hairline viatwMerge). The solidbg-backgroundstrip stays for the blocking question/permission cards, and the strip's placement after theKeyboardAvoidingView— which keeps the composer flush on the open keyboard — is unchanged. Android is unaffected (BlurBaralready resolves tobg-backgroundthere).Deliberately out of scope: the read-only-session banner (
bg-secondary) also sits above abg-backgroundstrip; that surface is unchanged.Verification
apps/mobile/:pnpm format && pnpm typecheck && pnpm lint && pnpm check:unused && pnpm test(1871/1871 passing) andgit diff --check.