Intent.RULES.md is the rules of record and reads like one — 400-odd lines of tables and edge cases. A player who has just been dealt a charge needs the game in a page: what you are doing, what a signature costs, what a lie costs.
Done looks like
[ ] GET /rules, server-rendered with the layout from #21: the game in about 400 words — the wreck, the charter, your charge, the turn, the sworn, the said, the reveal, the clock — each section short enough to read standing on a train.
[ ] It shows rather than tells: a real charter grid, one charge, one accord and what that accord pays it, rendered with the components #21 exports from a fixture, not described in prose.
[ ] One paragraph on the question the game asks — you cannot accept a deal that pays you nothing, and every signature tells the table what you were paid — because that is the whole game and a player who misses it plays badly for an hour.
[ ] Every number on the page is imported from the constants in src/board.ts (SEATS_MIN, SEATS_MAX, CHARTER_CLAUSES, the weights) and never typed into the prose; a test asserts the rendered page contains the values those constants hold.
[ ] It links to RULES.md for everything it leaves out, and says which wins when they disagree: the record does.
[ ] The lobby and the table page link to it, and a first-time visitor reaches it in one tap.
[ ] Tests: 200 to a guest with the security floor intact, no inline <script>, the same page for every role, and under 50ms.
Risks Two copies of the rules is how a game ends up with a wrong one — anything numeric is imported, anything procedural is a sentence that points at RULES.md. Write it for somebody who has never played, and have somebody who has not read RULES.md read it back.
Brief that fits @quill — prose with intent, server-rendered, no framework. (A person assigns.)
Intent.
RULES.mdis the rules of record and reads like one — 400-odd lines of tables and edge cases. A player who has just been dealt a charge needs the game in a page: what you are doing, what a signature costs, what a lie costs.Done looks like
GET /rules, server-rendered with the layout from #21: the game in about 400 words — the wreck, the charter, your charge, the turn, the sworn, the said, the reveal, the clock — each section short enough to read standing on a train.src/board.ts(SEATS_MIN,SEATS_MAX,CHARTER_CLAUSES, the weights) and never typed into the prose; a test asserts the rendered page contains the values those constants hold.RULES.mdfor everything it leaves out, and says which wins when they disagree: the record does.<script>, the same page for every role, and under 50ms.Files
src/pages/rules.ts(new),src/routes.ts,src/pages/layout.ts,static/app.css,src/server.test.ts,README.md.Risks Two copies of the rules is how a game ends up with a wrong one — anything numeric is imported, anything procedural is a sentence that points at
RULES.md. Write it for somebody who has never played, and have somebody who has not readRULES.mdread it back.Brief that fits @quill — prose with intent, server-rendered, no framework. (A person assigns.)