PulseCore

Chapter 7 · Section 8

Harmonic Nodes Are Not Time Crystals

The BPT law

BPT Part 7.3 (Quantum Mirrors of the Prime Pulse: Interference Patterns as Substrate Echoes) holds that "quantum interference patterns are not purely probabilistic phenomena, but direct echoes of the substrate's recursive architecture". Its Prime Pulse Interference Condition is the overlap ⟨Ψ₁|Ψ₂⟩ = Σ_(n,m) c₁ₙ c₂ₘ ⟨n_p|m_p⟩ ⟨n₀|m₀⟩: "Interference requires coherent overlap between Pulse states and null regions". BPT Part 7.5 states when that overlap adds up. Its Constructive Interference Amplitude is

A⋓ = |Σ_i A_i e^(i·φ_i)|

and "Constructive Interference occurs when phase relationships satisfy integer multiples of 2π (φ_i − φ_j = 2πn)". Part 1.1 names the result of time crystals meeting time crystals: "Resonance patterns (harmonic relationships)".

Each well sends rings (Chapter 3 of this book), and where rings from several wells meet in step the game marks a harmonic node. Its depth is the number of rings that meet. crystalRarity() (universe.js:416) names the depths after the flower of life: two rings make a vesica, and six make "the daisy's centre". BPT does not state the depth-to-rarity mapping. That is a game method. The node itself is the game's reading of BPT's constructive interference: rings that left their wells a whole number of periods ago, arriving at one point together.

The established physics

Waves from several sources superpose. Where they arrive in phase they reinforce, which is constructive interference, a textbook fact. No further source applies.

The game's math

A time crystal (Part 7.3) is a region of the field whose own cells hold a period longer than the pulse, found in the cells' recorded history. A harmonic node is a point where rings meet, found from the ring geometry by rings.step() (rings.js:87). The two share old names in the code: the node pipeline still uses crystalRarity, liveCrystals, depthSeen and lastCrystalPop. The comment at app.js:1928 draws the line: "an interference node, not a time crystal (that is states.js)".

Where rings meet (rings.js:87–131). Each well sends one ring per period (pulseLength = 2 flips, one Tempo, app.js:51) at one cell per pulse. For each pair of searched wells and each pair of their rings with radii of 2 cells or more, the two circles' crossing points are computed exactly. For each crossing, every other searched well whose ring passes within eps = 0.35 cells of it (app.js:565) adds one to the depth: a ring is there if it left its well a whole number of periods ago. That is the game's φ_i − φ_j = 2πn. A meeting point, keyed by its rounded cell, becomes a live node once it has been seen three times at depth 2 or more (rings.js:126), and stays live while it has been seen within one period (rings.js:133).

In stepFinds() (app.js:1914):

  • rings.step(t, rows, cols) returns the fresh meetings and is timed.
  • How many wells' rings are searched (2026-10-29, Josh: "swap that"; the number was a fixed 32). The search grows as the cube of the number of wells in it, so the count adapts to the device. While more wells exist than are searched and a search takes under 4 ms, ringSources grows by 15%, rounded up. Past 8 ms it shrinks by 15%, never below 8. It starts at 32 (app.js:565). The search takes the youngest wells.
  • No node finds (2026-10-28, Josh: "remove those all together"). NODE_FINDS = false (app.js:231). The meetings are still drawn: liveCrystals carries the live meetings with the hue of their depth, and scene.setCrystals() draws them. They are no longer collected, listed or saved. If the switch were on, a node would pop as the first of its depth, at tier 5, or at tier 3 or more 12 pulses after the last pop.

Rarity by depth (universe.js:416):

depth ≥ 6: tier 5 Legendary (hue 48); 5: Epic (290); 4: Rare (200); 3: Uncommon (160); 2: Common (330)

describeFind() (finds.js:51) still words a node, in case old records hold one: "Harmonic node: rings from wells A and B · depth d, period p flips (p/2 Tempos)".

In the game

Harmonic nodes are the most visible of the finds. They begin once the universe epoch has wells, and they are drawn three ways.

  • The rings. On the 2D field each well's rings are drawn as cyan circles, fading as they grow: color rgba(53, 232, 224) at opacity max(0.05, 0.35 − R / max(rows, cols)) (app.js:4096–4101). The Universe panel's checkbox "Show the wells' rings" (index.php:194) turns them on and off. It hides the circles only; the nodes are still found.
  • The nodes in 2D. Each live node is a filled diamond in its depth's hue, 3 + 1.5 · depth pixels from center to tip (app.js:4104–4107): pink for a vesica (330), green for three (160), blue for four (200), violet for five (290) and gold for six or more (48). Until the matter is drawn as stars, the node's cell is also painted in that hue on the field texture (app.js:418), so it shows on the torus skin.
  • The nodes in 3D. setCrystals() (scene3d.js:1773) places a small glowing octahedron on the torus surface at each node, sized 0.035 + 0.012 · min(6, depth) and colored by depth. Each one swells and shrinks on its own period, scale 1 + 0.25 · sin(2π · frame / p), and spins (scene3d.js:2148). The markers turn with the torus. Once the matter is drawn as stars, the octahedra are taken off (scene3d.js:1775, 2026-10-26: they "stay off the physical universe"), and they are cleared at the return to the Source (app.js:2608).

The player shapes the nodes through the wells. Where Proto Wells close and how many form decides where rings start; more wells make deeper meetings. No finds are kept: the Collection lists no nodes in v8.3, and the run summary's "◆ N harmonic nodes" chip (app.js:2796) stays empty unless old records hold nodes.

The scale model

The rings are sent by drawn wells, and each drawn well stands for wellMult of the true level's wells (Chapter 3). A node is a meeting of drawn rings, and it stands for nothing beyond itself. It is drawn only, not counted.

Where the game and the theory differ

  • The header comment of rings.js (rings.js:7–11) still says a meeting point "visited every P frames" is "a time crystal", citing "ch 2 Part 2.8". app.js:1928 says it is "an interference node, not a time crystal (that is states.js)". The code follows app.js: nodes and time crystals are separate finds.
  • The message for an empty collection still reads "crystals form where rings from its wells meet" (app.js:268). That describes harmonic nodes under the old name, and since NODE_FINDS is off it no longer describes a find at all. The game's Finds card in the page markup (index.php:309) already says "harmonic node" for the same thing.

Fixed numbers

Number Where What it is Kind
4 ms, 8 ms app.js:1922–1923 Search-time band that grows or shrinks the ring search. A device budget CAP
1.15, 0.85 app.js:1922–1923 Step sizes of that adaptation METHOD
8 app.js:1923 Floor on the wells whose rings are searched CAP
32 app.js:565 Starting count of wells searched CAP
6, 5, 4, 3 (depths); hues universe.js:417–421 Depth tiers and colors DISPLAY
12 (pulses), 5, 3 (tiers) app.js:1934–1935 Node pop rule (switched off) DISPLAY