[PR #5785] [MERGED] feat(il2cpp): link generic method instances behind --generic-instances #7059

Closed
opened 2026-11-01 21:45:02 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/5785
Author: @8rulerstar
Created: 10/21/2026
Status: ✅ Merged
Merged: 10/24/2026
Merged by: @gensokyo-dev

Base: main ← Head: feat/il2cpp-generic-instances


📝 Commits (10+)

  • fcc7d55 feat(il2cpp): read generic containers on demand and render method spec names
  • b3d0723 feat(il2cpp): link generic method instances with admitted rows and kept issues
  • b7d3a0a feat(il2cpp): accept --generic-instances on the CLI and describe it in tool contracts
  • 4e9ad5d docs(il2cpp): describe generic method instances and their limits
  • a242bbd fix(il2cpp): keep issued generic rows unknown and name their row
  • ac29f00 test(il2cpp): reject ambiguous generic layouts and pin budget, yield and limit paths
  • a7d61de Merge origin/main into feat/il2cpp-generics-port
  • 9cdfdfc fix(il2cpp): keep unmapped generic slots per row and reject undeclared arguments
  • 4bfc129 fix(il2cpp): page generic method issues instead of retaining them in summaries
  • 597feb9 chore: merge latest main into feat/il2cpp-generics-port

📊 Changes

30 files changed (+3034 additions, -222 deletions)

View changed files

📝 docs/cli.md (+2 -2)
📝 docs/il2cpp-metadata.md (+125 -26)
➕ docs/verification/il2cpp-generic-instances-2026-10-24.md (+138 -0)
📝 scripts/verify-il2cpp-metadata.mjs (+3 -0)
📝 src/application/il2cpp/Il2cppMetadataService.test.ts (+2 -0)
📝 src/application/il2cpp/Il2cppMetadataService.ts (+14 -1)
📝 src/application/il2cpp/Il2cppSeedWriterPort.ts (+2 -0)
📝 src/cli/il2cppCommands.ts (+9 -0)
📝 src/contracts/analysisViewToolContracts.ts (+1 -1)
📝 src/contracts/il2cpp/il2cppToolContracts.ts (+1 -1)
📝 src/domain/analysisView/il2cppMetadataView.test.ts (+328 -0)
📝 src/domain/analysisView/il2cppMetadataView.ts (+128 -10)
📝 src/domain/il2cpp/il2cppMetadata.fixture.ts (+1 -0)
📝 src/domain/il2cpp/il2cppMetadata.ts (+178 -24)
📝 src/il2cpp/Il2cppBinaryFile.ts (+34 -2)
📝 src/il2cpp/Il2cppBinaryFormat.ts (+3 -0)
➕ src/il2cpp/Il2cppBinaryGenerics.ts (+433 -0)
📝 src/il2cpp/Il2cppBinaryImage.ts (+3 -0)
📝 src/il2cpp/Il2cppBinaryTypes.ts (+313 -105)
📝 src/il2cpp/Il2cppGhidraSeedWriter.ts (+1 -0)

...and 10 more files

📄 Description

Adds opt-in generic_instances / --generic-instances to link IL2CPP generic method instances through the existing static native reader, expose instance/issue views, and include valid instances in existing Ghidra seeds. Metadata 27/29/31 with static registration is supported; unsupported layouts remain typed failures. No target executes and no new provider is introduced. Related #3607; follow-up to #5112/#5327.

The contributor's review fixes keep issue arrays out of summaries and read generic containers on demand. Maintenance verification also found and corrected an unreadable method-spec index becoming -1: unreadable is now null, a recorded -1 stays recorded, and named rows/method filters preserve that distinction. The author's later cleanup commit is incorporated, along with main 98ec00f4068bab894639d0d1d83ac0bfc428bcbf.

Validation: all 285 selected registration/metadata/ownership/view/CLI/actual-stdio-MCP checks pass, plus check:fast, full format:check and docs:check. Twelve completed MCP query tasks preserve requested facts and artifact identities and validate SDK-converted schemas. Paging adds calls, CPU and memory; its whole-RPC estimate rises 0.59% for a small report and falls only 0.75% for a long-name report. These are payload token estimates, not billed tokens or measured model context. Exact pins, ranges, cold/warm scope, full-catalog costs and exclusions are in the verification report.

Real Unity verification remains contributor-reported on two private Android arm64 version-31 builds; this maintenance run did not reproduce the Il2CppDumper comparison, whose version was not recorded. Authored boundary fixtures do not establish real Unity dispatch, metadata-27/29 production behavior or a real Ghidra seed import. The original human-readiness declarations are preserved below.

Author readiness

Human owner: @8rulerstar

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff.
  • The PR has one focused outcome and the title follows type(scope): outcome.
  • Related issue is linked, or the reason for not linking one is stated above.
  • Tests cover changed observable behavior and meaningful failure paths.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • User-visible CLI/MCP changes include representative output.
  • I checked the final diff for secrets, unrelated cleanup, and unsupported claims.

Thanks for taking a look.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/5785 **Author:** [@8rulerstar](https://github.com/8rulerstar) **Created:** 10/21/2026 **Status:** ✅ Merged **Merged:** 10/24/2026 **Merged by:** [@gensokyo-dev](https://github.com/gensokyo-dev) **Base:** `main` ← **Head:** `feat/il2cpp-generic-instances` --- ### 📝 Commits (10+) - [`fcc7d55`](https://github.com/morluto/rea/commit/fcc7d559c509f3243505d7e36e75a2401b31f4c2) feat(il2cpp): read generic containers on demand and render method spec names - [`b3d0723`](https://github.com/morluto/rea/commit/b3d07236cf9d3f0cb30bb5d5e7538f4c4114f505) feat(il2cpp): link generic method instances with admitted rows and kept issues - [`b7d3a0a`](https://github.com/morluto/rea/commit/b7d3a0ac3af694a5432d7f78043e9950102bde1a) feat(il2cpp): accept --generic-instances on the CLI and describe it in tool contracts - [`4e9ad5d`](https://github.com/morluto/rea/commit/4e9ad5db8bbce004bbf4740e3a540e875eaf2cba) docs(il2cpp): describe generic method instances and their limits - [`a242bbd`](https://github.com/morluto/rea/commit/a242bbda9c561dfa7737fe385cc063176e5810d9) fix(il2cpp): keep issued generic rows unknown and name their row - [`ac29f00`](https://github.com/morluto/rea/commit/ac29f00e42814fa0ead6b9c49d08b51efe6d3695) test(il2cpp): reject ambiguous generic layouts and pin budget, yield and limit paths - [`a7d61de`](https://github.com/morluto/rea/commit/a7d61de4af54519b16d675c369d878059b5ed2ce) Merge origin/main into feat/il2cpp-generics-port - [`9cdfdfc`](https://github.com/morluto/rea/commit/9cdfdfced0471dd5d7eae027f78445214e8f146b) fix(il2cpp): keep unmapped generic slots per row and reject undeclared arguments - [`4bfc129`](https://github.com/morluto/rea/commit/4bfc129c8e773832e0dd72d4fc8c769773305059) fix(il2cpp): page generic method issues instead of retaining them in summaries - [`597feb9`](https://github.com/morluto/rea/commit/597feb9ee83a663c6a1d002adecdd28d15d2bf24) chore: merge latest main into feat/il2cpp-generics-port ### 📊 Changes **30 files changed** (+3034 additions, -222 deletions) <details> <summary>View changed files</summary> 📝 `docs/cli.md` (+2 -2) 📝 `docs/il2cpp-metadata.md` (+125 -26) ➕ `docs/verification/il2cpp-generic-instances-2026-10-24.md` (+138 -0) 📝 `scripts/verify-il2cpp-metadata.mjs` (+3 -0) 📝 `src/application/il2cpp/Il2cppMetadataService.test.ts` (+2 -0) 📝 `src/application/il2cpp/Il2cppMetadataService.ts` (+14 -1) 📝 `src/application/il2cpp/Il2cppSeedWriterPort.ts` (+2 -0) 📝 `src/cli/il2cppCommands.ts` (+9 -0) 📝 `src/contracts/analysisViewToolContracts.ts` (+1 -1) 📝 `src/contracts/il2cpp/il2cppToolContracts.ts` (+1 -1) 📝 `src/domain/analysisView/il2cppMetadataView.test.ts` (+328 -0) 📝 `src/domain/analysisView/il2cppMetadataView.ts` (+128 -10) 📝 `src/domain/il2cpp/il2cppMetadata.fixture.ts` (+1 -0) 📝 `src/domain/il2cpp/il2cppMetadata.ts` (+178 -24) 📝 `src/il2cpp/Il2cppBinaryFile.ts` (+34 -2) 📝 `src/il2cpp/Il2cppBinaryFormat.ts` (+3 -0) ➕ `src/il2cpp/Il2cppBinaryGenerics.ts` (+433 -0) 📝 `src/il2cpp/Il2cppBinaryImage.ts` (+3 -0) 📝 `src/il2cpp/Il2cppBinaryTypes.ts` (+313 -105) 📝 `src/il2cpp/Il2cppGhidraSeedWriter.ts` (+1 -0) _...and 10 more files_ </details> ### 📄 Description Adds opt-in `generic_instances` / `--generic-instances` to link IL2CPP generic method instances through the existing static native reader, expose instance/issue views, and include valid instances in existing Ghidra seeds. Metadata 27/29/31 with static registration is supported; unsupported layouts remain typed failures. No target executes and no new provider is introduced. Related #3607; follow-up to #5112/#5327. The contributor's review fixes keep issue arrays out of summaries and read generic containers on demand. Maintenance verification also found and corrected an unreadable method-spec index becoming `-1`: unreadable is now `null`, a recorded `-1` stays recorded, and named rows/method filters preserve that distinction. The author's later cleanup commit is incorporated, along with main `98ec00f4068bab894639d0d1d83ac0bfc428bcbf`. Validation: all 285 selected registration/metadata/ownership/view/CLI/actual-stdio-MCP checks pass, plus check:fast, full format:check and docs:check. Twelve completed MCP query tasks preserve requested facts and artifact identities and validate SDK-converted schemas. Paging adds calls, CPU and memory; its whole-RPC estimate rises 0.59% for a small report and falls only 0.75% for a long-name report. These are payload token estimates, not billed tokens or measured model context. Exact pins, ranges, cold/warm scope, full-catalog costs and exclusions are in the [verification report](docs/verification/il2cpp-generic-instances-2026-10-24.md). Real Unity verification remains contributor-reported on two private Android arm64 version-31 builds; this maintenance run did not reproduce the Il2CppDumper comparison, whose version was not recorded. Authored boundary fixtures do not establish real Unity dispatch, metadata-27/29 production behavior or a real Ghidra seed import. The original human-readiness declarations are preserved below. ## Author readiness Human owner: @8rulerstar - [x] I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work. - [x] I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps. - [x] I declare this PR ready for initial maintainer review. ## Before merge - [x] This PR addresses a concrete problem or an agreed enhancement. - [ ] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. - [x] The PR has one focused outcome and the title follows `type(scope): outcome`. - [x] Related issue is linked, or the reason for not linking one is stated above. - [x] Tests cover changed observable behavior and meaningful failure paths. - [x] Owning docs, contracts, and generated metadata are updated where needed. - [ ] User-visible CLI/MCP changes include representative output. - [x] I checked the final diff for secrets, unrelated cleanup, and unsupported claims. Thanks for taking a look. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-11-01 21:45:02 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#7059
No description provided.