Before submitting
Area
apps/mobile
Steps to reproduce
- On Android, turn on Settings → Accessibility → Vision → Remove animations.
- Open the T3 Code app (fully restart it after changing the setting) and connect to an environment.
- Start a new thread (New thread screen: "What should we build in …?").
Expected behavior
The composer shows its toolbar: the attachment (+) button, the model / reasoning picker and the send button, the same as with animations on.
Actual behavior
The composer surface renders at full height with the prompt editor, but the toolbar row is invisible: there is no +, no model picker and no send button, so you can't start a thread from the app. Existing threads are not affected (their toolbar appears when you focus the composer). Turning "Remove animations" off and restarting the app brings the toolbar back.
Impact
Blocks work completely
Version or commit
Android app from the Play Store, installed 2026-10-05. Server 0.0.43-nightly.20260928.2375. Code read at main @ 1a3f7ad.
Environment
OnePlus Nord 3 5G (OxygenOS), Android, environment paired over Tailscale.
Logs or stack traces
No errors on the server side (server trace is clean when the new-thread screen opens).
Screenshots, recordings, or supporting files
No response
Workaround
Turn off Android's "Remove animations" and restart the app.
Likely cause (from reading the source)
ComposerDictationToolbar (apps/mobile/src/features/voice-input/ComposerDictationControl.tsx) wraps the toolbar in an Animated.View with a custom entering animation (toolbarFlip(90, 0)) whose initial values are opacity: 0 and rotateX: 90deg. On the new-thread screen (NewTaskDraftScreen.tsx) the toolbar mounts together with the screen, and with system reduced motion the entering animation seems to never move it to its final state, so it stays transparent / edge-on. In ThreadComposer.tsx the toolbar only mounts later (visible={isToolbarVisible} once the composer is focused), which may be why existing threads are fine. Possible fixes: set reduceMotion on the layout animation so it jumps to the end values, or skip the entering animation on initial mount.
Before submitting
Area
apps/mobile
Steps to reproduce
Expected behavior
The composer shows its toolbar: the attachment (+) button, the model / reasoning picker and the send button, the same as with animations on.
Actual behavior
The composer surface renders at full height with the prompt editor, but the toolbar row is invisible: there is no +, no model picker and no send button, so you can't start a thread from the app. Existing threads are not affected (their toolbar appears when you focus the composer). Turning "Remove animations" off and restarting the app brings the toolbar back.
Impact
Blocks work completely
Version or commit
Android app from the Play Store, installed 2026-10-05. Server 0.0.43-nightly.20260928.2375. Code read at main @ 1a3f7ad.
Environment
OnePlus Nord 3 5G (OxygenOS), Android, environment paired over Tailscale.
Logs or stack traces
Screenshots, recordings, or supporting files
No response
Workaround
Turn off Android's "Remove animations" and restart the app.
Likely cause (from reading the source)
ComposerDictationToolbar(apps/mobile/src/features/voice-input/ComposerDictationControl.tsx) wraps the toolbar in anAnimated.Viewwith a customenteringanimation (toolbarFlip(90, 0)) whose initial values areopacity: 0androtateX: 90deg. On the new-thread screen (NewTaskDraftScreen.tsx) the toolbar mounts together with the screen, and with system reduced motion the entering animation seems to never move it to its final state, so it stays transparent / edge-on. InThreadComposer.tsxthe toolbar only mounts later (visible={isToolbarVisible}once the composer is focused), which may be why existing threads are fine. Possible fixes: setreduceMotionon the layout animation so it jumps to the end values, or skip the entering animation on initial mount.