Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2260 commits
Select commit Hold shift + click to select a range
38564e9
Explain lint disable for LoadPersonalDetails
TMisiukiewicz Oct 2, 2026
84c56fe
remove unused params
sosek108 Oct 2, 2026
2781e8c
Reword lint disable comment
TMisiukiewicz Oct 2, 2026
85cd839
fix: Expense - Growl is shown after creating split distance expense f…
mhawryluk Oct 2, 2026
289a7a8
Merge pull request #102013 from Expensify/claude-migrateGpsTripConfir…
roryabraham Oct 2, 2026
801dfb1
Merge pull request #101722 from callstack-internal/fix/no-cycle-part1…
roryabraham Oct 2, 2026
5441128
Merge pull request #100121 from hoangzinh/66386-remove-onyx-connect-r…
inimaga Oct 2, 2026
21c2946
Auto-tighten eslint-seatbelt baseline
OSBotify Oct 2, 2026
f4b4994
Disable the workspace bank account row offline unless the reimburser …
MelvinBot Oct 2, 2026
1287ad1
Use real FlashList in SelectionList perf test
WojtekBoman Oct 2, 2026
9744837
Make the bank account row non-interactive offline instead of disabled
MelvinBot Oct 2, 2026
91bd018
Skip AddWorkEmail when the work email is already the account login
MelvinBot Oct 2, 2026
92d9f04
Refresh Insights after a write is accepted and when a workspace is jo…
elirangoshen Oct 2, 2026
073b8f9
fix: Expense - Back button reopens expense after opening expense and …
mhawryluk Oct 2, 2026
c8feed2
Merge remote-tracking branch 'upstream/main' into eliran/2914-home-ta…
elirangoshen Oct 2, 2026
a5dc39d
Merge remote-tracking branch 'origin/main' into claude-removeSearchQu…
mjasikowski Oct 2, 2026
9efbbfe
Shorten the comment on skipping AddWorkEmail to one line
MelvinBot Oct 2, 2026
465f6ff
Enable auto-scroll to the next actionable report preview in production
MelvinBot Oct 2, 2026
d09110f
fix: Show GL codes row is not aligned center with toggle button
nkdengineer Oct 2, 2026
d6e825a
Merge branch 'main' into fix/102607
nkdengineer Oct 2, 2026
9f8b9aa
Run cheap checks first in isApproveAction
TMisiukiewicz Oct 2, 2026
61508f3
fix comment
collectioneur Oct 2, 2026
bb4608f
fix: Expense - Arrow navigation is not automatically displayed when o…
mhawryluk Oct 2, 2026
89153ea
Parse thousands separators in category import amounts
MelvinBot Oct 2, 2026
33dbf5a
fix eslint
nkdengineer Oct 2, 2026
901155d
Merge pull request #102784 from huult/102772-disable-report-header-ac…
mountiny Oct 2, 2026
775bc12
Refresh Insights after an offline edit is accepted
elirangoshen Oct 2, 2026
2408be3
Simplify spendDataSignature comments
elirangoshen Oct 2, 2026
5ec2e2e
Merge remote-tracking branch 'origin/main' into claude-removeSearchQu…
mjasikowski Oct 2, 2026
6e7db2b
Merge remote-tracking branch 'origin/main' into fix/no-cycle-part13-n…
LukasMod Oct 2, 2026
b9b3000
Merge branch 'main' into chore/remove-dead-list-item-props
jmusial Oct 2, 2026
bf4cca6
FIx it for narrow layout too
mhawryluk Oct 2, 2026
e38a2da
Merge branch 'main' into chore/remove-add-domain-verify-account-page
jmusial Oct 2, 2026
025b6ec
Merge branch 'main' into chore/fix-notfound-for-unvalidated-admin
jmusial Oct 2, 2026
dc3c7f9
Merge branch 'main' into chore/policy-expense-chat-avatar-decomposition
jmusial Oct 2, 2026
9e7ece8
fix: Report opens with skeleton loader after clicking View on growl w…
mhawryluk Oct 2, 2026
079e256
Skip building unused export templates in exported-to filter options
TMisiukiewicz Oct 2, 2026
3c4f0b9
conditional use for PersonalDetailsContext
jmusial Oct 2, 2026
b186189
Use single export templates call in exported-to selector
TMisiukiewicz Oct 2, 2026
bad90ab
fix: mweb - Expense - Menu remains openeed after opening expense via …
mhawryluk Oct 2, 2026
06d44f6
Merge pull request #101226 from lorretheboy/fix-v2/95750
MonilBhavsar Oct 2, 2026
8136590
Merge pull request #102838 from software-mansion-labs/fix/growl-dista…
mountiny Oct 2, 2026
9b55796
Update version to 9.5.1-2
OSBotify Oct 2, 2026
406ce07
Update Mobile-Expensify submodule version to 9.5.1-2
OSBotify Oct 2, 2026
144dfa3
Merge remote-tracking branch 'origin/main' into chaitanya/681919-vend…
c3024 Oct 2, 2026
2d7d39d
Merge branch 'main' into collectioneur/bump-gesture-handler
collectioneur Oct 2, 2026
b6ba75e
Flatten the select-all template export query and send searchKey
MelvinBot Oct 2, 2026
ff6cf35
Merge pull request #102877 from software-mansion-labs/fix/close-modal…
mountiny Oct 2, 2026
c9b9941
Merge pull request #102841 from software-mansion-labs/use-real-flashl…
mountiny Oct 2, 2026
3382bd6
Update version to 9.5.1-3
OSBotify Oct 2, 2026
a6e8669
Update Mobile-Expensify submodule version to 9.5.1-3
OSBotify Oct 2, 2026
3b754eb
Merge pull request #100990 from Expensify/yuwen/662001-agent-prompt-a…
carlosmiceli Oct 2, 2026
5c3ffd2
Merge branch 'main' into fix/growl-invoice-deleted-offline-view
mhawryluk Oct 2, 2026
eb783de
Merge pull request #102197 from arekm213/arekm213/perf/98432-size-tie…
mountiny Oct 2, 2026
8426117
Merge pull request #102678 from software-mansion-labs/collectioneur/b…
mountiny Oct 2, 2026
ff25286
Merge pull request #102847 from software-mansion-labs/fix/android-gro…
mountiny Oct 2, 2026
42f4f7d
Update Mobile-Expensify submodule to 05eac29
OSBotify Oct 2, 2026
8842826
Update version to 9.5.1-4
OSBotify Oct 2, 2026
60257b3
Update Mobile-Expensify submodule version to 9.5.1-4
OSBotify Oct 2, 2026
24af965
Merge branch 'main' into fix/growl-arrow-navigation
mhawryluk Oct 2, 2026
9479c7d
Implement reviewer's suggestions
mhawryluk Oct 2, 2026
94253c1
Pass cached snapshots directly to optimistic search updates
mjasikowski Oct 2, 2026
854496e
Remove redundant legacy search query fallback in migration
mjasikowski Oct 2, 2026
15703e2
Use connectWithoutView for the IOU snapshot cache
mjasikowski Oct 2, 2026
a0fd7fd
Mock the user search in ConciergePromptBoxTest so typing a mention ne…
mountiny Oct 2, 2026
89361bc
Repoint category tax default rules when a tax code is renamed
MelvinBot Oct 2, 2026
fa8f8e8
Merge pull request #102872 from software-mansion-labs/fix/growl-invoi…
mountiny Oct 2, 2026
60b3812
Update version to 9.5.1-5
OSBotify Oct 2, 2026
e30668e
Update Mobile-Expensify submodule version to 9.5.1-5
OSBotify Oct 2, 2026
836c029
Merge pull request #100859 from margelo/@chrispader/fix/cache-reset-n…
NicolasBonet Oct 2, 2026
ddbc8b2
Add Given/When/Then comments to tax code rule tests and fix spelling
MelvinBot Oct 2, 2026
3bf834c
Merge pull request #102795 from Expensify/claude-catchHowlerAudioResu…
mountiny Oct 2, 2026
9b779a6
Merge remote-tracking branch 'origin/main' into claude-removeSearchQu…
mjasikowski Oct 2, 2026
18e7de8
Merge pull request #102895 from Expensify/vit/fix-concierge-prompt-bo…
mountiny Oct 2, 2026
a0ad3de
Merge pull request #102876 from callstack-internal/banjul/getexportte…
rlinoz Oct 2, 2026
ba7c8b4
Merge pull request #102382 from mukhrr/fix/99937
marcochavezf Oct 2, 2026
fd7116c
Remove comment from setPolicyTaxCode
MelvinBot Oct 2, 2026
e52a90b
Replace a full screen expense report instead of stacking another one …
mhawryluk Oct 2, 2026
ed5f791
Modify comments
mhawryluk Oct 2, 2026
69015b1
Simplify the template export query comment and add blank lines above …
MelvinBot Oct 2, 2026
112fd62
Allow approvals when Smart Limit has no configured workflow
nabi-ebrahimi Oct 2, 2026
a3d3c54
Update Mobile-Expensify submodule to 106e037
OSBotify Oct 2, 2026
d1eb99b
Keep encoded Concierge drafts at their safe prefix
inimaga Oct 2, 2026
b4a5c07
Merge pull request #98871 from x-dev90/fix/scan-failed-amount-handling
arosiclair Oct 2, 2026
a865583
Simplify scrollToIndex JSDoc and remove duplicate animated-scroll test
MelvinBot Oct 2, 2026
b1603c9
Skip pusher-js array frames whose payload is not an array and link up…
MelvinBot Oct 2, 2026
3748cba
Exclude Internal QA cherry-picks when creating the next deploy checklist
Julesssss Oct 2, 2026
8d0e75c
Ignore the anull test payload in spellcheck
MelvinBot Oct 2, 2026
320c782
Merge pull request #102636 from Expensify/claude-addDayGroupByToInsights
luacmartins Oct 2, 2026
5740eb9
Fix Smart Limit approval CI failures
nabi-ebrahimi Oct 2, 2026
b74b0ef
Reword comment on previous checklist PR exclusion
Julesssss Oct 2, 2026
3f9501d
Merge pull request #102641 from callstack-internal/recipient-suggesti…
rlinoz Oct 2, 2026
a17481e
Merge pull request #102321 from software-mansion-labs/@adamgrzybowski…
aldo-expensify Oct 2, 2026
47c4d50
Merge pull request #102419 from Expensify/claude-updateShellQuote
danieldoglas Oct 2, 2026
196f812
Add [UpdateRequired] to FORWARDED_LOG_PREFIXES
VickyStash Oct 2, 2026
fe69f31
Use fidelidad in Spanish hotel card nudge
blimpich Oct 2, 2026
3172268
Match Spanish rail card nudge wording to manual nudge
blimpich Oct 2, 2026
4abc001
Merge pull request #100420 from Expensify/codex/674683-draft-reconcil…
jasperhuangg Oct 2, 2026
8a6d944
Merge pull request #101558 from mukhrr/fix/99940
pecanoro Oct 2, 2026
48569d9
add param
arosiclair Oct 2, 2026
fbf8d2a
Merge pull request #102839 from Expensify/claude-bankAccountRowOfflin…
francoisl Oct 2, 2026
abe8c57
Ignore Back while the work email merge is in flight, and use the shar…
MelvinBot Oct 2, 2026
a1b41e0
Merge pull request #102851 from Expensify/claude-enableActionBadgeAut…
tylerkaraszewski Oct 2, 2026
9d0a4f2
Read Onyx through TestHelper instead of the restricted OnyxUtils import
MelvinBot Oct 2, 2026
6d92b7d
Update Mobile-Expensify submodule to db85bbb
OSBotify Oct 2, 2026
4964b15
Merge pull request #102738 from callstack-internal/refactor/rd-04-nam…
mjasikowski Oct 2, 2026
6a53868
Merge pull request #102854 from software-mansion-labs/fix/growl-arrow…
Julesssss Oct 2, 2026
2036be4
Update version to 9.5.1-6
OSBotify Oct 2, 2026
24a338b
Update Mobile-Expensify submodule version to 9.5.1-6
OSBotify Oct 2, 2026
e9d71e3
Merge pull request #102804 from Expensify/blimpich-travelNudgeLoyalty…
cead22 Oct 2, 2026
ef40f03
Reuse the Submit policy flag and test Smart Limit integration locking
nabi-ebrahimi Oct 2, 2026
8506232
Merge pull request #102116 from Expensify/claude-animatedScrollToActi…
arosiclair Oct 2, 2026
05cbf80
fix: omit invalid Business Central export links
francoisl Oct 2, 2026
e776e8c
Test Smart Limit lock for integrations
nabi-ebrahimi Oct 2, 2026
0c6f70f
Set up Node only when a review will run
neil-marcellini Oct 2, 2026
5e2c4c7
Split Given/When/Then test comments onto separate lines
ishpaul777 Oct 2, 2026
9d4d6c9
Revert "fix: remove unsafe assertions and correct search filter match…
Julesssss Oct 2, 2026
4e2dae7
Merge pull request #101393 from Expensify/claude-duplicateJoinWorkspa…
AndrewGable Oct 2, 2026
7dcf9f0
Merge pull request #102206 from ishpaul777/ishpaul/682672-app-bulk-ma…
Beamanator Oct 2, 2026
824cb2c
Merge pull request #98016 from Expensify/neil-skip-ai-review-same-commit
Julesssss Oct 2, 2026
19bb213
Merge pull request #102908 from Expensify/jules-filterInternalQACherr…
Julesssss Oct 2, 2026
ddd4b14
Revert "Expense - Scan confirm page receipt has 8px gap above first f…
Julesssss Oct 2, 2026
3a71b21
Merge pull request #102922 from Expensify/revert-102640-fix/102586
Julesssss Oct 2, 2026
7319d96
Update version to 9.5.1-7
OSBotify Oct 2, 2026
3e8aa37
Update Mobile-Expensify submodule version to 9.5.1-7
OSBotify Oct 2, 2026
e12973a
Merge pull request #102919 from Expensify/revert-98854-seatbelt/c20-2…
Julesssss Oct 2, 2026
82bd600
Update version to 9.5.1-8
OSBotify Oct 2, 2026
edd8fc2
Update Mobile-Expensify submodule version to 9.5.1-8
OSBotify Oct 2, 2026
fc9cf1a
Restore eslint-seatbelt allowances removed by the revert of PR 98854
Julesssss Oct 2, 2026
a67e79e
Merge pull request #102924 from Expensify/jules-fixSeatbeltBaseline
Julesssss Oct 2, 2026
5db4773
Revert "Merge pull request #100128 from Krishna2323/krishna2323/issue…
JS00001 Oct 2, 2026
05e5eed
Merge pull request #102925 from Expensify/jsenyikto-revert-blocsk
JS00001 Oct 2, 2026
221aa6c
Update version to 9.5.1-9
OSBotify Oct 2, 2026
473e5b0
Update Mobile-Expensify submodule version to 9.5.1-9
OSBotify Oct 2, 2026
5defad0
Merge branch 'main' into fix-smart-limit-approvals-toggle
nabi-ebrahimi Oct 3, 2026
12cef55
Merge remote-tracking branch 'origin/main' into claude-importCategory…
MelvinBot Oct 4, 2026
b386fd0
Merge branch 'main' of https://github.com/Expensify/App into fix-04/9…
thelullabyy Oct 4, 2026
202325d
fix: resolve comments
thelullabyy Oct 4, 2026
c29029c
Merge remote-tracking branch 'origin/main' into claude-clearUnlockCon…
MelvinBot Oct 4, 2026
f4c2005
Merge pull request #102752 from Expensify/claude-ignoreMalformedPushe…
mountiny Oct 4, 2026
6c8a061
Merge branch 'main' of https://github.com/mkhutornyi/Expensify-Fronte…
mkhutornyi Oct 4, 2026
f45f9e0
Merge pull request #102729 from callstack-internal/almaty/personal_de…
mountiny Oct 4, 2026
fb04231
Auto-tighten eslint-seatbelt baseline
OSBotify Oct 4, 2026
56ea119
Update version to 9.5.2-0
OSBotify Oct 4, 2026
d5d7285
Update Mobile-Expensify submodule version to 9.5.2-0
OSBotify Oct 4, 2026
ce5a5b9
Merge main into support-inline-editing-workspace-settings-tables
ahmedGaber93 Oct 5, 2026
733c324
refactor(validation): share input validation error codes
ahmedGaber93 Oct 5, 2026
6850ef2
Drop the manual useCallback around changeMemberRole
ahmedGaber93 Oct 5, 2026
f3e313b
Merge remote-tracking branch 'origin/main' into fix/no-cycle-part13-n…
LukasMod Oct 5, 2026
d24c34f
Merge pull request #102903 from nabi-ebrahimi/fix-smart-limit-approva…
cristipaval Oct 5, 2026
dd3e3dc
Merge remote-tracking branch 'origin/main' into claude-removeSearchQu…
mjasikowski Oct 5, 2026
ba9051c
Merge branch 'main' into fix/lhn-search-preview-parity
sosek108 Oct 5, 2026
da74703
Keep the vendor filter loading flag out of persistent storage
c3024 Oct 5, 2026
d0cf159
Merge pull request #102399 from Expensify/claude-importCategoryRuleCo…
cristipaval Oct 5, 2026
1f36443
Merge remote-tracking branch 'origin/main' into claude-honorSpendColu…
MelvinBot Oct 5, 2026
c5e72e0
Merge branch 'main' into chore/remove-dead-list-item-props
jmusial Oct 5, 2026
2ded521
Fix review finds
jmusial Oct 5, 2026
d15660e
remove more dead props
jmusial Oct 5, 2026
3144d55
Merge branch 'main' into fix/99507
nkdengineer Oct 5, 2026
4e385e2
Revert "Open a deep link captured before onboarding instead of droppi…
mountiny Oct 5, 2026
80ba92d
Merge pull request #102349 from Expensify/claude-reportPreviewButtons…
grgia Oct 5, 2026
cbd2e70
Merge pull request #102432 from Expensify/claude-removeSearchQueryByH…
mjasikowski Oct 5, 2026
239f48d
Merge remote-tracking branch 'origin/main' into claude-reapplyReconci…
MelvinBot Oct 5, 2026
60f9bdc
Merge pull request #100331 from thelullabyy/fix-04/90366
JS00001 Oct 5, 2026
bf7859a
Increase web precache file size limit by 50%
rlinoz Oct 5, 2026
0d907d7
Override adm-zip to 0.6.1 to address Dependabot alerts
MelvinBot Oct 5, 2026
d68440d
Bump js-yaml to 3.15.2 and 4.3.2 to address Dependabot alerts
MelvinBot Oct 5, 2026
0e1e944
Bump underscore to 1.13.8 to address GHSA-qpx9-hpmf-5gmw
MelvinBot Oct 5, 2026
2801542
Bump jwt from 2.10.2 to 2.10.3
MelvinBot Oct 5, 2026
11aaa52
Bump faraday from 1.10.4 to 1.10.6
MelvinBot Oct 5, 2026
ec5c8f2
Bump addressable to 2.9.0 to address GHSA-h27x-rffw-24p4
MelvinBot Oct 5, 2026
f68ceef
Merge pull request #100803 from nkdengineer/fix/99507
Gonals Oct 5, 2026
1bf848f
Merge pull request #102979 from Expensify/revert-101558-fix/99940
mountiny Oct 5, 2026
2c4c2d2
Update version to 9.5.2-1
OSBotify Oct 5, 2026
bd69945
Update Mobile-Expensify submodule version to 9.5.2-1
OSBotify Oct 5, 2026
33bf697
Merge pull request #102731 from callstack-internal/VickyStash/bugfix/…
mountiny Oct 5, 2026
2bf5ac8
Mock fetch in useGettingStartedItems tests so GetRules stays off the …
mountiny Oct 5, 2026
57d81b2
Merge pull request #101585 from Expensify/claude-honorSpendColumnSele…
mountiny Oct 5, 2026
81926a8
Merge pull request #102458 from Expensify/claude-docsReceiptAddedAudi…
zanyrenney Oct 5, 2026
9b502e8
Merge pull request #102995 from Expensify/rodrigo-increase-web-precac…
NicolasBonet Oct 5, 2026
b09328d
Merge pull request #102843 from Expensify/claude-workEmailBackSameAsS…
amyevans Oct 5, 2026
79bf9be
Merge pull request #101298 from callstack-internal/fix/lhn-search-pre…
mountiny Oct 5, 2026
8a02e0b
Merge pull request #103033 from Expensify/vit-fixGettingStartedRulesF…
mountiny Oct 5, 2026
dc0ad51
Update version to 9.5.2-2
OSBotify Oct 5, 2026
f038646
Update Mobile-Expensify submodule version to 9.5.2-2
OSBotify Oct 5, 2026
4dd8b05
Add blank line before eslint-disable comment in setPolicyTaxCode
MelvinBot Oct 5, 2026
f1ad4e5
Merge pull request #100434 from Expensify/claude-workflowFastEditSave
mountiny Oct 5, 2026
51527e7
Merge pull request #102896 from Expensify/claude-updateExpenseRulesOn…
lakchote Oct 5, 2026
6d5dfca
Merge remote-tracking branch 'origin/main' into chaitanya/681919-vend…
c3024 Oct 5, 2026
ade1801
Merge pull request #101085 from callstack-internal/fix/indexeddb-unav…
mountiny Oct 5, 2026
d37f0ee
Merge pull request #100567 from ahmedGaber93/support-inline-editing-w…
JS00001 Oct 5, 2026
b7f48cb
Merge pull request #102268 from software-mansion-labs/chore/remove-ad…
mountiny Oct 5, 2026
17c7cc9
Merge pull request #102765 from software-mansion-labs/chore/fix-notfo…
mountiny Oct 5, 2026
e5fac34
Merge pull request #102996 from Expensify/claude-bumpAdmZip
mjasikowski Oct 5, 2026
5005ab9
Merge pull request #101309 from c3024/chaitanya/681919-vendor-search-…
Beamanator Oct 5, 2026
23623be
Mock fetch in tests that render the GetRules prefetch
mountiny Oct 5, 2026
2626c3c
Merge pull request #103019 from Expensify/claude-bumpJwtTo2103
NicolasBonet Oct 5, 2026
a2e658d
Merge branch 'main' of github.com:Expensify/App into arosiclair-admin…
arosiclair Oct 5, 2026
ba05dc8
fix params
arosiclair Oct 5, 2026
6c4cf8b
Merge pull request #103026 from Expensify/claude-bumpAddressable
iwiznia Oct 5, 2026
a93e476
Update Mobile-Expensify submodule to 3aa6514
OSBotify Oct 5, 2026
2df8ff8
Merge pull request #100548 from Expensify/arosiclair-admin-delete-car…
arosiclair Oct 5, 2026
7f7695d
Merge branch 'main' into dylann/101573-category-anchored-dropdown
DylanDylann Oct 5, 2026
8273c92
Simplified prop descriptions, removed unnecessary comments
DylanDylann Oct 5, 2026
9d5cf8d
Merge pull request #101423 from callstack-internal/fix/no-cycle-part1…
roryabraham Oct 5, 2026
85037a0
Revert "Merge pull request #101226 from lorretheboy/fix-v2/95750"
MonilBhavsar Oct 5, 2026
edd6f34
Merge branch 'main' into monil-revertBBAFlow
MonilBhavsar Oct 5, 2026
32a1d90
Merge pull request #102853 from callstack-internal/melbourne/reportma…
rlinoz Oct 5, 2026
68186e9
Merge pull request #102254 from software-mansion-labs/chore/remove-de…
roryabraham Oct 5, 2026
32daaac
Auto-tighten eslint-seatbelt baseline
OSBotify Oct 5, 2026
099b872
Merge pull request #102060 from software-mansion-labs/chore/policy-ex…
roryabraham Oct 5, 2026
6b51293
Show list report fields when disabledOptions is shorter than values
MelvinBot Oct 5, 2026
35dc6c3
Update Mobile-Expensify submodule to 4872a60
OSBotify Oct 5, 2026
1c6d5eb
Update Mobile-Expensify submodule to b126878
OSBotify Oct 5, 2026
99f828d
Explain empty disabledOptions in hasEnabledListValue and use it in Fi…
MelvinBot Oct 5, 2026
2b89b35
Merge pull request #103051 from Expensify/vit-mockFetchForRulesPrefet…
MonilBhavsar Oct 5, 2026
1e0b673
Merge branch 'main' into monil-revertBBAFlow
MonilBhavsar Oct 5, 2026
54b6ff4
Merge remote-tracking branch 'origin/main' into claude-showReportFiel…
MelvinBot Oct 5, 2026
4e09ca2
Merge pull request #103057 from Expensify/monil-revertBBAFlow
MonilBhavsar Oct 5, 2026
56d4948
Merge remote-tracking branch 'origin/main' into claude-fetchPickerCat…
MelvinBot Oct 5, 2026
6c54109
Merge pull request #101523 from lorretheboy/fix08/73656
rlinoz Oct 5, 2026
c068331
Update version to 9.5.2-3
OSBotify Oct 5, 2026
7d6b4d1
Update Mobile-Expensify submodule version to 9.5.2-3
OSBotify Oct 5, 2026
7173ac9
Merge branch 'main' into dylann/101573-category-anchored-dropdown
DylanDylann Oct 5, 2026
2e7b7b2
Merge pull request #103018 from Expensify/claude-bumpUnderscore
arosiclair Oct 5, 2026
0bebae4
Merge pull request #100551 from callstack-internal/eliran/2914-home-t…
mjasikowski Oct 5, 2026
4d87093
Merge pull request #102665 from DylanDylann/dylann/101573-category-an…
puneetlath Oct 5, 2026
919f489
Merge pull request #102566 from mkhutornyi/feat-102006
yuwenmemon Oct 5, 2026
1668014
Merge pull request #102813 from Expensify/claude-lhnActionBadgeOverMe…
neil-marcellini Oct 5, 2026
776a10f
Merge pull request #102367 from Expensify/claude-clearUnlockConcierge…
francoisl Oct 5, 2026
4866c8a
Merge pull request #103060 from Expensify/claude-showReportFieldsWith…
luacmartins Oct 5, 2026
18b6142
Merge remote-tracking branch 'origin/main' into claude-splitPolicyUti…
MelvinBot Oct 5, 2026
27fe734
Merge pull request #102856 from nkdengineer/fix/102607
Julesssss Oct 5, 2026
a9b05a8
Merge pull request #102724 from Expensify/claude-splitPolicyUtilsTags
blimpich Oct 5, 2026
d50acfd
Merge pull request #99125 from Expensify/claude-fetchPickerCategories…
carlosmiceli Oct 5, 2026
7f68240
Merge pull request #102921 from Expensify/francois-business-export-links
NikkiWines Oct 5, 2026
fed4110
Merge pull request #102431 from Expensify/claude-reapplyReconciliatio…
NikkiWines Oct 5, 2026
45e50b8
Update Mobile-Expensify submodule to d7f7e72
OSBotify Oct 5, 2026
aef7373
Update Mobile-Expensify submodule to 77a2ca2
OSBotify Oct 5, 2026
2e4c0cc
Merge pull request #103022 from Expensify/claude-bumpFaraday
rlinoz Oct 5, 2026
0651335
Update Mobile-Expensify submodule to f39a898
OSBotify Oct 5, 2026
5fb4a80
Merge pull request #103000 from Expensify/claude-bumpJsYaml
luacmartins Oct 5, 2026
e549f46
Merge pull request #102794 from Expensify/claude-keepFloatingCounterO…
stitesExpensify Oct 5, 2026
0589a7a
Merge pull request #102240 from akinwale/task-96570-app
yuwenmemon Oct 5, 2026
1bb324e
Update Mobile-Expensify submodule to 177a1bb
OSBotify Oct 5, 2026
29f307b
Merge pull request #102822 from Expensify/francois-help-doc-qboONL583
yuwenmemon Oct 5, 2026
ca5772e
Add missing space in README LHN link text
puneetlath Oct 5, 2026
c4bd665
Merge pull request #103092 from Expensify/puneet-dummyCPForAndroidReb…
Julesssss Oct 5, 2026
80a86a0
Update version to 9.5.2-4
OSBotify Oct 5, 2026
52e1a25
Update Mobile-Expensify submodule version to 9.5.2-4
OSBotify Oct 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,11 @@ This is a checklist for PR authors. Please make sure to complete all tasks and c
- [ ] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
- [ ] I verified that all the inputs inside a form are aligned with each other.
- [ ] I added `Design` label and/or tagged `@Expensify/design` so the design team can review the changes.
- [ ] If the PR adds or modifies the UI:
- [ ] I asked an AI agent to review the changes for accessibility issues and addressed its findings.
- [ ] I tested with a screen reader (VoiceOver on macOS) and verified all new/changed elements are reachable with a logical focus order.
- [ ] I verified all new/changed elements have meaningful accessible names and roles.
- [ ] I verified state changes are announced (e.g. checked/unchecked, expanded/collapsed, selected).
- [ ] I added [unit tests](https://github.com/Expensify/App/blob/main/tests/README.md) for any new feature or bug fix in this PR to help automatically prevent regressions in this user flow.
- [ ] If the `main` branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the `Test` steps.

Expand Down
8 changes: 8 additions & 0 deletions .github/actions/composite/uploadSentrySizeAnalysis/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,17 @@ runs:
ASSET: ${{ inputs.asset-name }}
PLATFORM: ${{ inputs.platform }}
run: |
# Capture the exit code so bash -e does not discard the CLI diagnostic on failure
set +e
OUTPUT=$(npx sentry-cli build upload "$ASSET" \
--org expensify --project app --build-configuration Release --log-level info 2>&1)
EXIT_CODE=$?
set -e
echo "$OUTPUT"
if [ "$EXIT_CODE" -ne 0 ]; then
echo "::error::${PLATFORM} Sentry size-analysis upload failed (exit $EXIT_CODE)"
exit "$EXIT_CODE"
fi
SENTRY_URL=$(echo "$OUTPUT" | grep -oE 'https://expensify\.sentry\.io/[^ )"}]+' | head -1)
if [ -n "$SENTRY_URL" ]; then
echo "::notice::${PLATFORM} Sentry size analysis: $SENTRY_URL"
Expand Down
17 changes: 13 additions & 4 deletions .github/actions/javascript/markPullRequestsAsDeployed/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -26670,6 +26670,12 @@ function getDeployTableMessage(platformResult) {
return `${platformResult} \u274C`;
}
}
function parseDeployList(input) {
if (!Array.isArray(input) || input.some((item) => typeof item !== "string" && typeof item !== "number")) {
throw new TypeError("Deploy pull request list must be an array of strings or numbers");
}
return input.map((item) => Number.parseInt(String(item), 10));
}
async function commentPR(PR, message, repo = context2.repo.repo) {
try {
await GithubUtils_default.createComment(repo, PR, message);
Expand Down Expand Up @@ -26716,7 +26722,10 @@ async function commentOnDeployChecklistPRs(prList, repoName, recentTags, getDepl
const deployMessage = deployer ? getDeployMessage(deployer, isCP ? "Cherry-picked" : "Deployed", title) : "";
await commentPR(prNumber, deployMessage, repoName);
} catch (error2) {
if (error2.status === 404) {
if (error2 === null || error2 === void 0) {
throw new TypeError(`Cannot read properties of ${String(error2)} (reading 'status')`);
}
if ((typeof error2 === "object" || typeof error2 === "function") && "status" in error2 && error2.status === 404) {
console.log(`Unable to comment on ${repoName} PR #${prNumber}. GitHub responded with 404.`);
} else if (repoName === CONST_default.MOBILE_EXPENSIFY_REPO && process.env.GITHUB_REPOSITORY !== `${CONST_default.GITHUB_OWNER}/${CONST_default.APP_REPO}`) {
console.warn(`Unable to comment on ${repoName} PR #${prNumber} from forked repository. This is expected.`);
Expand All @@ -26729,10 +26738,10 @@ async function commentOnDeployChecklistPRs(prList, repoName, recentTags, getDepl
await Promise.all(commentPromises);
}
async function run() {
const prList = getJSONInput("PR_LIST", { required: true }).map((num) => Number.parseInt(num, 10));
const prList = parseDeployList(getJSONInput("PR_LIST", { required: true }));
const mobileExpensifyPRListInput = getJSONInput("MOBILE_EXPENSIFY_PR_LIST", { required: false });
const mobileExpensifyPRList = Array.isArray(mobileExpensifyPRListInput) ? mobileExpensifyPRListInput.map((num) => Number.parseInt(num, 10)) : [];
const isProd = getJSONInput("IS_PRODUCTION_DEPLOY", {
const mobileExpensifyPRList = Array.isArray(mobileExpensifyPRListInput) ? parseDeployList(mobileExpensifyPRListInput) : [];
const isProd = !!getJSONInput("IS_PRODUCTION_DEPLOY", {
required: true
});
const version = getInput("DEPLOY_VERSION", { required: true });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,14 @@ import GithubUtils from '@github/libs/GithubUtils';

import PromisePool from '@scripts/utils/PromisePool';

import type {RequestError} from '@octokit/types';

import * as core from '@actions/core';
import {context} from '@actions/github';
import memoize from 'lodash/memoize';

type PlatformResult = 'success' | 'cancelled' | 'skipped' | 'failure';

/**
* Return a nicely formatted message for the table based on the result of the GitHub action job
*/
function getDeployTableMessage(platformResult: PlatformResult): string {
function getDeployTableMessage(platformResult: string): string {
switch (platformResult) {
case 'success':
return `${platformResult} ✅`;
Expand All @@ -30,6 +26,14 @@ function getDeployTableMessage(platformResult: PlatformResult): string {
}
}

function parseDeployList(input: unknown): number[] {
if (!Array.isArray(input) || input.some((item) => typeof item !== 'string' && typeof item !== 'number')) {
throw new TypeError('Deploy pull request list must be an array of strings or numbers');
}

return input.map((item) => Number.parseInt(String(item), 10));
}

async function commentPR(PR: number, message: string, repo: string = context.repo.repo) {
try {
await GithubUtils.createComment(repo, PR, message);
Expand Down Expand Up @@ -90,7 +94,11 @@ async function commentOnDeployChecklistPRs(
const deployMessage = deployer ? getDeployMessage(deployer, isCP ? 'Cherry-picked' : 'Deployed', title) : '';
await commentPR(prNumber, deployMessage, repoName);
} catch (error) {
if ((error as RequestError).status === 404) {
// Preserve the former direct `.status` access ordering for nullish rejections.
if (error === null || error === undefined) {
throw new TypeError(`Cannot read properties of ${String(error)} (reading 'status')`);
}
if ((typeof error === 'object' || typeof error === 'function') && 'status' in error && error.status === 404) {
console.log(`Unable to comment on ${repoName} PR #${prNumber}. GitHub responded with 404.`);
} else if (repoName === CONST.MOBILE_EXPENSIFY_REPO && process.env.GITHUB_REPOSITORY !== `${CONST.GITHUB_OWNER}/${CONST.APP_REPO}`) {
console.warn(`Unable to comment on ${repoName} PR #${prNumber} from forked repository. This is expected.`);
Expand All @@ -105,17 +113,17 @@ async function commentOnDeployChecklistPRs(
}

async function run() {
const prList = (ActionUtils.getJSONInput('PR_LIST', {required: true}) as string[]).map((num) => Number.parseInt(num, 10));
const prList = parseDeployList(ActionUtils.getJSONInput('PR_LIST', {required: true}));
const mobileExpensifyPRListInput = ActionUtils.getJSONInput('MOBILE_EXPENSIFY_PR_LIST', {required: false});
const mobileExpensifyPRList = Array.isArray(mobileExpensifyPRListInput) ? mobileExpensifyPRListInput.map((num: string) => Number.parseInt(num, 10)) : [];
const isProd = ActionUtils.getJSONInput('IS_PRODUCTION_DEPLOY', {
const mobileExpensifyPRList = Array.isArray(mobileExpensifyPRListInput) ? parseDeployList(mobileExpensifyPRListInput) : [];
const isProd = !!ActionUtils.getJSONInput('IS_PRODUCTION_DEPLOY', {
required: true,
}) as boolean;
});
const version = core.getInput('DEPLOY_VERSION', {required: true});

const androidResult = getDeployTableMessage(core.getInput('ANDROID', {required: true}) as PlatformResult);
const iOSResult = getDeployTableMessage(core.getInput('IOS', {required: true}) as PlatformResult);
const webResult = getDeployTableMessage(core.getInput('WEB', {required: true}) as PlatformResult);
const androidResult = getDeployTableMessage(core.getInput('ANDROID', {required: true}));
const iOSResult = getDeployTableMessage(core.getInput('IOS', {required: true}));
const webResult = getDeployTableMessage(core.getInput('WEB', {required: true}));

const date = core.getInput('DATE');
const note = core.getInput('NOTE');
Expand Down
60 changes: 42 additions & 18 deletions .github/scripts/syncVersions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,17 @@
# with push access to App main.
# - GITHUB_OUTPUT: written by `check` and `sync` (defaults to /dev/null outside GitHub Actions).
# - TARGET_VERSION (sync, optional): version to sync to. Must equal the Mobile-Expensify version,
# since only the App side is rewritten and the final verification compares the two. Empty means
# "use the Mobile-Expensify version".
# since only the App side is rewritten and the final verification compares the two. Anything else
# is rejected before the sync writes or pushes. Empty means "use the Mobile-Expensify version".
# - NEED_FULL_VERSION_SYNC (sync): 'true' to rewrite versions, anything else to only bump the
# submodule pointer. Threaded from `check` so exactly one decision exists across both steps.
# - EXPECTED_SUBMODULE_SHA (sync): Mobile-Expensify SHA `check` updated to. The submodule-only
# path asserts against it so a checkout that moved in between is caught.
# path asserts against it so a checkout that moved in between is caught, and verification uses
# it to tell "this sync went wrong" apart from "Mobile-Expensify moved on again".
#
# Outputs (via GITHUB_OUTPUT):
# - check: IN_SYNC, NEED_FULL_VERSION_SYNC, ACTUAL_SHA
# - sync: POST_SYNC_APP_VERSION
# - sync: POST_SYNC_APP_VERSION, SUBMODULE_MATCHES_REMOTE
#
# Side effects:
# - `check` is not read-only: it runs `git submodule update --remote`.
Expand Down Expand Up @@ -96,17 +97,25 @@ function update_ios_versions {
}

function resolve_target_version {
if [[ -n "$TARGET_VERSION" ]]; then
echo "Using provided target version: $TARGET_VERSION" >&2
echo "$TARGET_VERSION"
return
fi

# Use Mobile-Expensify version as source of truth since it was pushed first
local me_version
me_version="$(get_mobile_expensify_version)"
echo "Using Mobile-Expensify version as target: $me_version" >&2
echo "$me_version"

if [[ -z "$TARGET_VERSION" ]]; then
echo "Using Mobile-Expensify version as target: $me_version" >&2
echo "$me_version"
return
fi

# Only the App side is rewritten, so any other target fails verification -- after the commits
# have already been pushed to main. Reject it before anything is written.
if [[ "$TARGET_VERSION" != "$me_version" ]]; then
echo "::error::TARGET_VERSION ($TARGET_VERSION) must match the Mobile-Expensify version ($me_version)" >&2
exit 1
fi

echo "Using provided target version: $TARGET_VERSION" >&2
echo "$TARGET_VERSION"
}

function cmd_check {
Expand Down Expand Up @@ -168,10 +177,12 @@ function sync_full_version {
git add package.json package-lock.json android/app/build.gradle ios/*/Info.plist
git commit -m "Update version to $target (sync recovery)"

# Stages the submodule's checked-out HEAD, which is the commit `check` moved it to with
# --remote, not whatever main currently records.
# Stages the submodule's checked-out HEAD, the commit `check` moved it to with --remote. That can
# already be what main records, when a previous sync got this far and then died, hence the guard.
git add Mobile-Expensify
git commit -m "Update Mobile-Expensify submodule version to $target (sync recovery)"
if ! git diff --staged --quiet; then
git commit -m "Update Mobile-Expensify submodule version to $target (sync recovery)"
fi

# main is busy enough that another merge can land between `check` and here, which makes this
# push non fast-forward.
Expand Down Expand Up @@ -233,12 +244,25 @@ function verify_sync {
recorded=$(git rev-parse HEAD:Mobile-Expensify)
remote_sha=$(git -C Mobile-Expensify rev-parse origin/main)
if [[ "$recorded" != "$remote_sha" ]]; then
echo "::error::Submodule on App main ($recorded) still differs from Mobile-Expensify origin/main ($remote_sha)"
exit 1
# Mobile-Expensify main can advance mid-run, which is likely because a deployer triggers this
# during a deploy. Recording what `check` pinned is still a successful sync, so report it and
# let the next run collect the newer commit.
if [[ "$recorded" == "$EXPECTED_SUBMODULE_SHA" ]]; then
echo "::warning::Mobile-Expensify main advanced to $remote_sha while syncing. App main records $recorded, which is what this run set out to record. Re-run to pick up the newer commit."
set_output SUBMODULE_MATCHES_REMOTE false
else
echo "::error::Submodule on App main ($recorded) still differs from Mobile-Expensify origin/main ($remote_sha)"
exit 1
fi
fi

set_output POST_SYNC_APP_VERSION "$app_version"
echo "::notice::✅ Verified versions ($app_version) and submodule match Mobile-Expensify main ($recorded)"
if [[ "$recorded" == "$remote_sha" ]]; then
set_output SUBMODULE_MATCHES_REMOTE true
echo "::notice::✅ Verified versions ($app_version) and submodule match Mobile-Expensify main ($recorded)"
else
echo "::notice::✅ Verified versions ($app_version); submodule records $recorded, one behind Mobile-Expensify main"
fi
}

function cmd_sync {
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/buildAdHoc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ jobs:
BUCKET="s3://ad-hoc-expensify-cash/web/${{ inputs.APP_PR_NUMBER }}"

aws s3 sync dist "$BUCKET" --delete --acl public-read \
--exclude "*.br" \
--exclude "index.html" \
--exclude "service-worker.js" \
--exclude "workbox-*.js" \
Expand Down
Loading
Loading