Skip to content

[pull] main from MetaMask:main#434

Merged
pull[bot] merged 4 commits into
Reality2byte:mainfrom
MetaMask:main
Jan 7, 2026
Merged

[pull] main from MetaMask:main#434
pull[bot] merged 4 commits into
Reality2byte:mainfrom
MetaMask:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Jan 7, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

OGPoyraz and others added 4 commits January 7, 2026 06:04
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

Similar what we've done in the extension
[here](MetaMask/metamask-extension#38932), this
PR implements same approach into mobile repository.
For more information please see thread
[here](https://consensys.slack.com/archives/C1L7H42BT/p1765974245415709).

When an E2E test fails in CI and developer triggers a re-run, all tests
in that chunk are executed again, not just the failed ones. This leads
to:

- Wasted CI time: A chunk with 20 tests where only 1 failed will re-run
all 20 tests
- Increased costs: Unnecessary compute resources consumed on re-runs
- Slower feedback loop: Developers wait longer to verify if a flaky test
passes on retry
- Inefficient debugging: When investigating flaky tests, having to wait
for unrelated tests adds friction

For example, with 20 parallel chunks each running ~15 tests, a single
flaky test failure triggers a re-run of the entire chunk (~15 tests)
instead of just the 1 failed test.

For solution; implement selective test re-runs that automatically detect
when a job is being re-run and skip tests that already passed.

- First run (run_attempt = 1): Tests run normally, results are uploaded
as artifacts
- Re-run (run_attempt > 1):
   - Download the previous run's test result artifacts
   - Parse XML results to extract passed test file paths
   - Run all tests in the chunk EXCEPT those that passed
   - Skip execution entirely if all tests in the chunk passed previously

---   

### Validation of PR:

Intentionally broke tests here:
c8f029f

On attempt1 it failed but other tests passed:
https://github.com/MetaMask/metamask-mobile/actions/runs/20751876785/attempts/1?pr=24263

On attempt2 it only run failed test and skipped already passed tests:
https://github.com/MetaMask/metamask-mobile/actions/runs/20751876785/attempts/2?pr=24263

Logs from attempt 2:
```
Found 8 executed test files
Found 2 failed test files
Found 6 fully passed test files
Failed tests: e2e/specs/confirmations-redesigned/transactions/send-max-transfer.spec.ts, e2e/specs/confirmations-redesigned/transactions/send-max-transfer-retry-1.spec.ts
Previous run results: 6 passed, 2 failed
This chunk: 1 failed, 0 not executed
```

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry:

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [X] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [X] I've completed the PR template to the best of my ability
- [X] I’ve included tests if applicable
- [X] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [X] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.



<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Reduces CI time by re-running only failed or not-executed E2E specs on
job re-runs and preserving pass/fail history.
> 
> - New scripts: `e2e-extract-test-results.mjs` (parses jest-junit XML
to identify passed/failed/executed specs) and
`e2e-merge-test-results.mjs` (merges prior XML results for specs not
executed this attempt)
> - Updates `e2e-split-tags-shards.mjs` to: on re-runs, filter shard
files using extracted results; skip if all passed; limit flakiness
duplication to first attempt
> - Modifies `run-e2e-workflow.yml` to: download previous results on
re-runs, pass `RUN_ATTEMPT`/`PREVIOUS_RESULTS_PATH` envs, add debug
listing, and merge previous results into current `e2e/reports` before
uploading artifacts
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
e5cd5c7. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

This PR enhances the `HeaderCenter` and `HeaderWithTitleLeftScrollable`
components with additional functionality:

1. **Added subtitle support** - Both components now support an optional
`subtitle` prop that renders below the title with center alignment,
along with `subtitleProps` for customization.

2. **Extended HeaderBase props** - Removed the `Omit` constraints from
both components:
- `HeaderCenter` now extends `HeaderBaseProps` directly (previously
omitted `startButtonIconProps`)
- `HeaderWithTitleLeftScrollable` now extends `HeaderBaseProps` directly
(previously omitted `children`)

3. **Added `titleProps` to HeaderWithTitleLeftScrollable** - Allows
customization of the compact header title.

## **Changelog**

CHANGELOG entry: null

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: Header subtitle support

  Scenario: user views header with subtitle
    Given user is on a screen using HeaderCenter or HeaderWithTitleLeftScrollable
    When the header is configured with title and subtitle props
    Then the title displays in bold
    And the subtitle displays below the title in a smaller, alternative color text

  Scenario: user scrolls on HeaderWithTitleLeftScrollable page
    Given user is on a screen using HeaderWithTitleLeftScrollable with subtitle
    When user scrolls down
    Then the header collapses to show compact title with subtitle
    And the subtitle remains visible below the compact title
```

## **Screenshots/Recordings**

### **Before**

<!-- [screenshots/recordings] -->

### **After**


https://github.com/user-attachments/assets/ecc857b5-7902-4adf-b25c-51281de8966f

<img width="1290" height="2796" alt="Simulator Screenshot - iPhone 15
Pro Max - 2026-01-06 at 08 55 39"
src="https://github.com/user-attachments/assets/adfd21a3-17a2-47f3-89a8-c6404a9d888b"
/>


<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Introduces subtitle support and raises the compact header height
across header components.
> 
> - `HeaderCenter`: adds `subtitle` and `subtitleProps`; stacks title +
subtitle centered; story `WithSubtitle` and tests for rendering/props
> - `HeaderWithTitleLeftScrollable`: adds `titleProps`, `subtitle`,
`subtitleProps`, and `children` handling in compact header; new tests
for subtitle and children precedence; stories updated (`WithSubtitle`,
`OnClose`, `BackAndClose`)
> - Increases compact height from 48 to 56 via `HeaderBase` (`h-12` →
`h-14`) and `HeaderWithTitleLeftScrollable` `DEFAULT_COLLAPSED_HEIGHT`
to `56`; updates numerous snapshots accordingly
> - Both headers now pass through `HeaderBaseProps` and resolve
start/end buttons (back/close) consistently
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
dd0c826. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

Bump the Tron snap to the latest version

## **Changelog**

CHANGELOG entry: Bump @metamask/tron-wallet-snap to 1.17.0

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Update `@metamask/tron-wallet-snap` from `^1.16.1` to `^1.17.0` and
refresh `yarn.lock`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
f7272b1. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

In MM mobile, we define an array of allowed testnets for swaps. This is
consumed only on DEV env and is used by some utilities like
isSwapsAllowed. To complete the legacy migration we will have to take
care of those utilities (either remove or migrate) but before that, this
PR removes the dependency to testnets and reduce the tech debt of the
swaps module.

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: null 

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/SWAPS-3594

## **Manual testing steps**

```gherkin
This PR does not introduce any business logic change, just run a basic regression test to ensure swaps functionality is not affected.
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Removes testnet-specific swaps configuration and dev-only paths,
simplifying chain gating and feature flag handling for Swaps.
> 
> - Drops `SWAPS_TESTNET_CHAIN_ID` and `allowedTestnetChainIds`; removes
`__DEV__` and `ONLY_MAINNET` branching in `isSwapsAllowed`
> - Updates allowed chain lists in `UI/Swaps/utils` and
`Engine/constants` to include only supported mainnets and multichain
scopes
> - Simplifies `getFeatureFlagChainId` to identity and adjusts
liveness/feature flag mapping in `reducers/swaps`
> - Cleans up imports and removes unused constants
> - Updates unit tests to reflect removal of testnet logic and identity
`getFeatureFlagChainId`
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
fba3425. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@pull pull Bot locked and limited conversation to collaborators Jan 7, 2026
@pull pull Bot added the ⤵️ pull label Jan 7, 2026
@pull pull Bot merged commit 2bee8b4 into Reality2byte:main Jan 7, 2026
0 of 10 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants