diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/BEFORE_SOURCE_MAP.json b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/BEFORE_SOURCE_MAP.json new file mode 100644 index 0000000..fae6a8a --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/BEFORE_SOURCE_MAP.json @@ -0,0 +1,5630 @@ +{ + "AGENTS.md": { + "bytes": 605, + "sha256": "8d8dc40211390275f858f322743309a0663c4f2d859780a8b8a08cea1450e8b3" + }, + "Makefile": { + "bytes": 16480, + "sha256": "a008d11c97b0cc655b6b87e0b382c1eefbfcae51848fe4fb434d178cd6815abb" + }, + "assets/audio/bgm/tree_theme_back_candidate.wav": { + "bytes": 7526444, + "sha256": "efe4cc1aa588661d73376720e4278427f7220ce93a5d446f198c5af607c141ca" + }, + "assets/audio/bgm/tree_theme_back_candidate.wav.import": { + "bytes": 549, + "sha256": "aedbbd43ca5ef33eada0aae53191ab9c0e321bb05289e7925c002ccd49c1eb15" + }, + "assets/audio/bgm/tree_theme_front_candidate.wav": { + "bytes": 7526444, + "sha256": "6df0a7af307327f703c9325f5ca2ac456888102d50ef1fa76bf4cdf19d2b86cb" + }, + "assets/audio/bgm/tree_theme_front_candidate.wav.import": { + "bytes": 553, + "sha256": "0f02aa9a0737018164faf573933f25a506c973c3dfe99f4ecb0a90c99ad01f26" + }, + "assets/audio/ui/License.txt": { + "bytes": 574, + "sha256": "f7966c773bbed0eca6a9c75081c44a178b38eae112724dbb5fdfbd4192d118a9" + }, + "assets/audio/ui/bong_001.ogg": { + "bytes": 4848, + "sha256": "d21d0f0b782445db579d11e2506b24cd1ac9d664ee33aeaf807761aa7b6fd710" + }, + "assets/audio/ui/bong_001.ogg.import": { + "bytes": 396, + "sha256": "15f986d02ba57dd4435edf77723b8ea7dee9fdbe629f268f4c3880b8fd4722c3" + }, + "assets/audio/ui/click_001.ogg": { + "bytes": 4876, + "sha256": "ccfb7fa0cccdd9faec0eb16033c732b1e308d139d80f799161495d58f7adcdb9" + }, + "assets/audio/ui/click_001.ogg.import": { + "bytes": 399, + "sha256": "460e5a751e591a61df4a2b3317b2666644934bf3727f8d1c33e84038b64a518a" + }, + "assets/audio/ui/confirmation_001.ogg": { + "bytes": 8968, + "sha256": "063564703b6094d70718a3e787a55cc9141611e4ecd6b6637f8828f79b4a8c3a" + }, + "assets/audio/ui/confirmation_001.ogg.import": { + "bytes": 420, + "sha256": "b03ac42050d89bff458fbb31eec26de3081272edb6406a51098ff5e76a214cf1" + }, + "assets/audio/ui/error_008.ogg": { + "bytes": 9215, + "sha256": "eba17ecb2a426bfd4a8a6acff5f8a86202b6424a77af0fd842e37809a1ab6d81" + }, + "assets/audio/ui/error_008.ogg.import": { + "bytes": 399, + "sha256": "a2ec2bfc2fc3f30f936cb3756e1c752e7d58090ea29cbeebc620a8b06f4f219a" + }, + "assets/audio/ui/source_manifest.json": { + "bytes": 1330, + "sha256": "f981c2ce12ed364010217dee996908f037d2abfcc3b21b8cf501dd591f7744c9" + }, + "assets/icons/project_icon.svg": { + "bytes": 1054, + "sha256": "25cc327f9d3bec159a48a11b85dddcbb614f1b673dfb975dc8ddc130f248a86b" + }, + "assets/icons/project_icon.svg.import": { + "bytes": 1049, + "sha256": "a2e07249a4eb8dd76a0e2f91f5cb5a1197d69d32d3b4fe3dcbc9935017512699" + }, + "assets/kenney/README.md": { + "bytes": 5280, + "sha256": "aaf2b3f1ba7b747709d5910389acaaca2beda2a1ca8eed12b0abfd81ddb3f1da" + }, + "assets/kenney/sources.json": { + "bytes": 724, + "sha256": "708f5980d0e740f6a7bf1e7fbd0d8964292729309c1a3eeafc367fb94f119b76" + }, + "assets/kenney/tiny_dungeon/License.txt": { + "bytes": 570, + "sha256": "9f574a2f1f636a3db8a0665ba90212f34e2b5e61ecb533d77c05237766374111" + }, + "assets/kenney/tiny_dungeon/Preview.png": { + "bytes": 17553, + "sha256": "b6023d3a9504f84bbd128d21680d0899c7a150bce3443d0861590f3f3de1c24b" + }, + "assets/kenney/tiny_dungeon/Preview.png.import": { + "bytes": 952, + "sha256": "2f07b4aa6b1b711dc4993e4b3ae0ac51d73f3b857bd2a81d579a31c3af0efec0" + }, + "assets/kenney/tiny_dungeon/Sample.png": { + "bytes": 26519, + "sha256": "2b922fefcaa5728986e0b5c1fb901a51c3e571c39e6bed1a22fa1ffdf504370f" + }, + "assets/kenney/tiny_dungeon/Sample.png.import": { + "bytes": 949, + "sha256": "b457890599ec46167078c3ae0a2b9eb0ff150f7a200ef572bcfd04a74969425d" + }, + "assets/kenney/tiny_dungeon/Tiled/sampleMap.tmx": { + "bytes": 5514, + "sha256": "3849e083e3d4f6a71dbf725d8473e93fa6ef8cdc9d314368eee15c980cf41775" + }, + "assets/kenney/tiny_dungeon/Tiled/sampleSheet.tsx": { + "bytes": 249, + "sha256": "a2cca2c5e50b14023ce00f5d4112fb0b8264bfff9407d7a5198656e28d67fa16" + }, + "assets/kenney/tiny_dungeon/Tilemap/tilemap.png": { + "bytes": 5533, + "sha256": "5653222ac495d89e942f9b636300759b3f38e85b26e9b888676f2e9ab834095a" + }, + "assets/kenney/tiny_dungeon/Tilemap/tilemap.png.import": { + "bytes": 960, + "sha256": "bf838a715d001bbb137349b609997e313293412bd72c4411457c5fd90bc5b68b" + }, + "assets/kenney/tiny_dungeon/Tilemap/tilemap_packed.png": { + "bytes": 5294, + "sha256": "d24e60a41e4ac7a745c0304dfde121143688557f40215f23221c29cfe683825f" + }, + "assets/kenney/tiny_dungeon/Tilemap/tilemap_packed.png.import": { + "bytes": 980, + "sha256": "a9f6dea88271040a123f8dadc1e117c67084ccc855ef09ebc77b54ff8c0a693f" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0000.png": { + "bytes": 99, + "sha256": "ebf91e6638d484dc6bdaec5f30e91589252125146b70c2911f11fac7ebe17090" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0000.png.import": { + "bytes": 964, + "sha256": "d2ee2725786dca68b1d21e296c2a81fc279c8259a63c15de06b30e56de54ba76" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0001.png": { + "bytes": 126, + "sha256": "cd86d8a06512f6e1bb97110fdefc9dbbd64ea4d50e0c04158860d8420145c346" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0001.png.import": { + "bytes": 964, + "sha256": "5e6379cb6e1b89c2653fe14cd16e4af5751250648bd67d8030bf501178ec88a4" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0002.png": { + "bytes": 150, + "sha256": "1bee42a448291ff9259c6afee8151478238d1c2f49e74f3323577e0110b8fc67" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0002.png.import": { + "bytes": 963, + "sha256": "c5b344b00fe86fcaba2d8c267d32f64a7f43dc92e5264aea340c25228abc445d" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0003.png": { + "bytes": 126, + "sha256": "2c0b45910d964d71112b81f7be17cc9a24169d4942c64ce8b59ea0f3f7490ca8" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0003.png.import": { + "bytes": 964, + "sha256": "264d6dc36cbe30449296f4cef60534a757c3aa52756565037b74edbc981873e3" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0004.png": { + "bytes": 178, + "sha256": "f3ea334d2be859c68ad1d1ff9c3314905ac12030cd65ce093e4ee8ec3c6b202b" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0004.png.import": { + "bytes": 964, + "sha256": "2b84bf3933f098d37f55ef9f24d6b7159da887ee79a6efed315a6c0b6db3abf7" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0005.png": { + "bytes": 181, + "sha256": "7ed587c0ae06d8c8dfb683ff25b7119c6600f21364a253301a3faf230a1eb0e6" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0005.png.import": { + "bytes": 964, + "sha256": "2cc2a4d9c7321618893d1a933f8105b5d92a67e8642413d3d33291442687a82b" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0006.png": { + "bytes": 164, + "sha256": "34fefe03ad9f435a777c81e56e288ead41dc3a0654088d85b51cb36e5579a0d3" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0006.png.import": { + "bytes": 964, + "sha256": "ff1e3aa0414574cf8f5beca3176fd29f1df73ca0600a1402945bb73d23a6a128" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0007.png": { + "bytes": 180, + "sha256": "883ba3a3fb022b373db047b9dd19ae67f2611e584190a82d45d2b8d3f21dfad2" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0007.png.import": { + "bytes": 964, + "sha256": "575137be3664def1c637addd42c607f761264da52e628567d149023cf58ae87e" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0008.png": { + "bytes": 209, + "sha256": "23721149763a8fd6071857c19e01d0967c769e80ae89bbe968bc88a4816fc4f5" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0008.png.import": { + "bytes": 964, + "sha256": "f4a3987f3cb6f585f59c3b98c3f77059b15e99eeb7d4070d6c2a7164a79180d1" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0009.png": { + "bytes": 174, + "sha256": "c8b7b183b0750dca16581173d7de4862ee01e937b1c414de526da5b75574adff" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0009.png.import": { + "bytes": 964, + "sha256": "da2c7eaf041745c0a29f42c6cae66110b530e4fb87908ffd90b8dcb17c5f4893" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0010.png": { + "bytes": 159, + "sha256": "ba622a41d8fac8885d65c9cac01f35f3c6a3e7782c7c5eb375fafa78bafa9868" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0010.png.import": { + "bytes": 963, + "sha256": "2534a51f498cf3d3c8c9296702fe71ea4194caaff6a1658e6f9d5c5d2d7e252a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0011.png": { + "bytes": 163, + "sha256": "22b9237af31b12ff6cfaa1ed3b520383e93380c4e1582b7feafd76a9e9344426" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0011.png.import": { + "bytes": 963, + "sha256": "b4eeb06a30b61399af5024ae456a1662f2bc5ffbde4bcab81e1236a830d08cd8" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0012.png": { + "bytes": 160, + "sha256": "dddf38ef416861eb38c499eaf8fdeb62051b577d5e33699fd42b46a198bec5f9" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0012.png.import": { + "bytes": 963, + "sha256": "9a1e2c10e21c981b04ca0b691986bf72276aa765ca3219a4a0fcd044e43afc72" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0013.png": { + "bytes": 110, + "sha256": "4eb6fedc53053420bbe92517109c941bc53cd114094ba9f9b8bc20802548d254" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0013.png.import": { + "bytes": 964, + "sha256": "fd0a12cf8b1eec44461d79c80249c1723611011165a5ae79eaad441ff3083f71" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0014.png": { + "bytes": 143, + "sha256": "0d4f0c82ffb4c4158342fc0d7fc95cef22ff509003d711e84ec3b5ba3cee21f6" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0014.png.import": { + "bytes": 963, + "sha256": "a1539b2fa84f3f45d4b466ba0a2c724bd816116c0bc80c4367a4b53d23668c05" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0015.png": { + "bytes": 110, + "sha256": "fdee6e6ccd725ae07348d4da5740b5837bf516a4e519f55cc6b5c566b5f5aa4d" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0015.png.import": { + "bytes": 964, + "sha256": "6d8c2c207a83ebeb1b75afcbc1611df9776049e36969da75e89c4e0359362690" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0016.png": { + "bytes": 147, + "sha256": "62e5de639001c66c44f2aa84e3fd1eee56d99eb234c82f2d5b2f471663592bad" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0016.png.import": { + "bytes": 964, + "sha256": "8446069b21402c666132507fb5545b6a36d83886e943e1a71622be4d04904050" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0017.png": { + "bytes": 152, + "sha256": "714b92d97d613bbcf4d15c553a0c85fa29a2807a2601ac1395b8f45da6575deb" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0017.png.import": { + "bytes": 964, + "sha256": "3c293374b0765f1ae0c1ac6497bf82d8c133cdb1d717bdc094f77d79120aba20" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0018.png": { + "bytes": 176, + "sha256": "b331519c825010a8d061b740a1127e3d711c2b447d6db1fad27f371acd1a1870" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0018.png.import": { + "bytes": 964, + "sha256": "b560d21a34861afe6e1a539c0ee95f36ac8ce70b711529c23b37d3a24b6820f0" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0019.png": { + "bytes": 182, + "sha256": "77031b04b17129b8142c6ca80dc10d265fb94c39a443f17ecfb2e48d9a7c2a16" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0019.png.import": { + "bytes": 964, + "sha256": "189b85909461ed79467e328a7eeabcad81769e1375891327dd1e35cd689a3ca0" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0020.png": { + "bytes": 211, + "sha256": "8ed3c08b77ef4e6ead26858f95efcaa302f5f014aaf3b26b49dd2bea991eecce" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0020.png.import": { + "bytes": 963, + "sha256": "8c917c6c480095a65fdb0c30b80f338c644ddc16538276ce427f8c3f54a77aa8" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0021.png": { + "bytes": 182, + "sha256": "9def7eb7a3b00190148a55367c08ecfd4a03b66096e585b0c07b6f21277bb4fd" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0021.png.import": { + "bytes": 963, + "sha256": "7bc86d56e6da25eaba3101bf3487dd4906e023cbe4b5b0fd4ce2ee765157e796" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0022.png": { + "bytes": 173, + "sha256": "24298faf91a61a57d158435e9fa75ca30ab88bbfddae797e2a268b1064787f45" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0022.png.import": { + "bytes": 964, + "sha256": "644ef16b27b940649902e7b7895f8466bfdb86c0d6b34551d2e694979d6e877b" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0023.png": { + "bytes": 172, + "sha256": "ff3ac631206dd4882134b8719368519644fd26703ea289a7237924e9d622f208" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0023.png.import": { + "bytes": 963, + "sha256": "a9a132ffbfc88d3daf7da99e0275ecb9e1ad5f640b2f353fc0d0a6f5660e2eec" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0024.png": { + "bytes": 175, + "sha256": "3f4d77da84e948836c16d2c81f2812b7805e76147921f0ea9f047705f709a62a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0024.png.import": { + "bytes": 964, + "sha256": "6b6adb283d924e90c39057fe14b39a69a82de88c5ce41814941e9b774024e6c3" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0025.png": { + "bytes": 139, + "sha256": "5782701dc1d3d19c26f26cf1b147a044ecbc8535766ffa33ed93eee0e8bec2a1" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0025.png.import": { + "bytes": 964, + "sha256": "64f7e8079d8a7f196426358e88b74d260561bfd15bdaf3e0b91c4475435ada3c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0026.png": { + "bytes": 185, + "sha256": "a18f13529118365c4054f2b6dc7379190c8d99fc70f2f1c374f6e95f532630ce" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0026.png.import": { + "bytes": 964, + "sha256": "cb5a5a3d5bee910a70df0f8e25fbad07be09ac806d492c2c1db62a7aab4544f6" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0027.png": { + "bytes": 139, + "sha256": "c9ddc3f83a9ecb1d340d2925df3f99f34542d8be1514c53e82c71500c5537ced" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0027.png.import": { + "bytes": 963, + "sha256": "4a7597bc2bda6042e10c7b585d2c3fd2e76630a76943df053df180e147b6737d" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0028.png": { + "bytes": 149, + "sha256": "7a67b0ec169f8a967906b2272927f4d4dd34ee60e0e066ad1544deaa9cf86d08" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0028.png.import": { + "bytes": 964, + "sha256": "c29861abdad7b6b8fc8d4b7cdb87bc4c03143f3c2ed8c874d3eaf227fdd0d18c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0029.png": { + "bytes": 208, + "sha256": "9a448977535c4af375b3db4800112ecde93e0d794b393e0cacf1dd82b4d9f971" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0029.png.import": { + "bytes": 964, + "sha256": "1a3750e0201db636c8f958ee3aeec374fbe67ca6b63554e7747f330891ee924f" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0030.png": { + "bytes": 138, + "sha256": "50ba69228b0185e84fe73b4beec8837e275c7be1b8bde1981484feeecdf02199" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0030.png.import": { + "bytes": 964, + "sha256": "2a9a4bb022675699f2d1ec7e4729f2f7062eb6dea5e5441359010388c293c4bc" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0031.png": { + "bytes": 171, + "sha256": "3cde5a77140e4d8ed160e37cd14789aa9901c4808e2a6b0c109fd1502ca8deb2" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0031.png.import": { + "bytes": 964, + "sha256": "8a20c49664451213ebde427d13a75784714d48c1045667b273c5aa4ae973e956" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0032.png": { + "bytes": 195, + "sha256": "82ee687a8c6b7929ad25f4f9497a2e96b54b00c68cf174c405b77b74b456df33" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0032.png.import": { + "bytes": 964, + "sha256": "6a6465c0f6de7afcbb777b1f683f8b7e51419df028862a2aed0a9b8c931ccbb3" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0033.png": { + "bytes": 202, + "sha256": "928dcac1d9d2df6fa2ac8916edc35f409605e70e387321a7cbd5ba26ffdc3b5e" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0033.png.import": { + "bytes": 964, + "sha256": "e63e0301efe85bc1809dd9f9bdb6600be5d7f86286326db0e0a5a2a83d0f4c1c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0034.png": { + "bytes": 196, + "sha256": "7e06aac6ac40317d4699b9bad6c5fdcaea4df1aa350878a6c825089db6133f82" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0034.png.import": { + "bytes": 964, + "sha256": "8cf4d9a16f38acfaaaefd476a625680587832b1af7dfff95526e5775991fb0eb" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0035.png": { + "bytes": 198, + "sha256": "9fa58f97f4b8cd794179d8d2110c6180b69aa2030f449d734d69466b58eed2fb" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0035.png.import": { + "bytes": 964, + "sha256": "9db3eab2eee3fd4dd410a9880de037979ebc93513e0bed55f94fda8ffaaaffa7" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0036.png": { + "bytes": 139, + "sha256": "d0be450733fad7bb93599113861381e3caedb8e0fbf30bd4e120024547689582" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0036.png.import": { + "bytes": 964, + "sha256": "89471bffa6dbeac880929017273905e009530c7d8dcaa6dae5e8d160357d6f1b" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0037.png": { + "bytes": 130, + "sha256": "dff77f0cd9bf86fe3f6ee4ebcb4074c2a30ceba18e5966022b0fc74a339e036d" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0037.png.import": { + "bytes": 964, + "sha256": "2b24f7c317aaa8537d10c9fde48001d6b7c826e072e48ceeabf5c6f2207b1bd8" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0038.png": { + "bytes": 145, + "sha256": "0b8d843daedf04706f865ad877e71d2d9ad1ce1dee01073071d286fd5aafdbdb" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0038.png.import": { + "bytes": 964, + "sha256": "2d5859414e107400a02d7264c45c8e755d2b68a12686fb6fe0a043f75d5df38e" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0039.png": { + "bytes": 140, + "sha256": "7dc16b81fa82f7fdd377d68bac398a8358438599d1036c509de913abcde64683" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0039.png.import": { + "bytes": 964, + "sha256": "f735cec3117457d60f3971d8ef1b9396378556bcabdd81b5d94abc5b0a5c6e91" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0040.png": { + "bytes": 128, + "sha256": "7541f8325e46dc4d5f0707819c0b6cbf48dab832727c2bca54a4380991b6cf10" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0040.png.import": { + "bytes": 963, + "sha256": "2d76e4eba2cc90a8147d17bcc02f995ef34775c6b672172def58aab521e9f393" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0041.png": { + "bytes": 178, + "sha256": "0fbb63362251a29d741280e59f5d9cf29c80c0fcff0532cc9c8530936d873994" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0041.png.import": { + "bytes": 963, + "sha256": "0536ea4e95d8bc1c40f64253cd6b8337d7f64605b708aec08ef3f96ba38fbfc9" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0042.png": { + "bytes": 142, + "sha256": "8dc63d1b4fc05e9ef0dc5ad22788e49e4b37477d4e85de2c2e420d22fe4cd958" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0042.png.import": { + "bytes": 964, + "sha256": "772ad95c984a2cdeea252d17c919252198b5812d589a2db8b47d75a24782c1c2" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0043.png": { + "bytes": 155, + "sha256": "77511b6490f69a9f4991ac807a7a53bb946077883d629ae21f935989709067ea" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0043.png.import": { + "bytes": 964, + "sha256": "65b0a6d2713c91c57bc6c723aea7e31b5651d58f22ec2d9c746150fcb1d8d4ac" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0044.png": { + "bytes": 170, + "sha256": "e4deaf3ebddc654a8e3d075e41cc78a29fd5e5635b3d6646e6b36da10d63ea20" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0044.png.import": { + "bytes": 963, + "sha256": "71e96dc704b1ba28110d8a498373612da745fa0416f61bd26186a1adbc6114c0" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0045.png": { + "bytes": 191, + "sha256": "4f5d0fd34c70872b66f2418b6cae9c9c9e3aca133bdec0b0dbf860ce82f9f225" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0045.png.import": { + "bytes": 964, + "sha256": "e8ab3536295cf9430348c596d45fade72dc5588dad3f5ae9c266af418afdcb62" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0046.png": { + "bytes": 180, + "sha256": "acc19c7eee1b0c89dc9bacda260c7678490967389e41cdd8186c2fe82cee78c5" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0046.png.import": { + "bytes": 964, + "sha256": "b7dbd1c9cf4486c44c5776950faaad696ee08a5e626cbfb04b89c71d3f8f220a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0047.png": { + "bytes": 178, + "sha256": "ec5c217c482cb5921717c5577049846283f689c993b65ca57a9dff5d245ff635" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0047.png.import": { + "bytes": 964, + "sha256": "637fe3dac5a28dfed0968919601b6f41602b6a8b741454c8b72d57f1e09ec6e6" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0048.png": { + "bytes": 99, + "sha256": "63519065228f5f8af6200d979fa54cd7f00650034ceea10a1609203a34b3ff9b" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0048.png.import": { + "bytes": 964, + "sha256": "cba4428600f9f9ba04c2d2ba9f21dac3e5f8f5f46053db20b51cfce0f658a2d0" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0049.png": { + "bytes": 130, + "sha256": "c4257bfa85878e4d293237cd9a50e72b3e883f721e4fe1c48132514bb93668f2" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0049.png.import": { + "bytes": 963, + "sha256": "7fa9a04310b88953632d038b4333316cf7939ae04d1986b5063a82a142031fc9" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0050.png": { + "bytes": 109, + "sha256": "af45eaf5658a481cbf5645ed006ea59072e8bcdbe481b15a55204179d291f5c7" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0050.png.import": { + "bytes": 964, + "sha256": "b8fb7762d3d8f7a785a3950ea7a9f28e39509c55e24efcea4f4fe7a40389ffc0" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0051.png": { + "bytes": 133, + "sha256": "2c10663f36fbfef2638b018d8ed3c11f1e2e3c62fd63300b13e7aeb39273eb97" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0051.png.import": { + "bytes": 964, + "sha256": "3ca6f522182d9ad8221d99e274a40d4dfee264a9b0376fbe645566f7012d4162" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0052.png": { + "bytes": 122, + "sha256": "d380d7941b23178f8a90ff41f977bb459890f3a5f4b29f9c159859221d8f9704" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0052.png.import": { + "bytes": 964, + "sha256": "8197c899da320e49e6940796eb6400b0dc5339cbbc197daa8aa1b2d68c14ad46" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0053.png": { + "bytes": 110, + "sha256": "e3d67fdc99ebea256141127ccfeb4103821db7dca11d099639de32e60b05b47e" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0053.png.import": { + "bytes": 964, + "sha256": "590f9ef3073e542af9f58859d5edfedbf39f5b885216d1e7a645abe2ba8f842b" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0054.png": { + "bytes": 184, + "sha256": "1a9ae3a209decf1f4b8df62d354edd7dfa1f7d4101ab14819f181a8e51b5ce20" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0054.png.import": { + "bytes": 964, + "sha256": "1ce511a1a0e42e861306810bfd465a5ab74ba8edce54f9a8534072e829592ace" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0055.png": { + "bytes": 182, + "sha256": "5a17519655807550ae9a90ae9618772d6bb67e856b9920ec090ccddcc3057e2c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0055.png.import": { + "bytes": 964, + "sha256": "e777d42f7be968193a63b57a5a1bb7ad6471a998808b2be37d7d3d8f75949090" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0056.png": { + "bytes": 207, + "sha256": "3dce1fb1d0ab8ecc5b168449b9cac11709a221f53d7dc49d31c4c7c96bd5ea2f" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0056.png.import": { + "bytes": 964, + "sha256": "f1db34ff7f4a308ba9e24fb674d29180e7545e0507c4aff8d212fc964a911a0f" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0057.png": { + "bytes": 135, + "sha256": "2d553978f4663e6fde5d5eb8dce1db9fd9aff9823c04c4ac9b5434625910c6c2" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0057.png.import": { + "bytes": 964, + "sha256": "9319f34fb9368987576820d5ab2e4668651f530aeddcf450239cc2f49105f6dc" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0058.png": { + "bytes": 140, + "sha256": "d010f83dc263ca1b3b4788ef380c7ef5695a21493c7db10e423c9891e2eac730" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0058.png.import": { + "bytes": 964, + "sha256": "3b03fde4d5af174fec7e6445f9c0d0a10943b3adf150d643c890c55c2b90c96c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0059.png": { + "bytes": 134, + "sha256": "78d2be3cc11b4dfcd3bdc6f90a34ff564f8d8216aa3ad7abf11bdd349bba02ee" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0059.png.import": { + "bytes": 964, + "sha256": "0717f7db32e65e3a39165aea886d068f54daea4c2d17820210bfe7bd601c4746" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0060.png": { + "bytes": 140, + "sha256": "c0c9ba7c823d46b2baf1fd4134c36f8e966b840b5f79a95a7585a0b3252a45a8" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0060.png.import": { + "bytes": 964, + "sha256": "7226f7300362db2c7f07da2572214d2feb462cc60ef9d6bffc05e264be379bef" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0061.png": { + "bytes": 149, + "sha256": "c090e00663c0b81ad5769020fc450f1f0d32fb9420072f41ffcc939cbc25acb8" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0061.png.import": { + "bytes": 964, + "sha256": "f0f1191c80e6540708177aa7e9c86c4665fa5cd879be7aa690142dcb237efc7b" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0062.png": { + "bytes": 152, + "sha256": "cf66bddd9f4b4ecea0ac26406e487cf2639d373a2d5f21f1efd3cc6992272399" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0062.png.import": { + "bytes": 964, + "sha256": "8cc140b869b4a89745e4e2ed20f7979c622dbd9ef0a70da892f0dd3620eb8d9a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0063.png": { + "bytes": 167, + "sha256": "2c7d1a1fdf12a6cd37cfb82f9c38e18cfc8fe28963d1c33ab97379671cdd1aa4" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0063.png.import": { + "bytes": 964, + "sha256": "a89ee8f834325d059e2fc98d324d0549c186bdbde34d37c98d3914c759c48e5f" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0064.png": { + "bytes": 176, + "sha256": "b2ddf6178c613f3725e1e28830514d378649238e695b0d0b74ca5b471f880fa5" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0064.png.import": { + "bytes": 964, + "sha256": "48a2e71c34dc75c397131503c5d081862f8f46fb31e108ca7297a0f22f5fda0d" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0065.png": { + "bytes": 177, + "sha256": "cb304f8bfba830e8213f357e0ad9b255e63aed2574cf5a2b3c351490d28dabf3" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0065.png.import": { + "bytes": 963, + "sha256": "f7dfae80dfe064a164d026c518a4451ee84503595662ddcef2a08fba6a631ce6" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0066.png": { + "bytes": 192, + "sha256": "601f7619c0103424fb76a2fe0ef6f086fbc29a404f2bfba2dd16fa6dc141e9d9" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0066.png.import": { + "bytes": 964, + "sha256": "1d7c9a74514e5079854177371fa1fcaf8e90012dd70d2abe10acb0529d74729c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0067.png": { + "bytes": 170, + "sha256": "9cbd5a8a7bf7f43eb6a7429698e99e829c57997c5022018a8b60ba9a70e51ccc" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0067.png.import": { + "bytes": 964, + "sha256": "a894d09c07e462ee26569489fe6fe1e17cb7171faa6c5442f89b61e8e039933b" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0068.png": { + "bytes": 181, + "sha256": "f90351394da9efc3b61293c20378f50d30b3dd531a9fd83b4367927e7bf9c144" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0068.png.import": { + "bytes": 964, + "sha256": "79c8232f2fa454e2746ca3616b99a0701f4ccf0471910a878de40c35de0edd17" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0069.png": { + "bytes": 206, + "sha256": "5a09ecf571abb5bb4d2b727b054d7417a0bafc1ac82a4a0ffe7eccc2561ad556" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0069.png.import": { + "bytes": 964, + "sha256": "71ce9ba09dbab8f2cb4925ed4b2d4463a06d76d098294e99c2f8ab628154ae8a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0070.png": { + "bytes": 170, + "sha256": "56ae1a17ea808d02da78e58b5d6dc58a6ea62287b4addb81b5a6967dc2245a5a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0070.png.import": { + "bytes": 964, + "sha256": "2dbaafb49240e3b1e9859328c97af6ad7aa2e5906167faed70dbb6472dab5856" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0071.png": { + "bytes": 201, + "sha256": "33589077ca1518bc453aa63bf2f1810d67422bea07ed5db8f486f8257478d154" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0071.png.import": { + "bytes": 963, + "sha256": "9159e76287627a6abd02deb245de79b2ab4907a4f5bc6533be6fa78b341ba310" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0072.png": { + "bytes": 163, + "sha256": "a977172d74aef292a924c867d7d2744ac1c4720f9a9f7120c0dec4ca1b9e9e00" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0072.png.import": { + "bytes": 964, + "sha256": "b31248d4d6f4fb97d5ed8bd20239270f7e4432eb8b28430c1f5b4e7e2479f474" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0073.png": { + "bytes": 161, + "sha256": "138b74609bc477ca5bacc3c8c2b6d80bfc0362c81f163e7b6dcb063526c97f89" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0073.png.import": { + "bytes": 964, + "sha256": "67303e732e3337229f09cef22f60de192f0e52e02f8159568338afa648a1399e" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0074.png": { + "bytes": 201, + "sha256": "cfb675c1dcc7530a41956004471c8ec27cd5ae19a03d8c424074b855395497e8" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0074.png.import": { + "bytes": 963, + "sha256": "902ce403dbab34973fab0647a91a5584764a9ef8574b3732ef88434444aea6cc" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0075.png": { + "bytes": 128, + "sha256": "5fd90e49d9be0c155f1e6a5cb08099fda486ea6fbb266be20b6b97614b96ddd1" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0075.png.import": { + "bytes": 964, + "sha256": "a6bea1993517fcadd5e811c8e952d70ebeb25e5bd624491551354808b6b27f8d" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0076.png": { + "bytes": 165, + "sha256": "349c56fdf06e20fb6a1ee98e2dea1e70833f4f0cf3a96ace0660d32ee0496631" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0076.png.import": { + "bytes": 964, + "sha256": "d94d68afc48704abe6f902cedb2499a2a9c564ea89c698562a44ed87a5c58244" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0077.png": { + "bytes": 165, + "sha256": "be810b6e4b8cd8dfa9dd06af7a5964648a6683c5a3e8da64bc3233b48a636be7" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0077.png.import": { + "bytes": 964, + "sha256": "67fb9daa0fc4e4ab6f4c0c4e093195f6870ebb56dc496456d1733fa6ef903e97" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0078.png": { + "bytes": 165, + "sha256": "62d47ae44908d577c29ff002a2e73ae1bb07602ff4715a85c9743893ef72546d" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0078.png.import": { + "bytes": 963, + "sha256": "612d41c1b9f6d517a6eede7ef6f7c44d712aba353b07ecc7a7fecebe546998d0" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0079.png": { + "bytes": 174, + "sha256": "c8c819b6054e0c231fae5f9f85dc9a34ed828379f5fdb4456ecd360305ca44c6" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0079.png.import": { + "bytes": 964, + "sha256": "40a708f3a427ff196f23ada3c626d7fdf2e4a975ff35430d980d5800ec5fb948" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0080.png": { + "bytes": 180, + "sha256": "0151695f2890361f16ae4ea585e8f5d80fe0b6c2e82593f5e2ad336fbb7360fe" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0080.png.import": { + "bytes": 963, + "sha256": "ba5c2aaef514ae698ad732d8ff9bb1fa7627addc662b21bcdb03a873330fafd9" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0081.png": { + "bytes": 156, + "sha256": "92edb7e7a7b658e00d2c983d9526ffa5f868071b72f98a645f48fac2b33eb377" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0081.png.import": { + "bytes": 964, + "sha256": "bf72b0393ccf3221a2db8abe0a048cbd271e092de0764034cff65f297c389e92" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0082.png": { + "bytes": 207, + "sha256": "2efb31e30cd6f1527329fe5d7704e41c65a8376d498bf93372f46155600420c9" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0082.png.import": { + "bytes": 964, + "sha256": "397120a5362512b7f0bd7833e8387a4a663cffb172dbf5de2356acb2ec9cd2d7" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0083.png": { + "bytes": 156, + "sha256": "92edb7e7a7b658e00d2c983d9526ffa5f868071b72f98a645f48fac2b33eb377" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0083.png.import": { + "bytes": 964, + "sha256": "6c4cce75a77f9a2f60c00ed3f0b2a24d5dc2bcc7a18d858f2bddb1e234d12124" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0084.png": { + "bytes": 232, + "sha256": "b3909f80a29a0f18729f96a90ebe446ecaf26a195da633f2a6c3dd31f660821e" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0084.png.import": { + "bytes": 964, + "sha256": "174366f354ffd256451e63d8c8fdec0f5f1117e8421770a0235f260e1a75553f" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0085.png": { + "bytes": 230, + "sha256": "377b35acbce5129e8167df1f5d1d0420805990962a37a30f5784b88b81a40ec2" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0085.png.import": { + "bytes": 964, + "sha256": "4cf0b8eea76287942a5e077b514b6eccc6d949763879ac5b871fa775e7c4c2f6" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0086.png": { + "bytes": 224, + "sha256": "0606653ad07e177c06c9782c9fff4b1388c7b67865b6ab0e202f76e8e6f6bec8" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0086.png.import": { + "bytes": 964, + "sha256": "ac854975de21105ba6dc595454d64dc441543c41f2750494d34c37b9e9ae3899" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0087.png": { + "bytes": 239, + "sha256": "321ecd683c4e542e09d368709e75821b8b823b7b98b71bebb39d66cead951315" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0087.png.import": { + "bytes": 964, + "sha256": "08c32b45538b5fcb50494fb65ddbd1bc52d91d0d98615906dbbeeceeaf9a047c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0088.png": { + "bytes": 222, + "sha256": "ad6715e9bcab60faed303260a21adfca2de09a7950b98384065bcc5df05634b2" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0088.png.import": { + "bytes": 963, + "sha256": "f5086263c65f017bd12a57d0106906d2127e5bf1e46a88c9f2bba702cc39567a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0089.png": { + "bytes": 196, + "sha256": "0b9fa753068061e816246437466d0c9d3100375ff12b77fe9459a801265c83c1" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0089.png.import": { + "bytes": 964, + "sha256": "eb2748a33689be9043ca98236bc3422c568bdc2dd1bcd3b9703a4b71e082c91a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0090.png": { + "bytes": 209, + "sha256": "fb4aa142cbbba7d9504ed3ff0d989069e8f1974feb76f25906efd9901d4f9ef4" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0090.png.import": { + "bytes": 963, + "sha256": "f74312cf22349a6b729e5f90eeb732e366189013ea50a24798e405c214605207" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0091.png": { + "bytes": 207, + "sha256": "19a75fbb7df761b7373dac310d5e7dd2aa5a65529f81d4ffc80940c89d0538ff" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0091.png.import": { + "bytes": 964, + "sha256": "10dd0ec158e8ae5439ee217399d481e9c074c16470c66209538b27bcfe67b9a3" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0092.png": { + "bytes": 244, + "sha256": "357e08bc52b8dc318ce003681196dce6d2de41298b6253bbcc9bd10283785b37" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0092.png.import": { + "bytes": 964, + "sha256": "738be56be88ce25f5d7c1629fd8f8ea07d1fdd8792a455dab513fc5b7a9eba4d" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0093.png": { + "bytes": 205, + "sha256": "0ce7aabd23d9784f67ad64d461b132f8bd59932d9cc7dddb98c66edf60a6671a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0093.png.import": { + "bytes": 963, + "sha256": "57ee53ddc2f013686e0bbd779e71d1e3ddfea8a0c3d7092ff52b44271132df7d" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0094.png": { + "bytes": 170, + "sha256": "56ae1a17ea808d02da78e58b5d6dc58a6ea62287b4addb81b5a6967dc2245a5a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0094.png.import": { + "bytes": 964, + "sha256": "353c738f45367fbb8adf346e32159f1da8494045a5aa1a4bfbd05101cd518bd4" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0095.png": { + "bytes": 203, + "sha256": "f5c2ce5b8e9e36580df27e8287472c662b360e97c4b8bef669ad70eceb9fc7b4" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0095.png.import": { + "bytes": 964, + "sha256": "98a8fdea72067cd04e28a91bf7f3e594e64acaa925a971f0a1e5b320fab3c0d7" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0096.png": { + "bytes": 206, + "sha256": "b8a0a9376c1c3398a059a1e3226e8f8d6839c1d73ac53ea37425340d762055fd" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0096.png.import": { + "bytes": 964, + "sha256": "84e01bdb8330553ceea96159d1f9ab43ff21c1780b0c121a72182f661b37cd8c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0097.png": { + "bytes": 225, + "sha256": "20915fde756b990f5b0c86fda557a93a6c306373d7c4fc07a1991f4ace3271b4" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0097.png.import": { + "bytes": 964, + "sha256": "cf3ba40a74fc3f15ac5243ed97bb0c53b4a30686675f19b438dd83a2adf9b097" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0098.png": { + "bytes": 238, + "sha256": "39b7c35f414e086b9c7e0cd2b34693ae370e5382a05b4dbb9964cef20f9769c8" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0098.png.import": { + "bytes": 964, + "sha256": "10999bc0c7ac3c95697d6a3e660ddf35f80da4c42a66af45433fc9d56491633e" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0099.png": { + "bytes": 238, + "sha256": "61af4b9f1f67aa761e89e516ac6d60371175875b78b073b7f6a8415517c66181" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0099.png.import": { + "bytes": 963, + "sha256": "6de6e757766f0caa9653d199673008dc6d6335211001573e011e45a2e666e20f" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0100.png": { + "bytes": 240, + "sha256": "e139ab1d56c599af1cea5a955b705ead18a92d41e8e635b550729383cad9de3c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0100.png.import": { + "bytes": 964, + "sha256": "0a07ccdfe659db10953ff11dc353efcca2e078409638fb76ae7b38b90120e35b" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0101.png": { + "bytes": 159, + "sha256": "03b7f71be1904c72c71f98d31c5f0f7fd8dceffcd40c19c4232746cbf509f5b1" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0101.png.import": { + "bytes": 964, + "sha256": "c88331b1e5bf2525fe371ce551083e5d807fe45e80eccc5a400f970c807e3591" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0102.png": { + "bytes": 154, + "sha256": "35af44a6fc76a09e7fe625c0becfeac809360774c6a845ec8024dd8db6f5fc3f" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0102.png.import": { + "bytes": 963, + "sha256": "26c7b69214e87a32f5eff0cb2cab6c14fa470770ba25d77b702499dbda6c4887" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0103.png": { + "bytes": 164, + "sha256": "38a3ab676d73fe4219930bad3d0294e045269fd153587b0e21c60843fc13d281" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0103.png.import": { + "bytes": 963, + "sha256": "20e4fd705f9ba1b5808113f7b3f9ea75e48f2ab9711150e11ea307bc03f53474" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0104.png": { + "bytes": 166, + "sha256": "3b38808f0c20a49a9923475022041c46e8a04b47d8621e5186fe153b4bbaed48" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0104.png.import": { + "bytes": 964, + "sha256": "6e8f16d87aa8497efcd064f67d2b89b6147b010e692f4f3320d5e9dcbe8321f6" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0105.png": { + "bytes": 181, + "sha256": "e6ce715420b033cc4b0eb6b26255996a919ef721c0081388d3fa6a964047630d" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0105.png.import": { + "bytes": 964, + "sha256": "c4d1645bff32f5348d51b7603e6efde3ae941f1b521de73e5269a576e000fbdc" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0106.png": { + "bytes": 164, + "sha256": "4958c3b09a0d41b3f21741476274855ab2242b3240e5054657dbc0569c881215" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0106.png.import": { + "bytes": 964, + "sha256": "865bee4b2d6ce88ebed0a8580795f7be241526ac2a3fc0a03c5e0123fdffa3c9" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0107.png": { + "bytes": 173, + "sha256": "66d47c25a72a5be74cb8a15c0e4930ee4c8859f5ba5d04837d953d45649d0873" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0107.png.import": { + "bytes": 963, + "sha256": "874603d2c45ed544e1805feeba616c08d3f8a4f03c8e33e304c1dcf8cfd4d147" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0108.png": { + "bytes": 189, + "sha256": "f15c964db469039861f70bdc75cc5b02ba9351eaa5d7421a85d028131eb12f4d" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0108.png.import": { + "bytes": 964, + "sha256": "69a09b26c14e23d9445a07faa54ba3bc6ee461bf10555df20239fa2fd468c0bd" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0109.png": { + "bytes": 219, + "sha256": "f344d22151345f81fe1b95fdb03cf007747042670bda1540192c14853f35b94a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0109.png.import": { + "bytes": 964, + "sha256": "a0666a19dfa3d44e4bdc009cdb351b3fd63c364ec0f59b2b76604bd7b16a9973" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0110.png": { + "bytes": 217, + "sha256": "ca2d26579be3738be5abfb74cea388634e212fb991b84701deeda65da4780f1c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0110.png.import": { + "bytes": 963, + "sha256": "1a0b8a2bdd53085efabf093e3f616f367d82f913363cac47c763a96eed70320a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0111.png": { + "bytes": 228, + "sha256": "8ecfc9b753e676a3cd1fcf2f8f98cc70c8e814f706f41a7e172508fe15156618" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0111.png.import": { + "bytes": 964, + "sha256": "721e24bcbd148f7f4c328fbb64ca62c296c79de65f21573e6b498432fec7b1bd" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0112.png": { + "bytes": 237, + "sha256": "1e82481db9d95d0cec64ba0ea95b8fadf1e3675936e93731d0ff0e3bc72470b0" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0112.png.import": { + "bytes": 964, + "sha256": "59866ffad84bedc11211a55acf7d79b8c852685e2aa3a880f1f50bc077e4ca6c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0113.png": { + "bytes": 176, + "sha256": "d8b00568696dfc79269a8f47ab8e19ecf6f080140176034cbf8124b4b143d49e" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0113.png.import": { + "bytes": 963, + "sha256": "3b877b063705382d968413a5a9831b38d105f9bf7dfca7f57d863de84b914869" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0114.png": { + "bytes": 182, + "sha256": "486bea807469ea50e471bd9a8e5d60424386b81b0bbef0c84f3cda285d8cf088" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0114.png.import": { + "bytes": 964, + "sha256": "d17c5713760c3b5b816e60b140bb83977dedb1dd4e1087f3f44efb304878f312" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0115.png": { + "bytes": 182, + "sha256": "ad27340925ae7e936788c22cbd0f7d1922ef5bdd21377f916f1be9af6be4312d" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0115.png.import": { + "bytes": 964, + "sha256": "f9323399e4885b0524543782d1f937303d3d72129259d20cd758883cea17f08c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0116.png": { + "bytes": 182, + "sha256": "610de03ee2d2a7d452159a885707217ccb17c6c18444418d7f21496d76a65f76" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0116.png.import": { + "bytes": 964, + "sha256": "54f80c6bf2dbaaf1d170741dbcb64357f53cd9830016177da2deedfdc54d848c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0117.png": { + "bytes": 191, + "sha256": "4f75a60e03d46523afba3c52f73c1fcbe06a7566a87eea9fb9b82320718182bf" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0117.png.import": { + "bytes": 964, + "sha256": "2b9613378efb8da10be4a93c1a6a21e176953afa401d357d10fc36d3d2fd0540" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0118.png": { + "bytes": 200, + "sha256": "43679336db4fca6d7c4b47941f707174cdc4476b75af32e0d9f0bd80677831bd" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0118.png.import": { + "bytes": 963, + "sha256": "6fb44bad0d9991ea3ef306e732a95a5e35a47e6821729a75c1dc6861861eb85a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0119.png": { + "bytes": 184, + "sha256": "c1a5fcc94e0557e04615186966d5ded2a7b590985f03c4a564de6801aeea4acf" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0119.png.import": { + "bytes": 964, + "sha256": "b595356bf2247fad363b679abe1d407f7fa7ae0f3e9dd8c04e74a8fdbcb7327a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0120.png": { + "bytes": 195, + "sha256": "2ca96264cc5506bb52a5f7b5d278d0fa8e66e26c4b8242e40db6b46acb9df95e" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0120.png.import": { + "bytes": 964, + "sha256": "aaa24e4d6843a5bd70c55413164859600b953d0827fab6fac48bac570346e13e" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0121.png": { + "bytes": 189, + "sha256": "28466ec899a6e0720f40e4f622aee5925d2e5c50b2409856f36ef65c7eedc532" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0121.png.import": { + "bytes": 964, + "sha256": "9dabb9b5f2634bba49650d5ce11a2192a63b5efe9a65734ebf4f155ce876a21e" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0122.png": { + "bytes": 232, + "sha256": "2cb76164d899e3a5eb42d7cd23ffe8defae130f6ce702a35926cbf61d2d1b569" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0122.png.import": { + "bytes": 964, + "sha256": "50c28de7e6c0a19d29d80d3bbb609fce84b4df463e029fc7a2792651a10a07ba" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0123.png": { + "bytes": 201, + "sha256": "16d8f777b329a6516f32d790b389fd5072622195152680c298d2caf8d723ef8b" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0123.png.import": { + "bytes": 964, + "sha256": "f305af0b0435f3051459c24e6248208475a97dde46ea27044a46c996c08ab725" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0124.png": { + "bytes": 203, + "sha256": "cda39a2ba32af6935e106b5c243ba5ca813a8b2566855b94524485463883196a" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0124.png.import": { + "bytes": 964, + "sha256": "a16dd7e7729a0e77c24a09a0e1e5beb166f1f6712955307a464cec0777804505" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0125.png": { + "bytes": 165, + "sha256": "d576af0d95a09721d174c3f57cb51b3c736e3627330a9bfee110e676d37c3cab" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0125.png.import": { + "bytes": 964, + "sha256": "06f563bdd065bb39b65a04d7360dd267ca4d7f53a0ec05ace48c38fa7303c7ec" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0126.png": { + "bytes": 171, + "sha256": "59dd6e934921a327935f8aa35a24cd949bc04541c0adaed2d0ac46b29fe409c2" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0126.png.import": { + "bytes": 964, + "sha256": "f69c9b184375f986920d09b3705e7e948d79b001bfc83c7c3dd5eecd92540fec" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0127.png": { + "bytes": 171, + "sha256": "4ae08fffdd99c4e14a941e664de4cf9ecba0064cd94e5caae9d4a82a10fe120c" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0127.png.import": { + "bytes": 964, + "sha256": "8e55fd648cb1569eecb8137799cb21ad94ed1bf66728fc85691eaf56ed6a20e4" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0128.png": { + "bytes": 171, + "sha256": "f9d1c49865855dece38e496cdb68458040facf8256831751f4b0ab695a193be9" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0128.png.import": { + "bytes": 964, + "sha256": "33e7e0a2fae88e567d97aaad15205962dce8d2cc9b07bae6bbbc6c833632c816" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0129.png": { + "bytes": 173, + "sha256": "1b0a4efa97420e011f08151149c662dbc7c91be0e3c72caa3e8f5718789908fb" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0129.png.import": { + "bytes": 964, + "sha256": "41bca57b41043e5e95a7fed027a6dae4affef6656af1d4fbe516d1f924017b88" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0130.png": { + "bytes": 185, + "sha256": "a61e8a3fe7e1e6f192d6b6452852274a02768c20a45ef6afa48ec80908a39185" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0130.png.import": { + "bytes": 964, + "sha256": "cb97ac0a485400219fe868e479eb7412d3632349fa5a5d01fb3173567e9a1082" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0131.png": { + "bytes": 181, + "sha256": "0fe7c5448902cef52dd8ed8530eda0a986ad0d2cc0c36c2ee1528fe0c6860262" + }, + "assets/kenney/tiny_dungeon/Tiles/tile_0131.png.import": { + "bytes": 964, + "sha256": "db76c372c023c15a841f3c4afe6678d870a0f7063be9dfc2d15e8478e8343730" + }, + "assets/kenney/tiny_dungeon/Tilesheet.txt": { + "bytes": 238, + "sha256": "1b86fae0b27a628f18cfd89c6e148ea1d727f5ef02fc1dbeb5a6e9f9667bea00" + }, + "assets/kenney/tiny_dungeon/Visit Kenney.url": { + "bytes": 44, + "sha256": "6787defa3ecb6118622e1903b65802c0200628fae5164b51b4fd467f92f3f284" + }, + "assets/kenney/tiny_dungeon/Visit Patreon.url": { + "bytes": 54, + "sha256": "2fcba31333935f4aa35e9de2e74e2b7ba1b1a8011540e08016ff6d81e9dd7490" + }, + "assets/kenney/tiny_town/License.txt": { + "bytes": 567, + "sha256": "c483c167cc3bdfe17c15f957ff847d409f64d81b410b28783636cf3b2b7814c5" + }, + "assets/kenney/tiny_town/Preview.png": { + "bytes": 17645, + "sha256": "9a6a773a4e39bc2082b85f0778d8a106f644233b2b3612c5c2a6fd6e4ce2106b" + }, + "assets/kenney/tiny_town/Preview.png.import": { + "bytes": 949, + "sha256": "23c5150de825abb62e9acc8cfbc0155615188fd0d2016ca72bc9c1a19fef8e0d" + }, + "assets/kenney/tiny_town/Sample.png": { + "bytes": 112122, + "sha256": "cb909e46bf51deb2906eeeb14b323aa42e861a738a734f449dc460ad682e4ccc" + }, + "assets/kenney/tiny_town/Sample.png.import": { + "bytes": 946, + "sha256": "166f5fdb87ec5ab6acdd8c00546debd0f3c49fd17bfdea48f79cfe6566f853c5" + }, + "assets/kenney/tiny_town/Tilemap/tilemap.png": { + "bytes": 5392, + "sha256": "b9e9fb80b95d0b90b52f12d914f000cf16f8b22c1faa815aa94500abfa57bc50" + }, + "assets/kenney/tiny_town/Tilemap/tilemap.png.import": { + "bytes": 956, + "sha256": "d49254af66e48299aa37983a825c20a6a8000dd087777ab72311f2e276c32c15" + }, + "assets/kenney/tiny_town/Tilemap/tilemap_packed.png": { + "bytes": 5042, + "sha256": "3a54d99ecde790d4fdea207a3644cf130fc56fa838f1beb1507c185a95b8e902" + }, + "assets/kenney/tiny_town/Tilemap/tilemap_packed.png.import": { + "bytes": 978, + "sha256": "77e09885d6c47ddf6b08efc8530bc0e8d1a109a48474ea928f3fd905fa167aa3" + }, + "assets/kenney/tiny_town/Tiles/tile_0000.png": { + "bytes": 99, + "sha256": "d4c692ef80ee97b3395b885ae07020d42a106683ff3650df240f8e972bd5a041" + }, + "assets/kenney/tiny_town/Tiles/tile_0000.png.import": { + "bytes": 960, + "sha256": "f6968f744c358aa51ab9003d2fcdb5f170e9852cd8889f88d3cc41e29bccf094" + }, + "assets/kenney/tiny_town/Tiles/tile_0001.png": { + "bytes": 144, + "sha256": "cf3b3df8669e621af90944fb3155b15f13adf203dda464e6149d7318f3660713" + }, + "assets/kenney/tiny_town/Tiles/tile_0001.png.import": { + "bytes": 961, + "sha256": "f090ea04d0af56449114f4015acb0c3625e658688ab4517b40d474ca11a5095f" + }, + "assets/kenney/tiny_town/Tiles/tile_0002.png": { + "bytes": 174, + "sha256": "ea524c6974ad6203f46a3e68a360883d0d53dbbdaa237f6cd81ac6fd5be6ea7c" + }, + "assets/kenney/tiny_town/Tiles/tile_0002.png.import": { + "bytes": 960, + "sha256": "b2811ea61975edd62e7b6ace7bd9b0a5daabb6d5528c3b04295e20bfde39fdb9" + }, + "assets/kenney/tiny_town/Tiles/tile_0003.png": { + "bytes": 176, + "sha256": "05ae1d16efd39ec9ec7315d8dba74f3aa85d4a75780f768cbca584dc96e1d2f2" + }, + "assets/kenney/tiny_town/Tiles/tile_0003.png.import": { + "bytes": 961, + "sha256": "dc9254e0b4bfa9b1bdbd9e95dc187ae5874af3af0b6ba1192efd97b6318d4887" + }, + "assets/kenney/tiny_town/Tiles/tile_0004.png": { + "bytes": 175, + "sha256": "5de3dff614fb984dedcbfb7551d13a984f66d5a0a835df3048b51bc7cfddba57" + }, + "assets/kenney/tiny_town/Tiles/tile_0004.png.import": { + "bytes": 961, + "sha256": "db7d2b3eb1ed7c423712e78580925945cc3663451327f6446faac8fa42200c95" + }, + "assets/kenney/tiny_town/Tiles/tile_0005.png": { + "bytes": 197, + "sha256": "5c09569d7e0351146e194d9beb7b573e0869978334cc9e093a57dea8705e81da" + }, + "assets/kenney/tiny_town/Tiles/tile_0005.png.import": { + "bytes": 961, + "sha256": "a89809d6d638bf94d37172feca26415382ab29b2e7256c5e9792640f1af6dc39" + }, + "assets/kenney/tiny_town/Tiles/tile_0006.png": { + "bytes": 180, + "sha256": "d8046421ac4db5a824d642d26e9fc6532f1b3aa52033f569f7e56e0885b2776d" + }, + "assets/kenney/tiny_town/Tiles/tile_0006.png.import": { + "bytes": 961, + "sha256": "3a0a7fe99c84788ad98876b1c5c11c61d9edda3ef1b8a29c106d198b29c4cd2a" + }, + "assets/kenney/tiny_town/Tiles/tile_0007.png": { + "bytes": 157, + "sha256": "741e857eba60e676711e0193f3b252fc70be469ddc55c7d5fb74fa343d6aae6b" + }, + "assets/kenney/tiny_town/Tiles/tile_0007.png.import": { + "bytes": 961, + "sha256": "886b8d32262690341ed9b7150ea193e9ffb36a5cca53fb7a13dbd0c76fa5d5d9" + }, + "assets/kenney/tiny_town/Tiles/tile_0008.png": { + "bytes": 185, + "sha256": "d9c105e1f635e239dd0a87239c528c57406532ae4c4949ec9555d9fae6fc8bbb" + }, + "assets/kenney/tiny_town/Tiles/tile_0008.png.import": { + "bytes": 961, + "sha256": "49325ea2b2825ccb188b91d7ee7adbfcd9ad7d560d6301907dd000ce958bb49c" + }, + "assets/kenney/tiny_town/Tiles/tile_0009.png": { + "bytes": 180, + "sha256": "1120f5a9a24c9dc40d0857885b9008860d17d89764a0621f90bfdb352930a72a" + }, + "assets/kenney/tiny_town/Tiles/tile_0009.png.import": { + "bytes": 960, + "sha256": "07dc54d40811013e2459070e891552a4d4517558e96e77b7bc46aab749c7ee32" + }, + "assets/kenney/tiny_town/Tiles/tile_0010.png": { + "bytes": 157, + "sha256": "5f3aca3ab97afaa731c0a001725d31fd18874c37bb56d386b74b09430bc52d01" + }, + "assets/kenney/tiny_town/Tiles/tile_0010.png.import": { + "bytes": 961, + "sha256": "ac53ef6aa9e651238b45a01d84674ad6b7d02a40e23cbc91a4374cb4e6227d32" + }, + "assets/kenney/tiny_town/Tiles/tile_0011.png": { + "bytes": 185, + "sha256": "69c6e3e76d76356f16086e922d331cd3baf4b18aed2bf07d242b2c61d1c0719c" + }, + "assets/kenney/tiny_town/Tiles/tile_0011.png.import": { + "bytes": 961, + "sha256": "0a66296762f20a71439e725706f13ded29b545848b54e58a2828af3908a7493d" + }, + "assets/kenney/tiny_town/Tiles/tile_0012.png": { + "bytes": 161, + "sha256": "e1b87cceac398679e30d7cd4feecf4f40b8104515c255ed2d8e4fd4f868bb35c" + }, + "assets/kenney/tiny_town/Tiles/tile_0012.png.import": { + "bytes": 961, + "sha256": "a303b8eae26947cf26ebe2af5e486d9afb0ab63ac032a2e75d446e9faf05e5d4" + }, + "assets/kenney/tiny_town/Tiles/tile_0013.png": { + "bytes": 153, + "sha256": "dff7a37b7fa1be3648dcb1d01be3df26eed3ea5dfb8d8b7ffdcc2af06715c1ad" + }, + "assets/kenney/tiny_town/Tiles/tile_0013.png.import": { + "bytes": 961, + "sha256": "fcdd5f7c83e6e0ce1e963ac2fb2c2f5494ddacbfb97f52cb819db6928dcf379b" + }, + "assets/kenney/tiny_town/Tiles/tile_0014.png": { + "bytes": 161, + "sha256": "1209e77e92dc55b0c6aab326ccf714a6f48fdb8ca447c77aea779b1c95e4d41e" + }, + "assets/kenney/tiny_town/Tiles/tile_0014.png.import": { + "bytes": 961, + "sha256": "ff1a835d2558fe7e73ce7c2eda13ff3f83f041c7e527a30dfed85e9d7cc1f039" + }, + "assets/kenney/tiny_town/Tiles/tile_0015.png": { + "bytes": 193, + "sha256": "e1d230db0d9b559d564a5062ea574e8233d5b0c4cd143377756a38cf11f7027c" + }, + "assets/kenney/tiny_town/Tiles/tile_0015.png.import": { + "bytes": 960, + "sha256": "8e864fddb00db67863069515961eee59da22c68008dcf6cf204fcdf4d0effd38" + }, + "assets/kenney/tiny_town/Tiles/tile_0016.png": { + "bytes": 192, + "sha256": "e491cc2d756b0fe14c19c1484fd79fe086621d2a21fd59f3e7a2d74eecaba561" + }, + "assets/kenney/tiny_town/Tiles/tile_0016.png.import": { + "bytes": 961, + "sha256": "e9748911a1b03eb0eff486d1aebe51b78490b5691efd8559781d5d31f91d04bd" + }, + "assets/kenney/tiny_town/Tiles/tile_0017.png": { + "bytes": 177, + "sha256": "6510f793c7dab1b8307dd23e795ce9c680c1ca0b220c9749c37d5705e2aae70e" + }, + "assets/kenney/tiny_town/Tiles/tile_0017.png.import": { + "bytes": 961, + "sha256": "a9dcd7b2a62098ba7cb479d5cefe95cc401b3c53e69df77798d922d9b2ebf3e2" + }, + "assets/kenney/tiny_town/Tiles/tile_0018.png": { + "bytes": 163, + "sha256": "167c8eeccd110c1c41095a7178524c8c6fa127e47098fcdc16e875bc2c8a8d76" + }, + "assets/kenney/tiny_town/Tiles/tile_0018.png.import": { + "bytes": 960, + "sha256": "7e0b478eddde95e2bb6c4815e8e69bf2ec0f3314804bf5432ea33d0c7615c85f" + }, + "assets/kenney/tiny_town/Tiles/tile_0019.png": { + "bytes": 200, + "sha256": "f7617ce7df2660a9d4aca0aaf317be98bc561306b0e3eef02f7e0c17a0072142" + }, + "assets/kenney/tiny_town/Tiles/tile_0019.png.import": { + "bytes": 961, + "sha256": "88cf92bd4af58c8d83e146e48b96c43665daa7f29307c099694c843de493944b" + }, + "assets/kenney/tiny_town/Tiles/tile_0020.png": { + "bytes": 166, + "sha256": "9bbb26692c6a0b7ba00ad27b1a380f3ecec4d680c597204604bd312a154f7c5d" + }, + "assets/kenney/tiny_town/Tiles/tile_0020.png.import": { + "bytes": 960, + "sha256": "138eda065179c4b0e351aae592a7c354e72db87f512ac72cdb8284f6a7df318b" + }, + "assets/kenney/tiny_town/Tiles/tile_0021.png": { + "bytes": 163, + "sha256": "3e7b7419837373bf32542598d46d1328cce966e9dfed35fd852a37d227f5d6a4" + }, + "assets/kenney/tiny_town/Tiles/tile_0021.png.import": { + "bytes": 961, + "sha256": "6ebc06d6d592940e9025a8d9299ce79675f115c2b8199bd98f434ff8a459726e" + }, + "assets/kenney/tiny_town/Tiles/tile_0022.png": { + "bytes": 200, + "sha256": "5a6c92e91e67d3b4a9751250f5ffa73308f2d47bab5642677ea6c8c0448b9df1" + }, + "assets/kenney/tiny_town/Tiles/tile_0022.png.import": { + "bytes": 961, + "sha256": "2dd49f551a743f78d97add14e3fd720eade4bebdb5a93be7e745205ffd4d059f" + }, + "assets/kenney/tiny_town/Tiles/tile_0023.png": { + "bytes": 166, + "sha256": "e2231d052af8e58b280c881962407316a25df85d1baebc0a4c417833c9035d1e" + }, + "assets/kenney/tiny_town/Tiles/tile_0023.png.import": { + "bytes": 960, + "sha256": "8b75554914d8a511544d00dab06474da86bd7c8d83a5795f1b9439a473d63f36" + }, + "assets/kenney/tiny_town/Tiles/tile_0024.png": { + "bytes": 135, + "sha256": "3ffd3954dfb28615d813744ec3b0638d46f0cd9376426329221b70128719282a" + }, + "assets/kenney/tiny_town/Tiles/tile_0024.png.import": { + "bytes": 961, + "sha256": "828ebde3fa65aeb33fb33265221b0f16a838c949a23c7cb0f08528ea2142f8cf" + }, + "assets/kenney/tiny_town/Tiles/tile_0025.png": { + "bytes": 99, + "sha256": "63519065228f5f8af6200d979fa54cd7f00650034ceea10a1609203a34b3ff9b" + }, + "assets/kenney/tiny_town/Tiles/tile_0025.png.import": { + "bytes": 961, + "sha256": "00d1ae6055b72c2e3666d11c57108f2c2e0427b36ae21eda31033085163c854b" + }, + "assets/kenney/tiny_town/Tiles/tile_0026.png": { + "bytes": 140, + "sha256": "1cc4348d99b6ca90b26e9cda7823a68d549fae0a9859ce3f31bfedff5a405bce" + }, + "assets/kenney/tiny_town/Tiles/tile_0026.png.import": { + "bytes": 960, + "sha256": "0d61d6b74cdc8ac2ae51d9f18d373fff5be6b8453e38b69fb62422ee8330504b" + }, + "assets/kenney/tiny_town/Tiles/tile_0027.png": { + "bytes": 191, + "sha256": "57a64b241ad12af171fda9d081a6641c12c51d1a9648e8c5ad50f314e3d660e2" + }, + "assets/kenney/tiny_town/Tiles/tile_0027.png.import": { + "bytes": 961, + "sha256": "374a9c9b167f1e38367a29e446dec4c2cd23c3fd6bc963992d19c1db47a31460" + }, + "assets/kenney/tiny_town/Tiles/tile_0028.png": { + "bytes": 191, + "sha256": "a8b6bdb8954e01dbe6abebaec6d3eedf4fcfeb825b7d982ed488c57a573fdaac" + }, + "assets/kenney/tiny_town/Tiles/tile_0028.png.import": { + "bytes": 961, + "sha256": "2136deffea0eabda9a9bac872f78e2fe20ae5f091817161d753cc69c9868db13" + }, + "assets/kenney/tiny_town/Tiles/tile_0029.png": { + "bytes": 197, + "sha256": "0d55333ffe4c1d3be705978bdf1c176a871c25a6bde232dfba5c359b1a433294" + }, + "assets/kenney/tiny_town/Tiles/tile_0029.png.import": { + "bytes": 961, + "sha256": "93b48e059cbc3ce7819d80aadb203a6fd784080c9021208d61892ab14e1f1a66" + }, + "assets/kenney/tiny_town/Tiles/tile_0030.png": { + "bytes": 181, + "sha256": "e38e6cb14ff961f6e154483a62f963cdf9a310d91e6fd34c61e70653e0fe2713" + }, + "assets/kenney/tiny_town/Tiles/tile_0030.png.import": { + "bytes": 960, + "sha256": "ce17c94bee4b6332a8d1ee97014b3bc48249410df748b1236029eeccf41b0c38" + }, + "assets/kenney/tiny_town/Tiles/tile_0031.png": { + "bytes": 157, + "sha256": "b0330026a4ee1bb5d0895d2f1310d2caff75512522752ed0a30770783f97bb7a" + }, + "assets/kenney/tiny_town/Tiles/tile_0031.png.import": { + "bytes": 961, + "sha256": "e809fae7d6ba0b594fc116c5090e0c5da97c23f3102f472f8d1d6142b9da58fb" + }, + "assets/kenney/tiny_town/Tiles/tile_0032.png": { + "bytes": 181, + "sha256": "6f527b7f7415362b0c0fc98e5e0c5b370db119dd171ccdfd444e64e46ad99055" + }, + "assets/kenney/tiny_town/Tiles/tile_0032.png.import": { + "bytes": 961, + "sha256": "e42f8ece01e720fe2ede08abd4b8fb704deecc6b1cd4c9c212549bf4c0129d8c" + }, + "assets/kenney/tiny_town/Tiles/tile_0033.png": { + "bytes": 181, + "sha256": "5d03ae0b19ab782816f2c9faf809c6c6fb263a236e3afafd757f1e2411710875" + }, + "assets/kenney/tiny_town/Tiles/tile_0033.png.import": { + "bytes": 961, + "sha256": "291338d0796e250408df1d6072a471c831c012fca17ba52325dc12ac312a802a" + }, + "assets/kenney/tiny_town/Tiles/tile_0034.png": { + "bytes": 157, + "sha256": "23d25bce2e95ac64eb36ca34f0b529f7b6be9d2ba04d2dae48dd33138eb67444" + }, + "assets/kenney/tiny_town/Tiles/tile_0034.png.import": { + "bytes": 961, + "sha256": "db0ea5538b3b4623be7131df48ae7005bf8cfee64c3be11ac395252a786dc7df" + }, + "assets/kenney/tiny_town/Tiles/tile_0035.png": { + "bytes": 181, + "sha256": "0c007c5d64b29dc22c3d02fc7ac772efbe3b22cd353abb1b3f34f2d308ec49cd" + }, + "assets/kenney/tiny_town/Tiles/tile_0035.png.import": { + "bytes": 960, + "sha256": "92ac2cfb3065c8be99e6374c96695dc15b4a72423b21b6b93abc29e934e6fcfa" + }, + "assets/kenney/tiny_town/Tiles/tile_0036.png": { + "bytes": 154, + "sha256": "87f81fe427117ff6fcee2cf40c1b30688e7bcea78cc2933c7354c9d985ffffac" + }, + "assets/kenney/tiny_town/Tiles/tile_0036.png.import": { + "bytes": 961, + "sha256": "4ef2f68a455959fc2dd20752f06aafd8e048c4c65fe82082d206df732612d541" + }, + "assets/kenney/tiny_town/Tiles/tile_0037.png": { + "bytes": 134, + "sha256": "ad8ed926be6b53a9a240d18dc332f4140552258d2c625773acbbdfc9b09a825e" + }, + "assets/kenney/tiny_town/Tiles/tile_0037.png.import": { + "bytes": 961, + "sha256": "7a1abae939a053c98328fe6e9be9659b3fd5a3685fb249b081a91d5d8c0b3da6" + }, + "assets/kenney/tiny_town/Tiles/tile_0038.png": { + "bytes": 149, + "sha256": "6bd82dfc79a21d7eeeacaaa9e6094be415b7a5d2190183ae28bc6ad764623255" + }, + "assets/kenney/tiny_town/Tiles/tile_0038.png.import": { + "bytes": 961, + "sha256": "7dc25f6b476a89d915a55f0069f9b2707ed8444bcc6dfe0b03dd58179908c257" + }, + "assets/kenney/tiny_town/Tiles/tile_0039.png": { + "bytes": 129, + "sha256": "fd9127ce420b7e05ba2bb361a82c9301b95d2c55d3eab899198819e9ba78214a" + }, + "assets/kenney/tiny_town/Tiles/tile_0039.png.import": { + "bytes": 960, + "sha256": "0b8f5dcf1257743ee7a03e3ba49dfdee8f00c5a03221399296ca08894c06166f" + }, + "assets/kenney/tiny_town/Tiles/tile_0040.png": { + "bytes": 139, + "sha256": "1ab17e4b24be7eaeb6d8830c0e763b58a66fe2b8f70c15242fbde5138007d334" + }, + "assets/kenney/tiny_town/Tiles/tile_0040.png.import": { + "bytes": 960, + "sha256": "87da01b580590e80b971bd9d5c5fdac18a0d87055dbfd257b7efabe5bef64263" + }, + "assets/kenney/tiny_town/Tiles/tile_0041.png": { + "bytes": 126, + "sha256": "3db01ff694f3d9f1e492d45913c3f85ff5f704ac262a1404d368c9b272a3f42d" + }, + "assets/kenney/tiny_town/Tiles/tile_0041.png.import": { + "bytes": 960, + "sha256": "41e98373d79adf154517ad43f4dca1ac1d3b644d0ce25533dbebdbc89d97aac5" + }, + "assets/kenney/tiny_town/Tiles/tile_0042.png": { + "bytes": 137, + "sha256": "322a22e1567b667f5f5423767412014ac490968e0f6f6fd22f1721234784f9aa" + }, + "assets/kenney/tiny_town/Tiles/tile_0042.png.import": { + "bytes": 958, + "sha256": "cab4308822577db505b42f85c1cd17db64ce04948297f56471fa603153f5a4a7" + }, + "assets/kenney/tiny_town/Tiles/tile_0043.png": { + "bytes": 166, + "sha256": "1e4364629573e4cf27c3ce616e3003cf1a3fd5ba2928bc46b2aa47070b0a0d41" + }, + "assets/kenney/tiny_town/Tiles/tile_0043.png.import": { + "bytes": 961, + "sha256": "022f4ed4a0db1b4c429b7952ef86c093e531bbfef9157b9529c59ff3670f284d" + }, + "assets/kenney/tiny_town/Tiles/tile_0044.png": { + "bytes": 164, + "sha256": "4653e4c38fe71ce96287eca370385c00c857b017eecb8458713f1e5f5a9ce262" + }, + "assets/kenney/tiny_town/Tiles/tile_0044.png.import": { + "bytes": 960, + "sha256": "5983c4ffc08a221387c7ec9d60eb845d3272e3e4880394157264ae48dca6ad2d" + }, + "assets/kenney/tiny_town/Tiles/tile_0045.png": { + "bytes": 178, + "sha256": "4e64ae7ed028b443d8823ccbbb18b1b90b568b8ce34fb24b24bf07e8582853b5" + }, + "assets/kenney/tiny_town/Tiles/tile_0045.png.import": { + "bytes": 961, + "sha256": "a9385247cfbbe4efd4749035fee6916fcd32947890d75db4ad3841e44cafd2e6" + }, + "assets/kenney/tiny_town/Tiles/tile_0046.png": { + "bytes": 164, + "sha256": "4e2ce8474d9106596cd5c1108f157fb77fe98abbd5a0762a58bc9676f0e1d1a4" + }, + "assets/kenney/tiny_town/Tiles/tile_0046.png.import": { + "bytes": 961, + "sha256": "2be26a70791a7239c22d02f7faf8a7f8de5309c93a775c14c10fd7ff9f15df3e" + }, + "assets/kenney/tiny_town/Tiles/tile_0047.png": { + "bytes": 144, + "sha256": "0928b0048900bad8a7d66b55634b099ed810b1dd2fdca7f80739c0ab8374825b" + }, + "assets/kenney/tiny_town/Tiles/tile_0047.png.import": { + "bytes": 961, + "sha256": "a76a280014249d928b578ce3ac0aaf8432ff544aca9d7fbbce6103163d05504c" + }, + "assets/kenney/tiny_town/Tiles/tile_0048.png": { + "bytes": 166, + "sha256": "7362f4df34b78d83fa8960f193bc15a3efc392c9d5ae7b4e308647051353969a" + }, + "assets/kenney/tiny_town/Tiles/tile_0048.png.import": { + "bytes": 961, + "sha256": "62a3305eb67c45bd9015cb5475c12328661abb02718ac7e3422bfa93a3f2f35b" + }, + "assets/kenney/tiny_town/Tiles/tile_0049.png": { + "bytes": 161, + "sha256": "674c9bb782acc6d640332167bbcee82e0d0984f147a1a6c9afaac983a863491c" + }, + "assets/kenney/tiny_town/Tiles/tile_0049.png.import": { + "bytes": 961, + "sha256": "07e107083d4d22f5f9fc0b68e2ad48c8c3ac805dc48b305767ca8f1c892cac02" + }, + "assets/kenney/tiny_town/Tiles/tile_0050.png": { + "bytes": 171, + "sha256": "c1060ed198ba2114f08972723e8af88b0ceae34300c69c6c81f2d7f17df1aba7" + }, + "assets/kenney/tiny_town/Tiles/tile_0050.png.import": { + "bytes": 960, + "sha256": "c77652aabe7040900a2978d80074a75ed02e065e5c0b6d2ee8e9852ce036b575" + }, + "assets/kenney/tiny_town/Tiles/tile_0051.png": { + "bytes": 167, + "sha256": "8b6383707b4648aef99273bab8be3623866cc2781f9793ca8335c61513381eeb" + }, + "assets/kenney/tiny_town/Tiles/tile_0051.png.import": { + "bytes": 961, + "sha256": "fb471dd4b7adcfb3cbcf03df4c67f5417ada490fc90d70857f0781dc3e4541e4" + }, + "assets/kenney/tiny_town/Tiles/tile_0052.png": { + "bytes": 180, + "sha256": "1ef23eadba9701c44658f19569d6f27322d497ef5c03c4b5dd9dfe793091be53" + }, + "assets/kenney/tiny_town/Tiles/tile_0052.png.import": { + "bytes": 961, + "sha256": "1a896dd5cc8af5a3c997723482a1e19f3fa4898fad890c86f533ce49c81b253d" + }, + "assets/kenney/tiny_town/Tiles/tile_0053.png": { + "bytes": 178, + "sha256": "3d2d467efe3e81b6a0cd75d7260efc675a1833ebf31dd404f1a16622c63c62de" + }, + "assets/kenney/tiny_town/Tiles/tile_0053.png.import": { + "bytes": 961, + "sha256": "2e79dc1b925114994044d5f8a37207f7a6752be450484bd0d722e60c8eb035c6" + }, + "assets/kenney/tiny_town/Tiles/tile_0054.png": { + "bytes": 181, + "sha256": "0681770aa287aececae7838587b8305579c6fd655f4bc0951a2027a60ae09c8a" + }, + "assets/kenney/tiny_town/Tiles/tile_0054.png.import": { + "bytes": 961, + "sha256": "154cc8c2717c3f6aaee3aa66e3c32ccb89316baf3bae7e4287b0ee6d5ccd7855" + }, + "assets/kenney/tiny_town/Tiles/tile_0055.png": { + "bytes": 188, + "sha256": "4febdf70ccacf1d1c9235bcb1b90c2f6fc994b3024c14b51326c04951b3a40ec" + }, + "assets/kenney/tiny_town/Tiles/tile_0055.png.import": { + "bytes": 960, + "sha256": "2a8a425359174b400b0563cb84cd401e58f5fd70baacfd5723806e7febffcd41" + }, + "assets/kenney/tiny_town/Tiles/tile_0056.png": { + "bytes": 146, + "sha256": "932bc465b8e63e6aa052cdd3619facd172c757918bd6367791080044e4195987" + }, + "assets/kenney/tiny_town/Tiles/tile_0056.png.import": { + "bytes": 961, + "sha256": "6d944abd077127192cedbd7ae628975fee1ed21d2ee20d7d1bb4669c9a2bec05" + }, + "assets/kenney/tiny_town/Tiles/tile_0057.png": { + "bytes": 213, + "sha256": "b3fc5ffa2c39365a94f0496206a0248f196eacb95f379f25f3235aef6dfb97e4" + }, + "assets/kenney/tiny_town/Tiles/tile_0057.png.import": { + "bytes": 961, + "sha256": "84de84c3702c5d56ea768e26ac4f4d230c1b1445f560de1895c9e19e82ab7b49" + }, + "assets/kenney/tiny_town/Tiles/tile_0058.png": { + "bytes": 147, + "sha256": "784067a35d87df94dd0b4f7064437082e3dec99889f7481419548950ee191987" + }, + "assets/kenney/tiny_town/Tiles/tile_0058.png.import": { + "bytes": 960, + "sha256": "77f6b6612676d04ff24c92fc20188bda46257abb566a0ea950777503729233b3" + }, + "assets/kenney/tiny_town/Tiles/tile_0059.png": { + "bytes": 145, + "sha256": "90f0a1089064abeb9701110ba5c0770ff13b3b1fc90c459e30523ccf4711f507" + }, + "assets/kenney/tiny_town/Tiles/tile_0059.png.import": { + "bytes": 960, + "sha256": "b53ff8404d94ead2d1c77ec9718edfdfd1338bc3e05cbb823559756fc3131e4e" + }, + "assets/kenney/tiny_town/Tiles/tile_0060.png": { + "bytes": 177, + "sha256": "bd3479d2718ef0a19a30760028ecb21903e3e2c885f00df22164ad23adb85a6c" + }, + "assets/kenney/tiny_town/Tiles/tile_0060.png.import": { + "bytes": 961, + "sha256": "da515cdbdb205d652fb3c9768e7fd87437c524fad062bd6a3d9060a0b2bd0237" + }, + "assets/kenney/tiny_town/Tiles/tile_0061.png": { + "bytes": 166, + "sha256": "decb9f96369b248fb55d27282bcaf9d3b77f7dd214dad9a68f29509b09e1e754" + }, + "assets/kenney/tiny_town/Tiles/tile_0061.png.import": { + "bytes": 960, + "sha256": "b8cb12638e3f9f4c0724bf6ee66569bc2f2f054a1dbd2ddc7efe2cdd4147f599" + }, + "assets/kenney/tiny_town/Tiles/tile_0062.png": { + "bytes": 184, + "sha256": "0dd68a4e4894db1829dd68e66976238245dff035bc57feda7ae0be6aaaf53a43" + }, + "assets/kenney/tiny_town/Tiles/tile_0062.png.import": { + "bytes": 960, + "sha256": "39069d6a3bc18126950a058271df29f7ca7ddcb070349f9f25a743c6abc7f5fe" + }, + "assets/kenney/tiny_town/Tiles/tile_0063.png": { + "bytes": 216, + "sha256": "516b1ad058739d1b8fc0872624e58c376f673a06be23ec6b9df4f101a6bced7b" + }, + "assets/kenney/tiny_town/Tiles/tile_0063.png.import": { + "bytes": 961, + "sha256": "00931f71ac7a37ee93b8f03e9b16b7400b29978d5cc7258667b49468605f26e6" + }, + "assets/kenney/tiny_town/Tiles/tile_0064.png": { + "bytes": 177, + "sha256": "79c68a61e262de5f9895e8d82133b01d492acc2ce2037f5fb751a0c8cfbfffe9" + }, + "assets/kenney/tiny_town/Tiles/tile_0064.png.import": { + "bytes": 961, + "sha256": "8e033388b03957ac28a82e86e2be3d8f2076ffe989c3babdda6f32b3ea345e9c" + }, + "assets/kenney/tiny_town/Tiles/tile_0065.png": { + "bytes": 166, + "sha256": "3436ff701d93e7d8c2cdb28e169c8707f544a36c626dd73d8025396cf5988ef0" + }, + "assets/kenney/tiny_town/Tiles/tile_0065.png.import": { + "bytes": 961, + "sha256": "78bca404552066eedf87570f1935b2d8c33f610025cd4575233ba45dc5b0b0cd" + }, + "assets/kenney/tiny_town/Tiles/tile_0066.png": { + "bytes": 184, + "sha256": "8c622e9280a72751ff2131cdbeb4913b83cc723b86580c05b1cb35d64ed7f624" + }, + "assets/kenney/tiny_town/Tiles/tile_0066.png.import": { + "bytes": 961, + "sha256": "1e84d8e04c5c1c5e24780702771126eb7700194467fd4cc936e4cb1cf98d5005" + }, + "assets/kenney/tiny_town/Tiles/tile_0067.png": { + "bytes": 216, + "sha256": "48919b108e67e1601e12b737e026c1c73e6f95fa1f1231483efe23f31e125cec" + }, + "assets/kenney/tiny_town/Tiles/tile_0067.png.import": { + "bytes": 960, + "sha256": "699fd44a78955fb5436928c4245231ab9428501f36fb667a7f967274cb1886c3" + }, + "assets/kenney/tiny_town/Tiles/tile_0068.png": { + "bytes": 164, + "sha256": "5f8175226f03497c12f39cb66780f5cbe58bcecaa4e5a1298de7a547f0bfbc1e" + }, + "assets/kenney/tiny_town/Tiles/tile_0068.png.import": { + "bytes": 961, + "sha256": "5f10b6c64a6bbdf8e9558daa05be63e4237eb7538c3f37c398df56cfb7b8e226" + }, + "assets/kenney/tiny_town/Tiles/tile_0069.png": { + "bytes": 171, + "sha256": "1a3a354c78a2e4a6461f5374b57f104c3270b50812d2565d488663b6f9c1f5a7" + }, + "assets/kenney/tiny_town/Tiles/tile_0069.png.import": { + "bytes": 960, + "sha256": "200f8e5f5e5da2435eeee2d90f7e0388d5156ba45da2870efdc26ad89f62ba23" + }, + "assets/kenney/tiny_town/Tiles/tile_0070.png": { + "bytes": 165, + "sha256": "b207c0fff948c9c2125e6ec44328762004665275c9efad248694f9dc28bebbc8" + }, + "assets/kenney/tiny_town/Tiles/tile_0070.png.import": { + "bytes": 961, + "sha256": "caad2093470efc0ec2aa61203f450dac782caf5cd3b402029ac194a70f71057e" + }, + "assets/kenney/tiny_town/Tiles/tile_0071.png": { + "bytes": 139, + "sha256": "a5e4e4db70672d69648f7d3924918b8202a2df9e88b9fafbcbcb7f7def8e6700" + }, + "assets/kenney/tiny_town/Tiles/tile_0071.png.import": { + "bytes": 961, + "sha256": "907f233ab6d10dcfbd4d1370e231ab54ed95476f257cb75959c26d44b4c5a207" + }, + "assets/kenney/tiny_town/Tiles/tile_0072.png": { + "bytes": 137, + "sha256": "ff633e7a44d17849da050def1d96ebd431aa05147ac96938c3c5e1286d66b646" + }, + "assets/kenney/tiny_town/Tiles/tile_0072.png.import": { + "bytes": 961, + "sha256": "e19a515cc46b736f61a64b950fc841703760003a3924492ecd6f5763584abd87" + }, + "assets/kenney/tiny_town/Tiles/tile_0073.png": { + "bytes": 129, + "sha256": "b20e305ce6c9c9b6e2d0cfec786fa45814d0a635b477d2084e2df0d31273ae8a" + }, + "assets/kenney/tiny_town/Tiles/tile_0073.png.import": { + "bytes": 961, + "sha256": "0ba587a018b2c7a02344a91417afaca3c16cc982530e33a3cfe62341fb98ac50" + }, + "assets/kenney/tiny_town/Tiles/tile_0074.png": { + "bytes": 155, + "sha256": "1cfedee7d389983b950901a197746a7d574b1fdee51840920dde20334eefff54" + }, + "assets/kenney/tiny_town/Tiles/tile_0074.png.import": { + "bytes": 961, + "sha256": "6736c99a43bde5a291d5d72e933efad22b2618699f1bcbb646d69c33dd5f7ff3" + }, + "assets/kenney/tiny_town/Tiles/tile_0075.png": { + "bytes": 143, + "sha256": "5c455ecf2c89e5bf6884cd02f63b3ecef79ea9669092ebfe3ac08933252ed0ff" + }, + "assets/kenney/tiny_town/Tiles/tile_0075.png.import": { + "bytes": 961, + "sha256": "0966b8421041d0da914550a814d080aeaaaab08f0754e46de6887a9f53a6a76c" + }, + "assets/kenney/tiny_town/Tiles/tile_0076.png": { + "bytes": 137, + "sha256": "8d36d3a43d2e9a7b75f4d05874b6c4019b0af6aff44fcab5325048c264c15742" + }, + "assets/kenney/tiny_town/Tiles/tile_0076.png.import": { + "bytes": 960, + "sha256": "7754af9b6fee9ea2269cbb147864e22332cb5860af3f5a0f34c62f68444a48f9" + }, + "assets/kenney/tiny_town/Tiles/tile_0077.png": { + "bytes": 129, + "sha256": "41d237731631ec4179146a19605265169843d5ce923c5f89375041d09ca90a11" + }, + "assets/kenney/tiny_town/Tiles/tile_0077.png.import": { + "bytes": 961, + "sha256": "412ac2e09108673cf00ef45dedde2aa0e9c415523d7891379e1573280309a747" + }, + "assets/kenney/tiny_town/Tiles/tile_0078.png": { + "bytes": 155, + "sha256": "fe06ebf43b8efaec63c05bd9f690f2c36a33bd9eba327fc721d445e4f6745f2e" + }, + "assets/kenney/tiny_town/Tiles/tile_0078.png.import": { + "bytes": 961, + "sha256": "2238193fc35af1e7d14bbbf6689a0475e8a5e222c0dc79cd946d41cd434ff7ff" + }, + "assets/kenney/tiny_town/Tiles/tile_0079.png": { + "bytes": 143, + "sha256": "ea29e62b839d2b6495062c6269f885752ad6932137a5636da599fd216efa9e1e" + }, + "assets/kenney/tiny_town/Tiles/tile_0079.png.import": { + "bytes": 960, + "sha256": "5be87d86ca1f820c32968aa9b435f9484f8fce4e8a83277051950200728e2446" + }, + "assets/kenney/tiny_town/Tiles/tile_0080.png": { + "bytes": 160, + "sha256": "c0270191499831acc29fb3f32eedc436acbc0c7e471c13ea0412ba76657090dd" + }, + "assets/kenney/tiny_town/Tiles/tile_0080.png.import": { + "bytes": 961, + "sha256": "697e871fcd16e8fc0c63198c01204f16a13c58c039bf9d867f5acf1cad76b223" + }, + "assets/kenney/tiny_town/Tiles/tile_0081.png": { + "bytes": 120, + "sha256": "ad179a7fc3d6438202c7f2762ceb13cb6decdd44fcc40e4465bdf763fc6915cc" + }, + "assets/kenney/tiny_town/Tiles/tile_0081.png.import": { + "bytes": 960, + "sha256": "4945a9b4b3baf2f1df805c1d0bf1cf50c82a50667b32603fca7b94a742e79b11" + }, + "assets/kenney/tiny_town/Tiles/tile_0082.png": { + "bytes": 162, + "sha256": "f21b75210f83d5d937ab9fa37a24052222e96d9450b57baa9518d21e4431c8fb" + }, + "assets/kenney/tiny_town/Tiles/tile_0082.png.import": { + "bytes": 960, + "sha256": "fe7f2ba83bce390202f2bee357c19ba66c18a739e8c73085b396f1736f7230cf" + }, + "assets/kenney/tiny_town/Tiles/tile_0083.png": { + "bytes": 189, + "sha256": "07b9cf1d4c066f91979688db542bb7fbca663608c98e596a0882d9c3838324a8" + }, + "assets/kenney/tiny_town/Tiles/tile_0083.png.import": { + "bytes": 961, + "sha256": "12ef99196ca4a9057528d3bc5d2fd543144dd26a148cc8c58b156e7aa8f4cdc1" + }, + "assets/kenney/tiny_town/Tiles/tile_0084.png": { + "bytes": 170, + "sha256": "a652e2b1fbf1cff607f83db9c810a9fa65c794c55bebef5cb07658d960b6b219" + }, + "assets/kenney/tiny_town/Tiles/tile_0084.png.import": { + "bytes": 960, + "sha256": "d9a897eeb6dd0f8b508c91b08d3498f7871057ccb3827b1e5beff68cc0bfaba7" + }, + "assets/kenney/tiny_town/Tiles/tile_0085.png": { + "bytes": 163, + "sha256": "7ca5d76ab45b5aa9be4f19c9953e3bee4b64822642f47a4c9b8bd3f94ab6f737" + }, + "assets/kenney/tiny_town/Tiles/tile_0085.png.import": { + "bytes": 961, + "sha256": "7a328160efa2289d804f9a3d8ee602e2dc7ab735e09b60056c657cde694aba2c" + }, + "assets/kenney/tiny_town/Tiles/tile_0086.png": { + "bytes": 161, + "sha256": "1ed488f6faf0d68facc719882d2a1fd287d1979b8d0a21c07371bfeeb3923566" + }, + "assets/kenney/tiny_town/Tiles/tile_0086.png.import": { + "bytes": 960, + "sha256": "a4e6f6d5afee32d06ad9e85e12ed56a0baa8899a462b4cdbf81b2cb5f5b51b02" + }, + "assets/kenney/tiny_town/Tiles/tile_0087.png": { + "bytes": 161, + "sha256": "547c739a99c8fca12ce585db1ee4ab7ac5a0d9eafdda747dad6536325f5ed0fa" + }, + "assets/kenney/tiny_town/Tiles/tile_0087.png.import": { + "bytes": 961, + "sha256": "26656278121da4bca26aa3f9d27b70ab5b39b6451bd8666506c5f0c9d95ff21c" + }, + "assets/kenney/tiny_town/Tiles/tile_0088.png": { + "bytes": 167, + "sha256": "0230599ad30c0611af993c6f7e026eb752e6033b51209af5c83b234725a8b913" + }, + "assets/kenney/tiny_town/Tiles/tile_0088.png.import": { + "bytes": 961, + "sha256": "7cfe030caff15f29385cf6b0406d917cf84b849b984df9cae89416da00ca6b33" + }, + "assets/kenney/tiny_town/Tiles/tile_0089.png": { + "bytes": 163, + "sha256": "245aefd71d4c720401c6c33181266cc9da920a802cc275ee2da0c39a240bbc2b" + }, + "assets/kenney/tiny_town/Tiles/tile_0089.png.import": { + "bytes": 961, + "sha256": "2f60ce1e1373db581a3462deaf4d6fc2be9ec63b4e890df85672d1c41c70b829" + }, + "assets/kenney/tiny_town/Tiles/tile_0090.png": { + "bytes": 161, + "sha256": "cdb2b297444549e861cb091f0fbd2bc4d7c4b9203a1e0add4a6e7c4809d35cc4" + }, + "assets/kenney/tiny_town/Tiles/tile_0090.png.import": { + "bytes": 961, + "sha256": "99f90fb207c0b22c65a33db19b733c56e5b29bb406f24ce4e88f5f01c2cb82be" + }, + "assets/kenney/tiny_town/Tiles/tile_0091.png": { + "bytes": 162, + "sha256": "d74235f5b7d9d5ef85acdd9d15c0db3d7e0cd52e19029055f483522dc58fd1a9" + }, + "assets/kenney/tiny_town/Tiles/tile_0091.png.import": { + "bytes": 961, + "sha256": "f6d2326f62e7fc34e4bae036c8a967ae455d3a8ea329c57eaa07e33eb7c4adb5" + }, + "assets/kenney/tiny_town/Tiles/tile_0092.png": { + "bytes": 158, + "sha256": "9e8df390488fef72d302553abb57028841b030e4ff91681d8fe8b36ef28b8d81" + }, + "assets/kenney/tiny_town/Tiles/tile_0092.png.import": { + "bytes": 961, + "sha256": "ac51f70444b409ca5442afe48848d9c7f3a4e943f3986336905d68ba55ed0bbf" + }, + "assets/kenney/tiny_town/Tiles/tile_0093.png": { + "bytes": 162, + "sha256": "d432578df64a8e4cc5cefe559129badefd30a9e9ad988eef6e1470bba7eb9fc1" + }, + "assets/kenney/tiny_town/Tiles/tile_0093.png.import": { + "bytes": 961, + "sha256": "d380996a6c507801dbe04d841f47b0522e16d41a09f99ee2dce083155047d627" + }, + "assets/kenney/tiny_town/Tiles/tile_0094.png": { + "bytes": 185, + "sha256": "e513be719af08aa8e365bc6a731b950bb76feed4da04ef41836ffbaa4e387b15" + }, + "assets/kenney/tiny_town/Tiles/tile_0094.png.import": { + "bytes": 961, + "sha256": "6cff2660a7ee61fa068633e05479c201127d318f6e83f181d22e882f6d1b6e7c" + }, + "assets/kenney/tiny_town/Tiles/tile_0095.png": { + "bytes": 195, + "sha256": "4e67c3f041644af772b07705741d68ae4efee4b7ab642b64797b64c9ef1556e7" + }, + "assets/kenney/tiny_town/Tiles/tile_0095.png.import": { + "bytes": 961, + "sha256": "31429e87600fdf3693aef1d5fd51012ef742fd129c12c235f6887ec0735faf16" + }, + "assets/kenney/tiny_town/Tiles/tile_0096.png": { + "bytes": 189, + "sha256": "c62b7cd4a8397dc1d7be794246ee5a05aefef46ae320db1cf1aa9d2e752899ed" + }, + "assets/kenney/tiny_town/Tiles/tile_0096.png.import": { + "bytes": 961, + "sha256": "5b6a0546a1edbff4de281d0dd272807414c7de1309f3c479ce22571f7d2afe6a" + }, + "assets/kenney/tiny_town/Tiles/tile_0097.png": { + "bytes": 139, + "sha256": "93ff83f1b5d2e4485215acefe592bfb02ef735a230ba067d9d4d81f9b6343902" + }, + "assets/kenney/tiny_town/Tiles/tile_0097.png.import": { + "bytes": 961, + "sha256": "685d08e0675a47ea61a84f776381467b696db9ac1ec754e9241f1feeb0331162" + }, + "assets/kenney/tiny_town/Tiles/tile_0098.png": { + "bytes": 181, + "sha256": "61406b531c360228979cc37cb7f31af32aea8c099cc1c7a7e5a7df67a86bfe3f" + }, + "assets/kenney/tiny_town/Tiles/tile_0098.png.import": { + "bytes": 961, + "sha256": "2ca232e6bb0a5d9e2d6f89985bcc0026c9c5cd4907bc05d3734b436383b3acc2" + }, + "assets/kenney/tiny_town/Tiles/tile_0099.png": { + "bytes": 171, + "sha256": "703b8144c0a570d64d9a586d37ed41ff3b4f414aa9dfb042e1a1e54f546eee33" + }, + "assets/kenney/tiny_town/Tiles/tile_0099.png.import": { + "bytes": 961, + "sha256": "855a5c1661ea028960514415091fd90c407f033d3e87df46655c4fe13e8cce18" + }, + "assets/kenney/tiny_town/Tiles/tile_0100.png": { + "bytes": 132, + "sha256": "535aef9ec659d745835aa54be8ed322642f8397183a52af2e9fb902c21a2deed" + }, + "assets/kenney/tiny_town/Tiles/tile_0100.png.import": { + "bytes": 961, + "sha256": "951a74e0dc5a944d9f400d46b16b8d2c7d82022b8d9d26967245c3904e4812a0" + }, + "assets/kenney/tiny_town/Tiles/tile_0101.png": { + "bytes": 174, + "sha256": "b553572407b1587f0ef3b3de1dd0d600a02e6444a957c05d2402fcba2fb16bfa" + }, + "assets/kenney/tiny_town/Tiles/tile_0101.png.import": { + "bytes": 961, + "sha256": "ef8ff0d431d7b3aff15e8eeb3b67898d969ade9b65608f2e4fd569384b3ca92e" + }, + "assets/kenney/tiny_town/Tiles/tile_0102.png": { + "bytes": 175, + "sha256": "13811299a06a324bbb873d4bbac79e5c74c5f19eaaa2176f509f7b9a206a6157" + }, + "assets/kenney/tiny_town/Tiles/tile_0102.png.import": { + "bytes": 961, + "sha256": "cfe7fece18897a4d323fdcca0ab9eafb4598c8acda4a6438b55dbf93c8e17715" + }, + "assets/kenney/tiny_town/Tiles/tile_0103.png": { + "bytes": 196, + "sha256": "af835af3f3f517b324cd363460cef7eeff4f97d6db834627e6c945d2c92d87aa" + }, + "assets/kenney/tiny_town/Tiles/tile_0103.png.import": { + "bytes": 961, + "sha256": "95fc75cc93e94d2e970570dfd1a6b540afdb27a4baa3a31b8fad59e7425f9760" + }, + "assets/kenney/tiny_town/Tiles/tile_0104.png": { + "bytes": 242, + "sha256": "3befce5d6373d4315f35eeed22752bb1cf7a2ab5d008ce26dd6b4aebbb278978" + }, + "assets/kenney/tiny_town/Tiles/tile_0104.png.import": { + "bytes": 961, + "sha256": "daa8e56abf154e0df79e1a4285e6ffd6151778c33c2377f3d54ec576570a3556" + }, + "assets/kenney/tiny_town/Tiles/tile_0105.png": { + "bytes": 198, + "sha256": "6a8405b5a036ca3ca902a500b74a4bfcf8a71eb5b343e45303a6949b0d67d36d" + }, + "assets/kenney/tiny_town/Tiles/tile_0105.png.import": { + "bytes": 960, + "sha256": "9957146790cd7962483c9e255e11eafad16d18671f7db4c8a2777be132a40ca8" + }, + "assets/kenney/tiny_town/Tiles/tile_0106.png": { + "bytes": 178, + "sha256": "f915896f745a28497de7c86602b64b0a3bcabb7821103965926ea768b5476b18" + }, + "assets/kenney/tiny_town/Tiles/tile_0106.png.import": { + "bytes": 960, + "sha256": "6efe39a74ebdd3d51118b9d1b70604d38c27dea591498c9d18207b2b6a2b2ed8" + }, + "assets/kenney/tiny_town/Tiles/tile_0107.png": { + "bytes": 202, + "sha256": "a6783dabf3053b2a00c58fa7a8d7ff27b0ffdd08dcbe695b1ec82d0c2d312154" + }, + "assets/kenney/tiny_town/Tiles/tile_0107.png.import": { + "bytes": 960, + "sha256": "3954067d009d2fcc94111910e44292edd1eb76c251b3ac294755210a19a7c425" + }, + "assets/kenney/tiny_town/Tiles/tile_0108.png": { + "bytes": 122, + "sha256": "462f00726b47e1363d746524d37d9ef53de426b25cb651057c6f19db97cc5acc" + }, + "assets/kenney/tiny_town/Tiles/tile_0108.png.import": { + "bytes": 961, + "sha256": "1ac6904d56af75bfd5ecd84cb59c80103a617d09739293d486b58a3b9ad69db8" + }, + "assets/kenney/tiny_town/Tiles/tile_0109.png": { + "bytes": 99, + "sha256": "d1ff475a1ad0d4fd5d2c2a8b1fe3b96657d10f9c5b87d204138f1d7a58ac9d04" + }, + "assets/kenney/tiny_town/Tiles/tile_0109.png.import": { + "bytes": 961, + "sha256": "78b032d49ccd649cd288045b85f0c74df052dd9ed376bea18b5d546047749a67" + }, + "assets/kenney/tiny_town/Tiles/tile_0110.png": { + "bytes": 121, + "sha256": "0de41607a1269aa7a890461c249528d85b9eeb10745b130e95c8395c8a45b9c1" + }, + "assets/kenney/tiny_town/Tiles/tile_0110.png.import": { + "bytes": 961, + "sha256": "56ab25e375ba37f449c843cee36a51b119958a6b6e53251e3beddac1d77a5493" + }, + "assets/kenney/tiny_town/Tiles/tile_0111.png": { + "bytes": 203, + "sha256": "5af9d32868dfab9ff81d9f23db0d966c899c5942ebf167cb9d09eba052d1ca8c" + }, + "assets/kenney/tiny_town/Tiles/tile_0111.png.import": { + "bytes": 960, + "sha256": "fe4ec25112c130c2ebc023563b7d76a6e8e59fa93796a609397d7424a939aa9b" + }, + "assets/kenney/tiny_town/Tiles/tile_0112.png": { + "bytes": 203, + "sha256": "6b92320e5dadb0062ab8d1fb06dc088a50f5a45660b8feca67a26c9687fe6a0a" + }, + "assets/kenney/tiny_town/Tiles/tile_0112.png.import": { + "bytes": 961, + "sha256": "ffd9a5f6154ef4c4afa34fb5915c307f314eaa1a07b8b4d021fd38fe55581219" + }, + "assets/kenney/tiny_town/Tiles/tile_0113.png": { + "bytes": 200, + "sha256": "3e78c40c8587a279b3ddd896230d8ab39013f38f854e675db69447c2c1b5c002" + }, + "assets/kenney/tiny_town/Tiles/tile_0113.png.import": { + "bytes": 961, + "sha256": "e3b7b4daa7b0eb30cbd12d4354b9961f4f04038ac68e7d151ccaa76d91e2a861" + }, + "assets/kenney/tiny_town/Tiles/tile_0114.png": { + "bytes": 200, + "sha256": "3d89b0b1ebed238aecfa84a251d9eb1bab87a5ae34fac5e91d788176ed523f41" + }, + "assets/kenney/tiny_town/Tiles/tile_0114.png.import": { + "bytes": 961, + "sha256": "f7f9bba33ba916a2f774c38657dd4d453c11a0fceaa7c1c56ff7eb7424eee936" + }, + "assets/kenney/tiny_town/Tiles/tile_0115.png": { + "bytes": 186, + "sha256": "3a2c43fb289410ebbe9a4301a664fdb3694583fc338743e0f9ecdb523db9bad3" + }, + "assets/kenney/tiny_town/Tiles/tile_0115.png.import": { + "bytes": 961, + "sha256": "76dd9dc8bd75d823c9c02b5817247d7678a1ac6ade13252f13670bb186101925" + }, + "assets/kenney/tiny_town/Tiles/tile_0116.png": { + "bytes": 184, + "sha256": "5b5b45a7f2f756fe0251f84281ae5733b4bcff2b7167d432414c638a722fcc36" + }, + "assets/kenney/tiny_town/Tiles/tile_0116.png.import": { + "bytes": 961, + "sha256": "b8a53e6e601ba6703431de2126aa95a08e3242db5b1ea120e3049fb069429b9b" + }, + "assets/kenney/tiny_town/Tiles/tile_0117.png": { + "bytes": 172, + "sha256": "d2be7fbb7b9c2a278dcbe2fc54af0e9f08e0f0c565c5f6f96cf44562deef0665" + }, + "assets/kenney/tiny_town/Tiles/tile_0117.png.import": { + "bytes": 961, + "sha256": "186f8220eca2a2660305cd2c232a7061acd636470251e469040ca807cb0c2ef8" + }, + "assets/kenney/tiny_town/Tiles/tile_0118.png": { + "bytes": 183, + "sha256": "81c5aeea97f62be85676741339089472d44e42cb907f08adb63c47b8db739bc1" + }, + "assets/kenney/tiny_town/Tiles/tile_0118.png.import": { + "bytes": 960, + "sha256": "78511c07c70676b4ca4a8b028470feeb821e0186c9173834364133448e7c8e20" + }, + "assets/kenney/tiny_town/Tiles/tile_0119.png": { + "bytes": 183, + "sha256": "30091d93126c683011d0866c54c755d631af69b97c396c3a6b3e285a9da6a2f8" + }, + "assets/kenney/tiny_town/Tiles/tile_0119.png.import": { + "bytes": 961, + "sha256": "267aa293934aca4e30439150dac471b029391511da59ace9633aa573aabe024e" + }, + "assets/kenney/tiny_town/Tiles/tile_0120.png": { + "bytes": 158, + "sha256": "42c3fe979bb36603b5349f87eb2beb31b29459ef72c5b34e421ea0ae67714fd2" + }, + "assets/kenney/tiny_town/Tiles/tile_0120.png.import": { + "bytes": 961, + "sha256": "cf7e72e5342958150af8bd04bf7468cefe4edba0e656265325a30a203a977e46" + }, + "assets/kenney/tiny_town/Tiles/tile_0121.png": { + "bytes": 141, + "sha256": "c23db7cbd39871a8b57be75f3d4b528b8e787997f96fdf367b350f1241e43305" + }, + "assets/kenney/tiny_town/Tiles/tile_0121.png.import": { + "bytes": 961, + "sha256": "a74e8dad6a0d3cd6d8e3f7772f15a9be76fbb98a7ff07d335ccaabcba6d42441" + }, + "assets/kenney/tiny_town/Tiles/tile_0122.png": { + "bytes": 163, + "sha256": "d8a941d06fd2373157dfcdcc3681ad2f930c044d64870ce5ef8500e9472d8c59" + }, + "assets/kenney/tiny_town/Tiles/tile_0122.png.import": { + "bytes": 961, + "sha256": "bf3dbaf401f99a1150659d912c41fdc59428cf07d4054dfd7ed3eb15a96f3202" + }, + "assets/kenney/tiny_town/Tiles/tile_0123.png": { + "bytes": 145, + "sha256": "e3fd78cfaf7625dcd088a0d870568f1e186f67999ab4849eee4b988f6b796d1c" + }, + "assets/kenney/tiny_town/Tiles/tile_0123.png.import": { + "bytes": 961, + "sha256": "5db42a1bcf830c8341c91b1fa8a536cf9e7d6f6ceff36e91010681529e223358" + }, + "assets/kenney/tiny_town/Tiles/tile_0124.png": { + "bytes": 146, + "sha256": "35195776721b22c59b4e6ac2b36534d5da18bc686ab98049d6466bcfae2ee96e" + }, + "assets/kenney/tiny_town/Tiles/tile_0124.png.import": { + "bytes": 961, + "sha256": "5bdae429cbf30df9f50111462d34bee53182f165d240ac45cf980a17720851e6" + }, + "assets/kenney/tiny_town/Tiles/tile_0125.png": { + "bytes": 186, + "sha256": "fd107e639cb7bde68f84ebd244bc7171a652a9b5b902661fb38a8dd8e2473f69" + }, + "assets/kenney/tiny_town/Tiles/tile_0125.png.import": { + "bytes": 961, + "sha256": "c27dc5eff3274a9697cc15ec8b1a961b3d29cde968f5b3bff9e8b9b40184a8b8" + }, + "assets/kenney/tiny_town/Tiles/tile_0126.png": { + "bytes": 140, + "sha256": "ef91491aabacc8a11c417f5aed4e40817fc0dafd1e772772dca3ea74466ed6b8" + }, + "assets/kenney/tiny_town/Tiles/tile_0126.png.import": { + "bytes": 961, + "sha256": "23eb7ba1905c5c333c02c0e53c60cd0ba0e4de48e87b55f75451e005063f2ed8" + }, + "assets/kenney/tiny_town/Tiles/tile_0127.png": { + "bytes": 184, + "sha256": "22dc3bd37cc7419f14b51f81e7e2b26794a4143b239c35d9d4288d69dc987432" + }, + "assets/kenney/tiny_town/Tiles/tile_0127.png.import": { + "bytes": 961, + "sha256": "dd1a769c7467868eeb8b7fd7ade345cb11c01b951408bc260068ecfcae8abc97" + }, + "assets/kenney/tiny_town/Tiles/tile_0128.png": { + "bytes": 200, + "sha256": "28289aeb6de1a3a8fe051930365cbf9d0fbde24dbc875f96ee45dfcd2f225b28" + }, + "assets/kenney/tiny_town/Tiles/tile_0128.png.import": { + "bytes": 961, + "sha256": "98abd148339516fe6fc772a8ca242381a1c137c1bd457004bf1095b1ef974aa4" + }, + "assets/kenney/tiny_town/Tiles/tile_0129.png": { + "bytes": 200, + "sha256": "0a273e03a72e29f6343647a511a98b14fa3b26e239f3df02a4e2e4da4b4470a4" + }, + "assets/kenney/tiny_town/Tiles/tile_0129.png.import": { + "bytes": 960, + "sha256": "8db359dd68e5e27b2e5d815268952dc583c23c8929e69521fef250bce988225a" + }, + "assets/kenney/tiny_town/Tiles/tile_0130.png": { + "bytes": 206, + "sha256": "1c6b4444519eddc55abe82de5855effc8e9754dc206186712272e8de8e139b26" + }, + "assets/kenney/tiny_town/Tiles/tile_0130.png.import": { + "bytes": 961, + "sha256": "80988ea2c17bc102486196b33d90e8ea1bebd3b0fff8a3fb8e440b32e0208957" + }, + "assets/kenney/tiny_town/Tiles/tile_0131.png": { + "bytes": 220, + "sha256": "a9592d792e563721dc5c38d9d922aad3fdc6c603a7d70822ef4194991ef42452" + }, + "assets/kenney/tiny_town/Tiles/tile_0131.png.import": { + "bytes": 961, + "sha256": "cdd3a65934dbf1a92b085dab7ef02c88879cbca9f0a337341b716b499c3991a0" + }, + "assets/kenney/tiny_town/Tilesheet.txt": { + "bytes": 238, + "sha256": "1b86fae0b27a628f18cfd89c6e148ea1d727f5ef02fc1dbeb5a6e9f9667bea00" + }, + "assets/kenney/tiny_town/Tiny Dungeon (base pack).url": { + "bytes": 131, + "sha256": "6d93bb958f9b7d5f21ceb8cbd24c184dc5c9f87aee7c680b336ecba7a89823d8" + }, + "assets/kenney/tiny_town/Visit Kenney.url": { + "bytes": 44, + "sha256": "6787defa3ecb6118622e1903b65802c0200628fae5164b51b4fd467f92f3f284" + }, + "assets/kenney/tiny_town/Visit Patreon.url": { + "bytes": 54, + "sha256": "2fcba31333935f4aa35e9de2e74e2b7ba1b1a8011540e08016ff6d81e9dd7490" + }, + "assets/mockups/the-tree-main-gameplay-visual-mock-v1.png": { + "bytes": 2722232, + "sha256": "58877bb1afbf0e72af6531cadab01eca82f9bd8cefb0cdb45f81d6d2dbb83717" + }, + "assets/mockups/the-tree-main-gameplay-visual-mock-v1.png.import": { + "bytes": 1029, + "sha256": "ad532d171e4c4b57c7e28000f2abf3948e340bc3ce368e4bd82711d08b8abcf9" + }, + "assets/mockups/the-tree-main-gameplay-visual-mock-v1.prompt.md": { + "bytes": 2899, + "sha256": "7d9ad316086f1256ab8fbcd24e84dc497b117b1c502df1f76d176aa61cedc9d8" + }, + "assets/mockups/the-tree-main-gameplay-visual-mock-v2-japanese-fantasy.png": { + "bytes": 3049138, + "sha256": "1c079ebb8b2b9610df0e79a2750cc5a0db53f26d137b6df511b12cb6884532d0" + }, + "assets/mockups/the-tree-main-gameplay-visual-mock-v2-japanese-fantasy.png.import": { + "bytes": 1080, + "sha256": "fdf307e5147e594cab5acd4e1f8c06d5bb62b1962241de050df06f7879d6aa28" + }, + "assets/mockups/the-tree-main-gameplay-visual-mock-v2-japanese-fantasy.prompt.md": { + "bytes": 3069, + "sha256": "bb0f8ba1350e1fa15be2936139dbbac02a809b9db699b3ae073ce579996ad439" + }, + "assets/mockups/the-tree-main-gameplay-visual-mock-v3-prompt.md": { + "bytes": 1874, + "sha256": "9e938a990e01fe97daebc0405256bf63cb87af6e2b7951568de381f3775db580" + }, + "assets/mockups/the-tree-main-gameplay-visual-mock-v3-tower-style.png": { + "bytes": 3076090, + "sha256": "f802d2b4f275f136fcacc963f7d06228f5d71dbc2399a19f7e04c6bc7531321b" + }, + "assets/mockups/the-tree-main-gameplay-visual-mock-v3-tower-style.png.import": { + "bytes": 1066, + "sha256": "fbdac36124d5aa559038452d70d4e6cbde902ff0bafa3e9f20caf189b2e546d3" + }, + "assets/mockups/the-tree-runtime-ui-v3-assets-front.png": { + "bytes": 1461992, + "sha256": "e54ff252bae66010dc885846acdcdb0117b930e0e3cfc8f5459acc2841eabf0d" + }, + "assets/mockups/the-tree-runtime-ui-v3-assets-front.png.import": { + "bytes": 1023, + "sha256": "9bfe922148dc14bf729b92cc30c67119d1645e0e02d79eb79c175c5415badd0f" + }, + "assets/mockups/the-tree-runtime-ui-v3-first-pass.png": { + "bytes": 434318, + "sha256": "cc7f23ea258d49a8f2bd23735c63196b94ece380eaed934ee6e7f1b6d881cb44" + }, + "assets/mockups/the-tree-runtime-ui-v3-first-pass.png.import": { + "bytes": 1017, + "sha256": "b861b4efc54a95cc3ff0b28b4aa38e1383469b98e6c5eb19bf022330169cefc1" + }, + "assets/mockups/the-tree-runtime-ui-v4-icons.png": { + "bytes": 1317405, + "sha256": "b0826ffce116d96dbe5b901174713f84b55a0e72931f29821e0947b844b9c1b8" + }, + "assets/mockups/the-tree-runtime-ui-v4-icons.png.import": { + "bytes": 1003, + "sha256": "d14ae1dd54a1aab6ab3ead98fbb85153b1530f7ee7ee77efe9c0846dc3eda204" + }, + "assets/mockups/the-tree-runtime-ui-v5-map-icons.png": { + "bytes": 1321334, + "sha256": "aca56c954b209b0a03342c0fde576cef15bfaa2ce2a1f9feedd51744fcfdb42c" + }, + "assets/mockups/the-tree-runtime-ui-v5-map-icons.png.import": { + "bytes": 1015, + "sha256": "b31b085b2e8c0c37cf43ff2d662af75b4a64a9472ab240669a09552f9cfa7969" + }, + "assets/mockups/the-tree-runtime-ui-v6-actors-4k.png": { + "bytes": 6569282, + "sha256": "9b8a1d9e2e4408b7ee99505d1978a44a489eb8b6945d669d1c52e7e220937e79" + }, + "assets/mockups/the-tree-runtime-ui-v6-actors-4k.png.import": { + "bytes": 1015, + "sha256": "62e578057df63b8ac8238f63b91e24e6bb655465b29916888aba7f137cd267ef" + }, + "assets/mockups/the-tree-runtime-ui-v6-actors.png": { + "bytes": 1322150, + "sha256": "8f9ea1b8bbc779e3f401d4cfdc8dcb0d10b95b7f87f37d3737af9bc85aa9dddd" + }, + "assets/mockups/the-tree-runtime-ui-v6-actors.png.import": { + "bytes": 1005, + "sha256": "e0be674acd73182b9c8c48c42afd054c814f00a0d924d023c6810596afefc6be" + }, + "assets/mockups/the-tree-runtime-ui-v7-skins-4k.png": { + "bytes": 8849219, + "sha256": "a32d61772e06b944cf7aeb7a2dd0bd1ccfac7cbb3d8e293a6d7075f780f48904" + }, + "assets/mockups/the-tree-runtime-ui-v7-skins-4k.png.import": { + "bytes": 1012, + "sha256": "b8610cd4424365597cb4bda6c20c161853394016139fd134184e58f96f548b6d" + }, + "assets/mockups/the-tree-runtime-ui-v7-skins.png": { + "bytes": 1778605, + "sha256": "f0dec82c2da661df52124cd3c2f59c3ac94db9cb5d384846d42f1901ada370cf" + }, + "assets/mockups/the-tree-runtime-ui-v7-skins.png.import": { + "bytes": 1003, + "sha256": "af76edcda2da8acbdcf1e61406b91158091591893eea1b85fcd1e3ea45f8261d" + }, + "assets/shaders/layer_lens.gdshader": { + "bytes": 787, + "sha256": "be8b7965b371a1935bec943bb244a32e70471f31a78d22151ee7133931029da1" + }, + "assets/shaders/layer_lens.gdshader.uid": { + "bytes": 20, + "sha256": "1ee97a9c1d31493ea837db26bb001c29c0d8beb63aba6f57a50efdff6fa2361e" + }, + "assets/themes/japanese_fantasy/README.md": { + "bytes": 5544, + "sha256": "edc674a212eeb0cf5a4e40e73e857e8303bf08d1199e96aa8071cba588f33f6d" + }, + "assets/themes/japanese_fantasy/actor-markers-v2.png": { + "bytes": 2165570, + "sha256": "b742c207613d773e47f21c917975a2ba0eec8a2d9485ff655fef37e3ebf4bde4" + }, + "assets/themes/japanese_fantasy/actor-markers-v2.png.import": { + "bytes": 981, + "sha256": "2c5230290f61d8d5846c51de9000c23913855dc5b698c6336b9e0b98bc633b77" + }, + "assets/themes/japanese_fantasy/facility-icons-v2.png": { + "bytes": 1848036, + "sha256": "6fb830fbe3961125fe0f3e640efe63ecba4de5ea6fb758eaf0da2738940fa1b6" + }, + "assets/themes/japanese_fantasy/facility-icons-v2.png.import": { + "bytes": 985, + "sha256": "484caa3dd68dd166a84347ca6297b0228b9b4d6ed7d4e7c3fe3aa70606c2d8fe" + }, + "assets/themes/japanese_fantasy/system-icons-v2.png": { + "bytes": 1786659, + "sha256": "1f1d4f5e20ba4de61e3fb967352b68db435fa36ec5e4bacab2802f132e3b8d40" + }, + "assets/themes/japanese_fantasy/system-icons-v2.png.import": { + "bytes": 978, + "sha256": "103127fbb3a0287421090089a679985109852ba0ff0f6c90ef3ff0beab06e7ba" + }, + "assets/themes/japanese_fantasy/ui-skin-v1.png": { + "bytes": 2492477, + "sha256": "4b4906cc9c6ed3fdb5330bfc11177376e5fec10afa3f2dac9318dbaf71833ff2" + }, + "assets/themes/japanese_fantasy/ui-skin-v1.png.import": { + "bytes": 964, + "sha256": "0f557fe050aaf30226a648f483581201b8805f76e10e0d9b969ce10079707404" + }, + "assets/themes/japanese_fantasy/visual-theme-v1.tres": { + "bytes": 12404, + "sha256": "42e968ba5e35c228d3ff372f92a8e249ec3a743045be0a3ec158556944c0bc18" + }, + "assets/themes/japanese_fantasy/world-back-v1.png": { + "bytes": 2616183, + "sha256": "2b0dbf07c17e677ed023c56b1e90f013c40362f46c427950033868b042508c7c" + }, + "assets/themes/japanese_fantasy/world-back-v1.png.import": { + "bytes": 973, + "sha256": "5ba3cb9af8dddb345abb05be9bbd44240fade14cd9d113de4a6d1f6343e74196" + }, + "assets/themes/japanese_fantasy/world-front-v1.png": { + "bytes": 2774704, + "sha256": "02b52ea05bdb4bbe78b8c905374052505bb73411eb7f2b0578e9b1a82994cde5" + }, + "assets/themes/japanese_fantasy/world-front-v1.png.import": { + "bytes": 976, + "sha256": "186e162d2d5e4567d50768ebf286133031c7dca02954f9b25f3abead0278a7ae" + }, + "autoload/event_bus.gd": { + "bytes": 294, + "sha256": "6950280a5639dd5a3071ffefd034cb443a694739d5bf8c4e2dbcd52aadbab4b2" + }, + "autoload/event_bus.gd.uid": { + "bytes": 20, + "sha256": "4a37ce59be5cafd10106cb3f76addada7aed9ec3ee516583ff95604ffc128671" + }, + "autoload/game_clock.gd": { + "bytes": 841, + "sha256": "39400634a57ccbf8c584b54a15a259048a95da90b1528330151e45667d65f7f7" + }, + "autoload/game_clock.gd.uid": { + "bytes": 20, + "sha256": "4fe213c1953dc7c4d167c9bb109f052f639be08529b6fe652fa911029ba9fe35" + }, + "autoload/game_state.gd": { + "bytes": 3536, + "sha256": "cf0e884910220e54c56b5875983e53de439af9d893be1e1b65c2121d2a30722f" + }, + "autoload/game_state.gd.uid": { + "bytes": 19, + "sha256": "1b73841c770827cd1e86331c153f927283a049176f340ef9aa7028c72cc630da" + }, + "autoload/simulation_runtime.gd": { + "bytes": 623435, + "sha256": "dbde152e4d93a297e1215a281b22ccd97bed994541c3fc89417cb8f56304ad95" + }, + "autoload/simulation_runtime.gd.uid": { + "bytes": 19, + "sha256": "96889c02b810894cc82291955880ed667ad27ad754f1b1531a5456cc186d3d91" + }, + "data/characters/mvp_guest_classes.json": { + "bytes": 4869, + "sha256": "5d55d4a0a10902da747000357ba36be9644bf027f253ea4b200a75f1ee4cc88b" + }, + "data/characters/mvp_species.json": { + "bytes": 1327, + "sha256": "6c7caf52305d76e07a0dee2b225ee92674c45d24cbca7f62bf4029bd3db00915" + }, + "data/characters/mvp_staff_candidates.json": { + "bytes": 10385, + "sha256": "a2d0eecbe0369e9c725ecdfff5fa12749dd99c3aec458fc3412d1045affc7934" + }, + "data/characters/mvp_unique_characters.json": { + "bytes": 1032, + "sha256": "bf83872ae9bacedf4b1d48a8b1eb28479f3c33416303dbbe8ba11b6466c0dde4" + }, + "data/environment/cleaning_policy.json": { + "bytes": 171, + "sha256": "7d378dc2341385945e959782ebcfcd2e6530da3be06bf0f05012e3fe28f76e8d" + }, + "data/facilities/adult_private_room.tres": { + "bytes": 2520, + "sha256": "d8501586416b5c57a8b3b3b2afd1c0143428d8a4fa1df7112e995bd36649df6d" + }, + "data/facilities/cafeteria.tres": { + "bytes": 867, + "sha256": "86d540fe2d78b9dcdbe5a0af6e4a001f4cec54934636ed01deb25a943c79128a" + }, + "data/facilities/expansion/black_market.tres": { + "bytes": 892, + "sha256": "c209d734c82487f6df4c03714618865d6a5f1d2cf991dc0056fe4bbad8f03a42" + }, + "data/facilities/expansion/chapel.tres": { + "bytes": 845, + "sha256": "9b30a7c51712e7bb99c17870d1f03e3429ea9279851d88284545bb2eb5042fcb" + }, + "data/facilities/expansion/cleaning_room.tres": { + "bytes": 707, + "sha256": "ae366cf67cbf117db7989c6b76092eb5a65229b93d35999a40d19b8260f95ad8" + }, + "data/facilities/expansion/clinic.tres": { + "bytes": 863, + "sha256": "339cf22c68d7ab3cb1514b9e8d2ea63dc0772fe93918d70767c11cf7b6ee0e16" + }, + "data/facilities/expansion/cold_storage.tres": { + "bytes": 767, + "sha256": "1aac824147b52b41e124d2ab2ce63c3bac58de2ec7fc447a5806a1cf9fa9ad99" + }, + "data/facilities/expansion/general_store.tres": { + "bytes": 779, + "sha256": "76872e0375648b43f05fdc5581ccabe4aa6a166674c3b523980dd1cf0b6e6dc1" + }, + "data/facilities/expansion/guild_counter.tres": { + "bytes": 833, + "sha256": "93e8736da4aab8a17b1c8e7831c9a7b8de7f32d0ec251aa9aa5c8cf859c8fd7b" + }, + "data/facilities/expansion/laundry.tres": { + "bytes": 913, + "sha256": "2518ea2e5da12cf4f2997502bf50f00dd8145caca153fb3486b44b99881fdab4" + }, + "data/facilities/expansion/maintenance_workshop.tres": { + "bytes": 898, + "sha256": "8bd10332a9f45a252febdc626f22f90507317fb4cff5b18b2526aacd1f1a176b" + }, + "data/facilities/expansion/mana_control_room.tres": { + "bytes": 871, + "sha256": "55e4c52a049ff61ddf3d081ccb990a8572b64bc7cf37d3a0d52ca5a08cc32f25" + }, + "data/facilities/expansion/premium_room.tres": { + "bytes": 789, + "sha256": "6665090e041f36df5809314cd171be228a94bf77d7e93f5b70be648db4705d98" + }, + "data/facilities/expansion/private_bath.tres": { + "bytes": 862, + "sha256": "241b807e7fa3a1b9dc4bda0d2495e637155cdaea89a4234e37a121f00098499c" + }, + "data/facilities/expansion/secret_tavern.tres": { + "bytes": 917, + "sha256": "f0a1372931078fa0f93dd5b9cec6df6b137975479aa706633fdf6a9be4cf1f62" + }, + "data/facilities/expansion/staff_dormitory.tres": { + "bytes": 814, + "sha256": "8d7c7cd6dfe98d137f7fef62e35eb31f82f1ca282216a40df54ac81728101271" + }, + "data/facilities/expansion/tea_lounge.tres": { + "bytes": 864, + "sha256": "77d1ace36c5e84f80c0e6d563ae973c7ff1cd12b56956afd4895cdcdd5771a67" + }, + "data/facilities/expansion/underground_guest_room.tres": { + "bytes": 751, + "sha256": "cdfd0f8cd21812a9972485926dff27daaa6718af16aac1651894728b087bef9e" + }, + "data/facilities/expansion/vip_private_salon.tres": { + "bytes": 909, + "sha256": "1c94a7a70393262fba82112c3f4a0cb67ad22728664f5ca408f450049d3657a7" + }, + "data/facilities/expansion/waste_processing.tres": { + "bytes": 886, + "sha256": "9954855c7a07e425376a220c589989beb6ec95da3c5331316ef3615a60b45f1d" + }, + "data/facilities/guest_corridor.tres": { + "bytes": 814, + "sha256": "d77ccf267e20a26ed70527d29e8d54e6fcab1df213f02d5a4e28ead4f705276b" + }, + "data/facilities/guest_elevator.tres": { + "bytes": 814, + "sha256": "ad4fb3c439ac4ed90fe52f07e29ed7b4ff654c54d1c400c7c8e226da77127af7" + }, + "data/facilities/infrastructure/guest_stairs.tres": { + "bytes": 911, + "sha256": "757c687b1ebe2a3f237fb28092cd5f01591f15b2bcd1b4e639042a24635a92c6" + }, + "data/facilities/infrastructure/mana_warp.tres": { + "bytes": 875, + "sha256": "42f1156e04a4454d8525bf3dd77b214a39e11bb7c5e749af1413fe77cdb1e456" + }, + "data/facilities/infrastructure/service_stairs.tres": { + "bytes": 908, + "sha256": "637217d867bcc99669d27c54b6d2c391c82a4a17356ab9a80c897ccaee38622c" + }, + "data/facilities/infrastructure/service_warp.tres": { + "bytes": 843, + "sha256": "712ae26bf2d9d18c9da6344ee18ef716250e051693bcace586b85f35a794dba2" + }, + "data/facilities/kitchen.tres": { + "bytes": 2013, + "sha256": "38197aa8a3e90c03a82e9ccdc88bb444af4eeb0349c41a39e0bdd7b188e7d5d3" + }, + "data/facilities/massage_room.tres": { + "bytes": 834, + "sha256": "75ecf845fb3cfa8d3150f6b0dc90e901953469af512611384b70cc4878d21e85" + }, + "data/facilities/public_bath.tres": { + "bytes": 823, + "sha256": "8ec259f48ed75c8ab2e5154a1caccf19f6be04331adbe774b877f0a2d8b2f778" + }, + "data/facilities/reception.tres": { + "bytes": 2076, + "sha256": "bed3de120a0e98c539771d1bb189111d095712f8ae25dfdf7cb2983efc0dee9f" + }, + "data/facilities/rescue/infirmary.tres": { + "bytes": 684, + "sha256": "c3e861533971e369068ae9e42f71b660fa4ab3893c7c1f798fc367893befd943" + }, + "data/facilities/security_station.tres": { + "bytes": 844, + "sha256": "69f3f518df7714d00c8e954e9c7405aa44b683dd274181cc3da832cc956815b3" + }, + "data/facilities/service_corridor.tres": { + "bytes": 829, + "sha256": "5d79fbde201d657740efcba924f595bd7075e069b344d708e424dbebbdc2f254" + }, + "data/facilities/service_elevator.tres": { + "bytes": 824, + "sha256": "35d552d5b96065413feccb50847e3cd7173e673896ce65afba238f90abc25132" + }, + "data/facilities/staff_door.tres": { + "bytes": 810, + "sha256": "a993058bfd809ccdbbb9a61b9850259d7bf6e60003e57ccfa3972f6c29170752" + }, + "data/facilities/staff_waiting_room.tres": { + "bytes": 799, + "sha256": "5c7a2f7f7c508102c4ee89401ad6348191b57d1ff65538acb9d450e464a3a46f" + }, + "data/facilities/standard_room.tres": { + "bytes": 689, + "sha256": "89f0a3a861d66afa4c1338ff1ec919685cf338b93b8da9a2387ce85e7e5bc336" + }, + "data/facilities/tavern.tres": { + "bytes": 875, + "sha256": "eb494ae6ab0d1b9e88ae0a38944609702e43c81a370a29cfb030af9ae46f523c" + }, + "data/facilities/warehouse.tres": { + "bytes": 788, + "sha256": "d0fcf0528da66da7b354ab5efaafe2483a7a76e05b324db255700ef73cdfc791" + }, + "export_presets.cfg": { + "bytes": 1538, + "sha256": "2edb12523be96daf8045bbb0fe8f4b1ebccf332a85484a612b90b71caab496ff" + }, + "project.godot": { + "bytes": 1294, + "sha256": "686f3da7f6b592cd95d84e71a83374a28173914b377eafa4a6e005d70062d00d" + }, + "scenes/main/main.gd": { + "bytes": 142398, + "sha256": "e09c361603da85b7a8b1e299a62b0f9b27f2b20b373b511e6450fe281e16614e" + }, + "scenes/main/main.gd.uid": { + "bytes": 19, + "sha256": "9e580841e76ef09876eecfcbb17f274dc369ed9d38b2b778036696ade9f813ad" + }, + "scenes/main/main.tscn": { + "bytes": 287, + "sha256": "dde43688b86251ce617131c362b1054ce8bd59b509c1abe19e831c0481a07319" + }, + "scenes/main/world_preview.gd": { + "bytes": 96883, + "sha256": "4bc49a19a38b9c3b4d6bfc243ddf46f1f25469a8273adb5e812911ef9424a1f2" + }, + "scenes/main/world_preview.gd.uid": { + "bytes": 20, + "sha256": "3a4492c54de0fe091194a34eb838c2ade177258142566d8e5c54e82b415d94ad" + }, + "scripts/authority/authority_service.gd": { + "bytes": 51646, + "sha256": "2979cca4c6a82932fed9babf209a608b8a20bda550c170f83a166db68ce02ab9" + }, + "scripts/authority/authority_service.gd.uid": { + "bytes": 20, + "sha256": "1978784a978315b219f2750e5e48ae13cce403337d9c17f22e9e2b4fbbff5084" + }, + "scripts/authority/evidence.gd": { + "bytes": 5464, + "sha256": "85f1bd83a4ec994c8bb9bce296d8b63fcdb6bb26c1b4c2f47e16864450438649" + }, + "scripts/authority/evidence.gd.uid": { + "bytes": 19, + "sha256": "228ab3da615ba26c1a346e8e7db09e8d5ff655d74d22041984aff7d40de7e266" + }, + "scripts/authority/heat_state.gd": { + "bytes": 10064, + "sha256": "7e507461684c159bed4c17acc939d6a98537d06d73de2dae235a788048f290b2" + }, + "scripts/authority/heat_state.gd.uid": { + "bytes": 20, + "sha256": "bb6b9a28d975635f19ce2a02a288b54ce666bbf6a2251cd57d10a4b19aa7a580" + }, + "scripts/authority/incident.gd": { + "bytes": 7393, + "sha256": "dbb58592746d0055b438fc8259f7c40d09f77076737c47051b732395888df124" + }, + "scripts/authority/incident.gd.uid": { + "bytes": 20, + "sha256": "b57cae193cac0e4b86961c96c74a6e6192b68a2e7700cacc8e065e789fce26e1" + }, + "scripts/authority/inspection.gd": { + "bytes": 14218, + "sha256": "ff523082ec6d918dbc559e04c3c11fd6d30d4f88c5a54ffa57eb3c758e244812" + }, + "scripts/authority/inspection.gd.uid": { + "bytes": 19, + "sha256": "8694d7aa94fc282f98abb1253d0ec88c7c2ec2a993e1a357e350b96fb9189d75" + }, + "scripts/construction/construction_job.gd": { + "bytes": 6841, + "sha256": "6c59af45346c16572f8c4cb111af86c586cec8081302bf67b6ef411a56ac5196" + }, + "scripts/construction/construction_job.gd.uid": { + "bytes": 20, + "sha256": "a3add1462b6502d7817eb284384dd7e5a6e8be71e9ae1e743f697aeb44d850b6" + }, + "scripts/construction/construction_service.gd": { + "bytes": 55891, + "sha256": "c737eb7aa927097da677ac23ad649ef871af1dea54bcb8103348b88c5303ea25" + }, + "scripts/construction/construction_service.gd.uid": { + "bytes": 20, + "sha256": "01246250363f3f5e8ecfb3779f3486a1ba05c1c486b7f65446c71b5d12259f74" + }, + "scripts/construction/excavation_service.gd": { + "bytes": 37019, + "sha256": "337e9e5d07a9eeaf362253fec12cbe5fb2ea8e74e4887de82868748577d4af33" + }, + "scripts/construction/excavation_service.gd.uid": { + "bytes": 20, + "sha256": "5cd5e92edcf31d12c277622eab43c27702a134020e845e4222cddcf6123740a1" + }, + "scripts/construction/facility_resize_preview.gd": { + "bytes": 7268, + "sha256": "d0e8d772a648a297ee0a4625206b073be2668b32c7dba2575ba1295f5b1866ac" + }, + "scripts/construction/facility_resize_preview.gd.uid": { + "bytes": 19, + "sha256": "4f5d08fac326538993e67ef5376e25dc670defdcd9d79b4c2cede983e16c2bc1" + }, + "scripts/construction/facility_resize_routes.gd": { + "bytes": 6534, + "sha256": "05d4aedcc930160eafc2945711f867744f63f5f391e4759f8e2de9211b968201" + }, + "scripts/construction/facility_resize_routes.gd.uid": { + "bytes": 20, + "sha256": "9618cd77ca4f3b90b6efa0733b2bbc3a3928694a5b0cee430e4d3df01a3619a4" + }, + "scripts/construction/placement_report.gd": { + "bytes": 3732, + "sha256": "9f179c9a94a176a126027cf1d53942c0ac73b008ad119ab2480ba93f972b145c" + }, + "scripts/construction/placement_report.gd.uid": { + "bytes": 20, + "sha256": "136f13bc9e9baf53ec320f429678d50583d9dcc23decb1081c1c48c5b90de99d" + }, + "scripts/core/command.gd": { + "bytes": 2188, + "sha256": "9751ff4b40bebdae56b6b3879dd7cbffdc2a36b050a12bda89e1de47eb54145a" + }, + "scripts/core/command.gd.uid": { + "bytes": 20, + "sha256": "2cd0c5e76d77f379846053a6ebd1fb409b31d318ed4684190a096db545cb7c02" + }, + "scripts/core/command_queue.gd": { + "bytes": 14401, + "sha256": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + "scripts/core/command_queue.gd.uid": { + "bytes": 19, + "sha256": "5091aee01c74a94968525287108d9c9b17fa0e9d4be17d29722afc57413a205e" + }, + "scripts/core/command_result.gd": { + "bytes": 2528, + "sha256": "71b45fb50d69951797fe8d39ad5f707b79108eac30de09fa5e8d64ddb2436ae8" + }, + "scripts/core/command_result.gd.uid": { + "bytes": 20, + "sha256": "d4de1ab106696572f756c8a1eb59904b5f9d70039ddbc65e458c9b45cee52cfd" + }, + "scripts/core/definition_registry.gd": { + "bytes": 28800, + "sha256": "e2ce5e0512a92fec6989e1bb5f0e7da1dbb50bd9ee67a07b4624fdc8bc65814f" + }, + "scripts/core/definition_registry.gd.uid": { + "bytes": 20, + "sha256": "1c1fa87f2900dccc19e0169cd33a63ca9f85650d80cf2ca4f13f50bb3ac682c7" + }, + "scripts/core/deterministic_rng.gd": { + "bytes": 4900, + "sha256": "9c12c1b3b212e140b64137fa34d7e8b2494897cad341b3bbcf9f8da215053204" + }, + "scripts/core/deterministic_rng.gd.uid": { + "bytes": 20, + "sha256": "4b1b094351a86b885a3b6ac06a5b33a131c285505fb0378cd4ca48a66e58431f" + }, + "scripts/core/domain_event.gd": { + "bytes": 2212, + "sha256": "cc9a903c366d9f889134561694b0c7fd52da260e97236a7b60830d7a68947bd4" + }, + "scripts/core/domain_event.gd.uid": { + "bytes": 19, + "sha256": "b744f8ed8637e42d010adaf018c17c3dd4f50109ac8dce378359a68bbaaf1d1c" + }, + "scripts/core/domain_event_stream.gd": { + "bytes": 5104, + "sha256": "f9b57a4b4b53cf7d67132a159ea90378c633b4f19d8de28dbe7a33ebce8e3d79" + }, + "scripts/core/domain_event_stream.gd.uid": { + "bytes": 20, + "sha256": "45ebcc38a71aaae376544060ac4f4b737ccbd7de900b1256744724ba321d7dac" + }, + "scripts/core/performance_budget.gd": { + "bytes": 9328, + "sha256": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + "scripts/core/performance_budget.gd.uid": { + "bytes": 20, + "sha256": "369ce1d51b8dcc1aec1d838e982e5f869dbf387868120e73c56f41c04d4a2ea1" + }, + "scripts/core/save_migration_registry.gd": { + "bytes": 5267, + "sha256": "22ac2cce07a02d1a2a9ac2109e7a0ecf9a0fbe675df4dc9d5249aa9ab3583f98" + }, + "scripts/core/save_migration_registry.gd.uid": { + "bytes": 20, + "sha256": "4f60970aea2158245f2822a73cb5e9d71c067f9e89e933f55011a6c4003deab1" + }, + "scripts/core/save_service.gd": { + "bytes": 85623, + "sha256": "c744ce4f48e665629fd125706cde52afddecac8936a35fb2a9c17887602f7947" + }, + "scripts/core/save_service.gd.uid": { + "bytes": 20, + "sha256": "6e14d474f6da62bf8ba9af8d4a0f3f7f4d49d8e4b8e69063f2d612ed8395d2a5" + }, + "scripts/core/simulation_digest.gd": { + "bytes": 11200, + "sha256": "90b0d1a9632e73680329078f6f19c3b1e4d637c6780e31814769c5e758694f1f" + }, + "scripts/core/simulation_digest.gd.uid": { + "bytes": 20, + "sha256": "6989f1b2667c51b28dce4dd8c78c788922a71ca94f06266a65c4b8bba82f1aed" + }, + "scripts/core/simulation_kernel.gd": { + "bytes": 7602, + "sha256": "341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb" + }, + "scripts/core/simulation_kernel.gd.uid": { + "bytes": 19, + "sha256": "a6af2b8ca039ae48fd69887def2c24b90faa12ed3ab993c87c0ec782bb351d0e" + }, + "scripts/core/simulation_snapshot.gd": { + "bytes": 2571, + "sha256": "fc528a3d1db1f439c10f70d6cba2f72bd65abc0d3866eb8b582df60918af0adf" + }, + "scripts/core/simulation_snapshot.gd.uid": { + "bytes": 20, + "sha256": "9c8d4dbde582a132f42fde0ec764bb131e738f0ef7ba219bf109bc030e607960" + }, + "scripts/core/stable_id_generator.gd": { + "bytes": 1839, + "sha256": "78e0dd691ba18d1f159d9d7abba5894d2e10d36885aa6dc5be02a27f9edd5013" + }, + "scripts/core/stable_id_generator.gd.uid": { + "bytes": 19, + "sha256": "fb04510c99d86370ce5cbf9e19bfe1bee6684809bc688685b9c2c7a7698ddcd0" + }, + "scripts/core/state_transaction.gd": { + "bytes": 7406, + "sha256": "4ac24e41cd16ebb5312ad2b7e8b6c5b8990df14641650e9720081873f9ce55cd" + }, + "scripts/core/state_transaction.gd.uid": { + "bytes": 20, + "sha256": "04980323f275f246cee8e680041514e09122d9ff59c7bcda97b37e000c1a76cb" + }, + "scripts/data/facility_catalog.gd": { + "bytes": 5502, + "sha256": "08a09405a4f07a6b5fd21ba41eff347692f376c50306ccf6ae18e74ed95adacf" + }, + "scripts/data/facility_catalog.gd.uid": { + "bytes": 20, + "sha256": "1da0d592443dde67b261996f58b141ff9cbd98a4ae4c64355518f1c9fca254f9" + }, + "scripts/data/facility_definition.gd": { + "bytes": 5124, + "sha256": "e90d56f7eab69c2a75238de465925c1c6df57ee6d44b3b81e7f6fcfd069af0a1" + }, + "scripts/data/facility_definition.gd.uid": { + "bytes": 20, + "sha256": "c7b5501b827ec2c3fb428352c52b11ffb84c74c4831d968d2f51e1abad0091fc" + }, + "scripts/data/mvp_content_catalog.gd": { + "bytes": 42193, + "sha256": "86770b34c329459592928625ed256eb2cd123587915f63d0db0793127cb63a31" + }, + "scripts/data/mvp_content_catalog.gd.uid": { + "bytes": 19, + "sha256": "bda9d556d8501de20a61d7d70f8e45d4108fb6271b67c9fd1e321f2e19427fe8" + }, + "scripts/defense/defense_service.gd": { + "bytes": 101373, + "sha256": "bdef777e12e7802d02b8441d2815a983960b367fbc2287c5941ca38e1b668caf" + }, + "scripts/defense/defense_service.gd.uid": { + "bytes": 20, + "sha256": "7048f46d3d5f79f79aa066a7c4cdbd4f00dbaa79f2262f9850ed0118424746d2" + }, + "scripts/economy/economy_service.gd": { + "bytes": 30977, + "sha256": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + "scripts/economy/economy_service.gd.uid": { + "bytes": 19, + "sha256": "be3264816628a2991dac7e81e0d38f6f5347d94f85b44c5989b938f18e28660d" + }, + "scripts/economy/facility_upkeep_accrual.gd": { + "bytes": 7510, + "sha256": "229655648c67c5a8b2bfa2c5faeb0534984939d4cf6743b7721f5cf271ac108c" + }, + "scripts/economy/facility_upkeep_accrual.gd.uid": { + "bytes": 20, + "sha256": "eb4771fc6557cadaa7690cab57c8acd9516952492ac3dea3802ec8a3c70f59be" + }, + "scripts/economy/facility_upkeep_settlement.gd": { + "bytes": 10396, + "sha256": "26ccebf26b19089557aff1a70c53bc7686d878c75c5d3ded1b0e6df33ece50af" + }, + "scripts/economy/facility_upkeep_settlement.gd.uid": { + "bytes": 20, + "sha256": "9a3c0ea58816c35bee193f504f65a02ab2d82b66a354e5a8cecee2c29ec3fa4b" + }, + "scripts/economy/ledger_backed_resource_state.gd": { + "bytes": 4113, + "sha256": "199442c566185dc0abcc4eea5b4cf59c07330731bb5d5038b605dd801ae0209b" + }, + "scripts/economy/ledger_backed_resource_state.gd.uid": { + "bytes": 20, + "sha256": "cd91d40cb17f9c9996eb83dc2aca540a453eba655b9e9eb88aab416a827fe6d0" + }, + "scripts/economy/ledger_entry.gd": { + "bytes": 3886, + "sha256": "625d709b8d3239ef271dfbd42f189fd3a3fb99bd22d4f39438050c8e3addfe26" + }, + "scripts/economy/ledger_entry.gd.uid": { + "bytes": 19, + "sha256": "d582d239e408ba3f77b18754bb5f0ee837b1d70a8e1e11cd789dfa3ab64017a0" + }, + "scripts/environment/facility_cleaning_bridge.gd": { + "bytes": 7084, + "sha256": "f0abf23351c46b47e33141daea753ab776d71bd68f09ccf7c1a37879fee0d25e" + }, + "scripts/environment/facility_cleaning_bridge.gd.uid": { + "bytes": 20, + "sha256": "6024546933832c23a1844359efb81a190a83d711c80d66bc036419356e644190" + }, + "scripts/environment/facility_cleaning_policy.gd": { + "bytes": 1688, + "sha256": "51478d0915523d0f93be7daebddd672599b5975748b26a6771a63dd0791b11d6" + }, + "scripts/environment/facility_cleaning_policy.gd.uid": { + "bytes": 20, + "sha256": "ca37ebcd32b3f87da72b7dcf74faf85f412d91431ec9c3c9d90e44aaa89979b2" + }, + "scripts/environment/facility_cleanliness_service.gd": { + "bytes": 5788, + "sha256": "38295b414f543249e10d335c62230f9e23c2556a33dd83098f0085e3ed9ad150" + }, + "scripts/environment/facility_cleanliness_service.gd.uid": { + "bytes": 20, + "sha256": "895670f6220b422261bbaf38a21e15e5c347fcd5f321bfa65cb103313433fcb4" + }, + "scripts/environment/weather_timeline.gd": { + "bytes": 3821, + "sha256": "7a5c82061171b803e288c6726991d03a254b78a21face870ca349c493ae393b0" + }, + "scripts/environment/weather_timeline.gd.uid": { + "bytes": 20, + "sha256": "bd828a546604ee793586210eac3fd8135991d9a876d5e561851729493406cf35" + }, + "scripts/events/event_action.gd": { + "bytes": 2321, + "sha256": "993078d08e8b45c7ffe6471280f4144c45bf9a62003ff2edaddf6da9fee92351" + }, + "scripts/events/event_action.gd.uid": { + "bytes": 19, + "sha256": "6414fecb7adb02837ba491d17af59c3918e9d8d676bfb44a28fb22730998c528" + }, + "scripts/events/event_choice.gd": { + "bytes": 3146, + "sha256": "6077cba5d59e500e4df391d58801aa8c10669b17ac36c06e830329ca8e977dd6" + }, + "scripts/events/event_choice.gd.uid": { + "bytes": 20, + "sha256": "17e0101b1272810e3a6a7d1ebb4eef0564ce09c7577f097fafb12ac50e5fa39a" + }, + "scripts/events/event_condition.gd": { + "bytes": 6374, + "sha256": "31d493d68db9b49d8eed0d5adf7a6c4d90f12df0ac3353b1ceafa6259196efd5" + }, + "scripts/events/event_condition.gd.uid": { + "bytes": 19, + "sha256": "80fc11593f68db51201c8ca77979becb7a1de34d22d12dc182d6a379068e9567" + }, + "scripts/events/event_definition.gd": { + "bytes": 9355, + "sha256": "4af68f2e5ec185a750d59aaa24c7cb63fe612cd6a785e7fd39af11f0b5ce74a2" + }, + "scripts/events/event_definition.gd.uid": { + "bytes": 20, + "sha256": "c3b92a671fd79301767f1317c3ca06da04c02d569f3bd036d118302c20c15b5f" + }, + "scripts/events/event_instance.gd": { + "bytes": 4884, + "sha256": "e8ce02a03dcb111d808d3cb3068a752fc5bbd61ba0cb15026f1371615619b974" + }, + "scripts/events/event_instance.gd.uid": { + "bytes": 20, + "sha256": "0487f4d30911bca4621165252db26d6d16a2ba9ce27a6a3be4e0ecaa67b52cc4" + }, + "scripts/events/event_service.gd": { + "bytes": 59196, + "sha256": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + "scripts/events/event_service.gd.uid": { + "bytes": 20, + "sha256": "270b25260e76afb9bb52b9ab4162664cd6811cbd78df4e667e9342ad9fbc4ac7" + }, + "scripts/facility/facility_instance.gd": { + "bytes": 22815, + "sha256": "0c6aa493f3299611e05dd26aa429dda8cf7b5c479e4d09632036fb862f79a324" + }, + "scripts/facility/facility_instance.gd.uid": { + "bytes": 20, + "sha256": "18bf5e03f757acb0f3cda9bb8dd227c793141001605e92bd9407af968762a0fa" + }, + "scripts/facility/facility_pricing.gd": { + "bytes": 5049, + "sha256": "8d70ca9f8961ba342af787c04e0e2b1a944c772a20b7f11b6346a9d72cc43c57" + }, + "scripts/facility/facility_pricing.gd.uid": { + "bytes": 20, + "sha256": "7c612823e98b597254d23fe12e78be5b465a1a036dd9b17d8463e856a3459d6c" + }, + "scripts/facility/facility_service.gd": { + "bytes": 44951, + "sha256": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + "scripts/facility/facility_service.gd.uid": { + "bytes": 19, + "sha256": "b3fb1688378c01e971e0392699c1b7b3835ef658079588921f82790be85255a8" + }, + "scripts/facility/service_instance.gd": { + "bytes": 7320, + "sha256": "629a142f80cbc31b97b6d08483d94e029e448969bb6d39fdc8dd39931654dd35" + }, + "scripts/facility/service_instance.gd.uid": { + "bytes": 20, + "sha256": "56eb407a97b52928b7af7feaee947d77cc4efd06d0cec41a8ebfb89e8800c48f" + }, + "scripts/facility/service_request.gd": { + "bytes": 4744, + "sha256": "767a8c054188c8dde1e446f49d43d9ddc727a215bc9b31d5420650bd44c90024" + }, + "scripts/facility/service_request.gd.uid": { + "bytes": 20, + "sha256": "c25c4baf7fd1ff4181804f67dc60dea87eb0005ceacc563c23b0d06557e80d87" + }, + "scripts/guest/guest_definition.gd": { + "bytes": 9374, + "sha256": "082aa3f33b9cb17daf10a2cf8a1dece7b79dd80c2ae21e1a424d1b2ceb52b918" + }, + "scripts/guest/guest_definition.gd.uid": { + "bytes": 20, + "sha256": "94fedb128c219c83b06b0db2769aa675a08a0924722ab1dcf45eca267496c100" + }, + "scripts/guest/guest_runtime.gd": { + "bytes": 14267, + "sha256": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + "scripts/guest/guest_runtime.gd.uid": { + "bytes": 20, + "sha256": "08e9a006febb70fd49c077ed2accaa600058a630d88ae73b9e5ed3f09eee70bf" + }, + "scripts/guest/guest_service.gd": { + "bytes": 61414, + "sha256": "56880410e9a00816f9a95d30821982955532de8dd976980934e12016a9f2b21e" + }, + "scripts/guest/guest_service.gd.uid": { + "bytes": 20, + "sha256": "93acb37fbe09375e5c69b7137e7e6f78224ddecde201071083e64dc9b7e56ab2" + }, + "scripts/inventory/inventory_reservation.gd": { + "bytes": 3315, + "sha256": "2d913d26e5af2ea12842264441d87ee5fce8fe84ef6664297ae2fa971a4ca10b" + }, + "scripts/inventory/inventory_reservation.gd.uid": { + "bytes": 20, + "sha256": "a998ce89bb17858ca9d762cd58c9786ea88bc89d1db94098babf0fa5b7de1459" + }, + "scripts/inventory/inventory_service.gd": { + "bytes": 57923, + "sha256": "7ee83b335864385119ca757037c3cdb912957aa4478a6312a0898a734e41f31a" + }, + "scripts/inventory/inventory_service.gd.uid": { + "bytes": 19, + "sha256": "5111280fbe7407e190ad9629526297e1a125f31a4d64a7ca519eb19e0811e820" + }, + "scripts/inventory/logistics_dispatcher.gd": { + "bytes": 18044, + "sha256": "2313f5ba3154143d5f0b6e1eeb1fbdda37cc81a7a1589515f56dfb53a797f720" + }, + "scripts/inventory/logistics_dispatcher.gd.uid": { + "bytes": 20, + "sha256": "1c6e69e99f2a32f3b61502eb35170119887ee10552948425c92bd71614b358ad" + }, + "scripts/inventory/logistics_request.gd": { + "bytes": 7010, + "sha256": "6dc5565083b8adb2c620fe805d1ba76be01ae09faf3070a9363485f4fc5e171b" + }, + "scripts/inventory/logistics_request.gd.uid": { + "bytes": 20, + "sha256": "1cfee75d9767ffd602cdcf74f44ef364cfce6f432be0bd1c1cf82d908afec8b3" + }, + "scripts/mana/mana_network_service.gd": { + "bytes": 18940, + "sha256": "3f28a9b291cc00efd1495a9adf11a37988ce13e8c8ace01a950fd0075b6d7950" + }, + "scripts/mana/mana_network_service.gd.uid": { + "bytes": 20, + "sha256": "9d3f7f5f28e0a5dec257a469ca9e2c80f5f05f5a6cd38e88f8ba1da07b318ee8" + }, + "scripts/mana/mana_power_projection.gd": { + "bytes": 1991, + "sha256": "2026467960e857349bcb18fb97b7753189be5f2de2be91a17e73e90146eba69e" + }, + "scripts/mana/mana_power_projection.gd.uid": { + "bytes": 20, + "sha256": "3a4ade65c26ed09fb10021fc9199597acf9dcf81ffb88cc3618be0f295120961" + }, + "scripts/mana/mana_reserve_balance.gd": { + "bytes": 4347, + "sha256": "cd462c279d37cc297466b64d9cf3fd71870df9508c1ff5f7189e22ddbdbef4b3" + }, + "scripts/mana/mana_reserve_balance.gd.uid": { + "bytes": 20, + "sha256": "12ea6a3b059a8a56bb8d288933ae4cb6043628cf3ff27dc64b44cb9788067c77" + }, + "scripts/mana/mana_reserve_cycle.gd": { + "bytes": 5975, + "sha256": "7d372d6e944765de5799803a4f5f60babf129741e6de30fe2452f133a4524d9a" + }, + "scripts/mana/mana_reserve_cycle.gd.uid": { + "bytes": 20, + "sha256": "a32339f7c334582628fb446d982cd69a6d475831136a02b14bff8cfdc1c0305a" + }, + "scripts/operations/operations_coordinator.gd": { + "bytes": 130891, + "sha256": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + "scripts/operations/operations_coordinator.gd.uid": { + "bytes": 19, + "sha256": "f6df5dbe0667437e02705eb14e73db63da565974d8cce3b9672f699304305037" + }, + "scripts/progression/progression_service.gd": { + "bytes": 33643, + "sha256": "4f4e00fbeab4a4cec49b7912d8e75381b8354791e0a9efdb8414d984e88ca46f" + }, + "scripts/progression/progression_service.gd.uid": { + "bytes": 19, + "sha256": "4ac11552af0b41b564829c027df4c3015f7f9cefbd23160c8b4090c8b903c75a" + }, + "scripts/relationship/original_relationship_state.gd": { + "bytes": 1571, + "sha256": "d1bfabfd205becf6d3cf1d6b6c477393319b26b0e7504fd227c3714761101616" + }, + "scripts/relationship/original_relationship_state.gd.uid": { + "bytes": 20, + "sha256": "3ec8aa060bdf20acba106496c12288ebf8b83b51fc3dc9f7512e9a7b99583a0e" + }, + "scripts/relationship/placement_risk_preview_service.gd": { + "bytes": 47014, + "sha256": "d8e974487b75fbad49ecbbe1da8e36aac23dc4e1a5cf10281a1c567c97dd59f6" + }, + "scripts/relationship/placement_risk_preview_service.gd.uid": { + "bytes": 20, + "sha256": "b8776684db6129d44203785f83543d5f394c05f4d9dbe35903986d5812769281" + }, + "scripts/relationship/relationship_service.gd": { + "bytes": 27526, + "sha256": "d2f6304aa643b98914c5d65bf3eb673ca8cc427476187f43e76b4b941410b1d3" + }, + "scripts/relationship/relationship_service.gd.uid": { + "bytes": 19, + "sha256": "6f76e312d75c684178fc90d93d2099426e79d10dfcf623b62e78f3f5df5cbdb1" + }, + "scripts/relationship/relationship_state.gd": { + "bytes": 7969, + "sha256": "14551398f31ecd899e43a3d07b165d4884e54e83983e433c6de57e3e6a18d083" + }, + "scripts/relationship/relationship_state.gd.uid": { + "bytes": 20, + "sha256": "a14fe331fca5dc3daf21b2b57943978d2a749ce77967ca6f4f197f51f7e959fd" + }, + "scripts/special/peeping_room_service.gd": { + "bytes": 15448, + "sha256": "4dc02bc99f081d63a2518f69c960397d778d577b93d87d57bcac29bc6f108531" + }, + "scripts/special/peeping_room_service.gd.uid": { + "bytes": 20, + "sha256": "3f045afc3c140886c70ec8494d6dcb012e6da645e8a3ff3c6488442ce63a9353" + }, + "scripts/staff/shift_instance.gd": { + "bytes": 6992, + "sha256": "cec2bed5bfb138d4cc9c141bb7cdd9c19d70c034aad304398627ef1f4977ab48" + }, + "scripts/staff/shift_instance.gd.uid": { + "bytes": 19, + "sha256": "b75a34b149013f7020dd1d860b13d7febfc0c31319560ae79d25a7944c06c0f4" + }, + "scripts/staff/staff_commute_service.gd": { + "bytes": 7196, + "sha256": "3a1b816a3a778fc362e950817275fb8464d8562b61527f141787e4b2d2a3eba0" + }, + "scripts/staff/staff_commute_service.gd.uid": { + "bytes": 20, + "sha256": "a927760b03e52eca0aa0f9e187655c039a28f31de220435adce76099dde92224" + }, + "scripts/staff/staff_runtime.gd": { + "bytes": 17831, + "sha256": "807a417bc7866c97cd6d8f5c1368b5480a2d9fd685a2a47a978e81482bf522b5" + }, + "scripts/staff/staff_runtime.gd.uid": { + "bytes": 20, + "sha256": "4f8945347e644d8fd581dd511cc62b3be99f1c997aaeee046a33e1b345da47b4" + }, + "scripts/staff/staff_service.gd": { + "bytes": 86520, + "sha256": "355ad5c3c9f85dc4d4ffc3bc4293e36f81078c403d1662512a735b2c8d815fb3" + }, + "scripts/staff/staff_service.gd.uid": { + "bytes": 19, + "sha256": "6a77587fffd9b2a1189654d6324ae293fb5a2eba8fb4ea0621cd06be1e177552" + }, + "scripts/staff/staff_task.gd": { + "bytes": 12137, + "sha256": "5eeb8862a83e31e36d75e19720597fccf1aa4b25f30193d17ee95aaa94302b8a" + }, + "scripts/staff/staff_task.gd.uid": { + "bytes": 20, + "sha256": "7c741b7e1b55b6684e0d76bf2e3fa5a064286ee48cec556f262f3e7aa39fba62" + }, + "scripts/staff/task_dispatcher.gd": { + "bytes": 14801, + "sha256": "fdf2b6464e4b1089c58cbce972ff6217a0f7c69929b1be425536152d4b8290c7" + }, + "scripts/staff/task_dispatcher.gd.uid": { + "bytes": 19, + "sha256": "accb4d35bcdd6fe18c0ea586365ba7e1e580dea7b428532d4e0135fde9b5d94c" + }, + "scripts/supply/kitchen_production_service.gd": { + "bytes": 18872, + "sha256": "f3bc6bdc1a0ba278e9411108172ceceb7eb06520b4e33f93f35684da1f103c62" + }, + "scripts/supply/kitchen_production_service.gd.uid": { + "bytes": 20, + "sha256": "6ca256315163a3154a79316c78837d28cb0307c27998614afc17600d217c5268" + }, + "scripts/supply/supply_auto_purchase_plans.gd": { + "bytes": 14209, + "sha256": "86219a03efdfce548e923536253b3a4e555c56f2fd74cd9192da9d284bb54094" + }, + "scripts/supply/supply_auto_purchase_plans.gd.uid": { + "bytes": 20, + "sha256": "1ddd38fcd3be362bc97ba7670f354e50120667783d49123c177e246927f221ce" + }, + "scripts/supply/supply_auto_purchase_quote_plans.gd": { + "bytes": 10429, + "sha256": "07dbae60dc4412f4bf9f0cbf7a930d48af7b4f28fb50c177d5e52c30313971b6" + }, + "scripts/supply/supply_auto_purchase_quote_plans.gd.uid": { + "bytes": 20, + "sha256": "8dee556cea8a38256386f0c497589ea540f5d4a726ba5dca49e25a995ec5e232" + }, + "scripts/supply/supply_catalog.gd": { + "bytes": 1918, + "sha256": "93a3f674a953fb0627a38ad0342df31dc5fa77ba8a225780f2250e30ec22dd15" + }, + "scripts/supply/supply_catalog.gd.uid": { + "bytes": 19, + "sha256": "41f34c321e440694fd6e1aa7f71ca4a61386a3c06ef34aa841b037ae747d0d2a" + }, + "scripts/supply/supply_logistics_bridge.gd": { + "bytes": 28100, + "sha256": "b9e394af788595d2744b71f1907c8e7c3d762d38ff49992b1ee74e63b9639e80" + }, + "scripts/supply/supply_logistics_bridge.gd.uid": { + "bytes": 20, + "sha256": "c0a2dcdd8e0f877774fb956ad72a7b9b5144c4d7159a79a94f4c91c9b7d2f187" + }, + "scripts/supply/supply_management_service.gd": { + "bytes": 25019, + "sha256": "e4ad420191020485c027004f64bb00fad9da195fe956ef10dc0c787412018f7f" + }, + "scripts/supply/supply_management_service.gd.uid": { + "bytes": 20, + "sha256": "4094562b95ec4a271b291ef5446f7eb741005f2b740b92d87b63c2b21494116a" + }, + "scripts/supply/supply_purchase_quote_v2.gd": { + "bytes": 15572, + "sha256": "14c11cb3bb91ba5ecf21613c0ac18c54678362341fde367589419b8885c59b41" + }, + "scripts/supply/supply_purchase_quote_v2.gd.uid": { + "bytes": 20, + "sha256": "fb4e3315ae60a3eb881a18aaf6089b6dc4f93d1293db46e9ee0c27040af413a1" + }, + "scripts/transport/elevator_service.gd": { + "bytes": 39381, + "sha256": "6f2b9cac49970b80fbfb0f71da38dee3431d78df3d361c9233e763e1bf6a8cd4" + }, + "scripts/transport/elevator_service.gd.uid": { + "bytes": 20, + "sha256": "8dc89574d1eb5ade839b4989d0b772c2072800d8715829211d7bf515cd10dad9" + }, + "scripts/transport/warp_service.gd": { + "bytes": 5463, + "sha256": "7602c6b8a9672a703bfa98a1424c2cf68cf50184f87f72349d564af6a5ca9d41" + }, + "scripts/transport/warp_service.gd.uid": { + "bytes": 19, + "sha256": "ef4627c03a4a0e358cfc0b8de71fd33ad6d69e24b5a83b492388adec18e5da0d" + }, + "scripts/ui/business_management_panel.gd": { + "bytes": 28271, + "sha256": "e41b95e6d5e118473668b83102091a41df7dd46bd251eb625d3fac17b3733d01" + }, + "scripts/ui/business_management_panel.gd.uid": { + "bytes": 20, + "sha256": "e80feb5642e102e81e8ca348214ccefc1bcc09569869fb0de539b61fd6e9c83f" + }, + "scripts/ui/defense_management_panel.gd": { + "bytes": 21941, + "sha256": "c5d38781e6f73fba121f2274e310b11abd4f7e853250b1ed6c5d72a6d573d011" + }, + "scripts/ui/defense_management_panel.gd.uid": { + "bytes": 19, + "sha256": "8e1ae906531bef51d59cc00453c4af1af52f21a49b89940e4dd4b02b87225f74" + }, + "scripts/ui/event_log_dialog.gd": { + "bytes": 13638, + "sha256": "62000f559c49c3a58b244b991c10c1738add10702bfa66cb7cb40798cb559290" + }, + "scripts/ui/event_log_dialog.gd.uid": { + "bytes": 20, + "sha256": "0f49390449b1c1445b439d29fb9d60265e12cfbf6a7ee2a0328ab138a6a58199" + }, + "scripts/ui/guest_observation_panel.gd": { + "bytes": 7948, + "sha256": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + "scripts/ui/guest_observation_panel.gd.uid": { + "bytes": 19, + "sha256": "f4324cbcee9ad7f6ce373fca811b76e0e0e6633ff398b5e8a5adeb9dc615db7b" + }, + "scripts/ui/inactive_layer_rooms.gd": { + "bytes": 734, + "sha256": "1bbda80eb5ca9202de900be152cb18d5d59cb386c1eab5ecec6cdce4e042bad8" + }, + "scripts/ui/inactive_layer_rooms.gd.uid": { + "bytes": 20, + "sha256": "1ff083528b669c285afbd7de48e766eb29029b39c3010eebab11b21dbcd17c82" + }, + "scripts/ui/infirmary_room_art.gd": { + "bytes": 3100, + "sha256": "f8333f7915fe453eaee6f00ff1b1539b2ae67fecd508566292bf9ea986531a75" + }, + "scripts/ui/infirmary_room_art.gd.uid": { + "bytes": 20, + "sha256": "dd0b6f575496131a0cd951ba41785fe657126687623a42e92740eaaa5f8847a6" + }, + "scripts/ui/inn_opening_guide.gd": { + "bytes": 10664, + "sha256": "6a51c98929a6f57f24d309bc027ba68ea818c69f9b280a5cbf085a4ceb33ac1b" + }, + "scripts/ui/inn_opening_guide.gd.uid": { + "bytes": 18, + "sha256": "f74eb7dd42fed3723958d07ad3e85986ca1671f703193aaf86f6bfc940b3ada0" + }, + "scripts/ui/layer_interface_skin.gd": { + "bytes": 3727, + "sha256": "5524422aaee5e0f45f5c1c504e4cb14257ddce5f875d70f32b21333c76c1452d" + }, + "scripts/ui/layer_interface_skin.gd.uid": { + "bytes": 20, + "sha256": "4e931be72a318b3b501e0819f5fa17a805fc95ed15605ffb1416f54637f19708" + }, + "scripts/ui/manual_save_slots_dialog.gd": { + "bytes": 6164, + "sha256": "e903ecfacb425389a47f9e21277eb5f621fe371fff009816d39abcb66b8ed4f1" + }, + "scripts/ui/manual_save_slots_dialog.gd.uid": { + "bytes": 20, + "sha256": "a31f96c32c1769bceb0ec5a00afa06d1a33dda19d90375515610441a39920b90" + }, + "scripts/ui/operating_ledger_panel.gd": { + "bytes": 16054, + "sha256": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + "scripts/ui/operating_ledger_panel.gd.uid": { + "bytes": 20, + "sha256": "f0c15f4b61abad6be732b4c6b92b04498841e1aed9c18d396fb7d90b5eedf34b" + }, + "scripts/ui/paired_bgm.gd": { + "bytes": 3826, + "sha256": "a7fe9311f348975a380feced102702ad3ee91439b9511006f0ff6d29540f5836" + }, + "scripts/ui/paired_bgm.gd.uid": { + "bytes": 20, + "sha256": "cf49b2b6404bd0283e11afdb7efa29d191d6ff575e7cb298fb051547cc97118e" + }, + "scripts/ui/pixel_people.gd": { + "bytes": 4270, + "sha256": "a171703083aa2d00f8be2b63e1daef9c41717c8fe59d8056878bc4b7df1e0b0c" + }, + "scripts/ui/pixel_people.gd.uid": { + "bytes": 20, + "sha256": "b63a747b5d8f81d2fcc002fe20ff1204942ad535f691664f6ed7a8575b859c8b" + }, + "scripts/ui/pixel_tower_art.gd": { + "bytes": 15443, + "sha256": "f766b47167db8bd5906b1467fd6f8587af8e9268304c7ba209a9eb157847165e" + }, + "scripts/ui/pixel_tower_art.gd.uid": { + "bytes": 20, + "sha256": "f53c12bb18bbc2122578b3d6d88998c4059e4305557b32cddc1704082d0a4d7b" + }, + "scripts/ui/pixel_tower_demo.gd": { + "bytes": 6178, + "sha256": "dfb1ffa5f7dd239ef84d7f8a2845184884982a8a4f53b002272d4c31af62ea6e" + }, + "scripts/ui/pixel_tower_demo.gd.uid": { + "bytes": 19, + "sha256": "d7a1208e97e5f6497a55607c6f5d51d0d8cc820d9dcc1c0a01319485837d77e9" + }, + "scripts/ui/room_presentation.gd": { + "bytes": 4252, + "sha256": "2eda851534777575298ea005e2e6d0ee90785a81357d5b9c34cfb95f615a8181" + }, + "scripts/ui/room_presentation.gd.uid": { + "bytes": 19, + "sha256": "dfecf526720439bc56673c58b08ac2148a269b274927484e606d1f9e1dacc53d" + }, + "scripts/ui/staff_management_panel.gd": { + "bytes": 23519, + "sha256": "df3120130956b300d1349cb758c0aa30dfd7da5e0774fb7fb9a1f3e4e0786fb2" + }, + "scripts/ui/staff_management_panel.gd.uid": { + "bytes": 20, + "sha256": "3083f1194fd205904b784f5c3c120e5bed770d0feda5fd96be5cc8338e3c7137" + }, + "scripts/ui/standard_room_art.gd": { + "bytes": 2800, + "sha256": "8f0f2af2a3903fc1debc760037dc8fab92e4fff1e49803fcb56a56ab1f04defa" + }, + "scripts/ui/standard_room_art.gd.uid": { + "bytes": 20, + "sha256": "9ea9d28b94349bcf5146c2a9a671922aedcacb1c2983c7d974b5f9eab463585f" + }, + "scripts/ui/supply_management_panel.gd": { + "bytes": 34568, + "sha256": "f122174cc1efc3a964187ef0dcb23abf342d1f8b8ef0305800ae85aab8db003a" + }, + "scripts/ui/supply_management_panel.gd.uid": { + "bytes": 20, + "sha256": "efd5c344b0f3bb6cc786e160aea738f9e8239a613f258fa10e44803da45b96a7" + }, + "scripts/ui/ui_audio_feedback.gd": { + "bytes": 11933, + "sha256": "95078f3c4ed3d58573b93290360e730cf908d8a7e98b5ea72b435dbe35358b30" + }, + "scripts/ui/ui_audio_feedback.gd.uid": { + "bytes": 19, + "sha256": "117146780ab8e9cf6b345a27ce94ae42e5228c8524b0b9f76a14a12cc7bb67b9" + }, + "scripts/ui/ui_audio_owner_shutdown.gd": { + "bytes": 7783, + "sha256": "6ee83bcb5c922363b62847c26ef2139bb7e8847bef4c100d3738c2ef9f024102" + }, + "scripts/ui/ui_audio_owner_shutdown.gd.uid": { + "bytes": 20, + "sha256": "49d08fa773bc6b8f9a6560b47e7d065d2ed272f20b60242cfa64102769a63b17" + }, + "scripts/ui/ui_audio_settings_dialog.gd": { + "bytes": 3405, + "sha256": "c2f7ecd14f3e7856ed0a384922e5aa0843e1e91ac547545a03f51a0fc0675ea1" + }, + "scripts/ui/ui_audio_settings_dialog.gd.uid": { + "bytes": 19, + "sha256": "4078c949c0c90ca45be8130e6b15443004d5831ca31b0c601a0e47d2ce0b234b" + }, + "scripts/ui/visual_theme_profile.gd": { + "bytes": 3110, + "sha256": "2a251a94d4a18c2ddd9e307cb810d1f327c12f2f15cd3bed91e65aa499258ceb" + }, + "scripts/ui/visual_theme_profile.gd.uid": { + "bytes": 20, + "sha256": "1977d023efae6111453f3f8abf9e43e6bb439321e7b3fb483b2de1850680d3a2" + }, + "scripts/ui/world_tree_rank_dialog.gd": { + "bytes": 7103, + "sha256": "fb5ca195c02a3c52cc51b4761fcbf881134fc35c023895a42857f894dd7e22c4" + }, + "scripts/ui/world_tree_rank_dialog.gd.uid": { + "bytes": 19, + "sha256": "06e0d65047929d3d65068ff7a49ce84e216df803908dd47888573e2abcff0abb" + }, + "scripts/world/facility_infrastructure_projector.gd": { + "bytes": 77159, + "sha256": "7903b7aa6a46b50150beeb13dd8675ce34168c044b1b818f0dc6e2f7e1872d51" + }, + "scripts/world/facility_infrastructure_projector.gd.uid": { + "bytes": 19, + "sha256": "0298a54b543c61c6aa57a8ce17e14c224d9f706dcb9957ee000de75eb43876c5" + }, + "scripts/world/legacy_stair_service.gd": { + "bytes": 11482, + "sha256": "e6899ee68894a59af061056ceb8673a772cdcc80a63dab5b4d54309429c33c2c" + }, + "scripts/world/legacy_stair_service.gd.uid": { + "bytes": 20, + "sha256": "bfff32f0080489e82735b055643d4d3eb91fa74d324055590b3b78d15fa11577" + }, + "scripts/world/path_service.gd": { + "bytes": 118514, + "sha256": "d5eb5be7957466fc9f5a63893511692fa55210cc101b217d374863bb03b44dcc" + }, + "scripts/world/path_service.gd.uid": { + "bytes": 19, + "sha256": "ec3066a687f50a7301c96ae6ffc294a6a03abc40a697f5fa80dd7922d959f267" + }, + "scripts/world/route_subslot_path_adapter.gd": { + "bytes": 45317, + "sha256": "df5e6c3eee25b74b1e77aa6d7f6e7e5b516c5a8ad78b0db3b847c9f06a9e631f" + }, + "scripts/world/route_subslot_path_adapter.gd.uid": { + "bytes": 20, + "sha256": "e89a6dfe271e5c0a817f1a6564ff2af642b58962da882fcdffb7b85d149fecf7" + }, + "scripts/world/spatial_subslot_service.gd": { + "bytes": 33197, + "sha256": "6238843f3f53e8fa21e325a8152e9a77aca97aebe495a05fb19d37ee62d549ae" + }, + "scripts/world/spatial_subslot_service.gd.uid": { + "bytes": 20, + "sha256": "c4019cb03891a10e65448347704ebcdaf9a47a3195c48d74ce5ae86c4402ee88" + }, + "scripts/world/world_service.gd": { + "bytes": 25487, + "sha256": "add67a0799f961a7dce1d382ea6dac67022fbd013f8c4c6b11321df96f37944a" + }, + "scripts/world/world_service.gd.uid": { + "bytes": 20, + "sha256": "b55799071888fddf43fc42485a3aed5bd9d63c522fe0f68b7d62f544fa3ea21b" + }, + "tests/business/test_business_closure.gd": { + "bytes": 10795, + "sha256": "de9a36cea18a450bed920ded051d2edd4fa2babedac881be85e2cf2d8ad82363" + }, + "tests/business/test_business_closure.gd.uid": { + "bytes": 20, + "sha256": "0614d0ba4fe9247f0c0afba96705dd6d14ad2a138fbd1dc9b760717f1f15afc2" + }, + "tests/business/test_business_operations.gd": { + "bytes": 11383, + "sha256": "5dfd8f256a191835fd88af1e4dd6151dbfc87b767b443023a04f415eecce0adc" + }, + "tests/business/test_business_operations.gd.uid": { + "bytes": 19, + "sha256": "95ce34e2bd7124cef52a142349d65dc86e4fd5cd5ae1403ed013b12fbd00fa10" + }, + "tests/business/test_required_kitchen.gd": { + "bytes": 40414, + "sha256": "5af5b757dd11285c1bf56155b17b397fe4178f6d86cca119035ae7d11e8ca5bc" + }, + "tests/business/test_required_kitchen.gd.uid": { + "bytes": 20, + "sha256": "8b89c83188edcc5d937faff73c60b83172e8ebf4647aa7eadcf1a15b17a9bda6" + }, + "tests/environment/test_cleaning_access.gd": { + "bytes": 2330, + "sha256": "1382eab9d01dffaa396cb7fb71902538ee649a963ac9e1fd099ea7a147669884" + }, + "tests/environment/test_cleaning_access.gd.uid": { + "bytes": 19, + "sha256": "3dd8599284854c457df1af13f59d2c84b22dc712ef1dc4c2a9ca923152dd85d1" + }, + "tests/environment/test_facility_cleanliness.gd": { + "bytes": 7183, + "sha256": "6dba789489d3e7da8cbd5056f76d7a5eb97c454b087787ccda926682c328a5f5" + }, + "tests/environment/test_facility_cleanliness.gd.uid": { + "bytes": 20, + "sha256": "64b2a8e991a902e81ea08f34e8f5886b67723de3380c9e964783f6ef86fdf540" + }, + "tests/environment/test_runtime_cleanliness.gd": { + "bytes": 6177, + "sha256": "3b5fe92855f17f1551de76fe1570dbf92c697b769721bb87582bc4d4d06e36b4" + }, + "tests/environment/test_runtime_cleanliness.gd.uid": { + "bytes": 20, + "sha256": "e84d2e2c086165371e68da1e216bb2f0dcc36fdad0b8adbf2f96dba57f15620a" + }, + "tests/environment/test_runtime_weather.gd": { + "bytes": 3533, + "sha256": "047bb23573ef6a4c7e2483e3a2bfd244a3e2061fbf65c33fa08a52952a2655a0" + }, + "tests/environment/test_runtime_weather.gd.uid": { + "bytes": 20, + "sha256": "e68d6e9921879f54828b07e77719384b52b145dc4d5052c692a34090466037f2" + }, + "tests/environment/test_weather_recovery.gd": { + "bytes": 2916, + "sha256": "d71bf3fbf1fa1d43eae2c38161a44b18fc6cc34477a1ab9dd12fca54e4ee9089" + }, + "tests/environment/test_weather_recovery.gd.uid": { + "bytes": 20, + "sha256": "c26cceb4eeb2968f4b9226cdf54fdfecec9829a77339741f7500f38f524296e9" + }, + "tests/environment/test_weather_timeline.gd": { + "bytes": 3810, + "sha256": "212dab5036f90ae2eaf1b75e0c0adaea4a572cdbfb31b07d0ef4336def4f4791" + }, + "tests/environment/test_weather_timeline.gd.uid": { + "bytes": 19, + "sha256": "2654cc9a56e546ae0632d3d97897ecab3d818a434b26184787696ae49370e0de" + }, + "tests/export/test_exported_opening.gd": { + "bytes": 7099, + "sha256": "b2d96ce4c40582a61a4b4f042bd38c188ce5351daf1206720b41183d5ba15c51" + }, + "tests/export/test_exported_opening.gd.uid": { + "bytes": 20, + "sha256": "e0d77ae08862e353feec1fe3f5ed9e0093cc281d364befb836be7dfb8a7c9bef" + }, + "tests/fixtures/facilities/invalid_service_profile.tres": { + "bytes": 1077, + "sha256": "8bd02f6ca505a9bd65360a1ce99f961252bc201c5381e0033519ef4952f8f2e6" + }, + "tests/fixtures/legacy_premium_room.tres": { + "bytes": 746, + "sha256": "bf035db5deea3818ab12f029fdf53f65afa2f5c99fec4a236ce7dfb7076f5bb7" + }, + "tests/fixtures/legacy_staff_dormitory.tres": { + "bytes": 771, + "sha256": "84c7a92216300a20f627c7e822219cf188912d9ba3417fa910261d18bdaf69cc" + }, + "tests/fixtures/p08-02/README.md": { + "bytes": 1333, + "sha256": "e88ca33fdb4e96602d1fb108d71a9c35b6fa054619ecf6f1396e9a6c5e0ebd98" + }, + "tests/fixtures/p08-02/mixed_world.gd": { + "bytes": 17942, + "sha256": "a23f8a686be1d77e4874b9956eef89be4756f6e5eb01cc62454c3845acc62c25" + }, + "tests/fixtures/p08-02/mixed_world.gd.uid": { + "bytes": 20, + "sha256": "d7549f933b74f5e807cd2d3b3adcdd083af4a3bd331614314ff7bfd7b0903f31" + }, + "tests/fixtures/p08-02/reader.gd": { + "bytes": 466, + "sha256": "a760d0e45979d747dbd1f8710033bdce13287b00eb879d947d8378ff920ed1be" + }, + "tests/fixtures/p08-02/reader.gd.uid": { + "bytes": 19, + "sha256": "3e68ce192d5770e3823df9699c5c99ebb618fe0a480b4d56913624941900b08a" + }, + "tests/fixtures/p08-02/writer.gd": { + "bytes": 466, + "sha256": "1a918b5509773b4b07a27d47ee44583b0eb5288138f7bf896088a7913773c260" + }, + "tests/fixtures/p08-02/writer.gd.uid": { + "bytes": 20, + "sha256": "8f150654767de0c66329d7d9e84d306c4fa5a65c918e04fb520b626b39f68334" + }, + "tests/fixtures/p08-03/checker_fixture.py": { + "bytes": 32016, + "sha256": "80b9ad74b04b8d235b3ff152ca2cba720085ec420c7dc7cbf07274d534f8fdfb" + }, + "tests/fixtures/p08-03/passive_placement.gd": { + "bytes": 15763, + "sha256": "210c95c4df9ac16197ebaad67f7531d66b841e9d03c05c014a846bb9186bc2d0" + }, + "tests/fixtures/p08-03/passive_placement.gd.uid": { + "bytes": 20, + "sha256": "f75e3f2d9555c30cee3a1de882f32225fc624565a78a7ef3f5c604325c578ce3" + }, + "tests/fixtures/p08-03/placement.gd": { + "bytes": 22208, + "sha256": "c59f08fd232f73d0e06398cd3577aba8f5a5840d18c61ce5c88db9e7dba51923" + }, + "tests/fixtures/p08-03/placement.gd.uid": { + "bytes": 20, + "sha256": "5caca08c1e627e0ca07e2ab7b13bd82b24a22f77513fe87e30b79023568e1987" + }, + "tests/fixtures/p08-03/r05-reader-checkpoint-provenance.json": { + "bytes": 552, + "sha256": "daf034375facf36e9cc8da4ec0001d7c7b017c315a9155680b4b490e582ec5b9" + }, + "tests/fixtures/p08-03/r05-reader-checkpoint.json.gz": { + "bytes": 49774, + "sha256": "27fd3b41834106ccd6a0980dfa2bc91cc19806dd3f552ba04246efb400763233" + }, + "tests/fixtures/p14-03/README.md": { + "bytes": 1651, + "sha256": "a79bce1919fceb43ef95fcf6963731ca94200ea2cbd236c1a3e646fd8a83d1d0" + }, + "tests/fixtures/p14-03/legacy_rush_v1/journal.log": { + "bytes": 35, + "sha256": "978fd98f250ae5a9d3249f22adc3dcf032007dde92ddd10d556e050dd87616d8" + }, + "tests/fixtures/p14-03/legacy_rush_v1/manifest.json": { + "bytes": 441, + "sha256": "80c251341bd3f2a6c4a659f30e477dd856c9fec7961d5b2dfd98d7e9eb5006ab" + }, + "tests/fixtures/p14-03/legacy_rush_v1/thumbnail.png": { + "bytes": 83, + "sha256": "0ef55674eca98b6748ae5ccca85a14b042c1545a143810c9c47b487119895c32" + }, + "tests/fixtures/p14-03/legacy_rush_v1/thumbnail.png.import": { + "bytes": 968, + "sha256": "a4387146724cd29d96797242569f8ab8d24773124a6ff4a00b62564b0522ab33" + }, + "tests/fixtures/p14-03/legacy_rush_v1/world.bin": { + "bytes": 14813, + "sha256": "26171ed8994982ed13fe038d225522044f1049070be53d76a4ed5572a227257d" + }, + "tests/fixtures/p14-03/legacy_rush_writer.gd.txt": { + "bytes": 1967, + "sha256": "be679569f7212f1fa44661a4e59985d8ae837976f2d2a37132a046ebcfec3676" + }, + "tests/fixtures/p23-03/diagnostic_stream.gd": { + "bytes": 7900, + "sha256": "b23500c7e8041e56c1a7845a50e9a7c955da69439f54901b7c00b770f20ae9c7" + }, + "tests/fixtures/p23-03/diagnostic_stream.gd.uid": { + "bytes": 19, + "sha256": "1f3cbee159dc93c7bd7dd7f0a3b9e9103ed43ecb341c3a900c1df59377d8bb20" + }, + "tests/fixtures/p23-03/layout_comparison.gd": { + "bytes": 5625, + "sha256": "fd84165ac031575b92ef6865dd188c017569f894ad65ded29cd37300f01a6553" + }, + "tests/fixtures/p23-03/layout_comparison.gd.uid": { + "bytes": 19, + "sha256": "8a33dd196d801c199de7e4e0607b883baf52ecf67d9b9957b839bbf750928d82" + }, + "tests/fixtures/p23-03/observation.gd": { + "bytes": 11227, + "sha256": "a9a0e611f1262151549ff033eae618436e52f661d52decbab5adb93efc4dcdf5" + }, + "tests/fixtures/p23-03/observation.gd.uid": { + "bytes": 20, + "sha256": "87f8d1b584d37053b76f27e02e06fefd77b2b8bbf42a7d92404d4c4109934988" + }, + "tests/fixtures/p23-03/passive_observation.gd": { + "bytes": 14112, + "sha256": "812c2a3b399b079333e4eae0fbf78946f1c39041e6859e65f8bc7c44aaad6bfc" + }, + "tests/fixtures/p23-03/passive_observation.gd.uid": { + "bytes": 20, + "sha256": "8c4295b0605c6278168e6d57489075c04b75df7c9a7078b91c6b1ff8d9cbd799" + }, + "tests/fixtures/p23-03/passive_os_recorder.gd": { + "bytes": 447, + "sha256": "b90f054faa4fd46e6a30ba12d2ce22cdcfb281351b209650c8a00a7713767e47" + }, + "tests/fixtures/p23-03/passive_os_recorder.gd.uid": { + "bytes": 19, + "sha256": "269ff76c69fd161b0a979cae1dc938e9473dfde562c826a0acbda824004c576a" + }, + "tests/fixtures/p23-03/queued_elevator.json": { + "bytes": 1145, + "sha256": "825a5bc8568cd890e1faf8c7e0122c43958f334711b0602dc2c3231373aa4fef" + }, + "tests/fixtures/p23-03/r13_actor_overlap.json": { + "bytes": 716, + "sha256": "a6b433c56207a172286745b57df72a76bfc2be9ac2adb15d629b4e8ab53d7985" + }, + "tests/fixtures/p23-03/r13_service_region_gap.json": { + "bytes": 1083, + "sha256": "43e82a2a12906f0d0ce917c77b64bff6813b0a4fe5b7b287ee8311f6b3b43750" + }, + "tests/fixtures/p23-03/recorded-badge-negative.json.gz": { + "bytes": 83518, + "sha256": "17b1596fb1dca0436cd656ac21a9dc754c75b4485335a0aebe533f70e1c1b5ac" + }, + "tests/fixtures/p23-03/repair28_frame180_projection.json": { + "bytes": 45466, + "sha256": "95bbd41dcc5db1388e5ecc14557dfafd6bd540d707532588fd6126e8d6843d63" + }, + "tests/fixtures/p23-03/repair28_r15_negative.json": { + "bytes": 1059, + "sha256": "8525cdfbc504583778624ab103efb4642374715be73187e97bdbf18d180a1616" + }, + "tests/fixtures/pre_auto_purchase_runtime.gd": { + "bytes": 353, + "sha256": "04cafc71c3d26ec25e2d9205a4845671c2d6b52c7b5ec5052887beca9748f906" + }, + "tests/fixtures/pre_auto_purchase_runtime.gd.uid": { + "bytes": 20, + "sha256": "dcf584c1243a8503292bb394b9111a19f4ad6dfe1841f3a30ffdc701779bdeb0" + }, + "tests/fixtures/pre_upkeep_runtime.gd": { + "bytes": 1115, + "sha256": "685032e836d7c428dbefaccdbaad098343687b684934e61d1b9d04d7aa5f21a5" + }, + "tests/fixtures/pre_upkeep_runtime.gd.uid": { + "bytes": 20, + "sha256": "8908e29bb5e8834defed1e042eb0b45b26f2812cab94ca5a70547e90f9134331" + }, + "tests/fixtures/required_kitchen_legacy14/formal-package/journal.log": { + "bytes": 35, + "sha256": "defee9e7f3721ca05f4f1ba839fee8dba773a798c1b8408df31327eb19d2a1ad" + }, + "tests/fixtures/required_kitchen_legacy14/formal-package/manifest.json": { + "bytes": 449, + "sha256": "4b276a7b6abad39ecfe2e43114b5637b61640a626580dce4b5871e648a182a7d" + }, + "tests/fixtures/required_kitchen_legacy14/formal-package/thumbnail.png.bytes": { + "bytes": 83, + "sha256": "0ef55674eca98b6748ae5ccca85a14b042c1545a143810c9c47b487119895c32" + }, + "tests/fixtures/required_kitchen_legacy14/formal-package/world.bin": { + "bytes": 15405, + "sha256": "7bd0fe615790b55e09f0bf7c047a19173011f49954403c655644c5865830c13c" + }, + "tests/fixtures/required_kitchen_legacy14/provenance.json": { + "bytes": 3496, + "sha256": "07208464afd903366275e39dc9d09d8ebf936e384bc55d570e0f77a2cad36783" + }, + "tests/fixtures/required_kitchen_legacy14/write-checkpoint.var": { + "bytes": 159576, + "sha256": "a5348a17af34e717108f9ccceb215223ce48f1db1aebbd9024a9ea02c637adaf" + }, + "tests/fixtures/required_kitchen_legacy14/write-contract.var": { + "bytes": 392, + "sha256": "f32e3f3c0ef44f56b4c320206f6507a4ca5074be5f7813e2f5c76a47c152b3cf" + }, + "tests/fixtures/required_kitchen_legacy14/write-persisted-before-io.var": { + "bytes": 158836, + "sha256": "6a0ba26642176c9432ce272e578764b3336731ea9b4d07ac9623f9fcdeed077a" + }, + "tests/fixtures/required_kitchen_setup.gd": { + "bytes": 4874, + "sha256": "30706107c90bbd7ebecb930666426a8ce45d6003cb3a26bb35c7452be4e5fd95" + }, + "tests/fixtures/required_kitchen_setup.gd.uid": { + "bytes": 19, + "sha256": "527436138aa188d58579ebbf54a07f085e355dc15c3a973efcafef2d166bdb6b" + }, + "tests/helpers/mana_outage.gd": { + "bytes": 920, + "sha256": "8df68f67fd023fb3fed4c465acf8227094d0e9403efc1f56ae009685629563e1" + }, + "tests/helpers/mana_outage.gd.uid": { + "bytes": 19, + "sha256": "27c76eb680b27f12c9eb2fa21b4aaa286b2f321ae41f860ab596528b2e25f533" + }, + "tests/helpers/ui_audio_fixture_cleanup.gd": { + "bytes": 4282, + "sha256": "02cd9796d0bf6222c9e9e6ddcb7fb75235bab645c2f10dcb1b4e9f0bc6077260" + }, + "tests/helpers/ui_audio_fixture_cleanup.gd.uid": { + "bytes": 20, + "sha256": "810aad3c800a266d7472103bd953bbce9f29deb976c2a9a3d5cbfa470c0f7750" + }, + "tests/helpers/ui_audio_teardown.gd": { + "bytes": 4913, + "sha256": "8afe4f86b60fa4ddc8752bb5f556f834996c678a022a1035979a801c70b42747" + }, + "tests/helpers/ui_audio_teardown.gd.uid": { + "bytes": 20, + "sha256": "bbcf13097bbcef77448067c5730d02fc8543aa46696d2a43db8247b62f6f5651" + }, + "tests/mvp/fixtures/README.md": { + "bytes": 652, + "sha256": "025dee51e990e3151070e247bb24abb6ed3f3a28cd55d929dd3a0d4788105e63" + }, + "tests/mvp/fixtures/operations_v3_0600.txt": { + "bytes": 26825, + "sha256": "dac35666fe0535a2aa979230ed45b85c9406a7878c9e39a8c7d35dd6c056638b" + }, + "tests/mvp/test_amelia_donations.gd": { + "bytes": 4722, + "sha256": "1bd622a3d88374f01e3d8885a84a816572ed296928f6ce7e3f8134ab15f60793" + }, + "tests/mvp/test_amelia_donations.gd.uid": { + "bytes": 20, + "sha256": "c0a2ea56341817ab29adaed37f83d1407aa3377fa8bb0700e307322ec4e031fb" + }, + "tests/mvp/test_anri_floor_pricing.gd": { + "bytes": 10621, + "sha256": "420cd0b14c0a4921ab3a45e612773f8afd38a31b566d1b95942d3e5defc004b1" + }, + "tests/mvp/test_anri_floor_pricing.gd.uid": { + "bytes": 19, + "sha256": "b86b32be653a78515870510a71ea44e549a09573edcda8c87fa81187abc1ad5f" + }, + "tests/mvp/test_approved_free_unique_arrears.gd": { + "bytes": 15412, + "sha256": "411d7836326f2858b68201bc3e8fec2b1d365291342939249cbf5a40a20d6b0b" + }, + "tests/mvp/test_approved_free_unique_arrears.gd.uid": { + "bytes": 20, + "sha256": "3eeb8425240dfcaff8b6b989d38ea678998ae9f41720465e3e1dfca24d900067" + }, + "tests/mvp/test_chapel_boundaries.gd": { + "bytes": 7252, + "sha256": "a857179fbe5186e27080ef7bae13775edcc821440cd763fd793e03ef7d27ac5c" + }, + "tests/mvp/test_chapel_boundaries.gd.uid": { + "bytes": 20, + "sha256": "e794ed6920599c1f904c3db23a19da62e55ed273c6f32e15285e45e1b0a2dfab" + }, + "tests/mvp/test_chapel_service.gd": { + "bytes": 5348, + "sha256": "b8631e1095ce7714d2ae581a6ee3d8fe47065184b7dd05e9104a2b7c0cacb1c1" + }, + "tests/mvp/test_chapel_service.gd.uid": { + "bytes": 20, + "sha256": "5e48b0e74acac76805e0e9eb492ebd27e0cfffa3a1b7a6ff27c3dac0e1761d82" + }, + "tests/mvp/test_fine_cleaning_effect.gd": { + "bytes": 1164, + "sha256": "7c7df0bac1c072ed4423140e8afe431952ec2a47f76df7dbc24cab62283cae06" + }, + "tests/mvp/test_fine_cleaning_effect.gd.uid": { + "bytes": 20, + "sha256": "800a475b52b5a0a0de6c4fabb7a52b9c5ab44265bc593232039d77e49bca9f22" + }, + "tests/mvp/test_mvp_content_catalog.gd": { + "bytes": 19911, + "sha256": "b663b8790d02acfa836c8a6a6609f337c7991b7b91d271d1b60b76d137bbd62b" + }, + "tests/mvp/test_mvp_content_catalog.gd.uid": { + "bytes": 20, + "sha256": "f5035967a5f68772406f9c7d3c18d4fd881d86ed8fba6e7a0810b76c183b295f" + }, + "tests/mvp/test_operations_coordinator.gd": { + "bytes": 72455, + "sha256": "87499bf5f45a7201cb16082df0ac1031b7b28e9c725950013252d0bb9e5efd6f" + }, + "tests/mvp/test_operations_coordinator.gd.uid": { + "bytes": 20, + "sha256": "06151608ce04773e7644b5c73d0441959ea1f35d756050801183f47ebfc8be7d" + }, + "tests/mvp/test_original_midnight_settlement.gd": { + "bytes": 22752, + "sha256": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + "tests/mvp/test_original_midnight_settlement.gd.uid": { + "bytes": 20, + "sha256": "f809b227a95ea335913280641921bcbfd4dea6d1718dbd3ca9f3ca75547e2792" + }, + "tests/mvp/test_original_room_zones.gd": { + "bytes": 3123, + "sha256": "6f1b99f2bac0e58eab30fbb061796c88fc93a21e24de7bdcd5ee39a4c02fe8df" + }, + "tests/mvp/test_original_room_zones.gd.uid": { + "bytes": 20, + "sha256": "4749b562451f6f83da92fe4b33cc3c634c1612fc61f9a163b33b51094e897d9e" + }, + "tests/mvp/test_pending_service_pricing_report.gd": { + "bytes": 15155, + "sha256": "50095c41fe76bac7bd9346ce97651d40610fa69b48c3b24f7acc5b371578e753" + }, + "tests/mvp/test_pending_service_pricing_report.gd.uid": { + "bytes": 20, + "sha256": "279793f087419da5ab359f2759c99bd9a0f79e4993aba3df7427f434cf099d5d" + }, + "tests/mvp/test_premium_room.gd": { + "bytes": 3648, + "sha256": "ce79ae9632cd17f84ca52961e098d5015921d81abcf57acc72461a16dd44baff" + }, + "tests/mvp/test_premium_room.gd.uid": { + "bytes": 20, + "sha256": "87e41939d21089899b265a05e12a4a4f1271cf7cb156319fb543e9601831da57" + }, + "tests/mvp/test_premium_room_guest_flow.gd": { + "bytes": 7302, + "sha256": "11bad6a34aec3a252ddf125813812e9b7fab5879d8536dfc904a48df7ff9ef83" + }, + "tests/mvp/test_premium_room_guest_flow.gd.uid": { + "bytes": 20, + "sha256": "2163706f4a8724817328449b3d8276a29fd046f5d219f31eb12c9bd12b3e5f78" + }, + "tests/mvp/test_progression_service.gd": { + "bytes": 24916, + "sha256": "f97895fceacc42fbbe14f3e77972ef980abf8f63ca9a5c8c8d4003900305b0aa" + }, + "tests/mvp/test_progression_service.gd.uid": { + "bytes": 20, + "sha256": "1c2bbbff10ca421c86e343f19b577acb683c1d55bc55b04723d70d7cfc24f119" + }, + "tests/mvp/test_runtime_content_progression.gd": { + "bytes": 28837, + "sha256": "c8f7a107d024693b863feb2c9cc460383b98cf04e5ed872011bcd7024be68d60" + }, + "tests/mvp/test_runtime_content_progression.gd.uid": { + "bytes": 20, + "sha256": "9bc80330a8223b88ae5a4cf13882c866a578ba2af7069d621800116c36732ed4" + }, + "tests/mvp/test_runtime_mana_depletion.gd": { + "bytes": 5452, + "sha256": "5f984af2ca1cb99ecec7c1fa61bfee46317aef2d0abccfa3f317364acbf30c11" + }, + "tests/mvp/test_runtime_mana_depletion.gd.uid": { + "bytes": 20, + "sha256": "1f91a438e41a8336b200d615a971bb261e8e9811f5d57b2c9b60b9e65ed2cdcf" + }, + "tests/mvp/test_runtime_operations_acceptance.gd": { + "bytes": 19115, + "sha256": "a802afdc5786b6690a2c8b81f39eefda9c04624826d5cb90c587cf84190feea3" + }, + "tests/mvp/test_runtime_operations_acceptance.gd.uid": { + "bytes": 20, + "sha256": "1028606ca8681156ea59df3e5426deccbfa0cc5588af043da24510408ec86d7f" + }, + "tests/mvp/test_runtime_operations_integration.gd": { + "bytes": 29023, + "sha256": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + "tests/mvp/test_runtime_operations_integration.gd.uid": { + "bytes": 19, + "sha256": "912ce232fa77410855edf1dad667117f5493c819c484dfe0a69c5af316396637" + }, + "tests/mvp/test_runtime_upkeep.gd": { + "bytes": 7337, + "sha256": "eae48823d58d78c419d29728e33a5559fbe5131b49e33d04ca4e6fa3a721c29b" + }, + "tests/mvp/test_runtime_upkeep.gd.uid": { + "bytes": 20, + "sha256": "14b8b1294689ba7f5380374590480e781ed8f992d52b1605c83d76212d330ed2" + }, + "tests/mvp/test_staff_unique_contract_report.gd": { + "bytes": 9224, + "sha256": "93d7b00d3b27a85246dad25337a25c0036d562390e584854fe89c958ada76907" + }, + "tests/mvp/test_staff_unique_contract_report.gd.uid": { + "bytes": 20, + "sha256": "8a8eefe8c949649b53ca5002f44ce7c5047642a4e11156510ad97a2ff0873cdc" + }, + "tests/mvp/test_tomari_floor_trouble.gd": { + "bytes": 10699, + "sha256": "09581fbc32b29d2b5773e0859f22ca58c947927d11e6523027ffe277bd7ac303" + }, + "tests/mvp/test_tomari_floor_trouble.gd.uid": { + "bytes": 20, + "sha256": "cb5120adf7650fab66b903a159903ee107ccf7529c1cf0fdcb7ba48051a2ebaf" + }, + "tests/mvp/test_unique_character_validation_policy.gd": { + "bytes": 17457, + "sha256": "2b4c70506e4436e5afe4bf987ff9bba765a02394a4de86e2ed0af6ba5b68c766" + }, + "tests/mvp/test_unique_character_validation_policy.gd.uid": { + "bytes": 20, + "sha256": "7bc8edf74c119a16db928a0ee8f754b421fd8df28d824fd50c6e24f92f857316" + }, + "tests/mvp/test_upkeep_construction_boundaries.gd": { + "bytes": 2324, + "sha256": "266c4f8f240d7508c6c282b08745c1cd813caae384fd46e1ab88f170944ab55e" + }, + "tests/mvp/test_upkeep_construction_boundaries.gd.uid": { + "bytes": 20, + "sha256": "1361112f7ec1bedb8656fe31a0a5cc0bbd181a2cbdc34de4bf024eb3b6274d91" + }, + "tests/mvp/test_upkeep_legacy_midnight.gd": { + "bytes": 6071, + "sha256": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + "tests/mvp/test_upkeep_legacy_midnight.gd.uid": { + "bytes": 19, + "sha256": "ec7adb778952c2590aa6ad10ec555269916e4e9730732bbc8e7fe9f025dbdb3f" + }, + "tests/mvp/test_upkeep_loss_streak.gd": { + "bytes": 2865, + "sha256": "b90e6ad96b4a0989b298a62d11c349fcfac53a65cb532f206d8e7ff2223190dc" + }, + "tests/mvp/test_upkeep_loss_streak.gd.uid": { + "bytes": 20, + "sha256": "d3a97e673740b81931f9bf546bf0d6ee98d496d41d50f0f2ae925131e6e59cec" + }, + "tests/mvp/test_whole_tower_outage.gd": { + "bytes": 9695, + "sha256": "dd786e8c7448eeb77d51d7effd9100059ae6febf638ca2c20f3a55683009c9ea" + }, + "tests/mvp/test_whole_tower_outage.gd.uid": { + "bytes": 19, + "sha256": "d54d33c9e4e1f19c848e011d4ebc8f0f6aa54a72be919b5f7dbc4b2bacb43c3b" + }, + "tests/performance/README.md": { + "bytes": 832, + "sha256": "0470e8180c1d2b544cabd94c69fe1e31bc6720a8c5fb641d5a1cec408e437bd6" + }, + "tests/performance/fixtures/linear_path_reference.gd": { + "bytes": 2152, + "sha256": "406b664557e99a8fc9903b9431f708e8e6372c3c56bf1665dd1908485c9bd528" + }, + "tests/performance/fixtures/linear_path_reference.gd.uid": { + "bytes": 20, + "sha256": "db568b490c6e96e513e9f4b176949693578d59d5dd66971bd8650e2507dbe32d" + }, + "tests/performance/fixtures/simulation_digest_v1_reference.gd": { + "bytes": 8031, + "sha256": "64b5c099f8b4ff6e855c80513f150cfdb0e9c6d0f816fd02ec2660d569550928" + }, + "tests/performance/fixtures/simulation_digest_v1_reference.gd.uid": { + "bytes": 20, + "sha256": "d55487d012245ebb1be71247f2512caaf072569d8611df782dbc55d9000eaef2" + }, + "tests/performance/fixtures/uncached_preview_reference.gd": { + "bytes": 2083, + "sha256": "5ba415527f1ecc5cb6d6248ba75014ae91df86d01e7f9c35b8834f378c0c69d1" + }, + "tests/performance/fixtures/uncached_preview_reference.gd.uid": { + "bytes": 19, + "sha256": "dca8700103f3f709ed825af365ed526d147d6896b04e3844e196303dcf363dcf" + }, + "tests/performance/perf_mvp_001_harness.gd": { + "bytes": 38702, + "sha256": "63519cf3723d084fa9c30425e49eb210a54a23fd1987df910621f8d12df9e413" + }, + "tests/performance/perf_mvp_001_harness.gd.uid": { + "bytes": 20, + "sha256": "8069364ba238ee56bd6b722ebcea5e021e463d9a58751bd8e106185d068680bb" + }, + "tests/performance/profile_production_scene.gd": { + "bytes": 6936, + "sha256": "2353f3e42451aaf0b3469deb872ba99ede87efcf3a96b7bf62c7b09bcc8ef67d" + }, + "tests/performance/profile_production_scene.gd.uid": { + "bytes": 20, + "sha256": "e4a435e5f0cb75b07f3ec69eed1872e8ec29b18f8c3d43dd92b034b6319f049c" + }, + "tests/performance/test_digest_performance.gd": { + "bytes": 12490, + "sha256": "363772fc43975f12c9e2056e2b01beb4cd8b2d7544db7528f80c6bd127710c1f" + }, + "tests/performance/test_digest_performance.gd.uid": { + "bytes": 20, + "sha256": "0e2bed5d185228748ba6b616b56ceebc264fa3c35b2c8c5afb2402ca9869a222" + }, + "tests/performance/test_facility_reachability.gd": { + "bytes": 3191, + "sha256": "0b2a39bddc8878ba6190cf4985a543f09039b54840564a9b688f376ea63e96e4" + }, + "tests/performance/test_facility_reachability.gd.uid": { + "bytes": 20, + "sha256": "d52bc87dc72465bba7b762df2efc925638a4ffc8f36df2820d1465117558da6f" + }, + "tests/performance/test_lazy_digest.gd": { + "bytes": 2345, + "sha256": "b1d62d6c83abd514e462ea737baab113c52e76c3b76f7a0672d4a4a119617846" + }, + "tests/performance/test_lazy_digest.gd.uid": { + "bytes": 20, + "sha256": "5a943cf974aec54917085a03461b4da5332c0d34e88551f651e3adb8b8bb43b2" + }, + "tests/performance/test_mvp_manifest_cache.gd": { + "bytes": 12883, + "sha256": "bcf1668f379344447b72483b6923c2eb59a2fdc29237a6cc817a31d3834d2e52" + }, + "tests/performance/test_mvp_manifest_cache.gd.uid": { + "bytes": 20, + "sha256": "80a30061f3ad39a21759c9543ea89ce263e682d001c4531ec5905cffad2944a3" + }, + "tests/performance/test_path_membership.gd": { + "bytes": 1154, + "sha256": "4a0eee95ee39a92eb9f8ec345d46d45f7349e3428454a22bf867b588ecc5bfa6" + }, + "tests/performance/test_path_membership.gd.uid": { + "bytes": 20, + "sha256": "8905b73e45f79910867dc41a1b07da8485bc36d24dc6336e270bebe9b97125bd" + }, + "tests/performance/test_perf_mvp_001.gd": { + "bytes": 2455, + "sha256": "1a4bc20ea4810924e8e64bc5fec1b44fc327f1676200e978a77577d628675e5b" + }, + "tests/performance/test_perf_mvp_001.gd.uid": { + "bytes": 19, + "sha256": "d4f5a7b3092465ce1796b21f700c2b158e68f3eb6eff577e06e64099201efa0c" + }, + "tests/performance/test_snapshot_ownership.gd": { + "bytes": 3341, + "sha256": "96b5d359bf40a8eea2b8acd2e77ce9094b1a4eb70a49a8a9b4ce23a209a7945d" + }, + "tests/performance/test_snapshot_ownership.gd.uid": { + "bytes": 20, + "sha256": "70dcce95041791a79f1a96cf708dc62c237c8e67b04ac1068908db8c5f69e5a8" + }, + "tests/performance/test_system_optimization.gd": { + "bytes": 3403, + "sha256": "374ff4b3ba78b7a724a3620d683db3835fd2a545f1de11606fd4969a3c6ede95" + }, + "tests/performance/test_system_optimization.gd.uid": { + "bytes": 20, + "sha256": "de3ae15ea474f750f3a006aed5e5eba9ab3275456d72c9f7f1c569a5a105c8d5" + }, + "tests/performance/test_world_snapshot_cache.gd": { + "bytes": 2175, + "sha256": "46f25630b30c9cc0f7cddb051a42a0c3edc486f3b81cbfab94d8d2cd0e989935" + }, + "tests/performance/test_world_snapshot_cache.gd.uid": { + "bytes": 20, + "sha256": "8542e90f905da00807df576413467f0495b7d01de6b02d12a496ca02a62dc2fe" + }, + "tests/run_tests.gd": { + "bytes": 2980, + "sha256": "4c8ef388e2349ff975a2af7260da0aa02231a6036ea71b4000f2bb0e6f4083d5" + }, + "tests/run_tests.gd.uid": { + "bytes": 19, + "sha256": "10d91ed020d6a8e18abcdde6c6b85c1e5915a576917d1886daba81dccc9bd6cb" + }, + "tests/s0/test_command_snapshot_key_order.gd": { + "bytes": 8428, + "sha256": "5803a593b0d9dbb35248d79a2d94b5a61668f5bea7687b2cb75366c8b1b33a2b" + }, + "tests/s0/test_command_snapshot_key_order.gd.uid": { + "bytes": 20, + "sha256": "e13b97181e70f07828c64b10570b3cb53b038d54819246be59a25c68627e7e28" + }, + "tests/s0/test_command_transaction.gd": { + "bytes": 13189, + "sha256": "4b6988fd8011b178f03499c368a2417563ba2fc80780e5f0b5ddfce243412522" + }, + "tests/s0/test_command_transaction.gd.uid": { + "bytes": 20, + "sha256": "b213215430d78584694eff8da4a5829407dc8a5107e9e8567481cd2f652f7240" + }, + "tests/s0/test_definition_registry.gd": { + "bytes": 14699, + "sha256": "bf355805e007d99addfb9b963d3566a84602cab40bdb1805ccf3d4e8d851ae17" + }, + "tests/s0/test_definition_registry.gd.uid": { + "bytes": 20, + "sha256": "f4120c70deca131d6053e90c12325719221f85cdaaa62d0e323613480e2fc159" + }, + "tests/s0/test_determinism.gd": { + "bytes": 4896, + "sha256": "a397d2b33a2c8abfae76350d8ee65b967bbc1625186a865dffd776b421cc7520" + }, + "tests/s0/test_determinism.gd.uid": { + "bytes": 19, + "sha256": "58f08c174f50e9405448a11e1d150f2934842b9321d2884244cc37c027d86009" + }, + "tests/s0/test_domain_events.gd": { + "bytes": 7070, + "sha256": "cfb0c5678f9b88ce8594ad06cd122276faa2c7f1287cd204de61c1f777508fbe" + }, + "tests/s0/test_domain_events.gd.uid": { + "bytes": 19, + "sha256": "5036baf806c0d565b733a8d79ab714a4beae8fe0075a205a0b98cd40d9ca1178" + }, + "tests/s0/test_kernel_and_save.gd": { + "bytes": 5988, + "sha256": "6d13f83672f8273ec6ddc47c88de1ce3916f4126af022be8bc562f5dd1d302a7" + }, + "tests/s0/test_kernel_and_save.gd.uid": { + "bytes": 19, + "sha256": "77b866668f5427896a7250a6e80d0b2b127f93dfb13feca0629ea0620d8c5a8a" + }, + "tests/s0/test_runtime_integration.gd": { + "bytes": 7699, + "sha256": "ff13ed6a711e0d8f312c27b5e72a385cf96db75ffe651e17b4c74b1512642a77" + }, + "tests/s0/test_runtime_integration.gd.uid": { + "bytes": 20, + "sha256": "112d151ca9134c8edfeab868eb40c4d2a4d691ca22fcb0ec1ef3e322ec993929" + }, + "tests/s0/test_stable_id_generator.gd": { + "bytes": 1464, + "sha256": "2fac546b4788650b69832b2336d9d46f7b8b343b660d687256d98a64ef4b823c" + }, + "tests/s0/test_stable_id_generator.gd.uid": { + "bytes": 20, + "sha256": "18eee49f41e346611226e97521b751ebb881384b4ebab848b1f2c85289d43c2a" + }, + "tests/s1/test_construction_service.gd": { + "bytes": 34645, + "sha256": "ce63074b84cb75d710eb3650701a9cb2acf920ff607e41be645904fc2395e2c3" + }, + "tests/s1/test_construction_service.gd.uid": { + "bytes": 20, + "sha256": "787ee8a4516613bcb2f4636af3e34b5204413355269b37e8c50f97c42c08f8d7" + }, + "tests/s1/test_dimension_batch_save.gd": { + "bytes": 4896, + "sha256": "ca397c0457996bab637e8be5217b7db2c14579a1b0df54434b4000a69e793bbf" + }, + "tests/s1/test_dimension_batch_save.gd.uid": { + "bytes": 20, + "sha256": "0a228a9ae690e6b2fb33ade627a5a11d1b02a6a3aeeffa2c0fda371e4b9eaa50" + }, + "tests/s1/test_excavation_service.gd": { + "bytes": 15090, + "sha256": "64dacd14dbe0bc94368879daa130e4861ff43cc63fac6bb02e4e64091ee9a750" + }, + "tests/s1/test_excavation_service.gd.uid": { + "bytes": 20, + "sha256": "1125527fb0736715b39c87ddc7dda925a197a90108e8f523d32164ba9e5eff63" + }, + "tests/s1/test_facility_infrastructure_projector.gd": { + "bytes": 38840, + "sha256": "060fc9ab24d123ba91782652e6c9d7ba61c140a5f418854a8a28e07fa0adea8c" + }, + "tests/s1/test_facility_infrastructure_projector.gd.uid": { + "bytes": 20, + "sha256": "9b36d34c508ca890f4952670e378af2f6e95f53021bf81548fe5c6dc1058d2b9" + }, + "tests/s1/test_facility_resize_preview.gd": { + "bytes": 4204, + "sha256": "46339afa52739c6ab626d78ddd298e06f71366ca886954c852549658ff91bc85" + }, + "tests/s1/test_facility_resize_preview.gd.uid": { + "bytes": 20, + "sha256": "dcc10ab40f2c709ee9dfffae6bb30e33a19d6aa2e690b28886190b83d269c71b" + }, + "tests/s1/test_original_facility_dimensions.gd": { + "bytes": 2717, + "sha256": "b56a8bf2bf0d6bea3bb2c45148e60b51de3fd033d1cb997eb71d5ae330a4950b" + }, + "tests/s1/test_original_facility_dimensions.gd.uid": { + "bytes": 20, + "sha256": "57557d6312e56b7cb745d7fc0d1f5348461e3446d266302345a4277c4573ef9c" + }, + "tests/s1/test_p08_combined_migration.gd": { + "bytes": 723, + "sha256": "9284a8cfb478b4c8d69f6d8166eec6c41107e3902029289b3c0e9ba48c370855" + }, + "tests/s1/test_p08_combined_migration.gd.uid": { + "bytes": 21, + "sha256": "8c3a70d0ce619b8cb98dc003eb6c53a31f167a686179a3ffc105f7cd4d856da5" + }, + "tests/s1/test_path_congestion.gd": { + "bytes": 26985, + "sha256": "709bb680f04862fd774644b0b425150977f54346ca76f6223663c414e00f33bd" + }, + "tests/s1/test_path_congestion.gd.uid": { + "bytes": 19, + "sha256": "ee823c0067044415042f5cabb070f714794bdcd295db17a42ce92f83a740bef2" + }, + "tests/s1/test_path_service.gd": { + "bytes": 8577, + "sha256": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + "tests/s1/test_path_service.gd.uid": { + "bytes": 20, + "sha256": "9881bc7507d975da2f013574230d554aaae20ac68c801e4cbf4320e1dbe6fe8b" + }, + "tests/s1/test_path_snapshot_transit_guard.gd": { + "bytes": 4922, + "sha256": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + "tests/s1/test_path_snapshot_transit_guard.gd.uid": { + "bytes": 20, + "sha256": "f951d04fb78e074e0e3da4d9220a28f5e7daa470cf1549377cabc5103d0328cb" + }, + "tests/s1/test_route_subslot_path_adapter.gd": { + "bytes": 31308, + "sha256": "a8f712e03776f91899f3311dc3d131d8370faa84032e522092dcc243683487b3" + }, + "tests/s1/test_route_subslot_path_adapter.gd.uid": { + "bytes": 20, + "sha256": "12b6575e3071eb8b9d1ef5bd550413ac43495fb072ac24a796efa77dc800e2e1" + }, + "tests/s1/test_runtime_infrastructure_integration.gd": { + "bytes": 50948, + "sha256": "aaca043097fb31a79e77c77cce1d12e34e5d8630e0ad7337af0d6860f4d45473" + }, + "tests/s1/test_runtime_infrastructure_integration.gd.uid": { + "bytes": 20, + "sha256": "d58219f07c7bc4b15a9525c00599847c8f1cb8e62cbc736ca717ced98369388d" + }, + "tests/s1/test_runtime_world_construction.gd": { + "bytes": 9126, + "sha256": "65924a9b69cd27b5923c5464bd44ab839b26fe39a51b3580e691805d5a9e0e5b" + }, + "tests/s1/test_runtime_world_construction.gd.uid": { + "bytes": 19, + "sha256": "c23784c1ed19734251b4915acb685d3279d57f552ae8395e813f7d741957585f" + }, + "tests/s1/test_spatial_subslot_service.gd": { + "bytes": 18631, + "sha256": "06f4f69438a280ef942bbefdb9caaef1ba59e7dfd0eab71469ca29d090a8ad58" + }, + "tests/s1/test_spatial_subslot_service.gd.uid": { + "bytes": 20, + "sha256": "61f418862ef07477e4f1c4a50e9a99ea4f4fbc15686811fa3015f1d189e986c9" + }, + "tests/s1/test_weighted_resize_runtime.gd": { + "bytes": 18864, + "sha256": "b6d31d5b27b51eae9be36e2b0195e78f5e3f1105af01660b0c5cf13cd233baff" + }, + "tests/s1/test_weighted_resize_runtime.gd.uid": { + "bytes": 20, + "sha256": "89c7821bdda5c7872dfdf12e79057a693db5a8c353c412489743531eaf6c3b6b" + }, + "tests/s1/test_world_service.gd": { + "bytes": 9888, + "sha256": "a5e165886f161b8bc71722ac7facdd17704bc6274c88dfe7fd2229f7f2b3f2b7" + }, + "tests/s1/test_world_service.gd.uid": { + "bytes": 19, + "sha256": "1f3b779a91f50397c8842bda2216b8407cfdda5f242b9ee8bddd39b59f52b645" + }, + "tests/s2/test_economy_service.gd": { + "bytes": 9705, + "sha256": "cfe6196c0da9e39d95ae0e39f0c5404e321f4fa8be3602b58d4bf6cd3fef3969" + }, + "tests/s2/test_economy_service.gd.uid": { + "bytes": 20, + "sha256": "e122b7a55c02e012909c60982facabca27028712e8d987db39f0e78ef252d1c8" + }, + "tests/s2/test_facility_pricing.gd": { + "bytes": 14561, + "sha256": "def0541f123307bd77a898c698292fa881d269788bf17dcd40b546673f10d4d5" + }, + "tests/s2/test_facility_pricing.gd.uid": { + "bytes": 20, + "sha256": "7d3db28d38b93c14b6e85c219a974a71d590a6bac2be692457524904910ace58" + }, + "tests/s2/test_facility_service.gd": { + "bytes": 17403, + "sha256": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + "tests/s2/test_facility_service.gd.uid": { + "bytes": 20, + "sha256": "bd81957c4ebf75e4fc2e1632f6cfbe5d1b33b7c2b5e5b86eee399dad062dacb5" + }, + "tests/s2/test_facility_upkeep_accrual.gd": { + "bytes": 5260, + "sha256": "2985f565a3e39605965112a2bc17688315e3c0d527dd283913f9416ff0cf0ef3" + }, + "tests/s2/test_facility_upkeep_accrual.gd.uid": { + "bytes": 20, + "sha256": "548684a8f9d2d997eac51606e2be832690b7eb02b57cdb938ed55bf6d28ed4a0" + }, + "tests/s2/test_facility_upkeep_settlement.gd": { + "bytes": 8019, + "sha256": "5a9666e8e044dbe803c33b41cc7cbb344796703665fa9f7b7a7b465020ec9aa9" + }, + "tests/s2/test_facility_upkeep_settlement.gd.uid": { + "bytes": 20, + "sha256": "2a4b395ba551f16316fd26348acbfec66fcb7e9d1dd822cac7477702b4296f86" + }, + "tests/s2/test_inventory_logistics.gd": { + "bytes": 25762, + "sha256": "ef8b87e721f57210da02b8cd0822f58e1a4c1cdaa19fe56301a03a87891e73d6" + }, + "tests/s2/test_inventory_logistics.gd.uid": { + "bytes": 20, + "sha256": "3ffc72051c94edbd162656b32b9909b807aa266b517172d249a115fe2d24b3e0" + }, + "tests/s2/test_kitchen_production.gd": { + "bytes": 21134, + "sha256": "e2aeb1fdbc8d1dfe9400646693a0e97919b3b86cb74a4f000ebeba01bfbee626" + }, + "tests/s2/test_kitchen_production.gd.uid": { + "bytes": 20, + "sha256": "ee6e5a1b0303d6771585c6f3a565e3d86b00a116f8045e7b7caa3325462f58a8" + }, + "tests/s2/test_ledger_backed_resources.gd": { + "bytes": 3356, + "sha256": "26c2c9b883ee1448345d5555ac3e97293c3bf273b42668c11a6bdc23e1184dd3" + }, + "tests/s2/test_ledger_backed_resources.gd.uid": { + "bytes": 20, + "sha256": "139b127207bfc1e847d46bbfa2fd7a918402f942396ab3e5d672be0ee524fbf0" + }, + "tests/s2/test_mana_network_service.gd": { + "bytes": 7192, + "sha256": "b0a21ea663667979c109cf6fd2efff717c284398071948c897b9e99090ce12fc" + }, + "tests/s2/test_mana_network_service.gd.uid": { + "bytes": 20, + "sha256": "6903dc207dd6d28fb6fa71241baf352ca7508eee355fb7b485f9655500969321" + }, + "tests/s2/test_mana_power_projection.gd": { + "bytes": 2976, + "sha256": "e3020534b084b57a8b773967931fd2be34a1de878b4940c8805b99592bbbc46f" + }, + "tests/s2/test_mana_power_projection.gd.uid": { + "bytes": 20, + "sha256": "1283e11ed69d81724764e97d3dd22af4ca7fd8ff33b22e703060fc438ff8c433" + }, + "tests/s2/test_mana_recovery_new_pid.gd": { + "bytes": 6491, + "sha256": "8ef67859db2a31213585fa49dfc687ea69bf215c41c8d1d8cbb3f84d00dd5d17" + }, + "tests/s2/test_mana_recovery_new_pid.gd.uid": { + "bytes": 20, + "sha256": "a0e872cd4958f2a8c86d0dfdb7c276ca6050a721699e74495dac4ed3ffcc8c1b" + }, + "tests/s2/test_mana_reserve_balance.gd": { + "bytes": 3802, + "sha256": "07fe5f10e665cac3c8aa1b12e0c71878ffccc6d4b409250b317135345e3c8a05" + }, + "tests/s2/test_mana_reserve_balance.gd.uid": { + "bytes": 20, + "sha256": "f13ac2a1a1e3646fadbf0d5507d9bec74809c29ffa9aaa47bfa5d81369575701" + }, + "tests/s2/test_mana_reserve_cycle.gd": { + "bytes": 3897, + "sha256": "048d79e067cc85eef1c5c5f3e412198e652a2acc08e6d910e0761c7148a34cb6" + }, + "tests/s2/test_mana_reserve_cycle.gd.uid": { + "bytes": 20, + "sha256": "2946d84694634500b2578b2bbef264c0d0ec01629e4d491d4912c5cf59e1a069" + }, + "tests/s2/test_mana_reserve_new_pid.gd": { + "bytes": 4665, + "sha256": "9f42e4f7f5aac403ee4a6091e54ebf3995e25d11a450000e5a8ce870094f7a6b" + }, + "tests/s2/test_mana_reserve_new_pid.gd.uid": { + "bytes": 20, + "sha256": "d87ba2b9f191ec6cd2011bcfde91d561c3b6c1f7f06602a2668fdc46d8d243d0" + }, + "tests/s2/test_new_pid_pairs.gd": { + "bytes": 2921, + "sha256": "9742f9ac253067e6ae69a53faed054d71925f316d038ff7c5e480c3a9be91b04" + }, + "tests/s2/test_new_pid_pairs.gd.uid": { + "bytes": 20, + "sha256": "7c50b14981a479045dd507d8776cb7cead2af696ea3e7040a5d9301a7d66a009" + }, + "tests/s2/test_original_facility_parameters.gd": { + "bytes": 4811, + "sha256": "3d5cc5f13f986f8cea9500a7f8d48d8f5803b8d0bee5eb0e7c44b3218a2e3d7b" + }, + "tests/s2/test_original_facility_parameters.gd.uid": { + "bytes": 20, + "sha256": "767f5577d0c684e2edf174264baf89ce20117e22ed3f94275bede3a35b6ff6a9" + }, + "tests/s2/test_runtime_mana_reserve.gd": { + "bytes": 7046, + "sha256": "323750a533f2bbdf95b96b1615996cd3c4155bdadc6dcfb0936eaaa19a04809b" + }, + "tests/s2/test_runtime_mana_reserve.gd.uid": { + "bytes": 20, + "sha256": "7b8344045fbf38ba739ebcca64893d8e6de4a5a81e27bd7a30eb34091d5a2ab2" + }, + "tests/s2/test_runtime_operations_cycle.gd": { + "bytes": 14104, + "sha256": "9ec6fb682e258460b3e91870fe4690f780e1053b7fa2dcf753d31bbc8107ce35" + }, + "tests/s2/test_runtime_operations_cycle.gd.uid": { + "bytes": 20, + "sha256": "76b497460484dca1babe2b911dc75e8ffbde8dabea5ac63693d07678de51ff59" + }, + "tests/s2/test_service_start_slots.gd": { + "bytes": 2778, + "sha256": "286786b9a7c2c86b8fc7ce808abd84dae05f2eccf7e2b3faa3780746ce4e2133" + }, + "tests/s2/test_service_start_slots.gd.uid": { + "bytes": 20, + "sha256": "cb26127ca17e5dad63db2f3e64cb64a74e5bb4e003a47cc6425cf68875be9881" + }, + "tests/s3/test_guest_observation_restore_order.gd": { + "bytes": 6307, + "sha256": "7abf5692a07edf8270fa9bf4d9ee89a3835741c208c4c670dc605158532284f2" + }, + "tests/s3/test_guest_observation_restore_order.gd.uid": { + "bytes": 19, + "sha256": "eb3243a324c9b563d7de81ccae96b14dee46a41e63bb578a408d709ea18d8371" + }, + "tests/s3/test_guest_service.gd": { + "bytes": 40444, + "sha256": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + "tests/s3/test_guest_service.gd.uid": { + "bytes": 20, + "sha256": "957b6e3829ac24c9e937642ae42d78dc76d280e029c00e900dfdf46864935301" + }, + "tests/s3/test_runtime_actor_cycle.gd": { + "bytes": 11320, + "sha256": "955cca90ee1be985e37ef166eaedb5c49f7001993afa38011fe3bf20ddb4a9b3" + }, + "tests/s3/test_runtime_actor_cycle.gd.uid": { + "bytes": 19, + "sha256": "bb64dfa2e2d790afe31d48b00eda2e7f3f98ed5ccca5b7de3d497851a70a5155" + }, + "tests/s3/test_runtime_actor_hardening.gd": { + "bytes": 19229, + "sha256": "0deb2df7be31d90a7fe70b98fe420eb748e19ab19c1cc37140f74cf0acd3fa95" + }, + "tests/s3/test_runtime_actor_hardening.gd.uid": { + "bytes": 20, + "sha256": "69a68a20dc23ad619233b9c9a8e361cc38cbebe558e2eb5ebffb4b04a43adb16" + }, + "tests/s3/test_runtime_path_traffic.gd": { + "bytes": 28077, + "sha256": "92cdada10177363ac5ebae6435d0b4c6f0c7d96e6ccc2d0731487bf4f2cdceeb" + }, + "tests/s3/test_runtime_path_traffic.gd.uid": { + "bytes": 20, + "sha256": "a04adc621877e25279334e15c7f0adffddcafaa89b9bf5f6b5e4ed8f3dfc72fc" + }, + "tests/s3/test_runtime_staff_assignment.gd": { + "bytes": 19699, + "sha256": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + "tests/s3/test_runtime_staff_assignment.gd.uid": { + "bytes": 20, + "sha256": "15798981b417c1a93d69b8cb3ef2b4c32d2b1856d69d5603abf0bbe4b01bb8e1" + }, + "tests/s3/test_staff_payroll_operations.gd": { + "bytes": 16639, + "sha256": "05c817b7e891ac1649072ad33102561e26280b9bdd34f6f3831c7da055044f8c" + }, + "tests/s3/test_staff_payroll_operations.gd.uid": { + "bytes": 20, + "sha256": "f37cb11e7e2e140852296265fee8660e25de38512b4ef4364f997a660dad26d5" + }, + "tests/s3/test_staff_service.gd": { + "bytes": 47146, + "sha256": "82e9a5de3247251ac29b52aa524fffeb4e63a62a9ab587d62004c268a0180481" + }, + "tests/s3/test_staff_service.gd.uid": { + "bytes": 20, + "sha256": "9f11cd43495a73be6cad902b6bf2c98dd34f59b2a7c47193e80cdf6f3abc1ff3" + }, + "tests/s4/test_original_relationship_model.gd": { + "bytes": 8408, + "sha256": "c74b243dbbb54dba9bbc165e29508cca910f0beb63e32d25ebbb8ea606dccce9" + }, + "tests/s4/test_original_relationship_model.gd.uid": { + "bytes": 20, + "sha256": "d7859fa9a503001cea97861d7893017531748c7880d70483339528a9f72e2c4d" + }, + "tests/s4/test_original_relationship_runtime.gd": { + "bytes": 195513, + "sha256": "c56bdb99dd43a4e7ceb3ca2861e8db39972c5c4e805126a77e2f7da32ca5bdc9" + }, + "tests/s4/test_original_relationship_runtime.gd.uid": { + "bytes": 20, + "sha256": "67a5aad38d18bb95da0080579e93984d2172d1522de139a07640ceeff45ec52c" + }, + "tests/s4/test_placement_risk_preview_service.gd": { + "bytes": 23839, + "sha256": "165eddf9a5c51d8d9eeb85ea89e21b1ab6067b7ee057ee0fe5b189e97a71c1ad" + }, + "tests/s4/test_placement_risk_preview_service.gd.uid": { + "bytes": 20, + "sha256": "71a98084c28c551fade45679d26ca630bfdf5fd654cb9a51841dc8c94500dff6" + }, + "tests/s4/test_relationship_event_service.gd": { + "bytes": 32069, + "sha256": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + "tests/s4/test_relationship_event_service.gd.uid": { + "bytes": 19, + "sha256": "84accc609266af2e47e6c9815fd698022a569290fd36565b4f02b2bb80415957" + }, + "tests/s4/test_runtime_relationship_events.gd": { + "bytes": 33566, + "sha256": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + "tests/s4/test_runtime_relationship_events.gd.uid": { + "bytes": 20, + "sha256": "c2b710659ad613bbffb82edf8e2acafb84c5f45dc29b795ec62e7b7d32adced9" + }, + "tests/s5/test_authority_service.gd": { + "bytes": 19665, + "sha256": "983ac275dc4f40f7c8058831b7239f1f4b4e2b3f12da0bbb6ea5e8ad69afe2c5" + }, + "tests/s5/test_authority_service.gd.uid": { + "bytes": 20, + "sha256": "a5acf875917519474ccf333f7507fbd5082a64f7349501e34fdbd11585f71844" + }, + "tests/s5/test_defense_service.gd": { + "bytes": 75277, + "sha256": "6e97ace03c46091775afb5a772adc32a7add8146f36c3492e99f4ae30f6ea62b" + }, + "tests/s5/test_defense_service.gd.uid": { + "bytes": 20, + "sha256": "74cdf1e1f1332968ca0e7353593bd432c0ccf89ed05feaa158fb7025cf85868d" + }, + "tests/s5/test_runtime_authority_cycle.gd": { + "bytes": 18979, + "sha256": "33952b6253c77410c7997ddbf37e039f79bcc0ae283da76c3580ec166f928273" + }, + "tests/s5/test_runtime_authority_cycle.gd.uid": { + "bytes": 20, + "sha256": "0fbc9c9e5af8e8053455910a93a0998517cf14a50c527188e1cc394e6b367d50" + }, + "tests/s5/test_runtime_defense_autonomy.gd": { + "bytes": 28099, + "sha256": "edd762fb8698c14d2fc00175257da8708571b523213f16e6267ea9f0c8516c2a" + }, + "tests/s5/test_runtime_defense_autonomy.gd.uid": { + "bytes": 19, + "sha256": "42699094e7eed0f52e1e9c0f10c704c156b1ce225a07216696f6f8a30d6e6f8e" + }, + "tests/s5/test_runtime_defense_cycle.gd": { + "bytes": 44418, + "sha256": "a909e2af73aae43590cdd91d07ed2548f4fd2f675d26fa63aa74f6a5cda34357" + }, + "tests/s5/test_runtime_defense_cycle.gd.uid": { + "bytes": 20, + "sha256": "92cca037cee29755b83a9ef5bc7fa0eef0023b4707a780fe74b84fb196d0d45a" + }, + "tests/s5/test_runtime_event_defense.gd": { + "bytes": 27836, + "sha256": "09bd125d85714ed69f7b35b900507136a099375a10ebb1dae0ab55886387b046" + }, + "tests/s5/test_runtime_event_defense.gd.uid": { + "bytes": 20, + "sha256": "4e9d46f36dcc05047c9ea55926cb6f4a745dc876ca7e2fcaf0d230c4ffd993f2" + }, + "tests/s6/test_performance_budget.gd": { + "bytes": 3968, + "sha256": "1ae5490637d73b519bf9ed0e00bda0e034d5ea0e589493bcf8886e4d1ff63689" + }, + "tests/s6/test_performance_budget.gd.uid": { + "bytes": 20, + "sha256": "b72aece72fe55c65f763c36e146d8043c818c6e1d6afca72c14defcd1f0c4f01" + }, + "tests/s6/test_runtime_save_lifecycle.gd": { + "bytes": 30502, + "sha256": "de94d588d6ce204aa8d0221c2989b8dd900cf4e36ca51f83b464518a382a887f" + }, + "tests/s6/test_runtime_save_lifecycle.gd.uid": { + "bytes": 20, + "sha256": "304d45fa600b3381dabb3deec6143d5557e9c33c75782f4e672c3258e292c35a" + }, + "tests/s6/test_runtime_snapshot_serialization.gd": { + "bytes": 6753, + "sha256": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + "tests/s6/test_runtime_snapshot_serialization.gd.uid": { + "bytes": 20, + "sha256": "462d7cd44e93ba1aecd2ef469b155e8ccdf305880901fcf52b3bfd5faf40a35b" + }, + "tests/s6/test_save_operations.gd": { + "bytes": 42183, + "sha256": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + "tests/s6/test_save_operations.gd.uid": { + "bytes": 20, + "sha256": "528bce673007a2d1ee87fc5d9ead3277862491403d1bb676ba9bd98eb8d933a7" + }, + "tests/s6/test_save_preflight.gd": { + "bytes": 13404, + "sha256": "49e24247649839b6f50d19b2284368efb7f8f8b189c5010491ad428e97c1c8b9" + }, + "tests/s6/test_save_preflight.gd.uid": { + "bytes": 20, + "sha256": "f3acef6b5fc18b83e13bd123de1dd830e0a3b132d27dae4e28c79c2902040665" + }, + "tests/s6/test_save_recovery_preservation.gd": { + "bytes": 9487, + "sha256": "0fc0f75e06d4371f049dc4692e9ab0d871016b633e5ac4693661a33a7390641e" + }, + "tests/s6/test_save_recovery_preservation.gd.uid": { + "bytes": 20, + "sha256": "d000277bcbded1cabe95509489284b8788da0813fead1076e0e970ce55eeabc5" + }, + "tests/special/peeping_room_fixture.gd": { + "bytes": 2861, + "sha256": "0243b1d35e1fdd8aa085894a0ce1e5cd1a189e5c98fcb859f81b70ae75b98bed" + }, + "tests/special/peeping_room_fixture.gd.uid": { + "bytes": 20, + "sha256": "a74e5ef6d8959826919a648e8b5d82e96d1c73ff22cd6c1f216be8b5c4060a8a" + }, + "tests/special/test_p13_uid_policy.py": { + "bytes": 3871, + "sha256": "d977b63ffa0672994545084c530628a930a905b9aff40a815023637047f61886" + }, + "tests/special/test_peeping_room_evidence.gd": { + "bytes": 3287, + "sha256": "390e0032d14de9a8875ced163a922341ce655744200d78b4ffa776d42c4f8c2a" + }, + "tests/special/test_peeping_room_evidence.gd.uid": { + "bytes": 20, + "sha256": "26bbc1435bcda963b5866327b887096f798b1629c7984768c85bfb6175648ec5" + }, + "tests/special/test_peeping_room_geometry.gd": { + "bytes": 4872, + "sha256": "103d85f83e1e97a8637892504264275eef23f172eeec56c94e5c022d81bf6945" + }, + "tests/special/test_peeping_room_geometry.gd.uid": { + "bytes": 19, + "sha256": "391b78806bc0bf759f00c778cb25dfaa97d47f6e309c3b302412c38123c5440c" + }, + "tests/special/test_peeping_room_reference.gd": { + "bytes": 3385, + "sha256": "188b00a60f7aefda69dc4973f1de9c14447a0d4bcdd1257a2eabe7c4782e4caf" + }, + "tests/special/test_peeping_room_reference.gd.uid": { + "bytes": 20, + "sha256": "db8bfa98b7943dba15858ccaa6681bc430efd43f40f57de99117dc19c51ac417" + }, + "tests/special/test_peeping_room_runtime.gd": { + "bytes": 7809, + "sha256": "924efd34414c12a325a1b700f799aef0396de9f15441fd88a3608292ff221657" + }, + "tests/special/test_peeping_room_runtime.gd.uid": { + "bytes": 19, + "sha256": "b742bb8e4077f111e0f7b4d9039261a06fe6deaad8ea308ba3b89c7b5a4a9069" + }, + "tests/special/test_peeping_room_save.gd": { + "bytes": 4452, + "sha256": "ba0e7644277477c1821135cae6d6fd533651799c6f9bd8c43ccf45e63b96c63c" + }, + "tests/special/test_peeping_room_save.gd.uid": { + "bytes": 19, + "sha256": "005561b37df9051e618d4714b2a91a82f4a48ec63c841cdf27c251bcd2865505" + }, + "tests/staff/test_dormitory_dimension_migration.gd": { + "bytes": 6459, + "sha256": "90737c91005975601f400fe88c9a474d10713639b73d8e1354f99bc52e812a49" + }, + "tests/staff/test_dormitory_dimension_migration.gd.uid": { + "bytes": 20, + "sha256": "d4714e6a5bd19d618dd019cf5d388775b2b6b116a0e401c332ce2bfe5a0bf12e" + }, + "tests/staff/test_dormitory_shift_cycle.gd": { + "bytes": 3857, + "sha256": "ada3c0177f00648137d02450fce5f33da0a644dae9ec861ac51648770dafebda" + }, + "tests/staff/test_dormitory_shift_cycle.gd.uid": { + "bytes": 19, + "sha256": "d7db4db3cce31dea2ddf0d80379270011908a37f30b78f5168c13b379cc6b9b3" + }, + "tests/staff/test_rescue_elevator.gd": { + "bytes": 6910, + "sha256": "251199b0dbd6eee66bd123c42fb604177dc38e9f6efa584be6ce53e8fe28d139" + }, + "tests/staff/test_rescue_elevator.gd.uid": { + "bytes": 20, + "sha256": "c26b5d6bc7a9dbea52105f22beaaafd224449827a36a7685503726ede9dfb1eb" + }, + "tests/staff/test_shift_rush.gd": { + "bytes": 3668, + "sha256": "af3d47d848c1220741992612e57736df4af05969d424b79829d9977c774e8149" + }, + "tests/staff/test_shift_rush.gd.uid": { + "bytes": 20, + "sha256": "d925bac6ee92c077476a605602404ad91cc50a151ed5e834242021579c657472" + }, + "tests/staff/test_staff_commute.gd": { + "bytes": 20046, + "sha256": "0837c92a49f8f83c03ca820eaeb23f7b1dfbc1072f8eeffcb557bb6b57b20c49" + }, + "tests/staff/test_staff_commute.gd.uid": { + "bytes": 20, + "sha256": "762cfd6f56de0d63ea0fbcdfa940071cf529ae8626edfec11f94ef123ffa01e1" + }, + "tests/staff/test_staff_dormitory.gd": { + "bytes": 4123, + "sha256": "1b908ed1bb94f7bff325faa98f8cfc658a46fa027bd3ebbfe60450aae35ade7f" + }, + "tests/staff/test_staff_dormitory.gd.uid": { + "bytes": 20, + "sha256": "ec05e96d8e990bcb2b113c0016bb864578ebcad245226bd65dc1d6b2ef26918c" + }, + "tests/staff/test_staff_rescue.gd": { + "bytes": 11393, + "sha256": "8d8c02444c35b2c41c6db42ac0195dd614835541235cd92641ca9b220f59c44c" + }, + "tests/staff/test_staff_rescue.gd.uid": { + "bytes": 20, + "sha256": "4cc93ef832c112e151df49180f3272e89b84ad121e3c02a91da71018583cf03b" + }, + "tests/staff/test_staff_rest.gd": { + "bytes": 3467, + "sha256": "fe9b9d2a8a9051850980a393b8c06b8be41de8a82d5efc998c69df3a06cf54ec" + }, + "tests/staff/test_staff_rest.gd.uid": { + "bytes": 20, + "sha256": "18a8cc751651c8d28016bd476857830de26a17c810fffac24d6885bc0930fdba" + }, + "tests/staff/test_task_work_clock.gd": { + "bytes": 2024, + "sha256": "b131fbe922e744c2075338638e3a01811618e93ae786df3ee435318048d24f9b" + }, + "tests/staff/test_task_work_clock.gd.uid": { + "bytes": 20, + "sha256": "0d976cde371fdc353bbaac33a2849737c506897c586ed1080d5ae2eb939d631f" + }, + "tests/supply/test_mimi_purchase_quote.gd": { + "bytes": 34683, + "sha256": "01f7760cf0fed33fda6358bd407fc1441a198dce9f2713e49bfcc097ee8c8ada" + }, + "tests/supply/test_mimi_purchase_quote.gd.uid": { + "bytes": 20, + "sha256": "2da07e7c142df4e2bf8321d24c6cd0be0221192bc9a3cadf4a36656045af1bb3" + }, + "tests/supply/test_normal_auto_purchase_chain.gd": { + "bytes": 15542, + "sha256": "6916d644620c49a09ab110d98fe07477bb5bb9f96da3826a0be962610cc55256" + }, + "tests/supply/test_normal_auto_purchase_chain.gd.uid": { + "bytes": 20, + "sha256": "bda094662ec9a99c086adb8badcecc68f4428e3ec0e7bbe685f9fae9f7eaccae" + }, + "tests/supply/test_normal_supply_chain.gd": { + "bytes": 12352, + "sha256": "eedbb301e68285bbd6f701cf7eec15537f116944115807e0d9133a4c2970bb1d" + }, + "tests/supply/test_normal_supply_chain.gd.uid": { + "bytes": 20, + "sha256": "d1530167a99e980ea74d7137995507971863bf913fd0b5ade70798321cc6c2b0" + }, + "tests/supply/test_supply_auto_purchase.gd": { + "bytes": 32386, + "sha256": "2551b145d583e1b63b0731290ef097603aae302347ea306770f53f750237ddfe" + }, + "tests/supply/test_supply_auto_purchase.gd.uid": { + "bytes": 20, + "sha256": "49582fe0b7c89de43215ea7dfe73b7c030e4628196d45a0b73e7b4dfb1c96a2a" + }, + "tests/supply/test_supply_auto_purchase_boundaries.gd": { + "bytes": 21259, + "sha256": "cc1a9e8fda5fc25f9fcfb391463a05957fd2ec649ae50acf2b219c3c9efaa970" + }, + "tests/supply/test_supply_auto_purchase_boundaries.gd.uid": { + "bytes": 19, + "sha256": "aa95f49a911d97ce014351358f306607ea31439f155d9a61ba9b2bf7d596447f" + }, + "tests/supply/test_supply_auto_purchase_destruction.gd": { + "bytes": 19855, + "sha256": "229c24e67bc6e59146f91e9ae111794ad39a4d9245c84aa8731b65c43c33a6f5" + }, + "tests/supply/test_supply_auto_purchase_destruction.gd.uid": { + "bytes": 20, + "sha256": "6f540665e982fba973e7372f9c37a8d61aa3fd649f2691da8b0221d60ffd927a" + }, + "tests/supply/test_supply_logistics_bridge.gd": { + "bytes": 27437, + "sha256": "c9e4d8a82b57d1cf23a8a24c24dbcf3fdbc7e516d654ab3b59850d20ef7df678" + }, + "tests/supply/test_supply_logistics_bridge.gd.uid": { + "bytes": 20, + "sha256": "015240a8e659c741f564316c0431e5d00658ef6fee604182c9cdb9aac150615f" + }, + "tests/supply/test_supply_management_service.gd": { + "bytes": 19542, + "sha256": "9b60643a827daf314f807cdc7105f227414a906e32481175451ceddd0b00eb95" + }, + "tests/supply/test_supply_management_service.gd.uid": { + "bytes": 20, + "sha256": "a1e92c9f8e6a7163dd911655340df4244ffcb8ccb94da1377fe00828e8c74526" + }, + "tests/supply/test_supply_save_migration.gd": { + "bytes": 6390, + "sha256": "a281937594be9f177103e83d0cba48d54f2d69c7303c937d0303b5f8c787f0ae" + }, + "tests/supply/test_supply_save_migration.gd.uid": { + "bytes": 19, + "sha256": "6254a4b8d366705088232cd401dde3a800c6e56b4413128c16583f42612e63a4" + }, + "tests/tmp_operations_ui_diag.gd.uid": { + "bytes": 20, + "sha256": "ce992ccde96ec0a2413e7f9cb398caa33d54cfe1357c60d96792dc0952a25cd8" + }, + "tests/transport/test_elevator_service.gd": { + "bytes": 18936, + "sha256": "e70de48a8e6f7928690d0495110451c26d9dec180c2dd7033c793155f099c2f6" + }, + "tests/transport/test_elevator_service.gd.uid": { + "bytes": 19, + "sha256": "925d6db7b36cc86e972d5a1dad494f974b406bb4d63d48621a8075c1cca88dd5" + }, + "tests/transport/test_route_wait_choice.gd": { + "bytes": 21252, + "sha256": "c4db1db2e60f1a24fbbcb6c2c3706a7ee1534c7191f612e1d8df40d0a39a97bc" + }, + "tests/transport/test_route_wait_choice.gd.uid": { + "bytes": 20, + "sha256": "2c5ab55c8f4640e0b48c6ca0e25e64127032c9568c5f7fd8f37f2fadb4011684" + }, + "tests/transport/test_runtime_build_preview.gd": { + "bytes": 8937, + "sha256": "c881b60bce7276047884303a6823da9abfaaf8c1e85dbc5f2c0ff13f0d742449" + }, + "tests/transport/test_runtime_build_preview.gd.uid": { + "bytes": 20, + "sha256": "57e136776f75f7ef7b1554f532f7a72e37dd8e70c42c2dacd91117e1d1f5bb96" + }, + "tests/transport/test_runtime_stairs.gd": { + "bytes": 11601, + "sha256": "31c90714be9b47a2935a13a896e41be9413a34fbb7a4f8677b2b7c2defa8b3d5" + }, + "tests/transport/test_runtime_stairs.gd.uid": { + "bytes": 20, + "sha256": "acac5181699895e51b2c1ddc56400d02c593ff135f087cae660c442e3f9b8274" + }, + "tests/transport/test_runtime_transport.gd": { + "bytes": 12138, + "sha256": "78a5563ff2421ae65a0988cf0d26669f54bcc0f44250b00e5334cadf1228da94" + }, + "tests/transport/test_runtime_transport.gd.uid": { + "bytes": 20, + "sha256": "a0ce72d7126ce1483e2c2b0a1a3c8e2a78ad5f6444d58e3c26d48962b82b10a4" + }, + "tests/transport/test_runtime_transport_comparison.gd": { + "bytes": 20053, + "sha256": "ba577397fa8db5a6cf92cfd398dd7a5ece49e6b59856f14772b67b51ddc0bde9" + }, + "tests/transport/test_runtime_transport_comparison.gd.uid": { + "bytes": 20, + "sha256": "534e9fa0d9af9987fbd33dbe9b2cd96a9e66947af56381e5668e1e7347ebf9f1" + }, + "tests/transport/test_runtime_warp.gd": { + "bytes": 11031, + "sha256": "cfbb69e63aca12d9d198393fd853c76be63df95e8d1e777e7a14194dbd181234" + }, + "tests/transport/test_runtime_warp.gd.uid": { + "bytes": 19, + "sha256": "be36cff26daeff957d0a5fa2b6d57a3281d88fefe74f13c87140967c26edc102" + }, + "tests/transport/test_transport_boundaries.gd": { + "bytes": 12381, + "sha256": "1a5a647c45ffab674a8f58b8bc72692c5a30090c9b99a1e6f67194bbe3586b34" + }, + "tests/transport/test_transport_boundaries.gd.uid": { + "bytes": 20, + "sha256": "d2d527ec3c053bfcb5e6102250a69da3b07e6849afb8e7fd313ae2ed8e16b03e" + }, + "tests/transport/test_transport_comparison.gd": { + "bytes": 14603, + "sha256": "7e80e9ef80500278c56f0d1ada5c911f43e3c0a9bc370045fdbebd33c2f02fd5" + }, + "tests/transport/test_transport_comparison.gd.uid": { + "bytes": 20, + "sha256": "55c77e010e78ecb7a5f743181e8f19d3aa2561b2187067c5060d2d3c023db88b" + }, + "tests/transport/test_transport_density_migration.gd": { + "bytes": 10833, + "sha256": "0860fdd20576ad2044d44a99d8533393bf95f4b4c69997cc50f2391299343f54" + }, + "tests/transport/test_transport_density_migration.gd.uid": { + "bytes": 20, + "sha256": "4689911193eef3dc361eeb818fc6551913eacbf75ab47c683972b89753c85e7c" + }, + "tests/transport/test_transport_save.gd": { + "bytes": 9863, + "sha256": "d4b41a71f2ddc43b1beb14ba8548541ce4875b6640815440e0c14a183c8ddfea" + }, + "tests/transport/test_transport_save.gd.uid": { + "bytes": 20, + "sha256": "9737d562787488b6d12e0c7919335518c5763c111a54fd747b92725c9d3aea37" + }, + "tests/ui/capture_main_dashboard.gd": { + "bytes": 2040, + "sha256": "dcaeb97ef2f8a5910d2e8b5eb8aa7f6bf5a5a4d9128e0afab3e14eb16100117c" + }, + "tests/ui/capture_main_dashboard.gd.uid": { + "bytes": 20, + "sha256": "4bd0c992d10d4a32cdcb9d73be8b6cb196275e48a5c2832fc9f1f47e5b2c912b" + }, + "tests/ui/capture_pixel_tower.gd": { + "bytes": 8327, + "sha256": "c06bc1ece7f9e60f42c80fe406f85b9083dc9bce7a7ab7d0fa07d93f79221bc7" + }, + "tests/ui/capture_pixel_tower.gd.uid": { + "bytes": 20, + "sha256": "27e4fd1133379ce6581c479685b63744bcb37ae557e7210c59ffccd4306e88bf" + }, + "tests/ui/fixtures/counted_dashboard.gd": { + "bytes": 162, + "sha256": "102bec9e27bf8d815edeaab359fcc8ceb9ea1be8ff2e764252efc38dfca1976d" + }, + "tests/ui/fixtures/counted_dashboard.gd.uid": { + "bytes": 19, + "sha256": "d0165467fbc1e9e83179a5bd6c74a8b63da49ba2ab1e4198f9cde112a7a41ed6" + }, + "tests/ui/fixtures/opening_restart_flow.gd": { + "bytes": 6413, + "sha256": "dc13245c07beec03504e6370287cbb36e99de37e2a4217fab78ed866eb3f9c71" + }, + "tests/ui/fixtures/opening_restart_flow.gd.uid": { + "bytes": 20, + "sha256": "bd91a00f4a8955c1223c7ddc5f2d36f07db8d53c6b0af882b59a87fedc78b0a4" + }, + "tests/ui/fixtures/selection_cross_process.gd": { + "bytes": 4494, + "sha256": "30667d0f21a061742eca91806d5b4efbec985a1a93b23ef1a19487431531c11f" + }, + "tests/ui/fixtures/selection_cross_process.gd.uid": { + "bytes": 19, + "sha256": "a7c06239b06aa9ac6a377ee7865c7f34e04cd7bf1f7a3560b0d8a259fbb79070" + }, + "tests/ui/test_actor_selection.gd": { + "bytes": 12477, + "sha256": "f37a0f4805adce4b538fccde1404c1a417f20639fddf36947f076d88409ba0a3" + }, + "tests/ui/test_actor_selection.gd.uid": { + "bytes": 20, + "sha256": "2d7b20068b53370dd0d708e5ea05106acc31c9bdd9ebd37cde8d23fd5dc88a90" + }, + "tests/ui/test_anri_recruitment.gd": { + "bytes": 7778, + "sha256": "74cfaf73ed01769c49498e5395fda009b70f2f6667f4f902abf4697f01f87962" + }, + "tests/ui/test_anri_recruitment.gd.uid": { + "bytes": 20, + "sha256": "e89a6a0a3b860c60479b2ef1555f10abf33b9c89ee8afd786dae24ec1f7cfdfb" + }, + "tests/ui/test_approved_free_unique_arrears_ui.gd": { + "bytes": 10118, + "sha256": "ff684e2f227896c1b5df6026f130d45f4289fc6cae40989be51ddc95b2cf135b" + }, + "tests/ui/test_approved_free_unique_arrears_ui.gd.uid": { + "bytes": 20, + "sha256": "921ea8dc6caae77253e3fa9b552e808eae343e34cb6c7dfa6c0ad2ea9259fe7c" + }, + "tests/ui/test_business_management.gd": { + "bytes": 31543, + "sha256": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + "tests/ui/test_business_management.gd.uid": { + "bytes": 20, + "sha256": "658c50b3c522186a1bc4f95277c42f6790cebef90746e29f5857141f8a34535d" + }, + "tests/ui/test_chapel_gameplay.gd": { + "bytes": 6975, + "sha256": "e1996d6bd6caf46bae7becf1de2514e91a6168a686e83563b00803ac71109735" + }, + "tests/ui/test_chapel_gameplay.gd.uid": { + "bytes": 20, + "sha256": "ea9ecc1e52c434b530940638a731799d30802508ac07d3d278c3cba932e66320" + }, + "tests/ui/test_cleaning_gameplay.gd": { + "bytes": 10578, + "sha256": "38593cd17829611dd34561ec46a0d746492a6cffebc35a659d49fe69de4234ac" + }, + "tests/ui/test_cleaning_gameplay.gd.uid": { + "bytes": 20, + "sha256": "88c900d3e73a2d17d5d777ea35110ae09e5be1fc1959b2b171fdea3230bae1d2" + }, + "tests/ui/test_dashboard_coalescing.gd": { + "bytes": 2522, + "sha256": "2f4bd8e9d43911067a7e82864454f6779ae92acc48e0b8d4932e5d963e0430ec" + }, + "tests/ui/test_dashboard_coalescing.gd.uid": { + "bytes": 20, + "sha256": "36d648437a23a8e8d42d0f7cd252fcc457e25e084373c5aef6e24f074293d8b5" + }, + "tests/ui/test_defense_management.gd": { + "bytes": 24758, + "sha256": "e7debf5746e1ad5976b1afb1d2471c1c2317bcc406ed2716a2368bd4e06e0235" + }, + "tests/ui/test_defense_management.gd.uid": { + "bytes": 20, + "sha256": "44e00c3b8d3bc4febcf177e90cc2223709e570ea648e88b7e91b70758b869bf4" + }, + "tests/ui/test_dimension_migration_ui.gd": { + "bytes": 4653, + "sha256": "0f0cec88ea8bf5fccdcd5ade02fab70b7dc71135132048cd10db17ad9d964c0d" + }, + "tests/ui/test_dimension_migration_ui.gd.uid": { + "bytes": 20, + "sha256": "c8990d38cc46826a05fd80f01eb6f3ef6c5a30efb49e549be53b49517c8c0195" + }, + "tests/ui/test_elevator_management.gd": { + "bytes": 5744, + "sha256": "dff2d3f2a1cea84224aee8f70c4ad53d731df173bc7d16d7ec012c0d16c62e11" + }, + "tests/ui/test_elevator_management.gd.uid": { + "bytes": 20, + "sha256": "613de4319583488f743fc370f08a3cec3adadc52fd72c07be66328c24fd11f87" + }, + "tests/ui/test_event_log_ui.gd": { + "bytes": 7668, + "sha256": "9b1d7cb112790bb58969338ab1dc0bbe2a1c26b4307c4bfcd37491cf950c557b" + }, + "tests/ui/test_event_log_ui.gd.uid": { + "bytes": 20, + "sha256": "d1ff881138199728e339cdaff28879cfd241125dab91343b1da3c5a8d4258a00" + }, + "tests/ui/test_first_operating_day.gd": { + "bytes": 14620, + "sha256": "fcba5cee4ea7b16340871d98634cef56d80ca2197b1b069d47ae6cf287693226" + }, + "tests/ui/test_first_operating_day.gd.uid": { + "bytes": 20, + "sha256": "25a1c5fa8f5a97774857786e27301d8f47cfa13f0e183a67e771bf2a331904a5" + }, + "tests/ui/test_guest_decision_log.gd": { + "bytes": 8533, + "sha256": "8532defab87c075ad3196b44af030cdab785abed365e25d5a56d2d42f115cf71" + }, + "tests/ui/test_guest_decision_log.gd.uid": { + "bytes": 20, + "sha256": "f4bd8e3ed43884d01f14a81e94f96368c09a7f5561ecfd5102f8715328de41a3" + }, + "tests/ui/test_guest_observation.gd": { + "bytes": 3824, + "sha256": "8f5af3d6ef367512b34d0cf35fd8c1d2848d020419dddfa234120206dbe4f6e4" + }, + "tests/ui/test_guest_observation.gd.uid": { + "bytes": 19, + "sha256": "5d87f231ad2af61fff902fb745df9b50b7cfcb05b1e5ec53c841bc40d0a5be88" + }, + "tests/ui/test_layer_presentation.gd": { + "bytes": 6415, + "sha256": "2080a64df66c66a28c6d73fc5678a2e8d221e230e6afb38f2550d12bfd6deea7" + }, + "tests/ui/test_layer_presentation.gd.uid": { + "bytes": 19, + "sha256": "bea9e9b5c8a41a39c6024861b8d85aca66f0dd15368d96e96400ea06fd3783d8" + }, + "tests/ui/test_layer_skin.gd": { + "bytes": 6005, + "sha256": "aab6f0561e222f88681169a82b47631320495df4c359bcf79d2fb228c60ad83b" + }, + "tests/ui/test_layer_skin.gd.uid": { + "bytes": 19, + "sha256": "bdd4abced670f5335ebd803c9857a94060c06f19b4f09b7f031a4d9403304412" + }, + "tests/ui/test_main_audio_feedback.gd": { + "bytes": 4590, + "sha256": "9bc9e13ef3498941b6e8566c0b7666c42e294b63e18ec0da2cfa1cda3e4617bd" + }, + "tests/ui/test_main_audio_feedback.gd.uid": { + "bytes": 20, + "sha256": "f4bd2dccbc67139eb7c1de1ce482bdfedf417350510a4e9cc424c918735c9552" + }, + "tests/ui/test_main_dashboard.gd": { + "bytes": 36106, + "sha256": "305227c1077a92ef3ee522b561a68b0685767740b46b51ff789c800931647ef1" + }, + "tests/ui/test_main_dashboard.gd.uid": { + "bytes": 20, + "sha256": "b0ff678ba3b377493aefe655ee10fef0d308bb0619b6e89394da6350d5c5e554" + }, + "tests/ui/test_opening_assignment.gd": { + "bytes": 3493, + "sha256": "143cbd7ca4589540b5f04693dc7c43df8808b87934844d3dd21d33e34f813fa2" + }, + "tests/ui/test_opening_assignment.gd.uid": { + "bytes": 19, + "sha256": "1a2c47cf375d40fff661802f44ecebb5c73dcc9bbb6e7970249ff36802a9b538" + }, + "tests/ui/test_original_build_pointer.gd": { + "bytes": 19891, + "sha256": "a04a79c5e766659d10c4564d1f11c6554a27cb8af71431295e10bc4967012913" + }, + "tests/ui/test_original_build_pointer.gd.uid": { + "bytes": 20, + "sha256": "5cb6ed3b533a7035b8e87007ee21cb093ffa07e879a25f0d4abdd586c09e0bc8" + }, + "tests/ui/test_original_facility_controls.gd": { + "bytes": 4966, + "sha256": "294b39808d3454f96555b981c8f822f17e1248afa803f7c0da74c35799ae55a1" + }, + "tests/ui/test_original_facility_controls.gd.uid": { + "bytes": 20, + "sha256": "5a2544c24d9f6ac0cf1a1d0e74e93c9c3f0dc305a84add18981f63d7214b11d3" + }, + "tests/ui/test_p08_normal_placement_ops.gd": { + "bytes": 2467, + "sha256": "a5c5abdc1348e7dadafd70f73072ac98afcc4c918211c3389e88da5e903af803" + }, + "tests/ui/test_p08_normal_placement_ops.gd.uid": { + "bytes": 20, + "sha256": "7d168ac50ca82ae1979da31c467f9a5020ca5ec7616b5bf99294413d85b3b299" + }, + "tests/ui/test_p23_life_observation.gd": { + "bytes": 15915, + "sha256": "750254af7d4b8b00508e25d1ef744837d3a7d14ddebe12398e8014bf5e8c68e8" + }, + "tests/ui/test_p23_life_observation.gd.uid": { + "bytes": 19, + "sha256": "721207a56299cd53855a5ff164408507bfaaa9c83f925ead32961c5fc847fff7" + }, + "tests/ui/test_paired_bgm.gd": { + "bytes": 19476, + "sha256": "fcafe858caef15f99faa9ad8aa7971828e9053adc1357077f0a26f0f17d9bbc0" + }, + "tests/ui/test_paired_bgm.gd.uid": { + "bytes": 17, + "sha256": "c3d72aa220d14b877fc437fb75608a2094a689dac14266c6951d0fa04cc3e947" + }, + "tests/ui/test_pixel_tower.gd": { + "bytes": 21265, + "sha256": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + "tests/ui/test_pixel_tower.gd.uid": { + "bytes": 20, + "sha256": "6b2fd502b27891dcc9ab00de29b7767e949cbcf55e4938eba2d6aec9f0f92890" + }, + "tests/ui/test_rank_pointer.gd": { + "bytes": 17805, + "sha256": "2c51510f80fb57068c6c06aa56566936685e679720b0fd853d8f814566e730f2" + }, + "tests/ui/test_rank_pointer.gd.uid": { + "bytes": 20, + "sha256": "741517fad1fc47d0d69e782e798f1302a00b0274368d32d1f9073d80efbead57" + }, + "tests/ui/test_room_presentation.gd": { + "bytes": 10525, + "sha256": "eeea7cfbdd534d5e182dc00ec09cb1a8d3688aba85ccf16beb98fe79c70686a9" + }, + "tests/ui/test_room_presentation.gd.uid": { + "bytes": 19, + "sha256": "2a5f7fc3c658c1cecbe1ce1a817aefd9ef43430515f891da0025e3ab63ba3e3f" + }, + "tests/ui/test_selection_autosave.gd": { + "bytes": 3098, + "sha256": "1d7d267ef171041f77241c4c2f1a1bb55a46253f803d5c496507e934bc8fa815" + }, + "tests/ui/test_selection_autosave.gd.uid": { + "bytes": 20, + "sha256": "a8ab0caf258115b351f5ec0c61161f84d2997d943fdd9cbc1d017f348562f7a8" + }, + "tests/ui/test_selection_departure.gd": { + "bytes": 7878, + "sha256": "3137f36f547514f25ce6ac775fa7a5141d12f83ca4b95da0be45fecfafe9d9b4" + }, + "tests/ui/test_selection_departure.gd.uid": { + "bytes": 20, + "sha256": "7c215d6dfa0b89a604c68d65820e34878b2a1444964c7060bcfc156ce8a52bff" + }, + "tests/ui/test_selection_lifecycle.gd": { + "bytes": 9355, + "sha256": "ed68b120f422e1b37b8cf0654b6d6605458fe01c7e5d84decc3ba6f4e9366c47" + }, + "tests/ui/test_selection_lifecycle.gd.uid": { + "bytes": 20, + "sha256": "f786d9622c55c2e52edd422ce243d84307c305871d071eee1eb65b96e963f76b" + }, + "tests/ui/test_staff_management.gd": { + "bytes": 35774, + "sha256": "7e37dc47583325a564ef48de31596adeeccfb7151ac5fce952efc6873c8ab704" + }, + "tests/ui/test_staff_management.gd.uid": { + "bytes": 20, + "sha256": "ee54ed9638407a879dcc021ad01fddb032b2dfcba2312ba53309926a50bb1a87" + }, + "tests/ui/test_staff_rescue.gd": { + "bytes": 6965, + "sha256": "928179383bda38adf9211065b644a37bed3f8128be42b7e7a0fba9a505a40b9e" + }, + "tests/ui/test_staff_rescue.gd.uid": { + "bytes": 20, + "sha256": "b46c4e697e15c94ff75affde9bbafc6287e68a33b03779f5ee8504889aa56a4d" + }, + "tests/ui/test_staff_rest.gd": { + "bytes": 3156, + "sha256": "712f2c30ec89da20835e54f2e83b22a358cc6fc05555147ce635ec2592ef75b5" + }, + "tests/ui/test_staff_rest.gd.uid": { + "bytes": 20, + "sha256": "9db2b8264e53dcf5f2f06e6dc2903855d13df9da5e62671bdebb0978029c43db" + }, + "tests/ui/test_stair_transport_details.gd": { + "bytes": 10516, + "sha256": "3abd3655eecbefe1b7cd49e1b16c42f8161c86f20380c298ec6367b42d31555f" + }, + "tests/ui/test_stair_transport_details.gd.uid": { + "bytes": 20, + "sha256": "779c58b724b750f38d91592b7369a9d15fa21ccc58853a08f4f489bfd1d4a246" + }, + "tests/ui/test_supply_auto_purchase_ui.gd": { + "bytes": 9384, + "sha256": "ad3788ae4b3f17918be67cf06c4162635da1ecba1ee0a0465d10acc019f3e3ae" + }, + "tests/ui/test_supply_auto_purchase_ui.gd.uid": { + "bytes": 20, + "sha256": "74bb4aa798695f40f849b250c4995fca394ab6e600df5682a8cf45759265528a" + }, + "tests/ui/test_supply_management.gd": { + "bytes": 13417, + "sha256": "ee96be8b31eb71e84ab813e427a28bcfb76de4a057bd964584a6a497382ea716" + }, + "tests/ui/test_supply_management.gd.uid": { + "bytes": 19, + "sha256": "9f29d5d9bf34830b98571cc34a1765346f44702664e28f9c5d161727d554d947" + }, + "tests/ui/test_ui_audio_feedback.gd": { + "bytes": 21730, + "sha256": "62c5c8080b1a05d243977a293a23ab216ef71de38fe46ca6b31c71e0af4555fe" + }, + "tests/ui/test_ui_audio_feedback.gd.uid": { + "bytes": 20, + "sha256": "344ee24a4ffb03394c308c3bbe185cf88fd72554f826c1b64927d09eabd67a78" + }, + "tests/ui/test_ui_presentation_audio_contract.gd": { + "bytes": 10823, + "sha256": "9769b89b61630ddf2ef13a927f329ddaa30e04da77987e7a868d0490244d6a25" + }, + "tests/ui/test_ui_presentation_audio_contract.gd.uid": { + "bytes": 19, + "sha256": "efb17e69ab945f62a254cbd3d3cb15856ee885e36347bd8921018bcf9e47f24e" + }, + "tests/ui/test_upkeep_closed_ui.gd": { + "bytes": 7327, + "sha256": "915db12e539d98bfcb2cfc3712693ca7fca3ff459aaacba419faff04ac712868" + }, + "tests/ui/test_upkeep_closed_ui.gd.uid": { + "bytes": 20, + "sha256": "0bb78af842663520dd25a54bde65c6c7e147e0bcc8d64a5797ecebfbbfdae3c0" + }, + "tests/ui/test_upkeep_inspector.gd": { + "bytes": 3134, + "sha256": "99895a24bcddc4c2e01d8960a2fd7eba05be237a64700d78879c68c1a0660f34" + }, + "tests/ui/test_upkeep_inspector.gd.uid": { + "bytes": 20, + "sha256": "4266627f5e713cecec9c5dc04fe291bc67a2a583f6b286f6774db8180c608917" + }, + "tests/ui/test_world_tree_rank.gd": { + "bytes": 7052, + "sha256": "8e108e3ae63d1ee3971c7b236f50a673c407835f094de0d38a736c38261767aa" + }, + "tests/ui/test_world_tree_rank.gd.uid": { + "bytes": 20, + "sha256": "9fae0add894e14555e59505705de504f1fbc396f0dbf86bbe0c1aa17fd32cec5" + }, + "tests/world/test_elevator_topology.gd": { + "bytes": 14356, + "sha256": "4710a6bba103d82a4d2febea1a2c30d029c0f1ccd2a3d9a6c1712b4fb372033b" + }, + "tests/world/test_elevator_topology.gd.uid": { + "bytes": 20, + "sha256": "5f5a10f9415fd6b27c9961a9edda188ae3d0b8a945a17f656df251035dd2676c" + }, + "tests/world/test_legacy_stairs.gd": { + "bytes": 13041, + "sha256": "258d759537aec8b7b90cab107985c9c6a16f10e85ae7ae92a9c54cc94417d48e" + }, + "tests/world/test_legacy_stairs.gd.uid": { + "bytes": 20, + "sha256": "4aa1ec1cc07e68bbe040260e9cd02e7f8e72e3043ec6901e27fdb952ebe3eea6" + }, + "tests/world/test_path_transit_density.gd": { + "bytes": 9064, + "sha256": "8de5fc8bdf8631ff41fcd4862cea40daa3316040f381f182dc6fe09dba9f3cb9" + }, + "tests/world/test_path_transit_density.gd.uid": { + "bytes": 20, + "sha256": "c83e471ff6bc0aab61bb38ae4cf651cc83a543db546449d646685f9f963a29ff" + }, + "tests/world/test_path_vertical_policy.gd": { + "bytes": 6921, + "sha256": "140cdf552309f89cd93bf1a4d38827a671a66461203f0858f1c2651a8e6e8473" + }, + "tests/world/test_path_vertical_policy.gd.uid": { + "bytes": 20, + "sha256": "c50c8e78bb3c8eb96b58f81643d12151f08c52fecdd1e4360c07ecca429ceaf7" + }, + "tests/world/test_stair_infrastructure.gd": { + "bytes": 16167, + "sha256": "f6d1a29b43875b7b1fc945611c2ed15fbdcb8bb7220addf283b30fedf2ccba28" + }, + "tests/world/test_stair_infrastructure.gd.uid": { + "bytes": 20, + "sha256": "e08f53e9f6094e073e66252037b19835c594180d8d5ccffead43972fd0c41032" + }, + "tools/build_original_asset_inventory.py": { + "bytes": 6554, + "sha256": "1ca3be772088cc02c71fe9485d590dcd77ad95d5298983bfd27f15ad056642c9" + }, + "tools/capture_facility_audit.gd": { + "bytes": 2189, + "sha256": "3c597a844284367a31f6bfac8d3a1edd20622e405e0feb07a9681ddf7baf3b4a" + }, + "tools/capture_facility_audit.gd.uid": { + "bytes": 20, + "sha256": "dae70a3ded19ae9b79d8a5b7bc5342ad308954a65654f55c78a0af1c04df5edc" + }, + "tools/check_p04_order_evidence.py": { + "bytes": 82294, + "sha256": "3bb0cde776bc295f6f18e74f1e23bf3d832d8e4f71aed260601c82d287c655fd" + }, + "tools/check_p08_migration_evidence.py": { + "bytes": 24615, + "sha256": "928353233bf85436a5aaf8c4f77f3f82472d94b8ad2646cb1b030baf92b3b5dc" + }, + "tools/check_p08_normal_placement_evidence.py": { + "bytes": 73196, + "sha256": "53acc2e29fc36f7c7e3b2a5f6d3f97ba935b9052e4b6e095b071ec240f4ff68a" + }, + "tools/check_p13_content_difference.py": { + "bytes": 30401, + "sha256": "7b29180c776218138bfe1bf23013102932d853481cff41e7d830f1f5cf5c4d26" + }, + "tools/check_p23_life_observation_evidence.py": { + "bytes": 143352, + "sha256": "e41479ae51bccdfab3f31bd348794b441c2f341179bbe33222e2aacdf88f987f" + }, + "tools/check_p24_selection_evidence.py": { + "bytes": 14622, + "sha256": "cae171fe642240e8074a9ba56b9dd501349b008ad35251bba7a776d7210a1640" + }, + "tools/regression/audio_evidence_gate.py": { + "bytes": 9256, + "sha256": "3b587f0df7d7e6d97aa01d959d3ef4db74d9b81efc945407912e8539a4d071be" + }, + "tools/regression/bootstrap-scripts.json": { + "bytes": 3627, + "sha256": "cef904f10ca8d8ec7e87144cd1ea80d169fa31a8ece3fe2a106aa09e69046843" + }, + "tools/regression/diagnostic_gate.py": { + "bytes": 3679, + "sha256": "fc006e92b1a7b5122aaa5b30ba71fb054ee34021d4daa3a19167927ecd6657b2" + }, + "tools/regression/ordinary_proof_gate.py": { + "bytes": 6290, + "sha256": "1809dd3a6d3e0dbc6b55a87fc5890afd459deec2afd317bae1272d6708854459" + }, + "tools/regression/owned_diagnostic_process.py": { + "bytes": 14004, + "sha256": "e31e93c6e2c5ea46a7d954ef8bc0b4caec1c08b86b8aef19e93b52ef24993087" + }, + "tools/regression/owned_outer.py": { + "bytes": 4177, + "sha256": "c2e3483b76db1a3ff940f23f88ea0083fc78736e874ebcdb385d766dde8866e7" + }, + "tools/regression/p09_owned_engine_process.py": { + "bytes": 3717, + "sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037" + }, + "tools/regression/review_protocol.py": { + "bytes": 12360, + "sha256": "354a2ec9287dc052ccdba05b53443ddef28d94272471bb6a3c6a1581c6bd3efe" + }, + "tools/regression/suite-policy.json": { + "bytes": 17282, + "sha256": "164fcf07e2424bcd60657fc8eaa8bf3167f0aeda73e246662b555e8401856ed2" + }, + "tools/regression/unicode-diagnostic-contract.json": { + "bytes": 2938, + "sha256": "22fd41c59eb13e0af397984bed418870c55fa8942524c377490a90a2aca8dedd" + }, + "tools/run_all_tests.py": { + "bytes": 26296, + "sha256": "320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4" + }, + "tools/run_facility_audit.py": { + "bytes": 6172, + "sha256": "f5430ffd5bef013082975b0dca2c1f94a5a54f2fbee4105a56f5130f7ead4126" + }, + "tools/run_opening_restart_flow.py": { + "bytes": 2565, + "sha256": "e2b789866b14404f72af24fe60c6cad6ec77db5a8c597be08a9a58c516d7af5a" + }, + "tools/run_p08_mixed_migration.py": { + "bytes": 7939, + "sha256": "7e86737e6354a4734726ba8d3171ad5f58d6c0380aba5a0fa3c57879d580e579" + }, + "tools/run_p08_normal_placement.py": { + "bytes": 15345, + "sha256": "5cb1f58664a0bec71c8b5e853749d1c3656e0a2a027201e33fbaa6b0c0291fc6" + }, + "tools/run_p13_reference_tests.py": { + "bytes": 13957, + "sha256": "9adc8aa2a7662df8dd70386ddb0bff34574e44d7411de3b6128ddd15eb24675c" + }, + "tools/run_p18_relationship_tests.py": { + "bytes": 32904, + "sha256": "ccc8976dd9e9863366d102719dc0ae21d3a57da45dec39b4c72a3fc8c9f31a9b" + }, + "tools/run_p23_life_observation.py": { + "bytes": 22888, + "sha256": "8dbd90e22f47912b3381b514398fe1fb2c403c97d8e3d0dd675e9c8db5b5d0d1" + }, + "tools/run_upkeep_ui_flow.py": { + "bytes": 1650, + "sha256": "32d7d9e0075b70749696db01c2c27a588a35cf0ed89d8ed942cbeaece17863c9" + }, + "tools/strict_test_markers.py": { + "bytes": 9621, + "sha256": "1cb16da6c5c00c1a0610a3fc04beb97d1eb3ba492fb1bc8fe5b621d2b7bc0406" + }, + "tools/test_p08_migration_evidence.py": { + "bytes": 19293, + "sha256": "fd9ef7ec63f53dfd5e04e261606c9303d01a2e6590e22a35fef2e35df1429280" + }, + "tools/test_p08_normal_placement_evidence.py": { + "bytes": 59221, + "sha256": "8a29e3b996e2f1d15c69283faeae54555654c3cf89df99d8ce7f9eed38cd5edc" + }, + "tools/test_p23_life_observation_evidence.py": { + "bytes": 139688, + "sha256": "6890e890e54850581c9fc61f8d466396d6e92645bdc9f798885b7273d78c899a" + }, + "tools/verify_exported_opening.py": { + "bytes": 1519, + "sha256": "d1931d5e53890216fb006900789015a3ee14dce0293a4757a73fd6bb92b28d3f" + } +} diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/IMPLEMENTATION.md b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/IMPLEMENTATION.md index 875f8c1..086b65d 100644 --- a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/IMPLEMENTATION.md +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/IMPLEMENTATION.md @@ -721,3 +721,69 @@ read-only directory and its copy has the recorded bytes and SHA). The engine (/A the machine model stay read live. Everything else verify_eq recomputes from the bundle and the checkout as before. +## S6 implementation (repair 12; EQ_S6_AFTER_VERSION_PLAN) + +Implemented by Claude Opus 5.5 in the Desktop control session (user delegation). Repair for +the independent review of S a46418d (changes_requested: EQ5). All earlier text is retained. + +### The after version through the frozen harness (EQ5, high finding) + +- `BEFORE_SOURCE_MAP.json`: the registered base product source map, 1407 rows of + `{bytes, sha256}`, written from `collector.source_map` of the S_eq checkout. Its meaning is + fixed by the existing `SOURCE_SHA`; `compare_versions.before_source_map()` rejects duplicate + keys, row shape errors, a different row count and any digest other than `SOURCE_SHA`. +- `compare_versions.admit_source(source, registered)` is the single admission rule of both + versions. `registered` must be a sorted duplicate-free list. It runs + `check_source_closure(before_source_map(), source, registered)` and returns the closure with + `version` (before when `registered` is empty, otherwise after) and `after_sha256`. The before + version is exactly the old `SOURCE_SHA` requirement; the after version needs the changed set + equal to `registered` (a subset of `OPT_PATHS`), with no added or missing source. +- `run_eq`: `--opt-changed PATH` (repeatable, sorted by main, duplicates rejected by the rule). + `actual_pins(..., registered)` records `registered_changes` and `source_closure`; the + admission records `version` and `measured_source` (`verify_eq.MEASURED`: before + `S_eq-native-not-Q`, after `S_opt-native-not-Q`, OPT_CONTRACT_T1 §5); `pins_after` is + recomputed with the same registration. The EQ file pins (`worker`) and `frozen_commit` + include `BEFORE_SOURCE_MAP.json` (`verify_eq.DATA_NAMES`). +- `verify_eq.recompute` replaces the `SOURCE_SHA` line with `admit_source` on the recorded + map and registration and requires the recorded closure, version and label exactly; + `verify` passes the recorded registration to `actual_pins` on the checkout. The result + carries `measured_source`, `version` and `registered_changes`. +- `verify_eq.py --compare-versions --before --after ` (`compare_bundles`): + the bundle-level entry of the two-version comparator (SPEC §2, §3.2; OPT_CONTRACT_T1 §2-§4). + Both seals, passed executions, admission copies, versions, closures and labels are checked + again; every non-product pin (`dependencies`, `frozen`, `worker`, `fixture`, `engine`, + `engine_version`, `readonly`, `original_manifest`, `machine`, `platform`) must be equal; the + sealed joined reports of R-A and O-A are compared by `compare_reports` (differences, + exclusions, digest modes and violations all returned); the stored checkers' existing-defect + scenarios of both versions are listed and `after_all_e_pass` reports whether the after + version has none (the OPT acceptance judges it). Each bundle's raw recomputation, same-role + determinism and checkout pins are proven by that version's own native-verify. + +### Low findings + +- `eq_probe.gd` E5 detail: `latest_digest_dirty_before` is `runtime.get("_latest_digest_dirty")` + read just before the operation (null if a version has no such field), replacing the constant + `digest_materialized_before: true`. The checker accepts only `false` or `null`. +- `run_eq.bundled_inputs`: the bundled manifest must have `ROOT_MANIFEST_SHA` (the value + `collector.inputs` fixes; a unit test checks the literal in the collector source), and each + destination string must be absolute and already normalized (`os.path.normpath`) inside the + read-only directory. This is textual because the sandboxed verification cannot read the + originals; the run checks the resolved originals through `collector.inputs`. +- `verify_eq.seal`/`check_seal`: bundle schema `p28-02-eq-bundle-v2` with `directories`, the + sorted list of every directory (empty `/startup-profile` included). A file-only copy + of a sealed bundle now fails the seal check itself. + +### Tests and evidence kinds + +- 17 engine-free tests in `S6SourceClosure`, `S6Admission`, `S6Bundles` and `S6SealAndProbe`. + `S6Bundles` builds one sealed before and one sealed after synthetic bundle per class with + the real parallel recompute, compares them unmocked, and tampers APFS clones (`cp -c`) only; + the real state difference is a changed K value in the after R-A report. The main test in + `S6Admission` mocks `actual_pins` only to read the registration passed by main. +- Diagnostic, not formal: `EQ_S6_AFTER_ADMISSION_DIAG_R01` (Root control folder) ran the real + `run_eq.py --check` on a throwaway after-version checkout; the admitted and rejected cases + and their exits are in its SUMMARY.json. +- The first S6 bundle tests copied 709 MB synthetic bundles with `shutil.copytree` and ran + out of disk space during a class-targeted run (not retained); they now use clones. +- Full local run UNIT_OUTPUT_S6_ATTEMPT_01: 179 tests OK in 207.351 s, exit 0. +- Local run under the Runner validation seatbelt profile, UNIT_OUTPUT_S6_SEATBELT_01: 179 tests OK in 206.326 s, Python exit 0, outer 207.695 s. diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/PROGRESS.md b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/PROGRESS.md index 324a62e..ff9e5c5 100644 --- a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/PROGRESS.md +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/PROGRESS.md @@ -1,4 +1,78 @@ -# P28-02-EQ progress — S5 (repair 10, Claude Opus 5.5 Desktop implementation) +# P28-02-EQ progress — S6 (repair 12, Claude Opus 5.5 Desktop implementation) + +Implementer: Claude Opus 5.5 in the Desktop control session, by the user's delegation +("Codexの使用量上限いきそうなので、作業をひきとって"; Root relayed 「実装担当含めOpusに委任」). +The registered contract keeps worker codex; no Codex/Astra run was started for this stage. +Submission goes through the normal Runner submit, which makes the commit. 正式受入は保留、原本加算0。 + +- S a46418d064ebf8c8e03043bae50c29ac174b5472 (repair 11): its exact-S native passed + (native-a46418d-r01, 7 phases, cleanup errors empty, sealed), and its formal validation + cb059f305dd34e7aa811b40ad1cfb6f2 passed both checks (unit 162 tests OK; native-verify + exit 0, verified). The fresh independent Opus review (session + local_179020e9-e4c8-45ab-aaa0-be27aaa3f3d6, DESKTOP_RESULT.json + c08eedb2ff81fd308e0771aeb4330076389561255a2bb964567be28f478592cd) returned + changes_requested: EQ1-EQ4 and EQ6 met, EQ5 not met. The normal intake recorded + review_failed and repair_pending; the normal repair made repairs 12. All of it is retained. +- The high finding is accepted: the source closure was only unit-tested. run_eq and verify_eq + required the before SOURCE_SHA, so the frozen EQ could not admit an OPT S that changes only + registered allowed files (OPT_CONTRACT_T1 §2 and §4). S6 (EQ_S6_AFTER_VERSION_PLAN): + - BEFORE_SOURCE_MAP.json holds the registered base product source map (1407 rows); its + digest must equal the existing SOURCE_SHA on every read. compare_versions.admit_source + admits the before version (no registration, no difference) or an after version (the + changed set equals the sorted registered OPT files; no added or missing source). + - run_eq --opt-changed PATH (repeatable) registers the OPT files; actual_pins records + registered_changes and source_closure, the admission records version and + measured_source (before S_eq-native-not-Q, after S_opt-native-not-Q; never Q). + verify_eq re-runs the closure with the recorded registration and requires the recorded + closure, version and label; actual_pins on the checkout gets the same registration. + - verify_eq --compare-versions --before --after is the bundle-level entry + of the comparator (SPEC §2): both seals, versions and closures again, every non-product + pin equal, compare_reports on the sealed A-phase reports of R and O, existing defects of + both versions listed (after_all_e_pass for the OPT judgment). +- The three low findings are fixed: the probe records the actual _latest_digest_dirty before + each E5 operation (false or null accepted, true rejected); bundled_inputs requires the + collector's fixed manifest SHA and normalized absolute destinations inside the read-only + directory; the seal (bundle schema v2) records every directory, empty ones included. +- Evidence kinds are kept apart: + - Unit, engine-free, real code paths: admit_source; run_eq.actual_pins with a synthetic map + (only collector.source_map, inputs, host SHAs of the synthetic fixture/engine and the + machine query are patched); recompute of a real synthetic after bundle; compare_bundles + unmocked on a real before and a real after synthetic bundle (positive, a real state + difference, pin drift, closure and label tampering, seal tampering, swapped, same bundle). + One unit test (S6Admission main) mocks actual_pins only to see the registration main + passes; it is not counted as admission evidence. + - Diagnostic, not formal (EQ_S6_AFTER_ADMISSION_DIAG_R01 in the Root control folder): the + real run_eq.py --check, unmocked, on a throwaway after-version checkout (an APFS clone of + this working tree as its own temporary git repository, one allowed OPT file changed and + committed). Before version and the registered after version were admitted; no + registration, a wrong registration, a registration without change, an added source and a + non-OPT change were rejected with the source closure error. No engine was started. +- Unit evidence (engine-free `python3 -B test_eq.py`; full raw outputs with SHA files): + - Class-targeted runs during development were displayed through tail and are not claimed + as retained raw results. One of them ran out of disk space (the first S6 bundle tests + copied 709 MB synthetic bundles); the tests now clone with cp -c and build two bundles + per class. + - UNIT_OUTPUT_S6_ATTEMPT_01 (final, all changes included): 179 tests OK in 207.351 s, + Python exit 0; same bytes as UNIT_OUTPUT.txt, + SHA-256 9dd93de5fd3b66791d6902d51a055caa2c3dd559de6c42019ebb1ab147b2af11. + - UNIT_OUTPUT_S6_SEATBELT_01: the same suite under the Runner validation seatbelt profile, + run locally (see its exit line in IMPLEMENTATION.md). Local runs are not formal validation. +- Test bodies changed for S6, each recorded here: the E5 fixture detail carries + latest_digest_dirty_before false instead of digest_materialized_before true, and the + materialization test rejects true; s4_bundle_fixture takes an optional registration and + pin overrides and records commit, version, measured_source, registered_changes, + source_closure and the non-product pins; the S4 probe-admission mock returns a before + source_closure; the stored-result test records registered_changes [] in its admission and + mock; the bundled-inputs test holds its synthetic manifest to its own SHA in place of the + collector's and expects the manifest error before the escape error. All other earlier test + bodies and raw outputs are unchanged; 17 S6 tests were added. + +Next: Runner submit → exact-S native 7 phases (before version, no --opt-changed) → bundle → +p28-02-eq-unit and p28-02-eq-native-verify → fresh independent Opus review of all 6 +conditions → normal qualification, approval, integration and final → OPT/whole-unit. +23/88、4/30は不変。 + +## Retained S5 progress (unchanged historical text) Implementer: Claude Opus 5.5 in the Desktop control session, by the user's delegation ("Codexの使用量上限いきそうなので、作業をひきとって"; Root relayed 「実装担当含めOpusに委任」). diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/S6_SUPPLEMENTARY.json b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/S6_SUPPLEMENTARY.json new file mode 100644 index 0000000..19fcbd5 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/S6_SUPPLEMENTARY.json @@ -0,0 +1,31 @@ +{ + "actual_commander_context": { + "implementer": "Claude Opus 5.5 (claude-opus-5-5), Desktop control session local_a7f85421-3eed-4482-8030-c0dca669573a", + "authority": "User delegation: Codexの使用量上限いきそうなので、作業をひきとって; Root relayed 実装担当含めOpusに委任. Contract worker field stays codex as registered; no Codex/Astra run.", + "stage": "S6 (repair 12): repair for the independent review of S a46418d (changes_requested, EQ5): after-version admission and verification through the frozen source closure, the bundle-level two-version comparison, and the three low findings.", + "reviewer_session": "local_179020e9-e4c8-45ab-aaa0-be27aaa3f3d6 (fresh separate Opus 5.5, read only)", + "actual_documents": { + "EQ_S6_AFTER_VERSION_PLAN.txt": { + "sha256": "e51da52336489d069c0adf2c70639755389a049334f5816804fea51a86c25197", + "bytes": 8074, + "full_unedited": "P28-02-EQ S6 計画(repair 12。a46418d の独立レビュー changes_requested への修正)\n\n実装担当: Claude Opus 5.5(Desktop 統括セッション local_a7f85421-3eed-4482-8030-c0dca669573a、ユーザー委任)。\ncontract の worker 欄は codex のまま。Codex/Astra の run は起動しない。commit は Runner submit が作る。\n原本は 23/88、4/30 のまま。部分点なし。\n\n0. 経緯と事実\n- S a46418d: exact-S native 7 phase 合格、正式 validation cb059f30(unit 162 OK、native-verify exit 0)、review_pending。\n- 独立レビュー(local_179020e9-e4c8-45ab-aaa0-be27aaa3f3d6、Opus 5.5、fresh、読むだけ): DESKTOP_RESULT.json c08eedb2…、\n status changes_requested。EQ1〜EQ4・EQ6 は満たす、EQ5 は満たさない。intake で Runner は review_failed、repair_pending。\n- high: check_source_closure(compare_versions.py:845)が run_eq/verify_eq につながっていない。run_eq.actual_pins\n (:124)と verify_eq.recompute(:212)が source map = before の SOURCE_SHA を要求するため、OPT の許可差分だけを\n 変えた S も拒否され、OPT_CONTRACT_T1 §4 の「OPT の S で同じコマンドで eq-after-」が、凍結した EQ を変えずに\n 実行できない。この指摘は正しいと判断する。\n- low 3件: (1) eq_probe.gd の digest_materialized_before が定数 true。(2) verify の bundled_inputs が collector の\n 固定 manifest SHA を検査し直さず、resolve なしの is_relative_to。(3) seal がファイルだけで、空ディレクトリの存在を\n 束に記録しない。3件とも直す。\n\n1. before の固定(compare_versions.py)\n- 新しいファイル eq/BEFORE_SOURCE_MAP.json: 登録の base の製品 source map 全 1407 件({bytes, sha256})。\n 中身は collector.digest == SOURCE_SHA 651f7036… で固定される(既存の定数がそのまま bytes の意味を固定する)。\n S_eq の checkout の collector.source_map から作り、digest の一致を確かめてから置く。\n- before_source_map(): 読込時に重複 key を拒否し、1407 件・行の型・digest == SOURCE_SHA を要求する。\n- admit_source(source, registered): check_source_closure(before_source_map(), source, registered) を通った場合だけ\n 受け付ける。registered は重複なし・整列済みの list で、OPT_PATHS の部分集合。空なら before の版(差分 0 件、\n つまり従来の SOURCE_SHA の要求と同じ)、空でなければ after の版(実際の差分の集合 = registered、追加・欠落 0)。\n 結果に version(before/after)と after の digest を付ける。\n\n2. admission と verify(run_eq.py / verify_eq.py)\n- run_eq --check / --run に --opt-changed PATH(繰り返し可、既定は無し)を加える。actual_pins が admit_source を\n 呼び、pins に registered_changes と source_closure を記録する。admission に version を記録する。\n- measured_source: before は従来どおり 'S_eq-native-not-Q'。after は 'S_opt-native-not-Q'(OPT_CONTRACT_T1 §5\n 「OPT の提出された S で実行した」)。candidate_Q_measured は従来どおり false を要求する。\n- execution の pins_after も同じ registered で再計算する。verify は actual_pins(…, registered=admission の値) ==\n admission の pins を要求し、recompute は admit_source を記録の registered でやり直して、記録した source_closure\n と version に一致することを要求する(従来の SOURCE_SHA 固定の行を置き換える)。\n- EQ のファイルの pin(worker)に BEFORE_SOURCE_MAP.json を含める。frozen_commit も同じファイルを検査する。\n\n3. 版の間の比較の入口(verify_eq.py --compare-versions --before <束> --after <束>)\n- SPEC §2 の「2つの版の記録を比べる比較器」を、凍結した EQ の中で実行できるようにする(OPT の段階で EQ を\n 変えないため)。比較の規則は compare_versions.py の関数(admit_source、compare_reports)を使う。\n- 両方の束の seal、execution の passed、before の束が version before(registered 空)、after の束が version\n after(registered 空でない)であることを要求し、両方の admission の source_closure を admit_source でやり直す。\n- 製品以外の pin(dependencies、frozen、worker = EQ のファイル、fixture、engine、engine_version、readonly、\n original_manifest、machine、platform)が両方で完全に一致することを要求する(OPT_CONTRACT_T1 §2 の\n 「後の版の EQ・DIAG・collector・RESTART の bytes が固定の SHA と一致」)。\n- R と O それぞれ、before の A と after の A の joined(seal 済みの写し)を compare_reports で比べる。各版の中の\n A と B の差 0 は、各版の native-verify が証明済み。差・除外・違反は全て結果に残す。\n- 両版の checker から existing-defect / existing-defect-candidate の scenario を列挙し、after の版の\n 「全ての E の合格」(OPT_CONTRACT_T1 §3)を判断する材料として出す。判定の受入は OPT の受入で行う。\n- formal_acceptance は false、原本の加算は 0。\n\n4. low の修正\n- eq_probe.gd: E5 の detail に、mutation の直前の runtime.get(\"_latest_digest_dirty\") の実際の値を\n latest_digest_dirty_before として記録する(定数の digest_materialized_before を置き換える)。checker は\n false(materialize 済み)か null(その版にその欄が無い)だけを受け付け、true は失敗にする。\n- run_eq.bundled_inputs: 同梱の manifest の SHA が collector の固定値(9dac0a51…)であることを要求する。\n destination は '..' を含まない正規化済みの絶対 path で、元の read-only directory の中にあることを要求する\n (verify の seatbelt の中では元の path を読めないので、resolve ではなく字句で検査する。run の時は従来どおり\n collector.inputs が resolve で検査する)。固定値が collector の source と同じであることを試験で確かめる。\n- verify_eq.seal / check_seal: bundle.json(schema p28-02-eq-bundle-v2)に全ディレクトリの一覧を記録し、\n check_seal で実際の一覧と一致することを要求する(ファイルだけを写した束は seal の検査で失敗する)。\n\n5. 試験(engine を使わない test_eq.py)\n- before map の改ざん・欠落・重複 key の拒否。\n- admit_source: before(空)が通る、登録した差分が通る、未登録の差分・追加・欠落・登録したのに変わっていない・\n OPT_PATHS の外・重複・未整列を拒否。\n- run_eq.main の --opt-changed が actual_pins に渡ること、actual_pins が admission に記録すること。\n- recompute: registered・source_closure・version・measured_source の改ざんを拒否。\n- --compare-versions: 合成の before/after の束で、通る場合と、pin の違い・version の取り違え・closure の改ざん・\n seal の欠落を拒否する場合。\n- seal のディレクトリ、bundled_inputs の manifest SHA と '..'、probe の latest_digest_dirty_before の静的検査と\n checker の受付(false / null)と拒否(true・欠落)。\n- 既存の試験の本文を変える場合は、PROGRESS.md に1件ずつ記録する。\n\n6. 順序(従来どおり)\n- 通常の repair(repairs 12)→ 局所の全 unit PASS(生出力と SHA を保存)→ Runner submit(新しい S)→\n exact-S native 7 phase(before の版、--opt-changed なし)→ 束の配置 → 正式 validation 2件(全ログと実 exit)\n → fresh の独立 Opus の全 6 条件のレビュー → 通常の qualification・承認・統合・final → 台帳 → OPT T1 と\n whole-unit gate。\n- a46418d の native・validation・レビューの結果は、そのまま保持する(成功・失敗を書き換えない)。\n" + }, + "DESKTOP_EQ_INDEPENDENT_REVIEW_REPAIR_DECISION_A46418D.json": { + "sha256": "49e70371967a0103aeba140cbdee7876c0fc9a268bf465d435b85d4fb3e466b8", + "bytes": 1718, + "full_unedited": "{\"action\":\"request-repair\",\"task_id\":\"P28-02-EQ\",\"reason\":\"Independent review of S a46418d064ebf8c8e03043bae50c29ac174b5472 (fresh separate Opus 5.5 session local_179020e9-e4c8-45ab-aaa0-be27aaa3f3d6, DESKTOP_RESULT.json c08eedb2ff81fd308e0771aeb4330076389561255a2bb964567be28f478592cd) returned changes_requested: EQ1-EQ4 and EQ6 met, EQ5 not met. High finding: compare_versions.check_source_closure is not wired into run_eq or verify_eq; both require the product source map to equal the before SOURCE_SHA, so an OPT S that changes only registered allowed files is rejected and the frozen EQ cannot produce the after-version record required by OPT_CONTRACT_T1 sections 2 and 4. Three low findings: constant digest_materialized_before in the probe, bundled_inputs not re-checking the collector manifest SHA and using an unresolved is_relative_to, and the seal not recording directories. The finding is accepted. Repair per EQ_S6_AFTER_VERSION_PLAN.txt: a fixed before map (BEFORE_SOURCE_MAP.json, digest SOURCE_SHA) and admit_source in compare_versions; run_eq --opt-changed and admission/verify closure re-checks; a bundle-level cross-version comparison in verify_eq; fixes for the three low findings; engine-free tests for each. The a46418d native, validation and review stay retained as they are. After the repair the final S gets one exact-S native, the bundle placement, both validations and a fresh independent Opus review of all 6 conditions, then the normal integration and final. No permission, policy, timeout or Runner configuration change. No original credit (23/88, 4/30). Decided by Claude Opus 5.5 in the Desktop control session acting for Root under the user's delegation; not a CLI commander result.\"}" + }, + "eq-independent-review-a46418d-r01/DESKTOP_RESULT.json": { + "sha256": "c08eedb2ff81fd308e0771aeb4330076389561255a2bb964567be28f478592cd", + "bytes": 8060, + "full_unedited": "{\n \"task_id\": \"P28-02-EQ\",\n \"commit\": \"a46418d064ebf8c8e03043bae50c29ac174b5472\",\n \"status\": \"changes_requested\",\n \"summary\": \"独立レビュー(fresh の別 Desktop セッション、読むだけ)。入力: READY の packet f5f57016…・schema b08d2ec1…・material manifest 823cf63a… を再計算して一致。material 5980 件の bytes と SHA が manifest と全件一致(追加・欠落なし、計 2,920,895,003 bytes)。validation-runs の写しは Runner 原本と同じ SHA。bundle.json f6e1aa1e… と seal.json b4ce53ec… は native-a46418d-r01、task の build dir、material で同一。build dir には空の startup-profile 7 件がある。正式証拠: receipt cb059f30…(p28-02-eq-unit は 162 件 OK で exit 0。p28-02-eq-native-verify は exit 0 で status verified、measured_source S_eq-native-not-Q、formal_acceptance false)。診断実行(scratchpad r2〜r4・o8・o9、NATIVE_VERIFY_DRYRUN_A46418D)は数えていない。EQ1 満たす: probe が各観測の前後で S/K/C の bytes を比べ(K は DIAG と同じ欄で telemetry を含み、C は D2 の定義と instance ID)、checker が raw blob と SHA を結合している。版の間では S・latest_snapshot・latest_digest と SPEC §3.2 の K/C を比べる。比べない欄(_samples/_totals、instance ID、F1〜F3 の sidecar、F1〜F3 を含む latest の latest_digest)は理由と両方の値つきで excluded に入り、正規化した木の全体と labelled digest を比べている。SimulationDigest だけでは判定しない。S5 の blob は名前の SHA と照合し、初回 parse の時に validate_tree を全て通してから _VALID_BLOBS に入れる。失敗した blob は記録されず、毎回失敗する。inline と blob の拒否は試験 4000 件の差分照合と同じ。_fast_normalize は token の検査で外れたら元の全走査に戻り、元の方針を skeleton で動かすので、比べる範囲を狭めない。memo_scope は同じ入力の再利用と GC の停止だけ。EQ2 満たす: B1 の後に subscribe('*') で上限なく記録している。R は 1592 件(counter 6476→8068)、O は 16 件で、counter の差分・published_ids・ID の一意性で完全性を検査している。開始の counter が違えば compare_reports は不成立になり、ID は付け替えずに全欄を比べる。:788/:1346 の stream の差し替えは follow_event_stream が recent_events から回収して再購読し、existing-defect として残している(PASS にしていない)。EQ3 満たす: 3 API × 6 分類の 18 行で、code・S/K/C の前後・全イベント・X(B,SAVE_LOAD_FAILED) を記録して検査している。NA は source に根拠がある(validate は envelope だけ:simulation_snapshot.gd:16-43。Dictionary API は world.bin を読まない。O は施設が 0 件)。NA でも実際の戻り値を残している。load の失敗で K が変わること(_pause_request_serial 2→4 など)は、既存不具合の候補として残している。EQ4 満たす: E4 の 5 経路と E5 の 16 組を R と O の専用区間で実行し、前後の差と双方向の結果を実際の値で残している。latest/signal の aliasing と cached digest は existing-defect にしている。check_publishes は各 publish を command・event counter・submit に結びつけ、欠落・余分・順序違いで失敗する(r03 の規則の訂正は製品の source に合う)。静的検査で、列挙外の呼出しと hook の差し替えを拒否している。EQ5 満たさない: 同じ版の 2 PID の差は R・O とも 0 件で、各 39 シナリオを実行している。しかし、source の閉包の検査が凍結した driver と verifier につながっておらず、OPT の S を拒否する(finding 1)。EQ6 満たす: 7 phase、PID 7 つ、profile 14 個、cleanup errors は空、source map は 1407 件で 651f7036…、全 raw は seal されている。commit a46418d で、Q で測ったとは書いていない。実行者は Root 役の Desktop 統括(ユーザー委任、実装担当と同じセッション)で、記録どおり。経緯: b2dbda8 の native-verify の失敗(c02eda13…、exit 1、fixture の Operation not permitted)は失敗のまま残っている。a46418d の bundle_inputs で直し、写しが元の入力と同じ bytes と SHA であることを run_eq が検査している(再計算でも一致)。contract の worker は codex のまま、commit は Runner、実装は Opus Desktop という記録は正直。結論: EQ5 が満たされないので changes_requested。原本は 23/88・4/30 のまま、部分点なし。\",\n \"acceptance_ids\": [\n \"P28-02-EQ1\",\n \"P28-02-EQ2\",\n \"P28-02-EQ3\",\n \"P28-02-EQ4\",\n \"P28-02-EQ5\",\n \"P28-02-EQ6\"\n ],\n \"findings\": [\n {\n \"severity\": \"high\",\n \"message\": \"EQ5(OPT の版の間で同等性に使えるか): compare_versions.check_source_closure(compare_versions.py:845)は単体試験でしか呼ばれておらず、run_eq と verify_eq のどちらも使っていない。run_eq.actual_pins(run_eq.py:124)と verify_eq.recompute(verify_eq.py:212)は、source map の digest が before の SOURCE_SHA 651f7036… と完全に一致することを要求している。そのため、登録した OPT の許可差分だけを変えた S でも、admission で 'full 1407 source pin' として拒否される。凍結した参照 OPT_CONTRACT_T1.md の §4 は「OPT の S で、同じコマンドで eq-after-」と定め、§2 は後の版の EQ の bytes が固定の SHA と一致することを求めている。この後の版の実行は、凍結した EQ のファイルを変えない限りできない。つまり、この harness は登録した差分も登録外の差分と同じように拒否し、版の間の E1/E2 の比較に必要な後の記録を作れない。修正案: before の pin はそのまま検査する。後の版は、check_source_closure(固定の before, 実際の after, OPT_PATHS の部分集合として登録した集合) を通った場合だけ受け付ける。その集合と結果を admission に記録し、verify_eq でもう一度検査する。run_eq --check と verify の経路に、登録した差分が通り、追加・欠落・登録外が拒否されることの試験を加える。\"\n },\n {\n \"severity\": \"low\",\n \"message\": \"eq_probe.gd:848 は digest_materialized_before を定数 true として書いており、check_eq.py:1070 の検査は意味を持たない。直前の基準の観測(e3_observation が latest_digest を読む)で digest は実際に materialize されるので、今回の証拠への影響はない。しかし、実際の値(例: _latest_digest_dirty)を記録するべきである。\"\n },\n {\n \"severity\": \"low\",\n \"message\": \"verify の時の run_eq.bundled_inputs(run_eq.py:80-98)は、collector.inputs が固定している manifest の SHA(collect_p28_01.py:252、9dac0a51…)を検査し直さず、束の中の admission の pin に頼っている。また、resolve() しない is_relative_to で判定している。今回は、元の manifest と同梱の manifest がどちらも 9dac0a51…、fixture が eb4f7700…、9 件の入力が全て同じ bytes と SHA であることを再計算で確かめたので、影響はない。\"\n },\n {\n \"severity\": \"low\",\n \"message\": \"束の seal(verify_eq.inventory)はファイルだけを対象にしている。一方で recompute は、空の startup-profile ディレクトリ 7 件があることを要求している(verify_eq.py:259)。このため、正しく seal された束でもファイルだけを写すと検証に失敗する(place_eq_bundle.py を直した理由)。失敗する方向にしか働かないので、誤った合格は生じない。ディレクトリの存在も bundle.json に記録するとよい。\"\n }\n ]\n}\n" + }, + "EQ_S6_AFTER_ADMISSION_DIAG_R01/SUMMARY.json": { + "sha256": "201a8177f53667ec260ed3d176f6d1978f8e80e60a3ff23712da1e8bb731328a", + "bytes": 3368, + "full_unedited": "{\n \"diagnostic_only\": true,\n \"formal_evidence\": false,\n \"what\": \"real run_eq.py --check admission (no mock) on a throwaway after-version checkout\",\n \"checkout\": \"APFS clone of the S6 working tree of the implement worktree, made its own temporary git repository; the managed repository was not touched; removed after the run\",\n \"before_commit\": \"baa96a4483f8020514a057e9f55bd861f439967f\",\n \"after_commit\": \"32725792dee454d5d8b9ae7dfb4de39b0cb51ded\",\n \"opt_change\": \"one comment line appended to autoload/simulation_runtime.gd, committed\",\n \"non_opt_file\": \"scenes/main/world_preview.gd\",\n \"note\": \"non-opt-change-attempt-01 appended to scripts/world/world_preview.gd, which does not exist, so it tested an added file (rejected); non-opt-change repeats it with the existing scenes/main/world_preview.gd (rejected)\",\n \"script_sha256\": \"11e34e02c137017c567a8a497755d17301d398e3238e71ec194f9ab43d4d88ec\",\n \"cases\": {\n \"before-version\": {\n \"exit\": 0,\n \"stdout_sha256\": \"8186b1d43e09db8c27d2db8621b0c4f21c0f6e8b76aa3088dcb7e265d1c2b174\",\n \"stderr_bytes\": 0,\n \"version\": \"before\",\n \"measured_source\": \"S_eq-native-not-Q\",\n \"commit\": \"baa96a4483f8020514a057e9f55bd861f439967f\",\n \"registered_changes\": [],\n \"changed\": [],\n \"added\": [],\n \"missing\": [],\n \"candidate_Q_measured\": false,\n \"phases\": 7\n },\n \"before-with-registration\": {\n \"exit\": 1,\n \"stdout_sha256\": \"c55ad7044b5f9809786d582c3d573f3648a4bbc3f2d2fa191225cf483bba2580\",\n \"stderr_bytes\": 0,\n \"error\": \"source closure: ['source closure mismatch']\"\n },\n \"registered-after\": {\n \"exit\": 0,\n \"stdout_sha256\": \"50f5cf5687c05d12ba6027882bb426490fe7cfddef81fd162988a5ef3a556564\",\n \"stderr_bytes\": 0,\n \"version\": \"after\",\n \"measured_source\": \"S_opt-native-not-Q\",\n \"commit\": \"32725792dee454d5d8b9ae7dfb4de39b0cb51ded\",\n \"registered_changes\": [\n \"autoload/simulation_runtime.gd\"\n ],\n \"changed\": [\n \"autoload/simulation_runtime.gd\"\n ],\n \"added\": [],\n \"missing\": [],\n \"candidate_Q_measured\": false,\n \"phases\": 7\n },\n \"unregistered-change\": {\n \"exit\": 1,\n \"stdout_sha256\": \"c55ad7044b5f9809786d582c3d573f3648a4bbc3f2d2fa191225cf483bba2580\",\n \"stderr_bytes\": 0,\n \"error\": \"source closure: ['source closure mismatch']\"\n },\n \"registered-wrong-file\": {\n \"exit\": 1,\n \"stdout_sha256\": \"c55ad7044b5f9809786d582c3d573f3648a4bbc3f2d2fa191225cf483bba2580\",\n \"stderr_bytes\": 0,\n \"error\": \"source closure: ['source closure mismatch']\"\n },\n \"added-source\": {\n \"exit\": 1,\n \"stdout_sha256\": \"c55ad7044b5f9809786d582c3d573f3648a4bbc3f2d2fa191225cf483bba2580\",\n \"stderr_bytes\": 0,\n \"error\": \"source closure: ['source closure mismatch']\"\n },\n \"non-opt-change-attempt-01-actually-added-file\": {\n \"exit\": 1,\n \"stdout_sha256\": \"c55ad7044b5f9809786d582c3d573f3648a4bbc3f2d2fa191225cf483bba2580\",\n \"stderr_bytes\": 0,\n \"error\": \"source closure: ['source closure mismatch']\"\n },\n \"non-opt-change\": {\n \"exit\": 1,\n \"stdout_sha256\": \"c55ad7044b5f9809786d582c3d573f3648a4bbc3f2d2fa191225cf483bba2580\",\n \"stderr_bytes\": 0,\n \"error\": \"source closure: ['source closure mismatch']\"\n }\n },\n \"engine_started\": false,\n \"original_credit\": 0\n}\n" + } + }, + "note": "Preserved review, decision, plan and diagnostic bytes for review; not a new commander decision. The diagnostic is not formal evidence." + } +} diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT.sha256 b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT.sha256 index f1c3997..85a5244 100644 --- a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT.sha256 +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT.sha256 @@ -1 +1 @@ -846ab3b45705f269a81181c818dc5e3b8bc0057863794d59e8d641fe5a4e4c32 UNIT_OUTPUT.txt +9dd93de5fd3b66791d6902d51a055caa2c3dd559de6c42019ebb1ab147b2af11 UNIT_OUTPUT.txt diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT.txt b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT.txt index 241027d..fc236b2 100644 --- a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT.txt +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT.txt @@ -149,6 +149,23 @@ test_probe_static_full_tree_blob_and_stream_requirements (__main__.S5.test_probe test_publish_pairs_bound_to_source_causes (__main__.S5.test_publish_pairs_bound_to_source_causes) ... ok test_signed_instance_ids_raw_kept_and_excluded (__main__.S5.test_signed_instance_ids_raw_kept_and_excluded) ... ok test_validate_tree_equals_s1_reference_on_mutations (__main__.S5.test_validate_tree_equals_s1_reference_on_mutations) ... ok +test_bundled_destination_must_be_normalized_inside_readonly (__main__.S6Admission.test_bundled_destination_must_be_normalized_inside_readonly) ... ok +test_check_path_admits_registered_after_version (__main__.S6Admission.test_check_path_admits_registered_after_version) ... ok +test_check_path_rejects_unregistered_or_unchanged (__main__.S6Admission.test_check_path_rejects_unregistered_or_unchanged) ... ok +test_main_passes_sorted_registration_and_records_version (__main__.S6Admission.test_main_passes_sorted_registration_and_records_version) ... ok +test_root_manifest_pin_equals_collector_literal (__main__.S6Admission.test_root_manifest_pin_equals_collector_literal) ... ok +test_after_version_bundle_recomputes (__main__.S6Bundles.test_after_version_bundle_recomputes) ... ok +test_cross_version_comparison (__main__.S6Bundles.test_cross_version_comparison) ... ok +test_cross_version_pin_closure_and_seal_rejections (__main__.S6Bundles.test_cross_version_pin_closure_and_seal_rejections) ... ok +test_cross_version_real_difference_is_not_ok (__main__.S6Bundles.test_cross_version_real_difference_is_not_ok) ... ok +test_recompute_rejects_version_closure_and_label_changes (__main__.S6Bundles.test_recompute_rejects_version_closure_and_label_changes) ... ok +test_digest_state_values (__main__.S6SealAndProbe.test_digest_state_values) ... ok +test_probe_records_actual_digest_state (__main__.S6SealAndProbe.test_probe_records_actual_digest_state) ... ok +test_seal_records_every_directory (__main__.S6SealAndProbe.test_seal_records_every_directory) ... ok +test_admit_before_and_registered_after (__main__.S6SourceClosure.test_admit_before_and_registered_after) ... ok +test_before_map_is_the_frozen_source_map (__main__.S6SourceClosure.test_before_map_is_the_frozen_source_map) ... ok +test_before_map_tampering_rejected (__main__.S6SourceClosure.test_before_map_tampering_rejected) ... ok +test_unregistered_added_missing_and_malformed_registrations_rejected (__main__.S6SourceClosure.test_unregistered_added_missing_and_malformed_registrations_rejected) ... ok test_fixed_scenario_paths (__main__.SourcesAndMetrics.test_fixed_scenario_paths) ... ok test_metric_ranges (__main__.SourcesAndMetrics.test_metric_ranges) ... ok test_source_closure_synthetic_registered_map (__main__.SourcesAndMetrics.test_source_closure_synthetic_registered_map) ... ok @@ -163,6 +180,6 @@ test_nonstring_keys_keep_types_and_values (__main__.TypedTrees.test_nonstring_ke test_unsupported_and_malformed (__main__.TypedTrees.test_unsupported_and_malformed) ... ok ---------------------------------------------------------------------- -Ran 162 tests in 120.853s +Ran 179 tests in 207.351s OK diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT_S6_ATTEMPT_01.sha256 b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT_S6_ATTEMPT_01.sha256 new file mode 100644 index 0000000..2be5663 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT_S6_ATTEMPT_01.sha256 @@ -0,0 +1 @@ +9dd93de5fd3b66791d6902d51a055caa2c3dd559de6c42019ebb1ab147b2af11 UNIT_OUTPUT_S6_ATTEMPT_01.txt diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT_S6_ATTEMPT_01.txt b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT_S6_ATTEMPT_01.txt new file mode 100644 index 0000000..fc236b2 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT_S6_ATTEMPT_01.txt @@ -0,0 +1,185 @@ +test_all_operations (__main__.Diffs.test_all_operations) ... ok +test_invalid_operations (__main__.Diffs.test_invalid_operations) ... ok +test_reconstruction_and_proofs (__main__.Diffs.test_reconstruction_and_proofs) ... ok +test_attempt_to_normalize_violation_rejected (__main__.Normalization.test_attempt_to_normalize_violation_rejected) ... ok +test_environment_values_differ_but_normal_form_equal (__main__.Normalization.test_environment_values_differ_but_normal_form_equal) ... ok +test_every_save_event_reversible (__main__.Normalization.test_every_save_event_reversible) ... ok +test_f3_keeps_relative_paths_and_words (__main__.Normalization.test_f3_keeps_relative_paths_and_words) ... ok +test_guard_mismatch (__main__.Normalization.test_guard_mismatch) ... ok +test_nested_lookalike_is_not_eligible (__main__.Normalization.test_nested_lookalike_is_not_eligible) ... ok +test_original_transport_sha_detects_forged_timing (__main__.Normalization.test_original_transport_sha_detects_forged_timing) ... ok +test_partial_timing_payload_rejected (__main__.Normalization.test_partial_timing_payload_rejected) ... ok +test_prefix_boundary_and_reserved_token (__main__.Normalization.test_prefix_boundary_and_reserved_token) ... ok +test_sidecar_missing_duplicate_and_forged_paths (__main__.Normalization.test_sidecar_missing_duplicate_and_forged_paths) ... ok +test_snapshot_and_latest_reversible (__main__.Normalization.test_snapshot_and_latest_reversible) ... ok +test_snapshot_event_outside_recent_is_not_eligible (__main__.Normalization.test_snapshot_event_outside_recent_is_not_eligible) ... ok +test_wrong_event_and_source_are_preserved (__main__.Normalization.test_wrong_event_and_source_are_preserved) ... ok +test_wrong_timing_type_and_negative (__main__.Normalization.test_wrong_timing_type_and_negative) ... ok +test_all_events_beyond_recent_window (__main__.Reports.test_all_events_beyond_recent_window) ... ok +test_all_semantic_layers_compared (__main__.Reports.test_all_semantic_layers_compared) ... ok +test_digest_alone_is_not_enough (__main__.Reports.test_digest_alone_is_not_enough) ... ok +test_event_original_types_and_order (__main__.Reports.test_event_original_types_and_order) ... ok +test_event_start_and_ids (__main__.Reports.test_event_start_and_ids) ... ok +test_exclusions_keep_actual_values (__main__.Reports.test_exclusions_keep_actual_values) ... ok +test_handler_sets_and_counts (__main__.Reports.test_handler_sets_and_counts) ... ok +test_observation_full_layers (__main__.Reports.test_observation_full_layers) ... ok +test_product_digest_self_consistency (__main__.Reports.test_product_digest_self_consistency) ... ok +test_same_report (__main__.Reports.test_same_report) ... ok +test_scenario_existing_failures_preserved (__main__.Reports.test_scenario_existing_failures_preserved) ... ok +test_timing_digest_rule (__main__.Reports.test_timing_digest_rule) ... ok +test_unknown_or_missing_fields_rejected (__main__.Reports.test_unknown_or_missing_fields_rejected) ... ok +test_violation_presence_and_difference (__main__.Reports.test_violation_presence_and_difference) ... ok +test_O_cadence (__main__.S2Format.test_O_cadence) ... ok +test_counter_and_published_ids_binding (__main__.S2Format.test_counter_and_published_ids_binding) ... ok +test_diff_and_same_as_S_transport (__main__.S2Format.test_diff_and_same_as_S_transport) ... ok +test_digest_and_scenario_contradiction (__main__.S2Format.test_digest_and_scenario_contradiction) ... ok +test_event_no_drop_duplicate_remap (__main__.S2Format.test_event_no_drop_duplicate_remap) ... ok +test_event_original_field_types_mandatory (__main__.S2Format.test_event_original_field_types_mandatory) ... ok +test_guard_actual_not_assumed (__main__.S2Format.test_guard_actual_not_assumed) ... ok +test_harness_digest_allows_only_dictionary_order (__main__.S2Format.test_harness_digest_allows_only_dictionary_order) ... ok +test_join_is_copy_and_retains_normalization_proof (__main__.S2Format.test_join_is_copy_and_retains_normalization_proof) ... ok +test_kernel_cache_contradictions (__main__.S2Format.test_kernel_cache_contradictions) ... ok +test_lifecycle_guard_errors_and_boundaries (__main__.S2Format.test_lifecycle_guard_errors_and_boundaries) ... ok +test_missing_full_state_not_digest_only (__main__.S2Format.test_missing_full_state_not_digest_only) ... ok +test_normalized_digest_and_raw_tree_are_both_bound (__main__.S2Format.test_normalized_digest_and_raw_tree_are_both_bound) ... ok +test_product_event_shape_and_typed_array (__main__.S2Format.test_product_event_shape_and_typed_array) ... ok +test_raw_observation_binding (__main__.S2Format.test_raw_observation_binding) ... ok +test_roundtrip_tree_sha_and_raw_sha (__main__.S2Format.test_roundtrip_tree_sha_and_raw_sha) ... ok +test_s2_valid_and_not_formal_acceptance (__main__.S2Format.test_s2_valid_and_not_formal_acceptance) ... ok +test_state_witness_and_observation_mutation (__main__.S2Format.test_state_witness_and_observation_mutation) ... ok +test_stdout_exactly_one_line (__main__.S2Format.test_stdout_exactly_one_line) ... ok +test_autoload_class_and_script_import (__main__.S2Static.test_autoload_class_and_script_import) ... ok +test_comment_does_not_supply_proof (__main__.S2Static.test_comment_does_not_supply_proof) ... ok +test_current_probe (__main__.S2Static.test_current_probe) ... ok +test_full_state_and_godot_roundtrip_required (__main__.S2Static.test_full_state_and_godot_roundtrip_required) ... ok +test_no_changes_outside_preparation_or_step (__main__.S2Static.test_no_changes_outside_preparation_or_step) ... ok +test_no_event_cap_or_duplicate_report (__main__.S2Static.test_no_event_cap_or_duplicate_report) ... ok +test_pause_and_step_arguments (__main__.S2Static.test_pause_and_step_arguments) ... ok +test_textual_stringname_ordering (__main__.S2Static.test_textual_stringname_ordering) ... ok +test_unlisted_live_method_and_late_preparation (__main__.S2Static.test_unlisted_live_method_and_late_preparation) ... ok +test_variant_inference (__main__.S2Static.test_variant_inference) ... ok +test_X_recent_limit_and_counter (__main__.S3a.test_X_recent_limit_and_counter) ... ok +test_duplicate_JSON_key_rejected (__main__.S3a.test_duplicate_JSON_key_rejected) ... ok +test_e3_NA_cannot_be_PASS_or_applied (__main__.S3a.test_e3_NA_cannot_be_PASS_or_applied) ... ok +test_e3_coverage_input_and_event_count_binding (__main__.S3a.test_e3_coverage_input_and_event_count_binding) ... ok +test_e3_invented_codes_and_missing_load_code (__main__.S3a.test_e3_invented_codes_and_missing_load_code) ... ok +test_e3_valid_R_and_O_records (__main__.S3a.test_e3_valid_R_and_O_records) ... ok +test_envelope_duplicates_not_defect (__main__.S3a.test_envelope_duplicates_not_defect) ... ok +test_event_count_defect_not_silently_accepted (__main__.S3a.test_event_count_defect_not_silently_accepted) ... ok +test_exact_phase_keys (__main__.S3a.test_exact_phase_keys) ... ok +test_interval_gap_rejected (__main__.S3a.test_interval_gap_rejected) ... ok +test_invalid_input_accepted_is_not_PASS (__main__.S3a.test_invalid_input_accepted_is_not_PASS) ... ok +test_load_payload_and_pause_outcome (__main__.S3a.test_load_payload_and_pause_outcome) ... ok +test_operation_moved_outside_scenario_rejected (__main__.S3a.test_operation_moved_outside_scenario_rejected) ... ok +test_package_fixed_mutations_and_hashes (__main__.S3a.test_package_fixed_mutations_and_hashes) ... ok +test_probe_connection_required (__main__.S3a.test_probe_connection_required) ... ok +test_rejection_mutation_retained_as_defect (__main__.S3a.test_rejection_mutation_retained_as_defect) ... ok +test_save_refusal_makes_load_NA (__main__.S3a.test_save_refusal_makes_load_NA) ... ok +test_scenario_mutation_static_boundary (__main__.S3a.test_scenario_mutation_static_boundary) ... ok +test_signals_all_minutes_and_order (__main__.S3a.test_signals_all_minutes_and_order) ... ok +test_E5_cached_digest_defect_is_comparable (__main__.S3b.test_E5_cached_digest_defect_is_comparable) ... ok +test_NA_not_PASS (__main__.S3b.test_NA_not_PASS) ... ok +test_aliasing_cannot_be_PASS (__main__.S3b.test_aliasing_cannot_be_PASS) ... ok +test_aliasing_missing_record (__main__.S3b.test_aliasing_missing_record) ... ok +test_all_paths_and_ownership_R_O (__main__.S3b.test_all_paths_and_ownership_R_O) ... ok +test_digest_defect_other_checkpoint_still_rejected (__main__.S3b.test_digest_defect_other_checkpoint_still_rejected) ... ok +test_digest_materialization_required (__main__.S3b.test_digest_materialization_required) ... ok +test_empty_registry_not_NA (__main__.S3b.test_empty_registry_not_NA) ... ok +test_event_count_mismatch (__main__.S3b.test_event_count_mismatch) ... ok +test_facts_normalization_is_reversible (__main__.S3b.test_facts_normalization_is_reversible) ... ok +test_first_placeable_choice (__main__.S3b.test_first_placeable_choice) ... ok +test_interval_gap (__main__.S3b.test_interval_gap) ... ok +test_joined_s3b_self_comparison (__main__.S3b.test_joined_s3b_self_comparison) ... ok +test_load_X_not_digest_only (__main__.S3b.test_load_X_not_digest_only) ... ok +test_load_extra_event (__main__.S3b.test_load_extra_event) ... ok +test_missing_path_and_combination (__main__.S3b.test_missing_path_and_combination) ... ok +test_missing_preview_observation (__main__.S3b.test_missing_preview_observation) ... ok +test_missing_trial (__main__.S3b.test_missing_trial) ... ok +test_nested_mutation_required (__main__.S3b.test_nested_mutation_required) ... ok +test_no_staleness_assertion_for_non_tick (__main__.S3b.test_no_staleness_assertion_for_non_tick) ... ok +test_ownership_fact_dictionary_order_fallback (__main__.S3b.test_ownership_fact_dictionary_order_fallback) ... ok +test_path_order (__main__.S3b.test_path_order) ... ok +test_restore_extra_event (__main__.S3b.test_restore_extra_event) ... ok +test_signal_facts_cannot_be_dropped (__main__.S3b.test_signal_facts_cannot_be_dropped) ... ok +test_sort_rule_rejected (__main__.S3b.test_sort_rule_rejected) ... ok +test_static_handler_and_outside_mutations (__main__.S3b.test_static_handler_and_outside_mutations) ... ok +test_unpreviewed_choice (__main__.S3b.test_unpreviewed_choice) ... ok +test_wrong_registry_in_either_role (__main__.S3b.test_wrong_registry_in_either_role) ... ok +test_checkout_temp_destination_rejected (__main__.S4Bundle.test_checkout_temp_destination_rejected) ... ok +test_existing_output_never_overwritten (__main__.S4Bundle.test_existing_output_never_overwritten) ... ok +test_import_closure_rejections (__main__.S4Bundle.test_import_closure_rejections) ... ok +test_missing_bundle_manifest_seal_and_changed_bytes (__main__.S4Bundle.test_missing_bundle_manifest_seal_and_changed_bytes) ... ok +test_missing_private_evidence_and_extra_rejected (__main__.S4Bundle.test_missing_private_evidence_and_extra_rejected) ... ok +test_missing_profile_not_export_success (__main__.S4Bundle.test_missing_profile_not_export_success) ... ok +test_phase_role_pid_audio_and_guard_rejected (__main__.S4Bundle.test_phase_role_pid_audio_and_guard_rejected) ... ok +test_rebound_lifecycle_and_scenario_contradictions (__main__.S4Bundle.test_rebound_lifecycle_and_scenario_contradictions) ... ok +test_seal_normal_and_changes_not_native_proof (__main__.S4Bundle.test_seal_normal_and_changes_not_native_proof) ... ok +test_synthetic_phase_all_real_checkers_not_native_proof (__main__.S4Bundle.test_synthetic_phase_all_real_checkers_not_native_proof) ... ok +test_copied_manifest_root_and_destination_count_rejected (__main__.S4NativeBundleLogic.test_copied_manifest_root_and_destination_count_rejected) ... ok +test_failure_keeps_raw_and_no_bundle_without_starting_engine (__main__.S4NativeBundleLogic.test_failure_keeps_raw_and_no_bundle_without_starting_engine) ... ok +test_gate_none_success_not_boolean (__main__.S4NativeBundleLogic.test_gate_none_success_not_boolean) ... ok +test_receipt_and_source_rejection_matrix (__main__.S4NativeBundleLogic.test_receipt_and_source_rejection_matrix) ... ok +test_synthetic_full_bundle_positive_not_native_evidence (__main__.S4NativeBundleLogic.test_synthetic_full_bundle_positive_not_native_evidence) ... ok +test_check_accepts_true (__main__.S4ProbeAdmission.test_check_accepts_true) ... ok +test_check_rejects_false_all_errors (__main__.S4ProbeAdmission.test_check_rejects_false_all_errors) ... ok +test_run_admission_accepts_true_mock_launch_only (__main__.S4ProbeAdmission.test_run_admission_accepts_true_mock_launch_only) ... ok +test_run_admission_rejects_false_without_engine (__main__.S4ProbeAdmission.test_run_admission_rejects_false_without_engine) ... ok +test_nine_original_destinations_required (__main__.S4RemainingBindings.test_nine_original_destinations_required) ... ok +test_nonzero_determinism_rejected_after_real_join (__main__.S4RemainingBindings.test_nonzero_determinism_rejected_after_real_join) ... ok +test_owned_lifecycle_exit_diagnostic_and_profile_rejections (__main__.S4RemainingBindings.test_owned_lifecycle_exit_diagnostic_and_profile_rejections) ... ok +test_verifier_accepts_true_recomputes_raw (__main__.S4RemainingBindings.test_verifier_accepts_true_recomputes_raw) ... ok +test_verifier_rejects_false_with_every_error (__main__.S4RemainingBindings.test_verifier_rejects_false_with_every_error) ... ok +test_cached_verdict_not_trusted (__main__.S4StoredResultBindings.test_cached_verdict_not_trusted) ... ok +test_missing_sidecar_rejected_after_seal (__main__.S4StoredResultBindings.test_missing_sidecar_rejected_after_seal) ... ok +test_raw_joined_substitution_rejected_after_seal (__main__.S4StoredResultBindings.test_raw_joined_substitution_rejected_after_seal) ... ok +test_blob_transport_is_verified_and_bound (__main__.S5.test_blob_transport_is_verified_and_bound) ... ok +test_blob_trees_get_the_same_full_validation_as_inline (__main__.S5.test_blob_trees_get_the_same_full_validation_as_inline) ... ok +test_bundled_inputs_replace_unreadable_originals (__main__.S5.test_bundled_inputs_replace_unreadable_originals) ... ok +test_compare_and_digest_equal_s1_reference (__main__.S5.test_compare_and_digest_equal_s1_reference) ... ok +test_event_stream_replacement_is_existing_defect_not_pass (__main__.S5.test_event_stream_replacement_is_existing_defect_not_pass) ... ok +test_every_checkpoint_full_tree_verified_like_inline (__main__.S5.test_every_checkpoint_full_tree_verified_like_inline) +S5 drops the diff chain: each checkpoint carries a complete tree, verified alone. ... ok +test_fast_normalization_equals_original (__main__.S5.test_fast_normalization_equals_original) ... ok +test_labelled_harness_digest_falls_back_to_dictionary_order_only (__main__.S5.test_labelled_harness_digest_falls_back_to_dictionary_order_only) ... ok +test_lifecycle_binds_replacements_guard_text_and_blobs (__main__.S5.test_lifecycle_binds_replacements_guard_text_and_blobs) ... ok +test_manifest_numbers_keep_their_type (__main__.S5.test_manifest_numbers_keep_their_type) ... ok +test_memo_scope_same_results_and_restores_gc (__main__.S5.test_memo_scope_same_results_and_restores_gc) ... ok +test_path_copy_builders_equal_deepcopy_reference (__main__.S5.test_path_copy_builders_equal_deepcopy_reference) ... ok +test_probe_static_full_tree_blob_and_stream_requirements (__main__.S5.test_probe_static_full_tree_blob_and_stream_requirements) ... ok +test_publish_pairs_bound_to_source_causes (__main__.S5.test_publish_pairs_bound_to_source_causes) ... ok +test_signed_instance_ids_raw_kept_and_excluded (__main__.S5.test_signed_instance_ids_raw_kept_and_excluded) ... ok +test_validate_tree_equals_s1_reference_on_mutations (__main__.S5.test_validate_tree_equals_s1_reference_on_mutations) ... ok +test_bundled_destination_must_be_normalized_inside_readonly (__main__.S6Admission.test_bundled_destination_must_be_normalized_inside_readonly) ... ok +test_check_path_admits_registered_after_version (__main__.S6Admission.test_check_path_admits_registered_after_version) ... ok +test_check_path_rejects_unregistered_or_unchanged (__main__.S6Admission.test_check_path_rejects_unregistered_or_unchanged) ... ok +test_main_passes_sorted_registration_and_records_version (__main__.S6Admission.test_main_passes_sorted_registration_and_records_version) ... ok +test_root_manifest_pin_equals_collector_literal (__main__.S6Admission.test_root_manifest_pin_equals_collector_literal) ... ok +test_after_version_bundle_recomputes (__main__.S6Bundles.test_after_version_bundle_recomputes) ... ok +test_cross_version_comparison (__main__.S6Bundles.test_cross_version_comparison) ... ok +test_cross_version_pin_closure_and_seal_rejections (__main__.S6Bundles.test_cross_version_pin_closure_and_seal_rejections) ... ok +test_cross_version_real_difference_is_not_ok (__main__.S6Bundles.test_cross_version_real_difference_is_not_ok) ... ok +test_recompute_rejects_version_closure_and_label_changes (__main__.S6Bundles.test_recompute_rejects_version_closure_and_label_changes) ... ok +test_digest_state_values (__main__.S6SealAndProbe.test_digest_state_values) ... ok +test_probe_records_actual_digest_state (__main__.S6SealAndProbe.test_probe_records_actual_digest_state) ... ok +test_seal_records_every_directory (__main__.S6SealAndProbe.test_seal_records_every_directory) ... ok +test_admit_before_and_registered_after (__main__.S6SourceClosure.test_admit_before_and_registered_after) ... ok +test_before_map_is_the_frozen_source_map (__main__.S6SourceClosure.test_before_map_is_the_frozen_source_map) ... ok +test_before_map_tampering_rejected (__main__.S6SourceClosure.test_before_map_tampering_rejected) ... ok +test_unregistered_added_missing_and_malformed_registrations_rejected (__main__.S6SourceClosure.test_unregistered_added_missing_and_malformed_registrations_rejected) ... ok +test_fixed_scenario_paths (__main__.SourcesAndMetrics.test_fixed_scenario_paths) ... ok +test_metric_ranges (__main__.SourcesAndMetrics.test_metric_ranges) ... ok +test_source_closure_synthetic_registered_map (__main__.SourcesAndMetrics.test_source_closure_synthetic_registered_map) ... ok +test_source_pin_is_not_caller_controlled (__main__.SourcesAndMetrics.test_source_pin_is_not_caller_controlled) ... ok +test_array_order_and_all_differences (__main__.TypedTrees.test_array_order_and_all_differences) ... ok +test_components_and_sha (__main__.TypedTrees.test_components_and_sha) ... ok +test_deep_state_not_truncated (__main__.TypedTrees.test_deep_state_not_truncated) ... ok +test_duplicate_textual_keys_rejected (__main__.TypedTrees.test_duplicate_textual_keys_rejected) ... ok +test_exact_and_types (__main__.TypedTrees.test_exact_and_types) ... ok +test_nested_order_all_paths (__main__.TypedTrees.test_nested_order_all_paths) ... ok +test_nonstring_keys_keep_types_and_values (__main__.TypedTrees.test_nonstring_keys_keep_types_and_values) ... ok +test_unsupported_and_malformed (__main__.TypedTrees.test_unsupported_and_malformed) ... ok + +---------------------------------------------------------------------- +Ran 179 tests in 207.351s + +OK diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT_S6_SEATBELT_01.sha256 b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT_S6_SEATBELT_01.sha256 new file mode 100644 index 0000000..801880e --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT_S6_SEATBELT_01.sha256 @@ -0,0 +1 @@ +be2dd93c3cbb44b3ac74ab003f11ba368da3f4009b3b5595336f591dff52cceb UNIT_OUTPUT_S6_SEATBELT_01.txt diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT_S6_SEATBELT_01.txt b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT_S6_SEATBELT_01.txt new file mode 100644 index 0000000..b2ae828 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/UNIT_OUTPUT_S6_SEATBELT_01.txt @@ -0,0 +1,185 @@ +test_all_operations (__main__.Diffs.test_all_operations) ... ok +test_invalid_operations (__main__.Diffs.test_invalid_operations) ... ok +test_reconstruction_and_proofs (__main__.Diffs.test_reconstruction_and_proofs) ... ok +test_attempt_to_normalize_violation_rejected (__main__.Normalization.test_attempt_to_normalize_violation_rejected) ... ok +test_environment_values_differ_but_normal_form_equal (__main__.Normalization.test_environment_values_differ_but_normal_form_equal) ... ok +test_every_save_event_reversible (__main__.Normalization.test_every_save_event_reversible) ... ok +test_f3_keeps_relative_paths_and_words (__main__.Normalization.test_f3_keeps_relative_paths_and_words) ... ok +test_guard_mismatch (__main__.Normalization.test_guard_mismatch) ... ok +test_nested_lookalike_is_not_eligible (__main__.Normalization.test_nested_lookalike_is_not_eligible) ... ok +test_original_transport_sha_detects_forged_timing (__main__.Normalization.test_original_transport_sha_detects_forged_timing) ... ok +test_partial_timing_payload_rejected (__main__.Normalization.test_partial_timing_payload_rejected) ... ok +test_prefix_boundary_and_reserved_token (__main__.Normalization.test_prefix_boundary_and_reserved_token) ... ok +test_sidecar_missing_duplicate_and_forged_paths (__main__.Normalization.test_sidecar_missing_duplicate_and_forged_paths) ... ok +test_snapshot_and_latest_reversible (__main__.Normalization.test_snapshot_and_latest_reversible) ... ok +test_snapshot_event_outside_recent_is_not_eligible (__main__.Normalization.test_snapshot_event_outside_recent_is_not_eligible) ... ok +test_wrong_event_and_source_are_preserved (__main__.Normalization.test_wrong_event_and_source_are_preserved) ... ok +test_wrong_timing_type_and_negative (__main__.Normalization.test_wrong_timing_type_and_negative) ... ok +test_all_events_beyond_recent_window (__main__.Reports.test_all_events_beyond_recent_window) ... ok +test_all_semantic_layers_compared (__main__.Reports.test_all_semantic_layers_compared) ... ok +test_digest_alone_is_not_enough (__main__.Reports.test_digest_alone_is_not_enough) ... ok +test_event_original_types_and_order (__main__.Reports.test_event_original_types_and_order) ... ok +test_event_start_and_ids (__main__.Reports.test_event_start_and_ids) ... ok +test_exclusions_keep_actual_values (__main__.Reports.test_exclusions_keep_actual_values) ... ok +test_handler_sets_and_counts (__main__.Reports.test_handler_sets_and_counts) ... ok +test_observation_full_layers (__main__.Reports.test_observation_full_layers) ... ok +test_product_digest_self_consistency (__main__.Reports.test_product_digest_self_consistency) ... ok +test_same_report (__main__.Reports.test_same_report) ... ok +test_scenario_existing_failures_preserved (__main__.Reports.test_scenario_existing_failures_preserved) ... ok +test_timing_digest_rule (__main__.Reports.test_timing_digest_rule) ... ok +test_unknown_or_missing_fields_rejected (__main__.Reports.test_unknown_or_missing_fields_rejected) ... ok +test_violation_presence_and_difference (__main__.Reports.test_violation_presence_and_difference) ... ok +test_O_cadence (__main__.S2Format.test_O_cadence) ... ok +test_counter_and_published_ids_binding (__main__.S2Format.test_counter_and_published_ids_binding) ... ok +test_diff_and_same_as_S_transport (__main__.S2Format.test_diff_and_same_as_S_transport) ... ok +test_digest_and_scenario_contradiction (__main__.S2Format.test_digest_and_scenario_contradiction) ... ok +test_event_no_drop_duplicate_remap (__main__.S2Format.test_event_no_drop_duplicate_remap) ... ok +test_event_original_field_types_mandatory (__main__.S2Format.test_event_original_field_types_mandatory) ... ok +test_guard_actual_not_assumed (__main__.S2Format.test_guard_actual_not_assumed) ... ok +test_harness_digest_allows_only_dictionary_order (__main__.S2Format.test_harness_digest_allows_only_dictionary_order) ... ok +test_join_is_copy_and_retains_normalization_proof (__main__.S2Format.test_join_is_copy_and_retains_normalization_proof) ... ok +test_kernel_cache_contradictions (__main__.S2Format.test_kernel_cache_contradictions) ... ok +test_lifecycle_guard_errors_and_boundaries (__main__.S2Format.test_lifecycle_guard_errors_and_boundaries) ... ok +test_missing_full_state_not_digest_only (__main__.S2Format.test_missing_full_state_not_digest_only) ... ok +test_normalized_digest_and_raw_tree_are_both_bound (__main__.S2Format.test_normalized_digest_and_raw_tree_are_both_bound) ... ok +test_product_event_shape_and_typed_array (__main__.S2Format.test_product_event_shape_and_typed_array) ... ok +test_raw_observation_binding (__main__.S2Format.test_raw_observation_binding) ... ok +test_roundtrip_tree_sha_and_raw_sha (__main__.S2Format.test_roundtrip_tree_sha_and_raw_sha) ... ok +test_s2_valid_and_not_formal_acceptance (__main__.S2Format.test_s2_valid_and_not_formal_acceptance) ... ok +test_state_witness_and_observation_mutation (__main__.S2Format.test_state_witness_and_observation_mutation) ... ok +test_stdout_exactly_one_line (__main__.S2Format.test_stdout_exactly_one_line) ... ok +test_autoload_class_and_script_import (__main__.S2Static.test_autoload_class_and_script_import) ... ok +test_comment_does_not_supply_proof (__main__.S2Static.test_comment_does_not_supply_proof) ... ok +test_current_probe (__main__.S2Static.test_current_probe) ... ok +test_full_state_and_godot_roundtrip_required (__main__.S2Static.test_full_state_and_godot_roundtrip_required) ... ok +test_no_changes_outside_preparation_or_step (__main__.S2Static.test_no_changes_outside_preparation_or_step) ... ok +test_no_event_cap_or_duplicate_report (__main__.S2Static.test_no_event_cap_or_duplicate_report) ... ok +test_pause_and_step_arguments (__main__.S2Static.test_pause_and_step_arguments) ... ok +test_textual_stringname_ordering (__main__.S2Static.test_textual_stringname_ordering) ... ok +test_unlisted_live_method_and_late_preparation (__main__.S2Static.test_unlisted_live_method_and_late_preparation) ... ok +test_variant_inference (__main__.S2Static.test_variant_inference) ... ok +test_X_recent_limit_and_counter (__main__.S3a.test_X_recent_limit_and_counter) ... ok +test_duplicate_JSON_key_rejected (__main__.S3a.test_duplicate_JSON_key_rejected) ... ok +test_e3_NA_cannot_be_PASS_or_applied (__main__.S3a.test_e3_NA_cannot_be_PASS_or_applied) ... ok +test_e3_coverage_input_and_event_count_binding (__main__.S3a.test_e3_coverage_input_and_event_count_binding) ... ok +test_e3_invented_codes_and_missing_load_code (__main__.S3a.test_e3_invented_codes_and_missing_load_code) ... ok +test_e3_valid_R_and_O_records (__main__.S3a.test_e3_valid_R_and_O_records) ... ok +test_envelope_duplicates_not_defect (__main__.S3a.test_envelope_duplicates_not_defect) ... ok +test_event_count_defect_not_silently_accepted (__main__.S3a.test_event_count_defect_not_silently_accepted) ... ok +test_exact_phase_keys (__main__.S3a.test_exact_phase_keys) ... ok +test_interval_gap_rejected (__main__.S3a.test_interval_gap_rejected) ... ok +test_invalid_input_accepted_is_not_PASS (__main__.S3a.test_invalid_input_accepted_is_not_PASS) ... ok +test_load_payload_and_pause_outcome (__main__.S3a.test_load_payload_and_pause_outcome) ... ok +test_operation_moved_outside_scenario_rejected (__main__.S3a.test_operation_moved_outside_scenario_rejected) ... ok +test_package_fixed_mutations_and_hashes (__main__.S3a.test_package_fixed_mutations_and_hashes) ... ok +test_probe_connection_required (__main__.S3a.test_probe_connection_required) ... ok +test_rejection_mutation_retained_as_defect (__main__.S3a.test_rejection_mutation_retained_as_defect) ... ok +test_save_refusal_makes_load_NA (__main__.S3a.test_save_refusal_makes_load_NA) ... ok +test_scenario_mutation_static_boundary (__main__.S3a.test_scenario_mutation_static_boundary) ... ok +test_signals_all_minutes_and_order (__main__.S3a.test_signals_all_minutes_and_order) ... ok +test_E5_cached_digest_defect_is_comparable (__main__.S3b.test_E5_cached_digest_defect_is_comparable) ... ok +test_NA_not_PASS (__main__.S3b.test_NA_not_PASS) ... ok +test_aliasing_cannot_be_PASS (__main__.S3b.test_aliasing_cannot_be_PASS) ... ok +test_aliasing_missing_record (__main__.S3b.test_aliasing_missing_record) ... ok +test_all_paths_and_ownership_R_O (__main__.S3b.test_all_paths_and_ownership_R_O) ... ok +test_digest_defect_other_checkpoint_still_rejected (__main__.S3b.test_digest_defect_other_checkpoint_still_rejected) ... ok +test_digest_materialization_required (__main__.S3b.test_digest_materialization_required) ... ok +test_empty_registry_not_NA (__main__.S3b.test_empty_registry_not_NA) ... ok +test_event_count_mismatch (__main__.S3b.test_event_count_mismatch) ... ok +test_facts_normalization_is_reversible (__main__.S3b.test_facts_normalization_is_reversible) ... ok +test_first_placeable_choice (__main__.S3b.test_first_placeable_choice) ... ok +test_interval_gap (__main__.S3b.test_interval_gap) ... ok +test_joined_s3b_self_comparison (__main__.S3b.test_joined_s3b_self_comparison) ... ok +test_load_X_not_digest_only (__main__.S3b.test_load_X_not_digest_only) ... ok +test_load_extra_event (__main__.S3b.test_load_extra_event) ... ok +test_missing_path_and_combination (__main__.S3b.test_missing_path_and_combination) ... ok +test_missing_preview_observation (__main__.S3b.test_missing_preview_observation) ... ok +test_missing_trial (__main__.S3b.test_missing_trial) ... ok +test_nested_mutation_required (__main__.S3b.test_nested_mutation_required) ... ok +test_no_staleness_assertion_for_non_tick (__main__.S3b.test_no_staleness_assertion_for_non_tick) ... ok +test_ownership_fact_dictionary_order_fallback (__main__.S3b.test_ownership_fact_dictionary_order_fallback) ... ok +test_path_order (__main__.S3b.test_path_order) ... ok +test_restore_extra_event (__main__.S3b.test_restore_extra_event) ... ok +test_signal_facts_cannot_be_dropped (__main__.S3b.test_signal_facts_cannot_be_dropped) ... ok +test_sort_rule_rejected (__main__.S3b.test_sort_rule_rejected) ... ok +test_static_handler_and_outside_mutations (__main__.S3b.test_static_handler_and_outside_mutations) ... ok +test_unpreviewed_choice (__main__.S3b.test_unpreviewed_choice) ... ok +test_wrong_registry_in_either_role (__main__.S3b.test_wrong_registry_in_either_role) ... ok +test_checkout_temp_destination_rejected (__main__.S4Bundle.test_checkout_temp_destination_rejected) ... ok +test_existing_output_never_overwritten (__main__.S4Bundle.test_existing_output_never_overwritten) ... ok +test_import_closure_rejections (__main__.S4Bundle.test_import_closure_rejections) ... ok +test_missing_bundle_manifest_seal_and_changed_bytes (__main__.S4Bundle.test_missing_bundle_manifest_seal_and_changed_bytes) ... ok +test_missing_private_evidence_and_extra_rejected (__main__.S4Bundle.test_missing_private_evidence_and_extra_rejected) ... ok +test_missing_profile_not_export_success (__main__.S4Bundle.test_missing_profile_not_export_success) ... ok +test_phase_role_pid_audio_and_guard_rejected (__main__.S4Bundle.test_phase_role_pid_audio_and_guard_rejected) ... ok +test_rebound_lifecycle_and_scenario_contradictions (__main__.S4Bundle.test_rebound_lifecycle_and_scenario_contradictions) ... ok +test_seal_normal_and_changes_not_native_proof (__main__.S4Bundle.test_seal_normal_and_changes_not_native_proof) ... ok +test_synthetic_phase_all_real_checkers_not_native_proof (__main__.S4Bundle.test_synthetic_phase_all_real_checkers_not_native_proof) ... ok +test_copied_manifest_root_and_destination_count_rejected (__main__.S4NativeBundleLogic.test_copied_manifest_root_and_destination_count_rejected) ... ok +test_failure_keeps_raw_and_no_bundle_without_starting_engine (__main__.S4NativeBundleLogic.test_failure_keeps_raw_and_no_bundle_without_starting_engine) ... ok +test_gate_none_success_not_boolean (__main__.S4NativeBundleLogic.test_gate_none_success_not_boolean) ... ok +test_receipt_and_source_rejection_matrix (__main__.S4NativeBundleLogic.test_receipt_and_source_rejection_matrix) ... ok +test_synthetic_full_bundle_positive_not_native_evidence (__main__.S4NativeBundleLogic.test_synthetic_full_bundle_positive_not_native_evidence) ... ok +test_check_accepts_true (__main__.S4ProbeAdmission.test_check_accepts_true) ... ok +test_check_rejects_false_all_errors (__main__.S4ProbeAdmission.test_check_rejects_false_all_errors) ... ok +test_run_admission_accepts_true_mock_launch_only (__main__.S4ProbeAdmission.test_run_admission_accepts_true_mock_launch_only) ... ok +test_run_admission_rejects_false_without_engine (__main__.S4ProbeAdmission.test_run_admission_rejects_false_without_engine) ... ok +test_nine_original_destinations_required (__main__.S4RemainingBindings.test_nine_original_destinations_required) ... ok +test_nonzero_determinism_rejected_after_real_join (__main__.S4RemainingBindings.test_nonzero_determinism_rejected_after_real_join) ... ok +test_owned_lifecycle_exit_diagnostic_and_profile_rejections (__main__.S4RemainingBindings.test_owned_lifecycle_exit_diagnostic_and_profile_rejections) ... ok +test_verifier_accepts_true_recomputes_raw (__main__.S4RemainingBindings.test_verifier_accepts_true_recomputes_raw) ... ok +test_verifier_rejects_false_with_every_error (__main__.S4RemainingBindings.test_verifier_rejects_false_with_every_error) ... ok +test_cached_verdict_not_trusted (__main__.S4StoredResultBindings.test_cached_verdict_not_trusted) ... ok +test_missing_sidecar_rejected_after_seal (__main__.S4StoredResultBindings.test_missing_sidecar_rejected_after_seal) ... ok +test_raw_joined_substitution_rejected_after_seal (__main__.S4StoredResultBindings.test_raw_joined_substitution_rejected_after_seal) ... ok +test_blob_transport_is_verified_and_bound (__main__.S5.test_blob_transport_is_verified_and_bound) ... ok +test_blob_trees_get_the_same_full_validation_as_inline (__main__.S5.test_blob_trees_get_the_same_full_validation_as_inline) ... ok +test_bundled_inputs_replace_unreadable_originals (__main__.S5.test_bundled_inputs_replace_unreadable_originals) ... ok +test_compare_and_digest_equal_s1_reference (__main__.S5.test_compare_and_digest_equal_s1_reference) ... ok +test_event_stream_replacement_is_existing_defect_not_pass (__main__.S5.test_event_stream_replacement_is_existing_defect_not_pass) ... ok +test_every_checkpoint_full_tree_verified_like_inline (__main__.S5.test_every_checkpoint_full_tree_verified_like_inline) +S5 drops the diff chain: each checkpoint carries a complete tree, verified alone. ... ok +test_fast_normalization_equals_original (__main__.S5.test_fast_normalization_equals_original) ... ok +test_labelled_harness_digest_falls_back_to_dictionary_order_only (__main__.S5.test_labelled_harness_digest_falls_back_to_dictionary_order_only) ... ok +test_lifecycle_binds_replacements_guard_text_and_blobs (__main__.S5.test_lifecycle_binds_replacements_guard_text_and_blobs) ... ok +test_manifest_numbers_keep_their_type (__main__.S5.test_manifest_numbers_keep_their_type) ... ok +test_memo_scope_same_results_and_restores_gc (__main__.S5.test_memo_scope_same_results_and_restores_gc) ... ok +test_path_copy_builders_equal_deepcopy_reference (__main__.S5.test_path_copy_builders_equal_deepcopy_reference) ... ok +test_probe_static_full_tree_blob_and_stream_requirements (__main__.S5.test_probe_static_full_tree_blob_and_stream_requirements) ... ok +test_publish_pairs_bound_to_source_causes (__main__.S5.test_publish_pairs_bound_to_source_causes) ... ok +test_signed_instance_ids_raw_kept_and_excluded (__main__.S5.test_signed_instance_ids_raw_kept_and_excluded) ... ok +test_validate_tree_equals_s1_reference_on_mutations (__main__.S5.test_validate_tree_equals_s1_reference_on_mutations) ... ok +test_bundled_destination_must_be_normalized_inside_readonly (__main__.S6Admission.test_bundled_destination_must_be_normalized_inside_readonly) ... ok +test_check_path_admits_registered_after_version (__main__.S6Admission.test_check_path_admits_registered_after_version) ... ok +test_check_path_rejects_unregistered_or_unchanged (__main__.S6Admission.test_check_path_rejects_unregistered_or_unchanged) ... ok +test_main_passes_sorted_registration_and_records_version (__main__.S6Admission.test_main_passes_sorted_registration_and_records_version) ... ok +test_root_manifest_pin_equals_collector_literal (__main__.S6Admission.test_root_manifest_pin_equals_collector_literal) ... ok +test_after_version_bundle_recomputes (__main__.S6Bundles.test_after_version_bundle_recomputes) ... ok +test_cross_version_comparison (__main__.S6Bundles.test_cross_version_comparison) ... ok +test_cross_version_pin_closure_and_seal_rejections (__main__.S6Bundles.test_cross_version_pin_closure_and_seal_rejections) ... ok +test_cross_version_real_difference_is_not_ok (__main__.S6Bundles.test_cross_version_real_difference_is_not_ok) ... ok +test_recompute_rejects_version_closure_and_label_changes (__main__.S6Bundles.test_recompute_rejects_version_closure_and_label_changes) ... ok +test_digest_state_values (__main__.S6SealAndProbe.test_digest_state_values) ... ok +test_probe_records_actual_digest_state (__main__.S6SealAndProbe.test_probe_records_actual_digest_state) ... ok +test_seal_records_every_directory (__main__.S6SealAndProbe.test_seal_records_every_directory) ... ok +test_admit_before_and_registered_after (__main__.S6SourceClosure.test_admit_before_and_registered_after) ... ok +test_before_map_is_the_frozen_source_map (__main__.S6SourceClosure.test_before_map_is_the_frozen_source_map) ... ok +test_before_map_tampering_rejected (__main__.S6SourceClosure.test_before_map_tampering_rejected) ... ok +test_unregistered_added_missing_and_malformed_registrations_rejected (__main__.S6SourceClosure.test_unregistered_added_missing_and_malformed_registrations_rejected) ... ok +test_fixed_scenario_paths (__main__.SourcesAndMetrics.test_fixed_scenario_paths) ... ok +test_metric_ranges (__main__.SourcesAndMetrics.test_metric_ranges) ... ok +test_source_closure_synthetic_registered_map (__main__.SourcesAndMetrics.test_source_closure_synthetic_registered_map) ... ok +test_source_pin_is_not_caller_controlled (__main__.SourcesAndMetrics.test_source_pin_is_not_caller_controlled) ... ok +test_array_order_and_all_differences (__main__.TypedTrees.test_array_order_and_all_differences) ... ok +test_components_and_sha (__main__.TypedTrees.test_components_and_sha) ... ok +test_deep_state_not_truncated (__main__.TypedTrees.test_deep_state_not_truncated) ... ok +test_duplicate_textual_keys_rejected (__main__.TypedTrees.test_duplicate_textual_keys_rejected) ... ok +test_exact_and_types (__main__.TypedTrees.test_exact_and_types) ... ok +test_nested_order_all_paths (__main__.TypedTrees.test_nested_order_all_paths) ... ok +test_nonstring_keys_keep_types_and_values (__main__.TypedTrees.test_nonstring_keys_keep_types_and_values) ... ok +test_unsupported_and_malformed (__main__.TypedTrees.test_unsupported_and_malformed) ... ok + +---------------------------------------------------------------------- +Ran 179 tests in 206.326s + +OK diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/check_eq.py b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/check_eq.py index 6961ded..e1ee474 100644 --- a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/check_eq.py +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/check_eq.py @@ -973,7 +973,7 @@ def _check_e45(raw, evidence, previous): obs, detail = ev['observations'], ev['detail'] eq.require(eq.exact(detail['signals'], ev['signals']), 'scenario signals/facts binding') if scenario['id'].startswith('E5/'): - eq.require(set(detail) == {'target', 'location', 'direction', 'digest_materialized_before', 'held_before', 'held_after', 'signals'}, 'E5 detail fields') + eq.require(set(detail) == {'target', 'location', 'direction', 'latest_digest_dirty_before', 'held_before', 'held_after', 'signals'}, 'E5 detail fields') else: common = {'save_budget_before', 'save_budget_after', 'signals'} specific = { @@ -1067,7 +1067,9 @@ def _check_e45(raw, evidence, previous): _, target, location, direction = scenario['id'].split('/') eq.require(op == direction and all(detail[k] == v for k, v in [('target', target), ('location', location), ('direction', direction)]), 'E5 target/direction') eq.require(result['applicability'] == 'applied' and result['reason'] is None and len(obs) == 4, 'E5 coverage/NA') - eq.require(detail['digest_materialized_before'] is True, 'E5 digest not materialized') + # S6: the probe records the product's actual _latest_digest_dirty before the operation; + # false (materialized) or null (this version has no such field) only. + eq.require(detail['latest_digest_dirty_before'] is False or detail['latest_digest_dirty_before'] is None, 'E5 digest not materialized') minutes = [o['checkpoint']['minute'] for o in obs] eq.require(minutes == [minutes[0], minutes[0]+1, minutes[0]+1+int(direction == 'inside_out'), minutes[0]+2+int(direction == 'inside_out')], 'E5 preparation/operation/reset tick sequence') held = eq._transport(detail['held_before'], None) diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/compare_versions.py b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/compare_versions.py index 982e092..968be3a 100644 --- a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/compare_versions.py +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/compare_versions.py @@ -863,6 +863,44 @@ def check_source_closure(before_map, after_map, allowed_changed): return {'ok': not errors, 'errors': errors, 'before_sha256': digest, 'added': added, 'missing': missing, 'changed': changed, 'allowed_changed': sorted(allowed)} +# S6 (EQ_S6_AFTER_VERSION_PLAN): the fixed "before" of the source closure. The file holds +# the registered base product source map; SOURCE_SHA fixes its meaning, so it is checked +# on every read rather than trusted. +BEFORE_SOURCE_MAP = Path(__file__).resolve().parent / 'BEFORE_SOURCE_MAP.json' + + +def _unique_object(pairs): + keys = [key for key, _ in pairs] + require(len(keys) == len(set(keys)), 'duplicate JSON key') + return dict(pairs) + + +def before_source_map(): + value = json.loads(BEFORE_SOURCE_MAP.read_text(encoding='utf-8'), object_pairs_hook=_unique_object) + require(type(value) is dict and len(value) == 1407, 'before map is not 1407 sources') + for name, row in value.items(): + require(type(row) is dict and set(row) == {'bytes', 'sha256'} and type(row['bytes']) is int and + type(row['sha256']) is str and re.fullmatch('[0-9a-f]{64}', row['sha256']), 'before map row') + digest = hashlib.sha256(json.dumps(value, sort_keys=True, separators=(',', ':')).encode()).hexdigest() + require(digest == SOURCE_SHA, 'before map is not the frozen 1407-source map') + return value + + +def admit_source(source, registered): + """Admission rule of both versions (OPT_CONTRACT_T1 sections 2 and 4). + + registered is the sorted, duplicate-free list of OPT files the version changes. Empty + means the before version (no difference from the frozen map, as SOURCE_SHA required + before S6); otherwise the after version, whose changed set must equal registered with + no added or missing source. Anything else is rejected with every closure error.""" + require(type(registered) is list and all(type(p) is str for p in registered), 'registered change list required') + require(registered == sorted(set(registered)), 'registered changes must be sorted and unique') + closure = check_source_closure(before_source_map(), source, registered) + require(closure['ok'], 'source closure: ' + repr(closure['errors'])) + after = hashlib.sha256(json.dumps(source, sort_keys=True, separators=(',', ':')).encode()).hexdigest() + return dict(closure, version='after' if registered else 'before', after_sha256=after) + + K_COMPARE = frozenset(('absolute_minute', 'speed', 'paused', 'snapshot_version', '_accumulator', '_skip_next_process', '_pause_request_serial', '_abort_current_tick_requested', '_last_tick_advanced', '_phase_handlers')) diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/eq_probe.gd b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/eq_probe.gd index 89a46ba..74ddc8e 100644 --- a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/eq_probe.gd +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/eq_probe.gd @@ -844,8 +844,9 @@ func run_e5() -> void: "snapshot_published": returned = snapshot_reference "state_updated": returned = state_reference var held_copy: Dictionary = returned.duplicate(true) + # S6: the actual digest state just before the operation (null if this version has no such field). var detail: Dictionary = {"target": target, "location": location, "direction": direction, - "digest_materialized_before": true, "held_before": transport(held_copy)} + "latest_digest_dirty_before": runtime.get("_latest_digest_dirty"), "held_before": transport(held_copy)} if direction == "outside_in": if location == "dict": returned[&"systems"][&"runtime"][&"id_generator"][&"counters"]["__p28_eq_probe"] = 1 diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/run_eq.py b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/run_eq.py index 4e4f1b5..1287eab 100644 --- a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/run_eq.py +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/run_eq.py @@ -43,6 +43,9 @@ FROZEN = { 'registration/ROOT_PROPOSAL_BYTE_TRANSFER.json': '63197f650849084f769e487a76458361886a37090042f1e351851c75b0384da2', } require, sha, pin, write = verify.require, verify.sha, verify.pin, verify.write +# collector.inputs fixes the Root input manifest by this SHA (collect_p28_01.py inputs()); +# the bundled copy is held to the same value (S6; test_eq checks both literals agree). +ROOT_MANIFEST_SHA = '9dac0a51d52087e691c5723b4f78f171f7998c78b582b2b6c4c904798e77644d' def load_dependencies(root=ROOT): @@ -83,13 +86,21 @@ def bundled_inputs(copies, readonly): The formal native-verify runs under the Runner seatbelt, which cannot read the original read-only directory or the fixture outside the checkout. The same rule applies: every manifest destination lies in the original read-only directory, and its copy has the - recorded bytes and SHA. The manifest SHA is bound by the caller to the admission pin.""" + recorded bytes and SHA. The manifest SHA is bound by the caller to the admission pin. + + S6: the copy must also be the manifest collector.inputs fixes, and each destination must + be a normalized absolute path ('..' never appears) inside the read-only directory. This + is checked by text because the sandboxed verification cannot read the originals; the run + itself checked the resolved originals through collector.inputs.""" manifest_path = copies / 'ROOT_INPUT_MANIFEST.json' + require(sha(manifest_path) == ROOT_MANIFEST_SHA, 'Root input manifest changed') manifest = verify.read(manifest_path) pins = {} for row in manifest['files']: - destination = Path(row['destination']) - require(destination.is_absolute() and destination.is_relative_to(readonly), 'input escapes read-only directory') + text = row['destination'] + require(type(text) is str and os.path.isabs(text) and os.path.normpath(text) == text, 'input escapes read-only directory') + destination = Path(text) + require(destination.is_relative_to(readonly), 'input escapes read-only directory') relative = destination.relative_to(readonly) copy = copies / relative require(copy.is_file() and not copy.is_symlink(), 'bundled read-only input missing') @@ -114,14 +125,17 @@ def bundle_inputs(out, readonly, fixture, pins): require(bundled_inputs(target / 'readonly', readonly) == pins['readonly'], 'read-only input copies differ') -def actual_pins(root, readonly, fixture, engine, collector, standard, copies=None): +def actual_pins(root, readonly, fixture, engine, collector, standard, copies=None, registered=()): + """registered: the OPT files the measured version changes (S6, --opt-changed); empty for + the before version. eq.admit_source decides the version from the frozen before map.""" local = root / HERE.relative_to(ROOT) dependencies = {n: sha(root / n) for n in DEPENDENCIES} require(dependencies == DEPENDENCIES, 'dependencies changed') frozen = {n: sha(local / n) for n in FROZEN} require(frozen == FROZEN, 'frozen specification changed') source = collector.source_map(standard, root) - require(len(source) == 1407 and collector.digest(source) == eq.SOURCE_SHA, 'full 1407 source pin') + closure = eq.admit_source(source, list(registered)) + require(len(source) == 1407 and collector.digest(source) == closure['after_sha256'], 'full 1407 source pin') require(sha(fixture) == collector.FIXTURE_SHA and sha(engine) == collector.ENGINE_SHA, 'fixture/engine pin') inputs = collector.inputs(readonly) if copies is None else bundled_inputs(copies, readonly) require(len(inputs['files']) == 9, 'nine original destinations required') @@ -131,7 +145,8 @@ def actual_pins(root, readonly, fixture, engine, collector, standard, copies=Non machine = subprocess.check_output(['sysctl', '-n', 'hw.model'], text=True).strip() require(machine == 'Mac16,10', 'machine pin') return {'source': source, 'source_sha256': collector.digest(source), 'dependencies': dependencies, - 'frozen': frozen, 'worker': {n: sha(local / n) for n in sorted(verify.LOCAL_NAMES)}, + 'registered_changes': closure['allowed_changed'], 'source_closure': closure, + 'frozen': frozen, 'worker': {n: sha(local / n) for n in sorted(verify.LOCAL_NAMES | verify.DATA_NAMES)}, 'fixture': pin(fixture), 'engine': pin(engine), 'engine_version': collector.VERSION, 'project': source['project.godot'], 'readonly': inputs, 'original_manifest': manifest, 'machine': machine, 'platform': sys.platform} @@ -139,7 +154,7 @@ def actual_pins(root, readonly, fixture, engine, collector, standard, copies=Non def frozen_commit(source): commit = subprocess.check_output(['git', '-C', str(ROOT), 'rev-parse', 'HEAD'], text=True).strip() - for name in list(source) + [str((HERE / n).relative_to(ROOT)) for n in verify.LOCAL_NAMES]: + for name in list(source) + [str((HERE / n).relative_to(ROOT)) for n in sorted(verify.LOCAL_NAMES | verify.DATA_NAMES)]: data = subprocess.check_output(['git', '-C', str(ROOT), 'show', commit + ':' + name]) require(data == (ROOT / name).read_bytes(), 'not frozen S: ' + name) return commit @@ -264,7 +279,8 @@ def run(admission, out, collector, standard, outer, diag): 'profiles_retained': {str(p): collector.profile_files(p) for p in profiles}} try: execution['pins_after'] = actual_pins(ROOT, Path(admission['readonly_path']), Path(admission['fixture']), - Path(admission['engine']), collector, standard) + Path(admission['engine']), collector, standard, + registered=admission['pins']['registered_changes']) require((ROOT / 'project.godot').read_bytes() == public and (stage / 'project.godot').read_bytes() == public, 'project restoration') if error is None: with check.memo_scope(): @@ -288,15 +304,19 @@ def main(): mode.add_argument('--run', action='store_true') for name in ('readonly', 'fixture', 'engine', 'output'): parser.add_argument('--' + name, type=Path, required=True) + # S6: OPT_CONTRACT_T1 §4 runs this same command on the OPT S; each changed OPT file is + # registered here (repeat the option). None means the before version. + parser.add_argument('--opt-changed', action='append', default=[], metavar='PATH') args = parser.parse_args() try: readonly, fixture, engine, out = [p.resolve() for p in (args.readonly, args.fixture, args.engine, args.output)] require(not out.exists(), 'new output required') collector, standard, outer, diag = load_dependencies() - pins = actual_pins(ROOT, readonly, fixture, engine, collector, standard) + pins = actual_pins(ROOT, readonly, fixture, engine, collector, standard, registered=sorted(args.opt_changed)) static = check.check_probe((HERE / 'eq_probe.gd').read_text()) require(static['ok'], 'probe checker: ' + repr(static['errors'])) - admission = {'measured_source': 'S_eq-native-not-Q', 'candidate_Q_measured': False, + version = pins['source_closure']['version'] + admission = {'measured_source': verify.MEASURED[version], 'version': version, 'candidate_Q_measured': False, 'commit': frozen_commit(pins['source']), 'source_map': pins['source'], 'pins': pins, 'readonly_path': str(readonly), 'fixture': str(fixture), 'engine': str(engine), 'phases': verify.PHASES, 'plan': plan(collector, standard, engine, fixture, out)} diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/test_eq.py b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/test_eq.py index 6f8dd9d..29d0fde 100644 --- a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/test_eq.py +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/test_eq.py @@ -1067,7 +1067,7 @@ def e45_fixture(role='R'): post['checkpoint']['latest'] = transport(after_held) post['checkpoint']['computed_latest_digest'] = 'c'*64 current = observed(tree, minute+1) - detail = {'target': target, 'location': location, 'direction': direction, 'digest_materialized_before': True, + detail = {'target': target, 'location': location, 'direction': direction, 'latest_digest_dirty_before': False, 'held_before': transport(held), 'held_after': transport(after_held)} emit('E5/'+target+'/'+location+'/'+direction, direction, [begin, baseline, post, copy.deepcopy(current)], detail) return raw, evidence, previous @@ -1132,7 +1132,7 @@ class S3b(unittest.TestCase): self.reject(lambda r, e, p: e[5]['detail'].update(held_after=e[5]['detail']['held_before'])) def test_digest_materialization_required(self): - self.reject(lambda r, e, p: e[5]['detail'].update(digest_materialized_before=False)) + self.reject(lambda r, e, p: e[5]['detail'].update(latest_digest_dirty_before=True)) def test_NA_not_PASS(self): self.reject(lambda r, e, p: r['scenarios'][18]['result'].update(applicability='PASS')) @@ -1371,16 +1371,28 @@ def s4_owned_fixture(directory, item, pid): ('process.json', 'started.json', 'ended.json', 'adapter-owned-cleanup.json', 'outer-owned-finally.json')}} -def s4_bundle_fixture(directory, collector, standard): - """Synthetic receipts only. Production validators are real; no Godot claim.""" +def s4_bundle_fixture(directory, collector, standard, registered=(), pin_overrides=None): + """Synthetic receipts only. Production validators are real; no Godot claim. + S6: registered gives an after-version admission whose map changes exactly those OPT + files (synthetic SHAs); pin_overrides replaces non-product pins.""" source = collector.source_map(standard, verifier.ROOT) + if registered: + source = copy.deepcopy(source) + for name in registered: source[name] = {'bytes': source[name]['bytes'], 'sha256': 'f'*64} + closure = eq.admit_source(source, list(registered)) for name in ('eq_probe.gd',): (directory/name).write_bytes((verifier.HERE/name).read_bytes()) (directory/'profile_guard.gd').write_text('synthetic guard bytes') (directory/'guarded.gd').write_text(driver.wrapper_text(directory)) verifier.write(directory/'root-input-manifest.json', {'synthetic_not_native': True}) pins = {'worker': {'eq_probe.gd': verifier.sha(directory/'eq_probe.gd')}, 'readonly': {'files': {'run-r02/profile_guard.gd': verifier.sha(directory/'profile_guard.gd')}, - 'manifest_sha256': verifier.sha(directory/'root-input-manifest.json')}} + 'manifest_sha256': verifier.sha(directory/'root-input-manifest.json')}, + 'registered_changes': closure['allowed_changed'], 'source_closure': closure, + 'dependencies': dict(driver.DEPENDENCIES), 'frozen': dict(driver.FROZEN), + 'fixture': {'bytes': 7, 'sha256': collector.FIXTURE_SHA}, 'engine': {'bytes': 1, 'sha256': collector.ENGINE_SHA}, + 'engine_version': collector.VERSION, 'original_manifest': {'synthetic_not_native': True}, + 'machine': 'synthetic', 'platform': 'synthetic'} + pins.update(pin_overrides or {}) commands = [collector.argv_for(Path('/synthetic/Godot'), directory/'stage', directory/'guarded.gd', True), collector.parse_argv(Path('/synthetic/Godot'), directory/'stage', directory/'eq_probe.gd'), collector.parse_argv(Path('/synthetic/Godot'), directory/'stage', directory/'guarded.gd')] + [ @@ -1412,8 +1424,8 @@ def s4_bundle_fixture(directory, collector, standard): for kind in ('startup', 'runtime'): retained[item[kind+'_profile']] = row['profile_copies'][kind]['files'] rows.append(row) cleanup.append({'pid': pid, 'engine_ended': True, 'outer_cleanup_errors': [], 'foreign_process_or_group_signals': 0}) - admission = {'source_map': source, 'phases': verifier.PHASES, 'plan': plan, 'pins': pins, - 'measured_source': 'S_eq-native-not-Q', 'candidate_Q_measured': False, + admission = {'source_map': source, 'phases': verifier.PHASES, 'plan': plan, 'pins': pins, 'commit': 'synthetic-' + closure['version'], + 'version': closure['version'], 'measured_source': verifier.MEASURED[closure['version']], 'candidate_Q_measured': False, 'readonly_path': '/synthetic/readonly', 'fixture': '/synthetic/fixture', 'engine': '/synthetic/Godot'} verifier.write(directory/'admission.json', admission) return {'passed': True, 'error': None, 'cleanup_errors': [], 'cleanup': cleanup, 'admission': admission, @@ -1594,7 +1606,7 @@ class S4ProbeAdmission(unittest.TestCase): errors = [] if ok else ['first static violation', 'second static violation'] with patch.object(sys, 'argv', argv), \ patch.object(driver, 'load_dependencies', return_value=(None, None, None, None)), \ - patch.object(driver, 'actual_pins', return_value={'source': {}}), \ + patch.object(driver, 'actual_pins', return_value={'source': {}, 'source_closure': {'version': 'before'}}), \ patch.object(checker, 'check_probe', return_value={'ok': ok, 'errors': errors}) as probe, \ patch.object(driver, 'frozen_commit', return_value='synthetic'), \ patch.object(driver, 'plan', return_value=[]), \ @@ -1685,7 +1697,7 @@ class S4StoredResultBindings(unittest.TestCase): # exercised without a mock by S4NativeBundleLogic and S4RemainingBindings. with synthetic_directory() as name: directory = Path(name) - admission = dict(readonly_path=name, fixture=name, engine=name, pins={}) + admission = dict(readonly_path=name, fixture=name, engine=name, pins={'registered_changes': []}) verifier.write(directory/'execution.json', {'admission': admission}) result = {'phases': {'R-A': {'raw': {'kind': 'raw'}, 'joined': {'kind': 'joined'}, 'proofs': [{'sidecar': 'required'}], 'checker': {'ok': True}}}} @@ -1699,7 +1711,7 @@ class S4StoredResultBindings(unittest.TestCase): verifier.write(directory/'R-A'/(key+'.json'), value) verifier.seal(directory) with patch.object(driver, 'load_dependencies', return_value=(None, None, None, None)), \ - patch.object(driver, 'actual_pins', return_value={}), \ + patch.object(driver, 'actual_pins', return_value={'registered_changes': []}), \ patch.object(verifier, 'recompute', return_value=result) as recompute: with self.assertRaisesRegex(eq.EvidenceError, 'recomputed results differ|copy differs'): verifier.verify(verifier.ROOT, directory) @@ -1713,6 +1725,7 @@ class S4StoredResultBindings(unittest.TestCase): # S5 (EQ_S5_SCALE_PLAN r01/r02): content-addressed blobs, exact fast paths, event stream. import gzip import shutil +import subprocess import tempfile @@ -2283,6 +2296,8 @@ class S5(unittest.TestCase): (original / relative).parent.mkdir(parents=True, exist_ok=True); (original / relative).write_bytes(content) rows.append({'destination': str(original / relative), 'bytes': len(content), 'sha256': hashlib.sha256(content).hexdigest()}) original.joinpath('ROOT_INPUT_MANIFEST.json').write_text(json.dumps({'files': rows})) + manifest_pin = patch.object(driver, 'ROOT_MANIFEST_SHA', verifier.sha(original / 'ROOT_INPUT_MANIFEST.json')) + manifest_pin.start(); self.addCleanup(manifest_pin.stop) fixture = self.root / 'reference.variant'; fixture.write_bytes(b'fixture') pins = {'fixture': verifier.pin(fixture), 'readonly': driver.bundled_inputs(original, original)} driver.bundle_inputs(self.root, original, fixture, pins) @@ -2298,8 +2313,11 @@ class S5(unittest.TestCase): outside = json.loads((self.root / 'inputs' / 'readonly' / 'ROOT_INPUT_MANIFEST.json').read_text()) outside['files'][0]['destination'] = '/elsewhere/a.py' (self.root / 'inputs' / 'readonly' / 'ROOT_INPUT_MANIFEST.json').write_text(json.dumps(outside)) - with self.assertRaisesRegex(eq.EvidenceError, 'input escapes read-only directory'): + with self.assertRaisesRegex(eq.EvidenceError, 'Root input manifest changed'): driver.bundled_inputs(self.root / 'inputs' / 'readonly', original) + with patch.object(driver, 'ROOT_MANIFEST_SHA', verifier.sha(self.root / 'inputs' / 'readonly' / 'ROOT_INPUT_MANIFEST.json')): + with self.assertRaisesRegex(eq.EvidenceError, 'input escapes read-only directory'): + driver.bundled_inputs(self.root / 'inputs' / 'readonly', original) def test_probe_static_full_tree_blob_and_stream_requirements(self): probe = (verifier.HERE/'eq_probe.gd').read_text() @@ -2319,5 +2337,298 @@ class S5(unittest.TestCase): self.assertFalse(checker.check_probe(probe.replace(old, new))['ok']) +# S6 (EQ_S6_AFTER_VERSION_PLAN): the after version through the frozen harness, the +# cross-version comparison, and the three low-severity review findings. +OPT_FILE = 'autoload/simulation_runtime.gd' + + +def s6_after_map(*names): + after = copy.deepcopy(eq.before_source_map()) + for name in names: after[name] = {'bytes': after[name]['bytes'], 'sha256': 'f'*64} + return after + + +def s6_sealed_bundle(directory, logic, registered=(), pin_overrides=None): + execution = s4_bundle_fixture(directory, logic.collector, logic.standard, registered, pin_overrides) + # The production parallel path of native-verify (one worker process per role phase). + with patch.object(logic.standard, 'profile_path', side_effect=lambda name: Path('/private')/name): + result = verifier.recompute(directory, execution, logic.collector, logic.standard, logic.diag, parallel=True) + verifier.write(directory/'execution.json', execution) + verifier.write(directory/'results.json', result) + for phase, values in result['phases'].items(): + for name, value in values.items(): verifier.write(directory/phase/(name+'.json'), value) + verifier.seal(directory) + return result + + +class S6SourceClosure(unittest.TestCase): + def test_before_map_is_the_frozen_source_map(self): + before = eq.before_source_map() + self.assertEqual(len(before), 1407) + self.assertTrue(eq.check_source_closure(before, before, [])['ok']) + self.assertIn(OPT_FILE, before) + + def test_before_map_tampering_rejected(self): + original = json.loads(eq.BEFORE_SOURCE_MAP.read_text()) + changed = copy.deepcopy(original); changed[OPT_FILE]['sha256'] = 'f'*64 + fewer = copy.deepcopy(original); fewer.pop(OPT_FILE) + row = json.dumps(original[OPT_FILE]) + duplicate = '{' + json.dumps(OPT_FILE) + ': ' + row + ', ' + json.dumps(original, sort_keys=True)[1:] + with synthetic_directory() as name: + for label, content in (('changed', json.dumps(changed)), ('fewer', json.dumps(fewer)), ('duplicate', duplicate), + ('extra field', json.dumps({**original, OPT_FILE: {**original[OPT_FILE], 'x': 1}}))): + target = Path(name)/(label.replace(' ', '-')+'.json'); target.write_text(content) + with self.subTest(label=label), patch.object(eq, 'BEFORE_SOURCE_MAP', target), \ + self.assertRaises(eq.EvidenceError): + eq.before_source_map() + + def test_admit_before_and_registered_after(self): + before = eq.admit_source(eq.before_source_map(), []) + self.assertEqual((before['version'], before['changed'], before['after_sha256']), ('before', [], eq.SOURCE_SHA)) + names = sorted([OPT_FILE, 'scripts/core/simulation_snapshot.gd']) + after = eq.admit_source(s6_after_map(*names), names) + self.assertEqual((after['version'], after['changed'], after['allowed_changed']), ('after', names, names)) + self.assertNotEqual(after['after_sha256'], eq.SOURCE_SHA) + + def test_unregistered_added_missing_and_malformed_registrations_rejected(self): + before = eq.before_source_map() + added = s6_after_map(OPT_FILE); added['scripts/core/new_file.gd'] = {'bytes': 1, 'sha256': 'a'*64} + missing = s6_after_map(OPT_FILE); missing.pop('scripts/core/simulation_snapshot.gd') + outside = sorted(set(before) - eq.OPT_PATHS)[0] + cases = [ + ('unregistered change', s6_after_map(OPT_FILE), []), + ('registered but unchanged', before, [OPT_FILE]), + ('registered subset only', s6_after_map(OPT_FILE, 'scripts/core/simulation_snapshot.gd'), [OPT_FILE]), + ('outside OPT paths', s6_after_map(outside), [outside]), + ('added source', added, [OPT_FILE]), + ('missing source', missing, [OPT_FILE]), + ('duplicate registration', s6_after_map(OPT_FILE), [OPT_FILE, OPT_FILE]), + ('unsorted registration', s6_after_map(OPT_FILE, 'scripts/core/command_queue.gd'), ['scripts/core/simulation_snapshot.gd', 'scripts/core/command_queue.gd']), + ('tuple registration', s6_after_map(OPT_FILE), (OPT_FILE,)), + ] + for label, source, registered in cases: + with self.subTest(label=label), self.assertRaises(eq.EvidenceError): + eq.admit_source(source, registered) + + +class S6Admission(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.collector, cls.standard, cls.outer, cls.diag = driver.load_dependencies() + + def pins(self, source, registered): + original_sha = driver.sha + def synthetic_sha(path): + if Path(path) == Path('/synthetic/fixture'): return self.collector.FIXTURE_SHA + if Path(path) == Path('/synthetic/Godot'): return self.collector.ENGINE_SHA + return original_sha(path) + with synthetic_directory() as name: + root = Path(name) + (root/'ROOT_INPUT_MANIFEST.json').write_text(json.dumps({'files': [{'destination': str(n)} for n in range(9)]})) + with patch.object(driver, 'sha', side_effect=synthetic_sha), \ + patch.object(driver.subprocess, 'check_output', return_value='Mac16,10\n'), \ + patch.object(driver, 'pin', return_value={'bytes': 1, 'sha256': 'a'*64}), \ + patch.object(self.collector, 'source_map', return_value=source), \ + patch.object(self.collector, 'inputs', return_value={'files': {str(n): 'sha' for n in range(9)}}): + return driver.actual_pins(verifier.ROOT, root, Path('/synthetic/fixture'), Path('/synthetic/Godot'), + self.collector, self.standard, registered=registered) + + def test_check_path_admits_registered_after_version(self): + pins = self.pins(s6_after_map(OPT_FILE), [OPT_FILE]) + self.assertEqual(pins['registered_changes'], [OPT_FILE]) + self.assertEqual((pins['source_closure']['version'], pins['source_closure']['changed']), ('after', [OPT_FILE])) + self.assertIn('BEFORE_SOURCE_MAP.json', pins['worker']) + before = self.pins(eq.before_source_map(), []) + self.assertEqual((before['source_closure']['version'], before['source_sha256']), ('before', eq.SOURCE_SHA)) + + def test_check_path_rejects_unregistered_or_unchanged(self): + for label, source, registered in (('unregistered', s6_after_map(OPT_FILE), []), + ('unchanged', eq.before_source_map(), [OPT_FILE])): + with self.subTest(label=label), self.assertRaisesRegex(eq.EvidenceError, 'source closure'): + self.pins(source, registered) + + def test_main_passes_sorted_registration_and_records_version(self): + with synthetic_directory() as name: + argv = ['run_eq.py', '--check', '--readonly', name, '--fixture', name, '--engine', name, + '--output', str(Path(name)/'new-output'), '--opt-changed', 'scripts/core/simulation_snapshot.gd', + '--opt-changed', OPT_FILE] + pins = {'source': {}, 'source_closure': {'version': 'after'}} + with patch.object(sys, 'argv', argv), \ + patch.object(driver, 'load_dependencies', return_value=(None, None, None, None)), \ + patch.object(driver, 'actual_pins', return_value=pins) as actual, \ + patch.object(checker, 'check_probe', return_value={'ok': True, 'errors': []}), \ + patch.object(driver, 'frozen_commit', return_value='synthetic'), \ + patch.object(driver, 'plan', return_value=[]), \ + patch('builtins.print') as output: + self.assertEqual(driver.main(), 0) + self.assertEqual(actual.call_args.kwargs['registered'], sorted([OPT_FILE, 'scripts/core/simulation_snapshot.gd'])) + admission = json.loads(output.call_args.args[0]) + self.assertEqual((admission['version'], admission['measured_source']), ('after', 'S_opt-native-not-Q')) + self.assertFalse(admission['candidate_Q_measured']) + + def test_root_manifest_pin_equals_collector_literal(self): + collector_text = (verifier.ROOT/driver.COLLECTOR).read_text() + inputs_body = collector_text[collector_text.index('def inputs(readonly):'):collector_text.index('def reused_observations')] + self.assertEqual(inputs_body.count(driver.ROOT_MANIFEST_SHA), 1) + + def test_bundled_destination_must_be_normalized_inside_readonly(self): + with synthetic_directory() as name: + root = Path(name); readonly = root/'readonly'; copies = root/'copies'; copies.mkdir() + (copies/'a.py').write_bytes(b'alpha') + for destination in (str(readonly/'..'/'copies'/'a.py'), str(readonly)+'/./a.py', 'relative/a.py'): + manifest = copies/'ROOT_INPUT_MANIFEST.json' + manifest.write_text(json.dumps({'files': [{'destination': destination, 'bytes': 5, + 'sha256': hashlib.sha256(b'alpha').hexdigest()}]})) + with self.subTest(destination=destination), \ + patch.object(driver, 'ROOT_MANIFEST_SHA', verifier.sha(manifest)), \ + self.assertRaisesRegex(eq.EvidenceError, 'input escapes read-only directory'): + driver.bundled_inputs(copies, readonly) + + +class S6Bundles(unittest.TestCase): + """A sealed before bundle and a sealed after bundle per class, each built by the real + recompute (no part mocked). The cross-version comparison runs unmocked on them, for + the positive path and for real differences; tampering runs on APFS clones (cp -c), + so copies take no space and the suite stays within the validation limit.""" + @classmethod + def setUpClass(cls): + cls.collector, cls.standard, cls.outer, cls.diag = driver.load_dependencies() + cls.versions = synthetic_directory(); root = Path(cls.versions.name) + cls.before, cls.after = root/'before', root/'after' + cls.before.mkdir(); cls.after.mkdir() + s6_sealed_bundle(cls.before, cls) + cls.after_result = s6_sealed_bundle(cls.after, cls, registered=[OPT_FILE]) + cls.directory, cls.execution = cls.before, verifier.read(cls.before/'execution.json') + + @classmethod + def tearDownClass(cls): + cls.versions.cleanup() + + recompute = S4NativeBundleLogic.recompute + + def copied(self, source, name): + target = Path(self.versions.name)/name + subprocess.run(['/bin/cp', '-c', '-R', str(source), str(target)], check=True) + self.addCleanup(shutil.rmtree, target) + verifier.check_seal(target) + return target + + def resealed(self, directory, mutate, name='execution.json'): + """Change a recorded file of a copy and seal it again (no recomputation).""" + for seal in ('bundle.json', 'seal.json'): (directory/seal).unlink() + if name == 'execution.json': + execution = verifier.read(directory/'execution.json'); mutate(execution['admission']) + for old in ('execution.json', 'admission.json'): (directory/old).unlink() + verifier.write(directory/'execution.json', execution); verifier.write(directory/'admission.json', execution['admission']) + else: + value = verifier.read(directory/name); mutate(value) + (directory/name).unlink(); verifier.write(directory/name, value) + verifier.seal(directory) + + def test_recompute_rejects_version_closure_and_label_changes(self): + mutations = [ + ('registered without change', lambda x: x['admission']['pins'].update(registered_changes=[OPT_FILE])), + ('closure record', lambda x: x['admission']['pins']['source_closure'].update(changed=[OPT_FILE])), + ('version', lambda x: x['admission'].update(version='after')), + ('label', lambda x: x['admission'].update(measured_source='S_opt-native-not-Q')), + ('registration missing', lambda x: x['admission']['pins'].pop('registered_changes')), + ] + for name, mutate in mutations: + value = copy.deepcopy(self.execution); mutate(value) + with self.subTest(name=name), self.assertRaises((eq.EvidenceError, KeyError)): self.recompute(value) + + def test_after_version_bundle_recomputes(self): + result = self.after_result + self.assertEqual((result['version'], result['measured_source'], result['registered_changes']), + ('after', 'S_opt-native-not-Q', [OPT_FILE])) + self.assertFalse(result['candidate_Q_measured']) + self.assertTrue(all(c['ok'] and c['differences'] == [] for c in result['comparisons'].values())) + self.assertEqual(verifier.read(self.after/'results.json'), result) + + def test_cross_version_comparison(self): + result = verifier.compare_bundles(self.before, self.after) + self.assertTrue(result['ok']) + self.assertEqual(set(result['comparisons']), {'R', 'O'}) + self.assertTrue(all(c['ok'] and c['differences'] == [] for c in result['comparisons'].values())) + self.assertEqual(result['versions']['after']['source_closure']['changed'], [OPT_FILE]) + self.assertEqual(result['versions']['before']['measured_source'], 'S_eq-native-not-Q') + # The synthetic E5 aliasing defects are reported per version, never turned into a pass. + self.assertTrue(result['existing_defects']['after']['R']) + self.assertFalse(result['after_all_e_pass']) + self.assertFalse(result['formal_acceptance']) + for label, call in (('swapped', lambda: verifier.compare_bundles(self.after, self.before)), + ('same bundle', lambda: verifier.compare_bundles(self.before, self.before))): + with self.subTest(label=label), self.assertRaises(eq.EvidenceError): call() + + def test_cross_version_pin_closure_and_seal_rejections(self): + drifted = self.copied(self.after, 'drifted') + self.resealed(drifted, lambda a: a['pins'].update(frozen={'SPEC.md': 'f'*64})) + with self.assertRaisesRegex(eq.EvidenceError, 'non-product pin differs between versions: frozen'): + verifier.compare_bundles(self.before, drifted) + closure = self.copied(self.after, 'closure') + self.resealed(closure, lambda a: a['pins']['source_closure'].update(changed=[])) + with self.assertRaisesRegex(eq.EvidenceError, 'after bundle version/closure'): + verifier.compare_bundles(self.before, closure) + label = self.copied(self.after, 'label') + self.resealed(label, lambda a: a.update(measured_source='S_eq-native-not-Q')) + with self.assertRaisesRegex(eq.EvidenceError, 'after bundle version/closure'): + verifier.compare_bundles(self.before, label) + extra = self.copied(self.after, 'extra') + (extra/'extra.json').write_text('{}') + with self.assertRaisesRegex(eq.EvidenceError, 'manifest/file/directory mismatch'): + verifier.compare_bundles(self.before, extra) + + def test_cross_version_real_difference_is_not_ok(self): + # A real state difference in the sealed after report, found by the unmocked comparison. + changed = self.copied(self.after, 'changed') + self.resealed(changed, lambda report: report['checkpoints'][-1]['K'].update(speed=7), name='R-A/joined.json') + result = verifier.compare_bundles(self.before, changed) + self.assertFalse(result['ok']) + self.assertTrue(result['comparisons']['R']['differences']) + self.assertEqual(result['comparisons']['O']['differences'], []) + + +class S6SealAndProbe(unittest.TestCase): + def test_seal_records_every_directory(self): + with synthetic_directory() as name: + directory = Path(name) + (directory/'R-A'/'startup-profile').mkdir(parents=True) + verifier.write(directory/'R-A'/'raw.json', {'synthetic_not_native': True}) + verifier.seal(directory) + self.assertEqual(verifier.read(directory/'bundle.json')['directories'], ['R-A', 'R-A/startup-profile']) + verifier.check_seal(directory) + (directory/'R-A'/'startup-profile').rmdir() + with self.assertRaisesRegex(eq.EvidenceError, 'manifest/file/directory mismatch'): verifier.check_seal(directory) + (directory/'R-A'/'startup-profile').mkdir(); (directory/'extra-empty').mkdir() + with self.assertRaisesRegex(eq.EvidenceError, 'manifest/file/directory mismatch'): verifier.check_seal(directory) + + def test_probe_records_actual_digest_state(self): + probe = (verifier.HERE/'eq_probe.gd').read_text() + self.assertEqual(probe.count('"latest_digest_dirty_before": runtime.get("_latest_digest_dirty")'), 1) + self.assertNotIn('digest_materialized_before', probe) + self.assertTrue(checker.check_probe(probe)['ok']) + + def test_digest_state_values(self): + def e5_rows(evidence): + return [row for row in evidence if row['id'].startswith('E5/')] + def refreshed(raw, evidence): + # The raw result facts are the probe's copy of the detail; keep them bound. + results = {s['id']: s['result'] for s in raw['scenarios']} + for row in evidence: results[row['id']]['facts'] = checker.e45_facts(row['detail']) + raw, evidence, previous = e45_fixture() + self.assertEqual(len(e5_rows(evidence)), 16) + for row in e5_rows(evidence): row['detail']['latest_digest_dirty_before'] = None + refreshed(raw, evidence) + self.assertEqual(len(checker.check_e45(raw, evidence, previous)), 21) + for label, mutate, message in (('dirty', lambda d: d.update(latest_digest_dirty_before=True), 'E5 digest not materialized'), + ('integer', lambda d: d.update(latest_digest_dirty_before=0), 'E5 digest not materialized'), + ('missing', lambda d: d.pop('latest_digest_dirty_before'), 'E5 detail fields')): + raw, evidence, previous = e45_fixture() + mutate(e5_rows(evidence)[0]['detail']) + refreshed(raw, evidence) + with self.subTest(label=label), self.assertRaisesRegex(eq.EvidenceError, message): + checker.check_e45(raw, evidence, previous) + + if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/verify_eq.py b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/verify_eq.py index 99e93f8..f6ec03e 100644 --- a/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/verify_eq.py +++ b/docs/plans/original-completion-2026-10-02/execution/p28-02/eq/verify_eq.py @@ -31,6 +31,10 @@ def split_evidence(files): LOCAL_NAMES = {'run_eq.py', 'verify_eq.py', 'check_eq.py', 'compare_versions.py', 'eq_probe.gd', 'test_eq.py'} +# S6: EQ data pinned with the code (the fixed before map of the source closure). +DATA_NAMES = {'BEFORE_SOURCE_MAP.json'} +# S6: the version a native measured, from its admitted source closure. Never Q. +MEASURED = {'before': 'S_eq-native-not-Q', 'after': 'S_opt-native-not-Q'} require = eq.require @@ -71,10 +75,18 @@ def inventory(directory, seals=False): return result +def directories(directory): + """Every directory below the bundle root, empty ones included (S6: the verifier binds + each /startup-profile directory's existence, so the seal records them too).""" + directory = Path(directory) + return sorted(p.relative_to(directory).as_posix() for p in directory.rglob('*') if p.is_dir() and not p.is_symlink()) + + def seal(directory): directory = Path(directory) require(not (directory / 'bundle.json').exists() and not (directory / 'seal.json').exists(), 'already sealed') - write(directory / 'bundle.json', {'schema': 'p28-02-eq-bundle-v1', 'files': inventory(directory)}) + write(directory / 'bundle.json', {'schema': 'p28-02-eq-bundle-v2', 'files': inventory(directory), + 'directories': directories(directory)}) write(directory / 'seal.json', {'bundle': pin(directory / 'bundle.json')}) @@ -82,7 +94,8 @@ def check_seal(directory): directory = Path(directory) manifest, sealed = read(directory / 'bundle.json'), read(directory / 'seal.json') require(sealed == {'bundle': pin(directory / 'bundle.json')}, 'seal mismatch') - require(manifest == {'schema': 'p28-02-eq-bundle-v1', 'files': inventory(directory)}, 'manifest/file mismatch') + require(manifest == {'schema': 'p28-02-eq-bundle-v2', 'files': inventory(directory), + 'directories': directories(directory)}, 'manifest/file/directory mismatch') def check_audio(audio, pid): @@ -191,7 +204,7 @@ def recompute(directory, execution, collector, standard, diag, parallel=False): require(execution['passed'] is True and execution['error'] is None and execution['cleanup_errors'] == [], 'execution failed') admission = execution['admission'] require(read(directory / 'admission.json') == admission, 'admission copy') - require(admission['measured_source'] == 'S_eq-native-not-Q' and admission['candidate_Q_measured'] is False, 'Q measurement forbidden') + require(admission['candidate_Q_measured'] is False, 'Q measurement forbidden') require(admission['phases'] == PHASES, 'phase plan') from run_eq import wrapper_text original_out = Path(admission['plan'][0]['folder']).parent @@ -209,7 +222,11 @@ def recompute(directory, execution, collector, standard, diag, parallel=False): static = check.check_probe((directory / 'eq_probe.gd').read_text()) require(static['ok'], 'probe checker: ' + repr(static['errors'])) source = admission['source_map'] - require(len(source) == 1407 and collector.digest(source) == eq.SOURCE_SHA, 'full source map pin') + # S6: the frozen before map and the registered OPT change set decide the version; the + # recorded closure, version and label must be exactly what the closure gives again. + closure = eq.admit_source(source, admission['pins']['registered_changes']) + require(admission['pins']['source_closure'] == closure and admission['version'] == closure['version'], 'recorded source closure/version') + require(admission['measured_source'] == MEASURED[closure['version']], 'measured version label') require(execution['source_after'] == source and execution['player_before'] == execution['player_after'], 'source/player preservation') require(execution['pins_after'] == admission['pins'], 'pin preservation') rows = execution['phases'] @@ -281,10 +298,65 @@ def recompute(directory, execution, collector, standard, diag, parallel=False): result = eq.compare_reports(joined[role + '-A'], joined[role + '-B']) require(result['ok'] and result['differences'] == [], 'same-role determinism failed: ' + role) comparisons[role] = result - return wire({'phases': results, 'comparisons': comparisons, 'measured_source': 'S_eq-native-not-Q', + return wire({'phases': results, 'comparisons': comparisons, 'measured_source': admission['measured_source'], + 'version': closure['version'], 'registered_changes': closure['allowed_changed'], 'candidate_Q_measured': False, 'original_credit': 0, 'formal_acceptance': False}) +VERSION_PINS = ('dependencies', 'frozen', 'worker', 'fixture', 'engine', 'engine_version', 'readonly', + 'original_manifest', 'machine', 'platform') + + +def existing_defects(directory, phase): + """Scenario outcomes the stored checker recorded as existing product defects.""" + checker = read(Path(directory) / phase / 'checker.json') + require(checker['ok'] is True, 'stored checker failed: ' + phase) + return [{'scenario': row['id'], 'status': row['status'], 'kinds': [defect['kind'] for defect in row['defects']]} + for key in ('e3', 'e45') for row in checker[key] if row['status'].startswith('existing-defect')] + + +def compare_bundles(before, after): + """S6 cross-version comparison of two sealed EQ bundles (SPEC §2/§3.2, OPT_CONTRACT_T1 §2-§4). + + Each bundle is proven by its own version's native-verify (raw recomputation, same-role + determinism, checkout pins). Here both seals, versions and source closures are checked + again, every non-product pin must be equal (the EQ, DIAG, collector and RESTART bytes, + fixture, engine and inputs), and the sealed joined reports of the A phases are compared + by compare_reports. Differences, exclusions and existing defects are all returned.""" + before, after = Path(before).resolve(), Path(after).resolve() + require(before != after, 'two different bundles required') + admissions = {} + for version, directory in (('before', before), ('after', after)): + check_seal(directory) + execution = read(directory / 'execution.json') + require(execution['passed'] is True and execution['error'] is None, version + ' native failed') + admission = execution['admission'] + require(read(directory / 'admission.json') == admission, version + ' admission copy') + closure = eq.admit_source(admission['source_map'], admission['pins']['registered_changes']) + require(closure == admission['pins']['source_closure'] and closure['version'] == version == admission['version'] and + admission['measured_source'] == MEASURED[version] and admission['candidate_Q_measured'] is False, + version + ' bundle version/closure') + admissions[version] = admission + for key in VERSION_PINS: + require(admissions['before']['pins'][key] == admissions['after']['pins'][key], 'non-product pin differs between versions: ' + key) + comparisons, reports = {}, {} + for role in ('R', 'O'): + phase = role + '-A' + for version, directory in (('before', before), ('after', after)): + eq.add_blob_root(directory / phase / 'evidence' / 'blobs') + reports[version] = read(directory / phase / 'joined.json') + eq.ACTIVE_PROFILES[:] = [reports['before']['profile_root'], reports['after']['profile_root']] + comparisons[role] = eq.compare_reports(reports['before'], reports['after']) + defects = {version: {role: existing_defects(directory, role + '-A') for role in ('R', 'O')} + for version, directory in (('before', before), ('after', after))} + return wire({'ok': all(c['ok'] and c['differences'] == [] for c in comparisons.values()), + 'versions': {version: {'commit': a['commit'], 'measured_source': a['measured_source'], + 'source_closure': a['pins']['source_closure']} for version, a in admissions.items()}, + 'comparisons': comparisons, 'existing_defects': defects, + 'after_all_e_pass': not any(defects['after'].values()), + 'formal_acceptance': False, 'original_credit': 0}) + + def verify(project_root, directory): from run_eq import load_dependencies, actual_pins project_root, directory = Path(project_root).resolve(), Path(directory).resolve() @@ -297,7 +369,8 @@ def verify(project_root, directory): # against them by run_eq before any phase. inputs = directory / 'inputs' require(actual_pins(project_root, Path(admission['readonly_path']), inputs / 'fixture' / Path(admission['fixture']).name, - Path(admission['engine']), collector, standard, copies=inputs / 'readonly') == admission['pins'], + Path(admission['engine']), collector, standard, copies=inputs / 'readonly', + registered=admission['pins']['registered_changes']) == admission['pins'], 'actual input/source/EQ pins differ') result = recompute(directory, execution, collector, standard, diag, parallel=True) require(result == read(directory / 'results.json'), 'recomputed results differ') @@ -310,6 +383,20 @@ def verify(project_root, directory): def main(): if sys.argv[1:] == ['--phase-worker']: return phase_worker() + if sys.argv[1:2] == ['--compare-versions']: + parser = argparse.ArgumentParser(description=compare_bundles.__doc__) + parser.add_argument('--compare-versions', action='store_true', required=True) + parser.add_argument('--before', type=Path, required=True) + parser.add_argument('--after', type=Path, required=True) + args = parser.parse_args() + try: + with check.memo_scope(): + result = compare_bundles(args.before, args.after) + print(json.dumps({'status': 'compared', 'result': result}, ensure_ascii=False, allow_nan=False)) + return 0 if result['ok'] else 1 + except (ValueError, OSError, KeyError, TypeError, IndexError) as error: + print(json.dumps({'status': 'failed', 'error': str(error), 'formal_acceptance': False})) + return 1 parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('--project-root', type=Path, required=True) args = parser.parse_args()