[{"timestamp":"2026-10-15T07:53:18Z","commit_sha":"c8992a2801660edce7c4c952e1423187a6454616","commit_message":"fix: match remaining batch `m2c` functions and fix compiler regressions\n\nSeveral functions left unmatched during the earlier batch pass required adjustments to reach full matching status. Introducing dedicated assembly preprocessing allows unconditional jump delay slot stores to reproduce original assembler behavior without altering unaffected code. This achieves complete matches for `func_80059C64`, `func_8005FC88`, `func_800607C0`, `func_8006087C`, `func_80060890`, `func_80062504`, `func_80063750`, `func_80063C48`, `func_80064F54`, and `func_80067288`.\n\nIn addition, decompilation for `func_80011FDC` is provided and achieves a full match. A mismatch introduced in `func_80012A38` after updating the compiler to GCC 2.8.1 is also resolved by adjusting the unsigned arithmetic promotion.\n\nFinally, unused headers and redundant prototypes across several source files are cleaned up to prevent diagnostic warnings under modern compilers such as `clang`.","measures":{"fuzzy_match_percent":4.6921816,"total_code":356340,"matched_code":15684,"matched_code_percent":4.4014144,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":138,"matched_functions_percent":11.246943,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-10-15T00:00:42Z","commit_sha":"2a5b62264e56ecd0a2d21b1ad4ec4220e793d8cd","commit_message":"build: upgrade compiler toolchain to GCC 2.8.1 PSX\n\nTesting across offline workflows and decomp.me showed substantially better matching behavior when compiling against GCC 2.8.1 rather than GCC 2.8.0. This indicates that 2.8.1 is the accurate compiler version originally used for the game. The build pipeline and configuration are updated to establish GCC 2.8.1 PSX as canonical for the project.\n\nThis update automates the division of monolithic assembly output into individual per function files during project preparation. Splat generates the main code segment into a single file, but previously per function slices required manual extraction. This caused missing slice errors and build failures on clean clones. Automated assembly splitting resolves this problem so new checkouts build reliably out of the box.\n\nThe build system also manages downloading and verifying the compiler and binutils binaries locally in tree without requiring elevated permissions or altering system packages. Additionally, the previously promoted C implementation for `func_80010E18.c` has been adjusted to restore a full byte exact match under the new compiler release.","measures":{"fuzzy_match_percent":3.011764,"total_code":356340,"matched_code":9696,"matched_code_percent":2.7209969,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":52,"matched_functions_percent":4.237979,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-10-10T06:26:51Z","commit_sha":"6b75a38bbf2348f5a4ed333f72dd8d648c9102d6","commit_message":"feat: decompile and match a group of 8 leaf functions and WIP for `func_800111FC`","measures":{"fuzzy_match_percent":3.011764,"total_code":356340,"matched_code":9696,"matched_code_percent":2.7209969,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":52,"matched_functions_percent":4.237979,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-10-08T22:30:21Z","commit_sha":"3c58de3b32607a080afe9a5de1af55c2c89c6deb","commit_message":"feat: decompile and match `func_80010334`","measures":{"fuzzy_match_percent":2.6884437,"total_code":356340,"matched_code":9580,"matched_code_percent":2.6884437,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":44,"matched_functions_percent":3.5859818,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-10-08T20:16:20Z","commit_sha":"e940f7997bf3746d156a4821de3183a219f22837","commit_message":"feat: decompile and match `func_8003CEEC`","measures":{"fuzzy_match_percent":2.6751306,"total_code":356340,"matched_code":7584,"matched_code_percent":2.1283042,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":43,"matched_functions_percent":3.5044827,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-10-02T20:18:36Z","commit_sha":"c90a780952016fde4a04660170e60b6e5fbea5da","commit_message":"feat: decompile and match `func_8003D1C4`","measures":{"fuzzy_match_percent":2.4708312,"total_code":356340,"matched_code":6856,"matched_code_percent":1.9240052,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":42,"matched_functions_percent":3.422983,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-10-01T14:41:25Z","commit_sha":"7b5f38c540ba9530df45245e37ace1dda9e93d6f","commit_message":"feat: add project image to README.md","measures":{"fuzzy_match_percent":2.339496,"total_code":356340,"matched_code":6388,"matched_code_percent":1.7926699,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":41,"matched_functions_percent":3.3414834,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-09-30T23:28:56Z","commit_sha":"6af65614246f415cfa53d59ccf754187f17298bb","commit_message":"feat: decompile and match a group of 21 small leaf functions","measures":{"fuzzy_match_percent":2.339496,"total_code":356340,"matched_code":6388,"matched_code_percent":1.7926699,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":41,"matched_functions_percent":3.3414834,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-09-30T19:56:55Z","commit_sha":"50235d72cd2971efd5475fbce9136727b687ebce","commit_message":"feat: decompile and match `func_80011E18` and improvement of `func_80010334`","measures":{"fuzzy_match_percent":2.2788796,"total_code":356340,"matched_code":6172,"matched_code_percent":1.7320536,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":20,"matched_functions_percent":1.6299918,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-09-27T03:03:44Z","commit_sha":"65c0f883c7efc2fa766ef537f9249e4de33fcafd","commit_message":"feat: decompile and match `func_80011678`","measures":{"fuzzy_match_percent":2.1535838,"total_code":356340,"matched_code":5896,"matched_code_percent":1.6545997,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":19,"matched_functions_percent":1.5484923,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-09-26T23:53:32Z","commit_sha":"205673b8326b3aa651be6b0ec7840e739869de54","commit_message":" feat: decompile and match `func_80011880`","measures":{"fuzzy_match_percent":2.0076556,"total_code":356340,"matched_code":5376,"matched_code_percent":1.5086715,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":18,"matched_functions_percent":1.4669927,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-09-25T05:13:59Z","commit_sha":"8ecbb83d11b615f880eee20f72853d249c121506","commit_message":"feat: decompile and match `func_80012A38`\n\nAlso fixes warning (Assigning to 'u8 *' (aka 'unsigned char *') from 'volatile u8 *' (aka 'volatile unsigned char *') discards qualifiers) on `func_80010E18`","measures":{"fuzzy_match_percent":1.8774428,"total_code":356340,"matched_code":4912,"matched_code_percent":1.3784587,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":17,"matched_functions_percent":1.3854932,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-09-25T01:50:16Z","commit_sha":"573846a7f6743edcd0dad73a4218e513b8fa21bc","commit_message":"feat: decompile and match `func_80010E18` and partial decomp of `func_80012A38`","measures":{"fuzzy_match_percent":1.8641298,"total_code":356340,"matched_code":3648,"matched_code_percent":1.0237414,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":16,"matched_functions_percent":1.3039935,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-09-24T13:19:25Z","commit_sha":"d048233bee83c63aef9847171003465ed0722126","commit_message":"feat: decompile and match `func_80011F2C`","measures":{"fuzzy_match_percent":1.5067968,"total_code":356340,"matched_code":2912,"matched_code_percent":0.8171971,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":15,"matched_functions_percent":1.2224939,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-09-24T09:58:50Z","commit_sha":"b754573a9438e6735ef274365a92e02e65426af0","commit_message":"feat: decompile and match `func_80011F94` and `func_80016A9C`","measures":{"fuzzy_match_percent":1.4776113,"total_code":356340,"matched_code":2808,"matched_code_percent":0.7880115,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":14,"matched_functions_percent":1.1409943,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-09-24T09:30:25Z","commit_sha":"6297671e91d1e632841a44fd9db19080a1746aa5","commit_message":"feat: decompile and match `func_80010000`","measures":{"fuzzy_match_percent":1.4450581,"total_code":356340,"matched_code":2692,"matched_code_percent":0.7554583,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":12,"matched_functions_percent":0.97799516,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-09-23T22:15:48Z","commit_sha":"26cc875dce72f80502b57ca2bd58643e28f88484","commit_message":"feat: decompile and match `func_80011A50`","measures":{"fuzzy_match_percent":0.7508559,"total_code":356340,"matched_code":2488,"matched_code_percent":0.6982095,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":11,"matched_functions_percent":0.89649546,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-09-23T21:22:46Z","commit_sha":"c559c98212be0cf547a4479a0f6110f894d27728","commit_message":"feat: decompile and match `func_80010C8C`","measures":{"fuzzy_match_percent":0.6913622,"total_code":356340,"matched_code":2276,"matched_code_percent":0.6387158,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":10,"matched_functions_percent":0.8149959,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}},{"timestamp":"2026-09-23T16:21:23Z","commit_sha":"f99a3ef888f528b2a67b674a7384c6ebfc949f8a","commit_message":"feat: add objdiff progress reporting and decomp.dev CI\n\nTracking accurate decompilation coverage requires continuous diffing between matched C routines and original assembly. Integrating `objdiff` provides detailed per function metrics locally and allows publishing real time project progress to decomp.dev without exposing proprietary assets.\n\nThe build workflow now generates target objects directly from the retail assembly emitted by Splat, matching the compiler state and assembler flags used in the main build. Existing C implementations are compiled as base objects to produce a standard report at `.decomp/report.json`. Automating report generation inside the promote target and through a pre commit hook guarantees that progress data remains current whenever changes are made.\n\nContinuous integration in GitHub Actions verifies the structure of the generated report and uploads `slus_004.25_report` for external tracking. The original executable and local build artifacts remain entirely on the local developer machine to respect project distribution boundaries while keeping progress publicly visible.","measures":{"fuzzy_match_percent":0.5802324,"total_code":356340,"matched_code":1880,"matched_code_percent":0.527586,"total_data":0,"matched_data":0,"matched_data_percent":100,"total_functions":1227,"matched_functions":9,"matched_functions_percent":0.73349637,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":100,"total_units":1227,"complete_units":0}}]