[{"timestamp":"2026-10-21T17:15:19Z","commit_sha":"e8eddb0f1aa9d9ac7bf2fcad279e46a545ef4b11","commit_message":"docs(contributing): drop the Code of Conduct, fold it into CONTRIBUTING\n\nNo OpenRAC repository has a Code of Conduct: rac1-decomp, rac2-gc-decomp,\nrac4-decomp, rac5-sm-decomp, rac-sac-decomp, daxter-psp-decomp and the\numbrella repository all have none, and the only one in the family came\nfrom the US project with that project's enforcement address. The community\nnorms live on openrac.dev and in the CONTRIBUTING guides, so the file\ngoes and its substance goes with it.\n\nCONTRIBUTING.md keeps the four steps and grows the parts of the Code of\nConduct that were worth keeping: the sourcing rule and the rule against\nposting game data in an issue, a pull request or the Discord; the\nOpenRAC norms (disagree kindly, credit what you reuse, share what you\nfind, welcome newcomers, be patient); where to report a problem, the\nDiscord and info@openrac.dev; and what AI-assisted contributions mean\nhere. The Contributor Covenant's pledge, enforcement ladder and\nattribution go with it.\n\nThe README's Contributing section points at the Discord and the address\ninstead of the deleted file.\n\nVerified:\n- python3 tests/check_repository.py: repository checks passed\n- python3 -m unittest discover -s tests: 24 tests, OK\n- python3 tools/progress.py --check: the report and the README table are\n  up to date\n- no relative link in README.md, CONTRIBUTING.md, LEGAL.md,\n  THIRD_PARTY_NOTICES.md or AGENTS.md is broken, and nothing references\n  the deleted file any more\n\nNo build was run: this change touches documentation only.","measures":{"fuzzy_match_percent":8.382492,"total_code":7546920,"matched_code":632620,"matched_code_percent":8.382492,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":5192,"matched_functions_percent":32.12275,"complete_code":204448,"complete_code_percent":2.709026,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":281}},{"timestamp":"2026-10-21T17:08:07Z","commit_sha":"4feb5ee38f8a30c87da37bd52ca93b722ab6aaa3","commit_message":"docs(conduct): give the OpenRAC community address as a report route\n\ninfo@openrac.dev reaches the maintainers of the whole initiative, so it\nworks for anyone who would rather not use the Discord or a private\nGitHub message. The Code of Conduct lists it first, with the Discord and\nthe two maintainers of this repository after it, and says all three are\nprivate.\n\nThe README's Contributing section and CONTRIBUTING.md name it too.\n\nVerified:\n- python3 tests/check_repository.py: repository checks passed\n- python3 -m unittest discover -s tests: 24 tests, OK\n- python3 tools/progress.py --check: the report and the README table are\n  up to date\n- no relative link in README.md, CONTRIBUTING.md or CODE_OF_CONDUCT.md is\n  broken\n\nNo build was run: this change touches documentation only.","measures":{"fuzzy_match_percent":8.382492,"total_code":7546920,"matched_code":632620,"matched_code_percent":8.382492,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":5192,"matched_functions_percent":32.12275,"complete_code":204448,"complete_code_percent":2.709026,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":281}},{"timestamp":"2026-10-21T17:06:23Z","commit_sha":"e923010ea3c347102016de5f5557a6e1d0a50e12","commit_message":"feat: Ratchet & Clank 3 decompilation\n\nA matching decompilation of Ratchet & Clank 3 (PS2), led by Veradictus\nfor both the PAL and the NTSC versions. It covers the PAL release\n(SCES-52456) so far: the three core programs (frontbin, boot_elf,\ni5bootn) and the 49 level programs on the disc, each rebuilt from C and\nassembly until every byte equals retail. Flags are per source file,\nnever per function.\n\nThe project started from the NTSC-U decompilation's setup and findings\n(CREDITS.md).","measures":{"fuzzy_match_percent":8.382492,"total_code":7546920,"matched_code":632620,"matched_code_percent":8.382492,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":5192,"matched_functions_percent":32.12275,"complete_code":204448,"complete_code_percent":2.709026,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":281}},{"timestamp":"2026-10-21T17:03:34Z","commit_sha":"12b433a8ff3739b3b77f521b9a6db750141fe1e4","commit_message":"docs(conduct): write a Code of Conduct for this project\n\nThe inherited Contributor Covenant 2.0 came from the US project and\nnamed its enforcement address, racuyadecomp@gmail.com, which is not this\nrepository's. It is replaced with one written for this project.\n\nThe standards are the OpenRAC community's own, as openrac.dev states\nthem: disagree kindly and argue about the code rather than the person,\ncredit what you reuse, share what you find, welcome newcomers, and give\nreviewing, documentation and tooling the same weight as writing matches.\n\nTwo project-specific rules are now stated where people will meet them:\nnever upload or link game data (disc images, executables, overlays,\ndumps, extracted assets) in an issue, a pull request or the Discord, and\nnever use SDK source, samples, headers or leaked material. The first is\nthe openrac.dev FAQ's rule and the second is AGENTS.md's sourcing rule;\nboth protect the project, and the first is what the legal notice in\nLEGAL.md rests on.\n\nThe scope covers the sibling OpenRAC repositories and the Discord, which\nthe projects share. Reports go privately to the two maintainers of this\nrepository, listed on openrac.dev, by Discord message or private GitHub\nmessage; the old address is dropped and filing a public issue for a\nconduct report is explicitly discouraged.\n\nA short section says where AI-assisted contributions sit: welcome, but\nthe author answers for them and the rules do not relax.\n\nCONTRIBUTING.md and the README link to it.\n\nVerified:\n- python3 tests/check_repository.py: repository checks passed\n- python3 -m unittest discover -s tests: 24 tests, OK\n- python3 tools/progress.py --check: the report and the README table are\n  up to date\n- no relative link in README.md, CONTRIBUTING.md or CODE_OF_CONDUCT.md is\n  broken\n\nNo build was run: this change touches documentation only.","measures":{"fuzzy_match_percent":8.382492,"total_code":7546920,"matched_code":632620,"matched_code_percent":8.382492,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":5192,"matched_functions_percent":32.12275,"complete_code":204448,"complete_code_percent":2.709026,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":281}},{"timestamp":"2026-10-21T16:54:58Z","commit_sha":"fe5df12a73321bd6277acc37d86056933669aeb0","commit_message":"docs(license): rework the LICENSE like rac1-decomp\n\nLICENSE is now the canonical GPL-3.0 text, byte-identical to upstream\ngpl-3.0.txt, plus a short trailer in the shape rac1-decomp uses: the\ncopyright line, the note that the GCC runtime library files keep their\nown licence, and the trademark note.\n\nThe split-licensing header that sat above the GPL text moved to LEGAL.md,\nwhich now says what the GPL covers (tools/, tests/, the build system,\ninclude/, the config tables, the docs), what it does not (the decompiled\ngame code under src/, the C drafts under nonmatching/, the locally\ngenerated asm/), what keeps its own licence (the GCC runtime library\nfiles) and what the repository never contains.\n\nThe old header asserted no copyright holder at all, and left nonmatching/\n(610 C drafts) in a gap between the GPL grant and the exclusion.\n\nCODE_OF_CONDUCT.md is deleted: rac1-decomp has none, and the OpenRAC\nDiscord is where the community rules live.\n\nTHIRD_PARTY_NOTICES.md's split-licensed pointer now names LEGAL.md too.\n\nVerified:\n- the GPL-3.0 body is byte-identical to upstream gpl-3.0.txt\n- python3 tests/check_repository.py: repository checks passed\n- python3 -m unittest discover -s tests: 24 tests, OK\n- python3 tools/progress.py --check: the report and the README table are\n  up to date\n- no relative link in README.md, LEGAL.md, THIRD_PARTY_NOTICES.md or\n  LICENSE is broken\n\nNo build was run: this change touches documentation only.","measures":{"fuzzy_match_percent":8.382492,"total_code":7546920,"matched_code":632620,"matched_code_percent":8.382492,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":5192,"matched_functions_percent":32.12275,"complete_code":204448,"complete_code_percent":2.709026,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":281}},{"timestamp":"2026-10-21T16:45:32Z","commit_sha":"357d94422b0385549df10180396c527711c5e2b1","commit_message":"docs(readme): rewrite the README like rac1-decomp\n\nThe README now has the shape of the other OpenRAC decompilations: badges\n(OpenRAC site, Discord, the CI progress report and ByteMatch's code and\nfunction shields), the OpenRAC framing and the objective paragraph, a NOTE\ncallout for the no-game-assets rule, a Progress section with the version,\nregion and target table, a Quick Start section (prerequisites, toolchain,\nsetup and build, the level build as a sixth step), an expanded Credits\nsection and a License section. The Tools table keeps the tools that are\nthere.\n\nThe progress table between the progress:begin and progress:end markers is\nuntouched, so tools/progress.py --write still reproduces it byte for byte.\n\nCONTRIBUTING.md's link to the build section now points at #quick-start;\nthe #building-macos-and-linux heading it named is gone.\n\nVerified:\n- python3 tools/progress.py --check: the README table is up to date\n- python3 tests/check_repository.py: repository checks passed\n- python3 -m unittest discover -s tests: 24 tests, OK\n\nNo build was run: this change touches documentation only.","measures":{"fuzzy_match_percent":8.382492,"total_code":7546920,"matched_code":632620,"matched_code_percent":8.382492,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":5192,"matched_functions_percent":32.12275,"complete_code":204448,"complete_code_percent":2.709026,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":281}},{"timestamp":"2026-10-21T16:27:06Z","commit_sha":"1678034093667cd9c298cc060b55410a0c9c6151","commit_message":"feat: Ratchet & Clank 3 (PAL) decompilation\n\nA matching decompilation of Ratchet & Clank 3 (PS2, PAL, SCES-52456):\nthe three core programs (frontbin, boot_elf, i5bootn) and the 49 level\nprograms on the disc, each rebuilt from C and assembly until every byte\nequals retail. Flags are per source file, never per function.\n\nThe project started from the NTSC-U decompilation's setup and findings\n(CREDITS.md); its history before this commit is archived.","measures":{"fuzzy_match_percent":8.382492,"total_code":7546920,"matched_code":632620,"matched_code_percent":8.382492,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":5192,"matched_functions_percent":32.12275,"complete_code":204448,"complete_code_percent":2.709026,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":281}},{"timestamp":"2026-10-21T16:03:24Z","commit_sha":"f7a6ebabc6f48d24435bb0109f007240e4a1f118","commit_message":"docs(credits): the PAL decompilation is led by Flavius\n\nvetusmagnus is credited for the initial NTSC setup and findings the\nproject started from: rac3-uya-decomp, the toolchain identification, its\nbuild system and localdecomp, and most of the matched C the PAL port\ncarried over.","measures":{"fuzzy_match_percent":8.382492,"total_code":7546920,"matched_code":632620,"matched_code_percent":8.382492,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":5192,"matched_functions_percent":32.12275,"complete_code":204448,"complete_code_percent":2.709026,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":281}},{"timestamp":"2026-10-21T12:24:56Z","commit_sha":"08615e3b9426020b3f6f1b5a0020e295d51d1736","commit_message":"feat(levels): port 681 more functions from the US decomp\n\nThe C of 681 more level functions, ported from rac3-uya-decomp\n(vetusmagnus/ratchet-uya-decomp) at commit\n6955267b6f894aa8d99f7070a03a71b81143c5e3 as before (paired by identical\ncode with the catalogue, names translated from the relocations at PAL's\nplace). These are the ones that first failed in other levels or clashed\nwith other functions of their file:\n\n- names that in some levels stand for another copy (another function with\n  the same code, other data) are aliases with the caller's address as\n  suffix;\n- the types the functions of a file use are in the file's prelude (a\n  clashing one takes its function's address as suffix), and a function\n  whose declaration of a name clashes with another one reads or calls it\n  through a cast of its own type, with the other declaration in its block;\n  a few earlier blocks of the same files changed that way too, with the\n  same bytes.\n\nVerified: tools/check.py MATCH for all 2,094 level C functions under their\nfiles' flags, each place checked in all levels, tools/build_levels.py 49\nof 49 levels MATCH, tools/build.py --target all MATCH, tests pass.","measures":{"fuzzy_match_percent":8.382492,"total_code":7546920,"matched_code":632620,"matched_code_percent":8.382492,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":5192,"matched_functions_percent":32.12275,"complete_code":204448,"complete_code_percent":2.709026,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":281}},{"timestamp":"2026-10-21T10:21:28Z","commit_sha":"f418466d13eb19f7b7c49eed97bc12cf2feaface","commit_message":"feat(levels): port 74 level-only functions from the US decomp\n\nThe C of 74 functions that only one level has (src/levels/<NN_name>/),\nported from rac3-uya-decomp (vetusmagnus/ratchet-uya-decomp) at commit\n6955267b6f894aa8d99f7070a03a71b81143c5e3, as the shared ones before:\npaired by identical code with the catalogue, names translated from the\nrelocations at PAL's place.\n\nVerified: tools/check.py MATCH for every function under its file's flags,\ntools/build_levels.py 49 of 49 levels MATCH, tools/build.py --target all\nMATCH, tests pass.","measures":{"fuzzy_match_percent":7.235216,"total_code":7546920,"matched_code":546036,"matched_code_percent":7.235216,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":4511,"matched_functions_percent":27.909424,"complete_code":204448,"complete_code_percent":2.709026,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":281}},{"timestamp":"2026-10-21T09:27:44Z","commit_sha":"502b78f2b855be878835107b068495261c533996","commit_message":"feat(boot_elf): port 1 function in 3A6C90.c from the US decomp\n\nfunc_003A70C8: ported from the US decompilation (rac3-uya-decomp, commit\n6955267), whose C for these functions builds to PAL's bytes too; names moved\nto PAL addresses, built with the flags of the files they live in (no per-\nfunction overrides).\n\nVerified: tools/check.py prints MATCH for each; tools/build.py --target\nboot_elf prints MATCH (sha1 e0a4e82e9a363a64db5a555db8c8f927ef58c3d8);\ntools/port_verify.py: 0 of 2802 functions differ (0 of them C);\ntests/check_repository.py and the unit tests pass.","measures":{"fuzzy_match_percent":5.15935,"total_code":7546920,"matched_code":389372,"matched_code_percent":5.15935,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":3103,"matched_functions_percent":19.19817,"complete_code":204448,"complete_code_percent":2.709026,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":281}},{"timestamp":"2026-10-21T09:11:08Z","commit_sha":"41ccb5aec3c403bda824d56cb567ec5f10da4e9a","commit_message":"feat(boot_elf): port 11 functions from the US decomp\n\nfunc_00124ED0, func_0012B098, func_0012D938, func_0012DC88, func_0012E3A8,\nfunc_0012EF10, func_0012F3F8, func_0012F5A8, func_0012FC78, func_00134D60\nand func_00139F80: ported from the US decompilation (rac3-uya-decomp, commit\n6955267), whose C for these functions builds to PAL's bytes too; names moved\nto PAL addresses, built with the flags of the files they live in (no per-\nfunction overrides).\n\nVerified: tools/check.py prints MATCH for each; tools/build.py --target\nboot_elf prints MATCH (sha1 e0a4e82e9a363a64db5a555db8c8f927ef58c3d8);\ntools/port_verify.py: 0 of 2802 functions differ (0 of them C);\ntests/check_repository.py and the unit tests pass.","measures":{"fuzzy_match_percent":5.151983,"total_code":7546920,"matched_code":388816,"matched_code_percent":5.151983,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":3102,"matched_functions_percent":19.191982,"complete_code":203892,"complete_code_percent":2.701658,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":281}},{"timestamp":"2026-10-21T08:48:17Z","commit_sha":"e9d066f8d49be565296b0e43e44db999f7df7e4f","commit_message":"feat(boot_elf): port 1 function in 13ABC8.c from the US decomp\n\nfunc_0013ABC8: ported from the US decompilation (rac3-uya-decomp, commit\n6955267), whose C for these functions builds to PAL's bytes too; names moved\nto PAL addresses, built with the flags of the files they live in (no per-\nfunction overrides).\n\nVerified: tools/check.py prints MATCH for each; tools/build.py --target\nboot_elf prints MATCH (sha1 e0a4e82e9a363a64db5a555db8c8f927ef58c3d8);\ntools/port_verify.py: 0 of 2802 functions differ (0 of them C);\ntests/check_repository.py and the unit tests pass.","measures":{"fuzzy_match_percent":5.128768,"total_code":7546920,"matched_code":387064,"matched_code_percent":5.128768,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":3073,"matched_functions_percent":19.01256,"complete_code":202664,"complete_code_percent":2.685387,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":267}},{"timestamp":"2026-10-21T08:26:45Z","commit_sha":"d02480b6ea19263b24e7897806c9f3d4e7f81e15","commit_message":"feat(frontbin): match 1 function in 3BB0D8.c\n\nfunc_003BDF18: C in place of their INCLUDE_ASM markers, built with the flags\nof the files they live in (no per-function overrides; $gp globals use the\ndocumented .extern size hints). Their nonmatching/ drafts and README rows\nare removed.\n\nVerified: tools/check.py prints MATCH for each; tools/build.py --target\nfrontbin prints MATCH (sha1 5a7ff1fe9c73a63c6ce6fe7b5f80cd7cab3aa553);\ntools/port_verify.py: 0 of 1902 functions differ (0 of them C);\ntests/check_repository.py and the unit tests pass.","measures":{"fuzzy_match_percent":5.126595,"total_code":7546920,"matched_code":386900,"matched_code_percent":5.126595,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":3072,"matched_functions_percent":19.006372,"complete_code":202664,"complete_code_percent":2.685387,"complete_data":0,"complete_data_percent":0,"total_units":423,"complete_units":267}},{"timestamp":"2026-10-21T08:06:59Z","commit_sha":"323db3c77ce824fe1c7d6a5d7a5b501065de8839","commit_message":"chore(nonmatching): stage 1 closer near miss\n\nReplaces 1 files in nonmatching/ with C that comes closer to PAL retail with\nthe flags of the file each function lives in. Each file starts with the diff\ncount tools/check.py reports and what still differs; its\nnonmatching/README.md row has the count and the previous one. Nothing here\nis linked or counted.\n\nVerified: tools/check.py on each (counts as in the rows), tests/check_repository.py.","measures":{"fuzzy_match_percent":5.126595,"total_code":7546920,"matched_code":386900,"matched_code_percent":5.126595,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":3072,"matched_functions_percent":19.006372,"complete_code":202704,"complete_code_percent":2.685917,"complete_data":0,"complete_data_percent":0,"total_units":424,"complete_units":268}},{"timestamp":"2026-10-21T07:12:31Z","commit_sha":"e4031ea8756f42af4996edc0e8a4e1df74186ba3","commit_message":"chore(nonmatching): stage 1 frontbin drafts from boot_elf's C\n\nfrontbin functions whose boot_elf copy (config/frontend_pairs.tsv) is C but that do not\nbuild to retail with their own file's flags as it is: the boot_elf C, within 40 diffs,\nas starting points (replacing a draft only where this one is closer). Each file and its nonmatching/README.md row has the diff count.\n\nVerified: tools/check.py on each (counts as in the rows), tests/check_repository.py.","measures":{"fuzzy_match_percent":5.126595,"total_code":7546920,"matched_code":386900,"matched_code_percent":5.126595,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":3072,"matched_functions_percent":19.006372,"complete_code":202812,"complete_code_percent":2.687348,"complete_data":0,"complete_data_percent":0,"total_units":425,"complete_units":269}},{"timestamp":"2026-10-21T07:07:01Z","commit_sha":"5ec01b17eeb254b1c46d95dbb428191559828d3a","commit_message":"feat(frontbin): port 8 functions from boot_elf's copies\n\nfunc_00397DD0, func_00397DF8, func_00398470, func_0039C078, func_003A1158,\nfunc_003A12D0, func_003A2CD8 and func_003B37E8: the C of boot_elf's copy of\neach (config/frontend_pairs.tsv), with boot_elf's front-end names mapped to\nfrontbin's, built with the flags of the files they live in.\n\nVerified: tools/check.py prints MATCH for each; tools/build.py --target\nfrontbin prints MATCH (sha1 5a7ff1fe9c73a63c6ce6fe7b5f80cd7cab3aa553);\ntools/port_verify.py: 0 of 1902 functions differ (0 of them C);\ntests/check_repository.py and the unit tests pass.","measures":{"fuzzy_match_percent":5.126595,"total_code":7546920,"matched_code":386900,"matched_code_percent":5.126595,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":3072,"matched_functions_percent":19.006372,"complete_code":202812,"complete_code_percent":2.687348,"complete_data":0,"complete_data_percent":0,"total_units":425,"complete_units":269}},{"timestamp":"2026-10-21T07:04:20Z","commit_sha":"59ee4502ebe3bd366168c0dd5a0407de12749bcc","commit_message":"feat(levels): match 5 shared functions\n\nfunc_L01_002F7800, func_L01_003016B0, func_L01_003119E0, func_L01_0032CA80\nand func_L01_003363E8, each in all 49 levels (245 places). The first C in\nlevel code; L01_002FEA20.c and L01_0030E630.c take -mno-split-addresses\n(their functions' %hi/%lo come from the assembler's macros).\n\nVerified: python3 tools/build_levels.py -P 8 -j 4 printed MATCH for all 49\nlevels with the C built into each; tools/build.py --target all printed\nMATCH for frontbin, boot_elf and i5bootn; tests/check_repository.py and\npython3 -m unittest discover -s tests pass; tools/progress.py --write.","measures":{"fuzzy_match_percent":5.126595,"total_code":7546920,"matched_code":386900,"matched_code_percent":5.126595,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":3072,"matched_functions_percent":19.006372,"complete_code":204028,"complete_code_percent":2.70346,"complete_data":0,"complete_data_percent":0,"total_units":429,"complete_units":273}},{"timestamp":"2026-10-21T05:51:51Z","commit_sha":"01697041e28e5d58a001b472d45ead8507d89507","commit_message":"chore(nonmatching): stage 17 closer near misses\n\nReplaces 17 files in nonmatching/ with C that comes closer to PAL retail\nwith the flags of the file each function lives in. Each file starts with the\ndiff count tools/check.py reports and what still differs; its\nnonmatching/README.md row has the count and the previous one. Nothing here\nis linked or counted.\n\nVerified: tools/check.py on each (counts as in the rows), tests/check_repository.py.","measures":{"fuzzy_match_percent":5.124952,"total_code":7546920,"matched_code":386776,"matched_code_percent":5.124952,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":3067,"matched_functions_percent":18.975437,"complete_code":204028,"complete_code_percent":2.70346,"complete_data":0,"complete_data_percent":0,"total_units":429,"complete_units":273}},{"timestamp":"2026-10-21T05:29:07Z","commit_sha":"648fe0c776067b9726825f17770e10d05522f739","commit_message":"feat(boot_elf): match 2 functions\n\nfunc_003A8620 and func_003C3BB8, from their near-miss drafts in nonmatching/.\ndecomp-permuter runs found the change each needed; it is written here as\nplain C:\n\n- func_003A8620 (boot_elf's copy of frontbin's func_003A8220): the 1.0f\n  assignment wrapped in do { } while (0);\n- func_003C3BB8: both conditions go through a temporary, `t = D_001DA4E4[0];`\n  and `t = D_001DA530 > D_002FC1A0;`.\n\nThe drafts and their nonmatching/README.md rows are removed.\n\nVerified: tools/check.py prints MATCH for each; tools/build.py --target all\nprints MATCH for boot_elf (sha1 e0a4e82e9a363a64db5a555db8c8f927ef58c3d8),\nfrontbin and i5bootn; tools/port_verify.py: 0 of 2802 functions differ;\ntests/check_repository.py and the unit tests pass.","measures":{"fuzzy_match_percent":5.121507,"total_code":7546920,"matched_code":386516,"matched_code_percent":5.121507,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":3061,"matched_functions_percent":18.938316,"complete_code":204428,"complete_code_percent":2.708761,"complete_data":0,"complete_data_percent":0,"total_units":429,"complete_units":273}},{"timestamp":"2026-10-21T04:43:32Z","commit_sha":"8879aa6b4939b9ebfeee0e0648216c3d38ab76c0","commit_message":"chore(nonmatching): stage 1 closer near miss\n\nReplaces 1 files in nonmatching/ with C that comes closer to PAL retail with\nthe flags of the file each function lives in. Each file starts with the diff\ncount tools/check.py reports and what still differs; its\nnonmatching/README.md row has the count and the previous one. Nothing here\nis linked or counted.\n\nVerified: tools/check.py on each (counts as in the rows), tests/check_repository.py.","measures":{"fuzzy_match_percent":5.118167,"total_code":7546920,"matched_code":386264,"matched_code_percent":5.118167,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":3058,"matched_functions_percent":18.919756,"complete_code":204664,"complete_code_percent":2.711888,"complete_data":0,"complete_data_percent":0,"total_units":430,"complete_units":274}},{"timestamp":"2026-10-21T04:27:04Z","commit_sha":"8074c90cadf7a71bf15907d995126e4276b39fbf","commit_message":"feat(boot_elf): match 20 functions\n\nfunc_00391510, func_003967B0, func_003A1428, func_003A8850, func_003AA6D8,\nfunc_003AEFF8, func_003B3BA0, func_003BD160, func_003BDFB0, func_003BE800,\nfunc_003BF9B8, func_003C0118, func_003C0C60, func_003C1510, func_003C3178,\nfunc_003C6680, func_003CD410, func_003CF4A8, func_003E3CB0 and\nfunc_003E5970: C in place of their INCLUDE_ASM markers, built with the flags\nof the files they live in (no per-function overrides; $gp globals use the\ndocumented .extern size hints). Their nonmatching/ drafts and README rows\nare removed.\n\nVerified: tools/check.py prints MATCH for each; tools/build.py --target\nboot_elf prints MATCH (sha1 e0a4e82e9a363a64db5a555db8c8f927ef58c3d8);\ntools/port_verify.py: 0 of 2802 functions differ (0 of them C);\ntests/check_repository.py and the unit tests pass.","measures":{"fuzzy_match_percent":5.116365,"total_code":7546920,"matched_code":386128,"matched_code_percent":5.116365,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":3056,"matched_functions_percent":18.907381,"complete_code":204528,"complete_code_percent":2.710086,"complete_data":0,"complete_data_percent":0,"total_units":429,"complete_units":273}},{"timestamp":"2026-10-21T04:13:39Z","commit_sha":"bc53cc1f56bac87543214dcf0960c6a79bee1c43","commit_message":"chore(nonmatching): stage 106 closer near misses\n\nReplaces 106 files in nonmatching/ with C that comes closer to PAL retail\nwith the flags of the file each function lives in. Each file starts with the\ndiff count tools/check.py reports and what still differs; its\nnonmatching/README.md row has the count and the previous one. Nothing here\nis linked or counted.\n\nVerified: tools/check.py on each (counts as in the rows), tests/check_repository.py.","measures":{"fuzzy_match_percent":5.066809,"total_code":7546920,"matched_code":382388,"matched_code_percent":5.066809,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16163,"matched_functions":3035,"matched_functions_percent":18.777454,"complete_code":203896,"complete_code_percent":2.701711,"complete_data":0,"complete_data_percent":0,"total_units":426,"complete_units":269}},{"timestamp":"2026-10-21T03:20:13Z","commit_sha":"b20190ed5729d06c9ab7d60f8a24ce473d7153e8","commit_message":"fix(progress): count the whole game, each distinct function once\n\ntools/progress.py counts from src/ and the committed tables found from the\nbinaries, so CI still needs no disc:\n\n- the core programs' functions are config/inventory.tsv's, each in the\n  source file that holds its start; a function is final when every source\n  entry it covers is (C, ASM_FUNC, LINKER_REMNANT); remnants are final;\n- boot_elf's .text re-links frontbin's front end: each pair of\n  config/frontend_pairs.tsv counts once, in frontbin's unit (in boot_elf's\n  when only boot_elf's copy is final). This was 1,873 functions and 456,392\n  bytes counted twice;\n- the level code: one \"Shared level code\" unit and one unit per level with\n  its own functions (\"Level 01: Veldin\"), from config/levels/functions.tsv,\n  each distinct function once; a level's copy of a front-end function is\n  frontbin's.\n\nUnits and categories follow rac1-decomp: one unit per core source file;\ncategories core, each core program and section, level_code, common,\nlevels and level_NN. Exact and fuzzy are computed apart (from each function's\nfinal state and its fuzzy_match_percent); they are equal, since nothing\npartly matched is built or counted.\n\nBefore: 532 units, 4,903 functions, 1,106,012 bytes, core only. Now: 436\nunits, 16,162 functions, 7,546,924 bytes: core 2,902 functions (639,576\nbytes, 57.65% exact), shared level code 7,747 (0.16%), level-specific code\n5,513 (0.07%), 5.00% in all. The README table and the progress workflow's\nsummary show core, shared and level-specific code.\n\nVerified: tools/progress.py --check, tests/check_repository.py and the unit\ntests pass.","measures":{"fuzzy_match_percent":4.996367,"total_code":7546924,"matched_code":377072,"matched_code_percent":4.996367,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":16162,"matched_functions":3016,"matched_functions_percent":18.661057,"complete_code":195552,"complete_code_percent":2.591148,"complete_data":0,"complete_data_percent":0,"total_units":426,"complete_units":268}},{"timestamp":"2026-10-21T03:04:11Z","commit_sha":"927a2c444a9d15e0b3309af57e42be7e1fb7753c","commit_message":"feat(frontbin): match 11 functions\n\nfunc_003A9150, func_003A9390, func_003A9A40, func_003AB308, func_003B32D8,\nfunc_003B3378, func_003B67A8, func_003BE0C0, func_003C3780, func_003D8640\nand func_003E1370, from their US drafts in nonmatching/, now built with the\nflags of the files they live in (no per-function overrides; the $gp ones use\nthe documented .extern size hints). func_003B3910 reaches func_003B32D8 and\nfunc_003B3378 through same-address aliases, since its declarations differ\nfrom the new definitions. The drafts and their nonmatching/README.md rows\nare removed.\n\nVerified: tools/check.py prints MATCH for each; tools/build.py --target\nfrontbin prints MATCH (sha1 5a7ff1fe9c73a63c6ce6fe7b5f80cd7cab3aa553);\ntools/port_verify.py: 0 of 1902 functions differ; tests/check_repository.py\nand the unit tests pass.","measures":{"fuzzy_match_percent":50.728565,"total_code":1106012,"matched_code":561064,"matched_code_percent":50.728565,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":4903,"matched_functions":3721,"matched_functions_percent":75.89231,"complete_code":209768,"complete_code_percent":18.96616,"complete_data":0,"complete_data_percent":0,"total_units":532,"complete_units":273}},{"timestamp":"2026-10-21T02:47:23Z","commit_sha":"ad81f418e23aa8dc96407b07aa2c4b0e3a258b78","commit_message":"feat(boot_elf): match 7 functions\n\nfunc_0013D258, func_0038E928, func_00392E60, func_003AB520, func_003AD628,\nfunc_003B48E0 and func_003BA1E8, from their drafts in nonmatching/, which\ncompiled to retail with the flags of their files but clashed with declarations\nelsewhere in them:\n\n- func_0013D258: its prototype takes the u8 pointers the definition uses.\n- func_00392E60, func_003B48E0: the later prototypes with other pointer types\n  are dropped; the definition above them declares the function.\n- func_003BA1E8 returns the element address as s32; the caller that reads\n  ->f40 from it casts the result instead of redeclaring it.\n- func_003AD628 is empty and now takes the argument its caller passes.\n- func_0038E928 and func_003AB520 are called with the caller's own registers\n  passed through; those calls go through function pointer casts, the idiom the\n  files already use, instead of conflicting prototypes.\n\nThe drafts and their nonmatching/README.md rows are removed.\n\nVerified: tools/build.py --target all prints MATCH for boot_elf (sha1\ne0a4e82e9a363a64db5a555db8c8f927ef58c3d8), frontbin and i5bootn;\ntools/port_verify.py: 0 of 2802 functions differ; tests/check_repository.py\nand the unit tests pass.","measures":{"fuzzy_match_percent":50.251896,"total_code":1106012,"matched_code":555792,"matched_code_percent":50.251896,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":4903,"matched_functions":3694,"matched_functions_percent":75.34163,"complete_code":209552,"complete_code_percent":18.94663,"complete_data":0,"complete_data_percent":0,"total_units":532,"complete_units":272}},{"timestamp":"2026-10-21T02:38:38Z","commit_sha":"407a30325fc971812f1bb557266ecca03af542c2","commit_message":"feat(boot_elf): match 10 functions\n\nfunc_003B5EF0, func_003BAFA0, func_003BD108, func_003BE5B0, func_003BE6B8, func_003BE7F8,\nfunc_003CF408, func_003D94B8, func_003DF1D8, func_003E6DB0\n\nTheir drafts in nonmatching/ already compiled to retail with the flags of the\nfiles they live in; they now replace their INCLUDE_ASM markers, without the\ndeclarations their files already carry. The drafts and their\nnonmatching/README.md rows are removed.\n\nVerified: tools/check.py prints MATCH for each; tools/build.py --target all\nprints MATCH for boot_elf (sha1 e0a4e82e9a363a64db5a555db8c8f927ef58c3d8),\nfrontbin and i5bootn; tools/port_verify.py: 0 of 2802 functions differ;\ntests/check_repository.py and the unit tests pass.","measures":{"fuzzy_match_percent":50.034176,"total_code":1106012,"matched_code":553384,"matched_code_percent":50.034176,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":4903,"matched_functions":3681,"matched_functions_percent":75.076485,"complete_code":207776,"complete_code_percent":18.786053,"complete_data":0,"complete_data_percent":0,"total_units":532,"complete_units":271}},{"timestamp":"2026-10-21T01:52:22Z","commit_sha":"4ed6612948b61ce6022ca3911a51914ad938fd9e","commit_message":"ci(progress): upload the report to ByteMatch on every push to master","measures":{"fuzzy_match_percent":49.60959,"total_code":1106012,"matched_code":548688,"matched_code_percent":49.60959,"total_data":0,"matched_data":0,"matched_data_percent":0,"total_functions":4903,"matched_functions":3640,"matched_functions_percent":74.24026,"complete_code":200600,"complete_code_percent":18.137236,"complete_data":0,"complete_data_percent":0,"total_units":532,"complete_units":265}}]