# Bounded CPU/CUDA reference check This protocol defines a reproducible generated input for qualifying the package's largest vanilla Formula network through the native simulator. This maximum five-output Formula fixture is one bounded qualification case; separate vehicle-specific runtime checks are required for Rally, Snowmobile and Truck. A passing run covers only the selected B01 track, fixture, settings, and build. It does not establish broad original-game parity, training quality, or general CPU/CUDA equivalence. ## Public-package fixture - Track: `builtin_tracks/tracks/Replica B01 Oval.track`, catalog ID `787f73f5-3b8c-5d95-b0e3-0016ed076970`, SHA-256 `0df5755150c145a35edc6c8693f429e5b9ff4b12210ba67cbfcb932c58faf158`. - Network shape: `[20]+[16]*10+[5]`, with five outputs in game order `[0,1,2,3,4]` (Steering, Acceleration, Handbrake, Brake, Boost), 13 raycasts plus the seven unparameterized sensors. This is 12 total layers and 2,869 dense weights and biases. The source fixture includes a `Name` to make the generated JSON self-contained. - The Python 3 standard-library snippet below creates deterministic compact JSON bytes and deterministic gzip bytes. It mirrors the generated maximum-shape fixture used by the package contract tests. The generated network is a synthetic reference input, not a trained lapper. ```python import gzip import hashlib import json import random def generated_network(): shape = [20] + [16] * 10 + [5] sensors = [ {"$type": "raycast", "Degrees": -90 + i * 15, "Length": 800} for i in range(13) ] + [ {"$type": name} for name in ( "speed", "velocityFront", "velocitySide", "angularVelocity", "wheelAngle", "boostCapacity", "correctDirection", ) ] rng = random.Random(20261013) weights = [ [[rng.uniform(-0.2, 0.2) for _ in range(width_out)] for _ in range(width_in)] for width_in, width_out in zip(shape, shape[1:]) ] biases = [[0.0] * width for width in shape[1:]] return { "Type": 0, "Name": "Disposable full-network qualification", "Outputs": [0, 1, 2, 3, 4], "Sensors": sensors, "NeuralNetwork": { "Shape": shape, "Weights": weights, "Biases": biases, }, } network = generated_network() raw = json.dumps(network, separators=(",", ":")).encode("utf-8") compressed = gzip.compress(raw, mtime=0) print("json_bytes", len(raw), "json_sha256", hashlib.sha256(raw).hexdigest()) print("gzip_bytes", len(compressed), "gzip_sha256", hashlib.sha256(compressed).hexdigest()) ``` Feed the compressed bytes with the unchanged B01 track file. Do not decompress and rewrite the bundled track. The script prints the hashes for the exact Python/runtime-generated bytes; retain the printed values with the test receipt. ## Bounded run and receipts Use population 1, generation 1, 120 ticks, mutation 0.01, seed 42, one worker, and the default total-score reward as a smoke setting. The package contract suite separately exercises actual training with the maximum shape; a small smoke setting should not be presented as a training-quality recommendation. For hosted qualification, record Space/build ID, CPU or CUDA selection, package and binary hashes, fixture hashes, native report, candidate output hash, candidate validation result, download receipt, and server deletion receipt. Compare CPU and CUDA only on the exact same fixture/settings/build where the deployed service supports both routes and CUDA allowance is available. Do not spend paid overage. A mismatch is a finding to investigate; a match on this one fixture does not establish broad parity. No live GPU job is claimed by this protocol; deployed status and executed qualification belong in the release receipt.