Vault Breakers: Super Score — Changelog
2026-08-20 — published to DEV; Super Scatter does not pay there
Published as vault-breakers-super-score-v1 on dev through versions/from-pack. The math is
unchanged — draft-v0.2, pack YAML fa6d0410…, config hash 6acdcb03… identical in memory,
through Postgres and as published. The runtime gate hash 2453541d… matched too, which is why the
game serves at all.
Blocking finding. The Super Scatter instant prize never pays on the player path. A base spin
evaluates a config with free_spins stripped — correct in itself, since the durable runtime plays
free spins one request at a time — but SuperScatterExecutor resolves through the free-spins
trigger and so never fires. Over 400,000 drawn rounds the full config pays the prize 55 times and
the player config 0 times.
Consequences for what dev actually serves, against what this changelog records:
- Super Scatter contribution 1.8246% → 0%
- whole-game RTP 95.8973% → ≈94.07%
- max win 50,000× → unreachable (its only witnessed path is the payout that does not happen)
No recorded figure is rewritten. They describe the approved math correctly; the runtime does not serve it yet.
The parity corpus could not have caught this: RuntimeBaseComparable() skips every vector whose
config carries free spins, so super_scatter_prize's recorded 50,000× was only ever graded against
the reference engine.
Game left reachable on dev deliberately — playtest on pacing and free-spins shape is still worth collecting, playtest on how big wins feel is not.
Details: backend/doc/vault-breakers-dev-smoke-findings.md; tracked as backend TODO GE6, GE7, GE8.
AWAITING_USER_APPROVAL — SUPER SCATTER RUNTIME FIX.
2026-08-20 — DEV publishing plan approved
DEV PUBLISHING PLAN APPROVED 2026-08-20. Scope: DEV only. Not freeze, not stage, not prod.
The math is unchanged — draft-v0.2, config SHA-256 fa6d0410… — so no evidence is re-derived.
Publishing-path work completed after the draft-v0.2 approval:
- Migrations 007 (
studio_reelsets.draw_model), 008 (studio_reelsets.initial_stops) and 009 (studio_paytables.win_tiers). All additive, nullable, no default, no backfill, idempotent. - Two silent store losses closed.
InitialStopswas one; the second,Paytable.WinTiers, had been misattributed in the fixture to a lossy free-spins JSON round trip that does not exist.book_style_v2now reproduces its already-recordedconfig_hash5ec2df7f…exactly — that hash belongs tobook_style_v2and is not a Vault Breakers identity. - A third identity defect found by the publishing identity gate itself:
Paytable.LineDefinitionspublished as[]where the approved pack carriesnil, making the canonical config hash depend on which side of the store it was read from. Fixed without moving the in-memory value. - Canonical config hash, in memory and assembled from Postgres, both
6acdcb03a109ece7d6aad6113e9519eba72e4a8d08886c67bad04228425a9235.
The free-spins shape is still approved for Draft only and still awaits a DEV playtest before Freeze. No smoothing and no retune ahead of playtest results.
Runbook: backend/doc/vault-breakers-dev-publication-runbook.md.
AWAITING_USER_APPROVAL — DEV PLAYTEST.
draft-v0.2 — 2026-08-19 — tuning pass
DRAFT MATH APPROVED 2026-08-19. Not frozen. Not final. Not certified. Not yet publishable to DEV.
Approved: whole-game RTP 95.8973% against a 96.00% target; Standard Buy at 100× returning 96.4173%; Super Buy at 500× returning 97.0453%; max win 50,000×; and the high-volatility, charge-dominant free-spins shape.
The free-spins shape is approved for Draft with a condition: a separate DEV playtest before Freeze. No smoothing and no retune ahead of playtest results.
Before DEV publication, a separate task on the math-studio publishing path — see the Freeze exit criteria in the evidence manifest.
DEV ONLY. NOT FOR PRODUCTION. NOT FOR CERTIFICATION.
Config SHA-256 fa6d0410d7de619e68b42083e7012b975d70be572a252d0dd60f3debe2ba4fc8.
Corrected 2026-08-20. This line previously read
b2e9d6658831155db0bafaaed81ae25e96d6606a54fd96cf1650fcca3f7a4c1c. That is the canonical YAML at commit0c0ceb3, the first draft-v0.2 config — written here before the final trigger-rate correction in5d56362moved it tofa6d0410…, and never updated afterwards.b2e9d665…was never approved, never measured and is not an identity of any current artifact. Every other document — README, Math Spec, and all four v0.2 evidence files — already carriedfa6d0410…; this changelog line was the only place that disagreed. Supersedesdraft-v0.1, whose evidence is retained unchanged.
The change
Free spins run their own reel table: the charge at 7,250 out of 50,000 against the base game's 30. Everything else about the two tables is the same.
That single change is what lets the reference Bonus Buy prices stand. In v0.1 free spins ran the base reels, so fifteen free spins were worth 15.52× and the 100× and 500× prices returned 15.52% and 10.94%. The choice then was to reprice the buys down to 16.17× and 56.99×, or to make the feature worth its price. This pass took the second.
What it required
Balancing
The last correction was made on the natural trigger rate, not the paytable. It is the one lever that moves the whole game without moving the buys — the buys are priced off the sequence award, which does not depend on how often a sequence is triggered for free.
Known shape
A free-spin snapshot pays a regular win on 8.22% of snapshots against the base game's 19.74%, because charges occupy 14.5% of the grid and every cell a charge takes is a cell that cannot complete an eight-of-a-kind. Free spins are rarer wins, far larger ones; 95%+ of a sequence's award is the charge part. That is a deliberate high-volatility shape and is recorded rather than smoothed.
draft-v0.1 — 2026-08-19 — reference baseline
APPROVED as the UNBALANCED REFERENCE BASELINE. SUPERSEDED by draft-v0.2, retained
unchanged. Mechanics and runtime approved, whole-game estimate recorded, Bonus Buy 100× /
500× deliberately left unbalanced, not approved for DEV publication.
First Draft. DEV ONLY. NOT FOR PRODUCTION. NOT FOR CERTIFICATION.
Config SHA-256 9631c0afdf4ba5553ab52d86e20242b8221cd90b1e807452b8d80036f45e8933,
backend 6adc7c07c37a74dc7126c6cc060077f4c49cac18.
Design changes from the approved spec
Engine capabilities added for this game
Count-anywhere evaluation · per-cell independent draw model · weighted multiplier charges with a per-spin accumulator · scatter-class aliases · a distinct retrigger award · per-snapshot scatter triggers · the conditional Super Scatter instant prize · Standard/Super charge pools · a fail-closed runtime-support check · a bounded cascade · a cap that terminates generation.