9.4.28-2

langgenius/dify9.4.28-2Jul 7, 2026by github-actions[bot]

AI Summary

This release focuses on UI improvements, refactoring navigation functions, and fixing critical bugs related to expenses, crash diagnostics, and collaboration. It also includes security patches and updates for device management.

Key Highlights

  • Migrated group members page to the new Table layout
  • Refactored navigation functions to use translation parameters
  • Fixed crash diagnostics to stop reporting hidden/backgrounded tabs
  • Added Rillet integration import pages

New Features

  • Migrate US virtual card reveal details storage to RevealedCardSecretsStore
  • Add seatbelt check and change context props
  • Add a Paid status expense report filter
  • Sort Device Management devices list by most recent timestamp first

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