Split the mixed src/ and scripts/ trees into five compiler-enforced modules
aligned with the 1.13c DLL architecture, plus tools/:
- src/common/ (D2Common/Storm/D2Lang): formats, MPQ, data tables, DRLG,
items/skills/units metadata, RNG, pack contracts. No DOM/Node.
- src/netproto/ (D2Net/Bnclient/D2MCPClient): BNCS/MCP/D2GS protocol; external
code imports only src/netproto/index.ts.
- src/server/ (D2Game): authoritative simulation + LocalLoopbackAdapter.
All 23 reverse deps into client removed; no Math.random /
Date.now / performance.now.
- src/client/ (D2Client/D2Gfx/D2Win/D2Launch/D2Sound): render, UI, frontend,
audio, session, toolbar and the play.html entry.
- src/baker/ Node-only offline packers/extractors + unified `npm run bake`.
- tools/ bot, replay, unlock, verify/audit/benchmark CLIs.
play.html is now the only HTML entry; index.html, acts*.html and bnet.html
plus legacy entry glue (src/main.ts, act-scene, net-scene, lockstep src/net)
are removed.
Adds tsconfig.{common,netproto,server,client,baker}.json wired into
`npm run typecheck`, and tests/arch/boundaries.test.ts enforcing the module
boundaries with zero whitelist exceptions.
Verification: typecheck 6/6 clean; vitest 556 files / 6640 tests pass;
npm run build clean; bake --verify (136/136 levels, universal DT1s);
netproto-replay --strict 0 unknown/opaque/errors; d2-bot walk hardSnaps=0;
audit-levels 136/136; verify-play 9/9 gates at 800x600 and 1024x768.
- Jewels ('jew' / 'jewl') can be socketed into any socketed equipment (weapon, helm, armor, shield) and apply their rolled modifiers identically regardless of slot.
- Un-socketed Jewels display 'Can be Inserted into Socketed Items' / '可镶嵌进有凹槽的装备'.
- Gems (35 codes) and Runes (r01..r33, 33 codes) dispatch slot-dependent modifiers (weaponMods vs helmMods/armor vs shieldMods) per 1.13c Gems.txt.
- Recalculate host item defense, weapon damage, reqStr, reqDex, reqLevel, indestructibility, rune letter sequences, and Runeword completion.
- Support left-click interactive socketing and visual socket overlay rendering across Inventory (10x4), Equipped paperdoll slots, Private Stash (6x8), and Horadric Cube (3x4).
- Add unit & parity test suite in tests/socket-system.test.ts.