BOB WAS A BOMBBack to the page

Review notes (publish not approved)

Preview built 2026-11-07 by an unattended pipeline run. The game at /play/ is a byte-identical copy of ~/Programming/games/shooters/bob-was-a-bomb at commit c0e6865. Pipeline files live in single-page-sales/pages/bob-was-a-bomb/.

Blockers before this goes public

  1. Promotion is your call. The game sits in the arcade's internal stage. This page sends players to its own /play/ copy, not the portal. Publishing the page means promoting the game.
  2. Nobody has played it by hand. All proof comes from the game's bots. Play one run on a desktop and one on a phone, then reread "I'm bad at shooters" and "How long is a run?" to see if they still hold for a person.
  3. The phone touch rule. Every touch fires a shot from the caret, including the touch that starts a drag. A tap away from the caret misses (probe: tapped at x=921, fired at x=683). The hero and FAQ teach "drag, lift, tap." If you fix this in the game (repo finding R1), rewrite both lines.
  4. Sound is unheard. The page only says "a typewriter clack on every shot," which comes from the code comments. Listen before you keep it.
  5. The hook image is staged. It's the game's own ?cardshot frame, and the caption says so (PLANET can't fall on page 1). Keep the image with that caption or replace it with a live capture.
  6. The /play/ copy will drift. When the game changes, recopy index.html and src/ into dist/play/ and rerun build/check-page.mjs and build/probes/facts.mjs.

Game repo findings (found while building the page)

  1. R1: touch fires on touchdown. In main.js, pointerdown → press() → input.fire++, while the caret moves at most 43 logical px a tick. Starting a drag wastes a shot from the old position, and that shot can break a word under it. Suggested fix: on touch, fire on a short tap with no movement, not on touchdown.
  2. R2: the results "new:" list can show broken paths. A broken BEAR (BER) that then lost its R logged BER → BE. That counts as found in S.found but not toward n / 56. Suggested fix: filter newFinds against EDGES in bank().
  3. R3: the portrait phone board is a strip. At 390×844 the board scales to 0.30, so letters are about 13 px wide, with empty paper above and below. Landscape scales to 0.54.
  4. R4: the "you broke the word, not the thing" line is only in the docs. The game itself says "broken words still bite: clear every letter." The page uses the docs line as a rule, not as a quote.
  5. R5: the docs describe the brute bot wrong. GDD and HANDOFF say it shoots every letter. bot.js shoots the letter over its head on the nearest threat and dodges. It makes about 14 accidental saves a run. The page now describes it accurately.

How it was checked