← back to Nineoh Guide
5x/REPORT.md
37 lines
# /5x REPORT — Unofficial 90210 Fan Guide (web)
**Target:** http://127.0.0.1:4090 (local Next.js dev, `nineoh_guide` Postgres at /tmp socket)
**Date:** 2026-09-12 · **Ticket:** TK-00032 · **Agent:** claude-run-00032
## Sweep ledger
| sweep | six-way | routes | caught | fixed | commit |
|-------|---------|--------|--------|-------|--------|
| 1 | 7/7 pass, 0 JS err | 18/19 (`/api/cast` **500**) | 1 | 1 | dc8c199 |
| 2 | 7/7 pass, 0 JS err | 19/19 | 0 | 0 | — |
| 3 | 7/7 pass, 0 JS err | 19/19 | 0 | 0 | — |
**Stop condition:** clean twice (sweeps 2 & 3) → DONE.
## Defect caught + fixed (sweep 1)
`/api/cast` returned HTTP 500 (`{cast:[]}`) — the Expo app's cast endpoint served an
empty list. Root cause: the query referenced `cr.show_id` (credits.show_id), a column
that does not exist in the schema; only `characters.show_id` carries show scoping.
Postgres threw `column cr.show_id does not exist`, the route caught it and returned 500.
Fix: replaced `coalesce(cr.show_id, ch.show_id)` with `ch.show_id` in the select,
`distinct on`, and `order by`. `/api/cast` now returns 200 with populated `showId`
(verified: Shenae Grimes-Beech → Annie Wilson, real showId). Commit dc8c199 (local).
Note: the `/cast` **page** was already 200 (its query never selected show_id) — only the
`/api/cast` route (added later for the mobile app) carried the bad column.
## Final six-way state (all sweeps)
- M1 HTTP contract · M2 headless render (801KB) · M3 E2E (0 JS errors)
- B4 Chrome · B5 Safari · B6 Firefox — all pass
- Click-through: 1 pass / 0 fail / 10 skip (skips = DW-store-specific selectors absent here)
- tsc `--noEmit`: clean
- 19/19 routes 200: `/ /episodes /cast /characters /news /community /games /show /search
/legal/{disclaimer,dmca,privacy} /sitemap.xml /robots.txt /api/{health,episodes,cast,news,shows}`
## Open items
None. Live web app verified clean and self-healed.