chore(runway): cherry-pick feat(predict): expand extended sports leagues cp-8.6.0 - #34088
Merged
Merged
Conversation
…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 -->
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. |
Contributor
🔍 Smart E2E Test Selection⏭️ Smart E2E selection skipped - PR targets a release or stable branch (release/* or stable) All E2E tests pre-selected. |
HowardBraham
approved these changes
Jul 30, 2026
|
HowardBraham
enabled auto-merge (squash)
July 30, 2026 21:46
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. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



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
predictExtendedSportsMarketsto include those leagues so supportedgame 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
predictLiveSportsproduction 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:uel,col,fl1,ere,bra,por,bel1,elc,libkbo,npb,cpblshl,khl,cehl,dehlnfl,cfb,cflNFL'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.0and8.6.0extended-sports variations through a shared helper. Thisprevents 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 Halfgroup. New league and market-type configurationis versioned at
8.6.0; existing7.79.0and7.82.0payloads remainunchanged for older clients.
Provider data note: two historical FL1 Nice/Saint-Etienne playoff events
use
nicin the event slug while the embedded team and/teamsendpoint use
ogcfor OGC Nice. This has been isolated for confirmationwith 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
Automated validation:
resolution, parsing, grouping, rendering, flags, league support, and
upstream esports integration (554 tests passed)
yarn lint:tscScreenshots/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
Docs and MetaMask Mobile
Coding
Standards.
if applicable
guidelines).
Not required for external contributors.
Performance checks (if applicable)
with no Android-specific code.
account count, or token count.
performance metrics
performance-sensitive execution path.
For performance guidelines and tooling, see the Performance
Guide.
Pre-merge reviewer checklist
app, test code being changed).
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_CONFIGSslug/tag parsing, and draw-capable league sets.
Adds
8.6.0production defaults forpredictLiveSportsandpredictExtendedSportsMarkets(league lists plus richerenabledSportsMarketTypes), while keeping older7.79.0/7.82.0payloads unchanged.
Enables
first_half_moneylineas 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(both8.6.0and7.82.0variations).Reviewed by Cursor Bugbot for commit
c9c9fd3. Bugbot is set up for automated
code reviews on this repo. Configure
here.