MB · The Lab

EXP. 004 · Criticality

k = 0.97

drag sideways sets k  ·  tap strikes a spark

population 0
generation 0

The Lab — EXP. 004 · growth as physics

The weather at k = 1.

Each ember, as it dies, leaves k children on average. Drag sideways (or press ← →) to set k; tap to strike a spark. Below one, every cascade dies. Above one, none can be held. There is no middle to stand on.

EXP. 004 — Notes

Criticality

This is a branching process: each ember, dying, leaves a random number of children whose average is k. The mathematics is absolute — at k below one, extinction is certain, every time; above one, the cascade escapes with positive probability and never stops. Near the edge the doomed runs get enormous before they die, which is why the boundary is so easy to misread from inside. Epidemiologists write the same number as R₀.

Compute it for a referral flow: k = invites sent per new user × conversion per invite. Five invites at 15% is k = 0.75 — a thousand-user launch fades in a few generations (1,000 → 750 → 563 → …) no matter how loud the start. Six invites at 18% is k = 1.08, and the same launch compounds.

Two lessons. Small multiplicative gains on either factor can cross the boundary — that's why the knife edge rewards testing the invite flow over re-funding the launch. And a big launch with no loop isn't slow growth, it's a seed with a fate: k decides, always.

There is no thermostat here, only weather. Every fire is certain it's the exception; the number decides which ones were right. Stand at k = 1 and feel how thin the line is between a legend and a cold tray.

  1. Mechanism under test: a Galton–Watson branching process rendered literally. Each ember lives a fraction of a second, then leaves Poisson(k) children — seeded mulberry32, fixed 1/60 s timestep — with a small scatter of position and velocity, drifting down and out like sparks off a strike. The readouts are unfaked: population and generation come straight off the particle array.
  2. The knife edge: k = 1 is not a place, it is a boundary of measure zero. For every k < 1 extinction is certain; for every k > 1 the population runs away with positive probability, and near the edge the doomed cascades die in heavy-tailed agonies — enormous, and mortal anyway. Growth has weather, not a thermostat: there is nothing to hold, only two ways to fall.
  3. Extinction is the settle state: when the last ember goes out, the loop stops — zero idle frames, because the exhibit is genuinely over. The supercritical side ends the only way it can: at the 20,000-ember lip of the tray, frozen mid-blaze. Both endings are the physics, not a screensaver.
  4. The dial is the exhibit: one number, dragged with a finger through a phase transition. Everything the readout says — ember when k is above one, dim when below — is a forecast the cascade then verifies.
  5. What might graduate: the k-dial grammar (a single continuous control dragged across a qualitative boundary), and honest extinction-as-settle — letting a page's motion end because the process it depicts has ended.

PHYSICS — raw WebGL2 points + line trails, particle state in JS typed arrays (no float textures), no libraries, single file · Poisson offspring from seeded mulberry32 at fixed 1/60 dt — the same seed, taps, and k history replay the same cascade · rAF runs only while embers are alive; extinction or the 20,000 cap stops it cold, visibility- and viewport-gated · reduced motion = a real still of the opening cascade at its peak · no-GL = designed flat edition · zero console errors · native scrollbar and skip link intact.

← The Lab  ·  ← morganbrown.co