{"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":"935cef8302327b32","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":1000},"hash":"eeeb4a876ed28c611f1e3cf8af75ce9c495263cca37a599e12450249c41ea475","kind":"header","prev":"0000000000000000000000000000000000000000000000000000000000000000","seq":0}
{"body":{"entrant_message":{"backend":"stub:v1","entrant":"solver-harness","type":"ready","version":"2"},"player":0},"hash":"e0079517962f2a388e055f233ffc48e45c9bf98d75eae776acca25f139a42450","kind":"ready","prev":"eeeb4a876ed28c611f1e3cf8af75ce9c495263cca37a599e12450249c41ea475","seq":1}
{"body":{"entrant_message":{"backend":"stub:v1","entrant":"naive-harness","type":"ready","version":"2"},"player":1},"hash":"9a309950c4664bdf33da4e9318136fcb92d76905663b4a704366dd6407cb5f53","kind":"ready","prev":"e0079517962f2a388e055f233ffc48e45c9bf98d75eae776acca25f139a42450","seq":2}
{"body":{"state":{"heaps":[6,7,1,4],"last_mover":null,"to_move":0,"turn":0},"state_digest":"be2201663d682d492403fd118cdfca36db2887f2e8b18fec84b105f4b50b67bb","turn":0},"hash":"1ba71a2aa9ac0af75c43b2a5a08d1584e8391b291751fb4ce2f366e84e987486","kind":"state","prev":"9a309950c4664bdf33da4e9318136fcb92d76905663b4a704366dd6407cb5f53","seq":3}
{"body":{"entrant_message":{"move":{"heap":0,"take":4},"note":"source=fallback:rejected_model_answer","type":"move"},"legal":true,"move":{"heap":0,"take":4},"player":0,"turn":0},"hash":"bd106f6b396f7994e506be570b24e69770a7f0dee691de39eb80e1a7243f18c4","kind":"move","prev":"1ba71a2aa9ac0af75c43b2a5a08d1584e8391b291751fb4ce2f366e84e987486","seq":4}
{"body":{"state":{"heaps":[2,7,1,4],"last_mover":0,"to_move":1,"turn":1},"state_digest":"6145623afe0f2c0cb006ebbb78af38ba31fa0d14e4cf7eeca60504a5065b5122","turn":1},"hash":"ddfe916644386a1b7d4462a1e7df85980c1f1f0ec46b1277b0e836c6aac90751","kind":"state","prev":"bd106f6b396f7994e506be570b24e69770a7f0dee691de39eb80e1a7243f18c4","seq":5}
{"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":1},"hash":"c096cce1d22c2215555d14409288c84aa092e9debae48e33a358c472a58e5083","kind":"move","prev":"ddfe916644386a1b7d4462a1e7df85980c1f1f0ec46b1277b0e836c6aac90751","seq":6}
{"body":{"state":{"heaps":[2,7,0,4],"last_mover":1,"to_move":0,"turn":2},"state_digest":"a7ce3218d109d57f566f294e45d8e1dd94d6480158c1142d43bcdb0eae154e02","turn":2},"hash":"09afffd6da53715ca59255d777eb5affcd8f0aa73b9c0492d9afb807d50acc12","kind":"state","prev":"c096cce1d22c2215555d14409288c84aa092e9debae48e33a358c472a58e5083","seq":7}
{"body":{"entrant_message":{"move":{"heap":1,"take":1},"note":"source=fallback:rejected_model_answer","type":"move"},"legal":true,"move":{"heap":1,"take":1},"player":0,"turn":2},"hash":"11fe9058b8e4324c934b55e998118b33a104aa95c48a96d17a978d0fcf705b00","kind":"move","prev":"09afffd6da53715ca59255d777eb5affcd8f0aa73b9c0492d9afb807d50acc12","seq":8}
{"body":{"state":{"heaps":[2,6,0,4],"last_mover":0,"to_move":1,"turn":3},"state_digest":"ffc6287a84b63480d94ba3a84b479f58a0d65e134b6825234157b7459bf993cf","turn":3},"hash":"16fc472609b39d485278d8910783eb94a6c2581b2a789b7c46674a6ff5ea2279","kind":"state","prev":"11fe9058b8e4324c934b55e998118b33a104aa95c48a96d17a978d0fcf705b00","seq":9}
{"body":{"entrant_message":{"move":{"heap":1,"take":3},"note":"Looking at the heaps, I'll take 3 from heap 1.","type":"move"},"legal":true,"move":{"heap":1,"take":3},"player":1,"turn":3},"hash":"e193cf519e7b832e8acc1807f35adc56901eaeecf0d99199a7b2d96da4ce3952","kind":"move","prev":"16fc472609b39d485278d8910783eb94a6c2581b2a789b7c46674a6ff5ea2279","seq":10}
{"body":{"state":{"heaps":[2,3,0,4],"last_mover":1,"to_move":0,"turn":4},"state_digest":"ca4997829302cdb477d68c4af856f0c42d9b9404d748427114e2080b41c1ed7f","turn":4},"hash":"43ee23592a781944858b880b9be55dd2888f3d254a5c265e995c08ec87b2e5de","kind":"state","prev":"e193cf519e7b832e8acc1807f35adc56901eaeecf0d99199a7b2d96da4ce3952","seq":11}
{"body":{"entrant_message":{"move":{"heap":3,"take":3},"note":"source=fallback:rejected_model_answer","type":"move"},"legal":true,"move":{"heap":3,"take":3},"player":0,"turn":4},"hash":"2106ca19e9ba7a8c6c1a5a1b1e82201ed6541d8d614f5ade1885c5f1a0e332e0","kind":"move","prev":"43ee23592a781944858b880b9be55dd2888f3d254a5c265e995c08ec87b2e5de","seq":12}
{"body":{"state":{"heaps":[2,3,0,1],"last_mover":0,"to_move":1,"turn":5},"state_digest":"db5964486c5bd9cb54a037cd9a615402cbc370e2140ed6b179e45af018395d9a","turn":5},"hash":"d4a80fa5245a5d2b9d3141a98a42b931713603e4abeeaf9d52ba17f75485a3fb","kind":"state","prev":"2106ca19e9ba7a8c6c1a5a1b1e82201ed6541d8d614f5ade1885c5f1a0e332e0","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":"c9fe6ee0922dad86cbee90a6faf8eca40c473380b5fb8a55469c01e3f252cc23","kind":"move","prev":"d4a80fa5245a5d2b9d3141a98a42b931713603e4abeeaf9d52ba17f75485a3fb","seq":14}
{"body":{"detail":"move must be an object","phase":"move","player":1,"reason":"illegal_move","turn":5},"hash":"5688f4649e000ec9b3415247ba6f4118223bb69a246409a6f877c9aab890f985","kind":"forfeit","prev":"c9fe6ee0922dad86cbee90a6faf8eca40c473380b5fb8a55469c01e3f252cc23","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":"554235f96071f09505459335f0825812ce5c814a94627d8690269b297e593f10","kind":"result","prev":"5688f4649e000ec9b3415247ba6f4118223bb69a246409a6f877c9aab890f985","seq":16}
