Canonical Design Facts¶
Document Type: Reference — single source of truth Version: 2.0 Last Updated: 2026-09-11 Vault destination:
04_Project Management
Purpose: the load-bearing decisions that every other document must agree with.
When any document contradicts this page, this page wins and the other document is wrong. When this page needs to change, change it here first, then propagate.
Vocabulary is defined in [04_Data Dictionary](<../05_Reference/04_Data Dictionary.md>). One term, one meaning; it also lists deprecated words and their replacements. Where the two disagree, this page wins.
Use this as the reference for documentation review passes: check each doc against this list, rather than against the other twenty-nine documents.
1. Scale & Coordinates¶
| Fact | Value |
|---|---|
| Grid cell | 1 Godot unit = 1 grid cell = 1 metre |
| Building origin | Bottom-centre of footprint |
| World coordinate span | −100 to +100 (not 0 to 200) |
| Simulation tick rate | 20 TPS |
| Networking | Authoritative host |
1a. Camera (verified from code, 2026-08-26)¶
| Fact | Value |
|---|---|
| Projection | Perspective, 75° vertical FOV (Godot default, no override) |
| Pitch | Fixed 50° from horizontal. Oblique, not top-down. |
| Zoom | 5 to 40, default 20 |
| Rotation | Yaw orbit exists (right-drag). Docs saying "pan and zoom only" are wrong. |
| Visible width | 13.6 m at max zoom-in · 54.6 m at default · 109 m at max zoom-out |
| Minimum feature size | 0.17 m to read at max zoom-out · 0.085 m at default zoom |
| Source | src/world/CameraRig.gd, scenes/main.tscn |
2. Building Structure¶
| Fact | Value |
|---|---|
| Every building sits on | A universal donut base, footprint identical to the building |
| Port band | 0.25 m inset from the footprint edge, on the top face. 1×1 buildings use 0.15 m — at 0.25 m the machine is only 8.8 px at max zoom. |
| Chamfer | 0.04 m |
| Panel line | 0.08–0.10 m wide, minimum 0.3 m apart |
| Mk tab pitch | ≥ 0.4 m, so gaps stay countable at max zoom-out |
| Machine body | Fills the footprint minus the 0.25 m band on each side |
| Ports per face | Equal to that face's edge length. Footprints are not always square. |
| Buildings rotate? | No. Any port can serve any role. |
| Exceptions to the base rule | None. Transformers and Power Conduits have bases with all ports DISABLED. |
3. Ports¶
| Fact | Value |
|---|---|
| Media carried | ITEM and FLUID only. Gas travels as FLUID. |
| Power uses ports? | No. Power is area-based. |
| Port modes | DISABLED / INPUT / OUTPUT, plus an optional resource filter |
| Port defaults | All DISABLED. A newly placed building moves nothing and is flush plate on every face. |
| Configuration order | Recipe, then ports. Placing a building says nothing about how it connects. |
| Recipe selection | Instant, in the Building Detail Panel, like port config. A selector only where there is a choice; a label on single-recipe and extraction buildings, which never get a dead control. |
| Changing a recipe | In-progress job abandoned, consumed inputs lost, warned first. Unusable buffered stock is kept, never voided. Auto-enabled ports follow; explicit filters are surfaced, never silently cleared. |
| Draining stranded stock | An OUTPUT port with an explicit filter pushes that resource out, whether or not it is the recipe's output. Without this a building can soft-lock on stock it cannot use. |
| Inbound auto-enable | A never-touched port, on a building with a recipe, with something connected inbound, becomes INPUT with an empty filter. Outputs are never automatic. The recipe gate is what makes it coherent: when the rule can fire, the accepted set is always defined. |
| The player always wins | An explicitly set port is never overridden, including one deliberately set DISABLED. Needs one bit, player_set, since mode cannot tell never touched from closed on purpose. |
| Reconfiguring a port | Instant UI action, never a Genesis task. The no instant placement rule governs placement; a port is already there and DISABLED is closed, not absent. A valve, not a pipe. |
| Ports are passive | A port never pulls. OUTPUT pushes, INPUT receives what is pushed into it, DISABLED does neither. |
| Belt/port connection | Connected, not adjacent, and it works both ways: a belt is connected when its travel direction aligns with the port, whether pointing at it (delivers in) or leading away from it (port pushes out). A belt running alongside is adjacent, not connected. |
| Port throughput visual | None of its own. Mk is the accent tabs, mode is the base geometry. Do not add a third channel. |
| Visual indication | Built geometry, not a drawn symbol. Recessed slot = input, protruding nozzle = output, flush cover plate = disabled. |
IoConnector / PipeConnector |
Removed. Replaced by ports. |
| Port count | Face length. One port per grid cell along each edge. A 1×1 has four. |
| The port is the rate limiter | A port moves at its throughput regardless of what is on the other side — belt, pipe, or another port. The port is this game's inserter. |
| Direct building-to-building | Allowed, at port rate. Touching OUTPUT and INPUT ports transfer with no belt. Not a special case and not throttled. |
| What balances adjacency | Ports are finite and spent. A port doing adjacency is not also taking a belt, and adjacency cannot split, merge, filter or cross distance. |
| Base Mk throughput | 1 / 2 / 4 items per sec, matching Basic / Fast / Express belts exactly. A belt upgrade does nothing for one machine until Base Mk matches it. |
4. Upgrades¶
| Fact | Value |
|---|---|
| Two independent tracks | Base Mk (port throughput, filtering) and Machine Mk (speed, recipes, module slots) |
| Mk is researched? | No. Research unlocks recipes; a recipe may require a Mk-N building. |
| Research tree authority | 08_Research Tree Design, and only it. Other documents name nodes; none restates the tree. A competing tiered listing in 04_Factory was deleted. |
| Tier gates | None. Progress is determined entirely by what has already been researched. Any tier-organised tree listing is stale by construction. |
| Environmental research | Branch 9, and optional. Nothing in it gates production except one cross-branch prerequisite: the Nuclear Reactor requires a waste-handling node. |
| Mk obtained via | Upgrade kits — four items total (Base Mk2/Mk3, Machine Mk2/Mk3), universally applicable |
| Applied by | Genesis, in place, via task UPGRADE_BUILDING |
| An upgrade changes | Level and nothing else. Modules, port config, storage contents, StorageRole and in-progress work all survive. |
| Mk affects power draw? | Yes, both tracks. Machine Mk draw rises slightly faster than output. |
| Mesh across Mk levels | Identical. Level is shown by tab count only. |
5. Visual Signal Channels¶
Four channels, four physical properties, none competing.
| Channel | Carries | Behaviour |
|---|---|---|
| Accent tab count | Mk level | Outer row = Base Mk, inner row = Machine Mk. Left-aligned, fixed pitch, clockwise from each side's start. |
| Port geometry | Port direction | Slot / nozzle / cover plate |
| Base ring colour + rhythm | Fault status | Unlit when healthy. Amber = logistics, red = power. Rhythm distinguishes states. Output-full (success) and input-starved (failure) must never share a signal. |
| Cyan working-light brightness | Alive, and decay | On when working. Dims 2.5 → ~0.9 as the building decays. |
Decay is NOT a ring state. It is a gradient, shown by brightness in-world and as a percentage in the Analytics tab.
6. Palette¶
| Role | Hex |
|---|---|
| Panel Base | #EBEDEC |
| Panel Mid | #CECAC6 |
| Panel Shadow | #A4A19D |
| Structure Grey | #807F7E |
| Frame Dark | #535E60 |
| Recess | #2A3132 |
| Void Black | #0B0B0E |
| Accent Orange | #EC983A — the only accent colour |
| Emissive Cyan | #2ED9E8 at energy 2.5 |
| Status Amber | #F5A623 |
| Status Red | #E8433A |
| Status Disabled | #5A6A72 |
Art style: clean chamfered hard-surface, matte, minimal wear. No cel-shader. No outlines. Standard PBR plus emission mask.
There is no category colour-coding. Buildings are distinguished by silhouette.
7. Storage¶
| Fact | Value |
|---|---|
| Solids | Silo (vertical column, physical fill window) |
| A Silo holds | One substance. Never mixed. The fill window shows a level tinted by that substance — a window cannot display a mixture, so the art direction already assumed this. Matches the Tank, which the pipe no-mixing rule already made single-fluid. |
| Silo capacity is | A number of units, not a number of items. Each substance has a unit_size, so a Silo of capacity 10 holds two things of unit_size 5. Storage is therefore spatial: bulky goods cost more room than dense ones. |
| Buildings store | Their recipe inputs and outputs, per substance, in a small buffer. Machines buffer; Silos store. They are different things and must not share a rule. |
| Fluids and gases | Tank |
| Number of solid storage buildings | One — the Silo. The Smart Buffer / Buffer Chest is deleted: ports filter, and a Silo already holds one substance, so its distinguishing feature became standard. |
| Silo capacity by Mk | 500 / 1000 / 2000 units. Mk buys depth, not variety — a Silo holds one substance at every level, because the fill window cannot show a mixture. |
| Enum | StorageRole — UNASSIGNED / DEPOSIT / CONSTRUCTION |
| Role names describe | What Genesis does with the building, which is the only thing the role controls. DEPOSIT = Genesis deposits mined ore here. CONSTRUCTION = Genesis draws build materials from here. UNASSIGNED = both, the default. |
| The word "chest" | Deprecated everywhere. |
7a. Belt Logistics¶
| Fact | Value |
|---|---|
| Splitter, Merger, Filter Splitter | Removed. Collapsed into one Router. |
| Router | 1×1, four ports, each configurable INPUT/OUTPUT with optional filter |
| Router capability | Mk1 even split/merge · Mk2 priority in and out · Mk3 filters and ratios |
| Priority | Waterfall. Fill output 1, overflow to 2, then 3. Also works on inputs. |
| Ratios | Explicit (70/30), not inferred from priority flags |
| Overflow | Priority is the overflow mechanic. No separate Overflow mode exists. |
| All outputs full | Router stops, backpressure propagates upstream. Nothing is ever silently voided. |
| Deliberate disposal | Incinerator — costs power, produces air pollution, recovers some heat as power. Open dumping produces ground contamination instead. Player chooses which pollutant. |
| Incinerator recovery | Always a fraction of embodied energy. Never profitable to manufacture items in order to burn them. See §12b. |
| Underground Belt | Separate. A belt variant, not a routing decision. |
| Belt speeds | Basic 1/sec · Fast 2/sec · Express 4/sec |
7b. Trains & Rail¶
| Fact | Value |
|---|---|
| Belts | Passive. No power draw. A belt is a one-time material cost that then runs free forever. |
| Why rail exists | Volume at distance, and districts. Not distance alone — rail costs fuel to run, belts do not. |
| Rail's real value | Lets the factory be several self-contained districts instead of one spaghetti mat |
| Rail's honest cost | High latency, arrives in bursts. Requires Silo buffering at both ends. |
| Signalling | Automatic by default. Whole route is one block. Manual signals are optional and add throughput only, never capability. |
| Locomotive types | Steam (coal, belt-fed) · Diesel (liquid fuel, piped) · Electric — catenary or battery · Nuclear (rare fuel swap) |
| The three currencies | Not a ladder. Each pays in something different. Catenary pays in distance — wire along every metre of route. Battery pays in time — charging stops, and a station at each. Nuclear pays in waste — a permanent stream to manage. Each is strongest exactly where the others are weak. |
| Battery is infrastructure too | Charging stations are point infrastructure; catenary is linear. Catenary scales with route length, battery with number of stops. That difference is the trade, not the presence or absence of infrastructure. |
| Nuclear is not a penalty | High capital, very low running cost, one hard problem to manage. Strongest for long hauls and remote lines, where neither wiring nor stopping is acceptable. The reason not to take it is that it demands a whole support system, never that it is weak. |
| Nuclear waste | Reducible by reprocessing, never eliminable. ⚠️ Recovery must never reach 100%, or nuclear becomes free and the trade collapses — the same guard rail as Incinerator heat recovery and flue capture. |
| The trade | Move fuel, or build infrastructure once — the same decision as power transmission |
| Electric trains | Only as clean as the grid. Coal-powered electrification moves the smoke. |
| Train Station | Modular. Station Head + one Freight Platform per wagon + optional Fuel Platform. All ordinary buildings with ports. |
| Multi-commodity trains | Free — each platform's ports are configured independently |
| Fuel type | Physically changes station layout. Steam and diesel need a Fuel Platform; electric needs electrified track instead. |
| Station priority | Same waterfall model as the Router |
8. Power¶
| Fact | Value |
|---|---|
| Three tiers | Generation → Transmission → Distribution |
| Distribution loss | Load-dependent voltage drop. Reach contracts as circuit load rises. |
| Transmission loss | Per-tile, reduced by higher voltage. Transformers cost a fixed percentage each. |
| Must the game be winnable without transmission? | Yes. Research is path-choice, not a timeline. |
| Transmission direction | Horizontal only. Conduits and Pylons are the sole vertical paths. |
| Transmission blocking | Height clearance. Buildings below it let lines pass overhead. |
| Cross-level power | Capacity cap, no distance loss. Conduits link grids, they do not merge them. |
| Brownout shedding | Requires hysteresis, and hysteresis alone is not sufficient. Recovery threshold must exceed shutdown threshold, and restoration must test the predicted post-restore state, or a building whose own draw breaks the circuit still flickers. Two independent triggers: grid deficit and local undervoltage. 25_Power System Design §4a. |
| Balance values | All live in a single PowerTuning resource. Nothing hardcoded. |
| Where to find a number | 05_Reference/06_Tuning Values collects every tunable across all systems with its default and authority. The design document owns the reasoning; that index owns the values. |
| PU is a rate | Power. Output, draw and capacity are PU. Energy is PU·s — accumulator storage and fuel content. Do not mix them. |
| Generation scale | Anchored on the Coal Generator at 100 PU. Every other source is a multiple of it, so generation_scale rebalances all of them at once. |
| Fuel burden | One Basic Belt of coal sustains 200 PU. fuel_density_scale moves this without changing how much power exists. |
| Distribution reach | usable radius x circuit load = 16 000 PU·tiles. The grid has a budget, not a range: spend it on size or on draw. |
| Connection vs reach | Different things. Connection is a fixed radius deciding grid membership; reach is electrical and contracts with load. A building can be connected and still receive nothing. |
| Partial power | Does not exist. A building runs at full draw or is shed. Priority orders shedding, it does not ration supply. |
9. Vertical¶
| Fact | Value |
|---|---|
| One shaft per type | Item Lift, Fluid Riser, Power Conduit. No shared capacity. |
The generic Shaft building |
Removed. Container and contents are now the same object. |
| Vertical throughput scales with | Base Mk (lifts, risers), Machine Mk (conduits) |
10. Pollution¶
| Fact | Value |
|---|---|
| Air / smog | Zonal. Does not travel between levels. Hits solar, farms, decay. |
| Ground contamination | Leaches downward, never up. Hits farm and extraction yields, cooling water, decay. |
| Solid waste | Inert while contained. Becomes ground contamination when dumped. |
| Decay is caused by | The player's own pollution. Never a universal tax. |
| Decay effect | Productivity only. Never destroys a building. Genesis repairs automatically. |
| Waste handling | Store / Treat / Dump — identical structure for solids and water |
| Contamination reversible? | Yes, via Soil Remediation. Healing must be far slower than poisoning. |
| Sky levels | Sit above the smog layer |
| Underground | No dispersal. Only decay applies, but far more severely. |
11. Threats¶
| Fact | Value |
|---|---|
| Aliens | Native, territorial, triggered by expansion. Per planet type. Rogue planets have none. |
| Scavenger bots | From space, triggered by e-waste and power signature. Work on dead worlds too. Shared with Outpost Mode. |
| Both use | The same defence buildings — Walls, Gates, Turrets |
12. Endgame¶
Three open paths after Milestone 3:
- War effort
- Supply chain provider
- Restoration — repair wrecked planets. Peaceful. Also a standalone mode candidate with leaderboards.
12a. Resource Model¶
| Fact | Value |
|---|---|
| A resource is described by | category, substance, type and phase. |
category |
The family — biomass, metal, mineral, chemical. Load-bearing: recipes may accept any substance in a category, so polymer takes any biomass rather than naming wood and algae separately. |
substance |
What it is specifically — wood, algae, iron, coal. The identity. Never changes. |
type |
RAW / REFINED / COMPONENT. Processing state. What tier was reaching for. |
phase |
SOLID / LIQUID / GAS. Changed by heat and chemistry. |
unit_size |
How much storage one of this substance consumes. Makes storage spatial rather than a count. The fluid analogue is density, which already exists on FluidDefinition and is currently read by nothing. |
| Refining rule | A component is never made directly from raw. True in all ten shipped recipes. Enforced by a validator that warns rather than fails, so a deliberate override stays possible. |
fuel_value |
Energy per unit, on the substance. There is no fuel_type — burners carry their own accepted-fuel list, because Steam and Diesel are both combustion yet must not share fuel. |
ResourceTier |
Removed. It conflated production depth with transport medium, so a resource that is raw by origin and fluid by medium could not be described. |
| Production depth | Derived from the recipe graph, never stored. It was already wrong as stored: two of five components are made from components. |
| Transport | Derived from phase, never stored. Solids ride belts; liquids and gases ride pipes. |
| Same substance, different phase | One substance, two resources. Iron ore is iron / SOLID; molten iron is iron / LIQUID. Smelting is a phase change, not a mapping between strangers. |
| A filled barrel is | An ordinary SOLID item — a steel container that happens to hold liquid. Barrelling is an ordinary recipe. There is no "form" axis. |
| Resource ids | Unchanged. The pair is the natural key; the .tres id stays the stable handle recipes and saves reference. |
12b. Closed Loops Are Always Lossy¶
A loop that closes completely removes the decision it was meant to create.
Every recovery, capture, reprocessing or recycling mechanic in the game recovers most, never all. This is not a balance figure to tune toward 100%; it is a design rule, and a mechanic written without it is wrong regardless of its numbers.
Why. Each of these mechanics exists to soften a cost the player chose to incur. If it removed the cost entirely, the choice that created it stops mattering, and a system meant to pose an ongoing question collapses into a plumbing puzzle solved once and then forgotten.
The instances¶
| Mechanic | Recovers | Would otherwise mean |
|---|---|---|
| Incinerator heat recovery | A fraction of the item's embodied energy | Manufacturing items purely to burn them becomes profitable |
| Flue capture | Part of the emissions while you still burn | Coal forever at zero net pollution; the dirty-versus-clean axis collapses |
| Nuclear reprocessing | Most of the spent fuel's value | Nuclear becomes free and stops being a trade |
| Box recycling | Most of a worn box's material | Cardboard becomes free and metal has no reason to exist |
| Battlefield salvage | A fraction of a derelict's build materials | A war that feeds itself, and a factory that stopped mattering |
| Field refining aboard a mothership | Less per unit than planet-side processing | The planet becomes optional |
Reaching zero always requires stopping the thing, never out-plumbing it. Zero pollution requires not burning; zero waste requires not producing it. Capture, recovery and recycling reduce the cost of a choice — they never refund it.
Applying it¶
Any new mechanic that returns something consumed falls under this rule. State the ceiling explicitly and say what would break without it, rather than leaving a rate that someone later tunes upward without knowing why it was capped.
13. Data & Tooling¶
| Fact | Value |
|---|---|
| Source of truth for items/buildings/recipes | ⚠️ STALE — the SQLite plan was dropped. See OI-136 and OI-137: no database, no schema, no seed data. The validator and the three reference pages (10_Recipe Explorer, 11_Chain Explorer, 12_Ratio Calculator) replaced it. Row kept until the replacement pipeline is described. |
| Outputs | .tres (game), JSON (visualiser), markdown (vault wiki), in-game browser |
| Does the database ship? | No. Authoritative host networking requires byte-identical client data. |
14. Known Godot Gotchas¶
| Issue | Fix |
|---|---|
PanelContainer.sort_children() repositions anchor-mode children to (0,0,0,0) |
Use plain Control when children use anchor positioning |
Scene files created outside the editor are not found by load() at runtime |
Open them in the FileSystem panel first |
| Await-based nav mesh polling is unreliable | Use Timer-based polling |
| GUT testing scope | Pure logic only. No scene tree, no MeshInstance3D, no add_child. Visual and RPC code → ScenarioTestRunner. |
16. Supply Sets Magnitude, Position Sets Distribution¶
Supply decides how much damage a fleet deals and how long it lasts. Position decides who takes it.
Position must never be more decisive than supply. If it becomes so, the game has quietly turned into a battle game and the factory has stopped mattering.
Test every new combat mechanic against this line. It is the rule that keeps the war layer returning a diagnosable failure to the factory rather than a dice roll.
Detail: [31_War & Combat System Design](<../01_Design Documents/Systems/31_War & Combat System Design.md>).
17. Manual First, Automation Is Built¶
Every system has a manual mode that works, and an automation path that costs something physical: hull space, research, or a building. Automation buys back attention, never power.
Manual stays optimal, because a player can see the situation and a rule cannot. What automation buys is the ability to be somewhere else, and attention is the genuinely scarce resource because the factory is still running and there may be a second front.
Instances: Genesis and belts · the Router · station priority · mothership supply allocation · fleet movement · gate delivery, which runs from hauling by hand through standing routes to a belt plumbed straight in.
The corollary matters as much: never scale a reward by automation tier. Doing so punishes the player for automating. See §23.
18. Area-Based Supply¶
Power on the planet is area-based rather than port-based (§3). Space supply is area-based for the same reason.
A mothership or Forward Depot projects an umbrella, and any friendly ship inside it draws. Helping an ally is therefore geometry, not a transaction: you move your depot near their fleet and their ships start drawing.
The umbrella is not an arbitrary circle. It equals drone round-trip range from the pit, so it is a battery, tuned by drone research and shortened when the pit is damaged.
19. Disabled, Never Deleted¶
A ship is disabled, never deleted.
| State | Meaning |
|---|---|
| Adrift | A critical module was knocked out. The ship cannot act. |
| Derelict | An adrift ship, abandoned. Salvage for anyone. |
| Stranded | A mothership that cannot withdraw. Not destroyed. |
The mothership is crippled or stranded, never destroyed, on the same anti-softlock grounds that make Genesis indestructible: losing your depot, your fleet's supply and your foothold in one event is an unrecoverable state.
Escort ships can be destroyed. That asymmetry is the point: the fleet is what you risk, the mothership is what you protect.
Only hardcore mode deletes.
20. Capacity Crosses, Stock Does Not¶
Advantage carried between worlds is capacity, never stock.
A mothership carries its design and its hull between worlds and arrives empty. A veteran turns up with a bigger, better-armoured, better-automated depot containing nothing, and filling it is that world's factory's job.
Two rules enforce it:
- Account research improves capacity and efficiency. It never unlocks capability. Thicker armour per tonne and a wider umbrella, never a weapon a new player cannot build.
- Faction upgrades follow the same rule, or an established faction becomes unbeatable and a server closes to newcomers.
21. The Channel Is Physical¶
The path from factory to front is a physical channel with finite throughput and real latency. It is never a transfer menu.
The gate satisfies this: it has throughput, latency, a continuous power draw, and a single destination. One gate is one concurrent war, maximum three.
An earlier formulation said the front had to be in the same universe as the factory. That was too strong; this is what it was protecting.
22. World, Session, Account¶
A world is the data. A session is the world in motion.
| Term | Meaning |
|---|---|
| World | The persistent universe. One seed plus all changed state. The save file. Private and parallel; nothing passes between worlds except the account. |
| Session | One continuous run of a world. A sitting. No game state belongs to a session. |
| Account | The player across all worlds. |
| War | A separate shared instance. The only shared place. |
A world is identified by an ID, never by its name. Two players can both name a world "Tarn".
Consequence: Factory Research is world-scoped, not session-scoped. It resets in a new world and survives a logout.
Vocabulary: [04_Data Dictionary](<../05_Reference/04_Data Dictionary.md>) §0.
23. Value Is Fixed, Return Scales With Presence¶
A delivery is worth the same to the faction however it arrived. The delivering player's personal return scales with presence and risk, never with how automated the delivery was.
Hauling by hand, a standing freighter route and a belt plumbed into the gate all pay identically. Scaling reward by automation tier would punish a player for automating and contradicts §17.
What reduces the return is absence, because being present is not free: your gate is drawing on your grid, your mothership is deployed and exposed, and you spent transit fuel putting it there.
Contribution itself is recorded at face value and tagged by how it arrived, never deflated. A measurement should not lie; the reward is what scales.
The measurement corollary¶
Three kinds of number, and they are never combined:
| Kind | Test |
|---|---|
| Efficiency | Has a denominator: output per unit spent |
| Power | Has units over time |
| Coverage / capacity | A fact, spatial or counted |
Forbidden: armour efficiency — armour has no output, so no denominator exists — along with design efficiency, overall rating, and any single number standing for a whole design. A single aggregate is rankable, and anything rankable gets optimised until every player builds the same thing.
23a. Count The Content, Don't Target It¶
There are no content quantity targets. The design decides how many there are, and then that is how many there are.
A count written into a planning document stops describing the design and starts commanding it. Two failures follow, and both are worse than having no number:
- The number becomes a floor. "~20 to 30 buildable structures at launch" invites padding to reach twenty when the design genuinely wants seventeen.
- The number becomes a ceiling. The same line argues against a thirty-first building that the design wants, because thirty was written down in February by someone who had not designed it yet.
Content is counted, never targeted. If you want to know how many buildings there are, count
data/buildings.json. That number is an observation, and it changes when the design changes.
23a.1 What this does not cover¶
The rule is about how much content exists. It is not about constraints the build has to satisfy, and those stay, in numbers, deliberately:
| Stays | Why |
|---|---|
| 60fps with 500 simultaneous factory entities | A performance constraint. Something has to hold |
| Co-op with 2 to 4 players | A capability bound. The netcode is built to a number |
| Fun for at least 10 hours of solo play | A quality bar for a release decision |
| No desync in a 2-hour co-op session | A test bar. It passes or it does not |
The distinction is must hold against how many exist. A constraint is a promise the build makes. A content count is a fact about the design, and facts are read, not set.
23a.2 Where counts are allowed to live¶
In the owning document, as the design, and nowhere else. 08_Research Tree Design says how many
nodes there are because it lists them. data/buildings.json says how many buildings there are
because it holds them. 02_Scope & MVP Document names systems and points at their owners; it does
not restate their contents, and it never restates a quantity.
Same rule as everywhere else in this vault: one owner, others reference.
23b. Phase 1 Earns Phase 2¶
Phase 1 has to be fun on its own. If it is not, there is no point.
This is a decision rule, not a sentiment, and it is the tiebreak whenever scope is contested.
Two things make it load-bearing rather than obvious:
- Phase 1 is the only thing anyone pays for. Early Access sales fund Phase 2. A Phase 1 that is merely complete does not fund anything.
- Phase 2 is three and a half to four years away. Phase 1 has to carry a hundred hours and a price on its own, with no space layer, no war and nothing above the planet at all.
23b.1 How to apply it¶
When a system is contested between cut it from Phase 1 and keep it, the question is not how much work it is. It is:
Is Phase 1 fun without it?
If the honest answer is no, it is in Phase 1, and the estimate moves. Scope discipline is for things Phase 1 is fun without, and only for those.
This is why trains and rail, organic farming and biomass, and metallurgy and alternate recipes are all Phase 1, though every one of them is deferrable on paper. Belts plus drones plus one metal chain does not carry a hundred hours. Three logistics tiers, a biomass loop and alternate recipes do.
23b.2 What it does not license¶
It is not an argument for adding content, and it is not a reason to skip the trade-off. The estimate still moves, and the number still gets written down. A decision made on this rule is recorded with the cost it carries, so the ship date moving is a known consequence and never a surprise.
Nor does it reach past Phase 1. Fun on its own is a bar Phase 1 must clear. It is not a licence to pull the Space Update forward in pieces.
24. A Simulation Level Never Changes What Is Optimal¶
Higher Simulation Levels add detail and consequence. If a level changes which carrier, layout or recipe is the right answer, the feature is in the wrong place.
[19_Transport & Logistics](<../01_Design Documents/Logistics/19_Transport & Logistics.md>) §4 already says higher levels add detail to a mechanic, they never
change the mechanic. That test is necessary and not sufficient, and the case that exposed the
gap is worth keeping:
Barrel return loops. Abstracting the empties away at Level 1 does not change the mechanic at all
— you still package fluid, you still ship it. What it changes is the balance, because the return
loop is one of the four costs that make a pipe beat a barrel line on volume
([41_Fluid Packaging & Carriage Design](<../01_Design Documents/Logistics/41_Fluid Packaging & Carriage Design.md>) §6). Remove it and barrels quietly become strictly better
than pipes, at the level new players start on, and the lesson is then reversed on them at Level 2.
So the sharper rule: fidelity is what scales, never balance.
24.1 How to apply it¶
Ask what a player would do differently at each level. If the answer is the same thing, with more detail to manage and worse consequences for getting it wrong, the feature is correctly placed. If the answer is build somewhere else, use a different carrier, or take a different recipe, it is not a Simulation Level feature and it belongs either in the baseline for everyone or in world generation as a property of a place.
| Example | Verdict |
|---|---|
| Pipe pressure, then temperature | Legal. Same layout, more to manage |
| Drone stranding instead of limping home | Legal. Same route, harsher failure |
| Container ratings, then wear and fire | Legal. Same carrier choice, more upkeep |
| Pollution grid cell size and tick rate | Legal. Blurrier, not different |
| Abstracting the barrel return loop | Illegal. Changes which carrier wins |
| Battery versus catenary locomotives | Illegal. Changes what a locomotive is |
| Wind carrying pollution downwind | Illegal. Changes where you build. Shipped for everyone instead |
Wind is the useful one, because it was a genuinely attractive candidate. Directional pollution is
more interesting at a higher level and costs nothing at a lower one, which is exactly the shape of a
good fidelity feature. It fails anyway, because a player who plays with wind on puts farms upwind and
a player who plays with it off does not, and those are different games. It ships in the Launch
release for everyone ([26_Pollution, Waste & Organic Systems Design](<../01_Design Documents/Systems/26_Pollution, Waste & Organic Systems Design.md>) §3b.2).
25. The World Is Shared, And Nothing In It Has A Per-Player Owner¶
A session is one world, hosted by one player. Buildings, resources, pollution and territory belong to the world, not to whoever placed them. No mechanic may depend on attribution.
There is no my smelter and your farm. There is the smelter and the farm, and any player in the session may use, upgrade, disable or remove either one.
25.1 What this rules out before it gets designed¶
- Per-player statistics on the factory, since there is no partition to measure
- Contribution scoring inside a session, which is a different thing from war contribution
(
§23), where the unit of account is the faction and the delivery, not the building - Ownership locks, permissions, or any only the builder may edit this rule
- A "who built this" tooltip, which sounds harmless and is the thin end of all of the above
25.2 What it does not rule out¶
Genesis is per player ([40_Genesis Design](<../01_Design Documents/Systems/40_Genesis Design.md>)), and that is not an exception to this rule. A
Genesis is not property, it is agency: it exists so every player in a co-op session has something
to do rather than watching one person build. It carries no claim over what it builds.
Account-scoped things stay account-scoped per §22 — levels, unlocks and the Outpost trickle
belong to the player across sessions. This rule is about the world.
25.3 Why it is worth stating¶
Pollution made it concrete. Air arrives in a cell, a farm in that cell loses output, and the question whose pollution was it has no answer and needs none. The moment attribution is assumed, it starts demanding a per-building emitter record, a blame notification, and eventually a reason for one player to be annoyed at another for playing the game. A shared planet that does not share consequences is just two solo games in one window.
26. Revision History¶
| Version | Date | Changes |
|---|---|---|
| 2.0 | 2026-09-11 | §24 and §25 added; Revision History renumbered to §26. §24: a Simulation Level never changes what is optimal. The existing doc 19 test (adds detail, never changes the mechanic) is necessary but not sufficient - abstracting the barrel return loop passes it and still breaks balance, by removing one of the four costs that make a pipe beat a barrel line, at the level new players start on. Fidelity scales, balance does not. §24.1 gives the applied test and the worked verdicts, including wind, which failed the rule and therefore ships in the Launch release for everyone rather than as a fidelity option. §25: the world is shared and nothing in it has a per-player owner. A session is one world hosted by one player; buildings, resources, pollution and territory belong to the world, and no mechanic may depend on attribution. Rules out per-player factory statistics, in-session contribution scoring, ownership locks and who-built-this tooltips. Genesis stays per player because it is agency, not property. |
| 1.9 | 2026-09-05 | §23b added: Phase 1 earns Phase 2. Phase 1 has to be fun on its own or there is no point, stated as the tiebreak for contested scope: the question is not how much work a system is, it is whether Phase 1 is fun without it. Records why trains, farming and metallurgy are Phase 1 despite being deferrable on paper. §23b.2 bounds it: the estimate still moves and the cost is still written down. |
| 1.8 | 2026-09-05 | §23a added: count the content, don't target it. There are no content quantity targets; a count in a planning document becomes both a floor and a ceiling. Constraints the build must satisfy (frame rate, player count, quality and test bars) are explicitly excluded and stay as numbers. Counts live in the owning document only. Header version also corrected: it had been left at 1.2 while the history reached 1.7. |
| 1.7 | 2026-09-05 | §16 to §23 added, the principles that came out of the war layer design: supply sets magnitude and position sets distribution · manual first, automation is built · area-based supply · disabled never deleted · capacity crosses but stock does not · the channel is physical · world, session and account · value is fixed but return scales with presence, with the efficiency/power/coverage measurement rule. §12b extended with battlefield salvage and field refining. §13 marked stale — the SQLite plan was dropped by OI-136/137. Revision History renumbered §15 to §24; §15 is now a deliberate gap. |
| 1.0 | 2026-08-25 | Initial. Consolidated from the mobile design session. |
| 1.6 | 2026-08-29 | §12b added: closed loops are always lossy, stated once as a principle after being independently derived four times. |
| 1.5 | 2026-08-29 | §7 Silos hold one substance and measure capacity in units, with unit_size added to §12a. Buildings buffer per substance and follow a different rule from Silos. |
| 1.4 | 2026-08-28 | §7b locomotives reframed. The Electric-versus-Nuclear "opposites" pairing is replaced by three currencies — distance, time, waste — since battery-electric is also infrastructure and nuclear is not a penalty. Nuclear waste is reducible by reprocessing, with a below-100% guard rail. |
| 1.3 | 2026-08-28 | §12a extended: category and type added, refining rule recorded, fuel_value kept and fuel_type rejected. |
| 1.2 | 2026-08-28 | §12a added. ResourceTier removed and replaced by substance + phase. Transport and production depth are both derived, never stored. |
| 1.1 | 2026-08-26 | §7 — StorageRole value GENERAL renamed DEPOSIT. GENERAL read as the broad everything role, which is what UNASSIGNED already means, leaving the narrow mining-deposit role unnamed. Roles are now named for the Genesis action they control, making DEPOSIT and CONSTRUCTION symmetrical. |