Skip to content

fix(mobile): push gating and personal-team hardening for Android PR#3643

Open
bmdavis419 wants to merge 2 commits into
android-dev-pr-3514from
fix/android-pr-push-gating
Open

fix(mobile): push gating and personal-team hardening for Android PR#3643
bmdavis419 wants to merge 2 commits into
android-dev-pr-3514from
fix/android-pr-push-gating

Conversation

@bmdavis419

@bmdavis419 bmdavis419 commented Jul 2, 2026

Copy link
Copy Markdown

PR into #3579 carrying the fixes from #3575 that its snapshot of that branch missed (it absorbed an older version of fix/mobile-device-builds-and-android-ui).

What's included

Push registration gating for Personal Team builds (cherry-picked from #3575's 2e5b83f4c):

  • New agent-awareness/capabilities.ts with supportsAgentAwarenessPush(), driven by extra.iosPersonalTeamBuild
  • Relay device registration payload forces liveActivitiesEnabled/notificationsEnabled off when push is unsupported (+ test)
  • Settings switches for Device Notifications and Live Activity Updates disabled/forced-off on Personal Team builds

Hardening on top:

  • nativePushTokenRegistration now also checks supportsAgentAwarenessPush(), so Personal Team builds never call getDevicePushTokenAsync() without the aps-environment entitlement (previously only the payload was gated — a build with previously-granted permission would still attempt token acquisition and could stall waiting on didRegisterForRemoteNotifications)
  • T3CODE_IOS_PERSONAL_TEAM_BUNDLE_ID validated as a reverse-DNS identifier instead of just non-empty
  • extra.iosPersonalTeamBuild exposed in the Expo config (required for the runtime gating above)
  • Comment documenting that the appleSignIn: !isIosPersonalTeamBuild gate on the Clerk plugin is load-bearing (the .cjs entitlements plugin runs before plugins earlier in the array, so it can't strip Clerk's entitlement)
  • Restored react-native-keyboard-controller 1.21.7 — main bumped it in [codex] Upgrade Legend List chat scrolling #3545; the 1.21.6 pin here is a stale carryover that would silently downgrade it at merge

Verification

  • tsc --noEmit passes
  • agent-awareness tests pass (28/28)
  • The equivalent merged state was built as a release APK and verified running on a Pixel 10 Pro Fold

Supersedes #3575, which is now closed.

🤖 Generated with Claude Code


Open in Devin Review

Note

Gate push notifications and disable push-related UI in personal team Android builds

  • Adds supportsAgentAwarenessPush() in capabilities.ts as a single source of truth: returns false when iosPersonalTeamBuild is set in Expo config extras.
  • nativePushTokenRegistration in remoteRegistration.ts short-circuits early on unsupported builds, skipping permission queries and reporting notificationsEnabled=false with pushToken=null.
  • Relay device registration payload in registrationPayload.ts forces liveActivitiesEnabled and notificationsEnabled to false when push is unavailable, regardless of input values.
  • Device Notifications and Live Activity Updates toggles in SettingsRouteScreen.tsx are disabled and shown as off in personal team builds.
  • Bundle identifier validation in app.config.ts now requires T3CODE_IOS_PERSONAL_TEAM_BUNDLE_ID to match a reverse-DNS pattern (e.g. com.example.t3code) when T3CODE_IOS_PERSONAL_TEAM=1.
📊 Macroscope summarized 7be02cf. 5 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.


Note

Medium Risk
Changes the push registration and relay preference path for Personal Team builds; incorrect gating could affect non–Personal Team users, but scope is narrow and covered by tests.

Overview
Personal Team iOS builds no longer attempt APNs registration or advertise push/live-activity features to relay. A new supportsAgentAwarenessPush() helper reads extra.iosPersonalTeamBuild from Expo config; relay payloads force liveActivitiesEnabled and notificationsEnabled off, nativePushTokenRegistration skips permission/token calls (avoiding stalls without aps-environment), and settings switches for Device Notifications and Live Activity Updates are disabled and shown off.

Build config: T3CODE_IOS_PERSONAL_TEAM_BUNDLE_ID must match a reverse-DNS pattern when Personal Team mode is on; iosPersonalTeamBuild is exposed on extra. A comment documents why Clerk’s appleSignIn must stay gated for Personal Team. react-native-keyboard-controller is restored to 1.21.7 (lockfile sync).

Reviewed by Cursor Bugbot for commit 7be02cf. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 18781be4-2ef9-484b-955f-1497d48a0752

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/android-pr-push-gating

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 2, 2026
@macroscopeapp

macroscopeapp Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR gates push notification functionality based on build type, which is a significant behavioral change. Additionally, there's an unresolved review comment identifying that push tokens are still sent to relay even when preferences disable delivery, undermining the hardening goal.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge juliusmarminge force-pushed the android-dev-pr-3514 branch 2 times, most recently from 1053338 to 2ae9365 Compare July 3, 2026 06:13
bmdavis419 and others added 2 commits July 2, 2026 23:15
- Validate T3CODE_IOS_PERSONAL_TEAM_BUNDLE_ID as a reverse-DNS identifier
- Expose extra.iosPersonalTeamBuild so runtime capability gating works
- Gate native APNs token acquisition on supportsAgentAwarenessPush() so
  Personal Team builds never call getDevicePushTokenAsync without the
  aps-environment entitlement
- Document why appleSignIn gating on the Clerk plugin is load-bearing
- Restore react-native-keyboard-controller 1.21.7 (main bumped it in #3545;
  1.21.6 here was a stale pin)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@juliusmarminge juliusmarminge force-pushed the fix/android-pr-push-gating branch from 4c5185e to 7be02cf Compare July 3, 2026 06:16

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 7be02cf. Configure here.

...(input.pushToStartToken ? { pushToStartToken: input.pushToStartToken } : {}),
preferences: {
liveActivitiesEnabled,
notificationsEnabled: input.notificationsEnabled,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Personal Team tokens still sent

Medium Severity

For iOS Personal Team builds, makeRelayDeviceRegistrationRequest now forces preferences.notificationsEnabled and preferences.liveActivitiesEnabled off via supportsAgentAwarenessPush, but it still spreads pushToken and pushToStartToken from the caller when present. Relay can receive push tokens while preferences claim delivery is disabled, undermining the Personal Team hardening this PR adds elsewhere.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 7be02cf. Configure here.

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

Labels

size:M 30-99 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant