fix(mobile): bare t3code:// links no longer reset navigation to Home - #12002
maria-rcks merged 2 commits into
Conversation
Bare app-scheme URLs were matching the Home route and resetting mobile navigation. Extract the app-link filter into a tested helper that ignores scheme-only and lifecycle URLs while preserving path-bearing navigation links. Made with Devin (Claude) via Devin. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a small, self-contained mobile deep-link bug fix that ignores bare app-scheme wakeups while preserving path-bearing links and existing lifecycle filtering. Focused regression tests cover the new predicate, with no product-default or static-analysis configuration changes. You can add or adjust custom eligibility rules. Learn more. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (3)
Included review availability: Your plan provides up to 10 included reviews per hour; 8 remain after this review. 📝 WalkthroughWalkthroughThe mobile app now uses a shared ChangesApp-link filtering
Priority: ⬇️ Low Estimated code review effort: 2 (Simple) | ~10 minutes Change: Bug fix · Severity of issue fixed: Low Merge Risk: ⚪ Minimal · up to The link filter rejects the specified bare and lifecycle URLs while retaining tested path-bearing links. No confirmed merge-blocking risk remains. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
- ClaudeAdapter: took upstream's extracted `isClaudeHumanTurnStart` predicate (pingdotgg#11954) while keeping the fork's empty-history behaviour, which rolls back retained turns in memory instead of failing the request. - App.tsx: upstream's `shouldHandleAppLink` deep-link filter (pingdotgg#12002) alongside the fork's branded URL schemes. - package.json version/license stamps stay on the fork's values (0.0.56, Apache-2.0); upstream's v0.0.41 prep does not apply here. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
## What's Changed * feat(mobile): add v2 preview store builds by @juliusmarminge in pingdotgg/t3code#11966 * fix(mobile): block incompatible server connections by @juliusmarminge in pingdotgg/t3code#11974 * fix(web): keep PR controls readable in narrow panels by @Bil0000 in pingdotgg/t3code#11962 * fix(server): block updates under legacy service launchers by @Gigioxx in pingdotgg/t3code#11940 * fix: reduce GitHub quota use with sharing enabled by @Bil0000 in pingdotgg/t3code#11888 * fix(usage): refresh limits when the tab opens by @Bil0000 in pingdotgg/t3code#11928 * fix(contracts): avoid Intl.Segmenter in monogram validation (Hermes crash) by @bompus in pingdotgg/t3code#11984 * feat(lint): extend Hermes API bans with a configurable API list by @juliusmarminge in pingdotgg/t3code#11982 * fix(server): reuse Git index metadata during checkpoint capture by @im-kvijay in pingdotgg/t3code#10792 * refactor: give project monograms their own icon variant by @juliusmarminge in pingdotgg/t3code#11993 * fix(clients): disable incompatible environments during discovery by @juliusmarminge in pingdotgg/t3code#11990 * fix(antigravity): stop health checks from filling the disk with _MEI folders by @t3dotgg in pingdotgg/t3code#12008 * fix(mobile): bare t3code:// links no longer reset navigation to Home by @SunkenInTime in pingdotgg/t3code#12002 * fix(server): keep Claude rewind when fork history length changes by @maria-rcks in pingdotgg/t3code#11954 * fix(mobile): use native toolbar search for licenses by @juliusmarminge in pingdotgg/t3code#12011 ## New Contributors * @bompus made their first contribution in pingdotgg/t3code#11984 * @im-kvijay made their first contribution in pingdotgg/t3code#10792 **Full Changelog**: pingdotgg/t3code@v0.0.41-nightly.20260915.1780...v0.0.41-nightly.20260916.1795 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.41-nightly.20260916.1795
Fixes #11950
What Changed
The React Navigation
linking.filterinapps/mobile/src/App.tsxis extracted intoshouldHandleAppLink(url)inapps/mobile/src/lib/appLinking.ts. In addition to the existing Expo dev-client / expo-sharing exclusions it now returnsfalsefor scheme-only URLs:Path-bearing links (
t3code://threads/...,t3code://pair?...,t3code-dev://settings/usage?...) are unchanged. Unit tests cover the bare schemes (t3code://,t3code:///,-dev,-preview), the lifecycle URLs, and the path-bearing cases.Why
iOS returns to the app with a bare
t3code://URL (e.g. after the dictation keyboard / sibling app hands control back). React Navigation matched that against the Home screen, whose linking path is"", and reset the stack — dropping whichever thread the user had open. A scheme-only URL carries no destination, so it should only wake the app, never navigate.Reproduce
xcrun simctl openurl booted "t3code://") open the baret3code://URL.UI Changes
Verified on an iPhone 17 Pro simulator (iOS 26.5,
t3code-devdev client, disposable local T3 server with a seeded thread). Same steps each time: open the thread, thenxcrun simctl openurl <device> t3code-dev://.t3code-dev://threads/<env>/<thread>still navigatesAlso covered by unit tests (
vp test run apps/mobile/src/lib/appLinking.test.ts) plus mobile typecheck and lint.Checklist
Written by Claude (Devin harness).
Summary by CodeRabbit
Bug Fixes
Tests