← back to CelebritySignatures

screenrecord/DEBUG-REPORT-TK10191-frontpage.md

39 lines

# CelebritySignatures front page — screenrecord UI debug (TK-10191)

**Target:** http://localhost:9956/ (front page `index.html`) · **2026-08-08** · agent claude-ios-shots
**Method:** 5 passes, each a different click-order combination, real Chrome + video, full console/pageerror capture → `debug-log.jsonl` (2,510 action rows).
**Target correction:** the ticket's original `:9920` is now `idea-loop`; the CS web app moved to `:9956` (per `.deploy.conf`, 2026-08-03) and was simply DOWN — restarted it there. (This corrects `norma-api-smoke`'s "no running web process / close it" note: the web app exists, it was just not running.)

## Videos (proof of moving parts)
`screenrecord/rec/run{0,1,2,4}/*.mp4` — run1 is the substantive pass (4.8 MB). (run3's recording didn't finalize; its actions are still in the log.)

---

## 🔴 #1 highest-leverage — External image reliability (dozens broken across the page)
The page pulls celebrity signature + portrait/artwork images from external sources, and **~40+ distinct images fail** (404 / broken / CORS) across the 5 runs:
- **Wikimedia** `commons.wikimedia.org/wiki/Special:FilePath/...` and `upload.wikimedia.org/...` — many `Image broken` + `REQUEST_FAILED GET` (Kerouac, Mishima, Diderot, Freud signature, FDR, Keynes, Ruskin, numerous signatures).
- **Art Institute of Chicago** `artic.edu/iiif/...` — several `HTTP 4xx` + broken.
- **Met Museum** `images.metmuseum.org/...` — **CORS-blocked** (`Access to fetch ... blocked by CORS policy`) — systematic.

**Impact:** visible missing images / blank tiles; the Met CORS block means those never load client-side.
**Fix direction:** proxy + cache external art images through the app's own server (it already has one) instead of hot-linking; Met especially must be fetched server-side (CORS only affects the browser). Add an `onerror` fallback so a dead source degrades gracefully.

## 🟠 #2 — Shared script errors on the front page (`account.js` references off-page elements)
`index.html` logs a cluster of **`Element not found`** for IDs that live only on OTHER pages: `#finderInput`, `#selMural`, `#murW/#murH/#wallW/#wallH`, `#scenePresets button[data-scene=...]`, `#btnCenter`, and the `#orderForm` fields (`input[name=name/email/wall_w/wall_h]`, `textarea[name=notes]`). These belong to `murals.html` / the order form, but a shared script (`account.js`) runs page-agnostically and errors on the home page.
**Fix direction:** guard each block (`const el=$('#x'); if(!el) return;`) or scope the script to the pages that own those elements.

## 🟡 #3 — Lightning-round game bug (`Missing reveal link in lightning round`, 26×)
`game.html` lightning-round logic logs `Missing reveal link in lightning round N` repeatedly (surfaced via the front page's Games CTA). **This is game.html scope = TK-10192** — flagged here for that ticket. Also ~7 `[object Object]` errors = an error path logging a raw object.

---

## Excluded as harness / test-env noise (NOT app bugs)
- Google Analytics beacons failing (`google-analytics.com/g/collect`, `google.com/g/collect`, `net::ERR_FAILED`) — expected in headless with no real GA network. Two GA property IDs fire (`G-NHEVPNTDNJ`, `G-YDNCYCLN`) — verify dual-tagging is intentional; it's injected, not in `public/`.
- Playwright `Target/context closed`, `Timeout`, `not visible`, `scrollIntoView` — automation-side, not app defects.

## Order-dependent findings
No error appeared *only* under a specific click order — the real errors (external images, off-page element refs) reproduce across all 5 combinations → they're load-time/content issues, not state-leak bugs.

## Recommendation
Fix #1 (server-side image proxy + `onerror` fallback) first — biggest visible-quality win. #2 is a quick guard. #3 → TK-10192. Hand this report to `/contrarian` to gate before any fix ships. No code changed here (debug pass only).