Draft simulation — hold-and-win-reference draft-v0.1

Every stateful figure in this report is ESTIMATED. The mechanic draws per empty cell under a respin-reset rule and has no closed form, so this is seeded Monte Carlo. It is not exact enumeration and must never be quoted as such. Internal simulation is not certification.

Two quantities in the "exact" table below genuinely are exact, and they cover the base game and the trigger only.

Manifest

FieldValue
Report date2026-08-09
Purposeauthoritative Draft evidence for the DRAFT MATH gate
Methodmathengine.RunBatch + MergeBatches — the same code path studio-worker shards a real SimulationRun across
Rounds2,000,000
Shards8 × 250,000, merged
Master seedhaw-draft-v0.1-sim
Shard seed derivationmathengine.ShardSeed(masterSeed, shardIndex, fromRound, toRound)
Bet per round1.0 (single bet unit)
Backend Git SHA13700ae on feat/hold-and-win-reference (branch baseline bde8c05)
Canonical configlibs/mathengine/games/hold_and_win_reference/hold-and-win-reference.yaml
Config SHA-256888f134c29a59434d259316e9b83a8ec760bec6bcfb182334c6e42f167917d88
Mechanic versionhold_and_win/v1
RNG algorithmsha256-trunc64-be/go1-alfg#1
Go versiongo1.26.2 darwin/arm64
Elapsed112.6 s wall (includes a full repeat run for the determinism check)

Reproduce

cd /Users/admin/kiro/backend
go test -tags hwdesign ./libs/mathengine/games/hold_and_win_reference \
    -run TestDraftSimulation -v -timeout 3600s

Shard seeds actually used, recorded so the run is reproducible shard by shard:

shard 0  0ecd53620b5da9e8   triggers 1608
shard 1  531765d87bd7fca0   triggers 1611
shard 2  8d06e23842406fee   triggers 1612
shard 3  8e177d60ed11a6f6   triggers 1635
shard 4  9b1deb294ed016e8   triggers 1574
shard 5  95eba0ca5691d447   triggers 1570
shard 6  46edaeaebf336535   triggers 1678
shard 7  6d370afd5d813b80   triggers 1637

Re-running all eight shards with identical seeds reproduced identical aggregates — asserted in the test, not merely observed.

Exact results (base game and trigger only)

From enumeration of all 8,000 reachable base grids (TestDesignProbe). These are closed-form, not sampled.

MetricExactTargetStatus
Base RTP75.1160%76%inside the ±1.0pp draft band
Trigger probability1 in 155.41 in 150inside the 1-in-120–200 draft band

The simulation independently measured base RTP at 75.1025%, which agrees with the enumerated 75.1160% to within Monte Carlo noise. That agreement is a cross-check on both methods.

Estimated results

Round level

MetricEstimateSE95% CITargetStatus
Total RTP154.8803%1.2571pp[152.4165%, 157.3442%]96%far outside
Base RTP75.1025%76%inside band
hold_and_win RTP79.7860%20%far outside
Hit frequency14.4509%no target
Stdev per round17.7776no target
Observed max win500.0000×500× boundat the bound

Decomposition residual: −0.0082 pp. Base and feature reconcile to the total, so the split is measured rather than apportioned.

Mechanic

MetricEstimateSE95% CITargetStatus
Triggers12,925
Trigger frequency1 in 154.745.67e-05[1 in 152.12, 1 in 157.44]1 in 150inside band
Conditional mean award123.4600×1.5943[120.3351×, 126.5848×]30×far outside
Mean steps per feature8.8711no target
Reset rate per step0.4865no target
Full-grid probability0.187079no target
Mean cells at trigger6.7263
Mean cells at settlement12.8111
Max single feature award500.0000×500×at the bound

Prize-kind frequency per locked cell

Validates the weighted selection against the configured pool, which totals 1026.

KindCountObservedConfiguredAgreement
regular161,4490.9750281000/1026 = 0.974659within noise
mini3,1530.01904220/1026 = 0.019493within noise
minor8140.0049165/1026 = 0.004873within noise
major1680.0010151/1026 = 0.000975within noise

Feature award distribution (per trigger)

BandCountProbability
[5, 10)130.001006
[10, 50)8,9660.693694
[50, 100)1,3960.108008
[100, 500)1320.010213
[500, 1000)2,4180.187079

The top band is the full-grid grand at exactly 500×; nothing lands between 500 and 1000.

Round win distribution

BandCountProbability
01,710,9820.855491
[1, 5)185,2660.092633
[5, 10)78,1500.039075
[10, 50)21,6490.010825
[50, 100)1,4030.000701
[100, 500)1320.000066
[500, 1000)2,4180.001209

No threshold probability is inferred from these bins. Any specific threshold claim needs its own counter.

Max win

PropertyValue
Declared max win500× total bet
Whole-round bound500×, enforced by Paytable.MaxWinMultiplier
Reachableyes — observed maximum is exactly 500.0000×
Exceedednever, in 2,000,000 rounds; asserted in the test, not merely observed
Max-win probability0.001209 per round (the full-grid path)

500× is a reachable value here, not merely an upper bound, and both facts are separately asserted: the value is attained, and no round exceeds it.

Target reconciliation

TargetValueObservedDrift
Base RTP76%75.10%−0.90 pp, inside band
Trigger frequency1 in 1501 in 154.74+3.2%, inside band
Mechanic RTP20%79.79%+59.79 pp, ~4.0×
Conditional mean30×123.46×+93.46×, ~4.1×
Total RTP96%154.88%+58.88 pp

Attribution of the mechanic overshoot

The prize tables are not the cause. Splitting the conditional mean by settlement regime:

RegimeRateContribution
Ordinary settlement0.81292129.92×
Full grid (Grand 500×)0.18707993.54×

Ordinary settlement is 29.92× against a 30× target — essentially exactly on target. The entire overshoot is the full-grid rate: 18.71% of triggered features fill all 15 cells and take the 500× grand.

The mechanism is the landing chance against the reset rule. At 150,000 PPM a step over 9 empty cells lands nothing with probability 0.85⁹ = 0.2316, so the respin counter resets roughly half the time per step (measured 0.4865 across all steps, where the empty-cell count shrinks as the grid fills). A triggered feature therefore runs 8.87 steps and reaches 12.81 locked cells out of 15. A 500× top award reached almost one time in five is a jackpot in name only.

No parameter was changed in response to this. Tuning is prohibited before DRAFT MATH approval; the landing chance, regular weights, prize weights and base trigger weights are the open parameters, and the direction is the user's decision.

Limitations

  • Monte Carlo, not exact, for everything about the feature. Reported with standard errors and intervals; no figure here is a closed form.
  • The conditional-mean CI is wide relative to the drift being diagnosed only in absolute terms — the overshoot is ~4×, roughly 30 standard errors, so the direction is not in doubt.
  • Base RTP and trigger frequency are cross-validated against exact enumeration; the mechanic has no independent cross-check, which is recorded as a risk in the Draft.
  • This measures the mechanic through the single-round simulation driver. The reference-side step-versus-batch equality is proven on the golden corpus, but the game-engine request path is not wired, so nothing here is evidence about production play.
  • DRAFT / NOT FOR CERTIFICATION.