Тесты: спринт 4 T4 — свежие скриншоты, харденинг orca-playtest против T2b-гонки escape (атомарный hold) — 47/47 live

This commit is contained in:
2026-09-02 10:34:47 +03:00
parent 60f375598b
commit cc6238aa9b
12 changed files with 16 additions and 6 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 352 KiB

After

Width:  |  Height:  |  Size: 371 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 323 KiB

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 435 KiB

After

Width:  |  Height:  |  Size: 428 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 446 KiB

After

Width:  |  Height:  |  Size: 445 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 277 KiB

After

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 501 KiB

After

Width:  |  Height:  |  Size: 492 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 134 KiB

+16 -6
View File
@@ -180,9 +180,13 @@ async function hookIt() {
ok('подсечка: state=REEL', true);
}
// Заставляем улов: d почти ноль, удержание ~2 c, polling CARD с таймаутом 30 c.
// Т2b: сброс и удержание в ОДНОМ eval — гэп между отдельными eval'ами на
// реалтайм-вкладке успевает заполнить escape-бар (1.67 c) и рыба сбегает; фазу
// тоже сбрасываем в затишье (в рывке держать = трение + нагрузка, до обрыва).
async function forceCatch() {
await evalPage('reel.d = 0.5; "ok"');
const pid = await pointerDown();
const pid = ++pointerSeq;
await evalPage('reel.d = 0.5; reel.phase = "calm"; reel.phaseT = 5; reel.escape = 0;'
+ 'document.getElementById("game").dispatchEvent(new PointerEvent("pointerdown",{pointerId:' + pid + ',isPrimary:true,bubbles:true})); "ok"');
try {
await sleep(2000);
await waitState('CARD', 30000);
@@ -342,17 +346,23 @@ async function forceCatch() {
await castToWait();
await forceBite();
await hookIt();
const bs = await evalPage('({b: stateBoss, ph: bossPhase, rb: !!(reel && reel.boss)})');
// Т2b: за гэп между подсечкой и этой проверкой escape-бар успел подрасти —
// гасим, чтобы гонка «CLI-roundtrip vs пассивный сход» не решалась против бота.
const bs = await evalPage('if (reel) reel.escape = 0; ({b: stateBoss, ph: bossPhase, rb: !!(reel && reel.boss)})');
ok('босс: старт боя (stateBoss=true, bossPhase=1, reel.boss)',
bs && bs.b === true && bs.ph === 1 && bs.rb === true, JSON.stringify(bs).slice(0, 80));
// Фазы 1-2: d→0 — босс-обрыв (SNAP без штрафа) → авто-REEL в следующую (глубже)
// фазу. В SNAP holding сбрасываем в ТОМ ЖЕ eval, что и детекцию: onUp в
// состоянии SNAP reel.holding не чистит (см. п.9 «Подводных камней»).
// Т2b: сброс d/phase/escape и pointerdown — в ОДНОМ eval (тот же паттерн, что
// в forceBite): CLI-roundtrip между отдельными eval'ами — это «пассив в
// затишье», а бар схода за 1.67 c игрового времени заполняется → босс сбежал.
for (let phase = 1; phase <= 3; phase++) {
await evalPage('reel.d = 0.4; reel.phase = "calm"; reel.phaseT = 5; "ok"');
const pid = await pointerDown();
const pid = ++pointerSeq;
await evalPage('reel.d = 0.4; reel.phase = "calm"; reel.phaseT = 5; reel.escape = 0;'
+ 'document.getElementById("game").dispatchEvent(new PointerEvent("pointerdown",{pointerId:' + pid + ',isPrimary:true,bubbles:true})); "ok"');
if (phase < 3) {
await waitCond('state === "SNAP" ? (reel && (reel.holding = false), "yes") : "state=" + state', 30000, 'SNAP фазы ' + phase);
await waitCond('state === "SNAP" ? (reel && (reel.holding = false, reel.escape = 0), "yes") : "state=" + state', 30000, 'SNAP фазы ' + phase);
await pointerUp(pid);
await waitState('REEL', 30000);
} else {