# Known Issues Каталог известных проблем и плановых работ. Обновляется при каждом codex/external review. ## Toolchain (build-time, dev-only — НЕ попадает в production bundle) ### `npm audit`: 4 moderate vulnerabilities в цепочке vite@5.4.21 **Дата фиксации:** 2026-05-24 (codex review #3, HEAD `bb9f720`). **Затронуто:** `esbuild ≤ 0.24.2`, транзитивно через `vite@5.x` и `vitest@1.x`. **CVE / advisories:** - [GHSA-67mh-4wv8-2f99](https://github.com/advisories/GHSA-67mh-4wv8-2f99) — esbuild dev-server CORS: встроенный esbuild dev-server отражает произвольный `Origin`, что позволяет cross-origin чтение source-кода во время разработки. **Impact analysis:** - **Production bundle:** не затронут. Vite/Rollup собирают финальный бандл во время `npm run build`; esbuild-код не отгружается клиенту. На YG/RuStore/Play загружается только `dist/` (см. `vite.config.ts`, `build` section). - **Dev-server:** уязвим только при запуске `npm run dev` И биндинге на доступный по сети адрес. Vite по умолчанию слушает `127.0.0.1`. **Mitigation (текущий):** - НЕ запускать dev-server с флагом `--host 0.0.0.0` или `--host` в untrusted сетях. Команда `npm run dev` дефолтно safe. - В CI и production builds esbuild dev-server не запускается вовсе. **Resolution plan:** Контролируемый апгрейд toolchain перед **Phase 5** (YG SDK integration), когда build chain в любом случае пересматривается: - `vite 5.x → 8.x` — major upgrade, ломает API: - `build.rollupOptions.output` — изменён shape - Plugin lifecycle hooks (`buildStart`, `transform`) — сигнатуры - Возможны проблемы с `base: './'` на YG (требует проверки) - `vitest 1.x → 3.x` — major upgrade, ломает API: - Test runner v3 API (`setupFiles`, `globals`) - Coverage provider config (`@vitest/coverage-v8` обязателен) Текущий ETA: ~ конец июня 2026 (вместе с Phase 5 prep). Не блокирует Phase 3-4. --- ## Phase 2 — game-side ### AI personality distinguishability — codified, требует внешней валидации **Дата фиксации:** 2026-05-24 (codex review #3). Поведенческие отличия 4 личностей реализованы (`PersonalityModifier` в `src/ai/AIPlayer.ts`, специальные хуки в `DefensiveAI`/`AggressiveAI`/`GhostAI`/`TricksterAI`). Однако **Phase 2 DoD #X** — «тестер различает 4 личности после 5 матчей» — не доказуем code-only проверкой; требует blind playtest. **Resolution plan:** Прогон по [`playtest-protocol.md`](./playtest-protocol.md) с внешним тестером (не разработчик) до закрытия Phase 2. Pass-bar: ≥75% blind-attribution accuracy. --- ## Phase 3 — partial DoD coverage (sprint-mode scope) **Дата фиксации:** 2026-05-24 (post Phase 3 implementation). ### AI booster (cradle) — wishlist Phase 3.5 / Phase 4 DoD `definition-of-done.md:166-171` требует: - `Defensive Hard — cradle при защите` - `Aggressive Hard — прицельный бустер в углы ворот игрока` - `Trickster Hard — прицел через bumper-кластер (3-5 отскоков)` В текущей реализации Hard difficulty работает на уровне reactionMs/jitterMs (80ms/20ms через config). Полноценный AI cradle (с ray-tracing solver, прицеливанием, shot direction) — не реализован. Hard subjectively сложнее Medium через быструю реакцию, но без cradle-aim solver не отличается тактически. **Resolution plan:** Phase 3.5 polish или Phase 4 (вместе с Hard playtest tuning). Базовая инфраструктура (Booster class с reusable state machine) уже готова — нужен второй instance Booster для AI side + ray-tracing solver (~3 сек × 12 углов имитация траектории до flipper-зоны игрока). ### Ghost adaptation — sprint-mode (без profile-tracking) Per `scope-lock.md` и `definition-of-done.md:395-419` sprint-mode alternative DoD активирован. `GhostProfile` остаётся `null` в SaveState; `GhostAI` использует balanced setup без EMA-updates. Это **сознательное** решение для MVP — full adaptation добавляется как live-ops feature через 4-8 недель после launch'а. ### `defender_20` achievement — proxy эвристика DoD требует «20+ BP через свои setup-bumpers за матч». В Phase 3 у `MatchResult` нет отдельного breakdown по source (только total `bumperPointsEarned`). Используется proxy: total BP ≥ 20. Точный source-breakdown добавляется в Phase 4 через extension `MatchResult` (poля `bumperPointsBySource: {fixed, setup}`). --- ## Cross-references - Phase roadmap: [`README.md#фазовый-план`](./README.md#фазовый-план) - Concept docs: `~/Knowledge/Projects/pinball-duel/` - Audit history: `~/Knowledge/Projects/pinball-duel/index.md` (10 раундов до `dc53623`, затем codex rounds #1-3 в git log с тегом `Post-codex-review-*`)