# Local validation record — Bitemporal Ledger Versioning

Reviewed 25 October 2026. Private teaching package; no deployment, narrated/encoded video or native bitemporal SQL execution claimed.

| Gate | Result | Raw evidence |
|---|---|---|
| Independent fixture |91 explicit input/expectation cases; initial shared arithmetic specified before implementation | [bitemporal-cases.json](../datasets/bitemporal-cases.json) |
| Python tests |3 methods pass, including 91 subcases, future-identity exclusion and detached outputs | test_bitemporal.py (canonical source) |
| TypeScript /parity |91 entire JSON results match Python and independent numerical/error expectations | [parity-results.json](parity-results.json) |
| Browser states |3 scenarios ×10 observations ×3 widths =90 states pass | [browser results](browser-qa/results.json) |
| Responsive/control QA |390/768/1440; no document overflow; all buttons/selects≥44 px; Back/Step/Play/Pause bounds; deterministic Reset; parameter changes; keyboard; reduced-motion Play once | visual-qa.mjs (canonical runner) |
| Browser diagnostics |0 warnings/errors | [browser results](browser-qa/results.json) |
| Asset rendering |Static grid and Mermaid rendered and visually inspected | [phone](browser-qa/lab-390.png), [tablet](browser-qa/lab-768.png), [desktop](browser-qa/lab-1440.png), [grid](browser-qa/two-axis-svg.png), [workflow](browser-qa/mermaid.png) |
| Skill validators | Topic package:0 errors/0 warnings; light playground:1 pass/0 failures | Local commands below |
| Source roles |Primary source versions, conceptual/platform/selected-model boundaries explicit | [source roles](REFERENCES.md) |

From this topic folder run:

```text
python -B -m unittest discover -s tests -p test_bitemporal.py
python -B tests/run_parity.py
python tests/build_lab.py
node tests/visual-qa.mjs
python examples/demo.py
```

The parity runner uses the repository's installed TypeScript compiler, ES2022/NodeNext/strict; compilation artifacts are local ignored files. build_lab.py embeds the actual compiled TypeScript kernel and canonical base fixture; it must follow the parity compile. Python is arbitrary precision and TypeScript uses internal BigInt; neither serializes monetary values as floating-point numbers. The corpus includes amount 9007199254740993, aggregate 1999999999999999999999999999998, equality cutoffs, tied receipts, retained padded reasons, malformed money, surrogate correction reasons and correction lineage.

The browser runner uses the workspace Playwright runtime/installed Chromium and writes screenshot evidence. All source input remains unchanged; both runtimes test defensive returned arrays. This validates portable semantics, not SQL commit/persistence or actual observer collection. A root visitor integration/build/HTTP/embedded gate is still required separately before any public release. The rendered SVG/HTML and exact balances can be reviewed locally without a deployed website.

Skill validators: `python C:/Users/islam/.codex/skills/build-fintech-topic/scripts/validate_topic_package.py <topic>` and `validate_playground.py <topic>` both pass. This private readiness does not bypass the separate visitor gate.

Resource-bound regression: 4097 otherwise-valid groups reject INVALID_GROUP; exactly 4096 groups are accepted in Python and TypeScript with normal balance 409600000. This is a correctness boundary, not a performance benchmark. An independent cross-reader check also compared 86 applicable cases against Event-Sourced Balance Fold: acceptance, balances and typed rejection codes agree.
