PulseCore

Chapter 7 · Section 14

The Collection, the Notices and the Saved Records

The BPT law

BPT Part 8.1 (Redefining the Singularity as Recursive Signal Alignment) defines the Universe Packet:

U_L = (L, Γ, Π, R) ⇒ ℜ(n) ∀ n

"A universe is its level, its genesis, its Pulsecore and its rule; everything after its first pulse is replay, so the packet is small and the universe is large." L is the level, Γ the genesis, Π "the Pulsecore: the field inside the pulse before its Data Nova, one bit per pixel on the 4 × 2^L grid of the Local Pixel Count", and R the rule, "stated exactly enough that two replays agree pulse for pulse". "Because the rule is deterministic, a packet is verifiable by anyone who holds it: replay it and compare the well census W(n) against the one recorded with it." The book's Packet Replay prediction reads: "two independent replays of the same Universe Packet produce the same well census W(n) pulse for pulse, and a census recorded with a packet that fails replay is rejected, testable on the game's recorded universes."

The rupture find reports BPT Part 3.9 (Fractal Progeny), the children against the law's 2^(L/3) (Chapter 3). The collection, the notices and what each record keeps are game methods. They serve the packet's purpose: every find is filed under the universe it formed in, so a replay can be checked against it.

The established physics

None: a game method. The packet's integrity check is SHA-256, a standard hash.

The game's math

The Collection (finds.js:6). add(find) stamps the time, pushes the find, saves, shows a notice, and calls onAdd. addQuiet(find) does the same without the notice or an immediate save, and marks the find quiet. persist() writes the latest 500 finds to localStorage under pc-v5-finds. The items in memory are not trimmed. counts() groups finds by kind and rarity, and summary() gives each kind's total and best.

Words (describeFind() finds.js:44). There is one sentence per kind. Three are tied to this book's laws:

  • rupture: "Final well at 2^L Tempos · N wells formed, the law expects E · C credits". N is lineage.total, all the wells, not the 12 listed. E is uni.progeny.
  • packet: "Universe Data <first 12 hex of the hash>… · verified (or: hash did not verify) · placed at the top left". The check is in parsePacket() (packet.js:139): the SHA-256 of the raw SEED and PINP chunks must equal the HASH chunk. fit (app.js:3260) is true when the packet's Pulsecore has this level's size. Otherwise it is copied into the top-left corner (app.js:3261).
  • crystal, state, node: the p/2 Tempos of Parts 7.3 and 7.8.

Notices (showToast() app.js:232). Under QUIET they return at once. When they are on: one notice per kind and head. A repeat folds in as ×N and extends the notice up to 14 s from its start, and a repeat within 10 s after it closes is held for the next one. A notice lasts 5.2 s on desktop and 3.2 s on a phone (≤ 700 px wide), where only the newest two stay. Each plays a tone of 440 + 110 · tier Hz for 0.18 s.

The panel (renderCollection() app.js:263). It shows totals by kind, counts by kind and rarity, and the latest 12 finds.

To the server (queueFind() app.js:2441, flushFinds() app.js:2448). Each added find of the current universe is queued with its pulse. The queue is sent at 40 finds, or 2.5 s after the first, in requests of at most 200. The first error stops further find saves for the session. It is flushed at the final well and on page hide.

What the saved records keep:

  • runRecord() (app.js:2200): lineage.children.slice(0, 12) (each listed child's inheritance) and mergers.slice(-40) signatures.
  • rupture() (app.js:2532): the census builds the first 12 children by rank (app.js:2544). The rest are made when tapped (childOnDemand), and lineage.total counts all of them. The rupture save sends well_frames.slice(0, 200) (app.js:2570), while the packet keeps every well frame (app.js:3200).
  • wellsListHTML() (app.js:3281): the Wells list shows the 60 best-ranked lives. Its heading gives the full count.
  • exportPacket() (app.js:3180): life.finds keeps every crystal, state, node, string and spin find of this universe that is in memory.
  • Run summary (app.js:2795): the states chip names the first 4 kinds.

In the game

The readout's last line, "Finds: N" (index.php:89), is the size of the collection in this browser, across every universe played in it. The menu's "Collection" link carries the same count (index.php:274) and opens the Collection panel, whose lede reads: "Harmonic nodes form where rings from your wells meet, deeper where more rings meet; time crystals and strings are patterns the game finds in the data. Each Data Nova is a genesis of the Outward Expansion Set. Kept in this browser." (index.php:381). The panel shows a tile per kind ("time crystals", "states of the field", "strings", "data novas", "species met" and the rest), then "By rarity", then "Latest", the newest 12 with their sentences and rarity hues (app.js:263–280). Before anything is found it reads: "Nothing found yet. Run a universe: crystals form where rings from its wells meet, strings run out of the void." (app.js:268).

The notices are off in v8.3 (QUIET, app.js:231). The ruling of 2026-10-28 is quoted there: "we need to eliminate some of the popups … lets clear them out for now and allow the game to process". With them on, each would slide into the notice stack with its icon, title, rarity and sentence, and sound its tone. What they would have told is in the Collection, and "the prompts that ask for a choice (the final well, the decay, a dive) and the run summary stay" (app.js:230).

The records reach the player in three places. The run summary at the end of a life gathers the life's finds into chips and offers "Open the record" (index.php:428), the site's Nova Data, where each nova "is saved with the universe's figures at that moment, and every crystal and string under the universe it formed in" (index.php:394). The Lineage section has "Export .ud", which downloads "this universe as a .ud packet: its genesis, Pulsecore, record and lineage", and an import that opens a packet to "replay it from its seed, or play one of its children" (index.php:260). Opening a packet would show the notice "Packet opened" with its packet sentence (app.js:3270); under QUIET that notice is silent too.

The scale model

Records describe the drawn universe. The rupture find's well count is lineage.total = max(wells standing, children listed, 1) (app.js:2563). "Wells standing" already counts what each drawn well stands for (Chapter 3), so it is the true-level count. The records listed above only shorten lists; none changes a count.

Where the game and the theory differ

  • The Guide's Finds card says "Pops announce each find; the Collection keeps them" (index.php:309). In v8.3 no pop is shown: QUIET is set, and the Collection alone keeps them.
  • BPT's packet is four parts, (L, Γ, Π, R), and everything else is replay. The game's .ud packet carries those four and also the run's record, its lineage and its finds (index.php:260; exportPacket() app.js:3180), which BPT's definition leaves to replay. The finds are what the Packet Replay prediction would check a replay against.

Fixed numbers

Number Where What it is Kind
500 finds.js:12 Finds kept in the browser RECORD
12 (hex) finds.js:76; app.js:3296 Packet id shown DISPLAY
2, 3 (toFixed) finds.js:49–70 Digits shown DISPLAY
10,000, 14,000 ms app.js:221 Notice grouping gap and longest life DISPLAY
5200, 3200 ms; 700 px; 2 app.js:251–254 Notice life, phone width, notices kept on a phone DISPLAY
440, 110, 0.18 s; 400 ms app.js:259, 257 Notice tone; fade-out DISPLAY
12 app.js:277 Latest finds in the panel RECORD
40, 2500 ms app.js:2445–2446 Upload batching triggers METHOD
200 app.js:2453 Finds per upload request (all are sent, in batches) METHOD
12 app.js:2222 Children's inheritance kept in the run record RECORD
40 app.js:2221 Merger signatures kept in the run record RECORD
12 app.js:2544 Children built at the final well; the rest made on tap RECORD
200 app.js:2570 Well frames sent with the rupture save (the packet keeps all) RECORD
60 app.js:3283 Well lives shown in the Wells list RECORD
4 app.js:2795 State kinds named in the run-summary chip RECORD