Natura Systems -- detailed designs & how they interact
The fleshed-out per-system design + the coupling model. Complements DESIGN.md (the architecture)
and ONTOLOGY.md (the content). Written 2026-08-02 while the whole thing is fresh -- the operator's
call to bank the design before returning to finish the weather viz. For each system: purpose, domain,
scale, STATE it holds, ALGORITHM, fields OUT (what it exposes), fields IN (what it couples to), key
PARAMS, what to BUILD ON, and STATUS. Every system is a {name,domain,scale,init,step,fields,events}
plugging into the Natura core (natura.js). Deterministic + node-tested, like the Terrain Engine.
Part I -- THE COUPLING MODEL (how the systems interact)
Coupling in Natura is explicit and one-directional per channel: a system EXPOSES fields via fields();
a downstream system READS them from ctx.fields.<producer> (a pre-step snapshot -> order-independent).
A "world" is a stack of systems whose fields wire together. The wiring, top of the scale ladder to
the bottom, is essentially the water/energy/matter cycle of a planet:
ORBIT/STELLAR --insolation, day, season--> TIME --daylight,season--> WEATHER, VEGETATION, LIFE
TECTONICS --continents, uplift--> TERRAIN
TERRAIN --elevation, slope, flow, biome, coast--> WEATHER (orographic), OCEAN (rivers), VEGETATION (soil)
WEATHER --moisture, rain, temp, wind, cloud, storms--> TERRAIN (erosion), OCEAN (rivers/floods),
VEGETATION (growth), FIRE (dryness/wind), BIOME (climate)
OCEAN/HYDROLOGY --water level, river discharge, floods--> VEGETATION (water), LIFE (habitat), TERRAIN (fluvial erosion)
VEGETATION --biomass, canopy, food, fuel, litter--> LIFE-CYCLE (food), ECOSYSTEM (grazing base),
FIRE (fuel), BIOME (cover), TERRAIN/SOIL (litter -> humus)
LIFE-CYCLE --creatures, carcasses, nutrients--> ECOSYSTEM, SOIL (decay returns matter)
ECOSYSTEM --populations, herds, predation, migration--> VEGETATION (grazing pressure), LIFE (predation)
FIRE --burn, ash, smoke--> VEGETATION (clears it), SOIL (ash -> fertility), WEATHER (smoke/albedo)
BIOME --biome type--> VEGETATION (which plants), LIFE (which creatures)
MIND (DONE) --intent (belief+emotion -> flee/seek/forage/explore/rest)--> selects which LIFE/ECOSYSTEM verb a creature runs
SOCIETY (DONE) --shared mood + CONTAGION + COLLECTIVE MEMORY + HIERARCHY--> minds conform; a false belief spreads to consensus; the past scars/heartens the present; a salient minority leads the whole
The feedback LOOPS are the point (a living world is loops, not a pipeline):
- water: rain -> vegetation -> evapotranspiration -> humidity -> more rain (a wet region self-waters; a cleared region dries -- the Amazon in miniature).
- fire: drought -> dry fuel -> fire -> cleared vegetation -> (regrowth) -- the fire cycle.
- predator-prey: prey up -> predators up -> prey down -> predators down (Lotka-Volterra oscillation).
- erosion: rain -> erosion -> lower/smoother terrain -> changed orographic rain -> changed erosion (the landscape and its weather co-evolve over deep time).
- biome: warming -> forest advances / desert creeps -> changed albedo & evapotranspiration -> climate shift (a slow climate feedback).
Cross-SCALE coupling flows DOWN as boundary conditions (stellar insolation sets planetary climate sets regional weather sets a leaf's frost) and UP as aggregation (per-storm erosion accumulates to a landform over eons; individual lives aggregate to a population). A system reads the scale above for its context and writes the scale below's inputs.
The COUPLING RECIPE (the proven default pattern, banked from the Sept/Aug fold-ins). To couple, do NOT edit a
system's core: each step, feed one system's fields() output into another's input via ctx.fields.<producer> --
a scenario lever driven by a live field. Nature-side and EXISTA pieces alike were built this way: weather->hydro
moisture->watershed recharge (Where the Water Waits), a coupled field-year (weather->soil->vegetation->ecosystem),
The Long Game (watershed allocation across settlements). A NEW system should EXPOSE the fields others will want and
READ the fields it needs by config (rechargeFrom, elevationFrom, surfaceFrom, weather), so worlds wire
without touching code. The library carries the full capability; a WORK may pick a simplified subset -- never
simplify the library.
A second coupling FLAVOUR -- CROSS-SCALE GROUNDING (banked 2026-09-13, city<->traffic). Beyond "drive a
scenario lever from a live field," a MACROSCOPIC system can replace an ASSUMED constitutive law with the EMERGENT
one from a finer-scale model. city.js assumed a BPR volume-delay power law (1 + alpha*x^beta); traffic.js (the
microscopic IDM) now computes its ANALYTIC fundamental diagram -- the equilibrium speed-density relation its
car-following PARAMETERS imply, s0 + v*T = gap*sqrt(1-(v/v0)^delta), solved by bisection with NO ring run -- and
exposes it as a volume-delay table vdCost. city, opt-in via congestFrom:'traffic', reads that table as its
congestion curve, so the macro delay is grounded in real car-following instead of a fitted exponent. The pattern:
the fine model exposes a PARAMETER-DERIVED characteristic curve (static, so compute once), the coarse model
consumes it as a constitutive law. Keep it opt-in (default path byte-identical) and prove the curve is actually
READ (same seed, only the law swapped -> the outcome must change) not silently ignored.
Part II -- THE SYSTEM CATALOG
0. CORE (infra) -- DONE (natura.js, 22 assertions)
The clock (day->eon cadences), the system interface, the registry, the World runner, and the coupling snapshot. Not a "system" but the substrate all systems plug into. Determinism: clock + seed are inputs.
1. WEATHER (physical / weather scale) -- DONE, viz WIP (weather.js, 10 assertions)
- Purpose: dynamic weather that changes the world it falls on.
- State: grids (temp, humidity, rain, cloud, moisture-accum, windU/V, pressure) + a list of drifting pressure systems {x,y,vx,vy,strength,radius,age,life}; cached elevation + land mask.
- Algorithm: drift/retire/spawn pressure systems -> pressure field (sum of Gaussian lows/highs) -> geostrophic wind (90deg-rotated gradient) + a prevailing westerly -> semi-Lagrangian advection of temp & humidity (Stam) with relaxation to a season+day+elevation equilibrium -> sea evaporation -> orographic (wind.grad(elev)) + saturation-excess condensation -> RAIN -> accumulate moisture.
- OUT: rain, moisture, temp, cloud, pressure, windU/V, land. IN: terrain elevation (sampler).
- PARAMS: N, seaLevel, lapse, windK, evap, prevailU/V, systems. BUILD ON: fluids-and-flow (Stam).
- STATUS/WIP: rain-shadow proven (2.68x windward/lee). The instantaneous CLOUD field still trends to global saturation over long runs (humidity fills to saturation despite the sink) -- next fix: give humidity a real subsidence sink in high pressure / make cloud read from condensation-activity not raw humidity, so clouds read as distinct drifting storms. The physics (moisture, rain-shadow) is sound.
2. TERRAIN (physical / planetary-regional) -- WRAP the Terrain Engine -- DONE (terrain.js, 7 assertions)
- Purpose: the ground the world sits on; closes the weather<->land loop.
- State: a
terrain-engineTerrain instance (heightfield, flow accumulation, biome, climate). Mostly static per world, but its heightfield EVOLVES slowly under accumulated erosion (astepthat applies a little more hydraulic wear where weather.moisture is high). - OUT: elevation, slope, flow (drainage), biome, seaLevel, coast. IN: weather.moisture (slow erosion); later tectonics.elevation (continents).
- BUILD ON: the existing Terrain Engine (a separate project of seven geomorphic processes). Thin wrapper:
initbuilds the Terrain;fieldsexposes its samplers as grids;stepoptionally erodes.
3. TIME / SEASONS (physical / all scales) -- DONE, subsumed by CELESTIAL (celestial.js)
- Purpose: the cycles that gate weather and life; the derived sky.
- Realized by: the CORE clock gives the raw cadences (dayPhase..eons); CELESTIAL (#11) turns them into
the real derived sky from orbital geometry -- daylight and day-length at a latitude, seasons from axial
tilt, insolation. Systems that want the heuristic read
ctx.clock.daylight()/season(); systems that want the true geometry readctx.fields.celestial.daylight/decl/dayLengthHours. No separate module needed.
4. OCEAN / HYDROLOGY (physical / landscape) -- DONE (ocean.js, 6 assertions)
- Purpose: where the water goes -- rivers rise and fall, lakes fill, coasts flood.
- State: water level / soil water per cell; river discharge along the drainage network; lake fill.
- Algorithm: weather.rain -> runoff routed along terrain.flow (D8) -> river discharge (accumulates downstream); infiltration + evaporation; sea level (+ tides/currents later). Floods when discharge > banks.
- OUT: riverFlow (discharge), water (lakes), seaNow (tidal sea level), floods. IN: an elevation sampler, weather.rain, celestial.tide. BUILD ON: terrain flow accumulation; the walk's river.
- As built: self-computes the D8 drainage (no dependency on the terrain system); discharge = a base drainage-area per cell + rain, accumulated high->low, so a persistent river NETWORK shows and SWELLS in a storm; water pools in pits as lakes; the sea level reads celestial.tide so the COAST breathes. A big catchment topping its banks is a FLOOD event. (floodQ is scale-dependent -- it grows with catchment size.)
5. VEGETATION (life / ecological) -- the visible "greening under rain" -- DONE (vegetation.js, 8 assertions)
- Purpose: plants grow, spread, and die by climate; the layer the weather-world viz FAKED with soil.
- State: biomass / greenness / canopy per cell (a field), or individual plants with L-system form.
- Algorithm: growth = f(soilWater, temp, season, light, soil) - respiration - grazing; logistic toward a carrying capacity set by climate; SPREAD to neighbours (seeds); death -> litter (returns to soil). Individual FORM via L-systems / the tree grower for rendering.
- OUT: biomass, greenness, canopy, food, fuel, litter. IN: weather (moisture/temp), ocean (water), season, terrain (biome/soil), ecosystem (grazing). BUILD ON: L-systems, the walk's tree grower.
- This is the real system behind the viz's soil-greening -- do it properly and the world greens on the windward slopes and browns in the rain-shadow because the PLANTS respond, not a hack.
6. LIFE-CYCLE (life / local) -- a creature's life as a state machine -- DONE (lifecycle.js, 9 assertions)
- Purpose: the biological continuum (ONTOLOGY) made mechanical: birth -> growth -> death -> decay.
- State: per creature in a pool {stage(empty/egg/juvenile/adult/senescent/carcass), age, energy, health, pos, carcassT} + a nutrient grid; births/deaths counters by cause.
- Algorithm: age on the clock; energy from eating (couples to vegetation biomass, or a food fn) minus a per-stage metabolism; stage transitions by age; reproduce when adult+fed+in season; die from starvation, cold, or old age; carcass -> decays over ~18 days -> nutrients to a soil field (slowly reabsorbed). OUT: creatures (pool), nutrient field, populations by stage + births/deaths by cause. IN: vegetation (food), weather (cold stress), season (breeding).
- EMERGENCE (the proof it is real): TURNOVER -- over several lifespans the individuals all die yet the population persists across generations, holding an age STRUCTURE (young + grown at once); it rides its food's CARRYING CAPACITY (a fed world sustains it, a barren one collapses it); matter passes THROUGH life (deaths -> carcasses -> a nutrient field returned to the soil); and creatures die of OLD AGE, not only hunger -- the full lifespan runs.
- BUILD ON: give each creature a MIND (mind.js) whose intent drives its movement/behaviour (mortal minded creatures -- belief + fear + hope living and dying); multi-species; predation via the ecosystem; the soil nutrient field feeding vegetation regrowth (close the matter loop).
7. ECOSYSTEM / POPULATION (life+society / regional) -- "the battle of two moose" -- DONE (ecosystem.js, 11 assertions)
- Purpose: many lives interacting -> a food web, herds, predator-prey, migration.
- State: population per species (field or count) + individual agents for the visible ones.
- Algorithm: Lotka-Volterra (or logistic + predation) for population dynamics; boids for spatial herding/flocking/schooling; migration along season/resource gradients; the food web wires who eats whom.
- OUT: populations, herds, predation/migration events + a GRAZING field vegetation reads. IN: vegetation (biomass base + the refuge), terrain/land (habitat), weather (via vegetation). BUILD ON: boids, Lotka-Volterra, the herd/flock craft.
- As built: agent-based (herbivores graze up the biomass gradient + flee predators; predators hunt).
Three lessons baked in: (1) a vegetation PREY-REFUGE (prey in dense green are harder to catch, a Type-III
low-density refuge) DAMPS the boom-bust so it stops swinging through local extinction. (2) MOTION is
dt-invariant (displacement scales with dt) so a viewer's time-speed never changes the biology. (3) the
boundary is a choice: torus
wrap(a sealed world) OR open-zoneemigrate+ immigration flux (a metapopulation WINDOW on adjacent zones -- life wanders out and in, adapts, may locally die, and is buffered by space + migration rather than by landmass-tuned numbers). The indirect trophic CASCADE (predators green the world) is real but regime/phase-dependent here -- shown in scenarios, not asserted. - DISEASE / EPIDEMIC (2026-08-07, the 4th self-regulating verb after refuge/satiation/young-vuln): a full
SEIR+D on the agents -- susceptible -> (contact) incubating -> infectious -> recover (immune, then WANING back
to susceptible) or DIE (leaving carrion). Transmission is DENSITY-DEPENDENT: a force of infection from the
infectious neighbours within a contact radius (
1 - e^(-beta*load*dt)), so a BOOMED dense herd ignites an epidemic that crashes it, then BURNS OUT as density falls and the survivors are immune -- recurrent waves that cap booms WITHOUT tuning a knob (ontology: LIFE #decline infecting/diseasing + LIFE<->LIFE disease-spread + LIFE #death dying). The sick are energy-taxed + SLOWED, so they lag the herd and predators preferentially cull them (disease COUPLES to predation, and a disease death is carrion for the scavengers). TWO transmission ROUTES: same-species CONTACT, and TROPHIC/foodborne -- a predator that eats a sick prey or scavenges an infected carcass can catch it, so culling the sick carries a COST and a prey epidemic can JUMP the food web INTO the predators (verified: a seed-3 predator epidemic, peak 10 sick predators, sourced from the herd). Verified by RUNNING ON vs OFF, never by reasoning (the balance-trap discipline): seed-3 herb max 397 -> 82 with the epidemic; infections spread and some die (peak sick 16, 5 dead); the population still persists; disease OFF is a clean toggle.
8. BIOME DYNAMICS (regional) -- biomes that spread and shrink -- DONE (biome.js, 6 assertions)
- Purpose: the map of biomes CHANGES with climate over time (forest advances, desert creeps).
- State: biome per cell + transition progress. Algorithm: each cell's biome relaxes toward the
climate-appropriate one (from long-run weather temp+precip averages) at a rate set by vegetation succession;
edges advance/retreat. OUT: biome, transitions. IN: weather (climate averages), vegetation.
BUILD ON: terrain-engine
biomeOf(static) made TIME-EVOLVING.
9. FIRE (physical+life / local) -- a gorgeous coupled system -- DONE (fire.js, 8 assertions; incl. EMBER-SPOTTING 2026-09-13: a hot cell in strong wind lofts embers downwind past its neighbours -> fire JUMPS a firebreak, catching only in dry fuel. From Downwind / the Sept audit.)
- Purpose: fire spreads with fuel, wind, and dryness; clears vegetation; enriches soil.
- State: per cell: fuel load, burning/burnt state, fire-front. Algorithm: ignition (lightning from weather storms, or heat) -> cellular spread to neighbours weighted by fuel x wind x dryness x upslope -> consume fuel -> ash + burn-scar. OUT: fire, burnScar, smoke, ash. IN: vegetation (fuel), weather (wind, dryness, lightning), terrain (slope). BUILD ON: cellular automata, combustion.
- The drought->fire->regrowth loop is one of the most satisfying couplings; a single lightning strike in a dry season can sweep a whole valley.
- As built: lightning ignites dry, fuelled cells (igniteP x dryness^2 x fuel); the front spreads to neighbours weighted by fuel x dryness x DOWNWIND x UPSLOPE; wet ground douses it; burning consumes the vegetation (biomass reads fire.burned) and leaves a SCAR that heals slowly -- the slow heal is what makes a fire SELF-LIMIT (it runs out of fire-immune-until-recovered fuel and dies) instead of running away on the fast regrowth. OUT: fire (intensity), scar, burned. Wet regions emerge as firebreaks.
10. TECTONICS / PLANET (planetary / deep time) -- bigger, grander worlds -- DONE (tectonics.js, 6 assertions)
- Purpose: continents (not a radial island mask); plate drift & collision build mountains over Myr.
- State: plates (regions + velocities), the continental heightfield, hotspots/volcanism.
- Algorithm: plate motion -> convergent boundaries uplift (mountains, arcs), divergent rift (rift valleys, new ocean), transform (faults); over millions of years. OUT: elevation (continental), plateBoundaries, volcanism, oceans. IN: clock (deep time). BUILD ON: terrain-engine tectonic process, generalized from an island mask to plates on a plane (or sphere).
- Interim (DONE,
worldgen.js): the "bigger grander worlds, not islands" goal is met NOW by a large TILEABLE continent -- periodic-fBm land/sea + ridged mountain ranges, seamless on the torus, with real oceans and rain-shadow zones. A static generator (no plate motion over time yet); full tectonics would make that continent EVOLVE. This is what the living-zone demo stands on.
11. ORBITS / STELLAR (cosmic / deep time) -- "the slow cooling of a sun over billions of years"
- ORBITS half -- DONE (
celestial.js, 15 assertions): a hierarchy of bodies (star / tilted spinning planet / moon), all ANALYTIC in the clock time (Kepler solve for eccentric orbits, orbit inclination + node regression for the moon) -- no integration drift, fully resumable. Derives: the sun's altitude and daylight at the world's latitude, seasons from axial tilt, day length by latitude (12h at the equator, polar day/night handled), moon phase + illuminated fraction, semidiurnal TIDES with spring/neap from sun-moon alignment, and events (equinox, solstice, new/full moon, perihelion, solar/lunar eclipse). Adding planets/moons is just more entries in the body list -> an orrery. OUT: daylight, decl, sunAltitude, insolation, dayLengthHours, moonPhase/Illum, tide, springNeap, bodies. IN: clock (t, any cadence). - STELLAR half -- DONE (
stellar.js, 8 assertions): a star's whole life ANALYTIC in age (Gyr) -- main-sequence brightening (~2x/10 Gyr), red-giant swelling (L up ~1000x, R to ~180 solar), white-dwarf cooling; mass sets the pace (t_ms ~ M^-2.5, a heavier star dies sooner). Exposes luminosity, radius, temperature, phase, and INSOLATION at a planet -- the climate's deep-time boundary condition. COUPLED: the biome system reads stellar.insolation as a climate forcing, so a fainter/brighter sun shifts the whole living world (a fixed planet marches frozen -> temperate -> scorched -> frozen over the star's life).
12. MICRO (any domain / micro scale) -- "the branching of rime on a leaf in a storm" -- FROST DONE (frost.js, 7 assertions)
- Purpose: the fine-grain phenomena, each a standalone system that ALSO composes into the big world.
- Members: FROST/RIME (dielectric-breakdown / DLA -- forms in weather's cold on a vegetation leaf), a DROPLET / a SMOKE-RING (vortex-blob), a FLAME (combustion), CRYSTAL growth, REACTION-DIFFUSION pattern.
- BUILD ON: the dielectric/DLA craft (How Carefully It Listens), vortex-blob + Stam (fluids-and-flow), reaction-diffusion. Each already exists as a technique; wrap as a Natura system with the standard interface.
13. MIND (mind / individual) -- "the map is not the territory" -- DONE (mind.js, 20 assertions)
- Purpose: the first rung of the MIND domain (previously untouched). A minded creature does not sense reality directly; it holds its OWN MODEL of the nearby world and acts on THAT. The model is updated only by perceiving, only while attending, coloured by emotion, left to decay + dream while asleep -- so it comes apart from the world. The measurable phenomenon is the DIVERGENCE between belief and truth.
- State: per mind (M of them): position; beliefs bThreat / bFood / bWarmth; emotions fear / hope / hunger / content / curiosity; arousal (the wake<->sleep axis) + an individual circadian phase; the chosen intent. Float32/Uint8 arrays -- a whole population of minds in one system.
- Algorithm (per mind, per step): PERCEIVE the world truth (threat/food/warmth), gated by ATTENTION (= arousal; asleep -> perceives nothing) and warped by EMOTION -- fear conjures threat (fear^2), hope conjures warmth (hope^2), inattention adds noise. BELIEF tracks perception in proportion to attention, always forgets slowly toward a prior, DREAM-wanders while asleep. EMOTION arises from BELIEF not truth (it feels what it believes). AROUSAL self-regulates a sleep-wake cycle (fear + hunger rouse, contentment lulls, a circadian rhythm underneath). A DECISION picks the intent (REST / FORAGE / FLEE / EXPLORE / SEEK).
- EMERGENCE (the proof it is real): the map diverges from the territory. An attending mind's belief tracks the truth; a sleeping / inattentive one's goes stale and detaches. Past a threshold the emotion conjuring turns BISTABLE and TRAPS the belief: FEAR keeps a mind fleeing a danger long gone (a phantom -- the disturbing pole); HOPE keeps a mind homing to a hearth gone cold (a solace -- the warm pole). One world holding both a roaming threat and a still hearth grows both at once: some minds flee the dark, others seek the warm. The two poles are mirror images of one divergence, and their CONTRAST is the piece -- the warm mode both relieves and heightens the dark one (the operator's call: don't root the experience only in fear).
- OUT: per-mind beliefs + emotions + arousal + intent, and population fractions (fracAsleep / fracAfraid / fracHopeful / fracContent); events (sleeping, waking, phantom startle, phantom solace, falseBelief).
- IN:
config.truth(x,y,ctx) -> {threat,food,warmth}-- in a coupled world this samples ctx.fields (e.g. ecosystem predator proximity -> threat, vegetation biomass -> food, a den / fire / herd -> warmth). Runs standalone on a built-in default truth: a threat that ROAMS (circles once a day) over a hearth that STAYS. - BUILD ON: couple
intentOUT into a LIFE / ECOSYSTEM behaviour system (which verb a creature runs); SOCIETY (the next rung up) reads many minds -> shared belief, contagion of fear/hope, culture. This realizes the subjective-divergence vein ONTOLOGY.md flagged as "a lovely source of the uncanny."
14. SOCIETY (society / collective) -- "consensus without truth" + "the country that remembers itself" + "a committed minority leads" -- DONE (society.js, 20 assertions)
- Purpose: the SOCIETY domain (previously untouched). SOCIETY is emergent OVER many minds: it reads the MIND system beneath it and produces the collective. Three rungs built so far: (1) the ATMOSPHERE + its CONTAGION -- the fear and hope in the air over a crowd, which the minds breathe back in; (2) COLLECTIVE MEMORY / CULTURE -- the society remembers its own past feeling and lets that history colour the present; and (3) HIERARCHY -- an emergent pecking order of influence, so the mood is set by whoever holds attention, not by the headcount.
- State: a coarse MOOD FIELD (fearField / hopeField grids, N~16) + collective observables (meanFear / meanHope / meanDread / meanGlow, CONSENSUS, the dominant feeling, atmosphere) + the memory reservoirs (scar, legacy, temper).
- Algorithm: read ctx.fields.<mind>; splat each mind's fear/hope into the grid weighted by how AWAKE it is (a sleeping mind broadcasts nothing); normalize + blur into a smooth atmosphere. Compute the population means and CONSENSUS (low dispersion of each mind's (fear,hope) around the mean = a society of one mind).
- The coupling BACK (in mind.js, opt-in): a mind with
society+conformset pulls its belief toward the mood around it -- partly the local room (fearField at its cell), partly the global zeitgeist (meanFear) -- gated by attention. MIND <-> SOCIETY is a genuine one-frame-delayed feedback loop. - COLLECTIVE MEMORY (rung 2, the CULTURE verb "remembering"): the society keeps two slow, decaying
reservoirs --
scar(sustained collective fear marks the culture) andlegacy(sustained collective hope builds one) -- with a many-day half-life, so history outlives the event. Their net (temper = scar - legacy) colours the very air the minds breathe: a scarred people carry a background dread that primes them to fear the next shadow HARDER; a people with a legacy of hope breathe a steadier atmosphere that answers it SOFTER. Crucially, accumulation + events key off the RAW mind feeling, never off the memory itself, so the loop runs THROUGH the minds (laggy, attention-gated, self-healing as the scar decays) rather than feeding itself. - HIERARCHY (rung 3, the verb "leading/following"): a per-mind
influence, updated by a REPLICATOR on a fixed budget of collective attention: SALIENCE = how awake a mind is times how strong+clear its feeling is; a mind more salient than the currently-heeded (influence-weighted) average GROWS its share, the rest shrink, and the total renormalizes to mean 1 (so not everyone can lead; influence floors, never zeroes, so the order turns rather than locking). The mood a mind breathes is then weighted by influence -- BOTH the local air (the fear/hope splat) AND the global zeitgeist (an influence-weighted mean) -- so the leaders set the tone. What the population actually FEELS (raw means), and what it remembers (rung 2), stay headcount; only the breathed AIR is leader-weighted. - EMERGENCE (the proof it is real): (a) a shared mood FORMS -- a threatening world grows a collective fear, a warm one a collective hope, and CONSENSUS tracks whether the population truly agrees (high in a world of one mind, low in a divided one). (b) THE COLLECTIVE PHANTOM / TIPPING POINT: a brief scare met by only a ~10% minority either fizzles or, past a critical contagion strength, SWEEPS the whole into total consensus on a danger that never was -- a phase transition (the threshold model of collective behaviour). (c) HISTORY SHAPES THE PRESENT (verified the balance-trap way, by RUNNING identical fresh scares under different histories): a scarred society fears the same fresh scare HARDER (raw collective fear 0.25 naive -> 0.58 scarred), a society with a legacy of hope answers it SOFTER (-> 0.17), and a long REST HEALS the scar back toward baseline (0.58 -> 0.30 after 60 sim-days, the memory decayed) -- self-regulating, never a runaway. (d) A PECKING ORDER, AND A MINORITY THAT LEADS (rung 3, RUN not reasoned): influence concentrates on the salient from a flat crowd (concentration 1.00 -> 1.18, a top leader ~2x the average), the LEADERS are the salient (an afraid minority holds ~8x the influence of the calm majority), a committed salient MINORITY (~12%) carries the WHOLE into its fear where headcount alone would not (population fear 0.10 flat -> 1.00 with leaders), and -- the synthesis with rung 1 -- INFLUENCE LOWERS THE TIPPING POINT: a subcritical scare that FIZZLES in a flat crowd (meanDread 0.05) is CARRIED by leaders (0.89).
- OUT: fearField / hopeField (the mood a mind reads, coloured by memory + weighted by influence), meanFear/Hope (the AIR the minds breathe, leader-weighted) + meanFearRaw/HopeRaw (the raw feeling), meanDread/Glow, consensus, dominant, atmosphere, scar/legacy/temper, and influence/inflMax/inflHerf; events (panic, rally, schism). IN: ctx.fields.<mind>.
- BUILD ON: the next rungs -- reputation (influence that persists as a name, not just a mood), cooperation/reciprocity, economy; the memory made visible over TIME (a decaying scar is a temporal phenomenon: a country jumpy for a generation, then healing).
- FACTIONS -- ATTEMPTED, NOT SHIPPED (a hard open problem, the dead-end recorded so it is not re-tried blind): homophily (a mind heeds its OWN fear/hope camp) was built + probed by running. It does NOT yield stable BALANCED polarization on this substrate. Conforming to the camp MEAN only lets a dissenting minority SURVIVE weakly (polarization ~0.09, a shrinking remnant) -- too weak to claim. Adding a group-polarization EXTREMITY push (heed the camp's extreme) overshoots to WINNER-TAKE-ALL: one pole captures everyone (split -> 1), because the MIND model's fear and hope poles are dynamically ASYMMETRIC (fear ramps faster + the warm phantom), so whichever pole ramps first eats the other through the residual global-conform coupling. Genuine bistable two-camp polarization needs either symmetric pole dynamics or near-total camp insulation -- a real bifurcation-tuning problem, or an identity-tag faction not tied to the fear/hope asymmetry. Do it RIGHT (verified stable + balanced by running) or not at all; do not ship the weak/winner-take-all version.
Part II.b -- EXISTA: the model past nature (the human + made world)
The ontology covers ALL things, not a field of animals (operator, 2026-08-07: "exista, not natura ... the same machinery pointed at a market instead of a meadow"). These systems point the same emergence machinery at the human/made world -- each a DEEP coupled model (not a scalar), every emergence verified by RUNNING. Four were built in one evening (economy by hand; artifact/technology/city in parallel by orchestrated apprentices, then each re-verified here). This is the answer to "stop redoing the same five nature motifs, go broad AND deep."
15. ECONOMY (society / market) -- "the invisible hand" -- DONE (economy.js, 14 assertions; incl. an activity coupling lever)
Seven coupled mechanisms: production by comparative advantage at the going prices; Cobb-Douglas demand; EXACT market-clearing prices (p = money-chasing-good / quantity, so money is conserved to the cent, no auctioneer); monetary circulation with saving; learning-by-doing; capital (wealth funds better production, r>g); idiosyncratic luck (a Kesten process). EMERGENCE (run): prices CONVERGE + track SCARCITY; TRADE beats autarky (gains from trade); SPECIALISATION sorts agents by comparative advantage; WEALTH concentrates into a heavy tail from an equal start; supply + demand shocks ripple through prices; money conserved throughout. VIZ: the-invisible-hand.html (live).
16. ARTIFACT (artifice / material) -- the lifecycle of made things -- DONE (artifact.js, 20 assertions)
Manufacture -> wear + fatigue -> stochastic FAILURE on a real BATHTUB hazard (infant + constant + Weibull wear-out) -> maintenance with diminishing returns + a repair-vs-replace crossover -> material conservation with recycle-entropy. EMERGENCE (run): the bathtub curve; maintenance extends life with diminishing returns; a steady-state fleet; usable mass decays over recycle cycles while total matter is conserved to ~1e-6.
17. TECHNOLOGY (mind+society / knowledge) -- how a people invents + forgets -- DONE (technology.js, 25 assertions)
Invention by RECOMBINATION against a hidden tech-tree with prerequisites; diffusion with fidelity<1; obsolescence; LOSS (a dark age when a tech's few holders turn over before transmitting). EMERGENCE (run): cumulative innovation ACCELERATES (combinatorial); a superior tech sweeps (S-curve); knowledge is LOST in small/fragmented/high-turnover populations that a large connected one keeps; DIVERSITY raises the discovery frontier (a monoculture reinvents).
18. CITY (society / built-environment) -- an emergent city -- DONE (city.js, 20 assertions)
Bid-rent land use (residential/commercial/industrial sort into rings); accessibility over a CONGESTED road network; development + density; AGGLOMERATION; aging/BLIGHT + renewal; population + jobs locate by utility. EMERGENCE (run): a monocentric CORE emerges from a flat plain; a road induces development + congestion; monocentric -> POLYCENTRIC as the core congests; blight-and-renewal cycles.
19. SOIL (physical<->life / the matter cycle) -- pedogenesis, the skin between rock and life -- DONE (soil.js, 28 assertions)
Weathering of bedrock (physical freeze-thaw + chemical dissolution, gated by climate + slope) into mineral soil + HORIZONS; the organic cycle (litter -> decomposition -> humus -> mineralisation -> distinct nutrients N + P, each with uptake + leaching); soil moisture + texture; EROSION (slope + water strip topsoil) + DEPOSITION (build valley floors); and the two-way vegetation feedback (soil gates growth; growth + death build soil). EMERGENCE (run): a soil CATENA (soil deepens + enriches downslope); fertile valley floors vs bare steep slopes; organic matter + nutrients accumulate where life has grown + died (the land records its biology); MASS BALANCE (conserved minus leaching); stripping the vegetation (fire/clearing) accelerates soil + nutrient LOSS on the now-bare ground (humus 6.18 -> 0.00 bare vs 6.18 -> 6.48 vegetated). The matter cycle closed: LIFE -> death -> soil -> LIFE.
- VIZ (
the-skin-of-the-world.html, live -- the LAST exista window, completing the set): a hillside CROSS-SECTION from a bare ridge to a valley, built across ~1000+ years: bedrock -> regolith -> mineral -> humus -> litter stacked as visible HORIZONS (O/A/B/C), vegetation greening on top, and the CATENA emerging (ridge thin + bare, valley deep + dark + fertile -- RUN-verified: valley soil ~3.3 vs ridge ~2.4; humus ridge 1.2 -> valley 2.1). Read it FOUR WAYS (keys 1-4): horizons / moisture / fertility / EROSION-flux -- the erosion lens colours the column by net loss vs gain and shows the catena's MECHANISM (ridge RED = shedding soil ~-28, valley BLUE = gathering it), not just its result. Click to strip a stretch bare (fire/plough) and watch it bleed soil then heal; fast-forward the centuries; SOUND (a low drone that warms as the rock becomes living soil). THE FIX for the earlier backed-out attempt (both prior "blockers" now RESOLVED): soil.js is DESIGNED to be driven and CANNOT make life alone -- its self-containedbiodecays to 0, and SEEDING nutrients does NOT help (confirmed by probe). It must be COUPLED: run it in ONE World with a sloped TERRAIN stub (elevation + land), a CLIMATE stub (temp + valley-wetter moisture), and a VEGETATION stub (biomass gated by moisture +soil.fertility) -- then humus builds (mean 0.02 uncoupled -> 1.72 coupled) and the living catena forms. The VISUAL bedrock elevation is drawn from the terrain profile, because soil.js's ownbedrockis a flat REFERENCE (the sim encodes terrain as a per-cell SLOPE field, not absolute elevation -- that was the old "flat" confusion). Recipe = soil-test's coupling block generalised to N=64. The lesson: a system built to be COUPLED needs its partners to come alive; do not judge it standalone.
20. EPIDEMIC (society / contagion) -- "the shape of a season" -- DONE (epidemic.js, 23 assertions), viz DONE
A pathogen moving through a POPULATION on a CONTACT NETWORK -- not well-mixed. Each person S->E->I->R (+D):
susceptible, exposed/incubating, infectious, recovered-and-immune, or dead. Transmission passes ONLY along the
network edges (per-contact chance beta per infectious day); the graph is heavy-tailed (lognormal sociability,
hubSigma) so a few SUPERSPREADERS emerge and carry the outbreak past what the mean contact-rate predicts.
Incubation, infectious period, fatality (ifr), and optional immunity WANING (R->S) are all real per-person
mechanisms. Levers a viz/scenario reaches: distancing (global beta multiplier), quarantine (fraction of new
cases that self-isolate), and vaccinate(st, frac, targeted) (S->R, random or superspreader-targeted). EMERGENCE
(all RUN-verified, epidemic-test.js): mass conserved; an OUTBREAK above R0=1 and a FIZZLE below; the CURVE turns
over at an interior peak; the peak is where Reff falls through 1 (susceptible ~ 1/R0) and it OVERSHOOTS herd
immunity; the HERD THRESHOLD (vaccinate > 1-1/R0 -> no ignition); TARGETING superspreaders crushes the peak far
more than random at equal cost; final size grows with beta; DISTANCING flattens + delays the peak; WANING -> an
ENDEMIC steady state instead of burnout; deaths ~ ifr x attack; QUARANTINE (isolating cases) reduces + past a
threshold crushes the outbreak; SUPERSPREADING/overdispersion -- read off the causal tree the sim records, the top
fifth of spreaders cause most infections and most infected people infect NOBODY (the 80/20 of outbreaks). R0 is the network-corrected T x <k^2-k>/<k>
(excess degree), which is exactly why superspreaders matter. NOT society.js's MOOD contagion -- a real disease
with immunity + mortality. The network-corrected R0 formula overestimates for a heavy tail; hubSigma=0.6 is the
calibration where analytic R0 tracks the empirical turning point (1/sAtPeak) -- measured, not assumed.
- VIZ (
the-shape-of-a-season.html, live): the population as a contact network read through FIVE LENSES (state / network-by-degree / immunity-wall / risk-front / CHAINS, keys 1-5); dots sized by degree (the superspreaders), faint edges + red transmission corridors, and a white FLASH on each person the instant they catch it. The CHAINS lens draws the actual transmission TREE (each person linked to whoever infected them, coloured by generation, sized by how many they went on to infect so realised superspreaders swell into bright hubs) plus the secondary-case DISTRIBUTION (a tall bar at 0-1, a long thin tail -- the superspreading signature). The full COMPARTMENT STACK over time (susceptible draining from the top, the exposed+infectious wave passing through, immunity building from below, a peak mark) + a SUSCEPTIBILITY GAUGE with the herd-immunity line (S = 1/R0) so the turning point is concrete -- the pool visibly drains through the line at the peak. Reff read out (growing/fading/~1). Click a person to vaccinate; chips + keys for bulk random/targeted vaccination, distancing, QUARANTINE, and a new outbreak; hover-inspect. SOUND (a fifth distinct sonified window): a soft tick per new case (quickens to the peak + thins as it breaks), a low prevalence tone, a knell per death. Auto-reseeds after each season fades -> successive seasons (never a frozen page). Deepened from a first-pass (one network view + one flat curve) into this multi-lens/stack/gauge model -- the operator's dot-into-model.
21. COUPLED EXISTA WORLDS -- the human-world systems wired to drive each other -- Lives and Livelihoods DONE
The first time two EXISTA systems run in one World and drive each other (The Long Noon couples the NATURE stack;
this couples the HUMAN one). lives-and-livelihoods.html: EPIDEMIC + ECONOMY. The coupling channel is economy.js's
new activity lever (scales production AND consumption together, so money conserves + prices hold -- only REAL
output moves; economy-test #9). Each step the viz reads the epidemic and sets economy.activity = (healthy workforce fraction) x (1 - lockdown cost) and sets epidemic.distancing from a policy: so REAL OUTPUT craters as
infections peak (the sick + dead leave the workforce -- doing nothing is NOT free), and a distancing POLICY trades
deaths for economic loss (no lever helps both). A THIRD channel is ENDOGENOUS FEAR: a fear scalar rises with
prevalence + fresh deaths and makes people distance VOLUNTARILY (cutting transmission AND activity) with no order
given, so even "no action" flattens the curve a little AND carries a large recession -- and that recession is
mostly VOLUNTARY, not mandated (the real empirical finding: at policy 0 deaths 24->~20 but econ loss ~3.2k->~7.6k);
policy layers on TOP of that fear baseline. EMERGENCE (RUN-verified by probe-sweep BEFORE building the viz):
output troughs to ~47% at the peak; more distancing -> fewer deaths + more econ loss; TOTAL HARM is U-shaped and
its minimum SHIFTS with the value-of-life (low -> do little, high -> distance hard, a full lockdown almost never
optimal). The viz plots the (econ-loss, deaths) tradeoff FRONTIER, a point per auto-reseeded season coloured by
policy, + a value-of-life slider whose iso-harm line marks the least-harm policy. PATTERN for coupling within the
framework: drive one system's SCENARIO LEVER from another's fields() each step -- no system-code change beyond
adding ONE clean defaulted input lever (here activity), so both systems' own test suites stay green.
THE GRAND COUPLING (commonwealth.js + nothing-happens-alone.html, commonwealth-test.js) -- the capstone the
separate windows pointed at: TEN systems in ONE running World along a causal spine, natural world into human world.
The real EXISTA agent-systems where they connect naturally (economy.js, epidemic.js, speculation.js) + SIX thin
purpose-built BRIDGE systems (climate, land [veg over slow soil], harvest, population, knowledge, mood) that share
variables by design, + a coupler system that runs FIRST each tick, reads last tick's fields, and writes the three levers
(economy.activity, epidemic.distancing, speculation.V) -- INCLUDING sparking a latent plague when crowding x
malnutrition push R past 1, so epidemics ARISE from conditions rather than being scripted. One tick = one WEEK (the
agent-systems scale by dt-in-days -- epidemic burns a realistic multi-week wave; the bridges key off the clock so
seasons + slow soil-building stay timescale-correct). EMERGENCE (RUN-verified, response-time measured): a stable
BREATHING baseline (the ~9-year wet/dry epochs make it cycle on their own -- good decades, then famine, then plague,
then recovery); a drought CASCADES downstream IN LAG ORDER (biomass 0.02y < hunger 0.17y < economy 0.21y < unrest
0.38y) with a grain-price mania and, often, an emergent plague off the famine; plagues ignite unbidden over
drought-battered decades. The viz shows the causal WEB (8 nodes as gauges, edges carrying travelling flux-pulses that
redden with hardship) over 7 scrolling RIBBONS (the same story as time, so one drought reads as a staggered diagonal
of dips) + drought/plague/good-years perturbations + a health-drone soundtrack. The LESSON of the whole EXISTA arc:
a system built to be COUPLED must be judged coupled; strung together, the separate models stop being dials and become
a universe where a cause becomes, with lag, a distant effect -- "a drought in the sky ends, in time, as a riot in the street".
THE MALTHUSIAN ESCAPE (added after): the world was locked in eternal cycles, so a KNOWLEDGE bridge gives it the ARC of
real history -- practical know-how (logistic, COMPOUNDING invention driven by prosperity+population, ERODED by
famine/plague) raises the yield of fixed farmland, so the trap holds for ~a century, then know-how compounds and
population BREAKS the old ceiling (RUN-verified: know 0.14 at y50 -> plateau 4.07, pop 108 -> 301), a catastrophe can
claw it back (a dark age). TOOL-CHOICE lesson: technology.js was the WRONG tool (its bounded tech-tree saturates in a
few years -- the wrong scale for a centuries-long productivity climb); a purpose-built bridge is right, same as using
climate/land bridges over weather.js/vegetation.js. The viz gained a KNOWLEDGE node (the feedback loop drawn -- economy
funds it, know-how flows UP into harvest, the web's one 'good' upward edge) + a slow-S-curve know-how ribbon + takeoff/
dark-age chronicle lines. The piece now models the WHOLE arc of a civilization: the ancient trap AND the escape from it.
40. SETTLEMENTS -- THE SHARED WELL (society / regional) -- "draw hard now, or last" -- DONE (settlements.js, settlements-test.js, 12 assertions). [naming: the INTERACTIVE stewardship game is a separate piece, "The Long Game"; this is the headless natura SCENARIO that proves the coupling.]
The SPATIAL, watershed-grounded cousin of the GRAND COUPLING (commonwealth.js is the same forces as a NON-spatial time
series; this plays them out ON THE MAP). A valley of villages on the uplands above watershed.js's river, each DRAWING
from the SPATIAL aquifer (writing a draw field watershed subtracts from the table -- a new opt-in extraction input on
watershed), FARMING beside it (a fallow/fertility soil-stand-in; soil.js is the deep version), growing/shrinking by the
water + food it wins, and passing a CONTAGION along the valley network. Per-village policy: a village stewards its WATER
and its LAND on two independent knobs (0 greedy .. 1 paced), so a valley MIXES wise and greedy neighbours on one aquifer.
FIVE emergences, each RUN-verified and each ISOLATED so one tragedy cannot masquerade as another (measured, never
reasoned): (1) WATER TRAGEDY -- greedy pumping draws the shared table down, wells fail, population collapses (pop 254 @
wOK 0.25 vs paced 919 @ 0.71); (2) SPATIAL EXTERNALITY -- an upstream over-pumper lowers the DOWNSTREAM table through the
aquifer's lateral flow (well depth 0.0033 alone -> 0.0080 with a greedy neighbour), the commons made spatial; (3) FALLOW
-- over-cropping mines the soil, fallowing keeps it fertile; (4) VALLEY EPIDEMIC -- a plague sweeps the malnourished
valley 7x worse than a healthy one (peak 0.124 vs 0.017), because degraded water+soil (not head-count) drive
transmission; (5) FLOODS -- the wet-season river overtops the BOTTOMLAND villages (exposure falls off with distance
from a river cell, so the uplands are spared), drowning some but laying SILT that heals the soil -- so a riverside field
stays fertile (0.91) under the very cropping that mines an upland field to dust (0.00). The river GIVES as it takes.
STIFFNESS LESSON (found by RUNNING): a logistic pop update p*(1-p/K) ANNIHILATES a village the instant K collapses (the
term explodes negative) -- so growth is logistic only when there is room, and DECLINE is a bounded relaxation toward K.
HONESTY LESSON (same pass): I also built a MIGRATION mechanism (refugees flow to a neighbour with room) and CUT it -- it
washed out (every village is pinned to its local K, so relocated people just regrow at the source and cannot be absorbed
at a full destination) and behaved murkily; a mechanism that adds code but produces no clean, intuitive, measurable
effect is noise dressed as depth, not depth. Better one excellent mechanism than one excellent + one fake. The scenario
proves watershed's new draw coupling end to end.
22. SPECULATION (society / financial market) -- "the madness of crowds" -- DONE (speculation.js, 9 assertions), viz DONE
The ASSET market, the shadow of economy.js (the REAL market). One asset of fixed fundamental value V; price is set
by a market maker from the demand of two agent types whose POPULATIONS shift by fitness: FUNDAMENTALISTS (expect
reversion to V -> stabilising) and CHARTISTS / trend-followers (extrapolate the last move -> destabilising).
Agents switch toward the recently-profitable style (a logit on remembered profit). EMERGENCE (all RUN-verified,
speculation-test.js): fundamentalists ALONE keep price near value; add chartists + switching and ENDOGENOUS
BUBBLES + CRASHES appear with NO external shock (a rise pays the trend-chasers -> recruits more -> steepens ->
until a stumble flips everyone back); MEAN-REVERSION to value over the long run; FAT-TAILED returns (kurtosis > 3);
VOLATILITY CLUSTERING (|return| autocorrelated); the chartist share swings caution<->mania; more trend-following ->
bigger bubbles. Calibration (MEASURED by probe-sweep, not assumed): the loop gain mu*g must sit JUST UNDER 1
(g=3, mu=0.3) so bubbles GROW then REVERT instead of exploding to the price cap -- the edge-of-chaos regime.
- VIZ (
the-madness-of-crowds.html, live): the price line vs the pale fundamental-VALUE line (green fill when overvalued/bubbling, red when slumping), a CROWD of dots flushing green (chasing) / blue (cautious) with the mood, a mood band (chartist share over time), a RETURNS histogram vs a bell curve (the fat tails made visible), and a GREATER-FOOL line at the recent peak showing how far underwater whoever bought the top now sits + a "worst wipeout" -- the mania's victims made concrete (the system tracks each strategy's cumulative P&L too; in this trendy regime momentum actually out-earns fundamentalism, which is WHY bubbles persist -- the losses fall not on the strategy but on whoever is late). Drag EXUBERANCE (g) to grow bubbles; a NEWS-SHOCK button jolts the price (fizzle or ignite a mania); SOUND (a tone climbing with the bubble, a greed shimmer as the crowd turns chartist, a downward sweep on a crash). The sibling of The Invisible Hand: that shows the market's WISDOM (prices clearing goods), this its MADNESS (price detaching from value into manias made of the crowd watching itself).
23. CRYOSPHERE (physical / geological) -- "the ice ages" -- DONE (cryosphere.js, 12 assertions)
- The missing COLD force under the physical stack. Land ice as a per-cell MASS BALANCE: snow accumulates
where the air is below freezing (colder air -> heavier snow, capped) and ablates by a degree-year melt where
it is above. Cell temperature = a base + a deep-time FORCING (a scalar, or a fn of the clock a driver ramps)
- a lapse rate with elevation (mountains glaciate first) + stellar insolation - the albedo feedback.
- The EMERGENCE -- ICE-ALBEDO HYSTERESIS (the reason to build it): white ice reflects sunlight, so more ice -> a colder world -> more ice, a positive loop read one step delayed (stable). This makes the climate BISTABLE: an ice age is a TIPPING, not a smooth response -- ice holds near zero as the world cools, then past a threshold runs away to a glaciated planet (10%->90% over ~1.6C), and to melt it back you must warm PAST where it froze (glaciates at ~-2.6C forcing, deglaciates at ~+1C). Proven by a cooling+warming sweep in the test.
- GLACIAL FLOW (opt-in
flowK): ice creeps DOWNHILL on its own surface (bed + ice), mass-conserving + stability-capped -- so it pools in valleys and flows past the snowline to a melting terminus, and carving concentrates where the glaciers actually move. Default off (the analytic emergence test stays clean); tested (conserves mass, moves the centre-of-mass down-slope, stays put when off). A static field made a MODEL. - OUT: ice (thickness grid), iceFraction, meanAlbedo, seaLevelDrop (ice locks up water -> the sea withdraws), carve (thick ice grinds the bed -> feeds terrain), snowElev (the snowline), volume, forcing. IN: an elevation sampler, optional STELLAR insolation (a fainter sun -> a colder world -> more ice, tested), a forcing.
- BUILD ON / COUPLES: stellar (insolation), and out to ocean (sea level), terrain (glacial carving), biome
(a warming world the ice retreats from). The deep-time companion to STELLAR + TECTONICS; an ice age over a
landscape is its showcase scene (next plank). Small, single-concern file; factory
makeCryosphere(config).
24. CHEMISTRY (physical / material) -- "the chemical layer" (ONTOLOGY-FOLD-IN #1, the biggest hole) -- DONE (chemistry.js, 9 assertions)
- Matter that changes COMPOSITION, not just shape + temperature. Every prior STATES system is thermal / phase / mechanical / erosive -- iron bends and melts but never RUSTS. Here each cell holds a MATERIAL and an aging progress 0..1, and it WEATHERS over sim-time driven by EXPOSURE, running the material's real reaction: iron RUSTS (driver = moisture), copper + bronze grow a green PATINA (driver = time, slow -- decades), silver TARNISHES (time, fast), wood ROTS (driver = damp AND warm), and PAINT FADES (driver = LIGHT -- the sun bleaches the pigment; the same light-driven vein as silver-halide photography). The aging runs through real colour stages. FOUR distinct drivers -- moisture, time, damp+warm, light -- so each material keeps its own clock.
- The EMERGENCE -- composition tracks the CONDITIONS, not the clock: the SAME iron rusts to completion on the wet coast and stays bright in the desert; and in a dry world the time-driven copper still patinas while the moisture-driven iron does not -- the reaction decides, not mere exposure. Proven by a wet/dry split + a dry-world copper-vs-iron test.
- OUT: material (index grid), aged (0..1 grid), meanAged, matColor(mi,aged) helper (the colour turns coppery->green as it patinas). IN: a material map (fn/index), moisture + temperature (scalars, fns, or a live WEATHER field -- tested reading weather.moisture), so rain accelerates rust and damp drives rot.
- BUILD ON / COUPLES: WEATHER (moisture), LIFE (rot/ferment ARE chemistry -- unifies with decay), ARTIFACT
(a chemical clock: a bronze statue greens, a shipwreck rusts). The ART vein too (the alchemist's bench); the
showcase is
what-its-made-of.html. Small single-concern file; factorymakeChemistry(config).
25. NICHE CONSTRUCTION (life / ecological) -- "life that remakes its world" (ONTOLOGY-FOLD-IN #2) -- DONE (niche.js, 8 assertions)
- The inverse of "weather changes the world it falls on": LIFE writes the world, then lives in the changed
world. A field of BUILDERS (beavers, coral, worms, termites) writes a PERSISTENT structure into a
builtfield, and that structure RAISES the local habitat, which raises the builders' own carrying capacity -- so building feeds itself (ecosystem engineering, a positive feedback). Builders grow logistically toward the engineered capacity, spread to neighbours, and build only where the ground SUITS it (an optional suitability/terrain field -- beavers dam the valley, not the ridge). - The EMERGENCES (tested): (1) ENGINEERING LIFT -- with building on, the population settles FAR above the
bare-ground base (they make more habitat than the ground gives). (2) THE LEGACY -- the structure OUTLASTS its
builders: kill the whole population and the
builtfield still stands, decaying only slowly, so the world keeps the mark of a life long after it is gone. Plus: no builders -> no structure (nothing builds itself); the engineered zone SPREADS from the seed. - OUT: pop (builder density), built (the structure), habitat (derived -- other life reads this to colonise the engineered ground), suit, meanPop, meanBuilt. IN: an optional suitability field (terrain/wetness).
- BUILD ON / COUPLES: the ecosystem/agent + terrain/field pattern; the
habitat/builtfields feed other life onto the engineered ground (a beaver pond becomes fish + bird habitat). The showcase isthe-world-they-made.html(a valley dammed into a pond-chain that outlasts the beavers). FactorymakeNiche.
26. WATER CYCLE (physical / landscape) -- "one substance, all its states" (ONTOLOGY-FOLD-IN #5) -- DONE (hydro.js, 9 assertions)
- Water as ONE CONSERVED substance moving through its FOUR phases. Weather rains and ocean routes rivers, but nowhere was water a single conserved budget; here every drop is accounted for across LIQUID (pools/soil), VAPOUR (in the air), CLOUD (aloft), and ICE (frozen, locked out of the flow), and the total never changes. Warmth EVAPORATES liquid to vapour; vapour DIFFUSES through the air and, where it is cool enough to be over-full, CONDENSES to cloud; cloud RAINS back to liquid; liquid RUNS downhill and pools in the valleys -- then evaporates again.
- The EMERGENCE is the CONSERVATION itself (tested to <0.005% drift over 400 steps): drought and flood are not water made or destroyed but the same water OUT OF BALANCE -- warm one region and the liquid it loses falls as rain on a cooler one (the warm side becomes the drought, the cool side holds the water, from one budget). Plus: the cycle turns (liquid -> vapour -> cloud -> rain), and liquid POOLS in the low valleys.
- OUT: liquid, vapour, cloud (grids), elev, total. IN: an elevation sampler + temperature (scalar, fn, or a live WEATHER field).
- BUILD ON / COUPLES: WEATHER (temperature drives evaporation/condensation), TERRAIN (runoff + pooling), and
naturally the CRYOSPHERE (ice is water locked OUT of the cycle -- the ice age and the water budget are one
system). Unifies the half-built water pieces into one conserved loop. Factory
makeHydro.
27. SENSING (life / ecological) -- "what a creature can detect, and its limits" (ONTOLOGY-FOLD-IN #3) -- DONE (sensing.js, 14 assertions)
- The channel BENEATH belief. mind.js holds a creature's BELIEF (its model of the world); sensing is the raw
CUE reaching a sensor, through a real MEDIUM, with a real range. A prey gives off cues and each travels
differently: SCENT drifts DOWNWIND (semi-Lagrangian advection of a decaying plume), lingers, then goes cold;
SOUND radiates far and symmetric (radial 1/(1+kd^2)); SIGHT is bright by day and near-blind at night or in
fog (a light(1-fog) clarity gates a short radial falloff); HEAT betrays a warm body but only up close
(radial, short hard range, light-independent). One field per channel, plus a combined best-channel
detect. - The EMERGENCE is that detection is an INFORMATION GAME, not a fact (tested): (1) SCENT ASYMMETRY -- the plume goes downwind, so a nose downwind smells prey a nose the same distance upwind never will; (2) NIGHT and FOG blind SIGHT while SOUND and SCENT still carry (the nocturnal hunt must use non-visual channels); (3) SOUND out-ranges SIGHT (cells where you can hear prey you cannot see); (4) HEAT is short-range and works in the dark.
- OUT: scent, sound, sight, heat, detect (grids) + light/fog/wind readouts + the live source list. IN: prey SOURCES ({x,y,scent,sound,heat,vis}, static or a fn of the clock), wind (scalar or a live WEATHER field), light (scalar or a live CELESTIAL daylight), fog (scalar or from WEATHER humidity).
- BUILD ON / COUPLES: WEATHER (wind carries the scent plume, humid air fogs sight), CELESTIAL (daylight
governs sight), and PREDATION -- turns "the predator sees all" into "senses within its means": the hunt begins
only where
detectcrosses the sensor's threshold, so the wind and the dark are players in it. FactorymakeSensing.
28. MUTUALISM / COEVOLUTION (life / ecological) -- "the cooperative +/+ edge, the mirror of predation" -- DONE (mutualism.js, 19 assertions), viz DONE
- The hole this fills: every prior LIFE<->LIFE coupling is a MINUS for someone -- predation eats, disease kills, grazing/competition takes. Nowhere did two species HELP each other and both gain. A REWARDER guild (plants: costly nectar) + a SERVICE guild (pollinators: carry pollen the plant cannot) each need the other to reproduce, so their fates are LINKED. General over the flower/pollinator instance: fig & wasp, coral & its algae (sugar for shelter), acacia & ant (nectar for defense), cleaner fish & client.
- State: two small guilds, each species
{trait, pop[, cheat]}. Interaction is a TRAIT-MATCH Gaussian (corolla depth vs tongue length) x Type-II saturated visitation; plant seed-set = legit (non-cheated) pollination received; pollinator births = reward collected minus a service cost. - FOUR emergences, each RUN-verified (mutualism-test.js, the balance-trap discipline, never reasoned):
- RECIPROCAL COUPLING -- the two pops move TOGETHER (positively), the opposite of predator-prey's chase; remove the pollinator and the obligate plant COLLAPSES (linked fates).
- THE ALLEE THRESHOLD -- an OBLIGATE pair (neither reproduces without the other, baseline=0) is BISTABLE: a founder pair below a critical density dies to (0,0); above it climbs to a high mutual equilibrium (plant 0.68 / poll 0.50). Cooperation must reach a quorum to catch -- mutualism as an Allee effect.
- COEVOLUTION -- a quantitative-genetics selection gradient climbs each guild's trait toward its partner's, so a MISMATCHED plant + pollinator CONVERGE (Darwin's Madagascar orchid predicting its long-tongued moth, gap 0.40 -> <0.12). And under NARROW interaction niches (small matchWidth -> disruptive selection) a 2-plant/2-pollinator community SORTS into matched pairs (pollination SYNDROMES, spread 0.47 preserved); under broad niches everyone instead converges to one generalist "average flower" -- both real regimes.
- THE CHEATER & SANCTIONS -- a nectar-robber (a within-guild strategy on a replicator) takes reward without the service, saving the cost. WITHOUT a check it INVADES (cheat freq -> 1.0) and the un-pollinated mutualism COLLAPSES (plant -> 0, the tragedy of the commons); a plant that WITHHOLDS reward from ineffective visitors (SANCTIONS / partner choice) makes cheating unprofitable and holds cooperation stable (cheat -> 0, plant 0.68). The reason mutualism is an evolutionary puzzle, and one way nature answers it.
- OUT: plants + pollinators (pops/traits/cheat), plantPop/pollPop, meanMatch, traitGap, meanCheat, visits;
events (collapse, cheaterTakeover). IN: nothing required (self-contained); a coupled world can drive
plantK from vegetation biomass, sanctions from a scenario, etc. Factory
makeMutualism(config). Small single-concern file; pure deterministic mean-field (no rng -> seed-robust). Viz:the-bargain.html(below).
29. WATERSHED / GROUNDWATER (physical / landscape) -- "the drainage the land carves, and the water table beneath" -- DONE (watershed.js, 12 assertions)
- The SUBSURFACE + drainage-network layer the WATER CYCLE (#26 hydro) leaves out. hydro moves water through its PHASES above ground; ocean (#4) routes coastal rivers; terrain (#2) erodes stone by flow. But nowhere was the land SOLVED as a drainage: every hollow filled (priority-flood), flow routed downhill (D8) + ACCUMULATED into a branching stream->river->sea network, with a hidden WATER TABLE beneath (a smoothed potential that RISES with recharge and FALLS with warmth) surfacing as SPRINGS.
- Algorithm: priority-flood depression fill -> D8 down-pointers -> flow accumulation -> lakes; a box-blurred
filled surface minus a depth = the regional groundwater potential; a seasonal
offsetintegratesrechargeK*recharge - drawdownK*warmth - leakK*offset, so the table breathes with the coupled climate. - OUT: flowAccum, riverMask, waterTable, depthToWater, springMask, lake, offset, springCount/riverCount/maxAcc;
events (drought, flush). IN (all optional):
elevationFroma terrain field (re-carves the drainage from the FORMING land as it erodes, everyresolveEveryDays),rechargeFroma moisture/liquid field (hydro),weatherfor temp-driven drawdown. Standalone-capable (config elevation/recharge/temperature fallbacks). FactorymakeWatershed(config), deterministic (no rng). DISTINCT from terrain (erosion/land-formation), ocean (coastal river discharge), hydro (the conserved phase cycle) -- this is groundwater + the readable drainage map. - Origin: the core of the gallery piece The Water Country (art/the-water-country.html), folded back in as a reusable plank per the shared-framework-plank north star.
30. STIGMERGY / SELF-ORGANIZED TRAILS (life / ecological) -- "the path no ant planned" -- DONE (stigmergy.js, 7 assertions)
- The ONTOLOGY's INFORMATION primitive as a DEPOSITED-AND-DECAYING spatial FIELD -- a shape Natura had nowhere (mind/society carry belief + mood, not a spatial trail). A colony's ants lay a HOME scent as they search and a FOOD scent on the way back; searchers climb the food gradient toward food, laden ants path-integrate home (laying the food trail); unused scent EVAPORATES. Out of thousands of local moves a foraging highway self-organizes, and it FADES when the food runs out.
- Algorithm: two scent grids per colony; per-tick per-ant sense-ahead/left/right + turn up-gradient (or home)
- wander + move + deposit; grid evaporate (*decay) + slight diffuse; pickup at food, drop at nest.
- OUT: homeTrail, foodTrail, ants, collected, foodRemaining, trailStrength (nest->food corridor),
trailConcentration (peak/mean -- the emergence measure), atFood; events (foodExhausted). COUPLES: ecosystem
(the ants as agents), sensing (a trail IS a ground scent cue), niche (deposited structure that decays).
Deterministic (seeded), standalone-capable. Factory
makeStigmergy(config). - Origin: the verified core of the gallery piece The Crumb Wars (multi-colony war), folded down to the one-colony mechanism per the September fold-in audit.
31. SYNCHRONIZATION (physical/life) -- "a rhythm no one called" (the Kuramoto model) -- DONE (sync.js, 10 assertions)
- A population of phase oscillators, each with its OWN natural tempo, each nudged toward the phases it can hear; as the coupling K crosses a critical threshold the crowd spontaneously LOCKS into one beat -- fireflies, a clapping crowd, metronomes on a board, pacemaker cells. The ontology had no synchronization primitive.
- Algorithm: global mean-field
dtheta = (omega + K*R*sin(psi - theta - alpha))*dt(R,psi = the order parameter / mean phase), OR aringmode where each hears only its NB neighbours; a Sakaguchi phase-lag alpha near pi/2 on a ring yields CHIMERA states (a synchronized domain beside an incoherent one). - OUT: phase, naturalFreq, R (global coherence 0..1 -- the readout), meanPhase, localR (per-oscillator),
lockedFraction; events locked / incoherent / chimera. COUPLES: ecosystem (a chorus flashing/calling as one
is a behaviour verb), society (one-rhythm consensus). Deterministic (seeded), standalone-capable.
makeSync(config). Emergence test: below Kc R stays ~0, above it R->1; identical tempos lock at faint K, a wide freq spread resists; ring+lag -> chimera. - Origin: the verified core of the August synchrony pieces (The Beat Nobody Called, Some Keep Time), the biggest gap found by the August fold-in audit.
32. THE COMMONS (society / resource) -- "the tragedy, or the governance that saves it" -- DONE (commons.js, 6 assertions)
- A renewable common-pool resource (fishery / pasture / aquifer): the stock grows logistically but crashes through a DEPENSATION floor if drawn too low; harvesters expand effort while it pays, so OPEN ACCESS draws the stock past the floor and collapses -- the tragedy of the commons. Add Ostrom's governance (a quota + monitoring + graduated sanctions building COMPLIANCE and curbing effort) and the same commons settles onto a sustained yield.
- Algorithm: mean-field ODEs -- stock
S += (r*S*(1-S)*hill - mort*S*(1-hill) - harvest)*dt(hill = a recruitment choke below the floor); effort chases profitq*S - cost(minus a sanction deterrent when managed); compliance approachesmonitor*sanction/(...)(stable exponential form -- dt-robust). - OUT: stock, effort, compliance, harvest/yield, collapsed; events collapse / sustained. DISTINCT from economy.js (price) + speculation.js (bubbles) -- this is the shared-resource feedback. COUPLES: ecosystem (the stock as a real population), economy (harvest as production). Deterministic mean-field (no rng). Emergence tests: open -> collapse; strong governance -> sustained; a sanction THRESHOLD (weak still collapses).
- Origin: the gallery piece Held in Common, from the September fold-in audit.
33. OPTICS / CAUSTICS (physical / optical) -- "the net of light on the seafloor" -- DONE (caustics.js, 6 assertions)
- The first LIGHT-PROPAGATION system (heat + light were fields, but refraction was never simulated). Parallel sunlight strikes a wavy water surface; each point's tilt REFRACTS the ray (Snell, air->water); the bent rays travel down and LAND on the floor, converging into bright fold-lines where the surface is concave -- caustics. The light is CONSERVED (every ray lands) but REDISTRIBUTED: a caustic is gathered light, not more light.
- Algorithm: surface normal from the height gradient -> vector Snell refraction (eta = 1/1.333) -> project
each ray to the floor at
depth-> energy-conserving bilinear splat onto a WRAPPED floor grid. - OUT: caustic (floor brightness), surface, peakToMean (~1 flat, high = sharp caustics), totalLight
(conserved); events caustic. COUPLES: ocean / hydro / watershed (drive
surfaceFromfrom a live water-surface height field). Deterministic.makeCaustics(config). Emergence: flat -> even floor; wavy -> peak/mean >> 1; stronger waves -> sharper; the net shifts as the waves travel. - Origin: the August light pieces (Where the Light Gathers, The Net of Light, The Light in Your Cup) + the September refraction candidate -- the optical-propagation gap both audits flagged.
34. STRUCTURE (artifice / material, EXISTA) -- "load, stability, and failure" -- DONE (structure.js, 9 assertions)
- Real FORCE resolved through a structure (artifact.js only wore things out statistically). Load-bearing members
SHARE a weight; each has an Euler buckling limit
Pcrit ~ stiffness/(kL)^2; loaded past it a member BOWS (deflection ~ sqrt(P/Pcrit - 1) -- the pitchfork bifurcation of stability), and past a failure margin it gives way and sheds its load onto the rest, which can push THEM over -- a cascade to collapse. Bracing (shorter kL) raises Pcrit and buys capacity. - OUT: per-member load/deflect/failed; standing, failedFraction, maxDeflect, carried, collapsed; events
buckling / collapse. COUPLES: artifact (a fatigued member's Pcrit falls), gravity/load scenario.
Deterministic mean-field.
makeStructure(config). Emergence: straight below Pcrit, bows above (sqrt); Pcrit ~ 1/L^2; bracing ~4x; a bundle cascades to collapse past its capacity; a load ramp fails it progressively. - Origin: THREE September pieces converge -- The Load It Cannot Bear (the buckling bifurcation), As High As It Holds (truss + cascade), Hold Fast (joints) -- flagged by the September audit.
35. TRAFFIC (society / flow) -- "no one hit the brakes" (the Intelligent Driver Model) -- DONE (traffic.js, 6 assertions)
- The microscopic car-following layer city.js (#18, macroscopic volume-delay curve) lacked. Each driver on a ring accelerates toward a desired speed and brakes on the gap + closing-rate to the leader (IDM), purely local. Below a critical density the road runs free; above it a single brake-tap NUCLEATES a PHANTOM JAM -- a stop-and-go wave travelling backward through forward-moving cars, collision-free, with no cause.
- OUT: positions, speeds, meanSpeed, flow (veh/hr), density, jamCount, minGap; events jam. COUPLES: city
(drive congestion from real vehicle dynamics rather than the static BPR curve). Deterministic (seeded), sub-steps
IDM at ~0.3 s.
makeTraffic(config). Emergence: free flow at low density; congestion + jams at high; the FUNDAMENTAL DIAGRAM (flow peaks at intermediate density then falls); collision-free at every density. - Origin: No One Hit the Brakes (+ The Shortcut / Keep the Cities Fed), from the August audit.
36. VORTEX-BLOB FLUID (physical / micro) -- "it carries itself" (a Lagrangian fluid substrate) -- DONE (vortex.js, 5 assertions)
- The smoke-ring / eddy / fog substrate #12 named but never built. The flow is carried by VORTEX PARTICLES (each a
circulation) rather than a grid; each whirls the fluid around it (smoothed 2D Biot-Savart) so they advect EACH
OTHER. Emergent: a counter-rotating PAIR self-propels straight (a smoke-ring cross-section), like-signed vortices
ORBIT one another, circulation is conserved. Gives a cheap
sampleAt(x,y)VELOCITY FIELD other systems drift smoke / fog / seeds / scent through. - OUT: vortices (x,y,gamma), circulation (invariant), centroid, sampleAt. Deterministic.
makeVortex(config). Emergence: pair self-propulsion, mutual orbit at fixed centroid + constant separation, conserved circulation, purely-tangential induced flow. - Origin: It Carries Itself (+ the fog/eddy/flow vein); the carry-over #12 planned, from the August audit.
37. CRYSTALLIZATION (physical / material) -- "how slowly it cooled" (nucleation + grain growth) -- DONE (crystal.js, 5 assertions)
- The one law behind a geode, a cast metal, and a frozen pane: HOW FAST IT COOLED SETS THE GRAIN. As the melt cools, nuclei appear (faster cooling -> more, sooner); each seeds a GRAIN that grows outward until it meets its neighbours, tiling the whole into a mosaic. Fast cool -> a swarm of tiny grains (fine, hard); slow cool -> a few big lazy crystals (the geode's cathedral). Grain size ~ 1/nucleation-density (Hall-Petch). DISTINCT from frost.js (DLA dendrites, a different growth law).
- OUT: grain (per-cell id), orient (per-grain colour), grainCount, meanGrainSize, solidFraction; events
solidified. Deterministic (seeded).
makeCrystal(config). Emergence: fully tiles the melt; fast cooling -> many small grains, slow -> few large -- the cooling-rate <-> grain-size law verified. - Origin: Geode / How Slowly It Cooled / The Grain in the Steel, the August carry-over (Aug-8 audit #5).
38. ATMOSPHERIC REFRACTION / MIRAGE (physical / optical) -- "the ship that became a castle" -- DONE (refraction.js, 5 assertions)
- The atmospheric half of optics (caustics.js #33 is the surface half). Light bends through a near-surface air-temperature gradient: hot ground (a low-density, low-n layer) curves rays UP -> the INFERIOR mirage (the desert road's "water", an inverted image below); a cold surface under warm air (an INVERSION, high-n layer) curves rays DOWN -> distant things LOOM and stack into a SUPERIOR mirage / Fata Morgana. The gradient's sign sets the mirage; its strength sets the displacement.
- OUT: bend (+ looming / - inferior), anomaly, mirageType (none/inferior/looming/fata-morgana), inverted,
apparent(trueElev)(the shifted apparent elevation). COUPLES: weather (the temperatures). Deterministic.makeRefraction(config). Emergence: even air bends nothing; hot ground -> inferior (sinks + inverts); inversion -> looming/Fata Morgana (raised); stronger anomaly/longer view -> more bend; hot/cold ground bend oppositely. - Origin: Castle in the Air (the ship-to-castle looming), the September optics candidate's atmospheric sibling.
39. GRANULAR MEDIA (physical / material) -- "the narrow of the glass" (sand that flows but isn't a fluid) -- DONE (granular.js, 5 assertions)
- A cellular pile under gravity: grains fall, and when blocked SLIDE diagonally, so a poured heap settles to its ANGLE OF REPOSE (a peak, not a fluid's level). Drain it through an orifice and the discharge is CONSTANT, independent of the head above (Beverloo -- why an hourglass keeps time), and a too-narrow orifice ARCHES and JAMS. (The Brazil-nut segregation under shaking is the sibling mode, noted for later.)
- OUT: grid (packing), count, exited, discharge (rate), heapWidth/heapHeight; events jam. Deterministic
(seeded tie-break).
makeGranular(config). Emergence: constant bulk discharge as the head drops; a wider orifice flows faster; a 1-cell orifice jams; a poured heap peaks at its repose angle. - Origin: The Narrow of the Glass (hourglass) / The Big One Rises (Brazil-nut), the August audit's lower- confidence candidate -- built for completeness (the operator: get every applicable system folded in).
40. WINTERING (life / physiology) -- "what the hill keeps" (how a life gets through the lean season) -- DONE (wintering.js, 45 assertions)
- ONE physiology under every strategy: Kleiber basal metabolism (mammal 70, passerine 129 kcal/day/kg^0.75), coat conductance 0.2 M^0.5 W/K cut by the den/burrow/nest/cavity insulation, body temperature stepped EXACTLY (exponential relaxation, so a 10 g bird and a 130 kg bear are both stable at hourly steps), Q10-suppressed torpor, a defended floor, arousal thermogenesis, an arousal DEBT that fills faster when warm (so bouts lengthen into midwinter unprompted), heart and breath from allometric rest rates, fat/lean ledgers with a starvation limit.
- Five strategies: FAT (shallow = bear: a Tb band, delayed implantation keyed to autumn fat, lactation in the den, protein sparing; deep = woodchuck / arctic ground squirrel / bat: near-ambient Tb, periodic arousals that cost 70-85% of the winter), LARDER (chipmunk eats at each arousal; red squirrel stays awake on a midden), SCATTER (grey squirrel: thousands of caches, memory x smell x snow, pilfering, the forgotten ones sprout -- even a dead squirrel's), DAILY (chickadee: a one-night fat store and a regulated nightly dip scaled to the cold), FREEZE (wood frog: supercool, latent-heat plateau, glucose antifreeze, equilibrium ice fraction, a lethal limit).
- The place: seasonal + diurnal air, day length from latitude, optional WEATHER (AR(1) cold snaps and thaws, storms that lay the snowpack down in layers), degree-day melt, snow as the burrows' blanket, burrow temperatures lagging the surface by z^2/kappa, the leaf litter as its own insulating layer, seasonal food kinds with quality, and the MAST crop as one master knob. Places: northernHardwood, katmai, arcticTundra.
- OUT: animals (state, where, Tb, hr, rr, fat, lean, larder, caches with fates, cubs, ice, glucose), snow +
layers, tBurrow, Ta, food; events entered / arousal / emerged / implanted / born / froze / thawed / calling /
sprouted / died. Emergence: see
wintering-test.js(the snow-blanket effect on the frog holds in 16/16 winters). - Origin: operator, Fat Bear Week 2026 ("hibernating bears deserves a natura function... the broader winter storage that squirrels and rodents do... it makes seasons more than just colours"). Vignette: What the Hill Keeps.
Part III -- cross-cutting
- Determinism & testing: every system seeded, node-tested with real assertions (determinism, finiteness, bounded, and one genuine EMERGENCE test -- weather has the rain-shadow; ecosystem will have the predator-prey oscillation; fire the spread; etc.). The emergence test is the proof the model is real, not a texture.
- The emergence test is usually a BIFURCATION / THRESHOLD, verified by a sweep (banked from the Sept/Aug gallery-audit fold-ins): the honest proof a new system is real is a phase transition, not a pretty field. structure's pitchfork (straight->bowed at Pcrit), sync's Kuramoto ORDER PARAMETER R rising through Kc (and the Sakaguchi lag -> a chimera), commons' collapse-vs-sustained sanction threshold, traffic's fundamental diagram (flow peaks then falls), crystal's cooling-rate<->grain-size law, caustics' peak/mean. Assert the system SITS on one side of the threshold below the critical parameter and FLIPS above it.
- Probe-sweep the model BEFORE building the viz (traffic/IDM did this in a scratchpad first): tune the governing constants against the intended emergence in a headless node run, so the art-piece renderer wraps a model already known-correct. Instrument, don't guess (every finicky calibration this session -- watershed's table balance, caustics' slope scale, granular's Beverloo window -- was found by dumping numbers, not theory).
- The emergence must survive a change of SCALE, not just one hand-tuned grid (
scale-probe.js, banked 2026-09-13 answering "sufficient depth AND scales?"): a model that only bifurcates at the one grid/agent-count/dt you tuned is a fragile toy. Re-run each signature emergence at a SMALL and a LARGE scale and confirm it holds at both -- Kuramoto R is population-invariant (n=50 and n=400 both lock), the traffic fundamental diagram is set by DENSITY not absolute road length (20 veh/km free, 70 jams, on 500m and 1500m alike), the buckling bow is per-MEMBER (maxDeflect identical at N=8 and N=40 for equal share), watershed rivers/springs form at N=40 and N=90, sync's locked R agrees under a 3x-coarser dt. TRAP found writing the probe: a scale check false-GREENS if you pick a parameter OUTSIDE the interesting regime -- a subcritical load "passes" the no-failure side trivially, a collapsed truss reports maxDeflect=0 (nothing left standing to bow). Say aloud what the metric would read while the model is actually broken; put the check squarely IN the bifurcation window (Pcrit < share < Pcrit*failMargin for a bow), and use a true peak-to-mean (maxAcc/meanAcc), never peak/cell-count. - Verify by number AND by looking: each system gets a small viz (like weather-world.html) -- and the motion-eye for anything animated (a frozen sim passes every static check).
- Build order (bottom-up, per DESIGN.md): CORE done, WEATHER done. NEXT: TERRAIN (wrap) to close the weather<->land loop, then TIME/SEASONS, then VEGETATION (the real greening), then LIFE-CYCLE + ECOSYSTEM, then BIOME dynamics + FIRE, then scale up to TECTONICS + ORBITS/STELLAR, then MICRO. Each deep, tested, composable; the world grows one real system at a time.
- Open WIP: the weather viz's cloud saturation (Part II.1) -- return to it after this doc is banked.