[{"timestamp":"2026-07-22T15:07:38Z","commit_sha":"a73b605ad62d40eab56c6ce1040dc276e1b08a4d","commit_message":"Refresh recovered global declarations","measures":{"fuzzy_match_percent":24.175928,"total_code":1231036,"matched_code":297614,"matched_code_percent":24.175898,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":3339,"matched_functions":543,"matched_functions_percent":16.262354,"complete_code":297604,"complete_code_percent":24.175085,"complete_data":0,"complete_data_percent":0,"total_units":3339,"complete_units":543}},{"timestamp":"2026-07-21T23:26:22Z","commit_sha":"981ab85ed98a0dd604e22d1c1c171f643e751cbf","commit_message":"Share the complete life bar entry type","measures":{"fuzzy_match_percent":24.175928,"total_code":1231036,"matched_code":297614,"matched_code_percent":24.175898,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":3339,"matched_functions":543,"matched_functions_percent":16.262354,"complete_code":297604,"complete_code_percent":24.175085,"complete_data":0,"complete_data_percent":0,"total_units":3339,"complete_units":543}},{"timestamp":"2026-07-21T22:41:29Z","commit_sha":"e07780165a5fc34f502866be386c0e90b2e0ce69","commit_message":"Use the shared original effect slot type","measures":{"fuzzy_match_percent":24.175928,"total_code":1231036,"matched_code":297614,"matched_code_percent":24.175898,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":3339,"matched_functions":543,"matched_functions_percent":16.262354,"complete_code":297604,"complete_code_percent":24.175085,"complete_data":0,"complete_data_percent":0,"total_units":3339,"complete_units":543}},{"timestamp":"2026-07-21T22:26:54Z","commit_sha":"a648b5dc1f5bcd7b6082314f63c9a10999f3569b","commit_message":"Share the original parenting record","measures":{"fuzzy_match_percent":24.175928,"total_code":1231036,"matched_code":297614,"matched_code_percent":24.175898,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":3339,"matched_functions":543,"matched_functions_percent":16.262354,"complete_code":297604,"complete_code_percent":24.175085,"complete_data":0,"complete_data_percent":0,"total_units":3339,"complete_units":543}},{"timestamp":"2026-07-21T22:11:38Z","commit_sha":"ccac14a82c1bbddbc30d3730d8b79ed8c8967387","commit_message":"Restore the small item parameter types\n\nShare PSX.SYM's named napalm, shinsoku, goshikimai, gosin, gun, henshin, kaengeki, and lightning-bolt parameter records. Replace duplicate declarations and raw byte-offset payload views in the corresponding request and processor routines, retaining retail's unsigned gosin counter load explicitly.\\n\\nmain.exe remains byte-identical.","measures":{"fuzzy_match_percent":24.175928,"total_code":1231036,"matched_code":297614,"matched_code_percent":24.175898,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":3339,"matched_functions":543,"matched_functions_percent":16.262354,"complete_code":297604,"complete_code_percent":24.175085,"complete_data":0,"complete_data_percent":0,"total_units":3339,"complete_units":543}},{"timestamp":"2026-07-21T13:28:39Z","commit_sha":"738130de0ff266854423e1bb5cb8b3c4ee23fcc1","commit_message":"Carry official TLinkInfo field names into the retail struct\n\nFollow-up to the TLinkInfo typedef adoption: use the demo PSX.SYM field\nSPELLINGS (reference/psxsym-types.h struct TLinkInfo) for every retail\nfield whose correspondence is proven by retail consumers, instead of\nrepo-invented names: chr -> CharType, stage -> StageNo, nannido ->\nNannido, sound -> Stereo, sound_level -> SoundLevel, se_level ->\nSELevel, f_memory -> fMemory, anakon -> Anakon.\n\nThe demo definition still cannot be adopted verbatim: retail rearranged\nand extended the layout (demo CharType is a short at +0, retail chosen\ncharacter is a byte at +4; the option run moved +0x5..+0xE -> +0x58..\n+0x5D dropping ZangyakuOff/bufSoundLevel/bufSELevel/GameRetry; magic,\nlanguage and shop stock are retail-only; 216 bytes vs 0xE70). The header\nnow documents the convention: TitleCase = official demo name carried\nover, lowercase = repo-named with no proven demo counterpart (candidates\ncounts ~ selItem? / backup ~ saveItem? left unadopted).\n\nDeref sites updated across the 13 affected TUs; StageChar's own .stage\nand Humanoid's own .sound/.chrid fields untouched.\n\nVerified: ./Build check green (main.exe byte-identical).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019V8ZzGHQUyXnzNe4p69WCS","measures":{"fuzzy_match_percent":24.175928,"total_code":1231036,"matched_code":297614,"matched_code_percent":24.175898,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":3339,"matched_functions":543,"matched_functions_percent":16.262354,"complete_code":297604,"complete_code_percent":24.175085,"complete_data":0,"complete_data_percent":0,"total_units":3339,"complete_units":543}},{"timestamp":"2026-07-21T13:13:02Z","commit_sha":"5559a564ee94d9bf8141f82436dd0c81cad7aa5c","commit_message":"Adopt official gNannido (difficulty) for D_80010058 + game_difficulty enum\n\nThe persistent-state byte at 0x80010058 is the difficulty setting. Official\nname from the demo PSX.SYM: WORLD.C's cross-exe config struct (typedef\nTLinkInfo) has `unsigned char Nannido` at +0x5 and the demo exe keeps a\nstandalone `unsigned char gNannido` (0x80098090); nannido = \"difficulty\".\nRetail moved it into the 0x80010000 blob, keeping TLinkInfo's field run:\n0x5A SoundLevel (CD volume, FUN_8004f68c/_PlayMusic), 0x5B SELevel (PlaySE\nscale), 0x5D Anakon (PadShock rumble gate) all line up. 0=easy/1=normal/\n2=hard proven by FileOption pairing writes with EngageLevel 3/2/1 exactly\nas SetupAppearance's `EngageLevel = 3 - pt[0x58]`, plus StateTransition's\nrand()%4-2 >= gNannido attack veto (50% easy, 25% normal, 0% hard) and\nDamageControl's easy-only NPC auto-guard suppression.\n\nThe demo has no enum for the values (the original does arithmetic on the\nraw byte), so game_difficulty { DIFFICULTY_EASY/NORMAL/HARD } in\ngame_types.h is ours, used at compare/assign sites; the global stays u8\n(enum-typed storage would be int-sized and break codegen). PersistentState\ngains the carved `nannido` field; symbols config pins gNannido (the file\nis comment-free on purpose: it is parsed both by GNU ld -T and splat).\nLedger row appended to reference/data-symbols-applied.tsv; PLAN.md TODO\nadded for the neighbouring option bytes.\n\nVerified: ./Build check green (main.exe byte-identical).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019V8ZzGHQUyXnzNe4p69WCS","measures":{"fuzzy_match_percent":24.175928,"total_code":1231036,"matched_code":297614,"matched_code_percent":24.175898,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":3339,"matched_functions":543,"matched_functions_percent":16.262354,"complete_code":297604,"complete_code_percent":24.175085,"complete_data":0,"complete_data_percent":0,"total_units":3339,"complete_units":543}},{"timestamp":"2026-07-20T08:07:51Z","commit_sha":"d567f847e6acdef98e5e1ad83888709c841abbc5","commit_message":"Replace guessed buttons_held/held with official TPadPort names + types\n\nPer owner directive (our names/types always lose to official ones):\n- TPadPort field held -> button (the demo's official field-0 name);\n  the u16 type IS the official 'unsigned short', no hedge comment kept.\n- Delete the invented buttons_held typedef. GetRealPad now returns the\n  official 'long' (s32), GetPad the official 'short' (s16) — both already\n  matched in some callers (FUN_800514d8 used s32). Unified ALL GetRealPad\n  externs to s32 and ALL GetPad externs to s16(short no), matching the\n  PSX.SYM prototypes; every per-file u16/u32 return-type lever turned out\n  to reproduce the bytes as the official type (incl. Briefing, whose u32\n  lever is now the official s32 — comment updated).\n- Eliminate the redundant local PadProcPort/PadShockPort views (they only\n  touch act1/act2, same offsets as TPadPort) in favor of TPadPort. ComPad\n  keeps ComPadPort — it needs SIGNED x/y for its analog writes; its field-0\n  is now 'button' too.\nVerified byte-identical.","measures":{"fuzzy_match_percent":24.175928,"total_code":1231036,"matched_code":297614,"matched_code_percent":24.175898,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":3339,"matched_functions":543,"matched_functions_percent":16.262354,"complete_code":297604,"complete_code_percent":24.175085,"complete_data":0,"complete_data_percent":0,"total_units":3339,"complete_units":543}},{"timestamp":"2026-07-20T06:41:41Z","commit_sha":"d0ea421d5b57386cc401ef818f2b248f653d5ce0","commit_message":"Migrate controller_input to official TPadPort\n\nreference/psxsym-globals.h declares PadPort as 'struct TPadPort PadPort[2][4]'\nand PADCMD.C names the element TPadPort, so the guessed controller_input is\nthat official type. Rename controller_input -> TPadPort and give it the full\nretail field layout (held, x, y, active, fAnalog, act1, act2, actbuf[2],\nSend, pad) that ComPad.c had reverse-engineered — retail inserted 'active'\nat offset 6, making it 14 bytes vs the demo's 12. GetPadXY now reads\npad->x/pad->y instead of pad->unk_2[0/1]; FUN_8001b174 returns pad->active\ninstead of ((u8*)pad)[6]. ComPad keeps its own ComPadPort view because it\nwrites SIGNED analog x/y (-0x2D needs addiu, not the unsigned ori); doc note\nadded. Stale controller_input comments in FUN_8001b2b8/4bc/4e0 updated.\nVerified byte-identical.","measures":{"fuzzy_match_percent":24.175928,"total_code":1231036,"matched_code":297614,"matched_code_percent":24.175898,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":3339,"matched_functions":543,"matched_functions_percent":16.262354,"complete_code":297604,"complete_code_percent":24.175085,"complete_data":0,"complete_data_percent":0,"total_units":3339,"complete_units":543}},{"timestamp":"2026-07-20T05:37:29Z","commit_sha":"72fcbbc991cbaac0d9035e8663630b4af67ff358","commit_message":"Migrate debug_menu_choice to official TAdtSelect\n\nThe demo's own PSX.SYM debug symbols name these menu-row arrays\n'struct TAdtSelect [N]' (FileOption/DoInfoViewProc/AddItem2/etc. stack-var\nrecords), confirming the guessed debug_menu_choice IS the official\nAdtSelect menu-entry type. Rename the type and its two fields across all\n14 sites: debug_menu_choice -> TAdtSelect, choice_name -> name,\nchoice_number -> value (game_types.h def now tagged 'struct TAdtSelect'\nper PSX.SYM, matching MapVector's style in the same file). Verified\nbyte-identical (full rebuild).","measures":{"fuzzy_match_percent":24.175928,"total_code":1231036,"matched_code":297614,"matched_code_percent":24.175898,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":3339,"matched_functions":543,"matched_functions_percent":16.262354,"complete_code":297604,"complete_code_percent":24.175085,"complete_data":0,"complete_data_percent":0,"total_units":3339,"complete_units":543}},{"timestamp":"2026-07-20T05:00:52Z","commit_sha":"3ce0ce50122e5178b5634f7f840b588794be78ce","commit_message":"Migrate 3 rotation files to Humanoid (12/18)\n\nturn_towards_player_, think_setting_small_rotation_small_steps_, Think3callaid.\nThe pointed-to rotation struct maps to SVECTOR: the guessed\nsomething_about_player_rotation_perhaps->character_rotation (s16 at 0x2) is\nrotate->vy (SVECTOR's Y/facing). ./Build check byte-identical.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019V8ZzGHQUyXnzNe4p69WCS","measures":{"fuzzy_match_percent":24.175928,"total_code":1231036,"matched_code":297614,"matched_code_percent":24.175898,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":3339,"matched_functions":543,"matched_functions_percent":16.262354,"complete_code":297604,"complete_code_percent":24.175085,"complete_data":0,"complete_data_percent":0,"total_units":3339,"complete_units":543}},{"timestamp":"2026-07-20T03:21:41Z","commit_sha":"ba8e8b280a567b12587b9790acd0f71c07f33250","commit_message":"Note the value-editing limitation in the VSCode debugger\n\nReading/breakpoints/stepping work; changing a value does not, for two\nseparate reasons, now recorded in docs/debugging-vscode.md:\n\n- gdb-side \"cannot assign to variable expression\": -O2 coalesces locals so\n  many have no writable location.\n- PCSX-Redux gdb-stub bug: the P write-register handler assumes a two-digit\n  register number and close()s the socket otherwise, so writing any local in\n  regs 0-15 drops the connection (gdb reports \"exited\"; game keeps running).\n  Confirmed live ($a1 drops, $s0 does not). A minimal stub patch stopped the\n  disconnect but broke resume, so the write path needs more work and is\n  parked (also blocked from local link-testing by an unrelated fmt skew in\n  the pcsx-redux tree).\n\nNo code change here - the pcsx-redux experiment was reverted; this just\ncaptures the finding so it is not re-derived.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019V8ZzGHQUyXnzNe4p69WCS","measures":{"fuzzy_match_percent":24.175928,"total_code":1231036,"matched_code":297614,"matched_code_percent":24.175898,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":3339,"matched_functions":543,"matched_functions_percent":16.262354,"complete_code":297604,"complete_code_percent":24.175085,"complete_data":0,"complete_data_percent":0,"total_units":3339,"complete_units":543}},{"timestamp":"2026-07-19T22:59:21Z","commit_sha":"11e2d0233d85f24ce7daa38921818dd26c7926e9","commit_message":"Report: per-binary console breakdown before the total\n\n./Build report's summary now prints one line per binary - main.exe\n(game/sdk split when included), menu.exe, ending.exe, trial.exe - with\ncomplete-function counts, byte percentages, and fuzzy/partial info where\nit exists, followed by the total and the artifact path. The JSON already\ncarried these as decomp.dev categories; docs/decomp-dev.md now records\nthe per-binary category scheme and unit naming.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019V8ZzGHQUyXnzNe4p69WCS","measures":{"fuzzy_match_percent":24.175928,"total_code":1231036,"matched_code":297614,"matched_code_percent":24.175898,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":3339,"matched_functions":543,"matched_functions_percent":16.262354,"complete_code":297604,"complete_code_percent":24.175085,"complete_data":0,"complete_data_percent":0,"total_units":3339,"complete_units":543}},{"timestamp":"2026-07-19T07:09:16Z","commit_sha":"c88dc7ef9abc33337d59c79671acd647dd15c597","commit_message":"Add relocation blocker audit","measures":{"fuzzy_match_percent":97.999756,"total_code":303244,"matched_code":297178,"matched_code_percent":97.99963,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":538,"matched_functions_percent":96.936935,"complete_code":297168,"complete_code_percent":97.99633,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":538}},{"timestamp":"2026-07-19T06:31:36Z","commit_sha":"19f2ce4feae6facca6bf16a2a4230e54f3560810","commit_message":"Match gte_rotate_z_matrix from its complete SDK object","measures":{"fuzzy_match_percent":97.999756,"total_code":303244,"matched_code":297178,"matched_code_percent":97.99963,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":538,"matched_functions_percent":96.936935,"complete_code":297168,"complete_code_percent":97.99633,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":538}},{"timestamp":"2026-07-19T06:17:53Z","commit_sha":"b98afd5f4d134392c37ac468311ee901a261b862","commit_message":"Document the working PsyQ object lane","measures":{"fuzzy_match_percent":97.999756,"total_code":303244,"matched_code":297178,"matched_code_percent":97.99963,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":538,"matched_functions_percent":96.936935,"complete_code":297168,"complete_code_percent":97.99633,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":538}},{"timestamp":"2026-07-19T05:23:59Z","commit_sha":"e7133879810d7a537c7dde91344583e5e5506606","commit_message":"Match GsSetAmbient and GsDrawOt from complete SDK objects","measures":{"fuzzy_match_percent":97.999756,"total_code":303244,"matched_code":297178,"matched_code_percent":97.99963,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":538,"matched_functions_percent":96.936935,"complete_code":297168,"complete_code_percent":97.99633,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":538}},{"timestamp":"2026-07-19T05:11:15Z","commit_sha":"3fc5b954a0649a0aa512840b08436a7da981d8f7","commit_message":"Document MATRIX compiler provenance audit","measures":{"fuzzy_match_percent":97.999756,"total_code":303244,"matched_code":297178,"matched_code_percent":97.99963,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":538,"matched_functions_percent":96.936935,"complete_code":297168,"complete_code_percent":97.99633,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":538}},{"timestamp":"2026-07-19T04:06:33Z","commit_sha":"ba7ed70ceb6a0d888507c75f7841a7689746ce28","commit_message":"Match FUN_800519bc exactly","measures":{"fuzzy_match_percent":97.999756,"total_code":303244,"matched_code":297178,"matched_code_percent":97.99963,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":538,"matched_functions_percent":96.936935,"complete_code":297168,"complete_code_percent":97.99633,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":538}},{"timestamp":"2026-07-19T03:13:19Z","commit_sha":"7e4597b410fd0133c3e8954ae82b72f98d56bbf4","commit_message":"Match FUN_800519bc brightness rendering","measures":{"fuzzy_match_percent":97.99183,"total_code":303244,"matched_code":297154,"matched_code_percent":97.991714,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":537,"matched_functions_percent":96.75676,"complete_code":295720,"complete_code_percent":97.51883,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":537}},{"timestamp":"2026-07-19T01:06:40Z","commit_sha":"f7ed45117912606294a4c5a0976016df7d555427","commit_message":"Match FUN_80059008 with its TMD record type","measures":{"fuzzy_match_percent":97.97071,"total_code":303244,"matched_code":297090,"matched_code_percent":97.97061,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":536,"matched_functions_percent":96.57658,"complete_code":294944,"complete_code_percent":97.26293,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":536}},{"timestamp":"2026-07-19T00:18:12Z","commit_sha":"03b18c342dfb3b82cdd9084ee3233b27779566f6","commit_message":"Improve FUN_800519bc brightness tails","measures":{"fuzzy_match_percent":97.97071,"total_code":303244,"matched_code":297090,"matched_code_percent":97.97061,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":536,"matched_functions_percent":96.57658,"complete_code":294944,"complete_code_percent":97.26293,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":536}},{"timestamp":"2026-07-17T05:13:04Z","commit_sha":"b7653aeddc01afe610b7728463bed6854237fa13","commit_message":"Improve DrawImpact 28 -> 4; give permute a rescore deadline it enforces\n\nThe park called this \"a coupled allocation cycle... needs new identity/\npreference evidence\" and sent three rounds chasing preferences. It was one\nline. When the target reuses ONE register across a load, its multiply and\nthe product (lbu a0 / mult a0,a2 / mflo a0), the load is not a separate\ntemp — it IS the variable:\n\n  start = param->start_color.channel.r;\n  start = start * inverse;        /* not the one-expression form */\n\ncc1 cannot fold a load into mulsi3_internal (register_operand), so the load\nsurvives as its own insn but writes the variable's pseudo instead of a\nfresh local that local_alloc colours independently. 28 -> 8. Then\n`start2 = start2 >> 12;` as its own statement gave the sra its register:\n8 -> 4. Fixing the identity dissolved every symptom at once — ratio->a3,\nend-colour load->a1, size quotient->v0 all fell out together. So diagnose\nby asking whether the TARGET's load and product share a register, not by\ncounting differing registers: the register the symptom appears in is the\nlast thing allocated, not the cause.\n\nAlso fixed the permuter, which was unusable as documented. The inner\ntimeout bounds the SEARCH; on SIGTERM permute rescores every retained\ncandidate with a FULL LINK each, unbounded. One lane watched it alive at\n526s under a 420s bound; this one had inner bounds of BOTH 300s and 240s\nblow through the harness's 600000ms hard cap and reported plainly that \"the\ndocumented 300/600 guidance cannot work\" — a larger tool timeout is\nsilently clamped. permute now enforces its own 90s rescore deadline and\nsays how many candidates it skipped rather than being killed mid-loop with\nnothing. Contract updated to 240 inner.\n\nAnd a warning worth having: check the demo is the SAME FUNCTION before\ntrusting its body or its header. DrawImpact's demo is 236 bytes against\nretail's 772, 6 of 193 instructions matching — siblingdiff --demo is a dead\nend there, and the PSX.SYM header's local list describes the 236-byte DEMO\nbody, so reading it as a retail spec reads the wrong function. A demo twin\nat ~1:1 is an oracle; at 0.05 it is a different function wearing the name.\n\nThis lane also independently confirmed the binop-operand-seed bug — all 12\ncandidates invalid — from before the fix.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019V8ZzGHQUyXnzNe4p69WCS","measures":{"fuzzy_match_percent":95.60494,"total_code":303244,"matched_code":289917,"matched_code_percent":95.60519,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":498,"matched_functions_percent":89.72973,"complete_code":256120,"complete_code_percent":84.46004,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":498}},{"timestamp":"2026-07-17T03:54:47Z","commit_sha":"419b149db55b81bb5d2ebdcee7cc430ab1017e2e","commit_message":"Improve ControlTraceLine 167 -> 10; make autorules REFUSE a length-mismatched sweep\n\nThe lane found a dangerous bug and it proves the audit's thesis better than\nany argument. autorules produced a FALSE WIN: from a length-mismatched\nbaseline its score is the length penalty alone (1000 + |delta|), so the\ngreedy search optimises LENGTH and adopted `degree: s16 -> s8` (1004 ->\n154) — semantically broken, since degree holds +/-0x1000, and emitting\n`sll ..,0x18` where the target has 0x10. The lane's words: \"a smaller model\nwould very likely have banked that.\"\n\nThe cookbook has warned about exactly this in prose for weeks — \"on a\nlength-mismatched draft, autorules' score is the LENGTH PENALTY ALONE,\nreview every adoption before believing it\" — and the tool shipped the\nbroken edit anyway. That is the audit's point in one incident: a guard the\ntool enforces beats a rule the reader must remember. autorules now refuses,\nwith --allow-length-mismatch for the deliberate case, and says why.\n\nTwo mechanisms folded, both reusable. There is no PROMOTE_MODE on this\ntarget, so a short local is a plain HImode pseudo and a WRITE truncates:\n`(set (reg:HI var) (subreg:HI (reg:SI expr)))` is a real move, which means\na short->short copy coalesces to nothing while routing through an SImode\ntemp restores it. That one split matched the whole ladder.\n\nAnd the twin lh/lhu is combine, not cse1. cc1 loads a short field into an\nHImode pseudo and extends per use; combine fuses load+sll+sra into `lh`\nonly when the pseudo has ONE use, so if the sign-extending read comes\nFIRST, combine fuses it and retains the original lhu for the later narrow\nuse — two loads, one address. The lever is which read comes first, not a\ncast; a (u16) cast is a literal no-op (same-width HImode->HImode, nullcheck\nexit 1). The park had the observation right and the conclusion inverted.\n\nThe park's header was also stale — it claimed 18 differing instruction\nlines against a real 49 — and its delay-slot framing was a symptom-chase my\nbrief inherited. siblingdiff --demo settled it in one call again: the demo\nlacks the whole abs(degree)>500 block and its bnez slot holds negu v0,a0,\nexactly what we emitted. We were reproducing the demo, not failing at\nretail.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019V8ZzGHQUyXnzNe4p69WCS","measures":{"fuzzy_match_percent":95.57063,"total_code":303244,"matched_code":289813,"matched_code_percent":95.57089,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":497,"matched_functions_percent":89.54955,"complete_code":255704,"complete_code_percent":84.32285,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":497}},{"timestamp":"2026-07-17T02:31:08Z","commit_sha":"f0e3403816506d3856c455ff36b12cfc04929bb9","commit_message":"Match DrawModelArchive (488 bytes); asmdiff was hiding the decisive row\n\nThe lane found the deepest tooling bug of the session, in the tool I had\njust told everyone to trust. asmdiff normalises intra-function branch\ntargets to align, so it collapsed this as identical:\n\n  0x8001775c  T: beqz v0,0x8001779c   O: beqz v0,0x800177c4\n\nSame instruction, different destination — the signature of a RELOCATED\nBLOCK, and the single most informative row in the diff. My brief carried\nthe full asmdiff output and was still structurally incomplete. Only\nmatchdiff's raw byte view shows it, and byte-accounting then split the 48\nexactly: 4 (the nop) + 44 (reject placement). asmdiff now counts the lines\nit hides and says what they might mean; --all shows them. Verified the\nwarning fires on DrawBleed and StickonCheck and stays silent where there\nis genuinely no drift.\n\nThe 44 bytes were a cause/effect inversion, and the park had warned future\nrounds INTO it: \"read off the actual branch TARGETS, not assumed from the\nsibling\" is exactly backwards, because after reorg a branch target is not\nthe source-level goto target. reorg steals the shared reject block's first\ninsn into each caller's delay slot and retargets that branch through\nreject's own j tail — so five li v0,-1 is one real block plus four stolen\ncopies, and asm that reads as N independent direct rejects is really N\n`goto reject;` sites. The tell was sitting in the target: the one site\nstill pointing at the real block is the one whose delay slot was already\nfull. The matched sibling DrawSprite had the answer in plain sight, and\nthe park's list of tried-and-disproved levers never tested it.\n\nThe 4 bytes were an early return. cse's block ends at every CODE_LABEL, so\n`if (SkipFrame == 1) return 1;` between the parameter copy and the first\ncall killed the a0 == mad equivalence and cc1 re-materialised the copy,\nwhich reorg then hoisted into the slot. Spelling it `goto ret1;` against\nthe single trailing return makes the body a lone jump, which jump.c folds\n— label gone, cse's block spans prologue to call, copy deleted, and the\nnop follows for free because the block now leads with the jal.\n\nMy brief's .flow/.sched instruction would have found nothing here: the\ncause was upstream of both.\n\nGame code now 494/555 functions (89.01%), 253804/303244 bytes (83.70%).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019V8ZzGHQUyXnzNe4p69WCS","measures":{"fuzzy_match_percent":95.53369,"total_code":303244,"matched_code":289701,"matched_code_percent":95.53396,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":494,"matched_functions_percent":89.00901,"complete_code":253804,"complete_code_percent":83.6963,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":494}},{"timestamp":"2026-07-17T00:32:51Z","commit_sha":"d14ff53d97c42d415ac163d96d766729615b6450","commit_message":"Record two process lessons from FUN_80018f00's first-try match\n\nRead the matched sibling's SOURCE, not a park's description of it.\nFUN_80018f00's header called cbAccess's identical-arm CSE fence one of\n\"cbAccess's failed attempts\" when it is the thing that made cbAccess\nmatch. A park's characterisation of a neighbour's technique can be\nexactly inverted, and findsimilar.py already ranks the nearest matched\nfunctions — the instruction is to OPEN them.\n\nAnd a park's dilemma is often a lever-allocation error rather than a\nwall. \"All six orders gave correct length XOR correct slots, never both\"\nwas a true measurement and the wrong conclusion: declaration order was\ndoing two jobs at once, and one of them is determined arithmetic rather\nthan a search.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019V8ZzGHQUyXnzNe4p69WCS","measures":{"fuzzy_match_percent":95.46056,"total_code":303244,"matched_code":289479,"matched_code_percent":95.460754,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":488,"matched_functions_percent":87.927925,"complete_code":251600,"complete_code_percent":82.96949,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":488}},{"timestamp":"2026-07-16T14:40:55Z","commit_sha":"c7d29e10ad247d06283dbf286455dfdb931e54d6","commit_message":"Close the mission_score_screen drawY lead; park at 476\n\nRound 3 was flat but decisive: the drawY carrier cannot pin a\nconstant y (copy-prop dissolves it; store-through-carrier is a strict\nno-op), the one computed-y site is p91 hard-conflicted (also the\nsource of the self-cancelling +4/-4 skew), draws 5/7/8's shift is a\nsched1 sink tied to their lhu loads, and the bank-address swap is cc1\naddress-selection, not spelling. STATUS carries the closure and all\nmeasured dead ends; header count corrected to 476. Parked pending a\nnew pass-level lever.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019V8ZzGHQUyXnzNe4p69WCS","measures":{"fuzzy_match_percent":93.70176,"total_code":303244,"matched_code":284145,"matched_code_percent":93.701775,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":476,"matched_functions_percent":85.76576,"complete_code":233360,"complete_code_percent":76.95453,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":476}},{"timestamp":"2026-07-16T12:52:39Z","commit_sha":"3eed829e7bf44ea9c46f7951fda459f067e1b0be","commit_message":"Improve drawF3 C reconstruction\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":93.57107,"total_code":303244,"matched_code":283749,"matched_code_percent":93.57118,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":476,"matched_functions_percent":85.76576,"complete_code":233360,"complete_code_percent":76.95453,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":476}},{"timestamp":"2026-07-16T11:36:49Z","commit_sha":"49d01ebf4f5b407c166b6ca9e86010af5f08c3c5","commit_message":"Improve ChasetoTarget: register allocation now matches target\n\nReduce the NON_MATCHING draft's residual from 36 to 10 differing asmdiff\nlines. The whole register allocation (me=$s1, zz=$s2, c0=$a2, c1=$a1\nreused, abs temp in $v0) now matches the 328-byte target; the remaining\n3-instruction/12-byte length gap is purely three reorg delay-slot fills\n(guard delay slot, guard tail island, Attrib&0xc000 delay slot).\n\nTwo source rewrites drove it, each verified against the demo build and the\n.greg allocation-order dump:\n- inline the abs clamp in the comparison instead of a named temp `t`\n  (keeps the abs in $v0 and gives zz 4 refs so me wins $s1);\n- inline c1 (`chase[1]`) into the zz expression so it loads after the\n  target pointer dies and reuses $a1 like the target.\n\nSTATUS block updated with the full evidence and the residual analysis.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019V8ZzGHQUyXnzNe4p69WCS","measures":{"fuzzy_match_percent":93.57107,"total_code":303244,"matched_code":283749,"matched_code_percent":93.57118,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":476,"matched_functions_percent":85.76576,"complete_code":233360,"complete_code_percent":76.95453,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":476}},{"timestamp":"2026-07-16T10:45:52Z","commit_sha":"ddf617f367ac1b2c0fa0915d0c3372c14a6a9fc3","commit_message":"Adopt asm-canonical accounting for handwritten originals\n\nOwner decision: the 17 proven handwritten-assembly functions (the 16\ndraw* renderers + DrawTMD) are done-by-asm — their INCLUDE_ASM stub is\nthe faithful source form. config/handwritten-asm.txt is the\nmachine-readable list; progress.py reports a canonical-asm line plus\nthe combined \"game done (C+asm)\" metric (now 492/555 functions,\n78.08% of game bytes); triage.py hides the class from targets with the\ncanonical reason. Also record the commit-authorship convention: Claude\ncommits as Claude, Codex as Codex; the repo config identity belongs to\nCodex, and harvested agent commits get their author amended at\ncherry-pick time.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019V8ZzGHQUyXnzNe4p69WCS","measures":{"fuzzy_match_percent":93.39486,"total_code":303244,"matched_code":283215,"matched_code_percent":93.39509,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":475,"matched_functions_percent":85.58559,"complete_code":230636,"complete_code_percent":76.056244,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":475}},{"timestamp":"2026-07-16T06:06:51Z","commit_sha":"25e1caa2d9806d16fc3c9e2146e4957b0f0451ca","commit_message":"Adopt the restricted GTE inline-asm policy\n\nOwner decision (2026-07-16): the GTE/COP2 class is matchable via a\nsingle sanctioned macro layer, src/main.exe/gte.h, mirroring PsyQ's\nINLINE_N.H (the original source's own mechanism), restricted to the\n25 functions in config/gte-allowlist.txt. Everything else keeps the\nautomatic inline-asm blocker. The GetPad sign-extension trio and\nPClseek stay excluded and parked: their originals were plain C or\nlibsn assembly, so asm bodies would be unfaithful.\n\n- docs/gte-policy.md: rationale, rules, verified SetDepthQ pipeline\n  facts (cc1 #APP passthrough, maspsx marker skip, native COP2 moves,\n  .word for GTE commands), whitelist, family matching order\n- config/gte-allowlist.txt: machine-readable whitelist\n- tools/tests: GtePolicyTests pin the containment (gte.h is the only\n  asm-bearing header under src/) and the includer whitelist\n- matcher contract + matcher-prompt GUIDANCE + triage labels +\n  cookbook GTE/break sections + docs index + orchestration backlog\n  updated to the resolved policy\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019V8ZzGHQUyXnzNe4p69WCS","measures":{"fuzzy_match_percent":93.16736,"total_code":303244,"matched_code":282525,"matched_code_percent":93.16755,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":475,"matched_functions_percent":85.58559,"complete_code":230636,"complete_code_percent":76.056244,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":475}},{"timestamp":"2026-07-15T21:34:53Z","commit_sha":"b5811da663245aedc08294a7b09667bec0820b75","commit_message":"Refresh flywheel shutdown handoff\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":93.16209,"total_code":303244,"matched_code":282509,"matched_code_percent":93.16227,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":474,"matched_functions_percent":85.4054,"complete_code":230620,"complete_code_percent":76.05097,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":474}},{"timestamp":"2026-07-15T21:15:03Z","commit_sha":"47fcd44e4f17c16542cd295ddb521c45a01617db","commit_message":"Improve LoadConstruction matching\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":93.17402,"total_code":303244,"matched_code":282545,"matched_code_percent":93.17414,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":474,"matched_functions_percent":85.4054,"complete_code":230620,"complete_code_percent":76.05097,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":474}},{"timestamp":"2026-07-15T17:11:33Z","commit_sha":"85321fac081fcbd15fa2d3141140b303b6e392db","commit_message":"Document stored-field narrowing recovery\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":92.46247,"total_code":303244,"matched_code":280388,"matched_code_percent":92.46284,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":470,"matched_functions_percent":84.684685,"complete_code":227160,"complete_code_percent":74.90997,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":470}},{"timestamp":"2026-07-15T16:47:32Z","commit_sha":"c06e4619ff6c7dde06d83d90edfd414fe30d2b3a","commit_message":"Improve PadProc matching\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":92.39255,"total_code":303244,"matched_code":280176,"matched_code_percent":92.39292,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":469,"matched_functions_percent":84.5045,"complete_code":226088,"complete_code_percent":74.556465,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":469}},{"timestamp":"2026-07-15T16:34:07Z","commit_sha":"bec82de7a481e7a83aa10ee988a5e2b06341a6d4","commit_message":"Document branch polarity and mask scheduling\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":92.38429,"total_code":303244,"matched_code":280151,"matched_code_percent":92.38468,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":469,"matched_functions_percent":84.5045,"complete_code":226088,"complete_code_percent":74.556465,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":469}},{"timestamp":"2026-07-15T15:28:01Z","commit_sha":"292d1a21146d212fd1fb9d5aa6ecdd9e0fc9f10c","commit_message":"Document explicit-hoist goto loop recovery\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":91.87008,"total_code":303244,"matched_code":278592,"matched_code_percent":91.870575,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":467,"matched_functions_percent":84.14414,"complete_code":225348,"complete_code_percent":74.31243,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":467}},{"timestamp":"2026-07-15T15:23:04Z","commit_sha":"8cda8931b2aa3966f22c29b45178c10781b3cd09","commit_message":"Match PutStrain in pure C\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":91.85689,"total_code":303244,"matched_code":278552,"matched_code_percent":91.85738,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":466,"matched_functions_percent":83.96397,"complete_code":224908,"complete_code_percent":74.167336,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":466}},{"timestamp":"2026-07-15T15:10:11Z","commit_sha":"6ddca675fd9273f464b70db0590b7b12be52fb42","commit_message":"Document rotated sentinel scan recovery\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":91.835785,"total_code":303244,"matched_code":278488,"matched_code_percent":91.83627,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":465,"matched_functions_percent":83.78378,"complete_code":224324,"complete_code_percent":73.974754,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":465}},{"timestamp":"2026-07-15T15:08:00Z","commit_sha":"b0f852b8a18ab56b4f34439247b8690ff9e42f2f","commit_message":"Improve vmemoryGC guarded checkpoint\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":91.798874,"total_code":303244,"matched_code":278376,"matched_code_percent":91.79934,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":465,"matched_functions_percent":83.78378,"complete_code":224324,"complete_code_percent":73.974754,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":465}},{"timestamp":"2026-07-15T14:59:09Z","commit_sha":"6489c0314edb2657eae77745089125e12456aa52","commit_message":"Improve SetWire matching\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":91.692726,"total_code":303244,"matched_code":278054,"matched_code_percent":91.69316,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":465,"matched_functions_percent":83.78378,"complete_code":224324,"complete_code_percent":73.974754,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":465}},{"timestamp":"2026-07-15T14:28:02Z","commit_sha":"fa2c87bb34282fc46f2c4f4540fcd14654d23a67","commit_message":"Improve PlayVoice guarded checkpoint\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":91.57538,"total_code":303244,"matched_code":277698,"matched_code_percent":91.57576,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":465,"matched_functions_percent":83.78378,"complete_code":224324,"complete_code_percent":73.974754,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":465}},{"timestamp":"2026-07-15T14:03:04Z","commit_sha":"b652b0bc136b84bd961c32f82d5d8557d9734aa8","commit_message":"Improve GetNearestHumanoid guarded checkpoint\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":91.57464,"total_code":303244,"matched_code":277696,"matched_code_percent":91.5751,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":465,"matched_functions_percent":83.78378,"complete_code":224324,"complete_code_percent":73.974754,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":465}},{"timestamp":"2026-07-15T13:25:33Z","commit_sha":"81f70d9ac419566c2b7136a8af1694769bd7fa62","commit_message":"Match GetSpline\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":91.53059,"total_code":303244,"matched_code":277563,"matched_code_percent":91.53124,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":465,"matched_functions_percent":83.78378,"complete_code":224324,"complete_code_percent":73.974754,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":465}},{"timestamp":"2026-07-15T13:09:35Z","commit_sha":"77694a2c6d583a4a2d94312a98b74521262e6129","commit_message":"Match ComputeAllConflict\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":91.40477,"total_code":303244,"matched_code":277181,"matched_code_percent":91.40527,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":463,"matched_functions_percent":83.42342,"complete_code":223696,"complete_code_percent":73.76766,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":463}},{"timestamp":"2026-07-15T12:25:54Z","commit_sha":"4424462de07c665497eaeb3f9491560b44bf4b24","commit_message":"Match _PlayMusic in pure C\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":91.10817,"total_code":303244,"matched_code":276281,"matched_code_percent":91.10848,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":460,"matched_functions_percent":82.88288,"complete_code":221460,"complete_code_percent":73.0303,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":460}},{"timestamp":"2026-07-15T12:19:03Z","commit_sha":"9bab332991922c1175048ddeb3319c704c1444eb","commit_message":"Recover PlayVoice table lookup structure\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":91.04798,"total_code":303244,"matched_code":276098,"matched_code_percent":91.048134,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":459,"matched_functions_percent":82.702705,"complete_code":221060,"complete_code_percent":72.89839,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":459}},{"timestamp":"2026-07-15T12:00:07Z","commit_sha":"bf9b02b8909d998dcb00dd637b8008fb6d5c5e3d","commit_message":"Improve start_demo_ guarded checkpoint\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":90.92703,"total_code":303244,"matched_code":275731,"matched_code_percent":90.92711,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":459,"matched_functions_percent":82.702705,"complete_code":221060,"complete_code_percent":72.89839,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":459}},{"timestamp":"2026-07-15T11:42:32Z","commit_sha":"88f87bde7115a106217173f777a057eb25649c7b","commit_message":"Recover SetupBG source structure\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":90.78922,"total_code":303244,"matched_code":275313,"matched_code_percent":90.78927,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":459,"matched_functions_percent":82.702705,"complete_code":221060,"complete_code_percent":72.89839,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":459}},{"timestamp":"2026-07-15T11:31:59Z","commit_sha":"3bbb3d09225219206445c493c34f6d375da8e02c","commit_message":"Restructure LoadConstruction traversal\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":90.69173,"total_code":303244,"matched_code":275017,"matched_code_percent":90.69165,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":459,"matched_functions_percent":82.702705,"complete_code":221060,"complete_code_percent":72.89839,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":459}},{"timestamp":"2026-07-15T10:14:58Z","commit_sha":"2c88cadc9a1afbd17b8fc7f8bc42c2c08266e1f2","commit_message":"Improve LoadTIMpack guarded checkpoint\n\nRecover the target 276-byte extent and exact optimized CFG with a named CLUT producer boundary plus a call-only one-shot loop. The pure-C draft now has 12 authoritative differing bytes, localized to one argument/field allocation island; retain the assembly guard and document the remaining evidence.\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":87.57213,"total_code":303244,"matched_code":265556,"matched_code_percent":87.571724,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":456,"matched_functions_percent":82.16216,"complete_code":217496,"complete_code_percent":71.7231,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":456}},{"timestamp":"2026-07-15T09:46:05Z","commit_sha":"4f3aeaf9488ca129444ae2f5a259f31dee270cbe","commit_message":"Improve SetLightningI scheduler checkpoint\n\nSplit the raw depth-derived priority from its clamped call argument to recover the target clamp shape, and use a jump2-erased identical-arm fence to improve the initial projection allocation. Preserve the exact 1,384-byte extent, 334-instruction count, frame, and control-flow counts while reducing the linked residual from 150 to 124 bytes and raising the fuzzy score from 81.14 to 91.62. Document the remaining guarded residual and the reusable compiler evidence.\n\nSigned-off-by: Codex <codex@openai.com>","measures":{"fuzzy_match_percent":87.57542,"total_code":303244,"matched_code":265566,"matched_code_percent":87.57502,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":456,"matched_functions_percent":82.16216,"complete_code":217496,"complete_code_percent":71.7231,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":456}},{"timestamp":"2026-07-15T09:38:45Z","commit_sha":"62c8df097c6b3ba3a1117028716732a6c3ace381","commit_message":"Match FileOption store-forward schedule","measures":{"fuzzy_match_percent":87.52627,"total_code":303244,"matched_code":265417,"matched_code_percent":87.52589,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":455,"matched_functions_percent":81.98198,"complete_code":217408,"complete_code_percent":71.694084,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":455}},{"timestamp":"2026-07-15T09:06:40Z","commit_sha":"1440b0454dd544bf0c3e2c0bb347a6268873bd34","commit_message":"Improve StageEndScreen register matching","measures":{"fuzzy_match_percent":87.4812,"total_code":303244,"matched_code":265280,"matched_code_percent":87.480705,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":451,"matched_functions_percent":81.26126,"complete_code":213480,"complete_code_percent":70.39876,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":451}},{"timestamp":"2026-07-15T08:23:42Z","commit_sha":"a9743fb4ee0132a8afecd7b5af26fb8a4aaf5867","commit_message":"Improve SearchTarget terminal layout checkpoint","measures":{"fuzzy_match_percent":87.37315,"total_code":303244,"matched_code":264952,"matched_code_percent":87.37254,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":451,"matched_functions_percent":81.26126,"complete_code":213480,"complete_code_percent":70.39876,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":451}},{"timestamp":"2026-07-15T08:09:55Z","commit_sha":"5cdd34a887efc299ec2ca0373edeee776f7947cd","commit_message":"Document pointer-cell extern array splitting","measures":{"fuzzy_match_percent":87.37054,"total_code":303244,"matched_code":264944,"matched_code_percent":87.3699,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":451,"matched_functions_percent":81.26126,"complete_code":213480,"complete_code_percent":70.39876,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":451}},{"timestamp":"2026-07-15T07:59:05Z","commit_sha":"241486a344e3225e992309dbb85fd6cbee88f068","commit_message":"Clarify wrong-length checkpoint scoring","measures":{"fuzzy_match_percent":87.277916,"total_code":303244,"matched_code":264663,"matched_code_percent":87.277245,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":449,"matched_functions_percent":80.9009,"complete_code":212648,"complete_code_percent":70.12439,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":449}},{"timestamp":"2026-07-15T07:19:53Z","commit_sha":"9940316e3a385596fe2f1aa999f29e797f5f28eb","commit_message":"Correct phantom FUN_8005fe34 inventory boundary","measures":{"fuzzy_match_percent":87.233,"total_code":303244,"matched_code":264527,"matched_code_percent":87.23239,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":449,"matched_functions_percent":80.9009,"complete_code":212648,"complete_code_percent":70.12439,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":449}},{"timestamp":"2026-07-15T07:13:31Z","commit_sha":"5db2c3ba279b1a6ecfbcb1f29365333164c55fb9","commit_message":"Match check_for_known_button_combination","measures":{"fuzzy_match_percent":87.2053,"total_code":303244,"matched_code":264443,"matched_code_percent":87.2047,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":448,"matched_functions_percent":80.72072,"complete_code":212564,"complete_code_percent":70.09669,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":448}},{"timestamp":"2026-07-15T06:49:32Z","commit_sha":"99e5957246d3a8bd843ca417bfdc337b19ef3c53","commit_message":"Refresh flywheel restart handoff","measures":{"fuzzy_match_percent":87.11033,"total_code":303244,"matched_code":264155,"matched_code_percent":87.10972,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":447,"matched_functions_percent":80.54054,"complete_code":212276,"complete_code_percent":70.00172,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":447}},{"timestamp":"2026-07-15T06:24:14Z","commit_sha":"11a249cdf691c1c593196459ce87027f5c20d0c1","commit_message":"Document branch-phi carrier matching rule","measures":{"fuzzy_match_percent":87.11033,"total_code":303244,"matched_code":264155,"matched_code_percent":87.10972,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":447,"matched_functions_percent":80.54054,"complete_code":212276,"complete_code_percent":70.00172,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":447}},{"timestamp":"2026-07-15T06:21:06Z","commit_sha":"9a617b8e3a724e97b339256af469ab2f84d230ea","commit_message":"Document narrow round-trip fencing","measures":{"fuzzy_match_percent":87.105,"total_code":303244,"matched_code":264139,"matched_code_percent":87.10445,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":446,"matched_functions_percent":80.36036,"complete_code":210884,"complete_code_percent":69.54268,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":446}},{"timestamp":"2026-07-15T05:59:05Z","commit_sha":"7183207f167bf9df49f0a88c133513d0ae326e85","commit_message":"Document narrow call-result allocation","measures":{"fuzzy_match_percent":87.10236,"total_code":303244,"matched_code":264131,"matched_code_percent":87.10181,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":445,"matched_functions_percent":80.18018,"complete_code":209216,"complete_code_percent":68.99262,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":445}},{"timestamp":"2026-07-15T05:50:47Z","commit_sha":"f08df708bd28474601c979502b23852bb941515e","commit_message":"Document shared switch-local allocation","measures":{"fuzzy_match_percent":87.09972,"total_code":303244,"matched_code":264123,"matched_code_percent":87.09917,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":444,"matched_functions_percent":80,"complete_code":208860,"complete_code_percent":68.87523,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":444}},{"timestamp":"2026-07-15T05:28:07Z","commit_sha":"8a88c92f8534880d245797b681043ddfb179a414","commit_message":"Match FallCheck","measures":{"fuzzy_match_percent":86.99734,"total_code":303244,"matched_code":263813,"matched_code_percent":86.99694,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":440,"matched_functions_percent":79.27928,"complete_code":206048,"complete_code_percent":67.94792,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":440}},{"timestamp":"2026-07-15T05:01:21Z","commit_sha":"fab0e3f1700d7742498b9687c8297f37bfddcd4a","commit_message":"Match AVCameraControl","measures":{"fuzzy_match_percent":86.763794,"total_code":303244,"matched_code":263105,"matched_code_percent":86.763466,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":437,"matched_functions_percent":78.73874,"complete_code":205032,"complete_code_percent":67.61288,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":437}},{"timestamp":"2026-07-15T04:48:12Z","commit_sha":"e19c986921bbcf7832eb5926bc1c043583b3a9f3","commit_message":"Document integer-sum array addressing","measures":{"fuzzy_match_percent":86.59787,"total_code":303244,"matched_code":262602,"matched_code_percent":86.59759,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":435,"matched_functions_percent":78.37838,"complete_code":204328,"complete_code_percent":67.38072,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":435}},{"timestamp":"2026-07-15T04:31:27Z","commit_sha":"3ba886f9fba39e2b42dd95bab27719c4e5f0fdbe","commit_message":"Document IsVisible shared failure join","measures":{"fuzzy_match_percent":86.46452,"total_code":303244,"matched_code":262197,"matched_code_percent":86.464035,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":431,"matched_functions_percent":77.65766,"complete_code":203524,"complete_code_percent":67.11559,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":431}},{"timestamp":"2026-07-15T04:21:51Z","commit_sha":"b2d50d3b5ee4bd88db32421e3a0d798a94d23ce3","commit_message":"Match cbCheckCD","measures":{"fuzzy_match_percent":86.45266,"total_code":303244,"matched_code":262161,"matched_code_percent":86.45216,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":430,"matched_functions_percent":77.47748,"complete_code":203004,"complete_code_percent":66.944115,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":430}},{"timestamp":"2026-07-15T03:33:17Z","commit_sha":"f5fc68b03de203666335a9ef6c4b0df881795ce6","commit_message":"Match ProcMiscFire","measures":{"fuzzy_match_percent":86.39993,"total_code":303244,"matched_code":262002,"matched_code_percent":86.399734,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":425,"matched_functions_percent":76.57658,"complete_code":201248,"complete_code_percent":66.365036,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":425}},{"timestamp":"2026-07-15T03:14:46Z","commit_sha":"36170bcdec503abeee16862ac1488202187f4c89","commit_message":"Match FUN_800593a0","measures":{"fuzzy_match_percent":86.380264,"total_code":303244,"matched_code":261942,"matched_code_percent":86.379944,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":422,"matched_functions_percent":76.03603,"complete_code":200344,"complete_code_percent":66.06693,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":422}},{"timestamp":"2026-07-15T02:51:36Z","commit_sha":"7b5301b6e58eb8dec035fabd0a8c20cbf59b3c70","commit_message":"Match update_pressed_buttons","measures":{"fuzzy_match_percent":86.34373,"total_code":303244,"matched_code":261831,"matched_code_percent":86.34334,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":421,"matched_functions_percent":75.85586,"complete_code":199708,"complete_code_percent":65.8572,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":421}},{"timestamp":"2026-07-15T02:16:10Z","commit_sha":"2a0b24956b87f15c5b6c2cbfce60c01c9d274075","commit_message":"Match FUN_8005679c","measures":{"fuzzy_match_percent":86.30447,"total_code":303244,"matched_code":261712,"matched_code_percent":86.3041,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":419,"matched_functions_percent":75.4955,"complete_code":199244,"complete_code_percent":65.704185,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":419}},{"timestamp":"2026-07-15T02:04:17Z","commit_sha":"cd95ae0a394ef432e8e3e47a1e592adaca9fb93e","commit_message":"Match cd_open","measures":{"fuzzy_match_percent":86.276764,"total_code":303244,"matched_code":261628,"matched_code_percent":86.2764,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":418,"matched_functions_percent":75.315315,"complete_code":198960,"complete_code_percent":65.610535,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":418}},{"timestamp":"2026-07-15T01:31:11Z","commit_sha":"ef78bcf2d9ebd98f6cd0dbffe50c0e5df2324ccc","commit_message":"Match debug_output_edit_camera_settings","measures":{"fuzzy_match_percent":85.10015,"total_code":303244,"matched_code":258060,"matched_code_percent":85.099785,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":409,"matched_functions_percent":73.693695,"complete_code":195392,"complete_code_percent":64.43392,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":409}},{"timestamp":"2026-07-15T01:12:06Z","commit_sha":"9649cac045f6d5b675086cbf4d82090d6fb3fed5","commit_message":"Refresh flywheel restart handoff","measures":{"fuzzy_match_percent":84.89306,"total_code":303244,"matched_code":257432,"matched_code_percent":84.89269,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":408,"matched_functions_percent":73.51351,"complete_code":194764,"complete_code_percent":64.22683,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":408}},{"timestamp":"2026-07-15T00:37:33Z","commit_sha":"764aec7f0d03263900b2a31c9e01e40a306706f0","commit_message":"Match TurnAroundAllItems","measures":{"fuzzy_match_percent":84.53426,"total_code":303244,"matched_code":256344,"matched_code_percent":84.533905,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":406,"matched_functions_percent":73.15315,"complete_code":193680,"complete_code_percent":63.869358,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":406}},{"timestamp":"2026-07-15T00:14:43Z","commit_sha":"8e7363dfd5116d9f1264a84e732706ecba2b4edd","commit_message":"Match AntiWall","measures":{"fuzzy_match_percent":84.20845,"total_code":303244,"matched_code":255356,"matched_code_percent":84.2081,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":404,"matched_functions_percent":72.79279,"complete_code":192696,"complete_code_percent":63.54487,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":404}},{"timestamp":"2026-07-13T14:29:31Z","commit_sha":"858db3686b4b071286650ca4456844507d6eb974","commit_message":"Document flywheel restart handoff","measures":{"fuzzy_match_percent":83.78635,"total_code":303244,"matched_code":254076,"matched_code_percent":83.785995,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":402,"matched_functions_percent":72.432434,"complete_code":191416,"complete_code_percent":63.122765,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":402}},{"timestamp":"2026-07-13T14:20:12Z","commit_sha":"37d661a06c35875c4e33d95dd054b7fb3c271cd2","commit_message":"Recognize branch phi register ties","measures":{"fuzzy_match_percent":83.78635,"total_code":303244,"matched_code":254076,"matched_code_percent":83.785995,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":402,"matched_functions_percent":72.432434,"complete_code":191416,"complete_code_percent":63.122765,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":402}},{"timestamp":"2026-07-13T13:56:07Z","commit_sha":"9d6592d1df43d6dea7ff22826d0b5082b447fffd","commit_message":"Fuse scratch subtraction roles mechanically","measures":{"fuzzy_match_percent":83.78635,"total_code":303244,"matched_code":254076,"matched_code_percent":83.785995,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":402,"matched_functions_percent":72.432434,"complete_code":191416,"complete_code_percent":63.122765,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":402}},{"timestamp":"2026-07-13T13:26:33Z","commit_sha":"17c87b264e0c4339e818aaaa461c94976221c7a9","commit_message":"Match Think3chase","measures":{"fuzzy_match_percent":83.7221,"total_code":303244,"matched_code":253882,"matched_code_percent":83.722015,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":397,"matched_functions_percent":71.53153,"complete_code":189608,"complete_code_percent":62.526546,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":397}},{"timestamp":"2026-07-13T13:01:46Z","commit_sha":"762a9145d418151724ddfb77cd71209083ca4192","commit_message":"Decompile ActSTICKON draft","measures":{"fuzzy_match_percent":83.67484,"total_code":303244,"matched_code":253739,"matched_code_percent":83.674866,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":395,"matched_functions_percent":71.17117,"complete_code":189012,"complete_code_percent":62.330006,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":395}},{"timestamp":"2026-07-13T12:44:07Z","commit_sha":"e5514641c6df87a60c55e91ba7aef7b5df126203","commit_message":"Decompile Think3callaid","measures":{"fuzzy_match_percent":82.750114,"total_code":303244,"matched_code":250935,"matched_code_percent":82.7502,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":394,"matched_functions_percent":70.99099,"complete_code":187764,"complete_code_percent":61.918453,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":394}},{"timestamp":"2026-07-13T12:43:24Z","commit_sha":"1b47a2ca7200e10a1b9c51a0fe890cc7e6a8a41c","commit_message":"Automate shared writeback fallthroughs","measures":{"fuzzy_match_percent":82.71498,"total_code":303244,"matched_code":250828,"matched_code_percent":82.71491,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":393,"matched_functions_percent":70.810814,"complete_code":187356,"complete_code_percent":61.78391,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":393}},{"timestamp":"2026-07-13T12:10:08Z","commit_sha":"ea7dbdac01da3b0c7f15bb4d6d2f3640895ba30b","commit_message":"Pair indirect-call and literal inlining","measures":{"fuzzy_match_percent":82.43137,"total_code":303244,"matched_code":249968,"matched_code_percent":82.43131,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":392,"matched_functions_percent":70.63063,"complete_code":186408,"complete_code_percent":61.47129,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":392}},{"timestamp":"2026-07-13T11:58:24Z","commit_sha":"a7980b786a1f1755f06f5cd6745a91386693b99d","commit_message":"Decompile ActMOVE","measures":{"fuzzy_match_percent":82.42609,"total_code":303244,"matched_code":249952,"matched_code_percent":82.42603,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":391,"matched_functions_percent":70.45045,"complete_code":183940,"complete_code_percent":60.657425,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":391}},{"timestamp":"2026-07-13T11:32:03Z","commit_sha":"30482e9aa74da4eb73cd8f3e13e2294e971b6822","commit_message":"Decompile ActSWIM","measures":{"fuzzy_match_percent":81.43807,"total_code":303244,"matched_code":246956,"matched_code_percent":81.43805,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":389,"matched_functions_percent":70.09009,"complete_code":180400,"complete_code_percent":59.490047,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":389}},{"timestamp":"2026-07-13T10:32:42Z","commit_sha":"0d4bfa64dc828261cdfe05ced2f5b51405280ac1","commit_message":"Automate local array address rematerialization","measures":{"fuzzy_match_percent":80.170425,"total_code":303244,"matched_code":243112,"matched_code_percent":80.170425,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":386,"matched_functions_percent":69.54955,"complete_code":175688,"complete_code_percent":57.936184,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":386}},{"timestamp":"2026-07-13T09:50:19Z","commit_sha":"4a48f8517ed5407bc7b7b8c8db992e6cca2246b4","commit_message":"Automate guard flag scheduling","measures":{"fuzzy_match_percent":79.59957,"total_code":303244,"matched_code":241381,"matched_code_percent":79.599594,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":385,"matched_functions_percent":69.36937,"complete_code":174008,"complete_code_percent":57.382175,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":385}},{"timestamp":"2026-07-13T08:36:37Z","commit_sha":"00ab38fa4854d2dccbe27db3d0011cf61eef6eb5","commit_message":"Document the hard-function flywheel","measures":{"fuzzy_match_percent":78.8483,"total_code":303244,"matched_code":239103,"matched_code_percent":78.84839,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":384,"matched_functions_percent":69.189186,"complete_code":172460,"complete_code_percent":56.871693,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":384}},{"timestamp":"2026-07-13T08:26:42Z","commit_sha":"a72f39a6dfc3f771f4832343c78e579366e04b06","commit_message":"Name the retail snow effect pair","measures":{"fuzzy_match_percent":78.56998,"total_code":303244,"matched_code":238259,"matched_code_percent":78.57006,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":383,"matched_functions_percent":69.00901,"complete_code":171616,"complete_code_percent":56.59337,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":383}},{"timestamp":"2026-07-13T07:40:13Z","commit_sha":"88d644fca34de539387b753e720fd58102f152d0","commit_message":"Automate flag return splitting","measures":{"fuzzy_match_percent":77.90336,"total_code":303244,"matched_code":236238,"matched_code_percent":77.9036,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":380,"matched_functions_percent":68.46847,"complete_code":171048,"complete_code_percent":56.406063,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":380}},{"timestamp":"2026-07-13T07:33:49Z","commit_sha":"0b3a5bee5c27e9eed32e3ded8578d52746f0eee0","commit_message":"Match FUN_8005adbc in C","measures":{"fuzzy_match_percent":77.90336,"total_code":303244,"matched_code":236238,"matched_code_percent":77.9036,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":380,"matched_functions_percent":68.46847,"complete_code":171048,"complete_code_percent":56.406063,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":380}},{"timestamp":"2026-07-13T07:23:18Z","commit_sha":"6ee07e740691ea1dd4b4880a43cd2d4be37c05f2","commit_message":"Refresh CameraDirection fuzzy progress","measures":{"fuzzy_match_percent":77.586784,"total_code":303244,"matched_code":235278,"matched_code_percent":77.58703,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":379,"matched_functions_percent":68.288284,"complete_code":170088,"complete_code_percent":56.089485,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":379}},{"timestamp":"2026-07-13T07:19:04Z","commit_sha":"e893513ccfef091dafb37d035f2bb00a162d357c","commit_message":"Enforce fresh fuzzy progress rows","measures":{"fuzzy_match_percent":77.04464,"total_code":303244,"matched_code":233634,"matched_code_percent":77.04489,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":378,"matched_functions_percent":68.10811,"complete_code":169232,"complete_code_percent":55.807205,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":378}},{"timestamp":"2026-07-13T07:07:53Z","commit_sha":"8340144c7fa0c896bce7bb62eb8105f0c30b913e","commit_message":"Teach RTL guide repeated block scope splits","measures":{"fuzzy_match_percent":77.04464,"total_code":303244,"matched_code":233634,"matched_code_percent":77.04489,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":378,"matched_functions_percent":68.10811,"complete_code":169232,"complete_code_percent":55.807205,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":378}},{"timestamp":"2026-07-13T06:39:36Z","commit_sha":"886199dfb4e334467b055677b9ace5b7dffa01e5","commit_message":"Automate aggregate stack declaration swaps","measures":{"fuzzy_match_percent":66.56992,"total_code":303244,"matched_code":201869,"matched_code_percent":66.569824,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":378,"matched_functions_percent":68.10811,"complete_code":169232,"complete_code_percent":55.807205,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":378}},{"timestamp":"2026-07-13T06:21:02Z","commit_sha":"48eb555a5f8de53c43adad025d70b2f60eee7cc3","commit_message":"Surface repeated debug-local scopes","measures":{"fuzzy_match_percent":65.275536,"total_code":303160,"matched_code":197889,"matched_code_percent":65.27543,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":377,"matched_functions_percent":67.927925,"complete_code":168308,"complete_code_percent":55.51788,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":377}},{"timestamp":"2026-07-13T06:09:49Z","commit_sha":"754afd69c7972fa82032575adbfd10621f17de4d","commit_message":"Decompile debug_menu_player_jump in C","measures":{"fuzzy_match_percent":64.65276,"total_code":303160,"matched_code":196001,"matched_code_percent":64.65266,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":375,"matched_functions_percent":67.567566,"complete_code":166420,"complete_code_percent":54.895103,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":375}},{"timestamp":"2026-07-13T05:48:31Z","commit_sha":"5c16211ba277a93eaa22d96f0ec4a5297393e0ea","commit_message":"Teach matching tools about loop counter identities","measures":{"fuzzy_match_percent":64.23978,"total_code":303160,"matched_code":194749,"matched_code_percent":64.23968,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":373,"matched_functions_percent":67.20721,"complete_code":165168,"complete_code_percent":54.48212,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":373}},{"timestamp":"2026-07-13T04:51:30Z","commit_sha":"63de1159f76e431905aebf95772ca601415912f7","commit_message":"Automate explicit absolute-value sign fixes","measures":{"fuzzy_match_percent":62.54694,"total_code":303160,"matched_code":189617,"matched_code_percent":62.54684,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":367,"matched_functions_percent":66.12613,"complete_code":160036,"complete_code_percent":52.789288,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":367}},{"timestamp":"2026-07-13T04:31:03Z","commit_sha":"4aec88f8fbc1f0d2e89e451fbdc21767b16a79f7","commit_message":"Automate shared-return scheduling fixes\n\nRecognize the signed-short return extension moving across epilogue restores, point rtlguide at the precise source-shape cause, and let guided autorules safely split gotos whose destination is an immediate return. Document the Think3attack confirmation and cover both detection and rewriting.","measures":{"fuzzy_match_percent":62.192013,"total_code":303160,"matched_code":188541,"matched_code_percent":62.191914,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":366,"matched_functions_percent":65.945946,"complete_code":158960,"complete_code_percent":52.434357,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":366}},{"timestamp":"2026-07-13T03:49:33Z","commit_sha":"395dd16d965c278a2e9ac8c7434cfd32592b190e","commit_message":"Teach RTL guide about hard register conflicts","measures":{"fuzzy_match_percent":60.242405,"total_code":303160,"matched_code":182631,"matched_code_percent":60.242447,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":360,"matched_functions_percent":64.86487,"complete_code":152476,"complete_code_percent":50.295555,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":360}},{"timestamp":"2026-07-13T02:28:54Z","commit_sha":"8d636c33f9fd69d3b066a32c56091b9e19259038","commit_message":"Diagnose retained stack addresses","measures":{"fuzzy_match_percent":59.380795,"total_code":303160,"matched_code":180019,"matched_code_percent":59.380856,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":358,"matched_functions_percent":64.5045,"complete_code":149664,"complete_code_percent":49.367992,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":358}},{"timestamp":"2026-07-13T02:23:27Z","commit_sha":"e3a93c9620df9eab155778546170b53e417fe9c0","commit_message":"Make structural diffs non-authoritative","measures":{"fuzzy_match_percent":59.380795,"total_code":303160,"matched_code":180019,"matched_code_percent":59.380856,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":358,"matched_functions_percent":64.5045,"complete_code":149664,"complete_code_percent":49.367992,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":358}},{"timestamp":"2026-07-13T01:59:47Z","commit_sha":"27401e0579c2b868042e010cd6fe7047ddb5e079","commit_message":"Centralize GetTPage matching ABI","measures":{"fuzzy_match_percent":59.380795,"total_code":303160,"matched_code":180019,"matched_code_percent":59.380856,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":358,"matched_functions_percent":64.5045,"complete_code":149664,"complete_code_percent":49.367992,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":358}},{"timestamp":"2026-07-13T01:33:14Z","commit_sha":"bfef24382374290b39501887f6cbcc9c38b78bca","commit_message":"Mechanize chained field assignments","measures":{"fuzzy_match_percent":59.380795,"total_code":303160,"matched_code":180019,"matched_code_percent":59.380856,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":358,"matched_functions_percent":64.5045,"complete_code":149664,"complete_code_percent":49.367992,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":358}},{"timestamp":"2026-07-13T01:13:13Z","commit_sha":"cb2b51bffea12f6ee5755755635e51dc953e973a","commit_message":"Mechanize affine cross-jump barriers","measures":{"fuzzy_match_percent":59.380795,"total_code":303160,"matched_code":180019,"matched_code_percent":59.380856,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":358,"matched_functions_percent":64.5045,"complete_code":149664,"complete_code_percent":49.367992,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":358}},{"timestamp":"2026-07-13T00:47:11Z","commit_sha":"f09b1cc629b5bc9dedbc73dec54874804327ac2f","commit_message":"Decompile CreateStage","measures":{"fuzzy_match_percent":59.380795,"total_code":303160,"matched_code":180019,"matched_code_percent":59.380856,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":358,"matched_functions_percent":64.5045,"complete_code":149664,"complete_code_percent":49.367992,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":358}},{"timestamp":"2026-07-12T23:31:28Z","commit_sha":"2c531177d501033540e1aad28fc8ccf21fe8359d","commit_message":"Decompile SaveSI","measures":{"fuzzy_match_percent":57.73571,"total_code":303160,"matched_code":175032,"matched_code_percent":57.735847,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":352,"matched_functions_percent":63.423424,"complete_code":143968,"complete_code_percent":47.489117,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":352}},{"timestamp":"2026-07-12T23:14:09Z","commit_sha":"ef5860543abb4c0386cab25bea68cb6ee863452e","commit_message":"Document SearchTarget allocation shapes","measures":{"fuzzy_match_percent":57.300297,"total_code":303160,"matched_code":173712,"matched_code_percent":57.300434,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":351,"matched_functions_percent":63.243244,"complete_code":142648,"complete_code_percent":47.0537,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":351}},{"timestamp":"2026-07-12T22:26:20Z","commit_sha":"df3949a0e3f1de5a323142e498433df0bbefe26b","commit_message":"Decompile StartStageSequence","measures":{"fuzzy_match_percent":56.060677,"total_code":303160,"matched_code":169954,"matched_code_percent":56.060825,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":347,"matched_functions_percent":62.522522,"complete_code":138780,"complete_code_percent":45.777805,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":347}},{"timestamp":"2026-07-12T22:02:18Z","commit_sha":"4e55d9879eaf7b154e4e3a95a3f4443c17eea1de","commit_message":"Mechanize call-result argument pipelines","measures":{"fuzzy_match_percent":55.165302,"total_code":303160,"matched_code":167240,"matched_code_percent":55.16559,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":344,"matched_functions_percent":61.981983,"complete_code":135932,"complete_code_percent":44.838367,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":344}},{"timestamp":"2026-07-12T21:02:27Z","commit_sha":"62436f3004dbbe3e5ae8e6bd4b29e417a5f8b33c","commit_message":"Mechanize scheduler boundary diagnosis","measures":{"fuzzy_match_percent":50.36388,"total_code":303160,"matched_code":152684,"matched_code_percent":50.364162,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":335,"matched_functions_percent":60.36036,"complete_code":121376,"complete_code_percent":40.036945,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":335}},{"timestamp":"2026-07-12T15:08:06Z","commit_sha":"65e9f923fd74498ad712d09161718de614eb91cc","commit_message":"Preserve DefaultActionHumanoid near-match","measures":{"fuzzy_match_percent":46.372585,"total_code":303160,"matched_code":140584,"matched_code_percent":46.37287,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":329,"matched_functions_percent":59.279278,"complete_code":109276,"complete_code_percent":36.04565,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":329}},{"timestamp":"2026-07-12T13:41:13Z","commit_sha":"f1a0434a22523213e982b5cca5467d7d71653396","commit_message":"Codify pure-C RTL matching rules","measures":{"fuzzy_match_percent":45.61655,"total_code":303160,"matched_code":138292,"matched_code_percent":45.616837,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":327,"matched_functions_percent":58.91892,"complete_code":106984,"complete_code_percent":35.289616,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":327}},{"timestamp":"2026-07-12T09:59:05Z","commit_sha":"8344383f4d0ffcf83cbca6c3e149eff2cc4f4bf3","commit_message":"Match StateTransition","measures":{"fuzzy_match_percent":43.79754,"total_code":303160,"matched_code":132777,"matched_code_percent":43.797665,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":326,"matched_functions_percent":58.73874,"complete_code":100336,"complete_code_percent":33.096714,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":326}},{"timestamp":"2026-07-12T08:24:04Z","commit_sha":"1454e90969764f04a95b6bfd74fb3846a6587c79","commit_message":"Match ReqItemUse","measures":{"fuzzy_match_percent":42.55199,"total_code":303160,"matched_code":129001,"matched_code_percent":42.552116,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":325,"matched_functions_percent":58.55856,"complete_code":96560,"complete_code_percent":31.851168,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":325}},{"timestamp":"2026-07-12T07:39:06Z","commit_sha":"f3271982311579222c06bc64de7324e0301f468a","commit_message":"More stuff...","measures":{"fuzzy_match_percent":42.532166,"total_code":303160,"matched_code":128941,"matched_code_percent":42.532326,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":324,"matched_functions_percent":58.37838,"complete_code":91288,"complete_code_percent":30.112152,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":324}},{"timestamp":"2026-07-12T06:58:23Z","commit_sha":"9e4d6d18f78f4b6239aaf75c51b3d2a8280b2844","commit_message":"fuzz-score: raw byte equality alone marks an exact match\n\nThe exact-match short-circuit was gated on `len(ours) == len(tgt)`, but\nour_insns() reads a slack window and can over-read, so a genuine byte-match\n(item_use_gun) fell through to the similarity ratio and scored 93.55% instead of\n100%. Raw byte equality in the function's slot is authoritative, so drop the\ninstruction-count gate. Also: a full run now prunes entries for functions that\nare no longer NON_MATCHING drafts (e.g. promoted to a plain matched .c), so the\nscores file self-heals.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01VLxkxT2eJ7Af2YEPT7LcTA","measures":{"fuzzy_match_percent":42.241207,"total_code":302824,"matched_code":127917,"matched_code_percent":42.241367,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":323,"matched_functions_percent":58.198196,"complete_code":90264,"complete_code_percent":29.807413,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":323}},{"timestamp":"2026-07-12T05:05:33Z","commit_sha":"f25f9fbfff565fd57d1add4e047a62e17283a49e","commit_message":"Report partial matches on decomp.dev (per-function fuzzy scores)\n\nThe report scored every function 0 or 100; the ~120 functions that carry a\nNON_MATCHING draft (close but not byte-exact) all showed as 0%. Now they show\nreal per-function progress via objdiff's fuzzy_match_percent.\n\n- tools/fuzz-score.py (+ ./Build fuzz-score): for each NON_MATCHING draft, build\n  it (NON_MATCHING=<name> ./Build), disassemble the original vs our compiled\n  draft, and take an instruction-sequence similarity ratio (an approximation of\n  objdiff's fuzzy match, reusing asmdiff.py's disassembly; non-exact drafts are\n  capped below 100). Writes config/fuzzy.main.exe.tsv. Slow (one incremental\n  build per draft), so it is a committed precompute -- CI/report stay build-free.\n  All 117 drafts scored: 32 at >=90%, 46 at >=80%.\n- config/fuzzy.main.exe.tsv: the committed scores (name, fuzzy%, status).\n- tools/objdiff-report.py: consume the scores. Per objdiff semantics, matched_code\n  is now fuzzy-weighted (partial credit -> game code reads 42.2% fuzzy vs 29.7%\n  byte-exact), complete_code stays byte-exact, and each function reports its own\n  fuzzy_match_percent so decomp.dev colors partials. Aggregates sum per-unit\n  values exactly (no rounding drift). --no-fuzzy restores the binary 0/100 report.\n\nVerified: the full report round-trips through the real objdiff report.proto under\nprotoc, and ./Build check stays byte-identical.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01VLxkxT2eJ7Af2YEPT7LcTA","measures":{"fuzzy_match_percent":42.233456,"total_code":302824,"matched_code":127894,"matched_code_percent":42.233772,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":322,"matched_functions_percent":58.018017,"complete_code":89900,"complete_code_percent":29.68721,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":322}},{"timestamp":"2026-07-12T04:36:19Z","commit_sha":"7aeae5047ba183df732f98ee826385357a751c1d","commit_message":"Add decomp.dev progress reporting (objdiff report + CI)\n\ndecomp.dev is artifact-driven: its bot scans a repo's GitHub Actions runs,\ndownloads an artifact named `<version>_report`, and parses `report.json` inside\nit as an objdiff v2 Report. It never reads decomp.yaml. So this wires up that\nartifact, end to end:\n\n- tools/objdiff-report.py: build-free generator (pure Python, like progress.py)\n  that emits a valid objdiff v2 Report -- per-function units tagged into\n  game/sdk categories, u64 fields as JSON strings, version 2. Default is\n  game-code only (the north-star metric); --include-sdk covers the whole image.\n  Verified: agrees with tools/progress.py exactly (322/555 fns, 89900/302824\n  bytes) and both variants round-trip through the real objdiff report.proto\n  under protoc.\n- config/functions.main.exe.tsv: committed snapshot of the (gitignored) Ghidra\n  function inventory, so the generator runs on a fresh checkout / in CI without\n  Ghidra or nix. The generator auto-refreshes it from the live export when\n  present.\n- ./Build report: Shake phony that runs the generator.\n- .github/workflows/report.yml: uploads the `jp_report` artifact (report.json)\n  on pushes to the default branch. Build-free, so it finishes in seconds.\n- docs/decomp-dev.md (+ README/PLAN/decomp.yaml notes): how decomp.dev ingests,\n  the report format, and the self-hosting setup.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01VLxkxT2eJ7Af2YEPT7LcTA","measures":{"fuzzy_match_percent":29.68721,"total_code":302824,"matched_code":89900,"matched_code_percent":29.68721,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":555,"matched_functions":322,"matched_functions_percent":58.018017,"complete_code":89900,"complete_code_percent":29.68721,"complete_data":0,"complete_data_percent":0,"total_units":555,"complete_units":322}}]