{
  "schema_version": 1,
  "standard": "Observable Prediction Capital (OPC)",
  "methodology_version": "gross_locked_v1",
  "as_of": "2026-06-15T05:32:04Z",
  "definition": "Observable Prediction Capital is the notional value of open, collateral-backed positions on a canonically-identified prediction event at a point in time, on a single venue, counted under a single named, versioned convention. It is a level (a stock), not a flow and not a ratio. It is surfaced only to the extent it is observable; unobservable capital is left unobserved, never estimated.",
  "counting_convention": {
    "name": "gross_locked_v1",
    "formula": "Event OPC = sum over team binaries of (oi_contracts x $1)",
    "basis": "A Kalshi binary contract is collateralised to $1 of settlement value, so contract open interest equals dollar open interest with no conversion model. Gross-locked sums the collateral jointly held on the YES and NO side of every team binary — the money the clearinghouse is holding on the event.",
    "is_not": "Not 'money staked on who wins' in the simplex sense (where outcome prices sum to ~1 and the stake is the collateral on the winning simplex). That is a different, also-defensible number; gross-locked and simplex-stake differ by a structure-dependent factor (measured ~25.6x on this market). The standard is not the number — it is choosing one convention and versioning it."
  },
  "why_gross_locked": "Chosen because it is the most observable and least model-dependent convention: it is read directly from open interest with no simplex or netting assumption. Simplex-stake and YES-only are derivable by any agent from the per-team breakdown, so they are not baked in as primary; net exposure requires per-account position data VolRoc does not have and is therefore uncomputable, not published.",
  "why_cross_venue_blocked": "The same 'Team X wins' question exists on Kalshi ($1-collateralised binary, OI in contracts) and Polymarket (AMM/orderbook, USDC-denominated positions). A canonical event identity proves the two markets are the same question; it does not put their capital figures in the same units. Summing Kalshi contract-OI and Polymarket USDC would be a fabricated total behind a real identity badge. Cross-venue OPC stays blocked until a documented notional-normalisation method is published and versioned, plus a one-time per-team Polymarket read from the bronze archive (PM per-team capital is not in the curated archive today).",
  "why_correlated_rollups_excluded": "'Win the Cup', 'reach the final', 'win the group', and 'win the Golden Boot' are distinct questions with overlapping conviction. Summing a team's capital across them into one 'Team OPC' adds non-commensurable, partly-double-counted belief and mixes conditional with unconditional legs. Team OPC is valid ONLY as the per-outcome notional inside the single canonical winner market, where the teams are the market's own mutually-exclusive legs — an internal decomposition, not a roll-up.",
  "why_pm_liquidity_is_not_opc": "Polymarket's reported figure is USD liquidity / market depth, which measures how much can trade, not how much committed risk capital is standing on the outcome. Depth is not a stock of at-risk collateral, so it is never represented as OPC and never summed into a cross-venue total.",
  "daily_series_and_continuity": {
    "design": "OPC history is a DERIVED VIEW over the immutable dated-freeze series, not a second append-only truth store. Each day produces one write-once observation leaf (/history/<date>) citing that day's freeze by source_uri + sha256; the rollup (/history) is recomputed from ALL leaves and holds no fact that is not reproducible from them. Immutability is inherited from the freeze substrate, not re-promised by the producer. Two immutable stores of the same fact can diverge; the derived-view design makes that divergence structurally impossible.",
    "anchor": "The 2026-06-15 observation is the series' birth certificate. It is recomputed and gated on every run and must reproduce opc_gross_locked_usd 240791760, snapshot_time 2026-06-15T00:50:11Z, coverage 48. This never relaxes.",
    "computed_at_vs_snapshot_time": "snapshot_time is the freeze's immutable as-of (when the market was observed). computed_at is when the leaf was generated. Normal operation keeps computed_at within ~30 minutes of snapshot_time; a backfilled leaf has computed_at much later, and that lag is left visible rather than hidden. The series never claims same-day computation it did not perform.",
    "adjacent_day_delta_rule": "largest_daily_increase and largest_daily_decrease are computed ONLY between observations exactly one calendar day apart. A change spanning a gap is excluded from the daily fields and reported separately as largest_change_spanning_gap, clearly labeled. A multi-day move is never presented as a daily move.",
    "gaps": "If a day has no freeze, the gap is recorded in gaps[] with reason source_freeze_absent; if a freeze is present but fails the identity/methodology check, that date is blocked and recorded. Gaps are never interpolated, and coverage changes (e.g. a team leaving the market) are recorded as measured facts, never back-filled.",
    "write_once_and_integrity": "A leaf is write-once. Recomputing a date to a different value at an identical freeze sha256 is treated as a methodology change (a version bump), never an overwrite; a changed freeze sha256 is a substrate-integrity alarm. There is no flag that silently overwrites a leaf - 'never silently restate history' is enforced in code, not policy.",
    "methodology_version_transitions": "A change to the counting convention begins a NEW series under a new methodology_version; existing leaves are never rewritten. methodology_versions[] in the rollup records each version's date range (from/to).",
    "resolution_terminal_state": "When the market resolves, a final observation is written, the rollup status becomes 'resolved', and no further observations append - the series is then permanently citable as calculated every day from 2026-06-15 through resolution. The resolved-freeze detection predicate is confirmed against the first post-settlement freeze shape before it is enabled; until then status stays 'active' and resolution is never fabricated."
  },
  "exclusions": [
    "Golden Boot (top-scorer family) — a different question, per-player not per-team.",
    "Advancement / reach rungs (KXWCROUND) — conditional, nested sub-questions.",
    "Group winners — conditional on a sub-bracket.",
    "Match betting / goal totals / player props — different horizons; traded, not held.",
    "Polymarket USD liquidity — depth, not committed capital.",
    "Net / per-account exposure — unobservable to VolRoc; not published."
  ],
  "known_limitations": [
    "Single-venue (Kalshi). Cross-venue total is blocked (see why_cross_venue_blocked).",
    "Historical peak OPC (OI_peak) is left-censored: the winner market opened before the archive origin (~2026-05-20). The current snapshot is clean; the lifecycle peak is understated. CPS/MTF/SPR ratios over this market's life are therefore NOT published.",
    "Outcome prices carry an overround; price-implied shares normalise it out.",
    "Settlement axis is empty (tournament unresolved).",
    "Off-venue / dark capital is unobservable by definition."
  ],
  "version_history": [
    {
      "version": "gross_locked_v1",
      "date": "2026-06-15",
      "summary": "Initial publication. Gross-locked OI as the v1 raw fact for single-venue, current-snapshot Event and Team OPC on the 2026 FIFA World Cup Winner market."
    }
  ],
  "future_unlocks": [
    "Cross-venue normalisation: a documented Kalshi-OI <-> Polymarket-USDC method, plus a one-time per-team Polymarket read from bronze, unblocks a cross-venue total.",
    "Derived conventions (simplex-stake, YES-only) computable by agents from /teams.",
    "Settlement axis (SPR/EER) once the tournament resolves in-archive."
  ],
  "provenance": {
    "reference": "VolRoc D8 (Observable Prediction Capital) and R2 (World Cup OPC), 2026-06-14.",
    "source_fields": "consensus.teams[].kalshi.{ticker,yes_price,oi_contracts}",
    "generated_at": "2026-06-15T05:32:04Z"
  },
  "attribution": "Cite as \"VolRoc\" with a link to https://volroc.ai."
}
