Dated source reference. Current release status: handoff state. Full original relative paths are in the developer archive.
Portable presentation composition core — draft1
Work69 adds actual Windows software and Canvas sinks, a copied HTTP data/cue bridge, text alignment/weight/fitting parameters, slide offsets and conditional color/visibility bindings. These remain a private development contract; the game host, exact native cues and suppression are still pending. The ESPN study is explicitly unaccepted against the user's1:1 target. Historical work67/68 descriptions below retain their scope; backend text/image handling now exists offscreen, while the future game GPU backend still owns render-state/device recovery and its acceptance.
presentation.hpp is a small C++17 composition core for OpenHoops presentation packages. It has no operating-system/GPU calls, game pointers, file/network access, threads, heap allocation or external dependencies. It produces bounded rectangle/text/image draw commands for a future native backend. This is not an installed game renderer or a frozen public C ABI.
An adapter submits a copied State with run/match/epoch/context identity, increasing sequence, freshness and coherent/live flags. Named typed values supply team labels, scores, clocks, period labels, optional ranks/bonus/timeouts and card text. Unknown fields preserve a reason such as missing, explicit null, unranked, stale or inapplicable. The core does not read the HTTP API or infer native event meanings. The future state adapter must map profile-specific data correctly; a team's bonus.against_team is not automatically that team's awarded bonus.
Work68 adds five event/round caption bindings and a separate presentation_sha256 identity. External match metadata supplies these optional strings; missing context leaves the caption hidden. The live adapter must copy the validated values/hash into the state. The roster/companion hash alone does not identify this independent event context.
Composer.submit accepts validated values, rejects older same-identity sequences and ignores duplicate sequences without refreshing source age. Changing match/run/context identity clears layer visibility. The host calls visible explicitly; no replay, foul, camera or rule trigger is guessed from a phase code. Animation uses its own monotonic timeline and supports smooth visibility reversal. Clocks only format copied values and never advance with animation time.
frame validates the package and required resources/data before emitting anything. Stale, disconnected or incoherent sources produce an empty frame with a typed status. Required missing fonts/images or unknown required fields also produce an empty frame. Optional unknown text may hide or use a package-selected placeholder. Frame.ready means only that this command-composition pass succeeded; it does not grant native ownership, verify actual font/image pixels or make a development package production-ready. The host must check every submit/frame result and maintain a separate verified suppression/readiness contract.
Geometry uses a1920×1080 design canvas and uniform scale. A layer may anchor to a centered16:9 region or the whole physical target. At equal height, centered scorebugs retain size on21:9/32:9. Solid rectangles can explicitly fill a whole surface for wipe coverage; text/images cannot use that stretching rule. Node order defines painter order. A future backend still owns clipping, text measurement/shaping, glyph/image resources, blending, device recovery and game render-state preservation.
Limits:128 nodes,8 logical layers,256-byte text buffers, bounded IDs, finite coordinates, explicit source age and bounded animation durations. Call from one owning composition thread, using a safely copied state. This draft has no concurrent mutation contract, dynamic package loader, native visibility hook, GPU sink, text fitting or automatic cue system.
The ESPN CBB scaffold currently contains neutral placeholders pending the user's references. compile_package.py validates that development document and produces a private C++ fixture initializer. It is an authoring/build aid, not a claim that arbitrary JSON packages can already be loaded into the game.
Work67 compiles with MSVC x86 /W4 /WX and runs isolated on the Dell without desktop/game interaction. Checks and exact source. No game adapter, HTTP ABI or existing public package changes.