# Changelog of Polymarket + Kalshi Arbitrage Opportunity Radar (`nexascout/prediction-market-opportunity-risk-radar`) Actor

- **URL**: https://apify.com/nexascout/prediction-market-opportunity-risk-radar/changelog.md
- **Full Actor documentation**: https://apify.com/nexascout/prediction-market-opportunity-risk-radar.md

## Changelog

### 2.8.2 — Output Console hotfix

- Removed `clean=true` from Actor output URL templates. Apify Console parses output query parameters and expects `clean` as a boolean, while URL templates supply strings, causing the Output tab to fail with `Expected property clean to be of type boolean`.
- Dataset views remain unchanged: Opportunity overview, Execution economics, and Semantic & resolution risk.
- Matching engine, Tasks, pricing, and signal logic are unchanged from the validated V2.8 core.

### 2.8.1 — Store-ready polish

- Reworked Store README around customer value, supported use cases, signal semantics, economics, monitoring, and limitations.
- Added dedicated dataset views for opportunity overview, execution economics, and semantic/resolution-risk audit.
- Expanded Actor output links to the three dataset views plus run diagnostics.
- Reduced the default maximum output rows from 20 to 10 for safer exploratory cost.
- Made cross-run monitoring opt-in by default.
- Updated Actor title/description for clearer Store positioning.
- Reworded the fee-enabled warning so it no longer implies fee math is unknown when economics can determine it.
- Matching and contract-scope gates remain the validated V2.8 engine.

### 2.8.0

- Added a hard sports contract-scope gate: cross-venue sports economics is allowed only for `FULL_GAME` moneyline ↔ `FULL_GAME` moneyline.
- Fixed quarter/half scoped props leaking through as full-game winner contracts even when their `contractScope` differed.
- Added prop detection for longest field goal and both-teams-to-score style NFL derivatives.
- Contract-type inference now prioritizes the contract-facing title instead of allowing the shared event title (`Team A vs Team B`) to force `SPORTS_MONEYLINE`.
- Runtime markers bumped to `engineVersion=2.8.0` / `contract-semantics-v7`.

### 2.7.0

- Hardened sports contract scope so `1H/2H/quarter/inning moneyline` is never equivalent to a full-game winner market.
- Added explicit `SPORTS_PERIOD_MONEYLINE` and `SPORTS_EXACT_MARGIN` semantics plus `canonical.contractScope`.
- Added guards for winning-margin buckets and event props such as safety/overtime/coin-toss style contracts.
- Runtime semantic guard now calls the same canonical sports detector instead of maintaining a second drifting regex implementation.
- Pure league queries (for example `NFL`) skip noisy Polymarket keyword search and use league-native sports discovery.
- Reduced pure-league discovery fan-out while preserving league event coverage; this also prevents hundreds of derivative contracts from reaching order-book analysis.
- Added regression coverage for the false `1H Moneyline ↔ full-game winner` ACTIONABLE signal observed in live V2.6 testing.

### 2.6.0

- Added league-native Polymarket discovery via `/sports` metadata and `/events?series_id=...` with tag fallbacks for league-only queries such as NFL.
- Focused sports queries no longer depend on noisy `public-search` to discover game-level markets.
- Added league-targeted discovery counts/hints to run diagnostics.
- Removed stale “fee math must be known” warnings after the fee engine has successfully resolved the Polymarket fee curve.

### 2.5.0

- Team-specific queries no longer widen to every market in the inferred league; `Yankees` filters to Yankees-related contracts instead of all MLB.
- Macro vertical detection now uses contract-facing fields, preventing unrelated search-result/rule text from misclassifying IPO/general markets as `FED_DECISION`.
- Focused query runs cap broad fallback ingestion while preserving targeted Polymarket public-search and Kalshi series discovery, reducing latency and API load.
- Expanded sports prop detection for extra innings, first/last score and common stat/player props.
- Improved two-team side inference when a platform duplicates the YES label into the secondary outcome field.
- Added Polymarket AUTO fee-curve economics using category coefficients and per-fill `contracts × feeRate × price × (1-price)` calculations.
- Added runtime marker `engineVersion=2.5.0` / `contract-semantics-v5`.
- Added regression tests for team-query precision, macro search contamination, extra-innings props, and sports fee-curve economics.

### 2.4.0

- Added runtime engine/semantics version markers to every row and run summary.
- Added redundant raw-title semantic gates so spreads, totals, inning/period props can never match moneyline contracts even if canonical fields are stale.
- Added annual Fed cut-count and hike-count horizons distinct from single-meeting Fed decisions.
- Added league inference from two explicit team aliases when Polymarket omits a league token.
- Added runtime post-canonicalization semantic guard in the main pipeline.

### 2.3.0

- Added contract-type semantics for sports: MONEYLINE vs SPREAD vs TOTAL. Spread/total markets can no longer pass as winner contracts.
- Added annual Fed cut-count canonicalization so cumulative yearly cut-count markets cannot match single-meeting 25bps decisions.
- Removed the exact-day mismatch penalty for monthly macro release/meeting identities when the canonical period and contract semantics match.
- Added support for Kalshi current `orderbook_fp.yes_dollars/no_dollars` fixed-point payloads, preserving legacy orderbook support.
- Targeted query runs now keep a 3x base discovery pool so exact game markets are not crowded out by props/futures returned from native search.
- Treat Polymarket HTTP 422 at the public pagination ceiling as end-of-list rather than a source outage.

### 2.2.0 — targeted discovery and cross-platform recall hardening

- Added Polymarket `public-search` discovery for user queries instead of relying only on arbitrary market-list pages.
- Added Kalshi series-targeted discovery for NFL, MLB, NBA, NHL, Fed, CPI, unemployment, GDP, payrolls, BTC and ETH families.
- Broad scans now fetch a larger discovery pool and reserve capacity for overlap-heavy Kalshi series before matching.
- Polymarket list discovery is ordered by volume before local canonical matching.
- Bare `Fed` query intent now maps to `FED_DECISION`; short-form Fed rate markets canonicalize as macro decisions.
- Added canonical coverage, targeted-discovery counts, series hints and shared-event-key counts to run diagnostics.
- Preserved exact sports event identity and the semantic/resolution gate before order-book economics.
- Added live-source regression fixtures for Polymarket nested search results and Kalshi `series_ticker` discovery.

### 2.1.0 — 2026-09-23

- Fixed Polymarket Gamma pagination so `maxMarketsPerPlatform` can actually load beyond the first 100 markets.
- Added canonical league matching to focused queries such as `NFL`.
- Prefer explicit event dates from titles/slugs/tickers over exchange close timestamps.
- Replaced the O(N×M) GENERAL/POLITICS fuzzy fallback with date/period-blocked comparisons.
- Prevents broad 1000×1000 scans from timing out solely because of fallback matching.
- Added regression coverage for pagination, league query matching, slug event dates, and blocked fallback behavior.

### Product V2 / source 2.0.0 — 2026-09-23

Major architecture rebuild of the existing `nexascout/prediction-market-opportunity-risk-radar` Actor.

#### Matching

- Replaced title-first cross-platform matching with vertical-specific canonical event fingerprints.
- Added sports league/team/date normalization with common MLB, NFL, NBA and NHL aliases.
- Added semantic outcome-side mapping for equivalent vs inverted contracts.
- Added macro metric/period/threshold normalization and separated CPI MoM from CPI YoY.
- Added crypto asset/date/threshold and weather metric/location/date canonicalization.
- Added conservative GENERAL/POLITICS fallback instead of allowing weak generic text matches into economics.
- Added alias-aware search filtering (`Yankees` ↔ `New York Y` / `NYY`).

#### Resolution gate

- Contract-threshold mismatches are rejected before order-book requests.
- Event-date and period mismatches are hard risk signals.
- Resolution-source mismatches are surfaced and scored.
- Cancellation/postponement policy differences are compared where detectable.
- Rejected semantic pairs no longer receive fake arbitrage-profit calculations.

#### Market data

- Reduced Kalshi pagination pressure by requesting larger pages.
- Added HTTP 429/backoff retry behavior and public-host fallback.
- Added explicit `PARTIAL_SOURCE_FAILURE` diagnostics when a platform source fails rather than implying no market opportunity exists.
- Preserved a 2,000-market Polymarket safety cap from the latest pre-V2 source line.

#### Execution economics

- Added multi-level depth-aware fills on both venues.
- Correctly derives Kalshi executable asks from opposite-side bids.
- Added conservative Polymarket fee handling. Fee-enabled markets with unknown fee math cannot become ACTIONABLE by default.
- Added manual fee override mode for controlled research.

#### Monitoring and schemas

- Replaced run-scoped history with a named persistent KVS.
- Added complete dataset/output schemas for human and agent consumers.
- Preserved existing Store slug and actor-level monetization.

#### Tests

- Added regression tests for the previously observed false sports match (Rays/Yankees vs Baltimore/Yankees).
- Added tests for shortened team aliases, macro threshold matching, CPI MoM vs YoY separation, fee safety, order-book depth, and schemas.
