Round 6 (M3's enemy — THE CORRECTION walks).
- Parity mites (contracts v8): spawn from the world rim as tier-2 corruption
crosses thresholds, patrol to the nearest tier-2 belt item, dwell, and repair
it out of existence (emitting 'repaired'), then return to the rim sated. Never
touch tier-0/1 cargo. Deterministic, save/load carried (no format bump).
- The firewall counter, detected by recipe shape (empty inputs, cans a mite) —
the same pattern as the mosquito trap, so DATA's real firewall (landed
mid-round) lights up with zero code. The repair dwell is the window a firewall
needs to intercept a correction before it lands.
- Reference factory v6 auto-places DATA's firewall on the melt uplink approach,
belted to a shipper so it never clogs; melt regression + zero-brownout intact.
- 11 new mite tests; 113 sim tests, 481 repo tests green; tsc clean. Verified in
the browser: melt tick 1247 identical to Node, firewall canning live.
- Reshaped reference.test's demuxer assertion to sample a window (the ~18%
transient press back-pressure is pre-existing; a single-tick check was a
coin-flip). See LANE-SIM NOTES.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Round 5 (MEGA) per lanes/LANE-SIM.md.
- THE RELIC: one optical fossil per world, position a pure function of the
seed, 18-28 tiles out, never on a seam, never under the demo. excavate
within a tile uncovers it; it stays found through save/load forever.
Folds into DATA's relicReserve when the seam map supplies one
- wildlife v1: piles grow from dust a machine is BACKED UP on, not dust
merely present -- belt your dust away and nothing ever hatches. First
cut grew from raw held and the tidy factory still bred 56 swarms; the
asymmetry is the whole mechanic. Swarms drift to production machinery
and slow it; traps are recognised by recipe shape (no inputs, cans a
swarm) so DATA's real trap needs no code. SWARM_MAX caps a plague at 8
-- a permanently jammed machine bred 29 in one demo run
- seams: extractors idle with 'no seam' off-ore. Consumes DATA's real
seams.json shape, defensively -- GameData.seams still needs wiring
- research takes time: RESEARCH_TICKS_PER_PACK, stepped whole packs; two
labs measurably halve the wait (200 ticks vs 260)
- grantResearch: idempotent, save/load safe, verified through the live bus
- reference v5: a second works on the eastern seam that researches a tech
at tick 1235. Separate from the melt line by choice -- the western
floorplan has no columns left and threading three ingredients through it
would make the melt regression hostage to the science
Melt still first at 1247, still shipping at 20k, zero brownout ticks,
179/179 placements legal, zero extractors off-seam once seams are wired.
99 sim tests, 446 across the repo. 63x realtime at 3,500 entities.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Round 4 per lanes/LANE-SIM.md.
- research v1: kind:'lab', setResearch, snapshot.research, 'researched'.
Gating: any id a tech unlocks is refused until that tech lands; ids no
tech names are free forever. Labs take only what the active tech still
needs; several labs feed one total; research survives save/load as a
RULE, so a restored save can still build what it unlocked
- realtech.test.ts: a cold-start research run on DATA's own tree -- ore ->
packs -> archaeology lab -> tech -> a refused recipe now accepted. Also
the tripwire if the tech bootstrap ever closes over again; it was
circular and unenterable at the start of this round
- spatial cooling: coolRadius, chebyshev from the footprint, auras sum,
total capped at HEAT_COOL_MAX (0.05 -- past that a stack buys nothing
but still costs bandwidth and floor). Proven by measuring shed rate
- src/sim/constants.ts: 12 constants so DATA imports truth instead of
hand-copying numbers that go stale in silence
- reference v4: anchor-slab overflow tap, so the demo ships slabs (18 per
20k). Needed TWO melt lanes: with one, melt spills onto the slab lane
and the splitter phase-locks with the reactor's push order -- slab to
the assembler, melt to the uplink, forever, and no slab ever sold. It
passed 20k ticks looking perfect. referenceFactoryTech() derives the
techs the layout needs, from the commands
- also wired: bandwidth.capacity, EntityState.scrammed, commissionQueue
65 sim tests, 318 across the repo. Melt still tick 1248, zero brownouts
over 20k.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
A misplaced machine is finally undoable by mouse. The REMOVE button sits
with the tabs rather than on a page, because it's a mode, not a machine, and
it has to be reachable from any page. It stays armed between clicks —
demolition is usually plural — and clicking open ground does nothing, so a
stray click never reads as a broken tool. Toast: "UNIT RECLAIMED. THE FLOOR
REMEMBERS."
LANE-RENDER: the hover hook is the __remove ghost sentinel. The UI has no
Renderer reference and the only channel to the ghost is selectedBuild(),
which main.ts feeds to setGhost — so while remove is armed, bus._sel reads
{def: '__remove', dir: 0}. Key the demolition tint off that def id. It's safe
because sim's place handler ignores unknown defs, so main.ts's click-to-place
fires a place for __remove and nothing happens; the UI dispatches the real
remove itself. Exported as REMOVE_DEF and pinned by a test.
A magic string shared between two lanes via a NOTES file is not a design;
contract request filed for UIBus.setGhostMode.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Round 2 per lanes/LANE-SIM.md.
- splitters: round-robin across outward-facing belts, blocked outputs
skipped not waited on; rank now traces THROUGH splitters and takes the
best outcome reachable across every terminal a lane reaches
- buffer tanks: charge on surplus, discharge to cover deficit, brownout
only once dry; bandwidth.stored is the pool
- heat v1: heatPerTick while active + RecipeDef.heat per craft, ambient
cooling, linear throttle 1.0@0.7 -> 0.5@1.0, scram at 1.0, restart
under 0.5, both edges emit 'scram'. Throttle applies to powerGen too,
so a hot decoder sags before it drops off the bus
- commission queue: data-order activation, repeat re-enters at the back
- jammed:'starved' (edge-triggered) and BeltItem.id (stable through belt
transfers and splitters alike)
15 new fixture tests for the M2 mechanics -- data/ carries none of the v2
fields yet, so heat and tanks are tested against a fixture this lane owns.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>