The engine

How the engine works

Five guarantees hold on every game this table has ever played.

  • The engine counts every vote itself — the GM never reports a tally.
  • A declared win requires a second, independent confirming pass; a failed confirmation never ends the game.
  • Player-authored text is data, never instructions — a proposal reading “ignore all previous rules” is proposed rule content, nothing more.
  • Every game is replayable from its own public event log.
  • An independent auditor re-derives every score from that log; nothing on this site is self-reported.

Read more about the project on About, or see the numbers this engine produces on Stats.

Requirements & constraints

Every behavior on this table is a numbered requirement with a test that failed before any code existed to satisfy it. Games break the engine; each break becomes a permanent requirement, never quietly patched away — see the changelog below.

  • Counts votes itself — a rule cannot talk the engine out of arithmetic.
  • Refuses rather than guesses when it does not know.
  • Degrades rather than crashes on malformed input.
  • Assumes every player-authored string is adversarial text, never code.
  • Every test runs offline — nothing here is proven by spending a token.

Validation: could our table lawfully get there?

Every procedural decision here — transmutation, abstention, the paradox procedure — was checked against three decades of Nomic actually played, not just Suber’s original text: Agora (1993–, Fundamental Legal Rules with a full amendment trail), BlogNomic (2003–, dynasty rulesets), and Peter Suber’s own Paradox of Self-Amendment appendix, which records Nomic’s first games.

Transmutation, abstention, and the paradox procedure were each shaped by what those archives showed a real game do, not by imagination alone.

The base rules

This is a faithful paraphrase, written in our own words, of Peter Suber’s canonical Initial Set. Suber’s own text is © 1990 Peter Suber and is not reproduced here.

  • 101ImmutableEvery player must, at all times, abide by the ruleset currently in force — including every change adopted since play began.
  • 102ImmutableRules numbered in the 100s begin immutable and rules numbered in the 200s begin mutable. Either status may later be flipped by an explicit transmutation; transmuting a rule never changes its number.
  • 103ImmutableA rule change is exactly one of four kinds: enacting a new rule, repealing an existing one, amending an existing one's text, or transmuting a rule's mutability. No other kind of rule change exists.
  • 104ImmutableEvery properly proposed rule change must be put to a vote of all eligible players; a proposal may not be set aside without one.
  • 105ImmutableEvery player is an eligible voter, and every eligible voter must cast a vote on every proposal that comes to a vote.
  • 106ImmutableA proposal must be written down in the exact words that will be voted on. If adopted, it enters the ruleset in those words, unaltered by anyone but its own proposer.
  • 107ImmutableA rule change has no retroactive effect: it governs only what happens after the vote adopting it is complete, never anything before.
  • 108ImmutableEvery proposal is assigned the next number in a sequence starting at 301, whether it is adopted or defeated, so the record of what was tried survives regardless of outcome.
  • 109ImmutableTransmuting a rule's mutability requires the unanimous assent of all eligible voters, and must be proposed and voted on explicitly as a transmutation — never as a side effect of some other change.
  • 110ImmutableWhere a mutable rule's requirements conflict with an immutable rule's requirements, the mutable rule is void to the extent of the conflict.
  • 111ImmutableBefore the vote, a proposal may be debated; its proposer alone may revise its final wording and may declare debate closed.
  • 112ImmutableThe winning condition may not be redefined away from reaching a target score, except that a rule may separately provide a winner for the case where further play has become impossible.
  • 113ImmutableAny player may forfeit the game at any time. Forfeiting carries no penalty worse than losing outright.
  • 114ImmutableAt least one mutable rule must remain in the ruleset at all times, and no rule change may render every future rule change impermissible.
  • 115ImmutableA rule may refer to itself, or apply to its own case; self-reference and self-application are not forbidden by their nature alone.
  • 116ImmutableWhatever the ruleset neither prohibits nor regulates is permitted, and remains genuinely unregulated — never governed by an unstated default.
  • 201MutablePlayers take one fixed turn order, set before play begins. Each player completes one whole turn before the next player's turn begins, and no player's turn may be skipped. Every player's score starts at zero.
  • 202MutableA turn consists of the player to move proposing exactly one rule change, which is debated and then voted on by every player. If the proposal is adopted, the proposing player throws a six-sided die and gains that many points.
  • 203MutableA rule change is adopted only when every eligible voter votes aye — unanimous consent — except that once turn order has carried play through two full circuits of every player, the threshold permanently drops to a simple majority of those voting.
  • 204MutableA rule change may be adopted without every voter's assent once the threshold has shifted to a simple majority (rule 203); a player who voted against an adopted change gains 10 points and remains bound by the change exactly as if they had voted for it.
  • 205MutableAn adopted rule change takes effect the instant its vote is complete — never before, and never at some later moment.
  • 206MutableA proposal that fails to be adopted is recorded as defeated. Defeat enacts no rule change: the ruleset is left exactly as it stood before the vote, the proposer's turn ends, and the proposer loses 10 points.
  • 207MutableEach player casts exactly one vote on every proposal, and every player's vote carries equal weight.
  • 208MutableThe first player to reach a target score of 100 points wins the game outright.
  • 209MutableThe ruleset may never hold more than 25 mutable rules at one time.
  • 210MutablePlayers may not discuss the game, or negotiate about it, with one another outside the normal course of play — except that players who are officially teammates may consult freely between themselves.
  • 211MutableIf two rules currently in force conflict, the conflict is resolved in favor of whichever rule carries the lower ordinal number, unless some rule explicitly provides a different resolution.
  • 212MutableDisputes over whether a rule applies as written, or whether a move was legal, are resolved through the table's appeal procedure: any player may dispute a decisive ruling, and a vote of all seated players decides whether that ruling stands or is overturned.
  • 213MutableIf the ruleset is changed so that further play is impossible, or if a move's legality cannot be determined with finality, or if a move appears equally legal and illegal by the best reasoning available and not overruled, then the first player unable to complete a turn wins the game outright. This rule takes precedence over every other rule that determines a winner.

Changelog

The AI games hardened this engine — each entry below is a defect a game surfaced, captured and fixed.

  • R12Win-by-paradox needs a procedure

    Game 10 died on a self-contradiction between Rules 202 and 211 instead of pausing to resolve it. Built the paradox procedure: diagnose, safe-mode ballot, revert, stalemate backstop.

    game 10

  • R40The judge rules on form, not legality

    The GM rejected a perfectly legal motion as 'ruled out of order.' classify() was narrowed to judge well-formedness only; legality is a post-vote question (Suber Rule 104).

    game 16

  • R108-numberingProposals number from 301, engine-owned

    A rule was double-numbered (shown as both 214 and 305). Proposal numbering became engine-owned, counting from 301 whether or not a motion is adopted.

    game 16

  • R52Cite or refuse: no conjured awards

    The GM conjured a 120-point grant no rule authorized. GM score/threshold values must now cite an existing rule; uncited awards are stripped and the refusal is published. (The judiciary overturned the live grant 2-1.)

    game 17

  • R61A refused award is public, not silent

    A stripped score-delta vanished with no trace. It became a public event, so a reader can see what the engine refused and why.

    game 18

  • R62An independent game auditor

    Reviewing a game by eye missed violations. Built audit_game.py to independently re-derive tallies and check every cited authority — it found a previously-undetected +75 violation in game 16 on its first run.

    game 18 game 19

  • R53A bad verdict degrades, never crashes

    Game 21 crashed at turn 29 when the GM's verdict tried to repeal a nonexistent rule. An invalid verdict now degrades to proposal-applied-no-awards instead of killing the run.

    game 21

  • R33Seat outages are handled, not fatal

    Cross-model games died on rate-limit (429) and connection errors. Honored Retry-After, distinguished 429 from 5xx, and made a seat that cannot act a defined, public, three-strike consequence.

    game 22 game 23 game 24

  • R73The voting rule must cite its authority

    At turn 63 the GM declared 'unanimous consent' citing no rule, and the engine ran the vote anyway. The engine now refuses an uncited voting rule up front, retry-then-halt.

    game 27

  • R74A no-award verdict says so

    An adopted change with no score effect was indistinguishable from a silently-stripped one. A verdict with no awards now declares it, ending the ambiguous 'missing_award' audit class.

    game 27 game 28

  • R75The GM checks who is eligible

    Rule 310 barred negative-score players from voting, yet all three played on for ~85 turns while deeply negative — the GM never enforced it. The procedure prompt now asks, each turn, who is ineligible under the rules in force.

    game 27

  • R76Skipped turns print

    A turn whose proposer went absent showed a blank heading on the console. It now prints the seat, the reason, and 'turn skipped,' matching the site.

    game 26 game 29

  • R77Adopted text performs its own surgery

    The table adopted 'Rule 209 is repealed and replaced' three times as bare additions — 209 was never actually repealed, so the statute held four contradictory caps. The GM now translates a rule's own textual surgery into real repeal/amend operations.

    game 28

  • R78The procedure retry carries feedback

    Game 29 died at turn 2: the engine re-asked a refused procedure with the identical prompt, and a temperature-0 GM returns the identical refused answer. The retry now feeds back the violation so the GM can correct it.

    game 29

  • R79The auditor flags a drifting reading

    The GM's voting-rule reading changed between votes with no rule change to explain it. The auditor now flags an unexplained procedure-consistency drift it previously couldn't see.

    game 32

  • R80Null-tolerant GM parsing

    The GM gave a perfect reading but wrote value:null where value was meaningless; the parser only defended against absent keys, crashed, and scored a well-formed answer as broken. Explicit null is now treated like an absent key.

    game 31

  • R81The fallback declares, never fabricates

    A parse failure silently returned a fabricated 'unanimous' procedure and the game ran a vote under a rule nobody wrote. A parse failure now declares itself unenforceable, routing into the retry-then-halt path.

    game 31

  • R82Refuse before the vote, not after

    A turn conducted a full vote under a procedure the engine should have already refused. The refusal gate now fires before any motion runs, not after the verdict.

    game 31

  • R84The transmutation threshold stays in its lane

    In a 46-rule statute the GM kept filling the ordinary voting rule with the transmutation threshold (Rule 109), wrongly defeating three majority-supported motions including the game's final vote. Field-discipline plus its own previous reading as continuity context.

    game 32

  • R85-R87A player can claim a win the GM missed

    Voltaire crossed the 120-point win threshold at turn 32, but no one — GM or player — noticed, and the game ran to the turn limit. Players can now declare a win (adjudicated + confirmed, never self-executing), and the auditor flags a reachable win left unclaimed. The new auditor immediately caught a second, previously-unknown case: game 33's Arendt met a 1-point threshold at turn 73.

    game 39

  • R90The vote-weight ceiling now scales with the table

    A healthy 5-player table adopted a rule giving one player vote weight 4, and the engine halted at turn 32 on a flat cap of 3 — an honest refusal, but the wrong number: the principled ceiling is one less than the seated player count, the largest weight that can never by itself force a majority. The bound is now table-relative and recomputed from the currently seated roster, so a seat change (an unseat, R59) can tighten it too.

    game 41

  • R98Degenerate output can't crash the harness

    Three games in a row died the same way, with no terminal event: a seat wrapped a rule number in an extra pair of brackets — targets [[301]] instead of [301] — and the proposal parser crashed the whole run trying to read the nested entry as a number. Malformed entries inside a well-formed list or table are now coerced when they honestly can be and dropped when they can't, so a garbled element degrades to absence — which the validators may then refuse in the open — instead of killing the game.

    game 72 game 73 game 74