- Curve bumper: spin-modifier ±35° на отскоке (детерминированный знак на bumper)
+ визуальный вихрь-индикатор. Теперь curve механически отличается от standard.
- Easy/Medium AI delta: распознавательная дистанция (Easy 150px / Medium 280px),
reliability (Easy 0.75 / Medium 0.95). difficulty прокидывается из каждой
personality в shouldActivateFlipperBase. Hard остаётся placeholder для Phase 3.
- Share button на ResultScene: snapshot canvas → PNG blob → platform.shareImage().
Mock логирует, YG использует SDK share. Telemetry: share_clicked / share_failed.
- Setup UX переписан: палитра типов сверху (4 типа + trash) + tap-палитра-tap-слот
(unified mobile/desktop) + drag-from-palette ghost (desktop). Long-tap слота без
выбранного типа удаляет содержимое (быстрый shortcut). Заменил cycle-on-click
на normalуй setup, как в DoD.
Closes codex finding #2 (Phase 2 DoD gap).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Fix#1 (Critical): rename private `data` → `sceneData` in Match/Setup/Result
scenes (collided с Phaser.Scene.data DataManager, ломало TS build).
Убран unused `game` var в main.ts. typecheck + build теперь зелёные.
- Fix#3: matchId генерируется один раз в MatchScene.create() и
переиспользуется в match_start, match_end, MatchResult — telemetry funnel
теперь связывается.
- Fix#4: AI setup сохраняется в `aiSetupConfig` и кладётся в MatchResult.aiSetup
(раньше всегда пустой). Также убрана двойная инстанциация AI
(createAIPlayer() вызывался дважды).
- Fix#5: last-touch меняется на ЛЮБОМ касании флиппера (активном или
пассивном). Раньше owner не обновлялся при пассивном отскоке → ломалась
autogoal-логика.
- Lint: убран unused `oldOwner` параметр в spawnBall callback.
- Tests: добавлены 16 unit-тестов для calculateScores
(`src/scoring/calculateScores.test.ts`) — покрытие baseline, mode/difficulty
multipliers, penalty стэкинг, double-points (local-only), Anti-A2W
invariant (base ≤ local при penalty без double-points).
- package-lock.json закоммичен для reproducible build.
Codex findings #2 (Phase 2 DoD: drag-and-drop setup, curve bumper physics,
Share button, Easy/Medium delta) — отдельным заходом.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>