{"body":{"attestation":{"model_attested":false,"reason":"The engine never contacts a model, so it cannot witness which model produced a move. Replay proves rule compliance and adjudication integrity, not model identity."},"engine":{"digest":"e4cfe735e78eca66290a2992237c24ec4cb58d9aebecb9109d5cd6e5948f8f29","files":[["__init__.py","9ceaf46768c3ab8307d10b7d8bfdb6c8fb9fa118ec96fc01d3cdaaa8b96e0ae7"],["canonical.py","ae5a9d3702692ef5dee51641253aa1847344782ee6508d488a99ac9ebc75239d"],["integrity.py","1080db8480e8fae0af647ffd9d48b674a38dbab58e665d81fa5403736054f909"],["match.py","d47539f0da01f093d6f0f4235fa1db09cc64d7f8036b2025760a3c8842c3ad67"],["replay.py","497058917a5fd186cb3ae16c4edc91f38ed2b490d2d6d2c62d2550f83ed46d2e"],["sandbox.py","097a2c3f217276dbff4d6790e9416e7535bc2e1ac4f8aece3c7662ce8e841a0e"],["scoring.py","22706a7f0cf0190b6d47e461b9ae724d9f9eb958b80bf11aa8ef2a23c7cdb99c"],["transcript.py","c11106e5ded349574360f06578bb90a69bcc34a42eb4f50283179453e35f870a"],["games/__init__.py","311f5d75cb723ced5fefcf553618e7899e1af2dae95f6981887f44bef6b0da68"],["games/nim.py","1b28d3b758069f2246cd39515b50b39b74261c1c31f2ba4fa9ffc56838dab968"]]},"entrants":[{"claimed_model":"stub:v1","declared_env":[],"manifest_digest":"5d52a461498a7ddbd6a85f34b30fa85e184ce34f5c88225141f71d63eab8709e","name":"solver-harness","script":{"path":"python.exe","sha256":"5341746f92483a93e44c313de830f2fba2956f0759094404a16b2fed06c9a2ed"},"seat":0},{"claimed_model":"stub:v1","declared_env":[],"manifest_digest":"8297add5250822db579614e9a681a8721b256fcf8d447e3e0632de5acdf813ea","name":"naive-harness","script":{"path":"python.exe","sha256":"5341746f92483a93e44c313de830f2fba2956f0759094404a16b2fed06c9a2ed"},"seat":1}],"game":{"name":"nim","summary":"Remove objects from heaps; take the last object to win.","version":"1"},"limits":{"move_timeout_ms":15000},"match_id":"e18c36c2f8903c1f","protocol":"arena/1","sandbox_policy":{"enforced":["separate_os_process (no shared memory or imports with the referee)","cwd_isolated_scratch_dir (entrant is started in a per-match scratch dir)","env_allowlist (only base OS vars plus names the entrant manifest declares)","no_inherited_file_handles (close_fds)","transcript_path_withheld (entrant is never told where the record is written)","per_move_wall_clock_timeout (exceeded -> forfeit)","stdout_line_size_cap","stdout_total_size_cap","stderr_captured_and_capped","kill_on_timeout_and_at_match_end"],"note":"The unenforced items need an OS-level jail (container, WSL cgroup, Windows job object plus a firewall profile). Until that ships, a match run on an untrusted entrant is isolated in process but not in capability, and results should be labelled accordingly.","protocol":"arena/1","unenforced_v1":["network_egress_blocking (an entrant CAN reach the network; not restricted by the host in v1)","filesystem_confinement (cwd is set, not chrooted; an entrant CAN read outside it)","cpu_and_memory_limits (no job object / cgroup applied in v1)"]},"seed":7},"hash":"22855ed24cc31293d7e413670ce94db222941d5341211cee5abcaa0fbbde5c0e","kind":"header","prev":"0000000000000000000000000000000000000000000000000000000000000000","seq":0}
{"body":{"entrant_message":{"backend":"stub:v1","entrant":"solver-harness","type":"ready","version":"1"},"player":0},"hash":"a4b2565523abc687f2398e190454def7fcd762f6d14cd0aaa438e3a39aafe7b7","kind":"ready","prev":"22855ed24cc31293d7e413670ce94db222941d5341211cee5abcaa0fbbde5c0e","seq":1}
{"body":{"entrant_message":{"backend":"stub:v1","entrant":"naive-harness","type":"ready","version":"1"},"player":1},"hash":"1b4ab4cd3d63c8d9424a85e488b9d2f009c9c0348902796213539b5587f63df2","kind":"ready","prev":"a4b2565523abc687f2398e190454def7fcd762f6d14cd0aaa438e3a39aafe7b7","seq":2}
{"body":{"state":{"heaps":[2,4,6,1],"last_mover":null,"to_move":0,"turn":0},"state_digest":"196a8c108ae8b862df2d9781522feb4004bc95415f661d02fbc8595006078587","turn":0},"hash":"4264f5362b7a13631dfa76b03dbe30f9b4ebac3d18b52d44c14a596b44e7c608","kind":"state","prev":"1b4ab4cd3d63c8d9424a85e488b9d2f009c9c0348902796213539b5587f63df2","seq":3}
{"body":{"entrant_message":{"move":{"heap":3,"take":1},"note":"source=model","type":"move"},"legal":true,"move":{"heap":3,"take":1},"player":0,"turn":0},"hash":"647b058bbb7f456148c3caee245afd3159d535a1e22a198644d46e9b800cb0ef","kind":"move","prev":"4264f5362b7a13631dfa76b03dbe30f9b4ebac3d18b52d44c14a596b44e7c608","seq":4}
{"body":{"state":{"heaps":[2,4,6,0],"last_mover":0,"to_move":1,"turn":1},"state_digest":"c39dfbbd3ac0bdc9177df442129b12e1cf0fdf9a187a232d7b2be1ace345a7d3","turn":1},"hash":"fed52bc103a5df31281557140d0668ef843e5e5f9f74b94de96382ca19f886ec","kind":"state","prev":"647b058bbb7f456148c3caee245afd3159d535a1e22a198644d46e9b800cb0ef","seq":5}
{"body":{"entrant_message":{"move":{"heap":1,"take":4},"note":"Looking at the heaps, I'll take 4 from heap 1.","type":"move"},"legal":true,"move":{"heap":1,"take":4},"player":1,"turn":1},"hash":"c86fea04e68275ea01cf91abc08cc19fe5062fd03d069f78bc9542d97c7a0d1a","kind":"move","prev":"fed52bc103a5df31281557140d0668ef843e5e5f9f74b94de96382ca19f886ec","seq":6}
{"body":{"state":{"heaps":[2,0,6,0],"last_mover":1,"to_move":0,"turn":2},"state_digest":"80f7877470e94f44beae80a58f772ce790cb161d2f7d1da1ee560bca3d40bc72","turn":2},"hash":"8d326c065d6b961ed8afdcd18bd345c819cf415ed881516c17deed2e0c14a408","kind":"state","prev":"c86fea04e68275ea01cf91abc08cc19fe5062fd03d069f78bc9542d97c7a0d1a","seq":7}
{"body":{"entrant_message":{"move":{"heap":2,"take":4},"note":"source=fallback:rejected_model_answer","type":"move"},"legal":true,"move":{"heap":2,"take":4},"player":0,"turn":2},"hash":"d78414473d935fd7fe1e8dfd0fcaa31066f71934cd530b01defc8512a864bd11","kind":"move","prev":"8d326c065d6b961ed8afdcd18bd345c819cf415ed881516c17deed2e0c14a408","seq":8}
{"body":{"state":{"heaps":[2,0,2,0],"last_mover":0,"to_move":1,"turn":3},"state_digest":"cd7ffe81022fdb66b06e18234db43c29d7e3a53f58c705d13db44482a3697c1d","turn":3},"hash":"810cda7c0bded675759a706c170d7dde95adbde75a631777bedf453bb6175e41","kind":"state","prev":"d78414473d935fd7fe1e8dfd0fcaa31066f71934cd530b01defc8512a864bd11","seq":9}
{"body":{"entrant_message":{"move":{"heap":2,"take":1},"note":"Looking at the heaps, I'll take 1 from heap 2.","type":"move"},"legal":true,"move":{"heap":2,"take":1},"player":1,"turn":3},"hash":"2c0d3458cef9055c24984aa038c987e50da79ea24ed64ab2ab77adcaa1524f13","kind":"move","prev":"810cda7c0bded675759a706c170d7dde95adbde75a631777bedf453bb6175e41","seq":10}
{"body":{"state":{"heaps":[2,0,1,0],"last_mover":1,"to_move":0,"turn":4},"state_digest":"2d36434cb50d5435e6c2413421b6a24918a575566ca5708a8816dd5110a877b7","turn":4},"hash":"178a99ddbaeafb23bb839af0650208d2535acca0f453e951354c36f45bc2d19f","kind":"state","prev":"2c0d3458cef9055c24984aa038c987e50da79ea24ed64ab2ab77adcaa1524f13","seq":11}
{"body":{"entrant_message":{"move":{"heap":0,"take":1},"note":"source=fallback:rejected_model_answer","type":"move"},"legal":true,"move":{"heap":0,"take":1},"player":0,"turn":4},"hash":"3e4815799881792166fe2fb5c1bf21d14644b766ccefb3c1666766e947408bfa","kind":"move","prev":"178a99ddbaeafb23bb839af0650208d2535acca0f453e951354c36f45bc2d19f","seq":12}
{"body":{"state":{"heaps":[1,0,1,0],"last_mover":0,"to_move":1,"turn":5},"state_digest":"547f78d53c6960eb44bdc874bff503e21703745ba3d436cb2fe271bce7555ab0","turn":5},"hash":"950d8d42408dc9734e994510dfb5d135d1d3cec073e1962b0363700aa94a22ac","kind":"state","prev":"3e4815799881792166fe2fb5c1bf21d14644b766ccefb3c1666766e947408bfa","seq":13}
{"body":{"entrant_message":{"move":null,"note":"Let me think about this position. There are a few directions here and the balance looks delicate, so I want to weigh them before committing.","type":"move"},"legal":false,"move":null,"player":1,"rejected_because":"move must be an object","turn":5},"hash":"c92a4d3fab2deffe55003e37e3740fdddfeaafcc5357edc739807dc4480a50df","kind":"move","prev":"950d8d42408dc9734e994510dfb5d135d1d3cec073e1962b0363700aa94a22ac","seq":14}
{"body":{"detail":"move must be an object","phase":"move","player":1,"reason":"illegal_move","turn":5},"hash":"f6359903831b54ad46084e43deee14e00c24227e21ec6c7ab2a8150b5e1f0119","kind":"forfeit","prev":"c92a4d3fab2deffe55003e37e3740fdddfeaafcc5357edc739807dc4480a50df","seq":15}
{"body":{"decisive":true,"moves":6,"points":{"0":1,"1":0},"reason":"forfeit:illegal_move","scored_from":"referee_state_only","seats":{"0":"solver-harness","1":"naive-harness"},"self_report_excluded":true,"winner":0},"hash":"18554c28bb2c05e6cea4256808e64910e0586b66e83a4d52f1b6cb680715c4d9","kind":"result","prev":"f6359903831b54ad46084e43deee14e00c24227e21ec6c7ab2a8150b5e1f0119","seq":16}
