Credibility pass: comments say what the code can't, and the seams are gone

Engine: pit-rim exits live in one helper (pitRimExits) shared by the
resolver and the automaton; chargeReach names the six-stride cap; dust
sight is inDust + dustAtEnd; PushPending is exported once; the force-field
counter builds its events in one list; drawUnderSlowDeath says what it
draws under. Test groups are named for the rule they pin, not the
revision that introduced it.

Client: one smoothstep; one edgeScar per battle-scarred edge; one
board-zone rule (which also seats the caption strip on phones); the
compass names live in SIDE_NAMES; net.flash() is the one toast; MediaQuery
replaces two hand-rolled matchMedia listeners; sprites carry their sizes
as plain numbers and their CSS in one rule each; canvas helpers are
formatted like the rest of the tree. Comments that told how a cel or a
fallback used to look now say what it draws. The actions-over notice no
longer blames a pickup when slime ended the turn.

Server and ops: dataRoot() is the one data directory; headlineOf builds
its deeds without a cast; the rollup and skills read the same way the
code behaves.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
This commit is contained in:
Eric Wagoner
2026-09-16 00:21:34 -04:00
co-authored by Claude Fable 5.1
parent 85690f0e23
commit 6e49fc9020
40 changed files with 331 additions and 293 deletions
+12 -15
View File
@@ -34,26 +34,23 @@ quiet, say so in one line before the details.
written at 00:10 by /usr/local/bin/wizwar-rollup.sh; counts only, no
addresses): the last 7 rows give requests, human vs bot addresses,
socket connects, path mix (/, /clips, /watch, /ws), external
referrers (reddit.com, boardgamegeek.com after the 2026-09-03
announcement), new rooms, human seats and names, reports/replies,
referrers, new rooms, human seats and names, reports/replies,
and vitals (memMB, memPeakMB, diskPct, load1, protocolErrors,
serviceStarts, ledgerMB). Report day-over-day direction, not raw
rows. Its Sentry cron monitor is slug `wizwar-rollup` (a missed
check-in there means the rollup itself is broken). Re-roll a day by
hand: `wizwar-rollup.sh YYYY-MM-DD`. `campaigns` counts visitors
(one per address per day) whose link carried `?ref=<name>` — the tags
on Eric's posts (reddit, bgg, …) — or a Facebook fbclid; referrers
(one per address per day) whose link carried a tag the rollup header
names (`?ref=<name>`, a utm_source, Facebook's fbclid); referrers
alone can't attribute Reddit or BGG, which send none.
**Right now** (on request, or when the announcement is fresh): live
sockets `ss -tn state established '( sport = :8787 )' | tail -n +2 | wc -l`,
rooms touched in the last hour `find /var/lib/wizwar/rooms -name '*.jsonl' -mmin -60 | wc -l`,
and today so far `wizwar-rollup.sh $(date -u +%F)` (a partial row,
replaced again at 00:10; the vitals in it are the moment's).
**Right now** (on request): `wizwar-visitors.sh` prints it — live
sockets, rooms touched in the last hour, and today's partial row —
see /wizwar-visitors.
5. **The table itself**:
- Room count and growth: `ls /var/lib/wizwar/rooms/*.jsonl | wc -l`
- New human names this week: room ledgers' join lines minus bots
(Automaton*) and known names, on rooms created in the last 7 days
(meta line `createdAt`)
- New human names this week: the rollup rows' `humanNames` (host and
joiners alike, bots excluded) minus the regulars the visitors skill
lists
- Unanswered feedback count from /var/lib/wizwar/feedback.jsonl —
if any, offer to run the reports desk (`/wizwar-reports`)
- Access-log pulse: `wc -l /var/lib/caddy/access.log` and a count of
@@ -71,9 +68,9 @@ action, or "nothing needs you."
- The service restarts cleanly (ledgers replay); restarts in the journal
during deploys are normal, not incidents.
- Room memory is evicted after idle (finished 30 min, others 24 h);
boot-restores load everything then shed, so post-deploy memory spikes
settle within the hour.
- Room memory is evicted after idle (finished 30 min, others 24 h), each
sleeper leaving a stub on disk; a boot replays only rooms whose stub is
stale and leaves the rest asleep, so a deploy costs no memory spike.
- Unattended-upgrades reboots the box at 09:30 UTC when a kernel patch
requires it; a reboot there is maintenance, not an outage.
- Caddy access logs live at /var/lib/caddy/access.log (self-rotating,
+4 -3
View File
@@ -19,8 +19,9 @@ first, so the traffic line is current to the minute. Its output:
"right now" line. Two sockets at a quiet hour is Eric plus one.
- **traffic** — today's row of `/var/lib/wizwar/rollup.jsonl`:
addresses of people (bots split out), front-page vs gallery vs
replay views, campaigns (`?ref=` tags on posted links, Facebook's
fbclid) and referrers. Reddit and BGG send no referrer.
replay views, campaigns (the tags a link carries: `?ref=`, a
utm_source, Facebook's fbclid) and referrers. Reddit and BGG send no
referrer.
- **players today / NEW today** — names seated in rooms created today;
NEW means the name's first room ever is today. Known regulars:
Kestrel, Reuben, Jason, Yohon, and "Claude" (the duel seat).
@@ -37,7 +38,7 @@ Lead with new names and whether anyone is at the table now. Then, for
each stranger, say how far they got and where they stopped — the last
human move and the span tell it: a room that is "lobby only" stopped
before the start button; a game of under five minutes ending on
pickUpTreasure is the treasure wall the slips now explain; a long span
pickUpTreasure is the treasure wall (the in-game slips explain it); a long span
with many moves is a real session, resumable from their lobby. Quote
human chat verbatim. Then the traffic line as a single sentence with
the day-over-day direction if a previous row exists.