Conversation
…d submit milestones Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
When checkFileExists returns false the request is still sent, just without the receipt, and it drains from the queue as a normal success. The old [prepareRequestPayload] alert used a non-[Receipt] prefix, so it never reached Sentry and shared no key with the capture/enqueue lines. The drop was invisible: the trail ended at enqueued. Add a logReceiptDropped milestone on the [Receipt] spine carrying receiptTraceId and transactionID, so the drop is the terminal node on the same trace and this case is diagnosable end to end. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…d test The test loads the real prepareRequestPayload via requireActual, which now imports ReceiptObservability. Left unmocked, that pulled in the real PersistedRequests and NetworkState chain and crashed the jest worker (suite failed to run). Mock ReceiptObservability like the other deps and assert on logReceiptDropped, the contract the unit now has. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Source receiptTraceId's type from Receipt via Pick instead of re-declaring it inline. Dedupe the two SubmitDetailsPage tests onto shared setup/render helpers and read the [Receipt] milestones straight from the Log.info spy. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
@codex review |
|
Codex Review: Didn't find any major issues. Breezy! Reviewed commit: ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback". |
|
@ZhenjaHorbach Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
Reviewer Checklist
Screenshots/VideosAndroid: HybridApp2026-07-13.16.25.39.movAndroid: mWeb Chrome2026-07-13.16.26.26.moviOS: HybridApp2026-07-13.16.25.39.moviOS: mWeb Safari2026-07-13.16.26.26.movMacOS: Chrome / Safari2026-07-13.16.28.20.mov |
|
🚧 mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/mountiny in version: 9.4.34-0 🚀
|
Help site review — no changes requiredI reviewed the changes in this PR against the help site articles under This is a telemetry/observability-only change scoped to the iOS Share Extension receipt path:
There is no user-facing UI, feature, setting, tab, button, or workflow change — the PR author explicitly notes there is "no user-facing UI change" and the PR is marked If you believe a customer-facing behavior did change (e.g. how shared receipts appear or are handled from the user's perspective) that I should document, let me know and I'll take another pass and open a draft help site PR. (No draft help site PR was created because no help site changes are required, so there is no linked docs PR to review.) |
|
🚀 Deployed to production by https://github.com/roryabraham in version: 9.4.34-14 🚀
|
|
🚀 Deployed to production by https://github.com/roryabraham in version: 9.4.34-14 🚀
Bundle Size Analysis (Sentry): |
Explanation of Change
This extends the
[Receipt]telemetry trace to the iOS Share Extension and closes a silent-drop gap.The Share Extension builds its own receipt and calls
requestMoney/trackExpensedirectly, skipping the code that normally mints a trace id and logs the capture/submit milestones. This PR stamps a trace id on share receipts and logscapturedandsubmittedfor that path, so a shared receipt gets the same trace as a camera or gallery receipt.Separately, when the receipt file is gone at upload time,
prepareRequestPayloadsilently sends the request without it. The request still drains from the queue as a success, so nothing looked stuck, and the old log used a different prefix that never reached Sentry or joined the trace. This adds alogReceiptDroppedmilestone on the[Receipt]trace spine, carryingreceiptTraceIdandtransactionID, so a receipt can now be followed capture → submitted → enqueued → dropped end to end.Fixed Issues
$ #95673
PROPOSAL:
Tests
This is a telemetry/observability change. There is no user-facing UI change, so verification is via unit/UI tests rather than manual steps:
tests/ui/SubmitDetailsPageTest.tsx— drives a share submit and verifies the trace id reaches the request receipt, and thatcaptured/submittedfire withcaptureSource: 'share'.tests/unit/libs/prepareRequestPayloadNativeTest.ts— verifies that a missing receipt file at upload time callslogReceiptDroppedwith thereceiptTraceIdandtransactionID.Offline tests
N/A
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
Same as tests. This is a logging-only change with no user-facing behavior to QA on staging.
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
ios.mov
iOS: mWeb Safari
MacOS: Chrome / Safari