Skip to content

chore(runway): cherry-pick feat(predict): expand extended sports leagues cp-8.6.0 - #34088

Merged
HowardBraham merged 1 commit into
release/8.6.0from
runway-cherry-pick-8.6.0-1785446603
Jul 31, 2026
Merged

chore(runway): cherry-pick feat(predict): expand extended sports leagues cp-8.6.0#34088
HowardBraham merged 1 commit into
release/8.6.0from
runway-cherry-pick-8.6.0-1785446603

Conversation

@runway-github

@runway-github runway-github Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Description

Polymarket actively covers additional soccer, baseball, hockey, and
American football leagues whose markets currently appear in the Predict
feed without the curated game-page experience. This change expands
predictExtendedSportsMarkets to include those leagues so supported
game events open with grouped markets.

The app-side sports capability list and slug parser now support the
eleven leagues that were not already recognized by the client, including
their provider-defined home/away ordering. The predictLiveSports
production test configuration is expanded for those leagues as well
because game construction and team loading are prerequisites for
extended market grouping.

Leagues added to predictExtendedSportsMarkets:

  • Soccer: uel, col, fl1, ere, bra, por, bel1, elc, lib
  • Baseball: kbo, npb, cpbl
  • Hockey: shl, khl, cehl, dehl
  • American football: nfl, cfb, cfl

NFL's standard game-line markets are supported by this change. NFL
player props such as touchdowns and yardage remain outside the flag's
enabled market types and are not part of this scope.

As a temporary compatibility guard, directly opened child events remain
on their existing generic details page whenever any active child market
cannot be represented by the currently enabled grouped market types.
Fully groupable children and parent game cards continue to use the
curated page. This guard can be removed once all relevant sports market
types are supported.

Legacy Predict Appium flows explicitly disable both the 7.82.0 and
8.6.0 extended-sports variations through a shared helper. This
prevents deep-merged production defaults from unintentionally changing
cash-out, claim, geo-restriction, open-position, and withdrawal smoke
scenarios.

CFB, NFL, and NBA first-half moneyline markets are enabled under a
dedicated First Half group. New league and market-type configuration
is versioned at 8.6.0; existing 7.79.0 and 7.82.0 payloads remain
unchanged for older clients.

Provider data note: two historical FL1 Nice/Saint-Etienne playoff events
use nic in the event slug while the embedded team and /teams
endpoint use ogc for OGC Nice. This has been isolated for confirmation
with Polymarket before adding a client-side alias.

Changelog

CHANGELOG entry: Added curated Predict game pages for more soccer,
baseball, hockey, and football leagues

Related issues

Fixes: https://consensyssoftware.atlassian.net/browse/PRED-1139

Manual testing steps

Feature: Extended Predict sports market coverage

  Scenario Outline: user opens a newly enabled sports game
    Given predictLiveSports includes "<league>"
    And predictExtendedSportsMarkets includes "<league>"
    And Polymarket returns an active "<league>" game with game and team metadata

    When the user opens the game card from the Predict feed
    Then the curated game details page opens
    And supported markets are grouped by market type

    Examples:
      | league |
      | uel    |
      | col    |
      | fl1    |
      | ere    |
      | bra    |
      | por    |
      | bel1   |
      | elc    |
      | lib    |
      | kbo    |
      | npb    |
      | cpbl   |
      | shl    |
      | khl    |
      | cehl   |
      | dehl   |
      | nfl    |
      | cfb    |
      | cfl    |

  Scenario: user opens a previously enabled sports game
    Given the existing extended sports leagues remain enabled

    When the user opens an existing supported game card from the Predict feed
    Then the curated game details page opens
    And its supported markets remain grouped by market type

  Scenario: user directly opens a child event containing an ungroupable market
    Given the child event contains at least one active market type that is not enabled for grouping

    When the user opens that child event from search or a direct link
    Then the original child event opens on the generic market details page
    And its active markets remain accessible

Automated validation:

  • Nine focused Predict and feature-flag suites covering provider
    resolution, parsing, grouping, rendering, flags, league support, and
    upstream esports integration (554 tests passed)
  • Android Predict Appium smoke discovery (7 tests listed successfully)
  • yarn lint:tsc
  • Targeted ESLint and Prettier checks for all changed files

Screenshots/Recordings

Before

N/A. This change expands configuration and league parsing without
introducing a new static UI; several covered leagues are currently out
of season.

After

N/A. The resulting game page uses the existing curated sports UI and
depends on active Polymarket events for each league.

Pre-merge author checklist

Performance checks (if applicable)

  • I've tested on Android
  • N/A. This is a platform-independent feature flag and parsing change
    with no Android-specific code.
  • I've tested with a power user scenario
  • N/A. League parsing and market grouping do not depend on wallet size,
    account count, or token count.
  • I've instrumented key operations with Sentry traces for production
    performance metrics
  • N/A. This change adds no new runtime operation or
    performance-sensitive execution path.

For performance guidelines and tooling, see the Performance
Guide
.

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.

Note

Medium Risk
Touches feature-flag defaults, league parsing, and Polymarket event
resolution paths that affect which details UI users see; scope is large
but covered by extensive unit tests and smoke flag isolation.

Overview
Expands Predict curated sports game pages to many additional
leagues (soccer, baseball, hockey, American football) by extending
PredictSportsLeague, SUPPORTED_SPORTS_LEAGUES, LEAGUE_SLUG_CONFIGS
slug/tag parsing, and draw-capable league sets.

Adds 8.6.0 production defaults for predictLiveSports and
predictExtendedSportsMarkets (league lists plus richer
enabledSportsMarketTypes), while keeping older 7.79.0 / 7.82.0
payloads unchanged.

Enables first_half_moneyline as a supported/grouped market type
(mapped to a First Half outcome group, separate from game lines) and
treats it as moneyline-like in sports constants.

Changes Polymarket market-details resolution: child events with a
parent are not merged into the parent when any active market
type is outside the enabled grouping set (#canGroupAllActiveMarkets),
so direct links keep the generic child page until all active markets are
groupable.

Centralizes Appium smoke disabling of extended sports via
remoteFeatureFlagExtendedSportsMarketsDisabledForPredictSmoke (both
8.6.0 and 7.82.0 variations).

Reviewed by Cursor Bugbot for commit
c9c9fd3. Bugbot is set up for automated
code reviews on this repo. Configure
here.

[7d8ae22](https://github.com/MetaMask/metamask-mobile/commit/7d8ae2205bb051040ac431c8e0eec2da338ea69c)

…ues cp-8.6.0 (#33943)

<!--
Please submit this PR as a draft initially.

Do not mark it as "Ready for review" until this PR meets the canonical
Definition of Ready For Review in `docs/readme/ready-for-review.md`.

In short: the template must be materially complete (not just section
titles
present), all status checks must be currently passing, and the only
expected
follow-up commits must be reviewer-driven.
-->
<!--
mms-check directive vocabulary — read by
.github/scripts/shared/pr-template-checks.ts
at module load to build the validation plan. Directives are invisible in
rendered
markdown and must NOT be removed or edited without updating the
validator registry.

  type=text           Section must contain non-placeholder prose.
  type=changelog      Section must have a valid CHANGELOG entry: line.
type=issue-link Section must have a Fixes:/Closes:/Refs: line with a
value.
type=manual-testing Section must have real testing steps or an explicit
N/A.
type=screenshot Section must have evidence (image/URL) or an explicit
N/A.
type=checklist Section must have all checkboxes consciously checked.
required=true|false Whether a missing/invalid section runs the validator
at all.
blocking=true|false Whether a failure of this check fails the CI
workflow.
Default: false — failures are shown as warnings in the sticky
                      comment but do not block the PR.

Sections without a directive are checked for structural presence only.
-->

## **Description**

<!-- mms-check: type=text required=true -->

<!--
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?
-->

Polymarket actively covers additional soccer, baseball, hockey, and
American football leagues whose markets currently appear in the Predict
feed without the curated game-page experience. This change expands
`predictExtendedSportsMarkets` to include those leagues so supported
game events open with grouped markets.

The app-side sports capability list and slug parser now support the
eleven leagues that were not already recognized by the client, including
their provider-defined home/away ordering. The `predictLiveSports`
production test configuration is expanded for those leagues as well
because game construction and team loading are prerequisites for
extended market grouping.

Leagues added to `predictExtendedSportsMarkets`:

- Soccer: `uel`, `col`, `fl1`, `ere`, `bra`, `por`, `bel1`, `elc`, `lib`
- Baseball: `kbo`, `npb`, `cpbl`
- Hockey: `shl`, `khl`, `cehl`, `dehl`
- American football: `nfl`, `cfb`, `cfl`

NFL's standard game-line markets are supported by this change. NFL
player props such as touchdowns and yardage remain outside the flag's
enabled market types and are not part of this scope.

As a temporary compatibility guard, directly opened child events remain
on their existing generic details page whenever any active child market
cannot be represented by the currently enabled grouped market types.
Fully groupable children and parent game cards continue to use the
curated page. This guard can be removed once all relevant sports market
types are supported.

Legacy Predict Appium flows explicitly disable both the `7.82.0` and
`8.6.0` extended-sports variations through a shared helper. This
prevents deep-merged production defaults from unintentionally changing
cash-out, claim, geo-restriction, open-position, and withdrawal smoke
scenarios.

CFB, NFL, and NBA first-half moneyline markets are enabled under a
dedicated `First Half` group. New league and market-type configuration
is versioned at `8.6.0`; existing `7.79.0` and `7.82.0` payloads remain
unchanged for older clients.

Provider data note: two historical FL1 Nice/Saint-Etienne playoff events
use `nic` in the event slug while the embedded team and `/teams`
endpoint use `ogc` for OGC Nice. This has been isolated for confirmation
with Polymarket before adding a client-side alias.

## **Changelog**

<!-- mms-check: type=changelog required=true blocking=true -->

<!--
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: Added curated Predict game pages for more soccer,
baseball, hockey, and football leagues

## **Related issues**

<!-- mms-check: type=issue-link required=true -->

Fixes: https://consensyssoftware.atlassian.net/browse/PRED-1139

## **Manual testing steps**

<!-- mms-check: type=manual-testing required=true -->

```gherkin
Feature: Extended Predict sports market coverage

  Scenario Outline: user opens a newly enabled sports game
    Given predictLiveSports includes "<league>"
    And predictExtendedSportsMarkets includes "<league>"
    And Polymarket returns an active "<league>" game with game and team metadata

    When the user opens the game card from the Predict feed
    Then the curated game details page opens
    And supported markets are grouped by market type

    Examples:
      | league |
      | uel    |
      | col    |
      | fl1    |
      | ere    |
      | bra    |
      | por    |
      | bel1   |
      | elc    |
      | lib    |
      | kbo    |
      | npb    |
      | cpbl   |
      | shl    |
      | khl    |
      | cehl   |
      | dehl   |
      | nfl    |
      | cfb    |
      | cfl    |

  Scenario: user opens a previously enabled sports game
    Given the existing extended sports leagues remain enabled

    When the user opens an existing supported game card from the Predict feed
    Then the curated game details page opens
    And its supported markets remain grouped by market type

  Scenario: user directly opens a child event containing an ungroupable market
    Given the child event contains at least one active market type that is not enabled for grouping

    When the user opens that child event from search or a direct link
    Then the original child event opens on the generic market details page
    And its active markets remain accessible
```

Automated validation:

- Nine focused Predict and feature-flag suites covering provider
resolution, parsing, grouping, rendering, flags, league support, and
upstream esports integration (554 tests passed)
- Android Predict Appium smoke discovery (7 tests listed successfully)
- `yarn lint:tsc`
- Targeted ESLint and Prettier checks for all changed files

## **Screenshots/Recordings**

<!-- mms-check: type=screenshot required=true -->

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

### **Before**

N/A. This change expands configuration and league parsing without
introducing a new static UI; several covered leagues are currently out
of season.

### **After**

N/A. The resulting game page uses the existing curated sports UI and
depends on active Polymarket events for each league.

## **Pre-merge author checklist**

<!-- mms-check: type=checklist required=true -->

<!--
Every checklist item must be consciously assessed before marking this PR
as
"Ready for review". A checked box means you deliberately considered that
responsibility, not that you literally performed every action listed.

Unchecked boxes are ambiguous: they are not an implicit "N/A" and they
are not
a silent "skip". See `docs/readme/ready-for-review.md` for the full
checklist
semantics.
-->

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

#### Performance checks (if applicable)

- [x] I've tested on Android
- N/A. This is a platform-independent feature flag and parsing change
with no Android-specific code.
- [x] I've tested with a power user scenario
- N/A. League parsing and market grouping do not depend on wallet size,
account count, or token count.
- [x] I've instrumented key operations with Sentry traces for production
performance metrics
- N/A. This change adds no new runtime operation or
performance-sensitive execution path.

For performance guidelines and tooling, see the [Performance
Guide](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/400085549067/Performance+Guide+for+Engineers).

## **Pre-merge reviewer checklist**

<!--
Reviewer checklist items follow the same semantics as the author
checklist: an
unchecked box is ambiguous, a checked box means the reviewer consciously
assessed that responsibility. See `docs/readme/ready-for-review.md`.
-->

- [ ] 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]
> **Medium Risk**
> Touches feature-flag defaults, league parsing, and Polymarket event
resolution paths that affect which details UI users see; scope is large
but covered by extensive unit tests and smoke flag isolation.
> 
> **Overview**
> Expands **Predict** curated sports game pages to many additional
leagues (soccer, baseball, hockey, American football) by extending
`PredictSportsLeague`, `SUPPORTED_SPORTS_LEAGUES`, `LEAGUE_SLUG_CONFIGS`
slug/tag parsing, and draw-capable league sets.
> 
> Adds **`8.6.0`** production defaults for `predictLiveSports` and
`predictExtendedSportsMarkets` (league lists plus richer
`enabledSportsMarketTypes`), while keeping older `7.79.0` / `7.82.0`
payloads unchanged.
> 
> Enables **`first_half_moneyline`** as a supported/grouped market type
(mapped to a **First Half** outcome group, separate from game lines) and
treats it as moneyline-like in sports constants.
> 
> Changes **Polymarket** market-details resolution: child events with a
parent are **not** merged into the parent when any **active** market
type is outside the enabled grouping set (`#canGroupAllActiveMarkets`),
so direct links keep the generic child page until all active markets are
groupable.
> 
> Centralizes **Appium** smoke disabling of extended sports via
`remoteFeatureFlagExtendedSportsMarketsDisabledForPredictSmoke` (both
`8.6.0` and `7.82.0` variations).
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
c9c9fd3. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@runway-github
runway-github Bot requested review from a team as code owners July 30, 2026 21:23
@github-actions

Copy link
Copy Markdown
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@metamask-ci metamask-ci Bot added the team-bots Bot team (for MetaMask Bot, Runway Bot, etc.) label Jul 30, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🔍 Smart E2E Test Selection

⏭️ Smart E2E selection skipped - PR targets a release or stable branch (release/* or stable)

All E2E tests pre-selected.

View GitHub Actions results

@github-actions github-actions Bot added the risk:low AI analysis: low risk label Jul 30, 2026
@sonarqubecloud

Copy link
Copy Markdown

@HowardBraham
HowardBraham enabled auto-merge (squash) July 30, 2026 21:46
@HowardBraham
HowardBraham merged commit 969ae0d into release/8.6.0 Jul 31, 2026
474 of 480 checks passed
@HowardBraham
HowardBraham deleted the runway-cherry-pick-8.6.0-1785446603 branch July 31, 2026 14:32
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 31, 2026
@metamaskbot metamaskbot added the release-8.6.0 Issue or pull request that will be included in release 8.6.0 label Aug 3, 2026
@gauthierpetetin

Copy link
Copy Markdown
Contributor

No release label on PR. Adding release label release-8.6.0 on PR, as PR was cherry-picked in branch 8.6.0.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-8.6.0 Issue or pull request that will be included in release 8.6.0 risk:low AI analysis: low risk size-L team-bots Bot team (for MetaMask Bot, Runway Bot, etc.)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants