pingdotgg / pingdotgg/t3code

[Bug]: Android composer and working pill cover the newest transcript lines during a running turn, and they cannot be scrolled into view

Open
#11,992 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

accepted bug via-triage
Dominant language
TypeScript
Stars
23k
Forks
5.9k
Avg merge
11h 14m
Merged PRs (30d)
357

Description

Before submitting
  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.
Area

apps/mobile

Steps to reproduce
  1. Open the T3 Code Android app and open a thread.
  2. Send a prompt so the turn starts running (the floating "Working for Xm Ys" pill appears above the composer).
  3. Let the agent stream a long reply, so the transcript is taller than the viewport.
  4. With the keyboard closed, scroll the transcript to the very end.
Expected behavior

The last lines of the transcript should come to rest fully above the composer. The reserved bottom space should account for the composer and the floating working pill, so every line the agent has streamed can be scrolled into view and read while the turn is still running.

Actual behavior

The newest lines rest underneath the composer chrome and cannot be scrolled any further — the list is already at its maximum scroll offset. The composer's backdrop gradient fades the text that sits behind it, so those lines are visibly present but unreadable, and there is no gesture that reveals them. The only way to read the newest output is to wait for the turn to finish or to open the thread on web/desktop.

In the screenshot below, No Nix flake. Let me try compiling with JDK 21 to catch errors: is the agent's latest line. It is drawn behind the "Working for 10m 08s" pill and the composer input row, and the list will not scroll past this point.

The extra height of the running state seems to be what pushes it over: with the pill hidden (settled thread) the resting position looks correct.

Impact

Major degradation or frequent failure

Version or commit

Android app 1.1.0 (Play Store)

Environment
  • OS: Android
  • Client: T3 Code Android app, 1.1.0 from the Play Store

Note per #11119: no production Android OTA appears to have published between 2026-09-07 and 2026-09-15, so a 1.1.0 store install is running the Sep 7 runtime. I have not been able to check this against a current main build, so this may already be better on main.

Logs or stack traces

Screenshots, recordings, or supporting files

Composer and working pill covering the newest transcript line on Android

Workaround

Wait for the turn to settle, or read the thread on web/desktop.


Possibly related

Not a duplicate of any of these as far as I can tell, but they are close enough to be worth linking:

  • #10960 — Android transcript drawing under the chrome, but triaged as the keyboard-open (Gboard) case. This report is with the keyboard closed, during a running turn.
  • #11119 / #10846 — Android overlap within a message (timestamp/copy chrome over prose). Different failure; being addressed by #11611.
  • #4999 (closed unmerged) — "keep the composer from covering the last message on thread open". Its diagnosis reads very close to this: the feed's bottom inset comes from an async measurement of the absolutely-positioned composer overlay, and status chrome that animates in afterwards lands after the list has already finished positioning. It was closed in the 2026-09-07 backlog sweep with an invitation to rebase.
  • #8800 (open, approved) — adds 12pt bottom padding to ThreadFeed. That would not cover a full pill + composer height, so I do not think it closes this.
  • #5582 / #5585 (both merged) — the composer backdrop gradient and the first-open resting position on Android. Both appear to be working here: the text is faded, and a settled thread rests correctly.

I did not reproduce this against a source build, so the following is reading rather than a verified root cause: on Android contentInsetEndStaticAdjustment is 0 and the reserved space arrives through the animated contentInsetEndAdjustment shared value, which adds the constant FLOATING_WORKING_CONTROL_COVERAGE when the pill is shown. That constant is an estimate of the pill's overlap rather than a measurement of it, which would fit the symptom being specific to the running state.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the Android ThreadFeed and inspect how contentInsetEndAdjustment and FLOATING_WORKING_CONTROL_COVERAGE reserve space when the working pill is visible; the issue notes contentInsetEndStaticAdjustment is 0. Reproduce with the keyboard closed and a long running reply, then verify the newest transcript lines can be scrolled fully above the pill and composer.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, typescript
Domain
mobile
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
64/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.