Kallisti
Independent regression & playtest record · local build

Autonomous browser-game QA sweep

Seeded black-box exploration of 10 shipped single-file games across desktop and mobile browser profiles. Findings below are limited to behavior captured during this run.

Run started 2026-08-24T22:06:34.635Z · Seed 1597463007 · Generated August 24, 2026 at 6:17 PM
10/10games attempted
1,270inputs driven
10.7active test minutes
20/20viewport passes completed
17 defects0 critical0 high5 medium12 low / heuristic5 informational (not defects)

Executive readout

The sweep recorded 17 reproducible defect observations across 10 games; 0 games produced none. Runtime failures and load failures are separated from mobile geometry findings, responsiveness outliers, and heuristic non-response signals.

A further 5 observations are filed as informational and excluded from the counts above. Those are of two kinds, and neither is a statement about the build: coverage gaps, where the automated driver could not advance a game far enough to judge it, and environment diagnostics such as autoplay-blocked audio and rejected pointer-lock, which every headless browser produces regardless of the game.

Severity reflects likely user impact from the captured evidence. Heuristic findings are explicitly marked and require human confirmation before entering a production defect backlog.

GAME 01 / 10

ADVERSARY

games/adversary.html

1defect
110 inputs10 frames0 diagnostic eventsframe cadence — desktop 16.7ms (~59.9 FPS) · mobile 16.7ms (~59.9 FPS)opener — desktop opened on k · mobile opened on kinput — desktop mouse · mobile touchstorage — desktop: persisted (2 keys) · mobile: persisted (1 key)mobile overflow — 0px
Finding ADVERSARY-001 · Dead End

Candidate non-responsive state after continued input

lowmobileheuristic

The frame hash remained identical for 6 consecutive active input epochs after 32 distinct visual transitions had already been driven, so the harness had demonstrably reached playable state before the stall. This remains a heuristic signal rather than a confirmed soft-lock: static menus and inputs that do not apply to the current screen produce the same observation.

Exact reproduction sequence
  1. Open adversary.html at 375×812, deviceScaleFactor 2 (seed 2722825292).
  2. 21.33s — Press d
  3. 22.29s — Wait 579ms
  4. 22.75s — Press ArrowDown
  5. 23.29s — Tap canvas #screen at (263, 698) [grid 0.70, 0.86]
  6. 23.71s — Tap canvas #screen at (113, 568) [grid 0.30, 0.70]
  7. 24.18s — Tap canvas #screen at (53, 114) [grid 0.14, 0.14]
  8. 24.63s — Tap canvas #screen at (188, 244) [grid 0.50, 0.30]
  9. 25.02s — Tap canvas #screen at (53, 406) [grid 0.14, 0.50]
GAME 02 / 10

CAPRIOLE

games/capriole.html

1defect
133 inputs10 frames0 diagnostic eventsframe cadence — desktop 16.7ms (~59.9 FPS) · mobile 16.7ms (~59.9 FPS)opener — desktop opened on Enter · mobile opened on Enterinput — desktop mouse · mobile touchstorage — desktop: changed-on-reload (3 keys) · mobile: changed-on-reload (4 keys)mobile overflow — 0px
Finding CAPRIOLE-001 · Dead End

Candidate non-responsive state after continued input

lowmobileheuristic

The frame hash remained identical for 6 consecutive active input epochs after 11 distinct visual transitions had already been driven, so the harness had demonstrably reached playable state before the stall. This remains a heuristic signal rather than a confirmed soft-lock: static menus and inputs that do not apply to the current screen produce the same observation.

Exact reproduction sequence
  1. Open capriole.html at 375×812, deviceScaleFactor 2 (seed 2430433798).
  2. 8.77s — Press 7
  3. 9.18s — Tap input “1” at (281, 155)
  4. 9.46s — Tap canvas #hud-topbar at (188, 4) [grid 0.50, 0.14]
  5. 9.76s — Tap canvas at (323, 114) [grid 0.86, 0.14]
  6. 10.18s — Tap canvas #hud-topbar at (263, 21) [grid 0.70, 0.70]
  7. 10.55s — Tap input “on” at (348, 336)
  8. 10.90s — Tap input “on” at (348, 365)
  9. 11.21s — Press a
GAME 03 / 10

Chapel Perilous

games/chapel-perilous.html

1defect
+1 informational
124 inputs10 frames0 diagnostic eventsframe cadence — desktop 16.7ms (~59.9 FPS) · mobile 16.7ms (~59.9 FPS)opener — desktop opened on Enter · mobile opened on Enterinput — desktop mouse · mobile touchstorage — desktop: persisted (2 keys) · mobile: persisted (2 keys)mobile overflow — 0px
Finding CHAPEL-PERILOUS-001 · Dead End

Candidate non-responsive state after continued input

lowdesktopheuristic

The frame hash remained identical for 6 consecutive active input epochs after 9 distinct visual transitions had already been driven, so the harness had demonstrably reached playable state before the stall. This remains a heuristic signal rather than a confirmed soft-lock: static menus and inputs that do not apply to the current screen produce the same observation.

Exact reproduction sequence
  1. Open chapel-perilous.html at 1280×800, deviceScaleFactor 2 (seed 1615293728).
  2. 12.82s — Click canvas #screen at (184, 400) [grid 0.14, 0.50]
  3. 13.32s — Click canvas #screen at (387, 558) [grid 0.30, 0.70]
  4. 13.64s — Click canvas #screen at (893, 115) [grid 0.70, 0.14]
  5. 14.00s — Click canvas #screen at (1096, 685) [grid 0.86, 0.86]
  6. 14.47s — Click canvas #screen at (1096, 242) [grid 0.86, 0.30]
  7. 14.96s — Click canvas #screen at (640, 685) [grid 0.50, 0.86]
  8. 15.51s — Press ArrowDown
  9. 15.94s — Press 8

Informational — 1 observation that are not claims about this build

Harness coverage limits and headless-environment artefacts. Recorded in full for traceability; excluded from the defect counts above.

Finding CHAPEL-PERILOUS-002 · Coverage Gap

Harness could not drive the game beyond its opening state

informationalmobileheuristic

The frame hash remained identical for 6 consecutive active input epochs, but only 1 visual transition had been driven beforehand — below the 3-transition threshold required to make a claim about the game. This is reported as a coverage limitation of the automated driver (an input scheme, gesture, or menu-confirm key it did not discover), not as a defect in the build.

Exact reproduction sequence
  1. Open chapel-perilous.html at 375×812, deviceScaleFactor 2 (seed 2466463244).
  2. 2.79s — Opener: press k (no visual change)
  3. 2.79s — Opener: press Enter (advanced past the opening screen)
  4. 2.89s — Tap canvas #screen at (188, 406) [grid 0.50, 0.50]
  5. 3.33s — Tap canvas #screen at (188, 517) [grid 0.50, 0.86]
  6. 3.79s — Press ArrowDown
  7. 4.10s — Tap canvas #screen at (262, 295) [grid 0.70, 0.14]
  8. 4.45s — Press 8
  9. 4.86s — Tap canvas #screen at (262, 295) [grid 0.70, 0.14]
GAME 04 / 10

INNSMOUTH 2000

games/innsmouth2000.html

4defects
127 inputs8 frames4 diagnostic eventsframe cadence — desktop 16.7ms (~59.9 FPS) · mobile 16.7ms (~59.9 FPS)opener — desktop no opener key advanced · mobile no opener key advancedinput — desktop mouse · mobile touchstorage — desktop: persisted (1 key) · mobile: persisted (1 key)mobile overflow — 0px
Finding INNSMOUTH2000-001 · Asset Load

Resource request failed

mediumdesktop

GET file:///Users/rayweiss/Desktop/Dev%20Work/game-qa/games/assets/music/recovery-the-scarred-shore.ogg — net::ERR_ABORTED

Exact reproduction sequence
  1. Open innsmouth2000.html at 1280×800, deviceScaleFactor 2 (seed 1087025050).
  2. 3.88s — Opener: press k (no visual change)
  3. 3.88s — Opener: press Enter (no visual change)
  4. 3.88s — Opener: press Space (no visual change)
  5. 3.88s — Opener: press z (no visual change)
  6. 3.95s — Click canvas #screen at (640, 400) [grid 0.50, 0.50]
Finding INNSMOUTH2000-002 · Asset Load

Resource request failed

mediumdesktop

GET file:///Users/rayweiss/Desktop/Dev%20Work/game-qa/games/assets/music/calm-zoning-day.ogg — net::ERR_ABORTED

Exact reproduction sequence
  1. Open innsmouth2000.html at 1280×800, deviceScaleFactor 2 (seed 1087025050).
  2. 4.86s — Click canvas #screen at (896, 560) [grid 0.70, 0.70]
  3. 5.19s — Click canvas #screen at (1101, 400) [grid 0.86, 0.50]
  4. 5.50s — Click canvas #screen at (1101, 560) [grid 0.86, 0.70]
  5. 5.83s — Click canvas #screen at (896, 112) [grid 0.70, 0.14]
  6. 6.22s — Press Enter
  7. 6.58s — Press s
  8. 7.06s — Press 4
  9. 7.54s — Click canvas #screen at (1101, 400) [grid 0.86, 0.50]
Finding INNSMOUTH2000-003 · Asset Load

Resource request failed

mediummobile

GET file:///Users/rayweiss/Desktop/Dev%20Work/game-qa/games/assets/music/recovery-the-scarred-shore.ogg — net::ERR_ABORTED

Exact reproduction sequence
  1. Open innsmouth2000.html at 375×812, deviceScaleFactor 2 (seed 335119074).
  2. 3.83s — Opener: press k (no visual change)
  3. 3.83s — Opener: press Enter (no visual change)
  4. 3.83s — Opener: press Space (no visual change)
  5. 3.83s — Opener: press z (no visual change)
  6. 3.85s — Tap canvas #screen at (188, 406) [grid 0.50, 0.50]
Finding INNSMOUTH2000-004 · Asset Load

Resource request failed

mediummobile

GET file:///Users/rayweiss/Desktop/Dev%20Work/game-qa/games/assets/music/calm-zoning-day.ogg — net::ERR_ABORTED

Exact reproduction sequence
  1. Open innsmouth2000.html at 375×812, deviceScaleFactor 2 (seed 335119074).
  2. 4.69s — Tap canvas #screen at (113, 698) [grid 0.30, 0.86]
  3. 5.14s — Tap canvas #screen at (53, 698) [grid 0.14, 0.86]
  4. 5.53s — Press Enter
  5. 5.99s — Press d
  6. 6.32s — Press Escape
  7. 6.69s — Tap canvas #screen at (53, 114) [grid 0.14, 0.14]
  8. 7.11s — Tap canvas #screen at (188, 114) [grid 0.50, 0.14]
  9. 7.51s — Tap canvas #screen at (53, 244) [grid 0.14, 0.30]
GAME 05 / 10

THE JACQUARD INDEX

games/jacquard-index.html

1defect
+1 informational
133 inputs10 frames0 diagnostic eventsframe cadence — desktop 16.7ms (~59.9 FPS) · mobile 16.7ms (~59.9 FPS)opener — desktop opened on Enter · mobile opened on Enterinput — desktop mouse · mobile touchstorage — desktop: persisted (1 key) · mobile: persisted (1 key)mobile overflow — 0px
Finding JACQUARD-INDEX-001 · Dead End

Candidate non-responsive state after continued input

lowdesktopheuristic

The frame hash remained identical for 6 consecutive active input epochs after 9 distinct visual transitions had already been driven, so the harness had demonstrably reached playable state before the stall. This remains a heuristic signal rather than a confirmed soft-lock: static menus and inputs that do not apply to the current screen produce the same observation.

Exact reproduction sequence
  1. Open jacquard-index.html at 1280×800, deviceScaleFactor 2 (seed 2812819576).
  2. 11.56s — Press 9
  3. 12.02s — Press Escape
  4. 12.48s — Click canvas #jacquard at (179, 688) [grid 0.14, 0.86]
  5. 12.95s — Press 3
  6. 13.40s — Click canvas #jacquard at (179, 400) [grid 0.14, 0.50]
  7. 13.71s — Click canvas #jacquard at (640, 240) [grid 0.50, 0.30]
  8. 14.16s — Click canvas #jacquard at (1101, 560) [grid 0.86, 0.70]
  9. 14.53s — Click canvas #jacquard at (896, 688) [grid 0.70, 0.86]

Informational — 1 observation that are not claims about this build

Harness coverage limits and headless-environment artefacts. Recorded in full for traceability; excluded from the defect counts above.

Finding JACQUARD-INDEX-002 · Coverage Gap

Harness could not drive the game beyond its opening state

informationalmobileheuristic

The frame hash remained identical for 6 consecutive active input epochs, but only 2 visual transitions had been driven beforehand — below the 3-transition threshold required to make a claim about the game. This is reported as a coverage limitation of the automated driver (an input scheme, gesture, or menu-confirm key it did not discover), not as a defect in the build.

Exact reproduction sequence
  1. Open jacquard-index.html at 375×812, deviceScaleFactor 2 (seed 1836618984).
  2. 2.11s — Opener: press Enter (advanced past the opening screen)
  3. 2.20s — Tap canvas #jacquard at (188, 406) [grid 0.50, 0.50]
  4. 2.68s — Tap canvas #jacquard at (188, 568) [grid 0.50, 0.70]
  5. 3.11s — Tap canvas #jacquard at (263, 698) [grid 0.70, 0.86]
  6. 3.43s — Tap canvas #jacquard at (323, 698) [grid 0.86, 0.86]
  7. 3.83s — Tap canvas #jacquard at (113, 244) [grid 0.30, 0.30]
  8. 4.18s — Press 6
  9. 4.63s — Tap canvas #jacquard at (53, 698) [grid 0.14, 0.86]
GAME 06 / 10

LINES OF ADVANCE

games/lines-of-advance.html

2defects
134 inputs10 frames0 diagnostic eventsframe cadence — desktop 16.7ms (~59.9 FPS) · mobile 16.7ms (~59.9 FPS)opener — desktop no opener key advanced · mobile no opener key advancedinput — desktop mouse · mobile touchstorage — desktop: persisted (1 key) · mobile: persisted (1 key)mobile overflow — 0px
Finding LINES-OF-ADVANCE-001 · Dead End

Candidate non-responsive state after continued input

lowdesktopheuristic

The frame hash remained identical for 6 consecutive active input epochs after 6 distinct visual transitions had already been driven, so the harness had demonstrably reached playable state before the stall. This remains a heuristic signal rather than a confirmed soft-lock: static menus and inputs that do not apply to the current screen produce the same observation.

Exact reproduction sequence
  1. Open lines-of-advance.html at 1280×800, deviceScaleFactor 2 (seed 758115002).
  2. 10.60s — Press 7
  3. 11.10s — Click button “Skip” at (134, 224)
  4. 11.57s — Press 7
  5. 12.01s — Press Escape
  6. 12.38s — Press 8
  7. 12.79s — Press 3
  8. 13.19s — Press 3
  9. 13.63s — Click input “on” at (1013, 799)
Finding LINES-OF-ADVANCE-002 · Dead End

Candidate non-responsive state after continued input

lowmobileheuristic

The frame hash remained identical for 6 consecutive active input epochs after 6 distinct visual transitions had already been driven, so the harness had demonstrably reached playable state before the stall. This remains a heuristic signal rather than a confirmed soft-lock: static menus and inputs that do not apply to the current screen produce the same observation.

Exact reproduction sequence
  1. Open lines-of-advance.html at 375×812, deviceScaleFactor 2 (seed 119327281).
  2. 16.38s — Tap button “Copy debug log” at (188, 811)
  3. 16.81s — Press 2
  4. 17.26s — Tap select “Field Paper Slate Night” at (229, 811)
  5. 17.63s — Tap button “Agree Draw” at (277, 755)
  6. 18.07s — Press d
  7. 18.54s — Press ArrowLeft
  8. 18.89s — Press 5
  9. 19.21s — Press a
GAME 07 / 10

ODDSEEDZ

games/oddseedz.html

2defects
+2 informational
128 inputs10 frames8 diagnostic eventsframe cadence — desktop 16.7ms (~59.9 FPS) · mobile 16.7ms (~59.9 FPS)opener — desktop no opener key advanced · mobile no opener key advancedinput — desktop mouse · mobile touchstorage — desktop: persisted (1 key) · mobile: persisted (1 key)mobile overflow — 0px
Finding ODDSEEDZ-001 · Dead End

Candidate non-responsive state after continued input

lowdesktopheuristic

The frame hash remained identical for 6 consecutive active input epochs after 8 distinct visual transitions had already been driven, so the harness had demonstrably reached playable state before the stall. This remains a heuristic signal rather than a confirmed soft-lock: static menus and inputs that do not apply to the current screen produce the same observation.

Exact reproduction sequence
  1. Open oddseedz.html at 1280×800, deviceScaleFactor 2 (seed 2068083489).
  2. 17.27s — Click canvas at (1241, 48) [grid 0.86, 0.70]
  3. 18.27s — Wait 723ms
  4. 18.75s — Press ArrowRight
  5. 19.11s — Click canvas at (1067, 149) [grid 0.70, 0.86]
  6. 19.59s — Click button “summon” at (685, 45)
  7. 19.95s — Click canvas at (1191, 147) [grid 0.70, 0.70]
  8. 20.35s — Press s
  9. 20.72s — Press 5
Finding ODDSEEDZ-003 · Dead End

Candidate non-responsive state after continued input

lowmobileheuristic

The frame hash remained identical for 6 consecutive active input epochs after 3 distinct visual transitions had already been driven, so the harness had demonstrably reached playable state before the stall. This remains a heuristic signal rather than a confirmed soft-lock: static menus and inputs that do not apply to the current screen produce the same observation.

Exact reproduction sequence
  1. Open oddseedz.html at 375×812, deviceScaleFactor 2 (seed 90765358).
  2. 5.25s — Press 4
  3. 5.54s — Tap button “settings-open” at (86, 93)
  4. 5.97s — Tap button “summon” at (301, 143)
  5. 6.29s — Tap canvas at (198, 210) [grid 0.14, 0.30]
  6. 6.63s — Press ArrowRight
  7. 6.90s — Tap canvas at (123, 213) [grid 0.70, 0.50]
  8. 7.28s — Press Enter
  9. 7.60s — Press 5

Informational — 2 observations that are not claims about this build

Harness coverage limits and headless-environment artefacts. Recorded in full for traceability; excluded from the defect counts above.

Finding ODDSEEDZ-002 · Environment Diagnostic

Audio blocked by the browser autoplay policy in the headless test environment

informationaldesktop

The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio (observed 4 times) This is an artefact of automated playback in a headless browser with no genuine user gesture, not a defect in the build; it is recorded for completeness and excluded from the defect tally.

Exact reproduction sequence
  1. Open oddseedz.html at 1280×800, deviceScaleFactor 2 (seed 2068083489).
Finding ODDSEEDZ-004 · Environment Diagnostic

Audio blocked by the browser autoplay policy in the headless test environment

informationalmobile

The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://developer.chrome.com/blog/autoplay/#web_audio (observed 4 times) This is an artefact of automated playback in a headless browser with no genuine user gesture, not a defect in the build; it is recorded for completeness and excluded from the defect tally.

Exact reproduction sequence
  1. Open oddseedz.html at 375×812, deviceScaleFactor 2 (seed 90765358).
GAME 08 / 10

THE OFFICE OF THE ROAD

games/office-of-the-road.html

1defect
+1 informational
135 inputs10 frames0 diagnostic eventsframe cadence — desktop 16.7ms (~59.9 FPS) · mobile 16.7ms (~59.9 FPS)opener — desktop opened on Enter · mobile opened on Enterinput — desktop mouse · mobile touchstorage — desktop: persisted (1 key) · mobile: changed-on-reload (1 key)mobile overflow — 0px
Finding OFFICE-OF-THE-ROAD-001 · Dead End

Candidate non-responsive state after continued input

lowdesktopheuristic

The frame hash remained identical for 6 consecutive active input epochs after 3 distinct visual transitions had already been driven, so the harness had demonstrably reached playable state before the stall. This remains a heuristic signal rather than a confirmed soft-lock: static menus and inputs that do not apply to the current screen produce the same observation.

Exact reproduction sequence
  1. Open office-of-the-road.html at 1280×800, deviceScaleFactor 2 (seed 3781980584).
  2. 3.88s — Click canvas #stage at (179, 400) [grid 0.14, 0.50]
  3. 4.22s — Press ArrowLeft
  4. 4.54s — Press 8
  5. 4.85s — Click canvas #stage at (1101, 112) [grid 0.86, 0.14]
  6. 5.19s — Press 4
  7. 5.55s — Click canvas #stage at (384, 112) [grid 0.30, 0.14]
  8. 5.99s — Click canvas #stage at (640, 240) [grid 0.50, 0.30]
  9. 6.44s — Press Enter

Informational — 1 observation that are not claims about this build

Harness coverage limits and headless-environment artefacts. Recorded in full for traceability; excluded from the defect counts above.

Finding OFFICE-OF-THE-ROAD-002 · Coverage Gap

Harness could not drive the game beyond its opening state

informationalmobileheuristic

The frame hash remained identical for 6 consecutive active input epochs, but only 1 visual transition had been driven beforehand — below the 3-transition threshold required to make a claim about the game. This is reported as a coverage limitation of the automated driver (an input scheme, gesture, or menu-confirm key it did not discover), not as a defect in the build.

Exact reproduction sequence
  1. Open office-of-the-road.html at 375×812, deviceScaleFactor 2 (seed 389602308).
  2. 2.70s — Opener: press Enter (advanced past the opening screen)
  3. 2.77s — Tap canvas #stage at (188, 406) [grid 0.50, 0.50]
  4. 3.23s — Tap canvas #stage at (188, 322) [grid 0.50, 0.14]
  5. 3.68s — Tap canvas #stage at (323, 491) [grid 0.86, 0.86]
  6. 4.03s — Tap canvas #stage at (323, 453) [grid 0.86, 0.70]
  7. 4.40s — Tap canvas #stage at (263, 322) [grid 0.70, 0.14]
  8. 4.82s — Tap canvas #stage at (53, 453) [grid 0.14, 0.70]
  9. 5.20s — Press 3
GAME 09 / 10

SHOELEATHER

games/shoeleather.html

3defects
129 inputs10 frames0 diagnostic eventsframe cadence — desktop 16.7ms (~59.9 FPS) · mobile 16.7ms (~59.9 FPS)opener — desktop no opener key advanced · mobile no opener key advancedinput — desktop mouse · mobile touchstorage — desktop: not-applicable · mobile: not-applicablemobile overflow — 5px
Finding SHOELEATHER-003 · Mobile Layout

Mobile viewport contains clipped or horizontally overflowing UI

mediummobile

Automated geometry probe observed 2 canvas surface(s) wider than or outside the viewport.

Exact reproduction sequence
  1. Open shoeleather.html at 375×812, deviceScaleFactor 2 (seed 3255866197).
  2. Wait for the title/game surface to render.
  3. Inspect the page at the initial horizontal scroll position and compare control/canvas bounds with the viewport.
Finding SHOELEATHER-001 · Dead End

Candidate non-responsive state after continued input

lowdesktopheuristic

The frame hash remained identical for 6 consecutive active input epochs after 13 distinct visual transitions had already been driven, so the harness had demonstrably reached playable state before the stall. This remains a heuristic signal rather than a confirmed soft-lock: static menus and inputs that do not apply to the current screen produce the same observation.

Exact reproduction sequence
  1. Open shoeleather.html at 1280×800, deviceScaleFactor 2 (seed 1361238092).
  2. 9.00s — Click button “Notebook (n)” at (243, 728)
  3. 9.31s — Press s
  4. 9.73s — Press 2
  5. 10.19s — Click canvas at (225, 512) [grid 0.14, 0.70]
  6. 10.60s — Click button “Options” at (802, 728)
  7. 11.00s — Click button “Options” at (802, 728)
  8. 11.33s — Click canvas at (640, 382) [grid 0.50, 0.50]
  9. 11.75s — Click canvas at (640, 382) [grid 0.50, 0.50]
Finding SHOELEATHER-002 · Dead End

Candidate non-responsive state after continued input

lowmobileheuristic

The frame hash remained identical for 6 consecutive active input epochs after 7 distinct visual transitions had already been driven, so the harness had demonstrably reached playable state before the stall. This remains a heuristic signal rather than a confirmed soft-lock: static menus and inputs that do not apply to the current screen produce the same observation.

Exact reproduction sequence
  1. Open shoeleather.html at 375×812, deviceScaleFactor 2 (seed 3255866197).
  2. 8.68s — Tap button “Export Debug Log” at (236, 554)
  3. 9.05s — Tap button “Restart Case” at (87, 518)
  4. 9.48s — Tap button “Options” at (307, 518)
  5. 9.91s — Press d
  6. 10.23s — Tap button “Save” at (259, 482)
  7. 10.58s — Tap canvas at (326, 352) [grid 0.86, 0.50]
  8. 10.98s — Press 7
  9. 11.31s — Press Escape
GAME 10 / 10

STRAY SQUADRON

games/stray-squadron.html

1defect
117 inputs10 frames0 diagnostic eventsframe cadence — desktop 32.3ms (~31 FPS) · mobile 16.7ms (~59.9 FPS)opener — desktop opened on Space · mobile opened on Spaceinput — desktop mouse · mobile touchstorage — desktop: persisted (1 key) · mobile: persisted (2 keys)mobile overflow — 0px
Finding STRAY-SQUADRON-001 · Dead End

Candidate non-responsive state after continued input

lowmobileheuristic

The frame hash remained identical for 6 consecutive active input epochs after 36 distinct visual transitions had already been driven, so the harness had demonstrably reached playable state before the stall. This remains a heuristic signal rather than a confirmed soft-lock: static menus and inputs that do not apply to the current screen produce the same observation.

Exact reproduction sequence
  1. Open stray-squadron.html at 375×812, deviceScaleFactor 2 (seed 1894421559).
  2. 19.94s — Tap canvas at (323, 698) [grid 0.86, 0.86]
  3. 21.07s — Wait 862ms
  4. 21.51s — Press 3
  5. 21.96s — Press 9
  6. 22.34s — Tap canvas at (263, 568) [grid 0.70, 0.70]
  7. 22.71s — Tap canvas at (113, 568) [grid 0.30, 0.70]
  8. 23.05s — Tap canvas at (188, 568) [grid 0.50, 0.70]
  9. 23.39s — Tap canvas at (188, 114) [grid 0.50, 0.14]
METHODOLOGY / LIMITATIONS

How this evidence was produced

Deterministic exploration

Each game/viewport pair receives a derived seed recorded beside its input log. The policy discovers visible buttons, links, focusable elements, and canvases, then mixes element clicks, canvas grid clicks, keyboard input (arrows, WASD, Space, Enter, Escape, and 1–9), and waits.

Deterministic opener

Before random exploration begins, each game is driven through an ordered menu-confirm sequence — by default K, Enter, Space, then Z, with per-game overrides — stopping at the first key that changes the frame. Keyboard-gated title screens would otherwise depend on the random policy stumbling onto the right key, and read as unresponsive when it did not.

State-change heuristic, and its floor

After every input epoch a downscaled frame is reduced to a 16×10 difference hash. Six identical hashes during a diverse active-input sequence that includes a click raises a candidate. A dead-end is claimed only when at least three distinct visual transitions were driven first; below that the harness has not demonstrated it can play the game, so the observation is filed as an informational coverage gap against this driver rather than as a defect in the build.

Responsiveness sampling

A harness-owned requestAnimationFrame loop is installed before any page script, and main-thread evaluate latency is timed from outside the browser throughout each pass. Frame hashing runs entirely outside the page, so measurement does not compete with the game for the main thread. Absolute numbers are machine-dependent and never reported alone: a finding is raised only where a build separates from the corpus median for the same viewport on a robust median/MAD test, past an absolute floor of ~30 FPS and an absolute minimum gap, so a uniformly fast corpus yields nothing and a uniformly loaded machine does not flag every game.

Measuring the measurer

Frame timings are only as good as the host that took them. The harness samples the machine's own load through the sweep, and when the host is competing for CPU it says so at the top of this report, marks every timing-based finding heuristic, and scopes the caveat to those findings alone — runtime errors, failed resources and layout geometry do not depend on how busy the machine was.

Real touch on mobile

The mobile pass drives the browser touchscreen — genuine touch events — rather than synthetic mouse clicks in a phone-sized window, so builds that bind touch or gate on pointer type are exercised the way a phone would exercise them.

Browser diagnostics

The harness records console errors and warnings, page errors, window errors, uncaught promise rejections, and failed requests from before navigation. Duplicate identical diagnostics are grouped without suppressing their observed count. Autoplay-blocked audio and rejected pointer-lock are consequences of headless playback without a genuine user gesture, so they are recorded verbatim as informational environment diagnostics and kept out of the defect tally rather than being allowed to crowd out real findings.

Mobile and persistence probes

The mobile pass measures document overflow and rendered control/canvas geometry at 375×812. When localStorage is populated, the page reloads and byte-level snapshot digests are compared. Product intent is labeled unknown because this is a black-box run.

Evidence handling

PNG frames remain in each game’s frames/ directory. This report embeds reduced JPEG thumbnails without cropping, while every thumbnail links to the corresponding full relative frame without requiring JavaScript. Reproduction steps are generated directly from the timestamped input log.

Boundaries

This sweep does not assert design intent, completion-path coverage, accessibility conformance, cross-browser parity, network behavior, or exhaustive game-state coverage. A clean result means no defect was observed in the recorded time box. Explicit load-error text on the page is a definitive critical load failure. A run the driver never managed to advance is not: a build that renders correctly but resists this input policy, or repaints too slowly for the sampler, produces the same signal, so it is reported as an informational coverage gap and the responsiveness pass is left to carry the real evidence.