feat(mobile): pick, share, and receive files in threads - #8237
Merged
Merged
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
393is not atomic with the deletion at399.removePersistedComposerAttachmentFilefirst awaits a dynamic import before resolving and deleting the file, so a draft/outbox restore or edit can reattachfileUriafter 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 ]
Loading