Skip to content

[Bug]: iOS Live Activity updates arrive but never alert (no Dynamic Island expansion, no Apple Watch alert) #20239

Closed

Description

@rescuedfamily

Before submitting

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

Area

Not sure (iOS app + relay delivery)

Steps to reproduce

  1. On iPhone, sign in to T3 Connect with agent activity publishing enabled on the environment.
  2. In Settings > Notifications, turn on Device Notifications and Live Activity Updates. iOS notification permission is granted.
  3. Start a short agent turn, then lock the phone.
  4. Wait for the turn to finish.
  5. Turn Live Activity Updates off, leave Device Notifications on, and repeat steps 3–4.

Expected behavior

With Live Activity Updates on, a completion arrives as an alerting Live Activity update. The relay attaches an alert to that update:

  • : (alertForAttentionTransition({
    previousAggregate,
    nextAggregate,
    preferences,
    }) ??
    alertForNewlyTerminal({
    previousAggregate,
    nextAggregate,
    preferences,
    nowMs: input.nowMs,
    includeUnobserved: true,
  • // An alert dict on an update/end makes it an "alerting" update: iOS wakes the
    // screen and plays the haptic (the Apple Sports score-change behavior) instead
    // of silently redrawing the activity.
    function liveActivityAlertPayload(alert: ApnsLiveActivityAlert) {
    return {
    alert: {
    title: alert.title,
    body: alert.body,
    sound: "default",
    },
    };

Per Apple (WWDC24 session 10068), an alerting update expands the Dynamic Island on iPhone, and on Apple Watch it launches the Smart Stack and shows the alert. The widget opts in to the Watch through bannerSmall / supplementalActivityFamilies([.small, .medium]).

Actual behavior

Live Activity Updates on:

  • The Live Activity content updates normally to "Done" on the Lock Screen, in the Dynamic Island, and in the Apple Watch Smart Stack.
  • No alert presentation: the screen doesn't wake, the Dynamic Island doesn't expand, and there's no Apple Watch alert.
  • No ordinary banner either, which is expected because the Live Activity takes precedence.

Live Activity Updates off (same device, same session):

  • The ordinary "Done" notification arrives on both iPhone and Apple Watch.

So notification permission, the device push token, the relay's notificationsEnabled for this device, and the ordinary APNs path all work. Live Activity content delivery also works. The failure is specific to the alert on Live Activity updates. It happens either because the alert isn't attached (for example, alertForNewlyTerminal / alertForAttentionTransition returning null at enqueue or at the delivery-time recheck in sendLiveActivity), or because iOS isn't presenting it.

Turning Device Notifications off and back on didn't change anything.

Other reports (#11938, #20087) describe phones and Watches receiving "Done" alerts, so this may depend on device state or timing.

Could a maintainer check the relay's delivery attempts for this device and confirm whether completion live_activity_update jobs were sent with an alert and priority 10?

Possibly related: the card doesn't end when Live Activity Updates is turned off

After step 5, the existing card stayed on the Lock Screen frozen at its last content, well past the 15-second dismissal window. Turning the setting off doesn't end the local card on the phone (handleLiveActivitiesChange calls setLiveActivityUpdatesEnabled but not endLocalLiveActivities), so removal depends on the relay's live_activity_end, which carries a 15-second dismissal-date (ApnsClient.ts L119-L136). That end never took effect.

Pattern on this device: content-only updates (priority 5, no alert) are applied, while both alerting updates and the end event (priority 10) never take effect. I haven't verified that this is the cause; I'm including it in case it helps narrow things down. It's different from #16241, which covers cards iOS has already ended.

Impact

Major degradation or frequent failure. Completion and input alerts are the main way to know an agent needs you. The only workaround gives up the Live Activity.

Version or commit

Desktop/server: 0.1.1-nightly.20261016.3190
iPhone app: 2.0.0 (App Store)

Environment

Windows desktop host. iPhone with Dynamic Island on iOS 26.6.1. Apple Watch on watchOS 26.5 (23T570). Silent mode on; no Focus mode active during testing.

Logs or stack traces

The host's server traces show AgentAwarenessRelay.publishThread succeeding (~1,000 spans, no failures), but they don't include the relay's per-device delivery results. I don't have access to relay-side logs.

Workaround

Turn Live Activity Updates off. Ordinary notifications then arrive on iPhone and Apple Watch, but you lose the ongoing progress display.

Activity

  1. juliusmarminge commented on Oct 16, 2026

    @juliusmarminge
    Member

    Note

    Grok responding on behalf of Julius.

    Thanks for the careful comparison. The relay does attach an alert to the completion Live Activity update, so this needs more data before we can tell whether it's on our side or an iOS presentation rule. Could you share:

    • iOS and watchOS versions, and your device models
    • whether a Focus mode or Scheduled Summary was active
    • the T3 Code app version, and whether the server/relay is on a current build
    • whether the result changes if the Live Activity started less than a few minutes before the turn finished

    Note that iOS limits how often alerting Live Activity updates actually present, so we'll need those details to rule that out.

  2. rescuedfamily commented on Oct 16, 2026

    @rescuedfamily
    Author

    Thanks! A few of these are in the original report; repeating them here with the rest:

    • Devices: iPhone 16 Pro on iOS 26.6.1; Apple Watch Series 8 (GPS) on watchOS 26.5 (23T570)
    • Focus / Scheduled Summary: No Focus mode was active. Scheduled Summary is off. T3 Code is enabled under Prioritize Notifications.
    • Versions: T3 Code iOS app 2.0.0 (App Store). Desktop/server 0.1.1-nightly.20261016.3190. I can't see the hosted relay's build.
    • More Frequent Updates (Settings > T3 Code > Live Activities) is on.

    Live Activity age: your theory looks right for short turns. With Live Activity Updates on and the phone locked:

    Turn Result
    Several short turns (about 1–2 min) Card content updated. No alert on iPhone or Apple Watch.
    6-minute turn on a fresh card (old card cleared first), card running the whole time, another thread still running Card updated to "Done" for that row. One short haptic on Apple Watch, which I assume was the alert, and it repeats on later completions. The locked iPhone never wakes or expands; I only see the change when I wake the screen myself. Nothing appears in Notification Center, and no banner.

    So alerts seem to be missing on short turns, and present but very easy to miss on longer ones. Two follow-up questions:

    1. Is a single Watch haptic, with no iPhone presentation and nothing kept in Notification Center, the expected result of an alerting Live Activity update while the iPhone is locked and the Watch is worn?
    2. For short turns, is the missing alert expected because the completion is the first update the card receives? (newlyTerminalRows returns nothing when previousAggregate is null, if I'm reading it right.)

    Other observations from these tests:

    • On Apple Watch, the tap arrives, but the finished task never shows up. The small (bannerSmall) layout renders only row0, and running rows sort before completed ones, so while another thread is running, the Watch card keeps showing the running thread and "1 active." The tap gives no sign of which task finished.

      bannerSmall: (
      <VStack alignment="leading" spacing={5} modifiers={[padding({ all: 10 })]}>
      <HStack spacing={7} alignment="center">
      {renderLogo(14, primaryForeground)}
      <Text
      modifiers={[
      font({ weight: "bold", size: 13 }),
      foregroundStyle(headerTint),
      lineLimit(1),
      ]}
      >
      {attentionRows.length > 0 ? summary : activeLabel}
      </Text>
      <Spacer minLength={6} />
      </HStack>
      {row0 ? (
      <HStack spacing={7} alignment="center">
      <Text
      modifiers={[
      font({ weight: "semibold", size: 12 }),
      foregroundStyle(primaryForeground),
      lineLimit(1),
      ]}
      >
      {row0.threadTitle}
      </Text>
      <Spacer minLength={6} />
      <Text modifiers={[font({ size: 11 }), foregroundStyle(phaseTint(row0.phase))]}>
      {row0.status}
      </Text>
      </HStack>
      ) : null}
      </VStack>

    • When I turned Live Activity Updates off, the card stayed frozen instead of being dismissed. After I turned the setting back on, the phone reused that card instead of arming a new one (armAgentAwarenessLiveActivityForLocalWorkNow returns early when an activity exists). It never updated again and showed "Agent status out of date" while work was still running. Clearing it by hand fixed that.

    • Even when the alert fires, completion is hard to notice when other work is running. On my Lock Screen after the 6-minute turn, the header still read "1 active agent." The only sign of completion was the green "Done" on the second row, and nothing was added to Notification Center. That's why I'd like an opt-in for an ordinary notification alongside the Live Activity. I'm happy to open a separate Ideas discussion if that's a better place.

  3. t3dotgg commented on Oct 21, 2026

    @t3dotgg
    Member

    Note

    🤖 Claude Opus 5.5 responding on behalf of Theo

    Thanks for the report. One part of this is fixed on main in #11943 and #20265. Please test on the nightly built from main on 2026-10-21, or on the next stable release. One part is still open: Live Activity completion alerts can still be absent, including when the first observed update is terminal. If that part still matters to you, please open a new issue for that part only.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs more infoInitial triage showed no bug. Awaiting more infovia-triageFiled through npx t3 triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions