chore(mobile): drop dead nitro-markdown tgz override and @expo/metro-runtime - #13148
Conversation
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a deletion-only mobile dependency cleanup that removes an unused runtime declaration, an ineffective markdown archive override, and a release-test fixture reference. Existing markdown usage and the remaining dependency graph are unchanged, with no product-default or static-analysis behavior changes. Notes:
You can add or adjust custom eligibility rules. Learn more. |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository: pingdotgg/t3code/.coderabbit.yaml Review profile: CHILL Plan: Team Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (3)
💤 Files with no reviewable changes (1)
Included review availability: Your plan provides up to 10 included reviews per hour; 3 remain after this review. 📝 WalkthroughWalkthroughThe mobile package manifest moves ChangesMobile dependency cleanup
Priority: ⬇️ Low Estimated code review effort: 2 (Simple) | ~5 minutes Change: Other Suggested reviewers: Merge Risk: ⚪ Minimal · up to The mobile app retains its Markdown dependency and the smoke fixture no longer relies on the deleted archive. No material production or release-smoke failure is established, so the change appears ready to merge. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
…runtime
The apps/mobile package.json 'overrides' block is ignored by pnpm (only
workspace-root overrides apply), so the vendored nitro-markdown tgz has
never been used: the lockfile has always resolved react-native-nitro-markdown
0.5.8 from the registry. Remove the tgz, the ineffective override, and
its release-smoke reference.
@expo/metro-runtime is not imported by app code. @expo/metro-config only
injects it as a pre-module when the bundle already imports it, and the
Expo CLI never resolves it hard on native, so a production
'expo export -p android' bundles identically without it and contains no
modules from it. The generated mobile license manifest drops from 763 to
762 entries, matching the shipped bundle.
Audited and kept: expo-auth-session and react-dom are both genuinely in
the native bundle graph via @clerk/expo (its hooks barrel reaches a
static require('expo-auth-session') and @clerk/react statically imports
react-dom and react-dom/client; Metro bundles both, verified in the
exported Android bundle), and expo-asset is a config plugin in
app.config.ts plus a peer of expo-audio and the markdown module.
701c023 to
afe6569
Compare
Dismissing prior approval to re-evaluate afe6569
## What's Changed * chore(mobile): drop dead nitro-markdown tgz override and @expo/metro-runtime by @juliusmarminge in pingdotgg/t3code#13148 * feat(web): show settings scope as a sentence at the top of the page by @juliusmarminge in pingdotgg/t3code#13139 * refactor(web): move settings scope pickers into breadcrumbs by @Yash-Singh1 in pingdotgg/t3code#13165 * feat(auth): share provider sign-in flows and credential bindings by @juliusmarminge in pingdotgg/t3code#12983 * refactor(mobile): git sheets use uniwind platform variants instead of className ternaries by @juliusmarminge in pingdotgg/t3code#13161 * chore(mobile): name the two project favicon caches by their job by @juliusmarminge in pingdotgg/t3code#13160 * revert(mobile): git sheets back to Platform.OS ternaries (un-guarded uniwind variants broke both platforms) by @juliusmarminge in pingdotgg/t3code#13169 * docs(mobile): document the two mobile routes that intentionally skip deep links by @juliusmarminge in pingdotgg/t3code#13164 * refactor(mobile): break module cycles with focused extractions by @juliusmarminge in pingdotgg/t3code#13151 * fix(server): generate PR diffs from branch changes by @Yash-Singh1 in pingdotgg/t3code#13170 * fix(web): preserve nested scroll behavior in chat timeline by @Yash-Singh1 in pingdotgg/t3code#13167 * test(web): cover usage model ordering without static markup by @flamboh in pingdotgg/t3code#13104 * fix(desktop): find linuxbrew node for the WSL backend by @CodyRay in pingdotgg/t3code#7827 * chore(models): use GPT-6 Luna for text generation by @extoci in pingdotgg/t3code#13115 * fix(mobile): keep ordinary offline outbox failures out of console.warn by @juliusmarminge in pingdotgg/t3code#13144 * feat(providers): check remote compatibility ranges by @juliusmarminge in pingdotgg/t3code#13130 * chore(lint): keep mobile theme escape-hatch allowlist honest by @juliusmarminge in pingdotgg/t3code#13146 * fix(web): the pull request badge reads at the meta size again by @juliusmarminge in pingdotgg/t3code#13175 * fix(mobile): uniwind platform variants stay guarded on both platforms by @juliusmarminge in pingdotgg/t3code#13172 * refactor(mobile): git sheets use uniwind platform variants instead of className ternaries by @juliusmarminge in pingdotgg/t3code#13185 * refactor(mobile): remaining className platform ternaries become class variants by @juliusmarminge in pingdotgg/t3code#13188 * fix(web): align provider emails without clipping by @Derpedyea in pingdotgg/t3code#13174 * perf(mobile): recycle the default v2 home list and scope the snooze minute tick by @juliusmarminge in pingdotgg/t3code#13149 * refactor(mobile): retire the legacy grouped thread list by @juliusmarminge in pingdotgg/t3code#13183 * fix(server): background PR checks spend less GitHub quota by @juliusmarminge in pingdotgg/t3code#13189 * fix(server): background PR sync reads summaries in batches by @juliusmarminge in pingdotgg/t3code#13198 * fix(server): GitHub PR lookups stop probing owner-qualified heads by @juliusmarminge in pingdotgg/t3code#13200 * chore(mobile): clear the legacy-list deletion fallout by @juliusmarminge in pingdotgg/t3code#13203 ## New Contributors * @CodyRay made their first contribution in pingdotgg/t3code#7827 **Full Changelog**: pingdotgg/t3code@v0.0.43-nightly.20260922.2123...v0.0.43-nightly.20260923.2135 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.43-nightly.20260923.2135
What Changed
apps/mobile/deps/react-native-nitro-markdown-0.5.0.tgz, the package-localoverridesblock inapps/mobile/package.json, and its entry in therelease-smokeworkspace file list.@expo/metro-runtimefromapps/mobiledependencies.@expo/metro-runtime), matching what the bundle actually contains.Everything else from the mobile dependency audit (items #4/#5) was audited and deliberately kept; the false premises are documented below.
Why
The nitro-markdown tgz is dead weight (audit #4 — valid). pnpm only honors
overridesfrom the workspace root, so the per-workspaceoverridesblock never applied. The lockfile proves it:react-native-nitro-markdownhas resolved to0.5.8from the registry since the initial mobile commit, while the tgz is pinned at0.5.0. The 180 KB tgz and its ineffective override have misled readers into thinking the app bundles a patched copy. Thereact-native-nitro-markdown: ^0.5.0dependency itself is used (ThreadFeed, FileMarkdownPreview, the markdown module) and stays on the registry version.@expo/metro-runtimeis unused (audit #5 — valid for this package). No app code imports it.@expo/metro-config's pre-module injection only applies "if the module is installed and imported somewhere in the bundle already" (its own comment), the fallback resolution keeps it reachable viaexpo's optional-peer subtree regardless of this declaration, and@expo/clihas no hard resolve of it on the native path. A productionexpo export -p androidbundles successfully without the declaration and contains zero@expo/metro-runtimemodules — in the bundle both with and without it, so the removal is behavior-neutral.expo-auth-sessionis genuinely in the native bundle (audit #5 premise false). App code never imports it, but@clerk/expo's root entry (the app importsClerkProvider/useAuthfrom it) statically requires./hooks→useOAuth/useSSO→ssoDependencies.js, which contains a staticrequire("expo-auth-session"). I verified by removing the declaration, reinstalling, and exporting a production native bundle: Metro still resolves the package through@clerk/expo's pnpm peer link and the exported bundle containsexpo-auth-session/build/*.js. Removing the declaration therefore changes nothing about what ships — it only makes the license scanner (which walks declared/production dependency edges, not peers) omit a package that is actually in the bundle. Keeping the declaration is the accurate state.react-domis genuinely in the native bundle (audit #5 premise false). Only three test files importreact-dom, but@clerk/expo→@clerk/reactstatically importsreact-domandreact-dom/clientat runtime (@clerk/react@6.16.1/dist/index.mjs), and the exported production Android bundle containsreact-dom/cjs/react-dom.development.jsandreact-dom/cjs/react-dom-client.development.js(independent of where it is declared, since peer satisfaction keeps it resolvable). Moving it todevDependencieswould have made the generated license list omit a shipped package. It stays independencies, where the manifest it produces is truthful.@types/react/@types/react-domare alreadydevDependenciesinapps/mobile— nothing to move.@types/*entries that appear in the generated license manifest are transitive through production packages; filtering type-only packages from the generator is a separate concern (filed as #13153, not done here).expo-assetstays (audit premise false). It is listed as a config plugin inapp.config.ts, is a direct dependency ofexpoandexpo-audio, and is a peer of thet3-markdown-textmodule; it is also genuinely bundled.Verification
vp i→ lockfile diff is the importer removal only; no version drift.react-native-nitro-markdownstill resolves0.5.8from the registry.APP_VARIANT=production npx expo export -p android --dev falseexits 0; the 34 MB bundle contains no@expo/metro-runtimemodules and still containsexpo-auth-session/build/*andreact-dom/cjs/*— matching the license manifest exactly.generateThirdPartyLicenseManifest,allowMissingGeneratedNotices: false) generates cleanly: 762 entries (main: 763), with@expo/metro-runtimethe only removal;react-dom,expo-auth-session,expo-assetstill present.vp run --filter @t3tools/mobile typecheckand--filter @t3tools/scripts typecheckpass.preferences,QuestionAnswerHistory,use-selected-thread-requests,useHighlightedCode) pass.expo config --type publicresolves fully — plugin list unchanged, no resolution errors.knip --workspace apps/mobile --include dependencies— clean.apps/mobile/depsanywhere in the repo.No UI changes, so no screenshots apply.
Worked on by callstack/Apex (pi harness), with correctness review by Claude Opus against the audit.