---
title: Repoint 9,160 drifted prop-market esbid stamps to the vendor's own event
type: task
status: cancelled
description: >-
  Repoint the 9,160 drifted prop_markets_index esbid stamps to the game PrizePicks own
  source_event_id names, now resolvable through the nfl_games.prizepicks_game_id crosswalk, and
  settle the re-grading exposure underneath them.
base_uri: user:task/league/adjudicate-drifted-prop-market-index-stamps.md
created_at: '2026-09-01T17:41:00.556Z'
entity_id: 2f290df5-a9ce-4523-b0a1-7c54c8423147
finished_at: '2026-09-18T02:53:04.165Z'
observations:
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: Medium
public_read: true
relations:
  - succeeds [[███████████████████████████-███████-████-██████-██████████████]]
  - succeeds [[██████████████████████████-████-██████-█████-███████████]]
  - relates [[██████████████████████-████-██████-█████-████████████]]
  - relates [[user:guideline/software/design-data-checks.md]]
tags:
  - user:tag/league-xo-football.md
  - user:tag/software-task.md
updated_at: '2026-09-18T02:53:04.165Z'
visibility_analyzed_at: '2026-11-05T23:48:21.715Z'
---

# Overview

`prop_markets_index` holds 9,160 markets whose OPEN and CLOSE rows name different games. The cause is fixed and deployed, and the settlement rows harmed by it have been voided — but the drifted index rows themselves are unrepaired and unowned, and `prop-market-open-close-esbid-coherence` reports them red on every run.

Outcome: every drifted market's two rows name the game PrizePicks says the market was about, and the check's count falls to zero for a reason rather than by suppression.

# Background

This is the last open piece of the esbid-drift chain. The cause is fixed in [[██████████████████████████-████-██████-█████-███████████]], the detector is [[██████████████████████-████-██████-█████-████████████]], and the mis-settled selection rows were voided in [[███████████████████████████-███████-████-██████-██████████████]] — which deliberately scoped to selection rows only and left every index stamp alone.

**The crosswalk makes this possible for the first time.** `db/checks/registry.mjs` forbids rewriting an esbid to make two rows agree, because a finding does not say which row moved. It names the escape: every drifted market carries exactly ONE `source_event_id` across both rows, so the vendor's event is the oracle. Until the stamping fix added `nfl_games.prizepicks_game_id`, nothing could resolve that event id to a game. Now it can.

This was proven on one market during the 2026-09-01 adjudication: `3183167` carries `NFL_game_qbzEcOZGh3n9g1eWPzfQYQvr` on both rows, which resolves to `2024102003`, matching its CLOSE row and identifying the OPEN row as the side that moved. That single reading overturned the predecessor plan's remedy for it.

# Design

Resolve each drifted market's `source_event_id` through `nfl_games.prizepicks_game_id`, then repoint whichever row disagrees with the vendor's game. A dated `db/adhoc/` file per repo convention, carrying the pre-image and a reversing statement.

Two populations need separating before any write, and the split decides the scope:

- markets whose event id RESOLVES through the crosswalk — mechanical, the vendor names the game
- markets whose event id does NOT resolve — needs its own adjudication, and may be the residue that stays drifted

Re-settlement is the open question. A repointed market leaves `prop_market_selections_index` holding a result graded against the old game, which is exactly the harm the voiding task addressed for 18 rows. At 9,160 markets that cannot be hand-enumerated, and `process-market-results --esbids` only targets whole games.

# Plan

- [ ] Measure how many of the 9,160 resolve their `source_event_id` through the crosswalk, and how many do not. Verify: the two counts sum to 9,160.
- [ ] For the resolving set, measure how often the vendor's game matches the CLOSE row versus the OPEN row versus neither. Verify: "neither" is enumerated rather than assumed empty — market 3183167 matched CLOSE, and a set where OPEN sometimes wins needs a different remedy than a blanket rule.
- [ ] Determine the settled-selection exposure under the repoint: how many settled rows sit beneath markets whose stamp would move. Verify: cross-checked against the 18 already voided, which must not be double-counted.
- [ ] Decide and record the re-settlement strategy for that exposure, including whether any of it must be voided rather than re-graded. (no verify — design decision)
- [ ] Present the proposed repoint set and its selection-row exposure, and stop for operator confirmation before any write. (no verify — operator gate)
- [ ] Write and apply the dated `db/adhoc/` file with pre-image and reversing statement. Verify: the coherence check's drifted count falls by exactly the repointed set and by nothing else.

# Notes

- The non-resolving population overlaps the 701 PrizePicks markets carrying a null `source_event_id`, which no event-id-keyed repair can reach at all.
- `prop-market-selection-grade-consistency` grades a row against its own stored numbers and is blind to which game those numbers came from, so it will not catch a bad repoint. The coherence check is the only oracle here.
