Files
life-game/tests/parity-fixture.json
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

175 lines
7.4 KiB
JSON

[
{
"name": "block2x2_5x5",
"w": 5,
"h": 5,
"clean": [
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n"
],
"proto": [
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n",
".....\n.11..\n.11..\n.....\n.....\n"
]
},
{
"name": "blinker_h_5x5",
"w": 5,
"h": 5,
"clean": [
".....\n.....\n.111.\n.....\n.....\n",
".....\n..1..\n..1..\n..1..\n.....\n",
".....\n.....\n.111.\n.....\n.....\n",
".....\n..1..\n..1..\n..1..\n.....\n",
".....\n.....\n.111.\n.....\n.....\n",
".....\n..1..\n..1..\n..1..\n.....\n",
".....\n.....\n.111.\n.....\n.....\n",
".....\n..1..\n..1..\n..1..\n.....\n",
".....\n.....\n.111.\n.....\n.....\n",
".....\n..1..\n..1..\n..1..\n.....\n",
".....\n.....\n.111.\n.....\n.....\n"
],
"proto": [
".....\n.....\n.111.\n.....\n.....\n",
".....\n..1..\n..1..\n..1..\n.....\n",
".....\n.....\n.111.\n.....\n.....\n",
".....\n..1..\n..1..\n..1..\n.....\n",
".....\n.....\n.111.\n.....\n.....\n",
".....\n..1..\n..1..\n..1..\n.....\n",
".....\n.....\n.111.\n.....\n.....\n",
".....\n..1..\n..1..\n..1..\n.....\n",
".....\n.....\n.111.\n.....\n.....\n",
".....\n..1..\n..1..\n..1..\n.....\n",
".....\n.....\n.111.\n.....\n.....\n"
]
},
{
"name": "glider_8x8",
"w": 8,
"h": 8,
"clean": [
"........\n..1.....\n...1....\n.111....\n........\n........\n........\n........\n",
"........\n........\n.1.1....\n..11....\n..1.....\n........\n........\n........\n",
"........\n........\n...1....\n.1.1....\n..11....\n........\n........\n........\n",
"........\n........\n..1.....\n...11...\n..11....\n........\n........\n........\n",
"........\n........\n...1....\n....1...\n..111...\n........\n........\n........\n",
"........\n........\n........\n..1.1...\n...11...\n...1....\n........\n........\n",
"........\n........\n........\n....1...\n..1.1...\n...11...\n........\n........\n",
"........\n........\n........\n...1....\n....11..\n...11...\n........\n........\n",
"........\n........\n........\n....1...\n.....1..\n...111..\n........\n........\n",
"........\n........\n........\n........\n...1.1..\n....11..\n....1...\n........\n",
"........\n........\n........\n........\n.....1..\n...1.1..\n....11..\n........\n"
],
"proto": [
"........\n..1.....\n...1....\n.111....\n........\n........\n........\n........\n",
"........\n........\n.1.1....\n..11....\n..1.....\n........\n........\n........\n",
"........\n........\n...1....\n.1.1....\n..11....\n........\n........\n........\n",
"........\n........\n..1.....\n...11...\n..11....\n........\n........\n........\n",
"........\n........\n...1....\n....1...\n..111...\n........\n........\n........\n",
"........\n........\n........\n..1.1...\n...11...\n...1....\n........\n........\n",
"........\n........\n........\n....1...\n..1.1...\n...11...\n........\n........\n",
"........\n........\n........\n...1....\n....11..\n...11...\n........\n........\n",
"........\n........\n........\n....1...\n.....1..\n...111..\n........\n........\n",
"........\n........\n........\n........\n...1.1..\n....11..\n....1...\n........\n",
"........\n........\n........\n........\n.....1..\n...1.1..\n....11..\n........\n"
]
},
{
"name": "rnd_6x6_s1",
"w": 6,
"h": 6,
"clean": [
"112122\n...122\n2.11.2\n2..1..\n....2.\n1.1122\n",
".12..2\n1.....\n.21..2\n.211..\n.11..2\n...122\n",
".1....\n1.....\n2..1..\n2..12.\n.1...2\n..1122\n",
"......\n11....\n22.11.\n22112.\n.1...2\n..1122\n",
"......\n111...\n....1.\n.....2\n2....2\n..1122\n",
".1....\n.1....\n.1....\n....22\n...1.2\n...122\n",
"......\n111...\n......\n....22\n...1..\n...1.2\n",
".1....\n.1....\n.1....\n....2.\n...1.2\n....1.\n",
"......\n111...\n......\n....2.\n...1.2\n....1.\n",
".1....\n.1....\n.1....\n....2.\n...1.2\n....1.\n",
"......\n111...\n......\n....2.\n...1.2\n....1.\n"
],
"proto": [
"112122\n...122\n2.11.2\n2..1..\n....2.\n1.1122\n",
".12..2\n1.....\n.11..2\n.211..\n.11..2\n...122\n",
".1....\n1.....\n1..1..\n1..11.\n.1...2\n..1122\n",
"......\n11....\n11.11.\n11111.\n.1...2\n..1122\n",
"......\n111...\n....1.\n.....2\n1....2\n..1122\n",
".1....\n.1....\n.1....\n....22\n...1.2\n...122\n",
"......\n111...\n......\n....22\n...1..\n...1.2\n",
".1....\n.1....\n.1....\n....2.\n...1.2\n....2.\n",
"......\n111...\n......\n....2.\n...1.2\n....2.\n",
".1....\n.1....\n.1....\n....2.\n...1.2\n....2.\n",
"......\n111...\n......\n....2.\n...1.2\n....2.\n"
]
},
{
"name": "rnd_8x8_s2",
"w": 8,
"h": 8,
"clean": [
"...22.21\n.11221..\n.1.122..\n2221.2..\n211..2..\n.21121.1\n.11.21..\n.121....\n",
"......2.\n.1......\n......2.\n.....22.\n.....2..\n........\n1....11.\n.1.11...\n",
"........\n........\n.....22.\n.....22.\n.....22.\n.....11.\n....11..\n....11..\n",
"........\n........\n.....22.\n....2..2\n....2..2\n........\n........\n....11..\n",
"........\n........\n.....22.\n....2..2\n........\n........\n........\n........\n",
"........\n........\n.....22.\n.....22.\n........\n........\n........\n........\n",
"........\n........\n.....22.\n.....22.\n........\n........\n........\n........\n",
"........\n........\n.....22.\n.....22.\n........\n........\n........\n........\n",
"........\n........\n.....22.\n.....22.\n........\n........\n........\n........\n",
"........\n........\n.....22.\n.....22.\n........\n........\n........\n........\n",
"........\n........\n.....22.\n.....22.\n........\n........\n........\n........\n"
],
"proto": [
"...22.21\n.11221..\n.1.122..\n2221.2..\n211..2..\n.21121.1\n.11.21..\n.121....\n",
"......2.\n.1......\n......1.\n.....22.\n.....2..\n........\n1....11.\n.1.11...\n",
"........\n........\n.....21.\n.....22.\n.....22.\n.....11.\n....11..\n....11..\n",
"........\n........\n.....21.\n....2..1\n....2..2\n........\n........\n....11..\n",
"........\n........\n.....21.\n....2..1\n........\n........\n........\n........\n",
"........\n........\n.....21.\n.....21.\n........\n........\n........\n........\n",
"........\n........\n.....21.\n.....21.\n........\n........\n........\n........\n",
"........\n........\n.....21.\n.....21.\n........\n........\n........\n........\n",
"........\n........\n.....21.\n.....21.\n........\n........\n........\n........\n",
"........\n........\n.....21.\n.....21.\n........\n........\n........\n........\n",
"........\n........\n.....21.\n.....21.\n........\n........\n........\n........\n"
]
},
{
"name": "cc_3x3_stale",
"w": 3,
"h": 3,
"clean": [
"..2\n2.1\n1..\n",
".2.\n...\n.1.\n",
"...\n...\n...\n",
"...\n...\n...\n"
],
"proto": [
"..2\n2.1\n1..\n",
".2.\n...\n.2.\n",
"...\n...\n...\n",
"...\n...\n...\n"
]
}
]