Skip to content

feat(mobile): pick, share, and receive files in threads - #8237

Merged
juliusmarminge merged 26 commits into
mainfrom
t3code/file-attachments-mobile
Aug 30, 2026
Merged

juliusmarminge merged 26 commits into
mainfrom
t3code/file-attachments-mobile

fix(mobile): preserve saved attachments and open files natively

85b91ca
Select commit
Loading
Failed to load commit list.
MacroscopeApp / Macroscope - Correctness Check succeeded Aug 30, 2026 in 1m 38s

No issues identified (26 code objects reviewed).

• Reviewed files modified since ae9086c; other PR files not modified since then were skipped.
• Merge Base: 7880a6e
• Head: 85b91ca

Details

✅ File Path U3 Bytes Comments Posted Reason
✅ pnpm-workspace.yaml 345 0
✅ apps/mobile/src/lib/attachmentUpload.ts 987 0
✅ apps/mobile/src/lib/attachmentDownload.ts 4577 0
➖ apps/mobile/src/lib/composerFiles.test.ts 2715 Excluded by default ignore patterns
✅ apps/mobile/src/lib/composerAttachmentFiles.ts 3029 0
➖ apps/mobile/src/lib/attachmentUpload.test.ts 2085 Excluded by default ignore patterns
➖ apps/mobile/src/lib/attachmentDownload.test.ts 9980 Excluded by default ignore patterns
➖ apps/mobile/src/lib/composerAttachmentFiles.test.ts 2975 Excluded by default ignore patterns
➖ apps/mobile/app.config.ts 1249 No code objects identified
➖ pnpm-lock.yaml 46545 Excluded by default ignore patterns
✅ docs/user/composer.md 1877 0
✅ apps/mobile/src/lib/composerImages.ts 1602 0
✅ apps/mobile/src/features/threads/ThreadDetailScreen.tsx 20416 0
✅ apps/mobile/src/features/threads/ThreadComposer.tsx 17506 0
➖ apps/mobile/src/state/use-composer-drafts.test.ts 3029 Excluded by default ignore patterns
✅ apps/mobile/src/features/threads/ThreadFeed.tsx 19696 0
✅ apps/mobile/src/state/use-composer-drafts.ts 1977 0

Billed Total: 49.23KB of diff | $2.46
Saved $1.14 vs. the upper-bound estimate of $3.60 — cached code objects from prior reviews on this PR were not re-billed.

Filtered Issues Details

apps/mobile/src/state/use-composer-drafts.ts
  • line 393: The ownership check at 393 is not atomic with the deletion at 399. removePersistedComposerAttachmentFile first awaits a dynamic import before resolving and deleting the file, so a draft/outbox restore or edit can reattach fileUri after this check and before the delete executes. The newly referenced app-owned attachment is then deleted, leaving the user with a draft/message whose file upload will fail. [ Already posted ]