← Riddle Proof
Good Catch Diary

Real bugs caught by cheap browser proof.

A running diary of browser-visible issues found by real Riddle Proof runs. Each entry explains the bug, the evidence, and the general proof lesson.

6curated catches from recent real browser proof runs.
<$0.10Even a ten-minute proof run is under nine cents of browser time.
0 sourceMany findings can be detected from the outside with a URL and browser contract.
ManifestEach catch links to a receipt with screenshots, logs, run metadata, and the sales lesson.

The diary

bug → evidence → lesson
The game worked, but the iframe was clipped Riddle artifact
May 13, 2026penniesiframeresponsiveblack-box

The game worked, but the iframe was clipped

Bug: Hot Path completed its two-player interaction in every viewport, but the embedded game surface was visibly clipped on phone and tablet.

Why normal checks missed it: The saved game used overflow hidden, so document scroll width stayed clean. A simple page overflow check would have passed.

Proof lesson: Element bounds and screenshots catch user-visible clipping that scalar scroll-width checks miss.

Evidence: A phone viewport screenshot from the browser run shows the embedded game still active, but visibly cropped inside its frame.

The link worked in production, but escaped mounted preview Riddle artifact
May 13, 2026< $0.01previewroutingPR evidence

The link worked in production, but escaped mounted preview

Bug: The builder saved-game link was rendered as an absolute /play URL. Production accepted it, but mounted Riddle Preview needed the /s/{preview_id} basename preserved.

Why normal checks missed it: A production-only check would never see the mounted preview basename. A code review could miss the subtle difference between anchor hrefs and router links.

Proof lesson: PR proof should exercise the artifact reviewers actually open: the preview URL, not only production-shaped assumptions.

Evidence: The browser run opened the saved player flow through a mounted preview URL, which is the same shape a reviewer would click from a PR.

A fixed nav made full-screen routes one nav-height too tall Riddle artifact
May 13, 2026~$0.01layoutroute inventoryresponsive

A fixed nav made full-screen routes one nav-height too tall

Bug: Multiple older full-screen routes were exactly one fixed navigation bar too tall on desktop/tablet/phone.

Why normal checks missed it: Each route still loaded and looked mostly functional. The bug only became obvious when route-root bounds were measured across a viewport matrix.

Proof lesson: A generic app-shell profile can find repeated layout classes: fixed nav offset, route root height, scroll policy, and top offenders.

Evidence: A desktop screenshot from the route inventory run captures the game route inside the app shell while the measured route-root bounds reveal the repeated nav-height overflow pattern.

A green semantic state still hid the win result Riddle artifact
May 13, 2026penniesvisual evidencecanvasquality

A green semantic state still hid the win result

Bug: Gem Mine reached the escaped state semantically, but the user-facing terminal panel did not clearly show ESCAPED! until the screenshot review caught it.

Why normal checks missed it: State assertions proved the game outcome. They did not prove that the outcome was visible and understandable to a player.

Proof lesson: Screenshots are not just decoration. They catch places where machine-readable state is stronger than the actual user experience.

Evidence: The after-continue screenshot shows the game state after escape, making it possible to judge whether the win/result was actually visible to a player.

Restart-only texture errors after gameplay looked fine Riddle artifact
May 13, 2026< $0.03console errorsgame lifecyclerestart

Restart-only texture errors after gameplay looked fine

Bug: Classic Slalom passed its behavior checks, but repeated scene restart generated 180 duplicate Phaser texture-key console errors.

Why normal checks missed it: A first-load smoke test would stop before restart. The bug lived in the lifecycle, not the happy-path load.

Proof lesson: Terminal/recovery proof finds defects that only appear after users finish, restart, replay, or revisit a route.

Evidence: The restart screenshot captures the post-restart state; the same browser run also recorded the duplicate Phaser texture-key errors that did not appear on first load.

The homepage rendered games, but hid community games Riddle artifact
May 13, 2026< $0.01manifest driftroute inventoryintegration

The homepage rendered games, but hid community games

Bug: Saved community games loaded directly by URL, but the homepage did not list them because the manifest schema had drifted.

Why normal checks missed it: The player route was healthy and built-in routes were healthy. The bug was in discovery: the source page failed to expose a valid route.

Proof lesson: Route inventory should prove both direct route health and source-page clickthrough/discovery health.

Evidence: The homepage screenshot shows the discovered community-games area after the manifest fix, tying the bug to route discovery rather than the direct player route.

The pattern

These are not “AI vibes.” Each catch has a browser run behind it: a URL, a viewport, a user-like action sequence, screenshots, console/page evidence, and a structured result.

  • Black-box enough to find bugs on arbitrary real pages.
  • Specific enough to become repeatable project profiles.
  • Cheap enough to run while agents work, not only before a major release.

Why it matters

Every useful catch becomes a short evidence story: what the browser saw, why normal checks missed it, and how that pattern can become a reusable proof profile.