PulseCore

Chapter 2 · Section 5

The Pulsecore as a Bubble of Data

The BPT law

BPT Part 3.6, "The Pulsecore as a Bubble of Data," describes the Pulsecore while it fills. "A universe begins across three parts. On the parent's side is the Nullcore ... Between them is the Bifold, the line between the dimensions ... On the child's side is the Pulsecore, the child's data held within the Bifold." "The Pulsecore is a bubble, and the Bifold is its skin. It is Planck-sized in the units of the universe it begins, and it holds data inside as well as on its surface." Before the physical layer the data has no mass, "so nothing holds it back. It is not a gas ... but radiation: it moves freely at the local light speed 𝒞→ and fills the Pulsecore as light fills a hot cavity. The data within crosses the bubble, strikes the Bifold, is written there and sent back in, and turns with the spin of the Bifold that holds it." Three named laws follow, which pinpoint.js:1–33 restates:

  • Pulsecore Data Radiance: P_∂ = u/3, u = n·k_B·T, v = 𝒞→. "Massless data within the Pulsecore is radiation, not a gas: every datum moves at the local light speed, and its pressure is a third of its energy density." "A datum within the Pulsecore is always at 𝒞→, and only its direction changes, at each strike of the skin."
  • The Bifold Record Law: Φ_∂ = n·𝒞→/4, the strikes on the skin per unit area per unit time. "The Bifold is the record of the data within: every datum that strikes it is written where it strikes, and the skin sends data back in." "What we see on the Pulsecore's surface is the record of what has struck it."
  • Bifold Drag: v_∂ = 𝒞→·a_f / (1 + √(1 − a_f²)), with n(ρ) = n₀·γ(ρ)³. "The Bifold turns with the universe's spin, its equator at the speed of a spinning horizon's equator, and drags the data it touches, so the data within swirls with the spin and crowds toward the equator."

The established physics

  • The Bifold's speed is the equatorial speed of a Kerr horizon. A Kerr hole of mass M and spin a_f has its horizon at r₊ = M(1 + √(1 − a_f²)) and angular velocity Ω_H = a_f/(2r₊) (G = c = 1). Its equatorial circumference is 4πM, a circumferential radius of 2M, so the equator moves at Ω_H·2M = a_f/(1 + √(1 − a_f²)), which is 1 at a_f = 1 (Kerr 1963; Bardeen, Press & Teukolsky 1972; Misner, Thorne & Wheeler 1973).
  • Frame dragging inside a rotating shell: Thirring 1918, and Brill & Cohen 1966 for a shell at its own horizon dragging the interior fully, as the code comment cites.
  • A datum leaving a wall leaves by Lambert's cosine law (cos θ = √u for uniform u), the angular law of emission from a surface. Reflection off the inside of a sphere keeps the angle of incidence, so a track keeps the same chord, 2·cos θ radii, at every bounce.

The game's math

The class PinpointGas pinpoint.js:46 holds the data within as points in the unit ball, with positions, directions, colors and bits.

  • Reach: reach = π pinpoint.js:49, light's path in one flip in units of the bubble's radius. The derivation in pinpoint.js:8–12: a cell is f^L/4 ℨ, so the equator, 4·2^L cells, is 2^L·f^L ℨ, one local Planck length. A flip is half a Planck time, so light covers half the equator a flip: π radii.
  • Count: N = dataWithin(n) with n the Tempos processed. want = min(max, N) points (pinpoint.js:120). stepPinpoint() app.js:507 makes the gas with max: 8000, against the constructor's default of 1,200.
  • Birth (pinpoint.js:126–139): the first min(want, 16) points leave the skin at random pulsing cells, taking each cell's color and bit, in a Lambert direction about the inward normal plus the skin's own motion (launch() pinpoint.js:72), renormalized to speed 𝒞→. Every later point is a copy of a random existing point at its place, with its color and bit and a new isotropic direction (Josh's ruling of 2026-10-25, "the original zinf points should be multiplying"). The loop tries at most 4·max times a flip; after 2·max tries it accepts a non-pulsing cell.
  • Share: share = N / count (pinpoint.js:140). When N exceeds the points, each point stands for share bits.
  • Flight (pinpoint.js:143–169): each point flies reach along its direction. At the wall it strikes the cell under it (cellAt() pinpoint.js:59), writes there (write()), reflects as a mirror does (u → u − 2(u·n̂)n̂), and goes on, for at most 8 bounces a flip. After the flight, position and direction turn about the spin axis by om = v_∂·π radians, the dragged frame.
  • Writing (write() pinpoint.js:97): a strike trades with n = max(1, round(share)) skin cells in a disc of radius √(share/π) cells about the strike. The first cell gets the datum's bit, and the datum takes that cell's old bit on to the next. Each written cell is set to pulser. The lit bits are conserved: the chain only passes bits along. The pulser count is not: a null cell that is struck becomes a pulser.
  • The skin's turn: skinSpeed(a_f) = a/(1 + √(1 − a²)) with a = min(0.999, |a_f|) pinpoint.js:44. stepPinpoint() adds π·skinSpeed(a_f) radians a flip to the skin's angle (app.js:510).
  • Paths: each point's segments in the flip are kept for drawing, at most 6 a point (pinpoint.js:53, 151). The path's points turn by half the flip's angle at the start and the whole at the end (pinpoint.js:171–174).

Desktop at level 6, near the Data Nova: N = 65,536, so 8,000 points with a share of 8.19 bits; each strike writes 8 cells. With a_f = 0.998 the skin's equator moves at 0.998/(1 + 0.0632) = 0.939 𝒞→, and the skin turns 2.95 radians a flip. On a phone at level 4, N never exceeds 4,096, so there every point is one bit.

How often a datum strikes: a point launched from the wall has chord 2·cos θ with cos θ = √u, so it strikes about π/(2·cos θ) times a flip. Averaged over the Lambert law that is π·E[1/(2√u)] = π strikes a flip if every bounce is followed.

cellAt() maps the sphere to the field with rows proportional to the polar angle θ, not to area.

The milestones (pinpointMilestones() app.js:527) say the core's progress at 25 % and 45 % of χ∂ before the Null Nova and at 75 % and 90 % after it. The scene's null density is N/(χ∂ − N) before the Null Nova and the space made, N/χ_∂, after it (app.js:517). The milestones are recorded in pinMarks app.js:526.

After the Data Nova the gas would go on inside the hole (stepInnerGas() app.js:1090, stepInner() app.js:1135), but both wait on pinSkin, which is never set to anything but null (app.js:1088, 3160, 5261). Since the ruling of 2026-10-26 the Pulsecore empties at the Data Nova, so both functions are inactive.

In the game

The bubble is the 3D view's first picture. Before Start the Pulsecore is a sphere at the center of the scene wearing the painted field as its skin (scene3d.js:85), turning slowly; the genesis sets its spin. The two spin sliders, 0 to 0.998 and starting at 0.998 (index.php:160–165), and the collision channel set a_f, which the readout's Spin line shows as "a_f · C" (app.js:2134). With "Show spin and axis" ticked, the spin axis, an angular-momentum arrow and a ring round the core are drawn while the Pulsecore fills (setSpin() scene3d.js:236).

From the first flip after Start, the data within appears inside the sphere as colored points, each in the color of the cell it left, with its flight in the last flip drawn as short colored lines (setGasPoints() and setGasPaths() scene3d.js:405–422). The points grow larger and brighter as the core fills (setCoreDensity() scene3d.js:442). The skin turns at the Bifold's speed, about three radians a flip at af = 0.998; drawn sharp it would seem to jump backward between frames, so the scene smears it along its turn by the angle it swept (blurSkin() scene3d.js:254). A dark violet haze inside the sphere thickens with the null's density ρ∅ = N/(χ_∂ − N) and is gone at the Null Nova (setNullDensity() scene3d.js:1193). On the skin, and in the 2D view, the player sees the strikes as cells changing state and color where the data lands; the field is the skin's map and does not roll.

The page's Universe & Genesis note says "The Pulsecore is a bubble of data inside the Bifold, the line between the dimensions ... The Bifold turns as a Kerr horizon does" (index.php:191).

The four milestone notices and the first-Tempo notice are written but not shown. Their texts include "The data within moves at light speed and bounces off the Bifold about twice a flip; the Bifold turns at 0.94 of light speed with the spin, dragging the data with it" and "The null is nearly packed one to a place · the Null Nova comes when data and null fill the Pulsecore, at Tempo 181" (app.js:532–539). showToast() returns at once while QUIET is true (app.js:231), the ruling of 2026-10-28 that cleared the notices "to allow the game to process."

The scale model

The points are a scale model of the data within: one point is share = N/count bits, at most 8,000 points (desktop). The writes are exact in bits: a strike of share s trades with round(s) cells. N itself is the model level's (n + 1)². At the true level 28, N reaches 1.15×10¹⁸ bits; the 65,536-cell drawn skin stands for it.

Where the game and the theory differ

  • The 8-bounce cut shortens the strike rate. It cuts every track with cos θ < π/16 ≈ 0.196, which is 3.9 % of wall-launched points, and lowers the average from π to about 2.8 strikes a flip. The comments give two other figures, "about one and a half times a flip" (pinpoint.js:12, which counts diameters crossed, π/2) and "about twice a flip" (the milestone text at app.js:532). Neither is the strike rate.
  • The Bifold Record Law's flux, n·𝒞→/4, is the same on every unit of the skin's area. cellAt() gives each row an equal share of polar angle, so a polar row's cells cover less of the sphere, by sin θ, than the equator's. Strikes that are even over the sphere fall more often per cell near the equator than near the poles. The torus uses an equal-area map (Part 2.9); the Pulsecore's sphere does not.
  • Bifold Drag also states n(ρ) = n₀·γ(ρ)³, the data crowding toward the equator. The game turns the whole gas rigidly with the skin and weights no density by γ. The radiation pressure P_∂ = u/3 and the skin's temperature are not computed.
  • There is a half-Tempo mismatch between the gas and the nova count. stepPinpoint() uses n = floor(pulseCounter/2) (app.js:508), while the nova test uses floor((pulseCounter − 1)/2) (app.js:4568). On even counters the gas is one Tempo ahead of the count that fires the nova.

Fixed numbers

Number Where What it is Kind
π (reach) pinpoint.js:49 light's path a flip, in bubble radii BPT (Part 3.6, Pulsecore Data Radiance, with Part 1.9's cell size)
8000 app.js:507 most points drawn for the data within CAP
1200 pinpoint.js:47 the constructor's default point limit (overridden) CAP (inactive default)
16 pinpoint.js:127 points born from the skin before they multiply CAP
4·max, 2·max pinpoint.js:126, 136 birth tries a flip; tries before a non-pulsing cell is accepted METHOD (rejection-sampling guard)
√u (Lambert) pinpoint.js:79 the wall's emission direction PHYSICS (Lambert's cosine law)
0.9 pinpoint.js:75 chooses the helper axis for the frame across the normal METHOD (numerical)
0.999, 0.9999 pinpoint.js:88, 163 launch and reflection just inside the wall METHOD (numerical)
1e-9 pinpoint.js:146 the flight's end tolerance METHOD (numerical)
8 bounces pinpoint.js:157 most strikes a point makes in a flip CAP
6 (MAXSEG) pinpoint.js:53 path segments kept a point DISPLAY (drawing only; a strike past the sixth still writes)
0.5 pinpoint.js:172 the path start's share of the flip's turn DISPLAY
π in √(share/π); 1 in max(1, …) pinpoint.js:98–99 the strike's disc, one cell at least METHOD (disc of area = share)
0.999 (a ≤ 0.999) pinpoint.js:44 spin held just under the Kerr bound a_f < 1 METHOD (guard; physics allows any a_f < 1)
1 (1 + √(1 − a²)) pinpoint.js:44 Kerr equator speed PHYSICS (Kerr horizon; BPT Part 3.6, Bifold Drag)
1, 0.6, 0.9 pinpoint.js:92 a point's color when it has none DISPLAY
0.25, 0.45, 0.75, 0.9 app.js:535–539 the milestones' shares of χ_∂ DISPLAY (notices)