[{"timestamp":"2026-10-15T06:27:46Z","commit_sha":"c4696fa6e629cd87d712a44a45aed411de3b2def","commit_message":"N-Tranced (#1109): its own sources over the shared ones (games/n2/src/, games/n2/include/) (#1133)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T06:12:09Z","commit_sha":"9f17f13bf6f9142568a9fb115cccece8d52b5d89","commit_message":"N-Tranced (#1110): no raw ROM address left in its code (#1130)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T06:10:17Z","commit_sha":"e51d68b420c8379ee613ea49da296f781af468dd","commit_message":"Docs (#1085): a README for the finished decomp (#1132)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T05:54:07Z","commit_sha":"d5d4d2d4696d4fc08fc14fdd15ed6de290de0d42","commit_message":"N-Tranced (#1110): labels in its data for every address the code points at (#1129)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T05:47:02Z","commit_sha":"b4bdbcb890fe741e10d54f79e9c6c91c1484561f","commit_message":"Mods (#1090): a sample mod, built and boot-tested in CI (#1126)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T05:39:43Z","commit_sha":"73a746b60272082c253dba17f377e56b8b1de362","commit_message":"N-Tranced (#1110): XS's names for 760 functions and 94 RAM variables/data tables in its disassembly (#1128)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T05:32:18Z","commit_sha":"9f32ea0d790204fbe0d44c5a202f87157493cb59","commit_message":"tools/nt_compare (#1107): the XS/N-Tranced comparison tooling, in one command (#1127)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T05:24:19Z","commit_sha":"cff53ccbc99d9e3448577d5a174fa9c74849644e","commit_message":"N-Tranced (#1106): its decompilati.onl report in XS's terms (functions, categories) (#1125)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T05:02:39Z","commit_sha":"b6891e36a207766aac5977418e63e613a0783e7f","commit_message":"Builds (#1108, #1110): a GAME=xs|n2 build, and N-Tranced matching from its disassembly and shared sources (#1123)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T04:48:15Z","commit_sha":"28db1f0df89463db04fdb2008de4f707b71e8dc0","commit_message":"CI: send the progress report to decompilati.onl's and bytematch.dev's upload APIs (#1124)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T04:36:11Z","commit_sha":"141c37571ca0d796759a1e9b9e6f091bc8b5b439","commit_message":"Text (#1092): the credits as checked English copies in every language (#1122)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T04:24:41Z","commit_sha":"6321335b88d218c1feb741b9507c4d8e4a49710a","commit_message":"Levels (#1089): the polar palette cycle as data, and a category's own (#1120)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T04:12:35Z","commit_sha":"3d053d5afbdda274d15e14af3d55016d5427272b","commit_message":"Levels (#1089): warn about category colours the engine replaces (#1102)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T03:52:48Z","commit_sha":"e3bdeeb8b955ec571f0521607c08edc031586a54","commit_message":"Levels (#1086): the boss rewards from the level data (#1099)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T03:41:06Z","commit_sha":"641a13fc92888db239ebe05ad09dfa88d020f828","commit_message":"Levels (#1087): a category's own sprite sheet and animation table (#1119)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-15T03:28:44Z","commit_sha":"861881b296e6c898d4a1b1b3617fd23e01283a68","commit_message":"CI: upload the progress report as europe_report again, for decompilati.onl (#1121)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T21:40:11Z","commit_sha":"200760ecc141c9fb57f14aba3734575ea3dd1306","commit_message":"Levels (#966): a category's own sky, cell animation and palette (#1084)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T21:26:32Z","commit_sha":"b6ba73b92e805981155bb5e4ba7f631f5327a278","commit_message":"Levels (#966): the boss HUD and health from the level data (#1083)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T19:48:26Z","commit_sha":"3944e57e9bed56d1e76616d074302b0102945973","commit_message":"Levels (#966): actor categories as data (#1082)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T19:34:33Z","commit_sha":"7834ef39725544ab5737ede7f3c5d6d5b4ef1da5","commit_message":"Levels (#966): partial level-select pages (#1081)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T18:39:49Z","commit_sha":"e7e8892008d6cf8268ad97930bf9c0fc7a90d603","commit_message":"Levels (#966): level-select pages and unlocks (#1079)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T18:02:29Z","commit_sha":"1ee9a25d7094a3a14e80a15a828eb7ef1f0cf27f","commit_message":"Levels (#966): the 64 Kbit save for level data beyond the ROM's (#1080)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T16:56:47Z","commit_sha":"efaa998039cde6adeefdb6f03d961034f9460755","commit_message":"Levels (#966): new level names in the six languages (#1078)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T16:43:20Z","commit_sha":"26152fa223e772189dd34a0a3dccdacabd561483","commit_message":"Levels (#966): new level-select pictures without ROM addresses (#1077)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T15:59:02Z","commit_sha":"f41f2b860ce20531efa9c602985874156741485f","commit_message":"Levels (#966): the themes as data (#1076)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T15:21:55Z","commit_sha":"c3f52b0dc8950338d508853794f175f1fd587f46","commit_message":"Files (#1071): the data tables next to their users, with no addresses (#1075)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T15:08:21Z","commit_sha":"7fc946daa5c9d1d9c379a3d9861acbacd30359b3","commit_message":"Files (#1071): the game sources under src/game (#1074)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T14:56:27Z","commit_sha":"9e76c3b267458c172ae236671ec74ceb4989eda7","commit_message":"Files (#1071): the engine sources under src/engine (#1073)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T13:54:41Z","commit_sha":"7aecab1d2afd215f58ec81cbe1473ec7cfad85c9","commit_message":"Text (#1070): generate the UI and cutscene string tables from gettext .po files (#1072)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T12:56:48Z","commit_sha":"597129bd2f7eabe4896f389a9f0bb381d814715c","commit_message":"Namespaces (#1033): Game::Entities, the 3D actors' bases (#1069)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T12:43:42Z","commit_sha":"860e86e98b60789868fe873915be49afc29140ba","commit_message":"Namespaces (#1033): Game::Entities, the entity and controller bases (#1068)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T11:53:04Z","commit_sha":"301e6d705a19fd287d37762f960638680d959e54","commit_message":"Namespaces (#1033): Game::Ui (#1067)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T11:39:54Z","commit_sha":"aac1d95b954fe2a24673e54b87fc40d5ddb61ded","commit_message":"Namespaces (#1033): Game::Level (#1066)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T11:26:41Z","commit_sha":"a9bb39f00648b73e4aa5f7752172e0aa49327839","commit_message":"Namespaces (#1033): Game::Objects (#1065)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T11:14:00Z","commit_sha":"4d0722f01e49b844d87d35e95d2fbf1782b23a2a","commit_message":"Namespaces (#1033): Game::Crates (#1064)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T10:22:56Z","commit_sha":"cb23eab2670c97c7f9fd11574fdcd68d23dfad1f","commit_message":"Namespaces (#1033): Game::Vehicles::Jetpack (#1063)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T10:10:47Z","commit_sha":"9c11e837809ef6d73d30d2d060bbf4f6251b8b33","commit_message":"Namespaces (#1033): Game::Vehicles::Polar (#1062)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T09:57:25Z","commit_sha":"ddb34fc91e875d0a7e00ac730497ce3f5d785c64","commit_message":"Namespaces (#1033): Game::Bosses (#1061)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T09:44:37Z","commit_sha":"676e84882ac9a31d4cf30ec2eeb11425bbc11995","commit_message":"Namespaces (#1033): Game::Enemies (#1060)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T09:31:50Z","commit_sha":"845866a075426fee2a21725d90aca2b970059f53","commit_message":"Namespaces (#1033): Game::Crash (the player) (#1059)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T05:21:42Z","commit_sha":"9d8b24c3440c5e783130653205671434d5f03a86","commit_message":"Namespaces (#1033): Engine::Util (#1058)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T05:10:00Z","commit_sha":"f2104fb80f1dd95de11372f67f35785b0e1bd735","commit_message":"Namespaces (#1033): Engine::Text (#1057)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T04:56:43Z","commit_sha":"a9c297124da3af8e238ad486c02941c13b438aab","commit_message":"Namespaces (#1033): Engine::Link (#1056)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T04:43:26Z","commit_sha":"034b04c88c879a2f900db4ee49b9ab9d661e1d43","commit_message":"Namespaces (#1033): Engine::Save (#1055)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T04:31:44Z","commit_sha":"e1ede330c146811d12d3fc9466269ae0ee5ff5d9","commit_message":"Namespaces (#1033): Engine::Audio (#1054)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T03:47:59Z","commit_sha":"20cd6bdb4573126413f928c158698b0ab8c777dc","commit_message":"Namespaces (#1033): Engine::Actor (#1053)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T03:34:42Z","commit_sha":"040ab12e3ef085fecba9ea5973a95868d4804d28","commit_message":"Namespaces (#1033): Engine::Gfx (#1052)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T03:22:29Z","commit_sha":"7c266e680c91a7466432381120db1a169be88163","commit_message":"Namespaces (#1033): Engine::Sys (#1051)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T02:31:42Z","commit_sha":"9215e67bb43dd3dfd368d17996dc51c8412ae90f","commit_message":"Classes (#915): the sprite pickups' spawners as the all-static class Pickups (#1050)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T02:11:19Z","commit_sha":"c786ef0f3ec0b264316f5f4982dfad265c03bc37","commit_message":"Classes (#915): the boss and pickup spawners as static members (#1049)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T01:58:28Z","commit_sha":"0fd2181f0bbc88614001127091b5c4222cafe4a4","commit_message":"Classes (#915): the enemy spawners as static members of EnemyCtrl (#1048)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T01:46:34Z","commit_sha":"f30658467c7edca143ae3c194272756ad33d90dd","commit_message":"Classes (#915): the crate, platform, launch pad and seal spawners as static members (#1047)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T01:33:37Z","commit_sha":"1208b041ab6448e2361fb3cc1fd741baff4983d3","commit_message":"Classes (#915): the jetpack spawners as static members (#1046)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T01:21:50Z","commit_sha":"d2c5b7fc04aadfcf2bc70a18d2350bd90360cf13","commit_message":"Classes (#915): the polar factory as static members (#1045)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T01:08:51Z","commit_sha":"558d98c6a3c7479c1f632c802d156411c8a1482f","commit_message":"Classes (#915): the category hooks as static members of PolarPlayer and JetpackPlayer (#1044)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-14T00:24:21Z","commit_sha":"14dabe4032525c5dd9d345de84e86da29fada860","commit_message":"Classes (#915): the level queries as static members of LevelProgress (#1043)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T22:47:51Z","commit_sha":"fae8473a749796281b25876f6f954fd088d22e75","commit_message":"Classes (#915): the entity spawner singleton as EntitySpawner::instance (#1042)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T22:30:34Z","commit_sha":"9ed43543a87d1193eb2249e64354246512658a86","commit_message":"Classes (#915): the level select singleton as static members of LevelSelect (#1041)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T22:18:47Z","commit_sha":"29c4b30ccdace6194c554623e9123ca473a3ca65","commit_message":"Classes (#915): LevelState::Get, the level state singleton (#1040)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T22:07:11Z","commit_sha":"bfa980bac7bf967e08f75851fb1fd1a89ebd9dce","commit_message":"Classes (#915): the entity spawner singleton as static members of EntitySpawner (#1039)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T21:55:30Z","commit_sha":"95f06be350ec7e1a00e96719c2821e3b8b4250b2","commit_message":"Classes (#915): the save menu singleton as static members of SaveMenu (#1038)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T21:43:57Z","commit_sha":"436df5511b7fef51cfefec37bdfa8d92f508c68e","commit_message":"Classes (#915): the crate-list passes as static members of Crate (#1037)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T20:51:40Z","commit_sha":"78064a65c1a34de66886db076a5b78b450a5ba56","commit_message":"Classes (#915): the vehicles' frame sets and the rooms as static classes (#1036)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T20:39:46Z","commit_sha":"8a573add8108233c4bc6733f967b0fd029a029e7","commit_message":"Classes (#915): the font, cutscene and level-select graphics as static classes (#1035)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T20:27:16Z","commit_sha":"1fa543fa9889f58db6c0f6738ce585424d65bf57","commit_message":"Classes (#915): the menu, title and logo graphics as static classes (#1034)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T20:14:31Z","commit_sha":"ad6ff68657373d1252b0eed3a768ff43bdcbef5b","commit_message":"Classes (#915): the actor category driver as the all-static class ActorCategory (#1031)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T20:02:25Z","commit_sha":"858df22a22254704b63ee57db428e627d576b52f","commit_message":"Classes (#915): the actor category's spawn table as the all-static class ActorSpawns (#1030)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T19:48:54Z","commit_sha":"52c4c59e854b00708ef02d6937eaf9f52c2360cb","commit_message":"Classes (#915): the actor category's statistics as the all-static class ActorCategoryStats (#1029)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T19:35:17Z","commit_sha":"1a7c13ab5222fc6f0ed017dbbc6dc735af1c019f","commit_message":"Classes (#915): the room exit flag as static members of LevelProgress (#1032)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T19:08:33Z","commit_sha":"2bebc706ff9fbc1de89dd5999c005eaa834e4a2b","commit_message":"Classes (#915): the room exit flag as the all-static class RoomExit (#1028)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T18:56:41Z","commit_sha":"98e7e0a801807a957b16ef44cd19f27d8ad35b2e","commit_message":"Classes (#915): the brightness and palette fades as the all-static classes BrightnessFade and PaletteFade (#1027)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T18:45:25Z","commit_sha":"8d3be54be1f4e13af4e7b5f5932d781afdad7a66","commit_message":"Classes (#915): the VRAM DMA queue as the all-static class VramDmaQueue (#1026)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T18:34:22Z","commit_sha":"851c77d6e67c2f413dcd576e063ae52d5471fc5a","commit_message":"Classes (#915): the category sprite sheet as the all-static class CategorySpriteSheet (#1025)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T17:54:20Z","commit_sha":"33f470f3003dac570056768fca3d840ed5c3739e","commit_message":"Cleanup (#1021): the game code calls through function pointers, not _call_via_rN (#1024)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T17:30:19Z","commit_sha":"d86b476d97e6d8e00afb57fdb162bdec3cbb98f2","commit_message":"Classes (#915): the collected spawns as the all-static class CollectedSpawns (#1023)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T17:16:54Z","commit_sha":"21549c17ea36ab54703ff3c7d4ec8a7af36e6b8f","commit_message":"Classes (#915): the OAM queue and the sprite frame cache as the all-static classes SpriteOamQueue and SpriteFrameCache (#1022)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T14:16:45Z","commit_sha":"a80b29dfd558f437610ea118c02c61a8365b5e51","commit_message":"Classes (#915): the frame limiter as the all-static class FrameLimiter (#1020)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T13:56:00Z","commit_sha":"a78e2d97ca345e323faa527e252ea407afda87be","commit_message":"Classes (#915): the actor palette cycle as the all-static class ActorPaletteCycle (#1019)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T13:42:26Z","commit_sha":"e25aca1f93dfd22f6b2e75ee8231b513970bd528","commit_message":"Classes (#915): the actor BG scroll as the all-static class ActorBg (#1018)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T12:51:35Z","commit_sha":"ddf5642bcbfb6263120dd0bdcdf4df1026769f9d","commit_message":"Levels (#966): the save version and checksum seed come from the level data (#1017)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T12:42:38Z","commit_sha":"3d11e803e59ccfbdc766f1d573369c67a9bde3f8","commit_message":"Levels (#966): the new level data is generated in place with the ROM's (#1016)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T12:31:27Z","commit_sha":"248661d0644d9ac75f224ffca17128394b6bf378","commit_message":"Levels (#966): the level and theme counts are generated constants (#1014)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T12:25:06Z","commit_sha":"752f211295d6326392b39a26236d134c1fa81731","commit_message":"Porting (#979): the logo pieces fly in from the screen's edge (#1015)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T12:13:48Z","commit_sha":"476115a963812b53b24ecbd7d5e46c21fd0cc2ec","commit_message":"Palette (#914, #855): the jetpack explosion in bank 4; the palette cache's DMA doc (#1013)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T12:02:36Z","commit_sha":"f537d87d4e4f33db778e2acd05fe5c18de3afade","commit_message":"Classes (#915): the display register shadows as the all-static class Display (#1012)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T11:35:47Z","commit_sha":"0d53c0d6799d0e90d04dbc414786d71a834c9c3f","commit_message":"Classes (#915): the OBJ tile allocator as the all-static class ObjTileAllocator (#1010)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T11:24:38Z","commit_sha":"dbef4477fa96c4468e5d0212b914f3acd86aa61d","commit_message":"Classes (#915): the cell animation as the all-static class CellAnim (#1009)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T10:45:47Z","commit_sha":"910b6fd95153f9fccf97146b536a6578016c21fb","commit_message":"Cleanup (#844): retire docs/headers_plan.md; its live rules move to docs/headers.md (#1008)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T10:39:59Z","commit_sha":"eb6f6ca30c0ba505d894352603833c0a09405a46","commit_message":"LinkSession::ResetState: write the player ids through (players + i)->id (#908) (#1007)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T10:16:21Z","commit_sha":"d1e4df8b4d5bf87b63aac640766820a9f980609c","commit_message":"Fixed point (#916): the pickups', platforms' and logo actor's values, and the last shifts (#1006)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T10:05:12Z","commit_sha":"6f09bd7f11e0ac4e8a1a694596c64acced4cc09a","commit_message":"Fixed point (#916): name the jetpack and polar courses' tuning values (#1005)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T09:53:59Z","commit_sha":"1cc8c0f4a36ecfc601d3cae53d0242ff05c69f72","commit_message":"Fixed point (#916): name the bosses', hovercraft's and airship's tuning values (#1004)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T09:42:56Z","commit_sha":"6562210e598236cbab9a0751bdef76b9153332a8","commit_message":"Fixed point (#916): name the player's and the diver's speed-ramp tuning values (#1003)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T09:31:09Z","commit_sha":"abfccd5e4c6742a5337bdea4d1fc6527bad4d549","commit_message":"Cleanup (#844): remove the finished passes' leftover tools and planning docs (#1002)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T08:58:24Z","commit_sha":"ab4f9c9b2e13517f29753240fd69cf56f1728e89","commit_message":"Fixed point (#916): Q8_FLOOR, and --fixed follows calls and shared structs (#1001)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T08:45:03Z","commit_sha":"0b147e8e445ba88a7c690da581e470106bc57833","commit_message":"Fixed point (#916): the actors' projection and the affine scale bounds (#1000)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T08:31:13Z","commit_sha":"9e50ee7220eb80324a931e25549804ecbc29f61a","commit_message":"Fixed point (#916): the level-select zooms and the logos' Q16 scales (#999)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T08:13:43Z","commit_sha":"62c9d35c68cc06fa2cc4d3d1712d12d034d21ddf","commit_message":"DMA (#920): drop the unused dma_regs/DMA3 view; DrawVvLogoPieces fills with a plain DmaFill32 (#998)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T07:47:57Z","commit_sha":"ffe9ee9cc0731eefc44fd92ed702e5abf2c18c33","commit_message":"Fixed point (#916): the vehicles' and the camera lead's positions, speeds and depths (#997)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T07:34:41Z","commit_sha":"6aad9bae07c4f8dd7157418dac379106d56bbd82","commit_message":"Fixed point (#916): the objects', crates' and pickups' positions, speeds and scales (#996)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T07:21:24Z","commit_sha":"a3b87b68919e0b3df9583adbc78e2e5ad0f44c4a","commit_message":"Fixed point (#916): the bosses' and enemies' positions, speeds and motion records (#995)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T07:08:06Z","commit_sha":"e3caa04d5abe338bd0685c518d510cf5f20cb2fb","commit_message":"Fixed point (#916): Q8()/Q8_FRAC(), --fixed, docs/fixed_point.md and the player's controllers (#994)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T06:14:04Z","commit_sha":"2384682c59b9721bad058d2890209be7324a1fca","commit_message":"Shifting (#967): the GAX2 blocks are relocatable; make shiftcheck and the mGBA boot test (#993)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T06:06:58Z","commit_sha":"55765c572ad5e7f5b84fd02f7e0389889d038654","commit_message":"Porting (#979): the logo pieces' motions from the art's origin, the values the literal scan missed, and the narrow screen fields (#992)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T05:53:41Z","commit_sha":"93f3d6b1c6fc54c62cf034c37175fd1943d96706","commit_message":"Porting (#979): the HUD's positions from the screen's edges and centre (#991)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T05:40:22Z","commit_sha":"2f3d4b26b5cbb3ea80ea112cf671170462bbfafc","commit_message":"Porting (#979): the menus' layouts from the art's origin, and --screen scans src/data and the layouts (#990)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T05:26:52Z","commit_sha":"567497eb552886e74df4a928c52f0d0dc67ff3e1","commit_message":"Porting (#979): the crate grid's span from the activation window, and the platform-layer limits named (#989)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T04:35:26Z","commit_sha":"778100de4acf4611e0e606c37da0be01254479cf","commit_message":"Porting (#979): make screen-check, the game code compiled at another screen size, in CI (#988)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T04:21:49Z","commit_sha":"a1f8b84deddce8c362dc1ba9f98c77b3cc36bb78","commit_message":"Porting (#979): the effects, the logos' and level select's zooms and the cutscene from the screen size (#987)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T04:08:12Z","commit_sha":"370c63aa0fc326e851ef64992307db7297f16887","commit_message":"Porting (#979): culling, OAM packing and the activation window from the screen size (#986)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T03:54:37Z","commit_sha":"66e26784eb5a0d6f896c1c297abc6b49cc941a81","commit_message":"Porting (#979): text centred on the screen and the font cursor's types (#985)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T03:41:15Z","commit_sha":"6752f6ff9f8b9c9ed529fad107ccaeed354d3c76","commit_message":"Porting (#979): the camera's centring, look-ahead and scroll limits from the screen size (#984)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T03:27:16Z","commit_sha":"880b01903e739602d6719a93a7ecd359d22b0229","commit_message":"Porting (#979): tools/magic_numbers.py --screen, include/screen.h and OAM_X/OAM_Y (#983)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T02:57:59Z","commit_sha":"9e701ad1cd9b37ee8e80678c757941c92d91f181","commit_message":"Levels (#965): the level table is generated from levels.json and room.json (#982)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T02:35:44Z","commit_sha":"26c2e25014c7e37578cf5fa63609df110a226c1b","commit_message":"Porting (#979): the BIOS words at the top of IWRAM as IWRAM_START plus named offsets (#981)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T01:54:13Z","commit_sha":"b7f212f3dbfc86521ccdced52877a030b7061464","commit_message":"Graphics (#914): OBJ palettes are NNN_<owner>.pal; docs/graphics.md maps the new tree (#980)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T01:40:54Z","commit_sha":"f0ee519524040cbca4d7b57f6018a22de6cc0a5d","commit_message":"Graphics (#914): the polar and jetpack sprite sheets are vehicles/*/sprite_sheet/ (#978)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T01:27:38Z","commit_sha":"7867ebaee51d41315ad4dc9aabce2936819f7e6a","commit_message":"Levels (#914): the BG tile sets are made from the rooms' pictures; new rooms go after the IWRAM image (#977)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T01:14:17Z","commit_sha":"15657e097cfd1f39b1435a5922f654648a1556b2","commit_message":"Levels (#914): each room's palette is its layer pictures' palette (#976)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T01:00:52Z","commit_sha":"6ae69ca066ad31654a768169e9a5ae447253fb6c","commit_message":"Levels (#914): the rooms are data/levels/<level>/<slot>/ (#975)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T00:47:33Z","commit_sha":"167f21166c444b0fc60d2276f03a806339c4dfd5","commit_message":"Graphics (#914): the polar/jetpack pictures go to vehicles/, the hovercraft to bosses/ (#974)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T00:34:13Z","commit_sha":"be803089d3e78f6f3716783d95705dff6a92cb1b","commit_message":"Graphics (#914): the level select's graphics are graphics/level_select/ (#973)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T00:20:56Z","commit_sha":"ae875fc47c9bf8f85f3f7c8982b82ad8ec1a6dd4","commit_message":"Graphics (#914): fonts/, logos/, title/ and menus/ replace intro/ and most of bg_package/ (#972)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-13T00:07:32Z","commit_sha":"b78caa4f105cc5ae3d7e42764bbf3f1824e94ba1","commit_message":"Graphics (#914): the cutscene pictures are graphics/cutscenes/NN_<what>.png (#971)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-12T23:53:57Z","commit_sha":"6dbea7434b0824185df3fa8cf6b571aaf27d7b5b","commit_message":"Graphics (#914): graphics/manifest.json and tools/gfx_manifest.py; make builds, make compare checks (#970)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-12T23:47:09Z","commit_sha":"ff17659a78785c2f3459ee021eeea10f72b54302","commit_message":"Graphics (#914): the framed sheets' order comes from folders.json, not the NN_ prefixes (#969)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-12T23:33:56Z","commit_sha":"f01c3e7685798eb17a28b7b5891353cbe990c463","commit_message":"Graphics (#914): the 30 single-owner palettes live in their pictures' PNGs (#968)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-12T20:53:58Z","commit_sha":"49c4d12744e781d0823391e479db1e45d267773a","commit_message":"Docs (#914): a \"Sprite banks\" section for the frame PNGs and bank.json (#964)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-12T20:40:01Z","commit_sha":"7d128f88790def696eca72a1af7834518355299b","commit_message":"Graphics (#914): the sprite banks are a PNG per frame in its palette, plus bank.json (#963)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-12T18:47:56Z","commit_sha":"21e24604fcbc4d0207ef131167ed405ca132f5dc","commit_message":"Graphics (#914): gObjPalettes is 125 JASC palettes, not a tile PNG (#958)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-12T18:41:11Z","commit_sha":"724dc4f1bdb3f249bb057a411980716e0834c01b","commit_message":"Graphics (#914): OBJ tile sets drawn as whole OBJs; fonts and cursor zoom in their default palettes (#962)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-12T18:28:10Z","commit_sha":"89fdb38d34da6aeb3ff39f4a55d071b862a4fc68","commit_message":"Graphics (#914): the universal logo is an 8bpp affine picture (#961)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-12T18:15:12Z","commit_sha":"e3742b5c56105724e0c987f4aaf4ccab6eaba47a","commit_message":"Graphics (#914): the cutscene pictures carry their real palettes (#960)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-12T18:04:10Z","commit_sha":"bbb0c0d392200561ae40e9f0822cb4f5418bcab7","commit_message":"Graphics (#914): the framed sheets in their palette banks and grouped by record; the Yeti frames in Yeti::palette (#959)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-12T17:39:01Z","commit_sha":"4be4420c4c4de0425a04d5e826f2019242967170","commit_message":"Graphics (#914): the level BG layers are whole-layer PNGs, no sidecar (#957)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-12T14:43:23Z","commit_sha":"c88d6d3cf439316f1f1e6078abc6720037add2b4","commit_message":"Graphics (#914): the graphics and the level assets are C arrays, data.s incbins only sound (#956)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":700,"complete_units":700}},{"timestamp":"2026-10-12T14:03:11Z","commit_sha":"474a41a67003151b09d7e3b869daeaa5ec3cafc8","commit_message":"Graphics (#914): the collision layers are PNGs at the BG's scale, with a terrain legend (#952)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":742,"complete_units":742}},{"timestamp":"2026-10-12T13:56:31Z","commit_sha":"196856972db1f3d28e56e3c8449a5b23444659be","commit_message":"Graphics (#914): the level BG tile sets are PNGs in their real colours (#955)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":742,"complete_units":742}},{"timestamp":"2026-10-12T13:44:22Z","commit_sha":"4068ee7d34fa12772c68cf05e2c8e532579fc938","commit_message":"Graphics (#914): every LZ77 palette is a JASC .pal, bit 15 included (#954)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":741,"complete_units":741}},{"timestamp":"2026-10-12T13:32:09Z","commit_sha":"a5d77a28e2cd0582f9b4b35fccd4b1ea9b3962f4","commit_message":"Graphics (#914): the menu and title pictures are whole-picture PNGs (#953)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":741,"complete_units":741}},{"timestamp":"2026-10-12T11:27:47Z","commit_sha":"d24909c376a640b760544e9634b28bc98bec93d0","commit_message":"Simplify (#846): the 100-column check measures the changed lines, and docs/simplify.md (#951)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T05:26:50Z","commit_sha":"9fbb6a0ab79e7fda05684eb5109618fd39d26f61","commit_message":"Simplify (#846): link/, util/, system/ and audio/ without the blocks that only scoped temporaries (#950)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T05:14:45Z","commit_sha":"f65c43ddee5cf780ab08edbdabc0992d8b05431a","commit_message":"Simplify (#846): gfx/, cutscene/, text/ and iwram/ without the blocks that only scoped temporaries (#949)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T05:02:45Z","commit_sha":"19b5277d699d369096ffd3083e66f86df745c50f","commit_message":"Simplify (#846): vehicle/polar/, pickups/ and hud/ without the blocks that only scoped temporaries (#948)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T04:50:43Z","commit_sha":"9f97ef8044bdc5fcf16ed4c0ce095bccc2aa483f","commit_message":"Simplify (#846): actor/ and enemies/ without the blocks that only scoped temporaries (#947)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T04:31:59Z","commit_sha":"3bb1f3e91bd3320ea9402085edca246d82f7797e","commit_message":"Simplify (#846): save/ without the blocks that only scoped temporaries (#946)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T04:19:57Z","commit_sha":"44f2710dc6439b2d11934db72bba0d0e6d72bf5e","commit_message":"Simplify (#846): vehicle/jetpack/ without the blocks that only scoped temporaries (#945)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T04:07:52Z","commit_sha":"daef65a8b0ec1033fec16fa6f9b589f24cb1f38f","commit_message":"Simplify (#846): bosses/ without the blocks that only scoped temporaries (#944)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T03:55:44Z","commit_sha":"32002686fc165199c1f3a028253cca0eba36d1d5","commit_message":"Simplify (#846): objects/ without the blocks that only scoped temporaries (#943)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T03:35:53Z","commit_sha":"b780be518dc4cfed5280a479cd0c5664cbc4e014","commit_message":"Simplify (#846): frontend/ and menus/ without the blocks that only scoped temporaries (#941)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T03:23:52Z","commit_sha":"e78b2e90cca069bc3ca48705033c6ef5ceb7f640","commit_message":"Simplify (#846): crates/ without the blocks that only scoped temporaries (#940)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T03:11:45Z","commit_sha":"ee8a9a0ab941052ee2187a6897419ec14224cd55","commit_message":"Simplify (#846): level/ without the blocks that only scoped temporaries (#939)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T02:59:35Z","commit_sha":"e5fdaa2bb22cde471eb7f2169af563a86b05bf8a","commit_message":"Simplify (#846): tools/simplify_scan.py, and player/ without the blocks that only scoped temporaries (#938)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T01:53:53Z","commit_sha":"c655abbf391249caa1f1ebdc1e50ed189c1f17da","commit_message":"Matching workarounds (#662): DivMod binds only the SWI's r0/r1, as original source (#937)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T01:37:35Z","commit_sha":"54eaffcfb725d0cbf6473777ca65128be1b1d04d","commit_message":"Matching workarounds (#662): bios_util.cpp is a report unit (2062 functions) (#936)\n\nCo-authored-by: Alexis Maiquez Murcia <claude@alma.mu>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242622,"matched_code":242622,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2062,"matched_functions":2062,"matched_functions_percent":100,"complete_code":242622,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":739,"complete_units":739}},{"timestamp":"2026-10-12T01:05:43Z","commit_sha":"276c358c6a46ff28b9425dbdb56e09c5d45a8bd1","commit_message":"Names (#913): the heap functions, the fixed-point helpers, SetupSpriteFrameOam's attr2 (#935)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-12T00:53:38Z","commit_sha":"c6e52c7bad8625545e32bf8866d9b848871350c3","commit_message":"Names (#913): the vehicles' and the hovercraft's placeholder parameters (#934)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-12T00:41:35Z","commit_sha":"91d496a8943d7511c285d9d79b1fe4a1d56ee113","commit_message":"Names (#913): Crate::Break's byBlast, StartTornadoSpin's states, the platform contact's mover state (#933)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-12T00:11:57Z","commit_sha":"3353a87ecaef5194036f5d1ca78c08597a4a1d0a","commit_message":"Names (#913): the level select's level, the save menu's label and row parameters (#932)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T23:59:53Z","commit_sha":"d56f0f93b9e61db1664b8b4bf4a0f96296862c87","commit_message":"Names (#913): LevelState's bonus-round end and checkpoint, LevelLayers' unused predicates (#931)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T23:47:49Z","commit_sha":"f7fcb548ee20af672a663988e07e9ad31bd63a99","commit_message":"Names (#913): the actor zone's BG, checkpoint and cell-animation parameters (#930)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T23:35:47Z","commit_sha":"fd2ffa341bd3997d21e9dcc756586166ea699fe8","commit_message":"Names (#913): the entity spawners take (id, x, y, param) (#929)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T23:00:46Z","commit_sha":"86f2e2ee9b4fc60d2fd62d135894f7e55bc5a201","commit_message":"Casts (#855): void * arguments without the (u8 *) casts (mem_free, IwramFree); GetTileBase returns the tile pool's pointer (#928)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T22:48:45Z","commit_sha":"4dc37ee05655be616f44f581d0c43c2b22d431fe","commit_message":"Casts (#855): scalar casts the types don't need (u16 positions, crate setters, category death thresholds, room pointers, SpawnJetpackBalloon) (#927)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T22:36:44Z","commit_sha":"fc41638258ed31072f224534ef6933cf18bbe34e","commit_message":"Casts (#855): pointer parameters, fields and tables with their real types (hitbox edges, lastHitbox, bgPicture, SaveMenu::dispcnt, handshakeWord, hop widths, motion records) (#926)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T22:24:42Z","commit_sha":"d8dd925f676da3f162bc49b9109acd2248d453e5","commit_message":"Casts (#855): byte-offset tables read as arrays (entity bitmaps, BgStreamer::ring, Starfield::tileBuffer, gActorCategories) (#925)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T21:59:28Z","commit_sha":"1dc8687dcadf099324197f023abf19e8d4b3ff9b","commit_message":"Casts (#855): the same casts go (const fields and parameters); Pos(), CheckChecksum, stateTimer, sortKey (#924)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T21:47:24Z","commit_sha":"52ef8e467bb5ee76f3064cfc408c61a3fbf2fc25","commit_message":"Casts (#855): LevelState::bonusPlatform is a Platform *; PlayRoom reads its x (#923)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T21:35:21Z","commit_sha":"539d264b893a05dc5dd15ac9a0c086f362647ca4","commit_message":"Casts (#855): Yeti::chargeParams are YetiCharge records, Font::oam_scratch is a struct oam_attrs, GetCurrentLevelFlags returns the level_record (#922)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T21:23:14Z","commit_sha":"1b2947ba41107544277d582a37ac710d8634cc87","commit_message":"Casts (#855): ResetGrid zeroes the crate grid's nodes through CrateList::InitView (#921)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T21:16:58Z","commit_sha":"cab4367b2a0b287774dfd9c206de65cee4f96cc9","commit_message":"DMA (#912): frontend transfers through the Dma* helpers; DmaFill16From/32From; docs/dma.md (#919)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T21:04:49Z","commit_sha":"85262673fd83131ec242cf77c024052936bcc9cb","commit_message":"DMA (#912): level, room and actor-category transfers through DmaCopy16/DmaFill16 (#918)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T20:52:42Z","commit_sha":"680af6cea71cfc515a701e3f15165f81ed2e8d45","commit_message":"DMA (#912): gfx, asset, cell anim and slideshow copies through DmaCopy16/32 (#917)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T20:31:58Z","commit_sha":"e559d1c9f1c3b1c0398198811fa3d70650dc8deb","commit_message":"Casts (#855): level_entity_list::params is const u8 *; Platform::Create reads struct entity_params (#911)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T20:19:52Z","commit_sha":"1695a7e168594a9c9506b5606512715cc0b0056e","commit_message":"Casts (#855): the actor spawn tables are a header and spawn entries (struct actor_spawn_table) (#910)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T20:07:39Z","commit_sha":"3bc5ef301ef4ad44dca3200875ae439106dfe82e","commit_message":"Casts (#855): gDispcnt is a union dispcnt, PaletteCache::slots is u16, palette RAM as BG_PALETTE/OBJ_PALETTE/BACKDROP_COLOR (#909)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T09:03:58Z","commit_sha":"bdb05fbcb492f734a7f4a49d3df18595f8850afc","commit_message":"Casts (#855): sprite banks by index, gSpriteBankSet->Bank(n); LinkSession's player ids without the byte-offset cast (#906)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T08:57:58Z","commit_sha":"fa10df7c322ee796a399c4a38ded555a96420762","commit_message":"Casts (#855): gemPlatform is a Platform *, DrawFraction takes text, IsUnshootable is u8, anim_table_record::index is u8 (#907)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T08:45:45Z","commit_sha":"cab1dd866c4da52d400748722174e6b23f608daf","commit_message":"Casts (#855): HandleEvent's from is an s32 in the controllers too (#905)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T08:33:36Z","commit_sha":"69eb562fc8687afed2375a43a771ce9708758f18","commit_message":"Casts (#855): RandRange/rand's (u16) casts go; animTimer is s16, bg_package's size is s32 (#904)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T07:49:58Z","commit_sha":"1b53079f4f31c2804c96df860a9ff4daee49119e","commit_message":"Casts (#855): AsMovingSprite, AsPlayer, AsHpActor, AsJetpackPlayer, AsPolarPlayer (#903)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T07:37:51Z","commit_sha":"d1518cd0308b2846276c05356a1b0645fa748c81","commit_message":"Casts (#855): text pointers are const u8 *: GetUiText, the font and the holders (#902)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T07:25:47Z","commit_sha":"2887ef480440ddfb5982a2327548fa62b1a8a084","commit_message":"Casts (#855): the yes/no tests return bool, their callers' (u8) casts go (#901)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T07:13:43Z","commit_sha":"1422391195594d01e87d06b01def8e2a12305470","commit_message":"Casts (#855): tools/magic_numbers.py --casts, the casts per thing cast (#900)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T04:44:01Z","commit_sha":"9c0f78b03af429dab789a59995e7e899dec3627a","commit_message":"Flag bits (#843): name the D-pad directions, SteerSpin/EndSpin's mode and the pufferfish and frog hits (#899)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T04:31:55Z","commit_sha":"e620e090532a68f4b6610e55197638abdb1117d8","commit_message":"Flag bits (#843): name the terrain modes, the wrapped text and credits modes, the asset types and the BG colour mode (#898)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T04:19:53Z","commit_sha":"139738ee5c03055bb46bbc63ed419e51fb7b4e9d","commit_message":"Flag bits (#843): spell the 3D stages' spawn tables and the launcher's bombers with the actor kinds (#897)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T04:07:48Z","commit_sha":"f18f744135909d976e4a058c1d0e27215347ec00","commit_message":"Flag bits (#843): name Platform::Create's spawn kinds, the crate blast state and the pickup spawners' kinds (#896)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T03:33:04Z","commit_sha":"5daf272ea69c3661ea7a22eda17d9220241cdf84","commit_message":"Flag bits (#843): name the 3D stages' actor kinds and CountCrateEntities' entity types (#895)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T03:21:01Z","commit_sha":"e87646e157e1104e9db291a3e4b0beb01b29fc37","commit_message":"Flag bits (#843): name the pause row types, HUD slide states, hitbox edges, display and OBJ modes (#894)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T03:08:55Z","commit_sha":"89f676e2a62dcdf761e477c4f1518ca1de96041e","commit_message":"Flag bits (#843): name the room entity parameter flags, the crate options and slot faces (#893)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T02:36:25Z","commit_sha":"6160af0d65ef431324dace4f43abac427a052fef","commit_message":"Flag bits (#843): name the room exit statuses (#892)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T02:24:19Z","commit_sha":"2f99962f0d2a90d71d736f1b275c4b884943e29d","commit_message":"Flag bits (#843): name InputCtrl's state and dirState, and the camera's mode (#891)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T02:12:16Z","commit_sha":"8d5347d866e56b713bf5318db749f358c190782c","commit_message":"Flag bits (#843): name the audio context's state and the OAM affine mode (#890)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T02:00:13Z","commit_sha":"03655ea13f53a5de19743eb5622e0efbe50c17c8","commit_message":"Flag bits (#843): name the rest of the boss family's states, modes and kinds (#889)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T01:28:26Z","commit_sha":"adfd7482f0c5d7a2086e326742a20e745b91328c","commit_message":"Flag bits (#843): name the boss controllers' states (#888)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T01:16:22Z","commit_sha":"7ec7930bd5a76c7ed388275b0d6a90c935e0dd7c","commit_message":"Flag bits (#843): name the airship's, hovercraft's and yeti's states (#887)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T01:04:08Z","commit_sha":"bbf72a3482b608d4a08b2fd0b8d481710038d030","commit_message":"Flag bits (#843): name the level select's zoom and cursor states (#886)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T00:49:03Z","commit_sha":"2426ac1f5be2971cf709bc75d60250c9121954f4","commit_message":"Flag bits (#843): name the extra life's and the wumpa's state, mode and phase (#885)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T00:14:22Z","commit_sha":"79ebe8767063742e5d5c499bfc46dcccc7b890a9","commit_message":"Flag bits (#843): name the jetpack actors' and the hovercraft parts' states (#884)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-11T00:00:03Z","commit_sha":"4f4935d2100f4e3f0ffe3e314ea48549f1968924","commit_message":"Flag bits (#843): name the polar actors' and the logo actor's states (#883)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T23:47:06Z","commit_sha":"deea33b48598e2bc51c3610c66bdea84d1e54656","commit_message":"Flag bits (#843): name Player::ctrlMode (#882)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T23:30:32Z","commit_sha":"4aaeae02fee849ef0cfe2fb6014724c1cc9de5fd","commit_message":"Flag bits (#843): name the direction bits (Sprite::dir, hitAxes, hitMask) (#881)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T22:56:42Z","commit_sha":"2a5900720fe367f5cf2c3bf181746e26803b3ae5","commit_message":"Flag bits (#843): name SwimCtrl::state and mode (#880)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T22:41:12Z","commit_sha":"37ed397ee6b70a338f127f102c6437b4a3f0e8ed","commit_message":"Flag bits (#843): name Platform::type (#879)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T22:28:24Z","commit_sha":"8114d3ca45bf7e766cb88115e169835792f255bb","commit_message":"Flag bits (#843): name EnemyCtrl::state and mode (#878)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T22:16:18Z","commit_sha":"941f811caa81ceb148fd9e182e8c49ef40ef859b","commit_message":"Flag bits (#843): name the leftovers from the first batch (#877)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T21:36:27Z","commit_sha":"5fb7d439e8f24234a80520fd3a9f4b325a5851f5","commit_message":"Flag bits (#843): KEYINPUT button names for the input tests (#876)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T21:21:00Z","commit_sha":"5f9d40df7259886fe642977b891f721fd13f1103","commit_message":"Flag bits (#843): name SaveMenu::state; SaveMenu::IsBlinkOn (#875)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T21:02:16Z","commit_sha":"86b7743a6ff305c3e7706d9eacae695f7e0012ff","commit_message":"Flag bits (#843): name Entity::f's flag bytes; call Entity's accessors (#874)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T20:47:08Z","commit_sha":"9958336d51b2693b815a63b8b213d86b7726112c","commit_message":"Flag bits (#843): name GameProgress::flags (gems, powers); core.h bit helpers; magic_numbers.py --bits (#873)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T19:52:25Z","commit_sha":"0770f85cda48897640f32b38ac0634f73bb4414b","commit_message":"Headers (#844): fold actor_self.h, frontend.h, graphics_package.h, menus.h, player.h and vehicle.h into their .hpp (#872)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T19:16:33Z","commit_sha":"1fc5a3421c3bbb391738acba6c632f388d1a3192","commit_message":"Headers (#844): fold audio.h, cutscene.h, hud.h and pickups.h into their .hpp (#871)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T19:04:32Z","commit_sha":"8d4479e4b3719d4c2e3142885067b01314bb26a2","commit_message":"Headers (#844): delete include/vtable.h (#870)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T18:52:31Z","commit_sha":"f12475393cb1f0212509badad7e94d45c41072a8","commit_message":"Docs (#844): name the src/data tables by their .cpp files (#869)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T18:25:15Z","commit_sha":"91e16fbbaea9c2a194da783c333bc43232e5aba9","commit_message":"src/data (#844): the level, audio, cutscene and HUD tables as C++; the text stays C (#867)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":738,"complete_units":738}},{"timestamp":"2026-10-10T16:27:18Z","commit_sha":"591f9b8c7a62b745836c352c40f01feddef6a6ff","commit_message":"src/data (#844): the graphics assets and sprite banks as C++ (#868)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T16:15:08Z","commit_sha":"1ad3142e32c2a62f1880ea62b2cce93959991fa6","commit_message":"src/data (#844): the player and object tables as C++ (#866)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T15:59:35Z","commit_sha":"2808fe1755770c277e661a8b9ac042f051482669","commit_message":"src/data (#844): the actor and vehicle tables as C++ (#865)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T15:44:32Z","commit_sha":"603c202c8ee332637b0294dcaa476440a7f55183","commit_message":"src/data (#844): the front end's tables as C++ (#864)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T15:32:17Z","commit_sha":"3fd2565bb602008ec77f32717d34e427bceac6bf","commit_message":"src/data (#844): the menus' tables as C++ (#863)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T15:05:15Z","commit_sha":"1a290b66db8809b80d756436b77888f865eaedbc","commit_message":"Headers (#844): cut player.h, vehicle.h, graphics_package.h, actor_self.h to what C needs (#862)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T14:52:59Z","commit_sha":"96c47fdb5cbef0333d3e46259d14cbd4921ab20f","commit_message":"Docs (#844): current pages no longer send readers to files that are gone (#861)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T14:40:43Z","commit_sha":"03d37fb12d28a226c4438cbfddb42896c064b5a9","commit_message":"tools (#844): remove apply_headers.py, cast_args.py and asmdiff.sh (#860)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T14:27:42Z","commit_sha":"e1ea0116d10193c27ba4d5a453efe0a72e92dc34","commit_message":"Headers (#844): level_state.h into game_progress.hpp; cut menus.h, frontend.h (#859)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T14:19:45Z","commit_sha":"973019b0a22d9f722bd555fe0e390d72622f9ee6","commit_message":"Makefile (#844): drop the dead asminclude path and old_agbcc override (#858)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T14:04:38Z","commit_sha":"21a99f46aa92d012f9854e5d92ff3348a96cdc28","commit_message":"Headers (#844): cut audio.h, cutscene.h, hud.h, pickups.h to what C needs (#857)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T13:51:20Z","commit_sha":"11b7fea79bb355a9c577d90c6dc93069e37ffb5c","commit_message":"Headers (#844): merge crate.h, link_session.h, save_menu.h into their .hpp; drop save_data.h (#856)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T13:45:02Z","commit_sha":"39cabbe31d0869070d599c40a0441f9e9b03782e","commit_message":"GaxChannelMix: root causes of the clamp keep and the volatile read (#662) (#854)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T13:25:45Z","commit_sha":"6998747ee9889ef0470b98bcb99d17a96635e79a","commit_message":"GAX2_init: why maxRate needs its MATCH_USE (update_equiv_regs doubling) (#662) (#852)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T13:16:55Z","commit_sha":"5cb7ddf78a03973f6d1b7dc191ef4ee0b4cd79c0","commit_message":"itoa_arm: assembly, its ROM code isn't gcc output (#662) (#853)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":735,"complete_units":735}},{"timestamp":"2026-10-10T12:11:40Z","commit_sha":"724c07dd843821aedfebcd0d9f60271bd40b641e","commit_message":"ActionCtrl::StateCrouch: face-right turn as a FaceRight inline, no volatile (#662) (#851)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-10T11:35:40Z","commit_sha":"27641702f4184be34f8f8c43a04c967af09ab1bd","commit_message":"Credits::LoadLogos: palette copy through a const reference, no r1 pin (#662) (#850)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-10T10:59:46Z","commit_sha":"92b445846b362d6447038f58abc08c5176a9a289","commit_message":"LinkSession::HandleSerial: ring copy from gcse's PRE, no MATCH_KEEP(rf) (#662) (#849)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-10T03:37:35Z","commit_sha":"785938e3ce7f2182974b9efb386c2be67bcee667","commit_message":"LinkSession::HandleSerial: payload pointer before the length, no MATCH_USE(n) (#662) (#847)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-10T03:26:49Z","commit_sha":"0a8d5d4e2dff3c1a788d5ef2f24a9565186b3255","commit_message":"LinkSession::ResetState: drop the 13 MATCH_USE(id) (#662) (#848)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-10T02:55:23Z","commit_sha":"b353b7153460998804e0b4d6fbfda9e5f843c212","commit_message":"StateCrouch: round 10 notes on the flip's volatile (#662) (#845)\n\nCo-authored-by: Alexis Maiquez Murcia <>\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-10T02:33:06Z","commit_sha":"e0e988de4ae2927ba71897a3f5808e96a5cf08a4","commit_message":"ActionCtrl::HandleEvent: dead state test instead of the volatile read (#662) (#842)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-10T02:17:56Z","commit_sha":"19fa5bb0cbd931dbce1d66505f9645f9f55e66e5","commit_message":"Player::HandleEvent: dead mask-level test instead of the volatile read (#662) (#841)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-10T01:45:08Z","commit_sha":"e9576fb4c6d00a44d76c8e0ef4d84df0dbe690f1","commit_message":"Player: drop two more redundant gLevelState locals (#662) (#840)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-10T01:36:45Z","commit_sha":"6ea62fc52188023a3ac7653998d95d38f1853b98","commit_message":"Player::HandleEvent: drop the redundant gLevelState local (#662) (#839)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-10T01:02:04Z","commit_sha":"f9839390810fe333d2c6017c91abfc7f654e948a","commit_message":"Matching workarounds (#662): GaxHuffUnComp memory uses as \"m\" inputs of Shin'en's swi asm (#838)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T22:29:17Z","commit_sha":"4c3affb5094d00317272f9b0c8bd24aa6bab40a0","commit_message":"GAX: Shin'en's inline asm as original source, the ARM DSP routines as assembly (#662) (#837)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":242580,"matched_code":242580,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":242580,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T21:34:58Z","commit_sha":"1431dbcee621b860c120a46ca17b93f775ba9542","commit_message":"Matching workarounds (#662): per-object warning flags instead of warning silencers (owner decision) (#836)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T20:27:06Z","commit_sha":"84f518fce1d60ce688ee506f4f3a7dd0a9db6497","commit_message":"README: point the workaround metric at the badges (#835)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T20:13:16Z","commit_sha":"3dcd74a97996cc275428620f1be0deb010a9aa94","commit_message":"Matching workarounds (#662) round 9: GAX2_init, GaxChannelMix, itoa_arm (#834)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T19:56:11Z","commit_sha":"d4f05dbc615f94004e8e75ffba08c3b429ff2a2f","commit_message":"Matching workarounds (#662) round 9: player/ and SaveData::TestFlags (TestFlags freed) (#833)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T19:45:09Z","commit_sha":"7e4ffbe414e90163a13bb11347eae600dbc7732e","commit_message":"Matching workarounds (#662) round 9: DingodileShieldCtrl::Update, link/, LoadLogos (#832)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T18:39:17Z","commit_sha":"c212e8913f4515797859aa576505541cf7ddb8fd","commit_message":"Matching workarounds (#662) round 8: GAX2_init, GaxChannelMix, itoa_arm (#829)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T18:25:55Z","commit_sha":"d77e5f85e47bf0ae0ab688492734eb4e856c29bf","commit_message":"Matching workarounds (#662): ConvertTiles without MATCH_CONST (owner decision) (#831)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T18:12:46Z","commit_sha":"b199b428885dce173d79794be94f3b444b1c59fc","commit_message":"Matching workarounds (#662) round 8: link/, player/ and save/ (LinkSession::Update freed; natural_enum.py, rtl_corpus.py) (#830)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T17:54:46Z","commit_sha":"ed13b94b51fd9c0f76b0e557cd05aec0481a44a8","commit_message":"Matching workarounds (#662) round 8: ConvertTiles, Dingodile, LoadLogos (#828)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T16:51:17Z","commit_sha":"78d634dc25f40f34ae337cf2b69c111081be5bab","commit_message":"Named IDs and kinds (#820, #655): the magic_numbers.py hits (#827)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T16:40:51Z","commit_sha":"9477513c7e440803d8f169fe4056e9e7dd17b10d","commit_message":"magic_numbers.py: the default mode on the C++ tree (#655 follow-up) (#826)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T16:34:15Z","commit_sha":"c7d5928b119de2aa38add61538a1ab969858eb22","commit_message":"Named sizes and constants (#820): vehicle, crates, player (#823)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T16:27:47Z","commit_sha":"3d69a908719095668d1e9e6d05b20990f7b28535","commit_message":"Named sizes and constants (#820): actor, iwram, system, cutscene (#825)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T16:21:34Z","commit_sha":"85a57065101059b4aec76ee55b6ebae29d124765","commit_message":"Named sizes and constants (#820): link, save, menus (#824)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T16:12:34Z","commit_sha":"73ed2cf3ea61d749ce95078ac569eca9d2f82495","commit_message":"Named sizes and constants (#820): frontend, bosses, level, gfx (#822)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T15:50:04Z","commit_sha":"22291e615dc32ec64942fcae4c81833781ca4e45","commit_message":"sizeof and constant finder for #820 (tools/magic_numbers.py --sizes) (#821)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T15:29:33Z","commit_sha":"87af979d48cec16109bf951b32f0a29d71710b77","commit_message":"Matching workarounds (#662) round 7: ConvertTiles, Dingodile shield, itoa_arm (#819)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T15:19:17Z","commit_sha":"c185ab5c4a79fa9b628f525786612d677354ea69","commit_message":"Matching workarounds (#662) round 7: link, save, frontend, gax (#818)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T15:11:06Z","commit_sha":"65af6a3e0a2394254219158ebd9b5549e33b9f4d","commit_message":"Progress badges: matching, non-matching, clean functions, workarounds left (#817)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T14:56:21Z","commit_sha":"5a9ad9c12a2c825a6bd35b76f9ee19419f662958","commit_message":"Matching workarounds (#662) round 7: player, objects (#816)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T13:53:38Z","commit_sha":"44a2debe253b255cf4cb6154709215acaf0ebe69","commit_message":"README: workaround metric after #662 round 6 (#815)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T13:24:36Z","commit_sha":"8d0375ac85b61a4889442d8d89876becc1023857","commit_message":"Matching workarounds (#662) round 6: ConvertTiles, Dingodile shield, itoa_arm (#814)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T13:06:06Z","commit_sha":"7ac502b07bb91e002387966dc22320332991d4db","commit_message":"Matching workarounds (#662) round 6: link, save, frontend, gax (#813)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T12:48:04Z","commit_sha":"9d479ea9fe8b75b2db54e8ae18ef157b650baf83","commit_message":"Matching workarounds (#662) round 6: player, objects (#812)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T12:27:43Z","commit_sha":"7d37e7999c2401a25f7cb36630270bb92eb5c64a","commit_message":"README: workaround metric after #662 round 5 (#811)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T12:01:30Z","commit_sha":"1465fb9e671cd66991b21e2ae9b29c64e7075b43","commit_message":"Matching workarounds (#662) round 5: player, objects, actor (#810)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T11:47:39Z","commit_sha":"94e003039225a80bc01abea206ace52c2acbb5de","commit_message":"Matching workarounds (#662) round 5: link, save, frontend, gax (#809)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T11:38:17Z","commit_sha":"1f82d05f8cf4bf1f2fa8e417b5a17fc03e8fa92a","commit_message":"Matching workarounds (#662) round 5: enemies, bosses (#808)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T11:06:09Z","commit_sha":"0fe40542036b1dccb2eade061406377ef812b5ae","commit_message":"ARM compiler: opt-in jump.c options for the last two IWRAM workarounds (#662) (#807)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T10:12:47Z","commit_sha":"b000843fc78a2c0ebb91329df286dd1d9b661bfa","commit_message":"README: workaround metric after #662 round 4 (#806)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T09:53:51Z","commit_sha":"55b85da4c889473605f61db21013616088b9445b","commit_message":"Matching workarounds (#662) round 4: enemies, bosses (#804)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T09:47:37Z","commit_sha":"6c8353eafc3d8822216ba36f78acc2f7aa1a8666","commit_message":"Matching workarounds (#662) round 4: menus, link, save, frontend (#805)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T09:33:54Z","commit_sha":"bbbfdc1c28e0bec03545cd193ccb19cd0274b4c1","commit_message":"Matching workarounds (#662) round 4: lib, iwram, ConvertTiles (#803)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T09:20:04Z","commit_sha":"d39ffd3c75fa242a2cb9e8afc66a920884946b2f","commit_message":"Matching workarounds (#662) round 4: objects, crates, actor (#802)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T09:04:17Z","commit_sha":"dddc1525a98566917ec4611a898c77db2d7fe61a","commit_message":"Matching workarounds (#662) round 4: player, level, text (#801)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T07:08:11Z","commit_sha":"c462e933e38232a466e3f1f840a0678c1ce54541","commit_message":"C++ (#772): the hovercraft's data tables as class members (#800)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T06:46:11Z","commit_sha":"c86f42948a978ba9efc10facefa7beceb736fbf1","commit_message":"C++ (#772): the airship as an all-static class (#799)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T06:35:19Z","commit_sha":"23f419702e8b36c1c70f124d6e98dc907db151ff","commit_message":"C++ (#772): the yeti as an all-static class (#798)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T06:22:27Z","commit_sha":"fae706e2cdb61bc407a213258c9738adaf62444f","commit_message":"C++ (#772): the hovercraft as an all-static class (#797)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T05:59:08Z","commit_sha":"8293c229b7f1997560a551042a258bbfdccd4ef2","commit_message":"C++ (#766): GameProgress class (#796)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T05:40:12Z","commit_sha":"2aaeab9a0ad6f80425a9734faaf997c14bc018ce","commit_message":"C++ (#765): type the actor category table (#795)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T05:20:55Z","commit_sha":"8baf0bafdde034ba8f0f53c35897781df75787af","commit_message":"C++ (#763): small method moves and retypes (#791)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T05:06:26Z","commit_sha":"8540b9901bf72d789effe26a14a37a87fd09c7a0","commit_message":"C++ (#760, #762): terrain probes as LevelLayers methods; LevelEntityFlags and Bitmap (#794)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T04:56:49Z","commit_sha":"4734673fe138cd513c6142d9267b90edc680f9e6","commit_message":"C++ (#764): shared inline helpers into the class headers (#793)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T04:47:24Z","commit_sha":"46e37ca58daafbb5e6426b90e53b5f95b2d2ac85","commit_message":"C++ (#759, #761): KeyInput::Update/GetDpadDirection and a Camera class (#792)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T04:18:33Z","commit_sha":"6ed95a38516b03fe5fe44d41916e509c5575229d","commit_message":"File layout (#771): merge the level, vehicle and bosses files (#789)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T04:09:09Z","commit_sha":"7c27ef0d9aff35ae2e6cdfd2d9ea4eace05e9e2c","commit_message":"File layout (#771): merge the save, menus, frontend and hud files (#790)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T03:59:42Z","commit_sha":"6bbda7eaa628192e843998f75c2df83ffa076737","commit_message":"File layout (#771): merge the gfx, objects, crates, enemies and player files (#788)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T03:27:43Z","commit_sha":"326703a7bf1908659e9c263587520e10863a9ae0","commit_message":"File layout (#768): objects, player, enemies, pickups and crates (#785)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":734,"complete_units":734}},{"timestamp":"2026-10-09T03:16:53Z","commit_sha":"f84a65645befc65e892cc31b531ddcc34e297e4c","commit_message":"File layout (#769): bosses and vehicle (#787)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":715,"complete_units":715}},{"timestamp":"2026-10-09T03:03:52Z","commit_sha":"508aea174a6ffcf4dfa6023899c8f1d140c32595","commit_message":"File layout (#770): level, cutscene, actor and frontend files (#786)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":704,"complete_units":704}},{"timestamp":"2026-10-09T02:52:41Z","commit_sha":"bd1ce8b7fdfa15573c7f05ebc1ef11aa6073b174","commit_message":"File layout (#767): system, util, gfx, save and menus (#784)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":685,"complete_units":685}},{"timestamp":"2026-10-09T02:21:18Z","commit_sha":"d55f3d585159c90871c6fc9cf9c5d8e9819c25a0","commit_message":"README: workaround metric after #662 round 3 (#783)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-09T02:02:13Z","commit_sha":"2d120d413238335fd3ec95ae85d8565a84446762","commit_message":"Matching workarounds (#662) round 3: frontend, menus, save, link, text (#782)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-09T01:48:24Z","commit_sha":"889994195443581d5e40889008e17a0a5b72884e","commit_message":"Matching workarounds (#662) round 3: bosses, enemies, actor (#781)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-09T01:34:40Z","commit_sha":"e14ea6aba6ece2c186d33c9edd191d658a391d9c","commit_message":"Matching workarounds (#662) round 3: crates, objects, pickups (#780)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-09T01:18:36Z","commit_sha":"7ef93bbe1c57572db617935d7cd100dadb90b4c5","commit_message":"Matching workarounds (#662) round 3: player, level (#779)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-09T01:03:34Z","commit_sha":"49a2b324cb16e7519eb034d2cdc0cc40c93630c1","commit_message":"Matching workarounds (#662) round 3: lib, iwram, util (#778)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-09T00:27:21Z","commit_sha":"8c6bae081b9bbf120a689361c22b8fa3f32b0234","commit_message":"Matching workarounds (#662) round 2: bosses, enemies, actor (#777)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-09T00:13:35Z","commit_sha":"ccb8e9a88ac6a7cf8f7ca36d218252252d8d4d9d","commit_message":"Matching workarounds (#662) round 2: menus, save, link (#776)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-08T23:59:49Z","commit_sha":"ca3b74c7db6adcb65f65b1ec53718a22e8dd1f38","commit_message":"Matching workarounds (#662) round 2: player, crates, frontend (#775)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-08T23:46:55Z","commit_sha":"d06483ea9b7467cacf026444a9593b7ecb656d27","commit_message":"Matching workarounds (#662) round 2: lib, iwram, system, util, audio, text (#774)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-08T23:33:53Z","commit_sha":"21a90a50fab32d002c5fff1d20dbdd6ef5beb69a","commit_message":"Matching workarounds (#662) round 2: level, objects, vehicle (#773)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-08T22:28:29Z","commit_sha":"afc86a1b1c0cf50c490bc854247cac56941691c0","commit_message":"C++ (#754): delete the C views of the classes (#757)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-08T22:18:08Z","commit_sha":"4374d369686e610fe894201a489b62a5254f368f","commit_message":"C++ (#750): LevelState and LevelProgress as classes (#758)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-08T22:04:43Z","commit_sha":"168695692f84b827ab610b936538861b3a1e9f66","commit_message":"C++ (#751): LinkSession, SaveData and SaveTransfer classes (#756)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-08T21:51:23Z","commit_sha":"cadc9bffcb7f54ed722157d4780bade355333642","commit_message":"C++ (#752, #753): TileSlotPool, TileCache, BgSetup and ScaledSprite classes (#755)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-08T21:18:59Z","commit_sha":"a2ca51e9d6577dd1389afbb300402ee4070a66be","commit_message":"docs/cplusplus.md: only lib/ and src/data/ stay C (#749)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-08T21:05:55Z","commit_sha":"e195cdecf7d8e74e446a26df5b6d48f38c9c658d","commit_message":"C++ everywhere: link, save, iwram (#748)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":668}},{"timestamp":"2026-10-08T20:54:36Z","commit_sha":"c8dd642ee87750404f6f83156a97bd60a4ae6f90","commit_message":"C++ everywhere: actor, vehicle, level (#747)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T20:41:24Z","commit_sha":"16809cc62299cbc8dd620b73690576c0479850a8","commit_message":"C++ everywhere: gfx, system, util, text (#746)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T20:15:47Z","commit_sha":"54ec178e4430842fc74031138441707bea3b7270","commit_message":"Padding fields: level, menus, frontend, gfx, save, link, audio, lib (#745)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T20:05:47Z","commit_sha":"62b46551536aebfa5403ba24e2b184eed3627fd2","commit_message":"Padding fields: entity, controller, actor, boss, vehicle and crate headers (#744)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T19:49:46Z","commit_sha":"1a9bbb1c14a20a76134828651157fa4d36bd82eb","commit_message":"Naming (#558): the last functions and #569 leftovers (#743)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T19:44:15Z","commit_sha":"f13c6bb9bc8311b44a14e950578d866e106b7954","commit_message":"Naming (#558): level, level select, gfx and system struct fields (#742)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T19:39:04Z","commit_sha":"e8cf6b9177425d81787830ef38e1a4f983f7d55c","commit_message":"Naming (#558): player, objects and actor struct fields (#741)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T18:42:09Z","commit_sha":"43fb6d994c702c16d87bebdd5c39f842e51929b4","commit_message":"README: refresh the workaround metric after #739 (#740)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T18:26:28Z","commit_sha":"084855cbd2e0ff477a7ae7b92d5bf3c29e8a5292","commit_message":"C++: the audio context (audio.c -> audio.cpp) (#739)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T18:21:16Z","commit_sha":"12149b5cdf81d6c3accadc29c7c59e9a6bdc39d0","commit_message":"Matching workarounds (#662): progress metric and docs (#738)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T17:32:25Z","commit_sha":"dbb0832e41a240de0f99bd255df6c39fc2a67f60","commit_message":"Matching workarounds (#662) step 3: gfx, objects, text (#737)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T17:14:37Z","commit_sha":"53125bb7e9f7ac967a0a88b054f2e0538d26df51","commit_message":"Matching workarounds (#662) step 3: actors, bosses, crates, enemies, player, vehicles (#736)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T16:58:16Z","commit_sha":"6d0b010c4b9f01d81ff14cd46c91cc29762c0f43","commit_message":"Matching workarounds (#662) step 3: system, util, audio, iwram, lib (#735)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T15:54:58Z","commit_sha":"f2b507d97da23c4fcc78559500cd2b2863a40f93","commit_message":"Matching workarounds (#662) step 3: level (#734)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T15:36:56Z","commit_sha":"dad284c204827826ad646aadd01eb4479f3dc10f","commit_message":"Matching workarounds (#662) step 3: frontend, menus, save, link (#733)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T14:30:30Z","commit_sha":"96ed4f68954f198b95cc504e993b43ceb1b9ed67","commit_message":"Matching workarounds (#662) step 2: drop the 237 removable workarounds (#732)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T13:44:10Z","commit_sha":"c146f04c5ef2a151eec8536277027324c8f190a1","commit_message":"build_patched_agbcc_arm.sh: build on modern gcc, tolerate a patched tree (#731)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T13:34:49Z","commit_sha":"ea9b87068fc27e556f5d2ad9a22399c59d0ee63b","commit_message":"Matching-workaround pruning tool (#662 step 1) (#730)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T13:06:25Z","commit_sha":"a58dee6c0e3217c79ebdb04a7a224ae43082e60f","commit_message":"Base structs (#656) batches 6 and 9: one name per field, merged record copies (#729)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T11:52:12Z","commit_sha":"4e69753760b13420a2afb3918c646d9cde5cd684","commit_message":"Base structs (#656) batches 2-5: the class families' leftover C views (#728)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T11:02:21Z","commit_sha":"1a541d58b7e8ecc09d87453883f071b6b7126775","commit_message":"Base structs (#656) batches 7-8: level_state and the progress block (#727)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T10:26:03Z","commit_sha":"6f078852723b76b9629570ebbe44ae744e7e4c8b","commit_message":"C++ conversion (#664): final cleanup (#726)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T10:00:16Z","commit_sha":"e68f2034579f40b22da128cc4f4403757a1ec62f","commit_message":"Struct layout audit tool (#656 batch 1) (#725)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T08:45:13Z","commit_sha":"e3222e8598b8f43d336d5f5f3212979286a2fbb4","commit_message":"C++ conversion (#664) step 10b: the last C vtables (#724)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":668,"complete_units":667}},{"timestamp":"2026-10-08T07:16:40Z","commit_sha":"58a0b20d44767d79854f5afbb7819687ff1e6e1a","commit_message":"C++ conversion (#664) step 10: g++ emits the vtables (#723)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":664,"complete_units":663}},{"timestamp":"2026-10-08T06:08:10Z","commit_sha":"fbbfbc3e327cb5fca81ca8f795423dc002ea48ea","commit_message":"C++ conversion (#664) part 11g: the balloon crates, the parachute nitro and the rocket (#722)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":619,"complete_units":618}},{"timestamp":"2026-10-08T05:54:14Z","commit_sha":"a6842405f94de89a34ad877bee028e774e72afd6","commit_message":"C++ conversion (#664) part 11d: the polar crates, pickups, hazards and Aku Aku (#721)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":619,"complete_units":618}},{"timestamp":"2026-10-08T05:30:13Z","commit_sha":"aa919d0caa6a2e2c905b4bcee9ff535b3a8f2569","commit_message":"C++ conversion (#664) part 11h: the hovercraft (#720)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":619,"complete_units":618}},{"timestamp":"2026-10-08T05:16:05Z","commit_sha":"83f8599b9eede523ab49cb7413338ed2863fadd3","commit_message":"C++ conversion (#664) part 11f: the planes, bombers, cannonballs and balloons (#719)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":619,"complete_units":618}},{"timestamp":"2026-10-08T05:00:26Z","commit_sha":"4bb7ce5e8a4a247328a38c43bedde133c0ed01f6","commit_message":"C++ conversion (#664) part 11c: the polar player (#718)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":617,"complete_units":616}},{"timestamp":"2026-10-08T04:15:34Z","commit_sha":"9fedf0836dfe17ad04d46d586c41358cb92ad8a2","commit_message":"C++ conversion (#664) part 11e: the jetpack player, its shot and the spawners (#717)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":617,"complete_units":616}},{"timestamp":"2026-10-08T03:58:15Z","commit_sha":"241bd3623758672420cc77c74722f45a6e16298f","commit_message":"C++ conversion (#664) part 11b: the actor factory and the category frame (#716)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":617,"complete_units":616}},{"timestamp":"2026-10-08T03:41:17Z","commit_sha":"1792b9e4d63ad8f826020f52a7547c98897684e4","commit_message":"C++ conversion (#664) part 11i: the airship (#715)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":617,"complete_units":616}},{"timestamp":"2026-10-08T03:01:12Z","commit_sha":"39c64d28c5500301218c2d2c3643f3b65582b7e2","commit_message":"C++ conversion (#664) part 11a: the 3D actors' base classes (#714)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-08T02:12:28Z","commit_sha":"d75b7aa65734d3512ea8caf081d9bea56c5e928b","commit_message":"C++ conversion (#664) part 10c-2: the title screen (#713)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-08T01:46:08Z","commit_sha":"3ca5e5c109603dabdd9ff6f522d0bee73862834e","commit_message":"C++ conversion (#664) part 10d: the pause menu and the power dialog (#712)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-08T01:04:56Z","commit_sha":"16e5ffab942d9ba37da53ea134ac906e0faa0f6b","commit_message":"C++ conversion (#664) part 10c: the starfield and the credits (#711)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-08T00:49:37Z","commit_sha":"caf9674e2c75bb30e9177f58c61e3c7f86684f1c","commit_message":"C++ conversion (#664) part 9b: the enemy spawners (#710)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-08T00:11:09Z","commit_sha":"4a82246f5e9f0f362e696109db93146f404bcb2b","commit_message":"C++ conversion (#664) part 10b: the frontend (logo actor, language select) (#709)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T23:52:21Z","commit_sha":"f17b1d4f422d0dc187b948c1590b51cdf4ce2204","commit_message":"C++ conversion (#664) part 9: the spawners (#708)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T23:39:29Z","commit_sha":"25b0dc7f1c45a7cfe632b885b844fead14854d3c","commit_message":"C++ conversion (#664) part 10: the level select (#707)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T22:06:31Z","commit_sha":"16cc32c8ee4932ac65ae5f88fc131a4b8f03fdea","commit_message":"C++ conversion (#664) part 8: the player (#706)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T20:52:50Z","commit_sha":"3543b0a7469f1a5b818f410e1abc23e0a10849fb","commit_message":"C++ conversion (#664) part 7b': controllers take MovingSprite, SpriteObj removed (#705)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T20:14:37Z","commit_sha":"60fdd1e2e8ad28b03af26b2174a020744cfbb770","commit_message":"C++ conversion (#664) part 7i: the Neo Cortex fight, Tiny's and the one-shot controllers' constructors (#703)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T20:02:07Z","commit_sha":"74c3463941aaf6175ae3bc9c49391607ebf58933","commit_message":"CI: time out and retry stalled apt downloads (#704)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T18:30:47Z","commit_sha":"0262edf1e8578a7c4c1db99fd88971f31d4c7068","commit_message":"C++ conversion (#664) part 7d: the platforms (#700)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T18:20:59Z","commit_sha":"9c7b768023409845a855896570c071036da6cfe2","commit_message":"CI: install packages without recommends (skip the 463 MB newlib libstdc++) (#702)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T16:41:12Z","commit_sha":"39ca8a173addc4f7b643c59e389df47292adbdc2","commit_message":"C++ conversion (#664) part 7g: the crate's hits, breaks and explosions (#701)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T16:35:12Z","commit_sha":"50a5ca44bc94a6b07fc990f087e1bccfd0ab010f","commit_message":"C++ conversion (#664) part 7f: the crate list (#699)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T14:23:25Z","commit_sha":"1deb8171a2b94ea8dd0fdbacd554f6ac767111bc","commit_message":"C++ conversion (#664) part 7h: the pickups (#698)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T14:04:03Z","commit_sha":"57f4892f4231560a3eb7be29cc296696da927594","commit_message":"C++ conversion (#664) part 7b: MovingSprite and GroundSprite (#697)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T13:49:14Z","commit_sha":"905f8b136d89ccc3efb6af6e2b6b89ce5ef64aa8","commit_message":"C++ conversion (#664) part 7e: the crate (#696)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T13:33:36Z","commit_sha":"c423f9fd22ce2130b357bfa2c55d4e91dc8bdcbb","commit_message":"C++ conversion (#664) part 7c: the part list, the collision queue, the palette cycles (#695)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T13:03:22Z","commit_sha":"5b2d4c9b57c9f62305135b356f2502291aeb195e","commit_message":"C++ conversion (#664) part 7a: the entity and sprite object base classes (#694)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T12:16:59Z","commit_sha":"4f32db3bf762c190c74a621fb7b8aad77b76ed00","commit_message":"C++ conversion (#664) part 5b: the rest of the action controller (#693)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T12:00:03Z","commit_sha":"8bffec97fe7cc21da5edee08f80c7f43adf7e7db","commit_message":"C++ conversion (#664) part 6b: Dingodile and the Cortex fight's controllers (#692)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T11:41:45Z","commit_sha":"ede46af54096cd01c860b845b11ae4abc2a12661","commit_message":"C++ conversion (#664) part 6: the boss controllers (Mega Mix's update, Tiny) (#691)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T11:25:54Z","commit_sha":"1a7c1c33cfe8608b133de9dfd340894e9b9832c8","commit_message":"C++ conversion (#664) part 5a: the action controller's core (#690)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T11:09:29Z","commit_sha":"0db53e90633dfa1a88755cb84c58a337c5e9a0c8","commit_message":"C++ conversion (#664) part 4: the swim controller (#689)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T10:50:39Z","commit_sha":"782fa16fb375dffcb85673f4e3ed04a4e88840bc","commit_message":"C++ conversion (#664) part 2: the enemy controllers (#688)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T10:35:48Z","commit_sha":"cb8f89df46c5936fd6c291bdee87915275454c78","commit_message":"C++ conversion (#664) part 3: the rest of Ctrl, and InputCtrl (#687)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T10:05:50Z","commit_sha":"256b4d726f6b40034fcdd427b92ccf75c7ab7a78","commit_message":"C++ conversion (#664) part 1: Ctrl base and small controllers (#686)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T09:28:04Z","commit_sha":"b2da2ceadbc6a1b71034e3df3e303a735b21fc6b","commit_message":"C++ investigation (#664): survey, agbccpp experiment, docs/cplusplus.md (#685)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T07:16:48Z","commit_sha":"23bb2db3e970f8b3ad51cb416c77f7406939e3ef","commit_message":"Common operation helpers (#667) part 3: abs/Q8_DIV/Q12_MUL helpers, shared macros (#684)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T04:18:54Z","commit_sha":"cdec8f165e542b7c5762b8737d5da62bafcc4510","commit_message":"Common operation helpers (#667) part 2h: player, pickups, enemies (#683)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T04:14:55Z","commit_sha":"097878487f150d82f41ecf411c9582ad3f0a7875","commit_message":"Common operation helpers (#667) part 2f: frontend, menus, text (#682)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T04:10:57Z","commit_sha":"2a85269bff2324a429525660f1d7bdeebb2e008f","commit_message":"Common operation helpers (#667) part 2g: actor, gfx, iwram (#681)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T04:06:58Z","commit_sha":"3c207778078063e536378a63d0782423b0613ae0","commit_message":"Common operation helpers (#667) part 2i: util, link, audio, save, system, headers (#680)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T04:02:59Z","commit_sha":"f61345e95d064d888c81f9bea597d887e92d9bea","commit_message":"Common operation helpers (#667) part 2c: vehicle (#679)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T03:59:01Z","commit_sha":"af7e52707d5269ac8d502ac2a3225bdcf42ac524","commit_message":"Common operation helpers (#667) part 2a: crates (#678)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T03:55:01Z","commit_sha":"93848eb5711f6465116162d972e2a4536acc24b5","commit_message":"Common operation helpers (#667) part 2d: bosses (#677)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T03:50:59Z","commit_sha":"94d16f282840bebc6721594c04b69ca020c4ae30","commit_message":"Common operation helpers (#667) part 2e: level, cutscene (#676)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T03:46:57Z","commit_sha":"90c124d590788a7cb0c8204e886b58b872e9b42f","commit_message":"Common operation helpers (#667) part 2b: objects (#675)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T03:30:24Z","commit_sha":"14e68625d378a4bb2129d6161b8a284cbcb30fd2","commit_message":"Common operation helpers (#667) part 1: survey, math_util.h, entity bits (#674)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T02:58:50Z","commit_sha":"1609f33d5b05e211318bf5f7911c536f84f45a1c","commit_message":"Magic numbers (#655) part 5: remaining SFX IDs (named and SFX_UNKNOWN_ placeholders) (#673)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T02:54:42Z","commit_sha":"089d94db7c80d24430806a275a2c2b5395ff5b63","commit_message":"Use the shared CHUNK_TOKEN_* names in the cutscene decoder (#655) (#672)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T02:45:10Z","commit_sha":"c8d2dfc78d97e6e7f36aebc8e9672aa6d92e9162","commit_message":"Magic numbers (#655) part 4c: flag tests in player, level, system, save, link (#671)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T02:44:18Z","commit_sha":"8d41c49c40bd84420802d6df6799d615573525ea","commit_message":"Magic numbers (#655) part 4a: crate, part and CpuSet flag masks (#670)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T02:42:06Z","commit_sha":"3fee67d047b950dd9c20293e5a8bceddf35505ca","commit_message":"Magic numbers (#655) part 4d: flag tests in frontend, menus, gfx, cutscene (#669)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T02:40:40Z","commit_sha":"cdb1ebb3c419637ad8f42a015b9147618fa84ee2","commit_message":"Magic numbers (#655) part 4b: flag tests in actor, vehicle, bosses, enemies (#668)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T02:36:10Z","commit_sha":"fce633f3ed98432797ba5f7ed469a1615948fb55","commit_message":"Magic numbers (#655) part 3: generate song and SFX constants from the sound data (#666)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T02:03:44Z","commit_sha":"41bf36303dac84e9dbef47f5cb54ee10f5855cd1","commit_message":"Remove asm(\".align 2, 0\") padding (#663) (#665)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T01:48:45Z","commit_sha":"d392f367561c2498435f14d32fc7b9380c7f143d","commit_message":"Magic numbers (#655) part 2d: levels, rooms, bosses, actor categories (#661)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T01:36:13Z","commit_sha":"b94f5907e7db397469f3fa0d69efb88b4bf917cd","commit_message":"Magic numbers (#655) part 2a: entity types, crate and enemy kinds (#660)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T01:27:59Z","commit_sha":"6e59a7f514dc477cd3565471b04c8a3e87ccf838","commit_message":"Magic numbers (#655) part 2c: event IDs (#659)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T01:00:59Z","commit_sha":"a569553b6ffe896d4844361f5fb3e3723704cb80","commit_message":"Magic numbers (#655) part 2b: player action states and attack kinds (#658)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T00:40:41Z","commit_sha":"9ed59bb2489517d92e25062a2f8f975642b76ddd","commit_message":"Magic numbers (#655) part 1: scanner, level flags, SFX and song IDs (#657)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-07T00:03:34Z","commit_sha":"4710fd5c06dd31c31cb0133d42c97d4a18019bbf","commit_message":"Naming round 7: GAX, data tables and audio leftovers (0 functions, 0 globals, 6 data, 24 fields/types) (#654)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-06T23:59:32Z","commit_sha":"6a93a7108adfab3901aee09feaad057d572ac21c","commit_message":"Naming round 7: player, crates, actor, vehicle and bosses leftovers (6 functions, 0 globals, 1 data, 1 field) (#653)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-06T23:42:34Z","commit_sha":"dcff02e7ff28795d0fb2f2615356e9b47e5005ae","commit_message":"Naming round 7: level, menus and gfx leftovers (8 functions, 0 globals, 0 data, 10 fields) (#652)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-06T22:43:25Z","commit_sha":"965426c3e30c6940f0927b810883b14eb0e86d97","commit_message":"IWRAM ARM functions (#553): patched agbcc_arm for the last two (#651)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":243378,"matched_code":243378,"matched_code_percent":100,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2059,"matched_functions_percent":100,"complete_code":241970,"complete_code_percent":99.42148,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":615}},{"timestamp":"2026-10-06T20:53:56Z","commit_sha":"78498571e143c2f4bb0d6c91bc3be27cb3e71106","commit_message":"IWRAM ARM functions (#553): decomp-permuter pass, closer itoa_arm draft (#650)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.979355,"total_code":243378,"matched_code":242990,"matched_code_percent":99.840576,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2057,"matched_functions_percent":99.90287,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T16:22:39Z","commit_sha":"2fc5c337f97695f5af001ca26361e6e423ec8b50","commit_message":"IWRAM ARM functions (#553): fifth pass, both blockers confirmed in agbcc_arm source (#649)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.97928,"total_code":243378,"matched_code":242990,"matched_code_percent":99.840576,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2057,"matched_functions_percent":99.90287,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T14:46:41Z","commit_sha":"98344343addde3e74bf1d64e0c664a7ebbcabf10","commit_message":"IWRAM ARM functions (#553): HeapSortActorsByKey matched (#648)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.95582,"total_code":243378,"matched_code":242990,"matched_code_percent":99.840576,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2057,"matched_functions_percent":99.90287,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T13:56:55Z","commit_sha":"d7c94615135332b99e4e0b9b5ae772f2d5025235","commit_message":"IWRAM ARM functions (#553): third pass, FSF gcc ruled out (docs) (#647)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T13:21:32Z","commit_sha":"1e7dbad0a04701041cdbf2229a40fca3754d80e0","commit_message":"Unify the controller base structs (#646)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T13:09:49Z","commit_sha":"23076ec7e1a2c2088bebd9f9678d3c726866ea9e","commit_message":"Raw-offset cleanup (#550) part 3d: level and the small subsystems (#645)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T13:08:00Z","commit_sha":"a6ec35c53d4e4f53fcf9aaf0748bfcb64ceff02b","commit_message":"Raw-offset cleanup (#550) part 3c: actor + vehicle (#644)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":203988,"complete_code_percent":83.8153,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":542}},{"timestamp":"2026-10-06T13:06:08Z","commit_sha":"29045ae0ba09ed00d77a926dca4220dc039c3bb2","commit_message":"Raw-offset cleanup (#550) part 3b: player + enemies (#643)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":187966,"complete_code_percent":77.232124,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":499}},{"timestamp":"2026-10-06T12:57:49Z","commit_sha":"1e914aeacab5371769f4fd5cc73aa7bd84b9b429","commit_message":"Raw-offset cleanup (#550) part 3a: objects B (#642)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":171950,"complete_code_percent":70.65141,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":470}},{"timestamp":"2026-10-06T12:34:13Z","commit_sha":"90e50f86bf637ed2b20d1547fcf03ae61001ffb2","commit_message":"Raw-offset cleanup (#550) part 2a: objects A (sprite files) (#641)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":169780,"complete_code_percent":69.759796,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":463}},{"timestamp":"2026-10-06T12:32:27Z","commit_sha":"f9041ba749d565aa48473cb65e05b94ddb7ef69f","commit_message":"Raw-offset cleanup (#550) part 2c: lib/gax + audio (#640)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":164898,"complete_code_percent":67.75386,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":455}},{"timestamp":"2026-10-06T12:30:39Z","commit_sha":"faf263b03e616badb910800a3573ad98da65585f","commit_message":"Raw-offset cleanup (#550) part 2b: bosses (#639)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":162260,"complete_code_percent":66.66995,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":443}},{"timestamp":"2026-10-06T12:28:49Z","commit_sha":"e373a7eb9ffc2544e36fe4f725b9dc478c343d21","commit_message":"Raw-offset cleanup (#550) part 2d: crates + pickups (#638)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":154946,"complete_code_percent":63.664753,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":408}},{"timestamp":"2026-10-06T12:07:48Z","commit_sha":"74ab9e4ceae910bdcf6db421ff05ca7b5ee2eb59","commit_message":"Raw-offset cleanup (#550) part 1: scanner, naming leftovers (#637)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":137278,"complete_code_percent":56.405266,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":386}},{"timestamp":"2026-10-06T11:40:42Z","commit_sha":"9fd083560f40794bb81abef90da1881f32ae1e09","commit_message":"Naming round 6: GAX2, UI and system (17 functions, 0 globals, 8 data, 112 fields) (#636)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T11:35:03Z","commit_sha":"eb43e1e75e490f52032827bca2b9044ec04a30af","commit_message":"Naming round 6: player + crates + actor + pickups (38 functions, 6 globals, 2 data, 16 fields) (#635)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T11:24:39Z","commit_sha":"42bcfb63bb6d0faee8de02ec08561eeb07290532","commit_message":"Naming round 6: level + objects (29 functions, 3 globals, 0 data, 12 fields) (#634)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T11:18:08Z","commit_sha":"bf4395febc037f08fe22a230c757b2b1c9e9fd39","commit_message":"Naming round 6: bosses, vehicle and enemies (18 functions, 5 globals, 1 data, 29 fields) (#633)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T10:00:01Z","commit_sha":"8af6cf8fc7fe32c0b8948341b337f8ba53786bf8","commit_message":"Code formatting (#572) part 6: include and lib (#632)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T09:40:46Z","commit_sha":"86b9c876a72dfc8f151210ae192df55c736376a8","commit_message":"Code formatting (#572) part 5: level, bosses (#631)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T09:28:48Z","commit_sha":"c8b12492da3e98f81bcc12c11d9d870ebd0f8e53","commit_message":"Code formatting (#572) part 4: crates, player (#630)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T09:17:18Z","commit_sha":"3099c45daacf601f833693bef6e77f0062dabeb8","commit_message":"Code formatting (#572) part 3: system, vehicle, menus, frontend, objects (#629)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T09:06:07Z","commit_sha":"fa97deb915dc0f63993907d39b7e8e9fcd241fbd","commit_message":"Code formatting (#572) part 2: link, audio, pickups, enemies, iwram, save, util, gfx, cutscene, hud, actor (#628)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T08:56:11Z","commit_sha":"6847e69f2bf35326db1f4ab46af50284ed26dbb8","commit_message":"Code formatting (#572) part 1: clang-format config and src/text (#627)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T08:37:31Z","commit_sha":"cf6a2a5ee764a7b5607e08ad72e3c1595a56a7ca","commit_message":"Matching workarounds (#576) part 4: remaining idioms and wrap-up (#626)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T08:24:12Z","commit_sha":"9ba9027a1136e1e88de9e5eccb2cc64e88693384","commit_message":"Matching workarounds (#576) part 3: register pins (#625)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T08:10:13Z","commit_sha":"951c884cb778fc37b2a00cdc1b7545986832d470","commit_message":"Matching workarounds (#576) part 2: barrier/use/keep/hold macros (#624)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T07:59:02Z","commit_sha":"eacef1260d09a4728f1012c6f70aa377b9537ae5","commit_message":"Matching workarounds (#576) part 1: match.h, technique reference, MATCH_CONST (#623)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T07:36:38Z","commit_sha":"a5f119861372a48cdf434e568663fdd396ad8471","commit_message":"Repo hygiene (#578) part 2: archive matching logs, parallel build fix (#622)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T07:19:45Z","commit_sha":"0770dee12f09da70939aa402ea8ff32a3e6f1c21","commit_message":"Compiler warnings (#577) part 3: -Wstrict-prototypes (#621)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T07:05:47Z","commit_sha":"7d886d5bc6b1416ccc3c52988a63e5248bc201f2","commit_message":"Compiler warnings (#577) part 2: -Wall set and -Werror (#620)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T06:46:12Z","commit_sha":"0686b978e0db47487b5a6095d8010e2338ceaeef","commit_message":"Compiler warnings (#577) part 1: fix the existing warnings (#619)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T06:44:20Z","commit_sha":"95beec10cf71e9ad6a49a250c39cde3c822558a8","commit_message":"Repo hygiene (#578) part 1: header deps, stale tools, docs refresh (#618)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T03:06:05Z","commit_sha":"805d10a0f54bd7fc7d9c0f2621bab81d71ab4cd4","commit_message":"Headers (#574) batch 9f: action/crate typing and wrap-up (#617)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T02:37:22Z","commit_sha":"6f9958d088def3949fd0bb63155c4e96b3b7e960","commit_message":"Headers (#574) batch 9e: struct views and duplicate types (#616)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T02:04:05Z","commit_sha":"8a15e3aa55f3f35b767c48fca6b1fd3eb7850260","commit_message":"Headers (#574) batch 9d: the last externs (#615)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T01:46:07Z","commit_sha":"26793a9f7455a3bad011186a7a95388fd624a666","commit_message":"Headers (#574) batch 9c2: player/crate self typing (#614)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T01:26:59Z","commit_sha":"2dae7c1c6df538eab22878a955d7bff8cdb05d9e","commit_message":"Headers (#574) batch 9c: gPlayer (#613)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T00:50:00Z","commit_sha":"96bd5d849db5510b55cb45d1e28f223605b5a0ba","commit_message":"Headers (#574) batch 9b: level globals (#612)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T00:23:39Z","commit_sha":"e5af6e24f1c6deb137829da7de1ca7f7312ca9ff","commit_message":"Headers (#574) batch 9a: globals.h, input/display/gfx/audio/HUD singletons (#611)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-06T00:00:32Z","commit_sha":"0f42fc7475bfdfa018e8ef32cf4b080b471622a2","commit_message":"Headers (#574) batch 8b: level (#610)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T23:53:18Z","commit_sha":"69fd53a8d2dd9cbccc53abde54fd370c6317bed3","commit_message":"Headers (#574) batch 8a: gfx + objects + iwram (#609)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T22:48:09Z","commit_sha":"befb74387d8a56e5737d6c6dcefd212095c82751","commit_message":"Headers (#574) batch 7: actor + bosses + vehicle (#608)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T22:03:39Z","commit_sha":"e12052fbd8a39ea8ec31a3279dfe0eff6c054257","commit_message":"Headers (#574) batch 6: menus + crates + player (#607)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T21:19:41Z","commit_sha":"8c4d99265e839cbc5458ea57ed638d9b3004bee6","commit_message":"Headers (#574) batch 5: system + audio (#606)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T19:30:44Z","commit_sha":"0f1f8ec0569dd4ce405df613c969f0523bc3c08d","commit_message":"Headers (#574) batch 3: save + frontend (#604)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T19:02:11Z","commit_sha":"cef4b1827b431e5419d868b70a143a2b33decf90","commit_message":"Headers (#574) batch 2: cutscene + pickups + enemies (#603)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T17:55:28Z","commit_sha":"3bf365af18601c24efe08ae127597b11625cb372","commit_message":"Headers (#574) batch 1: link + hud (#602)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T17:36:49Z","commit_sha":"957beaf7d51dbe90a53f48489162d66fd24de09c","commit_message":"Headers (#574) phase 0: survey, tooling and pilot (#601)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T16:33:39Z","commit_sha":"fc3bdec100e3fc79061d8b08b20d2dda68a27df0","commit_message":"File layout (#575) batch 5/5: actor, vehicle (#600)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T16:14:07Z","commit_sha":"f6bc4429c6391f99ad11ad939c16388822812f29","commit_message":"File layout (#575) batch 4/5: level, bosses (#599)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T15:55:47Z","commit_sha":"38961446a92dc6f72c250f6df55904948d65f616","commit_message":"File layout (#575) batch 3/5: objects, player, enemies, crates, pickups (#598)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T15:33:55Z","commit_sha":"8f8bc88c138f19a7a15095378dac991f07c6c2d1","commit_message":"File layout (#575) batch 2/5: save, menus, frontend, hud, cutscene (#597)","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T15:12:57Z","commit_sha":"e40c03ef39787e306ea573c1ed8460b15f079bf4","commit_message":"File layout (#575) batch 1/5: system, util, text, gfx, audio, link (#596)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T15:01:52Z","commit_sha":"1b4e8c94b364e8f35447c9be8fdb11c465feeec8","commit_message":"Plan: source file layout (#575) (#594)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T14:16:22Z","commit_sha":"6c747104c9b6d7e54541ff9032735f7b65f42331","commit_message":"Split third-party and SDK code into lib/ (#573) (#595)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":616,"complete_units":616}},{"timestamp":"2026-10-05T12:36:56Z","commit_sha":"6128f207c26b070e564b00a4a52e522c042fef2f","commit_message":"Naming: struct fields — crate, sprite object, action and enemy controllers (80 fields) (#593)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T12:27:58Z","commit_sha":"9f4cfa0a229f6b2b09126b18f893ee40df171c43","commit_message":"Naming: remaining RAM globals, data and vtable-slot stubs (6 functions, 14 globals, 3 data, 0 fields) (#592)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T12:21:17Z","commit_sha":"30ed424423a284e599a52d7486e1f6201a25b5f3","commit_message":"Naming: boss controllers, Mega-Mix, boss tables and entity types (29 functions, 0 globals, 23 data, 0 fields) (#591)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T11:36:27Z","commit_sha":"25efc5174450e7fa0165c4cef3cdef30ea3b8c2b","commit_message":"Naming: actor-stage animation arrays, category palettes, level tile sets and stacks (0 functions, 2 globals, 92 data, 0 fields) (#590)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T11:30:55Z","commit_sha":"2254f12fa916c5edb5f3118d65d9c29d3b357b22","commit_message":"Naming: actor stages, polar/jetpack players, yeti, bosses and spawners (105 functions, 57 globals, 7 data, 0 fields) (#589)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T11:22:48Z","commit_sha":"b90832771378c4c6aec30fcb7672b51b3179e1a0","commit_message":"Naming: underwater and hover controllers, boss helpers and stage objects (143 functions, 0 globals, 12 data, 32 fields) (#588)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T11:11:24Z","commit_sha":"b6bf21f23cde33691fc504552527a69d4563df8b","commit_message":"Naming: entity/sprite base classes, controllers, enemy helpers and crate internals (131 functions, 0 globals, 1 data, 0 fields) (#587)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T09:40:46Z","commit_sha":"658e8b2372a086abf588bd22863d49355a4bc9c0","commit_message":"Naming: object lists, palette cycle, airship/hovercraft globals and stubs (6 functions, 40 globals, 8 data, 0 fields) (#586)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T09:34:17Z","commit_sha":"1522f5a782fc0b83d1ae52c5b09f5a1eb30191f7","commit_message":"Naming: action-controller states and stage state dispatchers (55 functions, 0 globals, 4 data, 0 fields) (#585)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T09:27:04Z","commit_sha":"0ddc4a4de17a359886cf0ab7b452d29bc8d778bc","commit_message":"Naming: ROM data tables (0 functions, 0 globals, 181 data, 0 fields) (#584)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T09:02:40Z","commit_sha":"66bd09beddf308a4555b77ec898ee4740beacc93","commit_message":"Naming: struct fields — actor_self, gobj, crate, action/player controllers, sprite views and sprite-bank palettes (60 fields) (#583)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T08:59:35Z","commit_sha":"8e85002df60f4d489dfd9edddda373a98c9e986c","commit_message":"Naming: struct fields — level select, level table, level state, enemy ctrl and 8 UI struct types (29 fields) (#582)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T08:23:02Z","commit_sha":"1ed815c135f40b1b760dee40a8d0276e2629dd9d","commit_message":"Naming: system, save/link, HUD and level-state leftovers (115 functions, 7 globals, 8 data, 12 fields) (#581)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T08:14:11Z","commit_sha":"ee036a6b48fa5e863745bf28b1f1cbaab6e04a38","commit_message":"Naming: low actor parts, sprite classes and controllers (180 functions, 0 globals, 8 data, 0 fields) (#580)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T08:04:12Z","commit_sha":"3d8fd4f3ad388be74dc1735ea5b82f2b7ad86f8d","commit_message":"Naming: upper actor parts, stage players, hovercraft parts and level select (168 functions, 9 globals, 19 data, 0 fields) (#579)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-05T00:41:48Z","commit_sha":"b9e456150bba74baa7b85323d2fb5fd177a23cc1","commit_message":"Naming: actor-category stages and bosses (165 functions, 17 globals, 42 data, 0 fields) (#571)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-04T23:31:00Z","commit_sha":"91130eb37f174d7137a7f106e673ed72222e417d","commit_message":"Naming: side-scroller enemies and platforms (56 functions, 0 globals, 17 data, 2 fields) (#568)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-04T23:25:03Z","commit_sha":"4636c83293278abb52c02f977de22cecf3ecdf0d","commit_message":"Naming: crates and pickups (85 functions, 0 globals, 7 data, 0 fields) (#566)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-04T23:09:25Z","commit_sha":"fe0bdd34d821892d75b1143954d1c30a6dadcf84","commit_message":"Naming: graphics and rendering (117 functions, 44 globals, 25 data, 16 fields) (#567)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-04T22:56:14Z","commit_sha":"21f5860444f6d0e186b6dcfd10e4a51c2caa9925","commit_message":"Naming: player and core game loop (94 functions, 9 globals, 5 data, 27 fields) (#565)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-04T22:32:19Z","commit_sha":"4fa28a993bb3c051f3d08356701968c5dd8cc247","commit_message":"Naming: actor system core (13 functions, 8 globals, 70 data, 8 fields) (#564)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-04T22:23:36Z","commit_sha":"3ebe79b00fa833113dd49c4d9eb46a9ac0721186","commit_message":"Naming: HUD, menus and UI (182 functions, 8 globals, 23 data, 36 fields) (#563)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-04T22:12:35Z","commit_sha":"4831ac0a1769c1414ff48ee1a7b977596d197e9a","commit_message":"Naming: system layer (73 functions, 28 globals, 4 data, 2 fields) (#562)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-04T22:01:39Z","commit_sha":"60b1e1e69f621f353e39ca6f422c5544aa62d13a","commit_message":"Naming: level room data (0 functions, 0 globals, 615 data, 0 fields) (#561)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-04T21:59:38Z","commit_sha":"0211c750a11b557b92094a1b555694cf85b94329","commit_message":"Naming: levels, rooms and cutscenes (105 functions, 6 globals, 43 data, 0 fields) (#560)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-04T21:48:46Z","commit_sha":"17d152b694c669639f46954aca71dbef8fad3254","commit_message":"Naming: GAX2 sound engine (48 functions, 5 globals, 22 data, 24 fields) (#559)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-04T21:06:32Z","commit_sha":"5d09645a2e9a10b045f0e7ae2a5a2355858174fa","commit_message":"Cleanup: named struct fields in actor parts 7 and 27-79 (10 files) (#549)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":243378,"complete_code_percent":100,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":615}},{"timestamp":"2026-10-04T21:05:32Z","commit_sha":"482e7618693732328c76e7e10776d9d1ef5288c9","commit_message":"Cleanup: named struct fields in actor parts 10-19 and 107-129 (12 files) (#548)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":238082,"complete_code_percent":97.82396,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":604}},{"timestamp":"2026-10-04T21:04:33Z","commit_sha":"8a906c6edd632c6159885b31b2ada90a03e84078","commit_message":"Cleanup: named struct fields in graphics core and HUD (10 files) (#547)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":230006,"complete_code_percent":94.50567,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":587}},{"timestamp":"2026-10-04T21:03:36Z","commit_sha":"b93c6431e47a18a3feeaf6a1c8cd62d465b86f60","commit_message":"Cleanup: named struct fields in system and audio (10 files) (#546)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":220352,"complete_code_percent":90.538994,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":574}},{"timestamp":"2026-10-04T20:44:38Z","commit_sha":"4d9c46f34bed69a4c0183984ef8e3ccef98759ce","commit_message":"Cleanup: named struct fields in actor_self actor parts (14 files) (#545)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":217674,"complete_code_percent":89.43865,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":564}},{"timestamp":"2026-10-04T20:42:06Z","commit_sha":"a1a7b8e5786d2b3ce75f532ec81a308d63dc13c1","commit_message":"Cleanup: named struct fields in gobj/part actor code (15 files) (#543)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":213990,"complete_code_percent":87.92496,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":549}},{"timestamp":"2026-10-04T20:41:10Z","commit_sha":"37998abca7806a4d28d8d00233a38779b4552a86","commit_message":"Cleanup: named struct fields in level state, GAX and system code (13 files) (#542)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":203914,"complete_code_percent":83.7849,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":533}},{"timestamp":"2026-09-30T10:42:35Z","commit_sha":"1f417177c20de6836370ecaa0a9f266923e56bbe","commit_message":"Add wikidata to .recomp.json","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":195226,"complete_code_percent":80.21514,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":510}},{"timestamp":"2026-09-30T10:33:31Z","commit_sha":"08bd27b0b1ae97731bc66e4f35161ea88703e3c1","commit_message":"Update .recomp.json info","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":195226,"complete_code_percent":80.21514,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":510}},{"timestamp":"2026-09-30T10:29:19Z","commit_sha":"27401cfe7053a18ae481e7ba969cdeddfaa80219","commit_message":"add .recomp.json","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":195226,"complete_code_percent":80.21514,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":510}},{"timestamp":"2026-09-29T18:22:29Z","commit_sha":"3b9c16f898affc1cf207c566a77358b55eae93ff","commit_message":"Cleanup: named struct fields in system, loading and audio code (13 files) (#541)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":195226,"complete_code_percent":80.21514,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":510}},{"timestamp":"2026-09-29T18:21:32Z","commit_sha":"bf1b12c5b8acd9f5531d31f85a460a20931d3b1b","commit_message":"Cleanup: named struct fields in early actor/part code (14 files) (#540)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":182590,"complete_code_percent":75.02322,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":479}},{"timestamp":"2026-09-29T18:20:35Z","commit_sha":"b532e77598953b22e37d8a6e6ea176738a9735cf","commit_message":"Cleanup: named struct fields in the actor_self actor zone (15 files) (#539)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":177584,"complete_code_percent":72.96633,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":464}},{"timestamp":"2026-09-29T17:27:02Z","commit_sha":"d31f7fac2293153a3700784ff44d0b55c52930be","commit_message":"Match 1 parked IWRAM ARM function (code 99.63% → 99.66%) (#538)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.92104,"total_code":243378,"matched_code":242542,"matched_code_percent":99.6565,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2056,"matched_functions_percent":99.854294,"complete_code":159536,"complete_code_percent":65.550705,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":431}},{"timestamp":"2026-09-29T17:26:04Z","commit_sha":"a847566ce36550f3851870ec82612f2e0ab249fe","commit_message":"Data: terrain types, UI text, HUD fonts, credits and motion sequences as C (+0.25%) (#537)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.91307,"total_code":243378,"matched_code":242482,"matched_code_percent":99.63184,"total_data":8036176,"matched_data":8036176,"matched_data_percent":100,"total_functions":2059,"matched_functions":2055,"matched_functions_percent":99.80573,"complete_code":159536,"complete_code_percent":65.550705,"complete_data":8036176,"complete_data_percent":100,"total_units":615,"complete_units":431}},{"timestamp":"2026-09-29T17:19:53Z","commit_sha":"b23a0fe009ac477d1eaebe42928596fb771b8931","commit_message":"Data: boss pictures and the 0x0816xxxx gameplay/menu tables as C (+0.22%) (#536)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.91307,"total_code":243378,"matched_code":242482,"matched_code_percent":99.63184,"total_data":8036176,"matched_data":8015764,"matched_data_percent":99.746,"total_functions":2059,"matched_functions":2055,"matched_functions_percent":99.80573,"complete_code":159536,"complete_code_percent":65.550705,"complete_data":8015764,"complete_data_percent":99.746,"total_units":613,"complete_units":424}},{"timestamp":"2026-09-29T17:13:19Z","commit_sha":"dd4dee9eefc3f4382c531ff91bbabf3783db60db","commit_message":"Data: category families, palette cycle and small actor tables as C (+0.34%) (#534)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.91307,"total_code":243378,"matched_code":242482,"matched_code_percent":99.63184,"total_data":8036176,"matched_data":7998352,"matched_data_percent":99.52933,"total_functions":2059,"matched_functions":2055,"matched_functions_percent":99.80573,"complete_code":159536,"complete_code_percent":65.550705,"complete_data":7998352,"complete_data_percent":99.52933,"total_units":608,"complete_units":410}},{"timestamp":"2026-09-29T17:12:22Z","commit_sha":"8b6f4715c93dd3ae8309ea1c2ee39969ec01b82b","commit_message":"Data: GAX2, libgcc and EEPROM library tables as C (+0.21%) (#533)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.91307,"total_code":243378,"matched_code":242482,"matched_code_percent":99.63184,"total_data":8036176,"matched_data":7971096,"matched_data_percent":99.19016,"total_functions":2059,"matched_functions":2055,"matched_functions_percent":99.80573,"complete_code":159536,"complete_code_percent":65.550705,"complete_data":7971096,"complete_data_percent":99.19016,"total_units":607,"complete_units":400}},{"timestamp":"2026-09-29T17:06:09Z","commit_sha":"2ce8000cd895689b546ecbdfa8ea197b57133348","commit_message":"Data: LZ77 alignment pads built from gbagfx's padding (+0.002%) (#532)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.91307,"total_code":243378,"matched_code":242482,"matched_code_percent":99.63184,"total_data":8036176,"matched_data":7954599,"matched_data_percent":98.98488,"total_functions":2059,"matched_functions":2055,"matched_functions_percent":99.80573,"complete_code":159536,"complete_code_percent":65.550705,"complete_data":7954599,"complete_data_percent":98.98488,"total_units":606,"complete_units":397}},{"timestamp":"2026-09-29T16:41:46Z","commit_sha":"baa5619421e188b40b43e6e0029e95d693ed80ac","commit_message":"Decompile the IWRAM image: IntrMain (asm), ARM C routines, IWRAM data (#535)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.91307,"total_code":243378,"matched_code":242482,"matched_code_percent":99.63184,"total_data":8036176,"matched_data":7954460,"matched_data_percent":98.983154,"total_functions":2059,"matched_functions":2055,"matched_functions_percent":99.80573,"complete_code":159536,"complete_code_percent":65.550705,"complete_data":7954460,"complete_data_percent":98.983154,"total_units":720,"complete_units":441}},{"timestamp":"2026-09-29T15:51:38Z","commit_sha":"f5b3a9e99ce349e26a20b2441db53c1ba12edc61","commit_message":"Data: symbolic song table and the GAX2 default song (+0.001%) (#531)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":241594,"matched_code":241594,"matched_code_percent":100,"total_data":8038172,"matched_data":7953920,"matched_data_percent":98.95185,"total_functions":2049,"matched_functions":2049,"matched_functions_percent":100,"complete_code":157752,"complete_code_percent":65.296326,"complete_data":7953920,"complete_data_percent":98.95185,"total_units":718,"complete_units":438}},{"timestamp":"2026-09-29T15:50:25Z","commit_sha":"a40b620e88f051ac8dfe3d4f82cc96f2ad5a3409","commit_message":"Data: cutscenes - slides, six-language text and pictures (+0.42%) (#530)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":241594,"matched_code":241594,"matched_code_percent":100,"total_data":8038172,"matched_data":7953824,"matched_data_percent":98.95065,"total_functions":2049,"matched_functions":2049,"matched_functions_percent":100,"complete_code":157752,"complete_code_percent":65.296326,"complete_data":7953824,"complete_data_percent":98.95065,"total_units":717,"complete_units":437}},{"timestamp":"2026-09-29T15:43:33Z","commit_sha":"a92c5121ab3ea6b0b15bde83261c819adb51b12f","commit_message":"Data: level table and room records as typed C (+0.03%) (#529)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":241594,"matched_code":241594,"matched_code_percent":100,"total_data":8038172,"matched_data":7920023,"matched_data_percent":98.53015,"total_functions":2049,"matched_functions":2049,"matched_functions_percent":100,"complete_code":157752,"complete_code_percent":65.296326,"complete_data":7920023,"complete_data_percent":98.53015,"total_units":761,"complete_units":458}},{"timestamp":"2026-09-29T13:51:26Z","commit_sha":"4282d2261cf9252ba51ae8827febda498056ab23","commit_message":"Data: decode rotation-frame strips (+3.79%) (#528)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":241594,"matched_code":241594,"matched_code_percent":100,"total_data":8038172,"matched_data":7917539,"matched_data_percent":98.49925,"total_functions":2049,"matched_functions":2049,"matched_functions_percent":100,"complete_code":157752,"complete_code_percent":65.296326,"complete_data":7917539,"complete_data_percent":98.49925,"total_units":760,"complete_units":457}},{"timestamp":"2026-09-29T13:33:00Z","commit_sha":"e2ed54e6a1e81847168f4cccebd20eb8edb0afab","commit_message":"Data: decode level/room data and level assets (+16.06%) (#527)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":241594,"matched_code":241594,"matched_code_percent":100,"total_data":8038172,"matched_data":7613191,"matched_data_percent":94.71297,"total_functions":2049,"matched_functions":2049,"matched_functions_percent":100,"complete_code":157752,"complete_code_percent":65.296326,"complete_data":7613191,"complete_data_percent":94.71297,"total_units":759,"complete_units":455}},{"timestamp":"2026-09-29T13:24:42Z","commit_sha":"720b4b964d59228b91a5f24de8d863853c050f9e","commit_message":"Data: build the GAX2 sound-effect set gStaticData_084C0006 from editable sources (+7.94%) (#526)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":241594,"matched_code":241594,"matched_code_percent":100,"total_data":8038172,"matched_data":6322591,"matched_data_percent":78.657074,"total_functions":2049,"matched_functions":2049,"matched_functions_percent":100,"complete_code":157752,"complete_code_percent":65.296326,"complete_data":6322591,"complete_data_percent":78.657074,"total_units":742,"complete_units":435}},{"timestamp":"2026-09-29T13:16:25Z","commit_sha":"5e3e75b030e4eea9c7dccc08d6c12ab67268daa6","commit_message":"Data: decode the sprite-bank animation tables gStaticData_084A5600 as typed C (+1.36%) (#525)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":241594,"matched_code":241594,"matched_code_percent":100,"total_data":8038172,"matched_data":5684465,"matched_data_percent":70.718376,"total_functions":2049,"matched_functions":2049,"matched_functions_percent":100,"complete_code":157752,"complete_code_percent":65.296326,"complete_data":5684465,"complete_data_percent":70.718376,"total_units":743,"complete_units":435}},{"timestamp":"2026-09-29T12:46:28Z","commit_sha":"e9f44b726b81bd523096ec5f03b879ad040e6459","commit_message":"Data: convert gStaticData_0817E78C (sprite pool + level tilesets) to grit C arrays (+38.9%) (#523)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":241594,"matched_code":241594,"matched_code_percent":100,"total_data":8038172,"matched_data":5575403,"matched_data_percent":69.36158,"total_functions":2049,"matched_functions":2049,"matched_functions_percent":100,"complete_code":157752,"complete_code_percent":65.296326,"complete_data":5575403,"complete_data_percent":69.36158,"total_units":739,"complete_units":431}},{"timestamp":"2026-09-29T12:37:49Z","commit_sha":"58a51bfb2426aacb8a084654c9af2486c23a67d4","commit_message":"Data: convert background pictures/animations and category tables to grit C arrays (+9.93%) (#524)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":241594,"matched_code":241594,"matched_code_percent":100,"total_data":8038172,"matched_data":2448535,"matched_data_percent":30.461342,"total_functions":2049,"matched_functions":2049,"matched_functions_percent":100,"complete_code":157752,"complete_code_percent":65.296326,"complete_data":2448535,"complete_data_percent":30.461342,"total_units":733,"complete_units":428}},{"timestamp":"2026-09-29T12:13:18Z","commit_sha":"38283c525dce119e6af4817f19e4fb35d768bd6b","commit_message":"Graphics: grit feasibility + first PNG→C const array asset (#520)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":241594,"matched_code":241594,"matched_code_percent":100,"total_data":8038172,"matched_data":1650143,"matched_data_percent":20.528833,"total_functions":2049,"matched_functions":2049,"matched_functions_percent":100,"complete_code":157752,"complete_code_percent":65.296326,"complete_data":1650143,"complete_data_percent":20.528833,"total_units":728,"complete_units":424}},{"timestamp":"2026-09-29T12:03:47Z","commit_sha":"3a2f20e0ec4203667f1dc0a0ff3babd7fecb7ea2","commit_message":"Data: convert 134 pointer tables to source (+9,716 bytes data progress) (#522)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":241594,"matched_code":241594,"matched_code_percent":100,"total_data":8038172,"matched_data":1650143,"matched_data_percent":20.528833,"total_functions":2049,"matched_functions":2049,"matched_functions_percent":100,"complete_code":157752,"complete_code_percent":65.296326,"complete_data":1650143,"complete_data_percent":20.528833,"total_units":728,"complete_units":424}},{"timestamp":"2026-09-29T11:58:44Z","commit_sha":"9a61e37112b7773d5cc2a72ac6e4b6c9542bbbbd","commit_message":"Data map: triage of every raw ROM data blob (#521)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":241594,"matched_code":241594,"matched_code_percent":100,"total_data":8038172,"matched_data":1640427,"matched_data_percent":20.40796,"total_functions":2049,"matched_functions":2049,"matched_functions_percent":100,"complete_code":157752,"complete_code_percent":65.296326,"complete_data":1640427,"complete_data_percent":20.40796,"total_units":683,"complete_units":401}},{"timestamp":"2026-09-29T11:14:31Z","commit_sha":"91f116cccc858ddfef43f013793d8f21aef1b910","commit_message":"Fix objdiff code progress under-count for byte-exact functions (#519)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":100,"total_code":241594,"matched_code":241594,"matched_code_percent":100,"total_data":8038172,"matched_data":1640427,"matched_data_percent":20.40796,"total_functions":2049,"matched_functions":2049,"matched_functions_percent":100,"complete_code":157752,"complete_code_percent":65.296326,"complete_data":1640427,"complete_data_percent":20.40796,"total_units":683,"complete_units":401}},{"timestamp":"2026-09-29T10:57:55Z","commit_sha":"bc3eb1193be1afc20d462a4677b80bd205806d4f","commit_message":"Build the remaining SDK library code at -O1 as plain C (#518)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.72193,"total_code":241458,"matched_code":222980,"matched_code_percent":92.34732,"total_data":8038172,"matched_data":1640427,"matched_data_percent":20.40796,"total_functions":2049,"matched_functions":1923,"matched_functions_percent":93.85066,"complete_code":157670,"complete_code_percent":65.29914,"complete_data":1640427,"complete_data_percent":20.40796,"total_units":683,"complete_units":401}},{"timestamp":"2026-09-29T10:52:55Z","commit_sha":"e230d89daf54b1b49d86531c6627db354d7ca29f","commit_message":"Add data progress (separate decomp.dev bar) (#517)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.72193,"total_code":241458,"matched_code":222980,"matched_code_percent":92.34732,"total_data":8038172,"matched_data":1640427,"matched_data_percent":20.40796,"total_functions":2049,"matched_functions":1923,"matched_functions_percent":93.85066,"complete_code":157374,"complete_code_percent":65.17655,"complete_data":1640427,"complete_data_percent":20.40796,"total_units":683,"complete_units":400}},{"timestamp":"2026-09-29T10:38:28Z","commit_sha":"7898a4a00f9a0d76e89ff96a7b03fcebcbe3632b","commit_message":"Promote 3 NAKED EEPROM functions to real C: SDK AgbEeprom at -O1 (issue #69 retry) (#516)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.72193,"total_code":241458,"matched_code":222980,"matched_code_percent":92.34732,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2049,"matched_functions":1923,"matched_functions_percent":93.85066,"complete_code":157374,"complete_code_percent":65.17655,"complete_data":0,"complete_data_percent":100,"total_units":488,"complete_units":303}},{"timestamp":"2026-09-29T10:30:50Z","commit_sha":"5947c24dfa841cad355d9809ca2a8d94aebb7377","commit_message":"Exclude confirmed hand-written asm from decomp.dev progress totals (#515)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.50578,"total_code":241458,"matched_code":222676,"matched_code_percent":92.22142,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2049,"matched_functions":1921,"matched_functions_percent":93.75305,"complete_code":156784,"complete_code_percent":64.932205,"complete_data":0,"complete_data_percent":100,"total_units":489,"complete_units":301}},{"timestamp":"2026-09-29T10:14:29Z","commit_sha":"b070407a26e47c1ed411595ad5d7772603e3afad","commit_message":"Promote 1 NAKED function to real C: sub_8015038 (issue #18 retry) (#514)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.2332,"total_code":242218,"matched_code":222772,"matched_code_percent":91.971695,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1939,"matched_functions_percent":93.62627,"complete_code":156846,"complete_code_percent":64.75407,"complete_data":0,"complete_data_percent":100,"total_units":494,"complete_units":303}},{"timestamp":"2026-09-29T10:07:42Z","commit_sha":"db5c171d90bef24146231b831f1f8fd998e9b986","commit_message":"Promote 2 NAKED functions to real C: sub_8006600, sub_8000EE4 (issues #101/#102, closed) (#513)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":99.06806,"total_code":242218,"matched_code":222372,"matched_code_percent":91.80656,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1938,"matched_functions_percent":93.57798,"complete_code":157018,"complete_code_percent":64.82507,"complete_data":0,"complete_data_percent":100,"total_units":495,"complete_units":304}},{"timestamp":"2026-09-29T10:06:58Z","commit_sha":"9a6b3b8b7663535443981db687e0f5633a3f4e7c","commit_message":"Promote 1 NAKED function to real C: sub_8039B44 (issue #68 retry, closed) (#512)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":98.80054,"total_code":242218,"matched_code":221724,"matched_code_percent":91.539024,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1936,"matched_functions_percent":93.48141,"complete_code":156370,"complete_code_percent":64.55755,"complete_data":0,"complete_data_percent":100,"total_units":496,"complete_units":303}},{"timestamp":"2026-09-29T10:01:20Z","commit_sha":"75601aefa5b601688e9314d867d8395e18840d87","commit_message":"Promote 5 functions to real C: sub_80339DC, sub_8033CF8, sub_8015238, sub_80152F0, sub_80156EC (issue #62/#18 retry) (#511)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":98.47737,"total_code":242218,"matched_code":221502,"matched_code_percent":91.44737,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1935,"matched_functions_percent":93.43312,"complete_code":155368,"complete_code_percent":64.143875,"complete_data":0,"complete_data_percent":100,"total_units":496,"complete_units":302}},{"timestamp":"2026-09-29T09:50:11Z","commit_sha":"46aca6bb3ab915a362dd5888105bc94a5d4f229a","commit_message":"Promote 5 NAKED functions to real C: sub_8025CA4, sub_8025B0C, sub_8024960, sub_8024820, sub_80073DC (#510)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":98.28548,"total_code":242218,"matched_code":220586,"matched_code_percent":91.06921,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1930,"matched_functions_percent":93.191696,"complete_code":156022,"complete_code_percent":64.41387,"complete_data":0,"complete_data_percent":100,"total_units":496,"complete_units":305}},{"timestamp":"2026-09-29T09:27:23Z","commit_sha":"f15b85b0ca5459d6db62562bc5aaab52399444f2","commit_message":"Promote 1 NAKED function to real C: sub_8007634 (issue #9 retry, closed) (#509)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":97.66956,"total_code":242218,"matched_code":219224,"matched_code_percent":90.5069,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1926,"matched_functions_percent":92.99855,"complete_code":155132,"complete_code_percent":64.04644,"complete_data":0,"complete_data_percent":100,"total_units":501,"complete_units":304}},{"timestamp":"2026-09-29T09:21:49Z","commit_sha":"991116f42028a151e985f4e902bbb8b5a10f1f15","commit_message":"Promote 1 NAKED function to real C: sub_803686C (issue #65 retry, closed) (#508)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":97.533134,"total_code":242218,"matched_code":218180,"matched_code_percent":90.07588,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1925,"matched_functions_percent":92.950264,"complete_code":155132,"complete_code_percent":64.04644,"complete_data":0,"complete_data_percent":100,"total_units":501,"complete_units":304}},{"timestamp":"2026-09-29T08:57:24Z","commit_sha":"5eb224e391adce2ed5d790837f6f48ef2e0f4d21","commit_message":"Promote 1 NAKED function to real C: sub_8038538 (issue #67 retry) (#507)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":97.05422,"total_code":242218,"matched_code":217020,"matched_code_percent":89.59698,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1924,"matched_functions_percent":92.90198,"complete_code":155132,"complete_code_percent":64.04644,"complete_data":0,"complete_data_percent":100,"total_units":501,"complete_units":304}},{"timestamp":"2026-09-29T08:37:58Z","commit_sha":"67ecca6bd4e2d81ecc59808771d99b4f9e3fee16","commit_message":"Promote sub_0800D18C to real C (issue #12 retry): closed (#506)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":96.53733,"total_code":242218,"matched_code":215768,"matched_code_percent":89.080086,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1923,"matched_functions_percent":92.8537,"complete_code":153880,"complete_code_percent":63.529545,"complete_data":0,"complete_data_percent":100,"total_units":501,"complete_units":303}},{"timestamp":"2026-09-29T08:13:16Z","commit_sha":"49e1e08d99d16402a772798e72bc87b5580b59a5","commit_message":"Promote 2 NAKED functions to real C (issues #4 and #31 retry) (#505)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":96.53371,"total_code":242218,"matched_code":211928,"matched_code_percent":87.494736,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1922,"matched_functions_percent":92.80541,"complete_code":153880,"complete_code_percent":63.529545,"complete_data":0,"complete_data_percent":100,"total_units":501,"complete_units":303}},{"timestamp":"2026-09-29T08:11:06Z","commit_sha":"ff44e691e3b663f03f87f1d3b714d236d9a9bb29","commit_message":"Closer NAKED draft: sub_0800D18C 938 -> 33 (nothing closed: still NAKED) (#504)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":96.21994,"total_code":242218,"matched_code":211168,"matched_code_percent":87.18097,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1920,"matched_functions_percent":92.70884,"complete_code":153120,"complete_code_percent":63.215782,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":303}},{"timestamp":"2026-09-29T07:43:04Z","commit_sha":"6dd229867b6149da5d7a13f2d48b0a0d88b74839","commit_message":"Promote 1 NAKED function to real C (issue #7 retry); sub_8001DB4 draft 136 -> 51 (#503)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":96.12476,"total_code":242218,"matched_code":211168,"matched_code_percent":87.18097,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1920,"matched_functions_percent":92.70884,"complete_code":153120,"complete_code_percent":63.215782,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":303}},{"timestamp":"2026-09-29T07:28:46Z","commit_sha":"8f982ea9065b2be04df39ca0e1896b5f33c5a44d","commit_message":"Closer GAX draft: sub_8039B44 46 -> 43 (nothing closed: still NAKED) (#502)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":96.06201,"total_code":242218,"matched_code":211016,"matched_code_percent":87.11822,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1919,"matched_functions_percent":92.66055,"complete_code":152968,"complete_code_percent":63.15303,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":302}},{"timestamp":"2026-09-29T06:51:13Z","commit_sha":"79f0804dad3ee9b65880d844bf3b9c1aa4fca77d","commit_message":"Closer NAKED drafts: sub_802062C 12 -> 4, sub_8005E5C 45 -> 14 (nothing closed: still NAKED) (#501)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":96.06201,"total_code":242218,"matched_code":211016,"matched_code_percent":87.11822,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1919,"matched_functions_percent":92.66055,"complete_code":152968,"complete_code_percent":63.15303,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":302}},{"timestamp":"2026-09-29T06:15:55Z","commit_sha":"55bb392b3ccf668899a1700942fb092ff40ac98c","commit_message":"Promote 1 NAKED function to real C (issue #5 retry); sub_802062C draft 62 -> 12, sub_8005E5C 73 -> 45 (#500)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":96.06201,"total_code":242218,"matched_code":211016,"matched_code_percent":87.11822,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1919,"matched_functions_percent":92.66055,"complete_code":152968,"complete_code_percent":63.15303,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":302}},{"timestamp":"2026-09-29T06:11:14Z","commit_sha":"0df9b534dbd1ad4f7bcdfa6529c54f33ef90feba","commit_message":"Closer GAX drafts: sub_8039B44 202 -> 46, sub_8038538 123 -> 100 (nothing closed: still NAKED) (#499)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":95.97118,"total_code":242218,"matched_code":210796,"matched_code_percent":87.02739,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1918,"matched_functions_percent":92.61227,"complete_code":152748,"complete_code_percent":63.062202,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":301}},{"timestamp":"2026-09-29T05:45:42Z","commit_sha":"4aed5e13e54abf1d5a8b67f459f42e49abf465ac","commit_message":"Promote 1 NAKED function to real C (issue #4 retry); sub_8002E20 draft 97 -> 14 hw (#498)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":95.97118,"total_code":242218,"matched_code":210796,"matched_code_percent":87.02739,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1918,"matched_functions_percent":92.61227,"complete_code":152748,"complete_code_percent":63.062202,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":301}},{"timestamp":"2026-09-28T23:32:44Z","commit_sha":"c99a301f27e008bc0a7bbbd1b0466feb505df012","commit_message":"Closer drafts for sub_8002114 (6 hw) and sub_8002E20 (nothing closed: still NAKED) (#497)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":95.35686,"total_code":242218,"matched_code":209308,"matched_code_percent":86.41307,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1917,"matched_functions_percent":92.56398,"complete_code":151260,"complete_code_percent":62.447876,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":300}},{"timestamp":"2026-09-28T23:08:09Z","commit_sha":"3924d9c3e9d7f7cc00d31ce41432f83c89087d20","commit_message":"Promote 2 NAKED functions to real C (issue #12/#25 retry) (#496)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":95.35686,"total_code":242218,"matched_code":209308,"matched_code_percent":86.41307,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1917,"matched_functions_percent":92.56398,"complete_code":151260,"complete_code_percent":62.447876,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":300}},{"timestamp":"2026-09-28T23:00:03Z","commit_sha":"649143f0071051eb8cf394cc2232d92c29c8517a","commit_message":"Promote 1 NAKED function to real C (issue #9 retry) (#495)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":94.627396,"total_code":242218,"matched_code":206628,"matched_code_percent":85.306625,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1915,"matched_functions_percent":92.46741,"complete_code":149612,"complete_code_percent":61.7675,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":299}},{"timestamp":"2026-09-28T22:22:37Z","commit_sha":"bcaa9a540ec45119bbca8e6b0ae5b092fa3c1396","commit_message":"Promote 2 NAKED functions to real C (issue #13/#64 retry) (#494)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":94.60835,"total_code":242218,"matched_code":206628,"matched_code_percent":85.306625,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1915,"matched_functions_percent":92.46741,"complete_code":149612,"complete_code_percent":61.7675,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":299}},{"timestamp":"2026-09-28T22:16:30Z","commit_sha":"eea4702882a5de3624fd5fc41194fb0af27c2f27","commit_message":"Promote 1 NAKED function to real C (issue #9 retry) (#493)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":94.36626,"total_code":242218,"matched_code":204816,"matched_code_percent":84.55854,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1913,"matched_functions_percent":92.370834,"complete_code":149612,"complete_code_percent":61.7675,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":299}},{"timestamp":"2026-09-28T21:45:13Z","commit_sha":"04e3bd9b7e13c123d9dce090ed3cdd231778180d","commit_message":"Promote 1 NAKED function to real C (issue #9 retry) (#492)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":94.35189,"total_code":242218,"matched_code":204180,"matched_code_percent":84.29597,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1912,"matched_functions_percent":92.322556,"complete_code":149612,"complete_code_percent":61.7675,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":299}},{"timestamp":"2026-09-28T21:42:56Z","commit_sha":"7ca34188ae6d800690ecc60cd7ef35316c95e22d","commit_message":"Promote 4 NAKED/raw functions to real C (issue #6/#7/#24/#37 retry) (#491)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":94.07383,"total_code":242218,"matched_code":203550,"matched_code_percent":84.035866,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1911,"matched_functions_percent":92.27427,"complete_code":148982,"complete_code_percent":61.507404,"complete_data":0,"complete_data_percent":100,"total_units":503,"complete_units":298}},{"timestamp":"2026-09-28T21:21:59Z","commit_sha":"7206081eb606bd7c5fd311483f90de6f306fa8a9","commit_message":"Closer drafts for sub_80091D4 (7 hw) and sub_800AFF4 (issue #9 retry, nothing closed: still NAKED) (#490)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":93.42001,"total_code":242218,"matched_code":200502,"matched_code_percent":82.7775,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1907,"matched_functions_percent":92.081116,"complete_code":148974,"complete_code_percent":61.5041,"complete_data":0,"complete_data_percent":100,"total_units":504,"complete_units":297}},{"timestamp":"2026-09-28T21:06:18Z","commit_sha":"677272e7aa2ab76145e89a3bbbfa981ccf727b05","commit_message":"Promote 2 NAKED functions to real C (issue #10/#17 retry) (#489)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":93.408226,"total_code":242218,"matched_code":200502,"matched_code_percent":82.7775,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1907,"matched_functions_percent":92.081116,"complete_code":148974,"complete_code_percent":61.5041,"complete_data":0,"complete_data_percent":100,"total_units":504,"complete_units":297}},{"timestamp":"2026-09-28T20:37:36Z","commit_sha":"3650ea1af7fbabda74d3ebec6dd24dda4eac44bd","commit_message":"Promote 2 NAKED functions to real C (issue #4/#7 retry) (#488)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":93.35666,"total_code":242218,"matched_code":199894,"matched_code_percent":82.52649,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1906,"matched_functions_percent":92.03283,"complete_code":148856,"complete_code_percent":61.45538,"complete_data":0,"complete_data_percent":100,"total_units":504,"complete_units":296}},{"timestamp":"2026-09-28T20:05:23Z","commit_sha":"56b5289445d1c10d93c8e58039e2f5f37d7562a4","commit_message":"Promote 1 NAKED function to real C (issue #15 retry) (#487)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":93.094086,"total_code":242218,"matched_code":199258,"matched_code_percent":82.26391,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1904,"matched_functions_percent":91.936264,"complete_code":148220,"complete_code_percent":61.19281,"complete_data":0,"complete_data_percent":100,"total_units":505,"complete_units":295}},{"timestamp":"2026-09-28T19:34:09Z","commit_sha":"030c1df1560735eaf3df9d144e86decdb6f63b6c","commit_message":"Promote 3 functions to real C, retire 3 raw asm files (issue #9/#10 retry) (#486)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":93.04657,"total_code":242218,"matched_code":198950,"matched_code_percent":82.13675,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1903,"matched_functions_percent":91.88798,"complete_code":148220,"complete_code_percent":61.19281,"complete_data":0,"complete_data_percent":100,"total_units":505,"complete_units":295}},{"timestamp":"2026-09-28T19:33:15Z","commit_sha":"298466957249b67c5bd7f30975c8271198cb2f8f","commit_message":"Mix-6 NAKED retry notes (0/9 closed; all stay NAKED) (#485)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":92.35507,"total_code":242218,"matched_code":197846,"matched_code_percent":81.68097,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1900,"matched_functions_percent":91.74312,"complete_code":146208,"complete_code_percent":60.362156,"complete_data":0,"complete_data_percent":100,"total_units":506,"complete_units":294}},{"timestamp":"2026-09-28T18:53:48Z","commit_sha":"3cbbc2369c493437b7ba1e978dfe83ee24ce218e","commit_message":"Promote 2 NAKED functions to real C (issue #11/#12 stack-box retry) (#484)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":92.35507,"total_code":242218,"matched_code":197846,"matched_code_percent":81.68097,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1900,"matched_functions_percent":91.74312,"complete_code":146208,"complete_code_percent":60.362156,"complete_data":0,"complete_data_percent":100,"total_units":506,"complete_units":294}},{"timestamp":"2026-09-28T18:47:14Z","commit_sha":"23d15460ee027d8a2a594e8d6f4023fca1d91242","commit_message":"Promote 2 NAKED functions to real C (issue #17/#15 retry) (#483)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":92.20656,"total_code":242218,"matched_code":197090,"matched_code_percent":81.36885,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1898,"matched_functions_percent":91.646545,"complete_code":145878,"complete_code_percent":60.22591,"complete_data":0,"complete_data_percent":100,"total_units":506,"complete_units":293}},{"timestamp":"2026-09-28T18:23:13Z","commit_sha":"683ec7d89e9638422bee8ab3b038163f5bc71ca9","commit_message":"Size-exact C draft for sub_0800D18C (issue #12 retry, did not close: still NAKED) (#482)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":91.90655,"total_code":242218,"matched_code":195874,"matched_code_percent":80.86682,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1896,"matched_functions_percent":91.54997,"complete_code":145162,"complete_code_percent":59.930313,"complete_data":0,"complete_data_percent":100,"total_units":507,"complete_units":293}},{"timestamp":"2026-09-28T18:22:33Z","commit_sha":"b2e6c2842a9b99c8f34ad1c0fcccd19e5265aae2","commit_message":"Promote 2 NAKED functions to real C: sub_8037FC0, sub_8038240 (issue #66 retry); GAX toolchain probe negative (#481)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":92.03192,"total_code":242218,"matched_code":199714,"matched_code_percent":82.45217,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1897,"matched_functions_percent":91.59826,"complete_code":145162,"complete_code_percent":59.930313,"complete_data":0,"complete_data_percent":100,"total_units":507,"complete_units":293}},{"timestamp":"2026-09-28T17:04:26Z","commit_sha":"e8a97d284994059e7b2ea8c64a8060308ec3cd0b","commit_message":"Promote 1 NAKED function to real C: sub_80255D4 (#40), plus size-exact sub_8011548/sub_8002114 drafts (#480)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":91.52085,"total_code":242218,"matched_code":199046,"matched_code_percent":82.176384,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1896,"matched_functions_percent":91.54997,"complete_code":143924,"complete_code_percent":59.419205,"complete_data":0,"complete_data_percent":100,"total_units":507,"complete_units":291}},{"timestamp":"2026-09-28T16:24:40Z","commit_sha":"0250a56733f7afe0875ea09e35b5c9d2d45aceba","commit_message":"Promote 1 NAKED function to real C: sub_8031604 (issue #58 retry), plus a 1-halfword sub_8014674 draft (#479)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":91.18984,"total_code":242218,"matched_code":198342,"matched_code_percent":81.885735,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1895,"matched_functions_percent":91.501686,"complete_code":143342,"complete_code_percent":59.178917,"complete_data":0,"complete_data_percent":100,"total_units":507,"complete_units":289}},{"timestamp":"2026-09-28T15:57:00Z","commit_sha":"0f8746d0dc4de2fd02929a90a68613f50547fb70","commit_message":"Promote 2 NAKED functions to real C: sub_800B8DC (#10) and sub_8011BD4 (#16) (#478)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":91.07425,"total_code":242218,"matched_code":198062,"matched_code_percent":81.77014,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1894,"matched_functions_percent":91.4534,"complete_code":143342,"complete_code_percent":59.178917,"complete_data":0,"complete_data_percent":100,"total_units":507,"complete_units":289}},{"timestamp":"2026-09-28T15:48:34Z","commit_sha":"174492975724203ecf12d43ca6abe398d4f60f48","commit_message":"Promote 5 NAKED functions to real C (third near-miss sweep) (#477)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":90.46805,"total_code":242218,"matched_code":196642,"matched_code_percent":81.18389,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1893,"matched_functions_percent":91.40512,"complete_code":141922,"complete_code_percent":58.59267,"complete_data":0,"complete_data_percent":100,"total_units":507,"complete_units":288}},{"timestamp":"2026-09-28T15:23:52Z","commit_sha":"e5b974b2c9d61cc29996f1c775f4052742037bda","commit_message":"Promote 1 NAKED function to real C: UpdateGameFrame (issue #34), plus a sub_803686C draft (#476)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":89.78868,"total_code":242218,"matched_code":193882,"matched_code_percent":80.044426,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1888,"matched_functions_percent":91.16369,"complete_code":140568,"complete_code_percent":58.033676,"complete_data":0,"complete_data_percent":100,"total_units":507,"complete_units":286}},{"timestamp":"2026-09-28T15:14:58Z","commit_sha":"bf7981b27271dd5aa2de93b6d612dee7eb14280e","commit_message":"Promote 2 NAKED functions to real C (issue #16 retry) (#475)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":89.78868,"total_code":242218,"matched_code":193882,"matched_code_percent":80.044426,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1888,"matched_functions_percent":91.16369,"complete_code":138952,"complete_code_percent":57.3665,"complete_data":0,"complete_data_percent":100,"total_units":507,"complete_units":285}},{"timestamp":"2026-09-28T14:37:32Z","commit_sha":"8b67abe4b3af8dce3444b5527fb1bbaa736989c4","commit_message":"Promote 3 NAKED functions to real C (issues #64/#65 second retry) (#474)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":89.344635,"total_code":242218,"matched_code":193198,"matched_code_percent":79.76203,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1887,"matched_functions_percent":91.1154,"complete_code":137768,"complete_code_percent":56.87769,"complete_data":0,"complete_data_percent":100,"total_units":509,"complete_units":285}},{"timestamp":"2026-09-28T14:36:52Z","commit_sha":"2b121c2223ab83a9ff4760a10c9c0ef8a7f0e8e0","commit_message":"Promote 1 NAKED function to real C (fresh NAKED retry, issues #4/#7/#9/#10/#15/#16) (#473)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":88.6626,"total_code":242218,"matched_code":191546,"matched_code_percent":79.08,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1884,"matched_functions_percent":90.97054,"complete_code":136332,"complete_code_percent":56.284832,"complete_data":0,"complete_data_percent":100,"total_units":509,"complete_units":283}},{"timestamp":"2026-09-28T12:52:08Z","commit_sha":"64933a86753dd3c76b41b055cc0ed2cca2fcf5e1","commit_message":"Promote 2 NAKED functions to real C (issues #48/#49 retry) (#472)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":88.526306,"total_code":242218,"matched_code":191218,"matched_code_percent":78.94459,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1883,"matched_functions_percent":90.92226,"complete_code":136004,"complete_code_percent":56.149418,"complete_data":0,"complete_data_percent":100,"total_units":509,"complete_units":282}},{"timestamp":"2026-09-28T12:43:03Z","commit_sha":"575a757171662c8acf0ad3adf2dcad27b3a926f3","commit_message":"Promote 5 NAKED functions to real C (second near-miss sweep, issues #4/#7/#40/#48/#49) (#471)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":88.525314,"total_code":242218,"matched_code":190196,"matched_code_percent":78.52265,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1882,"matched_functions_percent":90.87398,"complete_code":136004,"complete_code_percent":56.149418,"complete_data":0,"complete_data_percent":100,"total_units":509,"complete_units":282}},{"timestamp":"2026-09-28T12:18:05Z","commit_sha":"de50ae34c6442db2ee2235e3afa388cb3c5c227e","commit_message":"Promote 2 NAKED functions to real C (late-ROM near-miss retry, issues #56/#63) (#470)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":88.07205,"total_code":242218,"matched_code":188596,"matched_code_percent":77.86209,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1877,"matched_functions_percent":90.632545,"complete_code":135672,"complete_code_percent":56.012352,"complete_data":0,"complete_data_percent":100,"total_units":508,"complete_units":282}},{"timestamp":"2026-09-28T11:52:55Z","commit_sha":"78b7d4ea6ca7606f66878480cbdb7d834c1f102b","commit_message":"Promote 2 NAKED functions to real C (late-ROM retry, issues #56/#66) (#469)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":87.83177,"total_code":242218,"matched_code":188014,"matched_code_percent":77.62181,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1875,"matched_functions_percent":90.53597,"complete_code":135402,"complete_code_percent":55.900883,"complete_data":0,"complete_data_percent":100,"total_units":508,"complete_units":281}},{"timestamp":"2026-09-28T11:37:57Z","commit_sha":"f946e326c356ec76b184e603d3446b5c1bb69c98","commit_message":"Promote 3 near-miss functions to real C (near-miss polish pass) (#468)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":87.635254,"total_code":242218,"matched_code":187538,"matched_code_percent":77.42529,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1873,"matched_functions_percent":90.4394,"complete_code":135074,"complete_code_percent":55.76547,"complete_data":0,"complete_data_percent":100,"total_units":508,"complete_units":281}},{"timestamp":"2026-09-28T11:00:50Z","commit_sha":"03a8ba47efffdc0aad7e391e79b892cefa4b80f2","commit_message":"Promote 2 NAKED functions to real C (issue #3/#6 retry) (#467)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":87.11924,"total_code":242218,"matched_code":186446,"matched_code_percent":76.974464,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1871,"matched_functions_percent":90.342834,"complete_code":133824,"complete_code_percent":55.249405,"complete_data":0,"complete_data_percent":100,"total_units":507,"complete_units":278}},{"timestamp":"2026-09-28T10:36:34Z","commit_sha":"5ec175c3d25ae364dc295bac542c98da2042ca16","commit_message":"Promote 3 NAKED functions to real C (issue #12/#13/#25 retry) (#466)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":86.83437,"total_code":242218,"matched_code":185756,"matched_code_percent":76.6896,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1869,"matched_functions_percent":90.24626,"complete_code":133134,"complete_code_percent":54.964535,"complete_data":0,"complete_data_percent":100,"total_units":510,"complete_units":279}},{"timestamp":"2026-09-28T09:59:39Z","commit_sha":"535e48657ed4cea4f9c3939942f792d6d6927066","commit_message":"Promote 7 NAKED functions to real C (issue #45/#31 retry) (#465)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":86.83123,"total_code":242218,"matched_code":188578,"matched_code_percent":77.85466,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1871,"matched_functions_percent":90.342834,"complete_code":132792,"complete_code_percent":54.823338,"complete_data":0,"complete_data_percent":100,"total_units":510,"complete_units":278}},{"timestamp":"2026-09-28T09:24:35Z","commit_sha":"f24165536d85cd79a22655d1c9f146b2ba37e73e","commit_message":"Promote 3 NAKED functions to real C (issue #12/#24/#26 retry) (#464)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":85.139435,"total_code":242218,"matched_code":189386,"matched_code_percent":78.18825,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1870,"matched_functions_percent":90.29455,"complete_code":128140,"complete_code_percent":52.90276,"complete_data":0,"complete_data_percent":100,"total_units":512,"complete_units":275}},{"timestamp":"2026-09-28T09:15:48Z","commit_sha":"09aa5da0a4297bd6101bacee3365ab819520fac2","commit_message":"Promote 3 NAKED functions to real C (issue #15/#16/#17 retry) (#463)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":84.61759,"total_code":242218,"matched_code":188122,"matched_code_percent":77.666405,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1868,"matched_functions_percent":90.197975,"complete_code":126876,"complete_code_percent":52.380913,"complete_data":0,"complete_data_percent":100,"total_units":511,"complete_units":273}},{"timestamp":"2026-09-28T05:57:42Z","commit_sha":"83712abb683dfab33ea0f56b787b5a74f2613b60","commit_message":"Promote 13 NAKED functions to real C (issue #9/#10/#11 retry) (#462)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":84.21878,"total_code":242218,"matched_code":187156,"matched_code_percent":77.267586,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1865,"matched_functions_percent":90.053116,"complete_code":126454,"complete_code_percent":52.206688,"complete_data":0,"complete_data_percent":100,"total_units":513,"complete_units":273}},{"timestamp":"2026-09-28T05:35:17Z","commit_sha":"374084f08b53fc1216f577a21bd2af7142be5745","commit_message":"Promote 7 NAKED functions to real C (issue #64/#65 retry) (#461)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":83.31432,"total_code":242218,"matched_code":184982,"matched_code_percent":76.37005,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1856,"matched_functions_percent":89.61854,"complete_code":124796,"complete_code_percent":51.522182,"complete_data":0,"complete_data_percent":100,"total_units":518,"complete_units":271}},{"timestamp":"2026-09-28T05:28:16Z","commit_sha":"f848480395fd241bfb2a0d8be6d29b23f948857c","commit_message":"Promote 9 NAKED functions to real C (issue #48/#49/#52 retry) (#460)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":82.17902,"total_code":242218,"matched_code":182746,"matched_code_percent":75.44691,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1850,"matched_functions_percent":89.32883,"complete_code":124796,"complete_code_percent":51.522182,"complete_data":0,"complete_data_percent":100,"total_units":518,"complete_units":271}},{"timestamp":"2026-09-28T04:53:10Z","commit_sha":"ba76aff5d3be5fbbba263923af8c724204c86470","commit_message":"Promote 7 NAKED functions to real C (issue #54/#58/#61 retry) (#459)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":82.04729,"total_code":242218,"matched_code":182946,"matched_code_percent":75.52948,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1851,"matched_functions_percent":89.37711,"complete_code":124448,"complete_code_percent":51.378513,"complete_data":0,"complete_data_percent":100,"total_units":518,"complete_units":270}},{"timestamp":"2026-09-28T04:51:10Z","commit_sha":"e9a8435ad3c8aea70b20956c3cc79e0128ebb521","commit_message":"Promote 12 NAKED functions to real C (issue #4/#6/#8 retry) (#458)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":81.19846,"total_code":242218,"matched_code":180890,"matched_code_percent":74.680664,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1844,"matched_functions_percent":89.03911,"complete_code":123822,"complete_code_percent":51.120068,"complete_data":0,"complete_data_percent":100,"total_units":518,"complete_units":268}},{"timestamp":"2026-09-28T04:43:05Z","commit_sha":"12b25e1cc4150b3bbde778d9cdd0e608947f4264","commit_message":"Promote 21 NAKED functions to real C (issues #66-#68 retry) (#456)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":79.894684,"total_code":242218,"matched_code":177732,"matched_code_percent":73.37688,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1832,"matched_functions_percent":88.45969,"complete_code":120352,"complete_code_percent":49.687473,"complete_data":0,"complete_data_percent":100,"total_units":516,"complete_units":261}},{"timestamp":"2026-09-28T04:18:17Z","commit_sha":"060eacbb5b297e869edfc163326a17647276f4f4","commit_message":"Promote 11 NAKED functions to real C (issue #51/#54 retry) (#455)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":76.93746,"total_code":242218,"matched_code":172870,"matched_code_percent":71.36959,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1815,"matched_functions_percent":87.63882,"complete_code":113148,"complete_code_percent":46.71329,"complete_data":0,"complete_data_percent":100,"total_units":518,"complete_units":248}},{"timestamp":"2026-09-28T02:02:30Z","commit_sha":"c5d6c02e882eab89485bd1218215a978a2a0a27a","commit_message":"Per-file -fno-strength-reduce for graphics_loading_35780; match sub_8036600 (#454)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":75.97469,"total_code":242218,"matched_code":170538,"matched_code_percent":70.40682,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1804,"matched_functions_percent":87.10767,"complete_code":112848,"complete_code_percent":46.589436,"complete_data":0,"complete_data_percent":100,"total_units":527,"complete_units":246}},{"timestamp":"2026-09-28T01:58:26Z","commit_sha":"a554dbaacca1d176d823fd684fa29e7729003aad","commit_message":"Promote 13 NAKED functions to real C (issues #58/#61 retry) (#453)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":75.932625,"total_code":242218,"matched_code":170538,"matched_code_percent":70.40682,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1804,"matched_functions_percent":87.10767,"complete_code":112848,"complete_code_percent":46.589436,"complete_data":0,"complete_data_percent":100,"total_units":527,"complete_units":246}},{"timestamp":"2026-09-28T01:48:30Z","commit_sha":"f928d28953bd7f00d63e3ac9fec37841e22fd961","commit_message":"Promote 8 NAKED functions to real C (issues #15/#16 retry) (#452)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":74.00709,"total_code":242218,"matched_code":165874,"matched_code_percent":68.481285,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1791,"matched_functions_percent":86.479965,"complete_code":111768,"complete_code_percent":46.143555,"complete_data":0,"complete_data_percent":100,"total_units":527,"complete_units":242}},{"timestamp":"2026-09-28T01:35:40Z","commit_sha":"2d1af8c8a7ddc8a9d527d64435f9fec24c11ba1b","commit_message":"Promote 10 NAKED functions to real C (issue #65 retry) (#451)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":73.51128,"total_code":242218,"matched_code":164508,"matched_code_percent":67.91733,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1787,"matched_functions_percent":86.28682,"complete_code":110528,"complete_code_percent":45.63162,"complete_data":0,"complete_data_percent":100,"total_units":525,"complete_units":240}},{"timestamp":"2026-09-28T01:04:32Z","commit_sha":"f7c0e8ba59d12eca6f57a1185188a53d85a89178","commit_message":"Promote 6 NAKED functions to real C (issue #10 retry) (#450)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":72.52053,"total_code":242218,"matched_code":163208,"matched_code_percent":67.38062,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1779,"matched_functions_percent":85.900536,"complete_code":110528,"complete_code_percent":45.63162,"complete_data":0,"complete_data_percent":100,"total_units":525,"complete_units":240}},{"timestamp":"2026-09-28T00:50:48Z","commit_sha":"c4d8fd10aa8f22b58db577f06812a9549a239fd1","commit_message":"Promote 9 NAKED functions to real C (issue #7 retry) (#449)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":72.55231,"total_code":242218,"matched_code":164442,"matched_code_percent":67.89008,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1785,"matched_functions_percent":86.19025,"complete_code":110528,"complete_code_percent":45.63162,"complete_data":0,"complete_data_percent":100,"total_units":525,"complete_units":240}},{"timestamp":"2026-09-28T00:34:56Z","commit_sha":"2766f7c80316b94f7e6a733951a818fb79c4e0e7","commit_message":"Close issue #46, and match sub_8002D44 (#5) and sub_803487C (#63) as plain C (#448)\n\nCo-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>","measures":{"fuzzy_match_percent":71.66715,"total_code":242218,"matched_code":162298,"matched_code_percent":67.00493,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1776,"matched_functions_percent":85.75568,"complete_code":108384,"complete_code_percent":44.746468,"complete_data":0,"complete_data_percent":100,"total_units":525,"complete_units":237}},{"timestamp":"2026-09-28T00:08:02Z","commit_sha":"596139e53ebdaf1e5a1e546566a7c470f194b4d6","commit_message":"Match the last NAKED functions of issues #14, #53 and #60 as plain C (#447)\n\nCo-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>","measures":{"fuzzy_match_percent":71.23575,"total_code":242218,"matched_code":161008,"matched_code_percent":66.47235,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1769,"matched_functions_percent":85.41767,"complete_code":107954,"complete_code_percent":44.56894,"complete_data":0,"complete_data_percent":100,"total_units":524,"complete_units":234}},{"timestamp":"2026-09-28T00:05:28Z","commit_sha":"4bea2acfabc296feeedf101500baf3c6ee3e7612","commit_message":"CI: move the fork ROM check into its own workflow file (#446)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":71.038414,"total_code":242218,"matched_code":160530,"matched_code_percent":66.27501,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1767,"matched_functions_percent":85.3211,"complete_code":107954,"complete_code_percent":44.56894,"complete_data":0,"complete_data_percent":100,"total_units":524,"complete_units":234}},{"timestamp":"2026-09-28T00:00:27Z","commit_sha":"9c3b4aac2c8f9b4adf6df05c20cccdfb72b98515","commit_message":"Match LoadGraphicsPackage and its accessors as plain C under old_agbcc - closes #30 (#445)\n\nCo-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>","measures":{"fuzzy_match_percent":71.038414,"total_code":242218,"matched_code":160530,"matched_code_percent":66.27501,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1767,"matched_functions_percent":85.3211,"complete_code":107954,"complete_code_percent":44.56894,"complete_data":0,"complete_data_percent":100,"total_units":524,"complete_units":234}},{"timestamp":"2026-09-27T23:51:23Z","commit_sha":"372d25b94e137b39e0ece7f8d3e5aaa18daf4b6c","commit_message":"CI: real ROM check for fork PRs, gated on maintainer approval (#444)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":70.67262,"total_code":242218,"matched_code":159644,"matched_code_percent":65.909225,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1763,"matched_functions_percent":85.12795,"complete_code":107064,"complete_code_percent":44.201504,"complete_data":0,"complete_data_percent":100,"total_units":526,"complete_units":231}},{"timestamp":"2026-09-27T23:33:26Z","commit_sha":"690e7ba28f62d75198c1e2e250c823f577647a2b","commit_message":"CI: actually compare the ROM, and give fork PRs a real build (#438) (#443)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":70.67262,"total_code":242218,"matched_code":159644,"matched_code_percent":65.909225,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1763,"matched_functions_percent":85.12795,"complete_code":107064,"complete_code_percent":44.201504,"complete_data":0,"complete_data_percent":100,"total_units":526,"complete_units":231}},{"timestamp":"2026-09-27T23:25:41Z","commit_sha":"dea5d9411192f8b3dfbc87215f723fd45c550a4b","commit_message":"Promote 4 NAKED functions to real C (issue #31 retry) (#442)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":70.67262,"total_code":242218,"matched_code":159644,"matched_code_percent":65.909225,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1763,"matched_functions_percent":85.12795,"complete_code":107064,"complete_code_percent":44.201504,"complete_data":0,"complete_data_percent":100,"total_units":526,"complete_units":231}},{"timestamp":"2026-09-27T23:21:17Z","commit_sha":"35680debf7572af26bc80ba52ac2f0d5f9403e83","commit_message":"Match 8 of issue 17 NAKED functions and sub_800AB9C under old_agbcc (#441)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":70.25152,"total_code":242218,"matched_code":158624,"matched_code_percent":65.48811,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1759,"matched_functions_percent":84.934814,"complete_code":106044,"complete_code_percent":43.780396,"complete_data":0,"complete_data_percent":100,"total_units":526,"complete_units":230}},{"timestamp":"2026-09-27T23:15:52Z","commit_sha":"a92ef9f71393bd3024057a2b5968beb9db572925","commit_message":"Promote 18 NAKED functions to real C (issue #12 retry) (#439)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":68.58392,"total_code":242218,"matched_code":154464,"matched_code_percent":63.770653,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1751,"matched_functions_percent":84.54853,"complete_code":102028,"complete_code_percent":42.122383,"complete_data":0,"complete_data_percent":100,"total_units":524,"complete_units":227}},{"timestamp":"2026-09-27T23:11:52Z","commit_sha":"ec4437f06af9be0e367e5b717f3edd4be6aaf240","commit_message":"Promote 11 NAKED functions to real C (issue #9 retry) (#440)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":68.49962,"total_code":242218,"matched_code":154104,"matched_code_percent":63.62203,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1748,"matched_functions_percent":84.40367,"complete_code":105280,"complete_code_percent":43.464977,"complete_data":0,"complete_data_percent":100,"total_units":524,"complete_units":227}},{"timestamp":"2026-09-27T23:06:53Z","commit_sha":"5525ca826bf230b182d0345b25c89c01bcfe4952","commit_message":"Match 18 NAKED game_loop/HUD functions as plain C under old_agbcc (#437)\n\nCo-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>\nCo-authored-by: Alexis Maiquez <decomp-crash-xs@alma.mu>","measures":{"fuzzy_match_percent":67.64471,"total_code":242218,"matched_code":151858,"matched_code_percent":62.694763,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1738,"matched_functions_percent":83.920815,"complete_code":103910,"complete_code_percent":42.89937,"complete_data":0,"complete_data_percent":100,"total_units":525,"complete_units":223}},{"timestamp":"2026-09-27T23:05:26Z","commit_sha":"4234827a93537921d479b29de1c4229b5ef7bf6c","commit_message":"Match the issue #31 text popup spawners as plain C under old_agbcc (33 functions, 22 were NAKED) (#433)\n\nCo-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>\nCo-authored-by: Alexis Maiquez <decomp-crash-xs@alma.mu>","measures":{"fuzzy_match_percent":67.37067,"total_code":242218,"matched_code":151830,"matched_code_percent":62.6832,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1737,"matched_functions_percent":83.87253,"complete_code":102872,"complete_code_percent":42.47083,"complete_data":0,"complete_data_percent":100,"total_units":517,"complete_units":218}},{"timestamp":"2026-09-27T18:02:03Z","commit_sha":"948a72481579e851fc8515378b3afb59ba35ca67","commit_message":"Revert \"Fix build pipeline for pull_requests, baserom.gba is not really needed anymore\"\n\nThis reverts commit f9bc65af9fdfb1bfbf0c9aba5690341e758c77b7.","measures":{"fuzzy_match_percent":67.38058,"total_code":242218,"matched_code":151854,"matched_code_percent":62.69311,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1736,"matched_functions_percent":83.82424,"complete_code":100804,"complete_code_percent":41.617058,"complete_data":0,"complete_data_percent":100,"total_units":542,"complete_units":226}},{"timestamp":"2026-09-27T16:36:05Z","commit_sha":"a1dca0ba98833c7b8537e4f1de5a0f1d0efad626","commit_message":"Promote 21 NAKED functions to real C (issue #55 retry) (#436)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":67.38058,"total_code":242218,"matched_code":151854,"matched_code_percent":62.69311,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1736,"matched_functions_percent":83.82424,"complete_code":100804,"complete_code_percent":41.617058,"complete_data":0,"complete_data_percent":100,"total_units":542,"complete_units":226}},{"timestamp":"2026-09-27T16:06:48Z","commit_sha":"f7ec3e62ac8155a074df4efc9d704bb8b94faf52","commit_message":"Match the last three mid-size raw files: 0x0802AC28, 0x0801EA5C, 0x08022354 (15 functions, all real C) (#435)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":65.77049,"total_code":242218,"matched_code":148228,"matched_code_percent":61.196114,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1717,"matched_functions_percent":82.90681,"complete_code":100804,"complete_code_percent":41.617058,"complete_data":0,"complete_data_percent":100,"total_units":566,"complete_units":226}},{"timestamp":"2026-09-27T15:56:51Z","commit_sha":"79c63dd357de7e87e70decd2e91648a8ce2315ef","commit_message":"Match issue #19's dispatchers under old_agbcc, close two #60 NAKEDs, move #21 to old_agbcc (#434)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":64.26854,"total_code":242218,"matched_code":144590,"matched_code_percent":59.69416,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1702,"matched_functions_percent":82.18252,"complete_code":97166,"complete_code_percent":40.115105,"complete_data":0,"complete_data_percent":100,"total_units":566,"complete_units":223}},{"timestamp":"2026-09-27T15:42:30Z","commit_sha":"df7dbf773e0a9270ecff157965f51bdcf0f15394","commit_message":"Match the last raw functions of issues #22 and #17 under old_agbcc (#432)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":63.536972,"total_code":242218,"matched_code":142818,"matched_code_percent":58.96259,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1697,"matched_functions_percent":81.94109,"complete_code":95658,"complete_code_percent":39.492523,"complete_data":0,"complete_data_percent":100,"total_units":566,"complete_units":221}},{"timestamp":"2026-09-27T15:24:50Z","commit_sha":"2e5158a29077e0a8efac8d08cfa94875b2dcab88","commit_message":"Promote 21 NAKED functions to real C via ACTOR_PMF_CALL (#431)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":61.536293,"total_code":242218,"matched_code":137972,"matched_code_percent":56.96191,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1683,"matched_functions_percent":81.26509,"complete_code":90812,"complete_code_percent":37.491844,"complete_data":0,"complete_data_percent":100,"total_units":562,"complete_units":216}},{"timestamp":"2026-09-27T15:22:27Z","commit_sha":"39b7eafe24532deedc1d97476a2ca977cca847d0","commit_message":"Match 0x08016048-0x08017524 (26 functions, player input controller) - issue #20, #19 straggler (#430)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":60.49343,"total_code":242218,"matched_code":135446,"matched_code_percent":55.919044,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1662,"matched_functions_percent":80.25108,"complete_code":88976,"complete_code_percent":36.733852,"complete_data":0,"complete_data_percent":100,"total_units":580,"complete_units":212}},{"timestamp":"2026-09-27T11:45:53Z","commit_sha":"57b86684a0ccdf20e30801f65303dc19fa12c3a3","commit_message":"Match 0x08025FC8-0x08026418 (26 functions, BG-scroll layer methods, old_agbcc) - issue #42 (#429)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":58.292976,"total_code":242218,"matched_code":130138,"matched_code_percent":53.727634,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1637,"matched_functions_percent":79.043945,"complete_code":83646,"complete_code_percent":34.533356,"complete_data":0,"complete_data_percent":100,"total_units":580,"complete_units":211}},{"timestamp":"2026-09-27T11:44:46Z","commit_sha":"9240e482efcb1ddf38b14278055cddf03c1441a3","commit_message":"Match 0x0802FBF0-0x08030530 (27 functions, all real C) - issue #57 + #58 stragglers (#428)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":57.85457,"total_code":242218,"matched_code":129240,"matched_code_percent":53.35689,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1614,"matched_functions_percent":77.933365,"complete_code":82564,"complete_code_percent":34.08665,"complete_data":0,"complete_data_percent":100,"total_units":579,"complete_units":210}},{"timestamp":"2026-09-27T11:21:05Z","commit_sha":"dccd676cabec5a8e53208476c60805acfefa2acf","commit_message":"Retry #23/#25/#26 NAKED functions under old_agbcc (3 of 7 closed) (#427)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":56.888588,"total_code":242218,"matched_code":127044,"matched_code_percent":52.450268,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1589,"matched_functions_percent":76.72622,"complete_code":80224,"complete_code_percent":33.12058,"complete_data":0,"complete_data_percent":100,"total_units":578,"complete_units":209}},{"timestamp":"2026-09-27T11:13:17Z","commit_sha":"8a5c02d1a8ff0899d4982bd6e33acffe506e09b0","commit_message":"Match 0x0801DA38-0x0801E578 (41 functions, level-select parts) - issues #28, #29 (#426)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":56.403076,"total_code":242218,"matched_code":125868,"matched_code_percent":51.96476,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1586,"matched_functions_percent":76.58136,"complete_code":79048,"complete_code_percent":32.635063,"complete_data":0,"complete_data_percent":100,"total_units":582,"complete_units":210}},{"timestamp":"2026-09-27T11:08:52Z","commit_sha":"8ff9bfe8166b1ccd36be044ba297cc461940cd90","commit_message":"Match 0x0801CEE0-0x0801DA38 (25 functions, level-select pages) - issue #27 (#425)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":55.226448,"total_code":242218,"matched_code":123018,"matched_code_percent":50.788136,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1545,"matched_functions_percent":74.60165,"complete_code":76198,"complete_code_percent":31.458437,"complete_data":0,"complete_data_percent":100,"total_units":582,"complete_units":208}},{"timestamp":"2026-09-27T10:42:24Z","commit_sha":"98466f6ba1a1139d3ce081e405ee0a2ed0afee44","commit_message":"Match 0x0801A794-0x0801B85C (23 of 25 real C, 2 NAKED) - issue #25 (#424)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":54.030006,"total_code":242218,"matched_code":120120,"matched_code_percent":49.59169,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1520,"matched_functions_percent":73.39449,"complete_code":73300,"complete_code_percent":30.261997,"complete_data":0,"complete_data_percent":100,"total_units":582,"complete_units":207}},{"timestamp":"2026-09-27T10:37:48Z","commit_sha":"c0b97cfdab219887c9f25d5c0b3120f7f1e0d2f7","commit_message":"Match sub_801967C-sub_801A780 (25 functions, graphics) - issue #24 (#423)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":53.229942,"total_code":242218,"matched_code":118280,"matched_code_percent":48.832043,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1498,"matched_functions_percent":72.33221,"complete_code":71362,"complete_code_percent":29.461891,"complete_data":0,"complete_data_percent":100,"total_units":578,"complete_units":204}},{"timestamp":"2026-09-27T10:32:58Z","commit_sha":"bf75096fd6e5a9156b81d223b9baf45af46414a0","commit_message":"Match 0x0801B85C-0x0801CEE0 (25 functions, level-select screen) - issue #26 (#422)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":51.6818,"total_code":242218,"matched_code":114616,"matched_code_percent":47.319355,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1476,"matched_functions_percent":71.26992,"complete_code":67612,"complete_code_percent":27.913698,"complete_data":0,"complete_data_percent":100,"total_units":576,"complete_units":202}},{"timestamp":"2026-09-27T10:24:05Z","commit_sha":"337bc9766fbb7f647b11626611ad8feb5658788a","commit_message":"Match sub_80188D0-sub_8019660 (23 of 25 as C, 2 NAKED, graphics) - issue #23 (#421)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":50.469707,"total_code":242218,"matched_code":111710,"matched_code_percent":46.119614,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1455,"matched_functions_percent":70.25592,"complete_code":64676,"complete_code_percent":26.701567,"complete_data":0,"complete_data_percent":100,"total_units":572,"complete_units":199}},{"timestamp":"2026-09-27T09:36:56Z","commit_sha":"38e270dbe7d0bb572c7142cd10af53163c91a143","commit_message":"Split code_3_2_17_188d0.s into per-issue raw files (#23-#29) (#420)\n\nCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":49.223766,"total_code":242218,"matched_code":108758,"matched_code_percent":44.900875,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1433,"matched_functions_percent":69.19363,"complete_code":61658,"complete_code_percent":25.455582,"complete_data":0,"complete_data_percent":100,"total_units":568,"complete_units":196}},{"timestamp":"2026-09-27T02:04:48Z","commit_sha":"81fcf98d6f055c354672825e1dca6d07caa9373b","commit_message":"Promote 1 of 2 NAKED functions to real C using m-operand scheduling fix (actor_part129) (#419)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":49.223766,"total_code":242218,"matched_code":108758,"matched_code_percent":44.900875,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1433,"matched_functions_percent":69.19363,"complete_code":61658,"complete_code_percent":25.455582,"complete_data":0,"complete_data_percent":100,"total_units":562,"complete_units":196}},{"timestamp":"2026-09-27T02:01:18Z","commit_sha":"1c23a65422e9555ac960547980f6e05dfdcd4d84","commit_message":"Promote 2 of 3 NAKED functions to real C using static-inline CSE technique (#418)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":49.202496,"total_code":242218,"matched_code":108758,"matched_code_percent":44.900875,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1433,"matched_functions_percent":69.19363,"complete_code":61658,"complete_code_percent":25.455582,"complete_data":0,"complete_data_percent":100,"total_units":563,"complete_units":196}},{"timestamp":"2026-09-27T01:42:25Z","commit_sha":"c3f91894df4172fad646557bb7bb3bbe4e5ea7d0","commit_message":"Promote 3 of 3 NAKED functions to real C using goto-shared-tail branch-order fix (actor_part127) (#417)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":49.014236,"total_code":242218,"matched_code":108302,"matched_code_percent":44.712616,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1431,"matched_functions_percent":69.09705,"complete_code":61658,"complete_code_percent":25.455582,"complete_data":0,"complete_data_percent":100,"total_units":562,"complete_units":196}},{"timestamp":"2026-09-27T00:54:09Z","commit_sha":"d523098845f9414e1be27e968250271af5ecc4d3","commit_message":"Match sub_8017524-sub_8017A40 (25 functions, graphics) - issue #21 (#416)\n\nCo-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>","measures":{"fuzzy_match_percent":48.80451,"total_code":242218,"matched_code":107794,"matched_code_percent":44.502888,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1428,"matched_functions_percent":68.952194,"complete_code":61658,"complete_code_percent":25.455582,"complete_data":0,"complete_data_percent":100,"total_units":562,"complete_units":196}},{"timestamp":"2026-09-27T00:52:33Z","commit_sha":"138fda0c30159073f86957b560085cc43c88df1f","commit_message":"Match sub_8026418-sub_8026A14 (19 functions, game_loop) - issue #43 (#415)\n\nCo-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>","measures":{"fuzzy_match_percent":48.271927,"total_code":242218,"matched_code":106504,"matched_code_percent":43.970306,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1403,"matched_functions_percent":67.74505,"complete_code":60368,"complete_code_percent":24.923002,"complete_data":0,"complete_data_percent":100,"total_units":561,"complete_units":195}},{"timestamp":"2026-09-27T00:50:55Z","commit_sha":"d1f2b45a647eefdd0d9457f43e512b8ac8557784","commit_message":"Match sub_8026C90-sub_8026EDC (8 functions, game_loop) - issue #44 (#414)\n\nCo-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>","measures":{"fuzzy_match_percent":48.05826,"total_code":242218,"matched_code":106342,"matched_code_percent":43.903427,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1399,"matched_functions_percent":67.5519,"complete_code":59850,"complete_code_percent":24.709146,"complete_data":0,"complete_data_percent":100,"total_units":559,"complete_units":193}},{"timestamp":"2026-09-26T20:08:48Z","commit_sha":"a0ab18efe0600cc54450674b761dce353c4d24fe","commit_message":"Match sub_80326E4-nullsub_35 (30 functions, 14 NAKED, actor) - issue #59/#60/#61 Phase 2 part 2 (#413)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":48.05826,"total_code":242218,"matched_code":106342,"matched_code_percent":43.903427,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1399,"matched_functions_percent":67.5519,"complete_code":59850,"complete_code_percent":24.709146,"complete_data":0,"complete_data_percent":100,"total_units":558,"complete_units":192}},{"timestamp":"2026-09-26T20:00:52Z","commit_sha":"d42a8cd91dbd762ee2ddfdff606b203f5892caa3","commit_message":"Match sub_8031B0C-sub_8032688 (25 functions, 5 NAKED, actor) - issue #59/#60 Phase 2 part 1 (#412)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":47.669395,"total_code":242218,"matched_code":105522,"matched_code_percent":43.564888,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1384,"matched_functions_percent":66.82762,"complete_code":59850,"complete_code_percent":24.709146,"complete_data":0,"complete_data_percent":100,"total_units":541,"complete_units":192}},{"timestamp":"2026-09-26T19:33:29Z","commit_sha":"9f28fb86f68dcf4846a7913f38ec24d880f96e3b","commit_message":"Match sub_80360C0, transcribe 18 siblings as NAKED (graphics_loading) - 0x08035780-0x08037110 (#411)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":46.59268,"total_code":242218,"matched_code":102914,"matched_code_percent":42.488174,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1359,"matched_functions_percent":65.620476,"complete_code":59850,"complete_code_percent":24.709146,"complete_data":0,"complete_data_percent":100,"total_units":531,"complete_units":192}},{"timestamp":"2026-09-26T19:30:03Z","commit_sha":"3d4de7dcdfdf48fb3150b9e278f0956e7f73bcfb","commit_message":"Match 8/13, transcribe 5 as NAKED (actor) - 0x08034AA4-0x080354E0 gap (#64) (#410)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":46.58112,"total_code":242218,"matched_code":102886,"matched_code_percent":42.476612,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1358,"matched_functions_percent":65.57219,"complete_code":59850,"complete_code_percent":24.709146,"complete_data":0,"complete_data_percent":100,"total_units":513,"complete_units":192}},{"timestamp":"2026-09-26T18:11:04Z","commit_sha":"94f0ff0a397d9811975fd9cb1b648c980c72227e","commit_message":"Match sub_802E0A4/sub_802E484/sub_802E504/sub_802E57C/sub_802E5B0, transcribe 21 siblings as NAKED (actor) - 0x0802E0A4-0x0802F0DC gap (#409)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":46.370567,"total_code":242218,"matched_code":102376,"matched_code_percent":42.26606,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1350,"matched_functions_percent":65.1859,"complete_code":59850,"complete_code_percent":24.709146,"complete_data":0,"complete_data_percent":100,"total_units":501,"complete_units":192}},{"timestamp":"2026-09-26T17:54:20Z","commit_sha":"94ac8e0bb0039f7cf5e96b8aad0de72271266a95","commit_message":"Match sub_802BB4C, transcribe 10 siblings as NAKED (actor) - 0x0802B364-0x0802BC68 gap (#408)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":46.26818,"total_code":242218,"matched_code":102128,"matched_code_percent":42.16367,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1345,"matched_functions_percent":64.94447,"complete_code":59850,"complete_code_percent":24.709146,"complete_data":0,"complete_data_percent":100,"total_units":477,"complete_units":192}},{"timestamp":"2026-09-26T17:37:13Z","commit_sha":"eb70db56ce74f3c2847f6891bad266c4e2ab4672","commit_message":"Match sub_802CDE4-sub_802D2DC (12 functions, actor) - 0x0802CC9C-0x0802D3A8 gap (#407)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":46.205425,"total_code":242218,"matched_code":101976,"matched_code_percent":42.100918,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1344,"matched_functions_percent":64.89619,"complete_code":59850,"complete_code_percent":24.709146,"complete_data":0,"complete_data_percent":100,"total_units":467,"complete_units":192}},{"timestamp":"2026-09-26T01:44:54Z","commit_sha":"372d461a8bb2ef4505e6c27bbd2707edea62ac58","commit_message":"Match sub_8031784-sub_8031A64 (9 functions, 6 NAKED, actor) - issue #59 Phase 1 (#406)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":45.596058,"total_code":242218,"matched_code":100500,"matched_code_percent":41.49155,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1332,"matched_functions_percent":64.31676,"complete_code":59850,"complete_code_percent":24.709146,"complete_data":0,"complete_data_percent":100,"total_units":466,"complete_units":192}},{"timestamp":"2026-09-25T23:27:21Z","commit_sha":"ef0ecdeab10a8b313635a5ea473b3fed56760dda","commit_message":"Match sub_8020B0C, transcribe 12 siblings as NAKED (asm/code_3_2_17_1feec.s) - issue #31 (#405)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":45.52092,"total_code":242218,"matched_code":100318,"matched_code_percent":41.41641,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1323,"matched_functions_percent":63.882183,"complete_code":59668,"complete_code_percent":24.634008,"complete_data":0,"complete_data_percent":100,"total_units":455,"complete_units":186}},{"timestamp":"2026-09-25T22:54:48Z","commit_sha":"c91cc280aad6c28e14b6e3dc26883b0752231538","commit_message":"Match sub_8024810-sub_8024E24 (25 functions, game_loop) - issue #39 (#404)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":43.872818,"total_code":242218,"matched_code":96326,"matched_code_percent":39.768307,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1310,"matched_functions_percent":63.254463,"complete_code":55676,"complete_code_percent":22.985905,"complete_data":0,"complete_data_percent":100,"total_units":443,"complete_units":173}},{"timestamp":"2026-09-25T22:18:21Z","commit_sha":"9863bf3ea92e7f4bc28dfc0988560ad0914d3845","commit_message":"Match sub_80231CC-sub_8023484 (49 functions, game_loop) - issues #35/#36 (#403)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":43.212254,"total_code":242218,"matched_code":94726,"matched_code_percent":39.107746,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1285,"matched_functions_percent":62.04732,"complete_code":55676,"complete_code_percent":22.985905,"complete_data":0,"complete_data_percent":100,"total_units":443,"complete_units":173}},{"timestamp":"2026-09-25T21:45:08Z","commit_sha":"98c3794f6c83d85683f88820ee66755edd6a71ab","commit_message":"Transcribe sub_8023A1C as NAKED, closing the level-lifecycle state machine (issue #37) (#402)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":42.901005,"total_code":242218,"matched_code":94070,"matched_code_percent":38.836914,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1237,"matched_functions_percent":59.7296,"complete_code":55676,"complete_code_percent":22.985905,"complete_data":0,"complete_data_percent":100,"total_units":444,"complete_units":173}},{"timestamp":"2026-09-25T21:24:26Z","commit_sha":"77b7a0cd6eb2e00dd19195bfef1e6fd66b880896","commit_message":"Transcribe UpdateGameFrame as NAKED, closing the UpdateGameFrame-MainLoop cluster's last big raw piece (issue #34) (#401)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":42.27347,"total_code":242218,"matched_code":92550,"matched_code_percent":38.20938,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1236,"matched_functions_percent":59.681313,"complete_code":54156,"complete_code_percent":22.358372,"complete_data":0,"complete_data_percent":100,"total_units":444,"complete_units":172}},{"timestamp":"2026-09-25T21:01:03Z","commit_sha":"c7595b163c042bc84ec04426f6ea511fe1698a0a","commit_message":"Transcribe sub_8017AB0 as NAKED, closing its 3-state dispatch (issue #22) (#400)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":41.606304,"total_code":242218,"matched_code":90934,"matched_code_percent":37.542213,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1235,"matched_functions_percent":59.63303,"complete_code":54156,"complete_code_percent":22.358372,"complete_data":0,"complete_data_percent":100,"total_units":444,"complete_units":172}},{"timestamp":"2026-09-25T20:34:42Z","commit_sha":"a51d57e1eb39e1c06ba88c71d69c46fba61b3671","commit_message":"Park sub_8012FBC/sub_8013228/sub_80134B8/sub_80138E8/sub_8013994 as NAKED (issue #17, actor) (#399)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":41.606304,"total_code":242218,"matched_code":90934,"matched_code_percent":37.542213,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1235,"matched_functions_percent":59.63303,"complete_code":54156,"complete_code_percent":22.358372,"complete_data":0,"complete_data_percent":100,"total_units":444,"complete_units":172}},{"timestamp":"2026-09-25T16:03:21Z","commit_sha":"0b19f5ddea20a57b48c2b38d282bedb5ebbf687f","commit_message":"Match sub_8010E34/sub_8010EAC/sub_8010F8C/sub_8011114/sub_80111B8, closing the entire sub_8010D54 chunk (issue #12/#14) (#398)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":41.606304,"total_code":242218,"matched_code":90934,"matched_code_percent":37.542213,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1235,"matched_functions_percent":59.63303,"complete_code":54156,"complete_code_percent":22.358372,"complete_data":0,"complete_data_percent":100,"total_units":443,"complete_units":172}},{"timestamp":"2026-09-25T15:40:02Z","commit_sha":"43b4d6a03e1d2c65d867f979dfd23f4b7df7a733","commit_message":"Match sub_8010E14/sub_8010E2C and sub_8011248-sub_8011390 (issue #12/#14 Phase 2) (#397)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":41.17699,"total_code":242218,"matched_code":90282,"matched_code_percent":37.273033,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1231,"matched_functions_percent":59.439884,"complete_code":53114,"complete_code_percent":21.92818,"complete_data":0,"complete_data_percent":100,"total_units":443,"complete_units":171}},{"timestamp":"2026-09-25T15:18:15Z","commit_sha":"931937e8e06ea7c565dc055cb08c0e72c671a376","commit_message":"Match sub_8011448/sub_8011548/sub_801173C/sub_8011870/sub_801191C/sub_801192C (#396)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":40.958237,"total_code":242218,"matched_code":89872,"matched_code_percent":37.103767,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1219,"matched_functions_percent":58.86045,"complete_code":52582,"complete_code_percent":21.708544,"complete_data":0,"complete_data_percent":100,"total_units":442,"complete_units":170}},{"timestamp":"2026-09-25T14:38:38Z","commit_sha":"d8556d7f09480a6dcf12c2b62cf4b8a36556535f","commit_message":"Match sub_80104E4 as NAKED, closing issue #13's state dispatcher (#395)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":40.39186,"total_code":242218,"matched_code":88620,"matched_code_percent":36.586876,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1214,"matched_functions_percent":58.619022,"complete_code":51208,"complete_code_percent":21.141287,"complete_data":0,"complete_data_percent":100,"total_units":441,"complete_units":169}},{"timestamp":"2026-09-25T14:26:39Z","commit_sha":"0906acf7f6005e06650f6e371e2bf305fd108d0b","commit_message":"Match sub_8010D54 (physics/collision apply-commit step), Phase 1 map for the next 24-fn chunk (#394)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":40.226723,"total_code":242218,"matched_code":88220,"matched_code_percent":36.421738,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1213,"matched_functions_percent":58.570736,"complete_code":50808,"complete_code_percent":20.976145,"complete_data":0,"complete_data_percent":100,"total_units":441,"complete_units":168}},{"timestamp":"2026-09-25T14:01:24Z","commit_sha":"e46fb1115d58f69a00b1a7bde9cd6d84af6c12a5","commit_message":"Match sub_800FF0C as NAKED, closing issue #13's entity-constructor dispatcher (#393)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":40.149105,"total_code":242218,"matched_code":88220,"matched_code_percent":36.421738,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1213,"matched_functions_percent":58.570736,"complete_code":50618,"complete_code_percent":20.897705,"complete_data":0,"complete_data_percent":100,"total_units":440,"complete_units":167}},{"timestamp":"2026-09-25T13:36:37Z","commit_sha":"f2e1ca1456d8f3227e0bf461b69140ada1304589","commit_message":"Match sub_800E560/620/6B0/7A8/888/EAFC/ED08/EDBC (issue #12 Phase 2, lower half) (#392)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":39.572765,"total_code":242218,"matched_code":86824,"matched_code_percent":35.845394,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1212,"matched_functions_percent":58.52245,"complete_code":49222,"complete_code_percent":20.321363,"complete_data":0,"complete_data_percent":100,"total_units":440,"complete_units":166}},{"timestamp":"2026-09-25T13:04:52Z","commit_sha":"e9bdaeb5a6898332e7ef3a950fb39e6c6d0d2c00","commit_message":"Match sub_800EEF0-sub_800F990 as NAKED (issue #12 Phase 2, higher half) (#391)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":38.563755,"total_code":242218,"matched_code":84380,"matched_code_percent":34.836388,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1204,"matched_functions_percent":58.136166,"complete_code":46778,"complete_code_percent":19.312355,"complete_data":0,"complete_data_percent":100,"total_units":440,"complete_units":165}},{"timestamp":"2026-09-25T12:44:50Z","commit_sha":"413bca65871c153d0be84614369ad7b557d485c9","commit_message":"Match sub_0800D18C/sub_800E08C as NAKED (issue #12 Phase 1) (#390)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":37.138668,"total_code":242218,"matched_code":81084,"matched_code_percent":33.475628,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1193,"matched_functions_percent":57.605022,"complete_code":43324,"complete_code_percent":17.886368,"complete_data":0,"complete_data_percent":100,"total_units":439,"complete_units":164}},{"timestamp":"2026-09-25T12:25:37Z","commit_sha":"f25cb5f8041b97a76264d9c406c0debabea369f3","commit_message":"Match all 19 functions in asm/code_3_2_17_ca04.s, closing the small gap in the 0x0800B8DC-0x0800D040 cluster (issue #9/#10) (#389)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":35.127262,"total_code":242218,"matched_code":76212,"matched_code_percent":31.464218,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1191,"matched_functions_percent":57.50845,"complete_code":38452,"complete_code_percent":15.874955,"complete_data":0,"complete_data_percent":100,"total_units":439,"complete_units":163}},{"timestamp":"2026-09-25T10:10:35Z","commit_sha":"088d3a595aba6562370fc0f27f23c5576467c26e","commit_message":"Match sub_800C6A8/sub_800C860/sub_800C87C/sub_800C898, the menu_ui dialog dispatcher and accessor triple (issue #9/#10) (#388)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":34.9407,"total_code":242218,"matched_code":75842,"matched_code_percent":31.311464,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1173,"matched_functions_percent":56.6393,"complete_code":38452,"complete_code_percent":15.874955,"complete_data":0,"complete_data_percent":100,"total_units":439,"complete_units":163}},{"timestamp":"2026-09-25T10:02:50Z","commit_sha":"dd827381a2501626f917e2029012834e54036090","commit_message":"Match sub_800CBF4/nullsub_15/nullsub_3/sub_800CCCC/sub_800CCE0, closing the 0x0800B8DC-0x0800D040 cluster (issue #9/#10) (#387)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":34.72932,"total_code":242218,"matched_code":75330,"matched_code_percent":31.100082,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1169,"matched_functions_percent":56.44616,"complete_code":37940,"complete_code_percent":15.663576,"complete_data":0,"complete_data_percent":100,"total_units":439,"complete_units":162}},{"timestamp":"2026-09-25T09:57:34Z","commit_sha":"812520171f362707da4b1240fb78349c2927a3a7","commit_message":"Match sub_800BFA8 as real C, closing out asm/code_3_2_17_bfa8.s (issue #9/#10) (#386)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":34.62033,"total_code":242218,"matched_code":75066,"matched_code_percent":30.991089,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1164,"matched_functions_percent":56.20473,"complete_code":37676,"complete_code_percent":15.554583,"complete_data":0,"complete_data_percent":100,"total_units":439,"complete_units":161}},{"timestamp":"2026-09-25T08:30:26Z","commit_sha":"e36e58b0b756d2ee8eaec1c8758717f9471b69c7","commit_message":"Close sub_800C074/sub_800C244/sub_800C40C/sub_800C5D4 as NAKED, the cluster's four self+0x68 dispatchers (issue #9/#10) (#385)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":34.536106,"total_code":242218,"matched_code":74862,"matched_code_percent":30.906868,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1163,"matched_functions_percent":56.156445,"complete_code":37676,"complete_code_percent":15.554583,"complete_data":0,"complete_data_percent":100,"total_units":439,"complete_units":161}},{"timestamp":"2026-09-25T08:18:08Z","commit_sha":"ffde58024407be7d3b344b8ccb94efae54878e3b","commit_message":"Match sub_800C18C/C1E8/C314/C8F8/C940/C97C/C9C8/CBD4 (issue #9/#10) (#384)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":34.059677,"total_code":242218,"matched_code":73708,"matched_code_percent":30.430439,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1159,"matched_functions_percent":55.963303,"complete_code":36522,"complete_code_percent":15.078153,"complete_data":0,"complete_data_percent":100,"total_units":437,"complete_units":158}},{"timestamp":"2026-09-25T07:37:05Z","commit_sha":"b67f5c1b95d2587037c4799704c483605c319914","commit_message":"Match sub_800C8AC/sub_800C8BC/sub_800C8CC as real C, the cluster's shared trigger primitives (issue #9/#10) (#383)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":33.75912,"total_code":242218,"matched_code":72980,"matched_code_percent":30.129883,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1151,"matched_functions_percent":55.577015,"complete_code":35794,"complete_code_percent":14.777597,"complete_data":0,"complete_data_percent":100,"total_units":430,"complete_units":154}},{"timestamp":"2026-09-25T07:16:43Z","commit_sha":"8c4d57ad17bee15d8b710ce30849085bf79e46b3","commit_message":"Match sub_800B8DC/sub_800BD48 as NAKED, mapping the 0x0800B8DC-0x0800D040 cluster (issue #9/#10) (#382)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":33.728573,"total_code":242218,"matched_code":72906,"matched_code_percent":30.099333,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1148,"matched_functions_percent":55.43216,"complete_code":35720,"complete_code_percent":14.7470455,"complete_data":0,"complete_data_percent":100,"total_units":428,"complete_units":153}},{"timestamp":"2026-09-25T07:00:06Z","commit_sha":"ec50571349f23322969d05c9332999dd7b02c33b","commit_message":"Close sub_800AFF4 as NAKED, the \"dizzy stars\" companion updater (issue #9/#10) (#381)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":33.011036,"total_code":242218,"matched_code":71168,"matched_code_percent":29.381796,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1146,"matched_functions_percent":55.335587,"complete_code":33982,"complete_code_percent":14.0295105,"complete_data":0,"complete_data_percent":100,"total_units":427,"complete_units":152}},{"timestamp":"2026-09-25T05:45:36Z","commit_sha":"0a655852e4428d330bfeee8f01ca0cb8ed9199c3","commit_message":"Close sub_8026A18/sub_8026AE8 as NAKED, completing sub_8026628's collision-resolver cluster (issue #9/#10/#41) (#380)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":32.748463,"total_code":242218,"matched_code":70532,"matched_code_percent":29.119223,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1145,"matched_functions_percent":55.2873,"complete_code":33346,"complete_code_percent":13.766937,"complete_data":0,"complete_data_percent":100,"total_units":426,"complete_units":151}},{"timestamp":"2026-09-25T05:24:56Z","commit_sha":"ebad44d279fea6ddd5a5278e309559a468ffead8","commit_message":"Match sub_8026BF8/sub_8026C3C as real C, closing the last two graphics/game_loop callees (issue #9/#10) (#379)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":32.748463,"total_code":242218,"matched_code":70532,"matched_code_percent":29.119223,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1145,"matched_functions_percent":55.2873,"complete_code":33346,"complete_code_percent":13.766937,"complete_data":0,"complete_data_percent":100,"total_units":425,"complete_units":150}},{"timestamp":"2026-09-25T04:58:01Z","commit_sha":"d26eb50296e71bdbfc6f00bf6421a410080f6fb3","commit_message":"Match sub_8026BC0 as real C, closing a cross-referenced gap (issue #9/#10) (#378)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":32.748463,"total_code":242218,"matched_code":70532,"matched_code_percent":29.119223,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1145,"matched_functions_percent":55.2873,"complete_code":33346,"complete_code_percent":13.766937,"complete_data":0,"complete_data_percent":100,"total_units":424,"complete_units":149}},{"timestamp":"2026-09-25T04:39:16Z","commit_sha":"f39451c484a7c2d60b851742131729005d095c48","commit_message":"Match sub_800A0FC as real C, closing the code_3_2_11.s span (issue #9/#10) (#377)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":32.748463,"total_code":242218,"matched_code":70532,"matched_code_percent":29.119223,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1145,"matched_functions_percent":55.2873,"complete_code":33346,"complete_code_percent":13.766937,"complete_data":0,"complete_data_percent":100,"total_units":423,"complete_units":148}},{"timestamp":"2026-09-25T04:11:29Z","commit_sha":"e4bff7c88efb692e14104b75f2331946902bd3cc","commit_message":"Close sub_800A178/sub_800A420 as NAKED, complete self+0x74 note (graphics, issue #9/#10) (#376)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":32.69727,"total_code":242218,"matched_code":70408,"matched_code_percent":29.06803,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1144,"matched_functions_percent":55.239017,"complete_code":33346,"complete_code_percent":13.766937,"complete_data":0,"complete_data_percent":100,"total_units":423,"complete_units":148}},{"timestamp":"2026-09-25T03:42:59Z","commit_sha":"32f569aaca611c9a6b5324ed119b3d18959b0eef","commit_message":"Match sub_8026628 as real C, closing a cross-referenced gap (issue #9/#10/#41) (#375)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":32.69727,"total_code":242218,"matched_code":70408,"matched_code_percent":29.06803,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1144,"matched_functions_percent":55.239017,"complete_code":33346,"complete_code_percent":13.766937,"complete_data":0,"complete_data_percent":100,"total_units":422,"complete_units":148}},{"timestamp":"2026-09-25T03:20:48Z","commit_sha":"3fa6216e3eb672fc73349f24ef9665168d293b6e","commit_message":"Match sub_800CEAC/sub_800CF70 as NAKED, close graphics->game_loop gap (issue #9/#10) (#374)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":31.780739,"total_code":242218,"matched_code":68188,"matched_code_percent":28.1515,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1117,"matched_functions_percent":53.935295,"complete_code":31126,"complete_code_percent":12.850407,"complete_data":0,"complete_data_percent":100,"total_units":421,"complete_units":147}},{"timestamp":"2026-09-25T03:00:15Z","commit_sha":"69a33ab24ab1a8fb31a9e9051f3dd1419ac5bf02","commit_message":"Close sub_800CD00 as NAKED, narrow sub_800AAEC's list-walk gap (graphics, issue #9/#10) (#373)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":31.614773,"total_code":242218,"matched_code":67786,"matched_code_percent":27.985535,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1115,"matched_functions_percent":53.838722,"complete_code":30724,"complete_code_percent":12.684441,"complete_data":0,"complete_data_percent":100,"total_units":421,"complete_units":146}},{"timestamp":"2026-09-25T02:07:09Z","commit_sha":"b7cc97457c7460336f6203967911371ec0424e99","commit_message":"Keep near-miss real-C reconstructions of sub_8020F7C/sub_802107C/sub_802117C in-tree (graphics, issue #31) (#372)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":31.367405,"total_code":242218,"matched_code":67786,"matched_code_percent":27.985535,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1115,"matched_functions_percent":53.838722,"complete_code":30122,"complete_code_percent":12.4359045,"complete_data":0,"complete_data_percent":100,"total_units":419,"complete_units":144}},{"timestamp":"2026-09-25T01:40:33Z","commit_sha":"9368955bb620f48593f7b6c8e3ef62d74a45a770","commit_message":"Match sub_800FDC8 as real C, closing the 4-octant Bresenham line-stepper (game_loop, issue #13) (#371)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":31.367405,"total_code":242218,"matched_code":67786,"matched_code_percent":27.985535,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1115,"matched_functions_percent":53.838722,"complete_code":30122,"complete_code_percent":12.4359045,"complete_data":0,"complete_data_percent":100,"total_units":419,"complete_units":144}},{"timestamp":"2026-09-25T01:08:37Z","commit_sha":"64ce8782c58404552a691c192beaf25763586814","commit_message":"Keep a near-miss real-C reconstruction of sub_8020E84 in-tree (graphics, issue #31) (#370)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":31.271624,"total_code":242218,"matched_code":67554,"matched_code_percent":27.889751,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1114,"matched_functions_percent":53.79044,"complete_code":29890,"complete_code_percent":12.340123,"complete_data":0,"complete_data_percent":100,"total_units":419,"complete_units":143}},{"timestamp":"2026-09-25T01:03:15Z","commit_sha":"b071a06bbb7ac41540818ce0b69d8a57fa0d0c19","commit_message":"Match sub_803985C as real C, narrow sub_8039F30 residual (audio, issue #68) (#369)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":31.271624,"total_code":242218,"matched_code":67554,"matched_code_percent":27.889751,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1114,"matched_functions_percent":53.79044,"complete_code":29890,"complete_code_percent":12.340123,"complete_data":0,"complete_data_percent":100,"total_units":419,"complete_units":143}},{"timestamp":"2026-09-25T00:49:39Z","commit_sha":"ff198be69ecad2de5519ab2dda3bc794f9c3a363","commit_message":"Narrow (but don't close) LoadBg2Background's r7 prologue gap - issue #65 (#368)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":31.218779,"total_code":242218,"matched_code":67426,"matched_code_percent":27.836906,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1113,"matched_functions_percent":53.742153,"complete_code":29762,"complete_code_percent":12.287278,"complete_data":0,"complete_data_percent":100,"total_units":419,"complete_units":142}},{"timestamp":"2026-09-25T00:21:33Z","commit_sha":"32f286a0bc2acc9cdfa66a5352e58ab3c961f6be","commit_message":"Match/park sub_801EF0C-sub_801FCB4 as real C / NAKED (graphics, issue #31) (#367)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":31.218779,"total_code":242218,"matched_code":67426,"matched_code_percent":27.836906,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1113,"matched_functions_percent":53.742153,"complete_code":29762,"complete_code_percent":12.287278,"complete_data":0,"complete_data_percent":100,"total_units":419,"complete_units":142}},{"timestamp":"2026-09-25T00:05:29Z","commit_sha":"f6d80f0fc52f11657d3689c305529287313c4855","commit_message":"Match sub_803AA08 as real C (system) - issue #69 (#366)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.64664,"total_code":242218,"matched_code":63618,"matched_code_percent":26.264769,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1101,"matched_functions_percent":53.162724,"complete_code":29762,"complete_code_percent":12.287278,"complete_data":0,"complete_data_percent":100,"total_units":407,"complete_units":142}},{"timestamp":"2026-09-24T23:52:35Z","commit_sha":"7241f95c9a84f3fcce5d6a979d82641c235e3fd9","commit_message":"Match sub_80157C4 as real C (actor) - closes epilogue register residual (#365)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.590492,"total_code":242218,"matched_code":63482,"matched_code_percent":26.208622,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1100,"matched_functions_percent":53.114437,"complete_code":29762,"complete_code_percent":12.287278,"complete_data":0,"complete_data_percent":100,"total_units":408,"complete_units":142}},{"timestamp":"2026-09-24T23:46:33Z","commit_sha":"64faf5396b055f7c3981a9e56c654c1a8a57861e","commit_message":"Narrow the r7-pin-hazard gap on sub_8007B00/sub_800891C/sub_8008A40 (graphics) (#364)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.539299,"total_code":242218,"matched_code":63358,"matched_code_percent":26.15743,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1099,"matched_functions_percent":53.06615,"complete_code":29762,"complete_code_percent":12.287278,"complete_data":0,"complete_data_percent":100,"total_units":409,"complete_units":142}},{"timestamp":"2026-09-24T22:53:23Z","commit_sha":"d9320d71a6961f1e112f9e49dc15c61527f35709","commit_message":"Match sub_8008188/sub_8008200/sub_8008278/sub_80083B8 as real C (graphics) (#363)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.539299,"total_code":242218,"matched_code":63358,"matched_code_percent":26.15743,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1099,"matched_functions_percent":53.06615,"complete_code":29762,"complete_code_percent":12.287278,"complete_data":0,"complete_data_percent":100,"total_units":409,"complete_units":142}},{"timestamp":"2026-09-24T22:08:21Z","commit_sha":"892b8d7f1866911620296ff5c6daf5e03940708d","commit_message":"Match sub_8008770 as real C (graphics) - empty asm barrier for return-value truncation (#362)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.350214,"total_code":242218,"matched_code":62900,"matched_code_percent":25.968344,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1095,"matched_functions_percent":52.87301,"complete_code":29556,"complete_code_percent":12.20223,"complete_data":0,"complete_data_percent":100,"total_units":411,"complete_units":143}},{"timestamp":"2026-09-24T21:41:08Z","commit_sha":"5a7118b35db7cd4e2b2491e11ec85c1b6c6e25ba","commit_message":"Match sub_8009D5C as real C (graphics) - mode-3 branch shape via block layout (#361)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.338654,"total_code":242218,"matched_code":62872,"matched_code_percent":25.956783,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1094,"matched_functions_percent":52.824722,"complete_code":29528,"complete_code_percent":12.190671,"complete_data":0,"complete_data_percent":100,"total_units":412,"complete_units":143}},{"timestamp":"2026-09-24T21:36:36Z","commit_sha":"59d1c230a9814fb529c313e91542194afc6f872e","commit_message":"Document further sub_803A03C matching attempts (still 81.3%, no regression) (#360)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.322714,"total_code":242218,"matched_code":62720,"matched_code_percent":25.894028,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1093,"matched_functions_percent":52.77644,"complete_code":29528,"complete_code_percent":12.190671,"complete_data":0,"complete_data_percent":100,"total_units":412,"complete_units":143}},{"timestamp":"2026-09-24T21:24:27Z","commit_sha":"6b8af33b80eaf4923a831d70ac3aae040dce51cd","commit_message":"Document ruled-out follow-ups for sub_8039AA4's residual gap (#359)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.322714,"total_code":242218,"matched_code":62720,"matched_code_percent":25.894028,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1093,"matched_functions_percent":52.77644,"complete_code":29528,"complete_code_percent":12.190671,"complete_data":0,"complete_data_percent":100,"total_units":412,"complete_units":143}},{"timestamp":"2026-09-24T14:29:46Z","commit_sha":"5d1d6699ea03e380f3e80f155293edbe4bfe4eda","commit_message":"Remove stale sub_800944C draft left in actor_part11.c (#358)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.322714,"total_code":242218,"matched_code":62720,"matched_code_percent":25.894028,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1093,"matched_functions_percent":52.77644,"complete_code":29528,"complete_code_percent":12.190671,"complete_data":0,"complete_data_percent":100,"total_units":412,"complete_units":143}},{"timestamp":"2026-09-24T14:21:44Z","commit_sha":"11ee34a7941d13d8281f72f8c36b029ad7bb72f7","commit_message":"Match sub_8008F20/sub_8009914 as NAKED transcriptions (graphics) (#355)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.322714,"total_code":242218,"matched_code":62720,"matched_code_percent":25.894028,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1093,"matched_functions_percent":52.77644,"complete_code":29528,"complete_code_percent":12.190671,"complete_data":0,"complete_data_percent":100,"total_units":412,"complete_units":143}},{"timestamp":"2026-09-24T14:07:29Z","commit_sha":"fdded67591e46221d29182e8c5b3455eccbafc24","commit_message":"Match sub_800944C as real C (graphics, spatial-hash-grid box filter) (#357)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.398611,"total_code":242218,"matched_code":62720,"matched_code_percent":25.894028,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1093,"matched_functions_percent":52.77644,"complete_code":29528,"complete_code_percent":12.190671,"complete_data":0,"complete_data_percent":100,"total_units":410,"complete_units":143}},{"timestamp":"2026-09-24T13:56:42Z","commit_sha":"4fc39ef58af2d9f89afe978a2a03f7e3361aa97f","commit_message":"Match sub_8009150 as real C (graphics) - defeat loop-invariant hoist (#356)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.30861,"total_code":242218,"matched_code":62502,"matched_code_percent":25.804028,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1092,"matched_functions_percent":52.728153,"complete_code":29528,"complete_code_percent":12.190671,"complete_data":0,"complete_data_percent":100,"total_units":409,"complete_units":143}},{"timestamp":"2026-09-24T13:41:47Z","commit_sha":"99894a60cfd3a065bc01f4c8996945df19fe9899","commit_message":"Match sub_8009528 as NAKED transcription (graphics) (#354)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.25494,"total_code":242218,"matched_code":62372,"matched_code_percent":25.750357,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1091,"matched_functions_percent":52.679867,"complete_code":29398,"complete_code_percent":12.137,"complete_data":0,"complete_data_percent":100,"total_units":408,"complete_units":142}},{"timestamp":"2026-09-24T09:02:15Z","commit_sha":"090ce02b4e0ae683a7d10dc95ab53f1b482584dc","commit_message":"Improve sub_8000EE4 NON_MATCHING reconstruction: fix default-escape control-flow gap (graphics) (#353)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.25494,"total_code":242218,"matched_code":62372,"matched_code_percent":25.750357,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1091,"matched_functions_percent":52.679867,"complete_code":29398,"complete_code_percent":12.137,"complete_data":0,"complete_data_percent":100,"total_units":407,"complete_units":142}},{"timestamp":"2026-09-24T08:55:32Z","commit_sha":"0d1ae9b4c1db501d8412a66be908f42bfd4ce2e9","commit_message":"Match sub_8010B6C as NAKED transcription (game_loop, issue #14) (#352)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.25494,"total_code":242218,"matched_code":62372,"matched_code_percent":25.750357,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1091,"matched_functions_percent":52.679867,"complete_code":29398,"complete_code_percent":12.137,"complete_data":0,"complete_data_percent":100,"total_units":407,"complete_units":142}},{"timestamp":"2026-09-24T08:51:14Z","commit_sha":"a0c7cac32458e79693e0385ef02d5669c419e318","commit_message":"Match sub_801E990 as real C (graphics_loading, issue #30) (#351)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":29.054295,"total_code":242218,"matched_code":61886,"matched_code_percent":25.549713,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1090,"matched_functions_percent":52.63158,"complete_code":28912,"complete_code_percent":11.936355,"complete_data":0,"complete_data_percent":100,"total_units":407,"complete_units":141}},{"timestamp":"2026-09-24T08:48:31Z","commit_sha":"26116557a8f8e9601c925b110c7d4be8f0788c01","commit_message":"Match sub_8025460 as NAKED transcription (game_loop, issue #40) - closes cluster (#350)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.970072,"total_code":242218,"matched_code":61682,"matched_code_percent":25.465488,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1089,"matched_functions_percent":52.583294,"complete_code":28912,"complete_code_percent":11.936355,"complete_data":0,"complete_data_percent":100,"total_units":407,"complete_units":141}},{"timestamp":"2026-09-24T08:34:37Z","commit_sha":"90c12e1d782a852bbabc35e980dba9491896ef89","commit_message":"Match sub_80096C0 as NAKED transcription (graphics) (#348)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.96514,"total_code":242218,"matched_code":61586,"matched_code_percent":25.425858,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1088,"matched_functions_percent":52.53501,"complete_code":28912,"complete_code_percent":11.936355,"complete_data":0,"complete_data_percent":100,"total_units":407,"complete_units":141}},{"timestamp":"2026-09-24T08:32:06Z","commit_sha":"54ee0783ae38700db832e90530ae977448862d94","commit_message":"Match sub_8025334 as NAKED transcription (game_loop, issue #40) (#349)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.96514,"total_code":242218,"matched_code":61586,"matched_code_percent":25.425858,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1088,"matched_functions_percent":52.53501,"complete_code":28912,"complete_code_percent":11.936355,"complete_data":0,"complete_data_percent":100,"total_units":406,"complete_units":141}},{"timestamp":"2026-09-24T08:23:02Z","commit_sha":"ef454ea4859ed6ab038c298f91e741d1c629eb7b","commit_message":"Match sub_80250BC/sub_8025130/sub_8025228 as NAKED transcriptions (game_loop, issue #40) (#347)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.938717,"total_code":242218,"matched_code":61316,"matched_code_percent":25.314388,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1087,"matched_functions_percent":52.486725,"complete_code":28912,"complete_code_percent":11.936355,"complete_data":0,"complete_data_percent":100,"total_units":406,"complete_units":141}},{"timestamp":"2026-09-24T08:15:58Z","commit_sha":"15e0c34de11c982e425b370e2dac66a898c995bb","commit_message":"Match sub_801E788 as NAKED transcription (graphics_loading, issue #30) (#346)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.870554,"total_code":242218,"matched_code":60684,"matched_code_percent":25.053465,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1084,"matched_functions_percent":52.341866,"complete_code":28912,"complete_code_percent":11.936355,"complete_data":0,"complete_data_percent":100,"total_units":406,"complete_units":141}},{"timestamp":"2026-09-24T07:41:46Z","commit_sha":"03346be60981320178c338b989a0a739803d060e","commit_message":"Match LoadObjSpriteTiles as real C (graphics_loading, issue #65) (#345)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.932758,"total_code":242218,"matched_code":60684,"matched_code_percent":25.053465,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1084,"matched_functions_percent":52.341866,"complete_code":29280,"complete_code_percent":12.088284,"complete_data":0,"complete_data_percent":100,"total_units":406,"complete_units":142}},{"timestamp":"2026-09-24T07:32:32Z","commit_sha":"9ccb201513ce3b785a2d74c14f87cf21ea588885","commit_message":"Improve sub_800A884 NON_MATCHING reconstruction: close 2 of 3 register-choice gaps (actor, issue #9/#10) (#344)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.903275,"total_code":242218,"matched_code":60432,"matched_code_percent":24.949425,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1083,"matched_functions_percent":52.29358,"complete_code":29280,"complete_code_percent":12.088284,"complete_data":0,"complete_data_percent":100,"total_units":406,"complete_units":142}},{"timestamp":"2026-09-24T07:19:26Z","commit_sha":"636df5bfa4d1de89260fb542ee419cb1224eb7b3","commit_message":"Match sub_8024F24 as NAKED transcription (game_loop, issue #40) (#343)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.900232,"total_code":242218,"matched_code":60432,"matched_code_percent":24.949425,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1083,"matched_functions_percent":52.29358,"complete_code":29280,"complete_code_percent":12.088284,"complete_data":0,"complete_data_percent":100,"total_units":406,"complete_units":142}},{"timestamp":"2026-09-24T07:12:04Z","commit_sha":"1c33a7c6efc73b8811660ba52e0d81dd9c571836","commit_message":"Match sub_80099F0 as NAKED transcription (graphics) (#342)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.895195,"total_code":242218,"matched_code":60026,"matched_code_percent":24.781809,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1082,"matched_functions_percent":52.245296,"complete_code":29280,"complete_code_percent":12.088284,"complete_data":0,"complete_data_percent":100,"total_units":406,"complete_units":142}},{"timestamp":"2026-09-24T04:57:16Z","commit_sha":"50ea8ff4700fb9da5ab423e3e94c7a7cf7145b28","commit_message":"Match sub_8022EA8/sub_8022F2C as real C (game_loop, issue #34) (#341)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.886353,"total_code":242218,"matched_code":59962,"matched_code_percent":24.755386,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1081,"matched_functions_percent":52.197002,"complete_code":29280,"complete_code_percent":12.088284,"complete_data":0,"complete_data_percent":100,"total_units":406,"complete_units":142}},{"timestamp":"2026-09-24T04:42:16Z","commit_sha":"19d1c4f8a0741f716f9f79437de3148bd4cf5e94","commit_message":"Match LoadBg2Background as NAKED transcription (graphics_loading, issue #65) (#340)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.847025,"total_code":242218,"matched_code":59640,"matched_code_percent":24.622448,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1079,"matched_functions_percent":52.100433,"complete_code":29280,"complete_code_percent":12.088284,"complete_data":0,"complete_data_percent":100,"total_units":406,"complete_units":142}},{"timestamp":"2026-09-24T04:41:53Z","commit_sha":"779d31610ae0a39480c86dd9773c0474bb3fa2e7","commit_message":"Match sub_803472C as real C (actor, issue #63) (#339)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.907284,"total_code":242218,"matched_code":59640,"matched_code_percent":24.622448,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1079,"matched_functions_percent":52.100433,"complete_code":29280,"complete_code_percent":12.088284,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":142}},{"timestamp":"2026-09-24T04:39:41Z","commit_sha":"96d8f23762d1f311c1455df092330a9e5aecd444","commit_message":"Match LoadGraphicsPackage as NAKED transcription (graphics_loading, issue #30) (#338)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.90477,"total_code":242218,"matched_code":59304,"matched_code_percent":24.48373,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1078,"matched_functions_percent":52.052147,"complete_code":29280,"complete_code_percent":12.088284,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":142}},{"timestamp":"2026-09-24T04:24:31Z","commit_sha":"d85d6f8efb4d3ba0e09f17a7f0992bdb0037b41d","commit_message":"Improve sub_800A884 NON_MATCHING reconstruction (actor, issue #9/#10) (#337)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.97985,"total_code":242218,"matched_code":59304,"matched_code_percent":24.48373,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1078,"matched_functions_percent":52.052147,"complete_code":29478,"complete_code_percent":12.170029,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":143}},{"timestamp":"2026-09-24T04:12:58Z","commit_sha":"3829cc34b24ee85a3b901afb784c21072e0e637b","commit_message":"Match sub_801E688 as NAKED transcription (graphics_loading, issue #30) (#336)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.914171,"total_code":242218,"matched_code":59304,"matched_code_percent":24.48373,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1078,"matched_functions_percent":52.052147,"complete_code":29478,"complete_code_percent":12.170029,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":143}},{"timestamp":"2026-09-24T04:04:40Z","commit_sha":"832460e4f52b3d539f346b73ea1ae60da8f97d7d","commit_message":"Match sub_800A528/sub_800A590 as real C (previously NON_MATCHING) (actor, issue #9) (#335)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.974274,"total_code":242218,"matched_code":59304,"matched_code_percent":24.48373,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1078,"matched_functions_percent":52.052147,"complete_code":29732,"complete_code_percent":12.274893,"complete_data":0,"complete_data_percent":100,"total_units":403,"complete_units":143}},{"timestamp":"2026-09-24T03:58:55Z","commit_sha":"73542dd869ef6ab740704551c8fddf5f2242a6f6","commit_message":"Match sub_80240E4 as NAKED transcription (game_loop, issue #37) (#334)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.963373,"total_code":242218,"matched_code":59104,"matched_code_percent":24.40116,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1076,"matched_functions_percent":51.955574,"complete_code":29932,"complete_code_percent":12.357463,"complete_data":0,"complete_data_percent":100,"total_units":403,"complete_units":144}},{"timestamp":"2026-09-24T02:13:12Z","commit_sha":"9d781ad50d323aef150a150e8f49790ebbb9b27f","commit_message":"Match AllocVramTileBlock as real C (previously NON_MATCHING) (graphics_loading, issue #47) (#333)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.926184,"total_code":242218,"matched_code":58924,"matched_code_percent":24.326845,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1075,"matched_functions_percent":51.907288,"complete_code":29932,"complete_code_percent":12.357463,"complete_data":0,"complete_data_percent":100,"total_units":403,"complete_units":144}},{"timestamp":"2026-09-24T02:03:20Z","commit_sha":"92931088405df1cc4a8eae67fbb65a2f307e372b","commit_message":"Match sub_80236EC as real C (previously NON_MATCHING) (game_loop, issue #37) (#332)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.86343,"total_code":242218,"matched_code":58772,"matched_code_percent":24.264093,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1074,"matched_functions_percent":51.859005,"complete_code":29780,"complete_code_percent":12.29471,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":144}},{"timestamp":"2026-09-24T01:50:24Z","commit_sha":"78a7dc715b99e87690dd1cfa94998184ac746666","commit_message":"Match sub_8034480 as real C (previously NON_MATCHING) (actor, issue #63) (#331)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.840996,"total_code":242218,"matched_code":58696,"matched_code_percent":24.232716,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1073,"matched_functions_percent":51.81072,"complete_code":29780,"complete_code_percent":12.29471,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":144}},{"timestamp":"2026-09-24T01:50:18Z","commit_sha":"47c7e6bbc5117b4f41c8066de7b56957c9d1ffc2","commit_message":"Match sub_8025894 as real C (previously NON_MATCHING) (game_loop, issue #41) (#330)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.830143,"total_code":242218,"matched_code":58696,"matched_code_percent":24.232716,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1073,"matched_functions_percent":51.81072,"complete_code":29780,"complete_code_percent":12.29471,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":144}},{"timestamp":"2026-09-24T01:31:14Z","commit_sha":"f0cccf7453c58f96d25ab5ff9ec3e54dedca8b9d","commit_message":"Match sub_8034058 as real C (previously NON_MATCHING) (actor, issue #63) (#329)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.758307,"total_code":242218,"matched_code":58522,"matched_code_percent":24.16088,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1072,"matched_functions_percent":51.762432,"complete_code":29606,"complete_code_percent":12.222874,"complete_data":0,"complete_data_percent":100,"total_units":405,"complete_units":144}},{"timestamp":"2026-09-24T01:05:29Z","commit_sha":"a289c1e1384eb5159881c7b006c1556c443b6a3d","commit_message":"Match sub_80345B0/sub_8034634 as real C (previously NON_MATCHING) (actor, issue #63) (#327)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.739044,"total_code":242218,"matched_code":58338,"matched_code_percent":24.084915,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1071,"matched_functions_percent":51.714146,"complete_code":29606,"complete_code_percent":12.222874,"complete_data":0,"complete_data_percent":100,"total_units":405,"complete_units":144}},{"timestamp":"2026-09-24T01:04:27Z","commit_sha":"a2f87c67f99ccfb875936bd5c7b9c77be11e87cc","commit_message":"Match sub_802FA04 as real C (previously NON_MATCHING) (actor, issue #56) (#326)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.73391,"total_code":242218,"matched_code":58124,"matched_code_percent":23.996565,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1069,"matched_functions_percent":51.617577,"complete_code":29606,"complete_code_percent":12.222874,"complete_data":0,"complete_data_percent":100,"total_units":405,"complete_units":144}},{"timestamp":"2026-09-24T00:45:44Z","commit_sha":"36a7f4708d757ade49bd60317213666cc6458df8","commit_message":"Match sub_8009DF4 as real C (previously NON_MATCHING) (actor, issue #97) (#325)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.730776,"total_code":242218,"matched_code":58076,"matched_code_percent":23.976748,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1068,"matched_functions_percent":51.56929,"complete_code":29606,"complete_code_percent":12.222874,"complete_data":0,"complete_data_percent":100,"total_units":405,"complete_units":144}},{"timestamp":"2026-09-24T00:29:55Z","commit_sha":"8497b9ef3ad16ab756c9aaed1ba898f55b2d7980","commit_message":"Match sub_800B270 as real C (previously NON_MATCHING) (actor, issue #9) (#324)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.656462,"total_code":242218,"matched_code":57896,"matched_code_percent":23.902435,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1067,"matched_functions_percent":51.521004,"complete_code":29606,"complete_code_percent":12.222874,"complete_data":0,"complete_data_percent":100,"total_units":405,"complete_units":144}},{"timestamp":"2026-09-24T00:21:05Z","commit_sha":"bbe5d3eb32f31b9db504f69e993375056596571c","commit_message":"Match sub_8034374 as real C (previously NON_MATCHING) (actor, issue #63) (#323)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.65621,"total_code":242218,"matched_code":57716,"matched_code_percent":23.828121,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2071,"matched_functions":1066,"matched_functions_percent":51.472717,"complete_code":29606,"complete_code_percent":12.222874,"complete_data":0,"complete_data_percent":100,"total_units":405,"complete_units":144}},{"timestamp":"2026-09-24T00:15:52Z","commit_sha":"fd6e90932e99a4b472b909aeebd9cd783d58cf8d","commit_message":"Match sub_802F338 as real C (previously NON_MATCHING) (actor, issue #56) (#322)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.935122,"total_code":243624,"matched_code":57632,"matched_code_percent":23.656126,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2130,"matched_functions":1090,"matched_functions_percent":51.17371,"complete_code":29438,"complete_code_percent":12.083375,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":144}},{"timestamp":"2026-09-23T23:53:26Z","commit_sha":"465c3e17ae55190cc761c3663df93b1e38447e6c","commit_message":"Match sub_8034314 as real C (previously NON_MATCHING) (actor, issue #63) (#321)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.931124,"total_code":243624,"matched_code":57500,"matched_code_percent":23.601944,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2130,"matched_functions":1089,"matched_functions_percent":51.12676,"complete_code":29570,"complete_code_percent":12.137556,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":145}},{"timestamp":"2026-09-23T23:48:33Z","commit_sha":"5a2264b4ff75c5fc157930c9f360921142dd5c4a","commit_message":"Match sub_8034270 as real C (previously NON_MATCHING) (actor, issue #63) (#320)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.931124,"total_code":243624,"matched_code":57500,"matched_code_percent":23.601944,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2130,"matched_functions":1089,"matched_functions_percent":51.12676,"complete_code":29570,"complete_code_percent":12.137556,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":145}},{"timestamp":"2026-09-23T23:20:34Z","commit_sha":"d50b3a91b7f9118e8250c36cc5216a7a06c04699","commit_message":"Match sub_802C3E8 as real C (previously NON_MATCHING) (actor, issue #52) (#319)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.927607,"total_code":243624,"matched_code":57402,"matched_code_percent":23.561718,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2130,"matched_functions":1088,"matched_functions_percent":51.07981,"complete_code":29570,"complete_code_percent":12.137556,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":145}},{"timestamp":"2026-09-23T23:12:18Z","commit_sha":"45346edac531cd0d04537b725fd63f78e32aee8f","commit_message":"Match sub_803B46C as real C (previously NAKED) (actor, issue #71) (#318)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.922228,"total_code":243624,"matched_code":57402,"matched_code_percent":23.561718,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2130,"matched_functions":1088,"matched_functions_percent":51.07981,"complete_code":29692,"complete_code_percent":12.1876335,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":146}},{"timestamp":"2026-09-23T23:03:57Z","commit_sha":"ad2371618e0a7a31d0a4c76f0f871463d4a0dcce","commit_message":"Match sub_802C2FC as real C (previously NON_MATCHING) (actor, issue #52) (#317)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.682474,"total_code":242788,"matched_code":57320,"matched_code_percent":23.609076,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2105,"matched_functions":1081,"matched_functions_percent":51.35392,"complete_code":29692,"complete_code_percent":12.2296,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":146}},{"timestamp":"2026-09-23T22:54:40Z","commit_sha":"91066d5c316e86c62e36e03a72de078664084d0e","commit_message":"Keep sub_803B46C NAKED, add 88%-matching C reconstruction (actor) (#316)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.669306,"total_code":242788,"matched_code":57170,"matched_code_percent":23.54729,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2105,"matched_functions":1080,"matched_functions_percent":51.306416,"complete_code":29842,"complete_code_percent":12.291382,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":147}},{"timestamp":"2026-09-23T22:46:20Z","commit_sha":"e5dfed35b3cd7db706713d8d99296951d2e663e0","commit_message":"Match sub_8002938 as real C (previously NAKED) (system, issue #4) (#315)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.669306,"total_code":242788,"matched_code":57170,"matched_code_percent":23.54729,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2105,"matched_functions":1080,"matched_functions_percent":51.306416,"complete_code":29842,"complete_code_percent":12.291382,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":147}},{"timestamp":"2026-09-23T22:40:23Z","commit_sha":"dfbc3c82d1ac388aec53b39b79815fd3bdf305e1","commit_message":"Match sub_8002868 as real C (previously NAKED) (system, issue #4) (#314)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.599163,"total_code":242838,"matched_code":57014,"matched_code_percent":23.478205,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2105,"matched_functions":1079,"matched_functions_percent":51.25891,"complete_code":29374,"complete_code_percent":12.09613,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":144}},{"timestamp":"2026-09-23T22:29:30Z","commit_sha":"6da6ef1a52bba889e3679334599ba98824f35d34","commit_message":"Keep sub_80157C4 NAKED, add 99.8%-matching C reconstruction (actor) (#313)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.529049,"total_code":242888,"matched_code":56858,"matched_code_percent":23.409143,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2105,"matched_functions":1078,"matched_functions_percent":51.2114,"complete_code":29374,"complete_code_percent":12.09364,"complete_data":0,"complete_data_percent":100,"total_units":403,"complete_units":144}},{"timestamp":"2026-09-23T22:22:14Z","commit_sha":"91358791ee69c9e4fc38913eacaabe9cc66bef28","commit_message":"Keep sub_801E990 NAKED, add 96.8%-matching C reconstruction (graphics_loading) (#312)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.529049,"total_code":242888,"matched_code":56858,"matched_code_percent":23.409143,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2105,"matched_functions":1078,"matched_functions_percent":51.2114,"complete_code":29374,"complete_code_percent":12.09364,"complete_data":0,"complete_data_percent":100,"total_units":403,"complete_units":144}},{"timestamp":"2026-09-23T22:02:55Z","commit_sha":"6bc680f2ddf976bf8137555e7948752b4eb1b948","commit_message":"Match sub_801E950 as real C (previously NAKED) (graphics_loading, issue #30) (#311)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.529049,"total_code":242888,"matched_code":56858,"matched_code_percent":23.409143,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2105,"matched_functions":1078,"matched_functions_percent":51.2114,"complete_code":29374,"complete_code_percent":12.09364,"complete_data":0,"complete_data_percent":100,"total_units":403,"complete_units":144}},{"timestamp":"2026-09-23T21:56:38Z","commit_sha":"8b64c2cc24dfa74389f7d1c5593a1ce2d73a2ccd","commit_message":"Match sub_8021D04 as real C (previously NAKED) (graphics_loading, issue #33) (#310)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.540821,"total_code":242956,"matched_code":56906,"matched_code_percent":23.422348,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2105,"matched_functions":1077,"matched_functions_percent":51.163895,"complete_code":29422,"complete_code_percent":12.110012,"complete_data":0,"complete_data_percent":100,"total_units":403,"complete_units":143}},{"timestamp":"2026-09-23T21:39:49Z","commit_sha":"35d6a19d549dda905fc257dc1a9e15c5bd523be2","commit_message":"Keep sub_803A03C NAKED, add 81.3%-matching C reconstruction (audio) (#309)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.530376,"total_code":243094,"matched_code":56920,"matched_code_percent":23.41481,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1081,"matched_functions_percent":51.232224,"complete_code":29684,"complete_code_percent":12.210915,"complete_data":0,"complete_data_percent":100,"total_units":403,"complete_units":144}},{"timestamp":"2026-09-23T21:18:09Z","commit_sha":"054cf6ea96488a33f50b827a21f9ec1bdb9a45b7","commit_message":"Keep sub_8039AA4 NAKED, add 99.7%-matching C reconstruction (audio) (#308)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.530376,"total_code":243094,"matched_code":56920,"matched_code_percent":23.41481,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1081,"matched_functions_percent":51.232224,"complete_code":29684,"complete_code_percent":12.210915,"complete_data":0,"complete_data_percent":100,"total_units":403,"complete_units":144}},{"timestamp":"2026-09-23T20:59:29Z","commit_sha":"750958c500d728b479a8f6e9e95378bd9b799742","commit_message":"Match sub_8025D74 as real C (game_loop, previously NAKED) (#307)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.530376,"total_code":243094,"matched_code":56920,"matched_code_percent":23.41481,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1081,"matched_functions_percent":51.232224,"complete_code":29684,"complete_code_percent":12.210915,"complete_data":0,"complete_data_percent":100,"total_units":403,"complete_units":144}},{"timestamp":"2026-09-23T20:46:07Z","commit_sha":"cf4df0bf6a596694d2a6498820fc9a3d6603a90d","commit_message":"Match sub_80259D4 as real C (game_loop, previously NAKED) (#306)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.486197,"total_code":243094,"matched_code":56920,"matched_code_percent":23.41481,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1081,"matched_functions_percent":51.232224,"complete_code":29684,"complete_code_percent":12.210915,"complete_data":0,"complete_data_percent":100,"total_units":404,"complete_units":144}},{"timestamp":"2026-09-23T20:31:07Z","commit_sha":"710bdce8adcee9c79f8db5c3f96990a3d36f0e30","commit_message":"Match sub_8010914/sub_801095C as real C (game_loop, previously NAKED) (#305)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.463984,"total_code":243094,"matched_code":56866,"matched_code_percent":23.392597,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1080,"matched_functions_percent":51.184834,"complete_code":29630,"complete_code_percent":12.188701,"complete_data":0,"complete_data_percent":100,"total_units":405,"complete_units":144}},{"timestamp":"2026-09-23T20:04:27Z","commit_sha":"be7bc85308c52035b1f93122e48259c5597f459e","commit_message":"Match sub_80014A4 as real C (graphics, previously NAKED) (#304)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.404747,"total_code":243094,"matched_code":56722,"matched_code_percent":23.33336,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1078,"matched_functions_percent":51.09005,"complete_code":29486,"complete_code_percent":12.129464,"complete_data":0,"complete_data_percent":100,"total_units":407,"complete_units":144}},{"timestamp":"2026-09-23T19:42:42Z","commit_sha":"e5e1bf232807fcface86fbbe61132b4ab9e7f668","commit_message":"Keep sub_8000EE4 NAKED, add 99.86%-matching C reconstruction (graphics) (#303)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.36032,"total_code":243094,"matched_code":56614,"matched_code_percent":23.288935,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1077,"matched_functions_percent":51.042652,"complete_code":29486,"complete_code_percent":12.129464,"complete_data":0,"complete_data_percent":100,"total_units":408,"complete_units":144}},{"timestamp":"2026-09-23T12:56:17Z","commit_sha":"e610160a952d812107ee95246a119689e8a6ecb2","commit_message":"Match sub_8000CBC as real C (util, previously NAKED) (#302)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.36032,"total_code":243094,"matched_code":56614,"matched_code_percent":23.288935,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1077,"matched_functions_percent":51.042652,"complete_code":29486,"complete_code_percent":12.129464,"complete_data":0,"complete_data_percent":100,"total_units":408,"complete_units":144}},{"timestamp":"2026-09-23T12:12:07Z","commit_sha":"34cb91a241507c33a0b22b6d38371a0e6f90d381","commit_message":"Match sub_8001624 as real C (graphics, previously NAKED) (#301)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.289564,"total_code":243094,"matched_code":56442,"matched_code_percent":23.218178,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1076,"matched_functions_percent":50.995262,"complete_code":29314,"complete_code_percent":12.058709,"complete_data":0,"complete_data_percent":100,"total_units":409,"complete_units":144}},{"timestamp":"2026-09-23T11:57:44Z","commit_sha":"69d354466408f227224c1f55c1f5849c0f3f9d93","commit_message":"Match sub_80010E0 as real C (system, previously NAKED) (#300)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.278048,"total_code":243094,"matched_code":56414,"matched_code_percent":23.20666,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1075,"matched_functions_percent":50.94787,"complete_code":29314,"complete_code_percent":12.058709,"complete_data":0,"complete_data_percent":100,"total_units":410,"complete_units":144}},{"timestamp":"2026-09-23T09:01:43Z","commit_sha":"566d578050cb74d5e4966bb99ce2ee33ac3a05cf","commit_message":"Match sub_8001524 as real C (graphics, previously NAKED) (#299)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.217165,"total_code":243094,"matched_code":56266,"matched_code_percent":23.145779,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1074,"matched_functions_percent":50.90047,"complete_code":29166,"complete_code_percent":11.997828,"complete_data":0,"complete_data_percent":100,"total_units":410,"complete_units":143}},{"timestamp":"2026-09-23T02:09:33Z","commit_sha":"4d5c56013831a6ef75e849b9c1c15448aea5e6df","commit_message":"Match sub_8021388/sub_802155C, park sub_8021280/sub_8021480 as NAKED (issue #31, graphics_loading) (#298)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":28.207293,"total_code":243094,"matched_code":56242,"matched_code_percent":23.135906,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1073,"matched_functions_percent":50.85308,"complete_code":29142,"complete_code_percent":11.987955,"complete_data":0,"complete_data_percent":100,"total_units":411,"complete_units":143}},{"timestamp":"2026-09-23T02:00:38Z","commit_sha":"96bcb5b4b79e5b57411b6f42a28a1cb1e8dd513b","commit_message":"Match sub_8024708, park sub_8024590 as NAKED (issue #38, game_loop) (#297)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":27.989103,"total_code":243074,"matched_code":55706,"matched_code_percent":22.917301,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1071,"matched_functions_percent":50.758297,"complete_code":29142,"complete_code_percent":11.988941,"complete_data":0,"complete_data_percent":100,"total_units":408,"complete_units":143}},{"timestamp":"2026-09-23T01:57:09Z","commit_sha":"7c29343df80a1f3e34cfa175df45ad1a8d5da766","commit_message":"Park sub_80255D4 as NAKED transcription (issue #34, game_loop) (#296)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":27.865685,"total_code":243074,"matched_code":55406,"matched_code_percent":22.793882,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1069,"matched_functions_percent":50.663506,"complete_code":29342,"complete_code_percent":12.071221,"complete_data":0,"complete_data_percent":100,"total_units":410,"complete_units":144}},{"timestamp":"2026-09-22T22:46:35Z","commit_sha":"5dbbeabbe6e6edebebad2999e9f0f0e183c61064","commit_message":"Park sub_801E990 as NAKED transcription (issue #30, graphics_loading) (#295)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":27.865685,"total_code":243074,"matched_code":55406,"matched_code_percent":22.793882,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1069,"matched_functions_percent":50.663506,"complete_code":29342,"complete_code_percent":12.071221,"complete_data":0,"complete_data_percent":100,"total_units":409,"complete_units":144}},{"timestamp":"2026-09-22T22:44:53Z","commit_sha":"5c8f640d1613243e7a61212a947c60627a07cd2f","commit_message":"Match sub_802BC68-sub_802BE80, issue #50's leftover tail (actor) (#294)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":27.865685,"total_code":243074,"matched_code":55406,"matched_code_percent":22.793882,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1069,"matched_functions_percent":50.663506,"complete_code":29342,"complete_code_percent":12.071221,"complete_data":0,"complete_data_percent":100,"total_units":408,"complete_units":144}},{"timestamp":"2026-09-22T22:41:16Z","commit_sha":"3163627bc3044fe9fb24d1775bda3dbefc9f3cb2","commit_message":"Park sub_8039B44/sub_8039E50 as NAKED trampoline pair (issue #68, audio) (#293)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":27.611536,"total_code":243074,"matched_code":54992,"matched_code_percent":22.623562,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1064,"matched_functions_percent":50.426544,"complete_code":29342,"complete_code_percent":12.071221,"complete_data":0,"complete_data_percent":100,"total_units":407,"complete_units":144}},{"timestamp":"2026-09-22T22:18:42Z","commit_sha":"5615ff9c53ec4689151a16b08ed5ae2c528cf8f5","commit_message":"Match/park SetupActorVramPool/InitActorCategory/SelectActorCategory cluster (issues #48/#49, actor) (#292)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":27.611536,"total_code":243074,"matched_code":54992,"matched_code_percent":22.623562,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1064,"matched_functions_percent":50.426544,"complete_code":29342,"complete_code_percent":12.071221,"complete_data":0,"complete_data_percent":100,"total_units":407,"complete_units":144}},{"timestamp":"2026-09-22T21:27:03Z","commit_sha":"0c5bab56fb40468db2ab23e6a70654b9d7affa1b","commit_message":"Match 16 functions, park AllocVramTileBlock as NON_MATCHING (issue #47, graphics_loading) (#291)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":25.409128,"total_code":243074,"matched_code":50736,"matched_code_percent":20.872656,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2110,"matched_functions":1016,"matched_functions_percent":48.15166,"complete_code":26988,"complete_code_percent":11.102792,"complete_data":0,"complete_data_percent":100,"total_units":391,"complete_units":131}},{"timestamp":"2026-09-22T20:55:41Z","commit_sha":"e40a8d3dc5bafd5b05f43981133376f9dc282d1b","commit_message":"Match sub_803472C/sub_803487C (parked), park sub_8034994 as NAKED (issue #63, actor) (#290)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":24.840849,"total_code":243074,"matched_code":49390,"matched_code_percent":20.318914,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2109,"matched_functions":1000,"matched_functions_percent":47.415836,"complete_code":25602,"complete_code_percent":10.532596,"complete_data":0,"complete_data_percent":100,"total_units":389,"complete_units":129}},{"timestamp":"2026-09-19T08:11:51Z","commit_sha":"0637e5be25cd95c5bfd6bd5110423dc81b44b77e","commit_message":"Park sub_8022D50 as NAKED (issue #34, game_loop) (#289)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":24.604307,"total_code":243074,"matched_code":49390,"matched_code_percent":20.318914,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2109,"matched_functions":1000,"matched_functions_percent":47.415836,"complete_code":24986,"complete_code_percent":10.279174,"complete_data":0,"complete_data_percent":100,"total_units":387,"complete_units":127}},{"timestamp":"2026-09-19T07:56:40Z","commit_sha":"007f224597b27013eb200c75c23b4bb8f02eb86d","commit_message":"Match sub_8039214, park sub_80372BC/sub_8037388 as NAKED (issue #67, audio) (#288)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":24.604307,"total_code":243074,"matched_code":49390,"matched_code_percent":20.318914,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2109,"matched_functions":1000,"matched_functions_percent":47.415836,"complete_code":24986,"complete_code_percent":10.279174,"complete_data":0,"complete_data_percent":100,"total_units":387,"complete_units":127}},{"timestamp":"2026-09-19T00:26:10Z","commit_sha":"cd02bb817488a650fea1056aba30ae851ccb0f13","commit_message":"Match 24 functions, park 1 as NAKED (issue #31, graphics_loading) (#287)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":24.532724,"total_code":243074,"matched_code":49216,"matched_code_percent":20.247334,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2109,"matched_functions":999,"matched_functions_percent":47.368423,"complete_code":24812,"complete_code_percent":10.207591,"complete_data":0,"complete_data_percent":100,"total_units":387,"complete_units":126}},{"timestamp":"2026-09-19T00:00:30Z","commit_sha":"b118aa1279d6348c41b0a73762852490441e3e6b","commit_message":"Fix 7 NAKED-parked audio units tracked with a real base_object\n\ntools/report_units.py had base_object set to a real .o path for\nsub_803985C, sub_80398DC, sub_8039AA4, sub_8039F30, sub_803A03C,\nsub_803A158, and sub_803A278 despite each entry's own comment stating\nthey're NAKED transcriptions tracked as parked, not matched. This\nviolated the project's NAKED-is-parked policy (docs/status/audio.md\nalready filed all seven correctly under \"Parked - NAKED asm\ntranscription\", only report_units.py's base_object was wrong) and\nbroke CI: objdiff-cli's report generation step failed with \"Failed to\nfind right side symbol for paired left side symbol\" for every push\nsince these entries landed, because objdiff-cli pairs each unit's\nbuilt object's symbols against expected/code_3.s's ground-truth slice\nand the raw/partially-unlabeled bytes in this cluster don't produce a\nmatching symbol set.\n\nSet all seven to base_object=None, matching every other NAKED entry in\nthis file. Verified locally: full clean `make compare` still prints\n\"La suma coincide\" (no src/*.c or asm/*.s changed, tracking-only fix),\nand `objdiff-cli report generate` now succeeds instead of crashing.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":23.999685,"total_code":243106,"matched_code":47928,"matched_code_percent":19.714857,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":963,"matched_functions_percent":45.92275,"complete_code":24812,"complete_code_percent":10.206247,"complete_data":0,"complete_data_percent":100,"total_units":384,"complete_units":126}},{"timestamp":"2026-09-18T22:51:46Z","commit_sha":"e2143809e332d26c1ab054de508f442e4e76900c","commit_message":"Park sub_801E688/sub_801E788 as NON_MATCHING (issue #30 remainder, graphics_loading) (#282)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":23.472387,"total_code":243106,"matched_code":46688,"matched_code_percent":19.20479,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":958,"matched_functions_percent":45.68431,"complete_code":24690,"complete_code_percent":10.156064,"complete_data":0,"complete_data_percent":100,"total_units":376,"complete_units":125}},{"timestamp":"2026-09-18T22:47:28Z","commit_sha":"40fccee2020c8f9779c9b25929ae9743b9f12e1f","commit_message":"Park sub_8034374/sub_8034480 as real C (issue #63 remainder, actor) (#281)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":23.35053,"total_code":243106,"matched_code":46688,"matched_code_percent":19.20479,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":958,"matched_functions_percent":45.68431,"complete_code":24068,"complete_code_percent":9.9002075,"complete_data":0,"complete_data_percent":100,"total_units":376,"complete_units":124}},{"timestamp":"2026-09-18T19:55:58Z","commit_sha":"90300485b97993c706d2567d8407d1169c80d7b2","commit_message":"Match sub_8037F3C; park 7 functions as NAKED (issues #66/#67, audio->util split) (#280)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":23.129128,"total_code":243106,"matched_code":46688,"matched_code_percent":19.20479,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":958,"matched_functions_percent":45.68431,"complete_code":24068,"complete_code_percent":9.9002075,"complete_data":0,"complete_data_percent":100,"total_units":376,"complete_units":124}},{"timestamp":"2026-09-18T19:53:47Z","commit_sha":"fdface1b4a66039b1e5cc06b796886d67e8bf845","commit_message":"Match sub_8024344/8024640/80246D8/8024790; park sub_8024590/8024708 as NON_MATCHING (issue #38, game_loop) (#279)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":23.088816,"total_code":243106,"matched_code":46590,"matched_code_percent":19.16448,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":957,"matched_functions_percent":45.636623,"complete_code":23970,"complete_code_percent":9.859897,"complete_data":0,"complete_data_percent":100,"total_units":370,"complete_units":123}},{"timestamp":"2026-09-18T19:45:37Z","commit_sha":"085d685f1fb524e8882e66f0859c912c1e070ff9","commit_message":"Match sub_8010480/sub_8010674 (issue #13 remainder, game_loop) (#278)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":22.904533,"total_code":243106,"matched_code":46142,"matched_code_percent":18.980198,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":953,"matched_functions_percent":45.445873,"complete_code":23678,"complete_code_percent":9.739784,"complete_data":0,"complete_data_percent":100,"total_units":369,"complete_units":121}},{"timestamp":"2026-09-18T19:43:58Z","commit_sha":"69f53cd07580dc69908da43a54793f1152ac272a","commit_message":"Park issue #16's final six functions as NAKED transcriptions (actor) (#277)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":22.821442,"total_code":243106,"matched_code":45940,"matched_code_percent":18.897108,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":951,"matched_functions_percent":45.350502,"complete_code":23642,"complete_code_percent":9.724977,"complete_data":0,"complete_data_percent":100,"total_units":367,"complete_units":121}},{"timestamp":"2026-09-18T19:35:52Z","commit_sha":"b9dd0c6189f4ec966ce76b4ffc1141c3e607aa37","commit_message":"Match sub_802F164; park sub_802F7B0/sub_802F8E8/sub_802FA38 as NAKED (issue #56, actor) (#276)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":22.821442,"total_code":243106,"matched_code":45940,"matched_code_percent":18.897108,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":951,"matched_functions_percent":45.350502,"complete_code":23642,"complete_code_percent":9.724977,"complete_data":0,"complete_data_percent":100,"total_units":367,"complete_units":121}},{"timestamp":"2026-09-18T19:31:30Z","commit_sha":"2bbbb0c373d1eb4d6b02682be90aadd5fc5172d9","commit_message":"Park sub_800AB9C as NON_MATCHING (issue #9/#10, graphics) (#275)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":22.628933,"total_code":243106,"matched_code":45472,"matched_code_percent":18.704597,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":950,"matched_functions_percent":45.302814,"complete_code":23776,"complete_code_percent":9.780096,"complete_data":0,"complete_data_percent":100,"total_units":368,"complete_units":122}},{"timestamp":"2026-09-18T18:39:00Z","commit_sha":"f93035eb7eada32b556d432bf4d45e28699f7f42","commit_message":"Match 7 functions, park 4 via NAKED transcription (issue #13, game_loop) (#274)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":22.579252,"total_code":243106,"matched_code":45472,"matched_code_percent":18.704597,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":950,"matched_functions_percent":45.302814,"complete_code":23632,"complete_code_percent":9.720862,"complete_data":0,"complete_data_percent":100,"total_units":366,"complete_units":121}},{"timestamp":"2026-09-18T18:25:52Z","commit_sha":"8b50800e304ad2b453b7f9200515acca8df8b959","commit_message":"Match sub_8012160/sub_8012238/sub_80122CC/sub_8012A7C (issue #16 remainder, actor) (#273)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":22.403381,"total_code":243106,"matched_code":45240,"matched_code_percent":18.609165,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":946,"matched_functions_percent":45.112064,"complete_code":23202,"complete_code_percent":9.543985,"complete_data":0,"complete_data_percent":100,"total_units":363,"complete_units":118}},{"timestamp":"2026-09-18T18:20:42Z","commit_sha":"60241e3875b12d150d85be95d580a0ab32e5edfa","commit_message":"Park LoadGraphicsPackage as NON_MATCHING (graphics_loading, issue #30) (#272)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":22.06608,"total_code":243106,"matched_code":44420,"matched_code_percent":18.271866,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":942,"matched_functions_percent":44.921314,"complete_code":23202,"complete_code_percent":9.543985,"complete_data":0,"complete_data_percent":100,"total_units":359,"complete_units":118}},{"timestamp":"2026-09-18T18:12:01Z","commit_sha":"aa17b89a33cc775f83bf7f72ad7d3cc772561531","commit_message":"Match sub_802C99C-sub_802CC78 (12 fns); park sub_802C7A8 as NAKED (issue #53, actor) (#271)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":21.991274,"total_code":243106,"matched_code":44420,"matched_code_percent":18.271866,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":942,"matched_functions_percent":44.921314,"complete_code":23004,"complete_code_percent":9.462539,"complete_data":0,"complete_data_percent":100,"total_units":359,"complete_units":117}},{"timestamp":"2026-09-18T18:10:00Z","commit_sha":"278f52d9a292e6b26c61bab310112946a74ac1c4","commit_message":"Park issue #41's remaining 8 functions as byte-exact NAKED transcriptions (#270)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":21.676184,"total_code":243106,"matched_code":43654,"matched_code_percent":17.956776,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":930,"matched_functions_percent":44.34907,"complete_code":23004,"complete_code_percent":9.462539,"complete_data":0,"complete_data_percent":100,"total_units":358,"complete_units":117}},{"timestamp":"2026-09-18T15:05:48Z","commit_sha":"8192ec00777bf61752a8c3db6f0d63822ec229ce","commit_message":"Match sub_80384DC/sub_8038B68, park sub_8038240/sub_8038538/sub_8038A1C (audio, issues #66/#67) (#269)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":21.676184,"total_code":243106,"matched_code":43654,"matched_code_percent":17.956776,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":930,"matched_functions_percent":44.34907,"complete_code":23004,"complete_code_percent":9.462539,"complete_data":0,"complete_data_percent":100,"total_units":357,"complete_units":117}},{"timestamp":"2026-09-18T14:58:37Z","commit_sha":"2f54676a81c34c5ada4f4a3275b5a9bf69f2fa24","commit_message":"Match sub_800B3F0, park sub_800A884 (NON_MATCHING) - issue #9/#10, graphics (#268)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":21.56023,"total_code":243106,"matched_code":43562,"matched_code_percent":17.918932,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":929,"matched_functions_percent":44.30138,"complete_code":22912,"complete_code_percent":9.424695,"complete_data":0,"complete_data_percent":100,"total_units":354,"complete_units":116}},{"timestamp":"2026-09-18T14:29:50Z","commit_sha":"abb205bf92c7c6fca42db465a3034bd257a05d96","commit_message":"Match UpdateAnimatedActorPart, sub_802AA0C, sub_802AB58 (actor, issue #50 leftovers) (#267)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":21.307087,"total_code":243106,"matched_code":43382,"matched_code_percent":17.84489,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":928,"matched_functions_percent":44.253696,"complete_code":22118,"complete_code_percent":9.098089,"complete_data":0,"complete_data_percent":100,"total_units":353,"complete_units":114}},{"timestamp":"2026-09-18T14:25:19Z","commit_sha":"eb3e03591183d2721f4a171efe173f0b1c387699","commit_message":"Match 0x0803B4EC-0x0803B884 (26 functions, actor category) (#265)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":21.13679,"total_code":243106,"matched_code":42968,"matched_code_percent":17.674595,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2097,"matched_functions":925,"matched_functions_percent":44.110634,"complete_code":22008,"complete_code_percent":9.052841,"complete_data":0,"complete_data_percent":100,"total_units":353,"complete_units":113}},{"timestamp":"2026-09-18T14:23:37Z","commit_sha":"681a4b7c6b1d13dbf74fad28ec76e3a7993bf7af","commit_message":"Match 2 functions, park 13 via NAKED transcription (issue #58, actor) (#266)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":20.879591,"total_code":243244,"matched_code":43022,"matched_code_percent":17.686768,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":912,"matched_functions_percent":43.72004,"complete_code":24068,"complete_code_percent":9.894591,"complete_data":0,"complete_data_percent":100,"total_units":353,"complete_units":115}},{"timestamp":"2026-09-18T14:22:00Z","commit_sha":"3fdacbd3ea426481a054ffad4804edd2dfc04ec3","commit_message":"Match issue #14's graphics chunk (24/25 fns); complete sub_800A734's match (issue #9) (#264)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":20.794079,"total_code":243244,"matched_code":42814,"matched_code_percent":17.601255,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":910,"matched_functions_percent":43.62416,"complete_code":23996,"complete_code_percent":9.864992,"complete_data":0,"complete_data_percent":100,"total_units":344,"complete_units":114}},{"timestamp":"2026-09-18T14:19:01Z","commit_sha":"d97edac859744b9787e2a6c02177fd03903cd4b5","commit_message":"Park sub_8039518/sub_80395A4/sub_8039658 as NAKED transcriptions (audio, Channel type init_fn/play_fn) (#263)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":20.577877,"total_code":243244,"matched_code":42516,"matched_code_percent":17.478746,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":887,"matched_functions_percent":42.521572,"complete_code":23996,"complete_code_percent":9.864992,"complete_data":0,"complete_data_percent":100,"total_units":343,"complete_units":114}},{"timestamp":"2026-09-18T14:08:53Z","commit_sha":"5dcfae1ec6b976a7b7cb466262db3ea74e624088","commit_message":"NAKED-transcribe sub_8009008/sub_80091D4/sub_8009868/sub_8009BE0 (spatial-hash-grid AI-collision cluster) (#262)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":20.577877,"total_code":243244,"matched_code":42516,"matched_code_percent":17.478746,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":887,"matched_functions_percent":42.521572,"complete_code":23996,"complete_code_percent":9.864992,"complete_data":0,"complete_data_percent":100,"total_units":343,"complete_units":114}},{"timestamp":"2026-09-18T12:59:24Z","commit_sha":"1ec0fad5ad549d7a814979a1073058ff71491dfd","commit_message":"NAKED asm transcription for 14 parked functions (graphics/actor) (#259)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":20.577877,"total_code":243244,"matched_code":42516,"matched_code_percent":17.478746,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":887,"matched_functions_percent":42.521572,"complete_code":23996,"complete_code_percent":9.864992,"complete_data":0,"complete_data_percent":100,"total_units":343,"complete_units":114}},{"timestamp":"2026-09-18T12:49:20Z","commit_sha":"f94ae0ca8744355acfb1aca170dc1fbd5289d2eb","commit_message":"Match 17 parked functions via NAKED transcription (issues #12, #18, #30, #31, #33) (#261)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":21.413593,"total_code":243244,"matched_code":42516,"matched_code_percent":17.478746,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":887,"matched_functions_percent":42.521572,"complete_code":25040,"complete_code_percent":10.29419,"complete_data":0,"complete_data_percent":100,"total_units":334,"complete_units":114}},{"timestamp":"2026-09-18T12:47:01Z","commit_sha":"35581fc5bb6ca06178b6eb6e07330c519f5d9010","commit_message":"Retroactively track NAKED transcriptions as parked, not matched (#260)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":22.13343,"total_code":243244,"matched_code":42516,"matched_code_percent":17.478746,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":887,"matched_functions_percent":42.521572,"complete_code":26394,"complete_code_percent":10.850833,"complete_data":0,"complete_data_percent":100,"total_units":323,"complete_units":116}},{"timestamp":"2026-09-18T12:43:05Z","commit_sha":"93809d26788bb58050b3339c65319968bac9c3b5","commit_message":"Match 15 parked functions via NAKED asm transcription (#254)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":26.760967,"total_code":243114,"matched_code":48026,"matched_code_percent":19.754519,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":904,"matched_functions_percent":43.33653,"complete_code":32210,"complete_code_percent":13.248928,"complete_data":0,"complete_data_percent":100,"total_units":313,"complete_units":121}},{"timestamp":"2026-09-18T12:31:29Z","commit_sha":"b27831935b09b2c3e37205deaaa78e3f65f10a39","commit_message":"Match sub_802F97C; close byte gap on 6 r7-hazard trampoline dispatchers via NAKED transcription (actor) (#258)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":27.122355,"total_code":243114,"matched_code":48026,"matched_code_percent":19.754519,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":904,"matched_functions_percent":43.33653,"complete_code":33386,"complete_code_percent":13.732653,"complete_data":0,"complete_data_percent":100,"total_units":312,"complete_units":126}},{"timestamp":"2026-09-18T12:29:39Z","commit_sha":"f63ef6b76ee747dc708e7a94bbac9b3ae31541ff","commit_message":"Match 18 parked functions in overlay_ui via NAKED transcription (issues #7, #8) (#256)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":27.260921,"total_code":243114,"matched_code":47890,"matched_code_percent":19.698578,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":903,"matched_functions_percent":43.288593,"complete_code":34150,"complete_code_percent":14.046907,"complete_data":0,"complete_data_percent":100,"total_units":312,"complete_units":133}},{"timestamp":"2026-09-18T12:22:20Z","commit_sha":"7d0a96f60f9882462e47b81b1fd848cd8f00381c","commit_message":"Match sub_800A810, sub_800B6A0, sub_800B6D0; narrow sub_8009DF4's gap (#257)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":27.783564,"total_code":243114,"matched_code":47890,"matched_code_percent":19.698578,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":903,"matched_functions_percent":43.288593,"complete_code":36270,"complete_code_percent":14.918926,"complete_data":0,"complete_data_percent":100,"total_units":311,"complete_units":137}},{"timestamp":"2026-09-18T11:20:01Z","commit_sha":"f8f1a8501cf715535725673cdba38a770cd45911","commit_message":"Match 8 parked functions via NAKED transcription (system, util, actor) (#253)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":27.82631,"total_code":243114,"matched_code":47678,"matched_code_percent":19.611376,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":900,"matched_functions_percent":43.144775,"complete_code":36604,"complete_code_percent":15.056311,"complete_data":0,"complete_data_percent":100,"total_units":310,"complete_units":138}},{"timestamp":"2026-09-18T11:17:39Z","commit_sha":"58188c4463e9339de18452637b2ba2dceb880668","commit_message":"Match sub_8022BF0/sub_8022CA0; narrow gaps on 2 more (game_loop) (#252)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":27.247883,"total_code":242988,"matched_code":46900,"matched_code_percent":19.301365,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":895,"matched_functions_percent":42.92566,"complete_code":35482,"complete_code_percent":14.602367,"complete_data":0,"complete_data_percent":100,"total_units":314,"complete_units":138}},{"timestamp":"2026-09-18T10:06:58Z","commit_sha":"839fbf07d5487a23073785a70457c10c3d7012b6","commit_message":"Match 5 of 12 functions in 0x08004D74-0x08005A78/0x08005E5C (overlay_ui, issue #7) (#251)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":27.211737,"total_code":242988,"matched_code":46548,"matched_code_percent":19.156502,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":893,"matched_functions_percent":42.82974,"complete_code":35834,"complete_code_percent":14.747231,"complete_data":0,"complete_data_percent":100,"total_units":314,"complete_units":139}},{"timestamp":"2026-09-18T09:06:49Z","commit_sha":"01f85eff0138d359ac879159ea43a96d34d36f13","commit_message":"Match InitHudTextWidget, sub_80063D8; park sub_8003F30/sub_80062A8 (hud, issue #6, issue #8) (#250)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":26.699778,"total_code":242988,"matched_code":45304,"matched_code_percent":18.64454,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":888,"matched_functions_percent":42.589928,"complete_code":34590,"complete_code_percent":14.235271,"complete_data":0,"complete_data_percent":100,"total_units":307,"complete_units":135}},{"timestamp":"2026-09-18T08:10:41Z","commit_sha":"9eeef00ca0e934bcd62937b99ccf929641888886","commit_message":"Match remaining 5 functions in 0x08026EEC-0x08028568 (hud, issue #45) (#249)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":26.553268,"total_code":242988,"matched_code":44948,"matched_code_percent":18.498034,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":886,"matched_functions_percent":42.494003,"complete_code":33930,"complete_code_percent":13.963654,"complete_data":0,"complete_data_percent":100,"total_units":307,"complete_units":133}},{"timestamp":"2026-09-18T08:03:02Z","commit_sha":"d9a10302ba87f70eac84c0d301ad299882dabbc4","commit_message":"Match remaining 6 functions in 0x0802D7B0-0x0802E0A4 (actor, issue #54) (#248)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":25.034033,"total_code":242988,"matched_code":44500,"matched_code_percent":18.313662,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":885,"matched_functions_percent":42.446045,"complete_code":31184,"complete_code_percent":12.833555,"complete_data":0,"complete_data_percent":100,"total_units":307,"complete_units":132}},{"timestamp":"2026-09-18T07:33:00Z","commit_sha":"b957ad00ed5f33c70bd45905b89ab751ac9e5a3c","commit_message":"Match sub_8007DBC via NAKED asm transcription (actor, graphics) (#247)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":24.416752,"total_code":242988,"matched_code":43276,"matched_code_percent":17.809933,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":881,"matched_functions_percent":42.254196,"complete_code":31114,"complete_code_percent":12.804749,"complete_data":0,"complete_data_percent":100,"total_units":307,"complete_units":131}},{"timestamp":"2026-09-18T07:31:06Z","commit_sha":"40680c2d69ebd7effad39e13f213d57773cd1a63","commit_message":"Match sub_802D3A8 via NAKED transcription (actor, issue #54) (#246)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":24.367102,"total_code":242988,"matched_code":42832,"matched_code_percent":17.627209,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":880,"matched_functions_percent":42.206234,"complete_code":31114,"complete_code_percent":12.804749,"complete_data":0,"complete_data_percent":100,"total_units":307,"complete_units":131}},{"timestamp":"2026-09-18T07:29:36Z","commit_sha":"0308d44927e119289d4fffb058253cd897db331d","commit_message":"Match final 5 functions in 0x080285C4-0x08028994 (hud, issue #46) (#245)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":24.273315,"total_code":242988,"matched_code":42832,"matched_code_percent":17.627209,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":880,"matched_functions_percent":42.206234,"complete_code":30884,"complete_code_percent":12.710093,"complete_data":0,"complete_data_percent":100,"total_units":307,"complete_units":130}},{"timestamp":"2026-09-18T07:26:52Z","commit_sha":"a6bea759fc76e2ea8dcea6f7b2b939b3c48a0e16","commit_message":"Match sub_802757C/sub_802763C via NAKED transcription (hud, issue #45) (#244)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":24.273315,"total_code":242988,"matched_code":42832,"matched_code_percent":17.627209,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":880,"matched_functions_percent":42.206234,"complete_code":30972,"complete_code_percent":12.746308,"complete_data":0,"complete_data_percent":100,"total_units":307,"complete_units":131}},{"timestamp":"2026-09-18T07:25:30Z","commit_sha":"44d17ef5fe4e4cf946802a9ba411a4781cfa0fbf","commit_message":"Match sub_8002D44/sub_8002E20 via NAKED transcription (overlay_ui, issue #5) (#243)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":23.986973,"total_code":242988,"matched_code":42832,"matched_code_percent":17.627209,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":880,"matched_functions_percent":42.206234,"complete_code":30276,"complete_code_percent":12.459875,"complete_data":0,"complete_data_percent":100,"total_units":307,"complete_units":130}},{"timestamp":"2026-09-18T07:22:12Z","commit_sha":"bf5cf7ff8fe01a22524e35ab4875a04797af9dce","commit_message":"Document the GitHub close-keyword negation trap (#242)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":23.805893,"total_code":242988,"matched_code":42392,"matched_code_percent":17.446129,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":878,"matched_functions_percent":42.110313,"complete_code":29836,"complete_code_percent":12.278796,"complete_data":0,"complete_data_percent":100,"total_units":308,"complete_units":130}},{"timestamp":"2026-09-18T05:46:26Z","commit_sha":"9f643d83f133c67866f5cbf040d2bbebf506a1e1","commit_message":"Match sub_8026F54/sub_8027018 + park sub_802757C/sub_802763C (hud, issue #45) (#241)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":23.805893,"total_code":242988,"matched_code":42392,"matched_code_percent":17.446129,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":878,"matched_functions_percent":42.110313,"complete_code":29836,"complete_code_percent":12.278796,"complete_data":0,"complete_data_percent":100,"total_units":308,"complete_units":130}},{"timestamp":"2026-09-18T05:45:01Z","commit_sha":"1eec4494727480d6c808bf33ee44ed70779d9f61","commit_message":"Match 3/8 functions in 0x080285C4-0x08028A78 (hud, issue #46) (#240)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":23.679962,"total_code":242988,"matched_code":42086,"matched_code_percent":17.320196,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":876,"matched_functions_percent":42.01439,"complete_code":29530,"complete_code_percent":12.1528635,"complete_data":0,"complete_data_percent":100,"total_units":309,"complete_units":130}},{"timestamp":"2026-09-18T05:43:37Z","commit_sha":"91437a59791043ff2499fef59bad21ea3a57257a","commit_message":"Match 4/6 parked functions in 0x08002C84-0x08003B40 (overlay_ui, issue #5) (#239)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":23.5672,"total_code":242988,"matched_code":41812,"matched_code_percent":17.207436,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":873,"matched_functions_percent":41.870506,"complete_code":29332,"complete_code_percent":12.071378,"complete_data":0,"complete_data_percent":100,"total_units":307,"complete_units":128}},{"timestamp":"2026-09-18T05:37:01Z","commit_sha":"9a082e61f65bde9b4be595d35bdeb4c81f17cf5c","commit_message":"Match 3/7 functions + narrow/confirm 4 more in 0x0803A944-0x0803AD78 (system, issue #69) (#237)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":23.293194,"total_code":242988,"matched_code":41368,"matched_code_percent":17.02471,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":870,"matched_functions_percent":41.72662,"complete_code":28874,"complete_code_percent":11.882892,"complete_data":0,"complete_data_percent":100,"total_units":309,"complete_units":127}},{"timestamp":"2026-09-18T05:34:53Z","commit_sha":"0abed979529f51d4a8854440094774e2223ca316","commit_message":"Track cleanup status separately from match status on decomp.dev (#238)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":23.29996,"total_code":242988,"matched_code":41152,"matched_code_percent":16.935816,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":867,"matched_functions_percent":41.582733,"complete_code":28658,"complete_code_percent":11.793998,"complete_data":0,"complete_data_percent":100,"total_units":305,"complete_units":125}},{"timestamp":"2026-09-18T05:22:05Z","commit_sha":"f7c93e0ce2051581f8a2579e1851abc3262fe59b","commit_message":"Match 3/9 + park 4/9 in 0x080060AC-0x08006600 (overlay_ui, issue #8) (#236)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":23.29996,"total_code":242988,"matched_code":41152,"matched_code_percent":16.935816,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":867,"matched_functions_percent":41.582733,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":305,"complete_units":0}},{"timestamp":"2026-09-18T05:20:12Z","commit_sha":"2cdfdcd2d32c4adab94f0090820c1ee051e06b49","commit_message":"Match remaining 7 functions in 0x08001CB8-0x08002C84 (system/overlay_ui, issue #4) (#235)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":23.070595,"total_code":242988,"matched_code":40946,"matched_code_percent":16.851038,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2085,"matched_functions":864,"matched_functions_percent":41.438847,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":301,"complete_units":0}},{"timestamp":"2026-09-18T03:17:38Z","commit_sha":"d1f60da00ee6be5b7016eb52a0beeda938c1d397","commit_message":"Match 14/25 functions + park 6 in 0x08033EF4-0x08034AA4 (actor, issue #63) (#234)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":21.902729,"total_code":243244,"matched_code":38770,"matched_code_percent":15.938727,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":860,"matched_functions_percent":41.22723,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":306,"complete_units":0}},{"timestamp":"2026-09-18T03:13:07Z","commit_sha":"ba26743a7fc99a4fc3badd3ddc58c9a794761679","commit_message":"Match 18/25 functions + park 1 in 0x0802D3A8-0x0802E0A4 (actor, issue #54) (#233)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":21.327507,"total_code":243244,"matched_code":37970,"matched_code_percent":15.609841,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":846,"matched_functions_percent":40.556087,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":293,"complete_units":0}},{"timestamp":"2026-09-18T03:09:11Z","commit_sha":"6db5cd3904b208a81879ad9fd5e061db6880bdb0","commit_message":"Match 11/25 functions in 0x0800FC70-0x08010A0C (game_loop, issue #13) (#232)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":20.677132,"total_code":243244,"matched_code":36388,"matched_code_percent":14.959465,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":828,"matched_functions_percent":39.69319,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":284,"complete_units":0}},{"timestamp":"2026-09-18T03:03:15Z","commit_sha":"e41968237e2963843fce1cfb905e101d0c49ac14","commit_message":"Match 19/25 functions in 0x0802425C-0x08024810 (game_loop, issue #38) (#231)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":20.541464,"total_code":243244,"matched_code":36058,"matched_code_percent":14.823799,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":817,"matched_functions_percent":39.165867,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":274,"complete_units":0}},{"timestamp":"2026-09-18T03:02:53Z","commit_sha":"fe58d659e27cda52ca74f7875d5810c5d035b737","commit_message":"Match sub_801FDEC in 0x0801FA3C-0x08021668 (graphics_loading, issue #31) (#230)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":20.252043,"total_code":243244,"matched_code":35354,"matched_code_percent":14.534376,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":798,"matched_functions_percent":38.25503,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":267,"complete_units":0}},{"timestamp":"2026-09-18T03:02:30Z","commit_sha":"034260208bd1a875e2d0d2af1a6c6fc92c4b10fc","commit_message":"Match 20/25 functions in 0x08015840-0x08016128 (actor, issue #19) (#229)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":20.146803,"total_code":243244,"matched_code":35098,"matched_code_percent":14.429132,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":797,"matched_functions_percent":38.207096,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":265,"complete_units":0}},{"timestamp":"2026-09-18T03:02:08Z","commit_sha":"622ca78f85e70367dbdd0726956e525c30b7723e","commit_message":"Narrow sub_80019F8's gap in 0x080016EC-0x08001C80 (audio, issue #3) (#228)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":19.92727,"total_code":243244,"matched_code":34564,"matched_code_percent":14.2095995,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":777,"matched_functions_percent":37.24832,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":262,"complete_units":0}},{"timestamp":"2026-09-18T03:01:45Z","commit_sha":"763411130f8a515b5b11d5cb45363e47c6599ee4","commit_message":"Match 1/9 remaining functions in 0x08026EEC-0x08028568 (hud, issue #45) (#227)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":19.92727,"total_code":243244,"matched_code":34564,"matched_code_percent":14.2095995,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":777,"matched_functions_percent":37.24832,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":262,"complete_units":0}},{"timestamp":"2026-09-17T22:22:22Z","commit_sha":"96f18ee6c422e6142d57050af3b8e3fa5e9371e8","commit_message":"Match 22/25 functions + park 3 in 0x0802A69C-0x0802AC28 (actor, issue #50) (#225)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":19.86807,"total_code":243244,"matched_code":34420,"matched_code_percent":14.1504,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":776,"matched_functions_percent":37.200382,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":260,"complete_units":0}},{"timestamp":"2026-09-17T22:17:59Z","commit_sha":"be86a448c076d2613cb9c4ef9023768e24caea5e","commit_message":"Match 24/25 functions + park 1 in 0x08021BFC-0x08022354 (graphics_loading, issue #33) (#224)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":19.459427,"total_code":243244,"matched_code":33426,"matched_code_percent":13.741757,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":754,"matched_functions_percent":36.145737,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":252,"complete_units":0}},{"timestamp":"2026-09-17T22:16:01Z","commit_sha":"a3ca9af2ca70156218b4bf59cc49f21b08ccaa06","commit_message":"Match 1/18 functions + park 4 in 0x08007634-0x0800B3F0 (actor, issue #9) (#223)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":18.697926,"total_code":243244,"matched_code":31680,"matched_code_percent":13.023959,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":730,"matched_functions_percent":34.99521,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":249,"complete_units":0}},{"timestamp":"2026-09-17T22:14:02Z","commit_sha":"7a839846f1202c2e214f178ed4cf131020b14de8","commit_message":"Match 16/25 functions + park 9 in 0x08025894-0x08025FC8 (game_loop, issue #41) (#222)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":18.451769,"total_code":243244,"matched_code":31680,"matched_code_percent":13.023959,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":730,"matched_functions_percent":34.99521,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":246,"complete_units":0}},{"timestamp":"2026-09-17T22:13:38Z","commit_sha":"fe205f8431f9b2ed408afad0dde186cd4021877f","commit_message":"Match 17/25 functions + park 4 in 0x0802F0DC-0x0802FBF0 (actor, issue #56) (#221)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":18.251146,"total_code":243244,"matched_code":31192,"matched_code_percent":12.823338,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":714,"matched_functions_percent":34.228188,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":236,"complete_units":0}},{"timestamp":"2026-09-17T22:11:21Z","commit_sha":"e0cfc80e7e6bae389be78054cde4b4cade3040ea","commit_message":"Match 15/25 functions in 0x080119A8-0x08012FBC (actor, issue #16) (#220)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":17.68252,"total_code":243244,"matched_code":30270,"matched_code_percent":12.444295,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":698,"matched_functions_percent":33.46117,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":225,"complete_units":0}},{"timestamp":"2026-09-17T22:09:30Z","commit_sha":"7d064f745f4912dcb5e8fd48267542da136411b3","commit_message":"Match 1/22 functions + park 2 in 0x080354E0-0x08037110 (graphics_loading, issue #65) (#219)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":17.457232,"total_code":243244,"matched_code":29722,"matched_code_percent":12.219007,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":683,"matched_functions_percent":32.74209,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":222,"complete_units":0}},{"timestamp":"2026-09-17T22:09:07Z","commit_sha":"90f34ca3e9d5a377409eedf5c903ef255a8a675c","commit_message":"Match 24/25 functions in 0x0803B060-0x0803B4EC (actor, issue #71) (#218)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":17.217743,"total_code":243244,"matched_code":29466,"matched_code_percent":12.113763,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2086,"matched_functions":682,"matched_functions_percent":32.694153,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":221,"complete_units":0}},{"timestamp":"2026-09-17T20:26:57Z","commit_sha":"b5793bc7525b70883f7881ca89ce15a1f492c786","commit_message":"Match 20/25 functions + park 5 in 0x08014F8C-0x08015840 (actor, issue #18) (#217)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":16.518837,"total_code":242220,"matched_code":29172,"matched_code_percent":12.043597,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":675,"matched_functions_percent":32.71934,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":220,"complete_units":0}},{"timestamp":"2026-09-17T20:23:40Z","commit_sha":"ca4d44e50b7125f4fbf1c4e69f06d9760f9ac75c","commit_message":"Match 20/25 functions + park 5 in 0x08033804-0x08033EF4 (actor, issue #62) (#216)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":15.704708,"total_code":242220,"matched_code":28036,"matched_code_percent":11.574601,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":656,"matched_functions_percent":31.798351,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":215,"complete_units":0}},{"timestamp":"2026-09-17T20:23:17Z","commit_sha":"f86e4fca53369b729fc33668c62321811466b5c0","commit_message":"Match 18/25 functions + park 5 in 0x08001C80-0x08002C84 (overlay_ui, issue #4) (#215)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":15.0725355,"total_code":242220,"matched_code":27246,"matched_code_percent":11.248451,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":637,"matched_functions_percent":30.877363,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":204,"complete_units":0}},{"timestamp":"2026-09-17T20:22:53Z","commit_sha":"92baa1c6d21786045939f4edbc679f3645c5388d","commit_message":"Match 17/25 functions + park 8 in 0x08028568-0x08028B7C (hud, issue #46) (#214)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":14.644912,"total_code":242220,"matched_code":26266,"matched_code_percent":10.843861,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":621,"matched_functions_percent":30.101793,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":194,"complete_units":0}},{"timestamp":"2026-09-17T20:22:30Z","commit_sha":"c272fff767fb223f2462b74e8f29e6ac1325a835","commit_message":"Match 23/25 functions + park 2 in 0x080234E8-0x0802425C (game_loop, issue #37) (#213)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":14.451699,"total_code":242220,"matched_code":25798,"matched_code_percent":10.650648,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":604,"matched_functions_percent":29.27775,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":186,"complete_units":0}},{"timestamp":"2026-09-17T20:19:37Z","commit_sha":"47ce4286d91c540937a2db1551adc90d490263c5","commit_message":"Match 2/17 remaining functions in 0x08038538-0x08039658 (audio, issue #67) (#212)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":14.011873,"total_code":242220,"matched_code":24944,"matched_code_percent":10.298077,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":585,"matched_functions_percent":28.35676,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":180,"complete_units":0}},{"timestamp":"2026-09-17T20:19:13Z","commit_sha":"26efd28a538d37494f62c454a323e8b139528fa0","commit_message":"Match 4/25 functions + park 2 in 0x0801E578-0x0801FA3C (graphics_loading, issue #30) (#211)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":13.821963,"total_code":242220,"matched_code":24484,"matched_code_percent":10.108166,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":583,"matched_functions_percent":28.259817,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":180,"complete_units":0}},{"timestamp":"2026-09-17T20:18:49Z","commit_sha":"dde2c613fca9581e446c72d7e6015a7e389c3838","commit_message":"Park 3/25 functions in 0x0800D040-0x0800FC70 (game_loop, issue #12) (#210)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":13.747222,"total_code":242220,"matched_code":24352,"matched_code_percent":10.053671,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":579,"matched_functions_percent":28.065924,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":175,"complete_units":0}},{"timestamp":"2026-09-17T16:37:57Z","commit_sha":"6087266048281b0c19d09cece32cac32533654ad","commit_message":"Match 19/25 functions + park 6 in 0x08002C84-0x08003B40 (overlay_ui, issue #5) (#209)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":13.584701,"total_code":242220,"matched_code":24352,"matched_code_percent":10.053671,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":579,"matched_functions_percent":28.065924,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":170,"complete_units":0}},{"timestamp":"2026-09-17T16:37:33Z","commit_sha":"8945bd302bf6e3b710cc19d8543668051230fbf6","commit_message":"Match 20/25 functions + park 5 in 0x08024E68-0x08025894 (game_loop, issue #40) (#208)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":12.491525,"total_code":242220,"matched_code":21802,"matched_code_percent":9.000909,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":561,"matched_functions_percent":27.193407,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":161,"complete_units":0}},{"timestamp":"2026-09-17T16:37:09Z","commit_sha":"3f7b8c9c6a22517a039feb5e4a968ce9aa4d1ac4","commit_message":"Match 15/25 functions in 0x08017A44-0x080188D0 (actor, issue #22) (#207)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":11.81914,"total_code":242220,"matched_code":21414,"matched_code_percent":8.840723,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":544,"matched_functions_percent":26.369366,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":157,"complete_units":0}},{"timestamp":"2026-09-17T16:33:32Z","commit_sha":"75213af988ead8fd34fb8383607a6a4703d8faa6","commit_message":"Match 7/25 functions in 0x08030334-0x08031784 (actor, issue #58) (#206)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":11.560698,"total_code":242220,"matched_code":20788,"matched_code_percent":8.58228,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":524,"matched_functions_percent":25.399902,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":151,"complete_units":0}},{"timestamp":"2026-09-17T16:33:06Z","commit_sha":"5490a561708c4d992b9d9aa381225d9ef9fb44f9","commit_message":"Match 6/21 functions in 0x08039818-0x0803A944 (audio, issue #68) (#205)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":11.275881,"total_code":242220,"matched_code":20272,"matched_code_percent":8.369251,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":517,"matched_functions_percent":25.06059,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":137,"complete_units":0}},{"timestamp":"2026-09-17T14:55:44Z","commit_sha":"800139b98456dce9dd700c47d2dced74b4f21188","commit_message":"Tighten the issue-closing rule: only fully matched closes a chunk (#204)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":11.1570215,"total_code":242220,"matched_code":20050,"matched_code_percent":8.277598,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":512,"matched_functions_percent":24.818226,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":129,"complete_units":0}},{"timestamp":"2026-09-17T14:42:23Z","commit_sha":"adce1be2986e829952d23d400d16903f90609a67","commit_message":"Match 7/25 functions + park 6 in 0x08004CB4-0x080060AC (overlay_ui, issue #7) (#203)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":11.1570215,"total_code":242220,"matched_code":20050,"matched_code_percent":8.277598,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":512,"matched_functions_percent":24.818226,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":129,"complete_units":0}},{"timestamp":"2026-09-17T14:27:42Z","commit_sha":"c31a28686c57250eeb2a1aa8f1a98d18306f2dc6","commit_message":"Park 4/25 functions in 0x0801FA3C-0x08021668 (graphics_loading, issue #31) (#202)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":10.635473,"total_code":242220,"matched_code":19706,"matched_code_percent":8.135579,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":505,"matched_functions_percent":24.478914,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":123,"complete_units":0}},{"timestamp":"2026-09-17T14:21:30Z","commit_sha":"42c9544fdfe072632f774bab92b3cd5f72f654f4","commit_message":"Match 6/9 functions + park 3 in 0x0803ADB0-0x0803B060 (system, issue #70) (#201)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":10.635473,"total_code":242220,"matched_code":19706,"matched_code_percent":8.135579,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":505,"matched_functions_percent":24.478914,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":123,"complete_units":0}},{"timestamp":"2026-09-17T13:44:44Z","commit_sha":"b2db5decba6bff5854d720a1f8a161cd052b1c92","commit_message":"Match 21/25 functions + park 3 in 0x0802BED8-0x0802C99C (actor, issue #52) (#200)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":10.5890255,"total_code":242220,"matched_code":19688,"matched_code_percent":8.128148,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":501,"matched_functions_percent":24.28502,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":120,"complete_units":0}},{"timestamp":"2026-09-17T13:42:58Z","commit_sha":"d12f744ce504244f2b72e32be4b98891381b958f","commit_message":"Match 16/25 functions + park 7 in 0x08003B40-0x08004CB4 (overlay_ui, issue #6) (#199)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":9.634541,"total_code":242220,"matched_code":17650,"matched_code_percent":7.286764,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":480,"matched_functions_percent":23.267088,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":110,"complete_units":0}},{"timestamp":"2026-09-17T12:28:49Z","commit_sha":"3387568d9f8fdfa5db7b53d5845b0b0a9a7b7955","commit_message":"Match 6/25 functions at 0x08038538-0x08039658 (audio, issue #67) (#198)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":9.20274,"total_code":242220,"matched_code":16770,"matched_code_percent":6.923458,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":464,"matched_functions_percent":22.491518,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":104,"complete_units":0}},{"timestamp":"2026-09-17T11:06:55Z","commit_sha":"34b3c008c6cae548afa95cbd6cf93e6b5a4b206a","commit_message":"Match 4/25 functions at 0x0801426C-0x08014524 (graphics, issue #17) (#197)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":9.087447,"total_code":242220,"matched_code":16626,"matched_code_percent":6.8640075,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":458,"matched_functions_percent":22.200678,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":93,"complete_units":0}},{"timestamp":"2026-09-17T11:04:50Z","commit_sha":"120830f347c0634bede1f0c5427f629f0de4071b","commit_message":"Match 14/24 functions at 0x08026EEC-0x08028568 (hud, issue #45) (#196)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":8.668087,"total_code":242220,"matched_code":16144,"matched_code_percent":6.665015,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":454,"matched_functions_percent":22.006786,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":90,"complete_units":0}},{"timestamp":"2026-09-17T11:01:59Z","commit_sha":"2e5110639f611a2bd4ed26edc50a006b9062355f","commit_message":"Match 18/25 functions + park 3 in 0x0803A944-0x0803AD94 (issue #69) (#195)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":8.408818,"total_code":242220,"matched_code":15516,"matched_code_percent":6.405747,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":440,"matched_functions_percent":21.328163,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":85,"complete_units":0}},{"timestamp":"2026-09-17T09:47:32Z","commit_sha":"c1894ee961f2133bac892e3098f62914f2b4dd95","commit_message":"Match 23 of 25 audio-wrapper functions in 0x080016EC-0x08001C80 (#194)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":8.218435,"total_code":242220,"matched_code":15366,"matched_code_percent":6.34382,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":422,"matched_functions_percent":20.455647,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":82,"complete_units":0}},{"timestamp":"2026-09-17T05:28:32Z","commit_sha":"1624a3ba0d57661bb5441f39cb9d89a7137139be","commit_message":"Match sub_8022FEC/802306C + accessor family from issue #34's game_loop chunk (#193)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":7.7898993,"total_code":242220,"matched_code":14328,"matched_code_percent":5.9152837,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":399,"matched_functions_percent":19.340765,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":77,"complete_units":0}},{"timestamp":"2026-09-17T05:19:08Z","commit_sha":"fe510e7a35f0b0b112387d7efbbcabab17ac5af9","commit_message":"Match 15/25 functions at 0x08037110-0x08038538 (audio, issue #66) (#192)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":7.4023128,"total_code":242220,"matched_code":14030,"matched_code_percent":5.792255,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":380,"matched_functions_percent":18.419777,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":73,"complete_units":0}},{"timestamp":"2026-09-17T04:01:01Z","commit_sha":"df94daf6afc2ee9dee348560a426854db052b31e","commit_message":"Match sub_8000140, sub_800014C, nullsub_9, sub_80007EC (#2) (#191)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":7.0324483,"total_code":242220,"matched_code":13200,"matched_code_percent":5.449591,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":366,"matched_functions_percent":17.741154,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":66,"complete_units":0}},{"timestamp":"2026-09-17T03:22:12Z","commit_sha":"e5b064028addc1fdfb4b9e0969e51a47dbfe42a7","commit_message":"Point contributors at a filtered/sorted issue view, not the plain list\n\nGitHub's issue list has no way to sort blocked issues to the bottom,\nand most cleanup issues are now blocked (paired with a decomp-chunk\nissue via --pair-cleanup) - so the plain issues tab quickly fills up\nwith things nobody can start yet. CONTRIBUTING.md now links a saved\nsearch (-label:blocked, sort:created-asc) that hides blocked issues\nand surfaces the oldest (usually most-actionable) ones first, and\nexplains both cleanup mechanisms and how a blocked one gets unblocked.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.9498787,"total_code":242220,"matched_code":13000,"matched_code_percent":5.3670216,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":365,"matched_functions_percent":17.69268,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":66,"complete_units":0}},{"timestamp":"2026-09-17T03:19:14Z","commit_sha":"c50ba6a8d628e90596be084d03b9245b0281dfc8","commit_message":"Fix --pair-cleanup trying to apply a literal 'uncategorized' label\n\nThe rendered issue body's \"uncategorized\" placeholder text was getting\nparsed back as a real category name and passed to gh as a label, which\ndoesn't exist (only real category names are labels). Caught on the one\nchunk issue with no category.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.9498787,"total_code":242220,"matched_code":13000,"matched_code_percent":5.3670216,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":365,"matched_functions_percent":17.69268,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":66,"complete_units":0}},{"timestamp":"2026-09-17T03:14:52Z","commit_sha":"f96d922bdf4c4606cc92f8efa3915ac86fe5c1eb","commit_message":"Add --pair-cleanup: block a cleanup follow-up on each decomp-chunk issue\n\nFor every open decomp-chunk issue, creates a paired cleanup issue via\nGitHub's native issue-dependency relationship (addBlockedBy GraphQL\nmutation - the same relationship the web UI shows in an issue's\nsidebar), so cleanup work is scoped to the same address ranges as the\nmatching work and can't start until its chunk is fully matched/parked.\nThe follow-up issue is a placeholder (no C exists yet to scan) rather\nthan actual findings, unlike --cleanup-scan's per-file issues for\nalready-matched code.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.9498787,"total_code":242220,"matched_code":13000,"matched_code_percent":5.3670216,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":365,"matched_functions_percent":17.69268,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":66,"complete_units":0}},{"timestamp":"2026-09-17T03:05:45Z","commit_sha":"86d7fe1c04d50cfde4ad235956af8bc4a44ac771","commit_message":"Update match-chunk skill for checkbox claiming and cleanup issues\n\nReflects the task-list claiming convention from CONTRIBUTING.md and\nadds a shorter loop for picking up a cleanup-labeled issue (already-\nmatched code needing the struct/register-macro pass, not a new match).\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.9498787,"total_code":242220,"matched_code":13000,"matched_code_percent":5.3670216,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":365,"matched_functions_percent":17.69268,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":66,"complete_units":0}},{"timestamp":"2026-09-17T03:04:05Z","commit_sha":"55819f1fda81c841f3299d83307b08970f3a5329","commit_message":"Add function-level claiming and a cleanup-task category\n\ndecomp-chunk issue bodies now list functions as a GitHub task list\n(checkboxes) instead of plain bullets, so contributors can claim a\nsubset of a chunk instead of just the whole issue - documented in\nCONTRIBUTING.md's new \"Claiming work\" section.\n\nAlso adds --cleanup-scan to tools/chunk_remaining_work.py: scans\nalready-matched src/**/*.c (skipping #if NON_MATCHING blocks) for raw\npointer-arithmetic offset casts and raw hardware addresses that\ndocs/workflow.md step 7 says should become named structs/REG_* macros,\ngenerating one issue per file with the register-pin carve-out called\nout explicitly where relevant. New `cleanup` label to match.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.9498787,"total_code":242220,"matched_code":13000,"matched_code_percent":5.3670216,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":365,"matched_functions_percent":17.69268,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":66,"complete_units":0}},{"timestamp":"2026-09-17T02:57:26Z","commit_sha":"7b113c1b93d049047f67d07b42575505ca07144f","commit_message":"Match sub_8008618 and sub_8027838 (#1)\n\n* Match sub_8008618\n\n* Match sub_8027838\n\n---------\n\nCo-authored-by: Alexis Maiquez Murcia <decomp-crash-xs@alma.mu>\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>","measures":{"fuzzy_match_percent":6.9498787,"total_code":242220,"matched_code":13000,"matched_code_percent":5.3670216,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":365,"matched_functions_percent":17.69268,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":66,"complete_units":0}},{"timestamp":"2026-09-17T02:38:19Z","commit_sha":"c88300587aa184492da17a02c3222dbbf2f2828c","commit_message":"Clarify decomp-chunk issues are a scoping convenience, not a contract\n\nNo obligation to match every function in a chunk before opening a PR,\nor to do it alone - multiple people can split one issue's functions\nbetween them. Updates CONTRIBUTING.md and the issue-body template for\nfuture chunk generations.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.8417125,"total_code":242220,"matched_code":12738,"matched_code_percent":5.258856,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":364,"matched_functions_percent":17.644207,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":64,"complete_units":0}},{"timestamp":"2026-09-17T02:35:23Z","commit_sha":"00648d515ea4816cc337521be36a2291c9bbeb6b","commit_message":"Add CONTRIBUTING.md and --create-github-issues to the chunking tool\n\nCONTRIBUTING.md documents the issue-based contribution flow (find a\ndecomp-chunk/parked-function issue, claim it, follow docs/workflow.md,\nopen a PR) for both human and AI-agent contributors, cross-linked from\nREADME.md and docs/workflow.md. tools/chunk_remaining_work.py can now\ndrive `gh issue create` directly with the right decomp-chunk/parked-\nfunction + category labels.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.8417125,"total_code":242220,"matched_code":12738,"matched_code_percent":5.258856,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":364,"matched_functions_percent":17.644207,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":64,"complete_units":0}},{"timestamp":"2026-09-17T02:32:09Z","commit_sha":"920b9d2de78babff38ce44281c3735f0fb559553","commit_message":"Restore dropped parked-C for sub_80014A4/sub_8001524/sub_8001624; add issue-chunking tooling\n\nThe three parked functions in the fade/screen-mode cluster lost their\n#if NON_MATCHING C reconstructions during the earlier five-way file\nsplit - only their raw guarded bytes and docs/matching.md's prose\nsurvived, contradicting docs/status/graphics.md's \"C in ...\" claim.\nRestored from this session's own verified drafts; full clean make\ncompare still passes (these are NON_MATCHING=1-only, so the real ROM\nwas never affected).\n\nAlso adds tools/chunk_remaining_work.py, which scans asm/*.s for every\nstill-raw function, tags it with report_units.py's category, and groups\nit into GitHub-issue-sized chunks (distinguishing genuinely-unmatched\nwork from already-parked functions, which get their own one-per-function\nissue instead), plus .claude/skills/match-chunk for an agent picking up\none of those issues.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.8417125,"total_code":242220,"matched_code":12738,"matched_code_percent":5.258856,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":364,"matched_functions_percent":17.644207,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":64,"complete_units":0}},{"timestamp":"2026-09-17T02:01:09Z","commit_sha":"0ad3326313210628bbacad5d30b290f6cec3c566","commit_message":"Match sub_8001640 through sub_80016DC (AABB tests + mem wrappers)\n\nTwo axis-aligned box overlap tests (one already referenced by name\nfrom actor_part15.c's sub_800B37C) plus mem_free/mem_alloc wrappers.\nCaught a real integration-only bug: the innermost overlap check needs\nits result computed into a separate temp local before being copied to\nthe return value, matching the ROM's extra register-copy step - an\nisolated per-function compile looked right by eye but the full\nrebuild's map showed a 4-byte shift that direct byte-diffing caught.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.801868,"total_code":242220,"matched_code":12738,"matched_code_percent":5.258856,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":364,"matched_functions_percent":17.644207,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":64,"complete_units":0}},{"timestamp":"2026-09-17T01:53:50Z","commit_sha":"4ec783a1dfc71a83308f0239bdd87bf223580dcc","commit_message":"Match the fade/screen-mode utility cluster (sub_80014A4-sub_8001624)\n\n14 functions matched (fade-to-black sentinel check plus 12 DISPCNT/\nblend-register shadow-copy bit accessors and their commit routines),\n3 parked. Needed a five-way file split since the parked functions\ninterleave with the matched ones rather than sitting at one edge.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.734161,"total_code":242220,"matched_code":12574,"matched_code_percent":5.1911483,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":360,"matched_functions_percent":17.450315,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":63,"complete_units":0}},{"timestamp":"2026-09-17T01:30:18Z","commit_sha":"c073a6a91f174000fa53dd2858a3dad028ae49fb","commit_message":"Match sub_800B704 through sub_800B8D8 to real C\n\nA table-driven trampoline pair (siblings of sub_800B3AC/sub_8009D5C,\nusing a new gStaticData_0816B304 table), a fixed-point-scaled\nvector-copy pair (siblings of sub_800B6A0/sub_800B6D0), and a handful\nof small part/table accessors. Needed the same explicit two-operand\ninline-asm add already used by sub_80087A0 to force the exact\nregister operand order for a pointer addition that register-pinned\nlocals wouldn't otherwise reproduce.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.6301236,"total_code":242220,"matched_code":12322,"matched_code_percent":5.087111,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":346,"matched_functions_percent":16.771692,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":60,"complete_units":0}},{"timestamp":"2026-09-17T01:18:48Z","commit_sha":"ee6074489df2cf017f2811f04e149d32947c8bca","commit_message":"Match sub_800B324 through sub_800B69C to real C; park sub_800B6A0/sub_800B6D0\n\nSplits into actor_part15.c/actor_part16.c around sub_800B3F0, a\ncomplex constructor left fully raw since it calls several\nstill-unexamined helpers (sub_80087C0/sub_80087B4/sub_800872C,\nsub_800A734). The two vector-copy functions resist matching due to an\nunavoidable callee-saved register spill this compiler always performs\nwhen a pointer is referenced from both branches of an if/else.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.4377365,"total_code":242220,"matched_code":11856,"matched_code_percent":4.894724,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":336,"matched_functions_percent":16.28696,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":58,"complete_units":0}},{"timestamp":"2026-09-17T00:53:43Z","commit_sha":"ce1a6bda67295cbb8e3652b2a630c73b22ef9af6","commit_message":"Match sub_800A5F4 through sub_800A730 to real C\n\nNew src/graphics/actor_part14.c holds a run of 16 functions found\nright after a large raw span in code_3_2_11.s:\n\n- sub_800A5F4/sub_800A600: a void tail-call wrapper and a constant\n  stub\n- sub_800A604/sub_800A664/sub_800A6A4: a gStaticData_087E3D8C-table\n  family of part-object constructors, mirroring the already-matched\n  gStaticData_087E3D14-table family (sub_8009ED0/sub_8009F1C/\n  sub_8009F50/sub_8009F90) in actor_part8.c\n- sub_800A650: table-swap + dispatch to sub_8009F1C\n- sub_800A6C4 through sub_800A730: a dozen single-bit get/set/clear\n  accessors for part+0xc/part+0xd's flag bytes, plus a plain getter\n\nCaught two real integration-only issues via the full clean rebuild:\nsub_800A664/sub_800A604 were initially in the wrong file order\n(helper-before-caller instead of real ROM address order), and\nsub_800A6E8's redundant register copy - present in the ROM but\ndropped by this compiler's natural codegen - only showed up as a\n4-byte size regression once the whole file was assembled together,\nnot in its own isolated test.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.1389337,"total_code":242220,"matched_code":11242,"matched_code_percent":4.6412354,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":292,"matched_functions_percent":14.154145,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":55,"complete_units":0}},{"timestamp":"2026-09-17T00:35:45Z","commit_sha":"a7434c8fea1827c67b4ab1a2b427e6ff0aab68eb","commit_message":"Park sub_8009528 as NON_MATCHING (not byte-exact yet)\n\nsub_8009528 is sub_8008A40's spatial-hash-grid analog: the same\n\"extended screen box\" grid-iteration shape as sub_800944C, dispatching\neach hit to sub_80096C0 (compare-viewport is the player) or\nsub_80099F0 (otherwise) - the same dispatch sub_8008A40 makes to\nsub_8008AD8/sub_8008D80, down to the same \"unavoidable extra boxH\nload\" idiom.\n\nEvery branch, field offset, and call argument is confirmed correct.\nParked because the compiled size stays noticeably larger than the ROM\nbeyond the established boxH gap - likely a stack-frame/register\nallocation difference across the two duplicated dispatch blocks, not\nchased further given the size of the remaining raw cluster.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.0134277,"total_code":242220,"matched_code":10938,"matched_code_percent":4.5157294,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":276,"matched_functions_percent":13.378575,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":53,"complete_units":0}},{"timestamp":"2026-09-17T00:31:05Z","commit_sha":"b2ec75e364b96824346dc51845087e86ece653fb","commit_message":"Park sub_80096C0 as NON_MATCHING (not byte-exact yet)\n\nsub_80096C0 is sub_8008AD8's twin: byte-identical collision-hit\nresolution logic, confirmed by reading its disassembly directly\nagainst sub_8008AD8's own, just called from this spatial-hash-grid\ncluster instead of the plain array manager. Reused sub_8008AD8's\nexact C body rather than re-derive it. Parked on the same boxH\nstack-layout gap (confirmed by the resulting object being exactly 8\nbytes short of the real ROM size, matching sub_8008AD8/sub_8008D80/\nsub_80099F0's own gap).\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.0134277,"total_code":242220,"matched_code":10938,"matched_code_percent":4.5157294,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":276,"matched_functions_percent":13.378575,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":54,"complete_units":0}},{"timestamp":"2026-09-17T00:24:36Z","commit_sha":"088f4028f1e41154e70fed8b20b9bec0de80506c","commit_message":"Park sub_800944C as NON_MATCHING (not byte-exact yet)\n\nsub_800944C is the same \"extended screen box\" filter shape as\nsub_8008C80, but iterates the spatial hash grid directly and fires\nper-object trampolines instead of building a second array. Every\nload, store, and field offset is confirmed correct, down to the same\nregister roles as sub_8008C80's own box construction plus the\nearly-address-hoisting pattern established for sub_8008F20/\nsub_8009150. Parked on a single register-reuse choice: \"bucket =\nbaseIdx + 2\" naturally reuses baseIdx's own register in place, while\nthe ROM computes it into a separate register.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.0134277,"total_code":242220,"matched_code":10938,"matched_code_percent":4.5157294,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":276,"matched_functions_percent":13.378575,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":53,"complete_units":0}},{"timestamp":"2026-09-17T00:16:16Z","commit_sha":"b42060bb2db67fb1ee84b038edb1843b8c0facfc","commit_message":"Park sub_8009914 as NON_MATCHING (not byte-exact yet)\n\nsub_8009914 resets a pool manager to empty: tears down every active\nobject, then rebuilds the grid and free list from scratch. The\nteardown loop is confirmed correct; the rebuild loop is a byte-for-byte\ncopy of sub_8008F20's own tail and hits the identical many-register\n(sb/sl/r8) allocation gap documented there. Parked for the same\nreason.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.0134277,"total_code":242220,"matched_code":10938,"matched_code_percent":4.5157294,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":276,"matched_functions_percent":13.378575,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":52,"complete_units":0}},{"timestamp":"2026-09-17T00:11:32Z","commit_sha":"365491bea5edd12fa3f49b35a98844507b2035c6","commit_message":"Park sub_8009150 as NON_MATCHING (not byte-exact yet)\n\nsub_8009150 lazily creates a \"large object\" bucket-255 grid\nregistration for an object that didn't get one at insert time\n(sub_8009B3C's retroactive counterpart). Every load, store, and field\noffset is confirmed correct, and explicit register pins reproduce the\nwhole function except one detail: this compiler correctly hoists a\nloop-invariant free-list-head address computation out of a\n255-iteration loop, while the ROM recomputes it fresh every non-empty\nbucket. Parked on this single 2-byte gap.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.0134277,"total_code":242220,"matched_code":10938,"matched_code_percent":4.5157294,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":276,"matched_functions_percent":13.378575,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":52,"complete_units":0}},{"timestamp":"2026-09-17T00:03:42Z","commit_sha":"098a076357aec0fc15e94cbbd74fd5b06d0c4797","commit_message":"Add naming reconsideration to the cleanup pass checklist\n\nPrompts revisiting whether a function can now be confidently named\nonce it's fully understood, as part of step 7's cleanup pass -\nexplicitly not a requirement for marking a function matched or\nparked, since sub_XXXXXXXX is a complete final state on its own.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.0134277,"total_code":242220,"matched_code":10938,"matched_code_percent":4.5157294,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":276,"matched_functions_percent":13.378575,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":51,"complete_units":0}},{"timestamp":"2026-09-16T22:45:54Z","commit_sha":"49b39cc465f4ccc638a7e758882238a51823889f","commit_message":"Match sub_8009CA0 to real C; park sub_8009D5C\n\nsub_8009CA0 tests part for a collision-grid hit against the player,\ngated by flag bits and a periodic fast-path check against the\ngUnknown_0300082C frame counter, via the already-matched AABB builders\nsub_8007C30/sub_8007CF8 and sub_800B37C; on a hit, calls sub_8009D5C.\n\nNeeded a switch statement (not an if/else-if chain, which this\ncompiler always normalizes \"x >= 1\" down to \"x > 0\" for) to reproduce\nthe ROM's exact 3-way mode dispatch, several byte-destination-register\npins for flag-bit tests, and an unsigned comparison for the\nframe-counter check. The full clean rebuild also caught a genuine\nlogic bug an isolated compile didn't surface: the first AABB's hit-test\nfailure must fall through to the second AABB, not return early.\n\nsub_8009D5C fires a table-driven trampoline based on gUnknown_030012C0's\nmode; every branch and argument is confirmed correct, and the same\nswitch-based dispatch plus explicit gotos into an ABI-register-pinned\nshared tail get it extremely close - parked on one remaining\nconditional-branch encoding gap in the mode-3 case that no equivalent\nC construct this compiler accepts reproduces.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":6.0134277,"total_code":242220,"matched_code":10938,"matched_code_percent":4.5157294,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":276,"matched_functions_percent":13.378575,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":51,"complete_units":0}},{"timestamp":"2026-09-16T22:25:07Z","commit_sha":"748a79ec75822df7c93a65d411d3f9a4ebd6db28","commit_message":"Document convention for genuinely unused (uncalled) functions\n\nA function with no caller anywhere in the ROM still goes through the\nfull matching workflow like any other function - being dead code isn't\na reason to skip it. What changes is the documentation: tag it plainly\nas UNUSED with the reason it's dead (if one is actually supported by\nwhat's visible in the ROM), rather than leaving a vague TODO/question.\nAlso clarifies this is distinct from a function whose return value is\nmerely discarded by its caller.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":5.8889985,"total_code":242220,"matched_code":10750,"matched_code_percent":4.438114,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":275,"matched_functions_percent":13.330102,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":50,"complete_units":0}},{"timestamp":"2026-09-16T22:20:55Z","commit_sha":"cdee751c72b4ba4fcddcb72fd77b1d31bb9b940b","commit_message":"Cleanup pass: replace raw offset casts with named structs\n\nactor_part11.c: introduce struct dual_array_manager (capacity/count1/\ncount2/array1/array2) for sub_8008DC0/DEC/E50/E94/EB4/EE4, replacing\n*(s32 *)((u8 *)manager + N) casts with named field access.\n\nactor_part12.c: introduce struct pool_manager (activeCount/capacity/\nslotArray/nodeArray/gridHead[256]/gridTail[256]/freeListArray/\nfreeListHead) for sub_8009A30/AA0/AF0/B3C/B70/B9C, same treatment.\n\nactor_part10.c and sub_8008F20 (in actor_part11.c) are deliberately\nleft as raw offset casts: both rely on register-variable pins to\nreproduce exact ROM instruction ordering, and this session already hit\nreal regressions from assuming a rewrite was behavior-preserving\nwithout rebuilding - left with a comment explaining why, per\ndocs/workflow.md step 7's existing carve-out.\n\nVerified byte-exact via full clean rebuild after each file's\nconversion, per docs/workflow.md's now-stricter step 6.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":5.8889985,"total_code":242220,"matched_code":10750,"matched_code_percent":4.438114,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":275,"matched_functions_percent":13.330102,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":50,"complete_units":0}},{"timestamp":"2026-09-16T22:15:03Z","commit_sha":"0298826f4ce3c025e83248060bf9cfca606d2ce1","commit_message":"Match sub_8009A30 through sub_8009B9C to real C; park sub_80099F0\n\nNew src/graphics/actor_part12.c holds active-object array/grid\nmanipulation primitives built on sub_8008F20's pool-manager struct:\n\n- sub_8009A30 / sub_8009AA0: remove an entry from the active-object\n  array (search-based and index-based) via sub_8009008 + the CpuSet\n  compaction shape\n- sub_8009AF0: pops a node off the free list and inserts it into the\n  spatial grid (head/tail table pair for O(1) per-bucket append)\n- sub_8009B3C: grid-insert wrapper handling the \"large object, second\n  bucket\" case\n- sub_8009B70: active-object array append\n- sub_8009B9C: pool-manager teardown\n\nsub_80099F0 is byte-identical in shape to the already-parked\nsub_8008D80 (same boxH stack-layout gap) and is parked reusing its\nexact C body.\n\nCaught two real regressions only via the full clean rebuild after\nintegrating the whole batch, not from the individual isolated\nper-function compiles: sub_8009AA0 needed its array-base load ordered\nbefore the index-shift computation, and sub_8009B3C must return void\n(the ROM never sets up a return value, since its only caller ignores\nthe result) plus needed its flags-bit-test byte pinned to r1. Strengthened\ndocs/workflow.md accordingly: an isolated compile is a diagnostic tool,\nnever proof of a match - only a full clean `make compare` on the\nintegrated batch counts.\n\nSplit asm/code_3_2_13.s at sub_8009BE0 (into new asm/code_3_2_14.o) to\nkeep this batch correctly ordered between the raw sub_8009008-\nsub_8009914 span and the still-raw sub_8009BE0-sub_8009D5C remainder.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":5.8889985,"total_code":242220,"matched_code":10750,"matched_code_percent":4.438114,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":275,"matched_functions_percent":13.330102,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":50,"complete_units":0}},{"timestamp":"2026-09-16T12:47:54Z","commit_sha":"cd012465442aeb865cdb8c0e84ebdb854ff2e481","commit_message":"Park sub_8008F20 as NON_MATCHING (not byte-exact yet)\n\nsub_8008F20 initializes a fixed-slot object-pool manager struct: two\nbig 256-word zeroed tables (likely a pair of spatial-partition/\ncollision grids), plus a singly-linked free list built over an\nallocated node array. Every load, store, and field offset is\nconfirmed correct, and the isolated reconstruction reproduces the\nROM's exact branch structure and its use of ip/r8 - but four\nlong-lived scalars (item count, two persistent field addresses, a\nreused loop index, a running byte offset) land in a different\ncombination of r3/sb/sl/r4/r8 than the ROM's own allocation. Parked\nrather than chase a four-scalar, three-high-register allocation puzzle\nfor one function.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":5.695587,"total_code":242220,"matched_code":10398,"matched_code_percent":4.292792,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":270,"matched_functions_percent":13.087736,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":48,"complete_units":0}},{"timestamp":"2026-09-16T12:42:20Z","commit_sha":"3ea2e771755fb98334ccd4a01068f07a7920c6fc","commit_message":"Match sub_8008DC0 through sub_8008EE4 to real C\n\nNew src/graphics/actor_part11.c holds six self-contained \"manager\"\narray utility functions found right after the parked sub_8008D80:\n\n- sub_8008DC0: fires a table-driven trampoline for every entry in a\n  manager's array\n- sub_8008DEC / sub_8008E50: array-element removal via a CpuSet-based\n  compaction shift, one locating the index by a linear search, one\n  taking it directly as an argument\n- sub_8008E94: capacity-checked array append\n- sub_8008EB4: two-array manager teardown (mem_free via sub_8026EB4,\n  optionally the manager itself via sub_8026ED0)\n- sub_8008EE4: two-array manager initializer (mem_alloc via\n  sub_8026EC0, zero-filling the first array)\n\nsub_8008DEC needed an explicit goto-based rewrite to reproduce the\nROM's asymmetric branch targets (its \"not found\" exits skip straight\npast the compaction guard, while its \"found\" exits fall through into\nit - a plain if/do-while collapses all three to the same point).\n\nSplit asm/code_3_2_12.s at sub_8008F20 (into new asm/code_3_2_13.s) to\nkeep these six functions correctly ordered between the parked\nsub_8008D80 and the still-raw remainder of the AI/collision cluster,\nper this project's established file-splitting convention for\nnon-adjacent matched spans.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":5.61969,"total_code":242220,"matched_code":10398,"matched_code_percent":4.292792,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":270,"matched_functions_percent":13.087736,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":48,"complete_units":0}},{"timestamp":"2026-09-16T12:32:38Z","commit_sha":"7a12f2b38de1aadc6a2f173fe513a8397d20de2a","commit_message":"Match sub_8008C80 through sub_8008D30 to real C; park sub_8008D80\n\nsub_8008C80/sub_8008CEC/sub_8008D30 (new src/graphics/actor_part10.c)\nare byte-exact matches for the \"extended screen box\" filter, the\ntable-driven-trampoline-plus-clear teardown, and the selector-gated\ntrampoline dispatcher that follow sub_8008AD8 in ROM order.\n\nsub_8008D80 is sub_8008AD8's sibling collision-hit resolver (handles\nthe case where the \"compare viewport\" isn't the current one) and is\nparked under #if NON_MATCHING for the same boxH stack-layout gap\ndocumented for sub_8008A40/sub_8008AD8.\n\nCorrectness fix: the newly-matched functions were initially appended\ntextually after sub_8008AD8's park inside actor_part7.c, but since\nthat file links entirely before code_3_2_8.o (which still holds the\nparked sub_800891C/sub_8008A40/sub_8008AD8 raw blocks), this placed\nthe new functions' bytes before intervening still-raw content whose\nreal ROM address falls between them, corrupting every bl target after\nthat point. Fixed via a proper 3-way split: code_3_2_8.s now ends\nright after sub_8008AD8's guard; the new actor_part10.c holds exactly\nthe newly-matched span; the new code_3_2_12.s starts at sub_8008D80's\nguard and holds the remaining raw AI/collision cluster content that\nused to trail in code_3_2_8.s. ldscript.txt updated to link the new\nobjects in the correct order.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":5.476019,"total_code":242220,"matched_code":10050,"matched_code_percent":4.149121,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":264,"matched_functions_percent":12.796898,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":47,"complete_units":0}},{"timestamp":"2026-09-16T12:11:56Z","commit_sha":"c849526fa26bca1969da913e2a9d3ff2e82fa1b7","commit_message":"Park sub_8008AD8 as NON_MATCHING (not byte-exact yet)\n\nResolves collision push-out between a part and the player against\nthe box sub_8008A40 passes in, branching on gUnknown_030012C0's mode\nfield and part's own flag bits, firing table-driven trampolines and\n(in one path) a sound effect. A ~150-instruction function with every\nbranch, field offset, and call argument confirmed correct; parked on\ntwo small structural gaps this compiler can't directly express: an\nunavoidable extra load for a box coordinate the ROM leaves untouched\nin its stack slot, and a knock-on register-letter difference for\npart.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":5.19456,"total_code":242220,"matched_code":9798,"matched_code_percent":4.045083,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":261,"matched_functions_percent":12.651478,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":46,"complete_units":0}},{"timestamp":"2026-09-16T12:04:57Z","commit_sha":"54ea71b6b35182dce0849b97d6aa5cb7872fd5b6","commit_message":"Park sub_8008A40 as NON_MATCHING (not byte-exact yet)\n\nThe first function in the AI/collision cluster: iterates a manager's\npart array, broad-phase-tests each via a table-driven trampoline plus\na flags check, then dispatches to sub_8008AD8 or sub_8008D80 depending\non whether a caller-supplied viewport matches gUnknown_030012D8.\n\nResolves sub_800014C, one of docs/rom_map.md's long-standing open\nquestions (\"packed state round-tripping\"): reading its definition in\nasm/crt0.s shows it's a plain memcpy-style wrapper around the GBA\nBIOS CpuSet SWI.\n\nEvery branch and call argument confirmed correct; parked purely on a\nregister-spill gap for one argument that needs to survive the whole\nloop - pinning it to r7 (the ROM's own register) produces a genuine\nmiscompile rather than fixing the gap, aliasing it with the unrelated\nloop counter.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":5.19456,"total_code":242220,"matched_code":9798,"matched_code_percent":4.045083,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":261,"matched_functions_percent":12.651478,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":46,"complete_units":0}},{"timestamp":"2026-09-16T12:02:19Z","commit_sha":"8c5d977647973f67977a2286028a31671a33fc2c","commit_message":"Match sub_8009FD4 to real C\n\nResolved while investigating the sub_8008A40 collision cluster: the\ntable+0x14 function-pointer read before its sub_803AD88 call is a\ngenuine \"dead read\", the same idiom already established and tested\nfor sub_8007DBC's own sub_803AD88 call - sub_803AD88 is a plain\n4-argument function, not itself a trampoline. Folded into the front\nof actor_part9.c, replacing the now-empty code_3_2_10.o.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":5.19456,"total_code":242220,"matched_code":9798,"matched_code_percent":4.045083,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":261,"matched_functions_percent":12.651478,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":46,"complete_units":0}},{"timestamp":"2026-09-16T11:51:33Z","commit_sha":"17ea10bc6a98d70c065e5292217ece59d91f13cb","commit_message":"Match sub_8009FF4 through sub_800A0F4 to real C\n\nLeave sub_8009FD4 raw (uncertain register roles for a 4th call\nargument to sub_803AD88), and resume matching at sub_8009FF4 - an\nAABB-vs-region overlap test reusing already-matched AABB builders,\nplus a long run of simple field accessors and bulk setters.\n\nsub_8009FF4 needed its control flow rewritten with explicit gotos\ninto a single shared exit to reproduce the ROM's one epilogue reused\nby every return path, plus the flags byte loaded into part's own\ndying register through an unsigned intermediate for a logical shift.\n\nsub_800A0AC initially \"matched\" with the wrong register roles (a\nmisread ROM trace that still happened to produce a plausible-looking\nbut wrong sequence) - caught only by the full clean make compare,\nsince isolated per-function tests can't tell a coincidentally-correct\ntranscription from a genuinely correct one on their own.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":5.1813493,"total_code":242220,"matched_code":9766,"matched_code_percent":4.031872,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":260,"matched_functions_percent":12.603005,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":47,"complete_units":0}},{"timestamp":"2026-09-16T11:43:14Z","commit_sha":"0d95ab8976a52e33c3f21617ea4931afd83dc42b","commit_message":"Match sub_8009EA8 through sub_8009FB0; park sub_8009DF4\n\nSkip past a large, deeply interconnected AI/collision/physics\ndispatch cluster (sub_8008A40 through sub_8009DF4-ish) that touches\ngUnknown_030012C0/gUnknown_030012D8 - globals docs/rom_map.md itself\nstill describes as only partially understood after extensive prior\ninvestigation. Left that whole span raw rather than guess at\nsemantics, and resumed matching at sub_8009DF4 (self-contained, no\ncalls into the unclear cluster) and the recognizable \"part object\"\nfamily immediately after it, which reuses several functions already\nmatched this session (sub_8008484, sub_8008364).\n\nsub_8009DF4 (a velocity/position integrator) parked as NON_MATCHING:\nevery branch and memory access confirmed correct, but the ROM is a\ntrue leaf function fitting entirely in r0-r3 while every arrangement\ntried here needs one extra spilled register.\n\nsub_8009F1C/sub_8009FB0's table-trampoline calls needed their addr\ncomputed before the fn load to avoid aliasing two register-pinned\nvariables onto the same physical register, which silently computed\nthe wrong address rather than just mismatching bytes.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":5.0797887,"total_code":242220,"matched_code":9520,"matched_code_percent":3.9303112,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":241,"matched_functions_percent":11.682016,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":45,"complete_units":0}},{"timestamp":"2026-09-16T11:20:24Z","commit_sha":"b32035b8a9702ddd8c7e627b4a4a4f0dfd4af6c5","commit_message":"Park sub_800891C as NON_MATCHING (not byte-exact yet)\n\nA new system: filters/compacts an array of part-like objects into a\nsecond output array, broad/narrow-phase-testing each against a\ngUnknown_03001308-sub-object-centered region pair via table-driven\ntrampolines (sub_803AD80/sub_803AD7C, confirmed BLX-emulation\ntrampolines per docs/rom_map.md), with removal via the GBA BIOS\nCpuSet SWI (sub_803A94C). Semantics and every call shape confirmed\ncorrect; parked purely on a loop-counter register allocation gap\n(high register instead of the ROM's r7) - pinning r7 explicitly\nreproduces the known r7-pin corruption pattern instead of fixing it.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.9600625,"total_code":242220,"matched_code":9230,"matched_code_percent":3.8105853,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":231,"matched_functions_percent":11.197286,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":43,"complete_units":0}},{"timestamp":"2026-09-16T11:11:42Z","commit_sha":"7f3319f4bdca256d2fe83e4cc8b6ac2f9e8ff287","commit_message":"Match sub_8008830 through sub_8008904 to real C\n\nFifteen more part+0x24/+0x28/+0x29/+0x38/+0x3c field accessors, a\nposition-resolve-and-dispatch function, and two more part-object\ntable-swap constructors. Same s32-not-u8 parameter-typing and\n+r-constraint fixes from earlier in this file recur here.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.8753037,"total_code":242220,"matched_code":9230,"matched_code_percent":3.8105853,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":231,"matched_functions_percent":11.197286,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":43,"complete_units":0}},{"timestamp":"2026-09-16T01:06:38Z","commit_sha":"626dc3112a8a93c53f58add284970d84c13bd149","commit_message":"Match sub_800878C through sub_8008824 to real C\n\nTwo more keyframe-record byte lookups plus a run of plain field\nget/set/reset/increment accessors, non-adjacent to actor_part6.c's\nmatched functions since the parked sub_8008770 sits raw between them.\n\nCaught via the usual diagnostic: appending directly to actor_part6.c\nmatched byte-exact in isolation but broke the full ROM checksum, with\ncmp finding the first differing byte far outside this region (a bl\ninstruction hundreds of KB earlier, whose target had shifted). Fixed\nby splitting asm/code_3_2_7.s again at the sub_8008830 boundary into\nitself (now just the parked sub_8008770) and a new\nasm/code_3_2_8.s, with the new src/graphics/actor_part7.c inserted\nbetween them in ldscript.txt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.782826,"total_code":242220,"matched_code":9006,"matched_code_percent":3.7181075,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":217,"matched_functions_percent":10.5186615,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":43,"complete_units":0}},{"timestamp":"2026-09-16T00:57:42Z","commit_sha":"6d7dbb9abc534658790bbec1d55f40d9852d0e30","commit_message":"Match sub_80086E4 through sub_800876C; park sub_8008770\n\nEleven more part+0x2c/+0x28/+0x38/+0x29/+0x20 accessors and keyframe-\nrecord lookups. sub_8008754 hit a new compiler quirk: (u8 & 0xf)\ncompiles to a much longer defensive shift sequence than (s32 & 0xf)\nin this compiler, fixed by retyping the parameter.\n\nsub_8008770 parked as NON_MATCHING: matches the ROM through the AND\nthat computes its result, but the ROM's trailing byte-truncation gets\noptimized away here since the compiler can prove the value already\nfits, and forcing it back in reintroduces a fold-to-zero miscompile.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.7217245,"total_code":242220,"matched_code":8858,"matched_code_percent":3.657006,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":202,"matched_functions_percent":9.791566,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":42,"complete_units":0}},{"timestamp":"2026-09-16T00:48:59Z","commit_sha":"3edad39dcc3b52ea193fdd77f88bbe51cf6a8f1e","commit_message":"Match sub_800868C through sub_80086D8 to real C\n\nEight more part+0xd/part->flags/part+0x2d flag and byte accessors.\nEvery AND/OR one needed its bitmask register-pinned and computed\nbefore the byte load to match the ROM's own instruction order - the\nnatural compile puts the byte load first, a real (non-cosmetic)\nreordering versus the ROM.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.658972,"total_code":242220,"matched_code":8730,"matched_code_percent":3.6041613,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":192,"matched_functions_percent":9.306834,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":42,"complete_units":0}},{"timestamp":"2026-09-16T00:46:06Z","commit_sha":"13f784141111ea29222d7d305c1a50a88a9b593e","commit_message":"Match sub_8008640 through sub_8008680 to real C\n\nSix small part+0xd/part+0x25 flag and byte accessors. Two compiler\nquirks needed fixing: (x^k)&k folds into a single bic instead of the\nROM's separate eor+and (sub_800865C, fixed with a two-instruction\ninline asm anchor, plus a +r constraint to stop constant-propagation\nof a leftover register value from corrupting a later mask load), and\n&= ~N folds into a single mov immediate instead of the ROM's\nmovs+negs pair (sub_8008680, fixed by register-pinning the mask to a\nnegative literal as its own statement).\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.6275954,"total_code":242220,"matched_code":8654,"matched_code_percent":3.5727851,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":184,"matched_functions_percent":8.91905,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":42,"complete_units":0}},{"timestamp":"2026-09-16T00:40:35Z","commit_sha":"c709041ee37eccd886f3a2efe59018c306aa285e","commit_message":"Match sub_8008604 and sub_8008618 to real C\n\nsub_8008604 is the same keyframe-record-address lookup used\nthroughout this ROM region (see sub_8008394). sub_8008618 clamps a\nframe argument to the record's duration; its final add hit the usual\nresistant operand-order canonicalization, but since it isn't inside a\nswitch (no case-merging to protect), a one-instruction inline asm\nanchor fixed it cleanly instead of requiring a park.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.5995216,"total_code":242220,"matched_code":8586,"matched_code_percent":3.5447114,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":178,"matched_functions_percent":8.628211,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":42,"complete_units":0}},{"timestamp":"2026-09-16T00:35:30Z","commit_sha":"97b70727baf83f46bcfee9e83656c57b24a499fc","commit_message":"Match sub_80085B8 to real C\n\nSame sub_80083B8-derived-record-nibble switch shape (0/2/3/4/6 ->\ninfo+0xc, else -> gStaticData_0816B2F8). Matched on the first attempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.5755763,"total_code":242220,"matched_code":8528,"matched_code_percent":3.5207663,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":176,"matched_functions_percent":8.531265,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":42,"complete_units":0}},{"timestamp":"2026-09-16T00:33:56Z","commit_sha":"19916de012b78d17825fafc0b06be789b8fdf46e","commit_message":"Match sub_8008564 to real C\n\nSame sub_80083B8-derived-record-nibble switch shape, reusing\nsub_8007C30's exact case-to-block mapping (0/3/4 -> info+0x14, 5 ->\ninfo+0xc, else -> gStaticData_0816B2F8). Matched on the first attempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.5442,"total_code":242220,"matched_code":8452,"matched_code_percent":3.4893897,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":175,"matched_functions_percent":8.482792,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":42,"complete_units":0}},{"timestamp":"2026-09-16T00:32:08Z","commit_sha":"0cbcbedae1c9e64daae6151859c7651eda4187c9","commit_message":"Match sub_8008518 to real C\n\nSame sub_80083B8-derived-record-nibble switch shape as sub_80084C4,\nwith a different result mapping (0/4 -> info+0x1c, else ->\ngStaticData_0816B2F8). No case-scattering trick needed here since 0\nand 4 are already non-adjacent. Matched on the first attempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.509521,"total_code":242220,"matched_code":8368,"matched_code_percent":3.4547105,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":174,"matched_functions_percent":8.434319,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":42,"complete_units":0}},{"timestamp":"2026-09-16T00:30:11Z","commit_sha":"6893089623b789a9d911d795f6b8a46f4cf56824","commit_message":"Match sub_80084C4 to real C\n\nLooks up part's keyframe record (sub_80083B8) and picks a pointer off\nit via a native switch on the record's upper nibble. Getting gcc to\nemit a real jump table (instead of a compare chain) for a switch whose\ncase values naturally fall into contiguous ranges required scattering\nthe case labels out of numeric order - documented at length in\ndocs/matching.md, including an abandoned label-array/computed-goto\napproach that hit a .data-section linking problem.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.478144,"total_code":242220,"matched_code":8292,"matched_code_percent":3.4233344,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":173,"matched_functions_percent":8.385846,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":42,"complete_units":0}},{"timestamp":"2026-09-16T00:19:32Z","commit_sha":"49bcb7b745e52ac12e225d31d032d0875dd7352b","commit_message":"Match sub_80084A4 to real C\n\nSame sub_800725C/table-swap/sub_8007AB4 shape as sub_8008434, but\nre-initializes an existing part instead of allocating a new one.\nMatched on the first attempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.443465,"total_code":242220,"matched_code":8208,"matched_code_percent":3.3886547,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":172,"matched_functions_percent":8.337373,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":42,"complete_units":0}},{"timestamp":"2026-09-16T00:18:03Z","commit_sha":"aeb9b49a019a074b72421ca8ee3e9013f5f27860","commit_message":"Match sub_8008484 to real C\n\nSame gStaticData_087E3BEC-table-swap-plus-conditional-sub_8026ED0\nshape as sub_80073BC in graphics.c, matched on the first attempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.430254,"total_code":242220,"matched_code":8176,"matched_code_percent":3.375444,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":171,"matched_functions_percent":8.288899,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":42,"complete_units":0}},{"timestamp":"2026-09-16T00:16:03Z","commit_sha":"03ce684aed8c8ec55981e828e1a66fd544f3bc54","commit_message":"Match sub_8008480 to real C\n\nTrivial always-true stub, matched on the first attempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.4170427,"total_code":242220,"matched_code":8144,"matched_code_percent":3.362233,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":170,"matched_functions_percent":8.240426,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":42,"complete_units":0}},{"timestamp":"2026-09-16T00:10:01Z","commit_sha":"3d8b39b3e917501b46744080168033ac3a50fb3c","commit_message":"Match sub_8008434 to real C\n\nA struct actor-shaped object constructor: allocates via sub_8026EDC,\ninitializes it through the already-matched sub_800725C, then\noverwrites its table with gStaticData_087E3C44 and clears its\npart-object fields via the already-matched sub_8007AB4. The three u16\narguments become field_08 and the Q8 x/y position. Matched on the\nfirst attempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.4153914,"total_code":242220,"matched_code":8140,"matched_code_percent":3.3605814,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":169,"matched_functions_percent":8.191954,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":42,"complete_units":0}},{"timestamp":"2026-09-16T00:07:00Z","commit_sha":"5b3d77f931965fc1e82c71744bf832fd848e3ba3","commit_message":"Match sub_8008408 to real C\n\nThe same gUnknown_03001308 sub-object convention used throughout this\nROM region: if gUnknown_03001308+0x2b is nonzero, returns the\nsub-object's +0x34 byte's low 2 bits minus 1; otherwise returns those\nbits unmodified. Needed inverting the C condition to match the ROM's\nown if/else block layout order.\n\nNot ROM-adjacent to actor_part5.c (the parked sub_80083B8 sits raw\nbetween them), so it needed the same file-split treatment used\nthroughout this cluster: asm/code_3_2_6.s split at the sub_8008434\nboundary into itself (now just the parked sub_80083B8) and the new\nasm/code_3_2_7.s, with the new src/graphics/actor_part6.c inserted\nbetween them in ldscript.txt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.384015,"total_code":242220,"matched_code":8064,"matched_code_percent":3.3292048,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":168,"matched_functions_percent":8.14348,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":42,"complete_units":0}},{"timestamp":"2026-09-16T00:03:34Z","commit_sha":"c29f9e48aa190cbec02f3b3603ee23a397699214","commit_message":"Park sub_80083B8 as NON_MATCHING (not byte-exact yet)\n\nLooks up part's current keyframe record, conditionally clamps its\nframe index/resets its sub-counter (mirroring sub_8008044's \"done\"\nhandling), then resolves a two-level pointer-array lookup. Matches\nthe ROM instruction-for-instruction - confirmed the apparent ands\nmismatch is a disassembly-style artifact (Thumb ANDS has no 3-operand\nencoding, both forms assemble identically) - except the same \"which\noperand goes first\" add-operand-order gap as sub_8008188/sub_8008200/\nsub_8008278. Parked rather than keep chasing this one instruction,\nsame call as the other parked functions.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.36585,"total_code":242220,"matched_code":8020,"matched_code_percent":3.3110394,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":167,"matched_functions_percent":8.095007,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":41,"complete_units":0}},{"timestamp":"2026-09-15T23:57:33Z","commit_sha":"c47401b4fed6f7ee2b6c4510ce0930e639605fa6","commit_message":"Match sub_80083A8 to real C\n\nIgnores its part argument entirely (the ROM never reads r0 before\noverwriting it with a global's address) - already declared with this\nexact signature at its sub_80073DC call site in graphics.c. Returns\n(*(void **)gUnknown_030012D0)+4's value. Matched on the first attempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.334143,"total_code":242220,"matched_code":8020,"matched_code_percent":3.3110394,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":167,"matched_functions_percent":8.095007,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":41,"complete_units":0}},{"timestamp":"2026-09-15T23:55:00Z","commit_sha":"74fc86b15e9a508d9aa9ecb75b15bde273b6c4b7","commit_message":"Match sub_8008394 to real C\n\nReturns a pointer to part's current keyframe record's +4 field, the\nsame keyframe-table lookup used throughout this ROM region. Needed\ncomputing the idx*0x1c offset before dereferencing the table pointer\n(matching the ROM's own instruction order) plus register pins on\ntablePtr/idx to match the ROM's register choices exactly.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.3275375,"total_code":242220,"matched_code":8004,"matched_code_percent":3.3044338,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":166,"matched_functions_percent":8.046534,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":41,"complete_units":0}},{"timestamp":"2026-09-15T23:52:40Z","commit_sha":"1c51b5a52d9ae52fa4dcdf55d0254252bb73d9d1","commit_message":"Match sub_8008364 to real C\n\nAdvances part's animation timer (sub_8008044) then resolves two\ntable+N/table+N+4 offset/pointer slot pairs (table+0x60/+0x64 then\ntable+8/+0xc) into sub_803AD7C calls, the same slot convention\ndocumented for sub_8006FE4/sub_8007F78. Matched on the first attempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.3192806,"total_code":242220,"matched_code":7984,"matched_code_percent":3.2961771,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":165,"matched_functions_percent":7.998061,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":41,"complete_units":0}},{"timestamp":"2026-09-15T23:50:42Z","commit_sha":"495ddd0385541ae68fe2444561ba94d4888ef4fd","commit_message":"Match sub_8008350 to real C\n\nTail-calls the already-matched sub_8007A84 with the global\ngUnknown_030012CC as self. Matched on the first attempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.3002896,"total_code":242220,"matched_code":7938,"matched_code_percent":3.277186,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":164,"matched_functions_percent":7.949588,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":41,"complete_units":0}},{"timestamp":"2026-09-15T23:48:31Z","commit_sha":"1bc98d0fce28c0b636f1d78bb06cdce18ae1e24a","commit_message":"Match sub_800834C to real C\n\nTrivial always-true stub (return 1;). Matched on the first attempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.2920327,"total_code":242220,"matched_code":7918,"matched_code_percent":3.2689292,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":163,"matched_functions_percent":7.901115,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":41,"complete_units":0}},{"timestamp":"2026-09-15T23:46:58Z","commit_sha":"a713314e734d88e3332344f70b1293a2746001fc","commit_message":"Match sub_8008328 to real C\n\nThe same part+0x25==1 fast-override shape as sub_8008304, deferring\nto the already-matched sub_8006FE4 instead. A single-argument sibling,\nso the address-scratch register naturally lands in r1 instead of r2.\nMatched on the first attempt applying the same register-reuse pin\nestablished for sub_8008304.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.290381,"total_code":242220,"matched_code":7914,"matched_code_percent":3.2672777,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":162,"matched_functions_percent":7.8526416,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":41,"complete_units":0}},{"timestamp":"2026-09-15T23:45:00Z","commit_sha":"deaa31774747fa723bd4369ef6c92b5860ea4452","commit_message":"Match sub_8008304 to real C\n\npart+0x25==1 is the same fast override seen in sub_8007F78/\nsub_8007FD8; otherwise defers entirely to the already-matched\nsub_8007114, forwarding a box argument straight through untouched.\nNeeded the address computation pinned to its own register (r2, reused\nin place for the loaded byte) rather than letting the compiler use\npart's own register as scratch, which would force an extra restore\ncopy before the call that the ROM doesn't have.\n\nNot ROM-adjacent to actor_part4.c (the three parked sub_8008188/\nsub_8008200/sub_8008278 sit raw between them), so it needed the same\nfile-split treatment used throughout this cluster: asm/code_3_2_5.s\nsplit at the sub_8008328 boundary into itself (now just the three\nparked functions) and the new asm/code_3_2_6.s, with the new\nsrc/graphics/actor_part5.c inserted between them in ldscript.txt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.2763443,"total_code":242220,"matched_code":7880,"matched_code_percent":3.2532408,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":161,"matched_functions_percent":7.8041687,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":41,"complete_units":0}},{"timestamp":"2026-09-15T23:40:56Z","commit_sha":"5c3941dc46c08373c11417b6f5687ec8cdef4af5","commit_message":"Park sub_8008278 as NON_MATCHING (not byte-exact yet)\n\nA third variant of the sub_8008188 shape, this time updating both\nfields on every handled kind (kind 1/2 update field_0 and\nunconditionally also field_4; kinds 4/8/12 update field_4 and\nunconditionally also field_0). Needed the accumulator-register pin\npattern to get every instruction matching except the same single\nresistant add-operand-order gap in the shared kind-8/12 block as\nsub_8008188/sub_8008200. Parked alongside its two siblings.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.2623076,"total_code":242220,"matched_code":7846,"matched_code_percent":3.239204,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":160,"matched_functions_percent":7.7556953,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":40,"complete_units":0}},{"timestamp":"2026-09-15T23:37:31Z","commit_sha":"611bde66a8ebfc90a1f2ec0fc0e8937379b469ad","commit_message":"Park sub_8008200 as NON_MATCHING (not byte-exact yet)\n\nThe same shape as sub_8008188 (mirror-image add/subtract directions),\nparked for the identical single-instruction gap: the shared kind-8/12\nblock's add compiles with the operands in the opposite order from the\nROM. Same call as sub_8008188, see its doc comment for the full\naccount of what was tried.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.205117,"total_code":242220,"matched_code":7846,"matched_code_percent":3.239204,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":160,"matched_functions_percent":7.7556953,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":40,"complete_units":0}},{"timestamp":"2026-09-15T23:35:05Z","commit_sha":"ff718669d8d2b43b53cdfb64a33515c1a644b1d8","commit_message":"Park sub_8008188 as NON_MATCHING (not byte-exact yet)\n\nAdjusts a dest position per a kind selector and a small rec record.\nMatches the ROM instruction-for-instruction - including the exact\nnon-obvious case-body layout order and two duplicate case labels\ncorrectly sharing one code block - except a single register-register\nadd's operand order in that shared block. This compiler appears to\nalways canonicalize such an add so the destination's own prior value\nbecomes the first source operand; every technique tried (operand\nreordering, register pins, a separate result variable, an inline-asm\nanchor, reversing load order) either failed to change it or broke the\ncase-block merging in the process. Parked rather than keep chasing\nthis one instruction, same call as the other parked functions.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.156208,"total_code":242220,"matched_code":7846,"matched_code_percent":3.239204,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":160,"matched_functions_percent":7.7556953,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":40,"complete_units":0}},{"timestamp":"2026-09-15T23:26:53Z","commit_sha":"509aceba20b8a6718c079627e9a59b34accb61c5","commit_message":"Match sub_800815C to real C\n\nA small lookup: reads part's current keyframe record's +0x14 byte as\na record id and passes it to the already-matched sub_8006DF8 against\nthe global tile-asset cache gUnknown_030012B8. Matched on the first\nreal attempt after two fixes: reading the global into a local before\nthe keyframe math (matching the ROM's own instruction order) and\nreusing a single pinned register across the offset/rec/recordId\nchain, the same technique established for sub_8007B00.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.107299,"total_code":242220,"matched_code":7846,"matched_code_percent":3.239204,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":160,"matched_functions_percent":7.7556953,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":40,"complete_units":0}},{"timestamp":"2026-09-15T23:23:33Z","commit_sha":"8b960a4161c08fa0eeeb9d43d23715378c5cbe77","commit_message":"Match sub_80080C0 to real C\n\nAnother AABB-vs-region overlap test (see sub_8007FD8), this time\nbuilding the AABB inline (same keyframe-table record layout as\nsub_8007B98) instead of calling a helper, since the box needs to stay\non the stack for the final sub_8001688 overlap test. Matched on the\nfirst attempt using the established sub_8007B00-style register-chain\nreuse for the keyframe lookup (idx in r3, rec reused across table/\n+offset roles in r0, part's own register reused for the index-byte\naddress once part is dead) and the u32-shift-then-logical-shift idiom\nfor the two mirror-flag bits, since they must survive past the AABB\ncalls before being tested (unlike the sign-branch form used where the\nbit feeds an immediate if).\n\nNot ROM-adjacent to actor_part3.c (the parked sub_8008044 sits raw\nbetween them), so it needed the same file-split treatment used for\nthe earlier non-adjacent functions: asm/code_3_2_4.s split again at\nthe sub_800815C boundary into asm/code_3_2_4.s (now just the parked\nsub_8008044) and the new asm/code_3_2_5.s, with the new\nsrc/graphics/actor_part4.c inserted between them in ldscript.txt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.0891333,"total_code":242220,"matched_code":7802,"matched_code_percent":3.2210388,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":159,"matched_functions_percent":7.7072225,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":40,"complete_units":0}},{"timestamp":"2026-09-15T23:18:19Z","commit_sha":"3af4caaf3b272a666a05e575bfb88ca4a824ab4b","commit_message":"Park sub_8008044 as NON_MATCHING (not byte-exact yet)\n\nAdvances part's per-keyframe animation timer by one tick. The first\nhalf (counter-vs-duration test) matches the ROM instruction-for-\ninstruction exactly, including the ROM's ip-register trick for part\nand its inverted if/else branch layout. The second half needs the\nkeyframe-table pointer/index-byte address shared across from the\nfirst half (matching the ROM's own r3/r2 reuse, avoiding a second\npart+0x20 reload), but every attempt to add that sharing reliably made\ngcc stop using ip for part altogether, reintroducing a different,\nworse set of register mismatches. Parked with the version that gets\nthe whole first half byte-exact, same call as the other parked\nfunctions in this file.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":4.0255547,"total_code":242220,"matched_code":7648,"matched_code_percent":3.1574602,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":158,"matched_functions_percent":7.658749,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":39,"complete_units":0}},{"timestamp":"2026-09-15T23:05:43Z","commit_sha":"2e83880a5d1065dd5cb3e04a9465960adb0f415c","commit_message":"Match sub_8007FD8 to real C\n\nAn AABB-vs-region overlap test sharing sub_8007F78's part+0x25/\npart+0xd fast-path shape: builds part's own AABB via the still-parked\nsub_8007B00 and tests it against a region parameter's raw {x,y,w,h}\nfields with the standard open-interval overlap test.\n\nNeeded splitting a single \"result\" concept into two C variables (an\nouter r3-pinned earlyResult for the bit-2 fast path, a separate plain\nunpinned local for the overlap accumulator) to match the ROM's own\ntwo-stage r3-then-r7-then-r3 register usage, and a trailing\nasm(\".align 2, 0\") since it's the last function in its file (gcc's\nautomatic inter-function padding uses a real nop encoding, not the\nROM's zero bytes). Also confirmed a third distinct r7-pin failure mode\nin this toolchain: pinning the accumulator to r7 explicitly compiled\ncorrect instructions but silently dropped r7 from the prologue/\nepilogue's push/pop list; leaving it unpinned let the allocator find\nr7 on its own with the push/pop list intact.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":3.9820158,"total_code":242220,"matched_code":7648,"matched_code_percent":3.1574602,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":158,"matched_functions_percent":7.658749,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":39,"complete_units":0}},{"timestamp":"2026-09-15T20:11:44Z","commit_sha":"e4a47c08ab1cd8480564d4d2e008f57b94931d0f","commit_message":"Match sub_8007F78 to real C\n\nA visibility/on-screen check, the same shape as sub_8006FE4\n(graphics.c): part+0x25==1 is a fast override, otherwise part+0xd\nbit 2 gates a sub_803AD80 call against a 4-word region built from\ngUnknown_03001308's sub-object plus the GBA's fixed screen dimensions,\nusing the same table+N/table+N+4 slot convention sub_8006FE4 uses at\na different offset. Needed the established accumulator-register\npattern (with an unsigned shift to get lsr instead of asr), a pinned\nregister to keep the sub-object pointer in one register across all\nthree dereferences, grouping paired stores into their own blocks to\nget the ROM's \"compute both, store both\" order, and an s32 return\ntype instead of u8 to avoid a spurious re-truncation before return.\n\nNot ROM-adjacent to actor_part2.c either (the parked sub_8007DBC sits\nraw between them), so it needed the same file-split treatment as\nsub_8007C30: asm/code_3_2_3.s split again at the sub_8007FD8 boundary\ninto asm/code_3_2_3.s (now just the parked sub_8007DBC) and the new\nasm/code_3_2_4.s, with the new src/graphics/actor_part3.c inserted\nbetween them in ldscript.txt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":3.9382539,"total_code":242220,"matched_code":7542,"matched_code_percent":3.1136982,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":157,"matched_functions_percent":7.610276,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":39,"complete_units":0}},{"timestamp":"2026-09-15T20:04:52Z","commit_sha":"e9870de7f213f7113333f652cc497c2087f1674a","commit_message":"Park sub_8007DBC as NON_MATCHING (not byte-exact yet)\n\nA real gameplay function (not another AABB-builder clone): part\ncollides with the player, plays a sound and marks a global bitmap\nslot on hit (both idioms already established by sub_8007048/\nsub_80072D8), then spawns one of six \"kind\"s of object at part's\nposition depending on a sub-type field. Matches the ROM\ninstruction-for-instruction except one systematic register choice -\nthe cached &gUnknown_030012D8 address lands in r6 here instead of the\nROM's r7, cascading through the rest of the function's register\nnumbering. An explicit r7 pin crashes the compiler outright here\n(worse than the usual silently-ignored-pin failure mode), confirming\nr7 pins are categorically unsafe in this toolchain. Parked rather than\nkeep chasing this one register, same call as sub_8007B00/sub_8007B98.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":3.8986206,"total_code":242220,"matched_code":7446,"matched_code_percent":3.0740647,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":156,"matched_functions_percent":7.561803,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":38,"complete_units":0}},{"timestamp":"2026-09-15T19:54:52Z","commit_sha":"898d498c1448b51efcce87fbd695d59b590fadca","commit_message":"Match sub_8007CF8 to real C\n\nThe fourth AABB-for-keyframe builder in this cluster, same shape as\nsub_8007C30 with a simpler two-outcome switch (info+0xc vs the\ngStaticData_0816B2F8 fallback). Copying sub_8007C30's template caught\na real bug: the default case needs to fall to the fallback (matching\nthe ROM's bhi target), not info+0xc as sub_8007C30's default happened\nto - getting this wrong reordered the two switch bodies and, more\nimportantly, gave the wrong record for out-of-range type values.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":3.7651217,"total_code":242220,"matched_code":7446,"matched_code_percent":3.0740647,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":156,"matched_functions_percent":7.561803,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":38,"complete_units":0}},{"timestamp":"2026-09-15T19:50:50Z","commit_sha":"1fa53d628254f60507eb54d96da67d1a98b9e762","commit_message":"Match sub_8007C30 to real C\n\nA third AABB-for-keyframe builder (see sub_8007B00/sub_8007B98),\nselecting its record via a switch on sub_80083B8(part)'s info struct\ninstead of part's own keyframe table pointer. Needed explicit case\nlabels for every value 0-6 (not just the ones with distinct behavior)\nto get gcc to emit a jump table instead of an if/else chain, dropping\nthe buf_ indirection used in the two parked siblings (it spilled dest\nto r8 here), and an inline-asm anchor for one stubborn byte-load\nregister choice that resisted every plain C phrasing tried.\n\nNot ROM-adjacent to actor_part.c (sub_8007B00/sub_8007B98 sit raw\nbetween them), so it needed its own file: split asm/code_3_2_2.s a\nsecond time at the sub_8007CF8 boundary into asm/code_3_2_2.s (ends\nafter sub_8007B98's guard) and the new asm/code_3_2_3.s (unchanged\nremainder), with the new src/graphics/actor_part2.c inserted between\nthem in ldscript.txt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":3.6842034,"total_code":242220,"matched_code":7250,"matched_code_percent":2.9931467,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":155,"matched_functions_percent":7.51333,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":38,"complete_units":0}},{"timestamp":"2026-09-15T19:37:30Z","commit_sha":"69f2e781c3208ad6b1f5344ae33b3ff04ff32f5f","commit_message":"Park sub_8007B98 as NON_MATCHING; fix sub_8007B00's bit-test idiom\n\nsub_8007B98 builds an AABB for a part's current animation keyframe\nfrom a second, differently-laid-out keyframe table (same shape as\nsub_8007B00, different field offsets), and returns dest back to the\ncaller. Every instruction's operation, operand, and order matches the\nROM except a recurring \"which anonymous scratch register\" choice\n(about 10 of 73 instructions) plus one prologue instruction-order\nswap; multiple genuine attempts to force specific registers/order\neither got constant-propagated away or broke an already-matching spot\nelsewhere. Parked rather than keep chasing individual register\nchoices, same call as the other parked functions.\n\nWhile matching sub_8007B98's part+0x28 bit-checks (switching from\n`(flags >> N) & 1` to `(s32)(flags << (31-N)) < 0` to get the ROM's\nlsl/cmp/bge idiom instead of lsr/and/cmp/beq), discovered the same fix\napplies to sub_8007B00's identical bit-checks, which were previously\nmismatching despite that parked function's doc comment incorrectly\nclaiming they already matched. Applied the fix and corrected the\ncomment/matching.md entry.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":3.6016338,"total_code":242220,"matched_code":7050,"matched_code_percent":2.910577,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":154,"matched_functions_percent":7.4648566,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":37,"complete_units":0}},{"timestamp":"2026-09-15T19:17:41Z","commit_sha":"c339d22663848f9966c1a7a4bf5bcd405e79065c","commit_message":"Park sub_8007B00 as NON_MATCHING (not byte-exact yet)\n\nBuilds an AABB for a part's current animation keyframe via the shared\nsub_803AFE4/sub_803AFDC primitive, then mirrors it per part+0x28's\nflag bits. Matches the ROM instruction-for-instruction except one\nsystematic register choice (part lands in r6 here vs the ROM's r7,\ncascading into a 3- vs 4-register push/pop list); every fix attempted\nfor that (direct r7 pin, alternate r8 pinning, a dummy r6-blocking\npin) either reproduced the known r7-pin limitation or failed to\ncompile. Parked rather than continue chasing one register letter,\nsame call as sub_8006600/sub_8000EE4/sub_80073DC.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":3.538435,"total_code":242220,"matched_code":7050,"matched_code_percent":2.910577,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":154,"matched_functions_percent":7.4648566,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":37,"complete_units":0}},{"timestamp":"2026-09-15T19:07:08Z","commit_sha":"3e1d4818f5f04ee47ff1dbfb41ebe27eea389566","commit_message":"Match sub_8007AB4 to real C\n\nA part-object field initializer, clearing/setting several fields also\nseen in sub_80073DC/sub_8007634's disassembly - useful corroborating\nevidence for those two still-parked/unclaimed functions' field layout.\nNeeded the established accumulator-register pin for two bit-clear\nsequences, a running pointer advanced by relative offsets to match the\nROM's address reuse, a shared zero local to avoid rematerializing the\nsame constant for differently-sized stores, and a fresh-register pin\nfor the final store since the ROM doesn't reuse part's own register\neven though it's dead by that point.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":3.4900646,"total_code":242220,"matched_code":7050,"matched_code_percent":2.910577,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":154,"matched_functions_percent":7.4648566,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":37,"complete_units":0}},{"timestamp":"2026-09-15T19:01:33Z","commit_sha":"22701939be0518936b043b18597576665a7168e7","commit_message":"Match sub_8007A98, nullsub_2 to real C\n\nThe same conditionally-free idiom as sub_8006AF4/sub_8006FC8/\nsub_80073BC, and another empty stub. Both matched on the first\nattempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":3.458688,"total_code":242220,"matched_code":6974,"matched_code_percent":2.8792007,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":153,"matched_functions_percent":7.4163837,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":37,"complete_units":0}},{"timestamp":"2026-09-15T18:59:49Z","commit_sha":"33c70643826768f18e08bf16cd901f85f1916901","commit_message":"Match sub_8007A84 to real C\n\nReads part's own {x, y} pair (the same Q8 fixed-point position fields\nstruct actor has at 0x00/0x04) and forwards to sub_8007A48 - confirms\npart embeds a struct-actor-shaped position at its own start. Matched\non the first attempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":3.4487798,"total_code":242220,"matched_code":6950,"matched_code_percent":2.8692923,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":151,"matched_functions_percent":7.3194375,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":37,"complete_units":0}},{"timestamp":"2026-09-15T18:58:11Z","commit_sha":"6ee72bfbb56364e398215ba7b6d84591a1bc2c8a","commit_message":"Match sub_8007A48, split code_3_2.s for the actor-part cluster\n\nsub_8007A48 (new file src/graphics/actor_part.c) resolves\nscreen-vs-camera-relative position before calling sub_80073DC. Its\nreal ROM address sits right after sub_80073DC/sub_8007634, which stay\nunclaimed - sub_80073DC parked as NON_MATCHING, sub_8007634 left\nfully raw (a GBA hardware affine-sprite-scaling variant that needs\ndedicated reverse-engineering, not a guessed reconstruction). Split\nasm/code_3_2.s into itself (ending after sub_8007634) and a new\nasm/code_3_2_2.s (starting after sub_8007A48) to interleave\nactor_part.o between them in link order, unlocking a long run of\nmuch smaller, tractable functions beyond this point.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":3.4413486,"total_code":242220,"matched_code":6932,"matched_code_percent":2.8618612,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":150,"matched_functions_percent":7.270965,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":37,"complete_units":0}},{"timestamp":"2026-09-15T18:50:42Z","commit_sha":"e0ab262c942239b6cd858f939708bca71a51e049","commit_message":"Park sub_80073DC as NON_MATCHING (not byte-exact yet)\n\nA ~600-byte function building one OAM entry per visible sub-piece of\nan animated part, plus a combined VRAM tile upload for the whole\npart. The logic is confirmed correct - every AND/OR/shift constant,\nbranch condition, and call argument lines up with the ROM - but the\nROM's true stack frame spills more locals (posPtr, the cached\npart+0x28 flags-byte pointer) than this reconstruction's smaller\nvariable footprint does, causing register-letter differences through\nmost of the per-piece loop. Compiled only under NON_MATCHING; the\nchecked-in matching assembly is used for the real build, guarded by\n.if NON_MATCHING == 0, matching the sub_8006600/sub_8000EE4 pattern.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":3.2954407,"total_code":242220,"matched_code":6874,"matched_code_percent":2.837916,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":149,"matched_functions_percent":7.2224913,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":35,"complete_units":0}},{"timestamp":"2026-09-15T18:30:16Z","commit_sha":"3accc73032b04b6e944e2882c3825c6298b718a3","commit_message":"Match sub_80073BC to real C\n\nRewires self->table to gStaticData_087E3BEC and conditionally frees\nself if arg1 & 1 - the same conditionally-free idiom as\nsub_8006AF4/sub_8006FC8. Matched on the first attempt.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":3.2954407,"total_code":242220,"matched_code":6874,"matched_code_percent":2.837916,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":149,"matched_functions_percent":7.2224913,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":35,"complete_units":0}},{"timestamp":"2026-09-15T10:11:05Z","commit_sha":"1609065329289676f123effea040573318be218e","commit_message":"decomp.dev: add game_loop/actor/graphics_loading/audio/hud/overlay_ui progress categories\n\ndocs/rom_map.md's whole-ROM reconnaissance pass has, over many rounds\nof direct function reads this session, reached high confidence on\nwhere most of the ROM's still-raw categories actually start and end.\nReflects that in tools/report_units.py: the four giant \"still raw,\nuncategorized\" address ranges are now split into 15 category-tagged\nsub-ranges (verified against real function-start labels in\nexpected/code_3.s - one address, 0x0802B348, fell mid-function and\nwas snapped to the nearest real label 28 bytes forward). None of this\ncode is matched yet, so no unit gets a base_path; the category tag\njust lets decomp.dev show a per-system progress bucket at 0% instead\nof lumping everything into one undifferentiated total.\n\nmenu_ui and fx don't get their own address range since both are\nindividual functions scattered inside another category's contiguous\nspan rather than a separate block - folded into their containing\ncategory instead, same as a few smaller-scale interleavings (SIO\ninside overlay_ui, generic division helpers inside the GAX2 span, an\n~1.1KB fx/unlabeled slice inside the hud gap after MainLoop) - all\nflagged inline in report_units.py's comments and docs/decomp_dev.md.\n\nVerified: UNITS list sorted with no duplicate/mid-function addresses,\n`make NON_MATCHING=1 report` generates objdiff.json cleanly (35 units,\n9 categories), per-category byte totals cross-check closely against\nrom_map.md's own category breakdown table, and a full clean\n`make compare` still passes untouched.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":2.4903874,"total_code":242220,"matched_code":4924,"matched_code_percent":2.0328627,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":80,"matched_functions_percent":3.8778477,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":35,"complete_units":0}},{"timestamp":"2026-09-14T22:33:43Z","commit_sha":"3aacc6e4285b684c07771724ee4181b38a98269f","commit_message":"game_loop core: two vtable-dispatch hits fold in, core down to ~7.6KB unexplained\n\nsub_800BD48/sub_8018E4C confirmed entity-vtable-dispatched (already\ncounted in the 93-vtable bucket). sub_800BD48 synthesizes four\npreviously-separate leads in one function (window-register bitset,\ndirectional-target field layout, shared input-check, floating-text\nfeedback). New: a floating combo-text/score-popup system distinct\nfrom the map-screen popup text, a per-level-table OAM consumer\n(sub_80073DC), and a palette/gradient generator (sub_801D828,\npartial) distinct from the fade-to-black effect.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":2.4903874,"total_code":242220,"matched_code":4924,"matched_code_percent":2.0328627,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":80,"matched_functions_percent":3.8778477,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":24,"complete_units":0}},{"timestamp":"2026-09-14T03:06:12Z","commit_sha":"ae75a634134553aae820f43b1af6dfbc9bd05d05","commit_message":"Split decomp.dev report into per-file units with categories\n\nReplaces the single merged target/base unit with one objdiff unit per\nmatched src/*.c file, each tagged with a category (graphics/util/system,\nmirroring src/'s own layout) via objdiff.json's progress_categories, so\ndecomp.dev can show a progress bar per system instead of just one\noverall total. Plus one untagged unit per still-fully-raw stretch of\nROM, correctly counted toward the overall total but not attributed to\nany category yet.\n\nThis has to be per-file, not per-category-merged into one blob: ld -r\nmerging non-adjacent functions (the way a merged \"Util\" object would,\nsince math_util.c and time_util.c aren't ROM-adjacent) reintroduces the\nexact same size-inference boundary bug already fixed for mem_collect.\nA matched file is always one contiguous ROM region by convention\nthough, so slicing/pairing one target+base object per file keeps every\nfunction's inferred size correct, and category totals fall out of\naggregating tagged units.\n\nNew tools:\n- tools/slice_expected.py - pulls one file's address range out of\n  expected/code_3.s or expected/legacy.s at the text level (same\n  technique legacy.s itself was carved out with), preserving\n  relocations/literal pools. Fixed a real bug in it during testing: the\n  slice boundary landed right on a function's bare label, leaving the\n  preceding thumb_func_start directive (which sets .global) out - every\n  slice's first function was silently going local and vanishing from\n  objdiff's function list.\n- tools/report_units.py - the per-file address table (hand-derived from\n  a clean `make compare`, NON_MATCHING=0, build's map - deliberately not\n  NON_MATCHING=1, whose addresses drift downstream of any parked\n  function's imperfect byte count) and the script that slices, patches,\n  and writes objdiff.json.\n- tools/patch_expected_target.py now tolerates running per-slice:\n  corrections that don't apply to a given slice (rename target absent,\n  split address out of range) are skipped rather than erroring, since\n  the same corrections.txt is now passed to every slice unfiltered.\n\nobjdiff.json is generated by `make report` now and gitignored, no\nlonger hand-maintained.\n\nAudio isn't split out as its own category yet - docs/audio.md's own\nnotes flag its address range as having non-audio code interleaved, so\nit needs a boundary-refinement pass before it can be sliced accurately;\ndocumented as a follow-up in docs/decomp_dev.md rather than guessed at.\n\nVerified via full clean rebuilds that make compare is unaffected and\nthe report's overall totals (2063 functions, 80 matched) exactly match\nthe pre-split numbers - category breakdowns: graphics 32/35, util\n22/25, system 26/28.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":2.4903874,"total_code":242220,"matched_code":4924,"matched_code_percent":2.0328627,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2063,"matched_functions":80,"matched_functions_percent":3.8778477,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":24,"complete_units":0}},{"timestamp":"2026-09-14T01:48:36Z","commit_sha":"65f11df327f900c04f0d2a8e3c1419a203f644fb","commit_message":"Split src/ by system, move status docs out of README\n\nReorganizes the flat src/ directory into src/graphics/, src/util/,\nsrc/system/ (and an empty src/audio/, reserved for when the sound\nengine starts getting matched) grouping files by what they actually do\nrather than leaving them all in one directory. Updates the Makefile's\nsource globbing/build-directory creation to match, every hardcoded\nobject path in ldscript.txt, and every src/*.c reference in docs and\ncode comments.\n\ndecomp.dev integration (docs/decomp_dev.md) needed one small update -\nREPORT_EXCLUDE's paths - and nothing else: expected/code_3.s and the\ntarget/base object merge are keyed by symbol name, not source layout.\nVerified both `make compare` and `make NON_MATCHING=1 report` produce\nbyte-identical output to before the move.\n\nAlso moves the README's \"Current state\" per-function status list into\ndocs/status/<system>.md (one per src/ subdirectory), matching the new\nlayout, and closes a small pre-existing gap by adding main.c/memory.c's\nmatched functions to docs/status/system.md - they predated the README\nlist but were never folded into it.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":1.8457148,"total_code":240894,"matched_code":3338,"matched_code_percent":1.3856717,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2045,"matched_functions":56,"matched_functions_percent":2.7383864,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1,"complete_units":0}},{"timestamp":"2026-09-14T01:30:50Z","commit_sha":"8483f5aa6f3206745805924c4c1bfae35d032290","commit_message":"Fix CI missing Pillow/libpng/zlib dependencies\n\nThe workflow's apt-get install line had drifted out of sync with\nINSTALL.md's documented requirements - tools/framed_gfx.py and\ntools/linear_gfx.py need Pillow (python3-pil) to build graphics, and\ntools/gbagfx needs libpng-dev/zlib1g-dev to compile, but CI never\ninstalled any of the three, so any push that actually exercised the\ngraphics build failed with ModuleNotFoundError: No module named 'PIL'.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013yLgvwKyr9CQTVb3LtWg4u","measures":{"fuzzy_match_percent":1.8457148,"total_code":240894,"matched_code":3338,"matched_code_percent":1.3856717,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":2045,"matched_functions":56,"matched_functions_percent":2.7383864,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1,"complete_units":0}}]