Dated source reference. Current release status: handoff state. Full original relative paths are in the developer archive.
Legal ball state and native rule extensions — supported private subset55
Work63/work70's expanded supported subset is accepted on API70e/API55/native70d: frozen timing/reset/college-bonus configuration, scoped FT/classification transactions, copied native metadata and immutable startup asset overlays.634 Windows tests/470 original/college adapter checks pass. Original70liveo naturally finishes9–6 and college70liveq6–3, with classification/metadata/assets and independent result delivery/repeated ACK verified. Changed FT counts remain instruction/headless evidence: one original baseline2→2 query, no college query. The table below preserves development53's narrower baseline and does not override the current platform ledger. Rule transport2 reads1; C ABI1 remains draft. Closeout.
OpenHoops now has an experimental Windows legal-state interpreter and native C rule-extension SDK. These are private source capabilities for independent applications and modules; no public package or stable-game installation is promoted. HTTPv1, main snapshotABI26 (74,648bytes), eventABI4, collegeprofile4 and courtdefinition3 remain unchanged. The rule transport is private2 (reader also accepts1); C header ABI1 remains draft and must match the selected producer. Start with the API guide, native SDK contract, C header and independent example.
Preserved development53 contract
| Surface | Implemented behavior | Coverage boundary |
|---|---|---|
| Legal state | Accepted native transitions feed separate player control, team control, NBA possession, live/alive, entitlement, pending attempt, restart and FT families. Each carries revision/evidence/reason and known/unknown/inapplicable status. | Physical holder, phase and clocks never become positive legal-state evidence. An uncovered change invalidates affected fields. NCAA alive/separate NBA possession are inapplicable; partial FT/restart/attempt masks remain significant. This is an engine/profile interpretation, not complete rulebook certification. |
| Event meanings | Ten connected foul/violation record names, including double dribble and kicked ball; scoped actor-role helpers in HTTP and C. | Credit arguments are not universally the detecting/physical actor. Out-of-bounds attribution remains unresolved. Original-game detection and every surrounding adjudication are not certified by record storage. Stat correlations do not add statistical credits. |
| Native extensions | Up to eight identified trusted x86 DLLs, transactional initialization, exclusive mutable ownership, coexisting observers, copied game-thread context, original-state preservation and validated output. | Trusted code, not a sandbox or a safe way to preempt a hung DLL. No game addresses/pointers enter the public contract. Exact header/producer/reader matching is required; ABI is not frozen. |
| Configuration | Full/minimum shot-clock amounts and personal foul threshold5/6 resolve before play and remain frozen, including after module failure. Native reset handlers still own when/why. | College bonus policy has one built-in owner. Native baseline settings0–6 may KEEP; numeric acceptance is not proof of arbitrary thresholds. Backcourt, period/OT, separate rim, FT-count, classification and arbitrary bonus callbacks remain unavailable. |
| Runtime decisions | Nineteen explicitly mapped rule permissions; one stable answer per permission per complete simulation step. UI queries cannot initiate callbacks. | College retains its two conflicting permission slots. This is a global permission decision, not arbitrary per-player foul adjudication. Other-thread/preplay queries preserve baseline. |
| Failure policy | A valid slow answer applies now, then callbacks disable. Optional runtime failure continues degraded with frozen values retained. Required runtime failure suspends further simulation and marks review_required; an owned child is stopped without a successful result. | Admission/init errors refuse startup even for optional modules. Observer faults identify their own surface. Unowned attached processes are not killed. Full native corruption/hangs remain outside containment. |
| API/results | GET /v1/rules, GET /v1/ball-state, additive snapshot legal_ball/rule_runtime, durable rule events and immutable result identity/configuration/fault/gap provenance. |
Main and rule mappings are sampled independently, not one atomic transaction. Legacy ball.live/ball.legal_possession stay null. Modified profiles cannot inherit stock verification. Summary receipt caps have explicit omitted counts; detailed events remain in the durable log subject to its retention contract. |
Pending scoring attempts remain represented across eligible whistles/clock expiry until their outcome is established. Ordinary passes are not attempts. Restart award, disposal, release, throw-in completion and AP consumption are distinct. Both original FT award helpers are captured before their callers change phase; award creation alone does not prove dead-ball status. Unrelated physical movement does not erase an independent FT award, while unexplained progress writes invalidate the affected subfields.
College control composition commits only after the existing reset/AP processing finishes. Accepted-control phase7 and phase10 outcomes remain separate. An abandoned simulation-step boundary invalidates continuity and clears its cached-answer lifetime; optional modules can begin a fresh epoch, while required policies follow the suspension contract. Sampling remains an integrity backstop, never a semantic producer.
Exact source and verification
Supported original executable SHA256 7cb5fdaa30586558a3146dcf9023880b1cceeaabfe0f92f967f461c4644f3704. Preserved runtime text SHA256 5dafbec541c01a91459ec797af4a5d1cc52ed6250ba426ead3baa92b4c7b22ad; original .rdata SHA256 4e1fcf3813e8f4ad665b521641d887ca12790d3b43102852a715d520a49f1b51. The permission jump table is separately attributed to .data. Exact instructions override guessed/decompiler boundaries and earlier labels.
Final non-probe native source adapter62final2, archive SHA256 48eb706d3c9835e9ac370bb5c3639a0674a8f1fc5883d86f2c08142ea1af312f; DLL SHA256 cd992875d5f55b6d3a759e512386445043e9fa5486b6791af035d87367a16f2c. Dell MSVC /W4 /WX passes. No private trace or generated input is used by the production adapter.
| Evidence | What passed | Limits |
|---|---|---|
| API62zzr | 561 Windows API tests, all110 schemas and historical-result compatibility | Broker/protocol/HTTP/results tests do not certify native basketball by themselves. |
| SDK62final | 1,018 compiled registry/interpreter/decision cases, actual independent C DLL | No game hooks/game started. |
| Helpers62final2 | 313 production-adapter checks:30 permission cases,13 control cases, three FT award branches, composed early-return/reset/AP publication, startup error serialization and abandoned-step recovery. Six additional process cases cover exception/invalid/slow × optional/required. | Exact original function bodies plus explicit unrelated-dependency stubs; no game/desktop. The one deliberately injected host gap is identified in the report, not a natural engine fault. |
| Boundary62z | 606 compiled entry/return preservation, preflight, stack/FP and abandonment cases | Does not claim every possible game exception path. Production wrappers preserve native return slots; the earlier discovery tracer did not. |
| Double dribble, kicked ball | 128 original-handler guard/permission/record-actor cases | Upstream detection/geometry and universal enum/actor mapping remain unverified. |
| Full module62zzb | Natural college3–0, frozen18/9, phase4 external identities, 10,219 decisions, zero faults, pending FG flight/settlement, reconciled immutable results, two consumers/repeated ACK | Exact earlier DLL e805aea2; later FT/restart/AP/gap changes have final compiled checks and separately identified final-DLL acceptance. |
| Persisted62zzb | Original real-game DB unchanged; copied persisted state serves a third consumer/repeated ACK through real HTTP | No game or generated/replayed snapshot; demonstrates persistence, not a new match. |
| Optional fault62zzo | Natural2–4 after one module exception, disabled owner,18/9 retained, degraded result, independent immutable deliveries/repeated ACK, no duplicate-fault growth | DLL 862c3e0e; later positive FT award capture is not claimed for this run. |
| Required fault62zzt | Required exception suspends/stops only the owned child, review_required, no successful result | DLL 376134eb; failure scenario, not a completed match. |
| Init refusal62zzu | Actual native init refusal returns typed failure in0.459s, no input/unattended modal/start | DLL 376134eb; no match entered. |
| Original62zzz | Original24-second clock and known live/alive/control/NBA possession; safe explicit cancellation | DLL a9a86748; short baseline, not full original-game certification. |
Final original62finala passes native24-second clock/control/live/alive/NBA-possession with explicit cancellation. Final module62finalb finishes naturally college0–2 on the exact final DLL, with10,273 callback calls, zero module/adapter faults,18/9 frozen values, reconciled player/team totals and two identical independent deliveries/repeated ACK. Aggregate acceptance, source comparison and preservation retain exact identities and evidence scope. Final source runtime inputs match their tested/built manifests; later documentation changes do not imply a repeated test campaign.
Preserved failures and research
The initial trace62f transport capture was incomplete; corrected discovery62n retained1090 records and closed/restored. Trace labels were research guesses:880350 changes AP team,8C7C80 also registers passes, and its0x200 bit is scoring eligibility rather than proof of an attempt.8BD76A is in phase10, not phase7. These corrections are reflected in current code and committee consensus. Invalid/protected decompiler boundaries are not used as proof.
Live62zu failure exposed MSVC ordinary __try early returns being mistaken for abnormal termination; required suspension/owned stop worked and no success was exported. The corrected wrapper separates its core and records actual completion. Live62zza is incomplete due to the observer HTTP startup timeout; it is not native-failure evidence. Optional62zzg revealed repeated receipt publication from a disabled owner's baseline fallbacks; the corrected engine reports only newly occurring faults, and the result summary has bounded receipts/omitted counts. Earlier failed kicked-ball fixture omitted a required register; its failed record remains alongside corrected coverage. No failed evidence was relabeled as a pass.
All build/test/game/debugging work ran on Dell. Mac remains editing/storage/SSH only. MVP is checked before each shared-desktop launch, and no shared input is generated. Closed runs archive their current files, restore98 independent isolated files/DLL50 and remove only their exact owned task. Original95 saves in both games, stable35, original EXE/INI, immutable packages and four hosting identities remain protected. No public package, artwork/presentation change, controller certification, Mac/Linux game support or extra rare-rule/full-match campaign is implied.