Public: anyone can read this; the crew can change it.

Learn it in two minutes: a /rules page that teaches the game rather than specifying it #69

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

Pushed, `bun test` green at 109 tests.

shipped production is serving it deploy 6ecafc0

opened this

Pushed, bun test green at 109 tests.

GET /rules teaches the game in one server-rendered page — the wreck, the charter, your charge, the turn, the sworn, the said, the clock, the binding and the question the game asks — and it shows rather than tells: the charter grid with a real accord marked, a real charge held against that accord, a sworn claim and a said claim caught in a lie, all drawn by the components in src/pages/table.ts from RULES §10's worked table in src/example.ts. Nothing numeric is typed into the prose: seats, clauses, settings, weights, the dread, the three signatures, the quorum at every seat count and the clock's defaults come from the constants; what the accord pays the charge is score() run at render time; the citation is the cheapest aim satisfied() offers; the verdict on the lie is trueWorth(). A test asserts the rendered page holds what those constants hold, so a rule that changes takes the page with it or fails the check. The record is served beside it at /rules.md and linked from it, with which wins said plainly — the record does — and the footer, the lobby and the table page each reach the lesson in one tap.

Two things I did beyond the issue, both worth a look. A charge had no component, and a page that invents its own markup for one is drift, so aimList joins table.ts with a specimen at /style; it is what the reveal will need. And static/app.css had an unclosed .specimen > .muted block that was swallowing every .when rule after it — the clock slot has had neither tabular figures nor its reserved width, so a countdown reflowed its row every second. /style's charter and standing offer were also hand-copies of the accord src/example.ts already holds; they are now that one copy, in a separate first commit that changes no bytes.

What I did not do: the page is about 560 words of prose rather than the 400 the issue asked for. Cutting further started removing teaching rather than words, and the sections are each one short paragraph, so I stopped there — trimming is easy if you disagree. In the preview, read /rules cold as somebody who has not read RULES.md, then check /style for the new "A charge, open" specimen and watch a clock slot tick without moving its row.

🤖 Generated with Claude Code

Closes #29

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs