Chapter 2 · Section 12
Retired Couplings: Spin Weights and the Flat-Map Drag
The BPT law
Two passages of BPT gave the game a way for spin to bias the field directly. BPT Part 5.1's Spatial Coupling Mechanism, Ψ_ij(t) = Σ_k w_k × U_k(t) for all k ∈ N(i,j), makes each unit's coupling a "weighted summation of neighboring Elementary Binary Unit states," with w_k "interaction weights"; a direction can enter the cell rule through those weights. BPT Part 2.8 lists the Harmonic Signature of a binary merger as "multi-harmonic offsets, anisotropic early expansion," and its Merger-Origin Compression Dynamics name "Spin Injection: Counter-rotating or co-rotating spins impart additional frame-dragging, tightening harmonic closure interval" and "Gravitational Wave Interference: Overlapping wavefronts modulate closure geometry, embedding permanent anisotropic bias." BPT Part 6.9, Spin Inheritance and the Progenitor Axis, gives the universe an axis from its parent merger, and Part 9.6 concludes that "isotropy was not a symmetry the young Universe possessed and then lost."
The code read these as two couplings. spin.js:1–17 cites the merger-born Harmonic Signature (BPT Parts 2.8 and 6.8), the axis n̂_genesis = J_total/|J_total| (BPT Part 6.9) and isotropy that "arrived broken" (BPT Part 9.6), and says of its coupling κ_aniso: "it is the game's one free knob." drag.js:1–9 reads frame dragging as a turn of the flat map about the field's center, "the book's 'frame-dragging, tightening harmonic closure' (ch 2 Part 2.8), made visible. κ is a game coupling." BPT states neither coupling.
Both were retired on 2026-10-24 (the comment at app.js:2017–2020): "The spin acts through the skin's drag, the flow's twist and the wells, not a bias on the cell rule (aniso 0); frame dragging is the flow's Lense–Thirring twist, not a turn of the flat map (drag 0)."
The established physics
Lense–Thirring dragging (Lense & Thirring 1918), which falls as 1/r³ (Part 2.10).
The game's math
spinWeights(a_f, axis, κ)spin.js:28: k = max(0, κ)·clamp(a_f, 0, 1), and w_j = 1 + k·cos(2(φ_j − axis)) for the eight neighbors, φ_j = atan2(−dr, dc) (spin.js:23). The eight 2φ_j are four angles 90° apart, each twice, so Σ w_j = 8 and every threshold of the cell rule keeps its meaning. The weights are applied inexposureAt()(Part 2.2) in the same order asOFFS.- Inactive:
genesisFromPanel()app.js:2021 fixesaniso: 0, soweightsis always null (app.js:2047). Dragdrag.js:10: ω(r) = κ·a_f/r² for r ≥ 1, accumulated per ring of integer radius and applied as whole-cell rotations of the cells on that ring (rotateRing()drag.js:42, n = max(8, round(2πR)) samples, field cells only, no wrap). Inactive: the panel fixesdrag: 0, andrecomputeUniverse()setsdrag = null(app.js:2039). No code constructs a Drag, though app.js still imports the class (app.js:17) and keeps the calls guarded byif (drag)(app.js:4539, 1974).drawSpinOverlay()spin.js:51 is active. With "show spin" ticked in the universe it draws the genesis axis as a dashed line, a ring at the field's center whose six spokes turn by a_f·frame·0.08 radians, and an inner disc scaled by the compression C (app.js:4109–4115). It is a picture only.
In the game
What remains of these couplings on screen is the spin picture. "Show spin and axis" (index.php:193), ticked by default, draws in the 2D view, from the Data Nova on, the genesis axis as a dashed line through the field, a ring at the center whose six spokes turn with a_f, and an inner disc sized by the compression C (drawSpinOverlay()). In 3D the same switch shows the spin axis through the scene, an arrow of angular momentum whose length grows with a_f, and, while the Pulsecore fills, a ring round the core (setSpin() scene3d.js:236, setShowSpin() scene3d.js:361). The axis is set before Start by the axis and tilt sliders of Universe & Genesis (index.php:172–178); the Spin line reads "a_f · C".
There is no control for either coupling. The Universe & Genesis note opens "No couplings to set: the rest follows the book" (index.php:191). The spin reaches the field only through the Bifold's drag (Part 2.5), the flow's twist (Part 2.10) and the wells.
The scale model
Inactive: no scale model. The overlay is a picture without scale.
Where the game and the theory differ
- The Drag class's ω = κ·a_f/r² is not the Lense–Thirring law, which falls as 1/r³. The comment at drag.js:3 calls it "the shape of Lense–Thirring dragging."
weightedNeighborSum()spin.js:34 does not wrap at the edges, unlike the engine. It is exported and not called anywhere.- app.js sets an anisotropy slider to 0.35 at start (app.js:5420), and would read it into the genesis, but the v8.3 page has no
uAnisoelement; the line does nothing.
Fixed numbers
| Number | Where | What it is | Kind |
|---|---|---|---|
| 2 in cos(2(φ − axis)) | spin.js:30 | a quadrupole weighting along the axis | METHOD (game coupling, inactive) |
| 0, 1 (clamps of κ and a_f) | spin.js:29 | guards | METHOD (inactive) |
| 0.35 (uAniso start value) | app.js:5420 | the slider's start, not read | METHOD (inactive) |
| 1 (coupling default), 0 (a_f, origin, sense 1) | drag.js:11 | Drag defaults | METHOD (inactive) |
| r < 1 → 0; 2 (1/r²) | drag.js:16 | the turn's fall-off | METHOD (inactive; not the Lense–Thirring 1/r³) |
| 8, 2π (ring samples) | drag.js:44 | points per ring | METHOD (inactive) |
| 2 (m < 2) | drag.js:55 | a ring of one cell does not turn | METHOD (inactive) |
| 0.10, 0.25, 0.35, 0.5 | spin.js:58, 69 | overlay opacities | DISPLAY |
| 1, 2; [6, 10] | spin.js:59–60, 70 | line widths and dash | DISPLAY |
| 14, 60, 6 (cellSize·6) | spin.js:67 | the ring's radius in pixels | DISPLAY |
| 0.08 | spin.js:68 | the spokes' turn per frame | DISPLAY |
| 6 spokes, 0.55 | spin.js:72, 76 | the spokes | DISPLAY |
| 0.35 (disc), 0.35 alpha | spin.js:81–82 | the compression disc | DISPLAY |
| rgba(53,232,224), rgba(255,51,102), rgba(176,92,196) | spin.js:58, 69, 81 | overlay colors | DISPLAY |