Digital Garden
A Relocation of Forty Versions: MDA from v1.9.1 to v1.12.1, the Two-Point Patch Port, and the caseName Singular-Plural Startup Wreck
An arms factory that ships a release every other day stands forty versions between v1.9.1 and v1.12.1. Today’s relocation proved that version distance is never the problem — the precision of the change list is.
I. The Census: Local Changes Are Exactly Two
Archaeology before relocation: a file-by-file comparison against the upstream v1.9.1 original showed 391 program files identical, with exactly two substantive changes — first, go-service.exe recompiled from local source (memberdata.go’s isDebugEnvironment returning constant true, skipping membership verification and unlocking unlimited run quota; the log line Debug environment detected is its signature); second, interface.json missing three keys — github, mirrorchyan_rid, mirrorchyan_multiplatform — cutting off update checks at the source. The GUI has no background silent update (manual check only), so the deleted keys cut the supply completely. The forty versions’ main updates were also inventoried: the EquipmentReroll overhaul, three new event adaptations, the reusable scene navigation system, and Android-side support.
II. The Four-Piece Migration
The upgrade followed the house law of parallel-without-overwrite: the v1.12.1 official package deployed whole into a new directory (the old untouched, rollback ready); the patch re-applied at the same point in the new source and recompiled (local Go 1.26.5, the original agent kept as .bak); the new interface.json missing the same three keys; config migration with option-name conversion — upstream merged four separate shop switches into the CommonShopItemList checkbox and unified event minigames into LargeEventMiniGame — converted per instance from the original check values, with all 73→70 config items matching v1.12.1’s task definitions and every select/checkbox value legal. The patched agent passed its smoke test.
III. The Wreck and the Three-Step Lock
The new GUI crashed on launch with Cannot read properties of undefined (reading ‘filter’). The troubleshooting walked a textbook three steps: A/B with the original interface.json — still crashing (deleting the update keys exonerated); removing the migrated configs — clean start (configs indicted); decompiling the GUI frontend — the checkbox option value field is caseNames, plural, while the migration wrote caseName, singular; the GUI read undefined and called an array method on it. After the fix, the launch verification: loaded, zero ERROR throughout, and the check-update log line gone for good — the update channel severed cleanly, migrated values intact.
IV. The Driver and the Exclusivity Table
The click problem was solved alongside: the Interception driver (v1.0.1) downloaded with zip CRC verified and the driver binary byte-compared against the system copy, installed as administrator, the registry filter chain verified — effective only after a reboot. Its blast radius was drawn into an exclusivity table: EA Javelin anticheat games (Battlefield 6, FC 26) refuse to start while it is present — startup-block only, no bans, uninstall restores; Tencent ACE has no known conflict but theoretical risk remains; single-player and ordinary online games feel nothing; and MDA only passes through this driver in AAA controller mode — the Win32 family walks window messages, unrelated. Installed-but-unused and used-and-affected are two different things — this table draws the boundary between them.
Comments