9.4.27-2

coaidev/coai9.4.27-2Jul 6, 2026by github-actions[bot]

AI Summary

A mobile app update emphasizing component decomposition, UX improvements, and fixes for navigation, report actions, and email template editing issues.

Key Highlights

  • Decomposed `ReportActionsList` into smaller components.
  • Added a tooltip on hover for the Paid report label.
  • Fixed 'LHN within the Spend tab' memory retention issue.
  • Migrated Xero and Quickbooks connection flows to modal screens.
  • Refactored `getLoginsByAccountIDs` and `isReportInGroupPolicy` logic.

New Features

  • Added Tag GL code column to expense tables.
  • Added People Admin workspace approval access.
  • Added custom unit rate out of date range violation.

Full Release Notes

## What's Changed
* Add a tooltip on hover of the Paid report label by @dukenv0307 in https://github.com/Expensify/App/pull/94690
* [Submit] Submit button with manager email prompt take 2 by @hungvu193 in https://github.com/Expensify/App/pull/94392
* Decompose ReportActionsList: 10 by @LukasMod in https://github.com/Expensify/App/pull/94149
* Decompose ReportActionsList: 11 by @LukasMod in https://github.com/Expensify/App/pull/94817
* Fix: Delete error only shows the updated message after opening Expensify Card by @staszekscp in https://github.com/Expensify/App/pull/94416
* [No QA] Always show switch to classic button in dev by @arosiclair in https://github.com/Expensify/App/pull/94885
* Mark as done cta follow up 1 by @jayeshmangwani in https://github.com/Expensify/App/pull/94413
* [Performance] Cancel telemetry span when user discards expense without submitting by @JakubKorytko in https://github.com/Expensify/App/pull/94451
* Add allReportActionsList to updateSplitTransactions function by @cretadn22 in https://github.com/Expensify/App/pull/94301
* Fix distance rate auto-selection and tax sync on date change by @Krishna2323 in https://github.com/Expensify/App/pull/93237
* [NO QA] Prevent error on country selection screen when opened without a selected country by @blimpich in https://github.com/Expensify/App/pull/94632
* Open parent report in super wide RHP from Home and fix background on refresh by @MelvinBot in https://github.com/Expensify/App/pull/93614
* [Payment due @ikevin127] [No QA] Add directive to support blocking of BootSplash on devices with jailbreak by @mateuuszzzzz in https://github.com/Expensify/App/pull/94701
* fix: The LHN within the Spend tab is not remembered when navigating to Inbox by @nkdengineer in https://github.com/Expensify/App/pull/93396
* [CP Staging] Fix bank account label not showing in search bar after reopen by @allgandalf in https://github.com/Expensify/App/pull/94987
* [No QA] perf: replace reduce with for-of in reportsByPolicyID to reduce GC pressure by @TMisiukiewicz in https://github.com/Expensify/App/pull/94980
* Victory Chart: Legend overlaps x-axis labels on vertical charts   by @lorretheboy in https://github.com/Expensify/App/pull/94763
* Fix spend rule currency deploy blockers by @JS00001 in https://github.com/Expensify/App/pull/94207
* Migrate ConnectToQuickbooksOnlineFlow and ConnectToXeroFlow to @react-navigation modal screens by @borys3kk in https://github.com/Expensify/App/pull/92512
* [No QA] Request reviewers when a PR adds a new Onyx.connectWithoutView call by @cristipaval in https://github.com/Expensify/App/pull/94846
* [Payment due @hoangzinh] Fixed Attendee type to match with BE by @shubham1206agra in https://github.com/Expensify/App/pull/94784
* Fix workspaces list flash on narrow when creating a workspace by @sumo-slonik in https://github.com/Expensify/App/pull/93915
* [No QA] fix: polar chart label spacing, text clarity by @daledah in https://github.com/Expensify/App/pull/93245
* Refactor getLoginsByAccountIDs to accept personalDetailsList and update related usages by @bernhardoj in https://github.com/Expensify/App/pull/94759
* Harden font loading for charts by @roryabraham in https://github.com/Expensify/App/pull/93647
* Logged-out sign-in page URL shows /Home instead of root   by @sumo-slonik in https://github.com/Expensify/App/pull/94433
* Fix stale navigation and empty Plaid step on offline to online in USD VBBA by @VickyStash in https://github.com/Expensify/App/pull/93037
* Pass originalReportActions from useOnyx to deleteReportComment by @bernhardoj in https://github.com/Expensify/App/pull/94765
* Migrate workspace per diem page to the new Table component by @Krishna2323 in https://github.com/Expensify/App/pull/94912
* [No QA] fix - NetworkTest flaky by @rinej in https://github.com/Expensify/App/pull/94862
* Migrate InteractionManager - (Newly added usages) part 2 by @collectioneur in https://github.com/Expensify/App/pull/94474
* Fix: show generic "Make admin" copy for group chat members by @MelvinBot in https://github.com/Expensify/App/pull/94989
* Fix approval workflows help link to point to existing Add-Approvals article by @MelvinBot in https://github.com/Expensify/App/pull/94397
* refactor: extract shared Search list view scaffold (hook + layout) by @BartekObudzinski in https://github.com/Expensify/App/pull/94573
* Fix: Card name in card list and card name field are blank on admin side by @nyomanjyotisa in https://github.com/Expensify/App/pull/93554
* Add Tag GL code column to expense tables by @mukhrr in https://github.com/Expensify/App/pull/93146
* [No QA] Update submitter's ability to split expenses by @VictoriaExpensify in https://github.com/Expensify/App/pull/94799
* Fix withdrawal subtitle overlapping amount on mobile Bank Reconciliation list by @MelvinBot in https://github.com/Expensify/App/pull/94749
* Refactor settlement button to use dynamic verify account by @jmusial in https://github.com/Expensify/App/pull/94177
* [No QA]Rename selectors/Attributes to ReportAttributes by @mountiny in https://github.com/Expensify/App/pull/94838
* Move ONYXKEYS.DERIVED.FLAGGED_EXPENSES into custom hook by @LukasMod in https://github.com/Expensify/App/pull/94299
* Reinitialize Pusher during delegate account transitions by @nabi-ebrahimi in https://github.com/Expensify/App/pull/93265
* [Payment due @truph01] Fix attendees fallback by @lakchote in https://github.com/Expensify/App/pull/94481
* Add customUnitRateOutOfDateRange violation for date-bound mileage rates by @Krishna2323 in https://github.com/Expensify/App/pull/93555
* Add People Admin workspace approval access by @ShridharGoel in https://github.com/Expensify/App/pull/92875
* Add conciergeReportID handling across various components by @cretadn22 in https://github.com/Expensify/App/pull/94991
* refactor createDraftTransactionAndNavigateToParticipantSelector to use useOnyx data by @daledah in https://github.com/Expensify/App/pull/93550
* fix: Wallet - "Choose an account" page shows extra left margin by @mhawryluk in https://github.com/Expensify/App/pull/94680
* refactor isReportInGroupPolicy to use isGroupPolicy instead part 2 by @daledah in https://github.com/Expensify/App/pull/93549
* Fix duplicate supportal sign-in that trips the support-token rate limit by @allgandalf in https://github.com/Expensify/App/pull/95042
* Fix duplicate Limit type row after revealing virtual card details by @MelvinBot in https://github.com/Expensify/App/pull/94068
* Require date in new manual expense flow for distance, time, and invoice by @MelvinBot in https://github.com/Expensify/App/pull/94545
* [Onyx bump] Bump react-native-onyx from 3.0.86 to 3.0.88 by @elirangoshen in https://github.com/Expensify/App/pull/95044
* [No QA] Import CLI, SafeString, and Str.dedent from expensify-common by @roryabraham in https://github.com/Expensify/App/pull/93222
* [No QA] Gate git fetch --depth=1 behind CI to avoid shallowing local clones by @MelvinBot in https://github.com/Expensify/App/pull/95073
* [Payment due @QichenZhu] Update Announcements widget with June 30 newsletter by @MelvinBot in https://github.com/Expensify/App/pull/95055
* Migrate InteractionManager - (Newly added usages) batch 1 by @mrejdak in https://github.com/Expensify/App/pull/94171
* Part 2: Remove Onyx.connect() for the key: ONYXKEYS.NETWORK in src/libs/ReportActionsUtils.ts by @thelullabyy in https://github.com/Expensify/App/pull/92899
* Hide the Agent rules enforced-by row when RuleBot is removed by @yuwenmemon in https://github.com/Expensify/App/pull/94663
* Fix workspace LHN order: Receipt Partners before HR by @MelvinBot in https://github.com/Expensify/App/pull/94798
* fix: show Per Diem tab for members whose policy is missing arePerDiemRatesEnabled by @mukhrr in https://github.com/Expensify/App/pull/94692
* [Payment due @truph01] [No QA] Docs updates for E/A#92275 bulk Download as PDF for reports by @MelvinBot in https://github.com/Expensify/App/pull/94228
* Docs updates for E/A#93451 Add Recently added slot to Home Overview by @MelvinBot in https://github.com/Expensify/App/pull/94230
* [No QA] Docs updates for E/A#93937 saved searches sorted alphabetically by @MelvinBot in https://github.com/Expensify/App/pull/94231
* [Rules Revamp] Release 2: Move category-based creation into Rules; add Require fields and Flag for review by @Krishna2323 in https://github.com/Expensify/App/pull/94696
* [No QA] Docs updates for E/A#94131 surface RuleBot in Agent rules section by @MelvinBot in https://github.com/Expensify/App/pull/94636
* fix: Created expense at submitted report then create expense at ws chat add to the submitted report by @nkdengineer in https://github.com/Expensify/App/pull/93783
* Guard P2P participant selection against negative-amount expenses from self DM by @MelvinBot in https://github.com/Expensify/App/pull/94661
* Add Rillet integration by @s77rt in https://github.com/Expensify/App/pull/93897
* [No QA] Block eslint-disable bypasses of the Onyx.connect() ban by @cristipaval in https://github.com/Expensify/App/pull/94829
* [Payment due @daledah] Add certificate pinning for NewDot by @staszekscp in https://github.com/Expensify/App/pull/92503
* [CP Staging] Fix bulk delete in Search dropping deletions during confirm modal dismiss by @MelvinBot in https://github.com/Expensify/App/pull/95130
* migrate workspace company cards by @huult in https://github.com/Expensify/App/pull/94280
* 83833 migrate tags part 2 by @huult in https://github.com/Expensify/App/pull/94935
* Make Attendees and Per attendee columns sortable in expense report view by @MelvinBot in https://github.com/Expensify/App/pull/94511
* [No QA] Add support for dynamic routes that host an onyx tab navigator by @collectioneur in https://github.com/Expensify/App/pull/94172
* refactor navigateToAndCreateGroupChat to use useOnyx data by @daledah in https://github.com/Expensify/App/pull/94431
* [No QA] Fix flaky SessionTest timeout on CI job 8 by @marcochavezf in https://github.com/Expensify/App/pull/95153
* [NoQA] feat: add ME PR support to Publish React Native Android Artifacts workflow by @jakubstec in https://github.com/Expensify/App/pull/95142
* [Performance] Reduce `DEFAULT` handler fallthrough for unrecognized-tab submissions by @JakubKorytko in https://github.com/Expensify/App/pull/94454
* [Payment due @ZhenjaHorbach] Fix domain force-2FA disable routing by avoiding dynamic suffix collision by @mountiny in https://github.com/Expensify/App/pull/95040
* [No QA] Docs updates for E/A#92289 legal name and physical address VBBA copy by @MelvinBot in https://github.com/Expensify/App/pull/94501
* [CP Staging] Fix missing per diem subtitle on Android by re-adding flexRow wrapper by @MelvinBot in https://github.com/Expensify/App/pull/95164
* [No QA] Fix remote iOS build by @staszekscp in https://github.com/Expensify/App/pull/95167
* refactor: add dedicated ChatSearchView by @BartekObudzinski in https://github.com/Expensify/App/pull/94816
* [CP Staging] [Submit] Fix blockers for submit email submitter by @hungvu193 in https://github.com/Expensify/App/pull/95115
* Show workspace owner as Editor in Members tab on Submit workspaces by @carlosmiceli in https://github.com/Expensify/App/pull/95064
* [CP Staging] Fix marking an unread message as unread does not mark the conversation as unread by @VickyStash in https://github.com/Expensify/App/pull/95166
* [Submit] Show "Needs approval" for Submit approvers in Search/Spend by @abzokhattab in https://github.com/Expensify/App/pull/94610
* refactor: add dedicated ExpenseGroupedSearchView by @BartekObudzinski in https://github.com/Expensify/App/pull/95028
* Removed useOptionsList hook from the codebase by @shubham1206agra in https://github.com/Expensify/App/pull/94883
* Use freshly computed report totals from backend instead of potentially stale stored total by @allgandalf in https://github.com/Expensify/App/pull/91798
* [NoQA] Fix duplicate searchListContent declaration breaking main typecheck/lint by @mountiny in https://github.com/Expensify/App/pull/95189
* fix: Home - Action button disappears the second time an expense is opened from "Recently Added" by @mhawryluk in https://github.com/Expensify/App/pull/94466
* refactor: add dedicated ExpenseReportSearchView by @BartekObudzinski in https://github.com/Expensify/App/pull/94822
* [No QA] feat: add telemetry span for Share Extension submit flow by @jmgraa in https://github.com/Expensify/App/pull/94948
* Revert "[CP Staging] Fix bulk delete in Search dropping deletions during confirm modal dismiss" by @cristipaval in https://github.com/Expensify/App/pull/95198
* [CP Staging] Fix: open flagged expense thread when its report holds multiple transactions by @MelvinBot in https://github.com/Expensify/App/pull/95163
* refactor: add dedicated TaskSearchView by @BartekObudzinski in https://github.com/Expensify/App/pull/94820
* [No QA] Remove stale throttled translation key by @heekinho in https://github.com/Expensify/App/pull/95020
* Remove Onyx.connect() usage for ONYXKEYS.COLLECTION.POLICY_TAGS in updateSplitTransactions function from src/libs/actions/IOU/SplitTransactionUpdate.ts by @Guccio163 in https://github.com/Expensify/App/pull/89759
* [Payment due @ikevin127] Optimistically show thinking indicator in custom agent dms by @inimaga in https://github.com/Expensify/App/pull/94982
* Skip Skia web charts when WebGL shader precision is unavailable by @wildan-m in https://github.com/Expensify/App/pull/92874
* Move pre-selected vacation delegates and workspace members to top by @marufsharifi in https://github.com/Expensify/App/pull/92765
* [No QA] Revert "Restore ios/CertificatePinning.swift to match main" by @Guccio163 in https://github.com/Expensify/App/pull/95215
* Show card name on narrow Expensify Card table rows by @luacmartins in https://github.com/Expensify/App/pull/95009
* Refactor: migrate getRate to use usePersonalPolicy hook (part 3) by @shubham1206agra in https://github.com/Expensify/App/pull/95067
* Preserve Search context when leaving a thread by @marufsharifi in https://github.com/Expensify/App/pull/94114
* [NoQA] [HR Import] Error states + reconnect prompt on the HR card by @mhawryluk in https://github.com/Expensify/App/pull/91975
* Fix - Chat - Unread marker is not displayed when receiving messages on a new conversation. by @FitseTLT in https://github.com/Expensify/App/pull/94460
* [CP Staging] Fix Spend-Not able to delete expenses in bulk in Spend by @hungvu193 in https://github.com/Expensify/App/pull/95220
* Truncate long RuleBot name in Agent rules Enforced by pill by @MelvinBot in https://github.com/Expensify/App/pull/94837
* [No QA] Replace Copy AgentZero request ID with View AgentZero trace by @jasperhuangg in https://github.com/Expensify/App/pull/95074
* [No QA] docs: set threshold for ShareExtensionOpenSubmitFlow by @jmgraa in https://github.com/Expensify/App/pull/95205
* Refactor: migrate getRate to use usePersonalPolicy hook (part 2) by @shubham1206agra in https://github.com/Expensify/App/pull/95052
* [No QA] Docs updates for E/A#86932 disabled category and tag expense alerts by @MelvinBot in https://github.com/Expensify/App/pull/93865
* [No QA] Docs updates for E/A#93941 Workspace member role filter availability and reset by @MelvinBot in https://github.com/Expensify/App/pull/94067
* Add policy copy change log messages by @shubham1206agra in https://github.com/Expensify/App/pull/94189
* [No QA] Docs updates for E/A#93884 future-dated card transaction start dates by @MelvinBot in https://github.com/Expensify/App/pull/94065
* Fix flickering lock icon on Consolidated Travel Billing toggle by @allgandalf in https://github.com/Expensify/App/pull/95047
* feat(card): prompt for personal details before virtual card reveal by @DylanDylann in https://github.com/Expensify/App/pull/91634
* [No QA] Support Dual-Initial Avatars in App by @grgia in https://github.com/Expensify/App/pull/94567
* Fix: include member workspace chats in search router for admins by @MelvinBot in https://github.com/Expensify/App/pull/92226
* [No QA] Upgrade eslint-config-expensify to 4.0.6 by @roryabraham in https://github.com/Expensify/App/pull/93333
* Fix Share button being unresponsive when sharing an image to a new email by @MelvinBot in https://github.com/Expensify/App/pull/94905
* [No QA] Improve Copilot feature documentation and discoverability by @MelvinBot in https://github.com/Expensify/App/pull/91786
* Enhance odometer reading handling by introducing a baseline compariso… by @DylanDylann in https://github.com/Expensify/App/pull/95039
* fix: back button issue when opening concierge by @truph01 in https://github.com/Expensify/App/pull/94660
* Fix iOS freeze on locked-account pay in selection mode (#95026) by @Krishna2323 in https://github.com/Expensify/App/pull/95063
* Fix Blank space is shown below the empty state content by @GCyganek in https://github.com/Expensify/App/pull/94151
* [No QA] Fix broken OptionsListUtils test and repo-wide ESLint resolution error by @jasperhuangg in https://github.com/Expensify/App/pull/95244
* [No QA] Switch from Prettier to Oxfmt by @roryabraham in https://github.com/Expensify/App/pull/93994
* [No QA] Extend Oxfmt formatting to YAML files by @roryabraham in https://github.com/Expensify/App/pull/95254
* [No QA] Add lefthook pre-commit hook for oxfmt by @roryabraham in https://github.com/Expensify/App/pull/95255
* [CP Staging] Revert PR #94784 to stop loginToAccountIDMap massive logs by @mountiny in https://github.com/Expensify/App/pull/95233
* [No QA] Use oxfmt instead of prettier in Claude auto-format hook by @roryabraham in https://github.com/Expensify/App/pull/95263
* [No QA] Add YAML to lefthook oxfmt glob by @roryabraham in https://github.com/Expensify/App/pull/95264
* Update Original to Purchase in expense thread for Expensify Cards by @MelvinBot in https://github.com/Expensify/App/pull/88002
* [No QA] Clarify card request process in documentation by @stephanieelliott in https://github.com/Expensify/App/pull/94141
* added first approver and first approved columns by @mukhrr in https://github.com/Expensify/App/pull/93169
* Recalculate split shares to 0 when clearing the amount field by @MelvinBot in https://github.com/Expensify/App/pull/95236
* [CP Staging + Prod] Revert "feat: Enable react-native-nitro-fetch (V2)" by @mountiny in https://github.com/Expensify/App/pull/95284
* Getting started: show Issue Expensify cards step when Expensify Card is selected during onboarding by @MelvinBot in https://github.com/Expensify/App/pull/94423
* perf(search): replace useTransition with TransitionTracker for autocomplete list render by @WojtekBoman in https://github.com/Expensify/App/pull/94875
* [No QA] Growl: add action button and loading variant by @borys3kk in https://github.com/Expensify/App/pull/94865
* Replace getDisplayNameOrDefault with temporaryGetDisplayNameOrDefault - batch 2 by @cretadn22 in https://github.com/Expensify/App/pull/94990

## New Contributors
* @jmgraa made their first contribution in https://github.com/Expensify/App/pull/94948

**Full Changelog**: https://github.com/Expensify/App/compare/9.4.25-2...9.4.27-2