OPENHOOPS / 2K14Final team archive · November 9, 2026Reference libraryChecksums

Dated source reference. Current release status: handoff state. Full original relative paths are in the developer archive.

Copied data and graphics intent — private draft

runtime/bridge.py is a read-only client of the same public HTTP API available to other applications. A separate polling worker reads /v1/snapshot and the bound /v1/matches/{id}. Neither drawing sink calls the game or waits for HTTP. There are no API writes, leases, generated inputs, game launch or game addresses in this consumer.

The bridge checks fresh valid source state, match/run/fingerprint identity, the frozen roster-context reference and its recomputed content hash. A monotonically increasing presentation epoch changes across context changes and reconnects. Duplicate source sequences retain their original age; repeatedly receiving the same snapshot cannot keep an overlay alive. Disconnection, invalid context and age over one second clear drawing. The browser has an independent watchdog for stalled compositor output or stalled HTTP.

Values

Names come from the selected frozen short name/display name/school name, or explicitly supplied client labels. They are never guessed from external IDs. Missing labels remain unknown. Scores, game/shot clocks, qualifying team fouls and full-plus-short timeout counts are copied from current team observations. College period labels use the declared logical half/OT mapping. Original-game labels use its declared four-quarter profile. Unknown profiles stay unknown.

Optional national rank/status, season/conference records and team/uniform display colors come from frozen roster fields. Explicit null/unranked/missing remain distinct. Record totals are supplied data; this consumer does not run a dynasty or calculate history. An opponent's bonus.against_team maps to the team benefiting from the threshold; that display does not certify an actual free-throw award. Physical holder is never used as a possession arrow or legal-control signal.

Work68 event/round strings are read using the match context helper. Their identity and independently supplied swatches form the presentation-context hash; it remains separate from the roster hash. Presentation context travels through existing generic match metadata and final results. The broker does not validate these consumer namespaces.

Explicit broadcast colors

Applications may provide this optional metadata independently of the roster, alongside org.openhoops.presentation:

{
  "org.openhoops.presentation.colors": {
    "version": 1,
    "teams": {
      "home": {
        "scorebug_background": "#FFFFFF",
        "scorebug_text": "#CC0000",
        "insert_primary": "#CC0000",
        "insert_secondary": "#000000",
        "score_update_background": "#CC0000"
      }
    }
  }
}

Every team and color is optional. The consumer helper checks version, names, #RRGGBB values and explicit null. The current core binds background/text; insert/update selections are copied for later verified package nodes, not claimed as finished graphics. Missing colors use uniform, then team, then disclosed neutral defaults. Missing text color uses explicitly provisional automatic contrast. Required color bindings with explicit null refuse composition. An exact ESPN package must select the verified swatches instead of treating those defaults as fidelity evidence.

Display policy and exact cues

The conservative scorebug policy uses the existing observed_engine_phase description only in play/inbound/free-throw/stoppage/period-ending observations, and only when pause and replay flags are explicitly false. Unknown/timeout/intermission observations hide it. This is a configurable graphics policy, not recovered ESPN production timing or authoritative legal ball state.

Cues are explicit third-party graphics requests scoped to match, run, presentation epoch and a recently displayed source revision. They have increasing intent sequences and fixed lifetimes up to ten seconds. Duplicates do not extend a deadline. A revision must have been observed within750ms in the current epoch; requests return both requested and applied source revisions. Disconnect/new context discards pending intents. A player card reads the selected player's current public name/points/total rebounds/assists; unknown players/stats refuse.

Live mode refuses replay-wipe requests because exact native replay synchronization is not recovered. Fixture mode can demonstrate a wipe with explicit preview_intent provenance. Neither case starts/stops a native replay or owns its completion. Exact award cards, native replay transitions and scene-completion triggers remain unavailable and are exposed as such. This is the remaining native part of milestone2; it requires the Dell-safe gate.

The loopback preview's cue/control routes are private development interfaces, not new game API endpoints or a frozen public presentation SDK. Its bearer token remains in the polling worker and is never returned to the browser. Simulation controls are refused in live API mode.