PulseCore

Chapter 9 · Section 5

Where the Game and the Theory Differ

Holding every law of the game beside the theory shows where the two still differ: where the code computes something other than what the theory states, other than what the physics measures, or other than what its own comments say. Each difference is written into its chapter, in the law's "Where the game and the theory differ" subsection; they are gathered here so they can be closed one by one. Where the theory itself has to say which way is right, the item is marked ruling and waits on Josh. As each is closed it leaves this list, and the chapter says how it was closed.

Most serious

  1. The ring list drops its oldest well (Chapter 3, Part 3.16). RingField.addSource() rings.js:37 still removes the oldest source once the list passes maxSources = max(4000, rows·cols/4) app.js:565, though rings.js:26 says sources are no longer dropped. That list is the game's list of wells and sites. At level 202 on a desktop, about 15,000 sites leave room for under 1,400 more wells before the oldest falls out of gravity, the census and the lineage.
  2. Dilation never acts above the model level (Chapter 2, Part 2.11). dilation(universePulses(), uni.L, uni.f) divides model-level Tempos by the true 2^L, so at level 28 the scale stays 1.0000. It also counts from the Data Nova, not the Big Bang.
  3. Two gravitational constants (Chapter 4, Part 4.3). The matter uses the Friedmann G = 1/(6πρ̄T²) with dark matter (sendOutMatter() app.js:1244); the drains, horizons and frameDrag() use the Rupture Rule G of universeG() app.js:604.
  4. The hoop test for a new well cannot pass (Chapter 4, Part 4.12; Chapter 3, Part 3.8). With light at about 128 cells a flip, a body needs about 1.2 × 10²⁰ cells to qualify on a desktop, against about 77,300 cells of matter in the universe, so res.births never fires.
  5. Ordinary matter is 6.76 times the theory's count (Chapter 4, Part 4.5). sendOutMatter() sends out the whole (n + 1)², where BPT Part 3.13 counts f − χ∂ as ordinary matter; Data Matter of 5.4 times that is then added on top. Ruling.
  6. Nova wells skip the sites ruling (Chapter 3, Part 3.7). From the Physical Nova on, each harmonic nova's cluster becomes a physical well at once through registerWells() → addPhysicalWells(), not a site, each counting as wellMult wells. Ruling.
  7. The game's Sun has an unexplained 0.77 (Chapter 5, Part 5.3): sunCells = 0.77·Q/(D·0.39), read as "77 % of matter becomes stars", with no source. Ruling.

The theory and the code disagree

  • No radiation era (Chapter 4, Part 4.4): expansionA() is matter plus Λ from the first instant.
  • The Data Nova crosses exactly (Chapter 2, Part 2.6): χ = 16·4^L = (4·2^L)², so the overflow (n + 1)² − χ is zero at the Data Nova, eruptOntoScaffold() places nothing, and the first wells' overflow mass falls to its floor.
  • Census thresholds are rounded (Chapter 1, Part 1.13): DEPTH_MATTER = 12 and DEPTH_STARS = 22.2 round 11.51 and 22.16, while matterLaw uses the exact test.
  • The First Fork is gated by level, not generation (Chapter 1, Part 1.13). Ruling.
  • populationLog10 assumes one generation per level (Chapter 1), which BPT Part 3.14 has dropped.
  • Ascendant Wells "at most eight" is BPT Part 3.14's law, but the code's census can let the shares sum slightly above one, so eight is not strictly guaranteed (Chapter 3, Part 3.14).
  • No irregular or dwarf elliptical galaxy is ever typed (Chapter 6, Part 6.3), though both are listed and BPT Part 3.14 describes irregulars by κ_rot 0.3 to 0.5; κ_rot is computed and no longer sets a type.
  • Starbursts are drawn as spirals with arms (Chapter 6, Part 6.8); BPT Part 3.14 says clumps.
  • The rows of fr per real area are never set (Chapter 5), so BPT Part 6.10's "per real area" does nothing.
  • The packet stores the model's rupture count (Chapter 1, Part 1.14), 2^Lm, not the true 2^L; depth, H and generation sit outside the hash.

Counts and physics that come out wrong

  • Stars formed can outrun stars made (Chapter 5, Part 5.8): when takeGas fails partway, S.formed still adds all k.
  • Stellar wells are undercounted (Chapter 5, Part 5.13): a dying lot reports at most 4 wells while S.bh adds all n.
  • Nova class reads the drawn field (Chapter 2), so a desktop nova can never be MacroNova or HyperNova.
  • The 64 on the drag profile binds from level 2 (Chapter 2, Part 2.10) and sets the width of the strong-shear band: on 256 rows, 34 rows turn faster than 1.1 times the base with it, 2 without.
  • The inside-out turn leaves the two throat rows empty and overwrites a source row on each side (Chapter 2, Part 2.6).
  • The 0.15 radian turn clamp sets most galaxies' drawn turning (Chapter 6, Part 6.6), hiding their shear.
  • Dynamical friction is not diluted by the expansion while gravity is (Chapter 4, Part 4.9).
  • One merger per step (Chapter 3, Part 3.10) and a hidden 24-cell reach under stepWells() (gravity.js:33).
  • The drawn lattice does not follow the level after the Data Nova (Chapter 8, Part 8.2): radiatingLattice() draws a fixed 24 lines and 12 rings, and scaffoldWeight() uses the same numbers to lay the data and the first matter.
  • The point budget only falls (Chapter 8, Part 8.8): ×0.8 on slow frames, never raised.
  • The feedback branch for strong devices is dead (Chapter 5, Part 5.12): matterBudget() >= 30000 can never be true.
  • Regions across the torus seam are split in components() and findStrings() (Chapter 7), and fold centroids across the seam land on the far side (Chapters 2 and 3).
  • String rarity tiers are fixed while the minimum length grows with the field (Chapter 7, Part 7.9).
  • Revivals are off wherever frame dragging acts (Chapter 7, Part 7.6).

Stale comments and dead code

Out-of-date comments: matterBudget() (60,000 and 12,000; the code gives 16,000 and 8,000), light at "one cell a flip" (about 128), the galaxy point comments (240 a spiral, 35 %), the fold well "nine cells" (16), the hoop's 30 px (22), TUBE = 2 × HOLE, the quasicrystal "512 patches" (up to 19,683), the empty collection's "crystals form where rings meet", the index.php help's default level 25 (28), and BPT Part 3.6 cited for the Pulse Front (Part 3.5).

Unused or dead: wellCap(), the paired orbits (&& false), the matter worker (MATTER_THREAD false), MATTER_MAX, EPS_FF, Matter.circular(), YOUNG_MAIN, hideR, driveWordAt(), burstInner, spin weights and the flat-map Drag, MAX_RESIDUE, PULSE_UNIT, nullNovaTempo, weightedNeighborSum, and the last lines of drawGrid.

Found in the second reading

The second reading, which set each law beside what a player sees, found more:

  • The Motion view paints black (Chapter 4): app.js:360 divides by matter.lightCap, which nothing sets, so every cell is NaN once matter exists.
  • Infall moves at most one cell a flip (Chapter 4, Part 4.13), where √(2GM/k) asks for more.
  • The drawn torus stops at full size (Chapter 4, Part 4.4): setExpansion() holds a at 1 while expansionA() keeps rising.
  • BPT Part 3.11 says every quantum is its own body, about 19,000 at level 5; the game holds at most 16,000 (Chapters 4 and 8).
  • The cell rule is BPT's own (BPT Part 3.15), not a game method, as the first reading said (Chapter 2, Part 2.2).
  • In a scale model the Data Nova's well count is set by the law (Chapter 3, Part 3.3): drawn × wellMult equals the law, against the comment that the law is never imposed.
  • A merger gives two spins (Chapter 3, Part 3.10): the merged well's from its drawn orbit, the child's from BPT's ℓ̃·η.
  • Rings that meet across the seam are not found (Chapter 3, Part 3.16).
  • The page says what the code no longer does: the Layer tooltip's 2^(L+1) (the law is 3·2^L), the Level tooltip's default of 25 (it is 28), "each seeds a next universe one level deeper" (a child takes the level its well holds, BPT Part 3.14), "Pops announce each find" (the notices are off), a grid-size input, anisotropy slider and timeline prompt that are not on the page, and a uJeans slider wired to nothing (Chapters 1, 2, 4, 7 and 8).
  • Strings are drawn along their bounding box's diagonal (Chapter 7, Part 7.9), so one running the other way is drawn wrong.
  • The supernova push has no density factor (BPT's (n_H/n◇)^(−2/17)), and giants start at 0.3 Suns where BPT says 0.5 (Chapter 5).
  • Code comments cite the wrong Parts: the Reproductive Outcome Distribution is BPT Part 3.9 (not 3.8), the Pulse Front Part 3.5 (not 3.6), Information-Driven Perpetuation Part 1.11 (not chapter 3).