fix: утечки жизненного цикла (сцена, ввод, карта) + read-only тест карт
Игра:
- LocationScene: подписки EventBus снимаются в exit() (off из on);
  DialogueSystem.destroy(); worldAudio.setLayers([]) в exit (лупы
  амбиент-слоёв раньше звучали поверх следующей сцены); guard гонки
  roomtone (сцена вышла до резолва промиса — луп гасится); в exit
  добавлены moteLabel и chargeRing (в worldRoot — не вычищался).
- SaveSlotsScene: имена областей из areaOf() (интерьеры показывались
  как «луга»).

Движок:
- InputManager: contextmenu-слушатель снимается в dispose().
- IsometricTileMap: плейсхолдер-графика ячейки хранится в CellSprites
  и уничтожается при перерисовке (раньше накапливалась на setTile).

Тесты карт: fresh/round-trip read-only в npm test; запись файлов —
только при RUN_MAPS_GEN=1 (npm run maps) — обычный прогон больше не
мутирует рабочее дерево. agent:check: дублирующая проба maps удалена,
invariants — через сценарий checks/agent-invariants.mjs (был инлайн-
дубль, разошедшийся с ним).

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent 9099d5c commit 9d5088c2c105adb58f93b477b45a57bb38163704
@root root authored 2 hours ago
Showing 9 changed files
View
CLAUDE.md
View
apps/game/src/scenes/LocationScene.ts
View
apps/game/src/scenes/SaveSlotsScene.ts
View
apps/game/src/systems/DialogueSystem.ts
View
apps/game/tools/agent.mjs
View
apps/game/tools/maps/gen.test.ts
View
package.json
View
packages/engine/src/input/InputManager.ts
View
packages/engine/src/map/IsometricTileMap.ts