1 Commits
Author SHA1 Message Date
andrey 2705c757f8 Фаза 3: ядро игры (модель поля, симуляция, FSM, скрытие, UI)
- index.html: константы/данные, чистая модель поля (Uint8Array, liveNeighbors
  с жёсткими границами, majorityColor с tie-break, step/stepN без мутации src,
  applyBrush с клампом, countByPlayer, isExtinct, hashField), FSM из 11 состояний
  с переходами и reason/winner, visibleMask (скрытие только в PLACE_*),
  отрисовка по маске, Pointer Events с интерполяцией, цикл с клампом dt,
  HUD/тулбар/оверлеи, тест-форсы.
- Паритет с прототипом old доказан дифференциально: наш step == clean-эталон
  273/273; расхождения с proto только там, где proto != clean (баг parent[],
  не воспроизводим — решение пользователя: чистое большинство из 3).
- tests/test.js: раздел 16 паритета; tests/parity-fixture.json — фикстура.
- AGENTS.md: контракт глобалов дополнен (ctx/canvas/viewW/viewH/dpr/visibleMask/
  applyIntent/reason/STEPS_PER_SEC, tests/package-lock.json).
- .gitignore: исключён .gitea_token (гигиена секретов, finding M1 гейта 3).
- Прогоны: check: OK; npm test — ИТОГ 65/65, exit 0. Ревью-гейт 3 (Oracle): PASS.
2026-10-11 09:10:26 +03:00