- Full auto-analysis of the 137MB IL2CPP GameAssembly.dll is the wrong default:
Decompiler Parameter ID is ~single-threaded, ran 5h+ with no checkpoint/ETA
and saves only at the end. It rediscovers what Il2CppDumper already knows.
- Add ghidra/scripts/apply_il2cpp_symbols.py: headless-adapted port of
yoten/ghidra.py (askFile -> script arg) that imports the dumper's script.json
symbol table (function boundaries + names + string/metadata labels) onto a
-noanalysis import. Names-only/light path; struct+signature path documented.
- docs/GHIDRA.md: full workflow, address convention (base.add(Address), no -0x1000),
the _JAVA_OPTIONS=-Xmx4g heap-cap gotcha, targeted decomp/disasm commands.
- All 5 walker hashes are recomputed client-side on save from the local
CompartmentsDatabase + CompartmentDefinitionDto (same build => byte-identical
hashes; no per-walker secret). Wiping any/all hashes loads/opens/edits fine;
one in-editor save regenerates everything (+ new file UUID & UniqueId).
- VERSION flag (WalkerBlueprintContainer.ValidateVersion) depends only on the
structural Compartments/Connections hashes, not the Definition hashes; ERRORS
is a separate structural check. Hashes = integrity/version-staleness markers,
not security. Server upsert validation still untested.
- Document the 5-hash table (3 top-level + 2 per-part) and offline-computability
in docs/TRAMPLER.md + CLAUDE.md; include experiment artifacts + baseline.