PulseCore

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 in exposureAt() (Part 2.2) in the same order as OFFS.
  • Inactive: genesisFromPanel() app.js:2021 fixes aniso: 0, so weights is always null (app.js:2047).
  • Drag drag.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 fixes drag: 0, and recomputeUniverse() sets drag = null (app.js:2039). No code constructs a Drag, though app.js still imports the class (app.js:17) and keeps the calls guarded by if (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 uAniso element; 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