Design Notes
Every significant design decision in p(Doom)1 is written down before it is built. 19 of those records are published here.
- ADR-0001 -- Situational Awareness as the primary sink ("spending buys sight")
P(Doom)1 is source-rich and sink-poor: money and reputation accumulate faster than anything competes to spend them, which is mechanically identical to being vulnerable to simple dominant-strategy exploits. We need sinks ...
- ADR-0002 -- Scoring: turns survived, lexicographic doom-integral tiebreak, flows only
The implemented score formula -- (100-doom)x1000 + papersx5000 + researchersx2000 + turnx500 + moneyx0.1 + 50,000 victory bonus (doom<20) -- was scaffolding built to test the end-game screen, never a design statement (Pi...
- ADR-0003 -- The Liability Ledger (two-sided): every mitigation is a loan
Pip's generative image (preserved because the chain is the idea): "like taking out a credit card to save the mortgage, then taking a job as a lobbyist to pay off the credit card, then lobbying to weaken financial regulat...
- ADR-0004 -- SA amended: channels with provenance, lead-time semantics, decision-flip test
ADR-0001 proposed "spending buys sight" as the flagship sink. The workshop stress-tested it against Pip's peak verb -- "triaging in a race against death" -- and against the realization: "I am used to thinking about the g...
- ADR-0005 -- Emergent doom waves: author causes, never outcomes; seed = RNG + schedule
Doom arrives in waves. The fork: authored waves (designed timings -- pacing guaranteed, sim partly theater) vs emergent waves (arising from opponent behavior plus the player's accumulated ledger -- pure, attributable, pa...
- ADR-0006 -- The replay string is the canonical run artifact; backend wiring order
- ADR-0007 -- Alliances: the third client of Ledger + SA (treaty = shared liability + shared sight)
- ADR-0008 -- Deferrals, folds, and rejections (the negative space of workshop #1)
- ADR-0009 -- Turn structure: plan-months, two decision speeds, day as resolution tick
Workshop #1's intent was a week-based planning loop; the build drifted to day-turns with the week surviving only as display (game_state.gd TURNS_PER_WEEK, "Day 3/5" HUD). The drift's real shape: decisions attached to the...
- ADR-0010 -- Adoption routing (soft-with-teeth): doom bends where work is adopted
The exploit sweep's dominant line (safety_lean, basement safety-spam, median 37 turns vs 7 for passive) exists because safety research bends doom directly, privately, and state-independently -- papers are decorative, con...
- ADR-0011 -- The effort economy: founder hours, staff lanes, manager compression
Current build: one global AP pool, spent instantly; staff add to the pool; researchers are single-function; banking exists but does nothing. The sweep's diagnosis in mechanism terms: one fungible currency + state-indepen...
- ADR-0012 -- Event response taxonomy: un-snoozable, deferrable, expiring
ADR-0009 gave every response window a DEFER option routing through the Ledger. Left uniform, DEFER becomes a universal snooze button and the reserve-vs-greed gamble loses its sting (why hold reserve when everything waits...
- ADR-0013 -- Financing instruments & the cost-of-debt engine
Flat 25%/turn loans were a day-cadence artifact (ADR-0009) and a placeholder (DQ-8). With DEFER routing through the Ledger (ADR-0009/0012), loan terms and defer carrying-costs need one pricing engine, or the two halves o...
- ADR-0014 -- Conferences, presence, and minimal location
ADR-0010 made socialization the mandatory middle of the research->adoption value chain with no ruling on what attending is. Pip's rulings, this beat, with one ambition flagged: "Part of me wants to make a conference atte...
- ADR-0015 -- No printed doom deltas: doom is computed from world state
The current build carries literal doom bumps on event/action definitions (legacy of the prototype engine). Pip's ruling: "hardcoding doom counters into things seems really like a legacy design philosophy and as we get so...
- ADR-0016 -- League metabolism: the game trails reality by one month
The scouting beat's variance question ("what does a veteran re-scout per run?") was answered by moving the variance out of the seed and into time. Pip: "i'm considering making the leagues and associated patches that long...
- ADR-0017 -- Anti-hollow test strategy (load-time smoke + property-based invariants)
Two real failures on 2026-07-17 share one root cause -- tests that pass without exercising the thing they claim to protect (call it a "hollow" test):
- ADR-0018 -- Render-only office doctrine: no spatial fact becomes a gameplay input
The office floor (godot/scripts/ui/office_floor/office_sandbox.gd) is a dev-tool sandbox for placing props and previewing worker sprites on a 32px snap grid (GRID := 32.0, _snap_to_grid(), _cell_of() at lines 52-58 and 8...
- ADR-0019 -- Pull-from-demand asset pipeline: the pack is a function of declared demand
### The failure that earned this decision (measured 2026-08-03)