{"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":"268af65826d74f2d806baddb31dd66f0d7e809f483268f07c6136879670ccd81","files":[["__init__.py","9ceaf46768c3ab8307d10b7d8bfdb6c8fb9fa118ec96fc01d3cdaaa8b96e0ae7"],["canonical.py","ae5a9d3702692ef5dee51641253aa1847344782ee6508d488a99ac9ebc75239d"],["integrity.py","1080db8480e8fae0af647ffd9d48b674a38dbab58e665d81fa5403736054f909"],["match.py","4b497e63d6abf69528e6dd60b7854d0b7e15ebd46300f15ba9e5addcf5875be5"],["replay.py","1d01f912f34e5b142f8afe10599a50d51f883c1c105a10dbb83ff7bd6968bf8b"],["sandbox.py","f92663df93af381a767e2af07cddcb2eb694cbf80ca061e93e35c43ca06c6c46"],["scoring.py","bde02741a248ec254688158ac2378f8c37bbe59bb515e61ffaf4d6593fbaecc3"],["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":"2941b947b99fe4dd","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":1002},"hash":"744165f9670798e8f6df05a3b50101ac0f4a005ed67fa5cb3e29ae5ba8bd1141","kind":"header","prev":"0000000000000000000000000000000000000000000000000000000000000000","seq":0}
{"body":{"entrant_message":{"backend":"stub:v1","entrant":"solver-harness","type":"ready","version":"2"},"player":0},"hash":"a45996a06140fee8fbf0f81edd64fc75d7ad87716b92ed1e768509f6e5fbe50b","kind":"ready","prev":"744165f9670798e8f6df05a3b50101ac0f4a005ed67fa5cb3e29ae5ba8bd1141","seq":1}
{"body":{"entrant_message":{"backend":"stub:v1","entrant":"naive-harness","type":"ready","version":"2"},"player":1},"hash":"014fca3a1c49b4ffc7351376ce781df32bb62ad3ad600b066bf0073233f49339","kind":"ready","prev":"a45996a06140fee8fbf0f81edd64fc75d7ad87716b92ed1e768509f6e5fbe50b","seq":2}
{"body":{"state":{"heaps":[2,2,2,3],"last_mover":null,"to_move":0,"turn":0},"state_digest":"064bb985abcc87198f914d494284804759b28668a6bcff58e246502d21d2a110","turn":0},"hash":"b7530446ea0ead5d268d6a082cef34535b1cf039a79dec2779f14aa13f650fe5","kind":"state","prev":"014fca3a1c49b4ffc7351376ce781df32bb62ad3ad600b066bf0073233f49339","seq":3}
{"body":{"entrant_message":{"move":{"heap":3,"take":1},"note":"source=fallback:rejected_model_answer","type":"move"},"legal":true,"move":{"heap":3,"take":1},"player":0,"turn":0},"hash":"c9a019682a1bba84ff3b367fd5064518b848c338e9807e6780ed3b388c06bb74","kind":"move","prev":"b7530446ea0ead5d268d6a082cef34535b1cf039a79dec2779f14aa13f650fe5","seq":4}
{"body":{"state":{"heaps":[2,2,2,2],"last_mover":0,"to_move":1,"turn":1},"state_digest":"dec90d9c903ccf587e8443578d7879a33e8c1a259de63ee8b850ed133cb8d33e","turn":1},"hash":"d413d501d6afcd32be8369c520a8b445c9f8c995af03bec3dcf2bee3a656333d","kind":"state","prev":"c9a019682a1bba84ff3b367fd5064518b848c338e9807e6780ed3b388c06bb74","seq":5}
{"body":{"entrant_message":{"move":{"heap":0,"take":2},"note":"Looking at the heaps, I'll take 2 from heap 0.","type":"move"},"legal":true,"move":{"heap":0,"take":2},"player":1,"turn":1},"hash":"d0a29df48fdf9ab55650cdaa65149d64ec01d1619c9a84bec8f9549b38bc0fa1","kind":"move","prev":"d413d501d6afcd32be8369c520a8b445c9f8c995af03bec3dcf2bee3a656333d","seq":6}
{"body":{"state":{"heaps":[0,2,2,2],"last_mover":1,"to_move":0,"turn":2},"state_digest":"6f581f27ca8e39de26b4a4afda7a9b611c9ad0daf6ae4f7c19a061f19a66af0b","turn":2},"hash":"d340b4d0a2b317071499e28bf7409435715d3ce88f4191bc1236a31c2e3cffc2","kind":"state","prev":"d0a29df48fdf9ab55650cdaa65149d64ec01d1619c9a84bec8f9549b38bc0fa1","seq":7}
{"body":{"entrant_message":{"move":{"heap":1,"take":2},"note":"source=fallback:rejected_model_answer","type":"move"},"legal":true,"move":{"heap":1,"take":2},"player":0,"turn":2},"hash":"1a8b071bf9d0ee7d92f108a6155fdc9f3e7ac5566617918964a7f5a673d27850","kind":"move","prev":"d340b4d0a2b317071499e28bf7409435715d3ce88f4191bc1236a31c2e3cffc2","seq":8}
{"body":{"state":{"heaps":[0,0,2,2],"last_mover":0,"to_move":1,"turn":3},"state_digest":"8cafcc0fbcc5c5ebda205e6124c80aa5c61e9ffe9d5594556ecdbee91add118d","turn":3},"hash":"6ab9c19061a9a6e667c98dd6fd3732939d2f3199e5472a89c01187de13ffd662","kind":"state","prev":"1a8b071bf9d0ee7d92f108a6155fdc9f3e7ac5566617918964a7f5a673d27850","seq":9}
{"body":{"entrant_message":{"move":{"heap":3,"take":2},"note":"Looking at the heaps, I'll take 2 from heap 3.","type":"move"},"legal":true,"move":{"heap":3,"take":2},"player":1,"turn":3},"hash":"ce126d0936baf318818b7f5a8d611a024c10090a774a8df99f4e93388a1b1873","kind":"move","prev":"6ab9c19061a9a6e667c98dd6fd3732939d2f3199e5472a89c01187de13ffd662","seq":10}
{"body":{"state":{"heaps":[0,0,2,0],"last_mover":1,"to_move":0,"turn":4},"state_digest":"dfb41fb183b56c69f134d0c9f0e5509c7f5a58ea9b2531b1c8347a14c3864719","turn":4},"hash":"f9a79859403ff7f68f375b26a4075b652fc08c01ae13a5f4b5608fca30d36650","kind":"state","prev":"ce126d0936baf318818b7f5a8d611a024c10090a774a8df99f4e93388a1b1873","seq":11}
{"body":{"entrant_message":{"move":{"heap":2,"take":2},"note":"source=model","type":"move"},"legal":true,"move":{"heap":2,"take":2},"player":0,"turn":4},"hash":"66da0a0ac22a54339f84d63bd9ddeb0dee7cb6c2093ea2d8d7fbf75c3c73b07e","kind":"move","prev":"f9a79859403ff7f68f375b26a4075b652fc08c01ae13a5f4b5608fca30d36650","seq":12}
{"body":{"state":{"heaps":[0,0,0,0],"last_mover":0,"to_move":1,"turn":5},"state_digest":"3608af555082ebcab529a52027d7914a9385c5e12cd5544edbef8ead9846c895","turn":5},"hash":"c1094ab646c69a8c0520b60f5f16bcca601d7ed009a7472bde96f7c29e67fb4c","kind":"state","prev":"66da0a0ac22a54339f84d63bd9ddeb0dee7cb6c2093ea2d8d7fbf75c3c73b07e","seq":13}
{"body":{"decisive":true,"moves":5,"points":{"0":1,"1":0},"reason":"took_last_object","scored_from":"referee_state_only","seats":{"0":"solver-harness","1":"naive-harness"},"self_report_excluded":true,"winner":0},"hash":"663caab2471fbc76ea0d0ba760617f32f3ae8b6245fad61055fe961c62b8c392","kind":"result","prev":"c1094ab646c69a8c0520b60f5f16bcca601d7ed009a7472bde96f7c29e67fb4c","seq":14}
