Files
Eric WagonerandClaude Fable 5.1 33ac0ec808 The credibility pass on Hnefatafl, ported to the template: the ops scripts count traffic through one parser, the reports digest is one program, the plaintext-token fallback and its migration are gone, and the stylesheet holds each shared rule once
From the hnefatafl repo's pass of the same day, everything that touched a
kit-shared file. The visitors digest and the nightly rollup share
deploy/traffic.py, installed to /usr/local/lib/<slug>; the rollup writes
the finished-games count it computed behind "and False". pull-reports.sh
and the reports skill both use deploy/report-digest.ts. The seat line
requires its token hash and the start line its rules revision; the
migration for ledgers written before hashing goes with them. The route
table in server/src/index.ts lists every route; Report, ReportLine and
Tally are declared once in view.ts for both sides; exports nobody
imported are exports no more.

In the client: .small, the × that dismisses, and the frame of the
reading pages are in app.css once; the preferences panel shares the
report slip's modal shape; the room store gains seatEmpty and
seatUnheld, and the lobby and the join page read those instead of
three spellings of their own. The room's moved and awaiting fields
stay: the demo board reads them, and simultaneous rounds are the
contract.

The deploy README no longer describes a browser-only game; the visitors
skill no longer names a /play route; the reports skill's replay call
carries the room's options. The Slack channel id is passed in the
environment rather than filled in as a placeholder.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwFKMuQnPAEHJ5yA1q4orh
2026-09-23 20:12:37 -04:00

1.7 KiB

name, description
name description
__SLUG__-visitors The __NAME__ visitors report — who is at the table right now, who came today and how far each game got, and today's traffic. Use when Eric asks who has been playing, about new players or visitors, "anyone playing?", or wants a traffic report.

NAME visitors

One command, one screen, printed by the droplet. Read it for Eric like a host glancing over the hall.

Gather

ssh root@__IP__ __SLUG__-visitors.sh [YYYY-MM-DD]

Default is today, UTC; Eric is in US Eastern, so an evening at his desk spills into the next UTC day. Run yesterday too when the hour is early.

  • as of / live sockets / rooms touched in the last hour: the "right now" line. One socket at a quiet hour is Eric.
  • traffic: Caddy's access log for the day, bots split out by user agent, page requests by page (hall, rules, guide) and room links opened, referrers and campaign tags.
  • players today / NEW today: names seated in rooms created today; NEW means the name's first room ever is today.
  • rooms today: one line each: time, code, humans vs bots, empty seats, state (lobby only / started, no turns / in play), turn count, span, the last turn's time, and how many lines of table talk were said. Talk is a sign people came together; a bot game has none.

Read it

Lead with new names and whether anyone is at the table now. Then, for each stranger, say how far they got: a room that is "lobby only" never filled its seats; "started, no turns" means they sat and left; a span of a few minutes with a handful of turns is a game tried; many turns is a game played. Eric's own names appear too (he plays as whatever he last typed); do not count him as a visitor.