[{"timestamp":"2026-11-12T22:34:49Z","commit_sha":"85a16e37476edabd344576f0fa8032129b7035d2","commit_message":"AGENTS.md: the helper rule as ruled, and three lessons from this week's reviews\n\nSingle-use helpers, forwarders and dummy locals are forcing; a header's own inline comes\nbefore steering casts; a permuter round-trip can be a frame-layout effect; and the count\nform is how a volatile counter's increment matches.","measures":{"fuzzy_match_percent":94.36983,"total_code":3815998,"matched_code":3177724,"matched_code_percent":83.273735,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19020,"matched_functions_percent":98.279335,"complete_code":1223939,"complete_code_percent":32.07389,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":328}},{"timestamp":"2026-11-12T22:28:43Z","commit_sha":"2c8b5f3a3da301fee766a4b352207a863aaf658f","commit_message":"Record why Init_Game's round-trip matches: one more local reorders its stack frame","measures":{"fuzzy_match_percent":94.36983,"total_code":3815998,"matched_code":3177724,"matched_code_percent":83.273735,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19020,"matched_functions_percent":98.279335,"complete_code":1223939,"complete_code_percent":32.07389,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":328}},{"timestamp":"2026-11-12T21:41:28Z","commit_sha":"c37c737cf294182be19851cf57a3db94c44186c6","commit_message":"Record the ionblast store-order forms: the ecx/edx swap holds in every one","measures":{"fuzzy_match_percent":94.36983,"total_code":3815998,"matched_code":3177724,"matched_code_percent":83.273735,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19020,"matched_functions_percent":98.279335,"complete_code":1223939,"complete_code_percent":32.07389,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":328}},{"timestamp":"2026-11-12T20:41:25Z","commit_sha":"18c68748fc96e817292a0b8d7dd1cfe0ae84f860","commit_message":"Land dk8827's thirty-third set: RadBeam's tint, the map zone queries and the speech holds\n\nAll three came back with the requested changes (the header colour inline, no steering local,\nno single-use helpers) and verify clean. Gate 19,020 of 19,020.","measures":{"fuzzy_match_percent":94.36983,"total_code":3815998,"matched_code":3177724,"matched_code_percent":83.273735,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19020,"matched_functions_percent":98.279335,"complete_code":1223939,"complete_code_percent":32.07389,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":328}},{"timestamp":"2026-11-12T20:36:38Z","commit_sha":"f32b0a360d8db047bdfd38360d27cb04ad9b4e0e","commit_message":"Merge pull request #198 from dk8827/recovery/nov12-speech-queue\n\nRestore speech hold release and stream resume","measures":{"fuzzy_match_percent":94.35633,"total_code":3815998,"matched_code":3176110,"matched_code_percent":83.23144,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19015,"matched_functions_percent":98.2535,"complete_code":1223939,"complete_code_percent":32.07389,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":328}},{"timestamp":"2026-11-12T20:36:31Z","commit_sha":"d021f169d12c95f031179dd518d0d9fe0ea874b7","commit_message":"Merge pull request #197 from dk8827/recovery/nov12-map-queries\n\nRestore map zone and edge-cell queries","measures":{"fuzzy_match_percent":94.35633,"total_code":3815998,"matched_code":3176110,"matched_code_percent":83.23144,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19015,"matched_functions_percent":98.2535,"complete_code":1223939,"complete_code_percent":32.07389,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":328}},{"timestamp":"2026-11-12T20:36:24Z","commit_sha":"19b0a0bf8fbe1fe362bbaabb72332f15971185dc","commit_message":"Merge pull request #192 from dk8827/recovery/nov12-radbeam-draw\n\nRestore RadBeam drawing and phase updates","measures":{"fuzzy_match_percent":94.35633,"total_code":3815998,"matched_code":3176110,"matched_code_percent":83.23144,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19015,"matched_functions_percent":98.2535,"complete_code":1223939,"complete_code_percent":32.07389,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":328}},{"timestamp":"2026-11-12T18:12:23Z","commit_sha":"19d80cb19bd4beef74fd516e56196da3f2bbb460","commit_message":"Record the permuter's Init_Game match: a no-op round-trip of the BuildingTypes loop index\n\nPass 3 over the 85-95% banks found one match, which needs only the index round-trip; without it\nInit_Game is back at 88.2%. Banked as steering with the other two.","measures":{"fuzzy_match_percent":94.35633,"total_code":3815998,"matched_code":3176110,"matched_code_percent":83.23144,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19015,"matched_functions_percent":98.2535,"complete_code":1223939,"complete_code_percent":32.07389,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":328}},{"timestamp":"2026-11-12T17:14:12Z","commit_sha":"ec065a4a372dfa1e1219200b8c76b97a9390929f","commit_message":"Land dk8827's thirty-second set: the gradient line, AnimClass::Draw_It and the DNode destructor\n\nThe gradient line and Draw_It came back with the stand-in and no-op-cast cleanups and verify\nclean; the DNode destructor is a compiler-generated function from an existing template.\nGate 19,015 of 19,015.","measures":{"fuzzy_match_percent":94.355995,"total_code":3815998,"matched_code":3176110,"matched_code_percent":83.23144,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19015,"matched_functions_percent":98.2535,"complete_code":1223939,"complete_code_percent":32.07389,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":328}},{"timestamp":"2026-11-12T17:07:57Z","commit_sha":"2bba338f43641a5cde8d9a0e2df1099fbff3a4e8","commit_message":"Merge pull request #199 from dk8827/recovery/nov12-ownrdraw-node\n\nEmit the OwnerDraw dictionary node deleting destructor","measures":{"fuzzy_match_percent":94.308556,"total_code":3815998,"matched_code":3171376,"matched_code_percent":83.10738,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19012,"matched_functions_percent":98.238,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T17:07:44Z","commit_sha":"989fb107e6828b6d625538eb4b78f70b94898921","commit_message":"Merge pull request #196 from dk8827/recovery/nov12-anim-draw\n\nRestore AnimClass drawing","measures":{"fuzzy_match_percent":94.308556,"total_code":3815998,"matched_code":3171376,"matched_code_percent":83.10738,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19012,"matched_functions_percent":98.238,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T17:07:31Z","commit_sha":"7ce0b431b81ca16cac13817b50b30c7740b6c5b8","commit_message":"Merge pull request #194 from dk8827/recovery/nov12-gradient-line\n\nRestore TechnoClass gradient line drawing","measures":{"fuzzy_match_percent":94.308556,"total_code":3815998,"matched_code":3171376,"matched_code_percent":83.10738,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19012,"matched_functions_percent":98.238,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T16:08:36Z","commit_sha":"cdc5ec4a92bc4a1305aaccbb9c9a1a40e942a345","commit_message":"Land dk8827's thirty-first set: Draw_Pips, the missile mission and the secondary mixfiles\n\nFour of the seven pull requests verified clean against our checker and rule scans; the\nother three match but went back for stand-in and no-op-cast cleanups. Gate 19,012 of 19,012.","measures":{"fuzzy_match_percent":94.308556,"total_code":3815998,"matched_code":3171376,"matched_code_percent":83.10738,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19012,"matched_functions_percent":98.238,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T16:01:56Z","commit_sha":"543a8360b82c801f031c6ccb456577e220f8eac0","commit_message":"Merge pull request #193 from dk8827/recovery/nov12-missile-mission\n\nRestore BuildingClass missile mission","measures":{"fuzzy_match_percent":94.25248,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T16:01:54Z","commit_sha":"8b9428de0e80203c040d47029aa7fe2b45a87098","commit_message":"Merge pull request #191 from dk8827/recovery/nov12-wonline-callback\n\nRestore Wonline dialog callback and request forwarding","measures":{"fuzzy_match_percent":94.25248,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T15:31:29Z","commit_sha":"300af49b4882dfd870418a85c5a122cd1de151cb","commit_message":"Merge pull request #190 from dk8827/recovery/nov12-draw-pips\n\nRestore TechnoClass::Draw_Pips","measures":{"fuzzy_match_percent":94.25248,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T11:27:09Z","commit_sha":"c688d5e50027f16284c614b2e114ea198436b670","commit_message":"Record the end of the permuter pass: a second RadBeam steering match\n\nRadBeam's 0x00659FF0 matches only through a no-op round-trip of the index, the\nsame shape as 0x00659AC0, and shared helper forms score far lower; the other\nfive runs found nothing.","measures":{"fuzzy_match_percent":94.25248,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T10:20:19Z","commit_sha":"9dbd4d68c1ab62f897de3333b30d0aba89be8252","commit_message":"Record the permuter's RadBeam steering match and the hover scope gain\n\nRadBeam only matches through a no-op round-trip and a one-use forwarder, so it\nstays banked. Hover's Start_Of_Move reaches 99.1% raw once its adjacent-cell\nblock has its own scope; Projectile_Motion is unchanged after a permuter run.","measures":{"fuzzy_match_percent":94.25199,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T07:48:32Z","commit_sha":"fabbf81793c8846b2b5032072e3068d6e8432dd0","commit_message":"Record Projectile_Motion's constructor and return forms: still two scheduling spots","measures":{"fuzzy_match_percent":94.25152,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T07:45:47Z","commit_sha":"659560292fcf750f5d519e8adeab80611dd45c8d","commit_message":"Record the harvester's FINDHOME distance arms: the chrono arm schedules like the retry","measures":{"fuzzy_match_percent":94.25152,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T07:44:13Z","commit_sha":"843fc12a1a90b949aeef4a4cc40e4b4d5a7107dc","commit_message":"Record the mpcoop dropdown's loop forms: every exit swaps found and j","measures":{"fuzzy_match_percent":94.25152,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T07:42:06Z","commit_sha":"e3b654b1c43048c6acceb50d3fbc64562c423787","commit_message":"Record why the uicmnds steering banks stay banked\n\nWithout their bodiless forwarders three fall to 26-46%, and 0x007331B0's one wrapper\nbreaks four matched functions when used at every TechnoList allocation in the file.","measures":{"fuzzy_match_percent":94.25152,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T06:46:20Z","commit_sha":"b87b57358235c79a35c6eb7ddd5c4704eb5c72cc","commit_message":"Record the permuter pass over the banked near-misses\n\nThirteen banks that reproduce today got 30 minutes each. Twelve gained nothing; ship's\nStart_Of_Move reached MATCH only through dummy return temporaries and a no-op\nself-assignment, which change the frame's symbol set and so stay out of src.","measures":{"fuzzy_match_percent":94.2496,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T00:28:25Z","commit_sha":"65c11bee6a7dd7b311f83174f19fe0cce85db5a5","commit_message":"Record WDT Campaign constructor at 90.9% after the header changes","measures":{"fuzzy_match_percent":94.24926,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T00:15:08Z","commit_sha":"d71297a3310516432eb6419efbe430aa4e44f0ba","commit_message":"Record MPCooperative::DrawTeamDropdown at 99.7%: one loop-exit jump left","measures":{"fuzzy_match_percent":94.24448,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T00:13:22Z","commit_sha":"25dda80fe88f54e3a786b296e564bc957ae69014","commit_message":"Rounds: name 0x0058C800 correctly","measures":{"fuzzy_match_percent":94.241684,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T00:13:14Z","commit_sha":"7f591b0d5060447ea2e70c751714fd9a50089667","commit_message":"Match WorldDominationTour's territory lookup in TibSun's form\n\nThe re-check down to 80% found its banked TibSun form matching as written now that the\nrc_ptr<Territory> headers are settled.","measures":{"fuzzy_match_percent":94.241684,"total_code":3815998,"matched_code":3160763,"matched_code_percent":82.82926,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19009,"matched_functions_percent":98.222496,"complete_code":1205825,"complete_code_percent":31.599205,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":327}},{"timestamp":"2026-11-12T00:05:00Z","commit_sha":"ae1a9646bc8e20fa7eb70e371a13d66654594f20","commit_message":"Match SHPUnloadAll and SHPUnloadFrom: their banked forms now match as written\n\nA re-check of the banked near-misses against today's headers found the shape cache's\nunload pair matching unchanged, where both sat at 94-95% when banked.","measures":{"fuzzy_match_percent":94.24063,"total_code":3815998,"matched_code":3160552,"matched_code_percent":82.82373,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19008,"matched_functions_percent":98.21733,"complete_code":1203649,"complete_code_percent":31.542181,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":326}},{"timestamp":"2026-11-11T23:49:14Z","commit_sha":"9eff757ec3f416d3d0332f08e2e6ae158487d7ff","commit_message":"Record voxlib Render_Shadow scheduling attempts","measures":{"fuzzy_match_percent":94.23991,"total_code":3815998,"matched_code":3160027,"matched_code_percent":82.809975,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19006,"matched_functions_percent":98.20699,"complete_code":1201345,"complete_code_percent":31.481804,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":325}},{"timestamp":"2026-11-11T23:48:31Z","commit_sha":"f559e4abbbe9bc890dd0ec9d93fc300d87a6a99f","commit_message":"Record tonight's ownrdraw 0x0060B950 compare-order attempts","measures":{"fuzzy_match_percent":94.23991,"total_code":3815998,"matched_code":3160027,"matched_code_percent":82.809975,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19006,"matched_functions_percent":98.20699,"complete_code":1201345,"complete_code_percent":31.481804,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":325}},{"timestamp":"2026-11-11T23:47:24Z","commit_sha":"dd82795c18a7471de781e46da965d30a6e14ef98","commit_message":"Match DiskLaserClass::AI: name the four spoke offsets before building the lasers\n\nWith the offsets bound as Point2D references, VC6 loads the fire coordinate first in the\nfirst laser's X add, as the exe does; written inline it loads the offset first.","measures":{"fuzzy_match_percent":94.23991,"total_code":3815998,"matched_code":3160027,"matched_code_percent":82.809975,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19006,"matched_functions_percent":98.20699,"complete_code":1201345,"complete_code_percent":31.481804,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":325}},{"timestamp":"2026-11-11T23:32:42Z","commit_sha":"85ebaf66a6005aae40a53991154cdf384e42db68","commit_message":"Record Detect_MMX_Availability as RA2-revised: detproc's matched routines stay on retail bytes\n\nThe archive's routine assembles to 73.1% of the exe's, which also saves edx and records the\nCPU model; with asm limited to unchanged archive copies it cannot match, so the link has no\nfirst routine through which to place the detproc object.","measures":{"fuzzy_match_percent":94.239746,"total_code":3815998,"matched_code":3158561,"matched_code_percent":82.77156,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19005,"matched_functions_percent":98.20183,"complete_code":1195939,"complete_code_percent":31.340137,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":324}},{"timestamp":"2026-11-11T23:01:08Z","commit_sha":"d02ad32cbfd0d467ee416ff74b3959efb638514b","commit_message":"README status: 19,005 functions match","measures":{"fuzzy_match_percent":94.23603,"total_code":3815998,"matched_code":3158561,"matched_code_percent":82.77156,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19005,"matched_functions_percent":98.20183,"complete_code":1195939,"complete_code_percent":31.340137,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":324}},{"timestamp":"2026-11-11T23:01:01Z","commit_sha":"1ab0e8a8d5dd510f1030f37585b49ec4463deed0","commit_message":"Match six voc sound-list functions with SoundNode::Retired volatile\n\nThe exe re-reads Retired after testing it and orders its stores the way VC6 does only for a\nvolatile field. No second thread writing it was found, so the volatile exception now covers\na field the exe treats that way when every function touching it still matches, rather than\nonly data another thread writes. The decrement and the saved-game load take plain forms in\nplace of the banked steering helpers.","measures":{"fuzzy_match_percent":94.23603,"total_code":3815998,"matched_code":3158561,"matched_code_percent":82.77156,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":19005,"matched_functions_percent":98.20183,"complete_code":1195939,"complete_code_percent":31.340137,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":324}},{"timestamp":"2026-11-11T19:58:40Z","commit_sha":"c4280e119078a41a38a6702b08a5699be372b643","commit_message":"Match MMX_Brighten_Color_655: its only extra bytes were filler before another object\n\nThe routine's 321 bytes equal the exe's; the 7 more check.py counted were MASM's align 8\nfiller, which the original cannot have had because int3 fill to a 64-byte boundary follows\nthe routine there: the voxel routines after it were another object. data/asm_objects.csv\nrecords that start, and check.py ends a routine before MASM's own fill sequence only at a\nstart listed there, so a routine that differs in any other byte still fails. build.py now\nreads the starts through check.py.","measures":{"fuzzy_match_percent":94.228546,"total_code":3815998,"matched_code":3157585,"matched_code_percent":82.74598,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":18998,"matched_functions_percent":98.16566,"complete_code":1189343,"complete_code_percent":31.167286,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":323}},{"timestamp":"2026-11-11T19:46:09Z","commit_sha":"31a517ee6112e5d47b17da653c9eed33f81c0c41","commit_message":"Split two assembly objects where the original began new ones, so the link places them\n\n_ASM_UnVQ_4x2 and _OLD_VQA_LCW_Uncompress follow int3 fill to a 16-byte boundary in YR and\nTS 2.03 alike, so the original assembled each as the first routine of another object (Red\nAlert's UNVQBUFF.ASM, AUDUNZAP.ASM and LCWUNCMP.ASM are separate files). The TibSun\narchive merges each pair into one file, which put them at the wrong offset in the link.\nThe sources stay unchanged archive copies: data/asm_objects.csv names the routines that\nstart an object and exelink's build cuts the assembled object there. Both now link from\nsource; the image is still identical to retail. Also corrects the earlier entry, which\nsaid _Iso_Blit_Asm1 matches alone: it does not, as RA2 changed two instructions.","measures":{"fuzzy_match_percent":94.22014,"total_code":3815998,"matched_code":3157264,"matched_code_percent":82.73757,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":18997,"matched_functions_percent":98.16049,"complete_code":1189343,"complete_code_percent":31.167286,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":323}},{"timestamp":"2026-11-11T18:23:38Z","commit_sha":"25dbb7923c982971700b3362858c2e87f7b40516","commit_message":"Publish a progress report for ByteMatch from tracked data\n\nByteMatch reads objdiff's report format from a CI artifact named GAMEMD_1.001_report. The\nreport and the README's totals now share one definition of game code and of a match, so the\ntwo cannot disagree; an unlanded match never reports 100.","measures":{"fuzzy_match_percent":94.22014,"total_code":3815998,"matched_code":3157264,"matched_code_percent":82.73757,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":19353,"matched_functions":18997,"matched_functions_percent":98.16049,"complete_code":1189343,"complete_code_percent":31.167286,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":323}}]