The exploratory models for the CivRev strategy space — the analog of NA1’s sim/tools, scaled to a
tables+measurement game (no decompiled engine to emulate). Nothing built here yet — this is the planned
slate. Each tool consumes the structured data/ and tests a claim in the
thesis.
tech-frontier.py — the dominance frontier over the tech tree. Plot beaker-cost vs first-discover-
bonus value; surface the thin spine (the few techs that dominate) and the dominated bulk. Pure function
of the captured tech table — buildable now, no measurement needed. Tests: “the research path is much
thinner than it looks.”wide-vs-tall.py — the MIRR model. Compare “mint a city via Republic 1-pop settler” vs “grow a city
organically” under the empire’s own growth rate (the hurdle). Blocked on measurement: needs the
city-growth/food curve + the Republic rule. Turns “wide tends to beat tall” into “beats by X.”opening-rush.py — decapitation-rush feasibility. Given AI opening tempo (~5/~10) + map layout +
hut/gold RNG, how many capitals fall before turn ~10? Blocked on measurement (AI tempo, contact-
immunity, lone-Warrior-vs-capital). Tests the opening exploit’s ceiling/variance.v1 (built, runs): values ONLY each tech’s first-discover bonus, in gold-equivalent, as a function of city count. Confirmed two thesis claims from grounded data: the thin spine (4 of 46 techs Pareto-dominate the tree) and the 1→2-city regime flip (one-time bonuses like Free Walls lead the single-city opening; per-city bonuses like Irrigation/Literacy take over once you expand). Magnitudes ride on soft weights; the structure (per-city scales with width × time; one-time is flat) is grounded in the bonus types.
Known limitation — “pure math without context” (Chris). First-bonus ROI is ONE projection of a multi-axis value. v2 axes, from observed play:
trap-detector.py. Criterion = dead-end leaf tech + dominated unit (not raw
domination, which is the tree’s default). Flags Navigation/Galleon as the lone tech-trap; refuses
to flag the on-path progression line; also surfaces negative-window unit-traps (Legion ⪯ the
cheaper Horseman).
SCOPE OF THE VERDICT (don’t misread “trap” as “never correct”). The flag means dominated in
expectation, for a default CIV-AGNOSTIC build, on A/D/M alone. Three dimensions live outside it:
civrev_data.py is the single source of truth (tech table w/ cost+prereq+bonus, unit stats, prod
costs), grounded to raw/civrev-*.md. Both tech-frontier.py and trap-detector.py import it so the
tables can’t drift between tools. Built so far: tech-frontier.py, trap-detector.py. Blocked on
the parked measurement gaps (no usable oracle — see the project README): wide-vs-tall.py, opening-rush.py.
Deterministic generators over validated data beat hand-analysis (the vault’s mechanical → generator
rule): where an answer is a function of the captured tables, write the function; reserve judgment calls for
where the data genuinely runs out. Keep every tool’s output traceable to a data/ value + its raw/
provenance.