Skip to content

Canonical Design Facts

Document Type: Reference — single source of truth Version: 1.2 Last Updated: 2026-08-28 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 #EC983Athe 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 StorageRoleUNASSIGNED / 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) · Electriccatenary 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.
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:

  1. War effort
  2. Supply chain provider
  3. 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

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 SQLite, authored offline
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.

15. Revision History

Version Date Changes
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.