9.4.28-2
coaidev/coai9.4.28-2Jul 7, 2026by github-actions[bot]
AI Summary
This release focuses on mobile app improvements including UI migrations, bug fixes for expense flows, and refactoring of navigation and storage components.
Key Highlights
- Migrated the group members page to the new Table layout.
- Fixed 'previously existing chat' error when creating distance expenses for new users.
- Migrated US virtual card reveal details storage to the new `RevealedCardSecretsStore`.
- Refactored money report header secondary actions to use dynamic verify account.
- Added `canMergeReports` eligibility helper for the Merge Reports project.
New Features
- Added Rillet integration import pages.
- Added a Paid status expense report filter.
- Made system/violation messages text-selectable on desktop web.
Full Release Notes
## What's Changed * Migrate group members page to the new Table layout by @MelvinBot in https://github.com/Expensify/App/pull/95224 * refactor getParentNavigationSubtitle function to use translate param by @daledah in https://github.com/Expensify/App/pull/95140 * Migrate US virtual card reveal details storage to RevealedCardSecretsStore by @DylanDylann in https://github.com/Expensify/App/pull/95262 * [No QA] Docs updates for E/A#82075 spreadsheet member import approval fields by @MelvinBot in https://github.com/Expensify/App/pull/93902 * Fix: distance expense to new user lands on Workspace with 'previously existing chat' error (new manual expense flow) by @MelvinBot in https://github.com/Expensify/App/pull/94755 * [Payment due @linhvovan29546] Drive card feed selectors off linkedPolicyIDs, remove preferredPolicy decisioning by @MelvinBot in https://github.com/Expensify/App/pull/93928 * [No QA] Add seatbelt check and change context props by @Guccio163 in https://github.com/Expensify/App/pull/95268 * Replace getDisplayNameOrDefault with temporaryGetDisplayNameOrDefault - batch 5 by @cretadn22 in https://github.com/Expensify/App/pull/95315 * Fix supportal SAML redirect by @hungvu193 in https://github.com/Expensify/App/pull/95270 * Replace getDisplayNameOrDefault with temporaryGetDisplayNameOrDefault - batch 4 by @cretadn22 in https://github.com/Expensify/App/pull/95300 * Remove unused function and update getLoginsByAccountIDs usage in getApprovalChain, openReport, and toggleSubscribeToChildReport by @bernhardoj in https://github.com/Expensify/App/pull/95162 * Refactor money report header secondary actions to use dynamic verify account by @jmusial in https://github.com/Expensify/App/pull/94594 * [NOQA] fix: remove unused preview success animation scales by @OlimpiaZurek in https://github.com/Expensify/App/pull/94955 * [No QA] Crash diagnostics: stop reporting hidden/backgrounded tabs as crashes by @sosek108 in https://github.com/Expensify/App/pull/94818 * Replace getDisplayNameOrDefault with temporaryGetDisplayNameOrDefault - batch 3 by @cretadn22 in https://github.com/Expensify/App/pull/95071 * Part 5 - Remove Onyx.connect() for the key: ONYXKEYS.PERSONAL_DETAILS_LIST in src/libs/actions/Report.ts by @lorretheboy in https://github.com/Expensify/App/pull/94647 * [NoQA] feat: add canMergeReports eligibility helper for the Merge Reports project by @dmkt9 in https://github.com/Expensify/App/pull/94939 * Make system/violation messages text-selectable on desktop web by @MelvinBot in https://github.com/Expensify/App/pull/92142 * [No QA] Docs: add bulk Download as PDF to the Export Expenses and Reports article by @mollfpr in https://github.com/Expensify/App/pull/95290 * [CP Staging] update old routes by @huult in https://github.com/Expensify/App/pull/95368 * Fix all-empty column sort reordering rows and flipping between asc/desc by @mukhrr in https://github.com/Expensify/App/pull/95022 * Add Rillet integration import pages by @s77rt in https://github.com/Expensify/App/pull/94780 * Add a Paid status expense report filter with those three options by @dukenv0307 in https://github.com/Expensify/App/pull/94808 * [No QA] Revise custom export instructions for accounting software by @stephanieelliott in https://github.com/Expensify/App/pull/94227 * refactor: finalize Search router and delete legacy SearchList shell by @BartekObudzinski in https://github.com/Expensify/App/pull/95370 * Create receipt-wrangler-space-cowgirl.svg by @garrettmknight in https://github.com/Expensify/App/pull/95374 * Stabilize submit-to popover host context to prevent Search row re-renders by @TMisiukiewicz in https://github.com/Expensify/App/pull/95267 * Sort Device Management devices list by most recent timestamp first by @MelvinBot in https://github.com/Expensify/App/pull/95316 * [Home Page] "Recently added" slot doesn't update after creating an expense while offline by @adamgrzybowski in https://github.com/Expensify/App/pull/94180 * [Home Page] Design Followup for Recently Added Slot by @adamgrzybowski in https://github.com/Expensify/App/pull/95056 * [No QA] fix: checkout Mobile-Expensify PR before calling `Setup Node` action by @war-in in https://github.com/Expensify/App/pull/95386 * refactor isReportIneligibleForMoveExpenses and getTrackExpenseInformation to use data from useOnyx part 1 by @daledah in https://github.com/Expensify/App/pull/92964 * Migrate ComposedButton to ButtonWithDropdownMenu by @Guccio163 in https://github.com/Expensify/App/pull/93789 * [Payment due @truph01] Allow recovery code on Replace 2FA device flow by @allgandalf in https://github.com/Expensify/App/pull/91644 * fix: use microtask queue for whatwg-fetch XHR events by @rohit9625 in https://github.com/Expensify/App/pull/94399 * Fix Profile-Tapping green dot behaviour is inconsistent in landscape & portrait mode by @GCyganek in https://github.com/Expensify/App/pull/94453 * [NOQA] perf: add MoneyRequestReportPreview layout components by @OlimpiaZurek in https://github.com/Expensify/App/pull/94681 **Full Changelog**: https://github.com/Expensify/App/compare/9.4.27-2...9.4.28-2