Skip to content

[Bug]: CarPlay Dashboard widget content is rendered twice / overlapping #10156

Description

@kcalliauw

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. Connect an iPhone running t3code to Apple CarPlay.
  2. Open the CarPlay Dashboard view.
  3. Have an active t3code session so that the t3code Dashboard widget is displayed.
  4. Observe the contents of the widget, particularly the logo, active-session count, session/repository name, and connection status.

Expected behavior

The t3code CarPlay Dashboard widget should render each UI element exactly once, with correctly aligned and legible text and icons.

Actual behavior

The contents of the t3code Dashboard widget appear to be rendered twice, with the duplicate copy slightly offset from the original.

This causes overlapping/ghosted text and icons throughout the widget, including the T3 logo, 1 active, the session/repository name, and the Connecting status.

Other CarPlay Dashboard elements appear to render normally, suggesting the issue is specific to the t3code widget.

Impact

Cosmetic issue

Version or commit

1.0.3 from App Store

Environment

iOS 26.6.2 on iPhone 15 Pro Max

Logs or stack traces

Screenshots, recordings, or supporting files

IMG_7757.jpeg

Workaround

No response

Activity

  1. added
    bugSomething is broken or behaving incorrectly.
    needs-triageIssue needs maintainer review and initial categorization.
    on Sep 5, 2026
  2. juliusmarminge commented on Sep 5, 2026

    @juliusmarminge
    Member

    Triage

    Confirmed as a real visual bug on the Agent Activity Live Activity’s CarPlay surface. The screenshot matches current apps/mobile source; this is not a generic CarPlay chrome problem.

    What is showing

    CarPlay Dashboard in iOS 26 uses the Live Activity small activity family (same size class as the watchOS Smart Stack). expo-widgets maps that to bannerSmall, and our layout is explicitly documented that way:

    https://github.com/pingdotgg/t3code/blob/main/apps/mobile/src/widgets/AgentActivity.tsx

    The card in the photo is the local-work seed from armAgentAwarenessLiveActivityForLocalWork in apps/mobile/src/features/agent-awareness/remoteRegistration.ts: activeCount: 1, status: "Connecting", plus the thread/project title. That is why the tile reads T3 / 1 active / session name / Connecting.

    bannerSmall itself is a single VStack (logo + count, then title + status). There is no second copy of those nodes in the layout, and the lock-screen banner uses different copy (1 active agent, not 1 active). So this is not an accidental double-child in our JSX.

    Likely cause

    The ghosted, slightly offset paint of the same strings/icons points at the renderer/compositor, not the layout tree:

    1. expo-widgets (~57.0.15 in apps/mobile) — LiveActivityBanner picks bannerSmall when activityFamily == .small, then draws it through WidgetsDynamicView / UIBaseView. SDK 57 has known double-apply behavior for Text modifiers (expo/expo#49534) and earlier Live Activity re-eval overlays (expo/expo#44543).
    2. iOS 26 CarPlay Live Activities — this surface is new in iOS 26 (WWDC25: small family, or compact leading/trailing if small is missing). A system snapshot/vibrancy pass compositing on top of the live view would look exactly like this. Other Dashboard tiles rendering cleanly fits a Live Activity–only path.
    3. Less likely: two AgentActivity instances. refreshActiveLiveActivityRemoteRegistration already ends extras; two cards would more likely appear as two tiles than as one ghosted tile.

    createWidget for the home-screen Agent Activity widget is not in 1.0.3 (#6464 is still open), so this report is the Live Activity card, not a WidgetKit + Live Activity stack.

    Related (not duplicates)

    • #4978 — Live Activity restyle, including Smart Stack / bannerSmall. Any of that work should be checked on CarPlay, not only Watch.
    • #4980 — stale Connecting card. Same seed state, different bug (card never updates/ends).
    • #6464 — shipping a real home-screen widget later could add a second CarPlay Dashboard card; it does not explain this 1.0.3 screenshot.

    No existing CarPlay issue in the repo.

    Severity

    Cosmetic, but driver-facing: the tile is hard to read. Accepting as a bug.

    Next step

    Reproduce on CarPlay Simulator (Xcode Additional Tools) with an armed Agent Activity, then compare watchOS Smart Stack (same bannerSmall):

    • Watch clean, CarPlay ghosted → treat as CarPlay / iOS 26 / expo-widgets and try a tighter bannerSmall (no extra padding, avoid semantic primary/secondary if they pick up StandBy vibrancy) or an expo-widgets bump.
    • Watch also ghosted → look at WidgetsDynamicView wrapping and whether compact leading/trailing are being composited with bannerSmall.

    Please also note whether the Lock Screen banner on the same phone is clean (it uses a different tree).

  3. added
    via-triageFiled through npx t3 triage
    acceptedfeature request accepted
    and removed
    needs-triageIssue needs maintainer review and initial categorization.
    on Sep 5, 2026
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

    acceptedfeature request acceptedbugSomething is broken or behaving incorrectly.via-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