Chapter 1 · Section 5
Spin and Compression at Genesis
The BPT law
BPT Part 6.9 (Spin Inheritance and the Progenitor Axis) closes the placeholders of Part 6.8. The Inherited Spin Parameter is
a_f = | ℓ̃·η·n̂_L + a₁(M₁/M_f)²·n̂₁ + a₂(M₂/M_f)²·n̂₂ |, η = M₁M₂/M_f², M_f = M₁ + M₂
"capped at the Kerr bound". The orbital coefficient is fixed by general relativity: "For an equal-mass non-spinning merger η = ¼ and a₁ = a₂ = 0, and general relativity gives a remnant spin of 0.686, so ℓ̃ = 0.686/0.25 = 2.744." "Most of what our Universe inherited came from the orbit, not from the progenitors' own rotation." Spin Injection and Alignment in Closed Form gives s↻ × h⇉ = 1 − κ·a_f², and so the Origin Compression Factor is C(⇌) = g⚛(M₁ + M₂) × (1 − κ·a_f²), "taking g⚛ ≈ 1". The Compression Constant of Part 6.8 runs the compressions down a lineage, f^n = f₀^n × ∏Cᵢ. Part 6.8's Null Well Collision Channel Classification lists the channels, and Part 6.9 calibrates each with a predicted spin: direct gas-cloud collapse 0.00, NS–NS 0.686, NS–BH 0.867, Kerr–Schwarzschild 0.911, Kerr–Kerr and Extreme Kerr–Kerr 0.998. BPT Part 3.10 adds Spinless Early Lineage: "Spin is born of orbit, so no universe below level 3 carries spin: a_f = 0, ⟪C⟫ = 1, f = f₀. The first spin a lineage acquires is the orbital value a_f ≈ 0.686."
The established physics
- The orbital-angular-momentum term ℓ̃·η is the standard form for a binary black-hole remnant's spin. BPT takes 0.686 for an equal-mass, non-spinning merger, the value numerical relativity gives.
- The Kerr bound of 0.998 is Thorne 1974. Kerr 1963 (in BPT sources.md) gives the spinning-hole metric.
The game's math
inheritedSpin({a1, a2, q, thetaDeg}) universe.js:106 sets M₁ = 1 and M₂ = max(0, q). It puts the orbital axis along z and the two spins at ±θ/2 in one plane:
z = ℓ̃·η + (s₁ + s₂)·cos(θ/2), x = (s₁ − s₂)·sin(θ/2), sᵢ = aᵢ(Mᵢ/M_f)²
a_f = min(0.998, √(x² + z²))
At q = 0 there is no orbital term (η = 0) and M_f = 1, so a lone collapse keeps a₁. Then compressionFactor() universe.js:133 gives C = 1 − κ·a_f², and describeUniverse() sets a_f = 0 when L < FIRST_FORK_LEVEL = 3 (universe.js:283). recomputeUniverse() also zeroes a1, a2, θ and the anisotropy below level 3, and q at level 0 (app.js:2031). It hides the spin rows below level 3 (app.js:2037). A generation-1 child at level 30 can carry spin only through its parent's merger signature, and that is how the game passes it (Part 1.12).
The panel's CHANNELS universe.js:199 set a1, a2, q and θ through applyChannel(). Their range and a_f fields are the book's reference values and are not read by the game.
spinAlignmentFactor() :121, massCurvatureTerm() :130 (returns 1), compressionFloor() :138 and heritage() :143 are each one line of the law. compressionFloor() and heritage() are used only by the tests.
In the game
Spin is a thing the player sets and then watches. In the Universe & Genesis section (index.php:147–179) the "Collision channel" select ("Null Well Collision Channel Classification, chapter 6 Part 6.8") offers Kerr – Kerr (our origin), Extreme Kerr – Kerr, Kerr – Schwarzschild, Neutron star – black hole, Neutron star – neutron star, Direct gas-cloud collapse and Custom. Picking one moves the sliders "Spin a₁" and "Spin a₂" (0 to 0.998, "Thorne limit"), the "Mass ratio M₂/M₁" ("0 is a lone collapse with no orbital term; 1 is an equal merger") and "Spin misalignment θ_merge" ("low misalignment for our origin (≲ 15°)"). Two more sliders place the result: "Genesis axis on screen" and "Axis tilt". Below level 3 the whole block is hidden (app.js:2037), so a player at levels 0 to 2 sees no spin controls at all.
The result shows at once. The readout prints "Inherited spin a_f" and "Compression ⟪C⟫" with the tooltip "C(origin) = g_mass × (1 − κ a_f²), κ = 0.068" (app.js:2071–2072), and the HUD's "Spin:" line reads "0.998 · C 0.932" (app.js:2134). In the 3D view (setSpin() scene3d.js:236) a cyan arrow stands on the Pulsecore along the spin axis, longer the faster the spin (the core's radius + 0.15 + 1.4·a_f in scene units), with the axis line through the field and a spin ring on the core before the Data Nova. The Axis tilt tooltip invites the player to "grab the arrow on the Pulsecore and swing it like a pool cue: its direction is the axis, its length the spin" before Start. Once the Pulsecore runs, its skin, the Bifold, turns with the spin, and the first toast says so: "the Bifold turns at 0.94 of light speed with the spin, dragging the data with it" (pinpointMilestones() app.js:532; skinSpeed() pinpoint.js:44 gives a_f / (1 + √(1 − a_f²)), 0.94 at a_f = 0.998). The About panel's "Spin you can see" card (index.php:308) tells the rest: "Space is dragged around the void with a_f, the axis runs through the field, and in 3D the torus turns."
At a spinless genesis, the first merger of the run brings the theory's First Fork to the screen. The collection records it as a spin find and the toast reads "Spin is born" (app.js:1746, 246), and the end card's merger chip adds "· spin is born" (app.js:2800).
The scale model
Exact: no scale model.
Where the game and the theory differ
- BPT gives Spinless Early Lineage as a statement about the first generations ("spin is born of orbit"), with level 3 as the First Fork of a lineage that steps one level a generation. The game gates it on the level: any universe below level 3 has no spin, and any universe at level 3 or above may have it, whatever its generation.
- BPT Part 6.9's channel table lists NS–BH at 0.867 and Kerr–Schwarzschild at 0.911.
inheritedSpin()from the same channel inputs gives 0.686 + 0.7/4 = 0.861 and 0.686 + 0.998/4 = 0.936. The other channels agree (0, 0.686, and 0.998 at the Kerr bound). The game uses the function, so a player choosing Kerr – Schwarzschild gets 0.936, not the book's 0.911. - BPT adds the vectors with θ⋎ between the spin axes and leaves their placement against the orbit open. The game splits θ symmetrically, ±θ/2 about the orbital axis, in one plane.
Fixed numbers
| Number | Where | What it is | Kind |
|---|---|---|---|
| 1 | universe.js:107 | M₁ = 1, masses normalized to the first progenitor | METHOD (normalization) |
| 1/2 | universe.js:110 | the spins taken symmetrically, θ/2 each side, in one plane | METHOD (a symmetric reading of θ_merge; BPT does not fix the split) |
| 180 | universe.js:110 | degrees to radians | PHYSICS (unit conversion) |
| 0.998 | universe.js:117 | the Kerr cap | PHYSICS (Thorne 1974) |
| 1 | universe.js:130 | g_mass | BPT (Part 6.8–6.9 calibration) |
| 3 | universe.js:54 | First Fork level | BPT (Part 3.10, Spinless Early Lineage) |
| 0, 0.7, 0.998 (a1, a2) | universe.js:200–205 | channel progenitor spins | BPT (Part 6.9 calibration spins); 0.998 PHYSICS (Thorne 1974) |
| 0, 1 (q) | universe.js:200–205 | channel mass ratios | BPT (Part 6.8) |
| 0, 10 (θ) | universe.js:200–205 | channel misalignments; 10° for our origin | BPT (Part 6.9, "≲ 15°") |
| 0.98–1.00 … 0.90–0.93 | universe.js:200–205 range |
book compression ranges (unused) | BPT (Part 6.8) |
| 0.000, 0.686, 0.867, 0.911, 0.998 | universe.js:200–205 a_f |
book spins (unused; two disagree with the function) | BPT (Part 6.9) |