Skip to content

docs(concepts): Market Lifecycle — explicit close/suspend signal map (all 4 locales)#263

Open
paperclip-resolver[bot] wants to merge 1 commit into
mainfrom
docs/crew-380-market-lifecycle
Open

docs(concepts): Market Lifecycle — explicit close/suspend signal map (all 4 locales)#263
paperclip-resolver[bot] wants to merge 1 commit into
mainfrom
docs/crew-380-market-lifecycle

Conversation

@paperclip-resolver

Copy link
Copy Markdown
Contributor

Why

Crew task #380 / SHA-3694 (reopened over customer churn). A Sharp+WS customer asked how to detect Pinnacle handicap/totals markets closing ("threshold-point market disappears — residual data stays in our system"), was told on 2026-05-26 to diff snapshots client-side, and churned on 2026-06-09 believing there is no close signal. The explicit signals already existodds:removed (WS/SSE) and delta removed[] predate the report, and is_active/odds:locked shipped 2026-05-31 (SHA-3803) — but they were scattered across four reference pages with no consolidated answer to "how do I know a market closed?", and the delta reference referenced removed[] without ever showing it.

Decision (ask 1 of the task): keep the contract — no synthetic adapter-side "closed" price row. Ladder markets were explicitly excluded from synthetic suspension in the 2026-05-31 red-team design (~98% of removals are ephemeral alt-line churn; a synthetic terminal row would be wrong as often as right, and we never fabricate rows a book didn't post). This PR executes ask 3: make the existing signals discoverable.

What

  • New concepts page market-lifecycle (all 4 locales): removal vs suspension-in-place, signal matrix per surface (REST snapshot / delta / SSE / WS), threshold-ladder churn model for handicaps + totals (the churned customer's exact case), stable-id semantics, client cleanup recipes, is_active + is_stale_pregame_price guards.
  • odds-delta reference: the response example and schema now actually show/document the top-level removed[] array ({id, sportsbook, removed_at}) — previously referenced by two callouts but never shown.
  • live-vs-prematch: the DK/FD suspension callout now points at the explicit removal signals instead of implying disappearance is unsignaled.

Verification

  • npm run build green in the worktree: 228 pages indexed across 4 locales (224 before — the 4 new pages), out/<locale>/concepts/market-lifecycle/ present for all locales.
  • Wire shapes verified against source + prod: removed[] shape from sharp-api-go/main.go (removedOdd struct), odds-id stability from api-adapters/adapters/base.py _numeric_id (48-bit xxhash of book/event/market+line/selection), live numeric ids + per-rung distinctness confirmed against localhost:3003 /api/v1/odds on OVH.
  • Build-regenerated public/ artifacts (sitemap, openapi stamps) deliberately excluded — the deploy build regenerates them.

Type: docs

🤖 Generated with Claude Code

…gnal map (all 4 locales)

New concepts page consolidating every market close/suspend/removal signal
(odds:removed, delta removed[], is_active, odds:locked,
is_stale_pregame_price) with the threshold-ladder churn model and
client cleanup recipes. Documents the previously-unshown removed[]
array in the odds-delta reference and cross-links the
live-vs-prematch suspension callout.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants