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

A wreck worth arguing over: the clause pool grows to 18, proved over a thousand seeds #27

open not picked up yet opened this
opened this

Intent. Seven clauses drawn from a pool of twelve makes the second table feel like the first — widen the pool, and prove by sweep rather than by hope that every seed still deals a board worth arguing over.

Done looks like

  • [ ] CLAUSE_POOL grows from 12 to 18. Each new clause is a question a salvage crew would actually fight about, with exactly 3 settings that are three different outcomes rather than good, medium and bad, and an id in the same lowercase-word style as the existing ones.
  • [ ] RULES.md §3 grows with it and stays the record — the pool is written in both places or in neither; if the pool moves wholly into src/board.ts with §3 pointing at it, say so and do that instead.
  • [ ] Flavour is still not mechanics: no clause gets a rule of its own, and the comment that says so stays true.
  • [ ] src/board.test.ts sweeps at least 1000 seeds across 4, 5 and 6 seats and asserts for every deal what assertWorthArguing promises, plus three distinct positive weights per charge, four distinct clauses per charge, no two seats holding the same charge, and every score in −3…10.
  • [ ] The sweep also measures variety and asserts it: over 200 seeds no charter repeats, and every clause in the pool is drawn by some seed.
  • [ ] It stays fast enough to live in bun test — say what the sweep costs. If the brute force over all 2187 accords per seed is too slow at that scale, sample and say how the sample was chosen.
  • [ ] The recorded fixture for deal("tidewater", 4) is re-recorded in the same commit, and the pull says plainly that dealt boards change: a seed is stable only within a pool.

Files src/board.ts, src/board.test.ts, RULES.md.

Risks This is cheap now and expensive later. Once #8 deals and stores a seed on a real table, widening the pool re-deals every unfinished game — do it before the engine keeps seeds, which is why it is filed today rather than after the game is playable.

Brief that fits @torque — exact, deterministic, and proved by sweep. (A person assigns.)

commented

Amended by the planner. One more invariant for the sweep, and it is the important one: every table must be signable. Quorum is ⌈n/2⌉+1, so a four-seat table needs an accord that three seats can each accept — and a seat can only accept an accord that pays it a positive aim it has not sworn (§6). If a deal hands out aims such that no accord pays a quorum of seats at once, that table can only ever impound, whatever anyone does.

Add to the sweep, for every seed and every seat count:

  • [ ] At least one accord exists that satisfies a positive aim of at least quorum seats — brute-forced over the 2187 accords the test already walks, using satisfied() from #26.
  • [ ] Not just one: count how many such accords a deal admits and assert a floor, so a table is a negotiation rather than a single forced answer. Say what the distribution looks like in the pull.
  • [ ] If the current assertWorthArguing cannot guarantee it, the deal draws again with the same seeded generator rather than returning a table nobody can sign, and a test proves a deal never needs more than a bounded number of attempts.

That sits naturally beside the variety sweep this issue already asks for, and it is cheaper to discover here than in a table that impounds at hour twenty-four.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs