Repository navigation
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
- On an Android phone, sign in to T3 Connect and link an environment.
- Open Settings → Notifications and enable both Device Notifications and Agent Live Updates (labelled Ongoing Agent Activity on Android versions before Live Updates are available).
- Start a run in any thread and let it finish while the phone is locked or the app is in the background. The thread used here is in No project.
- Open the Android notification shade.
Expected behavior
A single thread completion should produce one visible notification, or the activity card and the completion alert should be merged into one card. The alert sound/vibration should still fire exactly once.
Actual behavior
Every completion produces two cards for the same thread and the same event:
- Ongoing activity card — title is the thread name, body is
Done No project.Doneis bold and tinted; the card is silent and stays for up to ~15 minutes. - Completion alert — title is the thread name, body is
Done: No project. This is the card that makes the sound.
The only visible difference is the colon and the bold status prefix, so it reads as a duplicated notification. On Android 16 the activity card can be promoted to a Live Update, which makes the duplication more obvious: the same finish shows up as a promoted chip and as a separate alert.
This is deterministic and happens for every completed run while both notification options are on, so the shade fills with pairs when several threads finish.
Relevant code paths (current main):
infra/relay/src/agentActivity/FcmDeliveries.tsbuilds one FCM data message that contains bothalert_*fields andactivity_*fields (...androidActivityData(displayedAggregate), ...alert).apps/mobile/modules/t3-agent-notifications/.../AgentNotifications.ktreceive()renders that single payload twice:showAlert(...)andupdateActivity(...).- The alert body is
${status}: ${projectTitle}(agentActivityAlerts.ts→alertForActivityRows), while the activity body is${status} ${title}with the thread title replaced by the project for a single row (AgentActivityPresentation.kt→statusLine). That matches the two strings in the screenshot.
No project is the project slot for a thread that is not in a project; it is not part of the notification defect.
Impact
Minor bug or occasional failure
Version or commit
T3 Code Android 2.2.0 (735), installed from Google Play
Environment
Redmi Note 14
Android 16 - HyperOS 3.0.302
T3 Connect enabled; Device Notifications and Agent Live Updates both enabled.
Logs or stack traces
No crash or error. The duplicate is visible in the payload and rendering paths above; no device logs needed to reproduce.
Screenshots, recordings, or supporting files
The screenshot shows two T3 Code cards for the thread settings for phone workflow:
Done No project(activity card)Done: No project(completion alert)
Workaround
Turn off Agent Live Updates / Ongoing Agent Activity in Settings → Notifications to keep only the Done: … alert. Turning off Device Notifications instead leaves the silent activity card but removes audible completion alerts.
Activity