Skip to content

Leave pending-delete rows out of the selected-reports check - #100513

Open
MelvinBot wants to merge 10 commits into
mainfrom
claude-mergeReportsOfflineDelete
Open

MelvinBot wants to merge 10 commits into
mainfrom
claude-mergeReportsOfflineDelete

Conversation

@MelvinBot

@MelvinBot MelvinBot commented Sep 7, 2026 •

Copy link
Copy Markdown
Contributor

Explanation of Change

Why this is the cause, and not a stale search snapshot

The first hypothesis was that the offline optimistic delete leaves a stale transaction count or total in the search snapshot. That is not what happens:

  • canMergeReports and isMoneyRequestReportEligibleForMerge never read total, nonReimbursableTotal, transactionCount, or any transaction list.
  • The offline delete writes no snapshot keys at all — DeleteMoneyRequest.ts only touches TRANSACTION, TRANSACTION_VIOLATIONS, REPORT, and REPORT_ACTIONS.

The divergence is in the selection layer, which is what this PR changes. This also explains the "only appears after opening the report" half of the report: once the deleted transaction leaves the row's transaction list, the old every() check passes again and the option returns.

Related observations, deliberately left out of scope

Two things noticed while tracing this that are not changed here, to keep the deploy-blocker fix minimal:

  1. useSearchBulkActions.ts:2433 hard-disables Merge reports whenever areAllMatchingItemsSelected is set, so selecting via the header select-all also hides it. That may well be intentional, since an "all matching" selection is unbounded.
  2. The same gate reads currentSearchResults directly rather than the searchResults fallback used elsewhere in that hook.

Worth a follow-up decision, but neither is required to unblock the deploy.

Fixed Issues

$ #100502
PROPOSAL: #100502 (comment)

AI Tests

Run by MelvinBot on this branch. This section records automated checks only — it is not a substitute for the human Tests and QA Steps sections below.

Check Result
npm test -- --silent tests/unit/Search tests/ui/GroupHeaderTest.tsx ✅ 50 suites, 1513 tests passed
npm run typecheck ✅ passed
npm run lint-changed ✅ passed
npm run spell-changed ✅ 2 files, 0 issues
Browser verification of the fix ❌ could not run — see below

The new unit tests were confirmed to actually catch the bug: with the one-line source change reverted, 3 of the 6 cases in deriveSelectedReportsTest.ts fail; with it applied, all 6 pass.

Not verified in a browser. The attempt to drive the offline repro against this branch was blocked by an unrelated environment failure — the test session's page rendered blank (0 accessibility nodes, no network activity) for the whole run, while the dev server itself compiled cleanly. The behavioural fix therefore rests on unit-test and code evidence, not on a live run. The original bug was reproduced live on main before this change (evidence), so the repro steps are known-good and worth re-running by hand.

npm run lint, npm test (full suite), and npm run storybook -- --smoke-test --ci were not run — the Search suites above cover every consumer of the changed function, and no component or story was touched.

Tests

  1. Log into newdot with an expensify/expensifail account
  2. Go to workspace chat.
  3. Create a report with two expenses.
  4. Create another report with one expense.
  5. Go offline.
  6. Open the report with two expenses and delete one of the expenses.
  7. Go to Spend > Reports.
  8. Bulk select both expenses.
  9. Click dropdown button.
  10. Confirm merge reports option is shown.

Expected Result:

In Step 9, Merge reports option will be shown when selecting both reports with same status.

  • Verify that no errors appear in the JS console

Offline tests

None

QA Steps

Same as tests

  • Verify that no errors appear in the JS console

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android: Native
    • Android: mWeb Chrome
    • iOS: Native
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I followed proper code patterns (see Reviewing the code)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))
  • If new assets were added or existing ones were modified, I verified that:
    • The assets are optimized and compressed (for SVG files, run npm run compress-svg)
    • The assets load correctly across all supported platforms.
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • 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.
  • I added unit tests 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.

Screenshots/Videos

Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari

A report whose rows are selected via the group checkbox never gets a
selection entry for a row queued for deletion, so requiring every row to
be selected dropped the report from selectedReports. That hid bulk
actions gated on the report count -- Merge reports among them -- after an
offline expense delete.

Derive the check from the selectable rows instead, matching getGroupCheckboxState.

Co-authored-by: Alberto Gonzalez-Cela <Gonals@users.noreply.github.com>
@MelvinBot
MelvinBot requested a review from a team September 7, 2026 13:02
@melvin-bot melvin-bot Bot added Melvin-Test-Android Melvin-Test-Web Triggers Melvin to run the testing steps of the PR on web labels Sep 7, 2026
@MelvinBot

Copy link
Copy Markdown
Contributor Author

⚠️ A setup step failed before I could start. This is usually a temporary issue — try again in a few minutes, and if it persists post in #melvinbot-ai.

Run details

@MelvinBot

MelvinBot commented Sep 7, 2026 •

Copy link
Copy Markdown
Contributor Author

🤖 Web test steps verification results: ✅ pass

On dev NewDot web, after deleting one expense from a 2-expense report while offline, selecting both draft reports in Spend > Reports still shows Merge reports in the bulk-action dropdown, and it correctly disappears when only one report is selected — confirming the fix.

Bulk-action dropdown without Merge reports when only 1 report is selected

Step Status
Create a report with two expenses in a workspace chatCreated a workspace and, in its expense chat, an "Expense Report 2026-09-07" containing Coffee Shop ($10.00) and Taxi Ride ($25.00), total $35.00.
Second report with Lunch Place expense, first report visible in list
✅
Create a second report with one expenseA second "Expense Report 2026-09-07" was created in the same workspace chat with a single Lunch Place ($15.00) expense.
Second (one-expense) report shown in the workspace chat
✅
Go offlineEnabled Account > Preferences > Troubleshoot > "Force offline"; the app status bar showed "You appear to be offline."
Force offline toggle enabled with offline status banner
✅
Open the two-expense report and delete one expense (shows as pending delete)Selected the Taxi Ride row and deleted it via the bulk-action "Delete" + confirmation. The row stayed visible with strikethrough text ($25.00 struck through) and the report total updated to $10.00 while offline.
Taxi Ride expense shown struck-through as pending delete
✅
Go to Spend > Reports and bulk-select both reportsIn Spend > Reports, checked both report row checkboxes; header showed "2 selected" with both row checkboxes checked (rows for the $15.00 and $10.00 reports).
Both report rows selected, 2 selected shown
✅
Open the dropdown and verify Merge reports IS shownDropdown for "2 selected" listed: Merge reports, Export, Download as PDF, Duplicate reports, Delete — Merge reports is present despite the report holding the pending-delete row.
Bulk-action dropdown showing Merge reports option with 2 reports selected
✅
Select only one report and verify Merge reports is NOT shownUnchecked the $10.00 report, leaving "1 selected". The dropdown then listed only: Export, Download as PDF, Split, Duplicate report, Delete — no Merge reports.
Only one report selected (1 selected)
Bulk-action dropdown without Merge reports when only 1 report is selected
✅
Verify that no errors appearThe web harness has no direct browser-console inspection, so this was checked via the network dump (all ~60 recent requests returned 200, no failed responses) and via full-page snapshots throughout the flow, which never showed a RedBox, error banner, or crash screen. A literal JS console check still needs a human pass.
✅

view run · no recording available

@Gonals
Gonals marked this pull request as ready for review September 9, 2026 13:45
@Gonals
Gonals requested a review from a team as a code owner September 9, 2026 13:46
@melvin-bot
melvin-bot Bot requested review from a team, dmkt9, dylanexpensify and situchan and removed request for a team September 9, 2026 13:46
@melvin-bot

melvin-bot Bot commented Sep 9, 2026

Copy link
Copy Markdown

@situchan @dmkt9 One of you needs to 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]

@melvin-bot
melvin-bot Bot requested review from joekaufmanexpensify and removed request for a team September 9, 2026 13:46
@MelvinBot

MelvinBot commented Sep 9, 2026 •

Copy link
Copy Markdown
Contributor Author

Nothing to fix — every code check passes. The one failing check just needs a human approval.

Check independent approval fails with:

Expensify/App#100513 does not have enough independent eligible reviewer approvals.
  approvers: [],
  independentApprovers: [],

The PR has zero reviews so far (dmkt9, situchan, dylanexpensify, joekaufmanexpensify are requested). This check passes once an eligible reviewer approves — no code change can make it green, so I haven't pushed anything.

Full check status

All other checks on the latest run are green, including the ones most likely to catch a problem with this change:

Check Result
test (jobs 1–8) ✅ pass
typecheck ✅ pass
ESLint check ✅ pass
Oxfmt check ✅ pass
Storybook tests ✅ pass
Bun tests ✅ pass
spellcheck ✅ pass
Compare knip issues against main ✅ pass
Check for unused styles ✅ pass
React Compiler Compliance ✅ pass
baseline-perf-tests / branch-perf-tests ✅ pass
build (developmentDebug, false) — Android ✅ pass
build (New Expensify Dev, DebugDevelopment, false) — iOS ✅ pass
codecov/patch, codecov/project ✅ pass

An earlier run also failed PR Author Checklist, but that one is green on the current commit.

One unrelated thing worth correcting while you're in here: the Tests section contradicts itself. Step 10 says "Confirm merge reports option is not shown", but the Expected Result right below says the option will be shown. The fix restores the option, so step 10 is the wrong one.


view run · view recording

dylanexpensify
dylanexpensify previously approved these changes Sep 9, 2026

@dylanexpensify dylanexpensify left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Steps make sense, looks good from a product pov

@joekaufmanexpensify
joekaufmanexpensify removed their request for review September 9, 2026 17:16
@Gonals

Gonals commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

bump @situchan @dmkt9

@Gonals
Gonals requested a review from a team as a code owner September 15, 2026 11:01
@melvin-bot
melvin-bot Bot requested a review from Gonals September 15, 2026 11:01
@melvin-bot

melvin-bot Bot commented Sep 15, 2026

Copy link
Copy Markdown

@Gonals 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]

@melvin-bot
melvin-bot Bot removed the request for review from a team September 15, 2026 11:01
@MelvinBot

Copy link
Copy Markdown
Contributor Author

The failing checks are not caused by this PR — main is broken. Nothing to push here.

#100881 merged to main at 11:04 UTC and left a duplicate variable declaration in InboxTabSelector.tsx. shouldUseNarrowLayout is destructured twice in the same function body, at line 40 and line 47 — exactly the two lines the compiler names:

src/pages/inbox/sidebar/InboxTabSelector.tsx(40,12): error TS2451: Cannot redeclare block-scoped variable 'shouldUseNarrowLayout'.
src/pages/inbox/sidebar/InboxTabSelector.tsx(47,12): error TS2451: Cannot redeclare block-scoped variable 'shouldUseNarrowLayout'.

The fix belongs on main, not on this branch: delete the redundant declaration on line 47 (line 40 already provides it), or revert #100881. shawnborton authored it. No fix or revert PR is open yet, so every open PR is currently blocked.

Why this is main and not this PR — evidence

This PR changes two files: src/components/Search/selectionBuilders.ts and tests/unit/Search/deriveSelectedReportsTest.ts. InboxTabSelector.tsx is not among them, and neither is anything the four failing test suites touch.

  1. The file is clean at this PR's head. At 460ec04, grep finds one shouldUseNarrowLayout destructure. On origin/main (ad2bdf1) it finds two.
  2. CI tests the PR merged into main. The pull_request event builds the merge commit, which is how a breakage the branch never contained shows up in this PR's checks.
  3. The same four suites fail on an unrelated branch. refactor-02/66378 fails tests/ui/PaginationTest.tsx, tests/ui/UnreadIndicatorsTest.tsx, tests/ui/GroupChatNameTests.tsx, and tests/ui/SessionTest.tsx in the same jobs 4, 7, and 8 (run). Several other branches began failing right after the 11:04 merge.
  4. The tests pass locally on this branch alone. npm test -- --silent tests/ui/PaginationTest.tsx → 3 passed. The duplicate declaration throws when the module is evaluated, so the sidebar never renders, which is why these LHN tests report Unable to find an element with testID: 1 rather than a syntax error.

checklist and Check independent approval also show red; both are the usual human-gate checks, not code failures.

The displayAmount typecheck failure I fixed in 460ec04 is resolved — it no longer appears in the latest run, which reports only the InboxTabSelector errors. Once main is fixed, this PR should go green on a re-run without further changes.

@MelvinBot

Copy link
Copy Markdown
Contributor Author

Nothing left to fix on this PR — main is broken. Every remaining failure comes from a duplicate variable declaration in src/pages/inbox/sidebar/InboxTabSelector.tsx:40-47, a file this PR never touches:

src/pages/inbox/sidebar/InboxTabSelector.tsx(47,12): error TS2451: Cannot redeclare block-scoped variable 'shouldUseNarrowLayout'.

const {shouldUseNarrowLayout} = useResponsiveLayout(); appears twice in the same function body, so the file fails to parse. That one error accounts for all four non-ignorable failing checks: typecheck, ESLint check, and test jobs 4, 7, and 8.

A fix is already open: #101195. Once it merges, re-run the checks here — no change to this branch is needed.

The typecheck failure I fixed earlier (460ec04) is resolved; it no longer appears in the log.

How I confirmed it's main and not this PR

The bad line is on main, not on this branch. The branch head is 460ec04 — my displayAmount commit — with no newer merge. The duplicate exists at origin/main (c85bcf4). CI runs the PR head merged into base, so this branch inherits it.

It came from a silent bad merge, not from either side's code. The merge commit ad2bdf1 (merge of #100881) has two declarations, but each of its parents has exactly one:

Commit Declarations
50b3c85 (base parent) 1, at line 40
fa1af59 (branch parent) 1, at line 42
ad2bdf1 (the merge) 2, at lines 40 and 47

Both sides added the same line at slightly different offsets, so Git kept both without reporting a conflict.

The failing tests are all sidebar-rendering UI tests, none of them Search: tests/ui/PaginationTest.tsx, tests/ui/UnreadIndicatorsTest.tsx, tests/ui/GroupChatNameTests.tsx, tests/ui/SessionTest.tsx. Each fails with the same Babel parse error on that file. This PR's own suite passes — I ran npm test -- --silent tests/unit/Search tests/unit/hooks/useSearchBulkActionsTest.ts locally at 460ec04: 53 suites, 1647 tests passed, and npm run typecheck passed cleanly.

Check independent approval and checklist are also red, but those are the standard human-gated checks, not code failures.

I did not push anything, since fixing an unrelated file from this branch would mix a main repair into a deploy-blocker PR.

@situchan

Copy link
Copy Markdown
Contributor

Lots of checks failing. Please merge main

@situchan

Copy link
Copy Markdown
Contributor

@MelvinBot assign me

@MelvinBot

Copy link
Copy Markdown
Contributor Author

Done, situchan. I added you as an assignee on this PR.


view run

@situchan

Copy link
Copy Markdown
Contributor

@MelvinBot pull main

…flineDelete

Co-authored-by: Situ Chandra Shil <situchan@users.noreply.github.com>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

I merged the latest main into this branch and pushed it as merge commit cf18000d9a6. The branch was 4,453 commits behind, and the merge had no conflicts. CI will now run on the updated branch.


view run

@situchan

Copy link
Copy Markdown
Contributor

@codex review

@situchan

Copy link
Copy Markdown
Contributor

@MelvinBot review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cf18000d9a

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

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".

}

describe('deriveSelectedReports', () => {
it('includes a report whose every transaction is selected', () => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Document every added test with Given/When/Then sections

The six new test cases omit the required // Given, // When, and // Then comments explaining why each scenario is covered; the lone comment in the pending-delete case does not provide all three sections. Add those sections to every case so future maintainers retain the required behavioral context.

AGENTS.md reference: AGENTS.md:L3-L3

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 531a3a2. Each of the six cases now has // Given, // When, and // Then comments that explain why the case exists.


view run

@MelvinBot

Copy link
Copy Markdown
Contributor Author

The fix looks correct, and I found no logic bugs. Two small items need attention before merge: the new tests lack the required Given/When/Then comments, and the Tests steps contradict themselves.

The change is sound. selectionBuilders.ts:339-343 now skips pending-delete rows. That matches how the rest of Search already treats them:

CI is green after the main merge. Only Check independent approval fails, and that needs a reviewer approval.

Please fix:

  1. Test comments. tests/README.md requires // Given, // When, // Then comments in every test case. None of the six cases in deriveSelectedReportsTest.ts:60-124 have them.
  2. Tests section. Step 10 says "Confirm merge reports option is not shown." The Expected Result says it will be shown. Step 10 should say it is shown. The QA steps say "Same as tests," so they carry the same error.
Out of scope, not blocking

deriveSelectedReports still ignores areAllMatchingItemsSelected and whole-group keys when a report has loaded rows. That behavior existed before this PR, and the PR description already flags the related Merge reports gate as a follow-up.

@MelvinBot

Copy link
Copy Markdown
Contributor Author

I found no functional regressions. The four side effects below only happen offline, while a report has a pending-delete expense. None of them block the merge.

Possible regressions

  1. Delete can do nothing (rare edge case). Take a report whose expenses are all pending delete, where the reconcile effect already wrote selection entries for those rows (SearchWriteActionsProvider.tsx:202-227). That happens after "select all matching", or when you keep a selection while deleting every expense in the side panel. Before this PR, the report counted as selected and Delete removed the empty report. Now the new selectableTransactions.length > 0 guard drops it from selectedReports, but the rows stay selected. Delete still shows, but it only loops over selectedReportIDs, so it does nothing (useSearchBulkActions.ts:1348-1366).
  2. "Download receipts (N)" counts too many. The count includes pending-delete expenses in selected reports (useSearchBulkActions.ts:2800-2802). Clicking it offline only opens the offline modal.
  3. The Pay label can show the wrong amount. When a report is selected, the label adds up report totals (Search.ts:2487-2490). The offline delete lowers the report total, except when the deleted expense uses a different currency than the report. In that case the label still includes the deleted amount. Paying offline is blocked.
  4. The Delete check sees pending-delete rows. shouldShowDeleteOption collects each report's transactions without skipping pending-delete ones. A report with one card expense that can't be deleted, plus one pending-delete expense, no longer counts as a single-transaction report. That skips the card block in ReportUtils.ts:3277-3279. This check was already wrong; this PR makes the case reachable.

My read: none of these block the merge. Item 1 is the only behavior change. The PR's test excludes a report whose transactions are all pending delete asserts that behavior on purpose, so you should confirm it's what you want.

I checked these by reading the code. I didn't run them in the app.

Checked and not a problem
  • Approve and Submit are hidden offline. Pay, Export, and PDF open the offline modal.
  • Merge and Duplicate report skip pending-delete expenses (SearchReportsMergeReports.tsx:78, Duplicate.ts:1529).
  • Hold and Move use the selected expenses, not selectedReports.
  • Failed deletes set pendingAction back to null, so a row is never stuck as pending delete (DeleteMoneyRequest.ts:899-903).
  • Checkbox state now matches selectedReports. getGroupCheckboxState already skipped pending-delete rows. Before this PR, the checkbox showed checked while the report was missing from selectedReports.
  • Side benefit: that mismatch also caused silent partial actions before this PR. For example, "Delete 2 reports?" deleted only one, and Pay or Merge could skip the report with the pending-delete expense.

view run

@situchan

Copy link
Copy Markdown
Contributor

@MelvinBot address #100513 (comment), #100513 (comment)

Co-authored-by: Situ Chandra Shil <situchan@users.noreply.github.com>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

situchan, I addressed both items:

  1. Test comments: Each of the six cases in deriveSelectedReportsTest.ts now has // Given, // When, and // Then comments (531a3a2).
  2. Tests section: Step 10 now says "Confirm merge reports option is shown." This matches the Expected Result. QA steps say "Same as tests," so they are fixed too.

The commit only adds comments, and no code changed. I could not run Jest or lint on it in this environment, so CI will do that check.


view run

@situchan

situchan commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

@MelvinBot pull main

…flineDelete

Co-authored-by: Situ Chandra Shil <situchan@users.noreply.github.com>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

I merged the latest main into this branch and pushed it (b6dfba1a07). There were no conflicts.


view run

@MelvinBot

Copy link
Copy Markdown
Contributor Author

No code fix is needed. The only failing check is Check independent approval. It fails because this PR doesn't have an independent approving review yet, so a reviewer's approval will clear it.

All code checks on b6dfba1a07 pass, including Jest, TypeScript, ESLint, and Reassure. The three remote native builds were still pending when I checked.


view run

@situchan

Copy link
Copy Markdown
Contributor

@MelvinBot pull main

…flineDelete

Co-authored-by: Situ Chandra Shil <situchan@users.noreply.github.com>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

I merged the latest main into this branch and pushed it in e5c17c9. The merge had no conflicts. The branch was 3,061 commits behind main.


view run

@MelvinBot

Copy link
Copy Markdown
Contributor Author

⚠️ MelvinBot CI Fix Loop Detected

MelvinBot has made 5 consecutive commits trying to fix CI failures. Automatic CI fix dispatches are now paused for this PR.

Next steps: A human should review the recent commits and resolve the conflicting CI errors manually.

@Gonals

Gonals commented Oct 23, 2026

Copy link
Copy Markdown
Contributor

@MelvinBot fix lint errors

…flineDelete

Co-authored-by: Alberto Gonzalez-Cela <Gonals@users.noreply.github.com>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

Fixed the failing ESLint check by merging main into this branch.

The only lint error was in src/libs/Navigation/types.ts, which this PR doesn't touch: Unused eslint-disable directive (no problems were reported from 'max-lines'). That directive is already gone on main, so the merge fixes it. The PR diff is still only selectionBuilders.ts and its test.

npm run lint passes locally on both PR files and types.ts. The Check independent approval failure is expected and needs a reviewer approval, not a code fix.


view run

@situchan

Copy link
Copy Markdown
Contributor

@Gonals this might require another engineer to merge since you're co-authored

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Melvin-Test-Android Melvin-Test-Web Triggers Melvin to run the testing steps of the PR on web

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants