commit b499a01fb7df37b81f26449bd66bfd4cf68de116 parent fd8274318dc475fe75d10c9b588c4af38d451c91 Author: Brian Graham <brian@buildingbetterteams.de> Date: Thu, 16 Apr 2026 13:08:21 +0200 900s bot timeout + inactivity watchdog; aggregate agreement 48% to 79% Three changes to the gameplay bot pipeline: - Raise harness/run.py bot subprocess timeout from 300s to 900s. - Raise playwright.config.ts and index.ts test timeout from 360s to 900s. - Driver-level inactivity watchdog: readGrid()/wait() throw InactivityAbortError when 120s pass without a successful grid read (armed only after the game confirms started). bot.ts wraps Phases 3-8 in a guard that catches the abort and still writes a partial report. Fix calibration run_id mappings: commit 711df365 retagged 176 anthropic runs with prov=anth and bumped colliding run_num, leaving 13 of 17 calibration JSONs pointing at stale paths. Remap from the retag commit's rename list. Results on 17 calibration runs (j=20 on RTX 4070 / Ryzen 9): - Bot-vs-human agreement: 90/189 (48%) -> 181/228 (79%) - grid_detected: 9/17 -> 16/17 - renderer=unknown: 8/17 -> 1/17 (the one remaining is c1013100 which legitimately fails to load per human label) - Every anthropic run that previously got killed mid-calibration now finishes with proper detection and scores in the 0.67-1.00 range. - Wall-clock at j=20: 6m31s; at j=5: 16m48s; identical grid/renderer output across both, no inactivity aborts in either. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Diffstat:
70 files changed, 6834 insertions(+), 2759 deletions(-)
diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/report/jscpd-report.json @@ -1,6 +1,6 @@ { "statistics": { - "detectionDate": "2026-04-16T07:01:06.668Z", + "detectionDate": "2026-04-16T10:57:45.060Z", "formats": { "json": { "sources": { diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5/report/jscpd-report.json @@ -1,6 +1,6 @@ { "statistics": { - "detectionDate": "2026-04-16T06:55:57.676Z", + "detectionDate": "2026-04-16T10:46:37.067Z", "formats": { "json": { "sources": { diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6/report/jscpd-report.json @@ -1,6 +1,6 @@ { "statistics": { - "detectionDate": "2026-04-16T06:55:57.794Z", + "detectionDate": "2026-04-16T10:46:36.980Z", "formats": { "json": { "sources": { diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=opus46_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=opus46_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6/report/jscpd-report.json @@ -1,6 +1,6 @@ { "statistics": { - "detectionDate": "2026-04-16T06:55:57.636Z", + "detectionDate": "2026-04-16T10:51:50.423Z", "formats": { "json": { "sources": { diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=qwen36p_pw=off_prompt=simple_prov=or_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=qwen36p_pw=off_prompt=simple_prov=or_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/report/jscpd-report.json @@ -1,6 +1,6 @@ { "statistics": { - "detectionDate": "2026-04-16T06:55:57.825Z", + "detectionDate": "2026-04-16T10:46:36.942Z", "formats": { "typescript": { "sources": { diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=gemma426b_pw=off_prompt=simple_prov=or_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=gemma426b_pw=off_prompt=simple_prov=or_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/report/jscpd-report.json @@ -1,6 +1,6 @@ { "statistics": { - "detectionDate": "2026-04-16T07:01:11.102Z", + "detectionDate": "2026-04-16T10:57:30.503Z", "formats": { "json": { "sources": { diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/report/jscpd-report.json @@ -1,6 +1,6 @@ { "statistics": { - "detectionDate": "2026-04-16T06:56:02.058Z", + "detectionDate": "2026-04-16T10:52:13.970Z", "formats": { "typescript": { "sources": { diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/report/jscpd-report.json @@ -1,6 +1,6 @@ { "statistics": { - "detectionDate": "2026-04-16T07:00:44.144Z", + "detectionDate": "2026-04-16T10:53:00.554Z", "formats": { "typescript": { "sources": { diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/report/jscpd-report.json @@ -1,7 +1,47 @@ { "statistics": { - "detectionDate": "2026-04-16T07:01:11.104Z", + "detectionDate": "2026-04-16T10:57:44.390Z", "formats": { + "json": { + "sources": { + "report/jscpd-report.json": { + "lines": 136, + "tokens": 838, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + }, + "package.json": { + "lines": 21, + "tokens": 132, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, + "total": { + "lines": 157, + "tokens": 970, + "sources": 2, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, "markup": { "sources": { "tetris.html": { @@ -41,45 +81,17 @@ "newDuplicatedLines": 0, "newClones": 0 } - }, - "json": { - "sources": { - "package.json": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } } }, "total": { - "lines": 1541, - "tokens": 10432, - "sources": 3, + "lines": 1677, + "tokens": 11270, + "sources": 4, "clones": 1, "duplicatedLines": 760, "duplicatedTokens": 5150, - "percentage": 49.32, - "percentageTokens": 49.37, + "percentage": 45.32, + "percentageTokens": 45.7, "newDuplicatedLines": 0, "newClones": 0 } diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=off_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=off_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5/report/jscpd-report.json @@ -1,7 +1,47 @@ { "statistics": { - "detectionDate": "2026-04-16T06:57:24.305Z", + "detectionDate": "2026-04-16T10:52:46.126Z", "formats": { + "json": { + "sources": { + "report/jscpd-report.json": { + "lines": 416, + "tokens": 2602, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + }, + "package.json": { + "lines": 21, + "tokens": 132, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, + "total": { + "lines": 437, + "tokens": 2734, + "sources": 2, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, "typescript": { "sources": { "tetris.ts": { @@ -110,34 +150,6 @@ "newClones": 0 } }, - "json": { - "sources": { - "package.json": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, "markup": { "sources": { "index.html": { @@ -280,14 +292,14 @@ } }, "total": { - "lines": 3271, - "tokens": 23802, - "sources": 15, + "lines": 3687, + "tokens": 26404, + "sources": 16, "clones": 3, "duplicatedLines": 18, "duplicatedTokens": 387, - "percentage": 0.55, - "percentageTokens": 1.63, + "percentage": 0.49, + "percentageTokens": 1.47, "newDuplicatedLines": 0, "newClones": 0 } diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=off_tgrep=on_tread=on_twrite=on_web=on_run4/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=off_tgrep=on_tread=on_twrite=on_web=on_run4/report/jscpd-report.json @@ -1,9 +1,21 @@ { "statistics": { - "detectionDate": "2026-04-16T06:56:02.070Z", + "detectionDate": "2026-04-16T10:46:36.654Z", "formats": { "json": { "sources": { + "report/jscpd-report.json": { + "lines": 380, + "tokens": 2365, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + }, "tsconfig.json": { "lines": 14, "tokens": 99, @@ -30,9 +42,9 @@ } }, "total": { - "lines": 35, - "tokens": 231, - "sources": 2, + "lines": 415, + "tokens": 2596, + "sources": 3, "clones": 0, "duplicatedLines": 0, "duplicatedTokens": 0, @@ -244,14 +256,14 @@ } }, "total": { - "lines": 2221, - "tokens": 20086, - "sources": 12, + "lines": 2601, + "tokens": 22451, + "sources": 13, "clones": 3, "duplicatedLines": 19, "duplicatedTokens": 306, - "percentage": 0.86, - "percentageTokens": 1.52, + "percentage": 0.73, + "percentageTokens": 1.36, "newDuplicatedLines": 0, "newClones": 0 } diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/report/jscpd-report.json @@ -1,7 +1,47 @@ { "statistics": { - "detectionDate": "2026-04-16T06:56:01.978Z", + "detectionDate": "2026-04-16T10:51:56.187Z", "formats": { + "json": { + "sources": { + "report/jscpd-report.json": { + "lines": 228, + "tokens": 1427, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + }, + "package.json": { + "lines": 19, + "tokens": 118, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, + "total": { + "lines": 247, + "tokens": 1545, + "sources": 2, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, "markup": { "sources": { "tetris.html": { @@ -70,34 +110,6 @@ "newClones": 0 } }, - "json": { - "sources": { - "package.json": { - "lines": 19, - "tokens": 118, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 19, - "tokens": 118, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, "markdown": { "sources": { "README.md": { @@ -164,14 +176,14 @@ } }, "total": { - "lines": 2418, - "tokens": 15332, - "sources": 8, + "lines": 2646, + "tokens": 16759, + "sources": 9, "clones": 1, "duplicatedLines": 769, "duplicatedTokens": 4819, - "percentage": 31.8, - "percentageTokens": 31.43, + "percentage": 29.06, + "percentageTokens": 28.75, "newDuplicatedLines": 0, "newClones": 0 } diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/report/jscpd-report.json @@ -1,7 +1,47 @@ { "statistics": { - "detectionDate": "2026-04-16T06:56:45.518Z", + "detectionDate": "2026-04-16T10:52:20.494Z", "formats": { + "json": { + "sources": { + "report/jscpd-report.json": { + "lines": 136, + "tokens": 838, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + }, + "package.json": { + "lines": 19, + "tokens": 118, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, + "total": { + "lines": 155, + "tokens": 956, + "sources": 2, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, "markup": { "sources": { "tetris.html": { @@ -41,45 +81,17 @@ "newDuplicatedLines": 0, "newClones": 0 } - }, - "json": { - "sources": { - "package.json": { - "lines": 19, - "tokens": 118, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 19, - "tokens": 118, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } } }, "total": { - "lines": 1439, - "tokens": 9330, - "sources": 3, + "lines": 1575, + "tokens": 10168, + "sources": 4, "clones": 1, "duplicatedLines": 710, "duplicatedTokens": 4606, - "percentage": 49.34, - "percentageTokens": 49.37, + "percentage": 45.08, + "percentageTokens": 45.3, "newDuplicatedLines": 0, "newClones": 0 } diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=on_tread=off_twrite=on_web=off_run5/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=on_tread=off_twrite=on_web=off_run5/report/jscpd-report.json @@ -1,7 +1,47 @@ { "statistics": { - "detectionDate": "2026-04-16T06:56:02.053Z", + "detectionDate": "2026-04-16T10:46:37.074Z", "formats": { + "json": { + "sources": { + "report/jscpd-report.json": { + "lines": 272, + "tokens": 1725, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + }, + "package.json": { + "lines": 21, + "tokens": 132, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, + "total": { + "lines": 293, + "tokens": 1857, + "sources": 2, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, "markdown": { "sources": { ".scannerwork/report-task.txt": { @@ -177,45 +217,17 @@ "newDuplicatedLines": 0, "newClones": 0 } - }, - "json": { - "sources": { - "package.json": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } } }, "total": { - "lines": 2860, - "tokens": 18673, - "sources": 13, + "lines": 3132, + "tokens": 20398, + "sources": 14, "clones": 1, "duplicatedLines": 767, "duplicatedTokens": 4911, - "percentage": 26.82, - "percentageTokens": 26.3, + "percentage": 24.49, + "percentageTokens": 24.08, "newDuplicatedLines": 0, "newClones": 0 } diff --git a/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/report/jscpd-report.json @@ -1,7 +1,47 @@ { "statistics": { - "detectionDate": "2026-04-16T07:01:11.065Z", + "detectionDate": "2026-04-16T10:57:52.320Z", "formats": { + "json": { + "sources": { + "report/jscpd-report.json": { + "lines": 448, + "tokens": 2752, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + }, + "package.json": { + "lines": 21, + "tokens": 132, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, + "total": { + "lines": 469, + "tokens": 2884, + "sources": 2, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, "typescript": { "sources": { "tetris.ts": { @@ -70,34 +110,6 @@ "newClones": 0 } }, - "json": { - "sources": { - "package.json": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, "markup": { "sources": { "index.html": { @@ -204,14 +216,14 @@ } }, "total": { - "lines": 2124, - "tokens": 17291, - "sources": 10, + "lines": 2572, + "tokens": 20043, + "sources": 11, "clones": 6, "duplicatedLines": 63, "duplicatedTokens": 877, - "percentage": 2.97, - "percentageTokens": 5.07, + "percentage": 2.45, + "percentageTokens": 4.38, "newDuplicatedLines": 0, "newClones": 0 } diff --git a/artifacts/tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=off_tread=on_twrite=off_web=on_run6/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=off_tread=on_twrite=off_web=on_run6/report/jscpd-report.json @@ -1,7 +1,47 @@ { "statistics": { - "detectionDate": "2026-04-16T07:01:11.096Z", + "detectionDate": "2026-04-16T10:53:14.204Z", "formats": { + "json": { + "sources": { + "report/jscpd-report.json": { + "lines": 580, + "tokens": 3529, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + }, + "package.json": { + "lines": 21, + "tokens": 132, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, + "total": { + "lines": 601, + "tokens": 3661, + "sources": 2, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, "markdown": { "sources": { ".scannerwork/report-task.txt": { @@ -134,34 +174,6 @@ "newClones": 0 } }, - "json": { - "sources": { - "package.json": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, "markup": { "sources": { "index.html": { @@ -192,14 +204,14 @@ } }, "total": { - "lines": 1921, - "tokens": 17142, - "sources": 9, + "lines": 2501, + "tokens": 20671, + "sources": 10, "clones": 10, "duplicatedLines": 114, "duplicatedTokens": 1448, - "percentage": 5.93, - "percentageTokens": 8.45, + "percentage": 4.56, + "percentageTokens": 7, "newDuplicatedLines": 0, "newClones": 0 } diff --git a/artifacts/tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=off_tread=off_twrite=off_web=off_run6/report/jscpd-report.json b/artifacts/tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=off_tread=off_twrite=off_web=off_run6/report/jscpd-report.json @@ -1,7 +1,47 @@ { "statistics": { - "detectionDate": "2026-04-16T06:56:46.740Z", + "detectionDate": "2026-04-16T10:52:38.082Z", "formats": { + "json": { + "sources": { + "report/jscpd-report.json": { + "lines": 276, + "tokens": 1743, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + }, + "package.json": { + "lines": 21, + "tokens": 132, + "sources": 1, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, + "total": { + "lines": 297, + "tokens": 1875, + "sources": 2, + "clones": 0, + "duplicatedLines": 0, + "duplicatedTokens": 0, + "percentage": 0, + "percentageTokens": 0, + "newDuplicatedLines": 0, + "newClones": 0 + } + }, "markdown": { "sources": { ".scannerwork/report-task.txt": { @@ -126,34 +166,6 @@ "newClones": 0 } }, - "json": { - "sources": { - "package.json": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, "markup": { "sources": { "index.html": { @@ -212,14 +224,14 @@ } }, "total": { - "lines": 2749, - "tokens": 21214, - "sources": 12, + "lines": 3025, + "tokens": 22957, + "sources": 13, "clones": 1, "duplicatedLines": 8, "duplicatedTokens": 76, - "percentage": 0.29, - "percentageTokens": 0.36, + "percentage": 0.26, + "percentageTokens": 0.33, "newDuplicatedLines": 0, "newClones": 0 } diff --git a/harness/run.py b/harness/run.py @@ -478,7 +478,7 @@ def evaluate(task_dir: Path, workspace: Path, cell: dict, run_dir: Path): start_new_session=True, ) try: - stdout, stderr = bot_proc.communicate(timeout=300) + stdout, stderr = bot_proc.communicate(timeout=900) except subprocess.TimeoutExpired: # Kill entire process group (playwright + child serve processes) try: @@ -503,7 +503,7 @@ def evaluate(task_dir: Path, workspace: Path, cell: dict, run_dir: Path): results["gameplay_bot"] = { "pass": False, "score": 0, - "error": "Gameplay bot timed out after 300 seconds", + "error": "Gameplay bot timed out after 900 seconds", } else: if report_path.exists(): diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/eval_results.json @@ -103,46 +103,49 @@ "score": 1.0 }, "gameplay_bot": { - "pass": false, - "score": 0.2, + "pass": true, + "score": 1, "total": 26, - "passed": 2, - "failed": 8, + "passed": 19, + "failed": 0, "report": { "implementation": { - "renderer": "unknown", - "grid_detected": false, + "renderer": "canvas", + "grid_detected": true, "grid_detected_at": "initial", - "grid_bounds": null, + "grid_bounds": { + "x": 0, + "y": 0, + "width": 300, + "height": 600 + }, "controls": { "left": "ArrowLeft", "right": "ArrowRight", "down": "ArrowDown", - "rotate": "ArrowUp", + "rotate": "x", "drop": "Space" }, "control_discovery": { - "move_left": "NOT FOUND", + "move_left": "ArrowLeft (moved 2 col(s) left)", "move_right": "NOT FOUND", "soft_drop": "NOT FOUND", - "hard_drop": "NOT FOUND", - "rotate_cw": "NOT FOUND", - "rotate_ccw": "NOT FOUND", - "key:ArrowLeft": "grid read failed before press", - "key:a": "grid read failed before press", - "key:h": "grid read failed before press", - "key:ArrowRight": "grid read failed before press", - "key:d": "grid read failed before press", - "key:l": "grid read failed before press", - "key:ArrowUp": "grid read failed before press", - "key:x": "grid read failed before press", - "key:w": "grid read failed before press", - "key:Space": "grid read failed before press", - "key:Enter": "grid read failed before press", - "key:ArrowDown": "grid read failed before press" + "hard_drop": "Space (teleported 11 rows to bottom)", + "rotate_cw": "x (shape changed (rotation))", + "rotate_ccw": "z (shape changed (rotation))", + "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowRight": "other change (disappeared=2, appeared=2)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "no change", + "key:x": "shape changed (rotation)", + "key:Space": "teleported 11 rows to bottom", + "key:s": "other change (disappeared=3, appeared=3)", + "key:ArrowDown": "other change (disappeared=3, appeared=3)", + "key:z": "shape changed (rotation)" }, "start_mechanism": "auto", - "score_element_found": false, + "score_element_found": true, "grid_confidence": 0, "survey": { "has_overlay": false, @@ -181,18 +184,18 @@ }, { "name": "auto_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify auto-drop" + "pass": true, + "detail": "grid state changed after 5s with no input (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_down", @@ -201,155 +204,365 @@ }, { "name": "rotate", - "pass": false, - "detail": "grid reader unreliable, cannot verify rotation" + "pass": true, + "detail": "piece cycled through 4 distinct shapes after 4 rotate presses (grid-verified)" }, { "name": "hard_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify hard drop" + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { "name": "all_pieces_rotate", - "pass": false, - "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" + "pass": true, + "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [J:4 T:4 L:4]" }, { "name": "piece_locks", - "pass": false, - "detail": "grid reader unreliable, cannot verify piece locking" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece spawning at top via grid reader" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "13 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "12 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "score went from 98 to 168 after line clear" }, { "name": "score_element_visible", - "pass": false, - "detail": "no score display detected" + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: piece lifecycle failed" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", - "pass": false, - "detail": "skipped: gameplay phase failed" + "pass": true, + "detail": "played for 31s, placed 22 pieces, no crashes" }, { "name": "multi_line_clear", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear opportunity occurred during play" }, { "name": "score_scaling", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear occurred to test scaling" }, { "name": "level_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: only 4 lines cleared (need 10+)" }, { "name": "speed_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: level did not increase, cannot test speed change" }, { "name": "next_piece_preview", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "next piece preview display found" }, { "name": "game_over_display", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "overlay detected, restart clickable present (phase6)" }, { "name": "counter_clockwise_rotation", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "Z key rotates opposite direction from Up arrow" }, { "name": "soft_drop_distinct", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rendering_clean", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: not enough data to assess rendering trails" } ], "summary": { "total": 26, - "passed": 2, - "failed": 8, - "skipped": 16, - "score": 0.2 + "passed": 19, + "failed": 0, + "skipped": 7, + "score": 1 }, "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, + "pieces_placed": 22, + "lines_cleared": 12, + "max_score_observed": 520, + "play_duration_seconds": 31, "errors_during_play": 0 }, - "competitive_play": null, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 13, + "total_lines_cleared": 4, + "single_clears": 4, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 2, + "score_readings": [ + 0, + 36, + 36, + 36, + 68, + 68, + 68, + 68, + 140, + 140, + 140, + 172, + 172, + 172, + 172, + 242, + 242, + 242, + 274, + 302, + 302, + 302, + 302, + 334, + 334, + 334, + 366, + 366, + 366, + 396, + 396, + 396, + 396, + 424, + 554, + 554, + 554, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624 + ], + "score_final": 624, + "score_increases": [ + 36, + 32, + 72, + 32, + 70, + 32, + 28, + 32, + 32, + 30, + 28, + 130, + 70 + ], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [] + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, - "lines_cleared": 0, - "piece_types_seen": [], - "grid_read_success_rate": 0 + "frames": 898, + "events_count": 17, + "pieces_spawned": 1, + "pieces_locked": 13, + "lines_cleared": 12, + "piece_types_seen": [ + "O", + "J", + "Z", + "I", + "T" + ], + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 51 + "load_time_ms": 31 }, "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true + "issues": [ + "canvas without aria-label or role", + "canvas without aria-label or role" + ], + "issue_count": 2, + "pass": false }, "calibration_drift": { - "drifted": true, - "changes": [ - "renderer", - "grid_bounds", - "controls", - "score_element", - "level_element" - ], - "recalibrations": 8, - "cacheHits": 0, - "cacheMisses": 8 + "drifted": false, + "changes": [], + "recalibrations": 22, + "cacheHits": 22, + "cacheMisses": 0 } - }, - "timed_out": true + } }, - "outcome_score": 0.1, - "score": 0.1, + "outcome_score": 0.5, + "score": 0.5, "sonarqube": { "error": "no SonarQube token found", "score": 0 diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/gameplay-bot-report.json @@ -1,38 +1,41 @@ { "implementation": { - "renderer": "unknown", - "grid_detected": false, + "renderer": "canvas", + "grid_detected": true, "grid_detected_at": "initial", - "grid_bounds": null, + "grid_bounds": { + "x": 0, + "y": 0, + "width": 300, + "height": 600 + }, "controls": { "left": "ArrowLeft", "right": "ArrowRight", "down": "ArrowDown", - "rotate": "ArrowUp", + "rotate": "x", "drop": "Space" }, "control_discovery": { - "move_left": "NOT FOUND", + "move_left": "ArrowLeft (moved 2 col(s) left)", "move_right": "NOT FOUND", "soft_drop": "NOT FOUND", - "hard_drop": "NOT FOUND", - "rotate_cw": "NOT FOUND", - "rotate_ccw": "NOT FOUND", - "key:ArrowLeft": "grid read failed before press", - "key:a": "grid read failed before press", - "key:h": "grid read failed before press", - "key:ArrowRight": "grid read failed before press", - "key:d": "grid read failed before press", - "key:l": "grid read failed before press", - "key:ArrowUp": "grid read failed before press", - "key:x": "grid read failed before press", - "key:w": "grid read failed before press", - "key:Space": "grid read failed before press", - "key:Enter": "grid read failed before press", - "key:ArrowDown": "grid read failed before press" + "hard_drop": "Space (teleported 11 rows to bottom)", + "rotate_cw": "x (shape changed (rotation))", + "rotate_ccw": "z (shape changed (rotation))", + "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowRight": "other change (disappeared=2, appeared=2)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "no change", + "key:x": "shape changed (rotation)", + "key:Space": "teleported 11 rows to bottom", + "key:s": "other change (disappeared=3, appeared=3)", + "key:ArrowDown": "other change (disappeared=3, appeared=3)", + "key:z": "shape changed (rotation)" }, "start_mechanism": "auto", - "score_element_found": false, + "score_element_found": true, "grid_confidence": 0, "survey": { "has_overlay": false, @@ -71,18 +74,18 @@ }, { "name": "auto_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify auto-drop" + "pass": true, + "detail": "grid state changed after 5s with no input (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_down", @@ -91,148 +94,359 @@ }, { "name": "rotate", - "pass": false, - "detail": "grid reader unreliable, cannot verify rotation" + "pass": true, + "detail": "piece cycled through 4 distinct shapes after 4 rotate presses (grid-verified)" }, { "name": "hard_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify hard drop" + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { "name": "all_pieces_rotate", - "pass": false, - "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" + "pass": true, + "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [J:4 T:4 L:4]" }, { "name": "piece_locks", - "pass": false, - "detail": "grid reader unreliable, cannot verify piece locking" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece spawning at top via grid reader" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "13 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "12 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "score went from 98 to 168 after line clear" }, { "name": "score_element_visible", - "pass": false, - "detail": "no score display detected" + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: piece lifecycle failed" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", - "pass": false, - "detail": "skipped: gameplay phase failed" + "pass": true, + "detail": "played for 31s, placed 22 pieces, no crashes" }, { "name": "multi_line_clear", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear opportunity occurred during play" }, { "name": "score_scaling", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear occurred to test scaling" }, { "name": "level_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: only 4 lines cleared (need 10+)" }, { "name": "speed_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: level did not increase, cannot test speed change" }, { "name": "next_piece_preview", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "next piece preview display found" }, { "name": "game_over_display", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "overlay detected, restart clickable present (phase6)" }, { "name": "counter_clockwise_rotation", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "Z key rotates opposite direction from Up arrow" }, { "name": "soft_drop_distinct", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rendering_clean", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: not enough data to assess rendering trails" } ], "summary": { "total": 26, - "passed": 2, - "failed": 8, - "skipped": 16, - "score": 0.2 + "passed": 19, + "failed": 0, + "skipped": 7, + "score": 1 }, "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, + "pieces_placed": 22, + "lines_cleared": 12, + "max_score_observed": 520, + "play_duration_seconds": 31, "errors_during_play": 0 }, - "competitive_play": null, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 13, + "total_lines_cleared": 4, + "single_clears": 4, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 2, + "score_readings": [ + 0, + 36, + 36, + 36, + 68, + 68, + 68, + 68, + 140, + 140, + 140, + 172, + 172, + 172, + 172, + 242, + 242, + 242, + 274, + 302, + 302, + 302, + 302, + 334, + 334, + 334, + 366, + 366, + 366, + 396, + 396, + 396, + 396, + 424, + 554, + 554, + 554, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624, + 624 + ], + "score_final": 624, + "score_increases": [ + 36, + 32, + 72, + 32, + 70, + 32, + 28, + 32, + 32, + 30, + 28, + 130, + 70 + ], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [] + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, - "lines_cleared": 0, - "piece_types_seen": [], - "grid_read_success_rate": 0 + "frames": 898, + "events_count": 17, + "pieces_spawned": 1, + "pieces_locked": 13, + "lines_cleared": 12, + "piece_types_seen": [ + "O", + "J", + "Z", + "I", + "T" + ], + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 51 + "load_time_ms": 31 }, "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true + "issues": [ + "canvas without aria-label or role", + "canvas without aria-label or role" + ], + "issue_count": 2, + "pass": false }, "calibration_drift": { - "drifted": true, - "changes": [ - "renderer", - "grid_bounds", - "controls", - "score_element", - "level_element" - ], - "recalibrations": 8, - "cacheHits": 0, - "cacheMisses": 8 + "drifted": false, + "changes": [], + "recalibrations": 22, + "cacheHits": 22, + "cacheMisses": 0 } } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5/eval_results.json @@ -104,16 +104,21 @@ }, "gameplay_bot": { "pass": false, - "score": 0.18, + "score": 0.79, "total": 26, - "passed": 2, - "failed": 9, + "passed": 15, + "failed": 4, "report": { "implementation": { - "renderer": "unknown", - "grid_detected": false, + "renderer": "canvas", + "grid_detected": true, "grid_detected_at": "initial", - "grid_bounds": null, + "grid_bounds": { + "x": 0, + "y": 0, + "width": 300, + "height": 600 + }, "controls": { "left": "ArrowLeft", "right": "ArrowRight", @@ -121,8 +126,26 @@ "rotate": "ArrowUp", "drop": "Space" }, + "control_discovery": { + "move_left": "ArrowLeft (moved 4 col(s) left)", + "move_right": "NOT FOUND", + "soft_drop": "NOT FOUND", + "hard_drop": "Space (teleported 19 rows to bottom)", + "rotate_cw": "ArrowUp (shape changed (rotation))", + "rotate_ccw": "NOT FOUND", + "key:ArrowLeft": "moved 4 col(s) left", + "key:ArrowRight": "other change (disappeared=2, appeared=2)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "shape changed (rotation)", + "key:Space": "teleported 19 rows to bottom", + "key:s": "no change", + "key:ArrowDown": "other change (disappeared=3, appeared=3)", + "key:z": "no change", + "key:Control": "no change" + }, "start_mechanism": "button", - "score_element_found": false, + "score_element_found": true, "grid_confidence": 0, "survey": { "has_overlay": false, @@ -164,168 +187,277 @@ { "name": "auto_drop", "pass": false, - "detail": "grid reader unreliable, cannot verify auto-drop" + "detail": "piece did not move down in 5 seconds (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_down", "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rotate", - "pass": false, - "detail": "grid reader unreliable, cannot verify rotation" + "pass": true, + "detail": "piece cycled through 4 distinct shapes after 4 rotate presses (grid-verified)" }, { "name": "hard_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify hard drop" + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { "name": "all_pieces_rotate", - "pass": false, - "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" + "pass": true, + "detail": "2 J/L/T piece type(s) rotated to 3+ distinct shapes [J:4 T:4]" }, { "name": "piece_locks", - "pass": false, - "detail": "grid reader unreliable, cannot verify piece locking" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece spawning at top via grid reader" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "4 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "2 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", "pass": false, - "detail": "skipped: mechanics phase failed" + "detail": "score stayed at 0 after clearing 2 line(s)" }, { "name": "score_element_visible", - "pass": false, - "detail": "no score display detected" + "pass": true, + "detail": "score display found (#finalScore)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: piece lifecycle failed" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", - "pass": false, - "detail": "skipped: gameplay phase failed" + "pass": true, + "detail": "played for 30s, placed 5 pieces, no crashes" }, { "name": "multi_line_clear", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear opportunity occurred during play" }, { "name": "score_scaling", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear occurred to test scaling" }, { "name": "level_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: only 0 lines cleared (need 10+)" }, { "name": "speed_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: level did not increase, cannot test speed change" }, { "name": "next_piece_preview", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "next piece preview display found" }, { "name": "game_over_display", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "no overlay or restart UI found (phase6)" }, { "name": "counter_clockwise_rotation", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "Z key does same as Up arrow or does not rotate" }, { "name": "soft_drop_distinct", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rendering_clean", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: not enough data to assess rendering trails" } ], "summary": { "total": 26, - "passed": 2, - "failed": 9, - "skipped": 15, - "score": 0.18 + "passed": 15, + "failed": 4, + "skipped": 7, + "score": 0.79 }, "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, + "pieces_placed": 5, + "lines_cleared": 2, "max_score_observed": 0, - "play_duration_seconds": 0, + "play_duration_seconds": 30, "errors_during_play": 0 }, - "competitive_play": null, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 3, + "total_lines_cleared": 0, + "single_clears": 0, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 0, + "score_readings": [ + 0, + 0 + ], + "score_final": 0, + "score_increases": [], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [] + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, - "lines_cleared": 0, - "piece_types_seen": [], - "grid_read_success_rate": 0 + "frames": 1080, + "events_count": 9, + "pieces_spawned": 1, + "pieces_locked": 4, + "lines_cleared": 2, + "piece_types_seen": [ + "S", + "I" + ], + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 47 + "load_time_ms": 29 }, "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true + "issues": [ + "canvas without aria-label or role", + "canvas without aria-label or role" + ], + "issue_count": 2, + "pass": false }, "calibration_drift": { "drifted": false, "changes": [], - "recalibrations": 0, - "cacheHits": 0, + "recalibrations": 26, + "cacheHits": 26, "cacheMisses": 0 } - }, - "timed_out": true + } }, - "outcome_score": 0.09, - "score": 0.09, + "outcome_score": 0.395, + "score": 0.395, "sonarqube": { "error": "no SonarQube token found", "score": 0 diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5/gameplay-bot-report.json @@ -1,9 +1,14 @@ { "implementation": { - "renderer": "unknown", - "grid_detected": false, + "renderer": "canvas", + "grid_detected": true, "grid_detected_at": "initial", - "grid_bounds": null, + "grid_bounds": { + "x": 0, + "y": 0, + "width": 300, + "height": 600 + }, "controls": { "left": "ArrowLeft", "right": "ArrowRight", @@ -11,8 +16,26 @@ "rotate": "ArrowUp", "drop": "Space" }, + "control_discovery": { + "move_left": "ArrowLeft (moved 4 col(s) left)", + "move_right": "NOT FOUND", + "soft_drop": "NOT FOUND", + "hard_drop": "Space (teleported 19 rows to bottom)", + "rotate_cw": "ArrowUp (shape changed (rotation))", + "rotate_ccw": "NOT FOUND", + "key:ArrowLeft": "moved 4 col(s) left", + "key:ArrowRight": "other change (disappeared=2, appeared=2)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "shape changed (rotation)", + "key:Space": "teleported 19 rows to bottom", + "key:s": "no change", + "key:ArrowDown": "other change (disappeared=3, appeared=3)", + "key:z": "no change", + "key:Control": "no change" + }, "start_mechanism": "button", - "score_element_found": false, + "score_element_found": true, "grid_confidence": 0, "survey": { "has_overlay": false, @@ -54,161 +77,271 @@ { "name": "auto_drop", "pass": false, - "detail": "grid reader unreliable, cannot verify auto-drop" + "detail": "piece did not move down in 5 seconds (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_down", "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rotate", - "pass": false, - "detail": "grid reader unreliable, cannot verify rotation" + "pass": true, + "detail": "piece cycled through 4 distinct shapes after 4 rotate presses (grid-verified)" }, { "name": "hard_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify hard drop" + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { "name": "all_pieces_rotate", - "pass": false, - "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" + "pass": true, + "detail": "2 J/L/T piece type(s) rotated to 3+ distinct shapes [J:4 T:4]" }, { "name": "piece_locks", - "pass": false, - "detail": "grid reader unreliable, cannot verify piece locking" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece spawning at top via grid reader" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "4 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "2 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", "pass": false, - "detail": "skipped: mechanics phase failed" + "detail": "score stayed at 0 after clearing 2 line(s)" }, { "name": "score_element_visible", - "pass": false, - "detail": "no score display detected" + "pass": true, + "detail": "score display found (#finalScore)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: piece lifecycle failed" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", - "pass": false, - "detail": "skipped: gameplay phase failed" + "pass": true, + "detail": "played for 30s, placed 5 pieces, no crashes" }, { "name": "multi_line_clear", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear opportunity occurred during play" }, { "name": "score_scaling", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear occurred to test scaling" }, { "name": "level_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: only 0 lines cleared (need 10+)" }, { "name": "speed_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: level did not increase, cannot test speed change" }, { "name": "next_piece_preview", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "next piece preview display found" }, { "name": "game_over_display", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "no overlay or restart UI found (phase6)" }, { "name": "counter_clockwise_rotation", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "Z key does same as Up arrow or does not rotate" }, { "name": "soft_drop_distinct", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rendering_clean", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: not enough data to assess rendering trails" } ], "summary": { "total": 26, - "passed": 2, - "failed": 9, - "skipped": 15, - "score": 0.18 + "passed": 15, + "failed": 4, + "skipped": 7, + "score": 0.79 }, "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, + "pieces_placed": 5, + "lines_cleared": 2, "max_score_observed": 0, - "play_duration_seconds": 0, + "play_duration_seconds": 30, "errors_during_play": 0 }, - "competitive_play": null, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 3, + "total_lines_cleared": 0, + "single_clears": 0, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 0, + "score_readings": [ + 0, + 0 + ], + "score_final": 0, + "score_increases": [], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [] + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, - "lines_cleared": 0, - "piece_types_seen": [], - "grid_read_success_rate": 0 + "frames": 1080, + "events_count": 9, + "pieces_spawned": 1, + "pieces_locked": 4, + "lines_cleared": 2, + "piece_types_seen": [ + "S", + "I" + ], + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 47 + "load_time_ms": 29 }, "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true + "issues": [ + "canvas without aria-label or role", + "canvas without aria-label or role" + ], + "issue_count": 2, + "pass": false }, "calibration_drift": { "drifted": false, "changes": [], - "recalibrations": 0, - "cacheHits": 0, + "recalibrations": 26, + "cacheHits": 26, "cacheMisses": 0 } } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6/eval_results.json @@ -104,45 +104,49 @@ }, "gameplay_bot": { "pass": false, - "score": 0.2, + "score": 0.95, "total": 26, - "passed": 2, - "failed": 8, + "passed": 19, + "failed": 1, "report": { "implementation": { - "renderer": "unknown", - "grid_detected": false, + "renderer": "dom", + "grid_detected": true, "grid_detected_at": "initial", - "grid_bounds": null, + "grid_bounds": { + "x": 362.5, + "y": 125, + "width": 325, + "height": 635 + }, "controls": { "left": "ArrowLeft", "right": "ArrowRight", "down": "ArrowDown", "rotate": "ArrowUp", - "drop": "Space" + "drop": "ArrowDown" }, "control_discovery": { - "move_left": "NOT FOUND", + "move_left": "ArrowLeft (moved 2 col(s) left)", "move_right": "NOT FOUND", "soft_drop": "NOT FOUND", - "hard_drop": "NOT FOUND", - "rotate_cw": "NOT FOUND", + "hard_drop": "ArrowDown (teleported 11 rows to bottom)", + "rotate_cw": "ArrowUp (shape changed (rotation))", "rotate_ccw": "NOT FOUND", - "key:ArrowLeft": "grid read failed before press", - "key:a": "grid read failed before press", - "key:h": "grid read failed before press", - "key:ArrowRight": "grid read failed before press", - "key:d": "grid read failed before press", - "key:l": "grid read failed before press", - "key:ArrowUp": "grid read failed before press", - "key:x": "grid read failed before press", - "key:w": "grid read failed before press", - "key:Space": "grid read failed before press", - "key:Enter": "grid read failed before press", - "key:ArrowDown": "grid read failed before press" + "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowRight": "other change (disappeared=3, appeared=3)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "shape changed (rotation)", + "key:Space": "no change", + "key:Enter": "no change", + "key:ArrowDown": "teleported 11 rows to bottom", + "key:s": "no change", + "key:z": "no change", + "key:Control": "no change" }, "start_mechanism": "auto", - "score_element_found": false, + "score_element_found": true, "grid_confidence": 0, "survey": { "has_overlay": false, @@ -186,18 +190,18 @@ }, { "name": "auto_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify auto-drop" + "pass": true, + "detail": "grid state changed after 5s with no input (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_down", @@ -206,131 +210,285 @@ }, { "name": "rotate", - "pass": false, - "detail": "grid reader unreliable, cannot verify rotation" + "pass": true, + "detail": "piece cycled through 4 distinct shapes after 4 rotate presses (grid-verified)" }, { "name": "hard_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify hard drop" + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { "name": "all_pieces_rotate", - "pass": false, - "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" + "pass": true, + "detail": "2 J/L/T piece type(s) rotated to 3+ distinct shapes [T:4 J:4]" }, { "name": "piece_locks", - "pass": false, - "detail": "grid reader unreliable, cannot verify piece locking" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece spawning at top via grid reader" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "13 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "7 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "score went from 0 to 100 after line clear" }, { "name": "score_element_visible", - "pass": false, - "detail": "no score display detected" + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: piece lifecycle failed" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", - "pass": false, - "detail": "skipped: gameplay phase failed" + "pass": true, + "detail": "played for 30s, placed 21 pieces, no crashes" }, { "name": "multi_line_clear", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear opportunity occurred during play" }, { "name": "score_scaling", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear occurred to test scaling" }, { "name": "level_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: only 1 lines cleared (need 10+)" }, { "name": "speed_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: level did not increase, cannot test speed change" }, { "name": "next_piece_preview", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "next piece preview display found" }, { "name": "game_over_display", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "overlay detected, restart clickable present (phase6)" }, { "name": "counter_clockwise_rotation", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "Z key does same as Up arrow or does not rotate" }, { "name": "soft_drop_distinct", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rendering_clean", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "piece movement clears old cells correctly" } ], "summary": { "total": 26, - "passed": 2, - "failed": 8, - "skipped": 16, - "score": 0.2 + "passed": 19, + "failed": 1, + "skipped": 6, + "score": 0.95 }, "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, + "pieces_placed": 21, + "lines_cleared": 7, + "max_score_observed": 100, + "play_duration_seconds": 30, "errors_during_play": 0 }, - "competitive_play": null, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 21, + "total_lines_cleared": 1, + "single_clears": 1, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 1, + "score_readings": [ + 0, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ], + "score_final": 100, + "score_increases": [ + 100 + ], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [], + "rendering_trail_detected": false + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, - "lines_cleared": 0, - "piece_types_seen": [], - "grid_read_success_rate": 0 + "frames": 926, + "events_count": 10, + "pieces_spawned": 1, + "pieces_locked": 13, + "lines_cleared": 7, + "piece_types_seen": [ + "J", + "S", + "O", + "I", + "Z", + "T" + ], + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 72 + "load_time_ms": 38 }, "accessibility": { "issues": [], @@ -338,22 +496,16 @@ "pass": true }, "calibration_drift": { - "drifted": true, - "changes": [ - "renderer", - "grid_bounds", - "score_element", - "level_element" - ], - "recalibrations": 8, - "cacheHits": 0, - "cacheMisses": 8 + "drifted": false, + "changes": [], + "recalibrations": 25, + "cacheHits": 25, + "cacheMisses": 0 } - }, - "timed_out": true + } }, - "outcome_score": 0.1, - "score": 0.1, + "outcome_score": 0.475, + "score": 0.475, "sonarqube": { "error": "no SonarQube token found", "score": 0 diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6/gameplay-bot-report.json @@ -1,38 +1,42 @@ { "implementation": { - "renderer": "unknown", - "grid_detected": false, + "renderer": "dom", + "grid_detected": true, "grid_detected_at": "initial", - "grid_bounds": null, + "grid_bounds": { + "x": 362.5, + "y": 125, + "width": 325, + "height": 635 + }, "controls": { "left": "ArrowLeft", "right": "ArrowRight", "down": "ArrowDown", "rotate": "ArrowUp", - "drop": "Space" + "drop": "ArrowDown" }, "control_discovery": { - "move_left": "NOT FOUND", + "move_left": "ArrowLeft (moved 2 col(s) left)", "move_right": "NOT FOUND", "soft_drop": "NOT FOUND", - "hard_drop": "NOT FOUND", - "rotate_cw": "NOT FOUND", + "hard_drop": "ArrowDown (teleported 11 rows to bottom)", + "rotate_cw": "ArrowUp (shape changed (rotation))", "rotate_ccw": "NOT FOUND", - "key:ArrowLeft": "grid read failed before press", - "key:a": "grid read failed before press", - "key:h": "grid read failed before press", - "key:ArrowRight": "grid read failed before press", - "key:d": "grid read failed before press", - "key:l": "grid read failed before press", - "key:ArrowUp": "grid read failed before press", - "key:x": "grid read failed before press", - "key:w": "grid read failed before press", - "key:Space": "grid read failed before press", - "key:Enter": "grid read failed before press", - "key:ArrowDown": "grid read failed before press" + "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowRight": "other change (disappeared=3, appeared=3)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "shape changed (rotation)", + "key:Space": "no change", + "key:Enter": "no change", + "key:ArrowDown": "teleported 11 rows to bottom", + "key:s": "no change", + "key:z": "no change", + "key:Control": "no change" }, "start_mechanism": "auto", - "score_element_found": false, + "score_element_found": true, "grid_confidence": 0, "survey": { "has_overlay": false, @@ -76,18 +80,18 @@ }, { "name": "auto_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify auto-drop" + "pass": true, + "detail": "grid state changed after 5s with no input (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_down", @@ -96,131 +100,285 @@ }, { "name": "rotate", - "pass": false, - "detail": "grid reader unreliable, cannot verify rotation" + "pass": true, + "detail": "piece cycled through 4 distinct shapes after 4 rotate presses (grid-verified)" }, { "name": "hard_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify hard drop" + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { "name": "all_pieces_rotate", - "pass": false, - "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" + "pass": true, + "detail": "2 J/L/T piece type(s) rotated to 3+ distinct shapes [T:4 J:4]" }, { "name": "piece_locks", - "pass": false, - "detail": "grid reader unreliable, cannot verify piece locking" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece spawning at top via grid reader" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "13 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "7 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "score went from 0 to 100 after line clear" }, { "name": "score_element_visible", - "pass": false, - "detail": "no score display detected" + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: piece lifecycle failed" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", - "pass": false, - "detail": "skipped: gameplay phase failed" + "pass": true, + "detail": "played for 30s, placed 21 pieces, no crashes" }, { "name": "multi_line_clear", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear opportunity occurred during play" }, { "name": "score_scaling", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear occurred to test scaling" }, { "name": "level_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: only 1 lines cleared (need 10+)" }, { "name": "speed_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: level did not increase, cannot test speed change" }, { "name": "next_piece_preview", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "next piece preview display found" }, { "name": "game_over_display", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "overlay detected, restart clickable present (phase6)" }, { "name": "counter_clockwise_rotation", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "Z key does same as Up arrow or does not rotate" }, { "name": "soft_drop_distinct", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rendering_clean", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "piece movement clears old cells correctly" } ], "summary": { "total": 26, - "passed": 2, - "failed": 8, - "skipped": 16, - "score": 0.2 + "passed": 19, + "failed": 1, + "skipped": 6, + "score": 0.95 }, "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, + "pieces_placed": 21, + "lines_cleared": 7, + "max_score_observed": 100, + "play_duration_seconds": 30, "errors_during_play": 0 }, - "competitive_play": null, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 21, + "total_lines_cleared": 1, + "single_clears": 1, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 1, + "score_readings": [ + 0, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ], + "score_final": 100, + "score_increases": [ + 100 + ], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [], + "rendering_trail_detected": false + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, - "lines_cleared": 0, - "piece_types_seen": [], - "grid_read_success_rate": 0 + "frames": 926, + "events_count": 10, + "pieces_spawned": 1, + "pieces_locked": 13, + "lines_cleared": 7, + "piece_types_seen": [ + "J", + "S", + "O", + "I", + "Z", + "T" + ], + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 72 + "load_time_ms": 38 }, "accessibility": { "issues": [], @@ -228,15 +386,10 @@ "pass": true }, "calibration_drift": { - "drifted": true, - "changes": [ - "renderer", - "grid_bounds", - "score_element", - "level_element" - ], - "recalibrations": 8, - "cacheHits": 0, - "cacheMisses": 8 + "drifted": false, + "changes": [], + "recalibrations": 25, + "cacheHits": 25, + "cacheMisses": 0 } } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=opus46_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=opus46_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6/eval_results.json @@ -104,31 +104,38 @@ }, "gameplay_bot": { "pass": false, - "score": 0.2, + "score": 0.89, "total": 26, - "passed": 2, - "failed": 8, + "passed": 17, + "failed": 2, "report": { "implementation": { - "renderer": "unknown", - "grid_detected": false, + "renderer": "canvas", + "grid_detected": true, "grid_detected_at": "initial", - "grid_bounds": null, + "grid_bounds": { + "x": 0, + "y": 0, + "width": 300, + "height": 600 + }, "controls": { "left": "ArrowLeft", "right": "ArrowRight", "down": "ArrowDown", - "rotate": "ArrowUp", + "rotate": "z", "drop": "Space" }, "control_discovery": { - "move_left": "ArrowLeft (moved 2 col(s) left)", + "move_left": "NOT FOUND", "move_right": "ArrowRight (moved 2 col(s) right)", "soft_drop": "NOT FOUND", "hard_drop": "Space (teleported 8 rows to bottom)", "rotate_cw": "NOT FOUND", "rotate_ccw": "NOT FOUND", - "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowLeft": "other change (disappeared=4, appeared=4)", + "key:a": "other change (disappeared=3, appeared=3)", + "key:h": "no change", "key:ArrowRight": "moved 2 col(s) right", "key:ArrowUp": "no change", "key:x": "moved 2 row(s) down", @@ -140,7 +147,7 @@ "key:Control": "other change" }, "start_mechanism": "enter", - "score_element_found": false, + "score_element_found": true, "grid_confidence": 0, "survey": { "has_overlay": false, @@ -180,18 +187,18 @@ }, { "name": "auto_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify auto-drop" + "pass": true, + "detail": "grid state changed after 5s with no input (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_down", @@ -200,155 +207,382 @@ }, { "name": "rotate", - "pass": false, - "detail": "grid reader unreliable, cannot verify rotation" + "pass": true, + "detail": "piece cycled through 3 distinct shapes after 4 rotate presses (grid-verified)" }, { "name": "hard_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify hard drop" + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { "name": "all_pieces_rotate", "pass": false, - "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" + "detail": "only 1 of 3 J/L/T rotated to 3+ distinct shapes (need 2) [T:3 L:1 J:2]" }, { "name": "piece_locks", - "pass": false, - "detail": "grid reader unreliable, cannot verify piece locking" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece spawning at top via grid reader" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "23 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "1 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", "pass": false, - "detail": "skipped: mechanics phase failed" + "detail": "score stayed at 376 after clearing 1 line(s)" }, { "name": "score_element_visible", - "pass": false, - "detail": "no score display detected" + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: piece lifecycle failed" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", - "pass": false, - "detail": "skipped: gameplay phase failed" + "pass": true, + "detail": "played for 30s, placed 49 pieces, no crashes" }, { "name": "multi_line_clear", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear opportunity occurred during play" }, { "name": "score_scaling", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear occurred to test scaling" }, { "name": "level_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: only 0 lines cleared (need 10+)" }, { "name": "speed_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: level did not increase, cannot test speed change" }, { "name": "next_piece_preview", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "next piece preview display found" }, { "name": "game_over_display", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "overlay detected (phase6)" }, { "name": "counter_clockwise_rotation", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: could not test rotation direction" }, { "name": "soft_drop_distinct", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rendering_clean", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "piece movement clears old cells correctly" } ], "summary": { "total": 26, - "passed": 2, - "failed": 8, - "skipped": 16, - "score": 0.2 + "passed": 17, + "failed": 2, + "skipped": 7, + "score": 0.89 }, "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, + "pieces_placed": 49, + "lines_cleared": 1, + "max_score_observed": 376, + "play_duration_seconds": 30, "errors_during_play": 0 }, - "competitive_play": null, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 21, + "total_lines_cleared": 0, + "single_clears": 0, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 0, + "score_readings": [ + 0, + 30, + 30, + 30, + 60, + 60, + 92, + 92, + 122, + 122, + 122, + 150, + 150, + 150, + 150, + 176, + 176, + 176, + 176, + 198, + 198, + 198, + 198, + 220, + 220, + 220, + 242, + 242, + 266, + 266, + 266, + 266, + 266, + 288, + 288, + 288, + 288, + 304, + 304, + 304, + 304, + 318, + 318, + 342, + 342, + 342, + 342, + 354, + 354, + 354, + 354, + 354, + 372, + 372, + 372, + 372, + 380, + 380, + 388, + 388, + 388, + 388, + 388, + 400, + 400, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408 + ], + "score_final": 408, + "score_increases": [ + 30, + 30, + 32, + 30, + 28, + 26, + 22, + 22, + 22, + 24, + 22, + 16, + 14, + 24, + 12, + 18, + 8, + 8, + 12, + 8 + ], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": true, + "game_over_text_found": "modal", + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [], + "rendering_trail_detected": false + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, - "lines_cleared": 0, - "piece_types_seen": [], - "grid_read_success_rate": 0 + "frames": 709, + "events_count": 11, + "pieces_spawned": 1, + "pieces_locked": 23, + "lines_cleared": 1, + "piece_types_seen": [ + "unknown", + "O", + "S", + "J", + "I", + "T", + "Z", + "L" + ], + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 37 + "load_time_ms": 42 }, "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true + "issues": [ + "canvas without aria-label or role", + "canvas without aria-label or role" + ], + "issue_count": 2, + "pass": false }, "calibration_drift": { - "drifted": true, - "changes": [ - "renderer", - "grid_bounds", - "controls", - "score_element", - "level_element" - ], - "recalibrations": 7, - "cacheHits": 6, - "cacheMisses": 1 + "drifted": false, + "changes": [], + "recalibrations": 22, + "cacheHits": 22, + "cacheMisses": 0 } - }, - "timed_out": true + } }, - "outcome_score": 0.1, - "score": 0.1, + "outcome_score": 0.445, + "score": 0.445, "sonarqube": { "error": "no SonarQube token found", "score": 0 diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=opus46_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=opus46_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6/gameplay-bot-report.json @@ -1,24 +1,31 @@ { "implementation": { - "renderer": "unknown", - "grid_detected": false, + "renderer": "canvas", + "grid_detected": true, "grid_detected_at": "initial", - "grid_bounds": null, + "grid_bounds": { + "x": 0, + "y": 0, + "width": 300, + "height": 600 + }, "controls": { "left": "ArrowLeft", "right": "ArrowRight", "down": "ArrowDown", - "rotate": "ArrowUp", + "rotate": "z", "drop": "Space" }, "control_discovery": { - "move_left": "ArrowLeft (moved 2 col(s) left)", + "move_left": "NOT FOUND", "move_right": "ArrowRight (moved 2 col(s) right)", "soft_drop": "NOT FOUND", "hard_drop": "Space (teleported 8 rows to bottom)", "rotate_cw": "NOT FOUND", "rotate_ccw": "NOT FOUND", - "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowLeft": "other change (disappeared=4, appeared=4)", + "key:a": "other change (disappeared=3, appeared=3)", + "key:h": "no change", "key:ArrowRight": "moved 2 col(s) right", "key:ArrowUp": "no change", "key:x": "moved 2 row(s) down", @@ -30,7 +37,7 @@ "key:Control": "other change" }, "start_mechanism": "enter", - "score_element_found": false, + "score_element_found": true, "grid_confidence": 0, "survey": { "has_overlay": false, @@ -70,18 +77,18 @@ }, { "name": "auto_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify auto-drop" + "pass": true, + "detail": "grid state changed after 5s with no input (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_down", @@ -90,148 +97,376 @@ }, { "name": "rotate", - "pass": false, - "detail": "grid reader unreliable, cannot verify rotation" + "pass": true, + "detail": "piece cycled through 3 distinct shapes after 4 rotate presses (grid-verified)" }, { "name": "hard_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify hard drop" + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { "name": "all_pieces_rotate", "pass": false, - "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" + "detail": "only 1 of 3 J/L/T rotated to 3+ distinct shapes (need 2) [T:3 L:1 J:2]" }, { "name": "piece_locks", - "pass": false, - "detail": "grid reader unreliable, cannot verify piece locking" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece spawning at top via grid reader" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "23 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "1 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", "pass": false, - "detail": "skipped: mechanics phase failed" + "detail": "score stayed at 376 after clearing 1 line(s)" }, { "name": "score_element_visible", - "pass": false, - "detail": "no score display detected" + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: piece lifecycle failed" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", - "pass": false, - "detail": "skipped: gameplay phase failed" + "pass": true, + "detail": "played for 30s, placed 49 pieces, no crashes" }, { "name": "multi_line_clear", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear opportunity occurred during play" }, { "name": "score_scaling", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear occurred to test scaling" }, { "name": "level_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: only 0 lines cleared (need 10+)" }, { "name": "speed_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: level did not increase, cannot test speed change" }, { "name": "next_piece_preview", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "next piece preview display found" }, { "name": "game_over_display", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "overlay detected (phase6)" }, { "name": "counter_clockwise_rotation", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: could not test rotation direction" }, { "name": "soft_drop_distinct", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rendering_clean", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "piece movement clears old cells correctly" } ], "summary": { "total": 26, - "passed": 2, - "failed": 8, - "skipped": 16, - "score": 0.2 + "passed": 17, + "failed": 2, + "skipped": 7, + "score": 0.89 }, "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, + "pieces_placed": 49, + "lines_cleared": 1, + "max_score_observed": 376, + "play_duration_seconds": 30, "errors_during_play": 0 }, - "competitive_play": null, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 21, + "total_lines_cleared": 0, + "single_clears": 0, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 0, + "score_readings": [ + 0, + 30, + 30, + 30, + 60, + 60, + 92, + 92, + 122, + 122, + 122, + 150, + 150, + 150, + 150, + 176, + 176, + 176, + 176, + 198, + 198, + 198, + 198, + 220, + 220, + 220, + 242, + 242, + 266, + 266, + 266, + 266, + 266, + 288, + 288, + 288, + 288, + 304, + 304, + 304, + 304, + 318, + 318, + 342, + 342, + 342, + 342, + 354, + 354, + 354, + 354, + 354, + 372, + 372, + 372, + 372, + 380, + 380, + 388, + 388, + 388, + 388, + 388, + 400, + 400, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408, + 408 + ], + "score_final": 408, + "score_increases": [ + 30, + 30, + 32, + 30, + 28, + 26, + 22, + 22, + 22, + 24, + 22, + 16, + 14, + 24, + 12, + 18, + 8, + 8, + 12, + 8 + ], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": true, + "game_over_text_found": "modal", + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [], + "rendering_trail_detected": false + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, - "lines_cleared": 0, - "piece_types_seen": [], - "grid_read_success_rate": 0 + "frames": 709, + "events_count": 11, + "pieces_spawned": 1, + "pieces_locked": 23, + "lines_cleared": 1, + "piece_types_seen": [ + "unknown", + "O", + "S", + "J", + "I", + "T", + "Z", + "L" + ], + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 37 + "load_time_ms": 42 }, "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true + "issues": [ + "canvas without aria-label or role", + "canvas without aria-label or role" + ], + "issue_count": 2, + "pass": false }, "calibration_drift": { - "drifted": true, - "changes": [ - "renderer", - "grid_bounds", - "controls", - "score_element", - "level_element" - ], - "recalibrations": 7, - "cacheHits": 6, - "cacheMisses": 1 + "drifted": false, + "changes": [], + "recalibrations": 22, + "cacheHits": 22, + "cacheMisses": 0 } } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=qwen36p_pw=off_prompt=simple_prov=or_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=qwen36p_pw=off_prompt=simple_prov=or_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/eval_results.json @@ -103,46 +103,52 @@ "score": 1.0 }, "gameplay_bot": { - "pass": false, - "score": 0.2, + "pass": true, + "score": 1, "total": 26, - "passed": 2, - "failed": 8, + "passed": 20, + "failed": 0, "report": { "implementation": { - "renderer": "unknown", - "grid_detected": false, + "renderer": "canvas", + "grid_detected": true, "grid_detected_at": "initial", - "grid_bounds": null, + "grid_bounds": { + "x": 0, + "y": 0, + "width": 300, + "height": 600 + }, "controls": { "left": "ArrowLeft", "right": "ArrowRight", "down": "ArrowDown", - "rotate": "ArrowUp", + "rotate": "x", "drop": "Space" }, "control_discovery": { - "move_left": "NOT FOUND", + "move_left": "ArrowLeft (moved 4 col(s) left)", "move_right": "NOT FOUND", "soft_drop": "NOT FOUND", "hard_drop": "NOT FOUND", "rotate_cw": "NOT FOUND", "rotate_ccw": "NOT FOUND", - "key:ArrowLeft": "other change (disappeared=2, appeared=2)", - "key:a": "no change", - "key:h": "no change", - "key:ArrowRight": "grid read failed before press", - "key:d": "grid read failed before press", - "key:l": "grid read failed before press", - "key:ArrowUp": "grid read failed before press", - "key:x": "grid read failed before press", - "key:w": "grid read failed before press", - "key:Space": "grid read failed before press", - "key:Enter": "grid read failed before press", - "key:ArrowDown": "grid read failed before press" + "key:ArrowLeft": "moved 4 col(s) left", + "key:ArrowRight": "other change (disappeared=4, appeared=4)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "no change", + "key:x": "no change", + "key:w": "no change", + "key:Space": "rotation", + "key:Enter": "no change", + "key:ArrowDown": "other change (disappeared=3, appeared=3)", + "key:s": "no change", + "key:z": "other change", + "key:Control": "no change" }, "start_mechanism": "enter", - "score_element_found": false, + "score_element_found": true, "grid_confidence": 0, "survey": { "has_overlay": true, @@ -183,18 +189,18 @@ }, { "name": "auto_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify auto-drop" + "pass": true, + "detail": "grid state changed after 5s with no input (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_down", @@ -203,155 +209,363 @@ }, { "name": "rotate", - "pass": false, - "detail": "grid reader unreliable, cannot verify rotation" + "pass": true, + "detail": "piece cycled through 4 distinct shapes after 4 rotate presses (grid-verified)" }, { "name": "hard_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify hard drop" + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { "name": "all_pieces_rotate", - "pass": false, - "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" + "pass": true, + "detail": "2 J/L/T piece type(s) rotated to 3+ distinct shapes [J:4 T:4]" }, { "name": "piece_locks", - "pass": false, - "detail": "grid reader unreliable, cannot verify piece locking" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece spawning at top via grid reader" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "17 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "7 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "score went from 282 to 306 after line clear" }, { "name": "score_element_visible", - "pass": false, - "detail": "no score display detected" + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: piece lifecycle failed" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", - "pass": false, - "detail": "skipped: gameplay phase failed" + "pass": true, + "detail": "played for 30s, placed 33 pieces, no crashes" }, { "name": "multi_line_clear", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear opportunity occurred during play" }, { "name": "score_scaling", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear occurred to test scaling" }, { "name": "level_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: only 1 lines cleared (need 10+)" }, { "name": "speed_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: level did not increase, cannot test speed change" }, { "name": "next_piece_preview", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "next piece preview display found" }, { "name": "game_over_display", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "overlay detected (phase6)" }, { "name": "counter_clockwise_rotation", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "Z key rotates opposite direction from Up arrow" }, { "name": "soft_drop_distinct", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rendering_clean", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "piece movement clears old cells correctly" } ], "summary": { "total": 26, - "passed": 2, - "failed": 8, - "skipped": 16, - "score": 0.2 + "passed": 20, + "failed": 0, + "skipped": 6, + "score": 1 }, "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, + "pieces_placed": 33, + "lines_cleared": 7, + "max_score_observed": 510, + "play_duration_seconds": 30, "errors_during_play": 0 }, - "competitive_play": null, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 29, + "total_lines_cleared": 1, + "single_clears": 1, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 1, + "score_readings": [ + 0, + 30, + 30, + 30, + 30, + 30, + 58, + 58, + 58, + 58, + 86, + 86, + 86, + 86, + 118, + 148, + 148, + 148, + 172, + 172, + 172, + 172, + 202, + 202, + 202, + 202, + 202, + 228, + 228, + 228, + 228, + 356, + 356, + 356, + 382, + 382, + 382, + 406, + 432, + 432, + 432, + 432, + 432, + 452, + 452, + 452, + 474, + 474, + 474, + 474, + 494, + 494, + 494, + 520, + 542, + 542, + 542, + 560, + 560, + 560, + 560, + 560, + 560, + 572, + 572, + 572, + 572, + 572, + 586, + 586, + 586, + 586, + 600, + 600, + 600, + 630, + 630, + 630, + 630, + 630, + 630, + 644, + 644, + 644, + 656, + 656, + 656, + 666, + 666, + 666, + 776, + 776, + 776, + 776, + 786, + 786, + 786, + 796, + 796, + 796 + ], + "score_final": 796, + "score_increases": [ + 30, + 28, + 28, + 32, + 30, + 24, + 30, + 26, + 128, + 26, + 24, + 26, + 20, + 22, + 20, + 26, + 22, + 18, + 12, + 14, + 14, + 30, + 14, + 12, + 10, + 110, + 10, + 10 + ], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [], + "rendering_trail_detected": false + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, - "lines_cleared": 0, - "piece_types_seen": [], - "grid_read_success_rate": 0 + "frames": 784, + "events_count": 11, + "pieces_spawned": 1, + "pieces_locked": 17, + "lines_cleared": 7, + "piece_types_seen": [ + "L", + "S", + "Z", + "O", + "I", + "T", + "J" + ], + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 19 + "load_time_ms": 36 }, "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true + "issues": [ + "canvas without aria-label or role", + "canvas without aria-label or role", + "canvas without aria-label or role" + ], + "issue_count": 3, + "pass": false }, "calibration_drift": { - "drifted": true, - "changes": [ - "renderer", - "grid_bounds", - "controls", - "score_element", - "level_element" - ], - "recalibrations": 8, - "cacheHits": 1, - "cacheMisses": 7 + "drifted": false, + "changes": [], + "recalibrations": 29, + "cacheHits": 29, + "cacheMisses": 0 } - }, - "timed_out": true + } }, - "outcome_score": 0.1, - "score": 0.1, + "outcome_score": 0.5, + "score": 0.5, "sonarqube": { "error": "no SonarQube token found", "score": 0 diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=qwen36p_pw=off_prompt=simple_prov=or_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=qwen36p_pw=off_prompt=simple_prov=or_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/gameplay-bot-report.json @@ -1,38 +1,44 @@ { "implementation": { - "renderer": "unknown", - "grid_detected": false, + "renderer": "canvas", + "grid_detected": true, "grid_detected_at": "initial", - "grid_bounds": null, + "grid_bounds": { + "x": 0, + "y": 0, + "width": 300, + "height": 600 + }, "controls": { "left": "ArrowLeft", "right": "ArrowRight", "down": "ArrowDown", - "rotate": "ArrowUp", + "rotate": "x", "drop": "Space" }, "control_discovery": { - "move_left": "NOT FOUND", + "move_left": "ArrowLeft (moved 4 col(s) left)", "move_right": "NOT FOUND", "soft_drop": "NOT FOUND", "hard_drop": "NOT FOUND", "rotate_cw": "NOT FOUND", "rotate_ccw": "NOT FOUND", - "key:ArrowLeft": "other change (disappeared=2, appeared=2)", - "key:a": "no change", - "key:h": "no change", - "key:ArrowRight": "grid read failed before press", - "key:d": "grid read failed before press", - "key:l": "grid read failed before press", - "key:ArrowUp": "grid read failed before press", - "key:x": "grid read failed before press", - "key:w": "grid read failed before press", - "key:Space": "grid read failed before press", - "key:Enter": "grid read failed before press", - "key:ArrowDown": "grid read failed before press" + "key:ArrowLeft": "moved 4 col(s) left", + "key:ArrowRight": "other change (disappeared=4, appeared=4)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "no change", + "key:x": "no change", + "key:w": "no change", + "key:Space": "rotation", + "key:Enter": "no change", + "key:ArrowDown": "other change (disappeared=3, appeared=3)", + "key:s": "no change", + "key:z": "other change", + "key:Control": "no change" }, "start_mechanism": "enter", - "score_element_found": false, + "score_element_found": true, "grid_confidence": 0, "survey": { "has_overlay": true, @@ -73,18 +79,18 @@ }, { "name": "auto_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify auto-drop" + "pass": true, + "detail": "grid state changed after 5s with no input (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_down", @@ -93,148 +99,357 @@ }, { "name": "rotate", - "pass": false, - "detail": "grid reader unreliable, cannot verify rotation" + "pass": true, + "detail": "piece cycled through 4 distinct shapes after 4 rotate presses (grid-verified)" }, { "name": "hard_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify hard drop" + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { "name": "all_pieces_rotate", - "pass": false, - "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" + "pass": true, + "detail": "2 J/L/T piece type(s) rotated to 3+ distinct shapes [J:4 T:4]" }, { "name": "piece_locks", - "pass": false, - "detail": "grid reader unreliable, cannot verify piece locking" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece spawning at top via grid reader" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "17 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "7 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "score went from 282 to 306 after line clear" }, { "name": "score_element_visible", - "pass": false, - "detail": "no score display detected" + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: piece lifecycle failed" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", - "pass": false, - "detail": "skipped: gameplay phase failed" + "pass": true, + "detail": "played for 30s, placed 33 pieces, no crashes" }, { "name": "multi_line_clear", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear opportunity occurred during play" }, { "name": "score_scaling", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear occurred to test scaling" }, { "name": "level_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: only 1 lines cleared (need 10+)" }, { "name": "speed_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: level did not increase, cannot test speed change" }, { "name": "next_piece_preview", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "next piece preview display found" }, { "name": "game_over_display", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "overlay detected (phase6)" }, { "name": "counter_clockwise_rotation", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "Z key rotates opposite direction from Up arrow" }, { "name": "soft_drop_distinct", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rendering_clean", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "piece movement clears old cells correctly" } ], "summary": { "total": 26, - "passed": 2, - "failed": 8, - "skipped": 16, - "score": 0.2 + "passed": 20, + "failed": 0, + "skipped": 6, + "score": 1 }, "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, + "pieces_placed": 33, + "lines_cleared": 7, + "max_score_observed": 510, + "play_duration_seconds": 30, "errors_during_play": 0 }, - "competitive_play": null, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 29, + "total_lines_cleared": 1, + "single_clears": 1, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 1, + "score_readings": [ + 0, + 30, + 30, + 30, + 30, + 30, + 58, + 58, + 58, + 58, + 86, + 86, + 86, + 86, + 118, + 148, + 148, + 148, + 172, + 172, + 172, + 172, + 202, + 202, + 202, + 202, + 202, + 228, + 228, + 228, + 228, + 356, + 356, + 356, + 382, + 382, + 382, + 406, + 432, + 432, + 432, + 432, + 432, + 452, + 452, + 452, + 474, + 474, + 474, + 474, + 494, + 494, + 494, + 520, + 542, + 542, + 542, + 560, + 560, + 560, + 560, + 560, + 560, + 572, + 572, + 572, + 572, + 572, + 586, + 586, + 586, + 586, + 600, + 600, + 600, + 630, + 630, + 630, + 630, + 630, + 630, + 644, + 644, + 644, + 656, + 656, + 656, + 666, + 666, + 666, + 776, + 776, + 776, + 776, + 786, + 786, + 786, + 796, + 796, + 796 + ], + "score_final": 796, + "score_increases": [ + 30, + 28, + 28, + 32, + 30, + 24, + 30, + 26, + 128, + 26, + 24, + 26, + 20, + 22, + 20, + 26, + 22, + 18, + 12, + 14, + 14, + 30, + 14, + 12, + 10, + 110, + 10, + 10 + ], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [], + "rendering_trail_detected": false + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, - "lines_cleared": 0, - "piece_types_seen": [], - "grid_read_success_rate": 0 + "frames": 784, + "events_count": 11, + "pieces_spawned": 1, + "pieces_locked": 17, + "lines_cleared": 7, + "piece_types_seen": [ + "L", + "S", + "Z", + "O", + "I", + "T", + "J" + ], + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 19 + "load_time_ms": 36 }, "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true + "issues": [ + "canvas without aria-label or role", + "canvas without aria-label or role", + "canvas without aria-label or role" + ], + "issue_count": 3, + "pass": false }, "calibration_drift": { - "drifted": true, - "changes": [ - "renderer", - "grid_bounds", - "controls", - "score_element", - "level_element" - ], - "recalibrations": 8, - "cacheHits": 1, - "cacheMisses": 7 + "drifted": false, + "changes": [], + "recalibrations": 29, + "cacheHits": 29, + "cacheMisses": 0 } } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=gemma426b_pw=off_prompt=simple_prov=or_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=gemma426b_pw=off_prompt=simple_prov=or_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/eval_results.json @@ -303,7 +303,7 @@ "grid_read_success_rate": 0 }, "performance": { - "load_time_ms": 31 + "load_time_ms": 25 }, "accessibility": { "issues": [ diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=gemma426b_pw=off_prompt=simple_prov=or_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=gemma426b_pw=off_prompt=simple_prov=or_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/gameplay-bot-report.json @@ -188,7 +188,7 @@ "grid_read_success_rate": 0 }, "performance": { - "load_time_ms": 31 + "load_time_ms": 25 }, "accessibility": { "issues": [ diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/eval_results.json @@ -313,7 +313,7 @@ "grid_read_success_rate": 0 }, "performance": { - "load_time_ms": 43 + "load_time_ms": 42 }, "accessibility": { "issues": [ diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1/gameplay-bot-report.json @@ -198,7 +198,7 @@ "grid_read_success_rate": 0 }, "performance": { - "load_time_ms": 43 + "load_time_ms": 42 }, "accessibility": { "issues": [ diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/eval_results.json @@ -109,16 +109,21 @@ }, "gameplay_bot": { "pass": false, - "score": 0.2, + "score": 0.95, "total": 26, - "passed": 2, - "failed": 8, + "passed": 18, + "failed": 1, "report": { "implementation": { - "renderer": "unknown", - "grid_detected": false, + "renderer": "canvas", + "grid_detected": true, "grid_detected_at": "initial", - "grid_bounds": null, + "grid_bounds": { + "x": 0, + "y": 0, + "width": 300, + "height": 600 + }, "controls": { "left": "ArrowLeft", "right": "ArrowRight", @@ -127,27 +132,24 @@ "drop": "Space" }, "control_discovery": { - "move_left": "NOT FOUND", + "move_left": "ArrowLeft (moved 2 col(s) left)", "move_right": "NOT FOUND", "soft_drop": "NOT FOUND", - "hard_drop": "NOT FOUND", - "rotate_cw": "NOT FOUND", - "rotate_ccw": "NOT FOUND", - "key:ArrowLeft": "other change (disappeared=2, appeared=2)", - "key:a": "no change", - "key:h": "no change", - "key:ArrowRight": "grid read failed before press", - "key:d": "grid read failed before press", - "key:l": "grid read failed before press", - "key:ArrowUp": "grid read failed before press", - "key:x": "grid read failed before press", - "key:w": "grid read failed before press", - "key:Space": "grid read failed before press", - "key:Enter": "grid read failed before press", - "key:ArrowDown": "grid read failed before press" + "hard_drop": "Space (teleported 11 rows to bottom)", + "rotate_cw": "ArrowUp (shape changed (rotation))", + "rotate_ccw": "z (shape changed (rotation))", + "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowRight": "other change (disappeared=2, appeared=2)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "shape changed (rotation)", + "key:Space": "teleported 11 rows to bottom", + "key:s": "no change", + "key:ArrowDown": "other change (disappeared=3, appeared=3)", + "key:z": "shape changed (rotation)" }, "start_mechanism": "auto", - "score_element_found": false, + "score_element_found": true, "grid_confidence": 0, "survey": { "has_overlay": false, @@ -186,18 +188,18 @@ }, { "name": "auto_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify auto-drop" + "pass": true, + "detail": "grid state changed after 5s with no input (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_down", @@ -206,155 +208,382 @@ }, { "name": "rotate", - "pass": false, - "detail": "grid reader unreliable, cannot verify rotation" + "pass": true, + "detail": "piece cycled through 4 distinct shapes after 4 rotate presses (grid-verified)" }, { "name": "hard_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify hard drop" + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { "name": "all_pieces_rotate", - "pass": false, - "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" + "pass": true, + "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [J:4 T:4 L:4]" }, { "name": "piece_locks", - "pass": false, - "detail": "grid reader unreliable, cannot verify piece locking" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece spawning at top via grid reader" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "3 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "8 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "score went from 34 to 104 after line clear" }, { "name": "score_element_visible", - "pass": false, - "detail": "no score display detected" + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: piece lifecycle failed" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", - "pass": false, - "detail": "skipped: gameplay phase failed" + "pass": true, + "detail": "played for 30s, placed 10 pieces, no crashes" }, { "name": "multi_line_clear", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear opportunity occurred during play" }, { "name": "score_scaling", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear occurred to test scaling" }, { "name": "level_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: only 3 lines cleared (need 10+)" }, { "name": "speed_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: level did not increase, cannot test speed change" }, { "name": "next_piece_preview", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "next piece preview display found" }, { "name": "game_over_display", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "no overlay or restart UI found (phase6)" }, { "name": "counter_clockwise_rotation", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "Z key rotates opposite direction from Up arrow" }, { "name": "soft_drop_distinct", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rendering_clean", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: not enough data to assess rendering trails" } ], "summary": { "total": 26, - "passed": 2, - "failed": 8, - "skipped": 16, - "score": 0.2 + "passed": 18, + "failed": 1, + "skipped": 7, + "score": 0.95 }, "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, + "pieces_placed": 10, + "lines_cleared": 8, + "max_score_observed": 104, + "play_duration_seconds": 30, "errors_during_play": 0 }, - "competitive_play": null, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 10, + "total_lines_cleared": 3, + "single_clears": 3, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 2, + "score_readings": [ + 0, + 34, + 34, + 34, + 34, + 64, + 64, + 64, + 94, + 94, + 94, + 94, + 122, + 122, + 150, + 150, + 150, + 150, + 150, + 176, + 176, + 242, + 242, + 242, + 242, + 308, + 308, + 308, + 308, + 308, + 332, + 332, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402 + ], + "score_final": 402, + "score_increases": [ + 34, + 30, + 30, + 28, + 28, + 26, + 66, + 66, + 24, + 70 + ], + "level_readings": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "level_final": 0, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [] + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, - "lines_cleared": 0, - "piece_types_seen": [], - "grid_read_success_rate": 0 + "frames": 1006, + "events_count": 11, + "pieces_spawned": 1, + "pieces_locked": 3, + "lines_cleared": 8, + "piece_types_seen": [ + "unknown", + "O", + "T", + "L", + "Z", + "I", + "J" + ], + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 32 + "load_time_ms": 28 }, "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true + "issues": [ + "canvas without aria-label or role", + "canvas without aria-label or role" + ], + "issue_count": 2, + "pass": false }, "calibration_drift": { - "drifted": true, - "changes": [ - "renderer", - "grid_bounds", - "controls", - "score_element", - "level_element" - ], - "recalibrations": 8, - "cacheHits": 1, - "cacheMisses": 7 + "drifted": false, + "changes": [], + "recalibrations": 24, + "cacheHits": 24, + "cacheMisses": 0 } - }, - "timed_out": true + } }, - "outcome_score": 0.1, - "score": 0.1, + "outcome_score": 0.475, + "score": 0.475, "sonarqube": { "error": "no SonarQube token found", "score": 0 diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=glm51_pw=off_prompt=simple_prov=zai_rndr=none_strat=none_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/gameplay-bot-report.json @@ -1,9 +1,14 @@ { "implementation": { - "renderer": "unknown", - "grid_detected": false, + "renderer": "canvas", + "grid_detected": true, "grid_detected_at": "initial", - "grid_bounds": null, + "grid_bounds": { + "x": 0, + "y": 0, + "width": 300, + "height": 600 + }, "controls": { "left": "ArrowLeft", "right": "ArrowRight", @@ -12,27 +17,24 @@ "drop": "Space" }, "control_discovery": { - "move_left": "NOT FOUND", + "move_left": "ArrowLeft (moved 2 col(s) left)", "move_right": "NOT FOUND", "soft_drop": "NOT FOUND", - "hard_drop": "NOT FOUND", - "rotate_cw": "NOT FOUND", - "rotate_ccw": "NOT FOUND", - "key:ArrowLeft": "other change (disappeared=2, appeared=2)", - "key:a": "no change", - "key:h": "no change", - "key:ArrowRight": "grid read failed before press", - "key:d": "grid read failed before press", - "key:l": "grid read failed before press", - "key:ArrowUp": "grid read failed before press", - "key:x": "grid read failed before press", - "key:w": "grid read failed before press", - "key:Space": "grid read failed before press", - "key:Enter": "grid read failed before press", - "key:ArrowDown": "grid read failed before press" + "hard_drop": "Space (teleported 11 rows to bottom)", + "rotate_cw": "ArrowUp (shape changed (rotation))", + "rotate_ccw": "z (shape changed (rotation))", + "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowRight": "other change (disappeared=2, appeared=2)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "shape changed (rotation)", + "key:Space": "teleported 11 rows to bottom", + "key:s": "no change", + "key:ArrowDown": "other change (disappeared=3, appeared=3)", + "key:z": "shape changed (rotation)" }, "start_mechanism": "auto", - "score_element_found": false, + "score_element_found": true, "grid_confidence": 0, "survey": { "has_overlay": false, @@ -71,18 +73,18 @@ }, { "name": "auto_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify auto-drop" + "pass": true, + "detail": "grid state changed after 5s with no input (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", - "pass": false, - "detail": "grid reader unreliable, cannot verify movement" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_down", @@ -91,148 +93,376 @@ }, { "name": "rotate", - "pass": false, - "detail": "grid reader unreliable, cannot verify rotation" + "pass": true, + "detail": "piece cycled through 4 distinct shapes after 4 rotate presses (grid-verified)" }, { "name": "hard_drop", - "pass": false, - "detail": "grid reader unreliable, cannot verify hard drop" + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { "name": "all_pieces_rotate", - "pass": false, - "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" + "pass": true, + "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [J:4 T:4 L:4]" }, { "name": "piece_locks", - "pass": false, - "detail": "grid reader unreliable, cannot verify piece locking" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece spawning at top via grid reader" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "3 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "8 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", - "pass": false, - "detail": "skipped: mechanics phase failed" + "pass": true, + "detail": "score went from 34 to 104 after line clear" }, { "name": "score_element_visible", - "pass": false, - "detail": "no score display detected" + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: piece lifecycle failed" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", - "pass": false, - "detail": "skipped: gameplay phase failed" + "pass": true, + "detail": "played for 30s, placed 10 pieces, no crashes" }, { "name": "multi_line_clear", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear opportunity occurred during play" }, { "name": "score_scaling", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no multi-line clear occurred to test scaling" }, { "name": "level_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: only 3 lines cleared (need 10+)" }, { "name": "speed_progression", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: level did not increase, cannot test speed change" }, { "name": "next_piece_preview", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "next piece preview display found" }, { "name": "game_over_display", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "no overlay or restart UI found (phase6)" }, { "name": "counter_clockwise_rotation", - "pass": false, - "detail": "skipped: competitive play phase did not run" + "pass": true, + "detail": "Z key rotates opposite direction from Up arrow" }, { "name": "soft_drop_distinct", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rendering_clean", "pass": false, - "detail": "skipped: competitive play phase did not run" + "detail": "skipped: not enough data to assess rendering trails" } ], "summary": { "total": 26, - "passed": 2, - "failed": 8, - "skipped": 16, - "score": 0.2 + "passed": 18, + "failed": 1, + "skipped": 7, + "score": 0.95 }, "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, + "pieces_placed": 10, + "lines_cleared": 8, + "max_score_observed": 104, + "play_duration_seconds": 30, "errors_during_play": 0 }, - "competitive_play": null, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 10, + "total_lines_cleared": 3, + "single_clears": 3, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 2, + "score_readings": [ + 0, + 34, + 34, + 34, + 34, + 64, + 64, + 64, + 94, + 94, + 94, + 94, + 122, + 122, + 150, + 150, + 150, + 150, + 150, + 176, + 176, + 242, + 242, + 242, + 242, + 308, + 308, + 308, + 308, + 308, + 332, + 332, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402, + 402 + ], + "score_final": 402, + "score_increases": [ + 34, + 30, + 30, + 28, + 28, + 26, + 66, + 66, + 24, + 70 + ], + "level_readings": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "level_final": 0, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [] + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, - "lines_cleared": 0, - "piece_types_seen": [], - "grid_read_success_rate": 0 + "frames": 1006, + "events_count": 11, + "pieces_spawned": 1, + "pieces_locked": 3, + "lines_cleared": 8, + "piece_types_seen": [ + "unknown", + "O", + "T", + "L", + "Z", + "I", + "J" + ], + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 32 + "load_time_ms": 28 }, "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true + "issues": [ + "canvas without aria-label or role", + "canvas without aria-label or role" + ], + "issue_count": 2, + "pass": false }, "calibration_drift": { - "drifted": true, - "changes": [ - "renderer", - "grid_bounds", - "controls", - "score_element", - "level_element" - ], - "recalibrations": 8, - "cacheHits": 1, - "cacheMisses": 7 + "drifted": false, + "changes": [], + "recalibrations": 24, + "cacheHits": 24, + "cacheMisses": 0 } } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/eval_results.json @@ -26,7 +26,7 @@ }, "code_analysis": { "files": { - "total": 4, + "total": 5, "code": 2, "docs": 0, "unnecessary": 0, @@ -128,17 +128,19 @@ }, "control_discovery": { "move_left": "ArrowLeft (moved 2 col(s) left)", - "move_right": "ArrowRight (moved 4 col(s) right)", - "soft_drop": "ArrowDown (moved 2 row(s) down)", + "move_right": "NOT FOUND", + "soft_drop": "NOT FOUND", "hard_drop": "Space (teleported 11 rows to bottom)", "rotate_cw": "ArrowUp (shape changed (rotation))", "rotate_ccw": "NOT FOUND", "key:ArrowLeft": "moved 2 col(s) left", - "key:ArrowRight": "moved 4 col(s) right", + "key:ArrowRight": "other change (disappeared=2, appeared=2)", + "key:d": "other change (disappeared=3, appeared=3)", + "key:l": "no change", "key:ArrowUp": "shape changed (rotation)", "key:Space": "teleported 11 rows to bottom", "key:s": "no change", - "key:ArrowDown": "moved 2 row(s) down", + "key:ArrowDown": "other change (disappeared=3, appeared=3)", "key:z": "other change", "key:Control": "grid empty before press (no piece)" }, @@ -195,8 +197,8 @@ }, { "name": "move_down", - "pass": true, - "detail": "grid state changed after key press (grid-verified)" + "pass": false, + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rotate", @@ -211,7 +213,7 @@ { "name": "all_pieces_rotate", "pass": true, - "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [T:4 J:4 L:4]" + "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 J:4 T:4]" }, { "name": "piece_locks", @@ -226,12 +228,12 @@ { "name": "multiple_pieces", "pass": true, - "detail": "12 pieces placed during play session" + "detail": "21 pieces placed during play session" }, { "name": "line_clear", "pass": true, - "detail": "8 line(s) cleared (grid-verified)" + "detail": "16 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", @@ -251,7 +253,7 @@ { "name": "playable_30s", "pass": true, - "detail": "played for 30s, placed 17 pieces, no crashes" + "detail": "played for 30s, placed 22 pieces, no crashes" }, { "name": "multi_line_clear", @@ -266,7 +268,7 @@ { "name": "level_progression", "pass": false, - "detail": "skipped: only 1 lines cleared (need 10+)" + "detail": "skipped: only 4 lines cleared (need 10+)" }, { "name": "speed_progression", @@ -291,12 +293,12 @@ { "name": "soft_drop_distinct", "pass": false, - "detail": "skipped: could not test soft drop behavior" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rendering_clean", - "pass": false, - "detail": "skipped: not enough data to assess rendering trails" + "pass": true, + "detail": "piece movement clears old cells correctly" } ], "summary": { @@ -307,21 +309,21 @@ "score": 0.95 }, "gameplay": { - "pieces_placed": 17, - "lines_cleared": 8, - "max_score_observed": 300, + "pieces_placed": 22, + "lines_cleared": 16, + "max_score_observed": 700, "play_duration_seconds": 30, "errors_during_play": 0 }, "competitive_play": { - "duration_seconds": 60, - "pieces_placed": 2, - "total_lines_cleared": 1, - "single_clears": 1, + "duration_seconds": 61, + "pieces_placed": 25, + "total_lines_cleared": 4, + "single_clears": 4, "double_clears": 0, "triple_clears": 0, "tetris_clears": 0, - "max_combo": 1, + "max_combo": 2, "score_readings": [ 0, 100, @@ -336,129 +338,50 @@ 100, 100, 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100 + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 500, + 500, + 500, + 500, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600 ], - "score_final": 100, + "score_final": 600, "score_increases": [ + 100, + 100, + 300, 100 ], "level_readings": [ @@ -518,32 +441,6 @@ 1, 1, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1 ], "level_final": 1, @@ -552,37 +449,44 @@ "restart_available": false, "next_piece_visible": true, "speed_increased": false, - "bugs_detected": [] + "bugs_detected": [], + "rendering_trail_detected": false }, "session": { - "frames": 966, - "events_count": 15, + "frames": 899, + "events_count": 23, "pieces_spawned": 1, - "pieces_locked": 12, - "lines_cleared": 8, + "pieces_locked": 21, + "lines_cleared": 16, "piece_types_seen": [ + "Z", "I", + "L", + "O", + "S", + "J", "T" ], "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 28 + "load_time_ms": 26 }, "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true + "issues": [ + "no headings found" + ], + "issue_count": 1, + "pass": false }, "calibration_drift": { "drifted": false, "changes": [], - "recalibrations": 21, - "cacheHits": 21, + "recalibrations": 22, + "cacheHits": 22, "cacheMisses": 0 } - }, - "timed_out": true + } }, "outcome_score": 0.475, "score": 0.475, diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/gameplay-bot-report.json @@ -18,13 +18,15 @@ }, "control_discovery": { "move_left": "ArrowLeft (moved 2 col(s) left)", - "move_right": "ArrowRight (moved 2 col(s) right)", + "move_right": "NOT FOUND", "soft_drop": "NOT FOUND", "hard_drop": "Space (teleported 11 rows to bottom)", "rotate_cw": "ArrowUp (shape changed (rotation))", "rotate_ccw": "NOT FOUND", "key:ArrowLeft": "moved 2 col(s) left", - "key:ArrowRight": "moved 2 col(s) right", + "key:ArrowRight": "other change (disappeared=2, appeared=2)", + "key:d": "other change (disappeared=3, appeared=3)", + "key:l": "no change", "key:ArrowUp": "shape changed (rotation)", "key:Space": "teleported 11 rows to bottom", "key:s": "no change", @@ -101,7 +103,7 @@ { "name": "all_pieces_rotate", "pass": true, - "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [J:4 T:4 L:4]" + "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 J:4 T:4]" }, { "name": "piece_locks", @@ -116,12 +118,12 @@ { "name": "multiple_pieces", "pass": true, - "detail": "15 pieces placed during play session" + "detail": "21 pieces placed during play session" }, { "name": "line_clear", "pass": true, - "detail": "9 line(s) cleared (grid-verified)" + "detail": "16 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", @@ -141,7 +143,7 @@ { "name": "playable_30s", "pass": true, - "detail": "played for 30s, placed 21 pieces, no crashes" + "detail": "played for 30s, placed 22 pieces, no crashes" }, { "name": "multi_line_clear", @@ -156,7 +158,7 @@ { "name": "level_progression", "pass": false, - "detail": "skipped: only 7 lines cleared (need 10+)" + "detail": "skipped: only 4 lines cleared (need 10+)" }, { "name": "speed_progression", @@ -185,29 +187,29 @@ }, { "name": "rendering_clean", - "pass": false, - "detail": "skipped: not enough data to assess rendering trails" + "pass": true, + "detail": "piece movement clears old cells correctly" } ], "summary": { "total": 26, - "passed": 18, + "passed": 19, "failed": 1, - "skipped": 7, + "skipped": 6, "score": 0.95 }, "gameplay": { - "pieces_placed": 21, - "lines_cleared": 9, - "max_score_observed": 500, + "pieces_placed": 22, + "lines_cleared": 16, + "max_score_observed": 700, "play_duration_seconds": 30, "errors_during_play": 0 }, "competitive_play": { - "duration_seconds": 60, - "pieces_placed": 19, - "total_lines_cleared": 7, - "single_clears": 7, + "duration_seconds": 61, + "pieces_placed": 25, + "total_lines_cleared": 4, + "single_clears": 4, "double_clears": 0, "triple_clears": 0, "tetris_clears": 0, @@ -226,24 +228,23 @@ 100, 100, 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, 200, 200, - 300, - 300, - 300, - 300, - 300, - 400, - 400, - 500, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, 500, 500, 500, @@ -252,56 +253,25 @@ 600, 600, 600, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700, - 700 + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600, + 600 ], - "score_final": 700, + "score_final": 600, "score_increases": [ 100, 100, - 100, - 100, - 100, - 100, + 300, 100 ], "level_readings": [ @@ -361,12 +331,6 @@ 1, 1, 1, - 1, - 1, - 1, - 1, - 1, - 1, 1 ], "level_final": 1, @@ -375,31 +339,35 @@ "restart_available": false, "next_piece_visible": true, "speed_increased": false, - "bugs_detected": [] + "bugs_detected": [], + "rendering_trail_detected": false }, "session": { - "frames": 896, - "events_count": 16, + "frames": 899, + "events_count": 23, "pieces_spawned": 1, - "pieces_locked": 15, - "lines_cleared": 9, + "pieces_locked": 21, + "lines_cleared": 16, "piece_types_seen": [ - "O", "Z", + "I", + "L", + "O", "S", "J", - "I", "T" ], "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 32 + "load_time_ms": 26 }, "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true + "issues": [ + "no headings found" + ], + "issue_count": 1, + "pass": false }, "calibration_drift": { "drifted": false, diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=off_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=off_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5/eval_results.json @@ -31,7 +31,7 @@ }, "code_analysis": { "files": { - "total": 16, + "total": 17, "code": 4, "docs": 8, "unnecessary": 2, @@ -112,14 +112,15 @@ }, "gameplay_bot": { "pass": false, - "score": 0.88, - "total": 16, - "passed": 14, - "failed": 2, + "score": 0.77, + "total": 26, + "passed": 17, + "failed": 5, "report": { "implementation": { "renderer": "dom", "grid_detected": true, + "grid_detected_at": "initial", "grid_bounds": { "x": 375, "y": 30, @@ -133,15 +134,55 @@ "rotate": "x", "drop": "Space" }, - "start_mechanism": "click_canvas", + "control_discovery": { + "move_left": "ArrowLeft (moved 2 col(s) left)", + "move_right": "NOT FOUND", + "soft_drop": "ArrowDown (moved 1 row(s) down)", + "hard_drop": "Space (teleported 5 rows to bottom)", + "rotate_cw": "x (shape changed (rotation))", + "rotate_ccw": "NOT FOUND", + "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowRight": "other change (disappeared=2, appeared=2)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "no change", + "key:x": "shape changed (rotation)", + "key:Space": "teleported 5 rows to bottom", + "key:s": "no change", + "key:ArrowDown": "moved 1 row(s) down", + "key:z": "no change", + "key:Control": "no change" + }, + "start_mechanism": "auto", "score_element_found": true, - "grid_confidence": 1 + "grid_confidence": 0, + "survey": { + "has_overlay": false, + "has_canvas": false, + "has_dom_grid": true, + "visible_text": [ + "SCORE", + "0", + "LEVEL", + "1", + "LINES", + "0", + "NEXT PIECE", + "Controls", + "\u2190 \u2192 Move", + "\u2193 Soft Drop", + "Space Hard Drop", + "Z / X Rotate", + "Pause New Game" + ], + "clickable_elements": 3 + } }, "tests": [ { "name": "game_loads", "pass": true, - "detail": "no console errors" + "detail": "loaded with landmarks: body_content, dom_grid, tetris_ratio, cells_container" }, { "name": "game_starts", @@ -170,13 +211,8 @@ }, { "name": "rotate", - "pass": true, - "detail": "piece shape changed after rotate key (grid-verified, 1 rotation(s))" - }, - { - "name": "all_pieces_rotate", - "pass": true, - "detail": "rotation confirmed but could not identify individual piece types" + "pass": false, + "detail": "piece only reached 1 rotation state then stalled (expected at least 2 distinct non-baseline shapes)" }, { "name": "hard_drop", @@ -184,6 +220,11 @@ "detail": "piece immediately dropped to bottom (grid-verified)" }, { + "name": "all_pieces_rotate", + "pass": false, + "detail": "only 0 of 3 J/L/T rotated to 3+ distinct shapes (need 2) [J:2 L:2 T:2]" + }, + { "name": "piece_locks", "pass": true, "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" @@ -196,17 +237,22 @@ { "name": "multiple_pieces", "pass": true, - "detail": "4 pieces placed during play session" + "detail": "15 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear via grid reader" + "pass": true, + "detail": "7 line(s) cleared (grid-verified)" }, { - "name": "score_changes", + "name": "score_increases_on_clear", "pass": false, - "detail": "score stayed at 0" + "detail": "score stayed at 0 after clearing 7 line(s)" + }, + { + "name": "score_element_visible", + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", @@ -216,46 +262,260 @@ { "name": "playable_30s", "pass": true, - "detail": "played for 30s, placed 29 pieces, no crashes" + "detail": "played for 30s, placed 25 pieces, no crashes" + }, + { + "name": "multi_line_clear", + "pass": false, + "detail": "skipped: no multi-line clear opportunity occurred during play" + }, + { + "name": "score_scaling", + "pass": false, + "detail": "skipped: no multi-line clear occurred to test scaling" + }, + { + "name": "level_progression", + "pass": false, + "detail": "skipped: only 3 lines cleared (need 10+)" + }, + { + "name": "speed_progression", + "pass": false, + "detail": "skipped: level did not increase, cannot test speed change" + }, + { + "name": "next_piece_preview", + "pass": true, + "detail": "next piece preview display found" + }, + { + "name": "game_over_display", + "pass": false, + "detail": "no overlay or restart UI found (phase6)" + }, + { + "name": "counter_clockwise_rotation", + "pass": false, + "detail": "Z key does same as Up arrow or does not rotate" + }, + { + "name": "soft_drop_distinct", + "pass": true, + "detail": "Down arrow moves piece 1 row (distinct from hard drop)" + }, + { + "name": "rendering_clean", + "pass": true, + "detail": "piece movement clears old cells correctly" } ], "summary": { - "total": 16, - "passed": 14, - "failed": 2, - "score": 0.88 + "total": 26, + "passed": 17, + "failed": 5, + "skipped": 4, + "score": 0.77 }, "gameplay": { - "pieces_placed": 29, - "lines_cleared": 0, - "max_score_observed": 0, + "pieces_placed": 25, + "lines_cleared": 7, + "max_score_observed": 80, "play_duration_seconds": 30, "errors_during_play": 0 }, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 22, + "total_lines_cleared": 3, + "single_clears": 3, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 2, + "score_readings": [ + 0, + 40, + 40, + 40, + 40, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ], + "score_final": 120, + "score_increases": [ + 40, + 40, + 40 + ], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [], + "rendering_trail_detected": false + }, "session": { - "frames": 342, - "events_count": 10, + "frames": 857, + "events_count": 15, "pieces_spawned": 1, - "pieces_locked": 4, - "lines_cleared": 0, + "pieces_locked": 15, + "lines_cleared": 7, "piece_types_seen": [ - "unknown" + "I", + "S", + "J", + "O", + "Z", + "T", + "L" ], - "grid_read_success_rate": 0.96 + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 139 + "load_time_ms": 30 }, "accessibility": { "issues": [], "issue_count": 0, "pass": true + }, + "calibration_drift": { + "drifted": false, + "changes": [], + "recalibrations": 20, + "cacheHits": 19, + "cacheMisses": 1 } - }, - "timed_out": true + } }, - "outcome_score": 0.44, - "score": 0.44, + "outcome_score": 0.385, + "score": 0.385, "sonarqube": { "error": "no SonarQube token found", "score": 0 diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=off_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=off_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5/gameplay-bot-report.json @@ -2,6 +2,7 @@ "implementation": { "renderer": "dom", "grid_detected": true, + "grid_detected_at": "initial", "grid_bounds": { "x": 375, "y": 30, @@ -15,15 +16,55 @@ "rotate": "x", "drop": "Space" }, - "start_mechanism": "click_canvas", + "control_discovery": { + "move_left": "ArrowLeft (moved 2 col(s) left)", + "move_right": "NOT FOUND", + "soft_drop": "ArrowDown (moved 1 row(s) down)", + "hard_drop": "Space (teleported 5 rows to bottom)", + "rotate_cw": "x (shape changed (rotation))", + "rotate_ccw": "NOT FOUND", + "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowRight": "other change (disappeared=2, appeared=2)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "no change", + "key:x": "shape changed (rotation)", + "key:Space": "teleported 5 rows to bottom", + "key:s": "no change", + "key:ArrowDown": "moved 1 row(s) down", + "key:z": "no change", + "key:Control": "no change" + }, + "start_mechanism": "auto", "score_element_found": true, - "grid_confidence": 1 + "grid_confidence": 0, + "survey": { + "has_overlay": false, + "has_canvas": false, + "has_dom_grid": true, + "visible_text": [ + "SCORE", + "0", + "LEVEL", + "1", + "LINES", + "0", + "NEXT PIECE", + "Controls", + "← → Move", + "↓ Soft Drop", + "Space Hard Drop", + "Z / X Rotate", + "Pause New Game" + ], + "clickable_elements": 3 + } }, "tests": [ { "name": "game_loads", "pass": true, - "detail": "no console errors" + "detail": "loaded with landmarks: body_content, dom_grid, tetris_ratio, cells_container" }, { "name": "game_starts", @@ -52,13 +93,8 @@ }, { "name": "rotate", - "pass": true, - "detail": "piece shape changed after rotate key (grid-verified, 1 rotation(s))" - }, - { - "name": "all_pieces_rotate", - "pass": true, - "detail": "rotation confirmed but could not identify individual piece types" + "pass": false, + "detail": "piece only reached 1 rotation state then stalled (expected at least 2 distinct non-baseline shapes)" }, { "name": "hard_drop", @@ -66,6 +102,11 @@ "detail": "piece immediately dropped to bottom (grid-verified)" }, { + "name": "all_pieces_rotate", + "pass": false, + "detail": "only 0 of 3 J/L/T rotated to 3+ distinct shapes (need 2) [J:2 L:2 T:2]" + }, + { "name": "piece_locks", "pass": true, "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" @@ -78,17 +119,22 @@ { "name": "multiple_pieces", "pass": true, - "detail": "4 pieces placed during play session" + "detail": "15 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear via grid reader" + "pass": true, + "detail": "7 line(s) cleared (grid-verified)" }, { - "name": "score_changes", + "name": "score_increases_on_clear", "pass": false, - "detail": "score stayed at 0" + "detail": "score stayed at 0 after clearing 7 line(s)" + }, + { + "name": "score_element_visible", + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", @@ -98,39 +144,254 @@ { "name": "playable_30s", "pass": true, - "detail": "played for 30s, placed 29 pieces, no crashes" + "detail": "played for 30s, placed 25 pieces, no crashes" + }, + { + "name": "multi_line_clear", + "pass": false, + "detail": "skipped: no multi-line clear opportunity occurred during play" + }, + { + "name": "score_scaling", + "pass": false, + "detail": "skipped: no multi-line clear occurred to test scaling" + }, + { + "name": "level_progression", + "pass": false, + "detail": "skipped: only 3 lines cleared (need 10+)" + }, + { + "name": "speed_progression", + "pass": false, + "detail": "skipped: level did not increase, cannot test speed change" + }, + { + "name": "next_piece_preview", + "pass": true, + "detail": "next piece preview display found" + }, + { + "name": "game_over_display", + "pass": false, + "detail": "no overlay or restart UI found (phase6)" + }, + { + "name": "counter_clockwise_rotation", + "pass": false, + "detail": "Z key does same as Up arrow or does not rotate" + }, + { + "name": "soft_drop_distinct", + "pass": true, + "detail": "Down arrow moves piece 1 row (distinct from hard drop)" + }, + { + "name": "rendering_clean", + "pass": true, + "detail": "piece movement clears old cells correctly" } ], "summary": { - "total": 16, - "passed": 14, - "failed": 2, - "score": 0.88 + "total": 26, + "passed": 17, + "failed": 5, + "skipped": 4, + "score": 0.77 }, "gameplay": { - "pieces_placed": 29, - "lines_cleared": 0, - "max_score_observed": 0, + "pieces_placed": 25, + "lines_cleared": 7, + "max_score_observed": 80, "play_duration_seconds": 30, "errors_during_play": 0 }, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 22, + "total_lines_cleared": 3, + "single_clears": 3, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 2, + "score_readings": [ + 0, + 40, + 40, + 40, + 40, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ], + "score_final": 120, + "score_increases": [ + 40, + 40, + 40 + ], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [], + "rendering_trail_detected": false + }, "session": { - "frames": 342, - "events_count": 10, + "frames": 857, + "events_count": 15, "pieces_spawned": 1, - "pieces_locked": 4, - "lines_cleared": 0, + "pieces_locked": 15, + "lines_cleared": 7, "piece_types_seen": [ - "unknown" + "I", + "S", + "J", + "O", + "Z", + "T", + "L" ], - "grid_read_success_rate": 0.96 + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 139 + "load_time_ms": 30 }, "accessibility": { "issues": [], "issue_count": 0, "pass": true + }, + "calibration_drift": { + "drifted": false, + "changes": [], + "recalibrations": 20, + "cacheHits": 19, + "cacheMisses": 1 } } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=off_tgrep=on_tread=on_twrite=on_web=on_run4/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=off_tgrep=on_tread=on_twrite=on_web=on_run4/eval_results.json @@ -31,7 +31,7 @@ }, "code_analysis": { "files": { - "total": 13, + "total": 14, "code": 5, "docs": 5, "unnecessary": 2, @@ -112,17 +112,18 @@ }, "gameplay_bot": { "pass": false, - "score": 0.06, - "total": 16, - "passed": 1, - "failed": 15, + "score": 0.69, + "total": 26, + "passed": 11, + "failed": 5, "report": { "implementation": { - "renderer": "unknown", + "renderer": "dom", "grid_detected": true, + "grid_detected_at": "initial", "grid_bounds": { "x": 240, - "y": 90, + "y": 130, "width": 520, "height": 1040 }, @@ -133,127 +134,335 @@ "rotate": "ArrowUp", "drop": "Space" }, - "start_mechanism": "unknown", + "control_discovery": { + "move_left": "NOT FOUND", + "move_right": "NOT FOUND", + "soft_drop": "NOT FOUND", + "hard_drop": "Space (teleported 19 rows to bottom)", + "rotate_cw": "NOT FOUND", + "rotate_ccw": "NOT FOUND", + "key:ArrowLeft": "other change (disappeared=0, appeared=2)", + "key:a": "no change", + "key:h": "no change", + "key:ArrowRight": "other change (disappeared=0, appeared=1)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "no change", + "key:x": "other change (disappeared=0, appeared=1)", + "key:w": "no change", + "key:Space": "teleported 19 rows to bottom", + "key:s": "no change", + "key:ArrowDown": "other change (disappeared=0, appeared=3)", + "key:z": "other change", + "key:Control": "no change" + }, + "start_mechanism": "button", "score_element_found": true, - "grid_confidence": 0 + "grid_confidence": 0, + "survey": { + "has_overlay": false, + "has_canvas": false, + "has_dom_grid": true, + "visible_text": [ + "SCORE", + "0", + "LEVEL", + "1", + "LINES", + "0", + "NEXT", + "Controls", + "Arrow Keys - Move piece", + "Z / X - Rotate", + "Space - Hard drop", + "P - Pause/Resume", + "Start Game", + "Pause" + ], + "clickable_elements": 2 + } }, "tests": [ { "name": "game_loads", "pass": true, - "detail": "no console errors" + "detail": "loaded with landmarks: body_content, dom_grid, tetris_ratio, cells_container" }, { "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" + "pass": true, + "detail": "started via button (#startButton, \"Start Game\")" }, { "name": "auto_drop", - "pass": false, - "detail": "skipped: game did not start" + "pass": true, + "detail": "grid state changed after 5s with no input (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "skipped: game did not start" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", "pass": false, - "detail": "skipped: game did not start" + "detail": "no grid change detected after key press" }, { "name": "move_down", "pass": false, - "detail": "skipped: game did not start" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rotate", "pass": false, - "detail": "skipped: game did not start" + "detail": "no shape change detected after rotate key (0 distinct shape(s))" }, { - "name": "all_pieces_rotate", - "pass": false, - "detail": "skipped: game did not start" + "name": "hard_drop", + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { - "name": "hard_drop", + "name": "all_pieces_rotate", "pass": false, - "detail": "skipped: game did not start" + "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" }, { "name": "piece_locks", - "pass": false, - "detail": "skipped: game did not start" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 1 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "skipped: game did not start" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", "pass": false, - "detail": "skipped: mechanics phase not met" + "detail": "only 1 piece(s) detected, need at least 3" }, { "name": "line_clear", "pass": false, - "detail": "skipped: mechanics phase not met" + "detail": "could not trigger or detect a line clear via grid reader" }, { - "name": "score_changes", + "name": "score_increases_on_clear", "pass": false, - "detail": "skipped: mechanics phase not met" + "detail": "skipped: no lines cleared, cannot verify scoring" + }, + { + "name": "score_element_visible", + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: gameplay phase not met" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", + "pass": true, + "detail": "played for 30s, placed 10 pieces, no crashes" + }, + { + "name": "multi_line_clear", "pass": false, - "detail": "skipped: gameplay phase not met" + "detail": "skipped: no multi-line clear opportunity occurred during play" + }, + { + "name": "score_scaling", + "pass": false, + "detail": "skipped: no multi-line clear occurred to test scaling" + }, + { + "name": "level_progression", + "pass": false, + "detail": "skipped: only 0 lines cleared (need 10+)" + }, + { + "name": "speed_progression", + "pass": false, + "detail": "skipped: level did not increase, cannot test speed change" + }, + { + "name": "next_piece_preview", + "pass": true, + "detail": "next piece preview display found" + }, + { + "name": "game_over_display", + "pass": false, + "detail": "no overlay or restart UI found (phase6)" + }, + { + "name": "counter_clockwise_rotation", + "pass": false, + "detail": "skipped: could not test rotation direction" + }, + { + "name": "soft_drop_distinct", + "pass": false, + "detail": "skipped: no soft_drop key (game has only hard_drop)" + }, + { + "name": "rendering_clean", + "pass": false, + "detail": "skipped: not enough data to assess rendering trails" } ], "summary": { - "total": 16, - "passed": 1, - "failed": 15, - "score": 0.06 + "total": 26, + "passed": 11, + "failed": 5, + "skipped": 10, + "score": 0.69 }, "gameplay": { - "pieces_placed": 0, + "pieces_placed": 10, "lines_cleared": 0, "max_score_observed": 0, - "play_duration_seconds": 0, + "play_duration_seconds": 30, "errors_during_play": 0 }, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 0, + "total_lines_cleared": 0, + "single_clears": 0, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 0, + "score_readings": [ + 0, + 0 + ], + "score_final": 0, + "score_increases": [], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [] + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, + "frames": 1157, + "events_count": 6, + "pieces_spawned": 1, + "pieces_locked": 1, "lines_cleared": 0, "piece_types_seen": [], - "grid_read_success_rate": 0 + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 68 + "load_time_ms": 32 }, "accessibility": { "issues": [], "issue_count": 0, "pass": true + }, + "calibration_drift": { + "drifted": false, + "changes": [], + "recalibrations": 22, + "cacheHits": 22, + "cacheMisses": 0 } - }, - "timed_out": true + } }, - "outcome_score": 0.03, - "score": 0.03, + "outcome_score": 0.345, + "score": 0.345, "sonarqube": { "error": "no SonarQube token found", "score": 0 diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=off_tgrep=on_tread=on_twrite=on_web=on_run4/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=off_tgrep=on_tread=on_twrite=on_web=on_run4/gameplay-bot-report.json @@ -1,10 +1,11 @@ { "implementation": { - "renderer": "unknown", + "renderer": "dom", "grid_detected": true, + "grid_detected_at": "initial", "grid_bounds": { "x": 240, - "y": 90, + "y": 130, "width": 520, "height": 1040 }, @@ -15,120 +16,329 @@ "rotate": "ArrowUp", "drop": "Space" }, - "start_mechanism": "unknown", + "control_discovery": { + "move_left": "NOT FOUND", + "move_right": "NOT FOUND", + "soft_drop": "NOT FOUND", + "hard_drop": "Space (teleported 19 rows to bottom)", + "rotate_cw": "NOT FOUND", + "rotate_ccw": "NOT FOUND", + "key:ArrowLeft": "other change (disappeared=0, appeared=2)", + "key:a": "no change", + "key:h": "no change", + "key:ArrowRight": "other change (disappeared=0, appeared=1)", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "no change", + "key:x": "other change (disappeared=0, appeared=1)", + "key:w": "no change", + "key:Space": "teleported 19 rows to bottom", + "key:s": "no change", + "key:ArrowDown": "other change (disappeared=0, appeared=3)", + "key:z": "other change", + "key:Control": "no change" + }, + "start_mechanism": "button", "score_element_found": true, - "grid_confidence": 0 + "grid_confidence": 0, + "survey": { + "has_overlay": false, + "has_canvas": false, + "has_dom_grid": true, + "visible_text": [ + "SCORE", + "0", + "LEVEL", + "1", + "LINES", + "0", + "NEXT", + "Controls", + "Arrow Keys - Move piece", + "Z / X - Rotate", + "Space - Hard drop", + "P - Pause/Resume", + "Start Game", + "Pause" + ], + "clickable_elements": 2 + } }, "tests": [ { "name": "game_loads", "pass": true, - "detail": "no console errors" + "detail": "loaded with landmarks: body_content, dom_grid, tetris_ratio, cells_container" }, { "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" + "pass": true, + "detail": "started via button (#startButton, \"Start Game\")" }, { "name": "auto_drop", - "pass": false, - "detail": "skipped: game did not start" + "pass": true, + "detail": "grid state changed after 5s with no input (grid-verified)" }, { "name": "move_left", - "pass": false, - "detail": "skipped: game did not start" + "pass": true, + "detail": "grid state changed after key press (grid-verified)" }, { "name": "move_right", "pass": false, - "detail": "skipped: game did not start" + "detail": "no grid change detected after key press" }, { "name": "move_down", "pass": false, - "detail": "skipped: game did not start" + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rotate", "pass": false, - "detail": "skipped: game did not start" + "detail": "no shape change detected after rotate key (0 distinct shape(s))" }, { - "name": "all_pieces_rotate", - "pass": false, - "detail": "skipped: game did not start" + "name": "hard_drop", + "pass": true, + "detail": "piece immediately dropped to bottom (grid-verified)" }, { - "name": "hard_drop", + "name": "all_pieces_rotate", "pass": false, - "detail": "skipped: game did not start" + "detail": "skipped: not enough piece types to verify (saw 0 of J/L/T, need 2)" }, { "name": "piece_locks", - "pass": false, - "detail": "skipped: game did not start" + "pass": true, + "detail": "filled cells persist at bottom (grid-verified, 1 lock event(s))" }, { "name": "new_piece_spawns", - "pass": false, - "detail": "skipped: game did not start" + "pass": true, + "detail": "1 new piece(s) detected at top of grid" }, { "name": "multiple_pieces", "pass": false, - "detail": "skipped: mechanics phase not met" + "detail": "only 1 piece(s) detected, need at least 3" }, { "name": "line_clear", "pass": false, - "detail": "skipped: mechanics phase not met" + "detail": "could not trigger or detect a line clear via grid reader" }, { - "name": "score_changes", + "name": "score_increases_on_clear", "pass": false, - "detail": "skipped: mechanics phase not met" + "detail": "skipped: no lines cleared, cannot verify scoring" + }, + { + "name": "score_element_visible", + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", - "pass": false, - "detail": "skipped: gameplay phase not met" + "pass": true, + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", + "pass": true, + "detail": "played for 30s, placed 10 pieces, no crashes" + }, + { + "name": "multi_line_clear", + "pass": false, + "detail": "skipped: no multi-line clear opportunity occurred during play" + }, + { + "name": "score_scaling", + "pass": false, + "detail": "skipped: no multi-line clear occurred to test scaling" + }, + { + "name": "level_progression", + "pass": false, + "detail": "skipped: only 0 lines cleared (need 10+)" + }, + { + "name": "speed_progression", + "pass": false, + "detail": "skipped: level did not increase, cannot test speed change" + }, + { + "name": "next_piece_preview", + "pass": true, + "detail": "next piece preview display found" + }, + { + "name": "game_over_display", "pass": false, - "detail": "skipped: gameplay phase not met" + "detail": "no overlay or restart UI found (phase6)" + }, + { + "name": "counter_clockwise_rotation", + "pass": false, + "detail": "skipped: could not test rotation direction" + }, + { + "name": "soft_drop_distinct", + "pass": false, + "detail": "skipped: no soft_drop key (game has only hard_drop)" + }, + { + "name": "rendering_clean", + "pass": false, + "detail": "skipped: not enough data to assess rendering trails" } ], "summary": { - "total": 16, - "passed": 1, - "failed": 15, - "score": 0.06 + "total": 26, + "passed": 11, + "failed": 5, + "skipped": 10, + "score": 0.69 }, "gameplay": { - "pieces_placed": 0, + "pieces_placed": 10, "lines_cleared": 0, "max_score_observed": 0, - "play_duration_seconds": 0, + "play_duration_seconds": 30, "errors_during_play": 0 }, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 0, + "total_lines_cleared": 0, + "single_clears": 0, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 0, + "score_readings": [ + 0, + 0 + ], + "score_final": 0, + "score_increases": [], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [] + }, "session": { - "frames": 0, - "events_count": 0, - "pieces_spawned": 0, - "pieces_locked": 0, + "frames": 1157, + "events_count": 6, + "pieces_spawned": 1, + "pieces_locked": 1, "lines_cleared": 0, "piece_types_seen": [], - "grid_read_success_rate": 0 + "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 68 + "load_time_ms": 32 }, "accessibility": { "issues": [], "issue_count": 0, "pass": true + }, + "calibration_drift": { + "drifted": false, + "changes": [], + "recalibrations": 22, + "cacheHits": 22, + "cacheMisses": 0 } } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/eval_results.json @@ -26,7 +26,7 @@ }, "code_analysis": { "files": { - "total": 9, + "total": 10, "code": 2, "docs": 4, "unnecessary": 2, @@ -318,7 +318,7 @@ "grid_read_success_rate": 0 }, "performance": { - "load_time_ms": 34 + "load_time_ms": 36 }, "accessibility": { "issues": [], diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3/gameplay-bot-report.json @@ -205,7 +205,7 @@ "grid_read_success_rate": 0 }, "performance": { - "load_time_ms": 34 + "load_time_ms": 36 }, "accessibility": { "issues": [], diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/eval_results.json @@ -26,7 +26,7 @@ }, "code_analysis": { "files": { - "total": 4, + "total": 5, "code": 2, "docs": 0, "unnecessary": 0, @@ -127,18 +127,14 @@ "drop": "Space" }, "control_discovery": { - "move_left": "NOT FOUND", - "move_right": "NOT FOUND", + "move_left": "ArrowLeft (moved 2 col(s) left)", + "move_right": "ArrowRight (moved 2 col(s) right)", "soft_drop": "NOT FOUND", "hard_drop": "Space (teleported 7 rows to bottom)", "rotate_cw": "x (shape changed (rotation))", "rotate_ccw": "z (shape changed (rotation))", - "key:ArrowLeft": "other change (disappeared=2, appeared=2)", - "key:a": "no change", - "key:h": "no change", - "key:ArrowRight": "other change (disappeared=2, appeared=2)", - "key:d": "no change", - "key:l": "no change", + "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowRight": "moved 2 col(s) right", "key:ArrowUp": "no change", "key:x": "shape changed (rotation)", "key:Space": "teleported 7 rows to bottom", @@ -217,7 +213,7 @@ { "name": "all_pieces_rotate", "pass": true, - "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 J:4 T:4]" + "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 T:4 J:4]" }, { "name": "piece_locks", @@ -232,17 +228,17 @@ { "name": "multiple_pieces", "pass": true, - "detail": "12 pieces placed during play session" + "detail": "8 pieces placed during play session" }, { "name": "line_clear", "pass": true, - "detail": "14 line(s) cleared (grid-verified)" + "detail": "12 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", "pass": true, - "detail": "score went from 100 to 218 after line clear" + "detail": "score went from 61 to 181 after line clear" }, { "name": "score_element_visible", @@ -257,7 +253,7 @@ { "name": "playable_30s", "pass": true, - "detail": "played for 30s, placed 24 pieces, no crashes" + "detail": "played for 30s, placed 20 pieces, no crashes" }, { "name": "multi_line_clear", @@ -272,7 +268,7 @@ { "name": "level_progression", "pass": false, - "detail": "skipped: only 4 lines cleared (need 10+)" + "detail": "skipped: only 1 lines cleared (need 10+)" }, { "name": "speed_progression", @@ -313,21 +309,21 @@ "score": 1 }, "gameplay": { - "pieces_placed": 24, - "lines_cleared": 14, - "max_score_observed": 542, + "pieces_placed": 20, + "lines_cleared": 12, + "max_score_observed": 377, "play_duration_seconds": 30, "errors_during_play": 0 }, "competitive_play": { "duration_seconds": 60, - "pieces_placed": 13, - "total_lines_cleared": 4, - "single_clears": 4, + "pieces_placed": 5, + "total_lines_cleared": 1, + "single_clears": 1, "double_clears": 0, "triple_clears": 0, "tetris_clears": 0, - "max_combo": 2, + "max_combo": 1, "score_readings": [ 1, 3, @@ -336,7 +332,7 @@ 4, 5, 5, - 5, + 6, 6, 6, 7, @@ -359,117 +355,134 @@ 14, 15, 15, - 15, + 16, 16, 16, 17, 17, 18, 18, - 18, + 40, 40, 40, 41, 41, - 59, - 60, 60, - 78, + 80, + 80, + 81, + 81, + 98, 99, 99, - 100, - 100, - 101, - 217, - 217, - 235, + 218, + 218, + 219, + 219, + 219, + 220, + 220, + 221, + 221, + 222, + 222, + 223, + 223, + 223, + 224, + 224, + 225, + 225, + 226, + 226, + 226, + 227, + 227, + 228, + 228, + 229, + 229, + 230, + 230, + 230, + 231, + 231, + 232, + 232, + 233, + 233, + 233, + 233, + 234, + 234, + 234, 235, 235, - 354, - 354, - 355, - 355, - 356, - 372, - 372, - 373, - 373, - 391, - 391, - 391, - 411, - 411, - 412, - 412, - 427, - 428, - 428, - 546, - 546, - 547, - 547, - 665, - 665, - 666, - 666, - 666, - 667, - 667, - 668, - 668, - 669, - 669, - 670, - 670, - 671, - 671, - 671, - 672, - 672, - 673, - 673, - 674, - 674, - 675, - 675, - 675, - 676, - 676, - 677, - 677, - 678, - 678, - 679, - 679, - 680, - 680, - 680, - 680, - 680, - 681, - 681, - 682, - 682, - 683, - 683, - 683, - 684, - 684, - 685, - 685, - 686, - 686, - 687, - 687, - 688, - 688, - 688, - 689, - 689, - 690, - 690 + 236, + 236, + 237, + 237, + 238, + 238, + 238, + 239, + 239, + 240, + 240, + 241, + 241, + 242, + 242, + 242, + 243, + 243, + 244, + 244, + 245, + 245, + 246, + 246, + 247, + 247, + 247, + 247, + 247, + 248, + 248, + 249, + 249, + 250, + 250, + 251, + 251, + 251, + 252, + 252, + 253, + 253, + 254, + 254, + 255, + 255, + 256, + 256, + 256, + 257, + 257, + 258, + 258, + 259, + 259, + 260, + 260, + 260, + 260, + 260, + 261, + 261, + 262 ], - "score_final": 690, + "score_final": 262, "score_increases": [ 2, 1, @@ -489,27 +502,30 @@ 1, 22, 1, - 18, - 1, - 18, - 21, + 19, + 20, 1, + 17, 1, - 116, - 18, 119, 1, 1, - 16, 1, - 18, - 20, 1, - 15, 1, - 118, 1, - 118, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, 1, 1, 1, @@ -606,6 +622,15 @@ 1, 1, 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, 1 ], "level_final": 1, @@ -617,25 +642,21 @@ "bugs_detected": [] }, "session": { - "frames": 866, - "events_count": 16, + "frames": 923, + "events_count": 13, "pieces_spawned": 1, - "pieces_locked": 12, - "lines_cleared": 14, + "pieces_locked": 8, + "lines_cleared": 12, "piece_types_seen": [ - "unknown", "I", - "L", - "O", "J", - "Z", "S", "T" ], "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 26 + "load_time_ms": 28 }, "accessibility": { "issues": [], @@ -645,8 +666,8 @@ "calibration_drift": { "drifted": false, "changes": [], - "recalibrations": 18, - "cacheHits": 18, + "recalibrations": 25, + "cacheHits": 25, "cacheMisses": 0 } } diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/gameplay-bot-report.json @@ -17,18 +17,14 @@ "drop": "Space" }, "control_discovery": { - "move_left": "NOT FOUND", - "move_right": "NOT FOUND", + "move_left": "ArrowLeft (moved 2 col(s) left)", + "move_right": "ArrowRight (moved 2 col(s) right)", "soft_drop": "NOT FOUND", "hard_drop": "Space (teleported 7 rows to bottom)", "rotate_cw": "x (shape changed (rotation))", "rotate_ccw": "z (shape changed (rotation))", - "key:ArrowLeft": "other change (disappeared=2, appeared=2)", - "key:a": "no change", - "key:h": "no change", - "key:ArrowRight": "other change (disappeared=2, appeared=2)", - "key:d": "no change", - "key:l": "no change", + "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowRight": "moved 2 col(s) right", "key:ArrowUp": "no change", "key:x": "shape changed (rotation)", "key:Space": "teleported 7 rows to bottom", @@ -107,7 +103,7 @@ { "name": "all_pieces_rotate", "pass": true, - "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 J:4 T:4]" + "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 T:4 J:4]" }, { "name": "piece_locks", @@ -122,17 +118,17 @@ { "name": "multiple_pieces", "pass": true, - "detail": "12 pieces placed during play session" + "detail": "8 pieces placed during play session" }, { "name": "line_clear", "pass": true, - "detail": "14 line(s) cleared (grid-verified)" + "detail": "12 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", "pass": true, - "detail": "score went from 100 to 218 after line clear" + "detail": "score went from 61 to 181 after line clear" }, { "name": "score_element_visible", @@ -147,7 +143,7 @@ { "name": "playable_30s", "pass": true, - "detail": "played for 30s, placed 24 pieces, no crashes" + "detail": "played for 30s, placed 20 pieces, no crashes" }, { "name": "multi_line_clear", @@ -162,7 +158,7 @@ { "name": "level_progression", "pass": false, - "detail": "skipped: only 4 lines cleared (need 10+)" + "detail": "skipped: only 1 lines cleared (need 10+)" }, { "name": "speed_progression", @@ -203,21 +199,21 @@ "score": 1 }, "gameplay": { - "pieces_placed": 24, - "lines_cleared": 14, - "max_score_observed": 542, + "pieces_placed": 20, + "lines_cleared": 12, + "max_score_observed": 377, "play_duration_seconds": 30, "errors_during_play": 0 }, "competitive_play": { "duration_seconds": 60, - "pieces_placed": 13, - "total_lines_cleared": 4, - "single_clears": 4, + "pieces_placed": 5, + "total_lines_cleared": 1, + "single_clears": 1, "double_clears": 0, "triple_clears": 0, "tetris_clears": 0, - "max_combo": 2, + "max_combo": 1, "score_readings": [ 1, 3, @@ -226,7 +222,7 @@ 4, 5, 5, - 5, + 6, 6, 6, 7, @@ -249,117 +245,134 @@ 14, 15, 15, - 15, + 16, 16, 16, 17, 17, 18, 18, - 18, + 40, 40, 40, 41, 41, - 59, - 60, 60, - 78, + 80, + 80, + 81, + 81, + 98, 99, 99, - 100, - 100, - 101, - 217, - 217, - 235, + 218, + 218, + 219, + 219, + 219, + 220, + 220, + 221, + 221, + 222, + 222, + 223, + 223, + 223, + 224, + 224, + 225, + 225, + 226, + 226, + 226, + 227, + 227, + 228, + 228, + 229, + 229, + 230, + 230, + 230, + 231, + 231, + 232, + 232, + 233, + 233, + 233, + 233, + 234, + 234, + 234, 235, 235, - 354, - 354, - 355, - 355, - 356, - 372, - 372, - 373, - 373, - 391, - 391, - 391, - 411, - 411, - 412, - 412, - 427, - 428, - 428, - 546, - 546, - 547, - 547, - 665, - 665, - 666, - 666, - 666, - 667, - 667, - 668, - 668, - 669, - 669, - 670, - 670, - 671, - 671, - 671, - 672, - 672, - 673, - 673, - 674, - 674, - 675, - 675, - 675, - 676, - 676, - 677, - 677, - 678, - 678, - 679, - 679, - 680, - 680, - 680, - 680, - 680, - 681, - 681, - 682, - 682, - 683, - 683, - 683, - 684, - 684, - 685, - 685, - 686, - 686, - 687, - 687, - 688, - 688, - 688, - 689, - 689, - 690, - 690 + 236, + 236, + 237, + 237, + 238, + 238, + 238, + 239, + 239, + 240, + 240, + 241, + 241, + 242, + 242, + 242, + 243, + 243, + 244, + 244, + 245, + 245, + 246, + 246, + 247, + 247, + 247, + 247, + 247, + 248, + 248, + 249, + 249, + 250, + 250, + 251, + 251, + 251, + 252, + 252, + 253, + 253, + 254, + 254, + 255, + 255, + 256, + 256, + 256, + 257, + 257, + 258, + 258, + 259, + 259, + 260, + 260, + 260, + 260, + 260, + 261, + 261, + 262 ], - "score_final": 690, + "score_final": 262, "score_increases": [ 2, 1, @@ -379,27 +392,30 @@ 1, 22, 1, - 18, - 1, - 18, - 21, + 19, + 20, 1, + 17, 1, - 116, - 18, 119, 1, 1, - 16, 1, - 18, - 20, 1, - 15, 1, - 118, 1, - 118, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, 1, 1, 1, @@ -496,6 +512,15 @@ 1, 1, 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, 1 ], "level_final": 1, @@ -507,25 +532,21 @@ "bugs_detected": [] }, "session": { - "frames": 866, - "events_count": 16, + "frames": 923, + "events_count": 13, "pieces_spawned": 1, - "pieces_locked": 12, - "lines_cleared": 14, + "pieces_locked": 8, + "lines_cleared": 12, "piece_types_seen": [ - "unknown", "I", - "L", - "O", "J", - "Z", "S", "T" ], "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 26 + "load_time_ms": 28 }, "accessibility": { "issues": [], @@ -535,8 +556,8 @@ "calibration_drift": { "drifted": false, "changes": [], - "recalibrations": 18, - "cacheHits": 18, + "recalibrations": 25, + "cacheHits": 25, "cacheMisses": 0 } } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=on_tread=off_twrite=on_web=off_run5/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=on_tread=off_twrite=on_web=off_run5/eval_results.json @@ -26,7 +26,7 @@ }, "code_analysis": { "files": { - "total": 15, + "total": 16, "code": 2, "docs": 10, "unnecessary": 1, @@ -129,23 +129,20 @@ "drop": "Space" }, "control_discovery": { - "move_left": "NOT FOUND", + "move_left": "ArrowLeft (moved 2 col(s) left)", "move_right": "NOT FOUND", "soft_drop": "NOT FOUND", "hard_drop": "Space (teleported 11 rows to bottom)", "rotate_cw": "ArrowUp (shape changed (rotation))", - "rotate_ccw": "z (shape changed (rotation))", - "key:ArrowLeft": "other change (disappeared=2, appeared=2)", - "key:a": "no change", - "key:h": "no change", - "key:ArrowRight": "other change (disappeared=2, appeared=2)", + "rotate_ccw": "NOT FOUND", + "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowRight": "other change (disappeared=3, appeared=3)", "key:d": "no change", "key:l": "no change", "key:ArrowUp": "shape changed (rotation)", "key:Space": "teleported 11 rows to bottom", "key:s": "no change", - "key:ArrowDown": "no change", - "key:z": "shape changed (rotation)" + "key:ArrowDown": "no change" }, "start_mechanism": "auto", "score_element_found": true, @@ -223,7 +220,7 @@ { "name": "all_pieces_rotate", "pass": true, - "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 J:4 T:4]" + "detail": "2 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 J:4]" }, { "name": "piece_locks", @@ -238,12 +235,12 @@ { "name": "multiple_pieces", "pass": true, - "detail": "22 pieces placed during play session" + "detail": "6 pieces placed during play session" }, { "name": "line_clear", "pass": true, - "detail": "18 line(s) cleared (grid-verified)" + "detail": "4 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", @@ -263,7 +260,7 @@ { "name": "playable_30s", "pass": true, - "detail": "played for 30s, placed 33 pieces, no crashes" + "detail": "played for 30s, placed 7 pieces, no crashes" }, { "name": "multi_line_clear", @@ -278,7 +275,7 @@ { "name": "level_progression", "pass": false, - "detail": "skipped: only 4 lines cleared (need 10+)" + "detail": "skipped: only 2 lines cleared (need 10+)" }, { "name": "speed_progression", @@ -319,17 +316,17 @@ "score": 1 }, "gameplay": { - "pieces_placed": 33, - "lines_cleared": 18, - "max_score_observed": 700, + "pieces_placed": 7, + "lines_cleared": 4, + "max_score_observed": 100, "play_duration_seconds": 30, "errors_during_play": 0 }, "competitive_play": { "duration_seconds": 60, - "pieces_placed": 11, - "total_lines_cleared": 4, - "single_clears": 4, + "pieces_placed": 6, + "total_lines_cleared": 2, + "single_clears": 2, "double_clears": 0, "triple_clears": 0, "tetris_clears": 0, @@ -341,114 +338,120 @@ 100, 100, 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, 200, 200, 200, - 300, - 300, - 300, - 300, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400 + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200 ], - "score_final": 400, + "score_final": 200, "score_increases": [ 100, - 100, - 100, 100 ], "level_readings": [ @@ -523,6 +526,11 @@ 1, 1, 1, + 1, + 1, + 1, + 1, + 1, 1 ], "level_final": 1, @@ -534,23 +542,22 @@ "bugs_detected": [] }, "session": { - "frames": 766, - "events_count": 21, + "frames": 1071, + "events_count": 10, "pieces_spawned": 1, - "pieces_locked": 22, - "lines_cleared": 18, + "pieces_locked": 6, + "lines_cleared": 4, "piece_types_seen": [ "unknown", "L", "O", - "T", - "J", + "Z", "I" ], "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 37 + "load_time_ms": 32 }, "accessibility": { "issues": [], @@ -560,9 +567,9 @@ "calibration_drift": { "drifted": false, "changes": [], - "recalibrations": 17, - "cacheHits": 17, - "cacheMisses": 0 + "recalibrations": 21, + "cacheHits": 19, + "cacheMisses": 2 } } }, diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=on_tread=off_twrite=on_web=off_run5/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=on_tread=off_twrite=on_web=off_run5/gameplay-bot-report.json @@ -17,23 +17,20 @@ "drop": "Space" }, "control_discovery": { - "move_left": "NOT FOUND", + "move_left": "ArrowLeft (moved 2 col(s) left)", "move_right": "NOT FOUND", "soft_drop": "NOT FOUND", "hard_drop": "Space (teleported 11 rows to bottom)", "rotate_cw": "ArrowUp (shape changed (rotation))", - "rotate_ccw": "z (shape changed (rotation))", - "key:ArrowLeft": "other change (disappeared=2, appeared=2)", - "key:a": "no change", - "key:h": "no change", - "key:ArrowRight": "other change (disappeared=2, appeared=2)", + "rotate_ccw": "NOT FOUND", + "key:ArrowLeft": "moved 2 col(s) left", + "key:ArrowRight": "other change (disappeared=3, appeared=3)", "key:d": "no change", "key:l": "no change", "key:ArrowUp": "shape changed (rotation)", "key:Space": "teleported 11 rows to bottom", "key:s": "no change", - "key:ArrowDown": "no change", - "key:z": "shape changed (rotation)" + "key:ArrowDown": "no change" }, "start_mechanism": "auto", "score_element_found": true, @@ -111,7 +108,7 @@ { "name": "all_pieces_rotate", "pass": true, - "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 J:4 T:4]" + "detail": "2 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 J:4]" }, { "name": "piece_locks", @@ -126,12 +123,12 @@ { "name": "multiple_pieces", "pass": true, - "detail": "22 pieces placed during play session" + "detail": "6 pieces placed during play session" }, { "name": "line_clear", "pass": true, - "detail": "18 line(s) cleared (grid-verified)" + "detail": "4 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", @@ -151,7 +148,7 @@ { "name": "playable_30s", "pass": true, - "detail": "played for 30s, placed 33 pieces, no crashes" + "detail": "played for 30s, placed 7 pieces, no crashes" }, { "name": "multi_line_clear", @@ -166,7 +163,7 @@ { "name": "level_progression", "pass": false, - "detail": "skipped: only 4 lines cleared (need 10+)" + "detail": "skipped: only 2 lines cleared (need 10+)" }, { "name": "speed_progression", @@ -207,17 +204,17 @@ "score": 1 }, "gameplay": { - "pieces_placed": 33, - "lines_cleared": 18, - "max_score_observed": 700, + "pieces_placed": 7, + "lines_cleared": 4, + "max_score_observed": 100, "play_duration_seconds": 30, "errors_during_play": 0 }, "competitive_play": { "duration_seconds": 60, - "pieces_placed": 11, - "total_lines_cleared": 4, - "single_clears": 4, + "pieces_placed": 6, + "total_lines_cleared": 2, + "single_clears": 2, "double_clears": 0, "triple_clears": 0, "tetris_clears": 0, @@ -229,114 +226,120 @@ 100, 100, 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, 200, 200, 200, - 300, - 300, - 300, - 300, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400, - 400 + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200 ], - "score_final": 400, + "score_final": 200, "score_increases": [ 100, - 100, - 100, 100 ], "level_readings": [ @@ -411,6 +414,11 @@ 1, 1, 1, + 1, + 1, + 1, + 1, + 1, 1 ], "level_final": 1, @@ -422,23 +430,22 @@ "bugs_detected": [] }, "session": { - "frames": 766, - "events_count": 21, + "frames": 1071, + "events_count": 10, "pieces_spawned": 1, - "pieces_locked": 22, - "lines_cleared": 18, + "pieces_locked": 6, + "lines_cleared": 4, "piece_types_seen": [ "unknown", "L", "O", - "T", - "J", + "Z", "I" ], "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 37 + "load_time_ms": 32 }, "accessibility": { "issues": [], @@ -448,8 +455,8 @@ "calibration_drift": { "drifted": false, "changes": [], - "recalibrations": 17, - "cacheHits": 17, - "cacheMisses": 0 + "recalibrations": 21, + "cacheHits": 19, + "cacheMisses": 2 } } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/eval_results.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/eval_results.json @@ -31,7 +31,7 @@ }, "code_analysis": { "files": { - "total": 11, + "total": 12, "code": 4, "docs": 5, "unnecessary": 2, @@ -135,19 +135,19 @@ "drop": "Space" }, "control_discovery": { - "move_left": "ArrowLeft (moved 2 col(s) left)", - "move_right": "ArrowRight (moved 2 col(s) right)", - "soft_drop": "s (moved 2 row(s) down)", + "move_left": "NOT FOUND", + "move_right": "ArrowRight (moved 4 col(s) right)", + "soft_drop": "s (moved 1 row(s) down)", "hard_drop": "Space (teleported 8 rows to bottom)", - "rotate_cw": "NOT FOUND", + "rotate_cw": "ArrowUp (shape changed (rotation))", "rotate_ccw": "NOT FOUND", - "key:ArrowLeft": "moved 2 col(s) left", - "key:ArrowRight": "moved 2 col(s) right", - "key:ArrowUp": "no change", - "key:x": "no change", - "key:w": "moved 2 row(s) down", + "key:ArrowLeft": "other change (disappeared=2, appeared=2)", + "key:a": "other change (disappeared=2, appeared=2)", + "key:h": "other change (disappeared=3, appeared=3)", + "key:ArrowRight": "moved 4 col(s) right", + "key:ArrowUp": "shape changed (rotation)", "key:Space": "teleported 8 rows to bottom", - "key:s": "moved 2 row(s) down", + "key:s": "moved 1 row(s) down", "key:z": "no change", "key:Control": "no change" }, @@ -227,7 +227,7 @@ { "name": "all_pieces_rotate", "pass": true, - "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 J:4 T:4]" + "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 T:4 J:4]" }, { "name": "piece_locks", @@ -242,12 +242,12 @@ { "name": "multiple_pieces", "pass": true, - "detail": "14 pieces placed during play session" + "detail": "10 pieces placed during play session" }, { "name": "line_clear", "pass": true, - "detail": "16 line(s) cleared (grid-verified)" + "detail": "6 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", @@ -267,7 +267,7 @@ { "name": "playable_30s", "pass": true, - "detail": "played for 30s, placed 30 pieces, no crashes" + "detail": "played for 30s, placed 15 pieces, no crashes" }, { "name": "multi_line_clear", @@ -282,7 +282,7 @@ { "name": "level_progression", "pass": false, - "detail": "skipped: only 1 lines cleared (need 10+)" + "detail": "skipped: only 5 lines cleared (need 10+)" }, { "name": "speed_progression", @@ -323,21 +323,21 @@ "score": 0.9 }, "gameplay": { - "pieces_placed": 30, - "lines_cleared": 16, - "max_score_observed": 300, + "pieces_placed": 15, + "lines_cleared": 6, + "max_score_observed": 200, "play_duration_seconds": 30, "errors_during_play": 0 }, "competitive_play": { "duration_seconds": 60, - "pieces_placed": 6, - "total_lines_cleared": 1, - "single_clears": 1, + "pieces_placed": 14, + "total_lines_cleared": 5, + "single_clears": 5, "double_clears": 0, "triple_clears": 0, "tetris_clears": 0, - "max_combo": 1, + "max_combo": 3, "score_readings": [ 0, 100, @@ -346,90 +346,87 @@ 100, 100, 100, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 300, + 300, + 300, + 400, + 400, + 400, + 400, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500 + ], + "score_final": 500, + "score_increases": [ 100, 100, 100, 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100 - ], - "score_final": 100, - "score_increases": [ 100 ], "level_readings": [ @@ -501,14 +498,6 @@ 1, 1, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1 ], "level_final": 1, @@ -520,21 +509,23 @@ "bugs_detected": [] }, "session": { - "frames": 811, - "events_count": 15, + "frames": 964, + "events_count": 12, "pieces_spawned": 1, - "pieces_locked": 14, - "lines_cleared": 16, + "pieces_locked": 10, + "lines_cleared": 6, "piece_types_seen": [ - "S", + "J", + "O", + "T", "Z", - "L", - "T" + "I", + "L" ], "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 36 + "load_time_ms": 29 }, "accessibility": { "issues": [], @@ -544,12 +535,11 @@ "calibration_drift": { "drifted": false, "changes": [], - "recalibrations": 19, - "cacheHits": 19, + "recalibrations": 23, + "cacheHits": 23, "cacheMisses": 0 } - }, - "timed_out": true + } }, "outcome_score": 0.45, "score": 0.45, diff --git a/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4/gameplay-bot-report.json @@ -17,19 +17,19 @@ "drop": "Space" }, "control_discovery": { - "move_left": "ArrowLeft (moved 2 col(s) left)", - "move_right": "ArrowRight (moved 2 col(s) right)", - "soft_drop": "s (moved 2 row(s) down)", + "move_left": "NOT FOUND", + "move_right": "ArrowRight (moved 4 col(s) right)", + "soft_drop": "s (moved 1 row(s) down)", "hard_drop": "Space (teleported 8 rows to bottom)", - "rotate_cw": "NOT FOUND", + "rotate_cw": "ArrowUp (shape changed (rotation))", "rotate_ccw": "NOT FOUND", - "key:ArrowLeft": "moved 2 col(s) left", - "key:ArrowRight": "moved 2 col(s) right", - "key:ArrowUp": "no change", - "key:x": "no change", - "key:w": "moved 2 row(s) down", + "key:ArrowLeft": "other change (disappeared=2, appeared=2)", + "key:a": "other change (disappeared=2, appeared=2)", + "key:h": "other change (disappeared=3, appeared=3)", + "key:ArrowRight": "moved 4 col(s) right", + "key:ArrowUp": "shape changed (rotation)", "key:Space": "teleported 8 rows to bottom", - "key:s": "moved 2 row(s) down", + "key:s": "moved 1 row(s) down", "key:z": "no change", "key:Control": "no change" }, @@ -109,7 +109,7 @@ { "name": "all_pieces_rotate", "pass": true, - "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 J:4 T:4]" + "detail": "3 J/L/T piece type(s) rotated to 3+ distinct shapes [L:4 T:4 J:4]" }, { "name": "piece_locks", @@ -124,12 +124,12 @@ { "name": "multiple_pieces", "pass": true, - "detail": "14 pieces placed during play session" + "detail": "10 pieces placed during play session" }, { "name": "line_clear", "pass": true, - "detail": "16 line(s) cleared (grid-verified)" + "detail": "6 line(s) cleared (grid-verified)" }, { "name": "score_increases_on_clear", @@ -149,7 +149,7 @@ { "name": "playable_30s", "pass": true, - "detail": "played for 30s, placed 30 pieces, no crashes" + "detail": "played for 30s, placed 15 pieces, no crashes" }, { "name": "multi_line_clear", @@ -164,7 +164,7 @@ { "name": "level_progression", "pass": false, - "detail": "skipped: only 1 lines cleared (need 10+)" + "detail": "skipped: only 5 lines cleared (need 10+)" }, { "name": "speed_progression", @@ -205,21 +205,21 @@ "score": 0.9 }, "gameplay": { - "pieces_placed": 30, - "lines_cleared": 16, - "max_score_observed": 300, + "pieces_placed": 15, + "lines_cleared": 6, + "max_score_observed": 200, "play_duration_seconds": 30, "errors_during_play": 0 }, "competitive_play": { "duration_seconds": 60, - "pieces_placed": 6, - "total_lines_cleared": 1, - "single_clears": 1, + "pieces_placed": 14, + "total_lines_cleared": 5, + "single_clears": 5, "double_clears": 0, "triple_clears": 0, "tetris_clears": 0, - "max_combo": 1, + "max_combo": 3, "score_readings": [ 0, 100, @@ -228,92 +228,89 @@ 100, 100, 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, - 100, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 300, + 300, + 300, + 400, + 400, + 400, + 400, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500, + 500 + ], + "score_final": 500, + "score_increases": [ 100, 100, 100, 100, 100 ], - "score_final": 100, - "score_increases": [ - 100 - ], "level_readings": [ 1, 1, @@ -383,14 +380,6 @@ 1, 1, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 1 ], "level_final": 1, @@ -402,21 +391,23 @@ "bugs_detected": [] }, "session": { - "frames": 811, - "events_count": 15, + "frames": 964, + "events_count": 12, "pieces_spawned": 1, - "pieces_locked": 14, - "lines_cleared": 16, + "pieces_locked": 10, + "lines_cleared": 6, "piece_types_seen": [ - "S", + "J", + "O", + "T", "Z", - "L", - "T" + "I", + "L" ], "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 36 + "load_time_ms": 29 }, "accessibility": { "issues": [], @@ -426,8 +417,8 @@ "calibration_drift": { "drifted": false, "changes": [], - "recalibrations": 19, - "cacheHits": 19, + "recalibrations": 23, + "cacheHits": 23, "cacheMisses": 0 } } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=off_tread=on_twrite=off_web=on_run6/eval_results.json b/results/runs/tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=off_tread=on_twrite=off_web=on_run6/eval_results.json @@ -31,7 +31,7 @@ }, "code_analysis": { "files": { - "total": 11, + "total": 12, "code": 3, "docs": 5, "unnecessary": 2, @@ -112,17 +112,18 @@ }, "gameplay_bot": { "pass": false, - "score": 0.88, - "total": 16, + "score": 0.78, + "total": 26, "passed": 14, - "failed": 2, + "failed": 4, "report": { "implementation": { "renderer": "dom", "grid_detected": true, + "grid_detected_at": "initial", "grid_bounds": { "x": 316.5, - "y": 0, + "y": 30, "width": 417, "height": 827 }, @@ -133,20 +134,68 @@ "rotate": "ArrowUp", "drop": "Space" }, - "start_mechanism": "click_canvas", + "control_discovery": { + "move_left": "NOT FOUND", + "move_right": "NOT FOUND", + "soft_drop": "NOT FOUND", + "hard_drop": "NOT FOUND", + "rotate_cw": "NOT FOUND", + "rotate_ccw": "NOT FOUND", + "key:ArrowLeft": "no change", + "key:a": "no change", + "key:h": "no change", + "key:ArrowRight": "no change", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "no change", + "key:x": "no change", + "key:w": "no change", + "key:Space": "no change", + "key:Enter": "no change", + "key:ArrowDown": "no change", + "key:s": "no change", + "key:z": "no change", + "key:Control": "no change" + }, + "start_mechanism": "button", "score_element_found": true, - "grid_confidence": 1 + "grid_confidence": 0, + "survey": { + "has_overlay": false, + "has_canvas": false, + "has_dom_grid": false, + "visible_text": [ + "SCORE", + "0", + "LEVEL", + "1", + "LINES", + "0", + "NEXT PIECE", + "START GAME", + "PAUSE", + "READY", + "CONTROLS", + "\u2190 \u2192 - Move Left/Right", + "\u2193 - Soft Drop", + "Space - Hard Drop", + "Z - Rotate Left", + "X - Rotate Right", + "P - Toggle Pause" + ], + "clickable_elements": 2 + } }, "tests": [ { "name": "game_loads", "pass": true, - "detail": "no console errors" + "detail": "loaded with landmarks: body_content, dom_grid, tetris_ratio" }, { "name": "game_starts", "pass": true, - "detail": "started via click_canvas" + "detail": "started via button (#startBtn, \"Start Game\")" }, { "name": "auto_drop", @@ -155,8 +204,8 @@ }, { "name": "move_left", - "pass": true, - "detail": "grid state changed after key press (grid-verified)" + "pass": false, + "detail": "no grid change detected after key press" }, { "name": "move_right", @@ -165,18 +214,13 @@ }, { "name": "move_down", - "pass": true, - "detail": "grid state changed after key press (grid-verified)" + "pass": false, + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rotate", - "pass": true, - "detail": "piece shape changed after rotate key (grid-verified, 1 rotation(s))" - }, - { - "name": "all_pieces_rotate", - "pass": true, - "detail": "rotation confirmed but could not identify individual piece types" + "pass": false, + "detail": "no shape change detected after rotate key (1 distinct shape(s))" }, { "name": "hard_drop", @@ -184,6 +228,11 @@ "detail": "piece immediately dropped to bottom (grid-verified)" }, { + "name": "all_pieces_rotate", + "pass": false, + "detail": "only 0 of 3 J/L/T rotated to 3+ distinct shapes (need 2) [J:1 L:1 T:1]" + }, + { "name": "piece_locks", "pass": true, "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" @@ -196,55 +245,351 @@ { "name": "multiple_pieces", "pass": true, - "detail": "19 pieces placed during play session" + "detail": "16 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear via grid reader" + "pass": true, + "detail": "4 line(s) cleared (grid-verified)" }, { - "name": "score_changes", - "pass": false, - "detail": "score stayed at 0" + "name": "score_increases_on_clear", + "pass": true, + "detail": "score went from 0 to 40 after line clear" + }, + { + "name": "score_element_visible", + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", "pass": true, - "detail": "game stopped after stacking to top" + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", "pass": true, - "detail": "played for 30s, placed 43 pieces, no crashes" + "detail": "played for 30s, placed 34 pieces, no crashes" + }, + { + "name": "multi_line_clear", + "pass": false, + "detail": "skipped: no multi-line clear opportunity occurred during play" + }, + { + "name": "score_scaling", + "pass": false, + "detail": "skipped: no multi-line clear occurred to test scaling" + }, + { + "name": "level_progression", + "pass": false, + "detail": "skipped: only 1 lines cleared (need 10+)" + }, + { + "name": "speed_progression", + "pass": false, + "detail": "skipped: level did not increase, cannot test speed change" + }, + { + "name": "next_piece_preview", + "pass": true, + "detail": "next piece preview display found" + }, + { + "name": "game_over_display", + "pass": false, + "detail": "no overlay or restart UI found (phase6)" + }, + { + "name": "counter_clockwise_rotation", + "pass": false, + "detail": "skipped: could not test rotation direction" + }, + { + "name": "soft_drop_distinct", + "pass": false, + "detail": "skipped: no soft_drop key (game has only hard_drop)" + }, + { + "name": "rendering_clean", + "pass": false, + "detail": "skipped: not enough data to assess rendering trails" } ], "summary": { - "total": 16, + "total": 26, "passed": 14, - "failed": 2, - "score": 0.88 + "failed": 4, + "skipped": 8, + "score": 0.78 }, "gameplay": { - "pieces_placed": 43, - "lines_cleared": 0, - "max_score_observed": 0, + "pieces_placed": 34, + "lines_cleared": 4, + "max_score_observed": 80, "play_duration_seconds": 30, "errors_during_play": 0 }, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 2, + "total_lines_cleared": 1, + "single_clears": 1, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 1, + "score_readings": [ + 0, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40 + ], + "score_final": 40, + "score_increases": [ + 40 + ], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [] + }, "session": { - "frames": 1040, - "events_count": 9, + "frames": 762, + "events_count": 12, "pieces_spawned": 1, - "pieces_locked": 19, - "lines_cleared": 0, + "pieces_locked": 16, + "lines_cleared": 4, "piece_types_seen": [ - "unknown" + "unknown", + "L" ], "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 25 + "load_time_ms": 53 }, "accessibility": { "issues": [ @@ -252,12 +597,18 @@ ], "issue_count": 1, "pass": false + }, + "calibration_drift": { + "drifted": false, + "changes": [], + "recalibrations": 24, + "cacheHits": 24, + "cacheMisses": 0 } - }, - "timed_out": true + } }, - "outcome_score": 0.44, - "score": 0.44, + "outcome_score": 0.39, + "score": 0.39, "sonarqube": { "error": "no SonarQube token found", "score": 0 diff --git a/results/runs/tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=off_tread=on_twrite=off_web=on_run6/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=off_tread=on_twrite=off_web=on_run6/gameplay-bot-report.json @@ -2,9 +2,10 @@ "implementation": { "renderer": "dom", "grid_detected": true, + "grid_detected_at": "initial", "grid_bounds": { "x": 316.5, - "y": 0, + "y": 30, "width": 417, "height": 827 }, @@ -15,20 +16,68 @@ "rotate": "ArrowUp", "drop": "Space" }, - "start_mechanism": "click_canvas", + "control_discovery": { + "move_left": "NOT FOUND", + "move_right": "NOT FOUND", + "soft_drop": "NOT FOUND", + "hard_drop": "NOT FOUND", + "rotate_cw": "NOT FOUND", + "rotate_ccw": "NOT FOUND", + "key:ArrowLeft": "no change", + "key:a": "no change", + "key:h": "no change", + "key:ArrowRight": "no change", + "key:d": "no change", + "key:l": "no change", + "key:ArrowUp": "no change", + "key:x": "no change", + "key:w": "no change", + "key:Space": "no change", + "key:Enter": "no change", + "key:ArrowDown": "no change", + "key:s": "no change", + "key:z": "no change", + "key:Control": "no change" + }, + "start_mechanism": "button", "score_element_found": true, - "grid_confidence": 1 + "grid_confidence": 0, + "survey": { + "has_overlay": false, + "has_canvas": false, + "has_dom_grid": false, + "visible_text": [ + "SCORE", + "0", + "LEVEL", + "1", + "LINES", + "0", + "NEXT PIECE", + "START GAME", + "PAUSE", + "READY", + "CONTROLS", + "← → - Move Left/Right", + "↓ - Soft Drop", + "Space - Hard Drop", + "Z - Rotate Left", + "X - Rotate Right", + "P - Toggle Pause" + ], + "clickable_elements": 2 + } }, "tests": [ { "name": "game_loads", "pass": true, - "detail": "no console errors" + "detail": "loaded with landmarks: body_content, dom_grid, tetris_ratio" }, { "name": "game_starts", "pass": true, - "detail": "started via click_canvas" + "detail": "started via button (#startBtn, \"Start Game\")" }, { "name": "auto_drop", @@ -37,8 +86,8 @@ }, { "name": "move_left", - "pass": true, - "detail": "grid state changed after key press (grid-verified)" + "pass": false, + "detail": "no grid change detected after key press" }, { "name": "move_right", @@ -47,18 +96,13 @@ }, { "name": "move_down", - "pass": true, - "detail": "grid state changed after key press (grid-verified)" + "pass": false, + "detail": "skipped: no soft_drop key (game has only hard_drop)" }, { "name": "rotate", - "pass": true, - "detail": "piece shape changed after rotate key (grid-verified, 1 rotation(s))" - }, - { - "name": "all_pieces_rotate", - "pass": true, - "detail": "rotation confirmed but could not identify individual piece types" + "pass": false, + "detail": "no shape change detected after rotate key (1 distinct shape(s))" }, { "name": "hard_drop", @@ -66,6 +110,11 @@ "detail": "piece immediately dropped to bottom (grid-verified)" }, { + "name": "all_pieces_rotate", + "pass": false, + "detail": "only 0 of 3 J/L/T rotated to 3+ distinct shapes (need 2) [J:1 L:1 T:1]" + }, + { "name": "piece_locks", "pass": true, "detail": "filled cells persist at bottom (grid-verified, 2 lock event(s))" @@ -78,55 +127,351 @@ { "name": "multiple_pieces", "pass": true, - "detail": "19 pieces placed during play session" + "detail": "16 pieces placed during play session" }, { "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear via grid reader" + "pass": true, + "detail": "4 line(s) cleared (grid-verified)" }, { - "name": "score_changes", - "pass": false, - "detail": "score stayed at 0" + "name": "score_increases_on_clear", + "pass": true, + "detail": "score went from 0 to 40 after line clear" + }, + { + "name": "score_element_visible", + "pass": true, + "detail": "score display found (#score)" }, { "name": "game_over", "pass": true, - "detail": "game stopped after stacking to top" + "detail": "game stopped after stacking to top (grid-verified)" }, { "name": "playable_30s", "pass": true, - "detail": "played for 30s, placed 43 pieces, no crashes" + "detail": "played for 30s, placed 34 pieces, no crashes" + }, + { + "name": "multi_line_clear", + "pass": false, + "detail": "skipped: no multi-line clear opportunity occurred during play" + }, + { + "name": "score_scaling", + "pass": false, + "detail": "skipped: no multi-line clear occurred to test scaling" + }, + { + "name": "level_progression", + "pass": false, + "detail": "skipped: only 1 lines cleared (need 10+)" + }, + { + "name": "speed_progression", + "pass": false, + "detail": "skipped: level did not increase, cannot test speed change" + }, + { + "name": "next_piece_preview", + "pass": true, + "detail": "next piece preview display found" + }, + { + "name": "game_over_display", + "pass": false, + "detail": "no overlay or restart UI found (phase6)" + }, + { + "name": "counter_clockwise_rotation", + "pass": false, + "detail": "skipped: could not test rotation direction" + }, + { + "name": "soft_drop_distinct", + "pass": false, + "detail": "skipped: no soft_drop key (game has only hard_drop)" + }, + { + "name": "rendering_clean", + "pass": false, + "detail": "skipped: not enough data to assess rendering trails" } ], "summary": { - "total": 16, + "total": 26, "passed": 14, - "failed": 2, - "score": 0.88 + "failed": 4, + "skipped": 8, + "score": 0.78 }, "gameplay": { - "pieces_placed": 43, - "lines_cleared": 0, - "max_score_observed": 0, + "pieces_placed": 34, + "lines_cleared": 4, + "max_score_observed": 80, "play_duration_seconds": 30, "errors_during_play": 0 }, + "competitive_play": { + "duration_seconds": 60, + "pieces_placed": 2, + "total_lines_cleared": 1, + "single_clears": 1, + "double_clears": 0, + "triple_clears": 0, + "tetris_clears": 0, + "max_combo": 1, + "score_readings": [ + 0, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40 + ], + "score_final": 40, + "score_increases": [ + 40 + ], + "level_readings": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "level_final": 1, + "game_over_reached": false, + "game_over_text_found": null, + "restart_available": false, + "next_piece_visible": true, + "speed_increased": false, + "bugs_detected": [] + }, "session": { - "frames": 1040, - "events_count": 9, + "frames": 762, + "events_count": 12, "pieces_spawned": 1, - "pieces_locked": 19, - "lines_cleared": 0, + "pieces_locked": 16, + "lines_cleared": 4, "piece_types_seen": [ - "unknown" + "unknown", + "L" ], "grid_read_success_rate": 1 }, "performance": { - "load_time_ms": 25 + "load_time_ms": 53 }, "accessibility": { "issues": [ @@ -134,5 +479,12 @@ ], "issue_count": 1, "pass": false + }, + "calibration_drift": { + "drifted": false, + "changes": [], + "recalibrations": 24, + "cacheHits": 24, + "cacheMisses": 0 } } \ No newline at end of file diff --git a/results/runs/tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=off_tread=off_twrite=off_web=off_run6/eval_results.json b/results/runs/tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=off_tread=off_twrite=off_web=off_run6/eval_results.json @@ -31,7 +31,7 @@ }, "code_analysis": { "files": { - "total": 14, + "total": 15, "code": 2, "docs": 9, "unnecessary": 2, @@ -314,7 +314,7 @@ "grid_read_success_rate": 0 }, "performance": { - "load_time_ms": 31 + "load_time_ms": 29 }, "accessibility": { "issues": [], diff --git a/results/runs/tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=off_tread=off_twrite=off_web=off_run6/gameplay-bot-report.json b/results/runs/tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=off_tread=off_twrite=off_web=off_run6/gameplay-bot-report.json @@ -196,7 +196,7 @@ "grid_read_success_rate": 0 }, "performance": { - "load_time_ms": 31 + "load_time_ms": 29 }, "accessibility": { "issues": [], diff --git a/tasks/tetris/eval/gameplay-bot-v2/bot.ts b/tasks/tetris/eval/gameplay-bot-v2/bot.ts @@ -472,6 +472,8 @@ export async function runAllTests( "endurance: game did not start", "competitive: game did not start" ); + } else { + driver.armInactivityWatchdog(); } // Re-calibrate after start: DOM games may create grid cells dynamically @@ -510,112 +512,133 @@ export async function runAllTests( } } - // ---- Phase 3: Basic mechanics ---- + // ---- Phases 3-8 wrapped in an inactivity guard: if the driver's + // watchdog fires, we bail out of gameplay phases early but still write + // a partial report with whatever did run. ---- let mechanicsWork = false; - if (gameStarted && cal.gridDetected) { - await runBasicMechanicsPhase(driver, session); - mechanicsWork = - session.movementsObserved > 0 || - session.rotationsObserved > 0 || - session.hardDropsObserved > 0 || - session.events.some((e) => e.type === "piece_moved"); - } + let piecesWork = false; + let gameplayWorks = false; - if (gameStarted && !mechanicsWork) { - session.skippedPhases.push( - "pieces: mechanics failed", - "gameplay: mechanics failed", - "gameover: mechanics failed", - "endurance: mechanics failed", - "competitive: mechanics failed" - ); - } + try { + // ---- Phase 3: Basic mechanics ---- + if (gameStarted && cal.gridDetected) { + await runBasicMechanicsPhase(driver, session); + mechanicsWork = + session.movementsObserved > 0 || + session.rotationsObserved > 0 || + session.hardDropsObserved > 0 || + session.events.some((e) => e.type === "piece_moved"); + } + + if (gameStarted && !mechanicsWork) { + session.skippedPhases.push( + "pieces: mechanics failed", + "gameplay: mechanics failed", + "gameover: mechanics failed", + "endurance: mechanics failed", + "competitive: mechanics failed" + ); + } - // ---- Phase 4: Piece lifecycle ---- - let piecesWork = false; - if (mechanicsWork) { - piecesWork = session.piecesLocked > 0 || session.hardDropsObserved > 0; - } + // ---- Phase 4: Piece lifecycle ---- + if (mechanicsWork) { + piecesWork = session.piecesLocked > 0 || session.hardDropsObserved > 0; + } - if (mechanicsWork && !piecesWork) { - session.skippedPhases.push( - "gameplay: piece lifecycle failed", - "gameover: piece lifecycle failed", - "endurance: piece lifecycle failed", - "competitive: piece lifecycle failed" - ); - } + if (mechanicsWork && !piecesWork) { + session.skippedPhases.push( + "gameplay: piece lifecycle failed", + "gameover: piece lifecycle failed", + "endurance: piece lifecycle failed", + "competitive: piece lifecycle failed" + ); + } - // ---- Phase 5: Gameplay ---- - let gameplayWorks = false; - if (piecesWork) { - try { - await driver.loadPage(serverUrl); - cal = await driver.calibrate(); - if (gameStarted && !cal.gridDetected) { - await driver.wait(500); - const recal = await driver.recalibrate(); - if (recal.gridDetected) cal = recal; + // ---- Phase 5: Gameplay ---- + if (piecesWork) { + try { + await driver.loadPage(serverUrl); + cal = await driver.calibrate(); + if (gameStarted && !cal.gridDetected) { + await driver.wait(500); + const recal = await driver.recalibrate(); + if (recal.gridDetected) cal = recal; + } + session.started = session.started || cal.startMechanism !== "unknown"; + } catch (err) { + if (err instanceof Error && err.name === "InactivityAbortError") throw err; } - session.started = session.started || cal.startMechanism !== "unknown"; - } catch { /* continue */ } - await runGameplayPhase(driver, session, gameplay); - gameplayWorks = gameplay.pieces_placed > 0; - } + await runGameplayPhase(driver, session, gameplay); + gameplayWorks = gameplay.pieces_placed > 0; + } - if (piecesWork && !gameplayWorks) { - session.skippedPhases.push( - "endurance: gameplay failed", - "competitive: gameplay failed" - ); - } + if (piecesWork && !gameplayWorks) { + session.skippedPhases.push( + "endurance: gameplay failed", + "competitive: gameplay failed" + ); + } - // ---- Phase 6: Game over ---- - if (piecesWork) { - try { - await driver.loadPage(serverUrl); - cal = await driver.calibrate(); - if (!cal.gridDetected) { - await driver.wait(500); - const recal = await driver.recalibrate(); - if (recal.gridDetected) cal = recal; + // ---- Phase 6: Game over ---- + if (piecesWork) { + try { + await driver.loadPage(serverUrl); + cal = await driver.calibrate(); + if (!cal.gridDetected) { + await driver.wait(500); + const recal = await driver.recalibrate(); + if (recal.gridDetected) cal = recal; + } + } catch (err) { + if (err instanceof Error && err.name === "InactivityAbortError") throw err; } - } catch { /* continue */ } - await runGameOverPhase(driver, session); - } + await runGameOverPhase(driver, session); + } - // ---- Phase 7: Endurance ---- - if (gameplayWorks) { - try { - await driver.loadPage(serverUrl); - cal = await driver.calibrate(); - if (!cal.gridDetected) { - await driver.wait(500); - const recal = await driver.recalibrate(); - if (recal.gridDetected) cal = recal; + // ---- Phase 7: Endurance ---- + if (gameplayWorks) { + try { + await driver.loadPage(serverUrl); + cal = await driver.calibrate(); + if (!cal.gridDetected) { + await driver.wait(500); + const recal = await driver.recalibrate(); + if (recal.gridDetected) cal = recal; + } + } catch (err) { + if (err instanceof Error && err.name === "InactivityAbortError") throw err; } - } catch { /* continue */ } - await runEndurancePhase(driver, session, gameplay); - } + await runEndurancePhase(driver, session, gameplay); + } - // ---- Phase 8: Competitive play ---- - if (gameplayWorks) { - try { - await driver.loadPage(serverUrl); - cal = await driver.calibrate(); - if (!cal.gridDetected) { - await driver.wait(500); - const recal = await driver.recalibrate(); - if (recal.gridDetected) cal = recal; + // ---- Phase 8: Competitive play ---- + if (gameplayWorks) { + try { + await driver.loadPage(serverUrl); + cal = await driver.calibrate(); + if (!cal.gridDetected) { + await driver.wait(500); + const recal = await driver.recalibrate(); + if (recal.gridDetected) cal = recal; + } + } catch (err) { + if (err instanceof Error && err.name === "InactivityAbortError") throw err; } - } catch { /* continue */ } - competitivePlay = await runCompetitivePlayPhase(driver, session, gameplay, serverUrl); - } else if (!session.skippedPhases.some((p) => p.startsWith("competitive:"))) { - session.skippedPhases.push("competitive: gameplay failed"); + competitivePlay = await runCompetitivePlayPhase(driver, session, gameplay, serverUrl); + } else if (!session.skippedPhases.some((p) => p.startsWith("competitive:"))) { + session.skippedPhases.push("competitive: gameplay failed"); + } + } catch (err) { + if (err instanceof Error && err.name === "InactivityAbortError") { + console.log(`[bot] inactivity watchdog fired: ${err.message}`); + session.skippedPhases.push(`inactivity_abort: ${err.message}`); + } else { + throw err; + } } session.durationSeconds = gameplay.play_duration_seconds; diff --git a/tasks/tetris/eval/gameplay-bot-v2/driver.ts b/tasks/tetris/eval/gameplay-bot-v2/driver.ts @@ -25,6 +25,13 @@ import type { const GRID_ROWS = 20; const GRID_COLS = 10; +export class InactivityAbortError extends Error { + constructor(message: string) { + super(message); + this.name = "InactivityAbortError"; + } +} + const DEFAULT_CONTROLS: Controls = { left: "ArrowLeft", right: "ArrowRight", @@ -379,10 +386,34 @@ export class PlaywrightDriver implements TetrisDriver { private consoleErrors: string[] = []; private log = (msg: string) => console.log(`[driver] ${msg}`); + // Inactivity watchdog: set by armInactivityWatchdog() once the game has + // started and we expect regular grid reads. If more than + // INACTIVITY_TIMEOUT_MS elapses without a successful grid read, readGrid + // and wait() throw InactivityAbortError so the bot can exit fast and + // still write whatever partial data it has. + private watchdogArmed = false; + private lastSuccessfulReadAt = 0; + private static readonly INACTIVITY_TIMEOUT_MS = 120_000; + constructor(page: Page) { this.page = page; } + armInactivityWatchdog(): void { + this.watchdogArmed = true; + this.lastSuccessfulReadAt = Date.now(); + } + + private checkInactivity(): void { + if (!this.watchdogArmed) return; + const elapsed = Date.now() - this.lastSuccessfulReadAt; + if (elapsed > PlaywrightDriver.INACTIVITY_TIMEOUT_MS) { + throw new InactivityAbortError( + `no successful grid read in ${Math.round(elapsed / 1000)}s (watchdog)` + ); + } + } + // -- Lifecycle -- async loadPage(url: string): Promise<{ loaded: boolean; detail: string; errorsOnLoad: number }> { @@ -1377,6 +1408,7 @@ export class PlaywrightDriver implements TetrisDriver { // -- Grid Reading -- async readGrid(settledGrid?: Grid | null): Promise<GridSnapshot> { + this.checkInactivity(); try { const cal = this.cal; if (!cal) return makeSnapshot(null); @@ -1396,8 +1428,10 @@ export class PlaywrightDriver implements TetrisDriver { grid = await this.readDomGrid(); } + if (grid) this.lastSuccessfulReadAt = Date.now(); return makeSnapshot(grid, settledGrid); - } catch { + } catch (err) { + if (err instanceof InactivityAbortError) throw err; return makeSnapshot(null); } } @@ -2067,6 +2101,7 @@ export class PlaywrightDriver implements TetrisDriver { } async wait(ms: number): Promise<void> { + this.checkInactivity(); await this.page.waitForTimeout(ms); } diff --git a/tasks/tetris/eval/gameplay-bot-v2/index.ts b/tasks/tetris/eval/gameplay-bot-v2/index.ts @@ -89,7 +89,7 @@ test.describe("Tetris Gameplay Bot v2", () => { }); test("run gameplay bot", async ({ page }) => { - test.setTimeout(360_000); // 6-minute total timeout (discovery adds ~35s) + test.setTimeout(900_000); // 15-minute total timeout; driver watchdog aborts earlier on inactivity // Measure page load time let loadTimeMs = -1; diff --git a/tasks/tetris/eval/gameplay-bot-v2/playwright.config.ts b/tasks/tetris/eval/gameplay-bot-v2/playwright.config.ts @@ -3,7 +3,7 @@ import { defineConfig } from "@playwright/test"; export default defineConfig({ testDir: ".", testMatch: "index.ts", - timeout: 360_000, + timeout: 900_000, retries: 0, workers: 1, reporter: [["list"]], diff --git a/tasks/tetris/eval/gameplay-bot-v2/types.ts b/tasks/tetris/eval/gameplay-bot-v2/types.ts @@ -233,6 +233,12 @@ export interface TetrisDriver { */ rejectStartMechanism(): void; getCalibrationDrift(): CalibrationDrift; + /** + * Start the inactivity watchdog. After this is called, readGrid() and + * wait() throw InactivityAbortError if 120+ seconds pass without a + * successful grid read. Call once the game is known to be running. + */ + armInactivityWatchdog(): void; // -- Grid Reading -- readGrid(settledGrid?: Grid | null): Promise<GridSnapshot>; diff --git a/tasks/tetris/eval/gameplay-bot/calibration/1d08ee76.json b/tasks/tetris/eval/gameplay-bot/calibration/1d08ee76.json @@ -1,5 +1,5 @@ { - "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3", + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6", "short_id": "1d08ee76", "label": "DOM game (haiku-4.5, en)", "notes": "Super weird play. L-shape rotation is broken: flips and rotates simultaneously (wrong rotation matrix). Down arrow is instant drop (no soft drop, acts as hard drop). Scores only increase on line clear, not on drops. Multi-line clear works.", diff --git a/tasks/tetris/eval/gameplay-bot/calibration/4949d521.json b/tasks/tetris/eval/gameplay-bot/calibration/4949d521.json @@ -1,5 +1,5 @@ { - "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_rndr=none_strat=usub_tst=none_tedit=on_tglob=off_tgrep=on_tread=on_twrite=on_web=on_run1", + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=off_tgrep=on_tread=on_twrite=on_web=on_run4", "short_id": "4949d521", "label": "DOM game (haiku-4.5, en)", "notes": "Rendering bug: falling piece leaves a trail behind it (previous position never repainted to black). Lines never clear despite filling a row. Score does increase though. Very confusing visually.", diff --git a/tasks/tetris/eval/gameplay-bot/calibration/4c7db3b9.json b/tasks/tetris/eval/gameplay-bot/calibration/4c7db3b9.json @@ -1,5 +1,5 @@ { - "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=on_tread=off_twrite=on_web=off_run2", + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=on_tread=off_twrite=on_web=off_run5", "short_id": "4c7db3b9", "label": "Spanish looks ok", "notes": "Spanish game. All basic mechanics work. Down arrow feels laggy. Score did not increase on down press, unsure about line clear scoring. Only tested single line clear. Game is in Spanish.", diff --git a/tasks/tetris/eval/gameplay-bot/calibration/5ae88633.json b/tasks/tetris/eval/gameplay-bot/calibration/5ae88633.json @@ -1,5 +1,5 @@ { - "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2", + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5", "short_id": "5ae88633", "label": "Calibration (haiku-4.5, en)", "notes": "", diff --git a/tasks/tetris/eval/gameplay-bot/calibration/6f157de1.json b/tasks/tetris/eval/gameplay-bot/calibration/6f157de1.json @@ -1,5 +1,5 @@ { - "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=opus46_pw=avail_prompt=simple_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3", + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=opus46_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run6", "short_id": "6f157de1", "label": "Calibration (opus-4.6, en)", "notes": "", diff --git a/tasks/tetris/eval/gameplay-bot/calibration/7a348b81.json b/tasks/tetris/eval/gameplay-bot/calibration/7a348b81.json @@ -1,5 +1,5 @@ { - "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1", + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run3", "short_id": "7a348b81", "label": "Start button broken", "notes": "Clicking start game never does anything. Game is genuinely broken -- not a bot issue.", diff --git a/tasks/tetris/eval/gameplay-bot/calibration/8fe72fce.json b/tasks/tetris/eval/gameplay-bot/calibration/8fe72fce.json @@ -1,5 +1,5 @@ { - "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2", + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=uns_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4", "short_id": "8fe72fce", "label": "English playable", "notes": "Playable English game. Has a pause button. Multi-line clear works, score scales, counter-clockwise rotation works, next piece preview and game over display present.", diff --git a/tasks/tetris/eval/gameplay-bot/calibration/93e8feea.json b/tasks/tetris/eval/gameplay-bot/calibration/93e8feea.json @@ -1,5 +1,5 @@ { - "run_id": "tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=detailed_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=off_tread=off_twrite=off_web=off_run3", + "run_id": "tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=off_tread=off_twrite=off_web=off_run6", "short_id": "93e8feea", "label": "Spanish overlay bug", "notes": "Game starts directly into 'game over' state with a new game button. Has a transparent full-screen overlay. Clicking the button changes the next block visible behind the overlay but never dismisses it. Unplayable due to this bug.", diff --git a/tasks/tetris/eval/gameplay-bot/calibration/9805c24a.json b/tasks/tetris/eval/gameplay-bot/calibration/9805c24a.json @@ -1,5 +1,5 @@ { - "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_rndr=none_strat=usub_tst=none_tedit=off_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run2", + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=off_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run5", "short_id": "9805c24a", "label": "DOM game (haiku-4.5, en)", "notes": "Very ugly misaligned UI. Rotation partially broken: only 1 of 4 states for some blocks. Poor randomizer. Play starts instantly (no start button). Game over shows overlay with GAME OVER text and Play Again button.", @@ -31,4 +31,4 @@ "counter_clockwise_rotation": false, "soft_drop_distinct": true } -} -\ No newline at end of file +} diff --git a/tasks/tetris/eval/gameplay-bot/calibration/bbb70053.json b/tasks/tetris/eval/gameplay-bot/calibration/bbb70053.json @@ -1,5 +1,5 @@ { - "run_id": "tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=simple_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=off_tread=on_twrite=off_web=on_run3", + "run_id": "tetris_arch=none_ctx=provided_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=off_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=none_tst=none_tedit=off_tglob=off_tgrep=off_tread=on_twrite=off_web=on_run6", "short_id": "bbb70053", "label": "DOM game (haiku-4.5, en)", "notes": "Very laggy; hurts playability even though it is playable.", diff --git a/tasks/tetris/eval/gameplay-bot/calibration/cbbff570.json b/tasks/tetris/eval/gameplay-bot/calibration/cbbff570.json @@ -1,5 +1,5 @@ { - "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1", + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=detailed_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4", "short_id": "cbbff570", "label": "DOM game (haiku-4.5, en)", "notes": "CW rotation (Up arrow) works normally. CCW rotation (Z key) is buggy: at best once, sometimes stalls or causes blocks to vanish. Next piece preview shows a shaded box outline. Line clear works but at one point randomly cleared incorrectly.", @@ -31,4 +31,4 @@ "counter_clockwise_rotation": false, "soft_drop_distinct": true } -} -\ No newline at end of file +} diff --git a/tasks/tetris/eval/gameplay-bot/calibration/e047cf3a.json b/tasks/tetris/eval/gameplay-bot/calibration/e047cf3a.json @@ -1,5 +1,5 @@ { - "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1", + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=en_lang=js_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4", "short_id": "e047cf3a", "label": "Calibration (haiku-4.5, en)", "notes": "", diff --git a/tasks/tetris/eval/gameplay-bot/calibration/e2e04e75.json b/tasks/tetris/eval/gameplay-bot/calibration/e2e04e75.json @@ -1,5 +1,5 @@ { - "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run1", + "run_id": "tetris_arch=none_ctx=none_noise=clean_dsgn=none_eff=high_echk=none_hlang=es_lang=ts_lint=on_budget=low_model=haiku45_pw=avail_prompt=simple_prov=anth_rndr=none_strat=usub_tst=none_tedit=on_tglob=on_tgrep=on_tread=on_twrite=on_web=on_run4", "short_id": "e2e04e75", "label": "Spanish basic play", "notes": "Spanish game. Basic play works fine. Score increases by 100 on line clear (bot was right, human was wrong on initial test).", @@ -31,4 +31,4 @@ "counter_clockwise_rotation": null, "soft_drop_distinct": null } -} -\ No newline at end of file +}