The hourglass in folk-cone-3d.ts opens forward from now and places each event at a hash of its id, modulo 360°. That azimuth is noise — it clumps, it leaves holes, and it means nothing. The Padovan recurrence supplies the angle that should be there: 139.6719° per tick, falling straight out of the same algebra that makes the cone open at all.
Min gap is the tightest angular collision between any two events. Under a hash it collapses to zero as soon as you have a few dozen events — two events sit exactly on top of each other while a 30° wedge of the cone stays empty. Under ρ the cone stays legible.
An earlier version of this page claimed ρ's angle holds a bounded gap "at every count, forever". That is false. Push the slider past 183 and watch the min gap collapse to 0.04°: 183 × 139.6719° lands a hair short of a whole turn, so event 184 seats on top of event 1. The culprit is ρ's continued fraction, [0; 2,1,1,2,1,2…] — those 2s make it too easy to approximate with a fraction. The golden angle's is all 1s, the most irrational number there is, and the three-gap theorem bounds its worst gap at φ² ≈ 2.618 for every count, forever. Phyllotaxis converges on it for precisely this reason. So the renderers seat by the golden angle and let ρ govern the cone's geometry — how fast it opens — which is where ρ is genuinely derived rather than merely chosen. Two angles, two jobs. The field guide covers the rest — radiant.jeffemmett.com →
Padovan is P(n) = P(n−2) + P(n−3) — the same shape as Fibonacci but reaching back three steps instead of two. That one extra step is the whole story. Its characteristic polynomial is x³ = x + 1, a cubic, and a real cubic must split into one real root and one complex conjugate pair. Those three roots are the three eigenvalues of the tick operator:
So the Padovan tick operator is a cone, structurally: a single expanding direction with a two-dimensional plane spiralling around it. You did not have to impose the cone geometry — it is the eigenstructure. And the contraction on the space plane is exactly the square root of the reciprocal of the expansion on the time axis, so the swept volume is exactly conserved.
φ's conjugate is real (−1/φ = −0.618). A real subdominant eigenvalue flips sign; it does not rotate. A Fibonacci cone has no azimuth to give you — which is precisely why the current code had to fall back to a hash. You need a complex subdominant root to get an angle, you need degree ≥ 3 to get one over the integers, and among all such systems ρ is the smallest. Time spirals if and only if the subdominant eigenvalue of your causal delay operator is complex.
Let S be the set of causal latencies your substrate permits — how many ticks may elapse between an event and a legal response to it. The number of distinct causal histories of length n is then the number of ways to compose n out of parts drawn from S, and that count obeys a(n) = Σ a(n−s). Its growth rate is the dominant root; the cone opens at that rate. This is verified exactly, not by analogy:
A refractory floor of 2 ticks (receive, then process — you cannot legally answer instantly) and a staleness ceiling of 3 ticks (answer by then or the frontier moves on without you) is not an arbitrary pair. It is the shape your HLC + peer-frontier event-time model already has. Choose those two numbers and the plastic number is handed to you. Change them and the whole geometry moves — pick a set and watch:
| latency set S | cone constant λ | capacity | spiral? | known as |
|---|
This is a real, tunable axis — janus:axis:cone currently featurises a cone's centroid. It has no slot for the cone's own opening rate. That rate is a property of the space's temporal morphology, and it is one number.
Perrin runs the same recurrence from different seeds (3, 0, 2). Because ρ is a Pisot number, its powers chase the integers — and the gap between ρⁿ and the integer is exactly the spiral term. Not approximately. To floating-point precision:
| n | Perrin (integer) | ρⁿ — cone radius | spiral term | reconstructed | error |
|---|
A substrate needs to be aperiodic — no resonance, no aliasing, no two events landing on the same seat — and simultaneously quantised, because holons and ticks are discrete and must be checkpointable. Those pull in opposite directions. A Pisot number is the resolution: irrational enough never to repeat, yet its powers keep snapping back onto the integer lattice. ρ is the smallest number with that property (Siegel, 1944), which makes it the least-growth, least-action option in the entire family.
modules/rtime/lib/chunk.ts ships DEFAULT_CHUNKS = [1,2,3,5,8,13,21]. Fibonacci is right for estimation — the whole point of story points is that the gaps are coarse enough to stop people bikeshedding 5 vs. 6. But it is wrong for a horizon, because each bucket is 1.618× the last: by the time you are ten years out, one bucket swallows 4.4 years. Padovan steps by 1.3247×, and van der Laan's claim was that this ratio sits right at the threshold where a human can still perceive two sizes as different — consecutive buckets are distinguishable, but only just. It is the gentlest self-similar coarsening there is.
| you are looking… | Fibonacci bucket | Padovan bucket | verdict |
|---|---|---|---|
| a month out | 13 d | 9 d | 1.44× finer |
| a year out | 144 d | 114 d | 1.26× finer |
| ten years out | 1597 d | 1081 d | 1.48× finer — both swallow years |
| cells to reach a decade | 16 | 23 | the real win: 50% more usable steps |
An earlier version of this page put the Padovan cell at ten years at 465 days against Fibonacci's 1597,
and called Fibonacci "unusable". That was wrong — an artifact of a ladder that never actually
reached ten years and silently reused its last cell. The real figure is 1081 days. Both ladders swallow
years that far out: Padovan swallows 3.0 of them, Fibonacci 4.4.
The argument that does survive is the last row. Reaching a decade takes 23 Padovan cells against
16 Fibonacci — 50% more usable gradations across the same span. And ρ is provably the floor:
the smallest growth rate any self-similar integer recurrence can have. You cannot coarsen more gently than this
and stay self-similar. That case never needed the inflated number.
This is the same argument as LOD. A semantic-zoom ladder that steps by 2× throws away detail in jumps the eye registers as a jolt; a ladder that steps by ρ is the finest self-similar gradation that still is a gradation. And because ρ is Pisot, the scale factors sit near integers — so tile sizes snap to the pixel grid instead of drifting off it.
| site | today | with ρ |
|---|---|---|
| folk-cone-3d.ts:311 folk-hourglass-3d.ts:355 |
azimuth = hash(id) % 360 — clumps, holes, meaningless | azimuth = n × 139.6719° where n is causal order. Low-discrepancy, deterministic, and the angle now encodes position in the causal sequence. |
| shared/rcal/cone.ts coneAt() |
growthFn: 'linear' | 'sqrt' | 'log' — three hand-picked curves | add 'plastic': σ grows as ρ^(dt/scale). Derived from the substrate's latency set rather than chosen by taste. |
| janus/axes/cone-axis.ts | 5-d: lat, lng, doy-cos, doy-sin, confidence | +1 dim: the cone constant λ. Two planners with the same centroid but different opening rates are genuinely different intents, and today they featurise identically. |
| rtime/lib/chunk.ts | Fibonacci chunks (correct for estimation) | keep for chunks; use Padovan for the horizon ladder. Different jobs, different ratios. |
| janus/temporal-lod.ts | 4 bands: far / mid / near / full | bands at ρⁿ instead of 2ⁿ — finest gradation that remains perceptible; near-integer scales snap to grid. |
| stigmergic routing · pheromone decay | tunable decay constant | 1/ρ = 0.7549 per tick is the decay dual to the cone's growth — the trail forgets exactly as fast as the cone opens. |
The first row is the one to do. It is a pure win, it touches two lines, and it needs no new concept — the events already have a causal order, and the renderer is already throwing it away.