Research

Validation Register

Every check performed on OddsOfBlackjack’s calculations and published records — its type, scope, version, result and status — and every discrepancy reported, open or resolved. Records are added, never rewritten.

Register
Register v1 · 7 October 2026
Validation records
10 internal and reproducibility records · 1 external
Discrepancies
10 recorded · 2 open
Register Independent third-party validation: Not yet performed.
Three kinds of evidence

Checking, repeating and independent review are different things.

Each record has one type. Its result, its status and its scope are stated separately: a record can be complete within a narrow scope and still say nothing outside it.

Internal control
A check performed by OOB on its own engine, data or records. It can detect errors, but it is not independent: the same party built and checked the system.
Reproducibility
The same inputs give the same outputs, across runs or environments. It shows that a published value is stable and traceable; it does not show that the value is correct.
External validation
A check performed by a third party, with their own method, on published states or claims. None has been performed yet.
Validation records

What has been checked, in which scope and on which version.

V-001 Agreement with the source spreadsheet Internal control Partial
Evidence label
Porting check
Scope
Six full-shoe 8-deck rule configurations; the integrity group of the manual plan; five composition scenarios.
Version
Engine ported from the source spreadsheet; recorded before build identifiers were introduced.
Date
23 Aug 2026
Result
Passed. Five of six configurations agree within about 0.005 percentage points; the sixth (US peek, no DAS) differs by about 0.06 pp by design (D-007). Integrity checks all passed. Composition scenarios: mean difference 0.0005 pp, no opposite signs.
Status
Partial
Limits
Shows faithful porting, not correctness. The other groups of the manual plan are not recorded as completed.
Record history
  • 23 Aug 2026 — Recorded.
V-002 Rule restrictions on split hands Internal control Complete
Evidence label
Regression tests
Scope
Double after split, double restriction and split-ace rules on every hand created by a split.
Version
Application release of 23 Aug 2026.
Date
23 Aug 2026
Result
Passed. 14 regression tests, added with the correction described in D-004.
Status
Complete
Limits
Covers the advice shown for split hands, not the EV values themselves.
Record history
  • 23 Aug 2026 — Recorded with the correction of D-004.
V-003 Ten published reproducible states — rerun Reproducibility Complete
Evidence label
Reproducibility check
Scope
OOB-RS-0001 to OOB-RS-0010: rebuilt composition, available actions, action EVs to four decimal places, highest-EV action.
Version
Build OOB-ENG-b0681ede84a3; Methodology v1.0.
Date
6 Sep 2026
Result
Match. 10/10 states in two environments: development, Python 3.11.4 (runtime OOB-RT-d6eb746d45d4), and production, Python 3.14.4 (runtime OOB-RT-a209a03d7b2d). Both runs gave identical values, equal to the published values to four decimal places. Both runtime identifiers were computed with the mechanism in use before 9 Sep 2026 (D-003) and are kept as recorded.
Status
Complete
Limits
Shows that the published values are reproduced by the same build. It does not validate their correctness and is not independent.
Record history
  • 6 Sep 2026 — Recorded. Four states were revised in this run: see D-001 and D-002.
  • 7 Oct 2026 — Production run records archived and checked against the published states, build and environments; no difference found.
V-004 Build and runtime identification Reproducibility Complete
Evidence label
Reproducibility check (identity)
Scope
Build identifier from the engine source files; runtime identifier from the code held in memory.
Version
Build OOB-ENG-b0681ede84a3.
Date
9 Sep 2026
Result
Passed. The corrected runtime mechanism is stable across executions and changes with any real code change.
Status
Complete
Limits
Identity of the code, not correctness of results.
Record history
  • 9 Sep 2026 — Recorded with the correction of D-003.
V-005 Comparison with an internal reference program Internal control Partial
Evidence label
Internal independent-code check
Scope
Selected states on very small shoes and on shoes of about 290 cards: Stand, Hit, Double, ENHC dealer blackjack, and one split state under the production conventions.
Version
Reference program version a79594ccbc59; engine as of 13 Sep 2026.
Date
13 Sep 2026
Result
Measured. Stand: no difference in the measured cases. Hit and Double: up to about 0.002 and 0.004 EV units on ~290-card shoes; larger on small shoes. Differences are not decomposed by cause.
Status
Partial
Limits
A small number of selected states. Internal code, not third-party. Later versions of the reference program do not inherit this result.
Record history
  • 13 Sep 2026 — Recorded.
V-006 Published house-edge values (Wizard of Odds) Internal control Historical
Evidence label
Historical calibration reference — incomplete provenance
Scope
Three rule points used during calibration; full-shoe values for 8, 6 and 4 decks.
Version
Calibration period, before 6 Sep 2026.
Date
Not recorded
Result
Recorded. Rule points: differences between −0.004 and +0.009 percentage points. Deck counts: 0.434%, 0.408%, 0.357% against published 0.43%, 0.40%, 0.35%.
Status
Historical
Limits
Incomplete provenance: the calculator result type is recorded for one point only; rule settings and dates of reading are incomplete. Not a verified comparison and not independent validation (D-008).
Record history
  • 7 Oct 2026 — Entered as a historical record with incomplete provenance.
V-007 Basic Strategy comparison, decision level Internal control Partial
Evidence label
Partial comparison
Scope
813 initial two-card, non-pair states under the default rules (1,000 generated; 131 pairs and 56 naturals excluded by design).
Version
Run bs_vs_oob_full_20260909_182319, seed 20260908.
Date
9 Sep 2026
Result
Measured. 782 agreements (96.19%) and 31 deviations, each a strict EV difference; EV given up by the chart in deviating states: mean 0.0281, maximum 0.1415 per unit.
Status
Partial
Limits
The reference chart is a candidate, not approved as reference. Pairs and post-split hands are outside the domain. A decision-level comparison, not a bankroll comparison.
Record history
  • 9 Sep 2026 — Recorded.
V-008 Basic Strategy labels of published states Internal control Complete
Evidence label
Partial comparison (labels only)
Scope
The Basic Strategy labels shown for OOB-RS-0003, 0004 and 0005.
Version
Candidate reference chart read on 6 Sep 2026.
Date
8 Sep 2026
Result
Match. The three published labels agree with the candidate reference.
Status
Complete
Limits
Checks the Basic Strategy label only, not OOB’s EVs (D-006).
Record history
  • 8 Sep 2026 — Recorded.
V-009 Audit of the production pre-bet EV Internal control Incomplete
Evidence label
Incomplete audit
Scope
Design: 113 rounds drawn from an earlier 300,000-card simulated track.
Version
Audit protocol v1.1.
Date
27–28 Sep 2026
Result
No verdict. 4 rounds evaluated in the initial batch, without an aggregate estimate by design. A Monte Carlo pilot passed five concordance controls (largest |z| = 2.00).
Status
Incomplete
Limits
No verdict on the sign or size of the error in the production pre-bet EV.
Record history
  • 28 Sep 2026 — Recorded as incomplete.
V-010 First-million accounting reconciliation Internal control Complete
Evidence label
Retrospective simulation (accounting)
Scope
Accounts V1 and K1, every wagered round of the first one-million-card track (seed 20261001).
Version
Simulator OOB-K1-b564264c55fd.
Date
6 Oct 2026
Result
Passed. The reconstruction from the round journals matched the simulator balances on every wagered round.
Status
Complete
Limits
Accounting only; it says nothing about the accuracy of the EV values.
Record history
  • 6 Oct 2026 — Recorded.
X-001 Independent third-party validation External validation Not yet performed
Status
Not yet performed
Detail
No third party has reproduced or reviewed OOB’s calculations.
Result
Match — Result reproduced within the defined tolerance.
Mismatch — The difference requires investigation.
Unsupported — The independent method cannot reproduce the exact state.
Inconclusive — The available evidence is insufficient.
Passed — Every point checked passed, within the stated scope.
Measured — Differences were measured and are reported as observed; no pass or fail threshold applies.
Recorded — Values are kept as a record; no comparison verdict is given.
No verdict — The check has not reached a result.
Record status
Complete — Performed in full within its stated scope.
Partial — Performed for part of the stated scope only.
Incomplete — Started, without a verdict.
Historical — Kept as a record; its provenance is incomplete.
Superseded — Replaced by a later record, which is linked. The original stays visible.
Not yet performed — Not carried out.
Discrepancy status
Open — Reported; the cause has not been established.
Investigating — An approved investigation is in progress.
Resolved — corrected — An error was found and corrected. Earlier values remain in the record.
Resolved — by design — The difference is explained by a documented convention; it is not an error.
Resolved — documentation — A public text did not match; it was corrected.
Not reproduced — The difference could not be reproduced with the data received.
Software regression checks
Separately from this register, the application has an automated test suite covering routes, pages, game state and bet sizing. At site release 4a71841 it ran with 222 passed and 1 skipped on 7 Oct 2026. These are software regression checks; they are not mathematical validation and are not listed as validation records.
Discrepancy register

Every reported difference, open or resolved.

Open items are listed first. A cause is written only when it has been established.

D-001 Double EV of OOB-RS-0005 changed between runs Open
Also referenced
N3 in the Technical Whitepaper
Reported
6 Sep 2026 · Internal review
Observed
In OOB-RS-0005 the Double EV is −0.4189 in the initial capture and −0.4178 in the revised run. The dealer upcard is 4, where the dealer blackjack probability is zero, so the ENHC correction of D-002 has no effect on this value.
Affected
OOB-RS-0005, Double EV (difference 0.0011). No decision changed.
Status
Open
Resolution
The cause of the earlier value has not been established. It is not attributed to the ENHC correction. Both values are kept in the record.
Resolved
—
Record history
  • 6 Sep 2026 — Reported during the rerun of the published states.
D-008 Incomplete provenance of published reference values Open
Reported
7 Oct 2026 · Technical Whitepaper review
Observed
Published Wizard of Odds values used during calibration were recorded without the result type (for two of three points), all rule settings or the date of reading.
Affected
V-006.
Status
Open
Resolution
Kept as a historical record, not as a verified comparison. Provenance will be completed in a later revision if the original record is recovered.
Resolved
—
Record history
  • 7 Oct 2026 — Reported.
D-002 ENHC dealer blackjack denominator Resolved — corrected
Reported
6 Sep 2026 · Internal review of OOB-RS-0008
Observed
Under ENHC, the dealer blackjack probability used a denominator of n − 1, although the upcard had already been removed from the shoe.
Affected
Attributed to this correction: three states with a ten-valued upcard, each value changed by 0.0001 — OOB-RS-0008 (Double −1.1415 → −1.1414; Surrender −0.5388 → −0.5387), OOB-RS-0009 (Double −1.1648 → −1.1647), OOB-RS-0010 (Double −1.1441 → −1.1440). No decision and no Stand/Hit margin changed. The fourth changed state, OOB-RS-0005, is not attributed to this correction (D-001).
Status
Resolved — corrected
Resolution
Denominator corrected to n, aligned with the US peek path. States rerun on build OOB-ENG-b0681ede84a3 (V-003). The initial capture is kept.
Resolved
6 Sep 2026 · OOB-ENG-b0681ede84a3
Record history
  • 6 Sep 2026 — Reported, corrected and rerun.
D-003 Unstable runtime identifier Resolved — corrected
Reported
9 Sep 2026 · Internal review
Observed
The runtime identifier was not stable: it depended on reference counts during execution.
Affected
Runtime identifiers recorded before 9 Sep 2026.
Status
Resolved — corrected
Resolution
Mechanism replaced with a canonical representation (V-004). Earlier records keep their original identifiers; none was reconciled retroactively.
Resolved
9 Sep 2026 · OOB-ENG-b0681ede84a3
Record history
  • 9 Sep 2026 — Reported and corrected.
D-004 Split hands advised without split-hand rules Resolved — corrected
Reported
Before 23 Aug 2026 · Internal review
Observed
Hands created by a split were advised with the main-hand table, without the double after split, double restriction and split-ace rules.
Affected
In-app advice on split hands.
Status
Resolved — corrected
Resolution
Restrictions applied to every split hand; covered by 14 regression tests (V-002).
Resolved
23 Aug 2026 · Application release of 23 Aug 2026
Record history
  • 23 Aug 2026 — Corrected.
D-005 Public methodology text did not match the production path Resolved — documentation
Reported
7 Oct 2026 · Technical Whitepaper review
Observed
The public methodology page described full card-by-card depletion; the production path uses fixed conditioning conventions. Some feature descriptions (Risk of Ruin, variance metrics, borderline alerts) described functions that are not available.
Affected
Public texts on the methodology page and the landing page.
Status
Resolved — documentation
Resolution
Texts aligned with the Technical Whitepaper V1; unavailable functions marked as planned.
Resolved
7 Oct 2026 · Site release 4a71841
Record history
  • 7 Oct 2026 — Reported and corrected.
D-006 Basic Strategy labels without a documented source Resolved — documentation
Reported
6–8 Sep 2026 · Internal review
Observed
The Basic Strategy labels on published states had been entered manually, without a documented source.
Affected
Basic Strategy labels of OOB-RS-0003, 0004 and 0005.
Status
Resolved — documentation
Resolution
Labels compared with a candidate reference chart; they match (V-008). The manual entry remains recorded.
Resolved
8 Sep 2026
Record history
  • 8 Sep 2026 — Provenance documented.
D-007 Difference from the source spreadsheet without DAS Resolved — by design
Reported
23 Aug 2026 · Porting check (V-001)
Observed
For US peek without double after split, the engine differs from the source spreadsheet by about 0.06 percentage points on a full shoe.
Affected
Full-shoe value, US peek, no DAS.
Status
Resolved — by design
Resolution
The spreadsheet over-penalises the absence of DAS; the engine does not reproduce that error. Arbitrated with the engine’s composition-dependent mode.
Resolved
23 Aug 2026
Record history
  • 23 Aug 2026 — Explained.
D-009 Player draw composition removed the upcard a second time Resolved — corrected
Reported
7 Oct 2026 · Internal review
Observed
When evaluating the actions of a dealt hand, the recorded composition already excludes the dealer upcard. The draw composition used for the player’s hypothetical cards removed one more card of the upcard’s rank. Stand and Surrender do not use the draw composition and were not affected.
Affected
Hit, Double and Split action EVs of dealt hands, and the decision-table column of the dealt upcard, on builds up to OOB-ENG-b0681ede84a3. The pre-bet EV and its calibration were not affected.
Status
Resolved — corrected
Resolution
Corrected in OOB-ENG-992c737432c3 (Methodology v1.1, §5c): in the dealt-hand context the player draws from the recorded composition, without removing the upcard again. The hypothetical context (pre-bet EV, tables without a dealt hand) is unchanged. In the diagnostic states the corrected Hit, Double and Split values differed by up to about 0.0065 EV; the highest-EV action of the ten published states did not change. Published values remain on OOB-ENG-b0681ede84a3 and are not overwritten.
Resolved
9 Oct 2026 · OOB-ENG-992c737432c3
Record history
  • 7 Oct 2026 — Reported from a static review of the engine code.
  • 7 Oct 2026 — Internal diagnostic completed on 26 fixed states; correction in verification.
  • 9 Oct 2026 — Corrected in OOB-ENG-992c737432c3. Methodology v1.1. Published values kept on the earlier build.
D-010 Surrender displayed as the recommendation when it was not available Resolved — corrected
Reported
7 Oct 2026 · Internal review
Observed
On a hand of three or more cards, and on a hand produced by a split, the displayed recommendation could read Surrender when the decision table indicated it, although Surrender is available only on the first two cards of the initial hand. The Action EV panel correctly showed Surrender as unavailable.
Affected
The displayed recommendation in the application, on builds up to OOB-ENG-b0681ede84a3. No action value and no highest-EV action was affected. Published states record action EVs and the highest-EV action, which are unchanged.
Status
Resolved — corrected
Resolution
Corrected in OOB-ENG-992c737432c3 (Methodology v1.1, §5f): when the decision table indicates Surrender and Surrender is not available, the recommendation is the highest-EV action among Stand, Hit and, where permitted, Double. After a double, the automatic stand takes precedence. The Surrender EV formula and all action values are unchanged.
Resolved
9 Oct 2026 · OOB-ENG-992c737432c3
Record history
  • 7 Oct 2026 — Reported during the review of the dealt-hand correction (D-009).
  • 8 Oct 2026 — Correction in verification.
  • 9 Oct 2026 — Corrected in OOB-ENG-992c737432c3. Methodology v1.1.
Report a discrepancy

Send the complete state. A comparison is only meaningful when every input matches.

Reports are received through the contact page. No response time is promised. A reporter is named in the register only with their explicit consent; email addresses, IP addresses and account data are never published.

How a discrepancy is handled

Received, reproduced, investigated, resolved, recorded.

1
Received
The report receives an ID (D-xxx) and enters the register as Open once its data are complete. The reporter is named only with their explicit consent; otherwise the source reads “External report”. Email addresses, IP addresses and account data are never published.
2
Reproduce
The state is recalculated on the stated build. The outcome is Match, Mismatch, Unsupported or Inconclusive.
3
Investigate
Rules, composition, EV normalisation, conditioning convention, numerical precision and the strategy assumed for later decisions are checked in turn. A cause is written only once it is established; until then the record reads “cause not established”.
4
Resolve
The record closes as Resolved — corrected, Resolved — by design, Resolved — documentation or Not reproduced. A code correction receives a new build; affected published states are rerun, and new values are published next to the earlier ones.
5
Record
The date, the builds before and after, the methodology revision, the affected states or pages, and any required whitepaper revision are entered in the record’s history.
History and versions
Limits

What this register does not show.

This register lists what has been checked, in which scope and on which version. It does not certify the model as a whole. Internal controls and reproducibility checks were performed by OOB itself. Independent third-party validation has not been performed. A record marked Complete is complete only within its stated scope.