diff --git a/README.md b/README.md index 38f60806..bf3295a1 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ See [repository layout](docs/repository.md). The engine supports original and 2×/3×/4× crisp scaling, plus an optional HD artwork setting. Bundled mods have SD/HD artwork; the reviewed base-game pack covers a complete light-player banking sequence and selected enemies, boss, -equipment, projectiles, effects and terrain: 4,296 of 5,753 original pictures +equipment, projectiles, effects and terrain: 4,350 of 5,753 original pictures are now included. [The HD backlog](docs/hd-backlog.md) records the remaining artwork and drafts awaiting review. diff --git a/data/hd/hd.json b/data/hd/hd.json index f34cbc06..e729144b 100644 --- a/data/hd/hd.json +++ b/data/hd/hd.json @@ -85873,6 +85873,1156 @@ "source_sha256": "bb033800d9d6d6e385536a5274f9c04a52adbb4be840a8e073a67e4f83e8fd6d" } ] + }, + { + "base_asset": 66960, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10590-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "a17bb2619101a92cd0dce97d32f674e96c24ad108772a41cf63d3b87d624ef89" + } + ], + "name": "source-only-selected:10590" + }, + { + "base_asset": 66961, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10591-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "71c4a17c5021a9db96a8d37c023218f20be4c4a2198c1ff30620ad026e7ada42" + } + ], + "name": "source-only-selected:10591" + }, + { + "base_asset": 66962, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10592-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "41f9d7ae6193e37c1278e6a7de3e8b9932847d9be50c1b41ca92cb0222f0e085" + } + ], + "name": "source-only-selected:10592" + }, + { + "base_asset": 66963, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10593-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "7a1d9aa0018735ff1b4b4080eb48afe251cbd27db0a0eb0eee61c0b19eaba3d1" + } + ], + "name": "source-only-selected:10593" + }, + { + "base_asset": 66964, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10594-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "5f29b313cc3bad04baf6d3d4a3b1b0363b0fc023866ac12f363b5a7c6887ca29" + } + ], + "name": "source-only-selected:10594" + }, + { + "base_asset": 66965, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10595-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "6c3b3e03b60d18af0631b6582175e55ba5e5933cffda5950a098605268486c3b" + } + ], + "name": "source-only-selected:10595" + }, + { + "base_asset": 66966, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10596-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "5d27907f9e91168bebea60c5d0f709d9a4d8f053a051022f48071f80f5721f56" + } + ], + "name": "source-only-selected:10596" + }, + { + "base_asset": 66967, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10597-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "e5d1874e16a8f4322b9b4808eb1026003fb10ed8b9175228d56e21736b9a0df3" + } + ], + "name": "source-only-selected:10597" + }, + { + "base_asset": 66968, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10598-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "d17cf7c5acfad0f7b84c7b8cb0bb7a94a8ed18fdcfcb57a2f65e07df7a9835dd" + } + ], + "name": "source-only-selected:10598" + }, + { + "base_asset": 66969, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10599-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "7ec663da4cc7dd5a635a537d57e6b5025c1f39420566c32bbdc5f76fed1dddc2" + } + ], + "name": "source-only-selected:10599" + }, + { + "base_asset": 66970, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059a-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "54d0734b67175100b121ecd6a2cdd1046a110ef40ea18e92541fcdda423ee0d1" + } + ], + "name": "source-only-selected:1059a" + }, + { + "base_asset": 66971, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059b-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "4840c9bc841e8db4aecda151c827cf3ff41d7dda4eea00831e4e74564f72bccf" + } + ], + "name": "source-only-selected:1059b" + }, + { + "base_asset": 66972, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059c-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "2fb56f74873342079a0b89fc5e6510c2e3ba9a4e82a855a0f2a443389080a8b4" + } + ], + "name": "source-only-selected:1059c" + }, + { + "base_asset": 66973, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059d-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "41547bb600440ba0c709a5b98c8435d657d23b279d60c419f759eb6178c11346" + } + ], + "name": "source-only-selected:1059d" + }, + { + "base_asset": 66975, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059f-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "25c796d1f13a4d6534c0d6bc88d0b8b83be0ea5d9a118ebd5dcdc96fc6586c7f" + } + ], + "name": "source-only-selected:1059f" + }, + { + "base_asset": 66976, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a0-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "d91e0b3dcdf14e2353eaca779830601b8029abd1345a8978993bd115c298cf1b" + } + ], + "name": "source-only-selected:105a0" + }, + { + "base_asset": 66977, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a1-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "258f9504e7d0b106413d255586e883168641211a2d73b933bc214ad8cc6c95ec" + } + ], + "name": "source-only-selected:105a1" + }, + { + "base_asset": 66978, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a2-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "9a281c8ac1a06d25a122697cf438c6f1966cb4c43bc3fdf973abfb85a0508b6e" + } + ], + "name": "source-only-selected:105a2" + }, + { + "base_asset": 66979, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a3-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "a7f1622cb059bf8351697eae7bb963c0772ec78b97704da9aa450355c235e408" + } + ], + "name": "source-only-selected:105a3" + }, + { + "base_asset": 66981, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a5-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "efae69700de04941a61d6e05b6f41c8066535c6a3080b462cc6ae432df97c471" + } + ], + "name": "source-only-selected:105a5" + }, + { + "base_asset": 66982, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a6-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "e578f248fc450f307a2267c13b056823e73bd5b22094398e9b29af74c9178bf4" + } + ], + "name": "source-only-selected:105a6" + }, + { + "base_asset": 66984, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a8-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "870bfc499b91c50fb67d20c01d58d2d1104cf38d6e67e2ca16e612fe5b61684e" + } + ], + "name": "source-only-selected:105a8" + }, + { + "base_asset": 66985, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a9-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "f0df9d03679e7504005e44e82e6821d5790d4d544fa1be0d975c3b146314550b" + } + ], + "name": "source-only-selected:105a9" + }, + { + "base_asset": 66986, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105aa-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "f014229de0bba435d2102c3c2c464fa696b20771b3c3d3ece1839031798a6e3f" + } + ], + "name": "source-only-selected:105aa" + }, + { + "base_asset": 66987, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ab-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "917f4183d3c7ca173634c406223fafa5b7c3cce413d2a6d89ef7cb0d2d8e34c9" + } + ], + "name": "source-only-selected:105ab" + }, + { + "base_asset": 66988, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ac-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "59a0e7cb0da82b8f36bc35f552f446ced26ae50dfeebae0da68da345bc3e8b47" + } + ], + "name": "source-only-selected:105ac" + }, + { + "base_asset": 66989, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ad-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "87b46a2271081f65243b32222d7f2be4dee48aa2207af0235a6e151d3552becc" + } + ], + "name": "source-only-selected:105ad" + }, + { + "base_asset": 66990, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ae-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "5784d89360bdecd4e1b421053151fec48694056a885d3b57e1fed3f52b6bdb49" + } + ], + "name": "source-only-selected:105ae" + }, + { + "base_asset": 66991, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105af-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "474d4651b402dc4ce52e1a79df6abc70f2864336d239c57ef6b3df75bf6101d8" + } + ], + "name": "source-only-selected:105af" + }, + { + "base_asset": 67056, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f0-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "2c5cf0545293da60e8dbbf18cadcc17fbcc90640ba32e7f25b10fe179186b81a" + } + ], + "name": "source-only-selected:105f0" + }, + { + "base_asset": 67057, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f1-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "06ff4661896028c3856f2459689807cc8d845e3e9537d5b3093bc0bd53ba54f6" + } + ], + "name": "source-only-selected:105f1" + }, + { + "base_asset": 67058, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f2-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "555f7499611ed6a6a225803cc17c3af7b5fc2d1031e11e6cf486d2852632ae3d" + } + ], + "name": "source-only-selected:105f2" + }, + { + "base_asset": 67060, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f4-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "5515cda249d00cda414aa4eb6bf0f7095fc8a7a9acc262af3b50ef677378a4f4" + } + ], + "name": "source-only-selected:105f4" + }, + { + "base_asset": 67061, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f5-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "8279c70bbeb529977840582edc70aa745ce249404a8677c95bb114fc2a4ffed0" + } + ], + "name": "source-only-selected:105f5" + }, + { + "base_asset": 67062, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f6-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "aac41f7821d334dfec8286fa2de6bbedfe6bb56e81a8a18ff2b6b30f555cca40" + } + ], + "name": "source-only-selected:105f6" + }, + { + "base_asset": 67063, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f7-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "2fe353664e7ada9204034568b74de34b80bcfe4167a3d8fc927ff1647f8d9ed5" + } + ], + "name": "source-only-selected:105f7" + }, + { + "base_asset": 67064, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f8-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "7e4322216ee9b149cdd2315ff2d831fb5ce7101efa5005e0b7006e904900d547" + } + ], + "name": "source-only-selected:105f8" + }, + { + "base_asset": 67065, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f9-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "ccde24b91f1b10182c0b1d02544613397794082e87cbe530dbc46fe4f3b887cc" + } + ], + "name": "source-only-selected:105f9" + }, + { + "base_asset": 67066, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fa-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "b22157c024746161224efc81a560de000503b03bfabf25dd0910f4acdc4df55d" + } + ], + "name": "source-only-selected:105fa" + }, + { + "base_asset": 67067, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fb-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "0ad7223e95a5cf71fe378faeb2ecf8eee50c421fd6dc0e7c7b47ff0ac4109088" + } + ], + "name": "source-only-selected:105fb" + }, + { + "base_asset": 67068, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fc-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "8421f46a6de911fcdf13d42ac0db351765a236edc25f6042e29cfd88d57a551c" + } + ], + "name": "source-only-selected:105fc" + }, + { + "base_asset": 67069, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fd-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "670254c8b494a0d1f958ca649845aa638be894860437dd020dca026fa5f6eba0" + } + ], + "name": "source-only-selected:105fd" + }, + { + "base_asset": 67070, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fe-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "4ea1b23682b1ea1570fad535f89922634654e2083c068307f6cb5f7ea9f9eb2a" + } + ], + "name": "source-only-selected:105fe" + }, + { + "base_asset": 67071, + "frame_count": 1, + "frames": [ + { + "file": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105ff-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "ea574ac0fed1c8a3f4eb96cf6ef2717d32c386230b1ec186359c4e93cf211578" + } + ], + "name": "source-only-selected:105ff" + }, + { + "base_asset": 67043, + "frame_count": 1, + "frames": [ + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/terrain-105e3-first-regional-source-campaign-20261012-v1/generated/tile-105e3-v1.png", + "frame": 0, + "logical_height": 32, + "logical_width": 32, + "origin": [ + 0, + 0 + ], + "source_sha256": "cc9f8705d55461e7f6846f454242e6a6e6dea192421e6248b48a3f0816c3952d" + } + ], + "name": "source-only-selected:105e3" + }, + { + "base_asset": 66386, + "frame_count": 9, + "frames": [ + { + "crop": [ + 0, + 0, + 418, + 418 + ], + "file": "jobs/bosses-10352-opening-localized-master-edit-v1/generated/remaster-opening-v1.png", + "frame": 0, + "logical_height": 96, + "logical_width": 96, + "origin": [ + 0, + 0 + ], + "source_sha256": "f843f0830de8b0a923dd7256f64c18df4cac3981fdeab10bf33e0ef478dad980" + }, + { + "crop": [ + 418, + 0, + 418, + 418 + ], + "file": "jobs/bosses-10352-1035a/generated/remaster-v2.png", + "frame": 1, + "logical_height": 96, + "logical_width": 96, + "origin": [ + 0, + 0 + ], + "source_sha256": "7029aaddd1830121fcd96d2b49e3f3eb2329652f960d4aea27717b32c5126cdc" + }, + { + "crop": [ + 836, + 0, + 418, + 418 + ], + "file": "jobs/bosses-10352-1035a/generated/remaster-v2.png", + "frame": 2, + "logical_height": 96, + "logical_width": 96, + "origin": [ + 0, + 0 + ], + "source_sha256": "bdd5657c4549a4abc96ca4d98e04c8b5caefdec561bb2f50891142f31c56c98f" + }, + { + "crop": [ + 0, + 418, + 418, + 418 + ], + "file": "jobs/bosses-10352-1035a/generated/remaster-v2.png", + "frame": 3, + "logical_height": 96, + "logical_width": 96, + "origin": [ + 0, + 0 + ], + "source_sha256": "b219c6e310ee000eb6265c6e63fc3c700edd40cb670509893c509084b33e9fdd" + }, + { + "crop": [ + 418, + 418, + 418, + 418 + ], + "file": "jobs/bosses-10352-1035a/generated/remaster-v2.png", + "frame": 4, + "logical_height": 96, + "logical_width": 96, + "origin": [ + 0, + 0 + ], + "source_sha256": "e664834a02e589b88124ddd1488fbae47796c4f73ed8e497aa8d0c5dab9038a9" + }, + { + "crop": [ + 836, + 418, + 418, + 418 + ], + "file": "jobs/bosses-10352-1035a/generated/remaster-v2.png", + "frame": 5, + "logical_height": 96, + "logical_width": 96, + "origin": [ + 0, + 0 + ], + "source_sha256": "33f87534a16d61e995cec4f2eed2682f0244801c2ad5def265a896bca63cd5b7" + }, + { + "crop": [ + 0, + 836, + 418, + 418 + ], + "file": "jobs/bosses-10352-1035a/generated/remaster-v2.png", + "frame": 6, + "logical_height": 96, + "logical_width": 96, + "origin": [ + 0, + 0 + ], + "source_sha256": "2c619c3503c610f0513cce600f190d2e4c91258bbc85d95347bcdbf660e53c59" + }, + { + "crop": [ + 418, + 836, + 418, + 418 + ], + "file": "jobs/bosses-10352-1035a/generated/remaster-v2.png", + "frame": 7, + "logical_height": 96, + "logical_width": 96, + "origin": [ + 0, + 0 + ], + "source_sha256": "187e622412853c2ba64848a9bc3798f1406ffac4b5979feb50539cf3c2583443" + }, + { + "crop": [ + 0, + 0, + 1254, + 1254 + ], + "file": "jobs/bosses-10352-1035a/generated/remaster-final-v4.png", + "frame": 8, + "logical_height": 96, + "logical_width": 96, + "origin": [ + 0, + 0 + ], + "source_sha256": "69d8d60425d903b2c2d9698ee4d6dc1d900cbed31d11b6358074ba30ded346e0" + } + ], + "name": "MOLE_PIC" } ] } diff --git a/data/hd/jobs/bosses-10352-1035a/generated/remaster-final-v4.png b/data/hd/jobs/bosses-10352-1035a/generated/remaster-final-v4.png new file mode 100644 index 00000000..8fbbd9f5 Binary files /dev/null and b/data/hd/jobs/bosses-10352-1035a/generated/remaster-final-v4.png differ diff --git a/data/hd/jobs/bosses-10352-1035a/generated/remaster-v2.png b/data/hd/jobs/bosses-10352-1035a/generated/remaster-v2.png new file mode 100644 index 00000000..b9cbfa45 Binary files /dev/null and b/data/hd/jobs/bosses-10352-1035a/generated/remaster-v2.png differ diff --git a/data/hd/jobs/bosses-10352-opening-localized-master-edit-v1/generated/remaster-opening-v1.png b/data/hd/jobs/bosses-10352-opening-localized-master-edit-v1/generated/remaster-opening-v1.png new file mode 100644 index 00000000..9ffc1a1c Binary files /dev/null and b/data/hd/jobs/bosses-10352-opening-localized-master-edit-v1/generated/remaster-opening-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10590-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10590-v1.png new file mode 100644 index 00000000..50d3841f Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10590-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10591-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10591-v1.png new file mode 100644 index 00000000..b3824c44 Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10591-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10592-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10592-v1.png new file mode 100644 index 00000000..f12f9a0d Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10592-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10593-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10593-v1.png new file mode 100644 index 00000000..88b97afa Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10593-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10594-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10594-v1.png new file mode 100644 index 00000000..69e93836 Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10594-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10595-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10595-v1.png new file mode 100644 index 00000000..54d69de9 Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10595-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10596-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10596-v1.png new file mode 100644 index 00000000..e117c326 Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10596-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10597-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10597-v1.png new file mode 100644 index 00000000..22154bb7 Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10597-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10598-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10598-v1.png new file mode 100644 index 00000000..6cff9af5 Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10598-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10599-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10599-v1.png new file mode 100644 index 00000000..2a167088 Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10599-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059a-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059a-v1.png new file mode 100644 index 00000000..50b79641 Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059a-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059b-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059b-v1.png new file mode 100644 index 00000000..e913517f Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059b-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059c-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059c-v1.png new file mode 100644 index 00000000..8b33ea4d Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059c-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059d-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059d-v1.png new file mode 100644 index 00000000..783ce234 Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059d-v1.png differ diff --git a/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059f-v1.png b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059f-v1.png new file mode 100644 index 00000000..699a6be9 Binary files /dev/null and b/data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059f-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a0-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a0-v1.png new file mode 100644 index 00000000..df47606f Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a0-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a1-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a1-v1.png new file mode 100644 index 00000000..d3edf684 Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a1-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a2-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a2-v1.png new file mode 100644 index 00000000..bd6579b5 Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a2-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a3-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a3-v1.png new file mode 100644 index 00000000..407ea6b9 Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a3-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a5-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a5-v1.png new file mode 100644 index 00000000..3fcfa9e6 Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a5-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a6-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a6-v1.png new file mode 100644 index 00000000..a281de9c Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a6-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a8-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a8-v1.png new file mode 100644 index 00000000..1f2a9ff1 Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a8-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a9-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a9-v1.png new file mode 100644 index 00000000..c5d8191d Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a9-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105aa-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105aa-v1.png new file mode 100644 index 00000000..49e8ced9 Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105aa-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ab-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ab-v1.png new file mode 100644 index 00000000..2af3d8fd Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ab-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ac-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ac-v1.png new file mode 100644 index 00000000..8f53d257 Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ac-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ad-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ad-v1.png new file mode 100644 index 00000000..ecec1875 Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ad-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ae-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ae-v1.png new file mode 100644 index 00000000..1f9cad72 Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ae-v1.png differ diff --git a/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105af-v1.png b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105af-v1.png new file mode 100644 index 00000000..80fd15ef Binary files /dev/null and b/data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105af-v1.png differ diff --git a/data/hd/jobs/terrain-105e3-first-regional-source-campaign-20261012-v1/generated/tile-105e3-v1.png b/data/hd/jobs/terrain-105e3-first-regional-source-campaign-20261012-v1/generated/tile-105e3-v1.png new file mode 100644 index 00000000..08bbecea Binary files /dev/null and b/data/hd/jobs/terrain-105e3-first-regional-source-campaign-20261012-v1/generated/tile-105e3-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f0-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f0-v1.png new file mode 100644 index 00000000..ff994417 Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f0-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f1-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f1-v1.png new file mode 100644 index 00000000..f1b640da Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f1-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f2-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f2-v1.png new file mode 100644 index 00000000..e044a6d6 Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f2-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f4-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f4-v1.png new file mode 100644 index 00000000..c0d697d5 Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f4-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f5-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f5-v1.png new file mode 100644 index 00000000..48792c7b Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f5-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f6-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f6-v1.png new file mode 100644 index 00000000..ad0b4e5c Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f6-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f7-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f7-v1.png new file mode 100644 index 00000000..43f7bbd4 Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f7-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f8-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f8-v1.png new file mode 100644 index 00000000..e6300a90 Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f8-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f9-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f9-v1.png new file mode 100644 index 00000000..c9ce482c Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f9-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fa-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fa-v1.png new file mode 100644 index 00000000..9877e5c0 Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fa-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fb-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fb-v1.png new file mode 100644 index 00000000..f08c133c Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fb-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fc-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fc-v1.png new file mode 100644 index 00000000..d75a795f Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fc-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fd-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fd-v1.png new file mode 100644 index 00000000..aa9af87f Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fd-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fe-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fe-v1.png new file mode 100644 index 00000000..cfa0782a Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fe-v1.png differ diff --git a/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105ff-v1.png b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105ff-v1.png new file mode 100644 index 00000000..c1927790 Binary files /dev/null and b/data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105ff-v1.png differ diff --git a/data/hd/provenance.json b/data/hd/provenance.json index 8885fbd3..869fdcc5 100644 --- a/data/hd/provenance.json +++ b/data/hd/provenance.json @@ -1,7 +1,7 @@ { "generator": "built-in image_gen tool (imagegen skill)", "generated_on": "2026-10-10", - "status": "4296 reviewed original picture frames registered as complete families or explicit standalone Terrain selections. Whole-catalog queues remain active; HD stays optional. Render reachability is recorded separately.", + "status": "4350 reviewed original picture frames registered as complete families or explicit standalone Terrain selections. Whole-catalog queues remain active; HD stays optional. Render reachability is recorded separately.", "rejected_variants": [ { "file": "light-player-bank-0-hd-v1.png", @@ -13011,6 +13011,217 @@ "mtime_ns": 1791774382487664961 }, "frame_bindings_sha256": "1953dcf5fe5a30df3e9edb92c57c20ea18294da6dfd05fe99a73878d7ee8f84e" + }, + { + "job_id": "terrain-10590-1059f", + "assets": [ + "10590", + "10591", + "10592", + "10593", + "10594", + "10595", + "10596", + "10597", + "10598", + "10599", + "1059a", + "1059b", + "1059c", + "1059d", + "1059f" + ], + "frames": 15, + "metadata": "hd.json", + "detail": "jobs/terrain-10590-1059f/candidate.json", + "coordinator_review": "jobs/terrain-10590-1059f/coordinator-review.json", + "runtime_qa": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-final-successor-metadata/jobs/terrain-10590-1059f/runtime-qa-exact-alias.json", + "review": "Literal independently qualified material decisions/current7b1\u20134 components retained; final54 actual4350 technical and disjoint six physical context reviews bound. No material reapproval or invocation epoch relabeling.", + "independent_review": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-small54-private-pending-metadata-preparation/terrain-10590-1059f/material-provenance-adapter.json", + "sha256": "545c7120bcb9e28c7ea001f69c8b39eeed607381c99639d950978598831c913c", + "size": 123862, + "mtime_ns": 1791781878767640123 + }, + "frame_bindings_sha256": "02f89e460bc1599d6d8d265d4f355a3859f6f3f22b13735b0024ef6cf4d8fa27", + "approval_scope": "complete_standalone_terrain_selection", + "original_fallback_assets": [ + "1059e" + ], + "full_inventory": [ + "10590", + "10591", + "10592", + "10593", + "10594", + "10595", + "10596", + "10597", + "10598", + "10599", + "1059a", + "1059b", + "1059c", + "1059d", + "1059e", + "1059f" + ] + }, + { + "job_id": "terrain-105a0-105af", + "assets": [ + "105a0", + "105a1", + "105a2", + "105a3", + "105a5", + "105a6", + "105a8", + "105a9", + "105aa", + "105ab", + "105ac", + "105ad", + "105ae", + "105af" + ], + "frames": 14, + "metadata": "hd.json", + "detail": "jobs/terrain-105a0-105af/candidate.json", + "coordinator_review": "jobs/terrain-105a0-105af/coordinator-review.json", + "runtime_qa": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-final-successor-metadata/jobs/terrain-105a0-105af/runtime-qa-exact-alias.json", + "review": "Literal independently qualified material decisions/current7b1\u20134 components retained; final54 actual4350 technical and disjoint six physical context reviews bound. No material reapproval or invocation epoch relabeling.", + "independent_review": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-small54-private-pending-metadata-preparation/terrain-105a0-105af/material-provenance-adapter.json", + "sha256": "8344b258cb635b53ab660fb5b13a6a5ba266d2b82ca6192367df3d5e095aa1f2", + "size": 114959, + "mtime_ns": 1791781878951035721 + }, + "frame_bindings_sha256": "537caf9f5c0d4e7699a6ce94c57c108dcf493aff7da94849f6c63a8f903070e3", + "approval_scope": "complete_standalone_terrain_selection", + "original_fallback_assets": [ + "105a4", + "105a7" + ], + "full_inventory": [ + "105a0", + "105a1", + "105a2", + "105a3", + "105a4", + "105a5", + "105a6", + "105a7", + "105a8", + "105a9", + "105aa", + "105ab", + "105ac", + "105ad", + "105ae", + "105af" + ] + }, + { + "job_id": "terrain-105f0-105ff-initial-source-terrain1-v1", + "assets": [ + "105f0", + "105f1", + "105f2", + "105f4", + "105f5", + "105f6", + "105f7", + "105f8", + "105f9", + "105fa", + "105fb", + "105fc", + "105fd", + "105fe", + "105ff" + ], + "frames": 15, + "metadata": "hd.json", + "detail": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/candidate.json", + "coordinator_review": "jobs/terrain-105f0-105ff-initial-source-terrain1-v1/coordinator-review.json", + "runtime_qa": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-final-successor-metadata/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/runtime-qa-exact-alias.json", + "review": "Literal independently qualified material decisions/current7b1\u20134 components retained; final54 actual4350 technical and disjoint six physical context reviews bound. No material reapproval or invocation epoch relabeling.", + "independent_review": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-small54-private-pending-metadata-preparation/terrain-105f0-105ff-initial-source-terrain1-v1/material-provenance-adapter.json", + "sha256": "6c30440d0893f2dcd3104e24a783ad8978cde70418be52415746afbb2e14f17e", + "size": 171204, + "mtime_ns": 1791781879171764449 + }, + "frame_bindings_sha256": "bd39cfd2079e9e4748c2a0a0ca69c0bbf237a39d68dba1c66c6a953826f7bf61", + "approval_scope": "complete_standalone_terrain_selection", + "original_fallback_assets": [ + "105f3" + ], + "full_inventory": [ + "105f0", + "105f1", + "105f2", + "105f3", + "105f4", + "105f5", + "105f6", + "105f7", + "105f8", + "105f9", + "105fa", + "105fb", + "105fc", + "105fd", + "105fe", + "105ff" + ] + }, + { + "job_id": "terrain-105e3-source-native-definition-small54-private", + "assets": [ + "105e3" + ], + "frames": 1, + "metadata": "hd.json", + "detail": "jobs/terrain-105e3-source-native-definition-small54-private/candidate.json", + "coordinator_review": "jobs/terrain-105e3-source-native-definition-small54-private/coordinator-review.json", + "runtime_qa": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-final-successor-metadata/jobs/terrain-105e3-source-native-definition-small54-private/runtime-qa-exact-alias.json", + "review": "Literal independently qualified material decisions/current7b1\u20134 components retained; final54 actual4350 technical and disjoint six physical context reviews bound. No material reapproval or invocation epoch relabeling.", + "independent_review": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-small54-private-pending-metadata-preparation/terrain-105e3-source-native-definition-small54-private/material-provenance-adapter.json", + "sha256": "81a9fbdfee1a2820cb06a57c35f8b963998079ac7c461fd8b382891162ef07e1", + "size": 17808, + "mtime_ns": 1791781879225264778 + }, + "frame_bindings_sha256": "48422dd516472d898602f763c258bbb65db34c9264c198e0d9b005d2bfe2552c" + }, + { + "job_id": "bosses-10352-opening-localized-master-edit-v1", + "assets": [ + "10352", + "10353", + "10354", + "10355", + "10356", + "10357", + "10358", + "10359", + "1035a" + ], + "frames": 9, + "metadata": "hd.json", + "detail": "jobs/bosses-10352-opening-localized-master-edit-v1/provenance.json", + "coordinator_review": "jobs/bosses-10352-opening-localized-master-edit-v1/coordinator-review.json", + "runtime_qa": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-final-successor-metadata/jobs/bosses-10352-opening-localized-master-edit-v1/runtime-qa-exact-alias.json", + "review": "Literal independently qualified material decisions/current7b1\u20134 components retained; final54 actual4350 technical and disjoint six physical context reviews bound. No material reapproval or invocation epoch relabeling.", + "independent_review": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-small54-private-pending-metadata-preparation/bosses-10352-opening-localized-master-edit-v1/material-provenance-adapter.json", + "sha256": "7fb38f287a1929bcacf6aec54b2af9caa10c37f4496c2f82d5d21c243dc69ec0", + "size": 159361, + "mtime_ns": 1791781879311138368 + }, + "frame_bindings_sha256": "907c1ee129169b3fc64c413fb8a3004c706538fee83dce216f5060668fb456b0" } ], "jobs": [ @@ -13110,69 +13321,81 @@ "coverage_added": 0 } }, - "registered_frame_count": 4296, - "registration_updated_at_utc": "2026-10-12T03:37:11.385522+00:00", + "registered_frame_count": 4350, + "registration_updated_at_utc": "2026-10-12T06:42:58.759841+00:00", "runtime_validation": { - "registered_snapshot_frames": 4296, - "frames": 4296, - "all_four_scale_outputs": 17184, - "scale_outputs": 17184, - "proof_composition": "Exact unchanged3592 source/raw/default renderer bindings and carried proofs plus704 current native1\u20134 component byte aliases.9443 genuine declarations resolve to5892 exact previously closed all1\u20134 effective context identities,47136 retained source/selected arrays. Explicit independently audited zero-delta alias activation; no new context raster or pixel review and no whole4296 render.", - "unchanged3592_immutable_handoff": { - "path": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/handoff-3592-20261012/handoff-manifest.json", - "sha256": "fc2d5cb8f55c8201b4643c28839da902fde808716586f5891d76096301a42d33", - "size": 609258, - "mtime_ns": 1791773044400435908 + "registered_snapshot_frames": 4350, + "frames": 4350, + "all_four_scale_outputs": 17400, + "scale_outputs": 17400, + "proof_composition": "Exact unchanged4296 renderer bindings and carried proof plus54 reviewed current native1\u20134 component aliases. Final3312 effective contexts comprise1112 retained all-scale source/HD aliases and2200 actual new source/selected compositions (2125 changed +75 baseline proof gaps),8800HD+8800original arrays across726 personally reviewed unresampled pages by six distinct named viewers. AtomicMole9 complete;12 existing saved-view aliases unchanged. No whole4350 rerender or new material approval.", + "unchanged4296_immutable_handoff": { + "path": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/handoff-4296-20261012/handoff-manifest.json", + "sha256": "72b00911f66eba5cdb54e9765da342fb60552dc5e43c94352f36f7468f8e6de9", + "size": 1273414, + "mtime_ns": 1791776629359705409, + "mode": 33060 }, - "new704_component_source_material_authority": { - "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-enemies01-next704-final-source-authority-plan/closed704-component-source-material-authority.json", - "sha256": "fb010544040adc0e18ac0bce0efae66e329ce3e784ea7027288c9be632579dc9", - "size": 7293272, - "mtime_ns": 1791773681065313422 + "new54_metadata_preparation": { + "path": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-final-successor-metadata/final-successor-preparation.json", + "sha256": "4187e1681315e2dd1dc0c5e2471222b2650290be810f4d62ebb425afa54e8bed", + "size": 57610, + "mtime_ns": 1791786689760262619, + "mode": 33188 }, - "combined4296_context_review": { - "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-enemies01-next704-zero-delta-context-activation-default7b/closed-qualified-context-identity.json", - "sha256": "18a59eefa69f72c9fc9d47107459038a8bfa5215c8cfa9105aaf9ef62530351f", - "size": 55201, - "mtime_ns": 1791774990565261232 + "new54_current_component_and_material_authority": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-small54-private-pending-metadata-preparation/prepared5-index.json", + "sha256": "7627a3a588807ab1a0e93569aa374e62cab79e575723debe76c5ff166990d9e7", + "size": 31433, + "mtime_ns": 1791781879314490472, + "mode": 420 }, - "combined4296_context_identity_closure": { - "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-enemies01-next704-zero-delta-context-activation-default7b/closed-qualified-context-strict-closure.json", - "sha256": "c87143aa93ac2c085ac8fba28909c5e390c9a50704d8027b6bc18d112f6b13e4", - "size": 5448, - "mtime_ns": 1791775028747753574 + "combined4350_context_review": { + "path": "/home/quintine/Projects/RaptorReplica/.reference/hd-full-review/small54-final4350-six-peer-global-context-aggregate-default7b/independent-six-peer-full54-final4350-context-aggregate.json", + "sha256": "d142ae1355776929c1bcb592e4a8f5c417b45211f26ebc094c7119c093259907", + "size": 14852931, + "mtime_ns": 1791784555940275545, + "mode": 420 }, - "zero_changed_effective_proof": { - "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-enemies01-next704-zero-delta-context-activation-default7b/zero-changed-context-effective-proof.json", - "sha256": "2ad18d40b4c1e7fbf90ee3a122ba759a54519a4017f35ca8fd7c34bb2c12df48", - "size": 6523, - "mtime_ns": 1791774990564770597 - }, - "independent_source_semantic_audit": { - "path": "/home/quintine/Projects/RaptorReplica/.reference/hd-full-review/next704-independent-semantic-identity-audit-default7b/independent-source-only-semantic-alias-review.json", - "sha256": "07b17cea6b104aaeb01ef71475acfa2977cdf298e444a0069631ecb68f3964b0", - "size": 12657, - "mtime_ns": 1791774382487664961 + "combined4350_context_identity_closure": { + "path": "/home/quintine/Projects/RaptorReplica/.reference/hd-full-review/small54-final4350-six-peer-global-context-aggregate-default7b-strict-closure.json", + "sha256": "ab4c4865d2c52369af14812f222d4c0ff4a71ab1971870f2dc2bbf0a8e9e440c" }, "independent_final_metadata_audit": { - "path": "/home/quintine/Projects/RaptorReplica/.reference/hd-full-review/next704-final-metadata-independent-audit-default7b/independent-final-metadata-schema-and-frame-identity-review.json", - "sha256": "770e332a1080154ece5ad6c097a75960e1f8f066c3b87a91db5f6a82660d0cd0", - "size": 9032, - "mtime_ns": 1791775850753249628 + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-terrain2-final54-metadata-independent-audit-default7b/independent-final54-metadata-source-context-and-header-audit.json", + "sha256": "d1fed9982ef122f3a05e619b30c428caac1c982d342101ed0cac4a679b45dd56", + "size": 43199, + "mtime_ns": 1791787160947347640, + "mode": 33188 }, - "new704_current_HD_native_scale_byte_equalities": 2816, - "new704_literal_late_original_component_references": 336, - "older_original_component_rasters_not_invented": true, - "unchanged3592_registered_bindings": 3592, - "changed_context_compositions": 0, - "new_context_raster_views": 0, - "new_context_pixel_views": 0, - "carried_context_compositions": 5892, - "carried_context_output_files": 47136, - "genuine_declared_context_descriptions": 9443, + "sequence_header_order_resolution": { + "path": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-sequence-header-and-order-resolution.json", + "sha256": "5cc7cf1472236e59858d813deadcc326639d5ec99473a96d594c09ea6e6e9888", + "size": 20527, + "mtime_ns": 1791787350821152314, + "mode": 33152 + }, + "actual_order_prospective_manifest": { + "path": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-actual-registrar-order-prospective-manifest.json", + "sha256": "4077e78008baacad51ec120d1a057db2313293dfd8c9550f322ff0f7b62802bd", + "size": 2157389, + "mtime_ns": 1791787350884150817, + "mode": 33152 + }, + "new54_current_HD_native_outputs": 216, + "new54_source_native_aliases": 54, + "unchanged4296_registered_bindings": 4296, + "changed_context_compositions": 2125, + "baseline_unchanged_context_proof_gaps": 75, + "actual_fresh_context_compositions": 2200, + "new_context_HD_native_views": 8800, + "new_context_original_native_views": 8800, + "actual_unresampled_context_pages": 726, + "retained_allscale_context_aliases": 1112, + "Mole_saved_frame_views_retained": 12, "ordinary_sources_gained_reserved_indices": [], "new_optional_frame_policies_enabled": false, - "carried3592_optional_policies_unchanged": true, + "carried4296_optional_policies_unchanged": true, "library_sha256": "7b7292703f64edfbf1095c1030d38b87d7576b3b84ee02731608e667301de4f9", "serde_sha256": "ba61a9b6a7f97c994c6fdb2ab5e50915a5d6b456664f31709fd05306d56e48bd", "source_newer_than_library": false, @@ -13182,19 +13405,25 @@ "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-loader-production-epoch/epoch.json", "sha256": "921752d978024461827d239250d49b4fbfcc0e2e3ecd4b80dc3d682050961efb", "size": 4215, - "mtime_ns": 1791754410494826810 + "mtime_ns": 1791754410494826810, + "mode": 33188 }, "recursive_game_source_files": 18, "source_epoch_unchanged_at_closure": true, - "guarded_standalone_terrain_selected_jobs": 0, - "complete_original_jobs": 44, - "original_fallbacks_in_selected_job_inventories": [], - "external_original65_and_late170_held_not_selected": true, + "guarded_standalone_terrain_selected_jobs": 3, + "whole_original_native_or_atomic_jobs": 2, + "original_fallbacks_in_selected_job_inventories": [ + "1059e", + "105a4", + "105a7", + "105f3" + ], "atomic_animation_families_complete": true, - "historical_atlas_ordinals_to_native_standalone0_preserved": true, - "durable_original43_material_author_null_preserved": true, - "validated_at_utc": "2026-10-12T03:37:11.594260+00:00", - "scope": "Literal inherited whole-family material decisions, current components and context inputs stay separately hash-bound. Native1\u20134 aliases carry actual prior output paths; zero new raster/material reapproval. Fine/coarse grain/value/relief joins, original fallback holds and all recorded missing historical envelopes/references remain explicit. No seamless whole-map, live Host/timing, full mission, natural boss assembly or later-cohort admission claim." + "E3_native_only_original_parent_outside15_preserved": true, + "Windows_original_null_QA_header_preserved_with_actual_current_alias_authority": true, + "historical_pending_context_and_component_flags_not_rewritten": true, + "validated_at_utc": "2026-10-12T06:42:58.933821+00:00", + "scope": "Literal qualified component/material and current exact source/native aliases remain separately hash-bound; six actual disjoint context visual journals carried. Mixed HD/original value/grain/bevel/char islands remain explicit. No seamless whole-map, live Host/timing, full mission, natural boss assembly, later392/70/144/six-single/soil-correction admission or Windows4350 CI claim." }, "historical_native_scene_reviews": [], "pilot_portrait_native_scene_review": { @@ -15116,6 +15345,90 @@ "atomic_animation_families_complete": true, "validated_at_utc": "2026-10-12T02:38:47.624299+00:00", "scope": "Material authority, current component bytes and combined contexts remain separately hash-bound. Four page viewers are attributed literally. Historical 22 native4-only context aliases remain native4-only; finer/coarser mixed texture/value fields and all source-contour/cue qualifications are preserved. No isolated-art reapproval, seamless whole map, live Host/timing, full-wave or fresh whole-pack rendering claim. Later approvals are excluded." + }, + { + "registered_snapshot_frames": 4296, + "frames": 4296, + "all_four_scale_outputs": 17184, + "scale_outputs": 17184, + "proof_composition": "Exact unchanged3592 source/raw/default renderer bindings and carried proofs plus704 current native1\u20134 component byte aliases.9443 genuine declarations resolve to5892 exact previously closed all1\u20134 effective context identities,47136 retained source/selected arrays. Explicit independently audited zero-delta alias activation; no new context raster or pixel review and no whole4296 render.", + "unchanged3592_immutable_handoff": { + "path": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/handoff-3592-20261012/handoff-manifest.json", + "sha256": "fc2d5cb8f55c8201b4643c28839da902fde808716586f5891d76096301a42d33", + "size": 609258, + "mtime_ns": 1791773044400435908 + }, + "new704_component_source_material_authority": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-enemies01-next704-final-source-authority-plan/closed704-component-source-material-authority.json", + "sha256": "fb010544040adc0e18ac0bce0efae66e329ce3e784ea7027288c9be632579dc9", + "size": 7293272, + "mtime_ns": 1791773681065313422 + }, + "combined4296_context_review": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-enemies01-next704-zero-delta-context-activation-default7b/closed-qualified-context-identity.json", + "sha256": "18a59eefa69f72c9fc9d47107459038a8bfa5215c8cfa9105aaf9ef62530351f", + "size": 55201, + "mtime_ns": 1791774990565261232 + }, + "combined4296_context_identity_closure": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-enemies01-next704-zero-delta-context-activation-default7b/closed-qualified-context-strict-closure.json", + "sha256": "c87143aa93ac2c085ac8fba28909c5e390c9a50704d8027b6bc18d112f6b13e4", + "size": 5448, + "mtime_ns": 1791775028747753574 + }, + "zero_changed_effective_proof": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-enemies01-next704-zero-delta-context-activation-default7b/zero-changed-context-effective-proof.json", + "sha256": "2ad18d40b4c1e7fbf90ee3a122ba759a54519a4017f35ca8fd7c34bb2c12df48", + "size": 6523, + "mtime_ns": 1791774990564770597 + }, + "independent_source_semantic_audit": { + "path": "/home/quintine/Projects/RaptorReplica/.reference/hd-full-review/next704-independent-semantic-identity-audit-default7b/independent-source-only-semantic-alias-review.json", + "sha256": "07b17cea6b104aaeb01ef71475acfa2977cdf298e444a0069631ecb68f3964b0", + "size": 12657, + "mtime_ns": 1791774382487664961 + }, + "independent_final_metadata_audit": { + "path": "/home/quintine/Projects/RaptorReplica/.reference/hd-full-review/next704-final-metadata-independent-audit-default7b/independent-final-metadata-schema-and-frame-identity-review.json", + "sha256": "770e332a1080154ece5ad6c097a75960e1f8f066c3b87a91db5f6a82660d0cd0", + "size": 9032, + "mtime_ns": 1791775850753249628 + }, + "new704_current_HD_native_scale_byte_equalities": 2816, + "new704_literal_late_original_component_references": 336, + "older_original_component_rasters_not_invented": true, + "unchanged3592_registered_bindings": 3592, + "changed_context_compositions": 0, + "new_context_raster_views": 0, + "new_context_pixel_views": 0, + "carried_context_compositions": 5892, + "carried_context_output_files": 47136, + "genuine_declared_context_descriptions": 9443, + "ordinary_sources_gained_reserved_indices": [], + "new_optional_frame_policies_enabled": false, + "carried3592_optional_policies_unchanged": true, + "library_sha256": "7b7292703f64edfbf1095c1030d38b87d7576b3b84ee02731608e667301de4f9", + "serde_sha256": "ba61a9b6a7f97c994c6fdb2ab5e50915a5d6b456664f31709fd05306d56e48bd", + "source_newer_than_library": false, + "any_game_source_newer_than_library": false, + "diagnostics": [], + "exact_game_source_epoch": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-loader-production-epoch/epoch.json", + "sha256": "921752d978024461827d239250d49b4fbfcc0e2e3ecd4b80dc3d682050961efb", + "size": 4215, + "mtime_ns": 1791754410494826810 + }, + "recursive_game_source_files": 18, + "source_epoch_unchanged_at_closure": true, + "guarded_standalone_terrain_selected_jobs": 0, + "complete_original_jobs": 44, + "original_fallbacks_in_selected_job_inventories": [], + "external_original65_and_late170_held_not_selected": true, + "atomic_animation_families_complete": true, + "historical_atlas_ordinals_to_native_standalone0_preserved": true, + "durable_original43_material_author_null_preserved": true, + "validated_at_utc": "2026-10-12T03:37:11.594260+00:00", + "scope": "Literal inherited whole-family material decisions, current components and context inputs stay separately hash-bound. Native1\u20134 aliases carry actual prior output paths; zero new raster/material reapproval. Fine/coarse grain/value/relief joins, original fallback holds and all recorded missing historical envelopes/references remain explicit. No seamless whole-map, live Host/timing, full mission, natural boss assembly or later-cohort admission claim." } ], "historical_generation_metadata_corrections": [ diff --git a/docs/hd-art.md b/docs/hd-art.md index 6fda40e4..30a1b202 100644 --- a/docs/hd-art.md +++ b/docs/hd-art.md @@ -2,7 +2,7 @@ The Rust Options screen includes **HD art**. It starts disabled. Enable it to use reviewed artwork from the selected data directory's `hd/hd.json`; each missing or rejected frame keeps the selected original / 2x / 3x / 4x crisp treatment. The bundled runtime uses `data/`, while development artwork and review jobs live under `../data/`. The scale setting still determines the indexed rendering resolution, and the HD toggle can be changed while paused. HD art is presentation only: simulation, collision sizes, banking positions and save content IDs stay unchanged. -The external development pack supplies **4,296 reviewed replacement frames in 2,483 complete sequences**, including **3,262 terrain pictures**. The fixed 704-frame admission and immutable runtime handoff are closed. The assembled bundled runtime supplies **4,296 frames / 2,483 complete sequences**, including **3,262 terrain pictures**, in **8,659 files / 6,159,339,222 bytes**. Root closed immutable intake, source-authority and shared-data checks; the actual bundled CLI validates all 4,296 HD frames with zero rejects and 45 mods / one override. Six fresh 1920×1080 SDL frames were physically reviewed: four presentation regressions and an affected Sector3 Wave6 HD/original pair. Crater silhouettes and placement remain source-aligned; warmer rectangular grain/value joins remain a consistency limitation. Root Git publication and new 4,296-frame native Windows CI are pending. The last remote-confirmed runtime is the 3,592-frame commit `b72d2be1f7bb41341c083624baca6762a59bdc0a`, whose exact native Windows CI passed all 15 steps. HD remains optional; missing or rejected pictures keep original treatment. +The external development pack now supplies **4,350 reviewed original picture frames in 2,529 complete sequences**, including **3,307 terrain pictures**. The exact new admission is **45 native Terrain singletons plus the complete nine-frame Mole animation**, **54 frames / five jobs / 46 new sequences**. Four originals (`1059e`, `105a4`, `105a7`, `105f3`) remain fallback. Current component, authentic source, material and changed-context authorities are separately closed. The bundled runtime remains the independently validated **4,296-frame / 2,483-sequence** publication at commit `ca438faf45cac4518d852d55abae9fe2a2d4ffbb`. Its exact native Windows CI [38202643090](https://github.com/Quintine/RustRaptor/actions/runs/38202643090) completed successfully on 2026-10-12 at 04:33:03 UTC with all 15 steps. The new 4,350-frame external pack is awaiting root’s immutable intake, bundled assembly, actual CLI/SDL review and Git publication; no 4,350 Windows result is claimed. Published runtime history: The assembled bundled Linux/Windows data contains **3,165 reviewed frames / 1,667 complete sequences**, including **2,137 terrain pictures**, in **7,934 files / 3,808,351,209 bytes**. Actual CLI validates 6,449 original assets, all 3,165 HD frames with zero rejects, and 45 mods / one override. Root physically reviewed three fresh 1920×1080 software SDL captures: the main menu and original Sector 1 Wave 7 / Sector 3 Wave 9. Mixed HD/original texture boundaries and mostly original Sector 3 terrain remain visible. Both executables, all original catalog files and all 18 Rust sources are unchanged. The 3,165-frame bundle is published in commit `2f7a9a7c01533c9d22b0c794575e577c84460e2d`. Native Windows CI run `38189732306` completed successfully for that exact commit, including all 15 build, test, packaged SDL and artifact-upload steps. Native Windows CI for published 2,935-frame commit `813112a90ec8b094c2704340f0bb52606683da5e` passed [38186844952](https://github.com/Quintine/RustRaptor/actions/runs/38186844952), including packaged HD/data/SDL checks and artifact upload. The earlier 2,354-frame run [38183746763](https://github.com/Quintine/RustRaptor/actions/runs/38183746763) and full Linux/Wine ZIP, intro and isolated-audio proofs for 2,240-frame exports retain their historical scope. @@ -605,7 +605,7 @@ The already closed older383 and late336 cohorts form gross719 source readiness ` A disjoint review campaign covers 26 previously unreviewed successful enemy singletons with direct Iron2 custody; source plans precede current native1–4 and bounded authentic World views. Terrain2 has closed five qualified singleton reviews (30064/30066/30067/30069/3006a) in report `950d556ebcda3dabea9960e40dfc8ff433fcc47eb6099e60ad7e6bd8140a74f2`, strict closure `04882bf73b43ba5b34994c053f3bdea2d665fa2e1d52d72ae75934dc39b2e58f`; these later decisions remain outside this fixed427 admission. New terrain family reviews and held-method adjudications continue in separate frozen scopes. Genuine refusals, source geometry/cue failures and atomic animation holds retain original fallback. The earlier post3165 census remains an immutable snapshot with its separately named addenda, rather than a live classification of these later closures. -## Closed 4296 admission and runtime validation; publication pending +## Closed 4296 admission and runtime validation The exact new admission is **704 source/material-qualified terrain pictures in 44 complete original job inventories**, represented by **368 native standalone definitions plus 21 complete 16-frame sequences**: **389 new runtime sequences**. Fifteen safe64 rows already in published3592 are excluded. External development coverage is **4,296 / 5,753 pictures in 2,483 complete sequences**, including **3,262 / 4,535 terrain pictures**. The remaining **1,457 originals** are **1,273 terrain, 110 enemies/ground objects, 58 UI/other and 16 bosses**. The 307 native AGX/font records remain separate preservation, with no generated HD credit. @@ -615,7 +615,7 @@ Independent final metadata audit `770e332a1080154ece5ad6c097a75960e1f8f066c3b87a Current component authority carries **2,816 byte-equal native1–4 HD outputs plus336 literal Late original component references**. Earlier original rasters are not invented. The independent source/effective audit and explicitly activated zero-delta context identity carry **9,443 authentic declarations / 5,892 exact all1–4 compositions / 47,136 retained source-selected array files**, with **zero new compositions, context rasters, pixel views or material reapprovals**. All17 previously controlled enemy backdrops and closed427 reverse/state arrays remain exact. The actual published3592 manifest and both prospective4296 projections match complete renderer bindings despite descriptive header/name/order differences. Original density, relief, value, contour and cue qualifications remain literal; no seamless whole-map, live Host, timing, full-mission or whole4296 render claim follows. -Immutable `../data/hd/registered-class-review/handoff-4296-20261012/` has manifest SHA `72b00911f66eba5cdb54e9765da342fb60552dc5e43c94352f36f7468f8e6de9`, **2,209 private-inode pack files / 6,146,156,364 bytes**, **469 new artwork files** and **918 compact proofs**. Pack HD SHA is `85c7a778a21abe1a914ef90fa3aa8755b01833a5aa3795272ec03862e80513a2`; provenance is `100981d0a3b4706376dd0486f4823b5aec58ecc6ef4e0dd41ca995c474a85af8`. All3,592 prior renderer bindings/art bytes, original INDEX and18-source immutable7b/ba61 epoch are exact. Its629 source-authority entries use immutable beforecopies when canonical metadata has advanced; copy2 epochs and historical compact-proof copy times are distinguished explicitly. Root has closed independent runtime intake, assembly and bounded CLI/SDL checks below. Git publication remains pending; the last remote-confirmed bundle remains3,592. +Immutable `../data/hd/registered-class-review/handoff-4296-20261012/` has manifest SHA `72b00911f66eba5cdb54e9765da342fb60552dc5e43c94352f36f7468f8e6de9`, **2,209 private-inode pack files / 6,146,156,364 bytes**, **469 new artwork files** and **918 compact proofs**. Pack HD SHA is `85c7a778a21abe1a914ef90fa3aa8755b01833a5aa3795272ec03862e80513a2`; provenance is `100981d0a3b4706376dd0486f4823b5aec58ecc6ef4e0dd41ca995c474a85af8`. All3,592 prior renderer bindings/art bytes, original INDEX and18-source immutable7b/ba61 epoch are exact. Its629 source-authority entries use immutable beforecopies when canonical metadata has advanced; copy2 epochs and historical compact-proof copy times are distinguished explicitly. Root has closed independent runtime intake, assembly and bounded CLI/SDL checks below. At the initial runtime-validation freeze, Git publication was still pending; the later exact remote confirmation is recorded below. The separately frozen prospective1457 authority preview `87a263539d391058ed2ee8ef0c377f06acf2481cc4c08e85d5b40c3262c641b7` / strict `ab4dbc5c6e0552eedfc3089dcf330379f67a9490eddeb2cec44ceec7a5b94962` accounts for every original ID, including58 UI/other pictures and16 bosses. It records859 explicit material positives, eight later Mole frames blocked by whole-animation atomicity,426 concrete holds,95 independent-peer drafts,14 initial-author preparations,31 legacy grid/service families without standalone masters, eight actual permanent refusals and16 Original12 policy-limited pictures. Those are this snapshot's buckets; later complete9 Mole qualification `c1d0f51ff8a0bdf633cea12dac7257ae8976be82cc779b4b97cd1d94291a61b3` / `345a252d6adeb8d3abd1ecf0adcdcd428e2b85b507df2f0ffa5dd9cb67b4ab00`, regional source outcomes and the whole200a2v5 peer hold require named additive updates. None joins fixed704 automatically. Exact392 Terrain2 selections,70 middle Terrain3 selections,19 enemy positives and other closed later cohorts are separate effective-context/admission work. Newly authored105e8 remains different-peer pending;10590–af and105f0 accepted-subset context reviews remain in progress. Actual refusals and held artwork retain original fallback. @@ -623,6 +623,35 @@ Root's actual 4,296-frame runtime checks are closed: immutable intake `62b0c7a6e Fresh SDL checks `479d92655ad4e666d114c359f876dddca81d9914ebd2602e67d58682430f64f8` and affected-content checks `4921d858ae4d9f5b4066f773c6a030963a7d636bc27365cc39e84a0df7dc8622` bind six full1920×1080 images physically viewed by root in `49878cb4dc04608dcc9ae6abfd481dddf5b9f9648589d930ce990ec1f6d3badd`. The four initial menu/S1W7/S2W6/S3W1 images equal their prior3,592-frame captures and cover presentation regression only. Sector3 Wave6's opening HD/original pair actually shows newly selected704 terrain: crater shapes, rims, rocks and placement remain source-aligned, without an observed uncovered gap. Warmer fine-grain rectangular patches and value joins remain visible and require a later source-bound material-consistency pass. This bounded opening is not whole-map seamlessness, a complete campaign or approval of every new704 picture. -The root-owned Windows workflow timeout increases from30 to60 minutes because the previous exact3,592-frame native Windows run took29m10s. Its [successful run38198055220](https://github.com/Quintine/RustRaptor/actions/runs/38198055220) and artifact retain their exact historical scope. A new4,296-frame CI result and remote publication identity are pending at this documentation freeze. +The root-owned Windows workflow timeout increases from30 to60 minutes because the previous exact3,592-frame native Windows run took29m10s. Its [successful run38198055220](https://github.com/Quintine/RustRaptor/actions/runs/38198055220) and artifact retain their exact historical scope. At the initial runtime-validation freeze, the new4,296-frame CI result and remote publication identity were pending. The later publication and first CI observation follow below. The latest separate source-only authority cutoff `2384d7614f9219d9698c53ac03b512f4ee7a5f91e0223d244b4be4664eae7669`, strict `1136baeb2f4d66329a1b0e29c4d54c5ee7816fc5917c49721552bb0da522ed08`, records the remaining1,457 originals as **913 explicit material positives awaiting selection/components/contexts/admission,426 concrete holds,50 independent-peer drafts,13 initial preparations,31 legacy grid/service cases without standalone raw,8 actual permanent refusals and16 Original12 family policy-limited pictures**. Positives comprise861 terrain,21 enemy/ground,22 UI icons and the complete atomic9-frame Mole animation. The F0/Windows final peers and held105e8 are named additive updates; previous census snapshots remain literal. These qualifications add no registered frame to the fixed4,296 batch. + +## Published 4296 runtime and first Windows observation + +Root publication receipt `.reference/hd-runtime-4296/publication.json`, SHA `881c9ff9fb5233a486e0874221356407c8a424c8af7eeffbb21416c5f0627c99`, confirms successful push and matching remote `codex/rust-rewrite` head **`ca438faf45cac4518d852d55abae9fe2a2d4ffbb`**. Its exact scope is **479 changed paths, 469 new artwork files and 704 new HD frames**, bringing the published bundled runtime to **4,296 frames / 2,483 complete sequences**. The validated 8,659-file runtime, source/binary guards and bounded six-image visual scope above are unchanged. Visible warm rectangular grain/value joins remain an unfinished material-consistency item. + +The first actual [native Windows run 38202643090](https://github.com/Quintine/RustRaptor/actions/runs/38202643090) observation at **2026-10-12 04:11:48 UTC** was `in_progress` for that exact commit, with checkout running and no conclusion or artifact. Receipt `.reference/hd-runtime-4296/windows-ci-first-running-observation.json`, SHA `e30dc2e80a29352952c0a9403adf03b81abc32e10547d662215498636c8ce0bb`, authenticates this bounded observation. It supplies no new Windows success, artifact, fresh audio or binary claim; the previous 3,592-frame success remains historical. + +Later source work remains separate from this release. The deliberately selected small54 proposal contains the newly closed Windows29 and F0 accepted15 terrain definitions, qualified105e3 and complete atomic Mole9. It requires authentic combined forward/reverse/state and saved-backdrop accounting against published4296 before any context activation or admission. Ready392 likewise requires additive accounting for 303 omitted baseline composition arrays and two affected controlled enemy strips; its existing 6,989-row source plan is retained verbatim. New genuine original-only generation and held-method preparations add no registered frame here. + +## Completed native Windows verification for published 4296 + +The exact published commit **`ca438faf45cac4518d852d55abae9fe2a2d4ffbb`** passed all **15 steps** of [Windows run 38202643090](https://github.com/Quintine/RustRaptor/actions/runs/38202643090), completed **2026-10-12 04:33:03 UTC**. Root's additive receipt `.reference/hd-runtime-4296/windows-ci-success-20261012.json`, SHA `2a65d2dd54e0f9e06d93beb3a1a2aee4ec458ef0e6bf04272edb4e29c1e1b6d0`, binds the completed API observation `aed1f027596206a4bdb95a813c53305fb2f6e18626afb6cfd93c0505a0e5b918` and downloaded log `6cebabc6e1b7d29b8daa1feca24fc7324d54650cb781af86d31753831d7300ed`. The earlier running observations remain unchanged historical evidence. + +Actual Windows validation registered and accepted **4,296 HD frames with zero rejections**, plus **45 mods and one override**. Portable simulation/mod/save tests, carried-pilot Black Tide and paid repairs, included executable and launcher, native build/package, displayed boss phases and SD/HD shop, packaged HD/mod/SDL gameplay and artifact upload all succeeded. Stage2 generated audio contained **132,300 frames at 44,100 Hz** for each three-second check: music had **261,955 nonzero samples**, and music-muted sound effects had **210,858**. + +The uploaded [RustRaptor Windows artifact 11727230004](https://github.com/Quintine/RustRaptor/actions/runs/38202643090/artifacts/11727230004) is **6,311,100,791 bytes**, digest **`a86a35305225751c5a7e0c560b538cef7e8898eaba6fe7d9c8284b56f553f8aa`**. Root fetched the completed API and log; it did not download or extract the ZIP, execute it locally on Windows, listen to the audio locally or replace the bundled binaries. This CI result does not expand the bounded six-image visual review or resolve the visible warm rectangular material/value joins. Later source preparations and qualified peer packets add no registered frames in this documentation update. + + +## Closed 4,350-frame external admission + +Registration receipt `../data/hd/registered-class-review/batch-4350-registration.json`, SHA `b6f7347a7cc5286733cb53b4826cc0157db24814f25f8180c0a4de6442bcae29`, adds exactly **54 frames / five jobs / 46 sequences** after canonical dry run and independent final metadata audit `d1fed9982ef122f3a05e619b30c428caac1c982d342101ed0cac4a679b45dd56`. Final metadata preparation `4187e1681315e2dd1dc0c5e2471222b2650290be810f4d62ebb425afa54e8bed` binds **58 authentic inventory records = 54 selected + four original fallbacks**, **270 current source/native component aliases**, the original E3 parent’s outside15 scope, the Windows historical null QA header and complete atomic Mole9. Existing source/reference/envelope gaps and all actual refusals remain literal. + +Independent source plan `76fc9debec1642cdaf93441d7f0e5a85e6cbfd73f219d83e97f5f4f952772460` and current technical proof `af495eb939db6c09d6077ce69427f0bee77917be473f98f928a7d9dc41f0b2a5` resolve **3,312 final effective identities** to **1,112 retained all1–4 source/HD aliases plus 2,200 actual new compositions**: **2,125 changed bindings and 75 baseline proof gaps**. All **8,800 HD + 8,800 original native arrays** and **726 complete unresampled pages** are closed. Six distinct actual viewers cover ranks 0–299, 300–699, 700–1099, 1100–1399, 1400–1799 and 1800–2199 exactly, with aggregate `d142ae1355776929c1bcb592e4a8f5c417b45211f26ebc094c7119c093259907` and outside closure `ab4c4865d2c52369af14812f222d4c0ff4a71ab1971870f2dc2bbf0a8e9e440c`. Twelve fixed Mole saved views retain their exact previous actor/backdrop/scale scope. No new material approval or broad World run is attributed to this context proof. + +Full old **2,483-sequence header prefix** is exact. New **46 complete descriptive sequence headers and frame/default dictionaries** have a bijection from symbolic source projection `345d9760` to actual five-job registrar append order; name/order differences are recorded in sequence-header resolution `5cc7cf1472236e59858d813deadcc326639d5ec99473a96d594c09ea6e6e9888`, without claiming manifest byte or sequence-order equality. Actual development hd.json is `4077e78008baacad51ec120d1a057db2313293dfd8c9550f322ff0f7b62802bd`. Source18, immutable7b/ba61, both bundled executables, crop/origin/palette and optional-frame policies are unchanged. Stronger grain, bevel/char relief and visible original/HD density/value islands remain qualifications; no seamless full-map, live Host/timing or complete-mission claim follows. + +The closed 392, 144 and 70 cohorts, the six new qualified singletons and the two soil corrections remain separate later admission scopes. Source-only future4350 census `d06f9336636dcd94bb0d0b7e93d571d57d2ba99e5f4f042304ec2f7e0e20a430` retains all 8,575 previous later Terrain inputs, but identifies **12 additional genuine reverse3×3 inputs / 48 future HD scale views** for the 392 cohort after actual4350 publication; their 48 original controls already alias. The two shared392 strips and later70/144 impact on qualified19’s 34 full scenes /128 physical ROI scale inputs remain separately pending. None is included in this 54-frame registration. + +The bundled runtime remains the independently validated **4,296-frame / 2,483-sequence** publication at commit `ca438faf45cac4518d852d55abae9fe2a2d4ffbb`. Its exact native Windows CI [38202643090](https://github.com/Quintine/RustRaptor/actions/runs/38202643090) completed successfully on 2026-10-12 at 04:33:03 UTC with all 15 steps. The new 4,350-frame external pack is awaiting root’s immutable intake, bundled assembly, actual CLI/SDL review and Git publication; no 4,350 Windows result is claimed. diff --git a/docs/hd-backlog.md b/docs/hd-backlog.md index 1b501cc9..f5d50176 100644 --- a/docs/hd-backlog.md +++ b/docs/hd-backlog.md @@ -1,6 +1,6 @@ # Original artwork HD backlog -The checked catalog contains **5,753 standalone picture frames**. External development admission supplies **4,296**; **1,457** await a registered replacement: **1,273 terrain, 110 enemies/ground objects, 58 UI/other and 16 bosses**. Every original ID, including unused graphics and destroyed variants, remains required. Material, current components and affected-context authority stay separately bound. The assembled bundled runtime supplies **4,296 frames / 2,483 complete sequences**, including **3,262 terrain pictures**, in **8,659 files / 6,159,339,222 bytes**. Root closed immutable intake, source-authority and shared-data checks; the actual bundled CLI validates all 4,296 HD frames with zero rejects and 45 mods / one override. Six fresh 1920×1080 SDL frames were physically reviewed: four presentation regressions and an affected Sector3 Wave6 HD/original pair. Crater silhouettes and placement remain source-aligned; warmer rectangular grain/value joins remain a consistency limitation. Root Git publication and new 4,296-frame native Windows CI are pending. The last remote-confirmed runtime is the 3,592-frame commit `b72d2be1f7bb41341c083624baca6762a59bdc0a`, whose exact native Windows CI passed all 15 steps. +The checked catalog contains **5,753 standalone picture frames**. External development admission supplies **4,350**; **1,403** await a registered replacement: **1,228 terrain, 110 enemies/ground objects, 58 UI/other and seven bosses**. Every original ID, including unused graphics and destroyed variants, remains required. The external development pack now supplies **4,350 reviewed original picture frames in 2,529 complete sequences**, including **3,307 terrain pictures**. The exact new admission is **45 native Terrain singletons plus the complete nine-frame Mole animation**, **54 frames / five jobs / 46 new sequences**. Four originals (`1059e`, `105a4`, `105a7`, `105f3`) remain fallback. Current component, authentic source, material and changed-context authorities are separately closed. The bundled runtime remains the independently validated **4,296-frame / 2,483-sequence** publication at commit `ca438faf45cac4518d852d55abae9fe2a2d4ffbb`. Its exact native Windows CI [38202643090](https://github.com/Quintine/RustRaptor/actions/runs/38202643090) completed successfully on 2026-10-12 at 04:33:03 UTC with all 15 steps. The new 4,350-frame external pack is awaiting root’s immutable intake, bundled assembly, actual CLI/SDL review and Git publication; no 4,350 Windows result is claimed. Published runtime history: The assembled bundled Linux/Windows data contains **3,165 reviewed frames / 1,667 complete sequences**, including **2,137 terrain pictures**, in **7,934 files / 3,808,351,209 bytes**. Actual CLI validates 6,449 original assets, all 3,165 HD frames with zero rejects, and 45 mods / one override. Root physically reviewed three fresh 1920×1080 software SDL captures: the main menu and original Sector 1 Wave 7 / Sector 3 Wave 9. Mixed HD/original texture boundaries and mostly original Sector 3 terrain remain visible. Both executables, all original catalog files and all 18 Rust sources are unchanged. The 3,165-frame bundle is published in commit `2f7a9a7c01533c9d22b0c794575e577c84460e2d`. Native Windows CI run `38189732306` completed successfully for that exact commit, including all 15 build, test, packaged SDL and artifact-upload steps. Native Windows CI for published 2,935-frame commit `813112a90ec8b094c2704340f0bb52606683da5e` passed [38186844952](https://github.com/Quintine/RustRaptor/actions/runs/38186844952), including packaged HD/data/SDL checks and artifact upload. The earlier 2,354-frame run [38183746763](https://github.com/Quintine/RustRaptor/actions/runs/38183746763) and full Linux/Wine ZIP, intro and isolated-audio proofs for 2,240-frame exports retain their historical scope. @@ -9,12 +9,12 @@ The published 3,592-frame admission adds **427 source/material-qualified origina | Category | Picture frames | Registered HD | Missing HD | Declared sequences / terrain sets | | --- | ---: | ---: | ---: | ---: | | Player banking | 21 | 21 | 0 | 3 | -| Bosses | 249 | 233 | 16 | 79 | +| Bosses | 249 | 242 | 7 | 79 | | Enemies and ground objects | 419 | 309 | 110 | 183 | | Player and enemy projectiles | 51 | 51 | 0 | 18 | | Explosions and effects | 281 | 281 | 0 | 25 | | Equipment and pickups | 47 | 47 | 0 | 23 | -| Terrain | 4,535 | 3,262 | 1,273 | 4 | +| Terrain | 4,535 | 3,307 | 1,228 | 4 | | Menus, portraits, HUD and other pictures | 150 | 92 | 58 | mixed static / animated | The completion ledger retains `format_version: 1` with `ledger_schema: family_review_refs_v1`. Each approved asset uses a stable `coordinator_review_ref`; `family_reviews` stores the candidate/binding identities and exact full immutable external receipt once. The original 2,132 normalization reduced 53,594,880 bytes to 8,406,611 (84.31%) without changing approval or artwork. New registrations update only their own status/evidence; native preservation has a separate closed record. @@ -1143,7 +1143,7 @@ The already closed older383 and late336 cohorts form gross719 source readiness ` A disjoint review campaign covers 26 previously unreviewed successful enemy singletons with direct Iron2 custody; source plans precede current native1–4 and bounded authentic World views. Terrain2 has closed five qualified singleton reviews (30064/30066/30067/30069/3006a) in report `950d556ebcda3dabea9960e40dfc8ff433fcc47eb6099e60ad7e6bd8140a74f2`, strict closure `04882bf73b43ba5b34994c053f3bdea2d665fa2e1d52d72ae75934dc39b2e58f`; these later decisions remain outside this fixed427 admission. New terrain family reviews and held-method adjudications continue in separate frozen scopes. Genuine refusals, source geometry/cue failures and atomic animation holds retain original fallback. The earlier post3165 census remains an immutable snapshot with its separately named addenda, rather than a live classification of these later closures. -## Closed 4296 admission and runtime validation; publication pending +## Closed 4296 admission and runtime validation The exact new admission is **704 source/material-qualified terrain pictures in 44 complete original job inventories**, represented by **368 native standalone definitions plus 21 complete 16-frame sequences**: **389 new runtime sequences**. Fifteen safe64 rows already in published3592 are excluded. External development coverage is **4,296 / 5,753 pictures in 2,483 complete sequences**, including **3,262 / 4,535 terrain pictures**. The remaining **1,457 originals** are **1,273 terrain, 110 enemies/ground objects, 58 UI/other and 16 bosses**. The 307 native AGX/font records remain separate preservation, with no generated HD credit. @@ -1153,7 +1153,7 @@ Independent final metadata audit `770e332a1080154ece5ad6c097a75960e1f8f066c3b87a Current component authority carries **2,816 byte-equal native1–4 HD outputs plus336 literal Late original component references**. Earlier original rasters are not invented. The independent source/effective audit and explicitly activated zero-delta context identity carry **9,443 authentic declarations / 5,892 exact all1–4 compositions / 47,136 retained source-selected array files**, with **zero new compositions, context rasters, pixel views or material reapprovals**. All17 previously controlled enemy backdrops and closed427 reverse/state arrays remain exact. The actual published3592 manifest and both prospective4296 projections match complete renderer bindings despite descriptive header/name/order differences. Original density, relief, value, contour and cue qualifications remain literal; no seamless whole-map, live Host, timing, full-mission or whole4296 render claim follows. -Immutable `../data/hd/registered-class-review/handoff-4296-20261012/` has manifest SHA `72b00911f66eba5cdb54e9765da342fb60552dc5e43c94352f36f7468f8e6de9`, **2,209 private-inode pack files / 6,146,156,364 bytes**, **469 new artwork files** and **918 compact proofs**. Pack HD SHA is `85c7a778a21abe1a914ef90fa3aa8755b01833a5aa3795272ec03862e80513a2`; provenance is `100981d0a3b4706376dd0486f4823b5aec58ecc6ef4e0dd41ca995c474a85af8`. All3,592 prior renderer bindings/art bytes, original INDEX and18-source immutable7b/ba61 epoch are exact. Its629 source-authority entries use immutable beforecopies when canonical metadata has advanced; copy2 epochs and historical compact-proof copy times are distinguished explicitly. Root has closed independent runtime intake, assembly and bounded CLI/SDL checks below. Git publication remains pending; the last remote-confirmed bundle remains3,592. +Immutable `../data/hd/registered-class-review/handoff-4296-20261012/` has manifest SHA `72b00911f66eba5cdb54e9765da342fb60552dc5e43c94352f36f7468f8e6de9`, **2,209 private-inode pack files / 6,146,156,364 bytes**, **469 new artwork files** and **918 compact proofs**. Pack HD SHA is `85c7a778a21abe1a914ef90fa3aa8755b01833a5aa3795272ec03862e80513a2`; provenance is `100981d0a3b4706376dd0486f4823b5aec58ecc6ef4e0dd41ca995c474a85af8`. All3,592 prior renderer bindings/art bytes, original INDEX and18-source immutable7b/ba61 epoch are exact. Its629 source-authority entries use immutable beforecopies when canonical metadata has advanced; copy2 epochs and historical compact-proof copy times are distinguished explicitly. Root has closed independent runtime intake, assembly and bounded CLI/SDL checks below. At the initial runtime-validation freeze, Git publication was still pending; the later exact remote confirmation is recorded below. The separately frozen prospective1457 authority preview `87a263539d391058ed2ee8ef0c377f06acf2481cc4c08e85d5b40c3262c641b7` / strict `ab4dbc5c6e0552eedfc3089dcf330379f67a9490eddeb2cec44ceec7a5b94962` accounts for every original ID, including58 UI/other pictures and16 bosses. It records859 explicit material positives, eight later Mole frames blocked by whole-animation atomicity,426 concrete holds,95 independent-peer drafts,14 initial-author preparations,31 legacy grid/service families without standalone masters, eight actual permanent refusals and16 Original12 policy-limited pictures. Those are this snapshot's buckets; later complete9 Mole qualification `c1d0f51ff8a0bdf633cea12dac7257ae8976be82cc779b4b97cd1d94291a61b3` / `345a252d6adeb8d3abd1ecf0adcdcd428e2b85b507df2f0ffa5dd9cb67b4ab00`, regional source outcomes and the whole200a2v5 peer hold require named additive updates. None joins fixed704 automatically. Exact392 Terrain2 selections,70 middle Terrain3 selections,19 enemy positives and other closed later cohorts are separate effective-context/admission work. Newly authored105e8 remains different-peer pending;10590–af and105f0 accepted-subset context reviews remain in progress. Actual refusals and held artwork retain original fallback. @@ -1161,6 +1161,35 @@ Root's actual 4,296-frame runtime checks are closed: immutable intake `62b0c7a6e Fresh SDL checks `479d92655ad4e666d114c359f876dddca81d9914ebd2602e67d58682430f64f8` and affected-content checks `4921d858ae4d9f5b4066f773c6a030963a7d636bc27365cc39e84a0df7dc8622` bind six full1920×1080 images physically viewed by root in `49878cb4dc04608dcc9ae6abfd481dddf5b9f9648589d930ce990ec1f6d3badd`. The four initial menu/S1W7/S2W6/S3W1 images equal their prior3,592-frame captures and cover presentation regression only. Sector3 Wave6's opening HD/original pair actually shows newly selected704 terrain: crater shapes, rims, rocks and placement remain source-aligned, without an observed uncovered gap. Warmer fine-grain rectangular patches and value joins remain visible and require a later source-bound material-consistency pass. This bounded opening is not whole-map seamlessness, a complete campaign or approval of every new704 picture. -The root-owned Windows workflow timeout increases from30 to60 minutes because the previous exact3,592-frame native Windows run took29m10s. Its [successful run38198055220](https://github.com/Quintine/RustRaptor/actions/runs/38198055220) and artifact retain their exact historical scope. A new4,296-frame CI result and remote publication identity are pending at this documentation freeze. +The root-owned Windows workflow timeout increases from30 to60 minutes because the previous exact3,592-frame native Windows run took29m10s. Its [successful run38198055220](https://github.com/Quintine/RustRaptor/actions/runs/38198055220) and artifact retain their exact historical scope. At the initial runtime-validation freeze, the new4,296-frame CI result and remote publication identity were pending. The later publication and first CI observation follow below. The latest separate source-only authority cutoff `2384d7614f9219d9698c53ac03b512f4ee7a5f91e0223d244b4be4664eae7669`, strict `1136baeb2f4d66329a1b0e29c4d54c5ee7816fc5917c49721552bb0da522ed08`, records the remaining1,457 originals as **913 explicit material positives awaiting selection/components/contexts/admission,426 concrete holds,50 independent-peer drafts,13 initial preparations,31 legacy grid/service cases without standalone raw,8 actual permanent refusals and16 Original12 family policy-limited pictures**. Positives comprise861 terrain,21 enemy/ground,22 UI icons and the complete atomic9-frame Mole animation. The F0/Windows final peers and held105e8 are named additive updates; previous census snapshots remain literal. These qualifications add no registered frame to the fixed4,296 batch. + +## Published 4296 runtime and first Windows observation + +Root publication receipt `.reference/hd-runtime-4296/publication.json`, SHA `881c9ff9fb5233a486e0874221356407c8a424c8af7eeffbb21416c5f0627c99`, confirms successful push and matching remote `codex/rust-rewrite` head **`ca438faf45cac4518d852d55abae9fe2a2d4ffbb`**. Its exact scope is **479 changed paths, 469 new artwork files and 704 new HD frames**, bringing the published bundled runtime to **4,296 frames / 2,483 complete sequences**. The validated 8,659-file runtime, source/binary guards and bounded six-image visual scope above are unchanged. Visible warm rectangular grain/value joins remain an unfinished material-consistency item. + +The first actual [native Windows run 38202643090](https://github.com/Quintine/RustRaptor/actions/runs/38202643090) observation at **2026-10-12 04:11:48 UTC** was `in_progress` for that exact commit, with checkout running and no conclusion or artifact. Receipt `.reference/hd-runtime-4296/windows-ci-first-running-observation.json`, SHA `e30dc2e80a29352952c0a9403adf03b81abc32e10547d662215498636c8ce0bb`, authenticates this bounded observation. It supplies no new Windows success, artifact, fresh audio or binary claim; the previous 3,592-frame success remains historical. + +Later source work remains separate from this release. The deliberately selected small54 proposal contains the newly closed Windows29 and F0 accepted15 terrain definitions, qualified105e3 and complete atomic Mole9. It requires authentic combined forward/reverse/state and saved-backdrop accounting against published4296 before any context activation or admission. Ready392 likewise requires additive accounting for 303 omitted baseline composition arrays and two affected controlled enemy strips; its existing 6,989-row source plan is retained verbatim. New genuine original-only generation and held-method preparations add no registered frame here. + +## Completed native Windows verification for published 4296 + +The exact published commit **`ca438faf45cac4518d852d55abae9fe2a2d4ffbb`** passed all **15 steps** of [Windows run 38202643090](https://github.com/Quintine/RustRaptor/actions/runs/38202643090), completed **2026-10-12 04:33:03 UTC**. Root's additive receipt `.reference/hd-runtime-4296/windows-ci-success-20261012.json`, SHA `2a65d2dd54e0f9e06d93beb3a1a2aee4ec458ef0e6bf04272edb4e29c1e1b6d0`, binds the completed API observation `aed1f027596206a4bdb95a813c53305fb2f6e18626afb6cfd93c0505a0e5b918` and downloaded log `6cebabc6e1b7d29b8daa1feca24fc7324d54650cb781af86d31753831d7300ed`. The earlier running observations remain unchanged historical evidence. + +Actual Windows validation registered and accepted **4,296 HD frames with zero rejections**, plus **45 mods and one override**. Portable simulation/mod/save tests, carried-pilot Black Tide and paid repairs, included executable and launcher, native build/package, displayed boss phases and SD/HD shop, packaged HD/mod/SDL gameplay and artifact upload all succeeded. Stage2 generated audio contained **132,300 frames at 44,100 Hz** for each three-second check: music had **261,955 nonzero samples**, and music-muted sound effects had **210,858**. + +The uploaded [RustRaptor Windows artifact 11727230004](https://github.com/Quintine/RustRaptor/actions/runs/38202643090/artifacts/11727230004) is **6,311,100,791 bytes**, digest **`a86a35305225751c5a7e0c560b538cef7e8898eaba6fe7d9c8284b56f553f8aa`**. Root fetched the completed API and log; it did not download or extract the ZIP, execute it locally on Windows, listen to the audio locally or replace the bundled binaries. This CI result does not expand the bounded six-image visual review or resolve the visible warm rectangular material/value joins. Later source preparations and qualified peer packets add no registered frames in this documentation update. + + +## Closed 4,350-frame external admission + +Registration receipt `../data/hd/registered-class-review/batch-4350-registration.json`, SHA `b6f7347a7cc5286733cb53b4826cc0157db24814f25f8180c0a4de6442bcae29`, adds exactly **54 frames / five jobs / 46 sequences** after canonical dry run and independent final metadata audit `d1fed9982ef122f3a05e619b30c428caac1c982d342101ed0cac4a679b45dd56`. Final metadata preparation `4187e1681315e2dd1dc0c5e2471222b2650290be810f4d62ebb425afa54e8bed` binds **58 authentic inventory records = 54 selected + four original fallbacks**, **270 current source/native component aliases**, the original E3 parent’s outside15 scope, the Windows historical null QA header and complete atomic Mole9. Existing source/reference/envelope gaps and all actual refusals remain literal. + +Independent source plan `76fc9debec1642cdaf93441d7f0e5a85e6cbfd73f219d83e97f5f4f952772460` and current technical proof `af495eb939db6c09d6077ce69427f0bee77917be473f98f928a7d9dc41f0b2a5` resolve **3,312 final effective identities** to **1,112 retained all1–4 source/HD aliases plus 2,200 actual new compositions**: **2,125 changed bindings and 75 baseline proof gaps**. All **8,800 HD + 8,800 original native arrays** and **726 complete unresampled pages** are closed. Six distinct actual viewers cover ranks 0–299, 300–699, 700–1099, 1100–1399, 1400–1799 and 1800–2199 exactly, with aggregate `d142ae1355776929c1bcb592e4a8f5c417b45211f26ebc094c7119c093259907` and outside closure `ab4c4865d2c52369af14812f222d4c0ff4a71ab1971870f2dc2bbf0a8e9e440c`. Twelve fixed Mole saved views retain their exact previous actor/backdrop/scale scope. No new material approval or broad World run is attributed to this context proof. + +Full old **2,483-sequence header prefix** is exact. New **46 complete descriptive sequence headers and frame/default dictionaries** have a bijection from symbolic source projection `345d9760` to actual five-job registrar append order; name/order differences are recorded in sequence-header resolution `5cc7cf1472236e59858d813deadcc326639d5ec99473a96d594c09ea6e6e9888`, without claiming manifest byte or sequence-order equality. Actual development hd.json is `4077e78008baacad51ec120d1a057db2313293dfd8c9550f322ff0f7b62802bd`. Source18, immutable7b/ba61, both bundled executables, crop/origin/palette and optional-frame policies are unchanged. Stronger grain, bevel/char relief and visible original/HD density/value islands remain qualifications; no seamless full-map, live Host/timing or complete-mission claim follows. + +The closed 392, 144 and 70 cohorts, the six new qualified singletons and the two soil corrections remain separate later admission scopes. Source-only future4350 census `d06f9336636dcd94bb0d0b7e93d571d57d2ba99e5f4f042304ec2f7e0e20a430` retains all 8,575 previous later Terrain inputs, but identifies **12 additional genuine reverse3×3 inputs / 48 future HD scale views** for the 392 cohort after actual4350 publication; their 48 original controls already alias. The two shared392 strips and later70/144 impact on qualified19’s 34 full scenes /128 physical ROI scale inputs remain separately pending. None is included in this 54-frame registration. + +The bundled runtime remains the independently validated **4,296-frame / 2,483-sequence** publication at commit `ca438faf45cac4518d852d55abae9fe2a2d4ffbb`. Its exact native Windows CI [38202643090](https://github.com/Quintine/RustRaptor/actions/runs/38202643090) completed successfully on 2026-10-12 at 04:33:03 UTC with all 15 steps. The new 4,350-frame external pack is awaiting root’s immutable intake, bundled assembly, actual CLI/SDL review and Git publication; no 4,350 Windows result is claimed. diff --git a/docs/hd-completion.json b/docs/hd-completion.json index 4196d0aa..81a970a3 100644 --- a/docs/hd-completion.json +++ b/docs/hd-completion.json @@ -19,10 +19,10 @@ ], "stage_contract": "Every generated candidate stays distinct from review, registration and render reachability. Original-only fallback is temporary for every required picture. Native cinematics/fonts have explicit preservation exceptions, not HD claims.", "picture_status_counts": { - "registered": 4276, - "inprogress": 302, + "registered": 4330, + "inprogress": 257, "renderreachable": 20, - "candidate": 1008, + "candidate": 999, "missing": 147 }, "assets": { @@ -25906,7 +25906,7 @@ "canonical_source_asset": "10352", "family_id": "bosses-10352-1035a", "job_id": "bosses-10352-1035a", - "status": "candidate", + "status": "registered", "owner": "/root/iron_coast_4", "remaster_required": true, "registry_or_layout_referenced": true, @@ -25940,7 +25940,7 @@ "canonical_source_asset": "10353", "family_id": "bosses-10352-1035a", "job_id": "bosses-10352-1035a", - "status": "candidate", + "status": "registered", "owner": "/root/iron_coast_4", "remaster_required": true, "registry_or_layout_referenced": true, @@ -25974,7 +25974,7 @@ "canonical_source_asset": "10354", "family_id": "bosses-10352-1035a", "job_id": "bosses-10352-1035a", - "status": "candidate", + "status": "registered", "owner": "/root/iron_coast_4", "remaster_required": true, "registry_or_layout_referenced": true, @@ -26008,7 +26008,7 @@ "canonical_source_asset": "10355", "family_id": "bosses-10352-1035a", "job_id": "bosses-10352-1035a", - "status": "candidate", + "status": "registered", "owner": "/root/iron_coast_4", "remaster_required": true, "registry_or_layout_referenced": true, @@ -26042,7 +26042,7 @@ "canonical_source_asset": "10356", "family_id": "bosses-10352-1035a", "job_id": "bosses-10352-1035a", - "status": "candidate", + "status": "registered", "owner": "/root/iron_coast_4", "remaster_required": true, "registry_or_layout_referenced": true, @@ -26076,7 +26076,7 @@ "canonical_source_asset": "10357", "family_id": "bosses-10352-1035a", "job_id": "bosses-10352-1035a", - "status": "candidate", + "status": "registered", "owner": "/root/iron_coast_4", "remaster_required": true, "registry_or_layout_referenced": true, @@ -26110,7 +26110,7 @@ "canonical_source_asset": "10358", "family_id": "bosses-10352-1035a", "job_id": "bosses-10352-1035a", - "status": "candidate", + "status": "registered", "owner": "/root/iron_coast_4", "remaster_required": true, "registry_or_layout_referenced": true, @@ -26144,7 +26144,7 @@ "canonical_source_asset": "10359", "family_id": "bosses-10352-1035a", "job_id": "bosses-10352-1035a", - "status": "candidate", + "status": "registered", "owner": "/root/iron_coast_4", "remaster_required": true, "registry_or_layout_referenced": true, @@ -26178,7 +26178,7 @@ "canonical_source_asset": "1035a", "family_id": "bosses-10352-1035a", "job_id": "bosses-10352-1035a", - "status": "candidate", + "status": "registered", "owner": "/root/iron_coast_4", "remaster_required": true, "registry_or_layout_referenced": true, @@ -46868,7 +46868,7 @@ "canonical_source_asset": "10590", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -46879,7 +46879,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "10591": { "kind": "picture", @@ -46900,7 +46906,7 @@ "canonical_source_asset": "10591", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -46911,7 +46917,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "10592": { "kind": "picture", @@ -46932,7 +46944,7 @@ "canonical_source_asset": "10592", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -46943,7 +46955,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "10593": { "kind": "picture", @@ -46964,7 +46982,7 @@ "canonical_source_asset": "10593", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -46975,7 +46993,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "10594": { "kind": "picture", @@ -46996,7 +47020,7 @@ "canonical_source_asset": "10594", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47007,7 +47031,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "10595": { "kind": "picture", @@ -47028,7 +47058,7 @@ "canonical_source_asset": "10595", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47039,7 +47069,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "10596": { "kind": "picture", @@ -47060,7 +47096,7 @@ "canonical_source_asset": "10596", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47071,7 +47107,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "10597": { "kind": "picture", @@ -47092,7 +47134,7 @@ "canonical_source_asset": "10597", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47103,7 +47145,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "10598": { "kind": "picture", @@ -47124,7 +47172,7 @@ "canonical_source_asset": "10598", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47135,7 +47183,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "10599": { "kind": "picture", @@ -47156,7 +47210,7 @@ "canonical_source_asset": "10599", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47167,7 +47221,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "1059a": { "kind": "picture", @@ -47188,7 +47248,7 @@ "canonical_source_asset": "1059a", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47199,7 +47259,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "1059b": { "kind": "picture", @@ -47220,7 +47286,7 @@ "canonical_source_asset": "1059b", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47231,7 +47297,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "1059c": { "kind": "picture", @@ -47252,7 +47324,7 @@ "canonical_source_asset": "1059c", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47263,7 +47335,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "1059d": { "kind": "picture", @@ -47284,7 +47362,7 @@ "canonical_source_asset": "1059d", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47295,7 +47373,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "1059e": { "kind": "picture", @@ -47348,7 +47432,7 @@ "canonical_source_asset": "1059f", "family_id": "terrain-10590-1059f", "job_id": "terrain-10590-1059f", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47359,7 +47443,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-10590-1059f/candidate.json", + "sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-10590-1059f" }, "105a0": { "kind": "picture", @@ -47380,7 +47470,7 @@ "canonical_source_asset": "105a0", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47391,7 +47481,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105a1": { "kind": "picture", @@ -47412,7 +47508,7 @@ "canonical_source_asset": "105a1", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47423,7 +47519,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105a2": { "kind": "picture", @@ -47444,7 +47546,7 @@ "canonical_source_asset": "105a2", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47455,7 +47557,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105a3": { "kind": "picture", @@ -47476,7 +47584,7 @@ "canonical_source_asset": "105a3", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47487,7 +47595,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105a4": { "kind": "picture", @@ -47540,7 +47654,7 @@ "canonical_source_asset": "105a5", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47551,7 +47665,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105a6": { "kind": "picture", @@ -47572,7 +47692,7 @@ "canonical_source_asset": "105a6", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47583,7 +47703,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105a7": { "kind": "picture", @@ -47636,7 +47762,7 @@ "canonical_source_asset": "105a8", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47647,7 +47773,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105a9": { "kind": "picture", @@ -47668,7 +47800,7 @@ "canonical_source_asset": "105a9", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": false, @@ -47679,7 +47811,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105aa": { "kind": "picture", @@ -47700,7 +47838,7 @@ "canonical_source_asset": "105aa", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": false, @@ -47711,7 +47849,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105ab": { "kind": "picture", @@ -47732,7 +47876,7 @@ "canonical_source_asset": "105ab", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47743,7 +47887,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105ac": { "kind": "picture", @@ -47764,7 +47914,7 @@ "canonical_source_asset": "105ac", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47775,7 +47925,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105ad": { "kind": "picture", @@ -47796,7 +47952,7 @@ "canonical_source_asset": "105ad", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47807,7 +47963,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105ae": { "kind": "picture", @@ -47828,7 +47990,7 @@ "canonical_source_asset": "105ae", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47839,7 +48001,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105af": { "kind": "picture", @@ -47860,7 +48028,7 @@ "canonical_source_asset": "105af", "family_id": "terrain-105a0-105af", "job_id": "terrain-105a0-105af", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -47871,7 +48039,13 @@ "RustRaptor/tests/hd_terrain.rs", ".reference/terrain-hd/shoreline-draft-context-proof.png" ] - } + }, + "candidate": { + "manifest": "jobs/terrain-105a0-105af/candidate.json", + "sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "validation_scope": "source-bound metadata, target ownership and artwork file presence; artistic/PNG/runtime review is separate" + }, + "coordinator_review_ref": "terrain-105a0-105af" }, "105b0": { "kind": "picture", @@ -49524,7 +49698,7 @@ "canonical_source_asset": "105e3", "family_id": "terrain-105e0-105ef", "job_id": "terrain-105e0-105ef", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -49940,7 +50114,7 @@ "canonical_source_asset": "105f0", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -49972,7 +50146,7 @@ "canonical_source_asset": "105f1", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -50004,7 +50178,7 @@ "canonical_source_asset": "105f2", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -50068,7 +50242,7 @@ "canonical_source_asset": "105f4", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -50100,7 +50274,7 @@ "canonical_source_asset": "105f5", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -50132,7 +50306,7 @@ "canonical_source_asset": "105f6", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -50164,7 +50338,7 @@ "canonical_source_asset": "105f7", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -50196,7 +50370,7 @@ "canonical_source_asset": "105f8", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -50228,7 +50402,7 @@ "canonical_source_asset": "105f9", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -50260,7 +50434,7 @@ "canonical_source_asset": "105fa", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -50292,7 +50466,7 @@ "canonical_source_asset": "105fb", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -50324,7 +50498,7 @@ "canonical_source_asset": "105fc", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -50356,7 +50530,7 @@ "canonical_source_asset": "105fd", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -50388,7 +50562,7 @@ "canonical_source_asset": "105fe", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -50420,7 +50594,7 @@ "canonical_source_asset": "105ff", "family_id": "terrain-105f0-105ff", "job_id": "terrain-105f0-105ff", - "status": "inprogress", + "status": "registered", "owner": "/root/hd_terrain_set_1", "remaster_required": true, "registry_or_layout_referenced": true, @@ -219798,7 +219972,7 @@ "owner": "/root/iron_coast_4", "target_count": 9, "status_counts": { - "candidate": 9 + "registered": 9 }, "job_file": "bosses-10352-1035a/job.json" }, @@ -222969,7 +223143,8 @@ "owner": "/root/hd_terrain_set_1", "target_count": 16, "status_counts": { - "inprogress": 16 + "registered": 15, + "inprogress": 1 }, "job_file": "terrain-10590-1059f/job.json" }, @@ -222981,7 +223156,8 @@ "owner": "/root/hd_terrain_set_1", "target_count": 16, "status_counts": { - "inprogress": 16 + "registered": 14, + "inprogress": 2 }, "job_file": "terrain-105a0-105af/job.json" }, @@ -223029,7 +223205,8 @@ "owner": "/root/hd_terrain_set_1", "target_count": 16, "status_counts": { - "inprogress": 16 + "inprogress": 15, + "registered": 1 }, "job_file": "terrain-105e0-105ef/job.json" }, @@ -223041,7 +223218,8 @@ "owner": "/root/hd_terrain_set_1", "target_count": 16, "status_counts": { - "inprogress": 16 + "registered": 15, + "inprogress": 1 }, "job_file": "terrain-105f0-105ff/job.json" }, @@ -229402,6 +229580,26 @@ }, "runtime_qa": "registered-class-review/batch-3592-final-successor-metadata/jobs/terrain-10570-1057f/runtime-qa-exact-alias.json" }, + "terrain-10590-1059f": { + "status": "approved", + "candidate_sha256": "0719d10e0aadae8bc56abfe809e6f74816dafa58fcd5c415fa9c9a67a86a7cec", + "frame_bindings_sha256": "02f89e460bc1599d6d8d265d4f355a3859f6f3f22b13735b0024ef6cf4d8fa27", + "receipt": { + "path": "jobs/terrain-10590-1059f/coordinator-review.json", + "sha256": "54b2d7df511f4d89f598f935c0793de036333c41fee3c831bc766b35bb7565cd" + }, + "runtime_qa": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-final-successor-metadata/jobs/terrain-10590-1059f/runtime-qa-exact-alias.json" + }, + "terrain-105a0-105af": { + "status": "approved", + "candidate_sha256": "b0c75ea3051187577e9ac4372230f5818d75b6258f8ee5a35f00678e41a7faa8", + "frame_bindings_sha256": "537caf9f5c0d4e7699a6ce94c57c108dcf493aff7da94849f6c63a8f903070e3", + "receipt": { + "path": "jobs/terrain-105a0-105af/coordinator-review.json", + "sha256": "67db33c5e7623a92213bafbda52b4d4b5b9c23a9c289bf1d33c13e507a96cda0" + }, + "runtime_qa": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-final-successor-metadata/jobs/terrain-105a0-105af/runtime-qa-exact-alias.json" + }, "terrain-2010d-2011c": { "status": "approved", "candidate_sha256": "e65fe2737df0f02746cd5024decd6d00e6aeffa0574566e24b7ab803c592e3fb", @@ -231203,7 +231401,7 @@ "native_stage_contract": "native_preserved applies only to307 closed native cinematics/fonts with remaster_required=false and HD_remastered=false. It does not enter the picture HD stage counts.", "runtime_release_evidence": { "runtime4296": { - "status": "ROOT_RUNTIME4296_VALIDATION_CLOSED_REMOTE_PUBLICATION_AND_NEW_WINDOWS_CI_PENDING", + "status": "PUBLISHED4296_REMOTE_HEAD_CONFIRMED_EXACT_NATIVE_WINDOWS_CI_SUCCESS", "approved_frames": 4296, "complete_sequences": 2483, "terrain_frames": 3262, @@ -231261,6 +231459,36 @@ "sha256": "49878cb4dc04608dcc9ae6abfd481dddf5b9f9648589d930ce990ec1f6d3badd", "size": 3849, "mtime_ns": 1791777473590168070 + }, + "publication.json": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-runtime-4296/publication.json", + "sha256": "881c9ff9fb5233a486e0874221356407c8a424c8af7eeffbb21416c5f0627c99", + "size": 3028, + "mtime_ns": 1791778173231537976 + }, + "windows-ci-first-running-observation.json": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-runtime-4296/windows-ci-first-running-observation.json", + "sha256": "e30dc2e80a29352952c0a9403adf03b81abc32e10547d662215498636c8ce0bb", + "size": 4564, + "mtime_ns": 1791778308761572597 + }, + "windows-ci-success-20261012.json": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-runtime-4296/windows-ci-success-20261012.json", + "sha256": "2a65d2dd54e0f9e06d93beb3a1a2aee4ec458ef0e6bf04272edb4e29c1e1b6d0", + "size": 2765, + "mtime_ns": 1791780100288777467 + }, + "windows-ci-final-api-20261012.json": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-runtime-4296/windows-ci-final-api-20261012.json", + "sha256": "aed1f027596206a4bdb95a813c53305fb2f6e18626afb6cfd93c0505a0e5b918", + "size": 5928, + "mtime_ns": 1791780063035424388 + }, + "windows-ci-completed-log-20261012.txt": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-runtime-4296/windows-ci-completed-log-20261012.txt", + "sha256": "6cebabc6e1b7d29b8daa1feca24fc7324d54650cb781af86d31753831d7300ed", + "size": 259865, + "mtime_ns": 1791780064990156393 } }, "screenshots_physically_viewed_by_root": 6, @@ -231269,13 +231497,13 @@ "material_consistency_followup": "Warmer rectangular fine grain and value joins; retain source-bound qualifications and review bounded affected terrain later.", "no_whole_campaign_or_whole_map_seamless_claim": true, "source18_both_executables_original6450_and_prior3592_bindings_exact": true, - "last_remote_confirmed_runtime_frames": 3592, - "last_remote_confirmed_commit": "b72d2be1f7bb41341c083624baca6762a59bdc0a", + "last_remote_confirmed_runtime_frames": 4296, + "last_remote_confirmed_commit": "ca438faf45cac4518d852d55abae9fe2a2d4ffbb", "prior_exact3592_windows_success": { "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-runtime-3592/windows-ci-success.json", "sha256": "3cf8905415760196b583beb89a61c9ff90358fab478e9fd1a17bad49c22f1e63" }, - "new4296_windows_CI_success_claimed": false, + "new4296_windows_CI_success_claimed": true, "root_workflow_timeout_minutes": { "before": 30, "after": 60 @@ -231302,7 +231530,143 @@ "actual_permanent_refusals": 8, "policy_limited_original12_family_frames": 16, "no_extra_admission": true + }, + "published_changed_paths": 479, + "published_new_artwork_files": 469, + "published_new_frames": 704, + "new4296_windows_CI_first_observation": { + "run": 38202643090, + "head": "ca438faf45cac4518d852d55abae9fe2a2d4ffbb", + "observed_utc": "2026-10-12T04:11:48.761378+00:00", + "status": "in_progress", + "conclusion": null, + "artifact_observed": false, + "url": "https://github.com/Quintine/RustRaptor/actions/runs/38202643090" + }, + "new4296_windows_CI_completed_success": { + "run": 38202643090, + "head": "ca438faf45cac4518d852d55abae9fe2a2d4ffbb", + "completed_at": "2026-10-12T04:33:03Z", + "status": "completed", + "conclusion": "success", + "all_steps_succeeded": 15, + "url": "https://github.com/Quintine/RustRaptor/actions/runs/38202643090", + "actual_checks": { + "hd_registered": 4296, + "hd_validated": 4296, + "supplied_frames_rejected": 0, + "mods_validated": 45, + "overrides": 1, + "portable_simulation_mod_windows_save_tests": "SUCCESS", + "carried_pilot_black_tide_and_paid_repairs": "SUCCESS", + "included_executable_and_launcher": "SUCCESS", + "native_windows_build_package": "SUCCESS", + "boss_phases_and_sd_hd_shop": "SUCCESS", + "packaged_data_mod_sdl_gameplay": "SUCCESS", + "stage2_music": { + "rate": 44100, + "frames": 132300, + "nonzero_samples": 261955 + }, + "stage2_music_muted_sound_effects": { + "rate": 44100, + "frames": 132300, + "nonzero_samples": 210858 + } + }, + "artifact": { + "id": 11727230004, + "node_id": "MDg6QXJ0aWZhY3QxMTcyNzIzMDAwNA==", + "name": "RustRaptor-windows-x86_64", + "size_in_bytes": 6311100791, + "url": "https://api.github.com/repos/Quintine/RustRaptor/actions/artifacts/11727230004", + "archive_download_url": "https://api.github.com/repos/Quintine/RustRaptor/actions/artifacts/11727230004/zip", + "expired": false, + "digest": "sha256:a86a35305225751c5a7e0c560b538cef7e8898eaba6fe7d9c8284b56f553f8aa", + "created_at": "2026-10-12T04:32:59Z", + "updated_at": "2026-10-12T04:32:59Z", + "expires_at": "2027-01-10T04:09:33Z", + "workflow_run": { + "id": 38202643090, + "repository_id": 1413963700, + "head_repository_id": 1413963700, + "head_branch": "codex/rust-rewrite", + "head_sha": "ca438faf45cac4518d852d55abae9fe2a2d4ffbb" + } + }, + "artifact_page": "https://github.com/Quintine/RustRaptor/actions/runs/38202643090/artifacts/11727230004", + "scope": { + "completed_api_and_logs_fetched": true, + "zip_downloaded": false, + "zip_extracted_or_locally_executed": false, + "audio_listened_to_locally": false, + "bundled_local_binaries_replaced": false, + "earlier_running_observations_retained": true, + "workflow_timeout_minutes": 60 + } } + }, + "external4350": { + "status": "EXTERNAL4350_REGISTERED_INDEPENDENT_SOURCE_COMPONENT_MATERIAL_CONTEXT_AND_METADATA_CLOSED_ROOT_DELIVERY_PENDING", + "approved_frames": 4350, + "complete_sequences": 2529, + "terrain_frames": 3307, + "remaining_required_originals": 1403, + "frames_added": 54, + "jobs_added": 5, + "sequences_added": 46, + "registration": { + "path": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-registration.json", + "sha256": "b6f7347a7cc5286733cb53b4826cc0157db24814f25f8180c0a4de6442bcae29", + "size": 319, + "mtime_ns": 1791787378855353343, + "mode": 33152 + }, + "post_registration": { + "path": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-post-registration.json", + "sha256": "1c00959e0719c1ca75d3afe244696aeeeba7974372f9415e60e846efab758281", + "size": 3262, + "mtime_ns": 1791787594248723176, + "mode": 33152 + }, + "final_preparation": { + "path": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-final-successor-metadata/final-successor-preparation.json", + "sha256": "4187e1681315e2dd1dc0c5e2471222b2650290be810f4d62ebb425afa54e8bed", + "size": 57610, + "mtime_ns": 1791786689760262619, + "mode": 33188 + }, + "independent_final_metadata_audit": { + "path": "/home/quintine/Projects/RaptorReplica/RustRaptor/.reference/hd-terrain2-final54-metadata-independent-audit-default7b/independent-final54-metadata-source-context-and-header-audit.json", + "sha256": "d1fed9982ef122f3a05e619b30c428caac1c982d342101ed0cac4a679b45dd56", + "size": 43199, + "mtime_ns": 1791787160947347640, + "mode": 33188 + }, + "actual_six_peer_context_review": { + "path": "/home/quintine/Projects/RaptorReplica/.reference/hd-full-review/small54-final4350-six-peer-global-context-aggregate-default7b/independent-six-peer-full54-final4350-context-aggregate.json", + "sha256": "d142ae1355776929c1bcb592e4a8f5c417b45211f26ebc094c7119c093259907", + "size": 14852931, + "mtime_ns": 1791784555940275545, + "mode": 420 + }, + "actual_six_peer_context_closure": { + "path": "/home/quintine/Projects/RaptorReplica/.reference/hd-full-review/small54-final4350-six-peer-global-context-aggregate-default7b-strict-closure.json", + "sha256": "ab4c4865d2c52369af14812f222d4c0ff4a71ab1971870f2dc2bbf0a8e9e440c" + }, + "actual_2200_native_pages": 726, + "full_old2483_sequence_prefix_preserved": true, + "new46_full_header_order_bijection": { + "path": "/home/quintine/Projects/RaptorReplica/data/hd/registered-class-review/batch-4350-sequence-header-and-order-resolution.json", + "sha256": "5cc7cf1472236e59858d813deadcc326639d5ec99473a96d594c09ea6e6e9888", + "size": 20527, + "mtime_ns": 1791787350821152314, + "mode": 33152 + }, + "last_remote_confirmed_runtime_frames": 4296, + "last_remote_confirmed_commit": "ca438faf45cac4518d852d55abae9fe2a2d4ffbb", + "new4350_bundled_runtime_or_Git_or_Windows_CI_success_claimed": false, + "next_later_392_70_144_sixsingles_and_two_soil_admission_not_granted": true } } } diff --git a/docs/hd-coordinator-checkpoint.md b/docs/hd-coordinator-checkpoint.md index a00afbe4..2105de77 100644 --- a/docs/hd-coordinator-checkpoint.md +++ b/docs/hd-coordinator-checkpoint.md @@ -1,6 +1,6 @@ # HD coordinator checkpoint — 12 October 2026 -The external development pack contains **4,296 original picture frames in 2,483 complete sequences**, including **3,262 terrain pictures**. Its fixed 704-frame admission, official bookkeeping and immutable handoff are closed. The assembled bundled runtime supplies **4,296 frames / 2,483 complete sequences**, including **3,262 terrain pictures**, in **8,659 files / 6,159,339,222 bytes**. Root closed immutable intake, source-authority and shared-data checks; the actual bundled CLI validates all 4,296 HD frames with zero rejects and 45 mods / one override. Six fresh 1920×1080 SDL frames were physically reviewed: four presentation regressions and an affected Sector3 Wave6 HD/original pair. Crater silhouettes and placement remain source-aligned; warmer rectangular grain/value joins remain a consistency limitation. Root Git publication and new 4,296-frame native Windows CI are pending. The last remote-confirmed runtime is the 3,592-frame commit `b72d2be1f7bb41341c083624baca6762a59bdc0a`, whose exact native Windows CI passed all 15 steps. +The external development pack now supplies **4,350 reviewed original picture frames in 2,529 complete sequences**, including **3,307 terrain pictures**. The exact new admission is **45 native Terrain singletons plus the complete nine-frame Mole animation**, **54 frames / five jobs / 46 new sequences**. Four originals (`1059e`, `105a4`, `105a7`, `105f3`) remain fallback. Current component, authentic source, material and changed-context authorities are separately closed. The bundled runtime remains the independently validated **4,296-frame / 2,483-sequence** publication at commit `ca438faf45cac4518d852d55abae9fe2a2d4ffbb`. Its exact native Windows CI [38202643090](https://github.com/Quintine/RustRaptor/actions/runs/38202643090) completed successfully on 2026-10-12 at 04:33:03 UTC with all 15 steps. The new 4,350-frame external pack is awaiting root’s immutable intake, bundled assembly, actual CLI/SDL review and Git publication; no 4,350 Windows result is claimed. Published runtime history: The assembled bundled Linux/Windows data contains **3,165 reviewed frames / 1,667 complete sequences**, including **2,137 terrain pictures**, in **7,934 files / 3,808,351,209 bytes**. Actual CLI validates 6,449 original assets, all 3,165 HD frames with zero rejects, and 45 mods / one override. Root physically reviewed three fresh 1920×1080 software SDL captures: the main menu and original Sector 1 Wave 7 / Sector 3 Wave 9. Mixed HD/original texture boundaries and mostly original Sector 3 terrain remain visible. Both executables, all original catalog files and all 18 Rust sources are unchanged. The 3,165-frame bundle is published in commit `2f7a9a7c01533c9d22b0c794575e577c84460e2d`. Native Windows CI run `38189732306` completed successfully for that exact commit, including all 15 build, test, packaged SDL and artifact-upload steps. Native Windows CI for published 2,935-frame commit `813112a90ec8b094c2704340f0bb52606683da5e` passed [38186844952](https://github.com/Quintine/RustRaptor/actions/runs/38186844952), including packaged HD/data/SDL checks and artifact upload. The earlier 2,354-frame run [38183746763](https://github.com/Quintine/RustRaptor/actions/runs/38183746763) and full Linux/Wine ZIP, intro and isolated-audio proofs for 2,240-frame exports retain their historical scope. Root owns runtime data, binaries, libraries, Git and exports; coordinator owns external registration and these four documents. @@ -9,16 +9,16 @@ Published runtime history: The assembled bundled Linux/Windows data contains **3 | Category | Registered / original pictures | | --- | ---: | | Player banking | 21 / 21 | -| Bosses | 233 / 249 | +| Bosses | 242 / 249 | | Enemies and ground objects | 309 / 419 | | Player and enemy projectiles | 51 / 51 | | Explosions and effects | 281 / 281 | | Equipment and pickups | 47 / 47 | -| Terrain | 3,262 / 4,535 | +| Terrain | 3,307 / 4,535 | | Menus, portraits, HUD and other pictures | 92 / 150 | -| Total | 4,296 / 5,753 | +| Total | 4,350 / 5,753 | -All 6,449 catalog entries and 5,753 pictures were audited with zero HD source/hash/canvas/ID errors. **1,457 pictures await registration**. Picture ledger counts are {'registered': 4276, 'inprogress': 302, 'renderreachable': 20, 'candidate': 1008, 'missing': 147}; candidate status is not art approval or live occurrence. All 307 native AGX/font records remain separately `native_preserved`, with no generated HD coverage. Unused/destroyed pictures remain required. +All 6,449 catalog entries and 5,753 pictures were audited with zero HD source/hash/canvas/ID errors. **1,403 pictures await registration**. Picture ledger counts are {'registered': 4330, 'inprogress': 257, 'renderreachable': 20, 'candidate': 999, 'missing': 147}; candidate status is not art approval or live occurrence. All 307 native AGX/font records remain separately `native_preserved`, with no generated HD coverage. Unused/destroyed pictures remain required. ## Historical Stage2 API 1,148 output proof @@ -458,7 +458,7 @@ The already closed older383 and late336 cohorts form gross719 source readiness ` A disjoint review campaign covers 26 previously unreviewed successful enemy singletons with direct Iron2 custody; source plans precede current native1–4 and bounded authentic World views. Terrain2 has closed five qualified singleton reviews (30064/30066/30067/30069/3006a) in report `950d556ebcda3dabea9960e40dfc8ff433fcc47eb6099e60ad7e6bd8140a74f2`, strict closure `04882bf73b43ba5b34994c053f3bdea2d665fa2e1d52d72ae75934dc39b2e58f`; these later decisions remain outside this fixed427 admission. New terrain family reviews and held-method adjudications continue in separate frozen scopes. Genuine refusals, source geometry/cue failures and atomic animation holds retain original fallback. The earlier post3165 census remains an immutable snapshot with its separately named addenda, rather than a live classification of these later closures. -## Closed 4296 admission and runtime validation; publication pending +## Closed 4296 admission and runtime validation The exact new admission is **704 source/material-qualified terrain pictures in 44 complete original job inventories**, represented by **368 native standalone definitions plus 21 complete 16-frame sequences**: **389 new runtime sequences**. Fifteen safe64 rows already in published3592 are excluded. External development coverage is **4,296 / 5,753 pictures in 2,483 complete sequences**, including **3,262 / 4,535 terrain pictures**. The remaining **1,457 originals** are **1,273 terrain, 110 enemies/ground objects, 58 UI/other and 16 bosses**. The 307 native AGX/font records remain separate preservation, with no generated HD credit. @@ -468,7 +468,7 @@ Independent final metadata audit `770e332a1080154ece5ad6c097a75960e1f8f066c3b87a Current component authority carries **2,816 byte-equal native1–4 HD outputs plus336 literal Late original component references**. Earlier original rasters are not invented. The independent source/effective audit and explicitly activated zero-delta context identity carry **9,443 authentic declarations / 5,892 exact all1–4 compositions / 47,136 retained source-selected array files**, with **zero new compositions, context rasters, pixel views or material reapprovals**. All17 previously controlled enemy backdrops and closed427 reverse/state arrays remain exact. The actual published3592 manifest and both prospective4296 projections match complete renderer bindings despite descriptive header/name/order differences. Original density, relief, value, contour and cue qualifications remain literal; no seamless whole-map, live Host, timing, full-mission or whole4296 render claim follows. -Immutable `../data/hd/registered-class-review/handoff-4296-20261012/` has manifest SHA `72b00911f66eba5cdb54e9765da342fb60552dc5e43c94352f36f7468f8e6de9`, **2,209 private-inode pack files / 6,146,156,364 bytes**, **469 new artwork files** and **918 compact proofs**. Pack HD SHA is `85c7a778a21abe1a914ef90fa3aa8755b01833a5aa3795272ec03862e80513a2`; provenance is `100981d0a3b4706376dd0486f4823b5aec58ecc6ef4e0dd41ca995c474a85af8`. All3,592 prior renderer bindings/art bytes, original INDEX and18-source immutable7b/ba61 epoch are exact. Its629 source-authority entries use immutable beforecopies when canonical metadata has advanced; copy2 epochs and historical compact-proof copy times are distinguished explicitly. Root has closed independent runtime intake, assembly and bounded CLI/SDL checks below. Git publication remains pending; the last remote-confirmed bundle remains3,592. +Immutable `../data/hd/registered-class-review/handoff-4296-20261012/` has manifest SHA `72b00911f66eba5cdb54e9765da342fb60552dc5e43c94352f36f7468f8e6de9`, **2,209 private-inode pack files / 6,146,156,364 bytes**, **469 new artwork files** and **918 compact proofs**. Pack HD SHA is `85c7a778a21abe1a914ef90fa3aa8755b01833a5aa3795272ec03862e80513a2`; provenance is `100981d0a3b4706376dd0486f4823b5aec58ecc6ef4e0dd41ca995c474a85af8`. All3,592 prior renderer bindings/art bytes, original INDEX and18-source immutable7b/ba61 epoch are exact. Its629 source-authority entries use immutable beforecopies when canonical metadata has advanced; copy2 epochs and historical compact-proof copy times are distinguished explicitly. Root has closed independent runtime intake, assembly and bounded CLI/SDL checks below. At the initial runtime-validation freeze, Git publication was still pending; the later exact remote confirmation is recorded below. The separately frozen prospective1457 authority preview `87a263539d391058ed2ee8ef0c377f06acf2481cc4c08e85d5b40c3262c641b7` / strict `ab4dbc5c6e0552eedfc3089dcf330379f67a9490eddeb2cec44ceec7a5b94962` accounts for every original ID, including58 UI/other pictures and16 bosses. It records859 explicit material positives, eight later Mole frames blocked by whole-animation atomicity,426 concrete holds,95 independent-peer drafts,14 initial-author preparations,31 legacy grid/service families without standalone masters, eight actual permanent refusals and16 Original12 policy-limited pictures. Those are this snapshot's buckets; later complete9 Mole qualification `c1d0f51ff8a0bdf633cea12dac7257ae8976be82cc779b4b97cd1d94291a61b3` / `345a252d6adeb8d3abd1ecf0adcdcd428e2b85b507df2f0ffa5dd9cb67b4ab00`, regional source outcomes and the whole200a2v5 peer hold require named additive updates. None joins fixed704 automatically. Exact392 Terrain2 selections,70 middle Terrain3 selections,19 enemy positives and other closed later cohorts are separate effective-context/admission work. Newly authored105e8 remains different-peer pending;10590–af and105f0 accepted-subset context reviews remain in progress. Actual refusals and held artwork retain original fallback. @@ -476,6 +476,35 @@ Root's actual 4,296-frame runtime checks are closed: immutable intake `62b0c7a6e Fresh SDL checks `479d92655ad4e666d114c359f876dddca81d9914ebd2602e67d58682430f64f8` and affected-content checks `4921d858ae4d9f5b4066f773c6a030963a7d636bc27365cc39e84a0df7dc8622` bind six full1920×1080 images physically viewed by root in `49878cb4dc04608dcc9ae6abfd481dddf5b9f9648589d930ce990ec1f6d3badd`. The four initial menu/S1W7/S2W6/S3W1 images equal their prior3,592-frame captures and cover presentation regression only. Sector3 Wave6's opening HD/original pair actually shows newly selected704 terrain: crater shapes, rims, rocks and placement remain source-aligned, without an observed uncovered gap. Warmer fine-grain rectangular patches and value joins remain visible and require a later source-bound material-consistency pass. This bounded opening is not whole-map seamlessness, a complete campaign or approval of every new704 picture. -The root-owned Windows workflow timeout increases from30 to60 minutes because the previous exact3,592-frame native Windows run took29m10s. Its [successful run38198055220](https://github.com/Quintine/RustRaptor/actions/runs/38198055220) and artifact retain their exact historical scope. A new4,296-frame CI result and remote publication identity are pending at this documentation freeze. +The root-owned Windows workflow timeout increases from30 to60 minutes because the previous exact3,592-frame native Windows run took29m10s. Its [successful run38198055220](https://github.com/Quintine/RustRaptor/actions/runs/38198055220) and artifact retain their exact historical scope. At the initial runtime-validation freeze, the new4,296-frame CI result and remote publication identity were pending. The later publication and first CI observation follow below. The latest separate source-only authority cutoff `2384d7614f9219d9698c53ac03b512f4ee7a5f91e0223d244b4be4664eae7669`, strict `1136baeb2f4d66329a1b0e29c4d54c5ee7816fc5917c49721552bb0da522ed08`, records the remaining1,457 originals as **913 explicit material positives awaiting selection/components/contexts/admission,426 concrete holds,50 independent-peer drafts,13 initial preparations,31 legacy grid/service cases without standalone raw,8 actual permanent refusals and16 Original12 family policy-limited pictures**. Positives comprise861 terrain,21 enemy/ground,22 UI icons and the complete atomic9-frame Mole animation. The F0/Windows final peers and held105e8 are named additive updates; previous census snapshots remain literal. These qualifications add no registered frame to the fixed4,296 batch. + +## Published 4296 runtime and first Windows observation + +Root publication receipt `.reference/hd-runtime-4296/publication.json`, SHA `881c9ff9fb5233a486e0874221356407c8a424c8af7eeffbb21416c5f0627c99`, confirms successful push and matching remote `codex/rust-rewrite` head **`ca438faf45cac4518d852d55abae9fe2a2d4ffbb`**. Its exact scope is **479 changed paths, 469 new artwork files and 704 new HD frames**, bringing the published bundled runtime to **4,296 frames / 2,483 complete sequences**. The validated 8,659-file runtime, source/binary guards and bounded six-image visual scope above are unchanged. Visible warm rectangular grain/value joins remain an unfinished material-consistency item. + +The first actual [native Windows run 38202643090](https://github.com/Quintine/RustRaptor/actions/runs/38202643090) observation at **2026-10-12 04:11:48 UTC** was `in_progress` for that exact commit, with checkout running and no conclusion or artifact. Receipt `.reference/hd-runtime-4296/windows-ci-first-running-observation.json`, SHA `e30dc2e80a29352952c0a9403adf03b81abc32e10547d662215498636c8ce0bb`, authenticates this bounded observation. It supplies no new Windows success, artifact, fresh audio or binary claim; the previous 3,592-frame success remains historical. + +Later source work remains separate from this release. The deliberately selected small54 proposal contains the newly closed Windows29 and F0 accepted15 terrain definitions, qualified105e3 and complete atomic Mole9. It requires authentic combined forward/reverse/state and saved-backdrop accounting against published4296 before any context activation or admission. Ready392 likewise requires additive accounting for 303 omitted baseline composition arrays and two affected controlled enemy strips; its existing 6,989-row source plan is retained verbatim. New genuine original-only generation and held-method preparations add no registered frame here. + +## Completed native Windows verification for published 4296 + +The exact published commit **`ca438faf45cac4518d852d55abae9fe2a2d4ffbb`** passed all **15 steps** of [Windows run 38202643090](https://github.com/Quintine/RustRaptor/actions/runs/38202643090), completed **2026-10-12 04:33:03 UTC**. Root's additive receipt `.reference/hd-runtime-4296/windows-ci-success-20261012.json`, SHA `2a65d2dd54e0f9e06d93beb3a1a2aee4ec458ef0e6bf04272edb4e29c1e1b6d0`, binds the completed API observation `aed1f027596206a4bdb95a813c53305fb2f6e18626afb6cfd93c0505a0e5b918` and downloaded log `6cebabc6e1b7d29b8daa1feca24fc7324d54650cb781af86d31753831d7300ed`. The earlier running observations remain unchanged historical evidence. + +Actual Windows validation registered and accepted **4,296 HD frames with zero rejections**, plus **45 mods and one override**. Portable simulation/mod/save tests, carried-pilot Black Tide and paid repairs, included executable and launcher, native build/package, displayed boss phases and SD/HD shop, packaged HD/mod/SDL gameplay and artifact upload all succeeded. Stage2 generated audio contained **132,300 frames at 44,100 Hz** for each three-second check: music had **261,955 nonzero samples**, and music-muted sound effects had **210,858**. + +The uploaded [RustRaptor Windows artifact 11727230004](https://github.com/Quintine/RustRaptor/actions/runs/38202643090/artifacts/11727230004) is **6,311,100,791 bytes**, digest **`a86a35305225751c5a7e0c560b538cef7e8898eaba6fe7d9c8284b56f553f8aa`**. Root fetched the completed API and log; it did not download or extract the ZIP, execute it locally on Windows, listen to the audio locally or replace the bundled binaries. This CI result does not expand the bounded six-image visual review or resolve the visible warm rectangular material/value joins. Later source preparations and qualified peer packets add no registered frames in this documentation update. + + +## Closed 4,350-frame external admission + +Registration receipt `../data/hd/registered-class-review/batch-4350-registration.json`, SHA `b6f7347a7cc5286733cb53b4826cc0157db24814f25f8180c0a4de6442bcae29`, adds exactly **54 frames / five jobs / 46 sequences** after canonical dry run and independent final metadata audit `d1fed9982ef122f3a05e619b30c428caac1c982d342101ed0cac4a679b45dd56`. Final metadata preparation `4187e1681315e2dd1dc0c5e2471222b2650290be810f4d62ebb425afa54e8bed` binds **58 authentic inventory records = 54 selected + four original fallbacks**, **270 current source/native component aliases**, the original E3 parent’s outside15 scope, the Windows historical null QA header and complete atomic Mole9. Existing source/reference/envelope gaps and all actual refusals remain literal. + +Independent source plan `76fc9debec1642cdaf93441d7f0e5a85e6cbfd73f219d83e97f5f4f952772460` and current technical proof `af495eb939db6c09d6077ce69427f0bee77917be473f98f928a7d9dc41f0b2a5` resolve **3,312 final effective identities** to **1,112 retained all1–4 source/HD aliases plus 2,200 actual new compositions**: **2,125 changed bindings and 75 baseline proof gaps**. All **8,800 HD + 8,800 original native arrays** and **726 complete unresampled pages** are closed. Six distinct actual viewers cover ranks 0–299, 300–699, 700–1099, 1100–1399, 1400–1799 and 1800–2199 exactly, with aggregate `d142ae1355776929c1bcb592e4a8f5c417b45211f26ebc094c7119c093259907` and outside closure `ab4c4865d2c52369af14812f222d4c0ff4a71ab1971870f2dc2bbf0a8e9e440c`. Twelve fixed Mole saved views retain their exact previous actor/backdrop/scale scope. No new material approval or broad World run is attributed to this context proof. + +Full old **2,483-sequence header prefix** is exact. New **46 complete descriptive sequence headers and frame/default dictionaries** have a bijection from symbolic source projection `345d9760` to actual five-job registrar append order; name/order differences are recorded in sequence-header resolution `5cc7cf1472236e59858d813deadcc326639d5ec99473a96d594c09ea6e6e9888`, without claiming manifest byte or sequence-order equality. Actual development hd.json is `4077e78008baacad51ec120d1a057db2313293dfd8c9550f322ff0f7b62802bd`. Source18, immutable7b/ba61, both bundled executables, crop/origin/palette and optional-frame policies are unchanged. Stronger grain, bevel/char relief and visible original/HD density/value islands remain qualifications; no seamless full-map, live Host/timing or complete-mission claim follows. + +The closed 392, 144 and 70 cohorts, the six new qualified singletons and the two soil corrections remain separate later admission scopes. Source-only future4350 census `d06f9336636dcd94bb0d0b7e93d571d57d2ba99e5f4f042304ec2f7e0e20a430` retains all 8,575 previous later Terrain inputs, but identifies **12 additional genuine reverse3×3 inputs / 48 future HD scale views** for the 392 cohort after actual4350 publication; their 48 original controls already alias. The two shared392 strips and later70/144 impact on qualified19’s 34 full scenes /128 physical ROI scale inputs remain separately pending. None is included in this 54-frame registration. + +The bundled runtime remains the independently validated **4,296-frame / 2,483-sequence** publication at commit `ca438faf45cac4518d852d55abae9fe2a2d4ffbb`. Its exact native Windows CI [38202643090](https://github.com/Quintine/RustRaptor/actions/runs/38202643090) completed successfully on 2026-10-12 at 04:33:03 UTC with all 15 steps. The new 4,350-frame external pack is awaiting root’s immutable intake, bundled assembly, actual CLI/SDL review and Git publication; no 4,350 Windows result is claimed. diff --git a/runtime-manifest.json b/runtime-manifest.json index 5faa112f..e72a8421 100644 --- a/runtime-manifest.json +++ b/runtime-manifest.json @@ -2,10 +2,10 @@ "format_version": 1, "platform": "Linux x86_64", "catalog_entries": 6449, - "approved_hd_frames": 4296, + "approved_hd_frames": 4350, "binary_sha256": "9688cdbd57b0d31049bac431a5bb2e864bb3ce7abbaca732634359ad7a53d8a9", - "data_files": 8659, - "data_bytes": 6159339222, + "data_files": 8707, + "data_bytes": 6312332744, "files": { "data/INDEX": "4ce78e5e638b6603114dd233ceaa41f386c0963ba4aa02ecf88ce0215b096681", "data/demos/DEMO1G1_REC": "3f1458e078c4ad10823d8bf5f9918732b87f4b66cf66dd4ea1d95c535b2a87c8", @@ -46,13 +46,16 @@ "data/hd/equipment/forward-guns-hd-v1.png": "8f0734681b93c4ea06520353a3f8517537ed94c0a4e9fe5eb6929ad0582fe25d", "data/hd/equipment/plasma-guns-0-hd-v1.png": "317ddc9bdd02371399e5edd7cf420882029484023ac2d4920b9a5d95f9727b10", "data/hd/equipment/plasma-guns-1-hd-v1.png": "08c3c26d00d9ba1a208dd8f9b14d6552f6087f8446f686d295165516a9149b6a", - "data/hd/hd.json": "85c7a778a21abe1a914ef90fa3aa8755b01833a5aa3795272ec03862e80513a2", + "data/hd/hd.json": "4077e78008baacad51ec120d1a057db2313293dfd8c9550f322ff0f7b62802bd", "data/hd/jobs/bosses-10307-10307/generated/remaster-v1.png": "98a66b5b3aaed496f7080869b57f4332cbf0eed514007943af25a578656724c7", "data/hd/jobs/bosses-10308-10308/generated/remaster-v1.png": "b0fdffa4f72fcdee7f39fdd7d0df4bbce8304fbba38eda66a88c8c3670e5f122", "data/hd/jobs/bosses-1030e-1030e/generated/remaster-v1.png": "2caa5bb832fc17541d92ac3adbf2314f4b1778808b6b062b62d973f4a9a0f9d7", "data/hd/jobs/bosses-1030f-1030f/generated/remaster-v1.png": "0c716e462afaf3b0d143392431f0464fc16c99fa20a4d81c117bb6c55fcd209c", "data/hd/jobs/bosses-10310-10310/corrections/iron-coast-3-peer-v4/remaster.png": "ea1d6d1deec0fdf69f5875ac181dd62d51e80870aa5d093a9b3f2e437da1878e", "data/hd/jobs/bosses-10319-1031e/generated/atlas-raw.png": "07aaab4d62743cbbd67630db35db2f9ec57bcb5c13f3af4b9f52ed8c881b4f47", + "data/hd/jobs/bosses-10352-1035a/generated/remaster-final-v4.png": "39530f4852b2977ddc4c419b827f9a65e86664381b64e53e325aa55c0f701b8b", + "data/hd/jobs/bosses-10352-1035a/generated/remaster-v2.png": "a4801d679df2b98b68c38663039bc2749b595d0c160af46afa5b255a6c5d52ec", + "data/hd/jobs/bosses-10352-opening-localized-master-edit-v1/generated/remaster-opening-v1.png": "f17cceea61389470d3a0c5e723542ba105f55e882a555628e50053d74869da89", "data/hd/jobs/bosses-200a1-200a1/generated/remaster-v1.png": "a87da721045e0326afb12544e6ea1a39569e16f6204a25d1e55c89e61512dae3", "data/hd/jobs/bosses-200a3-200a3/corrections/iron-coast-3-peer-v4/remaster.png": "b86ffdf637032d3a0258817ca04f892b51f2f0a0110b6920ead7d1fdfd6ca6bb", "data/hd/jobs/bosses-200a8-200ab/generated/remaster-v1.png": "72d7e8d2b9952d98cce8298376196b6ddb8858902da7377c12bd0bf0f50a7094", @@ -809,6 +812,51 @@ "data/hd/jobs/terrain-10570-1057f/generated/tile-1057d-v1.png": "b5c1e78ace5f5a82caf7c11eb61ebdcf9b5137f27a0625f5aae32adb3d9f34f4", "data/hd/jobs/terrain-10570-1057f/generated/tile-1057e-v1.png": "da2a3e0c02f073fb44658a864aa45d3f8adb1d37cebae11e689cc357d88416a5", "data/hd/jobs/terrain-10570-1057f/generated/tile-1057f-v1.png": "1bc8ca24aebda3c377080bee6ca6c0dace8f4c90c359c8c28c189829b13a9475", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10590-v1.png": "2540a5080dad78807a565c3281a2b1474741937457ecdce217dc0d4eff21d2fe", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10591-v1.png": "fe213e2c5e28669ce1f3e49fc7213216e278ccff8afd5b8bd3f3f717d0c83690", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10592-v1.png": "6623dc4df9ccf3b31c996c5ab21f77040e3c9096137afecf829bf4de76b02723", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10593-v1.png": "a3c768be223f0a41083d3f7527b994be8161a7ef6895aa18673743105375082f", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10594-v1.png": "2e7b16444ef3ee5847c63314cfc4609cac3fd5af02b3016e2a87dfa0883db3d8", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10595-v1.png": "fd7b77032d6ef15d079402e74c53d64c0ab4fedb4a99a02800f1a1d15cb6214e", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10596-v1.png": "fde61ef0a8cfd492c86a022a3d684efdf9b60511d1847a7c8506d58469649f03", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10597-v1.png": "b605c1552af889db574add83e72847f546f3c34f8e61dc0964a43828f0f245a6", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10598-v1.png": "e9455d171884922002fcec9e60383d04cbad269c31126a6dfe310c570c8e5dd1", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-10599-v1.png": "f53058bcf13b3550ab2a37ae9a1aa3db37deefcd9c53d9e58ae6c83bf0111bc6", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059a-v1.png": "dbd632d8bb6d4589d82cdc431028e83ab6cd269c0b8315c62f74baf6ce18519e", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059b-v1.png": "bb65a1277823ece239d210e4000593534ba20b0dc608601013358552df24b4ca", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059c-v1.png": "22823e514edcc23608da690eb924f32007fa046f25a3ec66200d7bef878c805d", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059d-v1.png": "5198ef48fe5bf5f6ba3896c3c4e422ce7c0f21c085574acc4a008537141fada2", + "data/hd/jobs/terrain-10590-1059f-initial-source-iron2-v1/generated/tile-1059f-v1.png": "e5ae8b81cee56341a0fb5ef05ca04249997630129f0db83feeaf5bb6d9f648b1", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a0-v1.png": "0e60b106290b9c6fdd568681731a7f67f72d9b37af88ea5342b21141f8feb417", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a1-v1.png": "e0c609dddd3c32731292402a6294d179d50002d6c4601e1aaa821697eace1f5f", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a2-v1.png": "c77415ad1f8c36a9ef9b21baba08da9c8719f0cae8803aa29989776e923cfb54", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a3-v1.png": "3d41a779818dbfee4a4436c32c2acd0b99b715d4de0ee027b41a2094e6686909", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a5-v1.png": "be181619ee0fd0924fff99c0330ceee7fa9266564623ea5057079f0ac3b25411", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a6-v1.png": "79f288ecc385a182a36bc657ae118e57c98eb4bdd55e831ea6df197c0ddab412", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a8-v1.png": "be79bf9c3033bd3a13e7ff6583bb0cbe9d8852003e4c0b5811add3d0b8c48e3e", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105a9-v1.png": "9f321e4d3fcd606803ddb425659e1904b1bd9626ed62ca251ed088ff2d39fd94", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105aa-v1.png": "850634ffe1568eabc41783075f8df2bd789ae0f309a239004f327bb3e5aa66f3", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ab-v1.png": "8dc9f994c780e07347a6cc10eeeaca788f055343b7d79f9b1f1b1c18882c3f1d", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ac-v1.png": "091626d47dbd5cd3fccccb0fb3e5c743d826d903d925cdc835d7ef068c02e393", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ad-v1.png": "9fc887b2c48edaf0c7115ec7e9bc0e0166f67bb088b29db8d21e4ca56d75c2be", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105ae-v1.png": "4ff0680cd763a0f65f94341f45e37f962fa3d5650770cd7748dc13d8fa20c587", + "data/hd/jobs/terrain-105a0-105af-initial-source-iron2-v1/generated/tile-105af-v1.png": "5fdddf3cc7902ae412b0643e0ff4bb9c8be199c9e2a5f7e8364d2611e4fb584f", + "data/hd/jobs/terrain-105e3-first-regional-source-campaign-20261012-v1/generated/tile-105e3-v1.png": "d91f7936d0fe7a505e76fa046e9b3e248df7378e78506d941e6a645a9d5ed7f8", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f0-v1.png": "44b73611384ee45f0d3e6f133933f20401c6c086319f071506dc9b6f6d11f61f", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f1-v1.png": "be9d44f97b67006f4b463ec9f9bb3b4d1177056e59e799c03a3806622610bef5", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f2-v1.png": "bb24ff6dd9ae98e8f533febf5d5bfa7eb020f4e666791af79412f1578e331937", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f4-v1.png": "ccb91b686b0f7999c2ca20967a24b511e3c0e2b6d7541d1d01bc8c17ec0aed5a", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f5-v1.png": "695d983b414b0dbd9e652c814e8bf5aa2b41a71d6b7902547adc26f20997d6e1", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f6-v1.png": "e7e041c8243ffa0e317b159cbd32a938d8e07b6d42fd0ae79b50c500bf207d60", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f7-v1.png": "d0a2cd52e556193110059afa7c8573c12dd282e9fb3d4bc781ef625b28e081f2", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f8-v1.png": "5ff6a186f58d30c54a6b8ec55377cfd9b070f1e9f025ec8bf6bfd0a7760205ad", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105f9-v1.png": "dff65c2c9eb0e4d1e363b458d234a816b33fe5edd97bc953b230975090e3c424", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fa-v1.png": "b271b8478ff95145716b7954a1908bb45a368b22726743ac88f0c101674a53dd", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fb-v1.png": "afe365af4ad427a0e31efbccf01e209f711fd686e4a739fa8697b311d256a358", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fc-v1.png": "f25c4570b6247f14ad397ea6785f87398ac1701e792ac6296a670f0503c95e4f", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fd-v1.png": "c9c4e3d36cc55162ea636560aafbc7e0e72f787b96b3a5286be57a8011de03b2", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105fe-v1.png": "0a89fc1228e26fb15831c48a1ada8237b16e282a0caff711b5a9c0ba8b12faef", + "data/hd/jobs/terrain-105f0-105ff-initial-source-terrain1-v1/generated/tile-105ff-v1.png": "6bb708c13e72ef89744c75595dcb212a6c81c363b25823eebfeb6f4b076b1c8d", "data/hd/jobs/terrain-2010d-2011c/generated/20111-v2.png": "9bddae5cb7a120c7b6582efc8875736f8bcf8adbfaf7da4403df06da3c7ee0bc", "data/hd/jobs/terrain-2010d-2011c/generated/atlas-v1.png": "ae78888bf93afcef84fbd2bc639a1e7d7cd7e8b7414007dbe2be641208dc2a7d", "data/hd/jobs/terrain-2011d-2012c/generated/2011d-v2.png": "8c2d5e1441d813cd492c55ae55cda23405112d8e72e5ad811e6b38a1c875015e", @@ -2229,7 +2277,7 @@ "data/hd/player-light/frame-4-hd-v1.png": "608714ceaa8dac0c690fd7be288e4f8ec2bf948a75913858792e8a7e26ad4a96", "data/hd/player-light/frame-5-hd-v1.png": "867d463f3904336d8d85a88ae63e537474f2b9ad128ff1239fd6b5a747d3efd1", "data/hd/player-light/frame-6-hd-v1.png": "22621d7f68f9e89b2b62b0e165da339d51b407ad826324b0a24502e0c0559f89", - "data/hd/provenance.json": "100981d0a3b4706376dd0486f4823b5aec58ecc6ef4e0dd41ca995c474a85af8", + "data/hd/provenance.json": "9fe61ba235fae90aca11966dedb07e70ab67026f6313eb3b9d937cea61cedd0d", "data/maps/MAP1G1_MAP": "bfa4386e554ee029a9ac7f2f5d0c4cb5c3000e5d7512c7c8246d75deecb48939", "data/maps/MAP1G2_MAP": "b2bf31aacf9e686c0583ecaf78d5af870f3b326d57e78382aa3d279f778cfbd5", "data/maps/MAP1G3_MAP": "2687a6d2e601e67f16f3ec69ff8b007dcfa6610f3dd812af4a1a20e9c1db036e", @@ -8668,11 +8716,11 @@ "data/ui/WINGAME_SWD": "304630a1223419d69723902ffd22c2c4eea0388491e37dfca663fcbe78e99aff" }, "system_dependencies": [ - "\tlinux-vdso.so.1 (0x00007f5b0f646000)", - "\tlibSDL2-2.0.so.0 => /home/quintine/.local/lib/libSDL2-2.0.so.0 (0x00007f5b0e800000)", - "\tlibgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f5b0f5f2000)", - "\tlibm.so.6 => /usr/lib/libm.so.6 (0x00007f5b0eac9000)", - "\tlibc.so.6 => /usr/lib/libc.so.6 (0x00007f5b0e400000)", - "\t/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f5b0f648000)" + "\tlinux-vdso.so.1 (0x00007f82bce03000)", + "\tlibSDL2-2.0.so.0 => /home/quintine/.local/lib/libSDL2-2.0.so.0 (0x00007f82bc000000)", + "\tlibgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f82bcdaf000)", + "\tlibm.so.6 => /usr/lib/libm.so.6 (0x00007f82bc2c9000)", + "\tlibc.so.6 => /usr/lib/libc.so.6 (0x00007f82bbc00000)", + "\t/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f82bce05000)" ] } diff --git a/runtime-windows-manifest.json b/runtime-windows-manifest.json index 5cb5c419..09549522 100644 --- a/runtime-windows-manifest.json +++ b/runtime-windows-manifest.json @@ -3,7 +3,7 @@ "platform": "Windows x86_64", "target": "x86_64-pc-windows-gnu", "catalog_entries": 6449, - "approved_hd_frames": 4296, + "approved_hd_frames": 4350, "shared_data_manifest": "runtime-manifest.json", "dependencies": { "raptor-rust.exe": [ diff --git a/tools/hd_register_reviewed.py b/tools/hd_register_reviewed.py index f20895a2..1860963e 100644 --- a/tools/hd_register_reviewed.py +++ b/tools/hd_register_reviewed.py @@ -31,6 +31,8 @@ def asset_list(value, label): def standalone_selection(candidate, job, rows): """Standalone means a complete one-frame definition, never an animation slice.""" if candidate.get("complete_standalone_selection") is not True: + if candidate.get("carried_registered_assets") or candidate.get("carried_registered_identity"): + raise ValueError("carried artwork requires an explicit standalone Terrain selection") return None if candidate.get("complete_family") is not False: raise ValueError("standalone selection must not claim whole-family approval") @@ -42,8 +44,21 @@ def standalone_selection(candidate, job, rows): full = asset_list(candidate.get("full_inventory"), "full_inventory") selected = asset_list(candidate.get("selected_assets"), "selected_assets") fallback = asset_list(candidate.get("original_fallback_assets"), "original_fallback_assets") - if full != inventory or selected != set(rows) or not selected or selected & fallback or selected | fallback != full: + carried = asset_list(candidate.get("carried_registered_assets", []), "carried_registered_assets") + if (full != inventory or selected != set(rows) or not selected or + selected & fallback or selected & carried or fallback & carried or + selected | fallback | carried != full): raise ValueError("standalone selected/fallback partition differs from complete job inventory") + if carried: + # This is the reviewed additive contract for one original sixteen-tile + # inventory, not a general permission to slice other content families. + if (job.get("job_id") != "terrain-2059d-205ac" or + selected != {"205a3", "205a4"} or len(full) != 16 or + len(carried) != 14 or fallback or + not isinstance(candidate.get("carried_registered_identity"), dict)): + raise ValueError("carried selection differs from the reviewed master74 two-new/fourteen-carried scope") + elif candidate.get("carried_registered_identity"): + raise ValueError("carried identity has no registered siblings") if candidate.get("targets"): asset_list([target["asset"] for target in candidate["targets"]], "candidate targets") inventory_job = candidate.get("inventory_job_id", job["job_id"]) @@ -55,8 +70,106 @@ def standalone_selection(candidate, job, rows): len(sequence["frames"]) != 1 or type(sequence["frames"][0]["frame"]) is not int or sequence["frames"][0]["frame"] != 0): raise ValueError("standalone selection contains an animation or partial sequence") - return {key: sorted(value) for key, value in [ + selection = {key: sorted(value) for key, value in [ ("full_inventory", full), ("selected_assets", selected), ("original_fallback_assets", fallback)]} + if carried: + selection["carried_registered_assets"] = sorted(carried) + return selection + + +def same_json(left, right): + """Identity includes JSON types: False is not the integer frame zero.""" + return json.dumps(left, sort_keys=True, separators=(",", ":")) == json.dumps(right, sort_keys=True, separators=(",", ":")) + + +def require_standalone_membership(proposal, assets): + """A retained frame zero cannot be hidden inside a partial animation.""" + for sequence in proposal["sequences"]: + base = sequence["base_asset"] + base = int(base, 16) if isinstance(base, str) else base + if type(sequence["frame_count"]) is not int: + raise ValueError("carried context sequence count must be an integer") + members = {f"{base + offset:05x}" for offset in range(sequence["frame_count"])} + if (assets is None or members & assets) and ( + type(sequence["frame_count"]) is not int or sequence["frame_count"] != 1 or + len(sequence["frames"]) != 1 or type(sequence["frames"][0]["frame"]) is not int or + sequence["frames"][0]["frame"] != 0): + raise ValueError("carried/new Terrain identity contains an animation or partial sequence") + + +def validate_carried_registered_identity(root, candidate, job, rows, review): + """Authenticate already accepted siblings; never approve or insert them again.""" + carried = set(candidate.get("carried_registered_assets", [])) + if not carried: + return + identity = candidate["carried_registered_identity"] + evidence = review.get("standalone_selection", {}) + if not same_json(identity, evidence.get("carried_registered_identity")): + raise ValueError("review carried identity differs from candidate") + baseline = identity.get("baseline", {}) + if baseline.get("path") != "hd.json": + raise ValueError("carried baseline must identify the current HD manifest") + manifest = receipt_json(root, baseline) + active = proposal_frames(manifest) + require_standalone_membership(manifest, carried) + if set(rows) & set(active) or not carried <= set(active): + raise ValueError("carried baseline omits siblings or already includes new selected IDs") + records = identity.get("frames", {}) + if not isinstance(records, dict) or set(records) != carried: + raise ValueError("carried identity omits or adds registered IDs") + targets = {target["asset"]: target for target in job["targets"]} + provenance = identity.get("provenance", {}) + if provenance.get("path") != "provenance.json": + raise ValueError("carried provenance must identify the current registration evidence") + additions = receipt_json(root, provenance).get("reviewed_sequence_additions", []) + index = identity.get("registration_record_index") + if type(index) is not int or not 0 <= index < len(additions): + raise ValueError("unsafe carried registration record index") + registered = additions[index] + if (registered.get("job_id") != job["job_id"] or + asset_list(registered.get("assets"), "registered carried assets") != carried or + type(registered.get("frames")) is not int or registered["frames"] != 14 or + registered.get("frame_bindings_sha256") != identity.get("frame_bindings_sha256")): + raise ValueError("carried registration belongs to another job or frame map") + accepted_receipt = identity.get("accepted_runtime_qa", {}) + if accepted_receipt.get("path") != registered.get("runtime_qa"): + raise ValueError("carried evidence is not the previously registered runtime receipt") + accepted = receipt_json(root, accepted_receipt) + accepted_frames = {frame["asset"]: frame for frame in accepted.get("frames", [])} + if (accepted.get("diagnostics") or accepted.get("frame_bindings_sha256") != identity.get("frame_bindings_sha256") or + len(accepted_frames) != len(accepted.get("frames", [])) or set(accepted_frames) != carried): + raise ValueError("previously registered carried runtime evidence differs") + bindings = {} + for asset in sorted(carried): + record = records[asset] + frame = active[asset] + if not isinstance(record, dict) or not same_json(record.get("frame_binding"), frame): + raise ValueError(f"carried complete registered frame changed: {asset}") + target = targets[asset] + if (type(frame.get("frame")) is not int or frame["frame"] != 0 or + type(frame.get("logical_width")) is not int or type(frame.get("logical_height")) is not int or + [frame["logical_width"], frame["logical_height"]] != target["logical_canvas"] or + frame.get("origin") != target["origin"] or + frame.get("source_sha256") != target["source_sha256"] or + record.get("source_sha256") != target["source_sha256"]): + raise ValueError(f"carried native source/canvas/origin differs: {asset}") + if set(frame) - {"frame", "file", "crop", "logical_width", "logical_height", "origin", "source_sha256"}: + raise ValueError(f"carried master74 frame has an unreviewed optional policy: {asset}") + raw = contained(root, frame["file"]) + measurement = accepted_frames[asset] + masks = measurement.get("hd_masks", []) + if (measurement.get("source_sha256") != frame["source_sha256"] or + measurement.get("logical_canvas") != target["logical_canvas"] or len(masks) != 4 or + any(type(mask["scale"]) is not int for mask in masks) or + {mask["scale"] for mask in masks} != {1, 2, 3, 4}): + raise ValueError(f"previously registered carried source/scales differ: {asset}") + accepted_raw = accepted.get("artwork_sha256", {}).get(frame["file"]) + if (record.get("raw_sha256") != accepted_raw or + hashlib.sha256(raw.read_bytes()).hexdigest() != accepted_raw): + raise ValueError(f"carried raw artwork changed: {asset}") + bindings[asset] = frame + if identity.get("frame_bindings_sha256") != binding_digest(bindings): + raise ValueError("carried complete frame digest differs") def receipt_json(root, receipt): @@ -179,8 +292,17 @@ def approved_standalone_evidence(root, selection, review, rows, qa): if any(sequence["frame_count"] != 1 or len(sequence["frames"]) != 1 or sequence["frames"][0]["frame"] != 0 for sequence in proposal["sequences"]): raise ValueError("combined context candidate includes animation slices") - for key in ["baseline", "future_projection"]: - receipt_json(root, authority.get(key)) + baseline = receipt_json(root, authority.get("baseline")) + future = receipt_json(root, authority.get("future_projection")) + if selection.get("carried_registered_assets"): + identity = evidence["carried_registered_identity"] + active = proposal_frames(baseline) + projected = proposal_frames(future) + if (authority["baseline"]["sha256"] != identity["baseline"]["sha256"] or + set(active) & set(bindings) or not same_json(projected, {**active, **bindings})): + raise ValueError("carried context is not the exact current baseline plus new definitions") + require_standalone_membership(proposal, None) + require_standalone_membership(future, set(rows) | set(selection["carried_registered_assets"])) closure = receipt_json(root, authority.get("changed_case_closure")) if (closure.get("status") != "CLOSED_QUALIFIED_CONTEXT" or closure.get("candidate_sha256") != authority["candidate"]["sha256"] or @@ -268,6 +390,7 @@ def approved_job(root, identity, project): raise ValueError(f"raw artwork changed since review: {asset}") if selection is not None: pictures, payloads = authentic_terrain_inventory(root, job) + validate_carried_registered_identity(root, candidate, job, rows, review) for asset, frame in rows.items(): validate_hd_frame(root, frame, payloads[asset], pictures[asset]) approved_standalone_evidence(root, selection, review, rows, qa) @@ -310,7 +433,8 @@ def main(): raise ValueError("original fallback already has registered HD artwork") overlaps = set(rows) & set(active) if overlaps: - if overlaps == set(rows) and all(rows[asset] == active[asset] for asset in rows): + if (not candidate.get("carried_registered_assets") and overlaps == set(rows) and + all(rows[asset] == active[asset] for asset in rows)): continue raise ValueError(f"duplicate registered ID; review a replacement explicitly: {sorted(overlaps)}") manifest["sequences"].extend(candidate["sequences"]) @@ -336,6 +460,10 @@ def main(): additions[-1]["approval_scope"] = "complete_standalone_terrain_selection" additions[-1]["original_fallback_assets"] = candidate["original_fallback_assets"] additions[-1]["full_inventory"] = candidate["full_inventory"] + if candidate.get("carried_registered_assets"): + additions[-1]["approval_scope"] = "complete_standalone_terrain_selection_with_unchanged_registered_siblings" + additions[-1]["carried_registered_assets"] = candidate["carried_registered_assets"] + additions[-1]["carried_registered_identity"] = candidate["carried_registered_identity"] if additions and not args.dry_run: # Do not overwrite another registration completed during validation. if manifest_path.read_bytes() != original_manifest or provenance_path.read_bytes() != original_provenance: diff --git a/tools/test_hd_register_reviewed.py b/tools/test_hd_register_reviewed.py index 42595818..33c23e6a 100644 --- a/tools/test_hd_register_reviewed.py +++ b/tools/test_hd_register_reviewed.py @@ -24,6 +24,7 @@ class StandaloneTerrainRegistrationTest(unittest.TestCase): ["10530", "10532", "10533", "10534", "10537", "10538", "10539", "1053a", "1053b", "1053c", "1053d", "1053f"], ["10540", "10541", "10542", "10543", "10545", "10546", "10547", "10548", "10549", "1054a", "1054b", "1054d", "1054e"], ] + START_ASSET = 0x10530 def setUp(self): temporary = tempfile.TemporaryDirectory() @@ -43,12 +44,12 @@ class StandaloneTerrainRegistrationTest(unittest.TestCase): palette = bytes(value // 4 for value in range(256) for _ in range(3)) self.palette = self.data / "misc/PALETTE_DAT" self.palette.write_bytes(palette) - self.entries = ["1052f 0 tiles/STARTG1TILES"] + self.entries = [f"{self.START_ASSET-1:05x} 0 tiles/STARTG1TILES"] self.jobs = [] self.pictures = [] all_bindings = {} for number, selected in enumerate(self.SELECTED): - start = 0x10530 + number * 16 + start = self.START_ASSET + number * 16 identity = f"terrain-{start:05x}-{start+15:05x}" directory = self.hd / "jobs" / identity directory.mkdir(parents=True) @@ -115,7 +116,8 @@ class StandaloneTerrainRegistrationTest(unittest.TestCase): "standalone_selection": {**selection, "material_approvals": approvals}} self.jobs.append({"id": identity, "directory": directory, "candidate": candidate, "job": job, "review": review, "qa": qa}) - self.entries.append("10550 0 tiles/ENDG1TILES") + end = self.START_ASSET + len(self.SELECTED) * 16 + self.entries.append(f"{end:05x} 0 tiles/ENDG1TILES") (self.data / "INDEX").write_text("\n".join(self.entries) + "\n") self.context_candidate_path = self.hd / "context-candidate.json" self.write(self.context_candidate_path, {"sequences": sum([row["candidate"]["sequences"] for row in self.jobs], [])}) @@ -140,7 +142,7 @@ class StandaloneTerrainRegistrationTest(unittest.TestCase): "receipt": self.ref(self.context_path), "selected_assets": row["candidate"]["selected_assets"], "selected_frame_bindings_sha256": binding_digest(proposal_frames(row["candidate"]))} self.write(row["directory"] / "coordinator-review.json", row["review"]) - self.audit = {"assets": self.pictures, "sequences": {"Terrain": [{"name": "Terrain set 1", "frames": list(range(0x10530, 0x10550))}]}, + self.audit = {"assets": self.pictures, "sequences": {"Terrain": [{"name": "Terrain set 1", "frames": list(range(self.START_ASSET, end))}]}, "terrain": {"runtime_hd_composition_supported": True}} self.write(self.hd / "coverage-audit.json", self.audit) self.write(self.hd / "runtime-content-audit.json", {}) @@ -486,5 +488,354 @@ class StandaloneTerrainRegistrationTest(unittest.TestCase): with self.assertRaisesRegex(ValueError, "omits source IDs"): self.approve() +class CarriedRegisteredTerrainRegistrationTest(unittest.TestCase): + """Master74 adds two definitions while its fourteen active siblings stay exact.""" + START_ASSET = 0x2059d + SELECTED = [["205a3", "205a4"]] + sha = staticmethod(StandaloneTerrainRegistrationTest.sha) + write = staticmethod(StandaloneTerrainRegistrationTest.write) + ref = StandaloneTerrainRegistrationTest.ref + approve = StandaloneTerrainRegistrationTest.approve + save = StandaloneTerrainRegistrationTest.save + + def setUp(self): + StandaloneTerrainRegistrationTest.setUp(self) + row = self.jobs[0] + peer = json.loads((row["directory"] / "peer.json").read_text()) + carried = [record for record in peer["records"] if record["asset"] not in self.SELECTED[0]] + self.carried = {record["asset"]: record["selected_frame_binding"] for record in carried} + self.baseline = {"format_version": 1, "sequences": [ + {"base_asset": int(asset, 16), "frame_count": 1, "frames": [frame]} + for asset, frame in self.carried.items()]} + self.write(self.hd / "hd.json", self.baseline) + accepted = copy.deepcopy(row["qa"]) + accepted["frame_bindings_sha256"] = binding_digest(self.carried) + accepted["frames"] = [{"asset": asset, "source_sha256": frame["source_sha256"], "logical_canvas": [4, 4], + "hd_masks": [{"scale": n} for n in range(1, 5)]} + for asset, frame in self.carried.items()] + accepted["artwork_sha256"] = {frame["file"]: self.sha((self.hd / frame["file"]).read_bytes()) + for frame in self.carried.values()} + self.accepted_path = self.hd / "accepted-carried-runtime-qa.json" + self.write(self.accepted_path, accepted) + self.write(self.hd / "provenance.json", {"registered_frame_count": 14, "reviewed_sequence_additions": [{ + "job_id": row["id"], "assets": sorted(self.carried), "frames": 14, + "frame_bindings_sha256": binding_digest(self.carried), "runtime_qa": self.ref(self.accepted_path)["path"]}]}) + candidate = copy.deepcopy(row["candidate"]) + candidate["original_fallback_assets"] = [] + candidate["carried_registered_assets"] = sorted(self.carried) + candidate["carried_registered_identity"] = { + "baseline": self.ref(self.hd / "hd.json"), "provenance": self.ref(self.hd / "provenance.json"), + "registration_record_index": 0, "accepted_runtime_qa": self.ref(self.accepted_path), + "frame_bindings_sha256": binding_digest(self.carried), + "frames": {record["asset"]: {"frame_binding": record["selected_frame_binding"], + "source_sha256": record["source_payload_sha256"], "raw_sha256": record["full_untouched_raw_sha256"]} + for record in carried}} + self.resign(candidate) + self.write(self.hd / "context-future_projection.json", { + "format_version": 1, "sequences": self.baseline["sequences"] + candidate["sequences"]}) + self.reseal_context(baseline=self.ref(self.hd / "hd.json"), + future=self.ref(self.hd / "context-future_projection.json")) + + def resign(self, candidate): + """Reseal hypothetical claims so tests reach the actual semantic guards.""" + digest = binding_digest(proposal_frames(candidate)) + for key in ["qa", "review"]: + self.jobs[0][key]["frame_bindings_sha256"] = digest + self.resign_identity(candidate) + + def resign_identity(self, candidate): + row = self.jobs[0] + row["candidate"] = candidate + self.save("candidate", candidate) + candidate_sha = self.ref(row["directory"] / "candidate.json")["sha256"] + for key in ["qa", "review"]: + row[key]["candidate_sha256"] = candidate_sha + evidence = row["review"]["standalone_selection"] + for key in ["full_inventory", "selected_assets", "original_fallback_assets", "carried_registered_assets", "carried_registered_identity"]: + if key in candidate: + evidence[key] = copy.deepcopy(candidate[key]) + else: + evidence.pop(key, None) + self.save("qa", row["qa"]); self.save("review", row["review"]) + + def reseal_context(self, baseline=None, future=None, proposal=None): + context = json.loads(self.context_path.read_text()) + authority = context["standalone_selection_context"] + if baseline is not None: authority["baseline"] = baseline + if future is not None: authority["future_projection"] = future + if proposal is not None: + self.write(self.context_candidate_path, proposal) + authority["candidate"] = self.ref(self.context_candidate_path) + bindings = proposal_frames(proposal) + authority["selected_assets"] = sorted(bindings) + authority["frame_bindings_sha256"] = binding_digest(bindings) + closure_path = self.hd / "context-changed_case_closure.json" + closure = json.loads(closure_path.read_text()) + for field, value in [("candidate_sha256", authority["candidate"]["sha256"]), + ("frame_bindings_sha256", authority["frame_bindings_sha256"]), + ("baseline_sha256", authority["baseline"]["sha256"]), + ("future_projection_sha256", authority["future_projection"]["sha256"])]: + closure[field] = value + self.write(closure_path, closure) + authority["changed_case_closure"] = self.ref(closure_path) + self.write(self.context_path, context) + self.jobs[0]["review"]["standalone_selection"]["contextual_approval"]["receipt"] = self.ref(self.context_path) + self.save("review", self.jobs[0]["review"]) + + @contextlib.contextmanager + def original_fixture(self): + files = {path: (path.read_bytes(), path.stat().st_mtime_ns) for path in self.hd.rglob("*") if path.is_file()} + jobs = copy.deepcopy(self.jobs) + try: + yield + finally: + for path in self.hd.rglob("*"): + if path.is_file() and path not in files: path.unlink() + for path, (payload, stamp) in files.items(): + path.write_bytes(payload); os.utime(path, ns=(stamp, stamp)) + self.jobs = jobs + + def test_exact_two_new_fourteen_carried_contract_passes_without_approving_siblings_again(self): + candidate, review, rows = self.approve() + self.assertEqual(set(rows), {"205a3", "205a4"}) + self.assertEqual(len(candidate["full_inventory"]), 16) + self.assertEqual(len(candidate["carried_registered_assets"]), 14) + self.assertEqual(candidate["original_fallback_assets"], []) + self.assertEqual(set(review["standalone_selection"]["material_approvals"]), set(rows)) + + def test_real_registration_adds_only_two_and_preserves_all_fourteen_complete_frames(self): + before = proposal_frames(json.loads((self.hd / "hd.json").read_text())) + argv = ["registrar", "--hd-root", str(self.hd), "--job", self.jobs[0]["id"]] + with patch.object(registrar, "__file__", str(self.project / "tools/hd_register_reviewed.py")), patch("sys.argv", argv), contextlib.redirect_stdout(io.StringIO()): + registrar.main() # Temporary synthetic pack only; no production invocation. + active = proposal_frames(json.loads((self.hd / "hd.json").read_text())) + self.assertEqual(len(active), 16) + self.assertEqual({asset: active[asset] for asset in before}, before) + additions = json.loads((self.hd / "provenance.json").read_text())["reviewed_sequence_additions"] + self.assertEqual([row["frames"] for row in additions], [14, 2]) + self.assertEqual(additions[-1]["assets"], ["205a3", "205a4"]) + self.assertEqual(additions[-1]["approval_scope"], "complete_standalone_terrain_selection_with_unchanged_registered_siblings") + self.assertEqual(additions[-1]["carried_registered_assets"], sorted(before)) + + def test_duplicate_new_request_is_rejected_without_pack_write(self): + before = {name: (self.hd / name).read_bytes() for name in ["hd.json", "provenance.json"]} + argv = ["registrar", "--hd-root", str(self.hd), "--job", self.jobs[0]["id"], "--job", self.jobs[0]["id"]] + with patch.object(registrar, "__file__", str(self.project / "tools/hd_register_reviewed.py")), patch("sys.argv", argv): + with self.assertRaisesRegex(ValueError, "duplicate registered ID"): registrar.main() + self.assertEqual(before, {name: (self.hd / name).read_bytes() for name in before}) + + def test_carried_partition_category_cross_job_and_animation_mismatches_reject(self): + for mutation in ["missing_carried", "duplicate_carried", "new_overlap", "fallback_overlap", "fallback_instead_of_carry", + "foreign_carried", "short_inventory", "cross_job", "category", "kind", "whole_family", + "no_explicit_selection", "animation", "partial_animation", "boolean_count", "boolean_frame", + "duplicate_sequence", "duplicate_target"]: + with self.subTest(mutation=mutation), self.original_fixture(): + candidate = copy.deepcopy(self.jobs[0]["candidate"]) + if mutation == "missing_carried": candidate["carried_registered_assets"].pop() + elif mutation == "duplicate_carried": candidate["carried_registered_assets"].append("2059d") + elif mutation == "new_overlap": candidate["carried_registered_assets"].append("205a3") + elif mutation == "fallback_overlap": candidate["original_fallback_assets"] = ["2059d"] + elif mutation == "fallback_instead_of_carry": + candidate["original_fallback_assets"] = candidate.pop("carried_registered_assets"); candidate.pop("carried_registered_identity") + elif mutation == "foreign_carried": candidate["carried_registered_assets"][0] = "10530" + elif mutation == "short_inventory": candidate["full_inventory"].pop() + elif mutation == "cross_job": + self.jobs[0]["job"]["job_id"] = "terrain-10530-1053f" + self.save("job", self.jobs[0]["job"]) + elif mutation == "category": candidate["category"] = "Enemies" + elif mutation == "kind": candidate["kind"] = "animation_sequence" + elif mutation == "whole_family": candidate["complete_family"] = True + elif mutation == "no_explicit_selection": candidate.pop("complete_standalone_selection") + elif mutation == "animation": + candidate["sequences"][0]["frame_count"] = 2 + candidate["sequences"][0]["frames"].append({**candidate["sequences"][0]["frames"][0], "frame": 1}) + elif mutation == "partial_animation": candidate["sequences"][0]["frame_count"] = 2 + elif mutation == "boolean_count": candidate["sequences"][0]["frame_count"] = True + elif mutation == "boolean_frame": candidate["sequences"][0]["frames"][0]["frame"] = False + elif mutation == "duplicate_sequence": candidate["sequences"].append(candidate["sequences"][0]) + else: + self.jobs[0]["job"]["targets"].append(self.jobs[0]["job"]["targets"][0]); self.save("job", self.jobs[0]["job"]) + self.resign_identity(candidate) + if mutation == "fallback_instead_of_carry": + # The legacy original-fallback schema still parses, but + # cannot register over already active siblings. + argv = ["registrar", "--hd-root", str(self.hd), "--job", self.jobs[0]["id"]] + with patch.object(registrar, "__file__", str(self.project / "tools/hd_register_reviewed.py")), patch("sys.argv", argv): + with self.assertRaisesRegex(ValueError, "original fallback already"): registrar.main() + else: + with self.assertRaises(ValueError): self.approve() + + def test_changed_carried_complete_binding_rejects_even_with_rehashed_candidate(self): + for mutation in ["raw_path", "crop", "canvas", "origin", "source", "optional_policy", "frame_index", "omitted_record", "extra_record", "digest"]: + with self.subTest(mutation=mutation), self.original_fixture(): + candidate = copy.deepcopy(self.jobs[0]["candidate"]) + identity = candidate["carried_registered_identity"] + record = identity["frames"]["2059d"] + frame = record["frame_binding"] + if mutation == "raw_path": frame["file"] = identity["frames"]["2059e"]["frame_binding"]["file"] + elif mutation == "crop": frame["crop"] = [0, 0, 4, 4] + elif mutation == "canvas": frame["logical_width"] = 8 + elif mutation == "origin": frame["origin"] = [1, 0] + elif mutation == "source": record["source_sha256"] = "0" * 64 + elif mutation == "optional_policy": frame["native_nearest_cues"] = [[0, 0]] + elif mutation == "frame_index": frame["frame"] = 1 + elif mutation == "omitted_record": identity["frames"].pop("2059d") + elif mutation == "extra_record": identity["frames"]["205a3"] = record + else: identity["frame_bindings_sha256"] = "0" * 64 + self.resign(candidate) + with self.assertRaises(ValueError): self.approve() + + def test_actual_carried_raw_change_rejects_even_with_forged_new_raw_hash_and_preserved_mtime(self): + candidate = copy.deepcopy(self.jobs[0]["candidate"]) + record = candidate["carried_registered_identity"]["frames"]["2059d"] + raw = self.hd / record["frame_binding"]["file"] + stamp = raw.stat().st_mtime_ns + raw.write_bytes(raw.read_bytes() + b"changed carried art") + os.utime(raw, ns=(stamp, stamp)) + record["raw_sha256"] = self.sha(raw.read_bytes()) + self.resign(candidate) + with self.assertRaisesRegex(ValueError, "carried raw artwork changed"): self.approve() + + def test_matching_carried_raw_symlink_cannot_escape_hd_root(self): + raw = self.hd / self.carried["2059d"]["file"] + outside = self.hd.parent / "outside-carried.png" + outside.write_bytes(raw.read_bytes()) + raw.unlink(); raw.symlink_to(outside) + with self.assertRaisesRegex(ValueError, "escapes HD root"): self.approve() + + def test_candidate_and_review_carried_identities_must_agree(self): + review = copy.deepcopy(self.jobs[0]["review"]) + review["standalone_selection"]["carried_registered_identity"]["frame_bindings_sha256"] = "0" * 64 + self.save("review", review) + with self.assertRaisesRegex(ValueError, "review carried identity differs"): self.approve() + + def test_rehashed_actual_baseline_changes_cannot_replace_accepted_carry_identity(self): + for mutation in ["raw_path", "crop", "canvas", "origin", "source", "optional_policy"]: + with self.subTest(mutation=mutation), self.original_fixture(): + baseline = copy.deepcopy(self.baseline) + frame = baseline["sequences"][0]["frames"][0] + if mutation == "raw_path": frame["file"] = baseline["sequences"][1]["frames"][0]["file"] + elif mutation == "crop": frame["crop"] = [0, 0, 4, 4] + elif mutation == "canvas": frame["logical_width"] = 8 + elif mutation == "origin": frame["origin"] = [1, 0] + elif mutation == "source": frame["source_sha256"] = "0" * 64 + else: frame["preserve_reserved_coverage"] = True + self.write(self.hd / "hd.json", baseline) + candidate = copy.deepcopy(self.jobs[0]["candidate"]) + identity = candidate["carried_registered_identity"] + identity["baseline"] = self.ref(self.hd / "hd.json") + identity["frames"]["2059d"]["frame_binding"] = frame + identity["frame_bindings_sha256"] = binding_digest({**self.carried, "2059d": frame}) + self.resign(candidate) + with self.assertRaises(ValueError): self.approve() + + def test_current_baseline_and_accepted_registration_receipts_are_exact(self): + for mutation in ["wrong_baseline_path", "stale_baseline_hash", "missing_baseline", "wrong_provenance_path", + "stale_provenance", "wrong_record_index", "boolean_record_index", "other_job_record", "wrong_count", + "wrong_accepted_path", "changed_accepted_hash", "changed_accepted_digest", "changed_accepted_source", + "changed_accepted_scale", "duplicate_accepted_scale", "duplicate_accepted_id"]: + with self.subTest(mutation=mutation), self.original_fixture(): + candidate = copy.deepcopy(self.jobs[0]["candidate"]) + identity = candidate["carried_registered_identity"] + if mutation == "wrong_baseline_path": identity["baseline"] = self.ref(self.hd / "context-baseline.json") + elif mutation == "stale_baseline_hash": identity["baseline"]["sha256"] = "0" * 64 + elif mutation == "missing_baseline": identity.pop("baseline") + elif mutation == "wrong_provenance_path": identity["provenance"] = self.ref(self.hd / "context-baseline.json") + elif mutation == "stale_provenance": identity["provenance"]["sha256"] = "0" * 64 + elif mutation == "wrong_record_index": identity["registration_record_index"] = -1 + elif mutation == "boolean_record_index": identity["registration_record_index"] = False + elif mutation in ["other_job_record", "wrong_count"]: + path = self.hd / "provenance.json"; provenance = json.loads(path.read_text()) + entry = provenance["reviewed_sequence_additions"][0] + if mutation == "other_job_record": entry["job_id"] = "terrain-10530-1053f" + else: entry["frames"] = 13 + self.write(path, provenance); identity["provenance"] = self.ref(path) + elif mutation == "wrong_accepted_path": identity["accepted_runtime_qa"] = self.ref(self.jobs[0]["directory"] / "runtime-qa.json") + elif mutation == "changed_accepted_hash": identity["accepted_runtime_qa"]["sha256"] = "0" * 64 + else: + accepted = json.loads(self.accepted_path.read_text()) + if mutation == "changed_accepted_digest": accepted["frame_bindings_sha256"] = "0" * 64 + elif mutation == "changed_accepted_source": accepted["frames"][0]["source_sha256"] = "0" * 64 + elif mutation == "changed_accepted_scale": accepted["frames"][0]["hd_masks"][0]["scale"] = True + elif mutation == "duplicate_accepted_scale": accepted["frames"][0]["hd_masks"].append({"scale": 4}) + else: accepted["frames"].append(accepted["frames"][0]) + self.write(self.accepted_path, accepted); identity["accepted_runtime_qa"] = self.ref(self.accepted_path) + self.resign(candidate) + with self.assertRaises((ValueError, OSError)): self.approve() + + def test_baseline_cannot_hide_carried_tile_in_boolean_or_partial_animation(self): + for mutation in ["boolean_count", "boolean_frame", "partial_animation", "full_animation", "empty_sequence", "missing_sibling", "duplicate_sibling", "already_selected"]: + with self.subTest(mutation=mutation), self.original_fixture(): + baseline = copy.deepcopy(self.baseline) + if mutation == "boolean_count": baseline["sequences"][0]["frame_count"] = True + elif mutation == "boolean_frame": baseline["sequences"][0]["frames"][0]["frame"] = False + elif mutation == "partial_animation": baseline["sequences"][0]["frame_count"] = 2 + elif mutation == "full_animation": + baseline["sequences"][0]["frame_count"] = 2 + baseline["sequences"][0]["frames"].append({**baseline["sequences"][1]["frames"][0], "frame": 1}) + baseline["sequences"].pop(1) + elif mutation == "empty_sequence": baseline["sequences"].append({"base_asset": 0x2059d, "frame_count": 1, "frames": []}) + elif mutation == "missing_sibling": baseline["sequences"].pop() + elif mutation == "duplicate_sibling": baseline["sequences"].append(baseline["sequences"][0]) + else: baseline["sequences"].append(self.jobs[0]["candidate"]["sequences"][0]) + self.write(self.hd / "hd.json", baseline) + candidate = copy.deepcopy(self.jobs[0]["candidate"]) + candidate["carried_registered_identity"]["baseline"] = self.ref(self.hd / "hd.json") + self.resign(candidate) + with self.assertRaises(ValueError): self.approve() + + def test_correctly_rehashed_future_projection_cannot_change_any_carried_or_new_binding(self): + for mutation in ["omitted_carry", "omitted_new", "foreign_asset", "changed_carry", "changed_new", "boolean_frame", "boolean_count", "partial_animation", "empty_sequence", "duplicate_id", "wrong_baseline", "registered_context_overlap"]: + with self.subTest(mutation=mutation), self.original_fixture(): + path = self.hd / "context-future_projection.json" + future = json.loads(path.read_text()) + if mutation == "omitted_carry": future["sequences"].pop(0) + elif mutation == "omitted_new": future["sequences"].pop() + elif mutation == "foreign_asset": future["sequences"][0]["base_asset"] = 0x10530 + elif mutation == "changed_carry": future["sequences"][0]["frames"][0]["crop"] = [0, 0, 4, 4] + elif mutation == "changed_new": future["sequences"][-1]["frames"][0]["origin"] = [1, 0] + elif mutation == "boolean_frame": future["sequences"][0]["frames"][0]["frame"] = False + elif mutation == "boolean_count": future["sequences"][0]["frame_count"] = True + elif mutation == "partial_animation": future["sequences"][0]["frame_count"] = 2 + elif mutation == "empty_sequence": future["sequences"].append({"base_asset": 0x205a3, "frame_count": 1, "frames": []}) + elif mutation == "duplicate_id": future["sequences"].append(future["sequences"][0]) + elif mutation == "wrong_baseline": + self.reseal_context(baseline=self.ref(self.hd / "context-baseline.json")) + else: + proposal = json.loads(self.context_candidate_path.read_text()) + proposal["sequences"].append(self.baseline["sequences"][0]) + self.reseal_context(proposal=proposal) + if mutation not in ["wrong_baseline", "registered_context_overlap"]: + self.write(path, future); self.reseal_context(future=self.ref(path)) + with self.assertRaises((ValueError, KeyError)): self.approve() + + def test_carried_original_source_symlink_or_bytes_cannot_be_replaced(self): + target = self.jobs[0]["job"]["targets"][0] + source = self.data / target["source_path"] + payload = source.read_bytes() + source.write_bytes(payload[:-1] + b"\xff") + with self.assertRaisesRegex(ValueError, "original inventory source differs"): self.approve() + source.write_bytes(payload) + outside = self.data.parent / "outside-carried-source" + outside.write_bytes(payload) + source.unlink(); source.symlink_to(outside) + with self.assertRaisesRegex(ValueError, "INDEX path escapes"): self.approve() + + def test_pending_or_missing_new_material_and_context_are_not_authorized_by_carried_content(self): + for mutation in ["pending", "missing_material", "missing_context", "wrong_material", "same_reviewer"]: + with self.subTest(mutation=mutation), self.original_fixture(): + review = copy.deepcopy(self.jobs[0]["review"]) + if mutation == "pending": review["status"] = "PENDING" + elif mutation == "missing_material": review["standalone_selection"]["material_approvals"].pop("205a3") + elif mutation == "missing_context": review["standalone_selection"].pop("contextual_approval") + elif mutation == "wrong_material": review["standalone_selection"]["material_approvals"]["205a3"]["source_sha256"] = "0" * 64 + else: + peer_path = self.jobs[0]["directory"] / "peer.json"; peer = json.loads(peer_path.read_text()); peer["reviewer"] = peer["author"] + self.write(peer_path, peer) + for approval in review["standalone_selection"]["material_approvals"].values(): approval["independent_review"] = self.ref(peer_path) + self.save("review", review) + with self.assertRaises(ValueError): self.approve() + + if __name__ == "__main__": unittest.main()