Chapter 2 · Section 13
Instruments of the Field: the Capacity Bar, the Step-Back History, the Nova Record
The BPT law
The capacity bar reports two laws, one for each half of a run. During the fill it reports the Bifold Containment Law of BPT Part 3.6 (Part 2.4): "The Pulsecore holds while the Bifold can record what it contains; when the data within fills the skin's holographic capacity, N ≥ χ∂, the bubble bursts, and that is the Data Nova," with the Null Nova first at N₁ = χ∂/2, "when the data and its null fill the boundary together." During the life it reports the Rupture Rule of BPT Part 1.6 (Part 2.3), n↯ = 2^L: "Once a universe has completed as many of its own pulses as the UniSphere holds capacity at its level, Accumulated Tension exceeds substrate capacity and the universe ruptures: its null wells collapse into child universes." Between the two, from the Data Nova to the Physical Nova, the data's count is "beyond time" (Part 3.6), and the bar has nothing to report. The history and the record are tools; BPT does not state them. They serve the theory's Information-Driven Perpetuation (Part 1.11), in which every bifurcation leaves "an Informational Trace (G) that becomes part of the substrate's permanent architecture": the game keeps a trace of each run, back a few steps on the page and every nova on the server.
The established physics
None: a game method. generateNovaHash() uses the 31-multiplier string hash familiar from Java's String.hashCode, a standard technique.
The game's math
The capacity HUD and the rupture bar. updateHud() app.js:2120:
- used = (universePulses() − physicalTempo())/2^Lm in the universe (0 before the Physical Nova), and accumulatedEnergy/novaCapacity() in the Pulsecore (app.js:2125). The HUD shows used as a percentage, with two decimals below 10 % and one above (app.js:2126). The rupture bar's width is min(100, 100·used) % (app.js:2136).
- The Pulsecore line reads "data within N of the skin's χ bits" (app.js:2124). In the universe it reads "the data's count n / physicalTempo · beyond time" before the Physical Nova and "n − physicalTempo / 2^L since the big bang" after.
hudRupturenames the epoch: "pre-pulse", "processing", "toward the final well", "final well formed", "returning to the Source", "returned to the Source".
So the bar runs four times. It fills to 100 % at the Null Nova (capacity χ∂/2). It drops to 50 %, because the same data is now measured against χ∂, and fills again to the Data Nova. It drops to 0 and stays there through the data's count. Then it fills from the Physical Nova to the final well. The second drop is the theory's (the Data Nova is twice the Null Nova's capacity).
The step-back history. Each forward step pushes copies of grid, colorGrid and pulserGrid (app.js:4509) and keeps histCap = max(2, min(MAX_HISTORY, floor(4×10⁶/(rows·cols)))) entries (app.js:4510), with MAX_HISTORY = 200 (app.js:3439). The comment records the reason: 200 entries at 1,024×1,024 took a phone page down (2026-10-26). A desktop field of 256×256 keeps floor(4×10⁶/65,536) = 61 steps; a phone's 64×64 keeps 200; a 1,024 field would keep 3. Stepping back (reverse, app.js:4503–4505) restores those three arrays and lowers pulseCounter by one.
The nova record. generateNovaHash() app.js:3684 hashes JSON.stringify(grid): h ← 31h + charCode (as (h << 5) − h), kept to 32 bits, then |h| in hex. sendNovaToServer() app.js:3695 writes nova_hash = first 8 hex digits + "-" + row in base 36 + "-" + column in base 36 (app.js:3734). It is recomputed, stringify and all, for each nova center. The record also carries capacity = novaCapacity() at the nova; in the universe that is rows·cols·2^novaCount (overflowCapacity() engine.js:120).
The residue and other legacy constants. MAX_RESIDUE = 10 app.js:33 ("maximum value used when normalizing residue for color phase") and PULSE_UNIT = 2000 app.js:31 are defined and never read. residueGrid (app.js:3425) is created and resized but never written. harmonicCount = 8 app.js:35 is read only by getResonanceLevel() app.js:3857, which is never called. The scene's own "residue" (scene3d.js:1316–1336) is a drawing of the hole's haze and is unrelated.
In the game
The instruments sit in the readout at the top of the page (index.php:64–90), whose "Details" button shows or hides the full readout. "Capacity:" (index.php:72, tooltip "Share of the UniSphere's capacity at this level") shows the share as a percentage, and the thin bar under the readout (index.php:90, tooltip "Progress to rupture") fills with it. The Epoch line beside it reads "pre-pulse" before Start, "processing" through the Pulsecore, "toward the final well" through the life, and "final well formed," "returning to the Source" and "returned to the Source" at the end (app.js:2135). On a desktop the player sees the bar fill in about 14 seconds, fall back to half, fill again in about 6, sit empty for the data's count, and then fill over the life to the final well.
Reverse (index.php:130) switches the run backward; its label becomes "Forward" (app.js:5730), and each step then takes one entry off the history and lowers the Pulse counter. The Directions say "Step back. Reverse walks back through the previous pulses" (index.php:330). On a desktop field the player can walk back 61 flips.
Every nova is sent to the server with its hash, its place and the field's figures. The "Data" link opens the Nova Data page (index.php:270), and the "Every nova, recorded" panel says "Each nova is saved with the universe's figures at that moment, and every crystal and string under the universe it formed in" (index.php:389–396). The run summary's "Open the record" links to the same page (index.php:428).
The scale model
The bar is exact in shares: a share of the drawn capacity or life is the same share of the true one. The history and the record are of the drawn field.
Where the game and the theory differ
- The bar is labeled "Progress to rupture" (index.php:90) through the whole run, but during the Pulsecore it shows the fill toward each nova, against two different capacities. The page does not say why the bar falls at the Null Nova, or why it sits empty from the Data Nova to the Physical Nova.
- Reverse restores the lit, color and pulser arrays only. It does not restore the exposure, the fold marks, the flow's offsets or the Pulsecore's gas, so a reversed field is not the field it was; the Directions' "walks back through the previous pulses" holds for what is drawn, not for the whole state.
- The nova hash reads only the lit grid, not the pulsers or colors, so two fields with the same lit pattern hash alike.
- The recorded
capacityin the universe, rows·cols·2^novaCount, is a leftover from v5 that no rule uses; the theory's capacity there is the Rupture Rule's 2^L.
Fixed numbers
| Number | Where | What it is | Kind |
|---|---|---|---|
| 100, 0.1, 2, 1 | app.js:2126, 2136 | percent, the decimals switch and digits | DISPLAY |
| 0 in max(0, n − physicalTempo) | app.js:2125 | the bar is empty before the Physical Nova | DISPLAY |
| 200 (MAX_HISTORY) | app.js:3439 | most steps kept for stepping back | RECORD |
| 4×10⁶ | app.js:4510 | the history's cell budget | RECORD |
| 2 (histCap floor) | app.js:4510 | fewest steps kept | RECORD |
| 31 ((h << 5) − h), 32 bits | app.js:3688–3689 | the nova hash | RECORD |
| 8 (slice(0, 8)), 36 (base) | app.js:3734 | the nova id's form | RECORD |
| 2^novaCount (overflowCapacity·2^n) | app.js:4298 | the universe's recorded nova capacity | RECORD |
| 10 (MAX_RESIDUE) | app.js:33 | unused | RECORD (dead constant) |
| 2000 (PULSE_UNIT) | app.js:31 | unused | RECORD (dead constant) |
| 8 (harmonicCount) | app.js:35 | read only by an uncalled function | RECORD (dead constant) |