THE KILL-THE-SERVER GATE, permanent and green (charter law #1 made falsifiable): ARM 1 server-up · gone[3] → 117 survivors · items[] 120, identity AND ORDER intact · COLLATERAL 0 · `gone` carries the atlas id verbatim (R26 fence) ARM 2 killed mid-session · enter 6ms vs control 6ms (Δ+0) · worst frame 204ms vs control 202ms (Δ+2) · room complete from files · ZERO game errors · EXACTLY 1 refused connection ARM 3 server-down boot · pure tier 1, gone[0] · ZERO game errors · exactly 1 refusal SANDBOX · POST/PUT/PATCH/DELETE all 501 · a mint shop 404s The subject exists only because G built `make-fixture`: production `gone` is EMPTY (0 sales since 2026-07-01), so this gate would have passed vacuously forever on live data. CORRECTION 1 — "ZERO console errors on server death" is UNACHIEVABLE, and F measured why. A fetch to a dead host logs net::ERR_CONNECTION_REFUSED at the BROWSER level; no .catch() sees it. To log zero the reader would have to know the server is dead WITHOUT ASKING. One refusal is the irreducible cost of discovering death. F's replacement is strictly stronger: ZERO errors from game code, and EXACTLY ONE refusal — which PROVES the circuit breaker. Without the breaker it is one error per shop entry forever, and "zero" could never tell a working breaker from a broken one because both fail it. F is the beneficiary of this change, so it is filed loudly in §27 for Fable to ratify or overrule, not quietly relaxed. CORRECTION 2 — F's frame assertion was weak: `< 250ms` is a number with no control. ARM 2 first reported worst-frame 201ms and PASSED. But entering a shop rebuilds an interior, which costs the same with or without a server — so an absolute threshold measures Lane C's room build, not the network. The arm now walks the same shop with the breaker tripped and asserts the DELTA: 202ms control, 204ms killed, Δ+2ms. The death cost nothing the room didn't. F told A the same thing one round ago; a number without a control is not a measurement. THE TOUR — 3 of 4 frames, and the 4th is FILED NOT SHIPPED. The real crate (the money shot: its own 120 records, price stickers, the keeper), a mint crate (captioned MINT — plausible, not real), the classic covenant. 0 page errors. The FRONTAGE frame does not land after three attempts and F will not ship a frame that doesn't show what its caption claims: the cluster primitive answers "where is this town's heart", which is not the question a frontage frame asks — Red Hill's heart is 2 shops/60m and does not contain Monster Robot. Next: ask B, who owns the frontage and shipped its mark this round. Re-deriving B's anchor in a tour script is how you get three bad frames. Also: the interior beauty shot came back with the HUD across it — R21's lesson, fixed on the street frames only. Now every DOM overlay is hidden, not a guessed selector list. NOT TAGGED. qa.sh --strict --matrix and the frontage frame remain. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| before | ||
| laneA | ||
| laneB | ||
| laneB_r4 | ||
| laneC | ||
| laneD | ||
| laneE | ||
| laneF | ||
| references | ||
| release_v3 | ||
| release_v3_1 | ||
| release_v4 | ||
| release_v5 | ||
| v1_tour | ||
| v2_tour | ||
| v4_alpha | ||
| v4_beta | ||
| contact.html | ||
| README.md | ||
| v2_contact.html | ||
docs/shots — visual regression + devlog reference tree
Owned by Lane F (each lane also drops its own acceptance screenshots here).
docs/shots/
laneA/ … laneE/ … per-lane acceptance screenshots (each lane owns its dir)
v1_tour/ … F: the v1 beauty shots (tools/shots.py) — frozen devlog set
v2_tour/ … F: the v2 tour (tools/v2_tour.py) — the CURRENT canonical set (see below)
before/ … F: last known-good capture, for side-by-side regression
references/ … real-world reference photos named per shot
v2_contact.html … generated contact sheet for the v2 tour
v2 tour — stable filenames (do not rename; the v3 site links these)
cd web && python3 -m http.server 8130 then tools/.venv/bin/python tools/v2_tour.py
→ 1280×720 PNGs in v2_tour/ + docs/shots/v2_contact.html.
| file | what it documents |
|---|---|
street_noon.png |
main strip at midday |
crossroads_busy.png |
busiest intersection, peds about |
shopfront_detail.png |
verandah + sign + window up close |
patronage_door.png |
streamed peds at an open shop's door (Lane D patronage) |
rain_verandah.png |
rain outside a lit ?winmap video-shop window |
rain_street.png |
wet strip, rain down the street |
tram_stop.png |
the v2 tram paused at a shelter (?tram=1) |
night_crowd.png |
VIDEO REGAL glowing amid CLOSED neighbours at night — the §3.5 hours story (clean-night boot). NB: no visible street crowd — see the note below. |
browsers.png |
an occupied shop's interior life — a browser at the rack + the keeper at the counter, both human-sized (R10 giant-rig fix). figures human-sized vs door/fittings: yes. |
dig_real.png |
riffling a real-cover record bin (?dig=1&stock=real) |
katoomba_main.png |
plan-agnostic main strip (?plansrc=osm&town=katoomba) |
Note on night_crowd (Lane F, R10)
Re-framed to the tighter, readable "one lit shop in a closed town" composition. It does not show a
standing street crowd, and that is not a framing bug: Lane D's night patronage parks ducked-in patrons
hidden inside the shop (they become the interior browsers seen in browsers.png), and seed 20261990's
video shop sits on a low-traffic corner, so none gather visibly outside (tested: 0 patronage / 0 visible
at night). The town's night life is the interior presence + the neon-vs-CLOSED mood. A visible outdoor
night queue would need a new Lane-D mechanic (loiter-outside-the-openLate-shop) — parked for v3. The
~20 fps in night captures is a headless-chromium software-GL artifact (the scene is light, ~128
draws / 65k tris); on real hardware the night scene is not a perf concern.
Regression workflow
Before a risky change, snapshot the good state into before/, then re-run v2_tour.py and eyeball
v2_contact.html. Process rule (R10): any shot containing a humanoid gets an explicit
"figures human-sized relative to doors/fittings: yes" line in the progress note — actually look.