.json`. Data with another hash never hydrates the page: every data section shows
+"Couldn't load this evidence." A CSP meta tag ships on every page (no inline scripts).
diff --git a/frontend/data/raw/manifest.json b/frontend/data/raw/manifest.json
new file mode 100644
index 00000000..09761e8f
--- /dev/null
+++ b/frontend/data/raw/manifest.json
@@ -0,0 +1,86 @@
+{
+ "repo": "AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence",
+ "revision": "96dc282a9803616c6b30bb31bfc3a0b91a7191e6",
+ "files": {
+ "release/simple-run/chain.jsonl": {
+ "sha256": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "bytes": 19686,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl"
+ },
+ "release/simple-run/verifications.jsonl": {
+ "sha256": "ec73fe8fdce56eb075783c37383dbb5afaa23fac168fbd6619c01240de41b770",
+ "bytes": 7355,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl"
+ },
+ "release/simple-run/hardware-map.jsonl": {
+ "sha256": "5116f365398795a5e79513a3709d48995cc72a059ae9c69c653e324e723884e4",
+ "bytes": 956,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/hardware-map.jsonl"
+ },
+ "release/simple-run/release-hashes.txt": {
+ "sha256": "479ce030fa8022f0f92262849f88dfde4c9cf2a0748b8830357f3aa277080e8d",
+ "bytes": 3364,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt"
+ },
+ "release/simple-run/anchor.json": {
+ "sha256": "2adaea4cae25439199ec2396c0e6e94d1d14188c070f217ed7e360ce10c1c18d",
+ "bytes": 689,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/anchor.json"
+ },
+ "release/simple-run/anchor.digicert.tsr": {
+ "sha256": "26a643321802ec92eb67f842d770c1d0b69aee66d3e9c3b58f84380a65d08564",
+ "bytes": 6007,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/anchor.digicert.tsr"
+ },
+ "release/simple-run/anchor.freetsa.tsr": {
+ "sha256": "4c1cc74f8596fff22125f285899d50b3ab50b69a6a1023baf3d68139f32cba6f",
+ "bytes": 4644,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/anchor.freetsa.tsr"
+ },
+ "release/simple-run/README.md": {
+ "sha256": "d3a4a5b221d9d1bd9318e8e414b44adc75f66155d03cd356b489165243e932e9",
+ "bytes": 8250,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md"
+ },
+ "release/simple-run/recipe.json": {
+ "sha256": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d",
+ "bytes": 458,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/recipe.json"
+ },
+ "release/unlearning-3i-atlas/chain.jsonl": {
+ "sha256": "98ffe339f9a0e20458b2615597fdb9ca23b0b12a5bac3873c9327893e724e6c1",
+ "bytes": 20725,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/chain.jsonl"
+ },
+ "release/unlearning-3i-atlas/verifications.jsonl": {
+ "sha256": "6f23946c7bcb7413a7f8b7fa322f5fa6b3240caa93c6d4d63c5a7133cbc9e7ec",
+ "bytes": 1788,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl"
+ },
+ "release/unlearning-3i-atlas/loo-results.json": {
+ "sha256": "c926c965d1e040ab23c591c9dcdd007e5ece75a57ecfa100fd69515d190ead69",
+ "bytes": 2158,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/loo-results.json"
+ },
+ "release/unlearning-3i-atlas/release-hashes.txt": {
+ "sha256": "8b5800df8a3f88622d9cd91beb72949b37762e3e0b5f42253cd78c99c54ea508",
+ "bytes": 1044,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt"
+ },
+ "release/unlearning-3i-atlas/README.md": {
+ "sha256": "499eb00a91699fa785c94fcbf3d8e96f0ad71d390752ee4523d2b019a010f560",
+ "bytes": 3744,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/README.md"
+ },
+ "release/unlearning-3i-atlas/recipe.json": {
+ "sha256": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d",
+ "bytes": 458,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/recipe.json"
+ },
+ "prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json": {
+ "sha256": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68",
+ "bytes": 7985,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json"
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/data/raw/prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json b/frontend/data/raw/prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json
new file mode 100644
index 00000000..e7f8054c
--- /dev/null
+++ b/frontend/data/raw/prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json
@@ -0,0 +1 @@
+{"code":[{"bytes":4498,"path":".github/workflows/anchor-pipeline.yml","sha256":"e016c58132c51a1753ae96756ee5bb53cc5f4cf958f6efbd607689612a44ebbb"},{"bytes":416,"path":"requirements/preparation.in","sha256":"4b0a637aaaa61787a78f053263536b4ac0a7f4abd53978bc1103c8905db7e78e"},{"bytes":73127,"path":"requirements/preparation.lock","sha256":"e284b2f4c393943e8d28a8ac6875b97634ffbe7c50356ba7aa90cd2ce5218f74"},{"bytes":74,"path":"src/ovl_pipeline/__init__.py","sha256":"0e60ca9603d569e977ae6f7b55d308384e7d864b65f9a2e3eb00f2afea9fbffb"},{"bytes":12024,"path":"src/ovl_pipeline/acquisition.py","sha256":"389153c4e6a76f66586a26e530b6f5defd9d9e4c6140dc46c702c74fc3fa8392"},{"bytes":7865,"path":"src/ovl_pipeline/anchoring.py","sha256":"e23d14c090c8152ff65506c5e1c15b16da060b82dde860714c2396e7f4e097d2"},{"bytes":6618,"path":"src/ovl_pipeline/canonical.py","sha256":"2de9c77a6d7414b9802a8b26b95d7fe9effdfd241df1e751ab3fb17475bcb1b1"},{"bytes":8630,"path":"src/ovl_pipeline/conversations.py","sha256":"1233029c70b69a0dcc9067938ea4e20bcda3aa6ae6609df728ee5c49403f407a"},{"bytes":17928,"path":"src/ovl_pipeline/data.py","sha256":"2b5c6898a8473f600aaf07868bd1bc495f206c2c2c1c2ba2b13cc215cb6063ab"},{"bytes":4300,"path":"src/ovl_pipeline/extraction_workers.py","sha256":"969d06c76bbd13129beb1af6fb3d9a2a09fbc5ec0d84a62e46a098b3f1a0e7e7"},{"bytes":20817,"path":"src/ovl_pipeline/preparation.py","sha256":"e368c228254c05fd59ff593ceddd6393b6a192fbb70953b8b3af5c14b48d12fa"},{"bytes":9675,"path":"src/ovl_pipeline/preparation_stages.py","sha256":"2206849e62ff957937783284ef9e018cf8c79ab15a42783479be807611fda242"},{"bytes":4526,"path":"src/ovl_pipeline/schema.py","sha256":"6255f646fb441d350ca7d79ac2441edf42af9b1047ab3c7ad6061743299e090c"},{"bytes":9894,"path":"src/ovl_pipeline/source_commitment.py","sha256":"de00be05627f7556c62a3437470d816e4d3235ad51f162a61751f7b4af3df108"}],"conversation_selection":{"conversations":{"train":3481,"validation":188},"counts":{"train":{"deleted":1485,"non_english":44006,"not_approved":1163,"selected":10252,"unselected_branch_or_unanswered_prompt":27507,"unusable_ancestor":24},"validation":{"deleted":68,"non_english":2321,"not_approved":76,"selected":550,"unselected_branch_or_unanswered_prompt":1386}},"files":[{"bytes":35542562,"path":"selection.jsonl","sha256":"43297d859bbdd1b29d28cf9cb20aa73fd330654e24132a25f7d78c4534ef052d"},{"bytes":6978579,"path":"train.jsonl","sha256":"b460ff323dd76ec00c23b3cb1c1a364cc9e4c4b9424941d730844ad69e036e55"},{"bytes":376180,"path":"validation.jsonl","sha256":"bd3f4d392bdc90c23bfc64d3562460fcf5a4aad73fc0e20ed60edb00bf07db40"}],"messages":88838,"policy":"oasst-en-preferred-path-v1","projection_columns":["message_id","parent_id","text","role","lang","review_result","deleted","rank","message_tree_id"],"schema":"ovl.conversation-selection.v1","selection_root":"e94202ed19145028de35c28aae49c320aad5195f264951fc6c9a44edad191d8b","source_inventory_root":"a0047b229629298b87d25baacb0230ff23b30006c820e97e5d42badd9ae8f253","split_filenames":{"train":"data/train-00000-of-00001-b42a775f407cee45.parquet","validation":"data/validation-00000-of-00001-134b8fd0c89408b6.parquet"}},"corpus":{"counts":{"empty_extracted_text":2166,"included":7232582,"non_main_namespace":6597190,"redirect":12027806},"files":[{"bytes":33012803655,"path":"articles.jsonl","sha256":"4f7abe772231bcb29573796ce4f1412a38ea751135323180ad3119c19260523f"},{"bytes":15583458438,"path":"ledger.jsonl","sha256":"60a11cb9974cdbe254e63476c5c4f5c6df91d9446a4c917c59a93d49b94f101b"}],"ledger_root":"60076f336fd9bb6c5d20a1f4eaf2635c1587568ae9a50fdfb74a8fa6f68655be","policy":"main-nonredirect-stripcode-v1","record_count":25859744,"schema":"ovl.corpus.v1","sources":["859cf6cc1d13007d165025247cacaf463ff8a4ad700b19e476f7626e24169116"]},"environment":{"dependency_lock_sha256":"e284b2f4c393943e8d28a8ac6875b97634ffbe7c50356ba7aa90cd2ce5218f74","machine":"x86_64","packages":{"annotated-types":"0.8.0","anyio":"4.15.1","certifi":"2026.7.22","cffi":"2.1.1","charset-normalizer":"3.5.1","click":"8.5.0","cryptography":"50.0.1","defusedxml":"0.7.1","dnspython":"2.8.0","email-validator":"2.3.0","filelock":"3.32.3","fsspec":"2026.7.0","h11":"0.16.0","hf-xet":"1.6.0","httpcore":"1.0.9","httpx":"0.28.1","huggingface-hub":"1.32.0","id":"1.6.1","idna":"3.20","jinja2":"3.1.6","markdown-it-py":"4.2.0","markupsafe":"3.0.3","mdurl":"0.1.2","mpmath":"1.3.0","mwparserfromhell":"0.7.2","networkx":"3.6.1","numpy":"2.5.3","packaging":"26.3","platformdirs":"4.11.9","pyarrow":"25.0.1","pyasn1":"0.6.4","pycparser":"3.0","pydantic":"2.13.5","pydantic-core":"2.46.5","pygments":"2.21.0","pyjwt":"2.14.0","pyopenssl":"26.4.0","pyyaml":"6.0.3","requests":"2.34.2","rfc3161-client":"1.0.9","rfc8785":"0.1.4","rich":"15.0.0","securesystemslib":"1.5.1","setuptools":"78.1.0","sigstore":"4.5.0","sigstore-models":"0.0.6","sigstore-rekor-types":"0.0.18","sympy":"1.14.0","tokenizers":"0.23.2","torch":"2.14.0+cpu","tqdm":"4.70.1","tuf":"7.0.1","typing-extensions":"4.16.0","typing-inspection":"0.4.4","urllib3":"2.8.0"},"python":"3.12.14","python_recursion_limit":1000,"system":"Linux","tokenizers_parallelism":"false","wikitext_parser_backend":"c"},"schema":"ovl.complete-preparation.v1","source_commitment_sha256":"ec263b5c3914fd1a8bd25e97fa377b4f8416c38a9ef216d27c203252948b9129","streams":{"conversation":{"documents":3481,"files":[{"bytes":849666,"path":"documents.jsonl","sha256":"124ffaa61f20cde74c7758a1b654d1c1f1e2f917d3c36ff31001189f0c383672"},{"bytes":1468127,"path":"mask.u8","sha256":"f17aec31ab9da79db70a4e2f2128b5807cae668a9b05b7d1f6805dc35efbc097"},{"bytes":2936254,"path":"tokens.u16","sha256":"c56bb83e6ff43f571745f42276b3274a624110f622ad9f8099e0b905c3c4b043"}],"index_root":"8afb54fd8ef3cf82bbbd9b2ae866f54c1b8a1253d48c988e5cd137d12516aa8c","phase":"conversation","schema":"ovl.stream.v1","targets":1278137,"token_dtype":"uint16-le","tokenizer_sha256":"6eab0d9bcd5736cee484992b24e7a84459bee1cc3024c0e958a76842a57728c0","tokens":1468127,"window_policy":"per-document-overlap-one-v1"},"conversation-validation":{"documents":188,"files":[{"bytes":46168,"path":"documents.jsonl","sha256":"cd8d14cfb0a265161bde8604a8d15dc089b6e33992c07af5a4c1f6ffc7778af7"},{"bytes":77654,"path":"mask.u8","sha256":"9170dd6e28d8dd328eed0a7804c05eba26f7b0dafc6b7127a26cbae86becb037"},{"bytes":155308,"path":"tokens.u16","sha256":"be62756cf5ea9e28d13f1379b6cbf3174a5ee6b0b5121fb7e0f33defd2547918"}],"index_root":"67d3d1bc85e686de84050a4c7aa8cb4c16466898584511d75796adf5f21239af","phase":"conversation","schema":"ovl.stream.v1","targets":65355,"token_dtype":"uint16-le","tokenizer_sha256":"6eab0d9bcd5736cee484992b24e7a84459bee1cc3024c0e958a76842a57728c0","tokens":77654,"window_policy":"per-document-overlap-one-v1"},"wikipedia":{"documents":7232582,"files":[{"bytes":1293950757,"path":"documents.jsonl","sha256":"63704cfe04e221cf36f70f5df99d1336c592f202a894f581854d3d509fc876c7"},{"bytes":7118121139,"path":"mask.u8","sha256":"9a058493c2603e8e892ec8c5147e6f9097987e79c4af79cf1e6fc67961df0dd9"},{"bytes":14236242278,"path":"tokens.u16","sha256":"1d468ba5d5cada2aef125428241bdf8960cade6d5b236df39cdf1eace607cee7"}],"index_root":"24650037ea2a19718dd13f4ed9e632bfe731961ccd5b9431e57f3c89b788f17f","phase":"wikipedia","schema":"ovl.stream.v1","targets":7118121139,"token_dtype":"uint16-le","tokenizer_sha256":"6eab0d9bcd5736cee484992b24e7a84459bee1cc3024c0e958a76842a57728c0","tokens":7118121139,"window_policy":"per-document-overlap-one-v1"}},"tokenizer":{"backend":"tokenizers-bytelevel-bpe","controls":{"assistant":4,"bos":1,"eos":2,"pad":0,"user":3},"files":[{"bytes":991312,"path":"tokenizer.json","sha256":"6eab0d9bcd5736cee484992b24e7a84459bee1cc3024c0e958a76842a57728c0"}],"sample_actual_bytes":15979682,"sample_articles":628,"sample_byte_budget":16000000,"sample_policy":"ordered-whole-article-prefix-v1","sample_root":"3fb0298adc53ff1a797f8fd83ee7cf25846b8098816088b37870ca0d41495072","schema":"ovl.tokenizer.v1","text_id_offset":5,"vocab_size":32000},"validation_used_for_training":false}
\ No newline at end of file
diff --git a/frontend/data/raw/release/simple-run/README.md b/frontend/data/raw/release/simple-run/README.md
new file mode 100644
index 00000000..0d0c7826
--- /dev/null
+++ b/frontend/data/raw/release/simple-run/README.md
@@ -0,0 +1,142 @@
+# OpenVerifiableLLM simple run: a small language model you can check yourself
+
+A 23-million-parameter GPT trained from a seeded random start on one exact pass over English
+Wikipedia (2026-09-01 dump), then three passes over a pinned OpenAssistant conversation
+selection. Every training checkpoint is published, so anyone can recompute any part of the
+training bit for bit and confirm it matches the published record.
+
+Source code: [AOSSIE-Org/OpenVerifiableLLM](https://github.com/AOSSIE-Org/OpenVerifiableLLM)
+(the exact code used is also in `code/` here).
+
+## What is in this folder
+
+| File | What it is |
+|---|---|
+| `conversation-model.pt` | Final model (after the conversation phase) |
+| `base-model.pt` | Model after the Wikipedia pass, before the conversation phase |
+| `chain.jsonl` | Hash-linked training record: one entry per boundary with the training position, a digest of the full model and optimizer state, and the hash of the previous entry |
+| `recipe.json` | Model, batch, learning-rate schedule and seed |
+| `ckpt-XXXXX.pt` | Full checkpoint (model, optimizer, position) at every boundary |
+| `verifications.jsonl` | Which segments were recomputed, by whom, on which GPU and driver, and the result |
+| `release-hashes.txt` | SHA-256 of every model, checkpoint and record file |
+| `code/` | Exact code: `simple/ovl.py` (train, verify, chat), the scripts, and the library files it imports |
+
+## How the verification works
+
+Training is split into segments: boundary k to boundary k+1. Each segment can be recomputed on
+its own, starting from the published checkpoint k. A segment passes only if the recomputed state
+is identical, bit for bit, to the committed entry k+1. Because every segment starts from a
+published checkpoint, segments can be checked in any order, by different people, at the same
+time. When all segments match, the whole training computation is verified without one long
+replay.
+
+Also checkable without a GPU:
+- the record's hash links;
+- the starting weights, regenerated from the seed and equal to entry 0;
+- the published models, equal to the committed states;
+- every file, equal to `release-hashes.txt`.
+
+**Coverage at release: all 37 of 37 segments recomputed by the project, all MATCH.** That's 31
+Wikipedia segments plus 6 for the conversation phase, recomputed on a second RTX 5090 with a
+different NVIDIA driver from training (595.91.07 vs 570.195.03 for segments 0-9). Segment 21 was
+also recomputed on a fresh machine using only the public files and `verify_segment.sh`: MATCH. See
+`verifications.jsonl` for the GPU, driver and code version of every check.
+
+**How hard is it to forge one segment?** With N segments, M independent checkers who each pick one
+random segment catch a single forged segment with probability 1 − ((N−1)/N)^M. One checker who
+checks k different segments catches it with probability k/N.
+
+## Check a segment yourself
+
+Requirements: an NVIDIA RTX 5090 and the image `runpod/pytorch:1.0.2-cu1281-torch280-ubuntu2404`
+(PyTorch 2.8.0, CUDA 12.8). Bit-exact results hold for the same GPU type and software. They were
+observed across NVIDIA drivers 570.195.03 and 595.91.07. A different GPU architecture is not
+expected to reproduce the bits.
+
+```bash
+# download code/ from this folder, then:
+bash code/simple/verify_segment.sh # one random segment (~20 min)
+K=3 bash code/simple/verify_segment.sh # three random segments
+SEGMENTS="7 8" bash code/simple/verify_segment.sh # chosen segments
+```
+
+The script downloads the prepared data (22 GB, hash-checked), the record and only the
+checkpoints it needs, then prints MATCH or MISMATCH for each segment.
+
+## Which hardware reproduces the bits (`hardware-map.jsonl`)
+
+The same published segment (32→33) was recomputed with the same software (PyTorch 2.8.0, CUDA 12.8):
+
+| Hardware | Result |
+|---|---|
+| RTX 5090 (Blackwell, the training GPU type) | MATCH (and all 37 segments on a second 5090) |
+| RTX 4090 (Ada) | MISMATCH |
+| H100 80GB (Hopper) | MISMATCH |
+| x86 CPU (PyTorch 2.14) | MISMATCH |
+
+The seeded starting weights reproduce everywhere tested, including the CPU with a different
+PyTorch version (2.14), because they are made on the CPU. Bit-exact
+training reproduces on the same GPU architecture: two different NVIDIA drivers (570.195.03 and
+595.91.07) gave identical bits. Other architectures run different low-level kernels and do not.
+Checkers therefore need an RTX 5090. Anyone can rerun the probe with
+`code/simple/hwmap_check.sh` in `release/unlearning-3i-atlas/`.
+
+## Timestamped (`anchor.json`, `anchor.*.tsr`)
+
+`anchor.json` records this release's chain head, the SHA-256 of `chain.jsonl` and of
+`release-hashes.txt`, and the dataset commit. It was timestamped by two independent RFC 3161
+timestamp authorities (FreeTSA and DigiCert) at 2026-10-20 14:38:43 UTC. A timestamp proves the
+release existed unchanged no later than that time, so the record cannot be rewritten afterwards
+without detection. It does not prove when training happened. Check it with:
+
+```bash
+openssl ts -verify -in anchor.digicert.tsr -data anchor.json -CAfile /etc/ssl/certs/ca-certificates.crt
+curl -sO https://freetsa.org/files/cacert.pem; curl -sO https://freetsa.org/files/tsa.crt
+openssl ts -verify -in anchor.freetsa.tsr -data anchor.json -CAfile cacert.pem -untrusted tsa.crt
+```
+
+## Verifiable unlearning (`release/unlearning-3i-atlas/`)
+
+A fork of this run retrains from checkpoint 30 without one article (3I/ATLAS), with the removal
+recorded in its chain and every fork segment checked. It shares checkpoints 0–30 with this
+release byte for byte. See that folder's README for the exact leave-one-out effect.
+
+## Data
+
+- Prepared training streams: `prepared/8de1d600…/` in this dataset. Wikipedia: 7,232,582 articles,
+ 7,118,121,139 training targets, each seen exactly once. Conversation: 3,481 conversations,
+ 1,278,137 targets.
+- Raw inputs: `raw/3a7f5106…/` (the complete Wikipedia dump and the OpenAssistant oasst1 files), and
+ the signed source statement `source-commitments/ec263b5c…/`.
+- **Rebuild from the raw dump: PASS (2026-10-21).** All six preparation stages (corpus, tokenizer,
+ Wikipedia stream, conversation selection, conversation and validation streams) were rerun from
+ scratch from the raw dump and the OpenAssistant files. It used the pinned preparation code
+ (revision 3f882ad, Python 3.12.14, locked packages), after checking the signed source statement.
+ The rebuilt `preparation.json` is byte-identical to the published one: sha256
+ `8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68`, the prepared-data ID this
+ model was trained on. So the training streams provably come from that Wikipedia dump.
+ Reproduce with `code/simple/rebuild_prep.sh` (CPU only; uses about 100 GB of disk, so allow
+ 150 GB; about a day).
+
+## Training facts
+
+- Model: 6 layers, 384 dimensions, 6 heads, 512-token context, 32,000-token vocabulary, tied
+ embeddings. Seed 1234. AdamW, BF16 autocast with FP32 weights, deterministic CUDA kernels.
+- Wikipedia: 560,177 updates of 32 × 512 tokens, warmup then cosine learning rate 6e-4 → 6e-5.
+ Conversation: 3 passes at 1e-4.
+- Code versions: segments 0–18 were trained with `ovl.py` sha256 `202ac6ce…`
+ (`code/training-code/ovl-segments-00-18.py`). Segments 19 onward used `c4a942c0…`
+ (`code/training-code/ovl-segments-19-end.py`, identical to `code/simple/ovl.py`). The newer version
+ only changes CPU-side batch preparation and the CPU thread count. Proof that it produces
+ identical results: segments 19 onward were recomputed with the original batch loader and
+ matched, and segment 5 (trained with the original code) was recomputed with the newer code and matched.
+- The training host restarted once, at boundary 10. Training resumed from checkpoint 10, and
+ segment 10 (which spans the restart) matched.
+
+## Limits
+
+- This is a small model. It writes fluent fragments in an encyclopedia style. It often states
+ wrong facts and has only basic conversation ability.
+- "Verified" here means the published model is exactly what this training on these inputs
+ produces. It does not mean the model's answers are true.
+- Bit-exact checking needs the same GPU type and software stack as training.
diff --git a/frontend/data/raw/release/simple-run/anchor.digicert.tsr b/frontend/data/raw/release/simple-run/anchor.digicert.tsr
new file mode 100644
index 00000000..16004fda
Binary files /dev/null and b/frontend/data/raw/release/simple-run/anchor.digicert.tsr differ
diff --git a/frontend/data/raw/release/simple-run/anchor.freetsa.tsr b/frontend/data/raw/release/simple-run/anchor.freetsa.tsr
new file mode 100644
index 00000000..cbbbf952
Binary files /dev/null and b/frontend/data/raw/release/simple-run/anchor.freetsa.tsr differ
diff --git a/frontend/data/raw/release/simple-run/anchor.json b/frontend/data/raw/release/simple-run/anchor.json
new file mode 100644
index 00000000..402d7900
--- /dev/null
+++ b/frontend/data/raw/release/simple-run/anchor.json
@@ -0,0 +1,13 @@
+{
+ "chain_entries": 38,
+ "chain_head_index": 37,
+ "chain_head_sha256": "9edbcaddbb08ed20f3d655ac59d0aa57f6339a702d0fa1d3422856f5d8251a51",
+ "chain_jsonl_sha256": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "commit": "1dc7fb2a430d24c06c970309d332c4891916548c",
+ "dataset": "AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence",
+ "final_model": "ec9a2b31ca524613f791aba00f4f7f31e4a7bf4a8a921e0deb81c1a922d0958b",
+ "final_state": "934d681c99e5c3e10617e82dbbb0ae0ddd1ad4e32cf45e8e3a6d2ed94b69f200",
+ "path": "release/simple-run",
+ "release_hashes_sha256": "479ce030fa8022f0f92262849f88dfde4c9cf2a0748b8830357f3aa277080e8d",
+ "schema": "ovl.release-anchor.v1"
+}
diff --git a/frontend/data/raw/release/simple-run/recipe.json b/frontend/data/raw/release/simple-run/recipe.json
new file mode 100644
index 00000000..900c3703
--- /dev/null
+++ b/frontend/data/raw/release/simple-run/recipe.json
@@ -0,0 +1,25 @@
+{
+ "batch_size": 32,
+ "boundary_every": 18080,
+ "context": 512,
+ "conversation_epochs": 3,
+ "init": "normal-0.02-tied-v1",
+ "model": {
+ "attn_impl": "manual",
+ "dropout": 0,
+ "embed_dim": 384,
+ "max_seq_len": 512,
+ "num_heads": 6,
+ "num_layers": 6,
+ "vocab_size": 32000
+ },
+ "schedule": {
+ "conversation": "0.0001",
+ "floor": "0.00006",
+ "peak": "0.0006",
+ "warmup": 2000,
+ "wikipedia_updates": 560177
+ },
+ "seed": 1234,
+ "weight_decay": "0.01"
+}
\ No newline at end of file
diff --git a/frontend/data/raw/release/simple-run/release-hashes.txt b/frontend/data/raw/release/simple-run/release-hashes.txt
new file mode 100644
index 00000000..506e672a
--- /dev/null
+++ b/frontend/data/raw/release/simple-run/release-hashes.txt
@@ -0,0 +1,42 @@
+976c62e8b28db786c38dc2ff969339603d0ee917d830f2815d9e858d2a3c0ce3 base-model.pt
+c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327 chain.jsonl
+3dccf4a6d258ff5e150ee1ed590f4baff099e5a368d580e610ecf238b4ba8c22 ckpt-00000.pt
+ba524fd9691c4a849d1a3dac177af426df36d8e04d9c75fba2dbf036a4b515f9 ckpt-00001.pt
+627106799e630a9297770b31b0e1f66b1418215eea50c1cd3f3a23c48e138a33 ckpt-00002.pt
+0b64c3f0208d636b19bdf5970810c27cb2ceab33f18153915d64f6493201bc10 ckpt-00003.pt
+68f07c741473f7ad0c2c61d52dc25c4d8a9c441382d348f9c1a97d215bba452e ckpt-00004.pt
+29cdefeb28098ba4572869655b58c9dd2e771edc3717f0112d700477b74defb8 ckpt-00005.pt
+3e861cd5457c1a1566c8ebcee2a712feca2f3e5603ad46436d393aca5cbb5999 ckpt-00006.pt
+400734c784b59c9363fdbdd745f7f0f6d70c1be09d2c747976bc2b4fae01b64b ckpt-00007.pt
+fe5352356351e4d9e4b0abd59f279c7a2ed98888177fbb773fd1f1983fefe83f ckpt-00008.pt
+41819daf70a409e200f5189ab45ae96293716794733ad534e4843ac3f8b1982e ckpt-00009.pt
+75cd5863903d9f595e2d50cacea3ec0530f41c154d4ec8817f41376b6f222e3f ckpt-00010.pt
+46ece4b519e8624a2b41856b1ecfa9a5daf4994616a9bdd8d941625cb09a32ed ckpt-00011.pt
+8b0e19692ccc6c6e6e0eb745633ae2dd2c4e86d0ca84b8ea1c7f1f81a888b892 ckpt-00012.pt
+3ac79c55fe528bcc62bd7a7a047e2b2a19e2d2e494c85e26301b0fc79f345aee ckpt-00013.pt
+ad933ae52b14ff5de72624c5dc7af9b3e5464155b9c3ed84bd43bd5be4f737c3 ckpt-00014.pt
+2cfddc6c26fb7e8dc99c94b6fb39007a4937b67e1c8d852f2561d990e857cb62 ckpt-00015.pt
+3729909ae0f85b79377956ad8defdaaeceac0cd000a1c47e582f38685f4158d6 ckpt-00016.pt
+9f8537d432d78b254dcba86e7bd987246d928bbc837950ffe2536ba989747c41 ckpt-00017.pt
+a09df5692aac7e42a0430fd225c75937bf75c85a9dfb77b899b4cb956a8c51d1 ckpt-00018.pt
+ef18f34f8ac17a2581193ffc681a927f655bdadce4c6ca2de0a095d72094bb24 ckpt-00019.pt
+6bda17b7f79347cc57cb1325215a3a68f9f2357ee5b97f2c88e353189244fcdf ckpt-00020.pt
+7df62e3801530777a4491bcecb0199a2b5628a9de61da30f5f6513c74c028095 ckpt-00021.pt
+23d9271d4f4c49e8e04a13f498ed0a89d57c3f80705044c2c8fe10eecc895896 ckpt-00022.pt
+2b68d53231a0d3a639312ed45eeb2afef3720f93824819843dd2c9fb68f2fc4c ckpt-00023.pt
+8a06f96345a0ff23933d6b946a4fc88ad63a6b43a618a91a1639267cf1c0e23b ckpt-00024.pt
+7bed06bf3566e18595a190bc1418fe5735689a2c47d280d857c0a5f68ba73a7f ckpt-00025.pt
+31e21be4135f53a912312fae5f26d9b2eefc344171b8935e295c655f49c3b701 ckpt-00026.pt
+2efcee93267b438152c35cfc1975fd0d8d2dcec804b2713fcc11bdd8602752cf ckpt-00027.pt
+671cf6928fc370a464fade45cf5565a65c019c9888b6c9d8962230364cc4c5b4 ckpt-00028.pt
+082195ad124ad61287e94f224c6672b2175b1c1c35f06baee2b56adbc12f92da ckpt-00029.pt
+febe492c2c87335b078c910894172bcf8f572b853d807b8f24da99e9e0127979 ckpt-00030.pt
+c687187b7daaa97d0fd8c96df302313e051febc29d64b5ef4d5b5775d684244b ckpt-00031.pt
+b49bfa976a6aa59fc54b9511fccc4745a4493b81cc58a3ff310ffecf7a92f45e ckpt-00032.pt
+8fa1f26811ef37b235c968c4204044983895b217e00db731d57f3a2cecda179e ckpt-00033.pt
+5fe1e5af0d612046c7617d079181090e3ac0898411fe39900e05346c90b29aeb ckpt-00034.pt
+4766216588d357cdbe5bdd35e4b9534317d59f8b1273b5b722a390e748ae3beb ckpt-00035.pt
+1ca4bd559c51e9d83ba2ea84a85e518e0309d0844d964535868339a16b66e239 ckpt-00036.pt
+88947898dab959fd82f954f81681103bac7f6b770f4bcc13d6eac29ca1795ecb ckpt-00037.pt
+149cfae13c4523a1010c52161e13babf76c9ddc01f34fa1a8b580677b733a64c conversation-model.pt
+28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d recipe.json
diff --git a/frontend/data/raw/release/unlearning-3i-atlas/README.md b/frontend/data/raw/release/unlearning-3i-atlas/README.md
new file mode 100644
index 00000000..8f36ee38
--- /dev/null
+++ b/frontend/data/raw/release/unlearning-3i-atlas/README.md
@@ -0,0 +1,60 @@
+# Verifiable unlearning: the simple-run model without the "3I/ATLAS" article
+
+This folder is a **fork** of the published run in `release/simple-run/`. It is the same training,
+except that one Wikipedia article was never trained on: **3I/ATLAS** (the interstellar comet;
+page 80340464, revision 1371028825, 10,395 training targets). Every step can be checked, so the
+claim "this model never saw that article" is verifiable rather than trusted.
+
+## Why the claim holds
+
+1. **Shared history, byte for byte.** Entries 0–30 of this `chain.jsonl` are identical to entries
+ 0–30 of `release/simple-run/chain.jsonl`. The article's first training target (6,915,731,634)
+ comes after the cursor at boundary 30 (6,901,668,826), so no checkpoint up to 30 ever trained
+ on it.
+2. **A recorded fork.** Entry 31 (kind `fork`) has exactly the state of entry 30. Its control adds
+ `exclude: {"wikipedia": [[6915731634, 10395]]}`, the article's exact target range. `verify`
+ checks that a fork entry changes nothing except declaring the exclusion, and that the excluded
+ range was not yet reached.
+3. **Training without it.** From entry 31 on, the loader skips that document. Its tokens are
+ never used as inputs or targets, because windows never cross documents. The per-step coverage
+ check accepts a gap in target ids **only** at the recorded range, so any other missing or
+ repeated data would stop training.
+4. **Checked.** Every fork segment (30→31 through 37→38) was recomputed from its starting
+ checkpoint and matched bit for bit, including the retrained last Wikipedia segment and the
+ whole conversation phase. The fork's `conversation-model.pt` matches its final entry. See
+ `verifications.jsonl`. They ran on the pod that trained the fork. The fork entry and the
+ retrained Wikipedia segment (30→31, 31→32) were also recomputed on a separate, fresh RTX 5090
+ using only the public files: MATCH. Anyone can repeat them (below).
+
+## What removing one article changed (leave-one-out, `loo-results.json`)
+
+| | Original (trained on 3I/ATLAS) | This fork (never saw it) |
+|---|---:|---:|
+| Loss on the 3I/ATLAS article's own text | 3.3604 | 3.3860 (+0.0256) |
+| Mean loss on 50 control articles from the same segment (both trained on them) | 2.8710 | 2.8712 (+0.0002) |
+
+Removing the article raised the loss on its own text about 100 times more than on articles both
+models saw. That is the exact, causal effect of training on that one article, with no
+approximation. A 23M model that sees each article once memorises little, and its generated text
+about 3I/ATLAS is wrong either way. The point is that the effect can be measured and verified,
+not that this small model knew the article.
+
+## Files
+
+- `chain.jsonl`, `recipe.json`: the fork's record (0–30 shared, 31 = fork, 32–38 new).
+- `ckpt-00030.pt`: identical bytes to the original release's checkpoint 30.
+ `ckpt-00031.pt`–`ckpt-00038.pt`: the fork's checkpoints.
+- `base-model.pt`, `conversation-model.pt`: the models that never saw the article.
+- `verifications.jsonl`, `loo-results.json`, `release-hashes.txt`.
+- `code/`: the exact code. `simple/ovl.py` adds the `fork` command; with no exclusion it trains
+ identically to the released code (checked on a real-data slice: identical chains).
+ `simple/loo_eval.py` produces `loo-results.json`.
+
+## Check it yourself (RTX 5090, image runpod/pytorch:1.0.2-cu1281-torch280-ubuntu2404)
+
+```bash
+# with the prepared data from prepared/8de1d600…/ and this folder as RUN:
+python code/simple/ovl.py verify --data PREP --run RUN --segment 30 31 32 33 34 35 36 37 \
+ --weights RUN/conversation-model.pt
+```
+Segment 31→32 (the retrained Wikipedia segment) takes about 18 minutes; the rest take seconds.
diff --git a/frontend/data/raw/release/unlearning-3i-atlas/loo-results.json b/frontend/data/raw/release/unlearning-3i-atlas/loo-results.json
new file mode 100644
index 00000000..3eeb52bd
--- /dev/null
+++ b/frontend/data/raw/release/unlearning-3i-atlas/loo-results.json
@@ -0,0 +1,49 @@
+{
+ "removed_documents": [
+ [
+ "859cf6cc1d13007d165025247cacaf463ff8a4ad700b19e476f7626e24169116",
+ "80340464",
+ "1371028825"
+ ]
+ ],
+ "control_documents": 50,
+ "original_base": {
+ "removed_loss": [
+ 3.3604
+ ],
+ "control_loss_mean": 2.871,
+ "completions": {
+ "3I/ATLAS is": " a type of electronic soundtrack album by the American musician and producer, DJ and producer, released in 2021. The album was recorded in the United States and Canada, and was released in the United Kingdom",
+ "The interstellar comet 3I/ATLAS": " is a comet in the interstellar medium of the Milky Way. It is a member of the group of stars in the interstellar medium.\n\nThe comet is a member of the group of stars in the",
+ "Oumuamua was the first interstellar object": " to be discovered in the early 20th century.\n\nOumuamua may also refer to:\n\n Oumuamua (surname), a surname\n Oumuam"
+ },
+ "removed_minus_control": [
+ 0.4894
+ ]
+ },
+ "fork_base": {
+ "removed_loss": [
+ 3.386
+ ],
+ "control_loss_mean": 2.8712,
+ "completions": {
+ "3I/ATLAS is": " a type of electronic soundtrack album by the American musician and producer, DJ and producer, released in 2021. The album was recorded at the University of California, Berkeley, and was released on the label",
+ "The interstellar comet 3I/ATLAS": " is a comet in the constellation of Leo. It is a member of the Solar System, and is a member of the Solar System.\n\nThe comet is a member of the Solar System, and",
+ "Oumuamua was the first interstellar object": " to be discovered in the early 20th century.\n\nOumuamua may also refer to:\n\n Oumuamua (surname), a surname\n Oumuam"
+ },
+ "removed_minus_control": [
+ 0.5148
+ ]
+ },
+ "original_conversation": {
+ "completions": {
+ "chat": "Here's an example of how you can use the \"Save the World\" algorithm to create a new version of the \"Save the World\" algorithm:\n\n```\n\n#"
+ }
+ },
+ "fork_conversation": {
+ "completions": {
+ "chat": "Here's an example of how you can use the \"Save the World\" algorithm to create a new version of the \"Save the World\" algorithm:\n\n```\n\n#"
+ }
+ },
+ "base_weight_relative_distance": 0.003339
+}
diff --git a/frontend/data/raw/release/unlearning-3i-atlas/recipe.json b/frontend/data/raw/release/unlearning-3i-atlas/recipe.json
new file mode 100644
index 00000000..900c3703
--- /dev/null
+++ b/frontend/data/raw/release/unlearning-3i-atlas/recipe.json
@@ -0,0 +1,25 @@
+{
+ "batch_size": 32,
+ "boundary_every": 18080,
+ "context": 512,
+ "conversation_epochs": 3,
+ "init": "normal-0.02-tied-v1",
+ "model": {
+ "attn_impl": "manual",
+ "dropout": 0,
+ "embed_dim": 384,
+ "max_seq_len": 512,
+ "num_heads": 6,
+ "num_layers": 6,
+ "vocab_size": 32000
+ },
+ "schedule": {
+ "conversation": "0.0001",
+ "floor": "0.00006",
+ "peak": "0.0006",
+ "warmup": 2000,
+ "wikipedia_updates": 560177
+ },
+ "seed": 1234,
+ "weight_decay": "0.01"
+}
\ No newline at end of file
diff --git a/frontend/data/raw/release/unlearning-3i-atlas/release-hashes.txt b/frontend/data/raw/release/unlearning-3i-atlas/release-hashes.txt
new file mode 100644
index 00000000..074471a2
--- /dev/null
+++ b/frontend/data/raw/release/unlearning-3i-atlas/release-hashes.txt
@@ -0,0 +1,13 @@
+ff30d7f4bf9ec41f0514d63a4d8bc1a74172481b89e07608383c0c3513f83441 base-model.pt
+98ffe339f9a0e20458b2615597fdb9ca23b0b12a5bac3873c9327893e724e6c1 chain.jsonl
+febe492c2c87335b078c910894172bcf8f572b853d807b8f24da99e9e0127979 ckpt-00030.pt
+1728660ffdc7985f08b68721c7419523def8dff5dc0d19278057a23028723004 ckpt-00031.pt
+c91c03ac526a3a7e48b1053eacbf46f798fcc076d0dbbf562b72fdbf50191b3c ckpt-00032.pt
+b98f60b056330d0b38d68e1c1977be7c54c17cbf8d95b8d997550ec33056adbb ckpt-00033.pt
+2791741e1c6477954dd0b3177d29cfc4544a0d681375c841524edd774881b182 ckpt-00034.pt
+276ce1ed5d85fa8da957e6a501bde1b1add80eb9aa80d977a96d5cbd1c83dbd8 ckpt-00035.pt
+cecbdf2f59bc3a260fe94491da2eb01b3055997b597e9a8c3be6e240f9742211 ckpt-00036.pt
+b2467b81ce20508df5007949e56cbe06a55bf22ed94c14a376ffa05033c97ced ckpt-00037.pt
+650bf7c046b4e295d0f19ffeb6cca0660814a8fc53c3433db6f8cbb84510f039 ckpt-00038.pt
+e41be3a27bbcf16ce7a5224eb4766e88b2abe09fe6ddb6aadea399b9db4472d4 conversation-model.pt
+28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d recipe.json
diff --git a/frontend/data/upstream/1049d2a7/README.md b/frontend/data/upstream/1049d2a7/README.md
new file mode 100644
index 00000000..5343ea0d
--- /dev/null
+++ b/frontend/data/upstream/1049d2a7/README.md
@@ -0,0 +1,219 @@
+# OpenVerifiableLLM: Language models you can check yourself
+
+
+
+
+
+
+ Why? |
+ Goals |
+ Status |
+ How it works |
+ Getting started |
+ Join us
+
+
+
+
+
+
+
+
+
+
+**First release:** a 23M-parameter model trained on one exact pass over all of English Wikipedia,
+with every one of its 37 training segments recomputed bit for bit.
+[Get it on Hugging Face](https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/tree/main/release/simple-run).
+
+
+
+
+
+**Checkable, not just published**
+
+- Every training checkpoint is published and hash-linked
+- Anyone can recompute any segment and get the same bits
+- The training data rebuilds byte for byte from the raw Wikipedia dump
+
+**Cheap to check, in parallel**
+
+- One segment takes about 20 minutes on one GPU, about a dollar rented
+- Segments are independent: many people, any order, at the same time
+- A one-click checker on RunPod prints one line to share
+
+**Small and readable**
+
+- One 631-line file trains, verifies, forks and chats: `simple/ovl.py`, plus about 1,000 lines of
+ model and data code it imports from `src/`
+- Timestamped by two independent authorities
+- Open data, open code, open results, GPL-3.0
+
+
+
+## Why OpenVerifiableLLM?
+
+Most model releases ask you to trust a list of datasets and a training description. You can't
+check either: training is expensive, nondeterministic, and happens on someone else's machines.
+That matters more as models are used for decisions, and as questions about what a model was
+trained on (copyright, privacy, contamination of benchmarks) become legal and scientific
+questions rather than marketing ones.
+
+OpenVerifiableLLM makes the training itself the evidence. The run is cut into segments. Each
+segment boundary commits to the full model and optimizer state, the exact position in the data,
+and the previous boundary. Training is made deterministic, so recomputing a segment from its
+published starting checkpoint gives exactly the same bits. Anyone with the same GPU type can
+therefore check any part of the run without trusting the publisher, and checking all parts
+verifies the whole computation.
+
+Because the record pins the exact data position, it also allows things that are normally
+impossible to show. For example, a model can be proven never to have trained on a given article:
+the run is forked before it reaches the article, the article is removed, and the removal is recorded in
+the chain.
+
+## Goals
+
+We are building OpenVerifiableLLM to support:
+
+- Training runs where every step can be recomputed and compared bit for bit
+- Training data traceable to its raw public source
+- Exact coverage: which data was seen, in which order, exactly once
+- Checks that are cheap, independent and parallel
+- Records that can't be quietly rewritten
+- A training loop simple enough to review in an afternoon
+
+We also have explicit _non-goals_:
+
+- Proving a model's answers are correct. We verify the computation, not the content
+- Bit-exact results across different GPU architectures
+- Large models before the method is shown on small ones
+
+See [goals](docs/project/goals.md) for the full list and the principles behind it.
+
+## Project status
+
+The first verified model is **released**. It is small (23M parameters): it writes fluent,
+encyclopedia-style text, often gets facts wrong, and holds a basic conversation. The method is
+the point. It works the same way for bigger models, but a full check costs as much compute as the
+training, so checking a large model in practice means many people each recomputing a random sample
+of segments.
+
+What has been shown:
+
+- **37 of 37 segments** recomputed bit for bit on a second RTX 5090. Also from public files
+ only, on fresh machines: segments 8 and 21
+- **Data provenance**: the training data rebuilt from the raw 2026-09-01 Wikipedia dump is
+ byte-identical
+- **Robustness**: a host failure, a mid-run code change and a driver change all happened during
+ training, and every affected segment still matched
+- **Verifiable exclusion**: a fork that provably never trained on one article the run hadn't
+ reached yet, with the article's effect measured (one run, no variance estimate). This is exact
+ retraining without the article, not unlearning of something already learned
+- **Hardware scope**: RTX 5090 reproduces the bits; RTX 4090, H100 and CPU do not
+
+Open limitations (details in [what "verified" means](docs/design/simple_run.md#what-verified-means)):
+
+- Checkers need the training GPU's architecture (RTX 5090), and they trust the same PyTorch/CUDA
+ toolchain. A deterministic error in that toolchain would match on every machine
+- All checks so far were run by the project, on separate machines. **We need independent
+ checkers**: see [Join us](#join-us). Catching one forged segment out of 37 with 95% probability
+ takes about 110 independent random checks
+- Check results are self-reported text lines. They aren't signed, and nothing proves a checker
+ picked its segment at random
+- The timestamp proves the record existed by 20 Oct 2026, not how the training was done
+
+For the full results, cost, timeline and lessons learned, see
+[the simple run](docs/design/simple_run.md). For what's next, see the
+[roadmap](docs/project/roadmap.md).
+
+## How it works
+
+```text
+ raw Wikipedia dump ──rebuild──▶ prepared tokens ──┐
+ ▼
+ entry 0 ─▶ entry 1 ─▶ entry 2 ─▶ … ─▶ entry 37 chain.jsonl: each entry hashes the full
+ │ │ │ │ model + optimizer state, the data
+ ckpt 0 ckpt 1 ckpt 2 … ckpt 37 position and the previous entry
+
+ check segment k: load ckpt k ─▶ train to boundary k+1 ─▶ compare with entry k+1, bit for bit
+```
+
+- **Determinism**: BF16 autocast with FP32 master weights, deterministic CUDA kernels, no TF32,
+ a fixed cuBLAS workspace, and a learning rate that is a pure function of the step
+- **Exact coverage**: every step checks that its data continues exactly where the last one
+ stopped, and each phase must end with every item covered once
+- **Timestamps**: every chain entry is stamped by two RFC 3161 authorities as it is written
+
+Details: [the simple run](docs/design/simple_run.md#how-it-works).
+
+## Getting started
+
+Check that the released model matches its timestamped record, without a GPU. This is a
+consistency check: it recomputes no training. The real verification is the segment recomputation
+below.
+
+```bash
+pip install huggingface_hub torch numpy rfc8785==0.1.4 tokenizers==0.23.2 mwparserfromhell==0.7.2 \
+ "safetensors>=0.4.5,<1.0" "pynacl>=1.5,<2.0"
+hf download AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence \
+ --repo-type dataset --include "release/simple-run/*" --exclude "*/ckpt-*" --local-dir ovl
+cd ovl/release/simple-run
+sha256sum -c --ignore-missing release-hashes.txt
+openssl ts -verify -in anchor.digicert.tsr -data anchor.json -CAfile /etc/ssl/certs/ca-certificates.crt
+# Verification: OK (DigiCert stamped anchor.json on 2026-10-20)
+git clone -q --depth 1 --branch v1.0.1 https://github.com/AOSSIE-Org/OpenVerifiableLLM ovl-code
+OVL_DEVICE=cpu python ovl-code/simple/ovl.py verify --run . --weights conversation-model.pt
+# anchor anchor.json: chain head MATCH (38 entries)
+# weights conversation-model.pt: MATCH chain entry 37
+```
+
+Use `ovl.py` from the v1.0.1 tag, as above. It fails if `anchor.json` is missing. The copy in the
+download's `code/` folder predates the anchor check, so it doesn't compare the record with its
+timestamped anchor.
+
+Recompute a training segment on an RTX 5090, in one click:
+[deploy the RunPod template](https://console.runpod.io/deploy?template=mai1ozh35g), wait about an
+hour, and read the result line in the logs. Step by step:
+[check a training segment](docs/guides/check_a_segment.md).
+
+Learn more:
+
+- [The simple run](docs/design/simple_run.md): method, results, cost, timeline, lessons
+- [Goals](docs/project/goals.md), [roadmap](docs/project/roadmap.md) and
+ [FAQ](docs/project/faq.md)
+- [The `ovllm verify` artifact verifier](docs/guides/ovllm_verify.md) and the reproducibility
+ study
+- [Run the model in Ollama](docs/guides/ollama.md): `ollama run ryoari/openverifiablellm`
+- [All docs](docs/README.md)
+
+### Repository layout
+
+| Path | What it is | Status |
+|---|---|---|
+| [`simple/`](simple/README.md) | The verifiable training loop: `ovl.py` (train, verify, fork, chat), segment checks, timestamps, the data rebuild. Start here | active |
+| [`docs/`](docs/README.md) | Design, project and guide docs | active |
+| `tests/` | Tests. `tests/simple/` covers `simple/ovl.py` and runs on a CPU | active |
+| `src/ovllm.py`, `src/verifier.py`, `src/publish.py` | The [`ovllm verify` artifact verifier](docs/guides/ovllm_verify.md) | active |
+| `src/` (other modules), `run_experiment.py`, `sweep.py`, `demo.py`, [`RUNBOOK.md`](RUNBOOK.md) | The July 2026 reproducibility study and its runbook | reference |
+| `notebooks/`, `experiments/`, `paper/`, `data/` | Study notebooks, the paper draft, a small sample dataset | reference |
+| `proofs/`, `keys/` | Recorded audit results and the study's public signing key | evidence |
+| `project/` | Published evidence, source commitments and technical reports. Pinned by hash: don't edit | evidence |
+| `src/ovl_pipeline/`, `scripts/`, `requirements/*.lock` | The earlier production pipeline and its locked environments. The simple run uses its data preparation | frozen |
+| `Legacy/` | The pre-GSoC codebase | frozen |
+| [`docs/legacy/`](docs/legacy/) | Superseded planning notes | frozen |
+| [`brand/`](brand/Brand.md) | Logo, colours and typography | active |
+| [`MAINTAINERS.md`](MAINTAINERS.md), [`BestPracticesChecklist.md`](BestPracticesChecklist.md) | Who maintains the project, AOSSIE best-practices status | active |
+
+## Join us
+
+- **Check a segment.** Have access to an RTX 5090, or a dollar for an hour of one? Run the
+ [one-click check](docs/guides/check_a_segment.md#one-segment-one-click) and post the result
+ line. Every independent check makes the release more credible
+- **Contribute.** Read [CONTRIBUTING.md](CONTRIBUTING.md). New work targets `simple/` on `main`
+- **Talk to us** on the [AOSSIE Discord](https://discord.gg/hjUhu33uAn) or in
+ [GitHub issues](https://github.com/AOSSIE-Org/OpenVerifiableLLM/issues)
+
+OpenVerifiableLLM is an [AOSSIE](https://aossie.org) project, licensed under
+[GPL-3.0](LICENSE). Community standards follow AOSSIE's
+[code of conduct](https://github.com/AOSSIE-Org/.github/blob/master/CODE_OF_CONDUCT.md) and
+[security policy](https://github.com/AOSSIE-Org/.github/blob/master/SECURITY.md).
diff --git a/frontend/data/upstream/1049d2a7/docs/design/simple_run.md b/frontend/data/upstream/1049d2a7/docs/design/simple_run.md
new file mode 100644
index 00000000..e7010989
--- /dev/null
+++ b/frontend/data/upstream/1049d2a7/docs/design/simple_run.md
@@ -0,0 +1,228 @@
+# The simple run: a fully recomputable Wikipedia model
+
+This is the project's first production result: a 23.1M-parameter GPT trained from a seeded random
+start on exactly one pass over the complete eligible English Wikipedia (2026-09-01 dump), then a
+pinned conversation phase. Anyone with the same GPU type can recompute any part of the training
+bit for bit and confirm the published weights are exactly what this training on these inputs
+produces.
+
+- Release: Hugging Face dataset
+ [`AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence`](https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence),
+ folders `release/simple-run/` (the model) and `release/unlearning-3i-atlas/` (the unlearning fork).
+ The release README there is the user guide; this page is the project record.
+- Code: `simple/` in this repository. `simple/ovl.py` (631 lines) trains, verifies and chats. It imports
+ the model (`src/model.py`) and the data and initialization helpers (`src/ovl_pipeline/data.py`,
+ `training.py`), about 1,000 lines in all. The training data was prepared by the earlier pipeline.
+ The exact code used for the run is also published in `release/simple-run/code/`.
+
+## How it works
+
+- **Data provenance.** The raw dump and the OpenAssistant files are published with checksums and a
+ signed source statement. A pinned preparation pipeline turns them into token streams: 7,232,582
+ articles and 7,118,121,139 training targets for Wikipedia; 3,481 conversations and 1,278,137
+ targets for the conversation phase.
+- **Exact coverage.** Every training step checks that its targets continue exactly where the
+ previous step stopped. Each phase must end with every target covered once.
+- **Determinism.** BF16 autocast with FP32 master weights, deterministic CUDA kernels, no TF32,
+ no reduced-precision reductions, a fixed cuBLAS workspace. The learning rate is a pure function
+ of the step.
+- **Segmented commitments.** A boundary every 18,080 updates, plus the phase boundaries: 38 entries
+ and 37 segments. Each entry in `chain.jsonl` records the training position and a SHA-256 over the
+ full model and optimizer state, and links to the previous entry's hash. Every boundary checkpoint
+ is published.
+- **Verification.** Segment k is checked by loading checkpoint k, recomputing to boundary k+1 and
+ comparing the full state digest bit for bit. Segments are independent, so they can be checked in
+ any order, by different people, at the same time. Checking all of them verifies the whole
+ training computation.
+- **Timestamps.** `simple/stamp.py` sends every new chain entry to two RFC 3161 timestamp
+ authorities (FreeTSA and DigiCert), so the record cannot be rewritten later without detection.
+ The release itself was anchored after training. Per-boundary stamping was added after the run.
+
+## Results
+
+| Measurement | Value |
+|---|---|
+| Training | 560,177 Wikipedia + 441 conversation updates (batch 32 × 512 tokens) |
+| Segments recomputed by the project on a second RTX 5090 | **37 / 37 MATCH** |
+| Recomputed from public files only, on fresh machines | segments 8 and 21 MATCH |
+| Starting weights regenerated from the seed | MATCH on every device tested, including CPU |
+| Release anchor timestamped | FreeTSA and DigiCert, 2026-10-20 14:38:43 UTC |
+| Rebuild of the training data from the raw dump | byte-identical `preparation.json` (sha256 `8de1d600…ba68`) |
+
+**Unplanned events that the method survived:**
+- A host failure mid-run. Training resumed from checkpoint 10, and segment 10, which spans the
+ restart, matched.
+- A mid-run code change to the CPU-side loader and thread pool. Later segments were rechecked with
+ the old loader, and an earlier segment with the new one. All matched.
+- A driver change (570.195.03 → 595.91.07) gave identical bits.
+
+**Hardware scope** (segment 32→33, PyTorch 2.8.0, CUDA 12.8):
+
+| Hardware | Result |
+|---|---|
+| RTX 5090 (Blackwell, the training GPU) | MATCH |
+| RTX 4090 (Ada) | MISMATCH |
+| H100 80GB (Hopper) | MISMATCH |
+| x86 CPU (PyTorch 2.14) | MISMATCH |
+
+Bit-exactness holds within one GPU architecture, regardless of driver. Checkers therefore need the
+training GPU's architecture. This is the method's main trust assumption.
+
+**Verifiable exclusion** (the release folder is named `unlearning-3i-atlas`). A fork at boundary 30 removed one article that the run had not yet
+reached ("3I/ATLAS", 10,395 targets). The fork shares checkpoints 0–30 byte for byte, records the
+removed range in its chain, and its coverage check accepts a gap only at that range. Every fork
+segment matched. Loss on the article's text went from 3.3604 to 3.3860 (+0.0256). Mean loss on 50
+control articles from the same segment, which both models saw, went from 2.8710 to 2.8712
+(+0.0002). One run, no variance estimate. This proves the fork never trained on the article. It
+is exact retraining without a range the run hadn't reached, not unlearning in the research sense of
+removing something a model already learned.
+
+## Check it yourself
+
+- **No GPU:** check the hash links, the seeded initialization, the published weights and the
+ file hashes with `python simple/ovl.py verify --run RUN --weights conversation-model.pt`, and
+ `sha256sum -c release-hashes.txt`.
+- **One segment on an RTX 5090 (about an hour, about US$1–1.50 rented):** deploy the public RunPod
+ template "OpenVerifiableLLM segment check"
+ (). It runs `simple/checker_pod.sh`
+ and prints one result line. To run it by hand: `bash code/simple/verify_segment.sh` from the
+ release.
+- **Timestamps:** `python simple/stamp.py RUN --check`, or the `openssl ts -verify` commands in the
+ release README.
+
+## Timeline
+
+All times UTC.
+
+| When | What |
+|---|---|
+| July 2026 | First complete deterministic run and segmented replay audit (116M model on A40): same-GPU recomputation matched, other architectures did not |
+| September 2026 | 2026-09-01 Wikipedia dump and OpenAssistant files published with a signed source statement; prepared token streams published |
+| mid-Sep to 19 Oct | Work on a large production pipeline (rental, transfer and budget guards). No training on real data happened in this period |
+| 19 Oct | Switched to one script, `simple/ovl.py`, and segmented verification |
+| 19 Oct 15:04 | Training starts on one RTX 5090. A second RTX 5090 mirrors every checkpoint off the training machine and recomputes each segment as it closes |
+| 19 Oct ~20:30 | Training host fails; 19 minutes down; resumed from checkpoint 10 |
+| 20 Oct ~02:15 | From boundary 19, the CPU thread pool is sized to the container quota: 120 → 63 ms per update |
+| 20 Oct 06:46 | Wikipedia pass and conversation phase finished (15.7 hours in total) |
+| 20 Oct | All 37 segments MATCH on the second GPU. Release uploaded and hash-checked; anchor timestamped at 14:38:43 |
+| 20–21 Oct | Full rebuild of the training data from the raw dump: byte-identical. Hardware map, unlearning fork, fresh-machine checks |
+| 21 Oct | Per-boundary timestamps (`simple/stamp.py`) and the one-click checker (`simple/checker_pod.sh` plus a RunPod template); first check: segment 8 MATCH |
+| 22–26 Oct | Contributor fixes to `verify`: clearer weights message (#213), fail when no checks ran (#207), 17 CPU tests for `simple/ovl.py` (#208); a chain-head check against `anchor.json` (#210) is in review |
+| 25 Oct | `simple-production-loop` merged into `main` (#217); 32 pull requests against the frozen pipeline closed |
+| 26 Oct | Docs reorganized (design, project, guides), project logo added (#219) |
+
+## Cost
+
+Prices are RunPod list prices at the time: US$1.19/h for an RTX 5090 and US$0.50/h for the CPU
+pod used for the data rebuild. Storage and transfer are not included.
+
+| Item | Time | Cost |
+|---|---|---|
+| Training (one RTX 5090) | 15.7 h, including a 19-minute outage and about 9 h at half speed before the CPU fix | about US$19 |
+| Checking all 37 segments (second RTX 5090) | 10–16 h: one recomputation of every segment, at full or early speed | about US$12–19 |
+| Rebuilding the training data from the raw dump (CPU pod) | about 23 h, plus a 3 h 20 min first attempt lost to a host reboot | about US$13 |
+| Unlearning fork, hardware map, fresh-machine checks | a few GPU hours on RTX 5090, RTX 4090 and H100 pods | a few US$ |
+| Pods kept running until the upload was verified | several hours on two 5090s | the largest avoidable cost |
+
+In total, the release took roughly **US$55–60** of rented compute.
+
+**A clean repeat** at full speed, with no outage and no idle time, would cost about **US$21** for
+training plus checking every segment. These numbers come from the measured throughput (63 ms per
+update) in `simple/bench_sizes.py`. The same calculation for bigger models:
+
+| Model | Training + full check |
+|---|---|
+| 23M | about US$21 |
+| 42M | about US$34 |
+| 70M | about US$52 |
+| 110M | about US$73 |
+
+Checking is cheap per person: one segment is about 20 minutes of GPU time. Sampling also helps.
+With N segments, M independent checkers who each pick one random segment catch a single forged
+segment with probability 1 − ((N−1)/N)^M.
+
+## Things to avoid
+
+- **Don't put a verification method into the goal.** At one point the goal required one long
+ continuous replay. Segmented recomputation verifies the same computation, in parallel, at a
+ fraction of the risk. The goal should name the property ("every step is checkable"), not the
+ procedure.
+- **Don't build safety machinery before anything runs.** A month of rental guards, transfer checks
+ and budget reservations produced no training on real data. The simple run started the morning
+ after the switch and finished in under a day.
+- **Don't trust the host's CPU count inside a container.** PyTorch saw 120 cores and started 120
+ threads, but the container's quota was 12.75 CPUs. It was throttled every scheduling period, and
+ the GPU sat about 50% idle. Read `/sys/fs/cgroup/cpu.max` and size thread pools to it.
+- **Don't keep the only copy of a run on container disk.** On RunPod, `/workspace` on container disk
+ is wiped when the pod stops. A second machine mirrored every checkpoint as it was written, which
+ also made it the natural place to check each segment.
+- **Don't expect bits to match across GPU architectures.** Pin the GPU type and the container image
+ tag, and say so to checkers up front.
+- **Don't let a check pass with nothing checked.** `all([])` is `True` in Python. `verify` must
+ fail when it ran no checks (#207).
+- **Don't leave paid pods idle.** Copy what you need off, verify it, then terminate. Most of the
+ difference between US$21 and the real total was outages, slow early steps and idle time.
+- **Don't run day-long jobs without a way to resume.** The first data rebuild was lost to a host
+ reboot after 3 h 20 min.
+
+## Lessons learned
+
+- **Run something small end to end first.** July's small complete run worked. The attempt to
+ guarantee everything before starting cost a month.
+- **Measure the platform.** The single largest speed-up (about 2×) came from a cgroup CPU quota, not
+ from the model or the GPU.
+- **Verification that tolerates real life is worth more than verification that forbids it.** A host
+ failure, a code change and a driver change all happened mid-run. Because every segment is checked
+ on its own, each event became one more matched segment rather than a broken proof.
+- **Recording the data position makes new things cheap.** Because each chain entry commits to the
+ exact training position, forking the run to remove one article took one extra chain entry and a
+ partial retrain, and gave an exact leave-one-out measurement for free.
+- **Be explicit about what "verified" means.** The model is small and often wrong about facts.
+ Verification proves the computation, not the answers.
+
+## What "verified" means
+
+A **consistency check** (CPU, `ovl.py verify --weights` plus the timestamp check) shows that the
+released files match the timestamped record: the model is the record's final state, and the record
+hasn't changed since 2026-10-20. It recomputes no training, and the record comes from the publisher.
+
+A **segment check** recomputes one segment from its published starting checkpoint and compares the
+result bit for bit. Checking every segment verifies the whole computation. What it relies on:
+
+- **Same architecture.** Bits match on RTX 5090. RTX 4090, H100 and CPU give a mismatch (the
+ hardware map). A checker needs a 5090, and the release can be checked only while 5090s are
+ available.
+- **The toolchain.** Checkers run the same PyTorch, CUDA and container image. A deterministic error
+ there would give a match everywhere. That doesn't help a forger, but "verified" means
+ "this code on this stack produced these weights".
+- **Enough independent checkers.** With N segments, M checkers who each pick one random segment
+ catch one forged segment with probability 1 − ((N−1)/N)^M. For N = 37 that's about 110 checks for
+ 95% and 169 for 99%. Longer runs with more segments need more checks.
+- **Honest reporting.** A check result is a self-reported line, not signed, and nothing proves the
+ checker picked the segment at random. Signed results and public randomness for picking segments
+ are on the [roadmap](../project/roadmap.md).
+- **Cost.** A full check costs as much compute as the training (the table above), and each
+ boundary stores the model and optimizer state (284 MB here, about 12 bytes per parameter).
+ For large models, full checks are only realistic for well-funded parties, so assurance comes from
+ sampling.
+
+## Limitations
+
+- A small model: fluent encyclopedic text, frequent factual errors, basic conversation.
+- Checking needs the same GPU architecture as training.
+- So far all segment checks were run by the project, on separate machines. None has been run by an
+ independent third party yet.
+- The release timestamp proves the record existed no later than 2026-10-20 14:38:43 UTC, not when
+ or how training happened. Runs started after 21 Oct stamp every boundary as it is written.
+- The repository's Git history was rewritten once, in September 2026 during repository maintenance,
+ before this run. It changed the public locations of the earlier pipeline's evidence (see
+ [the provenance note](../../project/evidence/history-maintenance-v1/PROVENANCE_STATUS.md)). This
+ run's record is anchored by its own timestamps, not by Git history.
+- Removal works cheaply only for documents the run had not reached at the fork point. Removing an
+ earlier document means retraining from before its first appearance.
+
+## Status of the older pipeline
+
+The `docs/` pages other than this one, and `src/ovl_pipeline/`, describe the earlier production
+pipeline. It is frozen: kept for reference and not used by the simple run, apart from the data
+preparation and library files it imports. New work should target `simple/`.
diff --git a/frontend/data/upstream/1049d2a7/docs/guides/check_a_segment.md b/frontend/data/upstream/1049d2a7/docs/guides/check_a_segment.md
new file mode 100644
index 00000000..cdb01f3e
--- /dev/null
+++ b/frontend/data/upstream/1049d2a7/docs/guides/check_a_segment.md
@@ -0,0 +1,98 @@
+# Check a training segment
+
+The released model's training is split into 37 segments. Each segment starts from a published
+checkpoint, so anyone can recompute one segment on its own and compare the result, bit for bit,
+with the published record. This guide shows three levels of checking, from a laptop to a rented
+GPU.
+
+- [What you can check without a GPU](#without-a-gpu)
+- [One segment, one click (RunPod)](#one-segment-one-click)
+- [One segment, by hand](#one-segment-by-hand)
+- [Check the timestamps](#check-the-timestamps)
+- [What a check proves](#what-a-check-proves)
+
+The files are in the Hugging Face dataset
+[`AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence`](https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/tree/main/release/simple-run),
+folder `release/simple-run/`.
+
+## Without a GPU
+
+Download `release/simple-run/` without the `ckpt-*.pt` files, then from that folder:
+
+```bash
+pip install huggingface_hub torch numpy rfc8785==0.1.4 tokenizers==0.23.2 mwparserfromhell==0.7.2 \
+ "safetensors>=0.4.5,<1.0" "pynacl>=1.5,<2.0"
+sha256sum -c --ignore-missing release-hashes.txt # every downloaded file matches the hash list
+git clone -q --depth 1 --branch v1.0.1 https://github.com/AOSSIE-Org/OpenVerifiableLLM ovl-code
+OVL_DEVICE=cpu python ovl-code/simple/ovl.py verify --run . --weights conversation-model.pt
+# anchor anchor.json: chain head MATCH (38 entries)
+# weights conversation-model.pt: MATCH chain entry 37
+```
+
+This checks that `chain.jsonl` ends at the timestamped head in `anchor.json`, and that the published
+model is exactly the state committed at the end of training. Use `ovl.py` from the v1.0.1 tag, as
+above; it also fails if `anchor.json` is missing. The copy in the download's `code/` folder predates the anchor check, so an edited record
+would still pass with it. With the prepared data (`--data`), `verify` also regenerates the
+seeded starting weights and compares them with entry 0. That part works on any device, including a
+CPU.
+
+## One segment, one click
+
+Recomputing a segment needs an **NVIDIA RTX 5090**, the GPU type the run was trained on. Other
+architectures run different low-level kernels and do not reproduce the bits.
+
+1. Deploy the public RunPod template "OpenVerifiableLLM segment check" on an RTX 5090:
+ (60 GB container disk, no volume).
+2. Wait about an hour: a 22 GB download, then about 20 minutes of training.
+3. Open the pod's **Logs** or run `tail /workspace/check.log`. The last lines look like:
+
+ ```text
+ OVL check PASS: segment 8 MATCH | NVIDIA GeForce RTX 5090, 595.91.07 | torch 2.8.0+cu128 | final state 934d681c99e5 | release 96dc282a | 2026-10-21
+ ```
+
+4. Post that line in the project Discord, then **terminate the pod**. It costs about US$1–1.50.
+
+The template runs [`simple/checker_pod.sh`](../../simple/checker_pod.sh) at a fixed commit. It
+downloads the release's own code from Hugging Face at a pinned revision and runs
+`verify_segment.sh`. Nothing is uploaded, and no account or token is needed. Set `K=3` to check
+three random segments, or `SEGMENTS="7 8"` to choose them.
+
+## One segment, by hand
+
+Use an RTX 5090 with the image `runpod/pytorch:1.0.2-cu1281-torch280-ubuntu2404` (PyTorch 2.8.0,
+CUDA 12.8). From the release's `code/` folder, or a clone of this repository:
+
+```bash
+bash simple/verify_segment.sh # one random segment (~20 min)
+K=3 bash simple/verify_segment.sh # three random segments
+SEGMENTS="7 8" bash simple/verify_segment.sh # chosen segments
+```
+
+The script downloads the prepared data (hash-checked), the record and only the checkpoints it
+needs. It prints `segment k->k+1: MATCH` or `MISMATCH` for each segment, and appends the result
+to `verifications.jsonl`.
+
+## Check the timestamps
+
+`anchor.json` records the release's chain head and file hashes. Two independent RFC 3161 timestamp
+authorities stamped it at 2026-10-20 14:38:43 UTC:
+
+```bash
+openssl ts -verify -in anchor.digicert.tsr -data anchor.json -CAfile /etc/ssl/certs/ca-certificates.crt
+curl -sO https://freetsa.org/files/cacert.pem; curl -sO https://freetsa.org/files/tsa.crt
+openssl ts -verify -in anchor.freetsa.tsr -data anchor.json -CAfile cacert.pem -untrusted tsa.crt
+```
+
+Runs trained with the current `simple/ovl.py` also stamp every chain entry as it is written.
+Check those with `python simple/stamp.py RUN --check`.
+
+## What a check proves
+
+A MATCH means the published checkpoint k, trained under the published recipe on the published
+data, produces exactly the published state k+1. If all 37 segments match, the whole training
+computation is verified. One forged segment among N is caught by a single random check with
+probability 1/N. M independent checkers who each pick one random segment catch it with
+probability 1 − ((N−1)/N)^M, which is why every independent check counts.
+
+A check does not show the model's answers are true. It shows the model is exactly what this
+training on this data produces.
diff --git a/frontend/data/upstream/1049d2a7/docs/guides/ollama.md b/frontend/data/upstream/1049d2a7/docs/guides/ollama.md
new file mode 100644
index 00000000..d5d91032
--- /dev/null
+++ b/frontend/data/upstream/1049d2a7/docs/guides/ollama.md
@@ -0,0 +1,50 @@
+# Run the model in Ollama
+
+The released chat model can run in [Ollama](https://ollama.com) and other llama.cpp-based apps. It
+is exported to GGUF with the model's own tokenizer and chat format.
+
+This is for trying the model. It isn't how the model is verified. llama.cpp uses a slightly
+different GELU and different kernels, so its outputs are close to PyTorch's but not bit-identical.
+To check the model, use the released `.pt` files and [`ovl.py verify`](check_a_segment.md).
+
+## Run it
+
+The model is on the Ollama registry as
+[`ryoari/openverifiablellm`](https://ollama.com/ryoari/openverifiablellm):
+
+```bash
+ollama run ryoari/openverifiablellm "Tell me about the Moon."
+```
+
+The GGUF file is also attached to the
+[v1.0.0 release](https://github.com/AOSSIE-Org/OpenVerifiableLLM/releases/tag/v1.0.0) and stored in the
+[Hugging Face dataset](https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/tree/2fbebaa3ac861898eb8a3dbd9a2a44d08d08216c/release/simple-run/gguf)
+(revision `2fbebaa3`). All three are the same file, SHA-256
+`541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de`. Running
+`ollama show --modelfile ryoari/openverifiablellm` prints a `FROM` line ending in that hash.
+
+## Build it yourself
+
+You need the release's run folder and tokenizer (see [Check a training segment](check_a_segment.md)
+for the download), plus `pip install gguf torch`.
+
+```bash
+python simple/export_gguf.py --run RUN --tokenizer PREP/tokenizer/tokenizer.json --out ovl-23m-chat.gguf
+ollama create openverifiablellm -f simple/Modelfile # run where ovl-23m-chat.gguf is
+ollama run openverifiablellm "Tell me about the Moon."
+```
+
+`--model base` exports the Wikipedia-only model instead, which continues text rather than chatting.
+The GGUF's description records the SHA-256 of the `.pt` file it came from.
+
+## What the export contains
+
+| | |
+|---|---|
+| Architecture | llama.cpp `gpt2`: 6 layers, 6 heads, 384 dimensions, 512-token context |
+| Weights | float32, unchanged from the released `.pt` file (143 MB) |
+| Tokenizer | GPT-2-style byte-level BPE, 32,000 tokens: `<\|pad\|>`, `<\|bos\|>`, `<\|eos\|>`, `<\|user\|>` and `<\|assistant\|>` at ids 0–4, then the trained vocabulary |
+| Chat format | `<\|user\|>` question `<\|eos\|>` `<\|assistant\|>` answer `<\|eos\|>`, as in training |
+
+Running the exported tensors with llama.cpp's GPT-2 computation reproduces the PyTorch model's
+greedy output token for token on a test prompt.
diff --git a/frontend/data/upstream/1049d2a7/docs/project/roadmap.md b/frontend/data/upstream/1049d2a7/docs/project/roadmap.md
new file mode 100644
index 00000000..2d9ce06e
--- /dev/null
+++ b/frontend/data/upstream/1049d2a7/docs/project/roadmap.md
@@ -0,0 +1,58 @@
+# Roadmap
+
+## Done
+
+- **July 2026: reproducibility study.** Same-GPU recomputation matches bit for bit; other
+ architectures do not. A segmented replay audit cost 0.173 of training, against a theoretical
+ 0.15.
+- **September 2026: data provenance.** The 2026-09-01 Wikipedia dump and OpenAssistant files
+ were published with a signed source statement, together with the prepared token streams.
+- **October 2026: the simple run.** A 23M model was trained on one exact pass over English
+ Wikipedia, and all 37 segments were recomputed bit for bit. The data rebuild from the raw dump
+ gives byte-identical files. It also includes:
+ - a hardware reproducibility map;
+ - a verifiable exclusion fork (one article the run hadn't reached, retrained without it);
+ - RFC 3161 timestamps, per boundary since 21 Oct;
+ - a one-click segment check on RunPod.
+
+ See [the simple run](../design/simple_run.md).
+- **Late October 2026: hardening `verify`.** Contributor fixes: `verify` fails when it ran no
+ checks, clearer output for non-released weights, and CPU tests for `simple/ovl.py`. Since v1.0.1,
+ a missing `anchor.json` is a failure unless `--no-anchor` is given explicitly.
+
+## Next
+
+- **Independent checks.** Get segments checked by people outside the project, using the
+ [one-click check](../guides/check_a_segment.md#one-segment-one-click). This is the single most
+ valuable next step for the release's credibility.
+- **Cheaper checks.** Publish per-segment data slices, so that checking one segment doesn't need
+ the full 22 GB of prepared data.
+- **Per-article membership proofs.** For any Wikipedia article, show which segment trained on it,
+ with a proof against the chain.
+- **Signed check results and random segment choice.** Today a check result is a self-reported line.
+ Checkers would sign their result, and the segment would be picked from public randomness (for
+ example a drand beacon round), so results can't be faked in bulk or aimed at honest segments.
+
+## Open research questions
+
+- **Checking across GPU architectures.** Bits currently match only on the training architecture.
+ Integer or fixed-point training, or a reference path with defined rounding, could let other
+ hardware check the same run.
+- **Checking for less than the cost of training.** A full check costs as much as training. Proofs
+ for some steps, or a checker protocol with attested random sampling, could lower that.
+
+## Planned, pending funding
+
+- **A bigger model** with the same method. Measured cost of training plus checking every segment
+ at current throughput:
+
+ | Model | Cost |
+ |---|---|
+ | 42M | about US$34 |
+ | 70M | about US$52 |
+ | 110M | about US$73 |
+
+## Not planned
+
+- A separate docs website or hosted demo app. The repository docs and the Hugging Face release
+ are the documentation.
diff --git a/frontend/data/upstream/github-release-v1.0.1.json b/frontend/data/upstream/github-release-v1.0.1.json
new file mode 100644
index 00000000..6159a8f6
--- /dev/null
+++ b/frontend/data/upstream/github-release-v1.0.1.json
@@ -0,0 +1,20 @@
+{
+ "fetched": "2026-10-29",
+ "api": "https://api.github.com/repos/AOSSIE-Org/OpenVerifiableLLM/releases/tags/v1.0.1",
+ "tag_name": "v1.0.1",
+ "html_url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/releases/tag/v1.0.1",
+ "assets": [
+ {
+ "name": "Modelfile",
+ "size": 722,
+ "digest": "sha256:df4dacfc3191e56b1dc1195764ea66ca1a7695856be04ecec17d8dde4c66fc8b",
+ "browser_download_url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/releases/download/v1.0.1/Modelfile"
+ },
+ {
+ "name": "ovl-23m-chat.gguf",
+ "size": 142815808,
+ "digest": "sha256:541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de",
+ "browser_download_url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/releases/download/v1.0.1/ovl-23m-chat.gguf"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/frontend/data/upstream/manifest.json b/frontend/data/upstream/manifest.json
new file mode 100644
index 00000000..6631c8e0
--- /dev/null
+++ b/frontend/data/upstream/manifest.json
@@ -0,0 +1,29 @@
+{
+ "repo": "AOSSIE-Org/OpenVerifiableLLM",
+ "commit": "1049d2a782b8f63103abfa0cca8deab0d2037290",
+ "files": {
+ "README.md": {
+ "gitBlob": "5343ea0d37e4bb7cf9bafb18c8f86e6b2f2c69df",
+ "sha256": "ef32e41029216b56737713162a977c1f770e3afe4f5c0f4392a1c27c4c91e19d"
+ },
+ "docs/design/simple_run.md": {
+ "gitBlob": "e7010989073191edc59ac0db97ed823e98766b66",
+ "sha256": "5eee8d48beddecd5ed825cbc680ce1c92d9ddeb8fb715f76156380cdcb1d4375"
+ },
+ "docs/guides/check_a_segment.md": {
+ "gitBlob": "cdb01f3ea23d31186a333cd6053b5e08e69b938e",
+ "sha256": "2adafdace168bf92e78236b65fe238002d460937efe34fa94c8942d9b5f73424"
+ },
+ "docs/guides/ollama.md": {
+ "gitBlob": "d5d91032a625cc5402e5589908ae5b9f02655d58",
+ "sha256": "0af9c9ed5d737b99342d0875f92f3ad980bf42edddb941aa253d94c1efe0ec0f"
+ },
+ "docs/project/roadmap.md": {
+ "gitBlob": "2d9ce06ed7319ac4f25017e851e776ace7ce9062",
+ "sha256": "46b73d327ef71fab7fe075b00d7cb3681c2d4c7a64a7d3c5b8aebf1965ea7092"
+ },
+ "github-release-v1.0.1.json": {
+ "sha256": "c3481d1c606d029000c1ec9fa07dea813321437b1123b6e3456f61ddfba15793"
+ }
+ }
+}
diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js
new file mode 100644
index 00000000..8d6afeff
--- /dev/null
+++ b/frontend/eslint.config.js
@@ -0,0 +1,20 @@
+import js from '@eslint/js';
+import tseslint from 'typescript-eslint';
+import hooks from 'eslint-plugin-react-hooks';
+import globals from 'globals';
+
+export default tseslint.config(
+ { ignores: ['dist', 'dist-ssr', 'node_modules', 'test-results', 'playwright-report'] },
+ js.configs.recommended,
+ ...tseslint.configs.strict,
+ {
+ files: ['**/*.{ts,tsx,js,mjs}'],
+ languageOptions: { globals: { ...globals.browser, ...globals.node } },
+ plugins: { 'react-hooks': hooks },
+ rules: {
+ ...hooks.configs.recommended.rules,
+ // noUncheckedIndexedAccess is on; indexes into validated data (validate.ts) are asserted with `!`.
+ '@typescript-eslint/no-non-null-assertion': 'off',
+ },
+ },
+);
diff --git a/frontend/index.html b/frontend/index.html
new file mode 100644
index 00000000..4b073aca
--- /dev/null
+++ b/frontend/index.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OpenVerifiableLLM
+
+
+
+
+
+
+
diff --git a/frontend/logo/OVL-logo-variations-preview.png b/frontend/logo/OVL-logo-variations-preview.png
new file mode 100644
index 00000000..2e777a1f
Binary files /dev/null and b/frontend/logo/OVL-logo-variations-preview.png differ
diff --git a/frontend/logo/README.md b/frontend/logo/README.md
new file mode 100644
index 00000000..be657141
--- /dev/null
+++ b/frontend/logo/README.md
@@ -0,0 +1,8 @@
+# OpenVerifiableLLM mark
+
+Approved lockup (green C-gate, gold completing corner). Live copies:
+
+- `mark-color.svg` → `../public/logo.svg` (header)
+- `favicon.svg` → `../public/favicon.svg`
+
+The header typesets OpenVerifiable + LLM next to the mark so dark mode can recolour the wordmark. Do not use `horizontal-color.svg` as an ` ` in the chrome: its type is baked `#121212`.
diff --git a/frontend/logo/favicon.svg b/frontend/logo/favicon.svg
new file mode 100644
index 00000000..d054e59a
--- /dev/null
+++ b/frontend/logo/favicon.svg
@@ -0,0 +1,7 @@
+
+OpenVerifiableLLM symbol OpenVerifiableLLM logo by AOSSIE.
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/logo/horizontal-color.svg b/frontend/logo/horizontal-color.svg
new file mode 100644
index 00000000..b709fa14
--- /dev/null
+++ b/frontend/logo/horizontal-color.svg
@@ -0,0 +1,9 @@
+
+OpenVerifiableLLM horizontal logo (color) OpenVerifiableLLM logo by AOSSIE.
+
+
+
+
+OpenVerifiableLLM
+BY AOSSIE
+
\ No newline at end of file
diff --git a/frontend/logo/mark-color.svg b/frontend/logo/mark-color.svg
new file mode 100644
index 00000000..d054e59a
--- /dev/null
+++ b/frontend/logo/mark-color.svg
@@ -0,0 +1,7 @@
+
+OpenVerifiableLLM symbol OpenVerifiableLLM logo by AOSSIE.
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/logo/stacked-color.png b/frontend/logo/stacked-color.png
new file mode 100644
index 00000000..c6a5f15e
Binary files /dev/null and b/frontend/logo/stacked-color.png differ
diff --git a/frontend/logo/stacked-color.svg b/frontend/logo/stacked-color.svg
new file mode 100644
index 00000000..e1c5a5bb
--- /dev/null
+++ b/frontend/logo/stacked-color.svg
@@ -0,0 +1,9 @@
+
+OpenVerifiableLLM stacked logo (color) OpenVerifiableLLM logo by AOSSIE.
+
+
+
+
+OpenVerifiableLLM
+BY AOSSIE
+
\ No newline at end of file
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
new file mode 100644
index 00000000..04491e3a
--- /dev/null
+++ b/frontend/package-lock.json
@@ -0,0 +1,4103 @@
+{
+ "name": "openverifiablellm-site",
+ "version": "0.3.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "openverifiablellm-site",
+ "version": "0.3.0",
+ "dependencies": {
+ "react": "^19.3.1",
+ "react-dom": "^19.3.1"
+ },
+ "devDependencies": {
+ "@axe-core/playwright": "^4.14.0",
+ "@eslint/js": "^9.39.5",
+ "@playwright/test": "^1.64.1",
+ "@testing-library/dom": "^10.4.2",
+ "@testing-library/react": "^16.3.3",
+ "@types/node": "^20.19.43",
+ "@types/react": "^19.3.0",
+ "@types/react-dom": "^19.3.0",
+ "@vitejs/plugin-react": "^5.2.0",
+ "eslint": "^9.39.5",
+ "eslint-plugin-react-hooks": "^7.1.1",
+ "globals": "^17.13.0",
+ "happy-dom": "^21.0.4",
+ "typescript": "^6.0.3",
+ "typescript-eslint": "^8.72.1",
+ "vite": "^7.3.7",
+ "vite-node": "^3.2.4",
+ "vitest": "^4.1.12"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ }
+ },
+ "node_modules/@axe-core/playwright": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.14.0.tgz",
+ "integrity": "sha512-SGUhG5PIHd2eMdpgBF2PyQLOhX+qyDR2PT4cmoS4Qk2ak+jX/rrSvst9l0PGv5WTHolKpUMvVmoHpr4cZgf1RQ==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "axe-core": "~4.14.0"
+ },
+ "engines": {
+ "node": ">=22.12.0"
+ },
+ "peerDependencies": {
+ "playwright-core": ">= 1.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
+ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
+ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.7",
+ "@babel/helper-compilation-targets": "^7.29.7",
+ "@babel/helper-module-transforms": "^7.29.7",
+ "@babel/helpers": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/template": "^7.29.7",
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz",
+ "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.29.8",
+ "@babel/types": "^7.29.8",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
+ "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.29.7",
+ "@babel/helper-validator-option": "^7.29.7",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-globals": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
+ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
+ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
+ "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz",
+ "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.29.11",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.11.tgz",
+ "integrity": "sha512-snZbO7MEDOof+hvNa97EjEY7qD7h2kwvQr5AJC3ZhQudKW5dnej6k3kP9NQV88hJwaS8vDqRLFo9rivLEhle2g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
+ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.29.10",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.10.tgz",
+ "integrity": "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.8"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.11",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.11.tgz",
+ "integrity": "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.11"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz",
+ "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz",
+ "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.29.10",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.10.tgz",
+ "integrity": "sha512-NpugTzbKgGrNe45Ui32cN8vCFFMxVtP/9rtfwv0nP5FRDAjvYBxJcLVpYA9mr1jxP6cnIT7x9LUzuDTbWYYNRA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
+ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.29.10",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.10.tgz",
+ "integrity": "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.8",
+ "@babel/helper-globals": "^7.29.7",
+ "@babel/parser": "^7.29.9",
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.8",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.29.11",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.11.tgz",
+ "integrity": "sha512-WCsemW40Cpc6gouC1SrY6PBaZ+oLRlEVY9XBvZBI7il/HyUrb2nJ505wE1MHEFyDZNnrWDEuy4jL50WVHfTTSQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.29.11",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz",
+ "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz",
+ "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz",
+ "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz",
+ "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz",
+ "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz",
+ "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz",
+ "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz",
+ "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz",
+ "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz",
+ "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz",
+ "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz",
+ "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz",
+ "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz",
+ "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz",
+ "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
+ "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz",
+ "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz",
+ "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz",
+ "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz",
+ "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz",
+ "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz",
+ "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz",
+ "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz",
+ "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.21.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz",
+ "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.7",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.5"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
+ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
+ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.7.tgz",
+ "integrity": "sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.14.0",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.3.2",
+ "minimatch": "^3.1.5",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "9.39.5",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz",
+ "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
+ "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
+ "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
+ "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/types": "^0.15.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.8",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz",
+ "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.2",
+ "@humanfs/types": "^0.15.0",
+ "@humanwhocodes/retry": "^0.4.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/types": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz",
+ "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz",
+ "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@napi-rs/lzma-linux-x64-gnu": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz",
+ "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^22.20 || ^24.12 || >=25"
+ }
+ },
+ "node_modules/@playwright/test": {
+ "version": "1.64.1",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.64.1.tgz",
+ "integrity": "sha512-IaYGml/nSOiZWROfPtuIL7neuu9qDOZ3TNvNljUIrhDMxiGTgPjzj/g9p9RxpS2tSepPDRY+UwAaEeiKtUvIAg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright": "1.64.1"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-rc.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz",
+ "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.66.0.tgz",
+ "integrity": "sha512-7y4XeoUHPecjfUDRmap8U0q6bjfLAPn7uOGT8BKyqy8uNDOjsGS8rlBhOx6sZLVwwjN6hapvGl2mW9/IS6UNww==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.66.0.tgz",
+ "integrity": "sha512-e8WugYZXpgqrlMXLCudYVRAxAcK7AIY36JxRDwFRD38L9q62G1VsEUW6ijXxzjxYjNB8i1zo3B/ycIQ/qjLC/Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.66.0.tgz",
+ "integrity": "sha512-6vkDCfyDjNLokh+Rt1D2KtNgFFMEPdkWha/mbtP4cSjh9xiN8T/JBS/A7nDYKjmMAXHrvR9J3AzUk2LtFbIBLg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.66.0.tgz",
+ "integrity": "sha512-/mzZAX0+Q6eXxvkR0HB0RZCCrsbmFD8DpsvCQoMYABDfq/DjqkbfytuJ7GvZ4AhR/Mgis2fXbZrGqfbcK2Z5fA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.66.0.tgz",
+ "integrity": "sha512-JQJx9E8tUjGqed1RevDmoHaS3V30ODdV8uyvGxlwd4K5se6bkPrMeltSybqAtpJ+ltDRfo7FORQaJG2Hd5nGog==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.66.0.tgz",
+ "integrity": "sha512-GEaUQQjMaG7X1304qMgqLjzCKv6CdDirzJSS+UqUs3xhJ9X2Kjzu0JDbLoUU42FWxwmZqz+SsgU1SlQv9GNRVA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.66.0.tgz",
+ "integrity": "sha512-DgmAU9N0NhDQDzHgFUocDio7zRO8jR/nY/obDGvCR8zbJ6J77Fg6X49yPuExJUpYPbC82EOaRhG969pWzUSnHQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.66.0.tgz",
+ "integrity": "sha512-zG09YZ+sk/HoHq+P9gYB0EseQ3M20RbDuKGWey6fbiMDV1LxfXvhgSW9jDaCcvFPMgfLXpimzXY+UYvA8R2mLQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.66.0.tgz",
+ "integrity": "sha512-vlArhgyXbcVc1D4WZPoiYuqJIaMiSHBj6etRXua0KlfjlZeuiQyVAPYi0/N49O4mSp3u1iGUBLEjNa8ec81XZg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.66.0.tgz",
+ "integrity": "sha512-RxJZtk0G87YPotDaRDvRqStV8cbqLSC5TroHvQHHKsqBg0ok64RxKgtXeFsa7FBcy7mb4crBrG3xK8USWIqWNA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.66.0.tgz",
+ "integrity": "sha512-qlGcw959PrLLkZhiBxF3OZ6SQvj+OKY85mCqGNgSRs4LZlDJ6ICqmz6UdxtINdhcXYwNIbZoapQVBAmZlD2hUQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.66.0.tgz",
+ "integrity": "sha512-TvTI/7Cy0WvRA1SXgwzu6bwXBnMpmeT/ln5q7WvSpqmXy1VbmEnY8HVIDQNBiaHJvoWqRr0M4FNo7qiqtyMaFw==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.66.0.tgz",
+ "integrity": "sha512-UZEDkSoDRZ50NyLj70nO6mpIK3dvs2cPTTvQb1bA/PBDmr9fvn5KiESuGfh6srd7Zi6Lt9Sv2sVrFr1QoHLvPQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.66.0.tgz",
+ "integrity": "sha512-VRbxTvagLh3HRcysx1CNq+HHcvJbSebNI6fCbk7jwmmWHkXjrSIV3igXBpRHUTFdg0pagWGu50xoSZXnrZHjVQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.66.0.tgz",
+ "integrity": "sha512-uWdJpvYqh0LE/i+YBL3sMX0a2kUkICENjmrPmyBmMOFc3jMrs6MSQH/pMD+VIpGEoUcr3XkHGLLfymzIqPSRRg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.66.0.tgz",
+ "integrity": "sha512-3FUd88pxgWAjK60OgCrika1AcNG+u8zaCdWjg4TlcZTDkt5TGyci8ZU64l3OJ9ax0MEjw3P80B/3PoSQDCLwJQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.66.0.tgz",
+ "integrity": "sha512-qT2rMmgyej62g5AdwktK+Bt2lBu497pzWZe12TTQ5JmZjOYPnEwcPEAOSLTBxBV+6gIES75rXm219v/QkT397A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.66.0.tgz",
+ "integrity": "sha512-E46rnZgp7J84Qwe8RMlF+rgimnDo/9fuiGbUArGB0ZkMWf97O7yeSCfKls5x/YJOF0RcuSe9RctuKe1hlxICiA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.66.0.tgz",
+ "integrity": "sha512-Uz1HiZe+qBzqgdPsON+z0wRx3WdATuyzwvGT6cr2VZVrqqko0ZJVfkrQJtwDMuDcAfXYdo7XucaxJ7lTLjEcgg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.66.0.tgz",
+ "integrity": "sha512-Ph7TX3Ex5qdfcb7Tc6eEPugVkRfJ501eTovO4T5029YObfpZ7dzn3RiwpFvGp50nk2QUhvBMZ0PFGlEj6pOYTg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.66.0.tgz",
+ "integrity": "sha512-nZYPEya7ZkeNxUEiF7qmNZbyLTyRN3MK5cO22KqsaoneUzXJuzBIQRw+7BEQy9LGj2O5vrCE9V3EpK06FYo1tQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.66.0.tgz",
+ "integrity": "sha512-u7aTfS3R6C4hRsqXSzaO6qLZYLVuMkHMvcWlux4IM8IJif1VCl2cgPBSo5gSNoFoStQypQP+qwq8W1IyFBf1QQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.66.0.tgz",
+ "integrity": "sha512-e+i9ueHrH1Bafb0cf0woAIVJbYcoC8vRaD+vz+Xi8w6jz9cYJSV3vyKO6ELGSZ6g4W4MJOm2WPLN4/nQf77h7w==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.66.0.tgz",
+ "integrity": "sha512-KfTCbrtr2zXTqH2E1F+uYlFTrYibxHKqPAHobpd8Kfg49cEHmuHebOidCTDRgqG1suaPFX7oejFQeGE71zWKfA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.66.0.tgz",
+ "integrity": "sha512-xA+neBh1bqkqaS3b48T2UHZnDsTIpb9B0h+TdBzynjF/ymCpYndhfY10RqW0qSKB1HqqQA83mINVhAdwA+mETg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@standard-schema/spec": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
+ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@testing-library/dom": {
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.2.tgz",
+ "integrity": "sha512-yzr2S9HyAIdhz2/6qHgbs665Q7PKVcDF05vsOlHPxG1mo36gKVesdYVeDLnXgfjJ03CrKRk08knc6+E/9m8v2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/runtime": "^7.12.5",
+ "@types/aria-query": "^5.0.1",
+ "aria-query": "5.3.0",
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.5.0",
+ "picocolors": "1.1.1",
+ "pretty-format": "^27.0.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@testing-library/react": {
+ "version": "16.3.3",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.3.tgz",
+ "integrity": "sha512-Uo193NgQbPMz6lrrhtRQQFcMC6Re/ELLFbbuVL30WDlZxlpZf9/lMHTAVxPRLw1q1iu9OJmR1c2BLiENRstdBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@testing-library/dom": "^10.0.0",
+ "@types/react": "^18.0.0 || ^19.0.0",
+ "@types/react-dom": "^18.0.0 || ^19.0.0",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@types/aria-query": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
+ "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.2"
+ }
+ },
+ "node_modules/@types/chai": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
+ "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/deep-eql": "*",
+ "assertion-error": "^2.0.1"
+ }
+ },
+ "node_modules/@types/deep-eql": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
+ "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.10.tgz",
+ "integrity": "sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "20.19.43",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz",
+ "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/@types/react": {
+ "version": "19.3.0",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz",
+ "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "csstype": "^3.2.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "19.3.0",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz",
+ "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "^19.3.0"
+ }
+ },
+ "node_modules/@types/whatwg-mimetype": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz",
+ "integrity": "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/ws": {
+ "version": "8.18.2",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.2.tgz",
+ "integrity": "sha512-67MQl+fpWKVTT1NYdnmo3U4sc/xPo/zQBncVnI74qmQa0z/b+1g6iYqNmGCPbxO+zz2aklb08a0oHfegiVd0/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.72.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.72.1.tgz",
+ "integrity": "sha512-5CokTWXpmbylfFabsbvHC0CAw3XLaGnoa+nFJX5FR592h/LoZsENUE6p/rg5xvkKrFEXz6pYmgI29AgXc2N3BQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.12.2",
+ "@typescript-eslint/scope-manager": "8.72.1",
+ "@typescript-eslint/type-utils": "8.72.1",
+ "@typescript-eslint/utils": "8.72.1",
+ "@typescript-eslint/visitor-keys": "8.72.1",
+ "ignore": "^7.0.5",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.72.1",
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+ "version": "7.0.14",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.14.tgz",
+ "integrity": "sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.72.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.72.1.tgz",
+ "integrity": "sha512-ZGwZP4OCfyA0AQTpEAMWz+rtX01DRhQWW5hB0ucKDEIX5U7jdmPSaMx94rQfaPAQzIYz2BimOgKOJtjfpRFQ9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.72.1",
+ "@typescript-eslint/types": "8.72.1",
+ "@typescript-eslint/typescript-estree": "8.72.1",
+ "@typescript-eslint/visitor-keys": "8.72.1",
+ "debug": "^4.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/project-service": {
+ "version": "8.72.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.72.1.tgz",
+ "integrity": "sha512-fAuVMkwdO/huI8nyo/WKnNKf6Gag93S56Rh3Ts5mGcavwSdaN8tRg1gCeIGX8PF+nzp1BjGfO4gHhGzW1J6jTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/tsconfig-utils": "^8.72.1",
+ "@typescript-eslint/types": "^8.72.1",
+ "debug": "^4.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.72.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.72.1.tgz",
+ "integrity": "sha512-lC/t6eMCZZQAAKZEYGL6RDVSuFehpdmMT6h+nJIjIa6oylN/PwDgDVtEIbB7O9xFfZYtZAYLoLlDNWKJhtF+uQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.72.1",
+ "@typescript-eslint/visitor-keys": "8.72.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/tsconfig-utils": {
+ "version": "8.72.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.72.1.tgz",
+ "integrity": "sha512-e4D5R5vpeAEPBxT2BAzsFQL3sbwyeeeo5+aczgNSRK1V734jE7pTqaGFU+fXapWEQwnZbpFaTn32+Z8DwS6OTg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.72.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.72.1.tgz",
+ "integrity": "sha512-iY2wlmyrXJmx4yxUGP3aYCFF3cA/6ShddOKmLU2dx7LnEykbAM8WThlxZEfd1NddqceF6eJmZUayxx9oKIYNlg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.72.1",
+ "@typescript-eslint/typescript-estree": "8.72.1",
+ "@typescript-eslint/utils": "8.72.1",
+ "debug": "^4.4.3",
+ "ts-api-utils": "^2.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.72.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.72.1.tgz",
+ "integrity": "sha512-LmE5IhQet1BWOWEXqBrVtBPsMAOQ6Nzk35d+WLh3mk4EUF33sqlfxjio1MdYeSvKSG5skactKKuixBIKXhL4Rw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.72.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.72.1.tgz",
+ "integrity": "sha512-DAlUoUV93hIvrtIQLwCbmZQYVZwOMhiHJrOVUUIWicFZaIYjTRqlY3I/NZevfkLmSqkNHRu2qYDcq9lrn16oOQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/project-service": "8.72.1",
+ "@typescript-eslint/tsconfig-utils": "8.72.1",
+ "@typescript-eslint/types": "8.72.1",
+ "@typescript-eslint/visitor-keys": "8.72.1",
+ "debug": "^4.4.3",
+ "minimatch": "^10.2.2",
+ "semver": "^7.7.3",
+ "tinyglobby": "^0.2.15",
+ "ts-api-utils": "^2.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz",
+ "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "10.2.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
+ "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "brace-expansion": "^5.0.8"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+ "version": "7.8.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.72.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.72.1.tgz",
+ "integrity": "sha512-5v5liypurJBFHCBNqh/RjsymAD+VWcE0djuGY/BUqp5fC3Qn+luWDEksjuTtWjPn6i5zQlUtkZCRG/CYG0yCkA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.9.1",
+ "@typescript-eslint/scope-manager": "8.72.1",
+ "@typescript-eslint/types": "8.72.1",
+ "@typescript-eslint/typescript-estree": "8.72.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.72.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.72.1.tgz",
+ "integrity": "sha512-SB8xqipSzZHUePCCLNeYxqnxq83X61/qzNhjQGbTfjxGZIeOEP7tBgWYX05Tcd6CgE02WdTJnh5b8kMZJ/+bnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.72.1",
+ "eslint-visitor-keys": "^5.0.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@vitejs/plugin-react": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz",
+ "integrity": "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.29.0",
+ "@babel/plugin-transform-react-jsx-self": "^7.27.1",
+ "@babel/plugin-transform-react-jsx-source": "^7.27.1",
+ "@rolldown/pluginutils": "1.0.0-rc.3",
+ "@types/babel__core": "^7.20.5",
+ "react-refresh": "^0.18.0"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@vitest/expect": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.12.tgz",
+ "integrity": "sha512-vFlTt+YEu9WBpNjdGayNmlMVzrWPi1+sv853/7t2FU7hpO5gAFBKHzQmkCq5Xjpr+evegF2994LQT3hF3mRlqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@standard-schema/spec": "^1.1.0",
+ "@types/chai": "^5.2.2",
+ "@vitest/spy": "4.1.12",
+ "@vitest/utils": "4.1.12",
+ "chai": "^6.2.2",
+ "tinyrainbow": "^3.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/mocker": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.12.tgz",
+ "integrity": "sha512-fKShNpKZzupWZuY0z7egydvL0sqW4INEZBEExMBMAa6izlENEVHwoXgdaTCaBZ5fwlr4xf2o1wXC83n9RpO+NA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/spy": "4.1.12",
+ "estree-walker": "^3.0.3",
+ "magic-string": "^0.30.21"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "msw": "^2.4.9",
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "msw": {
+ "optional": true
+ },
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vitest/pretty-format": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.12.tgz",
+ "integrity": "sha512-XW9O8+Mxx4VpCtkYdMJLZQQwsVryP9wk7cPKDxtXFfwSak6yRh5+2fep/Y0XF/ElBvJHq8bcYdi6aeuai0opZA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyrainbow": "^3.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/runner": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.12.tgz",
+ "integrity": "sha512-NKlVKCr5QnCe8jijdMnmkpHHU+WTqiLFR6G0pHji9uRjXK9xJl1k1nTw6F3pOOj2PDcsDt2GKQMI7wIsaT491w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/utils": "4.1.12",
+ "pathe": "^2.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/snapshot": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.12.tgz",
+ "integrity": "sha512-ko1y1Qgb/slzQ9mr+b89Cuqud8WG1TKtsPD8r7ZUBdvVOGt85Af2HwCqHujrhwJq95hs/9RM7fcAPg57o1vlzw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "4.1.12",
+ "@vitest/utils": "4.1.12",
+ "magic-string": "^0.30.21",
+ "pathe": "^2.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/spy": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.12.tgz",
+ "integrity": "sha512-RGq9x4JNGNTZHEJxvN0oSiJjeSCExm0n2gZKKJZHY9cX5AVA6M7VJILBT3ZJ/tJ/0J9uWT7fETV9/btoi//vSg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/utils": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.12.tgz",
+ "integrity": "sha512-Q3awXrwOfEV+qc3WmO5ONyE0yO7Q1gQ9/oyHxGLZ/pl7N3NO/ZztqQwKLuwMkV+CA1JYSIeO3gkHnRDIo4AVaA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "4.1.12",
+ "convert-source-map": "^2.0.0",
+ "tinyrainbow": "^3.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz",
+ "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
+ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/assertion-error": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
+ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/axe-core": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.14.0.tgz",
+ "integrity": "sha512-9WTZxEjsZ7b13TH8JPmbV2z8CHbl80/2hm3XPEG4JgNdQLK81IBRXmSxHfMAOkSqQeRxT/0dwNDz2GOm3zzpcQ==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.11.34",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.34.tgz",
+ "integrity": "sha512-Aqr8mA1kIvyJ3UY5YAY7ib8LSo1DmDMbMnVqGPtsKW1LxaFQFwn9Eb3yvq2fUKJsRvaXjnAV7R5osqETapzNiA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.21",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz",
+ "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.29.5",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.5.tgz",
+ "integrity": "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "baseline-browser-mapping": "^2.11.33",
+ "caniuse-lite": "^1.0.30001819",
+ "electron-to-chromium": "^1.5.464",
+ "node-releases": "^2.0.60",
+ "update-browserslist-db": "^1.3.4"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer-image-size": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/buffer-image-size/-/buffer-image-size-0.6.4.tgz",
+ "integrity": "sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/cac": {
+ "version": "6.7.14",
+ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+ "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001820",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001820.tgz",
+ "integrity": "sha512-gfWD6MxqVCqAOwmODfZf7DchWvlrA+SRdNX7ceLfg3xRqe5ssjjpF7EgslC/0tiLiNTajdaNN/q8c/5u/7Gz8w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chai": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-6.3.0.tgz",
+ "integrity": "sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/dom-accessibility-api": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
+ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.467",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.467.tgz",
+ "integrity": "sha512-Nw9X371rtZmYcBSnEijnCDONILjs93biCZO34juC7MBOmK8E+GFnyD4T/WvyrlJkppul7oxg6TwvtKst9SODTw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/entities": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
+ "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+ "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/esbuild": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
+ "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.28.2",
+ "@esbuild/android-arm": "0.28.2",
+ "@esbuild/android-arm64": "0.28.2",
+ "@esbuild/android-x64": "0.28.2",
+ "@esbuild/darwin-arm64": "0.28.2",
+ "@esbuild/darwin-x64": "0.28.2",
+ "@esbuild/freebsd-arm64": "0.28.2",
+ "@esbuild/freebsd-x64": "0.28.2",
+ "@esbuild/linux-arm": "0.28.2",
+ "@esbuild/linux-arm64": "0.28.2",
+ "@esbuild/linux-ia32": "0.28.2",
+ "@esbuild/linux-loong64": "0.28.2",
+ "@esbuild/linux-mips64el": "0.28.2",
+ "@esbuild/linux-ppc64": "0.28.2",
+ "@esbuild/linux-riscv64": "0.28.2",
+ "@esbuild/linux-s390x": "0.28.2",
+ "@esbuild/linux-x64": "0.28.2",
+ "@esbuild/netbsd-arm64": "0.28.2",
+ "@esbuild/netbsd-x64": "0.28.2",
+ "@esbuild/openbsd-arm64": "0.28.2",
+ "@esbuild/openbsd-x64": "0.28.2",
+ "@esbuild/openharmony-arm64": "0.28.2",
+ "@esbuild/sunos-x64": "0.28.2",
+ "@esbuild/win32-arm64": "0.28.2",
+ "@esbuild/win32-ia32": "0.28.2",
+ "@esbuild/win32-x64": "0.28.2"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.39.5",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz",
+ "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==",
+ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.8.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.21.2",
+ "@eslint/config-helpers": "^0.4.2",
+ "@eslint/core": "^0.17.0",
+ "@eslint/eslintrc": "^3.3.6",
+ "@eslint/js": "9.39.5",
+ "@eslint/plugin-kit": "^0.4.1",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "ajv": "^6.14.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.4.0",
+ "eslint-visitor-keys": "^4.2.1",
+ "espree": "^10.4.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.5",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz",
+ "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "hermes-parser": "^0.25.1",
+ "zod": "^3.25.0 || ^4.0.0",
+ "zod-validation-error": "^3.5.0 || ^4.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.15.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expect-type": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz",
+ "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz",
+ "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "17.13.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-17.13.0.tgz",
+ "integrity": "sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/happy-dom": {
+ "version": "21.0.4",
+ "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-21.0.4.tgz",
+ "integrity": "sha512-tFm+GaLBgo6o0awHnvHaNoraVo27qJ+2tZEtZ+cIa08hXbeitrxAJajLI05hsUy/2/YTKcUjQYzHe5mCcraLBw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": ">=20.0.0",
+ "@types/whatwg-mimetype": "^3.0.2",
+ "@types/ws": "^8.18.1",
+ "buffer-image-size": "^0.6.4",
+ "entities": "^7.0.1",
+ "whatwg-mimetype": "^3.0.0",
+ "ws": "^8.21.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/hermes-estree": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
+ "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/hermes-parser": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz",
+ "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hermes-estree": "0.25.1"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz",
+ "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/puzrin"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/nodeca"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/lz-string": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
+ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "lz-string": "bin/bin.js"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.20",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz",
+ "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.61",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.61.tgz",
+ "integrity": "sha512-5NUN6QCxNFrS9oEA9RPS+d0AP+ooGBzzovY2JhIpDRHacPvOhHjXjUsUMX9qp4nLHZ+5jVgXB2jj/P4arGOE/g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/obug": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz",
+ "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==",
+ "dev": true,
+ "funding": [
+ "https://github.com/sponsors/sxzz",
+ "https://opencollective.com/debug"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/playwright": {
+ "version": "1.64.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.64.1.tgz",
+ "integrity": "sha512-HCrVhHr5QQuwYoswEUGTb7gGp522yflbv/ST8nF4sFWGuLjQCt17Q/EubpGGSNKYn1tsTCPZxqHhHCfVURu7UA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright-core": "1.64.1"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/playwright-core": {
+ "version": "1.64.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.1.tgz",
+ "integrity": "sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "playwright-core": "cli.js"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.32",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.32.tgz",
+ "integrity": "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.20",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
+ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^17.0.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/react": {
+ "version": "19.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.3.1.tgz",
+ "integrity": "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "19.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.1.tgz",
+ "integrity": "sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "scheduler": "^0.28.0"
+ },
+ "peerDependencies": {
+ "react": "^19.3.1"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/react-refresh": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz",
+ "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.66.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.66.0.tgz",
+ "integrity": "sha512-Onq6/qO4ARhxIs+jYiHE0pYehadLyMECAiGEqQ+0/aWND3+2PmifJIIqBLYtuBODqHTlOUEQFtIVPyCy0Lck7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.9"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@napi-rs/lzma-linux-x64-gnu": "1.5.1",
+ "@rollup/rollup-android-arm-eabi": "4.66.0",
+ "@rollup/rollup-android-arm64": "4.66.0",
+ "@rollup/rollup-darwin-arm64": "4.66.0",
+ "@rollup/rollup-darwin-x64": "4.66.0",
+ "@rollup/rollup-freebsd-arm64": "4.66.0",
+ "@rollup/rollup-freebsd-x64": "4.66.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.66.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.66.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.66.0",
+ "@rollup/rollup-linux-arm64-musl": "4.66.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.66.0",
+ "@rollup/rollup-linux-loong64-musl": "4.66.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.66.0",
+ "@rollup/rollup-linux-ppc64-musl": "4.66.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.66.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.66.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.66.0",
+ "@rollup/rollup-linux-x64-gnu": "4.66.0",
+ "@rollup/rollup-linux-x64-musl": "4.66.0",
+ "@rollup/rollup-openbsd-x64": "4.66.0",
+ "@rollup/rollup-openharmony-arm64": "4.66.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.66.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.66.0",
+ "@rollup/rollup-win32-x64-gnu": "4.66.0",
+ "@rollup/rollup-win32-x64-msvc": "4.66.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rollup/node_modules/@types/estree": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/scheduler": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz",
+ "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==",
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/siginfo": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
+ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz",
+ "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stackback": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
+ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/std-env": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.3.0.tgz",
+ "integrity": "sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tinybench": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
+ "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinyexec": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz",
+ "integrity": "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyrainbow": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.2.0.tgz",
+ "integrity": "sha512-LgO3D9yZJjApUiuUfl9iFAwrtaX4+lok3wJIqttGoKCHlWUqHqbQpnxCf82L8FjgKsh4iGo78hqJwgL8F6To2A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz",
+ "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-eslint": {
+ "version": "8.72.1",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.72.1.tgz",
+ "integrity": "sha512-3Li9FfPmQp45nxEtFD1ZCrYFI3cYK5kpyNtmm1H7lMagm8u9sy6PTjy3ytwQZs7KNukOyKFHAZ6z6GjYFeaeXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.72.1",
+ "@typescript-eslint/parser": "8.72.1",
+ "@typescript-eslint/typescript-estree": "8.72.1",
+ "@typescript-eslint/utils": "8.72.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz",
+ "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/vite": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.7.tgz",
+ "integrity": "sha512-AHEzTORMbi7/7aXp7w7KZ5+DCUdSeLsJz0grY8xHpc9DHdYb0vQu6DqJfm2tOw3gDExNgPgnJTXxM6syYFHaCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.27.0 || ^0.28.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "lightningcss": "^1.21.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-node": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz",
+ "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cac": "^6.7.14",
+ "debug": "^4.4.1",
+ "es-module-lexer": "^1.7.0",
+ "pathe": "^2.0.3",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ },
+ "bin": {
+ "vite-node": "vite-node.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/vitest": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.12.tgz",
+ "integrity": "sha512-5eWdz2yb3ajxWF3C8C4TjkXl7FGm3n2E/VlazALrQHzK7nYMSGFnCZto0bbPNl77AwkOZVLk0YnBAejUu0NiWA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/expect": "4.1.12",
+ "@vitest/mocker": "4.1.12",
+ "@vitest/pretty-format": "4.1.12",
+ "@vitest/runner": "4.1.12",
+ "@vitest/snapshot": "4.1.12",
+ "@vitest/spy": "4.1.12",
+ "@vitest/utils": "4.1.12",
+ "es-module-lexer": "^2.0.0",
+ "expect-type": "^1.3.0",
+ "magic-string": "^0.30.21",
+ "obug": "^2.1.1",
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3",
+ "std-env": "^4.0.0-rc.1",
+ "tinybench": "^2.9.0",
+ "tinyexec": "^1.0.2",
+ "tinyglobby": "^0.2.15",
+ "tinyrainbow": "^3.1.0",
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0",
+ "why-is-node-running": "^2.3.0"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
+ },
+ "engines": {
+ "node": "^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@opentelemetry/api": "^1.9.0",
+ "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0",
+ "@vitest/browser-playwright": "4.1.12",
+ "@vitest/browser-preview": "4.1.12",
+ "@vitest/browser-webdriverio": "^4.1.11",
+ "@vitest/coverage-istanbul": "4.1.12",
+ "@vitest/coverage-v8": "4.1.12",
+ "@vitest/ui": "4.1.12",
+ "happy-dom": "*",
+ "jsdom": "*",
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@opentelemetry/api": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@vitest/browser-playwright": {
+ "optional": true
+ },
+ "@vitest/browser-preview": {
+ "optional": true
+ },
+ "@vitest/browser-webdriverio": {
+ "optional": true
+ },
+ "@vitest/coverage-istanbul": {
+ "optional": true
+ },
+ "@vitest/coverage-v8": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ },
+ "vite": {
+ "optional": false
+ }
+ }
+ },
+ "node_modules/vitest/node_modules/es-module-lexer": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz",
+ "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/whatwg-mimetype": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
+ "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/why-is-node-running": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
+ "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "siginfo": "^2.0.0",
+ "stackback": "0.0.2"
+ },
+ "bin": {
+ "why-is-node-running": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ws": {
+ "version": "8.22.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz",
+ "integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "4.6.7",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.7.tgz",
+ "integrity": "sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zod-validation-error": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz",
+ "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "zod": "^3.25.0 || ^4.0.0"
+ }
+ }
+ }
+}
diff --git a/frontend/package.json b/frontend/package.json
new file mode 100644
index 00000000..3306d52f
--- /dev/null
+++ b/frontend/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "openverifiablellm-site",
+ "version": "0.3.0",
+ "private": true,
+ "type": "module",
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "scripts": {
+ "data:fetch": "python3 scripts/fetch-evidence.py",
+ "data": "python3 scripts/build-data.py",
+ "data:check": "python3 scripts/build-data.py --check && vite-node scripts/check-data.ts",
+ "dev": "vite",
+ "lint": "eslint . --max-warnings 0",
+ "typecheck": "tsc -p . --noEmit",
+ "test": "vitest run",
+ "build": "npm run data:check && tsc -p . --noEmit && vite build && vite build --ssr src/entry-server.tsx --outDir dist-ssr && node scripts/prerender.mjs && node scripts/check-budget.mjs",
+ "test:e2e": "playwright test",
+ "contrast": "node tools/contrast.mjs",
+ "preview": "node scripts/static-server.mjs",
+ "claims:sync": "node scripts/sync-claims.mjs",
+ "screenshots": "node scripts/screenshots.mjs",
+ "check": "npm run lint && npm run typecheck && npm test && npm run contrast && npm run build && npm run test:e2e"
+ },
+ "dependencies": {
+ "react": "^19.3.1",
+ "react-dom": "^19.3.1"
+ },
+ "devDependencies": {
+ "@axe-core/playwright": "^4.14.0",
+ "@eslint/js": "^9.39.5",
+ "@playwright/test": "^1.64.1",
+ "@testing-library/dom": "^10.4.2",
+ "@testing-library/react": "^16.3.3",
+ "@types/node": "^20.19.43",
+ "@types/react": "^19.3.0",
+ "@types/react-dom": "^19.3.0",
+ "@vitejs/plugin-react": "^5.2.0",
+ "eslint": "^9.39.5",
+ "eslint-plugin-react-hooks": "^7.1.1",
+ "globals": "^17.13.0",
+ "happy-dom": "^21.0.4",
+ "typescript": "^6.0.3",
+ "typescript-eslint": "^8.72.1",
+ "vite": "^7.3.7",
+ "vite-node": "^3.2.4",
+ "vitest": "^4.1.12"
+ }
+}
diff --git a/frontend/playwright.config.ts b/frontend/playwright.config.ts
new file mode 100644
index 00000000..32e1c125
--- /dev/null
+++ b/frontend/playwright.config.ts
@@ -0,0 +1,17 @@
+import { defineConfig } from '@playwright/test';
+
+// Own port per checkout (E2E_PORT) and never reuse a running server: on a shared machine a
+// reused server can be another checkout's dist, which makes the gate test the wrong build.
+const port = Number(process.env.E2E_PORT ?? 4173);
+const origin = `http://127.0.0.1:${port}/`;
+
+// Runs against the static production build (npm run build), served with no SPA fallback.
+export default defineConfig({
+ testDir: './tests/e2e',
+ fullyParallel: true,
+ workers: process.env.CI ? 2 : 4,
+ timeout: 60_000,
+ reporter: [['list']],
+ use: { baseURL: origin, browserName: 'chromium', trace: 'retain-on-failure' },
+ webServer: { command: 'node scripts/static-server.mjs', url: origin, env: { PORT: String(port) }, reuseExistingServer: false },
+});
diff --git a/frontend/public/data/site-data.json b/frontend/public/data/site-data.json
new file mode 100644
index 00000000..c6ab48e4
--- /dev/null
+++ b/frontend/public/data/site-data.json
@@ -0,0 +1,4873 @@
+{
+ "schema": "ovl-site-data.v2",
+ "dataset": "AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence",
+ "revision": "96dc282a9803616c6b30bb31bfc3a0b91a7191e6",
+ "revShort": "96dc282a",
+ "hfTree": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/tree/96dc282a9803616c6b30bb31bfc3a0b91a7191e6",
+ "upstream": {
+ "repo": "https://github.com/AOSSIE-Org/OpenVerifiableLLM",
+ "commit": "1049d2a782b8f63103abfa0cca8deab0d2037290",
+ "short": "1049d2a7"
+ },
+ "rawFiles": {
+ "release/simple-run/chain.jsonl": {
+ "sha256": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "bytes": 19686
+ },
+ "release/simple-run/verifications.jsonl": {
+ "sha256": "ec73fe8fdce56eb075783c37383dbb5afaa23fac168fbd6619c01240de41b770",
+ "bytes": 7355
+ },
+ "release/simple-run/hardware-map.jsonl": {
+ "sha256": "5116f365398795a5e79513a3709d48995cc72a059ae9c69c653e324e723884e4",
+ "bytes": 956
+ },
+ "release/simple-run/release-hashes.txt": {
+ "sha256": "479ce030fa8022f0f92262849f88dfde4c9cf2a0748b8830357f3aa277080e8d",
+ "bytes": 3364
+ },
+ "release/simple-run/anchor.json": {
+ "sha256": "2adaea4cae25439199ec2396c0e6e94d1d14188c070f217ed7e360ce10c1c18d",
+ "bytes": 689
+ },
+ "release/simple-run/anchor.digicert.tsr": {
+ "sha256": "26a643321802ec92eb67f842d770c1d0b69aee66d3e9c3b58f84380a65d08564",
+ "bytes": 6007
+ },
+ "release/simple-run/anchor.freetsa.tsr": {
+ "sha256": "4c1cc74f8596fff22125f285899d50b3ab50b69a6a1023baf3d68139f32cba6f",
+ "bytes": 4644
+ },
+ "release/simple-run/README.md": {
+ "sha256": "d3a4a5b221d9d1bd9318e8e414b44adc75f66155d03cd356b489165243e932e9",
+ "bytes": 8250
+ },
+ "release/simple-run/recipe.json": {
+ "sha256": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d",
+ "bytes": 458
+ },
+ "release/unlearning-3i-atlas/chain.jsonl": {
+ "sha256": "98ffe339f9a0e20458b2615597fdb9ca23b0b12a5bac3873c9327893e724e6c1",
+ "bytes": 20725
+ },
+ "release/unlearning-3i-atlas/verifications.jsonl": {
+ "sha256": "6f23946c7bcb7413a7f8b7fa322f5fa6b3240caa93c6d4d63c5a7133cbc9e7ec",
+ "bytes": 1788
+ },
+ "release/unlearning-3i-atlas/loo-results.json": {
+ "sha256": "c926c965d1e040ab23c591c9dcdd007e5ece75a57ecfa100fd69515d190ead69",
+ "bytes": 2158
+ },
+ "release/unlearning-3i-atlas/release-hashes.txt": {
+ "sha256": "8b5800df8a3f88622d9cd91beb72949b37762e3e0b5f42253cd78c99c54ea508",
+ "bytes": 1044
+ },
+ "release/unlearning-3i-atlas/README.md": {
+ "sha256": "499eb00a91699fa785c94fcbf3d8e96f0ad71d390752ee4523d2b019a010f560",
+ "bytes": 3744
+ },
+ "release/unlearning-3i-atlas/recipe.json": {
+ "sha256": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d",
+ "bytes": 458
+ },
+ "prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json": {
+ "sha256": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68",
+ "bytes": 7985
+ }
+ },
+ "model": {
+ "millionParameters": 23,
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "line": 3,
+ "lineEnd": null,
+ "raw": "A 23-million-parameter GPT trained from a seeded random start on one exact pass over English",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L3"
+ },
+ "recipe": {
+ "layers": 6,
+ "seed": 1234
+ }
+ },
+ "chain": {
+ "entries": 38,
+ "segments": 37,
+ "phases": [
+ {
+ "phase": "wikipedia",
+ "first": 0,
+ "last": 30
+ },
+ {
+ "phase": "conversation",
+ "first": 31,
+ "last": 36
+ }
+ ],
+ "boundaries": [
+ {
+ "index": 0,
+ "kind": "initial",
+ "phase": "wikipedia",
+ "time": 1792422250.861772,
+ "utc": "2026-10-19T15:04:10.861772Z",
+ "model": "2b167bcb407f94ac3f1dead8f316ea180823a1cb40489b8a1ff974bf2bcd959d",
+ "state": "64041a4736bd76b64b149c2a784950a312fb19ed641c7eb87e7300c171d002fc",
+ "previous": null,
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 1,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"10ea13010a13668c8bf9e2884e16bdbd16f8933d9bf4d09eda0c47459133eddb\", \"cursor\": 0, \"epoch\": 0, \"global_step\": 0, \"phase\": \"wikipedia\", \"phase_step\": 0, \"pos\": [0, 0]}, \"data\": {\"conversation\": \"e179de793decc82e8cecfbfabd7d449d1caf145a988c4c881a9a041dcda36b7f\", \"wikipedia\": \"a49baead333842ac36669a62a752ea6204295e4012a6bfa2d8f2b8c85981d832\"}, \"environment\": {\"cublas_workspace\": \":4096:8\", \"cuda\": \"12.8\", \"cudnn\": 91002, \"gpu\": \"NVIDIA GeForce RTX 5090\", \"torch\": \"2.8.0+cu128\"}, \"index\": 0, \"kind\": \"initial\", \"model\": \"2b167bcb407f94ac3f1dead8f316ea180823a1cb40489b8a1ff974bf2bcd959d\", \"previous\": null, \"recipe\": \"d0d9fc61c46b0f0e0b63e336579e7443860141452d881b1e7297ad46439f9fc5\", \"state\": \"64041a4736bd76b64b149c2a784950a312fb19ed641c7eb87e7300c171d002fc\", \"time\": 1792422250.861772}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L1"
+ }
+ },
+ {
+ "index": 1,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792424215.6430938,
+ "utc": "2026-10-19T15:36:55.643094Z",
+ "model": "c32f02fac9e87d0c4279aa39a0fa06b5cc06d5b141d5ff29503cb8431c4ca180",
+ "state": "ef5090325fcf3c392503406ac2f7e6bd99118d267c38fbe4b624df41b48eca8f",
+ "previous": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 2,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"e3f19a5269c4824fb1615d433b678fa54a6fc23ea99fd82c3e83f3f400f66809\", \"cursor\": 274561003, \"epoch\": 0, \"global_step\": 18080, \"phase\": \"wikipedia\", \"phase_step\": 18080, \"pos\": [14363834, 3072]}, \"index\": 1, \"kind\": \"progress\", \"model\": \"c32f02fac9e87d0c4279aa39a0fa06b5cc06d5b141d5ff29503cb8431c4ca180\", \"previous\": \"504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2\", \"state\": \"ef5090325fcf3c392503406ac2f7e6bd99118d267c38fbe4b624df41b48eca8f\", \"time\": 1792424215.6430938}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L2"
+ }
+ },
+ {
+ "index": 2,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792426181.1370955,
+ "utc": "2026-10-19T16:09:41.137095Z",
+ "model": "29c055caaaefce12e962bb5905f79640bf7bcfc2dfe09070704f50a35e954868",
+ "state": "94e253d50adff230867baf0f9b2fbb247399b598511dd238cca10838439a228c",
+ "previous": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 3,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"d5b199348b8d97e5a30ee2ea1a9bc465fd5dc0220a1a4297b4fa0716abdc84dc\", \"cursor\": 547313827, \"epoch\": 0, \"global_step\": 36160, \"phase\": \"wikipedia\", \"phase_step\": 36160, \"pos\": [30161308, 6656]}, \"index\": 2, \"kind\": \"progress\", \"model\": \"29c055caaaefce12e962bb5905f79640bf7bcfc2dfe09070704f50a35e954868\", \"previous\": \"7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f\", \"state\": \"94e253d50adff230867baf0f9b2fbb247399b598511dd238cca10838439a228c\", \"time\": 1792426181.1370955}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L3"
+ }
+ },
+ {
+ "index": 3,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792428164.4587104,
+ "utc": "2026-10-19T16:42:44.458710Z",
+ "model": "bc0210cc1ce7eb55786921b9be9142224551daaa14a5a94b5851415d9954513f",
+ "state": "63f2f1cf69a97b295ef4924af836583cc5942d4cfdde34a0d68da658e9b56875",
+ "previous": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 4,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"f520d10b29d43cbbe5556d887bd7e622a26ed3003eaa8677366993ed6a0965df\", \"cursor\": 812314162, \"epoch\": 0, \"global_step\": 54240, \"phase\": \"wikipedia\", \"phase_step\": 54240, \"pos\": [50875269, 0]}, \"index\": 3, \"kind\": \"progress\", \"model\": \"bc0210cc1ce7eb55786921b9be9142224551daaa14a5a94b5851415d9954513f\", \"previous\": \"491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789\", \"state\": \"63f2f1cf69a97b295ef4924af836583cc5942d4cfdde34a0d68da658e9b56875\", \"time\": 1792428164.4587104}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L4"
+ }
+ },
+ {
+ "index": 4,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792430142.4307606,
+ "utc": "2026-10-19T17:15:42.430761Z",
+ "model": "f6c1733d73e556de085fd9cb99f4137296f9ad7835fc3c88c9f8588cfeca0165",
+ "state": "38544968f3a1f342c17ee65afed30915acacf2131314c3254cfb1d3367acf0f6",
+ "previous": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 5,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"9b1c36b8b217b225ab637476b5f96e9d13723e8ff2f49474a1aff9fe4b6c6836\", \"cursor\": 1071169817, \"epoch\": 0, \"global_step\": 72320, \"phase\": \"wikipedia\", \"phase_step\": 72320, \"pos\": [75821490, 512]}, \"index\": 4, \"kind\": \"progress\", \"model\": \"f6c1733d73e556de085fd9cb99f4137296f9ad7835fc3c88c9f8588cfeca0165\", \"previous\": \"21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37\", \"state\": \"38544968f3a1f342c17ee65afed30915acacf2131314c3254cfb1d3367acf0f6\", \"time\": 1792430142.4307606}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L5"
+ }
+ },
+ {
+ "index": 5,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792432107.6645238,
+ "utc": "2026-10-19T17:48:27.664524Z",
+ "model": "521f1f5f34c6a0992a15e539f1eab5f5590f5fdca15fdf16c60842c1d8612754",
+ "state": "0f66051bfcf2b8512da505733cf9814527aba0412b28109071d9ebe1e7949165",
+ "previous": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 6,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"0feb0c99169621a584609ce24a7ba1710f4dd1127205dae3911df09e1ab75698\", \"cursor\": 1326339931, \"epoch\": 0, \"global_step\": 90400, \"phase\": \"wikipedia\", \"phase_step\": 90400, \"pos\": [103716532, 512]}, \"index\": 5, \"kind\": \"progress\", \"model\": \"521f1f5f34c6a0992a15e539f1eab5f5590f5fdca15fdf16c60842c1d8612754\", \"previous\": \"7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6\", \"state\": \"0f66051bfcf2b8512da505733cf9814527aba0412b28109071d9ebe1e7949165\", \"time\": 1792432107.6645238}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L6"
+ }
+ },
+ {
+ "index": 6,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792434050.5597794,
+ "utc": "2026-10-19T18:20:50.559779Z",
+ "model": "655aa1b3b7f5a34c9f0a2eba172ddbfef233acb3f121373e351b6d2cd982475f",
+ "state": "d3f93a22ceb28a8640734ceca70e0217cf991b696807ecb6fdd31d318ad30aa8",
+ "previous": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 7,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"dd5c823c56a28362db599fa09567143434f9f343784400622105200695fca78d\", \"cursor\": 1575735740, \"epoch\": 0, \"global_step\": 108480, \"phase\": \"wikipedia\", \"phase_step\": 108480, \"pos\": [135269108, 0]}, \"index\": 6, \"kind\": \"progress\", \"model\": \"655aa1b3b7f5a34c9f0a2eba172ddbfef233acb3f121373e351b6d2cd982475f\", \"previous\": \"5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa\", \"state\": \"d3f93a22ceb28a8640734ceca70e0217cf991b696807ecb6fdd31d318ad30aa8\", \"time\": 1792434050.5597794}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L7"
+ }
+ },
+ {
+ "index": 7,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792435994.2637668,
+ "utc": "2026-10-19T18:53:14.263767Z",
+ "model": "ab677b66cfcc2d0652d37b5cc354e5d6980716b273cc99b78ae53f63e581ba14",
+ "state": "228e635e6ee63fca5189f1af685f15c9d52a27527f300e7dac7a5ade82688e11",
+ "previous": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 8,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"496333b0221dbc6a2edeeb9ea5318d3b33069b8f91c98d489cf742f70bab1d43\", \"cursor\": 1821662484, \"epoch\": 0, \"global_step\": 126560, \"phase\": \"wikipedia\", \"phase_step\": 126560, \"pos\": [169162007, 512]}, \"index\": 7, \"kind\": \"progress\", \"model\": \"ab677b66cfcc2d0652d37b5cc354e5d6980716b273cc99b78ae53f63e581ba14\", \"previous\": \"bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a\", \"state\": \"228e635e6ee63fca5189f1af685f15c9d52a27527f300e7dac7a5ade82688e11\", \"time\": 1792435994.2637668}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L8"
+ }
+ },
+ {
+ "index": 8,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792437967.4633026,
+ "utc": "2026-10-19T19:26:07.463303Z",
+ "model": "4419b42c7902c6f650e634055a1de54ca172e2a0a26c5bbad58ee8516cf4dfc6",
+ "state": "6cb7cf58b036f71d793b7940617d2756e4d24e906a8a4fdb6ec58ee56031ad53",
+ "previous": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 9,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"a009f3186720dd943c7c0e3c597706610370b795c3fd87b65df4ce8cdc54822d\", \"cursor\": 2062246462, \"epoch\": 0, \"global_step\": 144640, \"phase\": \"wikipedia\", \"phase_step\": 144640, \"pos\": [206335253, 0]}, \"index\": 8, \"kind\": \"progress\", \"model\": \"4419b42c7902c6f650e634055a1de54ca172e2a0a26c5bbad58ee8516cf4dfc6\", \"previous\": \"8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc\", \"state\": \"6cb7cf58b036f71d793b7940617d2756e4d24e906a8a4fdb6ec58ee56031ad53\", \"time\": 1792437967.4633026}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L9"
+ }
+ },
+ {
+ "index": 9,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792439938.9320748,
+ "utc": "2026-10-19T19:58:58.932075Z",
+ "model": "967ff641117b62e0f4bbb19fda16cfb7a1b6c20adc35295ff0738a0664953048",
+ "state": "0947a1b7cb257922ed1bb71e36059bdde1fa1c76509255c1af8cb3167bff72db",
+ "previous": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 10,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"9f883e76562c687ddae51575bda5430cc91dbc45e57e7311d3646340a420a020\", \"cursor\": 2299429619, \"epoch\": 0, \"global_step\": 162720, \"phase\": \"wikipedia\", \"phase_step\": 162720, \"pos\": [245609368, 0]}, \"index\": 9, \"kind\": \"progress\", \"model\": \"967ff641117b62e0f4bbb19fda16cfb7a1b6c20adc35295ff0738a0664953048\", \"previous\": \"09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae\", \"state\": \"0947a1b7cb257922ed1bb71e36059bdde1fa1c76509255c1af8cb3167bff72db\", \"time\": 1792439938.9320748}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L10"
+ }
+ },
+ {
+ "index": 10,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792441925.2640333,
+ "utc": "2026-10-19T20:32:05.264033Z",
+ "model": "cb2fbe49be6ead1201600d45004f411c7ed3ba0d532ebe2417b1a43ba40d9889",
+ "state": "e162c0ef79462cfcc2c88cd336170df12f92f1f6d099920decca178da9dd455a",
+ "previous": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 11,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"14ffdd92074c743ba35ff842d9d2956a29ff1ecf6b93820fc1bedb2161e2f20f\", \"cursor\": 2534896708, \"epoch\": 0, \"global_step\": 180800, \"phase\": \"wikipedia\", \"phase_step\": 180800, \"pos\": [285958813, 5632]}, \"index\": 10, \"kind\": \"progress\", \"model\": \"cb2fbe49be6ead1201600d45004f411c7ed3ba0d532ebe2417b1a43ba40d9889\", \"previous\": \"e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43\", \"state\": \"e162c0ef79462cfcc2c88cd336170df12f92f1f6d099920decca178da9dd455a\", \"time\": 1792441925.2640333}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L11"
+ }
+ },
+ {
+ "index": 11,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792445221.8958924,
+ "utc": "2026-10-19T21:27:01.895892Z",
+ "model": "21e5ccc4f7a7b4c8b311febbdcb0cd037a2efff64c715935853fa663b61e5aeb",
+ "state": "be21dd4e7d988157822d75f6600146be013afa826076b49b45b3874e5a2bd1ca",
+ "previous": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 12,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"7321c9e7f9b890c6b657525ffc10389c70e730b37f0ccaa0281264b7aaeec2ca\", \"cursor\": 2758953574, \"epoch\": 0, \"global_step\": 198880, \"phase\": \"wikipedia\", \"phase_step\": 198880, \"pos\": [331465519, 0]}, \"index\": 11, \"kind\": \"progress\", \"model\": \"21e5ccc4f7a7b4c8b311febbdcb0cd037a2efff64c715935853fa663b61e5aeb\", \"previous\": \"19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b\", \"state\": \"be21dd4e7d988157822d75f6600146be013afa826076b49b45b3874e5a2bd1ca\", \"time\": 1792445221.8958924}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L12"
+ }
+ },
+ {
+ "index": 12,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792447305.2481282,
+ "utc": "2026-10-19T22:01:45.248128Z",
+ "model": "ee22252416c44a8812aab40b456c60351eaf714679495ef7c39a81c3d24db503",
+ "state": "c9d571c059311fbeb20f46d33a56497113b1f3705b75939ef57e61cc98978ca6",
+ "previous": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 13,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"0d86e2942f9d84483cd0e3cd5168d81cf418e915c04e25f94c03d3ad703c648d\", \"cursor\": 2977003841, \"epoch\": 0, \"global_step\": 216960, \"phase\": \"wikipedia\", \"phase_step\": 216960, \"pos\": [379051570, 512]}, \"index\": 12, \"kind\": \"progress\", \"model\": \"ee22252416c44a8812aab40b456c60351eaf714679495ef7c39a81c3d24db503\", \"previous\": \"5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18\", \"state\": \"c9d571c059311fbeb20f46d33a56497113b1f3705b75939ef57e61cc98978ca6\", \"time\": 1792447305.2481282}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L13"
+ }
+ },
+ {
+ "index": 13,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792449363.6749403,
+ "utc": "2026-10-19T22:36:03.674940Z",
+ "model": "978af11d622fb0e48dd842f5aa27e9992c267de2a91944b1b3b160aa89fa7675",
+ "state": "2733d7ef9aaacf20880e2196c819305f58ad0cc03494704fbc9f5e03a95931b2",
+ "previous": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 14,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"bfe949e391619c70945f4ad5af5f73c00f8d44562f44733457ad865081612290\", \"cursor\": 3192270243, \"epoch\": 0, \"global_step\": 235040, \"phase\": \"wikipedia\", \"phase_step\": 235040, \"pos\": [427598539, 0]}, \"index\": 13, \"kind\": \"progress\", \"model\": \"978af11d622fb0e48dd842f5aa27e9992c267de2a91944b1b3b160aa89fa7675\", \"previous\": \"54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165\", \"state\": \"2733d7ef9aaacf20880e2196c819305f58ad0cc03494704fbc9f5e03a95931b2\", \"time\": 1792449363.6749403}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L14"
+ }
+ },
+ {
+ "index": 14,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792451498.6016607,
+ "utc": "2026-10-19T23:11:38.601661Z",
+ "model": "613728906a531097849fcaa83d13ccb54b334d805aeaef8abe127ef2b7b70e1d",
+ "state": "145353afb1e2ebc2b5f9831fed74e5631b42a11342aab9a0b9febe796446c446",
+ "previous": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 15,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"7eea41e27f71c52d58558b90de9ef7cd26ac9123366132bcbc1e71f4de08acf4\", \"cursor\": 3407720912, \"epoch\": 0, \"global_step\": 253120, \"phase\": \"wikipedia\", \"phase_step\": 253120, \"pos\": [476680277, 0]}, \"index\": 14, \"kind\": \"progress\", \"model\": \"613728906a531097849fcaa83d13ccb54b334d805aeaef8abe127ef2b7b70e1d\", \"previous\": \"dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f\", \"state\": \"145353afb1e2ebc2b5f9831fed74e5631b42a11342aab9a0b9febe796446c446\", \"time\": 1792451498.6016607}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L15"
+ }
+ },
+ {
+ "index": 15,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792453682.104504,
+ "utc": "2026-10-19T23:48:02.104504Z",
+ "model": "0f122b6387647c6844f6668edc95b2b96efd34885985e80c25a1eb424c7ffa2c",
+ "state": "fa961c767d2e293f12adcd13a3410d345e3bb5952395725963eb2f6e5c228d9e",
+ "previous": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 16,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"c294ad7b42d0f2e970f3c757f339b24f6fbdc2982e9a91078a071b121b9325a1\", \"cursor\": 3626056290, \"epoch\": 0, \"global_step\": 271200, \"phase\": \"wikipedia\", \"phase_step\": 271200, \"pos\": [524689002, 0]}, \"index\": 15, \"kind\": \"progress\", \"model\": \"0f122b6387647c6844f6668edc95b2b96efd34885985e80c25a1eb424c7ffa2c\", \"previous\": \"74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa\", \"state\": \"fa961c767d2e293f12adcd13a3410d345e3bb5952395725963eb2f6e5c228d9e\", \"time\": 1792453682.104504}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L16"
+ }
+ },
+ {
+ "index": 16,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792455885.299576,
+ "utc": "2026-10-20T00:24:45.299576Z",
+ "model": "9a1a2f4ad99c6aac613f620400dc405a8967906e435079c0d8d29622831044fa",
+ "state": "82d7f95aaed27c4ac54ec6b8de9567a84d818a875673030c4ae0d2d39a860754",
+ "previous": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 17,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"4d0765884b5a4f4af81e17f0914a728e631c665fa74ec82be39e458f3f4f40c1\", \"cursor\": 3842372860, \"epoch\": 0, \"global_step\": 289280, \"phase\": \"wikipedia\", \"phase_step\": 289280, \"pos\": [573811026, 2048]}, \"index\": 16, \"kind\": \"progress\", \"model\": \"9a1a2f4ad99c6aac613f620400dc405a8967906e435079c0d8d29622831044fa\", \"previous\": \"02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722\", \"state\": \"82d7f95aaed27c4ac54ec6b8de9567a84d818a875673030c4ae0d2d39a860754\", \"time\": 1792455885.299576}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L17"
+ }
+ },
+ {
+ "index": 17,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792458112.5074773,
+ "utc": "2026-10-20T01:01:52.507477Z",
+ "model": "1e77516fc3d4c149c17b5e039ba9a886f520769df7512002fe89a9e5148f7d6e",
+ "state": "1082ced41232e82ff83506f0c20d887d0ddc3dc7458bc3ace5361a87485e5b60",
+ "previous": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 18,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"a219629293cfc4e69c74916379ba790f96b8a5425bd9fb7f4d9e481965ec9374\", \"cursor\": 4065481916, \"epoch\": 0, \"global_step\": 307360, \"phase\": \"wikipedia\", \"phase_step\": 307360, \"pos\": [619889558, 18944]}, \"index\": 17, \"kind\": \"progress\", \"model\": \"1e77516fc3d4c149c17b5e039ba9a886f520769df7512002fe89a9e5148f7d6e\", \"previous\": \"d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f\", \"state\": \"1082ced41232e82ff83506f0c20d887d0ddc3dc7458bc3ace5361a87485e5b60\", \"time\": 1792458112.5074773}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L18"
+ }
+ },
+ {
+ "index": 18,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792460358.5080163,
+ "utc": "2026-10-20T01:39:18.508016Z",
+ "model": "4d79bcc6ee8060a9c28a5802c142f972665bafae70901176c9a964bc884f1dee",
+ "state": "0d4932793bd2279c0a17b3ca736159f89d48898d8a42113d15c7590dfdd85c26",
+ "previous": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 19,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"fbdade37939ffab2c5df52a9db88c8bac93a5501861522a30f1a50ebcafb4b3e\", \"cursor\": 4280170919, \"epoch\": 0, \"global_step\": 325440, \"phase\": \"wikipedia\", \"phase_step\": 325440, \"pos\": [669406302, 0]}, \"index\": 18, \"kind\": \"progress\", \"model\": \"4d79bcc6ee8060a9c28a5802c142f972665bafae70901176c9a964bc884f1dee\", \"previous\": \"2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7\", \"state\": \"0d4932793bd2279c0a17b3ca736159f89d48898d8a42113d15c7590dfdd85c26\", \"time\": 1792460358.5080163}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L19"
+ }
+ },
+ {
+ "index": 19,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792462598.3975008,
+ "utc": "2026-10-20T02:16:38.397501Z",
+ "model": "9e597fcc4fc74828e30605677e3696a53b77a6976fecdc4f0e06b378e6721ee9",
+ "state": "cafd56b605b39449655b55534cd4e33616de0d40e6c3434fcd1a54c941e63191",
+ "previous": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 20,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"32161f48812917ee1bed7a4367df261934308045464246622f47dba2ab129f2a\", \"cursor\": 4492270493, \"epoch\": 0, \"global_step\": 343520, \"phase\": \"wikipedia\", \"phase_step\": 343520, \"pos\": [719769225, 2048]}, \"index\": 19, \"kind\": \"progress\", \"model\": \"9e597fcc4fc74828e30605677e3696a53b77a6976fecdc4f0e06b378e6721ee9\", \"previous\": \"a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89\", \"state\": \"cafd56b605b39449655b55534cd4e33616de0d40e6c3434fcd1a54c941e63191\", \"time\": 1792462598.3975008}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L20"
+ }
+ },
+ {
+ "index": 20,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792463768.5816014,
+ "utc": "2026-10-20T02:36:08.581601Z",
+ "model": "f98ab99a90c7734a3f4cf2d60216ed8b1bdc657541ec3374c6f035b0bd42a307",
+ "state": "708b48121052bf9bc68bbd67e8613230dd713b9569610a4e66838fe45f35299a",
+ "previous": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 21,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"30c019ac1c173f6d688cdd4bd01e7ceaf9ed1376251e69d87cb9643b4386116b\", \"cursor\": 4705349595, \"epoch\": 0, \"global_step\": 361600, \"phase\": \"wikipedia\", \"phase_step\": 361600, \"pos\": [769153707, 4608]}, \"index\": 20, \"kind\": \"progress\", \"model\": \"f98ab99a90c7734a3f4cf2d60216ed8b1bdc657541ec3374c6f035b0bd42a307\", \"previous\": \"e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f\", \"state\": \"708b48121052bf9bc68bbd67e8613230dd713b9569610a4e66838fe45f35299a\", \"time\": 1792463768.5816014}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L21"
+ }
+ },
+ {
+ "index": 21,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792465514.4536183,
+ "utc": "2026-10-20T03:05:14.453618Z",
+ "model": "b89d3b185a1fcf21bcc5ef432a26eafc9643eb62b9aa3d8eeb624cbfceeea340",
+ "state": "eb31ec48c4ce9373035fe1229a93190fcfec9060d1bc8520f62ed3dfcab752fa",
+ "previous": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 22,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"09506b60c4342ec5873bba53f2e993f0a46e1b726fc3449ce690e5e4eb43927c\", \"cursor\": 4919188008, \"epoch\": 0, \"global_step\": 379680, \"phase\": \"wikipedia\", \"phase_step\": 379680, \"pos\": [818886901, 0]}, \"index\": 21, \"kind\": \"progress\", \"model\": \"b89d3b185a1fcf21bcc5ef432a26eafc9643eb62b9aa3d8eeb624cbfceeea340\", \"previous\": \"d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03\", \"state\": \"eb31ec48c4ce9373035fe1229a93190fcfec9060d1bc8520f62ed3dfcab752fa\", \"time\": 1792465514.4536183}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L22"
+ }
+ },
+ {
+ "index": 22,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792468481.591845,
+ "utc": "2026-10-20T03:54:41.591845Z",
+ "model": "1428e4c6cddc484d305881220b68eb5e04eb851632e1ae7d4f61725e0b24708b",
+ "state": "ee97359b8f9928977515e383d98a796d442444b5a07de5c9ec1158d372cc0e49",
+ "previous": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 23,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"27f95fcd8bc5e1b25cea97a17fd58ce6f6771b5b15565014616d4519ab8c8184\", \"cursor\": 5137669818, \"epoch\": 0, \"global_step\": 397760, \"phase\": \"wikipedia\", \"phase_step\": 397760, \"pos\": [867774445, 512]}, \"index\": 22, \"kind\": \"progress\", \"model\": \"1428e4c6cddc484d305881220b68eb5e04eb851632e1ae7d4f61725e0b24708b\", \"previous\": \"69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d\", \"state\": \"ee97359b8f9928977515e383d98a796d442444b5a07de5c9ec1158d372cc0e49\", \"time\": 1792468481.591845}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L23"
+ }
+ },
+ {
+ "index": 23,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792469631.0069373,
+ "utc": "2026-10-20T04:13:51.006937Z",
+ "model": "8948b0defe4c934602354d44e72ceb0b34c46d87bb7a67832fa50ea581b57d16",
+ "state": "296c1763d3421f6991f4f841f4143166bf0910000e5b00673383a4589859483f",
+ "previous": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 24,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"2ac5c320056a9766eaf2f910194309a2e1e3254958d1fe2e4afa92805ee04b28\", \"cursor\": 5354659564, \"epoch\": 0, \"global_step\": 415840, \"phase\": \"wikipedia\", \"phase_step\": 415840, \"pos\": [917385337, 0]}, \"index\": 23, \"kind\": \"progress\", \"model\": \"8948b0defe4c934602354d44e72ceb0b34c46d87bb7a67832fa50ea581b57d16\", \"previous\": \"5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0\", \"state\": \"296c1763d3421f6991f4f841f4143166bf0910000e5b00673383a4589859483f\", \"time\": 1792469631.0069373}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L24"
+ }
+ },
+ {
+ "index": 24,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792470779.9569445,
+ "utc": "2026-10-20T04:32:59.956944Z",
+ "model": "c553304d081e5817ba0e042bcdef7f1cf9642a290b006edab98778abd18eeedc",
+ "state": "6413ef4ca2bf9d47a89302d88662069fde930d732c4df7d0892f30ed64d3756d",
+ "previous": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 25,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"3fae190c7c836188101a7a77d6046446431892e109590436e4c94a3ed1da8c13\", \"cursor\": 5571989843, \"epoch\": 0, \"global_step\": 433920, \"phase\": \"wikipedia\", \"phase_step\": 433920, \"pos\": [966632574, 8192]}, \"index\": 24, \"kind\": \"progress\", \"model\": \"c553304d081e5817ba0e042bcdef7f1cf9642a290b006edab98778abd18eeedc\", \"previous\": \"44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99\", \"state\": \"6413ef4ca2bf9d47a89302d88662069fde930d732c4df7d0892f30ed64d3756d\", \"time\": 1792470779.9569445}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L25"
+ }
+ },
+ {
+ "index": 25,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792471931.509705,
+ "utc": "2026-10-20T04:52:11.509705Z",
+ "model": "1f1becfa5470bac9a31962462d4d85647598dc8f75277e2f9c6efe5bc59ada97",
+ "state": "245211135b131b6c5e1940458575033082b4b473fa0033b55816d889c82d656b",
+ "previous": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 26,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"b77680f3b1febcf15d5adac2f244b845ea1ca7ae5837e9ce9e57a9b9661033c6\", \"cursor\": 5786932809, \"epoch\": 0, \"global_step\": 452000, \"phase\": \"wikipedia\", \"phase_step\": 452000, \"pos\": [1015978804, 2048]}, \"index\": 25, \"kind\": \"progress\", \"model\": \"1f1becfa5470bac9a31962462d4d85647598dc8f75277e2f9c6efe5bc59ada97\", \"previous\": \"05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a\", \"state\": \"245211135b131b6c5e1940458575033082b4b473fa0033b55816d889c82d656b\", \"time\": 1792471931.509705}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L26"
+ }
+ },
+ {
+ "index": 26,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792473082.0379794,
+ "utc": "2026-10-20T05:11:22.037979Z",
+ "model": "6a59289ec3928857e0beacc7858e190c0756c72f2cdf48896578bb75720fa72a",
+ "state": "7b1ab9b324ac43d99f738ee00e3ef2b514e8dcc82313863c1d8f6e871d42bbb8",
+ "previous": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 27,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"44eaf0d468c5578cc89e3999530132727e41ac47cbfcc8fcf80a7621b527cda0\", \"cursor\": 6003090585, \"epoch\": 0, \"global_step\": 470080, \"phase\": \"wikipedia\", \"phase_step\": 470080, \"pos\": [1065027050, 0]}, \"index\": 26, \"kind\": \"progress\", \"model\": \"6a59289ec3928857e0beacc7858e190c0756c72f2cdf48896578bb75720fa72a\", \"previous\": \"01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0\", \"state\": \"7b1ab9b324ac43d99f738ee00e3ef2b514e8dcc82313863c1d8f6e871d42bbb8\", \"time\": 1792473082.0379794}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L27"
+ }
+ },
+ {
+ "index": 27,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792474229.018975,
+ "utc": "2026-10-20T05:30:29.018975Z",
+ "model": "5329233dbd65f90b4c368e40c725c59496c03266053f934c4be9c4ef73e3ec73",
+ "state": "0ec654850f2c1288c7850e9e732b52187dcc5f73fffe0f3bc211143e32097e7a",
+ "previous": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 28,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"58cf98d2ec42837434cc698720602c1ed7a427f1b7075de7b56e1957e42d7b7b\", \"cursor\": 6219792471, \"epoch\": 0, \"global_step\": 488160, \"phase\": \"wikipedia\", \"phase_step\": 488160, \"pos\": [1113864691, 1024]}, \"index\": 27, \"kind\": \"progress\", \"model\": \"5329233dbd65f90b4c368e40c725c59496c03266053f934c4be9c4ef73e3ec73\", \"previous\": \"6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e\", \"state\": \"0ec654850f2c1288c7850e9e732b52187dcc5f73fffe0f3bc211143e32097e7a\", \"time\": 1792474229.018975}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L28"
+ }
+ },
+ {
+ "index": 28,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792475372.9946525,
+ "utc": "2026-10-20T05:49:32.994653Z",
+ "model": "d6e1eaab6061fc051ae6de60bb6c95d99d1b98c6bcddfdcbbd593208b7d8a303",
+ "state": "e5891f8db717f770246c4255fa6598ba280922c428e9e1e6d814f5d96549cab1",
+ "previous": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 29,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"8e7e2738dac57947ab3894def88fc8bfb84e0b8c55095fcd33d66e2699dabab5\", \"cursor\": 6444391263, \"epoch\": 0, \"global_step\": 506240, \"phase\": \"wikipedia\", \"phase_step\": 506240, \"pos\": [1159432427, 0]}, \"index\": 28, \"kind\": \"progress\", \"model\": \"d6e1eaab6061fc051ae6de60bb6c95d99d1b98c6bcddfdcbbd593208b7d8a303\", \"previous\": \"339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c\", \"state\": \"e5891f8db717f770246c4255fa6598ba280922c428e9e1e6d814f5d96549cab1\", \"time\": 1792475372.9946525}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L29"
+ }
+ },
+ {
+ "index": 29,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792476512.00237,
+ "utc": "2026-10-20T06:08:32.002370Z",
+ "model": "3c5459d2bdcdb86d05168a8a78370aa7f772cb6f48ab11e6949164ec6d30fdc0",
+ "state": "ab0f669782c60bf45255e4822fee5fe5425a24b614d10dc0821323ca7325853c",
+ "previous": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 30,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"7b351d64e2a3d2492e668dcfd73d82ce92c0ba04fdd4c3058c95d4e642a6807d\", \"cursor\": 6671911669, \"epoch\": 0, \"global_step\": 524320, \"phase\": \"wikipedia\", \"phase_step\": 524320, \"pos\": [1203647118, 0]}, \"index\": 29, \"kind\": \"progress\", \"model\": \"3c5459d2bdcdb86d05168a8a78370aa7f772cb6f48ab11e6949164ec6d30fdc0\", \"previous\": \"9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5\", \"state\": \"ab0f669782c60bf45255e4822fee5fe5425a24b614d10dc0821323ca7325853c\", \"time\": 1792476512.00237}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L30"
+ }
+ },
+ {
+ "index": 30,
+ "kind": "progress",
+ "phase": "wikipedia",
+ "time": 1792477651.6187513,
+ "utc": "2026-10-20T06:27:31.618751Z",
+ "model": "bdfa54d7eb2938c8fe3258528e5cb84287c54f889471eb60909e7d8c6aca8061",
+ "state": "baf0f2694f6f7561b6e427c0181978541c19263849163984131f51dad72b6c38",
+ "previous": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 31,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"304b2d3afe5a67a5ef902cb8334a55ee6f89877d474b438fb9c94e507814dece\", \"cursor\": 6901668826, \"epoch\": 0, \"global_step\": 542400, \"phase\": \"wikipedia\", \"phase_step\": 542400, \"pos\": [1246875101, 0]}, \"index\": 30, \"kind\": \"progress\", \"model\": \"bdfa54d7eb2938c8fe3258528e5cb84287c54f889471eb60909e7d8c6aca8061\", \"previous\": \"e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b\", \"state\": \"baf0f2694f6f7561b6e427c0181978541c19263849163984131f51dad72b6c38\", \"time\": 1792477651.6187513}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L31"
+ }
+ },
+ {
+ "index": 31,
+ "kind": "base",
+ "phase": "wikipedia",
+ "time": 1792478775.2381847,
+ "utc": "2026-10-20T06:46:15.238185Z",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "state": "13d6ad64b2465d42653f250bba0463468c0c81b7980ebc9d97e3b0f95c713bf1",
+ "previous": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 32,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875\", \"cursor\": 7118121139, \"epoch\": 0, \"global_step\": 560177, \"phase\": \"wikipedia\", \"phase_step\": 560177, \"pos\": [1293950757, 0]}, \"index\": 31, \"kind\": \"base\", \"model\": \"31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f\", \"previous\": \"2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39\", \"state\": \"13d6ad64b2465d42653f250bba0463468c0c81b7980ebc9d97e3b0f95c713bf1\", \"time\": 1792478775.2381847}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L32"
+ }
+ },
+ {
+ "index": 32,
+ "kind": "transition",
+ "phase": "conversation",
+ "time": 1792478776.1264164,
+ "utc": "2026-10-20T06:46:16.126416Z",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "state": "8987fdd57ba91b044c23bba48cf41b132aa6ec949c4af650ba3180483476941d",
+ "previous": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 33,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875\", \"cursor\": 0, \"epoch\": 0, \"global_step\": 560177, \"phase\": \"conversation\", \"phase_step\": 0, \"pos\": [0, 0]}, \"index\": 32, \"kind\": \"transition\", \"model\": \"31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f\", \"previous\": \"5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a\", \"state\": \"8987fdd57ba91b044c23bba48cf41b132aa6ec949c4af650ba3180483476941d\", \"time\": 1792478776.1264164}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L33"
+ }
+ },
+ {
+ "index": 33,
+ "kind": "epoch",
+ "phase": "conversation",
+ "time": 1792478785.6187253,
+ "utc": "2026-10-20T06:46:25.618725Z",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "previous": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 34,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67\", \"cursor\": 1278137, \"epoch\": 0, \"global_step\": 560324, \"phase\": \"conversation\", \"phase_step\": 147, \"pos\": [849666, 0]}, \"index\": 33, \"kind\": \"epoch\", \"model\": \"fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e\", \"previous\": \"98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8\", \"state\": \"47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03\", \"time\": 1792478785.6187253}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L34"
+ }
+ },
+ {
+ "index": 34,
+ "kind": "transition",
+ "phase": "conversation",
+ "time": 1792478786.6568494,
+ "utc": "2026-10-20T06:46:26.656849Z",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "previous": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 35,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67\", \"cursor\": 0, \"epoch\": 1, \"global_step\": 560324, \"phase\": \"conversation\", \"phase_step\": 0, \"pos\": [0, 0]}, \"index\": 34, \"kind\": \"transition\", \"model\": \"fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e\", \"previous\": \"94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035\", \"state\": \"47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03\", \"time\": 1792478786.6568494}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L35"
+ }
+ },
+ {
+ "index": 35,
+ "kind": "epoch",
+ "phase": "conversation",
+ "time": 1792478796.331579,
+ "utc": "2026-10-20T06:46:36.331579Z",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "previous": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 36,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023\", \"cursor\": 1278137, \"epoch\": 1, \"global_step\": 560471, \"phase\": \"conversation\", \"phase_step\": 147, \"pos\": [849666, 0]}, \"index\": 35, \"kind\": \"epoch\", \"model\": \"eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda\", \"previous\": \"65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f\", \"state\": \"e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2\", \"time\": 1792478796.331579}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L36"
+ }
+ },
+ {
+ "index": 36,
+ "kind": "transition",
+ "phase": "conversation",
+ "time": 1792478797.354915,
+ "utc": "2026-10-20T06:46:37.354915Z",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "previous": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 37,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023\", \"cursor\": 0, \"epoch\": 2, \"global_step\": 560471, \"phase\": \"conversation\", \"phase_step\": 0, \"pos\": [0, 0]}, \"index\": 36, \"kind\": \"transition\", \"model\": \"eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda\", \"previous\": \"8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042\", \"state\": \"e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2\", \"time\": 1792478797.354915}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L37"
+ }
+ },
+ {
+ "index": 37,
+ "kind": "final",
+ "phase": "conversation",
+ "time": 1792478807.0463226,
+ "utc": "2026-10-20T06:46:47.046323Z",
+ "model": "ec9a2b31ca524613f791aba00f4f7f31e4a7bf4a8a921e0deb81c1a922d0958b",
+ "state": "934d681c99e5c3e10617e82dbbb0ae0ddd1ad4e32cf45e8e3a6d2ed94b69f200",
+ "previous": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "line": 38,
+ "lineEnd": null,
+ "raw": "{\"control\": {\"batches\": \"1fd22db0ab89ab98045f8c4b32ce4e4d55453163390ec9ebd5792dfc38fd5a52\", \"cursor\": 1278137, \"epoch\": 2, \"global_step\": 560618, \"phase\": \"conversation\", \"phase_step\": 147, \"pos\": [849666, 0]}, \"index\": 37, \"kind\": \"final\", \"model\": \"ec9a2b31ca524613f791aba00f4f7f31e4a7bf4a8a921e0deb81c1a922d0958b\", \"previous\": \"68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb\", \"state\": \"934d681c99e5c3e10617e82dbbb0ae0ddd1ad4e32cf45e8e3a6d2ed94b69f200\", \"time\": 1792478807.0463226}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L38"
+ }
+ }
+ ],
+ "start": "2026-10-19T15:04:10.861772Z",
+ "end": "2026-10-20T06:46:47.046323Z",
+ "kinds": {
+ "base": 1,
+ "epoch": 2,
+ "final": 1,
+ "initial": 1,
+ "progress": 30,
+ "transition": 3
+ }
+ },
+ "verifications": {
+ "rows": [
+ {
+ "segment": 0,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 1,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 0}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L1"
+ }
+ },
+ {
+ "segment": 1,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 2,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 1}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L2"
+ }
+ },
+ {
+ "segment": 2,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 3,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 2}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L3"
+ }
+ },
+ {
+ "segment": 3,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 4,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 3}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L4"
+ }
+ },
+ {
+ "segment": 4,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 5,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 4}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L5"
+ }
+ },
+ {
+ "segment": 5,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 6,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 5}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L6"
+ }
+ },
+ {
+ "segment": 6,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 7,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 6}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L7"
+ }
+ },
+ {
+ "segment": 7,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 8,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 7}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L8"
+ }
+ },
+ {
+ "segment": 8,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 9,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 8}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L9"
+ }
+ },
+ {
+ "segment": 9,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 10,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 9}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L10"
+ }
+ },
+ {
+ "segment": 10,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 11,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 10}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L11"
+ }
+ },
+ {
+ "segment": 11,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 12,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 11}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L12"
+ }
+ },
+ {
+ "segment": 12,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 13,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 12}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L13"
+ }
+ },
+ {
+ "segment": 13,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 14,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 13}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L14"
+ }
+ },
+ {
+ "segment": 14,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 15,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 14}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L15"
+ }
+ },
+ {
+ "segment": 15,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 16,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 15}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L16"
+ }
+ },
+ {
+ "segment": 16,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 17,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 16}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L17"
+ }
+ },
+ {
+ "segment": 17,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 18,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 17}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L18"
+ }
+ },
+ {
+ "segment": 18,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py 202ac6ce",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 19,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 18}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L19"
+ }
+ },
+ {
+ "segment": 19,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 20,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 19}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L20"
+ }
+ },
+ {
+ "segment": 20,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 21,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 20}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L21"
+ }
+ },
+ {
+ "segment": 21,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 22,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 21}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L22"
+ }
+ },
+ {
+ "segment": 22,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 23,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 22}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L23"
+ }
+ },
+ {
+ "segment": 23,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 24,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 23}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L24"
+ }
+ },
+ {
+ "segment": 24,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 25,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 24}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L25"
+ }
+ },
+ {
+ "segment": 25,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 26,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 25}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L26"
+ }
+ },
+ {
+ "segment": 26,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 27,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 26}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L27"
+ }
+ },
+ {
+ "segment": 27,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 28,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 27}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L28"
+ }
+ },
+ {
+ "segment": 28,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 29,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 28}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L29"
+ }
+ },
+ {
+ "segment": 29,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 30,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 29}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L30"
+ }
+ },
+ {
+ "segment": 30,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 31,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L31"
+ }
+ },
+ {
+ "segment": 31,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 32,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L32"
+ }
+ },
+ {
+ "segment": 32,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 33,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L33"
+ }
+ },
+ {
+ "segment": 33,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 34,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L34"
+ }
+ },
+ {
+ "segment": 34,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 35,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L35"
+ }
+ },
+ {
+ "segment": 35,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 36,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L36"
+ }
+ },
+ {
+ "segment": 36,
+ "result": "MATCH",
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 reference loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 37,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L37"
+ }
+ },
+ {
+ "segment": 22,
+ "result": "MATCH",
+ "checker": "project training pod",
+ "machine": "training pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 38,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 22}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L38"
+ }
+ },
+ {
+ "segment": 31,
+ "result": "MATCH",
+ "checker": "project training pod",
+ "machine": "training pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 39,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L39"
+ }
+ },
+ {
+ "segment": 32,
+ "result": "MATCH",
+ "checker": "project training pod",
+ "machine": "training pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 40,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L40"
+ }
+ },
+ {
+ "segment": 33,
+ "result": "MATCH",
+ "checker": "project training pod",
+ "machine": "training pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 41,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L41"
+ }
+ },
+ {
+ "segment": 34,
+ "result": "MATCH",
+ "checker": "project training pod",
+ "machine": "training pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 42,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L42"
+ }
+ },
+ {
+ "segment": 35,
+ "result": "MATCH",
+ "checker": "project training pod",
+ "machine": "training pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 43,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L43"
+ }
+ },
+ {
+ "segment": 36,
+ "result": "MATCH",
+ "checker": "project training pod",
+ "machine": "training pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 44,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L44"
+ }
+ },
+ {
+ "segment": 5,
+ "result": "MATCH",
+ "checker": "project training pod",
+ "machine": "training pod",
+ "checkedBy": "project",
+ "code": "ovl.py c4a942c0 fast loader",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 45,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0 fast loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 5}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L45"
+ }
+ },
+ {
+ "segment": 21,
+ "result": "MATCH",
+ "checker": "project fresh machine public files only",
+ "machine": "fresh machine public files only",
+ "checkedBy": "project",
+ "code": "verify_segment.sh from the release",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "driver": "595.91.07",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 46,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project fresh machine public files only\", \"code\": \"verify_segment.sh from the release\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 21}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L46"
+ }
+ }
+ ],
+ "rowCount": 46,
+ "groups": [
+ {
+ "checker": "project second pod",
+ "machine": "second pod",
+ "checkedBy": "project",
+ "rows": 37,
+ "match": 37,
+ "segments": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36
+ ]
+ },
+ {
+ "checker": "project training pod",
+ "machine": "training pod",
+ "checkedBy": "project",
+ "rows": 8,
+ "match": 8,
+ "segments": [
+ 22,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 5
+ ]
+ },
+ {
+ "checker": "project fresh machine public files only",
+ "machine": "fresh machine public files only",
+ "checkedBy": "project",
+ "rows": 1,
+ "match": 1,
+ "segments": [
+ 21
+ ]
+ }
+ ],
+ "tiles": [
+ {
+ "segment": 0,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 0
+ ],
+ "events": []
+ },
+ {
+ "segment": 1,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 1
+ ],
+ "events": []
+ },
+ {
+ "segment": 2,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 2
+ ],
+ "events": []
+ },
+ {
+ "segment": 3,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 3
+ ],
+ "events": []
+ },
+ {
+ "segment": 4,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 4
+ ],
+ "events": []
+ },
+ {
+ "segment": 5,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 5,
+ 44
+ ],
+ "events": []
+ },
+ {
+ "segment": 6,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 6
+ ],
+ "events": []
+ },
+ {
+ "segment": 7,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 7
+ ],
+ "events": []
+ },
+ {
+ "segment": 8,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 8
+ ],
+ "events": []
+ },
+ {
+ "segment": 9,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 9
+ ],
+ "events": []
+ },
+ {
+ "segment": 10,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 10
+ ],
+ "events": [
+ "restart"
+ ]
+ },
+ {
+ "segment": 11,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 11
+ ],
+ "events": []
+ },
+ {
+ "segment": 12,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 12
+ ],
+ "events": []
+ },
+ {
+ "segment": 13,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 13
+ ],
+ "events": []
+ },
+ {
+ "segment": 14,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 14
+ ],
+ "events": []
+ },
+ {
+ "segment": 15,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 15
+ ],
+ "events": []
+ },
+ {
+ "segment": 16,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 16
+ ],
+ "events": []
+ },
+ {
+ "segment": 17,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 17
+ ],
+ "events": []
+ },
+ {
+ "segment": 18,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 18
+ ],
+ "events": []
+ },
+ {
+ "segment": 19,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 19
+ ],
+ "events": [
+ "code-change"
+ ]
+ },
+ {
+ "segment": 20,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 20
+ ],
+ "events": []
+ },
+ {
+ "segment": 21,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 21,
+ 45
+ ],
+ "events": []
+ },
+ {
+ "segment": 22,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 22,
+ 37
+ ],
+ "events": []
+ },
+ {
+ "segment": 23,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 23
+ ],
+ "events": []
+ },
+ {
+ "segment": 24,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 24
+ ],
+ "events": []
+ },
+ {
+ "segment": 25,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 25
+ ],
+ "events": []
+ },
+ {
+ "segment": 26,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 26
+ ],
+ "events": []
+ },
+ {
+ "segment": 27,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 27
+ ],
+ "events": []
+ },
+ {
+ "segment": 28,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 28
+ ],
+ "events": []
+ },
+ {
+ "segment": 29,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 29
+ ],
+ "events": []
+ },
+ {
+ "segment": 30,
+ "phase": "wikipedia",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 30
+ ],
+ "events": []
+ },
+ {
+ "segment": 31,
+ "phase": "conversation",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 31,
+ 38
+ ],
+ "events": []
+ },
+ {
+ "segment": 32,
+ "phase": "conversation",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 32,
+ 39
+ ],
+ "events": []
+ },
+ {
+ "segment": 33,
+ "phase": "conversation",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 33,
+ 40
+ ],
+ "events": []
+ },
+ {
+ "segment": 34,
+ "phase": "conversation",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 34,
+ 41
+ ],
+ "events": []
+ },
+ {
+ "segment": 35,
+ "phase": "conversation",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 35,
+ 42
+ ],
+ "events": []
+ },
+ {
+ "segment": 36,
+ "phase": "conversation",
+ "result": "MATCH",
+ "checkedBy": "project",
+ "checks": [
+ 36,
+ 43
+ ],
+ "events": []
+ }
+ ],
+ "machines": 3,
+ "allMatch": true,
+ "segmentsMatched": 37,
+ "secondMachineMatched": 37,
+ "secondMachine": "project second pod",
+ "freshMachine": "project fresh machine public files only",
+ "freshSegments": [
+ 21
+ ],
+ "projectChecks": 46,
+ "independentChecks": 0,
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 1,
+ "lineEnd": 46,
+ "raw": null,
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L1-L46"
+ }
+ },
+ "odds": {
+ "N": 37,
+ "Nm1": 36,
+ "formula": "1 − (36/37)^M",
+ "m95": 110,
+ "m99": 169,
+ "p95": 0.9508995539986606,
+ "p99": 0.9902494017588821,
+ "pAtN": 0.6371486544416634,
+ "currentM": 0,
+ "currentP": 0.0,
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "line": 46,
+ "lineEnd": null,
+ "raw": "random segment catch a single forged segment with probability 1 − ((N−1)/N)^M. One checker who",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L46"
+ }
+ },
+ "events": [
+ {
+ "id": "restart",
+ "segment": 10,
+ "gapSeconds": 3297,
+ "medianGapSeconds": 1968,
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "line": 133,
+ "lineEnd": 134,
+ "raw": "- The training host restarted once, at boundary 10. Training resumed from checkpoint 10, and\n segment 10 (which spans the restart) matched.",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L133-L134"
+ }
+ },
+ {
+ "id": "code-change",
+ "segment": 19,
+ "codeBefore": "ovl.py 202ac6ce",
+ "codeAfter": "ovl.py c4a942c0 reference loader",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "line": 127,
+ "lineEnd": 128,
+ "raw": "- Code versions: segments 0–18 were trained with `ovl.py` sha256 `202ac6ce…`\n (`code/training-code/ovl-segments-00-18.py`). Segments 19 onward used `c4a942c0…`",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L127-L128"
+ },
+ "rowBefore": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 19,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 18}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L19"
+ },
+ "rowAfter": {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 20,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 19}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L20"
+ }
+ }
+ ],
+ "hardware": [
+ {
+ "segment": "32",
+ "result": "MATCH",
+ "hardware": "NVIDIA GeForce RTX 5090 (Blackwell)",
+ "driver": "595.91.07",
+ "software": "torch 2.8.0+cu128",
+ "note": "training GPU type; control for this probe",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/hardware-map.jsonl",
+ "rev": "96dc282a",
+ "line": 1,
+ "lineEnd": null,
+ "raw": "{\"segment\": 32, \"result\": \"MATCH\", \"hardware\": \"NVIDIA GeForce RTX 5090 (Blackwell)\", \"driver\": \"595.91.07\", \"software\": \"torch 2.8.0+cu128\", \"note\": \"training GPU type; control for this probe\"}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/hardware-map.jsonl#L1"
+ }
+ },
+ {
+ "segment": "32",
+ "result": "MISMATCH",
+ "hardware": "NVIDIA GeForce RTX 4090 (Ada)",
+ "driver": "595.91.07",
+ "software": "torch 2.8.0+cu128",
+ "note": "same software, different architecture",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/hardware-map.jsonl",
+ "rev": "96dc282a",
+ "line": 2,
+ "lineEnd": null,
+ "raw": "{\"segment\": 32, \"result\": \"MISMATCH\", \"hardware\": \"NVIDIA GeForce RTX 4090 (Ada)\", \"driver\": \"595.91.07\", \"software\": \"torch 2.8.0+cu128\", \"note\": \"same software, different architecture\"}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/hardware-map.jsonl#L2"
+ }
+ },
+ {
+ "segment": "32",
+ "result": "MISMATCH",
+ "hardware": "NVIDIA H100 80GB HBM3 (Hopper)",
+ "driver": "595.91.07",
+ "software": "torch 2.8.0+cu128",
+ "note": "same software, different architecture",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/hardware-map.jsonl",
+ "rev": "96dc282a",
+ "line": 3,
+ "lineEnd": null,
+ "raw": "{\"segment\": 32, \"result\": \"MISMATCH\", \"hardware\": \"NVIDIA H100 80GB HBM3 (Hopper)\", \"driver\": \"595.91.07\", \"software\": \"torch 2.8.0+cu128\", \"note\": \"same software, different architecture\"}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/hardware-map.jsonl#L3"
+ }
+ },
+ {
+ "segment": "32",
+ "result": "MISMATCH",
+ "hardware": "x86_64 CPU",
+ "driver": "none",
+ "software": "torch 2.14.0+cpu",
+ "note": "different hardware and software",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/hardware-map.jsonl",
+ "rev": "96dc282a",
+ "line": 4,
+ "lineEnd": null,
+ "raw": "{\"segment\": 32, \"result\": \"MISMATCH\", \"hardware\": \"x86_64 CPU\", \"driver\": \"none\", \"software\": \"torch 2.14.0+cpu\", \"note\": \"different hardware and software\"}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/hardware-map.jsonl#L4"
+ }
+ },
+ {
+ "segment": "all 37",
+ "result": "MATCH",
+ "hardware": "NVIDIA GeForce RTX 5090 (Blackwell)",
+ "driver": "595.91.07",
+ "software": "torch 2.8.0+cu128",
+ "note": "training ran on driver 570.195.03 for segments 0-9, 595.91.07 after",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/hardware-map.jsonl",
+ "rev": "96dc282a",
+ "line": 5,
+ "lineEnd": null,
+ "raw": "{\"segment\": \"all 37\", \"result\": \"MATCH\", \"hardware\": \"NVIDIA GeForce RTX 5090 (Blackwell)\", \"driver\": \"595.91.07\", \"software\": \"torch 2.8.0+cu128\", \"note\": \"training ran on driver 570.195.03 for segments 0-9, 595.91.07 after\"}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/hardware-map.jsonl#L5"
+ }
+ }
+ ],
+ "downloads": [
+ {
+ "release": "release/simple-run",
+ "files": [
+ {
+ "file": "base-model.pt",
+ "sha256": "976c62e8b28db786c38dc2ff969339603d0ee917d830f2815d9e858d2a3c0ce3",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/base-model.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 1,
+ "lineEnd": null,
+ "raw": "976c62e8b28db786c38dc2ff969339603d0ee917d830f2815d9e858d2a3c0ce3 base-model.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L1"
+ }
+ },
+ {
+ "file": "chain.jsonl",
+ "sha256": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 2,
+ "lineEnd": null,
+ "raw": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327 chain.jsonl",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L2"
+ }
+ },
+ {
+ "file": "ckpt-00000.pt",
+ "sha256": "3dccf4a6d258ff5e150ee1ed590f4baff099e5a368d580e610ecf238b4ba8c22",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00000.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 3,
+ "lineEnd": null,
+ "raw": "3dccf4a6d258ff5e150ee1ed590f4baff099e5a368d580e610ecf238b4ba8c22 ckpt-00000.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L3"
+ }
+ },
+ {
+ "file": "ckpt-00001.pt",
+ "sha256": "ba524fd9691c4a849d1a3dac177af426df36d8e04d9c75fba2dbf036a4b515f9",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00001.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 4,
+ "lineEnd": null,
+ "raw": "ba524fd9691c4a849d1a3dac177af426df36d8e04d9c75fba2dbf036a4b515f9 ckpt-00001.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L4"
+ }
+ },
+ {
+ "file": "ckpt-00002.pt",
+ "sha256": "627106799e630a9297770b31b0e1f66b1418215eea50c1cd3f3a23c48e138a33",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00002.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 5,
+ "lineEnd": null,
+ "raw": "627106799e630a9297770b31b0e1f66b1418215eea50c1cd3f3a23c48e138a33 ckpt-00002.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L5"
+ }
+ },
+ {
+ "file": "ckpt-00003.pt",
+ "sha256": "0b64c3f0208d636b19bdf5970810c27cb2ceab33f18153915d64f6493201bc10",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00003.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 6,
+ "lineEnd": null,
+ "raw": "0b64c3f0208d636b19bdf5970810c27cb2ceab33f18153915d64f6493201bc10 ckpt-00003.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L6"
+ }
+ },
+ {
+ "file": "ckpt-00004.pt",
+ "sha256": "68f07c741473f7ad0c2c61d52dc25c4d8a9c441382d348f9c1a97d215bba452e",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00004.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 7,
+ "lineEnd": null,
+ "raw": "68f07c741473f7ad0c2c61d52dc25c4d8a9c441382d348f9c1a97d215bba452e ckpt-00004.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L7"
+ }
+ },
+ {
+ "file": "ckpt-00005.pt",
+ "sha256": "29cdefeb28098ba4572869655b58c9dd2e771edc3717f0112d700477b74defb8",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00005.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 8,
+ "lineEnd": null,
+ "raw": "29cdefeb28098ba4572869655b58c9dd2e771edc3717f0112d700477b74defb8 ckpt-00005.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L8"
+ }
+ },
+ {
+ "file": "ckpt-00006.pt",
+ "sha256": "3e861cd5457c1a1566c8ebcee2a712feca2f3e5603ad46436d393aca5cbb5999",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00006.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 9,
+ "lineEnd": null,
+ "raw": "3e861cd5457c1a1566c8ebcee2a712feca2f3e5603ad46436d393aca5cbb5999 ckpt-00006.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L9"
+ }
+ },
+ {
+ "file": "ckpt-00007.pt",
+ "sha256": "400734c784b59c9363fdbdd745f7f0f6d70c1be09d2c747976bc2b4fae01b64b",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00007.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 10,
+ "lineEnd": null,
+ "raw": "400734c784b59c9363fdbdd745f7f0f6d70c1be09d2c747976bc2b4fae01b64b ckpt-00007.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L10"
+ }
+ },
+ {
+ "file": "ckpt-00008.pt",
+ "sha256": "fe5352356351e4d9e4b0abd59f279c7a2ed98888177fbb773fd1f1983fefe83f",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00008.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 11,
+ "lineEnd": null,
+ "raw": "fe5352356351e4d9e4b0abd59f279c7a2ed98888177fbb773fd1f1983fefe83f ckpt-00008.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L11"
+ }
+ },
+ {
+ "file": "ckpt-00009.pt",
+ "sha256": "41819daf70a409e200f5189ab45ae96293716794733ad534e4843ac3f8b1982e",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00009.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 12,
+ "lineEnd": null,
+ "raw": "41819daf70a409e200f5189ab45ae96293716794733ad534e4843ac3f8b1982e ckpt-00009.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L12"
+ }
+ },
+ {
+ "file": "ckpt-00010.pt",
+ "sha256": "75cd5863903d9f595e2d50cacea3ec0530f41c154d4ec8817f41376b6f222e3f",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00010.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 13,
+ "lineEnd": null,
+ "raw": "75cd5863903d9f595e2d50cacea3ec0530f41c154d4ec8817f41376b6f222e3f ckpt-00010.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L13"
+ }
+ },
+ {
+ "file": "ckpt-00011.pt",
+ "sha256": "46ece4b519e8624a2b41856b1ecfa9a5daf4994616a9bdd8d941625cb09a32ed",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00011.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 14,
+ "lineEnd": null,
+ "raw": "46ece4b519e8624a2b41856b1ecfa9a5daf4994616a9bdd8d941625cb09a32ed ckpt-00011.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L14"
+ }
+ },
+ {
+ "file": "ckpt-00012.pt",
+ "sha256": "8b0e19692ccc6c6e6e0eb745633ae2dd2c4e86d0ca84b8ea1c7f1f81a888b892",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00012.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 15,
+ "lineEnd": null,
+ "raw": "8b0e19692ccc6c6e6e0eb745633ae2dd2c4e86d0ca84b8ea1c7f1f81a888b892 ckpt-00012.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L15"
+ }
+ },
+ {
+ "file": "ckpt-00013.pt",
+ "sha256": "3ac79c55fe528bcc62bd7a7a047e2b2a19e2d2e494c85e26301b0fc79f345aee",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00013.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 16,
+ "lineEnd": null,
+ "raw": "3ac79c55fe528bcc62bd7a7a047e2b2a19e2d2e494c85e26301b0fc79f345aee ckpt-00013.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L16"
+ }
+ },
+ {
+ "file": "ckpt-00014.pt",
+ "sha256": "ad933ae52b14ff5de72624c5dc7af9b3e5464155b9c3ed84bd43bd5be4f737c3",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00014.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 17,
+ "lineEnd": null,
+ "raw": "ad933ae52b14ff5de72624c5dc7af9b3e5464155b9c3ed84bd43bd5be4f737c3 ckpt-00014.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L17"
+ }
+ },
+ {
+ "file": "ckpt-00015.pt",
+ "sha256": "2cfddc6c26fb7e8dc99c94b6fb39007a4937b67e1c8d852f2561d990e857cb62",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00015.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 18,
+ "lineEnd": null,
+ "raw": "2cfddc6c26fb7e8dc99c94b6fb39007a4937b67e1c8d852f2561d990e857cb62 ckpt-00015.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L18"
+ }
+ },
+ {
+ "file": "ckpt-00016.pt",
+ "sha256": "3729909ae0f85b79377956ad8defdaaeceac0cd000a1c47e582f38685f4158d6",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00016.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 19,
+ "lineEnd": null,
+ "raw": "3729909ae0f85b79377956ad8defdaaeceac0cd000a1c47e582f38685f4158d6 ckpt-00016.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L19"
+ }
+ },
+ {
+ "file": "ckpt-00017.pt",
+ "sha256": "9f8537d432d78b254dcba86e7bd987246d928bbc837950ffe2536ba989747c41",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00017.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 20,
+ "lineEnd": null,
+ "raw": "9f8537d432d78b254dcba86e7bd987246d928bbc837950ffe2536ba989747c41 ckpt-00017.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L20"
+ }
+ },
+ {
+ "file": "ckpt-00018.pt",
+ "sha256": "a09df5692aac7e42a0430fd225c75937bf75c85a9dfb77b899b4cb956a8c51d1",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00018.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 21,
+ "lineEnd": null,
+ "raw": "a09df5692aac7e42a0430fd225c75937bf75c85a9dfb77b899b4cb956a8c51d1 ckpt-00018.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L21"
+ }
+ },
+ {
+ "file": "ckpt-00019.pt",
+ "sha256": "ef18f34f8ac17a2581193ffc681a927f655bdadce4c6ca2de0a095d72094bb24",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00019.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 22,
+ "lineEnd": null,
+ "raw": "ef18f34f8ac17a2581193ffc681a927f655bdadce4c6ca2de0a095d72094bb24 ckpt-00019.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L22"
+ }
+ },
+ {
+ "file": "ckpt-00020.pt",
+ "sha256": "6bda17b7f79347cc57cb1325215a3a68f9f2357ee5b97f2c88e353189244fcdf",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00020.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 23,
+ "lineEnd": null,
+ "raw": "6bda17b7f79347cc57cb1325215a3a68f9f2357ee5b97f2c88e353189244fcdf ckpt-00020.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L23"
+ }
+ },
+ {
+ "file": "ckpt-00021.pt",
+ "sha256": "7df62e3801530777a4491bcecb0199a2b5628a9de61da30f5f6513c74c028095",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00021.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 24,
+ "lineEnd": null,
+ "raw": "7df62e3801530777a4491bcecb0199a2b5628a9de61da30f5f6513c74c028095 ckpt-00021.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L24"
+ }
+ },
+ {
+ "file": "ckpt-00022.pt",
+ "sha256": "23d9271d4f4c49e8e04a13f498ed0a89d57c3f80705044c2c8fe10eecc895896",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00022.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 25,
+ "lineEnd": null,
+ "raw": "23d9271d4f4c49e8e04a13f498ed0a89d57c3f80705044c2c8fe10eecc895896 ckpt-00022.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L25"
+ }
+ },
+ {
+ "file": "ckpt-00023.pt",
+ "sha256": "2b68d53231a0d3a639312ed45eeb2afef3720f93824819843dd2c9fb68f2fc4c",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00023.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 26,
+ "lineEnd": null,
+ "raw": "2b68d53231a0d3a639312ed45eeb2afef3720f93824819843dd2c9fb68f2fc4c ckpt-00023.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L26"
+ }
+ },
+ {
+ "file": "ckpt-00024.pt",
+ "sha256": "8a06f96345a0ff23933d6b946a4fc88ad63a6b43a618a91a1639267cf1c0e23b",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00024.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 27,
+ "lineEnd": null,
+ "raw": "8a06f96345a0ff23933d6b946a4fc88ad63a6b43a618a91a1639267cf1c0e23b ckpt-00024.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L27"
+ }
+ },
+ {
+ "file": "ckpt-00025.pt",
+ "sha256": "7bed06bf3566e18595a190bc1418fe5735689a2c47d280d857c0a5f68ba73a7f",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00025.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 28,
+ "lineEnd": null,
+ "raw": "7bed06bf3566e18595a190bc1418fe5735689a2c47d280d857c0a5f68ba73a7f ckpt-00025.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L28"
+ }
+ },
+ {
+ "file": "ckpt-00026.pt",
+ "sha256": "31e21be4135f53a912312fae5f26d9b2eefc344171b8935e295c655f49c3b701",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00026.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 29,
+ "lineEnd": null,
+ "raw": "31e21be4135f53a912312fae5f26d9b2eefc344171b8935e295c655f49c3b701 ckpt-00026.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L29"
+ }
+ },
+ {
+ "file": "ckpt-00027.pt",
+ "sha256": "2efcee93267b438152c35cfc1975fd0d8d2dcec804b2713fcc11bdd8602752cf",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00027.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 30,
+ "lineEnd": null,
+ "raw": "2efcee93267b438152c35cfc1975fd0d8d2dcec804b2713fcc11bdd8602752cf ckpt-00027.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L30"
+ }
+ },
+ {
+ "file": "ckpt-00028.pt",
+ "sha256": "671cf6928fc370a464fade45cf5565a65c019c9888b6c9d8962230364cc4c5b4",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00028.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 31,
+ "lineEnd": null,
+ "raw": "671cf6928fc370a464fade45cf5565a65c019c9888b6c9d8962230364cc4c5b4 ckpt-00028.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L31"
+ }
+ },
+ {
+ "file": "ckpt-00029.pt",
+ "sha256": "082195ad124ad61287e94f224c6672b2175b1c1c35f06baee2b56adbc12f92da",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00029.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 32,
+ "lineEnd": null,
+ "raw": "082195ad124ad61287e94f224c6672b2175b1c1c35f06baee2b56adbc12f92da ckpt-00029.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L32"
+ }
+ },
+ {
+ "file": "ckpt-00030.pt",
+ "sha256": "febe492c2c87335b078c910894172bcf8f572b853d807b8f24da99e9e0127979",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00030.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 33,
+ "lineEnd": null,
+ "raw": "febe492c2c87335b078c910894172bcf8f572b853d807b8f24da99e9e0127979 ckpt-00030.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L33"
+ }
+ },
+ {
+ "file": "ckpt-00031.pt",
+ "sha256": "c687187b7daaa97d0fd8c96df302313e051febc29d64b5ef4d5b5775d684244b",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00031.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 34,
+ "lineEnd": null,
+ "raw": "c687187b7daaa97d0fd8c96df302313e051febc29d64b5ef4d5b5775d684244b ckpt-00031.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L34"
+ }
+ },
+ {
+ "file": "ckpt-00032.pt",
+ "sha256": "b49bfa976a6aa59fc54b9511fccc4745a4493b81cc58a3ff310ffecf7a92f45e",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00032.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 35,
+ "lineEnd": null,
+ "raw": "b49bfa976a6aa59fc54b9511fccc4745a4493b81cc58a3ff310ffecf7a92f45e ckpt-00032.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L35"
+ }
+ },
+ {
+ "file": "ckpt-00033.pt",
+ "sha256": "8fa1f26811ef37b235c968c4204044983895b217e00db731d57f3a2cecda179e",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00033.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 36,
+ "lineEnd": null,
+ "raw": "8fa1f26811ef37b235c968c4204044983895b217e00db731d57f3a2cecda179e ckpt-00033.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L36"
+ }
+ },
+ {
+ "file": "ckpt-00034.pt",
+ "sha256": "5fe1e5af0d612046c7617d079181090e3ac0898411fe39900e05346c90b29aeb",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00034.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 37,
+ "lineEnd": null,
+ "raw": "5fe1e5af0d612046c7617d079181090e3ac0898411fe39900e05346c90b29aeb ckpt-00034.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L37"
+ }
+ },
+ {
+ "file": "ckpt-00035.pt",
+ "sha256": "4766216588d357cdbe5bdd35e4b9534317d59f8b1273b5b722a390e748ae3beb",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00035.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 38,
+ "lineEnd": null,
+ "raw": "4766216588d357cdbe5bdd35e4b9534317d59f8b1273b5b722a390e748ae3beb ckpt-00035.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L38"
+ }
+ },
+ {
+ "file": "ckpt-00036.pt",
+ "sha256": "1ca4bd559c51e9d83ba2ea84a85e518e0309d0844d964535868339a16b66e239",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00036.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 39,
+ "lineEnd": null,
+ "raw": "1ca4bd559c51e9d83ba2ea84a85e518e0309d0844d964535868339a16b66e239 ckpt-00036.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L39"
+ }
+ },
+ {
+ "file": "ckpt-00037.pt",
+ "sha256": "88947898dab959fd82f954f81681103bac7f6b770f4bcc13d6eac29ca1795ecb",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/ckpt-00037.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 40,
+ "lineEnd": null,
+ "raw": "88947898dab959fd82f954f81681103bac7f6b770f4bcc13d6eac29ca1795ecb ckpt-00037.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L40"
+ }
+ },
+ {
+ "file": "conversation-model.pt",
+ "sha256": "149cfae13c4523a1010c52161e13babf76c9ddc01f34fa1a8b580677b733a64c",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/conversation-model.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 41,
+ "lineEnd": null,
+ "raw": "149cfae13c4523a1010c52161e13babf76c9ddc01f34fa1a8b580677b733a64c conversation-model.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L41"
+ }
+ },
+ {
+ "file": "recipe.json",
+ "sha256": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/recipe.json",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 42,
+ "lineEnd": null,
+ "raw": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d recipe.json",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L42"
+ }
+ }
+ ]
+ },
+ {
+ "release": "release/unlearning-3i-atlas",
+ "files": [
+ {
+ "file": "base-model.pt",
+ "sha256": "ff30d7f4bf9ec41f0514d63a4d8bc1a74172481b89e07608383c0c3513f83441",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/base-model.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 1,
+ "lineEnd": null,
+ "raw": "ff30d7f4bf9ec41f0514d63a4d8bc1a74172481b89e07608383c0c3513f83441 base-model.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L1"
+ }
+ },
+ {
+ "file": "chain.jsonl",
+ "sha256": "98ffe339f9a0e20458b2615597fdb9ca23b0b12a5bac3873c9327893e724e6c1",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/chain.jsonl",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 2,
+ "lineEnd": null,
+ "raw": "98ffe339f9a0e20458b2615597fdb9ca23b0b12a5bac3873c9327893e724e6c1 chain.jsonl",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L2"
+ }
+ },
+ {
+ "file": "ckpt-00030.pt",
+ "sha256": "febe492c2c87335b078c910894172bcf8f572b853d807b8f24da99e9e0127979",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/ckpt-00030.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 3,
+ "lineEnd": null,
+ "raw": "febe492c2c87335b078c910894172bcf8f572b853d807b8f24da99e9e0127979 ckpt-00030.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L3"
+ }
+ },
+ {
+ "file": "ckpt-00031.pt",
+ "sha256": "1728660ffdc7985f08b68721c7419523def8dff5dc0d19278057a23028723004",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/ckpt-00031.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 4,
+ "lineEnd": null,
+ "raw": "1728660ffdc7985f08b68721c7419523def8dff5dc0d19278057a23028723004 ckpt-00031.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L4"
+ }
+ },
+ {
+ "file": "ckpt-00032.pt",
+ "sha256": "c91c03ac526a3a7e48b1053eacbf46f798fcc076d0dbbf562b72fdbf50191b3c",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/ckpt-00032.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 5,
+ "lineEnd": null,
+ "raw": "c91c03ac526a3a7e48b1053eacbf46f798fcc076d0dbbf562b72fdbf50191b3c ckpt-00032.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L5"
+ }
+ },
+ {
+ "file": "ckpt-00033.pt",
+ "sha256": "b98f60b056330d0b38d68e1c1977be7c54c17cbf8d95b8d997550ec33056adbb",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/ckpt-00033.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 6,
+ "lineEnd": null,
+ "raw": "b98f60b056330d0b38d68e1c1977be7c54c17cbf8d95b8d997550ec33056adbb ckpt-00033.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L6"
+ }
+ },
+ {
+ "file": "ckpt-00034.pt",
+ "sha256": "2791741e1c6477954dd0b3177d29cfc4544a0d681375c841524edd774881b182",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/ckpt-00034.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 7,
+ "lineEnd": null,
+ "raw": "2791741e1c6477954dd0b3177d29cfc4544a0d681375c841524edd774881b182 ckpt-00034.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L7"
+ }
+ },
+ {
+ "file": "ckpt-00035.pt",
+ "sha256": "276ce1ed5d85fa8da957e6a501bde1b1add80eb9aa80d977a96d5cbd1c83dbd8",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/ckpt-00035.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 8,
+ "lineEnd": null,
+ "raw": "276ce1ed5d85fa8da957e6a501bde1b1add80eb9aa80d977a96d5cbd1c83dbd8 ckpt-00035.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L8"
+ }
+ },
+ {
+ "file": "ckpt-00036.pt",
+ "sha256": "cecbdf2f59bc3a260fe94491da2eb01b3055997b597e9a8c3be6e240f9742211",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/ckpt-00036.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 9,
+ "lineEnd": null,
+ "raw": "cecbdf2f59bc3a260fe94491da2eb01b3055997b597e9a8c3be6e240f9742211 ckpt-00036.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L9"
+ }
+ },
+ {
+ "file": "ckpt-00037.pt",
+ "sha256": "b2467b81ce20508df5007949e56cbe06a55bf22ed94c14a376ffa05033c97ced",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/ckpt-00037.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 10,
+ "lineEnd": null,
+ "raw": "b2467b81ce20508df5007949e56cbe06a55bf22ed94c14a376ffa05033c97ced ckpt-00037.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L10"
+ }
+ },
+ {
+ "file": "ckpt-00038.pt",
+ "sha256": "650bf7c046b4e295d0f19ffeb6cca0660814a8fc53c3433db6f8cbb84510f039",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/ckpt-00038.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 11,
+ "lineEnd": null,
+ "raw": "650bf7c046b4e295d0f19ffeb6cca0660814a8fc53c3433db6f8cbb84510f039 ckpt-00038.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L11"
+ }
+ },
+ {
+ "file": "conversation-model.pt",
+ "sha256": "e41be3a27bbcf16ce7a5224eb4766e88b2abe09fe6ddb6aadea399b9db4472d4",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/conversation-model.pt",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 12,
+ "lineEnd": null,
+ "raw": "e41be3a27bbcf16ce7a5224eb4766e88b2abe09fe6ddb6aadea399b9db4472d4 conversation-model.pt",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L12"
+ }
+ },
+ {
+ "file": "recipe.json",
+ "sha256": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d",
+ "download": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/resolve/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/recipe.json",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "line": 13,
+ "lineEnd": null,
+ "raw": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d recipe.json",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L13"
+ }
+ }
+ ]
+ }
+ ],
+ "anchor": {
+ "sha256": "2adaea4cae25439199ec2396c0e6e94d1d14188c070f217ed7e360ce10c1c18d",
+ "chainHead": "9edbcaddbb08ed20f3d655ac59d0aa57f6339a702d0fa1d3422856f5d8251a51",
+ "entries": 38,
+ "tsa": [
+ {
+ "authority": "digicert",
+ "genTime": "2026-10-20T14:38:43Z",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/anchor.digicert.tsr",
+ "rev": "96dc282a",
+ "line": null,
+ "lineEnd": null,
+ "raw": "Time stamp: Oct 20 14:38:43 2026 GMT",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/anchor.digicert.tsr"
+ }
+ },
+ {
+ "authority": "freetsa",
+ "genTime": "2026-10-20T14:38:43Z",
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/anchor.freetsa.tsr",
+ "rev": "96dc282a",
+ "line": null,
+ "lineEnd": null,
+ "raw": "Time stamp: Oct 20 14:38:43 2026 GMT",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/anchor.freetsa.tsr"
+ }
+ }
+ ],
+ "src": {
+ "origin": "hf",
+ "file": "release/simple-run/anchor.json",
+ "rev": "96dc282a",
+ "line": null,
+ "lineEnd": null,
+ "raw": null,
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/anchor.json"
+ }
+ },
+ "exclusion": {
+ "title": "3I/ATLAS",
+ "page": "80340464",
+ "pageRevision": "1371028825",
+ "titleSrc": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/README.md",
+ "rev": "96dc282a",
+ "line": 4,
+ "lineEnd": 5,
+ "raw": "except that one Wikipedia article was never trained on: **3I/ATLAS** (the interstellar comet;",
+ "checkedBy": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/README.md#L4-L5"
+ },
+ "entries": 39,
+ "sharedPrefix": 31,
+ "sharedFirst": 0,
+ "sharedLast": 30,
+ "forkIndex": 31,
+ "rows": [
+ {
+ "segment": 30,
+ "result": "MATCH",
+ "checker": "project fork pod",
+ "machine": "fork pod",
+ "checkedBy": "project",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 1,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl#L1"
+ }
+ },
+ {
+ "segment": 31,
+ "result": "MATCH",
+ "checker": "project fork pod",
+ "machine": "fork pod",
+ "checkedBy": "project",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 2,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl#L2"
+ }
+ },
+ {
+ "segment": 32,
+ "result": "MATCH",
+ "checker": "project fork pod",
+ "machine": "fork pod",
+ "checkedBy": "project",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 3,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl#L3"
+ }
+ },
+ {
+ "segment": 33,
+ "result": "MATCH",
+ "checker": "project fork pod",
+ "machine": "fork pod",
+ "checkedBy": "project",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 4,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl#L4"
+ }
+ },
+ {
+ "segment": 34,
+ "result": "MATCH",
+ "checker": "project fork pod",
+ "machine": "fork pod",
+ "checkedBy": "project",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 5,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl#L5"
+ }
+ },
+ {
+ "segment": 35,
+ "result": "MATCH",
+ "checker": "project fork pod",
+ "machine": "fork pod",
+ "checkedBy": "project",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 6,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl#L6"
+ }
+ },
+ {
+ "segment": 36,
+ "result": "MATCH",
+ "checker": "project fork pod",
+ "machine": "fork pod",
+ "checkedBy": "project",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 7,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl#L7"
+ }
+ },
+ {
+ "segment": 37,
+ "result": "MATCH",
+ "checker": "project fork pod",
+ "machine": "fork pod",
+ "checkedBy": "project",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 8,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 37}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl#L8"
+ }
+ },
+ {
+ "segment": 30,
+ "result": "MATCH",
+ "checker": "project fresh machine public files only",
+ "machine": "fresh machine public files only",
+ "checkedBy": "project",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 9,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project fresh machine public files only\", \"code\": \"code/simple/ovl.py from this release\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl#L9"
+ }
+ },
+ {
+ "segment": 31,
+ "result": "MATCH",
+ "checker": "project fresh machine public files only",
+ "machine": "fresh machine public files only",
+ "checkedBy": "project",
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/verifications.jsonl",
+ "rev": "96dc282a",
+ "line": 10,
+ "lineEnd": null,
+ "raw": "{\"checker\": \"project fresh machine public files only\", \"code\": \"code/simple/ovl.py from this release\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl#L10"
+ }
+ }
+ ],
+ "rowCount": 10,
+ "groups": [
+ {
+ "checker": "project fork pod",
+ "machine": "fork pod",
+ "checkedBy": "project",
+ "rows": 8,
+ "segments": [
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37
+ ]
+ },
+ {
+ "checker": "project fresh machine public files only",
+ "machine": "fresh machine public files only",
+ "checkedBy": "project",
+ "rows": 2,
+ "segments": [
+ 30,
+ 31
+ ]
+ }
+ ],
+ "allMatch": true,
+ "controls": 50,
+ "removedLoss": {
+ "before": 3.3604,
+ "after": 3.386,
+ "delta": 0.0256
+ },
+ "controlLoss": {
+ "before": 2.871,
+ "after": 2.8712,
+ "delta": 0.0002
+ },
+ "src": {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/loo-results.json",
+ "rev": "96dc282a",
+ "line": null,
+ "lineEnd": null,
+ "raw": "{\"removed_documents\": [[\"859cf6cc1d13007d165025247cacaf463ff8a4ad700b19e476f7626e24169116\", \"80340464\", \"1371028825\"]], \"control_documents\": 50, \"original_base\": {\"removed_loss\": [3.3604], \"control_loss_mean\": 2.871}, \"fork_base\": {\"removed_loss\": [3.386], \"control_loss_mean\": 2.8712}}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/loo-results.json"
+ }
+ },
+ "preparation": {
+ "sha256": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68",
+ "articles": 7232582,
+ "wikipediaTargets": 7118121139,
+ "conversations": 3481,
+ "conversationTargets": 1278137,
+ "src": {
+ "origin": "hf",
+ "file": "prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json",
+ "rev": "96dc282a",
+ "line": null,
+ "lineEnd": null,
+ "raw": "{\"included\": 7232582, \"wikipedia_targets\": 7118121139, \"conversations_train\": 3481}",
+ "checkedBy": "project",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json"
+ }
+ },
+ "check": {
+ "intro": "Check that the released model matches its timestamped record, without a GPU. This is a consistency check: it recomputes no training. The real verification is the segment recomputation below.",
+ "introSrc": {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "line": 150,
+ "lineEnd": 154,
+ "raw": "Check that the released model matches its timestamped record, without a GPU. This is a\nconsistency check: it recomputes no training. The real verification is the segment recomputation\nbelow.",
+ "checkedBy": null,
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L150-L154"
+ },
+ "commands": "pip install huggingface_hub torch numpy rfc8785==0.1.4 tokenizers==0.23.2 mwparserfromhell==0.7.2 \\\n \"safetensors>=0.4.5,<1.0\" \"pynacl>=1.5,<2.0\"\nhf download AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence \\\n --repo-type dataset --include \"release/simple-run/*\" --exclude \"*/ckpt-*\" --local-dir ovl\ncd ovl/release/simple-run\nsha256sum -c --ignore-missing release-hashes.txt\nopenssl ts -verify -in anchor.digicert.tsr -data anchor.json -CAfile /etc/ssl/certs/ca-certificates.crt\n# Verification: OK (DigiCert stamped anchor.json on 2026-10-20)\ngit clone -q --depth 1 --branch v1.0.1 https://github.com/AOSSIE-Org/OpenVerifiableLLM ovl-code\nOVL_DEVICE=cpu python ovl-code/simple/ovl.py verify --run . --weights conversation-model.pt\n# anchor anchor.json: chain head MATCH (38 entries)\n# weights conversation-model.pt: MATCH chain entry 37",
+ "commandsSrc": {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "line": 156,
+ "lineEnd": 167,
+ "raw": "pip install huggingface_hub torch numpy rfc8785==0.1.4 tokenizers==0.23.2 mwparserfromhell==0.7.2 \\\n \"safetensors>=0.4.5,<1.0\" \"pynacl>=1.5,<2.0\"\nhf download AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence \\\n --repo-type dataset --include \"release/simple-run/*\" --exclude \"*/ckpt-*\" --local-dir ovl\ncd ovl/release/simple-run\nsha256sum -c --ignore-missing release-hashes.txt\nopenssl ts -verify -in anchor.digicert.tsr -data anchor.json -CAfile /etc/ssl/certs/ca-certificates.crt\n# Verification: OK (DigiCert stamped anchor.json on 2026-10-20)\ngit clone -q --depth 1 --branch v1.0.1 https://github.com/AOSSIE-Org/OpenVerifiableLLM ovl-code\nOVL_DEVICE=cpu python ovl-code/simple/ovl.py verify --run . --weights conversation-model.pt\n# anchor anchor.json: chain head MATCH (38 entries)\n# weights conversation-model.pt: MATCH chain entry 37",
+ "checkedBy": null,
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L156-L167"
+ },
+ "runpod": "https://console.runpod.io/deploy?template=mai1ozh35g",
+ "runpodSrc": {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "line": 175,
+ "lineEnd": null,
+ "raw": "[deploy the RunPod template](https://console.runpod.io/deploy?template=mai1ozh35g), wait about an",
+ "checkedBy": null,
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L175"
+ },
+ "cost": "about US$1–1.50",
+ "costSrc": {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "line": 85,
+ "lineEnd": null,
+ "raw": "- **One segment on an RTX 5090 (about an hour, about US$1–1.50 rented):** deploy the public RunPod",
+ "checkedBy": null,
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L85"
+ }
+ },
+ "claimSources": {
+ "OV-01": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "3",
+ "text": "A 23-million-parameter GPT trained from a seeded random start on one exact pass over English",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L3",
+ "quote": "A 23-million-parameter GPT"
+ },
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "3",
+ "text": "This is the project's first production result: a 23.1M-parameter GPT trained from a seeded random",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L3",
+ "quote": "23.1M-parameter GPT"
+ }
+ ],
+ "OV-02": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "3-4",
+ "text": "A 23-million-parameter GPT trained from a seeded random start on one exact pass over English\nWikipedia (2026-09-01 dump), then three passes over a pinned OpenAssistant conversation",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L3-L4",
+ "quote": "one exact pass over English Wikipedia (2026-09-01 dump)"
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "106-107",
+ "text": "- Prepared training streams: `prepared/8de1d600…/` in this dataset. Wikipedia: 7,232,582 articles,\n 7,118,121,139 training targets, each seen exactly once. Conversation: 3,481 conversations,",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L106-L107",
+ "quote": "each seen exactly once"
+ }
+ ],
+ "OV-03": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "4-5",
+ "text": "Wikipedia (2026-09-01 dump), then three passes over a pinned OpenAssistant conversation\nselection. Every training checkpoint is published, so anyone can recompute any part of the",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L4-L5",
+ "quote": "then three passes over a pinned OpenAssistant conversation"
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "107-108",
+ "text": " 7,118,121,139 training targets, each seen exactly once. Conversation: 3,481 conversations,\n 1,278,137 targets.",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L107-L108",
+ "quote": "Conversation: 3,481 conversations, 1,278,137 targets"
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "126",
+ "text": " Conversation: 3 passes at 1e-4.",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L126",
+ "quote": "Conversation: 3 passes at 1e-4."
+ },
+ {
+ "origin": "hf",
+ "file": "prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json",
+ "rev": "96dc282a",
+ "lines": "1",
+ "text": "{\"code\":[{\"bytes\":4498,\"path\":\".github/workflows/anchor-pipeline.yml\",\"sha256\":\"e016c58132c51a1753ae96756ee5bb53cc5f4cf958f6efbd607689612a44ebbb\"},{\"bytes\":416,\"path\":\"requirements/preparation.in\",\"sha256\":\"4b0a637aaaa61787a78f053263536b4ac0a7f4abd53978bc1103c8905db7e78e\"},{\"bytes\":73127,\"path\":\"requirements/preparation.lock\",\"sha256\":\"e284b2f4c393943e8d28a8ac6875b97634ffbe7c50356ba7aa90cd2ce5218f74\"},{\"bytes\":74,\"path\":\"src/ovl_pipeline/__init__.py\",\"sha256\":\"0e60ca9603d569e977ae6f7b55d308384e7d864b65f9a2e3eb00f2afea9fbffb\"},{\"bytes\":12024,\"path\":\"src/ovl_pipeline/acquisition.py\",\"sha256\":\"389153c4e6a76f66586a26e530b6f5defd9d9e4c6140dc46c702c74fc3fa8392\"},{\"bytes\":7865,\"path\":\"src/ovl_pipeline/anchoring.py\",\"sha256\":\"e23d14c090c8152ff65506c5e1c15b16da060b82dde860714c2396e7f4e097d2\"},{\"bytes\":6618,\"path\":\"src/ovl_pipeline/canonical.py\",\"sha256\":\"2de9c77a6d7414b9802a8b26b95d7fe9effdfd241df1e751ab3fb17475bcb1b1\"},{\"bytes\":8630,\"path\":\"src/ovl_pipeline/conversations.py\",\"sha256\":\"1233029c70b69a0dcc9067938ea4e20bcda3aa6ae6609df728ee5c49403f407a\"},{\"bytes\":17928,\"path\":\"src/ovl_pipeline/data.py\",\"sha256\":\"2b5c6898a8473f600aaf07868bd1bc495f206c2c2c1c2ba2b13cc215cb6063ab\"},{\"bytes\":4300,\"path\":\"src/ovl_pipeline/extraction_workers.py\",\"sha256\":\"969d06c76bbd13129beb1af6fb3d9a2a09fbc5ec0d84a62e46a098b3f1a0e7e7\"},{\"bytes\":20817,\"path\":\"src/ovl_pipeline/preparation.py\",\"sha256\":\"e368c228254c05fd59ff593ceddd6393b6a192fbb70953b8b3af5c14b48d12fa\"},{\"bytes\":9675,\"path\":\"src/ovl_pipeline/preparation_stages.py\",\"sha256\":\"2206849e62ff957937783284ef9e018cf8c79ab15a42783479be807611fda242\"},{\"bytes\":4526,\"path\":\"src/ovl_pipeline/schema.py\",\"sha256\":\"6255f646fb441d350ca7d79ac2441edf42af9b1047ab3c7ad6061743299e090c\"},{\"bytes\":9894,\"path\":\"src/ovl_pipeline/source_commitment.py\",\"sha256\":\"de00be05627f7556c62a3437470d816e4d3235ad51f162a61751f7b4af3df108\"}],\"conversation_selection\":{\"conversations\":{\"train\":3481,\"validation\":188},\"counts\":{\"train\":{\"deleted\":1485,\"non_english\":44006,\"not_approved\":1163,\"selected\":10252,\"unselected_branch_or_unanswered_prompt\":27507,\"unusable_ancestor\":24},\"validation\":{\"deleted\":68,\"non_english\":2321,\"not_approved\":76,\"selected\":550,\"unselected_branch_or_unanswered_prompt\":1386}},\"files\":[{\"bytes\":35542562,\"path\":\"selection.jsonl\",\"sha256\":\"43297d859bbdd1b29d28cf9cb20aa73fd330654e24132a25f7d78c4534ef052d\"},{\"bytes\":6978579,\"path\":\"train.jsonl\",\"sha256\":\"b460ff323dd76ec00c23b3cb1c1a364cc9e4c4b9424941d730844ad69e036e55\"},{\"bytes\":376180,\"path\":\"validation.jsonl\",\"sha256\":\"bd3f4d392bdc90c23bfc64d3562460fcf5a4aad73fc0e20ed60edb00bf07db40\"}],\"messages\":88838,\"policy\":\"oasst-en-preferred-path-v1\",\"projection_columns\":[\"message_id\",\"parent_id\",\"text\",\"role\",\"lang\",\"review_result\",\"deleted\",\"rank\",\"message_tree_id\"],\"schema\":\"ovl.conversation-selection.v1\",\"selection_root\":\"e94202ed19145028de35c28aae49c320aad5195f264951fc6c9a44edad191d8b\",\"source_inventory_root\":\"a0047b229629298b87d25baacb0230ff23b30006c820e97e5d42badd9ae8f253\",\"split_filenames\":{\"train\":\"data/train-00000-of-00001-b42a775f407cee45.parquet\",\"validation\":\"data/validation-00000-of-00001-134b8fd0c89408b6.parquet\"}},\"corpus\":{\"counts\":{\"empty_extracted_text\":2166,\"included\":7232582,\"non_main_namespace\":6597190,\"redirect\":12027806},\"files\":[{\"bytes\":33012803655,\"path\":\"articles.jsonl\",\"sha256\":\"4f7abe772231bcb29573796ce4f1412a38ea751135323180ad3119c19260523f\"},{\"bytes\":15583458438,\"path\":\"ledger.jsonl\",\"sha256\":\"60a11cb9974cdbe254e63476c5c4f5c6df91d9446a4c917c59a93d49b94f101b\"}],\"ledger_root\":\"60076f336fd9bb6c5d20a1f4eaf2635c1587568ae9a50fdfb74a8fa6f68655be\",\"policy\":\"main-nonredirect-stripcode-v1\",\"record_count\":25859744,\"schema\":\"ovl.corpus.v1\",\"sources\":[\"859cf6cc1d13007d165025247cacaf463ff8a4ad700b19e476f7626e24169116\"]},\"environment\":{\"dependency_lock_sha256\":\"e284b2f4c393943e8d28a8ac6875b97634ffbe7c50356ba7aa90cd2ce5218f74\",\"machine\":\"x86_64\",\"packages\":{\"annotated-types\":\"0.8.0\",\"anyio\":\"4.15.1\",\"certifi\":\"2026.7.22\",\"cffi\":\"2.1.1\",\"charset-normalizer\":\"3.5.1\",\"click\":\"8.5.0\",\"cryptography\":\"50.0.1\",\"defusedxml\":\"0.7.1\",\"dnspython\":\"2.8.0\",\"email-validator\":\"2.3.0\",\"filelock\":\"3.32.3\",\"fsspec\":\"2026.7.0\",\"h11\":\"0.16.0\",\"hf-xet\":\"1.6.0\",\"httpcore\":\"1.0.9\",\"httpx\":\"0.28.1\",\"huggingface-hub\":\"1.32.0\",\"id\":\"1.6.1\",\"idna\":\"3.20\",\"jinja2\":\"3.1.6\",\"markdown-it-py\":\"4.2.0\",\"markupsafe\":\"3.0.3\",\"mdurl\":\"0.1.2\",\"mpmath\":\"1.3.0\",\"mwparserfromhell\":\"0.7.2\",\"networkx\":\"3.6.1\",\"numpy\":\"2.5.3\",\"packaging\":\"26.3\",\"platformdirs\":\"4.11.9\",\"pyarrow\":\"25.0.1\",\"pyasn1\":\"0.6.4\",\"pycparser\":\"3.0\",\"pydantic\":\"2.13.5\",\"pydantic-core\":\"2.46.5\",\"pygments\":\"2.21.0\",\"pyjwt\":\"2.14.0\",\"pyopenssl\":\"26.4.0\",\"pyyaml\":\"6.0.3\",\"requests\":\"2.34.2\",\"rfc3161-client\":\"1.0.9\",\"rfc8785\":\"0.1.4\",\"rich\":\"15.0.0\",\"securesystemslib\":\"1.5.1\",\"setuptools\":\"78.1.0\",\"sigstore\":\"4.5.0\",\"sigstore-models\":\"0.0.6\",\"sigstore-rekor-types\":\"0.0.18\",\"sympy\":\"1.14.0\",\"tokenizers\":\"0.23.2\",\"torch\":\"2.14.0+cpu\",\"tqdm\":\"4.70.1\",\"tuf\":\"7.0.1\",\"typing-extensions\":\"4.16.0\",\"typing-inspection\":\"0.4.4\",\"urllib3\":\"2.8.0\"},\"python\":\"3.12.14\",\"python_recursion_limit\":1000,\"system\":\"Linux\",\"tokenizers_parallelism\":\"false\",\"wikitext_parser_backend\":\"c\"},\"schema\":\"ovl.complete-preparation.v1\",\"source_commitment_sha256\":\"ec263b5c3914fd1a8bd25e97fa377b4f8416c38a9ef216d27c203252948b9129\",\"streams\":{\"conversation\":{\"documents\":3481,\"files\":[{\"bytes\":849666,\"path\":\"documents.jsonl\",\"sha256\":\"124ffaa61f20cde74c7758a1b654d1c1f1e2f917d3c36ff31001189f0c383672\"},{\"bytes\":1468127,\"path\":\"mask.u8\",\"sha256\":\"f17aec31ab9da79db70a4e2f2128b5807cae668a9b05b7d1f6805dc35efbc097\"},{\"bytes\":2936254,\"path\":\"tokens.u16\",\"sha256\":\"c56bb83e6ff43f571745f42276b3274a624110f622ad9f8099e0b905c3c4b043\"}],\"index_root\":\"8afb54fd8ef3cf82bbbd9b2ae866f54c1b8a1253d48c988e5cd137d12516aa8c\",\"phase\":\"conversation\",\"schema\":\"ovl.stream.v1\",\"targets\":1278137,\"token_dtype\":\"uint16-le\",\"tokenizer_sha256\":\"6eab0d9bcd5736cee484992b24e7a84459bee1cc3024c0e958a76842a57728c0\",\"tokens\":1468127,\"window_policy\":\"per-document-overlap-one-v1\"},\"conversation-validation\":{\"documents\":188,\"files\":[{\"bytes\":46168,\"path\":\"documents.jsonl\",\"sha256\":\"cd8d14cfb0a265161bde8604a8d15dc089b6e33992c07af5a4c1f6ffc7778af7\"},{\"bytes\":77654,\"path\":\"mask.u8\",\"sha256\":\"9170dd6e28d8dd328eed0a7804c05eba26f7b0dafc6b7127a26cbae86becb037\"},{\"bytes\":155308,\"path\":\"tokens.u16\",\"sha256\":\"be62756cf5ea9e28d13f1379b6cbf3174a5ee6b0b5121fb7e0f33defd2547918\"}],\"index_root\":\"67d3d1bc85e686de84050a4c7aa8cb4c16466898584511d75796adf5f21239af\",\"phase\":\"conversation\",\"schema\":\"ovl.stream.v1\",\"targets\":65355,\"token_dtype\":\"uint16-le\",\"tokenizer_sha256\":\"6eab0d9bcd5736cee484992b24e7a84459bee1cc3024c0e958a76842a57728c0\",\"tokens\":77654,\"window_policy\":\"per-document-overlap-one-v1\"},\"wikipedia\":{\"documents\":7232582,\"files\":[{\"bytes\":1293950757,\"path\":\"documents.jsonl\",\"sha256\":\"63704cfe04e221cf36f70f5df99d1336c592f202a894f581854d3d509fc876c7\"},{\"bytes\":7118121139,\"path\":\"mask.u8\",\"sha256\":\"9a058493c2603e8e892ec8c5147e6f9097987e79c4af79cf1e6fc67961df0dd9\"},{\"bytes\":14236242278,\"path\":\"tokens.u16\",\"sha256\":\"1d468ba5d5cada2aef125428241bdf8960cade6d5b236df39cdf1eace607cee7\"}],\"index_root\":\"24650037ea2a19718dd13f4ed9e632bfe731961ccd5b9431e57f3c89b788f17f\",\"phase\":\"wikipedia\",\"schema\":\"ovl.stream.v1\",\"targets\":7118121139,\"token_dtype\":\"uint16-le\",\"tokenizer_sha256\":\"6eab0d9bcd5736cee484992b24e7a84459bee1cc3024c0e958a76842a57728c0\",\"tokens\":7118121139,\"window_policy\":\"per-document-overlap-one-v1\"}},\"tokenizer\":{\"backend\":\"tokenizers-bytelevel-bpe\",\"controls\":{\"assistant\":4,\"bos\":1,\"eos\":2,\"pad\":0,\"user\":3},\"files\":[{\"bytes\":991312,\"path\":\"tokenizer.json\",\"sha256\":\"6eab0d9bcd5736cee484992b24e7a84459bee1cc3024c0e958a76842a57728c0\"}],\"sample_actual_bytes\":15979682,\"sample_articles\":628,\"sample_byte_budget\":16000000,\"sample_policy\":\"ordered-whole-article-prefix-v1\",\"sample_root\":\"3fb0298adc53ff1a797f8fd83ee7cf25846b8098816088b37870ca0d41495072\",\"schema\":\"ovl.tokenizer.v1\",\"text_id_offset\":5,\"vocab_size\":32000},\"validation_used_for_training\":false}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json#L1",
+ "quote": null
+ }
+ ],
+ "OV-04": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "lines": "1-37",
+ "text": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 0}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 1}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 2}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 3}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 4}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 5}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 6}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 7}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 8}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 9}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 10}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 11}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 12}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 13}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 14}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 15}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 16}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 17}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 18}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 19}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 20}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 21}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 22}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 23}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 24}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 25}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 26}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 27}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 28}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 29}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L1-L37",
+ "quote": null
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "39",
+ "text": "**Coverage at release: all 37 of 37 segments recomputed by the project, all MATCH.** That's 31",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L39",
+ "quote": "all 37 of 37 segments recomputed by the project, all MATCH"
+ }
+ ],
+ "OV-05": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "111-117",
+ "text": "- **Rebuild from the raw dump: PASS (2026-10-21).** All six preparation stages (corpus, tokenizer,\n Wikipedia stream, conversation selection, conversation and validation streams) were rerun from\n scratch from the raw dump and the OpenAssistant files. It used the pinned preparation code\n (revision 3f882ad, Python 3.12.14, locked packages), after checking the signed source statement.\n The rebuilt `preparation.json` is byte-identical to the published one: sha256\n `8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68`, the prepared-data ID this\n model was trained on. So the training streams provably come from that Wikipedia dump.",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L111-L117",
+ "quote": "Rebuild from the raw dump: PASS (2026-10-21)."
+ }
+ ],
+ "OV-06": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "87-90",
+ "text": "`release-hashes.txt`, and the dataset commit. It was timestamped by two independent RFC 3161\ntimestamp authorities (FreeTSA and DigiCert) at 2026-10-20 14:38:43 UTC. A timestamp proves the\nrelease existed unchanged no later than that time, so the record cannot be rewritten afterwards\nwithout detection. It does not prove when training happened. Check it with:",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L87-L90",
+ "quote": "at 2026-10-20 14:38:43 UTC"
+ }
+ ],
+ "OV-07": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "138-139",
+ "text": "- This is a small model. It writes fluent fragments in an encyclopedia style. It often states\n wrong facts and has only basic conversation ability.",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L138-L139",
+ "quote": "It often states wrong facts and has only basic conversation ability."
+ },
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "95-96",
+ "text": "The first verified model is **released**. It is small (23M parameters): it writes fluent,\nencyclopedia-style text, often gets facts wrong, and holds a basic conversation. The method is",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L95-L96",
+ "quote": "often gets facts wrong"
+ }
+ ],
+ "OV-08": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "140-141",
+ "text": "- \"Verified\" here means the published model is exactly what this training on these inputs\n produces. It does not mean the model's answers are true.",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L140-L141",
+ "quote": "It does not mean the model's answers are true."
+ },
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "87",
+ "text": null,
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L87",
+ "quote": "We verify the computation, not the content",
+ "withheld": [
+ "answers are correct"
+ ]
+ }
+ ],
+ "OV-09": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "106-107",
+ "text": "- Prepared training streams: `prepared/8de1d600…/` in this dataset. Wikipedia: 7,232,582 articles,\n 7,118,121,139 training targets, each seen exactly once. Conversation: 3,481 conversations,",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L106-L107",
+ "quote": "Wikipedia: 7,232,582 articles, 7,118,121,139 training targets"
+ },
+ {
+ "origin": "hf",
+ "file": "prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json",
+ "rev": "96dc282a",
+ "lines": "1",
+ "text": "{\"code\":[{\"bytes\":4498,\"path\":\".github/workflows/anchor-pipeline.yml\",\"sha256\":\"e016c58132c51a1753ae96756ee5bb53cc5f4cf958f6efbd607689612a44ebbb\"},{\"bytes\":416,\"path\":\"requirements/preparation.in\",\"sha256\":\"4b0a637aaaa61787a78f053263536b4ac0a7f4abd53978bc1103c8905db7e78e\"},{\"bytes\":73127,\"path\":\"requirements/preparation.lock\",\"sha256\":\"e284b2f4c393943e8d28a8ac6875b97634ffbe7c50356ba7aa90cd2ce5218f74\"},{\"bytes\":74,\"path\":\"src/ovl_pipeline/__init__.py\",\"sha256\":\"0e60ca9603d569e977ae6f7b55d308384e7d864b65f9a2e3eb00f2afea9fbffb\"},{\"bytes\":12024,\"path\":\"src/ovl_pipeline/acquisition.py\",\"sha256\":\"389153c4e6a76f66586a26e530b6f5defd9d9e4c6140dc46c702c74fc3fa8392\"},{\"bytes\":7865,\"path\":\"src/ovl_pipeline/anchoring.py\",\"sha256\":\"e23d14c090c8152ff65506c5e1c15b16da060b82dde860714c2396e7f4e097d2\"},{\"bytes\":6618,\"path\":\"src/ovl_pipeline/canonical.py\",\"sha256\":\"2de9c77a6d7414b9802a8b26b95d7fe9effdfd241df1e751ab3fb17475bcb1b1\"},{\"bytes\":8630,\"path\":\"src/ovl_pipeline/conversations.py\",\"sha256\":\"1233029c70b69a0dcc9067938ea4e20bcda3aa6ae6609df728ee5c49403f407a\"},{\"bytes\":17928,\"path\":\"src/ovl_pipeline/data.py\",\"sha256\":\"2b5c6898a8473f600aaf07868bd1bc495f206c2c2c1c2ba2b13cc215cb6063ab\"},{\"bytes\":4300,\"path\":\"src/ovl_pipeline/extraction_workers.py\",\"sha256\":\"969d06c76bbd13129beb1af6fb3d9a2a09fbc5ec0d84a62e46a098b3f1a0e7e7\"},{\"bytes\":20817,\"path\":\"src/ovl_pipeline/preparation.py\",\"sha256\":\"e368c228254c05fd59ff593ceddd6393b6a192fbb70953b8b3af5c14b48d12fa\"},{\"bytes\":9675,\"path\":\"src/ovl_pipeline/preparation_stages.py\",\"sha256\":\"2206849e62ff957937783284ef9e018cf8c79ab15a42783479be807611fda242\"},{\"bytes\":4526,\"path\":\"src/ovl_pipeline/schema.py\",\"sha256\":\"6255f646fb441d350ca7d79ac2441edf42af9b1047ab3c7ad6061743299e090c\"},{\"bytes\":9894,\"path\":\"src/ovl_pipeline/source_commitment.py\",\"sha256\":\"de00be05627f7556c62a3437470d816e4d3235ad51f162a61751f7b4af3df108\"}],\"conversation_selection\":{\"conversations\":{\"train\":3481,\"validation\":188},\"counts\":{\"train\":{\"deleted\":1485,\"non_english\":44006,\"not_approved\":1163,\"selected\":10252,\"unselected_branch_or_unanswered_prompt\":27507,\"unusable_ancestor\":24},\"validation\":{\"deleted\":68,\"non_english\":2321,\"not_approved\":76,\"selected\":550,\"unselected_branch_or_unanswered_prompt\":1386}},\"files\":[{\"bytes\":35542562,\"path\":\"selection.jsonl\",\"sha256\":\"43297d859bbdd1b29d28cf9cb20aa73fd330654e24132a25f7d78c4534ef052d\"},{\"bytes\":6978579,\"path\":\"train.jsonl\",\"sha256\":\"b460ff323dd76ec00c23b3cb1c1a364cc9e4c4b9424941d730844ad69e036e55\"},{\"bytes\":376180,\"path\":\"validation.jsonl\",\"sha256\":\"bd3f4d392bdc90c23bfc64d3562460fcf5a4aad73fc0e20ed60edb00bf07db40\"}],\"messages\":88838,\"policy\":\"oasst-en-preferred-path-v1\",\"projection_columns\":[\"message_id\",\"parent_id\",\"text\",\"role\",\"lang\",\"review_result\",\"deleted\",\"rank\",\"message_tree_id\"],\"schema\":\"ovl.conversation-selection.v1\",\"selection_root\":\"e94202ed19145028de35c28aae49c320aad5195f264951fc6c9a44edad191d8b\",\"source_inventory_root\":\"a0047b229629298b87d25baacb0230ff23b30006c820e97e5d42badd9ae8f253\",\"split_filenames\":{\"train\":\"data/train-00000-of-00001-b42a775f407cee45.parquet\",\"validation\":\"data/validation-00000-of-00001-134b8fd0c89408b6.parquet\"}},\"corpus\":{\"counts\":{\"empty_extracted_text\":2166,\"included\":7232582,\"non_main_namespace\":6597190,\"redirect\":12027806},\"files\":[{\"bytes\":33012803655,\"path\":\"articles.jsonl\",\"sha256\":\"4f7abe772231bcb29573796ce4f1412a38ea751135323180ad3119c19260523f\"},{\"bytes\":15583458438,\"path\":\"ledger.jsonl\",\"sha256\":\"60a11cb9974cdbe254e63476c5c4f5c6df91d9446a4c917c59a93d49b94f101b\"}],\"ledger_root\":\"60076f336fd9bb6c5d20a1f4eaf2635c1587568ae9a50fdfb74a8fa6f68655be\",\"policy\":\"main-nonredirect-stripcode-v1\",\"record_count\":25859744,\"schema\":\"ovl.corpus.v1\",\"sources\":[\"859cf6cc1d13007d165025247cacaf463ff8a4ad700b19e476f7626e24169116\"]},\"environment\":{\"dependency_lock_sha256\":\"e284b2f4c393943e8d28a8ac6875b97634ffbe7c50356ba7aa90cd2ce5218f74\",\"machine\":\"x86_64\",\"packages\":{\"annotated-types\":\"0.8.0\",\"anyio\":\"4.15.1\",\"certifi\":\"2026.7.22\",\"cffi\":\"2.1.1\",\"charset-normalizer\":\"3.5.1\",\"click\":\"8.5.0\",\"cryptography\":\"50.0.1\",\"defusedxml\":\"0.7.1\",\"dnspython\":\"2.8.0\",\"email-validator\":\"2.3.0\",\"filelock\":\"3.32.3\",\"fsspec\":\"2026.7.0\",\"h11\":\"0.16.0\",\"hf-xet\":\"1.6.0\",\"httpcore\":\"1.0.9\",\"httpx\":\"0.28.1\",\"huggingface-hub\":\"1.32.0\",\"id\":\"1.6.1\",\"idna\":\"3.20\",\"jinja2\":\"3.1.6\",\"markdown-it-py\":\"4.2.0\",\"markupsafe\":\"3.0.3\",\"mdurl\":\"0.1.2\",\"mpmath\":\"1.3.0\",\"mwparserfromhell\":\"0.7.2\",\"networkx\":\"3.6.1\",\"numpy\":\"2.5.3\",\"packaging\":\"26.3\",\"platformdirs\":\"4.11.9\",\"pyarrow\":\"25.0.1\",\"pyasn1\":\"0.6.4\",\"pycparser\":\"3.0\",\"pydantic\":\"2.13.5\",\"pydantic-core\":\"2.46.5\",\"pygments\":\"2.21.0\",\"pyjwt\":\"2.14.0\",\"pyopenssl\":\"26.4.0\",\"pyyaml\":\"6.0.3\",\"requests\":\"2.34.2\",\"rfc3161-client\":\"1.0.9\",\"rfc8785\":\"0.1.4\",\"rich\":\"15.0.0\",\"securesystemslib\":\"1.5.1\",\"setuptools\":\"78.1.0\",\"sigstore\":\"4.5.0\",\"sigstore-models\":\"0.0.6\",\"sigstore-rekor-types\":\"0.0.18\",\"sympy\":\"1.14.0\",\"tokenizers\":\"0.23.2\",\"torch\":\"2.14.0+cpu\",\"tqdm\":\"4.70.1\",\"tuf\":\"7.0.1\",\"typing-extensions\":\"4.16.0\",\"typing-inspection\":\"0.4.4\",\"urllib3\":\"2.8.0\"},\"python\":\"3.12.14\",\"python_recursion_limit\":1000,\"system\":\"Linux\",\"tokenizers_parallelism\":\"false\",\"wikitext_parser_backend\":\"c\"},\"schema\":\"ovl.complete-preparation.v1\",\"source_commitment_sha256\":\"ec263b5c3914fd1a8bd25e97fa377b4f8416c38a9ef216d27c203252948b9129\",\"streams\":{\"conversation\":{\"documents\":3481,\"files\":[{\"bytes\":849666,\"path\":\"documents.jsonl\",\"sha256\":\"124ffaa61f20cde74c7758a1b654d1c1f1e2f917d3c36ff31001189f0c383672\"},{\"bytes\":1468127,\"path\":\"mask.u8\",\"sha256\":\"f17aec31ab9da79db70a4e2f2128b5807cae668a9b05b7d1f6805dc35efbc097\"},{\"bytes\":2936254,\"path\":\"tokens.u16\",\"sha256\":\"c56bb83e6ff43f571745f42276b3274a624110f622ad9f8099e0b905c3c4b043\"}],\"index_root\":\"8afb54fd8ef3cf82bbbd9b2ae866f54c1b8a1253d48c988e5cd137d12516aa8c\",\"phase\":\"conversation\",\"schema\":\"ovl.stream.v1\",\"targets\":1278137,\"token_dtype\":\"uint16-le\",\"tokenizer_sha256\":\"6eab0d9bcd5736cee484992b24e7a84459bee1cc3024c0e958a76842a57728c0\",\"tokens\":1468127,\"window_policy\":\"per-document-overlap-one-v1\"},\"conversation-validation\":{\"documents\":188,\"files\":[{\"bytes\":46168,\"path\":\"documents.jsonl\",\"sha256\":\"cd8d14cfb0a265161bde8604a8d15dc089b6e33992c07af5a4c1f6ffc7778af7\"},{\"bytes\":77654,\"path\":\"mask.u8\",\"sha256\":\"9170dd6e28d8dd328eed0a7804c05eba26f7b0dafc6b7127a26cbae86becb037\"},{\"bytes\":155308,\"path\":\"tokens.u16\",\"sha256\":\"be62756cf5ea9e28d13f1379b6cbf3174a5ee6b0b5121fb7e0f33defd2547918\"}],\"index_root\":\"67d3d1bc85e686de84050a4c7aa8cb4c16466898584511d75796adf5f21239af\",\"phase\":\"conversation\",\"schema\":\"ovl.stream.v1\",\"targets\":65355,\"token_dtype\":\"uint16-le\",\"tokenizer_sha256\":\"6eab0d9bcd5736cee484992b24e7a84459bee1cc3024c0e958a76842a57728c0\",\"tokens\":77654,\"window_policy\":\"per-document-overlap-one-v1\"},\"wikipedia\":{\"documents\":7232582,\"files\":[{\"bytes\":1293950757,\"path\":\"documents.jsonl\",\"sha256\":\"63704cfe04e221cf36f70f5df99d1336c592f202a894f581854d3d509fc876c7\"},{\"bytes\":7118121139,\"path\":\"mask.u8\",\"sha256\":\"9a058493c2603e8e892ec8c5147e6f9097987e79c4af79cf1e6fc67961df0dd9\"},{\"bytes\":14236242278,\"path\":\"tokens.u16\",\"sha256\":\"1d468ba5d5cada2aef125428241bdf8960cade6d5b236df39cdf1eace607cee7\"}],\"index_root\":\"24650037ea2a19718dd13f4ed9e632bfe731961ccd5b9431e57f3c89b788f17f\",\"phase\":\"wikipedia\",\"schema\":\"ovl.stream.v1\",\"targets\":7118121139,\"token_dtype\":\"uint16-le\",\"tokenizer_sha256\":\"6eab0d9bcd5736cee484992b24e7a84459bee1cc3024c0e958a76842a57728c0\",\"tokens\":7118121139,\"window_policy\":\"per-document-overlap-one-v1\"}},\"tokenizer\":{\"backend\":\"tokenizers-bytelevel-bpe\",\"controls\":{\"assistant\":4,\"bos\":1,\"eos\":2,\"pad\":0,\"user\":3},\"files\":[{\"bytes\":991312,\"path\":\"tokenizer.json\",\"sha256\":\"6eab0d9bcd5736cee484992b24e7a84459bee1cc3024c0e958a76842a57728c0\"}],\"sample_actual_bytes\":15979682,\"sample_articles\":628,\"sample_byte_budget\":16000000,\"sample_policy\":\"ordered-whole-article-prefix-v1\",\"sample_root\":\"3fb0298adc53ff1a797f8fd83ee7cf25846b8098816088b37870ca0d41495072\",\"schema\":\"ovl.tokenizer.v1\",\"text_id_offset\":5,\"vocab_size\":32000},\"validation_used_for_training\":false}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json#L1",
+ "quote": null
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "lines": "32",
+ "text": "{\"control\": {\"batches\": \"dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875\", \"cursor\": 7118121139, \"epoch\": 0, \"global_step\": 560177, \"phase\": \"wikipedia\", \"phase_step\": 560177, \"pos\": [1293950757, 0]}, \"index\": 31, \"kind\": \"base\", \"model\": \"31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f\", \"previous\": \"2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39\", \"state\": \"13d6ad64b2465d42653f250bba0463468c0c81b7980ebc9d97e3b0f95c713bf1\", \"time\": 1792478775.2381847}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L32",
+ "quote": null
+ }
+ ],
+ "OV-10": [
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "106",
+ "text": "| 20 Oct 06:46 | Wikipedia pass and conversation phase finished (15.7 hours in total) |",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L106",
+ "quote": "(15.7 hours in total)"
+ },
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "121",
+ "text": "| Training (one RTX 5090) | 15.7 h, including a 19-minute outage and about 9 h at half speed before the CPU fix | about US$19 |",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L121",
+ "quote": "15.7 h, including a 19-minute outage"
+ }
+ ],
+ "OV-11": [
+ {
+ "origin": "brief",
+ "file": "project brief v3",
+ "rev": "v3-2026-10-29",
+ "lines": "81-82",
+ "text": null,
+ "url": null,
+ "quote": "The training loop is about 630 lines in `simple/ovl.py`, plus about 1,000 lines"
+ },
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "13-15",
+ "text": "- Code: `simple/` in this repository. `simple/ovl.py` (631 lines) trains, verifies and chats. It imports\n the model (`src/model.py`) and the data and initialization helpers (`src/ovl_pipeline/data.py`,\n `training.py`), about 1,000 lines in all. The training data was prepared by the earlier pipeline.",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L13-L15",
+ "quote": "about 1,000 lines in all"
+ }
+ ],
+ "OV-12": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "142",
+ "text": "- Bit-exact checking needs the same GPU type and software stack as training.",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L142",
+ "quote": "Bit-exact checking needs the same GPU type and software stack as training."
+ },
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "116-117",
+ "text": "- Checkers need the training GPU's architecture (RTX 5090), and they trust the same PyTorch/CUDA\n toolchain. A deterministic error in that toolchain would match on every machine",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L116-L117",
+ "quote": "they trust the same PyTorch/CUDA"
+ }
+ ],
+ "OV-13": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "lines": "1-46",
+ "text": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 0}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 1}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 2}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 3}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 4}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 5}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 6}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 7}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 8}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 9}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 10}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 11}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 12}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 13}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 14}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 15}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 16}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 17}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 18}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 19}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 20}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 21}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 22}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 23}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 24}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 25}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 26}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 27}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 28}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 29}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 22}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0 fast loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 5}\n{\"checker\": \"project fresh machine public files only\", \"code\": \"verify_segment.sh from the release\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 21}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L1-L46",
+ "quote": null
+ },
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/verifications.jsonl",
+ "rev": "96dc282a",
+ "lines": "1-10",
+ "text": "{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 37}\n{\"checker\": \"project fresh machine public files only\", \"code\": \"code/simple/ovl.py from this release\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}\n{\"checker\": \"project fresh machine public files only\", \"code\": \"code/simple/ovl.py from this release\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl#L1-L10",
+ "quote": null
+ },
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "118",
+ "text": "- All checks so far were run by the project, on separate machines. **We need independent",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L118",
+ "quote": "All checks so far were run by the project, on separate machines."
+ }
+ ],
+ "CK-01": [
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "186",
+ "text": "- [Run the model in Ollama](docs/guides/ollama.md): `ollama run ryoari/openverifiablellm`",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L186",
+ "quote": "`ollama run ryoari/openverifiablellm`"
+ },
+ {
+ "origin": "github",
+ "file": "docs/guides/ollama.md",
+ "rev": "1049d2a7",
+ "lines": "6-7",
+ "text": "This is for trying the model. It isn't how the model is verified. llama.cpp uses a slightly\ndifferent GELU and different kernels, so its outputs are close to PyTorch's but not bit-identical.",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/guides/ollama.md#L6-L7",
+ "quote": "This is for trying the model. It isn't how the model is verified."
+ }
+ ],
+ "CK-02": [
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "151-153",
+ "text": "Check that the released model matches its timestamped record, without a GPU. This is a\nconsistency check: it recomputes no training. The real verification is the segment recomputation\nbelow.",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L151-L153",
+ "quote": "This is a consistency check: it recomputes no training."
+ },
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "156-167",
+ "text": "pip install huggingface_hub torch numpy rfc8785==0.1.4 tokenizers==0.23.2 mwparserfromhell==0.7.2 \\\n \"safetensors>=0.4.5,<1.0\" \"pynacl>=1.5,<2.0\"\nhf download AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence \\\n --repo-type dataset --include \"release/simple-run/*\" --exclude \"*/ckpt-*\" --local-dir ovl\ncd ovl/release/simple-run\nsha256sum -c --ignore-missing release-hashes.txt\nopenssl ts -verify -in anchor.digicert.tsr -data anchor.json -CAfile /etc/ssl/certs/ca-certificates.crt\n# Verification: OK (DigiCert stamped anchor.json on 2026-10-20)\ngit clone -q --depth 1 --branch v1.0.1 https://github.com/AOSSIE-Org/OpenVerifiableLLM ovl-code\nOVL_DEVICE=cpu python ovl-code/simple/ovl.py verify --run . --weights conversation-model.pt\n# anchor anchor.json: chain head MATCH (38 entries)\n# weights conversation-model.pt: MATCH chain entry 37",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L156-L167",
+ "quote": null
+ }
+ ],
+ "CK-03": [
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "170-172",
+ "text": "Use `ovl.py` from the v1.0.1 tag, as above. It fails if `anchor.json` is missing. The copy in the\ndownload's `code/` folder predates the anchor check, so it doesn't compare the record with its\ntimestamped anchor.",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L170-L172",
+ "quote": "Use `ovl.py` from the v1.0.1 tag, as above. It fails if `anchor.json` is missing."
+ }
+ ],
+ "CK-04": [
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "166-167",
+ "text": "# anchor anchor.json: chain head MATCH (38 entries)\n# weights conversation-model.pt: MATCH chain entry 37",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L166-L167",
+ "quote": "chain head MATCH (38 entries)"
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/anchor.json",
+ "rev": "96dc282a",
+ "lines": "2-3",
+ "text": " \"chain_entries\": 38,\n \"chain_head_index\": 37,",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/anchor.json#L2-L3",
+ "quote": null
+ }
+ ],
+ "CK-05": [
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "174-176",
+ "text": "Recompute a training segment on an RTX 5090, in one click:\n[deploy the RunPod template](https://console.runpod.io/deploy?template=mai1ozh35g), wait about an\nhour, and read the result line in the logs. Step by step:",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L174-L176",
+ "quote": "[deploy the RunPod template](https://console.runpod.io/deploy?template=mai1ozh35g), wait about an"
+ },
+ {
+ "origin": "github",
+ "file": "docs/guides/check_a_segment.md",
+ "rev": "1049d2a7",
+ "lines": "46",
+ "text": "2. Wait about an hour: a 22 GB download, then about 20 minutes of training.",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/guides/check_a_segment.md#L46",
+ "quote": "Wait about an hour: a 22 GB download, then about 20 minutes of training."
+ }
+ ],
+ "CK-06": [
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "85",
+ "text": "- **One segment on an RTX 5090 (about an hour, about US$1–1.50 rented):** deploy the public RunPod",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L85",
+ "quote": "about an hour, about US$1–1.50 rented"
+ },
+ {
+ "origin": "github",
+ "file": "docs/guides/check_a_segment.md",
+ "rev": "1049d2a7",
+ "lines": "53",
+ "text": "4. Post that line in the project Discord, then **terminate the pod**. It costs about US$1–1.50.",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/guides/check_a_segment.md#L53",
+ "quote": "It costs about US$1–1.50."
+ },
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "116",
+ "text": "Prices are RunPod list prices at the time: US$1.19/h for an RTX 5090 and US$0.50/h for the CPU",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L116",
+ "quote": "US$1.19/h for an RTX 5090"
+ }
+ ],
+ "CK-07": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "57-60",
+ "text": "# download code/ from this folder, then:\nbash code/simple/verify_segment.sh # one random segment (~20 min)\nK=3 bash code/simple/verify_segment.sh # three random segments\nSEGMENTS=\"7 8\" bash code/simple/verify_segment.sh # chosen segments",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L57-L60",
+ "quote": null
+ }
+ ],
+ "CK-08": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "93-95",
+ "text": "openssl ts -verify -in anchor.digicert.tsr -data anchor.json -CAfile /etc/ssl/certs/ca-certificates.crt\ncurl -sO https://freetsa.org/files/cacert.pem; curl -sO https://freetsa.org/files/tsa.crt\nopenssl ts -verify -in anchor.freetsa.tsr -data anchor.json -CAfile cacert.pem -untrusted tsa.crt",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L93-L95",
+ "quote": null
+ }
+ ],
+ "VE-01": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "lines": "1-37",
+ "text": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 0}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 1}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 2}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 3}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 4}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 5}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 6}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 7}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 8}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 9}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 10}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 11}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 12}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 13}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 14}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 15}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 16}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 17}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 18}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 19}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 20}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 21}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 22}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 23}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 24}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 25}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 26}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 27}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 28}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 29}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L1-L37",
+ "quote": null
+ },
+ {
+ "origin": "brief",
+ "file": "project brief v3",
+ "rev": "v3-2026-10-29",
+ "lines": "49",
+ "text": null,
+ "url": null,
+ "quote": "Today all 37 are \"project\"."
+ }
+ ],
+ "VE-02": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "26-28",
+ "text": "Training is split into segments: boundary k to boundary k+1. Each segment can be recomputed on\nits own, starting from the published checkpoint k. A segment passes only if the recomputed state\nis identical, bit for bit, to the committed entry k+1. Because every segment starts from a",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L26-L28",
+ "quote": "A segment passes only if the recomputed state is identical, bit for bit, to the committed entry k+1."
+ }
+ ],
+ "VE-03": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "lines": "1-46",
+ "text": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 0}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 1}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 2}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 3}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 4}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 5}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 6}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 7}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 8}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 9}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 10}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 11}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 12}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 13}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 14}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 15}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 16}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 17}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 18}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 19}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 20}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 21}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 22}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 23}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 24}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 25}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 26}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 27}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 28}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 29}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 22}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0 fast loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 5}\n{\"checker\": \"project fresh machine public files only\", \"code\": \"verify_segment.sh from the release\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 21}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L1-L46",
+ "quote": null
+ }
+ ],
+ "VE-04": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "lines": "46",
+ "text": "{\"checker\": \"project fresh machine public files only\", \"code\": \"verify_segment.sh from the release\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 21}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L46",
+ "quote": null
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "41-42",
+ "text": "different NVIDIA driver from training (595.91.07 vs 570.195.03 for segments 0-9). Segment 21 was\nalso recomputed on a fresh machine using only the public files and `verify_segment.sh`: MATCH. See",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L41-L42",
+ "quote": "Segment 21 was"
+ }
+ ],
+ "VE-06": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "45-47",
+ "text": "**How hard is it to forge one segment?** With N segments, M independent checkers who each pick one\nrandom segment catch a single forged segment with probability 1 − ((N−1)/N)^M. One checker who\nchecks k different segments catches it with probability k/N.",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L45-L47",
+ "quote": "1 − ((N−1)/N)^M"
+ }
+ ],
+ "VE-07": [
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "199-200",
+ "text": " catch one forged segment with probability 1 − ((N−1)/N)^M. For N = 37 that's about 110 checks for\n 95% and 169 for 99%. Longer runs with more segments need more checks.",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L199-L200",
+ "quote": "For N = 37 that's about 110 checks for 95% and 169 for 99%."
+ },
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "119-120",
+ "text": " checkers**: see [Join us](#join-us). Catching one forged segment out of 37 with 95% probability\n takes about 110 independent random checks",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L119-L120",
+ "quote": "takes about 110 independent random checks"
+ }
+ ],
+ "VE-08": [
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "199-200",
+ "text": " catch one forged segment with probability 1 − ((N−1)/N)^M. For N = 37 that's about 110 checks for\n 95% and 169 for 99%. Longer runs with more segments need more checks.",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L199-L200",
+ "quote": "169 for 99%"
+ }
+ ],
+ "VE-09": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "lines": "1-46",
+ "text": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 0}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 1}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 2}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 3}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 4}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 5}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 6}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 7}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 8}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 9}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 10}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 11}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 12}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 13}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 14}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 15}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 16}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 17}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 18}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 19}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 20}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 21}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 22}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 23}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 24}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 25}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 26}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 27}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 28}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 29}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 22}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}\n{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0 fast loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 5}\n{\"checker\": \"project fresh machine public files only\", \"code\": \"verify_segment.sh from the release\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 21}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L1-L46",
+ "quote": null
+ },
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/verifications.jsonl",
+ "rev": "96dc282a",
+ "lines": "1-10",
+ "text": "{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 37}\n{\"checker\": \"project fresh machine public files only\", \"code\": \"code/simple/ovl.py from this release\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}\n{\"checker\": \"project fresh machine public files only\", \"code\": \"code/simple/ovl.py from this release\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl#L1-L10",
+ "quote": null
+ },
+ {
+ "origin": "brief",
+ "file": "project brief v3",
+ "rev": "v3-2026-10-29",
+ "lines": "52",
+ "text": null,
+ "url": null,
+ "quote": "Show the current count of independent checks, which is 0."
+ }
+ ],
+ "VE-10": [
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "121-122",
+ "text": "- Check results are self-reported text lines. They aren't signed, and nothing proves a checker\n picked its segment at random",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L121-L122",
+ "quote": "They aren't signed, and nothing proves a checker"
+ }
+ ],
+ "VE-11": [
+ {
+ "origin": "github",
+ "file": "docs/project/roadmap.md",
+ "rev": "1049d2a7",
+ "lines": "32-33",
+ "text": "- **Signed check results and random segment choice.** Today a check result is a self-reported line.\n Checkers would sign their result, and the segment would be picked from public randomness (for",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/project/roadmap.md#L32-L33",
+ "quote": "Signed check results and random segment choice."
+ },
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "202-203",
+ "text": null,
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L202-L203",
+ "quote": "Signed results and public randomness for picking segments",
+ "withheld": [
+ "signed results"
+ ]
+ }
+ ],
+ "VE-HW-1": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/hardware-map.jsonl",
+ "rev": "96dc282a",
+ "lines": "1",
+ "text": "{\"segment\": 32, \"result\": \"MATCH\", \"hardware\": \"NVIDIA GeForce RTX 5090 (Blackwell)\", \"driver\": \"595.91.07\", \"software\": \"torch 2.8.0+cu128\", \"note\": \"training GPU type; control for this probe\"}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/hardware-map.jsonl#L1",
+ "quote": null
+ }
+ ],
+ "VE-HW-2": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/hardware-map.jsonl",
+ "rev": "96dc282a",
+ "lines": "2",
+ "text": "{\"segment\": 32, \"result\": \"MISMATCH\", \"hardware\": \"NVIDIA GeForce RTX 4090 (Ada)\", \"driver\": \"595.91.07\", \"software\": \"torch 2.8.0+cu128\", \"note\": \"same software, different architecture\"}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/hardware-map.jsonl#L2",
+ "quote": null
+ }
+ ],
+ "VE-HW-3": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/hardware-map.jsonl",
+ "rev": "96dc282a",
+ "lines": "3",
+ "text": "{\"segment\": 32, \"result\": \"MISMATCH\", \"hardware\": \"NVIDIA H100 80GB HBM3 (Hopper)\", \"driver\": \"595.91.07\", \"software\": \"torch 2.8.0+cu128\", \"note\": \"same software, different architecture\"}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/hardware-map.jsonl#L3",
+ "quote": null
+ }
+ ],
+ "VE-HW-4": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/hardware-map.jsonl",
+ "rev": "96dc282a",
+ "lines": "4",
+ "text": "{\"segment\": 32, \"result\": \"MISMATCH\", \"hardware\": \"x86_64 CPU\", \"driver\": \"none\", \"software\": \"torch 2.14.0+cpu\", \"note\": \"different hardware and software\"}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/hardware-map.jsonl#L4",
+ "quote": null
+ }
+ ],
+ "VE-HW-5": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "68",
+ "text": "The same published segment (32→33) was recomputed with the same software (PyTorch 2.8.0, CUDA 12.8):",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L68",
+ "quote": "The same published segment (32→33)"
+ }
+ ],
+ "VE-HW-6": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "79-80",
+ "text": "training reproduces on the same GPU architecture: two different NVIDIA drivers (570.195.03 and\n595.91.07) gave identical bits. Other architectures run different low-level kernels and do not.",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L79-L80",
+ "quote": "two different NVIDIA drivers (570.195.03 and"
+ }
+ ],
+ "VE-12": [
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "116-117",
+ "text": "- Checkers need the training GPU's architecture (RTX 5090), and they trust the same PyTorch/CUDA\n toolchain. A deterministic error in that toolchain would match on every machine",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L116-L117",
+ "quote": "A deterministic error in that toolchain would match on every machine"
+ }
+ ],
+ "TL-01": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "lines": "1-38",
+ "text": "{\"control\": {\"batches\": \"10ea13010a13668c8bf9e2884e16bdbd16f8933d9bf4d09eda0c47459133eddb\", \"cursor\": 0, \"epoch\": 0, \"global_step\": 0, \"phase\": \"wikipedia\", \"phase_step\": 0, \"pos\": [0, 0]}, \"data\": {\"conversation\": \"e179de793decc82e8cecfbfabd7d449d1caf145a988c4c881a9a041dcda36b7f\", \"wikipedia\": \"a49baead333842ac36669a62a752ea6204295e4012a6bfa2d8f2b8c85981d832\"}, \"environment\": {\"cublas_workspace\": \":4096:8\", \"cuda\": \"12.8\", \"cudnn\": 91002, \"gpu\": \"NVIDIA GeForce RTX 5090\", \"torch\": \"2.8.0+cu128\"}, \"index\": 0, \"kind\": \"initial\", \"model\": \"2b167bcb407f94ac3f1dead8f316ea180823a1cb40489b8a1ff974bf2bcd959d\", \"previous\": null, \"recipe\": \"d0d9fc61c46b0f0e0b63e336579e7443860141452d881b1e7297ad46439f9fc5\", \"state\": \"64041a4736bd76b64b149c2a784950a312fb19ed641c7eb87e7300c171d002fc\", \"time\": 1792422250.861772}\n{\"control\": {\"batches\": \"e3f19a5269c4824fb1615d433b678fa54a6fc23ea99fd82c3e83f3f400f66809\", \"cursor\": 274561003, \"epoch\": 0, \"global_step\": 18080, \"phase\": \"wikipedia\", \"phase_step\": 18080, \"pos\": [14363834, 3072]}, \"index\": 1, \"kind\": \"progress\", \"model\": \"c32f02fac9e87d0c4279aa39a0fa06b5cc06d5b141d5ff29503cb8431c4ca180\", \"previous\": \"504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2\", \"state\": \"ef5090325fcf3c392503406ac2f7e6bd99118d267c38fbe4b624df41b48eca8f\", \"time\": 1792424215.6430938}\n{\"control\": {\"batches\": \"d5b199348b8d97e5a30ee2ea1a9bc465fd5dc0220a1a4297b4fa0716abdc84dc\", \"cursor\": 547313827, \"epoch\": 0, \"global_step\": 36160, \"phase\": \"wikipedia\", \"phase_step\": 36160, \"pos\": [30161308, 6656]}, \"index\": 2, \"kind\": \"progress\", \"model\": \"29c055caaaefce12e962bb5905f79640bf7bcfc2dfe09070704f50a35e954868\", \"previous\": \"7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f\", \"state\": \"94e253d50adff230867baf0f9b2fbb247399b598511dd238cca10838439a228c\", \"time\": 1792426181.1370955}\n{\"control\": {\"batches\": \"f520d10b29d43cbbe5556d887bd7e622a26ed3003eaa8677366993ed6a0965df\", \"cursor\": 812314162, \"epoch\": 0, \"global_step\": 54240, \"phase\": \"wikipedia\", \"phase_step\": 54240, \"pos\": [50875269, 0]}, \"index\": 3, \"kind\": \"progress\", \"model\": \"bc0210cc1ce7eb55786921b9be9142224551daaa14a5a94b5851415d9954513f\", \"previous\": \"491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789\", \"state\": \"63f2f1cf69a97b295ef4924af836583cc5942d4cfdde34a0d68da658e9b56875\", \"time\": 1792428164.4587104}\n{\"control\": {\"batches\": \"9b1c36b8b217b225ab637476b5f96e9d13723e8ff2f49474a1aff9fe4b6c6836\", \"cursor\": 1071169817, \"epoch\": 0, \"global_step\": 72320, \"phase\": \"wikipedia\", \"phase_step\": 72320, \"pos\": [75821490, 512]}, \"index\": 4, \"kind\": \"progress\", \"model\": \"f6c1733d73e556de085fd9cb99f4137296f9ad7835fc3c88c9f8588cfeca0165\", \"previous\": \"21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37\", \"state\": \"38544968f3a1f342c17ee65afed30915acacf2131314c3254cfb1d3367acf0f6\", \"time\": 1792430142.4307606}\n{\"control\": {\"batches\": \"0feb0c99169621a584609ce24a7ba1710f4dd1127205dae3911df09e1ab75698\", \"cursor\": 1326339931, \"epoch\": 0, \"global_step\": 90400, \"phase\": \"wikipedia\", \"phase_step\": 90400, \"pos\": [103716532, 512]}, \"index\": 5, \"kind\": \"progress\", \"model\": \"521f1f5f34c6a0992a15e539f1eab5f5590f5fdca15fdf16c60842c1d8612754\", \"previous\": \"7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6\", \"state\": \"0f66051bfcf2b8512da505733cf9814527aba0412b28109071d9ebe1e7949165\", \"time\": 1792432107.6645238}\n{\"control\": {\"batches\": \"dd5c823c56a28362db599fa09567143434f9f343784400622105200695fca78d\", \"cursor\": 1575735740, \"epoch\": 0, \"global_step\": 108480, \"phase\": \"wikipedia\", \"phase_step\": 108480, \"pos\": [135269108, 0]}, \"index\": 6, \"kind\": \"progress\", \"model\": \"655aa1b3b7f5a34c9f0a2eba172ddbfef233acb3f121373e351b6d2cd982475f\", \"previous\": \"5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa\", \"state\": \"d3f93a22ceb28a8640734ceca70e0217cf991b696807ecb6fdd31d318ad30aa8\", \"time\": 1792434050.5597794}\n{\"control\": {\"batches\": \"496333b0221dbc6a2edeeb9ea5318d3b33069b8f91c98d489cf742f70bab1d43\", \"cursor\": 1821662484, \"epoch\": 0, \"global_step\": 126560, \"phase\": \"wikipedia\", \"phase_step\": 126560, \"pos\": [169162007, 512]}, \"index\": 7, \"kind\": \"progress\", \"model\": \"ab677b66cfcc2d0652d37b5cc354e5d6980716b273cc99b78ae53f63e581ba14\", \"previous\": \"bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a\", \"state\": \"228e635e6ee63fca5189f1af685f15c9d52a27527f300e7dac7a5ade82688e11\", \"time\": 1792435994.2637668}\n{\"control\": {\"batches\": \"a009f3186720dd943c7c0e3c597706610370b795c3fd87b65df4ce8cdc54822d\", \"cursor\": 2062246462, \"epoch\": 0, \"global_step\": 144640, \"phase\": \"wikipedia\", \"phase_step\": 144640, \"pos\": [206335253, 0]}, \"index\": 8, \"kind\": \"progress\", \"model\": \"4419b42c7902c6f650e634055a1de54ca172e2a0a26c5bbad58ee8516cf4dfc6\", \"previous\": \"8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc\", \"state\": \"6cb7cf58b036f71d793b7940617d2756e4d24e906a8a4fdb6ec58ee56031ad53\", \"time\": 1792437967.4633026}\n{\"control\": {\"batches\": \"9f883e76562c687ddae51575bda5430cc91dbc45e57e7311d3646340a420a020\", \"cursor\": 2299429619, \"epoch\": 0, \"global_step\": 162720, \"phase\": \"wikipedia\", \"phase_step\": 162720, \"pos\": [245609368, 0]}, \"index\": 9, \"kind\": \"progress\", \"model\": \"967ff641117b62e0f4bbb19fda16cfb7a1b6c20adc35295ff0738a0664953048\", \"previous\": \"09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae\", \"state\": \"0947a1b7cb257922ed1bb71e36059bdde1fa1c76509255c1af8cb3167bff72db\", \"time\": 1792439938.9320748}\n{\"control\": {\"batches\": \"14ffdd92074c743ba35ff842d9d2956a29ff1ecf6b93820fc1bedb2161e2f20f\", \"cursor\": 2534896708, \"epoch\": 0, \"global_step\": 180800, \"phase\": \"wikipedia\", \"phase_step\": 180800, \"pos\": [285958813, 5632]}, \"index\": 10, \"kind\": \"progress\", \"model\": \"cb2fbe49be6ead1201600d45004f411c7ed3ba0d532ebe2417b1a43ba40d9889\", \"previous\": \"e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43\", \"state\": \"e162c0ef79462cfcc2c88cd336170df12f92f1f6d099920decca178da9dd455a\", \"time\": 1792441925.2640333}\n{\"control\": {\"batches\": \"7321c9e7f9b890c6b657525ffc10389c70e730b37f0ccaa0281264b7aaeec2ca\", \"cursor\": 2758953574, \"epoch\": 0, \"global_step\": 198880, \"phase\": \"wikipedia\", \"phase_step\": 198880, \"pos\": [331465519, 0]}, \"index\": 11, \"kind\": \"progress\", \"model\": \"21e5ccc4f7a7b4c8b311febbdcb0cd037a2efff64c715935853fa663b61e5aeb\", \"previous\": \"19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b\", \"state\": \"be21dd4e7d988157822d75f6600146be013afa826076b49b45b3874e5a2bd1ca\", \"time\": 1792445221.8958924}\n{\"control\": {\"batches\": \"0d86e2942f9d84483cd0e3cd5168d81cf418e915c04e25f94c03d3ad703c648d\", \"cursor\": 2977003841, \"epoch\": 0, \"global_step\": 216960, \"phase\": \"wikipedia\", \"phase_step\": 216960, \"pos\": [379051570, 512]}, \"index\": 12, \"kind\": \"progress\", \"model\": \"ee22252416c44a8812aab40b456c60351eaf714679495ef7c39a81c3d24db503\", \"previous\": \"5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18\", \"state\": \"c9d571c059311fbeb20f46d33a56497113b1f3705b75939ef57e61cc98978ca6\", \"time\": 1792447305.2481282}\n{\"control\": {\"batches\": \"bfe949e391619c70945f4ad5af5f73c00f8d44562f44733457ad865081612290\", \"cursor\": 3192270243, \"epoch\": 0, \"global_step\": 235040, \"phase\": \"wikipedia\", \"phase_step\": 235040, \"pos\": [427598539, 0]}, \"index\": 13, \"kind\": \"progress\", \"model\": \"978af11d622fb0e48dd842f5aa27e9992c267de2a91944b1b3b160aa89fa7675\", \"previous\": \"54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165\", \"state\": \"2733d7ef9aaacf20880e2196c819305f58ad0cc03494704fbc9f5e03a95931b2\", \"time\": 1792449363.6749403}\n{\"control\": {\"batches\": \"7eea41e27f71c52d58558b90de9ef7cd26ac9123366132bcbc1e71f4de08acf4\", \"cursor\": 3407720912, \"epoch\": 0, \"global_step\": 253120, \"phase\": \"wikipedia\", \"phase_step\": 253120, \"pos\": [476680277, 0]}, \"index\": 14, \"kind\": \"progress\", \"model\": \"613728906a531097849fcaa83d13ccb54b334d805aeaef8abe127ef2b7b70e1d\", \"previous\": \"dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f\", \"state\": \"145353afb1e2ebc2b5f9831fed74e5631b42a11342aab9a0b9febe796446c446\", \"time\": 1792451498.6016607}\n{\"control\": {\"batches\": \"c294ad7b42d0f2e970f3c757f339b24f6fbdc2982e9a91078a071b121b9325a1\", \"cursor\": 3626056290, \"epoch\": 0, \"global_step\": 271200, \"phase\": \"wikipedia\", \"phase_step\": 271200, \"pos\": [524689002, 0]}, \"index\": 15, \"kind\": \"progress\", \"model\": \"0f122b6387647c6844f6668edc95b2b96efd34885985e80c25a1eb424c7ffa2c\", \"previous\": \"74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa\", \"state\": \"fa961c767d2e293f12adcd13a3410d345e3bb5952395725963eb2f6e5c228d9e\", \"time\": 1792453682.104504}\n{\"control\": {\"batches\": \"4d0765884b5a4f4af81e17f0914a728e631c665fa74ec82be39e458f3f4f40c1\", \"cursor\": 3842372860, \"epoch\": 0, \"global_step\": 289280, \"phase\": \"wikipedia\", \"phase_step\": 289280, \"pos\": [573811026, 2048]}, \"index\": 16, \"kind\": \"progress\", \"model\": \"9a1a2f4ad99c6aac613f620400dc405a8967906e435079c0d8d29622831044fa\", \"previous\": \"02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722\", \"state\": \"82d7f95aaed27c4ac54ec6b8de9567a84d818a875673030c4ae0d2d39a860754\", \"time\": 1792455885.299576}\n{\"control\": {\"batches\": \"a219629293cfc4e69c74916379ba790f96b8a5425bd9fb7f4d9e481965ec9374\", \"cursor\": 4065481916, \"epoch\": 0, \"global_step\": 307360, \"phase\": \"wikipedia\", \"phase_step\": 307360, \"pos\": [619889558, 18944]}, \"index\": 17, \"kind\": \"progress\", \"model\": \"1e77516fc3d4c149c17b5e039ba9a886f520769df7512002fe89a9e5148f7d6e\", \"previous\": \"d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f\", \"state\": \"1082ced41232e82ff83506f0c20d887d0ddc3dc7458bc3ace5361a87485e5b60\", \"time\": 1792458112.5074773}\n{\"control\": {\"batches\": \"fbdade37939ffab2c5df52a9db88c8bac93a5501861522a30f1a50ebcafb4b3e\", \"cursor\": 4280170919, \"epoch\": 0, \"global_step\": 325440, \"phase\": \"wikipedia\", \"phase_step\": 325440, \"pos\": [669406302, 0]}, \"index\": 18, \"kind\": \"progress\", \"model\": \"4d79bcc6ee8060a9c28a5802c142f972665bafae70901176c9a964bc884f1dee\", \"previous\": \"2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7\", \"state\": \"0d4932793bd2279c0a17b3ca736159f89d48898d8a42113d15c7590dfdd85c26\", \"time\": 1792460358.5080163}\n{\"control\": {\"batches\": \"32161f48812917ee1bed7a4367df261934308045464246622f47dba2ab129f2a\", \"cursor\": 4492270493, \"epoch\": 0, \"global_step\": 343520, \"phase\": \"wikipedia\", \"phase_step\": 343520, \"pos\": [719769225, 2048]}, \"index\": 19, \"kind\": \"progress\", \"model\": \"9e597fcc4fc74828e30605677e3696a53b77a6976fecdc4f0e06b378e6721ee9\", \"previous\": \"a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89\", \"state\": \"cafd56b605b39449655b55534cd4e33616de0d40e6c3434fcd1a54c941e63191\", \"time\": 1792462598.3975008}\n{\"control\": {\"batches\": \"30c019ac1c173f6d688cdd4bd01e7ceaf9ed1376251e69d87cb9643b4386116b\", \"cursor\": 4705349595, \"epoch\": 0, \"global_step\": 361600, \"phase\": \"wikipedia\", \"phase_step\": 361600, \"pos\": [769153707, 4608]}, \"index\": 20, \"kind\": \"progress\", \"model\": \"f98ab99a90c7734a3f4cf2d60216ed8b1bdc657541ec3374c6f035b0bd42a307\", \"previous\": \"e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f\", \"state\": \"708b48121052bf9bc68bbd67e8613230dd713b9569610a4e66838fe45f35299a\", \"time\": 1792463768.5816014}\n{\"control\": {\"batches\": \"09506b60c4342ec5873bba53f2e993f0a46e1b726fc3449ce690e5e4eb43927c\", \"cursor\": 4919188008, \"epoch\": 0, \"global_step\": 379680, \"phase\": \"wikipedia\", \"phase_step\": 379680, \"pos\": [818886901, 0]}, \"index\": 21, \"kind\": \"progress\", \"model\": \"b89d3b185a1fcf21bcc5ef432a26eafc9643eb62b9aa3d8eeb624cbfceeea340\", \"previous\": \"d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03\", \"state\": \"eb31ec48c4ce9373035fe1229a93190fcfec9060d1bc8520f62ed3dfcab752fa\", \"time\": 1792465514.4536183}\n{\"control\": {\"batches\": \"27f95fcd8bc5e1b25cea97a17fd58ce6f6771b5b15565014616d4519ab8c8184\", \"cursor\": 5137669818, \"epoch\": 0, \"global_step\": 397760, \"phase\": \"wikipedia\", \"phase_step\": 397760, \"pos\": [867774445, 512]}, \"index\": 22, \"kind\": \"progress\", \"model\": \"1428e4c6cddc484d305881220b68eb5e04eb851632e1ae7d4f61725e0b24708b\", \"previous\": \"69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d\", \"state\": \"ee97359b8f9928977515e383d98a796d442444b5a07de5c9ec1158d372cc0e49\", \"time\": 1792468481.591845}\n{\"control\": {\"batches\": \"2ac5c320056a9766eaf2f910194309a2e1e3254958d1fe2e4afa92805ee04b28\", \"cursor\": 5354659564, \"epoch\": 0, \"global_step\": 415840, \"phase\": \"wikipedia\", \"phase_step\": 415840, \"pos\": [917385337, 0]}, \"index\": 23, \"kind\": \"progress\", \"model\": \"8948b0defe4c934602354d44e72ceb0b34c46d87bb7a67832fa50ea581b57d16\", \"previous\": \"5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0\", \"state\": \"296c1763d3421f6991f4f841f4143166bf0910000e5b00673383a4589859483f\", \"time\": 1792469631.0069373}\n{\"control\": {\"batches\": \"3fae190c7c836188101a7a77d6046446431892e109590436e4c94a3ed1da8c13\", \"cursor\": 5571989843, \"epoch\": 0, \"global_step\": 433920, \"phase\": \"wikipedia\", \"phase_step\": 433920, \"pos\": [966632574, 8192]}, \"index\": 24, \"kind\": \"progress\", \"model\": \"c553304d081e5817ba0e042bcdef7f1cf9642a290b006edab98778abd18eeedc\", \"previous\": \"44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99\", \"state\": \"6413ef4ca2bf9d47a89302d88662069fde930d732c4df7d0892f30ed64d3756d\", \"time\": 1792470779.9569445}\n{\"control\": {\"batches\": \"b77680f3b1febcf15d5adac2f244b845ea1ca7ae5837e9ce9e57a9b9661033c6\", \"cursor\": 5786932809, \"epoch\": 0, \"global_step\": 452000, \"phase\": \"wikipedia\", \"phase_step\": 452000, \"pos\": [1015978804, 2048]}, \"index\": 25, \"kind\": \"progress\", \"model\": \"1f1becfa5470bac9a31962462d4d85647598dc8f75277e2f9c6efe5bc59ada97\", \"previous\": \"05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a\", \"state\": \"245211135b131b6c5e1940458575033082b4b473fa0033b55816d889c82d656b\", \"time\": 1792471931.509705}\n{\"control\": {\"batches\": \"44eaf0d468c5578cc89e3999530132727e41ac47cbfcc8fcf80a7621b527cda0\", \"cursor\": 6003090585, \"epoch\": 0, \"global_step\": 470080, \"phase\": \"wikipedia\", \"phase_step\": 470080, \"pos\": [1065027050, 0]}, \"index\": 26, \"kind\": \"progress\", \"model\": \"6a59289ec3928857e0beacc7858e190c0756c72f2cdf48896578bb75720fa72a\", \"previous\": \"01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0\", \"state\": \"7b1ab9b324ac43d99f738ee00e3ef2b514e8dcc82313863c1d8f6e871d42bbb8\", \"time\": 1792473082.0379794}\n{\"control\": {\"batches\": \"58cf98d2ec42837434cc698720602c1ed7a427f1b7075de7b56e1957e42d7b7b\", \"cursor\": 6219792471, \"epoch\": 0, \"global_step\": 488160, \"phase\": \"wikipedia\", \"phase_step\": 488160, \"pos\": [1113864691, 1024]}, \"index\": 27, \"kind\": \"progress\", \"model\": \"5329233dbd65f90b4c368e40c725c59496c03266053f934c4be9c4ef73e3ec73\", \"previous\": \"6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e\", \"state\": \"0ec654850f2c1288c7850e9e732b52187dcc5f73fffe0f3bc211143e32097e7a\", \"time\": 1792474229.018975}\n{\"control\": {\"batches\": \"8e7e2738dac57947ab3894def88fc8bfb84e0b8c55095fcd33d66e2699dabab5\", \"cursor\": 6444391263, \"epoch\": 0, \"global_step\": 506240, \"phase\": \"wikipedia\", \"phase_step\": 506240, \"pos\": [1159432427, 0]}, \"index\": 28, \"kind\": \"progress\", \"model\": \"d6e1eaab6061fc051ae6de60bb6c95d99d1b98c6bcddfdcbbd593208b7d8a303\", \"previous\": \"339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c\", \"state\": \"e5891f8db717f770246c4255fa6598ba280922c428e9e1e6d814f5d96549cab1\", \"time\": 1792475372.9946525}\n{\"control\": {\"batches\": \"7b351d64e2a3d2492e668dcfd73d82ce92c0ba04fdd4c3058c95d4e642a6807d\", \"cursor\": 6671911669, \"epoch\": 0, \"global_step\": 524320, \"phase\": \"wikipedia\", \"phase_step\": 524320, \"pos\": [1203647118, 0]}, \"index\": 29, \"kind\": \"progress\", \"model\": \"3c5459d2bdcdb86d05168a8a78370aa7f772cb6f48ab11e6949164ec6d30fdc0\", \"previous\": \"9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5\", \"state\": \"ab0f669782c60bf45255e4822fee5fe5425a24b614d10dc0821323ca7325853c\", \"time\": 1792476512.00237}\n{\"control\": {\"batches\": \"304b2d3afe5a67a5ef902cb8334a55ee6f89877d474b438fb9c94e507814dece\", \"cursor\": 6901668826, \"epoch\": 0, \"global_step\": 542400, \"phase\": \"wikipedia\", \"phase_step\": 542400, \"pos\": [1246875101, 0]}, \"index\": 30, \"kind\": \"progress\", \"model\": \"bdfa54d7eb2938c8fe3258528e5cb84287c54f889471eb60909e7d8c6aca8061\", \"previous\": \"e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b\", \"state\": \"baf0f2694f6f7561b6e427c0181978541c19263849163984131f51dad72b6c38\", \"time\": 1792477651.6187513}\n{\"control\": {\"batches\": \"dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875\", \"cursor\": 7118121139, \"epoch\": 0, \"global_step\": 560177, \"phase\": \"wikipedia\", \"phase_step\": 560177, \"pos\": [1293950757, 0]}, \"index\": 31, \"kind\": \"base\", \"model\": \"31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f\", \"previous\": \"2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39\", \"state\": \"13d6ad64b2465d42653f250bba0463468c0c81b7980ebc9d97e3b0f95c713bf1\", \"time\": 1792478775.2381847}\n{\"control\": {\"batches\": \"dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875\", \"cursor\": 0, \"epoch\": 0, \"global_step\": 560177, \"phase\": \"conversation\", \"phase_step\": 0, \"pos\": [0, 0]}, \"index\": 32, \"kind\": \"transition\", \"model\": \"31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f\", \"previous\": \"5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a\", \"state\": \"8987fdd57ba91b044c23bba48cf41b132aa6ec949c4af650ba3180483476941d\", \"time\": 1792478776.1264164}\n{\"control\": {\"batches\": \"367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67\", \"cursor\": 1278137, \"epoch\": 0, \"global_step\": 560324, \"phase\": \"conversation\", \"phase_step\": 147, \"pos\": [849666, 0]}, \"index\": 33, \"kind\": \"epoch\", \"model\": \"fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e\", \"previous\": \"98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8\", \"state\": \"47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03\", \"time\": 1792478785.6187253}\n{\"control\": {\"batches\": \"367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67\", \"cursor\": 0, \"epoch\": 1, \"global_step\": 560324, \"phase\": \"conversation\", \"phase_step\": 0, \"pos\": [0, 0]}, \"index\": 34, \"kind\": \"transition\", \"model\": \"fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e\", \"previous\": \"94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035\", \"state\": \"47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03\", \"time\": 1792478786.6568494}\n{\"control\": {\"batches\": \"5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023\", \"cursor\": 1278137, \"epoch\": 1, \"global_step\": 560471, \"phase\": \"conversation\", \"phase_step\": 147, \"pos\": [849666, 0]}, \"index\": 35, \"kind\": \"epoch\", \"model\": \"eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda\", \"previous\": \"65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f\", \"state\": \"e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2\", \"time\": 1792478796.331579}\n{\"control\": {\"batches\": \"5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023\", \"cursor\": 0, \"epoch\": 2, \"global_step\": 560471, \"phase\": \"conversation\", \"phase_step\": 0, \"pos\": [0, 0]}, \"index\": 36, \"kind\": \"transition\", \"model\": \"eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda\", \"previous\": \"8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042\", \"state\": \"e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2\", \"time\": 1792478797.354915}\n{\"control\": {\"batches\": \"1fd22db0ab89ab98045f8c4b32ce4e4d55453163390ec9ebd5792dfc38fd5a52\", \"cursor\": 1278137, \"epoch\": 2, \"global_step\": 560618, \"phase\": \"conversation\", \"phase_step\": 147, \"pos\": [849666, 0]}, \"index\": 37, \"kind\": \"final\", \"model\": \"ec9a2b31ca524613f791aba00f4f7f31e4a7bf4a8a921e0deb81c1a922d0958b\", \"previous\": \"68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb\", \"state\": \"934d681c99e5c3e10617e82dbbb0ae0ddd1ad4e32cf45e8e3a6d2ed94b69f200\", \"time\": 1792478807.0463226}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L1-L38",
+ "quote": null
+ },
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "29",
+ "text": "- **Segmented commitments.** A boundary every 18,080 updates, plus the phase boundaries: 38 entries",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L29",
+ "quote": "38 entries"
+ }
+ ],
+ "TL-02": [
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "29",
+ "text": "- **Segmented commitments.** A boundary every 18,080 updates, plus the phase boundaries: 38 entries",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L29",
+ "quote": "A boundary every 18,080 updates"
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "lines": "32",
+ "text": "{\"control\": {\"batches\": \"dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875\", \"cursor\": 7118121139, \"epoch\": 0, \"global_step\": 560177, \"phase\": \"wikipedia\", \"phase_step\": 560177, \"pos\": [1293950757, 0]}, \"index\": 31, \"kind\": \"base\", \"model\": \"31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f\", \"previous\": \"2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39\", \"state\": \"13d6ad64b2465d42653f250bba0463468c0c81b7980ebc9d97e3b0f95c713bf1\", \"time\": 1792478775.2381847}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L32",
+ "quote": null
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "lines": "38",
+ "text": "{\"control\": {\"batches\": \"1fd22db0ab89ab98045f8c4b32ce4e4d55453163390ec9ebd5792dfc38fd5a52\", \"cursor\": 1278137, \"epoch\": 2, \"global_step\": 560618, \"phase\": \"conversation\", \"phase_step\": 147, \"pos\": [849666, 0]}, \"index\": 37, \"kind\": \"final\", \"model\": \"ec9a2b31ca524613f791aba00f4f7f31e4a7bf4a8a921e0deb81c1a922d0958b\", \"previous\": \"68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb\", \"state\": \"934d681c99e5c3e10617e82dbbb0ae0ddd1ad4e32cf45e8e3a6d2ed94b69f200\", \"time\": 1792478807.0463226}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L38",
+ "quote": null
+ }
+ ],
+ "TL-03": [
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "45",
+ "text": "| Training | 560,177 Wikipedia + 441 conversation updates (batch 32 × 512 tokens) |",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L45",
+ "quote": "560,177 Wikipedia + 441 conversation updates"
+ }
+ ],
+ "TL-04": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "133-134",
+ "text": "- The training host restarted once, at boundary 10. Training resumed from checkpoint 10, and\n segment 10 (which spans the restart) matched.",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L133-L134",
+ "quote": "The training host restarted once, at boundary 10."
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "lines": "11",
+ "text": "{\"control\": {\"batches\": \"14ffdd92074c743ba35ff842d9d2956a29ff1ecf6b93820fc1bedb2161e2f20f\", \"cursor\": 2534896708, \"epoch\": 0, \"global_step\": 180800, \"phase\": \"wikipedia\", \"phase_step\": 180800, \"pos\": [285958813, 5632]}, \"index\": 10, \"kind\": \"progress\", \"model\": \"cb2fbe49be6ead1201600d45004f411c7ed3ba0d532ebe2417b1a43ba40d9889\", \"previous\": \"e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43\", \"state\": \"e162c0ef79462cfcc2c88cd336170df12f92f1f6d099920decca178da9dd455a\", \"time\": 1792441925.2640333}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L11",
+ "quote": null
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "lines": "12",
+ "text": "{\"control\": {\"batches\": \"7321c9e7f9b890c6b657525ffc10389c70e730b37f0ccaa0281264b7aaeec2ca\", \"cursor\": 2758953574, \"epoch\": 0, \"global_step\": 198880, \"phase\": \"wikipedia\", \"phase_step\": 198880, \"pos\": [331465519, 0]}, \"index\": 11, \"kind\": \"progress\", \"model\": \"21e5ccc4f7a7b4c8b311febbdcb0cd037a2efff64c715935853fa663b61e5aeb\", \"previous\": \"19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b\", \"state\": \"be21dd4e7d988157822d75f6600146be013afa826076b49b45b3874e5a2bd1ca\", \"time\": 1792445221.8958924}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L12",
+ "quote": null
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "lines": "11",
+ "text": "{\"checker\": \"project second pod\", \"code\": \"ovl.py 202ac6ce\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 10}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L11",
+ "quote": null
+ }
+ ],
+ "TL-05": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "127-132",
+ "text": "- Code versions: segments 0–18 were trained with `ovl.py` sha256 `202ac6ce…`\n (`code/training-code/ovl-segments-00-18.py`). Segments 19 onward used `c4a942c0…`\n (`code/training-code/ovl-segments-19-end.py`, identical to `code/simple/ovl.py`). The newer version\n only changes CPU-side batch preparation and the CPU thread count. Proof that it produces\n identical results: segments 19 onward were recomputed with the original batch loader and\n matched, and segment 5 (trained with the original code) was recomputed with the newer code and matched.",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L127-L132",
+ "quote": "Segments 19 onward used `c4a942c0…`"
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "lines": "20-37",
+ "text": "{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 19}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 20}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 21}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 22}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 23}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 24}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 25}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 26}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 27}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 28}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 29}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}\n{\"checker\": \"project second pod\", \"code\": \"ovl.py c4a942c0 reference loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L20-L37",
+ "quote": null
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/verifications.jsonl",
+ "rev": "96dc282a",
+ "lines": "45",
+ "text": "{\"checker\": \"project training pod\", \"code\": \"ovl.py c4a942c0 fast loader\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 5}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/verifications.jsonl#L45",
+ "quote": null
+ }
+ ],
+ "TL-06": [
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "103",
+ "text": "| 19 Oct 15:04 | Training starts on one RTX 5090. A second RTX 5090 mirrors every checkpoint off the training machine and recomputes each segment as it closes |",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L103",
+ "quote": "19 Oct 15:04"
+ },
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "106",
+ "text": "| 20 Oct 06:46 | Wikipedia pass and conversation phase finished (15.7 hours in total) |",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L106",
+ "quote": "20 Oct 06:46"
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "lines": "1",
+ "text": "{\"control\": {\"batches\": \"10ea13010a13668c8bf9e2884e16bdbd16f8933d9bf4d09eda0c47459133eddb\", \"cursor\": 0, \"epoch\": 0, \"global_step\": 0, \"phase\": \"wikipedia\", \"phase_step\": 0, \"pos\": [0, 0]}, \"data\": {\"conversation\": \"e179de793decc82e8cecfbfabd7d449d1caf145a988c4c881a9a041dcda36b7f\", \"wikipedia\": \"a49baead333842ac36669a62a752ea6204295e4012a6bfa2d8f2b8c85981d832\"}, \"environment\": {\"cublas_workspace\": \":4096:8\", \"cuda\": \"12.8\", \"cudnn\": 91002, \"gpu\": \"NVIDIA GeForce RTX 5090\", \"torch\": \"2.8.0+cu128\"}, \"index\": 0, \"kind\": \"initial\", \"model\": \"2b167bcb407f94ac3f1dead8f316ea180823a1cb40489b8a1ff974bf2bcd959d\", \"previous\": null, \"recipe\": \"d0d9fc61c46b0f0e0b63e336579e7443860141452d881b1e7297ad46439f9fc5\", \"state\": \"64041a4736bd76b64b149c2a784950a312fb19ed641c7eb87e7300c171d002fc\", \"time\": 1792422250.861772}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L1",
+ "quote": null
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "lines": "38",
+ "text": "{\"control\": {\"batches\": \"1fd22db0ab89ab98045f8c4b32ce4e4d55453163390ec9ebd5792dfc38fd5a52\", \"cursor\": 1278137, \"epoch\": 2, \"global_step\": 560618, \"phase\": \"conversation\", \"phase_step\": 147, \"pos\": [849666, 0]}, \"index\": 37, \"kind\": \"final\", \"model\": \"ec9a2b31ca524613f791aba00f4f7f31e4a7bf4a8a921e0deb81c1a922d0958b\", \"previous\": \"68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb\", \"state\": \"934d681c99e5c3e10617e82dbbb0ae0ddd1ad4e32cf45e8e3a6d2ed94b69f200\", \"time\": 1792478807.0463226}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L38",
+ "quote": null
+ }
+ ],
+ "TL-07": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "40-41",
+ "text": "Wikipedia segments plus 6 for the conversation phase, recomputed on a second RTX 5090 with a\ndifferent NVIDIA driver from training (595.91.07 vs 570.195.03 for segments 0-9). Segment 21 was",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L40-L41",
+ "quote": "(595.91.07 vs 570.195.03 for segments 0-9)"
+ }
+ ],
+ "EX-01": [
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/README.md",
+ "rev": "96dc282a",
+ "lines": "4-5",
+ "text": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/README.md#L4-L5",
+ "quote": "page 80340464, revision 1371028825, 10,395 training targets",
+ "withheld": [
+ "every step can be checked"
+ ]
+ },
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/README.md",
+ "rev": "96dc282a",
+ "lines": "11-12",
+ "text": " 0–30 of `release/simple-run/chain.jsonl`. The article's first training target (6,915,731,634)\n comes after the cursor at boundary 30 (6,901,668,826), so no checkpoint up to 30 ever trained",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/README.md#L11-L12",
+ "quote": "(6,915,731,634)"
+ },
+ {
+ "origin": "hf",
+ "file": "release/simple-run/chain.jsonl",
+ "rev": "96dc282a",
+ "lines": "31",
+ "text": "{\"control\": {\"batches\": \"304b2d3afe5a67a5ef902cb8334a55ee6f89877d474b438fb9c94e507814dece\", \"cursor\": 6901668826, \"epoch\": 0, \"global_step\": 542400, \"phase\": \"wikipedia\", \"phase_step\": 542400, \"pos\": [1246875101, 0]}, \"index\": 30, \"kind\": \"progress\", \"model\": \"bdfa54d7eb2938c8fe3258528e5cb84287c54f889471eb60909e7d8c6aca8061\", \"previous\": \"e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b\", \"state\": \"baf0f2694f6f7561b6e427c0181978541c19263849163984131f51dad72b6c38\", \"time\": 1792477651.6187513}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/chain.jsonl#L31",
+ "quote": null
+ }
+ ],
+ "EX-02": [
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/README.md",
+ "rev": "96dc282a",
+ "lines": "10-11",
+ "text": "1. **Shared history, byte for byte.** Entries 0–30 of this `chain.jsonl` are identical to entries\n 0–30 of `release/simple-run/chain.jsonl`. The article's first training target (6,915,731,634)",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/README.md#L10-L11",
+ "quote": "Entries 0–30 of this `chain.jsonl` are identical to entries"
+ }
+ ],
+ "EX-03": [
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/README.md",
+ "rev": "96dc282a",
+ "lines": "14-16",
+ "text": "2. **A recorded fork.** Entry 31 (kind `fork`) has exactly the state of entry 30. Its control adds\n `exclude: {\"wikipedia\": [[6915731634, 10395]]}`, the article's exact target range. `verify`\n checks that a fork entry changes nothing except declaring the exclusion, and that the excluded",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/README.md#L14-L16",
+ "quote": "Entry 31 (kind `fork`) has exactly the state of entry 30."
+ }
+ ],
+ "EX-04": [
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/README.md",
+ "rev": "96dc282a",
+ "lines": "19-21",
+ "text": null,
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/README.md#L19-L21",
+ "quote": "accepts a gap in target ids **only** at the recorded range",
+ "withheld": [
+ "per-step coverage check"
+ ]
+ }
+ ],
+ "EX-05": [
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/verifications.jsonl",
+ "rev": "96dc282a",
+ "lines": "1-10",
+ "text": "{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 32}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 33}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 34}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 35}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 36}\n{\"checker\": \"project fork pod\", \"code\": \"ovl.py fork-capable (code/simple/ovl.py)\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 37}\n{\"checker\": \"project fresh machine public files only\", \"code\": \"code/simple/ovl.py from this release\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 30}\n{\"checker\": \"project fresh machine public files only\", \"code\": \"code/simple/ovl.py from this release\", \"driver\": \"595.91.07\", \"gpu\": \"NVIDIA GeForce RTX 5090\", \"result\": \"MATCH\", \"segment\": 31}",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/verifications.jsonl#L1-L10",
+ "quote": null
+ },
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/README.md",
+ "rev": "96dc282a",
+ "lines": "22-27",
+ "text": "4. **Checked.** Every fork segment (30→31 through 37→38) was recomputed from its starting\n checkpoint and matched bit for bit, including the retrained last Wikipedia segment and the\n whole conversation phase. The fork's `conversation-model.pt` matches its final entry. See\n `verifications.jsonl`. They ran on the pod that trained the fork. The fork entry and the\n retrained Wikipedia segment (30→31, 31→32) were also recomputed on a separate, fresh RTX 5090\n using only the public files: MATCH. Anyone can repeat them (below).",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/README.md#L22-L27",
+ "quote": "Every fork segment (30→31 through 37→38)"
+ }
+ ],
+ "EX-06": [
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/README.md",
+ "rev": "96dc282a",
+ "lines": "33",
+ "text": "| Loss on the 3I/ATLAS article's own text | 3.3604 | 3.3860 (+0.0256) |",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/README.md#L33",
+ "quote": null
+ },
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/loo-results.json",
+ "rev": "96dc282a",
+ "lines": "12-14",
+ "text": " 3.3604\n ],\n \"control_loss_mean\": 2.871,",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/loo-results.json#L12-L14",
+ "quote": null
+ }
+ ],
+ "EX-07": [
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/README.md",
+ "rev": "96dc282a",
+ "lines": "34",
+ "text": "| Mean loss on 50 control articles from the same segment (both trained on them) | 2.8710 | 2.8712 (+0.0002) |",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/README.md#L34",
+ "quote": null
+ },
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/loo-results.json",
+ "rev": "96dc282a",
+ "lines": "9",
+ "text": " \"control_documents\": 50,",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/loo-results.json#L9",
+ "quote": "\"control_documents\": 50"
+ }
+ ],
+ "EX-08": [
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "76-78",
+ "text": null,
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L76-L78",
+ "quote": "It is exact retraining without a range the run hadn't reached",
+ "withheld": [
+ "unlearning",
+ "unlearn"
+ ]
+ }
+ ],
+ "EX-09": [
+ {
+ "origin": "brief",
+ "file": "project brief v3",
+ "rev": "v3-2026-10-29",
+ "lines": "66",
+ "text": null,
+ "url": null,
+ "quote": "Text the run had already seen means retraining from an earlier save point."
+ }
+ ],
+ "EX-10": [
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "76",
+ "text": "(+0.0002). One run, no variance estimate. This proves the fork never trained on the article. It",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L76",
+ "quote": "One run, no variance estimate."
+ }
+ ],
+ "DL-conversation-model.pt": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "lines": "41",
+ "text": "149cfae13c4523a1010c52161e13babf76c9ddc01f34fa1a8b580677b733a64c conversation-model.pt",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L41",
+ "quote": "149cfae13c4523a1010c52161e13babf76c9ddc01f34fa1a8b580677b733a64c"
+ }
+ ],
+ "DL-base-model.pt": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "lines": "1",
+ "text": "976c62e8b28db786c38dc2ff969339603d0ee917d830f2815d9e858d2a3c0ce3 base-model.pt",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L1",
+ "quote": "976c62e8b28db786c38dc2ff969339603d0ee917d830f2815d9e858d2a3c0ce3"
+ }
+ ],
+ "DL-chain.jsonl": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "lines": "2",
+ "text": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327 chain.jsonl",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L2",
+ "quote": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327"
+ }
+ ],
+ "DL-recipe.json": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/release-hashes.txt",
+ "rev": "96dc282a",
+ "lines": "42",
+ "text": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d recipe.json",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/release-hashes.txt#L42",
+ "quote": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d"
+ }
+ ],
+ "DL-fork-conversation-model.pt": [
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "lines": "12",
+ "text": "e41be3a27bbcf16ce7a5224eb4766e88b2abe09fe6ddb6aadea399b9db4472d4 conversation-model.pt",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L12",
+ "quote": "e41be3a27bbcf16ce7a5224eb4766e88b2abe09fe6ddb6aadea399b9db4472d4"
+ }
+ ],
+ "DL-fork-base-model.pt": [
+ {
+ "origin": "hf",
+ "file": "release/unlearning-3i-atlas/release-hashes.txt",
+ "rev": "96dc282a",
+ "lines": "1",
+ "text": "ff30d7f4bf9ec41f0514d63a4d8bc1a74172481b89e07608383c0c3513f83441 base-model.pt",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/unlearning-3i-atlas/release-hashes.txt#L1",
+ "quote": "ff30d7f4bf9ec41f0514d63a4d8bc1a74172481b89e07608383c0c3513f83441"
+ }
+ ],
+ "DL-gguf": [
+ {
+ "origin": "github-release",
+ "file": "GitHub release v1.0.1",
+ "rev": "v1.0.1",
+ "lines": "ovl-23m-chat.gguf",
+ "text": "{\n \"name\": \"ovl-23m-chat.gguf\",\n \"size\": 142815808,\n \"digest\": \"sha256:541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de\",\n \"browser_download_url\": \"https://github.com/AOSSIE-Org/OpenVerifiableLLM/releases/download/v1.0.1/ovl-23m-chat.gguf\"\n}",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/releases/tag/v1.0.1",
+ "quote": "sha256:541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de"
+ },
+ {
+ "origin": "github",
+ "file": "docs/guides/ollama.md",
+ "rev": "1049d2a7",
+ "lines": "23",
+ "text": "`541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de`. Running",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/guides/ollama.md#L23",
+ "quote": "541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de"
+ }
+ ],
+ "DL-modelfile": [
+ {
+ "origin": "github-release",
+ "file": "GitHub release v1.0.1",
+ "rev": "v1.0.1",
+ "lines": "Modelfile",
+ "text": "{\n \"name\": \"Modelfile\",\n \"size\": 722,\n \"digest\": \"sha256:df4dacfc3191e56b1dc1195764ea66ca1a7695856be04ecec17d8dde4c66fc8b\",\n \"browser_download_url\": \"https://github.com/AOSSIE-Org/OpenVerifiableLLM/releases/download/v1.0.1/Modelfile\"\n}",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/releases/tag/v1.0.1",
+ "quote": "sha256:df4dacfc3191e56b1dc1195764ea66ca1a7695856be04ecec17d8dde4c66fc8b"
+ }
+ ],
+ "DL-hf": [
+ {
+ "origin": "brief",
+ "file": "project brief v3",
+ "rev": "v3-2026-10-29",
+ "lines": "15",
+ "text": null,
+ "url": null,
+ "quote": "Pin to revision `96dc282a`."
+ }
+ ],
+ "DL-ollama": [
+ {
+ "origin": "github",
+ "file": "docs/guides/ollama.md",
+ "rev": "1049d2a7",
+ "lines": "12-13",
+ "text": "The model is on the Ollama registry as\n[`ryoari/openverifiablellm`](https://ollama.com/ryoari/openverifiablellm):",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/guides/ollama.md#L12-L13",
+ "quote": "ryoari/openverifiablellm"
+ }
+ ],
+ "LI-01": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "138-139",
+ "text": "- This is a small model. It writes fluent fragments in an encyclopedia style. It often states\n wrong facts and has only basic conversation ability.",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L138-L139",
+ "quote": "It often states"
+ }
+ ],
+ "LI-02": [
+ {
+ "origin": "hf",
+ "file": "release/simple-run/README.md",
+ "rev": "96dc282a",
+ "lines": "81",
+ "text": "Checkers therefore need an RTX 5090. Anyone can rerun the probe with",
+ "url": "https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a9803616c6b30bb31bfc3a0b91a7191e6/release/simple-run/README.md#L81",
+ "quote": "Checkers therefore need an RTX 5090."
+ }
+ ],
+ "LI-03": [
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "118-119",
+ "text": "- All checks so far were run by the project, on separate machines. **We need independent\n checkers**: see [Join us](#join-us). Catching one forged segment out of 37 with 95% probability",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L118-L119",
+ "quote": "We need independent"
+ }
+ ],
+ "LI-04": [
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "121",
+ "text": "- Check results are self-reported text lines. They aren't signed, and nothing proves a checker",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L121",
+ "quote": "Check results are self-reported text lines."
+ }
+ ],
+ "LI-05": [
+ {
+ "origin": "github",
+ "file": "README.md",
+ "rev": "1049d2a7",
+ "lines": "123",
+ "text": "- The timestamp proves the record existed by 20 Oct 2026, not how the training was done",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/README.md#L123",
+ "quote": "The timestamp proves the record existed by 20 Oct 2026, not how the training was done"
+ }
+ ],
+ "LI-06": [
+ {
+ "origin": "github",
+ "file": "docs/design/simple_run.md",
+ "rev": "1049d2a7",
+ "lines": "204",
+ "text": "- **Cost.** A full check costs as much compute as the training (the table above), and each",
+ "url": "https://github.com/AOSSIE-Org/OpenVerifiableLLM/blob/1049d2a782b8f63103abfa0cca8deab0d2037290/docs/design/simple_run.md#L204",
+ "quote": "A full check costs as much compute as the training"
+ }
+ ]
+ },
+ "claimExtraSources": {
+ "OV-01": 1,
+ "OV-02": 1,
+ "OV-03": 3,
+ "OV-04": 1,
+ "OV-07": 1,
+ "OV-08": 1,
+ "OV-09": 2,
+ "OV-10": 1,
+ "OV-11": 1,
+ "OV-12": 1,
+ "OV-13": 2,
+ "CK-01": 1,
+ "CK-02": 1,
+ "CK-04": 1,
+ "CK-05": 1,
+ "CK-06": 2,
+ "VE-01": 1,
+ "VE-04": 1,
+ "VE-07": 1,
+ "VE-09": 2,
+ "VE-11": 1,
+ "TL-01": 1,
+ "TL-02": 2,
+ "TL-04": 3,
+ "TL-05": 2,
+ "TL-06": 3,
+ "EX-01": 2,
+ "EX-05": 1,
+ "EX-06": 1,
+ "EX-07": 1,
+ "DL-gguf": 1
+ }
+}
diff --git a/frontend/public/favicon.svg b/frontend/public/favicon.svg
new file mode 100644
index 00000000..71d9866f
--- /dev/null
+++ b/frontend/public/favicon.svg
@@ -0,0 +1,7 @@
+
+OpenVerifiableLLM symbol OpenVerifiableLLM logo by AOSSIE.
+
+
+
+
+
diff --git a/frontend/public/fonts/Inter-OFL.txt b/frontend/public/fonts/Inter-OFL.txt
new file mode 100644
index 00000000..9b2ca37b
--- /dev/null
+++ b/frontend/public/fonts/Inter-OFL.txt
@@ -0,0 +1,92 @@
+Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION AND CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/frontend/public/fonts/InterVariable-latin.woff2 b/frontend/public/fonts/InterVariable-latin.woff2
new file mode 100644
index 00000000..b1441b8a
Binary files /dev/null and b/frontend/public/fonts/InterVariable-latin.woff2 differ
diff --git a/frontend/public/fonts/JetBrainsMono-OFL.txt b/frontend/public/fonts/JetBrainsMono-OFL.txt
new file mode 100644
index 00000000..8f7ed671
--- /dev/null
+++ b/frontend/public/fonts/JetBrainsMono-OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) JetBrainsMono-Italic[wght].ttf: Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/frontend/public/fonts/JetBrainsMono-Regular-latin.woff2 b/frontend/public/fonts/JetBrainsMono-Regular-latin.woff2
new file mode 100644
index 00000000..58588733
Binary files /dev/null and b/frontend/public/fonts/JetBrainsMono-Regular-latin.woff2 differ
diff --git a/frontend/public/logo.svg b/frontend/public/logo.svg
new file mode 100644
index 00000000..71d9866f
--- /dev/null
+++ b/frontend/public/logo.svg
@@ -0,0 +1,7 @@
+
+OpenVerifiableLLM symbol OpenVerifiableLLM logo by AOSSIE.
+
+
+
+
+
diff --git a/frontend/public/theme-boot.js b/frontend/public/theme-boot.js
new file mode 100644
index 00000000..b83eac8d
--- /dev/null
+++ b/frontend/public/theme-boot.js
@@ -0,0 +1,11 @@
+// Applies the stored theme before first paint. External file so a strict CSP (script-src 'self') allows it.
+// Only "light" or "dark" is ever used; any other stored value is ignored. Mirrors src/theme.ts.
+(function () {
+ var t = 'light';
+ try { var v = localStorage.getItem('ovl-theme'); if (v === 'light' || v === 'dark') t = v; } catch { /* storage blocked */ }
+ var h = document.documentElement;
+ h.setAttribute('data-theme', t);
+ h.style.colorScheme = t;
+ var m = document.querySelector('meta[name="theme-color"]');
+ if (m) m.setAttribute('content', t === 'dark' ? '#0F1115' : '#FBFAF7');
+})();
diff --git a/frontend/scripts/build-data.py b/frontend/scripts/build-data.py
new file mode 100644
index 00000000..d52f8f99
--- /dev/null
+++ b/frontend/scripts/build-data.py
@@ -0,0 +1,412 @@
+#!/usr/bin/env python3
+"""Build public/data/site-data.json from pinned files only.
+
+Inputs:
+ data/raw/** HF dataset files at the pinned revision (scripts/fetch-evidence.py)
+ data/upstream//** two GitHub docs copied verbatim from AOSSIE-Org/OpenVerifiableLLM at UPSTREAM
+Every value that the site shows carries a `src` {file, rev, line, raw, url, checkedBy}.
+`--check` rebuilds in memory and exits 1 if public/data/site-data.json differs (drift).
+"""
+import datetime, hashlib, json, math, os, re, subprocess, sys
+
+ROOT = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), ".."))
+RAW = os.path.join(ROOT, "data", "raw")
+UPSTREAM = "1049d2a782b8f63103abfa0cca8deab0d2037290"
+UP = os.path.join(ROOT, "data", "upstream", UPSTREAM[:8])
+GH = "https://github.com/AOSSIE-Org/OpenVerifiableLLM"
+OUT = os.path.join(ROOT, "public", "data", "site-data.json")
+upman = json.load(open(os.path.join(ROOT, "data", "upstream", "manifest.json")))
+
+
+def upstream_path(rel):
+ if rel == "github-release-v1.0.1.json":
+ return os.path.join(ROOT, "data", "upstream", rel)
+ return os.path.join(UP, rel)
+
+
+def upstream_bytes(rel):
+ b = open(upstream_path(rel), "rb").read()
+ want = upman["files"][rel]["sha256"]
+ if hashlib.sha256(b).hexdigest() != want:
+ fail(f"upstream copy {rel} changed")
+ return b
+
+
+def upstream_lines(rel):
+ return upstream_bytes(rel).decode().splitlines()
+
+man = json.load(open(os.path.join(RAW, "manifest.json")))
+REV = man["revision"]
+SR, EX = "release/simple-run", "release/unlearning-3i-atlas"
+
+
+def fail(msg):
+ sys.exit(f"build-data: {msg}")
+
+
+def read(p):
+ if not os.path.exists(os.path.join(RAW, p)):
+ fail(f"data/raw/{p} is missing: run `npm run data:fetch` first (fresh clones do not include it)")
+ b = open(os.path.join(RAW, p), "rb").read()
+ want = man["files"][p]["sha256"]
+ if hashlib.sha256(b).hexdigest() != want:
+ fail(f"{p} does not match manifest sha256 (pinned file changed)")
+ return b
+
+
+def lines(p):
+ return read(p).decode().splitlines()
+
+
+def jl(p):
+ return [(i + 1, l, json.loads(l)) for i, l in enumerate(lines(p)) if l.strip()]
+
+
+def src(p, line=None, raw=None, checked_by=None, line_end=None):
+ url = f"https://huggingface.co/datasets/{man['repo']}/blob/{REV}/{p}"
+ if line:
+ url += f"#L{line}" + (f"-L{line_end}" if line_end else "")
+ return {"origin": "hf", "file": p, "rev": REV[:8], "line": line, "lineEnd": line_end,
+ "raw": raw, "checkedBy": checked_by, "url": url}
+
+
+def gh_src(p, line, line_end=None, raw=None):
+ url = f"{GH}/blob/{UPSTREAM}/{p}#L{line}" + (f"-L{line_end}" if line_end else "")
+ return {"origin": "github", "file": p, "rev": UPSTREAM[:8], "line": line, "lineEnd": line_end,
+ "raw": raw, "checkedBy": None, "url": url}
+
+
+def find_line(text_lines, pattern, what):
+ rx = re.compile(pattern)
+ for i, l in enumerate(text_lines):
+ m = rx.search(l)
+ if m:
+ return i + 1, l, m
+ fail(f"could not find {what} ({pattern})")
+
+
+def who(checker):
+ return "project" if checker.startswith("project") else "independent"
+
+
+def machine(checker):
+ # "project second pod" -> "second pod"; keeps the recorded wording, only drops the owner word
+ return checker.split(" ", 1)[1] if checker.startswith("project ") else checker
+
+
+def iso(t):
+ return datetime.datetime.fromtimestamp(t, datetime.timezone.utc)
+
+
+def utc(t):
+ return iso(t).isoformat().replace("+00:00", "Z")
+
+
+# ---------- chain ----------
+chain = jl(f"{SR}/chain.jsonl")
+boundaries = [{"index": c["index"], "kind": c["kind"], "phase": c["control"]["phase"],
+ "time": c["time"], "utc": utc(c["time"]), "model": c["model"], "state": c["state"], "previous": c["previous"],
+ "src": src(f"{SR}/chain.jsonl", n, l, "project")} for n, l, c in chain]
+N = len(boundaries) - 1
+phases = []
+for b in boundaries[1:]:
+ if not phases or phases[-1]["phase"] != b["phase"]:
+ phases.append({"phase": b["phase"], "first": b["index"] - 1, "last": b["index"] - 1})
+ else:
+ phases[-1]["last"] = b["index"] - 1
+gaps = [{"segment": i, "seconds": round((iso(boundaries[i + 1]["time"]) - iso(boundaries[i]["time"])).total_seconds())}
+ for i in range(N)]
+
+# ---------- verifications ----------
+ver = jl(f"{SR}/verifications.jsonl")
+rows = [{"segment": v["segment"], "result": v["result"], "checker": v["checker"], "machine": machine(v["checker"]),
+ "checkedBy": who(v["checker"]), "code": v.get("code"), "gpu": v.get("gpu"), "driver": v.get("driver"),
+ "src": src(f"{SR}/verifications.jsonl", n, l, who(v["checker"]))} for n, l, v in ver]
+groups = []
+for r in rows:
+ g = next((g for g in groups if g["checker"] == r["checker"]), None)
+ if not g:
+ g = {"checker": r["checker"], "machine": r["machine"], "checkedBy": r["checkedBy"], "rows": 0, "match": 0, "segments": []}
+ groups.append(g)
+ g["rows"] += 1
+ g["match"] += r["result"] == "MATCH"
+ if r["segment"] not in g["segments"]:
+ g["segments"].append(r["segment"])
+groups.sort(key=lambda g: -g["rows"])
+second = next(g for g in groups if "second" in g["checker"])
+fresh = next(g for g in groups if "fresh" in g["checker"])
+
+# ---------- events (derived, then cross-checked) ----------
+readme = lines(f"{SR}/README.md")
+ln, raw, m = find_line(readme, r"restarted once, at boundary (\d+)", "restart")
+restart_seg = int(m.group(1))
+raw2 = readme[ln] # continuation line (the sentence wraps)
+big_gap = max(gaps, key=lambda g: g["seconds"])
+if big_gap["segment"] != restart_seg:
+ fail(f"restart at {restart_seg} in README but longest chain gap is segment {big_gap['segment']}")
+second_rows = sorted([r for r in rows if r["checker"] == second["checker"]], key=lambda r: r["segment"])
+changes = [(a, b) for a, b in zip(second_rows, second_rows[1:]) if a["code"] != b["code"]]
+if len(changes) != 1:
+ fail(f"expected one code change in second-machine rows, found {len(changes)}")
+before, after = changes[0]
+cl, craw, _ = find_line(readme, r"Segments \d+ onward used", "code change")
+# median wall time of the regular segments (those ending at a "progress" entry), as the ledger states it
+prog = [(iso(boundaries[i + 1]["time"]) - iso(boundaries[i]["time"])).total_seconds() for i in range(N) if boundaries[i + 1]["kind"] == "progress"]
+prog.sort()
+typical = round((prog[len(prog) // 2 - 1] + prog[len(prog) // 2]) / 2 if len(prog) % 2 == 0 else prog[len(prog) // 2])
+events = [
+ {"id": "restart", "segment": restart_seg, "gapSeconds": big_gap["seconds"], "medianGapSeconds": typical,
+ "src": src(f"{SR}/README.md", ln, raw + "\n" + raw2, "project", ln + 1)},
+ {"id": "code-change", "segment": after["segment"], "codeBefore": before["code"], "codeAfter": after["code"],
+ "src": src(f"{SR}/README.md", cl - 1, readme[cl - 2] + "\n" + craw, "project", cl),
+ "rowBefore": before["src"], "rowAfter": after["src"]},
+]
+
+tiles = []
+for k in range(N):
+ checks = [i for i, r in enumerate(rows) if r["segment"] == k]
+ res = [rows[i]["result"] for i in checks]
+ tiles.append({"segment": k, "phase": boundaries[k + 1]["phase"],
+ "result": "NOT_RUN" if not res else ("MATCH" if all(x == "MATCH" for x in res) else "MISMATCH"),
+ "checkedBy": "independent" if any(rows[i]["checkedBy"] == "independent" for i in checks) else ("project" if checks else "pending"),
+ "checks": checks, "events": [e["id"] for e in events if e["segment"] == k]})
+
+indep = sum(1 for r in rows if r["checkedBy"] == "independent")
+
+
+def p_detect(m):
+ return 1 - ((N - 1) / N) ** m
+
+
+def needed(p):
+ return math.ceil(math.log(1 - p) / math.log((N - 1) / N))
+
+
+m95, m99 = needed(0.95), needed(0.99)
+hl, hraw, _ = find_line(readme, r"1 − \(\(N−1\)/N\)\^M", "odds formula")
+
+# ---------- hardware ----------
+hw = [{"segment": str(h["segment"]), "result": h["result"], "hardware": h["hardware"], "driver": h["driver"],
+ "software": h["software"], "note": h["note"], "src": src(f"{SR}/hardware-map.jsonl", n, l, "project")}
+ for n, l, h in jl(f"{SR}/hardware-map.jsonl")]
+
+
+def hashes(folder):
+ out = []
+ for i, l in enumerate(lines(f"{folder}/release-hashes.txt")):
+ if not l.strip():
+ continue
+ sha, name = l.split(None, 1)
+ name = name.strip().lstrip("*")
+ out.append({"file": name, "sha256": sha, "download": f"https://huggingface.co/datasets/{man['repo']}/resolve/{REV}/{folder}/{name}",
+ "src": src(f"{folder}/release-hashes.txt", i + 1, l)})
+ return out
+
+
+# ---------- anchor ----------
+anchor_raw = read(f"{SR}/anchor.json")
+anchor = json.loads(anchor_raw)
+if hashlib.sha256(read(f"{SR}/chain.jsonl")).hexdigest() != anchor["chain_jsonl_sha256"]:
+ fail("anchor.json chain_jsonl_sha256 != chain.jsonl")
+tsa = []
+for name in ("digicert", "freetsa"):
+ read(f"{SR}/anchor.{name}.tsr")
+ t = subprocess.run(["openssl", "ts", "-reply", "-in", os.path.join(RAW, SR, f"anchor.{name}.tsr"), "-text"],
+ capture_output=True, text=True, check=True).stdout
+ ts = next(l.split(":", 1)[1].strip() for l in t.splitlines() if l.startswith("Time stamp:"))
+ when = datetime.datetime.strptime(ts.replace(" GMT", ""), "%b %d %H:%M:%S %Y").replace(tzinfo=datetime.timezone.utc)
+ tsa.append({"authority": name, "genTime": when.isoformat().replace("+00:00", "Z"),
+ "src": src(f"{SR}/anchor.{name}.tsr", raw=f"Time stamp: {ts}", checked_by="project")})
+
+# ---------- exclusion ----------
+ex_chain = jl(f"{EX}/chain.jsonl")
+shared = 0
+for a, b in zip(chain, ex_chain):
+ if a[1] != b[1]:
+ break
+ shared += 1
+fork_entry = next(c for _, _, c in ex_chain if c["kind"] == "fork")
+ex_rows = [{"segment": v["segment"], "result": v["result"], "checker": v["checker"], "machine": machine(v["checker"]),
+ "checkedBy": who(v["checker"]), "src": src(f"{EX}/verifications.jsonl", n, l, who(v["checker"]))}
+ for n, l, v in jl(f"{EX}/verifications.jsonl")]
+loo_raw = read(f"{EX}/loo-results.json")
+loo = json.loads(loo_raw)
+exr = lines(f"{EX}/README.md")
+tl, traw, tm = find_line(exr, r"\*\*(.+?)\*\* \(the interstellar comet;", "excluded title")
+pl, praw, pm = find_line(exr, r"page (\d+), revision (\d+)", "page id")
+if pm.group(1) != loo["removed_documents"][0][1]:
+ fail("README page id != loo-results removed document")
+ex_groups = {}
+for r in ex_rows:
+ ex_groups.setdefault(r["checker"], {"checker": r["checker"], "machine": r["machine"], "checkedBy": r["checkedBy"], "rows": 0, "segments": []})
+ ex_groups[r["checker"]]["rows"] += 1
+ ex_groups[r["checker"]]["segments"].append(r["segment"])
+r4 = lambda x: round(x, 4)
+
+# ---------- preparation ----------
+prep_dir = next(p for p in man["files"] if p.startswith("prepared/"))
+prep_raw = read(prep_dir)
+prep = json.loads(prep_raw)
+prep_sha = hashlib.sha256(prep_raw).hexdigest()
+if prep_sha != prep_dir.split("/")[1]:
+ fail("preparation.json sha256 != its folder id")
+
+# ---------- model facts (HF README) ----------
+ml, mraw, mm = find_line(readme, r"A (\d+)-million-parameter", "model size")
+dl, draw, dm = find_line(readme, r"(\d{4}-\d{2}-\d{2}) (?:dump|English)", "dump date") if any(re.search(r"\d{4}-\d{2}-\d{2} (?:dump|English)", l) for l in readme) else (None, None, None)
+
+# ---------- upstream GitHub docs (verbatim copies at UPSTREAM) ----------
+# The v1.0.1 tag README still clones v1.0.0: that tag was cut before the docs
+# were repinned. Main was fixed in #256. Copying Getting started from
+# main@1049d2a7 is the correct source (not the tag).
+up_readme = upstream_lines("README.md")
+gs, _, _ = find_line(up_readme, r"^## Getting started", "Getting started")
+start = next(i for i in range(gs, len(up_readme)) if up_readme[i].startswith("```bash"))
+end = next(i for i in range(start + 1, len(up_readme)) if up_readme[i].startswith("```"))
+cmd_lines = up_readme[start + 1:end]
+intro_end = start # prose between heading and code block
+intro = " ".join(l.strip() for l in up_readme[gs:intro_end] if l.strip())
+rl, rraw, rm = find_line(up_readme, r"\((https://console\.runpod\.io/deploy\?template=[a-z0-9]+)\)", "runpod link")
+sr = upstream_lines("docs/design/simple_run.md")
+cl2, craw2, cm2 = find_line(sr, r"about an hour, (about US\$[0-9.]+–[0-9.]+) rented", "cost")
+if cl2 != 85:
+ fail(f"cost moved: simple_run.md line {cl2}, brief cites line 85")
+
+data = {
+ "schema": "ovl-site-data.v2",
+ "dataset": man["repo"], "revision": REV, "revShort": REV[:8],
+ "hfTree": f"https://huggingface.co/datasets/{man['repo']}/tree/{REV}",
+ "upstream": {"repo": GH, "commit": UPSTREAM, "short": UPSTREAM[:8]},
+ "rawFiles": {k: {"sha256": v["sha256"], "bytes": v["bytes"]} for k, v in man["files"].items()},
+ "model": {"millionParameters": int(mm.group(1)), "src": src(f"{SR}/README.md", ml, mraw, None),
+ "recipe": {"layers": json.loads(read(f"{SR}/recipe.json"))["model"]["num_layers"],
+ "seed": json.loads(read(f"{SR}/recipe.json"))["seed"]}},
+ "chain": {"entries": len(boundaries), "segments": N, "phases": phases, "boundaries": boundaries,
+ "start": utc(boundaries[0]["time"]), "end": utc(boundaries[-1]["time"]),
+ "kinds": {k: sum(1 for b in boundaries if b["kind"] == k) for k in sorted({b["kind"] for b in boundaries})}},
+ "verifications": {
+ "rows": rows, "rowCount": len(rows), "groups": groups, "tiles": tiles,
+ "machines": len(groups), "allMatch": all(r["result"] == "MATCH" for r in rows),
+ "segmentsMatched": sum(1 for t in tiles if t["result"] == "MATCH"),
+ "secondMachineMatched": len({r["segment"] for r in rows if r["checker"] == second["checker"] and r["result"] == "MATCH"}),
+ "secondMachine": second["checker"], "freshMachine": fresh["checker"],
+ "freshSegments": fresh["segments"],
+ "projectChecks": sum(1 for r in rows if r["checkedBy"] == "project"),
+ "independentChecks": indep,
+ "src": src(f"{SR}/verifications.jsonl", 1, None, "project", len(rows))},
+ "odds": {"N": N, "Nm1": N - 1, "formula": f"1 − ({N - 1}/{N})^M", "m95": m95, "m99": m99, "p95": p_detect(m95), "p99": p_detect(m99),
+ "pAtN": p_detect(N), "currentM": indep, "currentP": p_detect(indep),
+ "src": src(f"{SR}/README.md", hl, hraw, None)},
+ "events": events,
+ "hardware": hw,
+ "downloads": [{"release": SR, "files": hashes(SR)}, {"release": EX, "files": hashes(EX)}],
+ "anchor": {"sha256": hashlib.sha256(anchor_raw).hexdigest(), "chainHead": anchor["chain_head_sha256"],
+ "entries": anchor["chain_entries"], "tsa": tsa, "src": src(f"{SR}/anchor.json", checked_by="project")},
+ "exclusion": {
+ "title": tm.group(1), "page": pm.group(1), "pageRevision": pm.group(2),
+ "titleSrc": src(f"{EX}/README.md", tl, traw, None, pl if pl != tl else None),
+ "entries": len(ex_chain), "sharedPrefix": shared, "sharedFirst": ex_chain[0][2]["index"], "sharedLast": shared - 1,
+ "forkIndex": fork_entry["index"],
+ "rows": ex_rows, "rowCount": len(ex_rows), "groups": list(ex_groups.values()),
+ "allMatch": all(r["result"] == "MATCH" for r in ex_rows),
+ "controls": loo["control_documents"],
+ "removedLoss": {"before": loo["original_base"]["removed_loss"][0], "after": loo["fork_base"]["removed_loss"][0],
+ "delta": r4(loo["fork_base"]["removed_loss"][0] - loo["original_base"]["removed_loss"][0])},
+ "controlLoss": {"before": loo["original_base"]["control_loss_mean"], "after": loo["fork_base"]["control_loss_mean"],
+ "delta": r4(loo["fork_base"]["control_loss_mean"] - loo["original_base"]["control_loss_mean"])},
+ "src": src(f"{EX}/loo-results.json", raw=json.dumps({k: loo[k] for k in ("removed_documents", "control_documents")} | {b: {k: loo[b][k] for k in ("removed_loss", "control_loss_mean")} for b in ("original_base", "fork_base")}), checked_by="project")},
+ "preparation": {"sha256": prep_sha, "articles": prep["corpus"]["counts"]["included"],
+ "wikipediaTargets": prep["streams"]["wikipedia"]["targets"],
+ "conversations": prep["conversation_selection"]["conversations"]["train"],
+ "conversationTargets": prep["streams"]["conversation"]["targets"], "src": src(prep_dir, raw=json.dumps({"included": prep["corpus"]["counts"]["included"], "wikipedia_targets": prep["streams"]["wikipedia"]["targets"], "conversations_train": prep["conversation_selection"]["conversations"]["train"]}), checked_by="project")},
+ "check": {
+ "intro": intro, "introSrc": gh_src("README.md", gs + 1, intro_end, "\n".join(up_readme[gs:intro_end]).strip()),
+ "commands": "\n".join(cmd_lines), "commandsSrc": gh_src("README.md", start + 2, end, "\n".join(cmd_lines)),
+ "runpod": rm.group(1), "runpodSrc": gh_src("README.md", rl, raw=rraw),
+ "cost": cm2.group(1), "costSrc": gh_src("docs/design/simple_run.md", cl2, raw=craw2),
+ },
+}
+# ---------- claim sources: the exact cited lines for every ledger claim ----------
+LEDGER = json.load(open(os.path.join(ROOT, "src", "content", "claims.json")))
+RELEASE_URL = f"{GH}/releases/tag/v1.0.1"
+
+
+def norm(t):
+ return re.sub(r"[\s`*>#-]+", " ", t).strip().lower()
+
+
+def cited(s):
+ rev, f, ln = s["rev"], s["file"], str(s["lines"])
+ if rev.startswith("hf:"):
+ text_lines = lines(f)
+ elif rev.startswith("gh:"):
+ text_lines = upstream_bytes(f).decode().splitlines()
+ elif rev.startswith("github-release:"):
+ rel = json.loads(upstream_bytes("github-release-v1.0.1.json"))
+ m = re.fullmatch(r"assets\[(.+)\]\.digest", ln)
+ asset = next((a for a in rel["assets"] if m and a["name"] == m.group(1)), None)
+ if not asset:
+ fail(f"release asset {ln} not in snapshot")
+ q = s.get("quote")
+ if q and q not in asset["digest"]:
+ fail(f"quote {q} does not match release digest for {asset['name']}")
+ return {"origin": "github-release", "file": f"GitHub release {rel['tag_name']}", "rev": rel["tag_name"],
+ "lines": asset["name"], "text": json.dumps(asset, indent=1), "url": RELEASE_URL, "quote": q}
+ else: # the internal brief: cited, but not public, so no link and no text
+ return {"origin": "brief", "file": "project brief v3", "rev": rev.split(":", 1)[1], "lines": ln, "text": None, "url": None, "quote": s.get("quote")}
+ if not re.fullmatch(r"\d+(-\d+)?", ln):
+ fail(f"bad line spec {ln} for {f}")
+ a, _, b2 = ln.partition("-")
+ a, b2 = int(a), int(b2 or a)
+ if b2 > len(text_lines):
+ fail(f"{f}:{ln} past end of file")
+ text = "\n".join(text_lines[a - 1:b2])
+ q = s.get("quote")
+ if q and norm(q) not in norm(text):
+ fail(f"quote not found at {f}:{ln}: {q!r}")
+ if rev.startswith("hf:"):
+ url = src(f, a, None, None, b2 if b2 != a else None)["url"]
+ origin, r = "hf", REV[:8]
+ else:
+ url = f"{GH}/blob/{UPSTREAM}/{f}#L{a}" + (f"-L{b2}" if b2 != a else "")
+ origin, r = "github", UPSTREAM[:8]
+ return {"origin": origin, "file": f, "rev": r, "lines": ln, "text": text, "url": url, "quote": q}
+
+
+def banned_hit(text):
+ t = text.lower().replace("unlearning-3i-atlas", "").replace("us$1–1.50", "")
+ return [b["phrase"] for b in LEDGER["forbidden_phrases"] if b["phrase"].lower() in t]
+
+
+# Agreed wording decision: the site says "segments", never "steps". These cited lines are linked,
+# not quoted (the source link stays). "step by step:" on Check is kept on purpose.
+LINK_ONLY = ["every step can be checked", "per-step coverage check"]
+
+
+def link_only_hit(text):
+ t = " ".join(text.lower().split())
+ return [p for p in LINK_ONLY if p in t]
+
+
+def shown(c):
+ if c["text"] and link_only_hit(c["text"]):
+ return {**c, "text": None, "withheld": link_only_hit(c["text"])}
+ # A cited line that itself uses a banned phrase is linked, not quoted on the page. No roadmap
+ # exception here: banned phrases never appear on the page, quotes included.
+ if c["text"] and banned_hit(c["text"]):
+ c = {**c, "text": None, "withheld": banned_hit(c["text"])}
+ return c
+
+
+data["claimSources"] = {c["id"]: [shown(cited(x)) for x in c["sources"]] for c in LEDGER["claims"] if c["status"] == "ALLOWED"}
+data["claimExtraSources"] = {k: len(v) - 1 for k, v in data["claimSources"].items() if len(v) > 1}
+text = json.dumps(data, indent=1, ensure_ascii=False) + "\n"
+if "--check" in sys.argv:
+ cur = open(OUT).read() if os.path.exists(OUT) else ""
+ if cur != text:
+ fail("public/data/site-data.json is out of date with data/raw and src/content/claims.json (run `npm run data`)")
+ print("build-data: site-data.json matches the pinned files")
+else:
+ os.makedirs(os.path.dirname(OUT), exist_ok=True)
+ open(OUT, "w").write(text)
+ print("build-data: wrote", os.path.relpath(OUT, ROOT), len(text), "bytes")
diff --git a/frontend/scripts/check-budget.mjs b/frontend/scripts/check-budget.mjs
new file mode 100644
index 00000000..0fe6387a
--- /dev/null
+++ b/frontend/scripts/check-budget.mjs
@@ -0,0 +1,33 @@
+// Phone performance budget, checked on the real build output (gzip level 9).
+import { readFileSync, readdirSync, statSync } from 'node:fs';
+import path from 'node:path';
+import { gzipSync } from 'node:zlib';
+
+export const BUDGET = { entryJsKB: 80, totalJsKB: 100, pageJsKB: 12, cssKB: 10, htmlKB: 30, fontsKB: 125, dataKB: 60 };
+const gz = (f) => gzipSync(readFileSync(f), { level: 9 }).length / 1024;
+const files = (d) => readdirSync(d).flatMap((f) => (statSync(path.join(d, f)).isDirectory() ? files(path.join(d, f)) : [path.join(d, f)]));
+const all = files('dist');
+const html = readFileSync('dist/index.html', 'utf8');
+const entry = /';
+ d.exclusion.title = evil;
+ d.verifications.rows.forEach((r) => (r.machine = evil));
+ await serve(page, d);
+ for (const slug of ['exclusion/', 'verification/']) {
+ await page.goto(slug);
+ await ready(page);
+ expect(await page.evaluate(() => (window as unknown as { __xss?: number }).__xss)).toBeUndefined();
+ expect(await page.locator('main img').count()).toBe(0);
+ }
+});
+
+test('very long unbroken + RTL/unicode strings in data cause no horizontal overflow at 320', async ({ page }) => {
+ await page.setViewportSize({ width: 320, height: 800 });
+ const d = data() as unknown as { exclusion: { title: string }; verifications: { rows: { machine: string }[] } };
+ d.exclusion.title = 'שלוםعالم' + 'X'.repeat(400) + ' 🧪ẞ';
+ d.verifications.rows.forEach((r) => (r.machine = 'm'.repeat(300)));
+ await serve(page, d);
+ for (const slug of ['exclusion/', 'verification/']) {
+ await page.goto(slug);
+ await ready(page);
+ expect(await overflow(page), slug).toBeLessThanOrEqual(0);
+ }
+});
+
+test('missing optional data field (a section) degrades to the section fallback, not a blank page', async ({ page }) => {
+ const d = data() as unknown as Record;
+ delete d.anchor;
+ await serve(page, d);
+ await page.goto('downloads/');
+ await ready(page);
+ await expect(page.locator('h1')).toHaveCount(1);
+ await expect(page.locator('[data-result="MATCH"]').first()).toHaveCount(0);
+});
+
+test('0 segments is rejected, never shown as an empty-but-valid scoreboard', async ({ page }) => {
+ const d = data() as unknown as { chain: { segments: number; entries: number; boundaries: unknown[] }; verifications: { tiles: unknown[] } };
+ d.chain.segments = 0; d.chain.entries = 1; d.chain.boundaries = d.chain.boundaries.slice(0, 1); d.verifications.tiles = [];
+ await serve(page, d);
+ await page.goto('');
+ await ready(page);
+ await expect(page.locator('[data-fallback], [data-fatal]').first()).toBeVisible();
+ await expect(page.locator('[data-result="MATCH"]')).toHaveCount(0);
+});
+
+test('slow data (3 s) keeps the prerendered page readable and then hydrates', async ({ page }) => {
+ await page.route('**/data/site-data*.json', async (r) => { await new Promise((f) => setTimeout(f, 3000)); await r.continue(); });
+ await page.goto('verification/');
+ await expect(page.locator('h1')).toBeVisible();
+ await ready(page);
+ await expect(page.locator('.tiles-int button')).toHaveCount(37);
+});
+
+test('offline after load: client navigation across all six pages still works', async ({ page, context }) => {
+ await page.goto('');
+ await ready(page);
+ await page.waitForTimeout(2500); // idle prefetch of the other page chunks
+ await page.waitForLoadState('networkidle');
+ await context.setOffline(true);
+ for (const p of PAGES.slice(1)) {
+ await page.locator(`nav a[href$="/${p.slug}"]`).first().click();
+ await expect(page).toHaveURL(new RegExp(`${p.slug}$`));
+ await expect(page.locator('h1')).toHaveCount(1);
+ await expect(page.locator('[data-fatal]')).toHaveCount(0);
+ }
+ await context.setOffline(false);
+});
+
+test('back/forward restores page and h1 across deep links', async ({ page }) => {
+ await page.goto('timeline/');
+ await ready(page);
+ const h1t = await page.locator('h1').innerText();
+ await page.locator('nav a[href$="/downloads/"]').first().click();
+ await expect(page).toHaveURL(/downloads\/$/);
+ await page.goBack();
+ await expect(page).toHaveURL(/timeline\/$/);
+ await expect(page.locator('h1')).toHaveText(h1t);
+ await page.goForward();
+ await expect(page).toHaveURL(/downloads\/$/);
+});
+
+test('deep link with hash to a verification row lands on that row', async ({ page }) => {
+ await page.goto('verification/');
+ await ready(page);
+ const id = await page.locator('main [id]').evaluateAll((els) => els.map((e) => e.id).find((i) => /seg|row/.test(i)));
+ test.skip(!id, 'no row ids');
+ await page.goto('about:blank');
+ await page.goto(`verification/#${id}`);
+ await ready(page);
+ const top = await page.locator(`[id="${id}"]`).evaluate((e) => e.getBoundingClientRect().top);
+ expect(top).toBeLessThan(800);
+});
+
+for (const p of PAGES) {
+ test(`${p.key}: 400% zoom (320 CSS px) reflows with no horizontal scroll`, async ({ page }) => {
+ await page.setViewportSize({ width: 320, height: 256 });
+ await page.goto(p.slug);
+ await ready(page);
+ expect(await overflow(page)).toBeLessThanOrEqual(0);
+ });
+ test(`${p.key}: forced-colors is axe clean and keeps focus visible`, async ({ page }) => {
+ await page.emulateMedia({ forcedColors: 'active' });
+ await page.goto(p.slug);
+ await ready(page);
+ const r = await new AxeBuilder({ page }).exclude('.wordmark [data-label="site.title.llm"]').withTags(['wcag2a', 'wcag2aa', 'wcag22aa']).analyze();
+ expect(r.violations.map((v) => v.id)).toEqual([]);
+ });
+ test(`${p.key}: print media hides nav and keeps h1`, async ({ page }) => {
+ await page.goto(p.slug);
+ await ready(page);
+ await page.emulateMedia({ media: 'print' });
+ await expect(page.locator('h1')).toBeVisible();
+ });
+}
+
+test('keyboard-only: Tab reaches every nav page and Enter navigates', async ({ page }) => {
+ // After each render the app moves focus to (main.tsx). That focus call is async, so wait for it
+ // before pressing keys; otherwise it can land between finding the nav link and pressing Enter.
+ await page.goto('');
+ await ready(page);
+ // On first load focus is at the top of the document, so Tab forward reaches the nav first.
+ let key = 'Tab';
+ for (const p of PAGES.slice(1)) {
+ const link = page.getByRole('navigation').locator(`a[href$="/${p.slug}"]`);
+ let found = false;
+ for (let i = 0; i < 40 && !found; i++) {
+ await page.keyboard.press(key);
+ found = await link.evaluate((a) => a === document.activeElement);
+ }
+ expect(found, p.slug).toBe(true);
+ await expect(link).toBeFocused();
+ await page.keyboard.press('Enter');
+ await expect(page).toHaveURL(new RegExp(`${p.slug}$`));
+ await ready(page);
+ await expect(page.locator('#main')).toBeFocused();
+ // Now focus is on ; the nav comes before it in tab order, so Shift+Tab reaches it in a few steps.
+ key = 'Shift+Tab';
+ }
+});
+
+test.describe('JS off', () => {
+ test.use({ javaScriptEnabled: false });
+ for (const p of PAGES) {
+ test(`${p.key}: prerendered content and the claim/source chip are present with no JS`, async ({ page }) => {
+ await page.goto(p.slug);
+ await expect(page.locator('h1')).toHaveCount(1);
+ expect(await page.locator('details.chip').count()).toBeGreaterThan(0);
+ });
+ }
+});
+
+test('CSP meta is present on every page and nothing violates it', async ({ page }) => {
+ await page.addInitScript(() => {
+ (window as unknown as { __csp: string[] }).__csp = [];
+ document.addEventListener('securitypolicyviolation', (e) => (window as unknown as { __csp: string[] }).__csp.push(`${e.violatedDirective} ${e.blockedURI}`));
+ });
+ for (const p of PAGES) {
+ await page.goto(p.slug);
+ await ready(page);
+ await expect(page.locator('meta[http-equiv="Content-Security-Policy"]')).toHaveCount(1);
+ expect(await page.evaluate(() => (window as unknown as { __csp: string[] }).__csp), p.key).toEqual([]);
+ }
+});
+
+test('data is fetched from the content-hashed URL named by the build', async ({ page }) => {
+ const urls: string[] = [];
+ page.on('request', (r) => urls.push(r.url()));
+ await page.goto('');
+ await ready(page);
+ const h = await page.locator('meta[name="ovl-data"]').getAttribute('content');
+ expect(h).toMatch(/^[0-9a-f]{64}$/);
+ expect(urls.filter((u) => u.includes('/data/site-data'))).toEqual([expect.stringContaining(`site-data.${h!.slice(0, 16)}.json`)]);
+});
+
+test('no page requests anything that 404s (favicon included)', async ({ page }) => {
+ const bad: string[] = [];
+ page.on('response', (r) => r.status() >= 400 && bad.push(`${r.status()} ${r.url()}`));
+ for (const p of PAGES) {
+ await page.goto(p.slug);
+ await ready(page);
+ }
+ expect(bad).toEqual([]);
+});
+
+test('phone: every source chip summary is >= 44px tall; source links announce the new tab', async ({ page }) => {
+ await page.setViewportSize({ width: 390, height: 844 });
+ await page.goto('verification/');
+ await ready(page);
+ for (const h of await page.locator('details.chip > summary').evaluateAll((s) => s.filter((e) => (e as HTMLElement).offsetParent).map((e) => e.getBoundingClientRect().height))) expect(h).toBeGreaterThanOrEqual(44);
+ await page.locator('details.chip').first().evaluate((d) => ((d as HTMLDetailsElement).open = true));
+ await expect(page.locator('details.chip a[target="_blank"]').first()).toHaveAccessibleName(/opens in a new tab/);
+});
diff --git a/frontend/tests/e2e/behaviour.spec.ts b/frontend/tests/e2e/behaviour.spec.ts
new file mode 100644
index 00000000..719d50f1
--- /dev/null
+++ b/frontend/tests/e2e/behaviour.spec.ts
@@ -0,0 +1,277 @@
+import { expect, test } from '@playwright/test';
+import { label } from '../../src/content/ledger';
+import { data, ready, PAGES } from './util';
+
+test('header uses the approved C-gate mark and lockup', async ({ page, request }) => {
+ await page.goto('');
+ await ready(page);
+ await expect(page.locator('.wordmark img')).toHaveAttribute('src', /logo\.svg$/);
+ await expect(page.locator('.wordmark')).toContainText(label('site.title'));
+ await expect(page.locator('.wordmark-by')).toHaveText(label('site.by'));
+ await expect(page.locator('footer a')).toHaveCount(1);
+ await expect(page.locator('footer [data-label="footer"]')).toHaveText('Made by AOSSIE');
+ // Visible text only: the screen-reader "(opens in a new tab)" hint is clipped.
+ expect(await page.locator('footer').evaluate((f) => { const c = f.cloneNode(true) as HTMLElement; c.querySelectorAll('.sr').forEach((e) => e.remove()); return c.textContent!.trim(); })).toBe('Made by AOSSIE');
+ const llm = page.locator('.wordmark [data-label="site.title.llm"]');
+ await expect(llm).toHaveCSS('color', 'rgb(255, 205, 0)');
+ const svg = await (await request.get('logo.svg')).text();
+ expect(svg).toContain('M8 2H24A6 6 0 0 1 30 8V17.25H23.5V10.45');
+ expect(svg).toContain('#FFCD00');
+});
+
+test('keyboard: skip link first, then into main; tiles are focusable buttons operated with Enter and Space', async ({ page }) => {
+ await page.goto('verification/');
+ await ready(page);
+ await page.keyboard.press('Tab');
+ await expect(page.locator('.skip')).toBeFocused();
+ await page.keyboard.press('Enter');
+ await expect(page).toHaveURL(/#main$/);
+ await expect(page.locator('h1')).toBeVisible();
+ await expect(page.locator('[data-failed]')).toHaveCount(0);
+ const tile = page.locator('.tiles-int button').nth(10);
+ await tile.focus();
+ const ring = await tile.evaluate((el) => {
+ const s = getComputedStyle(el);
+ return { outline: s.outlineStyle, width: s.outlineWidth, shadow: s.boxShadow };
+ });
+ expect(ring.outline).toBe('solid');
+ expect(ring.shadow).not.toBe('none'); // two-layer ring: gold outline + ink halo
+ await page.keyboard.press('Enter');
+ await expect(tile).toHaveAttribute('aria-pressed', 'true');
+ await expect(page.locator('.tile-detail .checks li')).toHaveCount(data().verifications.rows.filter((r) => r.segment === 10).length);
+ await page.keyboard.press('Space');
+ await expect(tile).toHaveAttribute('aria-pressed', 'false');
+ await page.keyboard.press('Tab');
+ await expect(page.locator('.tiles-int button').nth(11)).toBeFocused();
+});
+
+test('navigation: client-side links move focus to main and update aria-current; back works', async ({ page }) => {
+ await page.goto('');
+ await ready(page);
+ await page.getByRole('navigation').getByRole('link', { name: label('nav.timeline') }).click();
+ await expect(page.locator('h1')).toHaveText(label('h1.timeline'));
+ await expect(page.locator('main')).toBeFocused();
+ await expect(page.locator('nav a[aria-current="page"]')).toHaveText(label('nav.timeline'));
+ await page.goBack();
+ await expect(page.locator('h1')).toHaveText(label('h1.overview'));
+});
+
+test('overview: 37-tile scoreboard and "independent: 0" under the title', async ({ page }) => {
+ const d = data();
+ await page.goto('');
+ await ready(page);
+ await expect(page.locator('.tile')).toHaveCount(d.verifications.tiles.length);
+ await expect(page.locator('.tile[data-checker="project"]')).toHaveCount(37);
+ await expect(page.locator('[data-independent] [data-path="verifications.independentChecks"]')).toHaveText('0');
+ const order = await page.evaluate(() => {
+ const h1 = document.querySelector('h1')!, ind = document.querySelector('[data-independent]')!;
+ return h1.compareDocumentPosition(ind) & Node.DOCUMENT_POSITION_FOLLOWING;
+ });
+ expect(order).toBeTruthy();
+ await expect(page.locator('[data-claim]')).toHaveCount(3);
+});
+
+test('overview at 1440: title, independent count and the whole scoreboard are in the first screen', async ({ page }) => {
+ await page.setViewportSize({ width: 1440, height: 900 });
+ await page.goto('');
+ await ready(page);
+ for (const sel of ['h1', '[data-independent]', '.tiles-strip li:last-child .tile']) {
+ const box = (await page.locator(sel).boundingBox())!;
+ expect(box.y + box.height, sel).toBeLessThanOrEqual(900);
+ }
+});
+
+test('extra sources sit behind a keyboard-operable "+N more sources" disclosure', async ({ page }) => {
+ await page.goto('verification/');
+ await ready(page);
+ const ev = page.locator('[data-claim="VE-04"]');
+ const sum = ev.locator('summary.more');
+ await expect(ev.locator('details.chip:visible')).toHaveCount(1);
+ await expect(sum).toHaveAttribute('aria-expanded', 'false');
+ await sum.focus();
+ await page.keyboard.press('Enter');
+ await expect(sum).toHaveAttribute('aria-expanded', 'true');
+ await expect(ev.locator('details.chip:visible')).toHaveCount(2);
+ await page.keyboard.press('Space');
+ await expect(sum).toHaveAttribute('aria-expanded', 'false');
+});
+
+test('verification: odds 95.09% at 110 and 99.02% at 169; fresh machine only segment 21; 46 rows', async ({ page }) => {
+ await page.goto('verification/');
+ await ready(page);
+ await expect(page.locator('[data-path="odds.m95"]').first()).toHaveText('110');
+ await expect(page.locator('[data-path="odds.p95"]')).toHaveText('95.09%');
+ await expect(page.locator('[data-path="odds.m99"]').first()).toHaveText('169');
+ await expect(page.locator('[data-path="odds.p99"]')).toHaveText('99.02%');
+ await expect(page.locator('.groups').first().locator('tbody tr')).toHaveCount(46);
+ const freshRows = page.locator('section.group').nth(2).locator('tbody [data-path$=".segment"]');
+ await expect(freshRows).toHaveText(['21']);
+});
+
+test('verification at 390: hardware map is one card per machine, table hidden', async ({ page }) => {
+ await page.setViewportSize({ width: 390, height: 900 });
+ await page.goto('verification/');
+ await ready(page);
+ await expect(page.locator('.hw-cards > li')).toHaveCount(data().hardware.length);
+ await expect(page.locator('.hw-table')).toBeHidden();
+ await expect(page.locator('.hw-cards > li').first()).toBeVisible();
+});
+
+test('timeline: restart and code-change markings come from the data', async ({ page }) => {
+ const d = data();
+ await page.goto('timeline/');
+ await ready(page);
+ for (const e of d.events) await expect(page.locator(`.strip li`).nth(e.segment)).toHaveAttribute('data-event', e.id);
+ await expect(page.locator('.strip li[data-event]')).toHaveCount(d.events.length);
+});
+
+test('check: the consistency commands are verbatim from README main@1049d2a7 and copy exactly', async ({ page, context }) => {
+ await context.grantPermissions(['clipboard-read', 'clipboard-write']);
+ const d = data();
+ await page.goto('check/');
+ await ready(page);
+ const block = page.locator('[data-claim="CK-02"] .cmd pre');
+ expect((await block.evaluate((e) => e.textContent))?.replaceAll('\r\n', '\n')).toBe(d.check.commands);
+ await page.locator('[data-claim="CK-02"] .cmd button').click();
+ await expect(page.locator('[data-claim="CK-02"] [role="status"]')).toHaveText(label('copied'));
+ expect((await page.evaluate(() => navigator.clipboard.readText())).replaceAll('\r\n', '\n')).toBe(d.check.commands);
+});
+
+test('source chip opens the exact cited row', async ({ page }) => {
+ const d = data();
+ await page.goto('verification/');
+ await ready(page);
+ const chip = page.locator('[data-claim="VE-04"] details.chip').first();
+ await chip.locator('summary').click();
+ await expect(chip.locator('pre')).toHaveText(d.claimSources['VE-04']![0]!.text!);
+ await expect(chip.locator('a')).toHaveAttribute('href', d.claimSources['VE-04']![0]!.url!);
+});
+
+test('data that fails to load keeps the page and never shows a MATCH', async ({ page }) => {
+ await page.route('**/data/site-data*.json', (r) => r.fulfill({ status: 500, body: 'x' }));
+ await page.goto('verification/');
+ await expect(page.locator('#root[data-failed]')).toHaveCount(1);
+ await expect(page.locator('h1')).toHaveText(label('h1.verification'));
+ await expect(page.locator('[data-fallback]').first()).toHaveText(label('error.section'));
+ await expect(page.locator('.result-MATCH, [data-result="MATCH"]')).toHaveCount(0);
+});
+
+test('data with an unpinned revision is rejected', async ({ page }) => {
+ const d = data();
+ d.revision = 'main';
+ await page.route('**/data/site-data*.json', (r) => r.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(d) }));
+ await page.goto('');
+ await expect(page.locator('#root[data-failed]')).toHaveCount(1);
+ await expect(page.locator('[data-fatal]').first()).toBeVisible();
+ await expect(page.locator('[data-result="MATCH"]')).toHaveCount(0);
+});
+
+test('data that differs from the build (even one malformed section) never hydrates: every data section shows "couldn\'t load this evidence"', async ({ page }) => {
+ const d = data() as unknown as Record;
+ d.hardware = [{ result: 'ok' }];
+ await page.route('**/data/site-data*.json', (r) => r.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(d) }));
+ const errors: string[] = [];
+ page.on('pageerror', (e) => errors.push(String(e)));
+ page.on('console', (m) => m.type() === 'error' && errors.push(m.text()));
+ await page.goto('verification/');
+ await expect(page.locator('#root[data-failed]')).toHaveCount(1);
+ await expect(page.locator('h1')).toHaveCount(1);
+ expect(await page.locator('[data-fallback]').count()).toBeGreaterThan(0);
+ for (const t of await page.locator('[data-fallback]').allInnerTexts()) expect(t).toBe(label('error.section'));
+ await expect(page.locator('.tile, [data-result]')).toHaveCount(0);
+ expect(errors).toEqual([]);
+});
+
+test('an injected MISMATCH never shows "37 of 37" and causes no hydration error', async ({ page }) => {
+ const d = data();
+ d.verifications.tiles[5]!.result = 'MISMATCH';
+ await page.route('**/data/site-data*.json', (r) => r.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(d) }));
+ const errors: string[] = [];
+ page.on('console', (m) => m.type() === 'error' && errors.push(m.text()));
+ page.on('pageerror', (e) => errors.push(String(e)));
+ for (const slug of ['', 'verification/']) {
+ await page.goto(slug);
+ await expect(page.locator('#root[data-failed]')).toHaveCount(1);
+ expect(await page.locator('main').innerText()).not.toMatch(/\b37 of 37\b|all 37 and all matched/);
+ }
+ expect(errors.filter((e) => /418|hydrat/i.test(e))).toEqual([]);
+});
+
+test('background is light by default; the toggle switches to dark and keeps it across pages', async ({ page }) => {
+ await page.goto('');
+ await ready(page);
+ expect(await page.evaluate(() => getComputedStyle(document.body).backgroundColor)).toBe('rgb(251, 250, 247)');
+ const toggle = page.locator('[data-theme-toggle]');
+ await expect(toggle).toHaveText(label('theme.toDark'));
+ await toggle.click();
+ await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark');
+ expect(await page.evaluate(() => getComputedStyle(document.body).backgroundColor)).toBe('rgb(15, 17, 21)');
+ await page.getByRole('navigation').getByRole('link', { name: label('nav.check') }).click();
+ await ready(page);
+ await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark');
+ await expect(page.locator('[data-theme-toggle]')).toHaveText(label('theme.toLight'));
+ await page.locator('[data-theme-toggle]').click();
+ await expect(page.locator('html')).toHaveAttribute('data-theme', 'light');
+});
+
+test('a hostile theme value in storage is ignored and the page stays light', async ({ page }) => {
+ await page.addInitScript(() => {
+ try {
+ localStorage.setItem('ovl-theme', '');
+ } catch {
+ /* ignore */
+ }
+ });
+ await page.goto('');
+ await ready(page);
+ expect(await page.evaluate(() => document.documentElement.dataset.theme)).toBe('light');
+ expect(await page.evaluate(() => getComputedStyle(document.body).backgroundColor)).toBe('rgb(251, 250, 247)');
+});
+
+test('every source chip on every page opens to a quoted panel', async ({ page }) => {
+ for (const p of PAGES) {
+ await page.goto(p.slug);
+ await ready(page);
+ const chips = page.locator('main details.chip');
+ expect(await chips.count(), p.key).toBeGreaterThan(0);
+ const first = chips.first();
+ await expect(first.locator('.panel')).toBeHidden();
+ await first.locator(':scope > summary').click();
+ await expect(first.locator('.panel')).toBeVisible();
+ expect(((await first.locator('.panel').innerText()) ?? '').trim().length, p.key).toBeGreaterThan(0);
+ await first.locator(':scope > summary').click();
+ await expect(first.locator('.panel')).toBeHidden();
+ }
+});
+
+test('check: commands are outlined, copyable, and source chips next to them open', async ({ page }) => {
+ await page.goto('check/');
+ await ready(page);
+ const cmds = page.locator('.cmd pre[data-verbatim="command"]');
+ expect(await cmds.count()).toBeGreaterThanOrEqual(5);
+ for (const pre of await cmds.all()) {
+ const text = (await pre.textContent()) ?? '';
+ expect(text.trim().length).toBeGreaterThan(10);
+ const left = await pre.evaluate((el) => getComputedStyle(el).borderLeftWidth);
+ expect(parseFloat(left)).toBeGreaterThanOrEqual(3);
+ }
+ await expect(page.locator('.cmd .btn').first()).toBeVisible();
+ await expect(page.locator('[data-claim="CK-01"] .cmd pre')).toHaveText('ollama run ryoari/openverifiablellm');
+ await expect(page.locator('[data-claim="CK-02"] .cmd pre')).toContainText('--branch v1.0.1');
+ const chip = page.locator('[data-claim="CK-01"] details.chip').first();
+ await chip.locator(':scope > summary').click();
+ await expect(chip.locator('.panel')).toBeVisible();
+});
+
+
+test('a stored dark theme applies before any app script runs (no light flash)', async ({ page }) => {
+ await page.addInitScript(() => {
+ try { localStorage.setItem('ovl-theme', 'dark'); } catch { /* ignore */ }
+ });
+ // Block the app bundle: only the head boot script can set the theme.
+ await page.route(/\/assets\/.*\.js$/, (r) => r.abort());
+ await page.goto('');
+ expect(await page.evaluate(() => document.documentElement.dataset.theme)).toBe('dark');
+ expect(await page.evaluate(() => getComputedStyle(document.body).backgroundColor)).toBe('rgb(15, 17, 21)');
+ expect(await page.locator('meta[name="theme-color"]').getAttribute('content')).toBe('#0F1115');
+});
diff --git a/frontend/tests/e2e/pages.spec.ts b/frontend/tests/e2e/pages.spec.ts
new file mode 100644
index 00000000..1e406946
--- /dev/null
+++ b/frontend/tests/e2e/pages.spec.ts
@@ -0,0 +1,112 @@
+import { limitParts } from '../../src/components/ClaimBlock';
+import AxeBuilder from '@axe-core/playwright';
+import { expect, test } from '@playwright/test';
+import { formatValue, type Fmt } from '../../src/data/format';
+import { getPath } from '../../src/data/path';
+import { bannedIn, claims, ui } from '../../src/content/ledger';
+import { PAGES, WIDTHS, data, ready, useTheme } from './util';
+import { fillCounts } from '../../src/content/fill';
+
+for (const scheme of ['light', 'dark'] as const) {
+ for (const w of WIDTHS) {
+ for (const p of PAGES) {
+ test(`${p.key} @${w} ${scheme}: renders, no overflow, axe clean, no console errors`, async ({ page }) => {
+ const errors: string[] = [];
+ page.on('console', (m) => m.type() === 'error' && errors.push(m.text()));
+ page.on('pageerror', (e) => errors.push(String(e)));
+ await useTheme(page, scheme);
+ await page.emulateMedia({ reducedMotion: 'reduce' });
+ await page.setViewportSize({ width: w, height: 900 });
+ await page.goto(p.slug);
+ await ready(page);
+ await expect(page.locator('h1')).toBeVisible();
+ await expect(page.locator('h1')).toHaveText(ui[`h1.${p.key}`]!);
+ const overflow = await page.evaluate(() => document.documentElement.scrollWidth - document.documentElement.clientWidth);
+ expect(overflow).toBeLessThanOrEqual(0);
+ // Axe injects its own frames; pageerrors from that run are not the site's.
+ expect(errors).toEqual([]);
+ const axe = await new AxeBuilder({ page }).exclude('.wordmark [data-label="site.title.llm"]').withTags(['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa', 'wcag22aa']).analyze();
+ expect(axe.violations.map((v) => `${v.id}: ${v.nodes.length} (${v.nodes[0]?.target.join(' ')})`)).toEqual([]);
+ });
+ }
+ }
+}
+
+for (const p of PAGES) {
+ test(`${p.key}: every text on the page comes from the ledger, ui.json or site-data.json`, async ({ page }) => {
+ await page.goto(p.slug);
+ await ready(page);
+ const stray = await page.evaluate(() => {
+ const out: string[] = [];
+ const walk = document.createTreeWalker(document.querySelector('main')!, NodeFilter.SHOW_TEXT);
+ for (let n = walk.nextNode(); n; n = walk.nextNode()) {
+ const t = n.textContent ?? '';
+ if (!/[\p{L}\p{N}]/u.test(t)) continue; // whitespace and punctuation only
+ if (!n.parentElement?.closest('[data-claim-part],[data-label],[data-path],[data-verbatim]')) out.push(t.trim());
+ }
+ return out;
+ });
+ expect(stray).toEqual([]);
+ });
+
+ test(`${p.key}: every displayed value equals site-data.json and every claim equals the ledger`, async ({ page }) => {
+ const d = data();
+ await page.goto(p.slug);
+ await ready(page);
+ const vals = await page.$$eval('main [data-path]', (els) => els.map((e) => ({ path: (e as HTMLElement).dataset.path!, fmt: (e as HTMLElement).dataset.fmt ?? 'auto', text: e.textContent })));
+ for (const v of vals) expect(v.text, v.path).toBe(formatValue(getPath(d, v.path), v.fmt as Fmt));
+ const parts = await page.$$eval('main [data-claim-part]', (els) => els.map((e) => ({ id: (e as HTMLElement).dataset.claimRef ?? e.closest('[data-claim]')!.dataset.claim!, part: (e as HTMLElement).dataset.claimPart!, text: e.textContent })));
+ expect(parts.length).toBeGreaterThan(0);
+ for (const x of parts) {
+ const c = claims.get(x.id)!;
+ const plain = fillCounts(c.id, c.plain, d)!;
+ expect(x.text?.trim(), x.id).toBe(x.part === 'plain' ? plain : x.part === 'developer' ? fillCounts(c.id, c.developer, d) : x.part === 'limit-text' ? limitParts(plain).rest : c.limit);
+ }
+ const labels = await page.$$eval('[data-label]', (els) => els.map((e) => [(e as HTMLElement).dataset.label!, e.textContent]));
+ for (const [k, t] of labels) expect(t).toBe(ui[k!]);
+ });
+
+ test(`${p.key}: no banned phrase anywhere on the page`, async ({ page }) => {
+ await page.goto(p.slug);
+ await ready(page);
+ const text = await page.evaluate(() => document.body.innerText + ' ' + document.title);
+ expect(bannedIn(text.replace(/\n+/g, '\n'))).toEqual([]);
+ });
+
+ test(`${p.key}: no banned phrase in the shipped HTML, including closed source panels`, async ({ request }) => {
+ const html = await (await request.get(p.slug)).text();
+ const text = html.replace(/<[^>]+>/g, ' ').replace(/'|'/g, "'").replace(/&/g, '&');
+ // Includes verbatim upstream quotes in closed chips, so only the ledger's banned phrases apply here;
+ // the site's own style rules are checked on the rendered text above.
+ expect(bannedIn(text, undefined, false)).toEqual([]);
+ expect(text.toLowerCase().replaceAll('unlearning-3i-atlas', '')).not.toMatch(/erase|unlearn/);
+ });
+
+ test(`${p.key}: core content is in the HTML without JavaScript`, async ({ browser }) => {
+ const ctx = await browser.newContext({ javaScriptEnabled: false });
+ const page = await ctx.newPage();
+ await page.goto(p.slug);
+ await expect(page.locator('h1')).toHaveText(ui[`h1.${p.key}`]!);
+ expect(await page.locator('main [data-claim]').count()).toBeGreaterThan(0);
+ await ctx.close();
+ });
+}
+
+test('links: every internal link resolves on the static build; external links are https and pinned', async ({ page, request }) => {
+ const d = data();
+ const hrefs = new Set();
+ for (const p of PAGES) {
+ await page.goto(p.slug);
+ await ready(page);
+ for (const h of await page.$$eval('a[href]', (as) => as.map((a) => (a as HTMLAnchorElement).href))) hrefs.add(h);
+ }
+ const internal = [...hrefs].filter((h) => h.startsWith(new URL(page.url()).origin + '/'));
+ expect(internal.length).toBeGreaterThan(6);
+ for (const h of internal) expect((await request.get(h.split('#')[0]!)).status(), h).toBe(200);
+ for (const h of [...hrefs].filter((x) => !x.startsWith(new URL(page.url()).origin + '/'))) {
+ expect(h, h).toMatch(/^https:\/\//);
+ if (h.includes('huggingface.co/datasets/')) expect(h, h).toContain(d.revision);
+ if (h.includes('github.com/AOSSIE-Org/OpenVerifiableLLM/blob/')) expect(h, h).toContain(d.upstream.commit);
+ }
+ for (const f of ['fonts/InterVariable-latin.woff2', 'data/site-data.json', 'favicon.svg', 'logo.svg']) expect((await request.get(f)).status()).toBe(200);
+});
diff --git a/frontend/tests/e2e/util.ts b/frontend/tests/e2e/util.ts
new file mode 100644
index 00000000..7dc760e7
--- /dev/null
+++ b/frontend/tests/e2e/util.ts
@@ -0,0 +1,36 @@
+import { readFileSync } from 'node:fs';
+import path from 'node:path';
+import type { Page } from '@playwright/test';
+import type { SiteData } from '../../src/data/types';
+
+export const PAGES = [
+ { slug: '', key: 'overview' },
+ { slug: 'check/', key: 'check' },
+ { slug: 'verification/', key: 'verification' },
+ { slug: 'timeline/', key: 'timeline' },
+ { slug: 'exclusion/', key: 'exclusion' },
+ { slug: 'downloads/', key: 'downloads' },
+] as const;
+export const WIDTHS = [1440, 390] as const;
+export const data = (): SiteData => JSON.parse(readFileSync(path.resolve('public/data/site-data.json'), 'utf8')) as SiteData;
+
+/** Wait for the client to load and validate the data (hydration done). */
+export async function ready(page: Page) {
+ await page.waitForFunction(() => document.querySelector('[data-fatal]') || document.querySelector('footer[data-pinned]'));
+ await page.waitForLoadState('networkidle');
+}
+
+/** Pin the background before navigation. Light is the site default; dark is only via this or the header toggle. */
+export async function useTheme(page: Page, scheme: 'light' | 'dark') {
+ await page.addInitScript((t) => {
+ const html = document.documentElement;
+ if (!html) return;
+ html.setAttribute('data-theme', t);
+ html.style.colorScheme = t;
+ try {
+ localStorage.setItem('ovl-theme', t);
+ } catch {
+ /* ignore */
+ }
+ }, scheme);
+}
diff --git a/frontend/tests/e2e/v3-fixes.spec.ts b/frontend/tests/e2e/v3-fixes.spec.ts
new file mode 100644
index 00000000..dd7c6715
--- /dev/null
+++ b/frontend/tests/e2e/v3-fixes.spec.ts
@@ -0,0 +1,348 @@
+import AxeBuilder from '@axe-core/playwright';
+import { expect, test, type Page } from '@playwright/test';
+import { label } from '../../src/content/ledger';
+import { PAGES, ready, useTheme } from './util';
+
+const PINNED_GH = '1049d2a7';
+const PINNED_HF = '96dc282a';
+
+test.describe('layout', () => {
+ for (const w of [320, 768, 1024, 1920]) {
+ for (const p of PAGES) {
+ test(`${p.key} @${w}: no horizontal scroll`, async ({ page }) => {
+ await page.setViewportSize({ width: w, height: 900 });
+ await page.goto(p.slug);
+ await ready(page);
+ const { sw, cw } = await page.evaluate(() => ({ sw: document.documentElement.scrollWidth, cw: document.documentElement.clientWidth }));
+ expect(sw).toBeLessThanOrEqual(cw);
+ });
+ }
+ }
+
+ for (const w of [390, 768, 1440]) {
+ test(`minimum font size is at least 12px on every page @${w}`, async ({ page }) => {
+ await page.setViewportSize({ width: w, height: 900 });
+ for (const p of PAGES) {
+ await page.goto(p.slug);
+ await ready(page);
+ await page.evaluate(() => document.querySelectorAll('details').forEach((d) => (d.open = true)));
+ const small = await page.evaluate(() => {
+ const out: string[] = [];
+ const walk = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);
+ for (let n = walk.nextNode(); n; n = walk.nextNode()) {
+ const el = n.parentElement!;
+ if (!n.textContent!.trim() || el.closest('.sr, .skip, [hidden]')) continue;
+ const r = el.getBoundingClientRect();
+ if (r.width === 0 || r.height === 0 || getComputedStyle(el).visibility === 'hidden') continue;
+ const fs = parseFloat(getComputedStyle(el).fontSize);
+ if (fs < 12) out.push(`${el.className || el.tagName} ${fs}px "${n.textContent!.trim().slice(0, 20)}"`);
+ }
+ return out;
+ });
+ expect(small, p.key).toEqual([]);
+ }
+ });
+ }
+
+ for (const w of [320, 390, 1440]) {
+ test(`nav and footer links are at least 24px tall @${w} (44px on phones)`, async ({ page }) => {
+ await page.setViewportSize({ width: w, height: 900 });
+ await page.goto('');
+ await ready(page);
+ const min = w <= 640 ? 44 : 24;
+ for (const a of await page.locator('header.top a:not(.skip), footer.foot a, [data-theme-toggle]').all()) {
+ const b = (await a.boundingBox())!;
+ expect(b.height, await a.textContent() ?? '').toBeGreaterThanOrEqual(min);
+ }
+ });
+ }
+
+ for (const w of [320, 390, 1440]) {
+ test(`copy buttons are at least ${w <= 640 ? 44 : 32}px tall @${w}`, async ({ page }) => {
+ await page.setViewportSize({ width: w, height: 900 });
+ await page.goto('downloads/');
+ await ready(page);
+ const min = w <= 640 ? 44 : 32;
+ const btns = page.locator('.hash .btn, .cmd .btn');
+ expect(await btns.count()).toBeGreaterThan(0);
+ for (const b of await btns.all()) {
+ const box = (await b.boundingBox())!;
+ expect(box.height, await b.textContent() ?? '').toBeGreaterThanOrEqual(min);
+ }
+ });
+ }
+});
+
+test.describe('without JavaScript', () => {
+ test.use({ javaScriptEnabled: false });
+ for (const p of PAGES) {
+ test(`${p.key}: no dead buttons; extra sources reachable`, async ({ page }) => {
+ await page.goto(p.slug);
+ await expect(page.locator('button')).toHaveCount(0);
+ for (const det of await page.locator('details.more-src').all()) {
+ const sum = det.locator('> summary');
+ const n = await det.locator('.chips-more details.chip').count();
+ expect(n).toBeGreaterThan(0);
+ await expect(det.locator('.chips-more details.chip').first()).toBeHidden();
+ await sum.click();
+ await expect(det.locator('.chips-more details.chip:visible')).toHaveCount(n);
+ }
+ });
+ }
+ test('verification: each of the 37 tiles links to its segment row', async ({ page }) => {
+ await page.goto('verification/');
+ const tiles = page.locator('.tiles-int a.tile');
+ await expect(tiles).toHaveCount(37);
+ for (const t of await tiles.all()) {
+ const href = (await t.getAttribute('href'))!;
+ const id = href.split('#')[1]!;
+ await expect(page.locator(`[id="${id}"]`)).toHaveCount(1);
+ }
+ await tiles.nth(21).click();
+ await expect(page).toHaveURL(/#seg-21$/);
+ await expect(page.locator('#seg-21')).toBeInViewport();
+ });
+ test('404 page works without JavaScript', async ({ page }) => {
+ const res = await page.goto('no-such-page/');
+ expect(res!.status()).toBe(404);
+ await expect(page.locator('h1')).toHaveText(label('notfound'));
+ });
+});
+
+const FAILURES: [string, (p: Page) => Promise][] = [
+ ['404', (p) => p.route('**/data/site-data*.json', (r) => r.fulfill({ status: 404, body: 'not found' }))],
+ ['corrupt', (p) => p.route('**/data/site-data*.json', (r) => r.fulfill({ status: 200, contentType: 'application/json', body: '{"schema": "ovl-site-data.v2", "revi' }))],
+ ['wrong shape', (p) => p.route('**/data/site-data*.json', (r) => r.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify([{ result: 'MATCH' }]) }))],
+ ['abort', (p) => p.route('**/data/site-data*.json', (r) => r.abort())],
+];
+test.describe('data failure', () => {
+ for (const [name, setup] of FAILURES) {
+ for (const p of [PAGES[0], PAGES[2]]) {
+ test(`${name} on ${p.key}: scoped fallback, zero checked tiles, prerendered content stays`, async ({ page }) => {
+ await setup(page);
+ await page.goto(p.slug);
+ await expect(page.locator('#root[data-failed]')).toHaveCount(1);
+ const alerts = page.getByRole('alert');
+ expect(await alerts.count()).toBeGreaterThan(0);
+ for (const a of await alerts.all()) await expect(a).toHaveText(label('error.section'));
+ await expect(page.locator('.tile')).toHaveCount(0);
+ await expect(page.locator('[data-result]')).toHaveCount(0);
+ await expect(page.locator('h1')).toHaveText(label(`h1.${p.key}`));
+ expect(await page.locator('main [data-claim]').count()).toBeGreaterThan(0);
+ await expect(page.getByRole('navigation')).toBeVisible();
+ });
+ }
+ }
+});
+
+test('404 page: real status, navigation and a link home', async ({ page }) => {
+ const res = await page.goto('definitely/not/here');
+ expect(res!.status()).toBe(404);
+ await ready(page);
+ await expect(page.locator('h1')).toHaveText(label('notfound'));
+ await expect(page.getByRole('navigation').getByRole('link')).toHaveCount(6);
+ const home = page.locator('[data-notfound] a');
+ await expect(home).toHaveAttribute('href', '/');
+ await home.click();
+ await expect(page.locator('h1')).toHaveText(label('h1.overview'));
+});
+
+test.describe('dark mode, everything expanded', () => {
+ for (const p of PAGES) {
+ test(`${p.key}: axe clean`, async ({ page }) => {
+ await useTheme(page, 'dark');
+ await page.goto(p.slug);
+ await ready(page);
+ await page.evaluate(() => document.querySelectorAll('details').forEach((d) => (d.open = true)));
+ const tile = page.locator('.tiles-int button').first();
+ if (await tile.count()) await tile.click();
+ const axe = await new AxeBuilder({ page }).exclude('.wordmark [data-label="site.title.llm"]').withTags(['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa', 'wcag22aa']).analyze();
+ expect(axe.violations.map((v) => `${v.id}: ${v.nodes.length} (${v.nodes[0]?.target.join(' ')})`)).toEqual([]);
+ });
+ }
+});
+
+test('reduced motion: opening a source shows no animation', async ({ page }) => {
+ await page.emulateMedia({ reducedMotion: 'reduce' });
+ await page.goto('verification/');
+ await ready(page);
+ await page.locator('[data-claim="VE-04"] details.chip > summary').first().click();
+ await page.locator('[data-claim="VE-04"] summary.more').click();
+ const running = await page.evaluate(() => document.getAnimations().length);
+ expect(running).toBe(0);
+});
+
+test('"+N more": aria-expanded follows the disclosure and N equals the revealed chips', async ({ page }) => {
+ for (const p of PAGES) {
+ await page.goto(p.slug);
+ await ready(page);
+ for (const det of await page.locator('details.more-src').all()) {
+ const sum = det.locator('summary.more');
+ await expect(sum).toHaveAttribute('aria-expanded', 'false');
+ const n = Number(await sum.locator('.more-closed [data-path]').textContent());
+ await sum.click();
+ await expect(sum).toHaveAttribute('aria-expanded', 'true');
+ await expect(det.locator('.chips-more details.chip:visible')).toHaveCount(n);
+ await sum.click();
+ await expect(sum).toHaveAttribute('aria-expanded', 'false');
+ }
+ }
+});
+
+test('claim deep links land on the claim; a bad hash is harmless', async ({ page }) => {
+ const errors: string[] = [];
+ page.on('pageerror', (e) => errors.push(String(e)));
+ await page.goto('verification/#ve-04');
+ await ready(page);
+ await expect(page.locator('#ve-04')).toBeInViewport();
+ await page.goto('check/#ck-05');
+ await ready(page);
+ await expect(page.locator('#ck-05')).toBeInViewport();
+ await page.goto('verification/#does-not-exist');
+ await ready(page);
+ await expect(page.locator('h1')).toHaveText(label('h1.verification'));
+ await page.goto('verification/#%3Cimg%20src=x%3E');
+ await ready(page);
+ await expect(page.locator('h1')).toBeVisible();
+ expect(errors).toEqual([]);
+});
+
+test('external links: rel=noopener noreferrer and pinned revisions', async ({ page }) => {
+ for (const p of PAGES) {
+ await page.goto(p.slug);
+ await ready(page);
+ const links = await page.locator('a[href^="http"]').evaluateAll((as) => as.map((a) => ({ href: a.getAttribute('href')!, rel: a.getAttribute('rel') ?? '' })));
+ expect(links.length).toBeGreaterThan(0);
+ for (const l of links) {
+ expect(l.rel.split(' '), l.href).toEqual(expect.arrayContaining(['noopener', 'noreferrer']));
+ if (/^https:\/\/github\.com\/AOSSIE-Org\/OpenVerifiableLLM\/(blob|tree|raw)\//.test(l.href)) expect(l.href, l.href).toContain(PINNED_GH);
+ if (/^https:\/\/huggingface\.co\/.+\/(blob|resolve|tree)\//.test(l.href)) expect(l.href, l.href).toContain(PINNED_HF);
+ }
+ }
+});
+
+test('#ck-05 limit note stays within the reading measure', async ({ page }) => {
+ await page.setViewportSize({ width: 1920, height: 900 });
+ await page.goto('check/');
+ await ready(page);
+ const lim = page.locator('#ck-05 .limit');
+ if (await lim.count()) {
+ const { w, ch } = await lim.evaluate((el) => {
+ const probe = document.createElement('span');
+ probe.textContent = '0';
+ el.appendChild(probe);
+ const ch = probe.getBoundingClientRect().width;
+ probe.remove();
+ return { w: el.getBoundingClientRect().width, ch };
+ });
+ expect(w / ch).toBeLessThanOrEqual(70);
+ }
+});
+
+test('no banned phrase anywhere on any page, quoted source lines included (no roadmap exception)', async ({ page }) => {
+ const { ledger } = await import('../../src/content/ledger');
+ for (const p of [...PAGES, { slug: 'no-such-page/', key: 'notfound' }]) {
+ await page.goto(p.slug);
+ await ready(page);
+ await page.evaluate(() => document.querySelectorAll('details').forEach((d) => (d.open = true)));
+ const text = (await page.locator('body').textContent())!.toLowerCase().replaceAll('unlearning-3i-atlas', '').replaceAll('us$1–1.50', '');
+ const hits = ledger.forbidden_phrases.map((b) => b.phrase.toLowerCase()).filter((b) => text.includes(b));
+ expect(hits, p.key).toEqual([]);
+ expect(/\btraining steps?\b|\bsteps\b/.test(text), p.key).toBe(false);
+ }
+});
+
+for (const w of [320, 390, 768, 1024, 1440]) {
+ test(`overview strip @${w}: every tile shows its data-driven glyph, even rows, no horizontal scroll`, async ({ page }) => {
+ const { data } = await import('./util');
+ const tiles = data().verifications.tiles;
+ await page.setViewportSize({ width: w, height: 900 });
+ await page.goto('');
+ await ready(page);
+ const glyphs = page.locator('.tiles-strip .tile .glyph');
+ await expect(glyphs).toHaveCount(tiles.length);
+ const want = (r: string) => label(`tile.${r === 'MATCH' || r === 'MISMATCH' ? r : 'pending'}`);
+ for (let k = 0; k < tiles.length; k++) {
+ const g = glyphs.nth(k);
+ await expect(g).toBeVisible();
+ await expect(g).toHaveText(want(tiles[k]!.result));
+ const fs = await g.evaluate((el) => parseFloat(getComputedStyle(el).fontSize));
+ expect(fs).toBeGreaterThanOrEqual(12);
+ const box = (await g.boundingBox())!;
+ const tile = (await page.locator('.tiles-strip .tile').nth(k).boundingBox())!;
+ expect(box.x).toBeGreaterThanOrEqual(tile.x - 0.5);
+ expect(box.x + box.width).toBeLessThanOrEqual(tile.x + tile.width + 0.5);
+ }
+ const rows = await page.locator('.tiles-strip li').evaluateAll((li) => {
+ const m = new Map();
+ for (const el of li) { const y = Math.round(el.getBoundingClientRect().top); m.set(y, (m.get(y) ?? 0) + 1); }
+ return [...m.values()];
+ });
+ for (const r of rows.slice(0, -1)) expect(r).toBe(rows[0]);
+ expect(rows[rows.length - 1]!).toBeLessThanOrEqual(rows[0]!);
+ if (w >= 1100) expect(rows).toEqual([37]);
+ const { sw, cw } = await page.evaluate(() => ({ sw: document.documentElement.scrollWidth, cw: document.documentElement.clientWidth }));
+ expect(sw).toBeLessThanOrEqual(cw);
+ });
+}
+
+test.describe('404 page weight and tap target', () => {
+ for (const w of [320, 390, 1440]) {
+ test(`@${w}: no JS, no site-data.json, home link >= ${w <= 640 ? 44 : 24}px`, async ({ page }) => {
+ const reqs: string[] = [];
+ page.on('request', (r) => reqs.push(r.url()));
+ await page.setViewportSize({ width: w, height: 900 });
+ const res = await page.goto('no-such-page/');
+ expect(res!.status()).toBe(404);
+ await page.waitForLoadState('networkidle');
+ expect(reqs.filter((u) => u.endsWith('.js') || u.includes('site-data.json'))).toEqual([]);
+ await expect(page.locator('script')).toHaveCount(0);
+ const b = (await page.locator('[data-notfound] a').boundingBox())!;
+ expect(b.height).toBeGreaterThanOrEqual(w <= 640 ? 44 : 24);
+ });
+ }
+});
+
+test.describe('targeted segment row, JS off', () => {
+ test.use({ javaScriptEnabled: false });
+ for (const scheme of ['light', 'dark'] as const) {
+ test(`${scheme}: the row a tile link lands on is highlighted with the match tokens`, async ({ page }) => {
+ await useTheme(page, scheme);
+ await page.emulateMedia({ colorScheme: scheme });
+ await page.goto('verification/');
+ await page.locator('.tiles-int a.tile').nth(21).click();
+ await expect(page).toHaveURL(/#seg-21$/);
+ const style = (sel: string) => page.locator(sel).evaluate((el) => ({ bg: getComputedStyle(el).backgroundColor, outline: getComputedStyle(el).outlineStyle }));
+ const tokens = await page.evaluate(() => {
+ const probe = document.createElement('div');
+ document.body.appendChild(probe);
+ probe.style.background = 'var(--match-tint)';
+ const bg = getComputedStyle(probe).backgroundColor;
+ probe.remove();
+ return bg;
+ });
+ const hit = await style('#seg-21');
+ expect(hit.bg).toBe(tokens);
+ expect(hit.outline).toBe('solid');
+ const other = await style('#seg-20');
+ expect(other.bg).not.toBe(tokens);
+ });
+ }
+});
+
+for (const w of [320, 390, 768, 1440]) {
+ test(`"+N more" summary is >= ${w <= 640 ? 44 : 24}px tall @${w} and causes no overflow`, async ({ page }) => {
+ await page.setViewportSize({ width: w, height: 900 });
+ for (const slug of ['', 'verification/']) {
+ await page.goto(slug);
+ await ready(page);
+ for (const s of await page.locator('summary.more').all()) {
+ const b = (await s.boundingBox())!;
+ expect(b.height).toBeGreaterThanOrEqual(w <= 640 ? 44 : 24);
+ expect(b.x + b.width).toBeLessThanOrEqual(w);
+ }
+ const { sw, cw } = await page.evaluate(() => ({ sw: document.documentElement.scrollWidth, cw: document.documentElement.clientWidth }));
+ expect(sw).toBeLessThanOrEqual(cw);
+ }
+ });
+}
diff --git a/frontend/tests/e2e/v5-layout.spec.ts b/frontend/tests/e2e/v5-layout.spec.ts
new file mode 100644
index 00000000..7246fb80
--- /dev/null
+++ b/frontend/tests/e2e/v5-layout.spec.ts
@@ -0,0 +1,81 @@
+import { test, expect } from '@playwright/test';
+import { PAGES, ready } from './util';
+
+const TILE_WIDTHS = [375, ...Array.from({ length: 23 }, (_, i) => 641 + i * 20), 1099, 1100, 1280, 1440];
+
+const STRIPS = [
+ { name: 'overview strip', slug: '', sel: '.overview-top .tiles-strip .tile' },
+ { name: 'verification map', slug: 'verification/', sel: 'main ol.tiles:not(.tiles-indep) .tile' },
+] as const;
+
+for (const s of STRIPS) test.describe(`${s.name}: every number fits its tile and clears the code-change bar by 4px`, () => {
+ for (const w of TILE_WIDTHS) {
+ test(`@${w}`, async ({ page }) => {
+ await page.setViewportSize({ width: w, height: 900 });
+ await page.goto(s.slug);
+ await ready(page);
+ const r = await page.evaluate((sel) => {
+ const text = (el: Element) => { const g = document.createRange(); g.selectNodeContents(el); return g.getBoundingClientRect(); };
+ const tiles = [...document.querySelectorAll(sel)];
+ const boxes = tiles.map((t) => t.getBoundingClientRect());
+ const bar = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--bar-w'));
+ const clipped: string[] = []; // number or glyph outside the content box
+ let clear = Infinity;
+ for (const t of tiles) {
+ const c = t.getBoundingClientRect();
+ const cs = getComputedStyle(t);
+ const px = (k: string) => parseFloat(cs.getPropertyValue(k));
+ const bw = px('border-left-width');
+ // Content box: inside border and padding on every side. Strict, no tolerance.
+ const box = { l: c.left + bw + px('padding-left'), r: c.right - px('border-right-width') - px('padding-right'), t: c.top + px('border-top-width') + px('padding-top'), b: c.bottom - px('border-bottom-width') - px('padding-bottom') };
+ const v = t.querySelector('.v')!;
+ for (const el of [v, t.querySelector('.glyph')]) {
+ if (!el || el.getBoundingClientRect().width <= 1) continue; // visually hidden below 641px
+ const a = el.getBoundingClientRect();
+ if (a.left < box.l || a.right > box.r || a.top < box.t || a.bottom > box.b) clipped.push(v.textContent!);
+ }
+ if (t.dataset.event?.includes('code-change') && v.getBoundingClientRect().width > 1) clear = Math.min(clear, text(v).left - (c.left + bw + bar));
+ }
+ const spread = (a: number[]) => Math.max(...a) - Math.min(...a);
+ return { n: tiles.length, w: spread(boxes.map((b) => b.width)), h: spread(boxes.map((b) => b.height)), clipped, clear,
+ scroll: tiles.filter((t) => t.scrollWidth > t.clientWidth || t.scrollHeight > t.clientHeight).length };
+ }, s.sel);
+ expect(r.n).toBe(37);
+ expect(r.w).toBeLessThan(0.05);
+ expect(r.h).toBeLessThan(0.05);
+ expect(r.clipped).toEqual([]);
+ expect(r.scroll).toBe(0);
+ if (r.clear !== Infinity) expect(r.clear).toBeGreaterThanOrEqual(4);
+ if (s.slug || w > 640) expect(r.clear).not.toBe(Infinity); // the number is visible here, so it must be measured
+ });
+ }
+});
+
+test.describe('no sideways scroll on phones with every chip open', () => {
+ for (const w of [320, 375, 390]) {
+ for (const p of PAGES) {
+ test(`${p.key} @${w}`, async ({ page }) => {
+ await page.setViewportSize({ width: w, height: 800 });
+ await page.goto(p.slug);
+ await ready(page);
+ // Each chip alone, then every disclosure on the page open at once.
+ const r = await page.evaluate(async () => {
+ const frame = () => new Promise(requestAnimationFrame);
+ const over = () => document.documentElement.scrollWidth - innerWidth;
+ const bad: string[] = [];
+ for (const d of document.querySelectorAll('details.chip')) {
+ d.open = true;
+ await frame();
+ if (over() > 0) bad.push(`${d.querySelector('summary')!.textContent!.slice(0, 60)} +${over()}px`);
+ d.open = false;
+ }
+ document.querySelectorAll('details').forEach((d) => (d.open = true));
+ await frame();
+ return { bad, all: over() };
+ });
+ expect(r.bad).toEqual([]);
+ expect(r.all).toBeLessThanOrEqual(0);
+ });
+ }
+ }
+});
diff --git a/frontend/tests/unit/boundary.test.tsx b/frontend/tests/unit/boundary.test.tsx
new file mode 100644
index 00000000..3b67afe0
--- /dev/null
+++ b/frontend/tests/unit/boundary.test.tsx
@@ -0,0 +1,29 @@
+import { afterEach, describe, expect, it, vi } from 'vitest';
+import { cleanup, render, screen } from '@testing-library/react';
+import { ErrorBoundary } from '../../src/components/Section';
+
+afterEach(cleanup);
+
+function Boom({ n }: { n: number }) {
+ if (n === 1) throw new Error('boom');
+ return ok {n}
;
+}
+
+describe('page ErrorBoundary', () => {
+ it('shows a new page after the route key changes', () => {
+ vi.spyOn(console, 'warn').mockImplementation(() => undefined);
+ vi.spyOn(console, 'error').mockImplementation(() => undefined);
+ const { rerender } = render(
+
+
+ ,
+ );
+ expect(screen.getByRole('alert')).toBeTruthy();
+ rerender(
+
+
+ ,
+ );
+ expect(screen.getByText('ok 0')).toBeTruthy();
+ });
+});
diff --git a/frontend/tests/unit/build-data.test.ts b/frontend/tests/unit/build-data.test.ts
new file mode 100644
index 00000000..387c0bd5
--- /dev/null
+++ b/frontend/tests/unit/build-data.test.ts
@@ -0,0 +1,109 @@
+import { describe, expect, it } from 'vitest';
+import { execFileSync, spawnSync } from 'node:child_process';
+import { cpSync, mkdtempSync, writeFileSync, readFileSync } from 'node:fs';
+import { tmpdir } from 'node:os';
+import path from 'node:path';
+import { fresh } from './helpers';
+
+const root = path.resolve(__dirname, '../..');
+
+function python(): string {
+ for (const bin of [process.env.PYTHON, 'python3', 'python']) {
+ if (!bin) continue;
+ const r = spawnSync(bin, ['--version'], { encoding: 'utf8' });
+ if (r.status === 0 && /Python 3/.test(`${r.stdout}${r.stderr}`)) return bin;
+ }
+ throw new Error('Python 3 is required (python3 on Linux CI; python on Windows)');
+}
+
+describe('scripts/build-data.py', () => {
+ it('reproduces the committed site-data.json byte for byte from the pinned files (--check)', () => {
+ const out = execFileSync(python(), ['scripts/build-data.py', '--check'], { cwd: root, encoding: 'utf8' });
+ expect(out).toContain('matches the pinned files');
+ });
+
+ it('fails when an upstream GitHub copy no longer matches its manifest sha256', () => {
+ const tmp = mkdtempSync(path.join(tmpdir(), 'ovl-'));
+ for (const d of ['scripts', 'data', 'public', 'src/content']) cpSync(path.join(root, d), path.join(tmp, d), { recursive: true });
+ const f = path.join(tmp, 'data/upstream/1049d2a7/README.md');
+ writeFileSync(f, readFileSync(f, 'utf8') + '\n');
+ const r = spawnSync(python(), ['scripts/build-data.py'], { cwd: tmp, encoding: 'utf8' });
+ expect(r.status).not.toBe(0);
+ expect(r.stderr).toMatch(/upstream copy README\.md changed/);
+ });
+
+ it('fails when a pinned raw file no longer matches its manifest sha256', () => {
+ const tmp = mkdtempSync(path.join(tmpdir(), 'ovl-'));
+ for (const d of ['scripts', 'data', 'public', 'src/content']) cpSync(path.join(root, d), path.join(tmp, d), { recursive: true });
+ const f = path.join(tmp, 'data/raw/release/simple-run/verifications.jsonl');
+ writeFileSync(f, readFileSync(f, 'utf8').replace('"MATCH", "segment": 3}', '"MISMATCH", "segment": 3}'));
+ const r = spawnSync(python(), ['scripts/build-data.py'], { cwd: tmp, encoding: 'utf8' });
+ expect(r.status).not.toBe(0);
+ expect(r.stderr).toMatch(/does not match manifest sha256/);
+ });
+
+ it('fails when a ledger quote is not on its cited lines', () => {
+ const tmp = mkdtempSync(path.join(tmpdir(), 'ovl-'));
+ for (const d of ['scripts', 'data', 'public', 'src/content']) cpSync(path.join(root, d), path.join(tmp, d), { recursive: true });
+ const p = path.join(tmp, 'src/content/claims.json');
+ const l = JSON.parse(readFileSync(p, 'utf8'));
+ l.claims.find((c: { id: string }) => c.id === 'OV-01').sources[0].quote = 'A 99-million-parameter GPT';
+ writeFileSync(p, JSON.stringify(l));
+ const r = spawnSync(python(), ['scripts/build-data.py'], { cwd: tmp, encoding: 'utf8' });
+ expect(r.status).not.toBe(0);
+ expect(r.stderr).toMatch(/quote not found/);
+ });
+
+ it('withholds (links but does not quote) cited lines that use a banned phrase', () => {
+ const d = fresh();
+ const withheld = Object.values(d.claimSources).flat().filter((s) => 'withheld' in s);
+ expect(withheld.length).toBeGreaterThan(0);
+ for (const s of withheld) expect(s.text).toBeNull();
+ expect(d.events[0]!.medianGapSeconds).toBe(1968);
+ expect(d.events[0]!.gapSeconds).toBe(3297);
+ });
+
+ it('derives the audited counts from the data', () => {
+ const d = fresh();
+ expect(d.revision).toBe('96dc282a9803616c6b30bb31bfc3a0b91a7191e6');
+ expect(d.chain.entries).toBe(38);
+ expect(d.chain.segments).toBe(37);
+ expect(d.verifications.rowCount).toBe(46);
+ expect(d.verifications.groups.map((g) => [g.checker, g.rows])).toEqual([
+ ['project second pod', 37],
+ ['project training pod', 8],
+ ['project fresh machine public files only', 1],
+ ]);
+ expect(d.verifications.machines).toBe(3);
+ expect(d.verifications.secondMachineMatched).toBe(37);
+ expect(d.verifications.independentChecks).toBe(0);
+ expect(d.verifications.freshSegments).toEqual([21]);
+ expect([d.odds.m95, d.odds.m99]).toEqual([110, 169]);
+ expect(d.events.map((e) => [e.id, e.segment])).toEqual([['restart', 10], ['code-change', 19]]);
+ expect(d.exclusion.rowCount).toBe(10);
+ expect(d.exclusion.sharedPrefix).toBe(31);
+ expect(d.preparation.articles).toBe(7232582);
+ expect(d.anchor.tsa.map((t) => t.genTime)).toEqual(['2026-10-20T14:38:43Z', '2026-10-20T14:38:43Z']);
+ });
+
+ it('marks tiles 10 and 19 from the events, and no others', () => {
+ const marked = fresh().verifications.tiles.filter((t) => t.events.length).map((t) => [t.segment, t.events]);
+ expect(marked).toEqual([[10, ['restart']], [19, ['code-change']]]);
+ });
+
+ it('copies the Getting started commands verbatim from README main@1049d2a7 and cites the cost at simple_run.md:85', () => {
+ const d = fresh();
+ const readme = readFileSync(path.join(root, 'data/upstream/1049d2a7/README.md'), 'utf8').split('\n');
+ expect(d.check.commands).toBe(readme.slice(155, 167).join('\n'));
+ expect(d.check.commands).toContain('--branch v1.0.1');
+ expect(d.check.commands).not.toContain('v1.0.0');
+ expect(d.check.cost).toBe('about US$1–1.50');
+ expect(d.check.costSrc.line).toBe(85);
+ });
+
+ it('has the exact cited lines for every allowed ledger claim', () => {
+ const d = fresh();
+ expect(Object.keys(d.claimSources)).toHaveLength(71);
+ for (const srcs of Object.values(d.claimSources)) for (const s of srcs) if ((s.origin === 'hf' || s.origin === 'github') && !('withheld' in s)) expect(s.text).toBeTruthy();
+ });
+});
diff --git a/frontend/tests/unit/components.test.tsx b/frontend/tests/unit/components.test.tsx
new file mode 100644
index 00000000..f958e625
--- /dev/null
+++ b/frontend/tests/unit/components.test.tsx
@@ -0,0 +1,387 @@
+import { afterEach, describe, expect, it, vi } from 'vitest';
+import { act, cleanup, fireEvent, render, screen, within } from '@testing-library/react';
+import type { ComponentType } from 'react';
+import { App } from '../../src/App';
+import { DataContext } from '../../src/data/context';
+import { validateSite, type SectionErrors } from '../../src/data/validate';
+import { formatValue, type Fmt } from '../../src/data/format';
+import { getPath } from '../../src/data/path';
+import { claim, claims, label } from '../../src/content/ledger';
+import { limitParts } from '../../src/components/ClaimBlock';
+import { loadData } from '../../src/data/load';
+import { ROUTES } from '../../src/routes';
+import Overview from '../../src/pages/Overview';
+import Check from '../../src/pages/Check';
+import Verification from '../../src/pages/Verification';
+import Timeline from '../../src/pages/Timeline';
+import Exclusion from '../../src/pages/Exclusion';
+import Downloads from '../../src/pages/Downloads';
+import { Section } from '../../src/components/Section';
+import { distinctLimits, duplicateOf } from '../../src/pages/Verification';
+import { OVERVIEW_FACTS, OVERVIEW_LIMITS } from '../../src/pages/Overview';
+import type { SiteData } from '../../src/data/types';
+import { fresh } from './helpers';
+import { fillCounts } from '../../src/content/fill';
+
+afterEach(() => {
+ cleanup();
+ localStorage.removeItem('ovl-theme');
+ document.documentElement.removeAttribute('data-theme');
+ document.documentElement.style.colorScheme = '';
+});
+const PAGES: [string, ComponentType][] = [['overview', Overview], ['check', Check], ['verification', Verification], ['timeline', Timeline], ['exclusion', Exclusion], ['downloads', Downloads]];
+
+function mount(Page: ComponentType, data: SiteData = fresh(), errors: SectionErrors = {}) {
+ return render(
+
+
+ ,
+ );
+}
+
+describe.each(PAGES)('%s page', (key, Page) => {
+ it('renders every value from site-data.json exactly as formatted', () => {
+ const d = fresh();
+ const { container } = mount(Page, d);
+ const vals = container.querySelectorAll('[data-path]');
+ // "Check it yourself" is commands and ledger text only; every other page shows data values.
+ if (key !== 'check') expect(vals.length).toBeGreaterThan(0);
+ for (const el of vals) expect(el.textContent).toBe(formatValue(getPath(d, el.dataset.path!), (el.dataset.fmt ?? 'auto') as Fmt));
+ });
+
+ it('renders claims only from the ledger, each with a source chip and in brief order', () => {
+ const { container } = mount(Page);
+ for (const ev of container.querySelectorAll('[data-claim]')) {
+ const c = claims.get(ev.dataset.claim!)!;
+ expect(c).toBeTruthy();
+ // Inside a Limits list only the "Limit…:" prefix is dropped; the rest is the ledger text.
+ const lt = ev.querySelector('[data-claim-part="limit-text"]');
+ const plain = fillCounts(c.id, c.plain, fresh())!;
+ if (lt) expect(lt.textContent).toBe(limitParts(plain).rest);
+ else expect(ev.querySelector('[data-claim-part="plain"]')!.textContent).toBe(plain);
+ expect(ev.querySelector('details.chip')).not.toBeNull();
+ const dev = ev.querySelector('[data-claim-part="developer"]');
+ if (dev) {
+ expect(dev.closest('details.dev-box')).not.toBeNull();
+ expect(ev.querySelector('details.dev-box > summary')!.textContent).toBe(label('developer'));
+ }
+ const order = [...ev.querySelectorAll('.plain, .limit, .chips')].map((n) => n.className);
+ expect(order[0]).toBe('plain');
+ if (c.limit) expect(order.indexOf('limit')).toBeLessThan(order.indexOf('chips'));
+ }
+ });
+
+ it('shows the fallback for one malformed section without crashing the page', () => {
+ const errors: SectionErrors = { verifications: 'x', hardware: 'x', downloads: 'x', exclusion: 'x', check: 'x', chain: 'x', odds: 'x', events: 'x', preparation: 'x', anchor: 'x' };
+ const { container } = mount(Page, fresh(), errors);
+ expect(container.querySelector('h1')).not.toBeNull();
+ expect(container.querySelectorAll('[data-fallback]').length).toBeGreaterThan(0);
+ for (const f of container.querySelectorAll('[data-fallback]')) expect(f.textContent).toBe(label('error.section'));
+ });
+});
+
+it('renders every allowed claim somewhere, except de-duplicated limits', () => {
+ const seen = new Set();
+ for (const [, Page] of PAGES) {
+ const { container } = mount(Page);
+ container.querySelectorAll('[data-claim]').forEach((e) => seen.add(e.dataset.claim!));
+ cleanup();
+ }
+ // A claim may move pages; a limit claim that only repeats another claim ("see X") may be dropped
+ // where X is shown. Nothing else may go missing.
+ const missing = [...claims.keys()].filter((id) => !seen.has(id));
+ for (const id of missing) expect(duplicateOf(id), id).not.toBeNull();
+ for (const id of missing) expect(seen.has(duplicateOf(id)!), id).toBe(true);
+});
+
+describe('coverage map', () => {
+ it('has 37 real buttons and a table fallback with 37 rows', () => {
+ mount(Verification);
+ const map = document.querySelector('.tiles-int')!;
+ expect(within(map as HTMLElement).getAllByRole('button')).toHaveLength(37);
+ expect(document.querySelectorAll('.table-fallback tbody tr')).toHaveLength(37);
+ });
+
+ it('opens every check for a segment when a tile is pressed', () => {
+ const d = fresh();
+ mount(Verification, d);
+ const tile = document.querySelectorAll('.tiles-int button')[22]!;
+ fireEvent.click(tile);
+ expect(tile.getAttribute('aria-pressed')).toBe('true');
+ const items = document.querySelectorAll('.tile-detail .checks li');
+ expect(items).toHaveLength(d.verifications.rows.filter((r) => r.segment === 22).length);
+ });
+
+ it('places event markings wherever the data puts them', () => {
+ const d = fresh();
+ d.verifications.tiles[10]!.events = [];
+ d.verifications.tiles[3]!.events = ['restart'];
+ mount(Overview, d);
+ const tiles = document.querySelectorAll('.tile');
+ expect(tiles[3]!.dataset.event).toBe('restart');
+ expect(tiles[10]!.dataset.event).toBeUndefined();
+ expect(tiles[19]!.dataset.event).toBe('code-change');
+ });
+
+ it('draws a solid independent tile only when the data has an independent check', () => {
+ mount(Overview);
+ expect(document.querySelectorAll('.tile[data-checker="independent"]')).toHaveLength(0);
+ expect(document.querySelectorAll('.tile[data-checker="project"]')).toHaveLength(37);
+ });
+});
+
+describe('verification rows', () => {
+ it('shows all 46 rows, grouped 37 / 8 / 1, all by the project', () => {
+ mount(Verification);
+ const groups = [...document.querySelectorAll('.groups')][0]!.querySelectorAll('section.group');
+ expect([...groups].map((g) => g.querySelectorAll('tbody tr').length)).toEqual([37, 8, 1]);
+ for (const g of groups) expect(g.querySelector('[data-who]')!.getAttribute('data-who')).toBe('project');
+ });
+ it('shows the hardware map as one card per machine for phones', () => {
+ mount(Verification);
+ expect(document.querySelectorAll('.hw-cards > li')).toHaveLength(fresh().hardware.length);
+ });
+});
+
+describe('Check page sections', () => {
+ it('renders CK-02 through CK-07 when check data is valid', () => {
+ const { container } = mount(Check);
+ for (const id of ['CK-02', 'CK-03', 'CK-04', 'CK-05', 'CK-06', 'CK-07']) {
+ expect(container.querySelector(`[data-claim="${id}"]`)).not.toBeNull();
+ }
+ expect(container.querySelector('[data-fallback]')).toBeNull();
+ });
+ it('falls back those claims only when the check section failed validation', () => {
+ const { container } = mount(Check, fresh(), { check: 'missing' });
+ expect(container.querySelectorAll('[data-fallback]').length).toBeGreaterThan(0);
+ expect(container.querySelector('[data-claim="CK-01"]')).not.toBeNull();
+ expect(container.querySelector('[data-claim="CK-08"]')).not.toBeNull();
+ expect(container.querySelector('[data-claim="CK-02"]')).toBeNull();
+ });
+});
+
+describe('Section error boundary', () => {
+ it('contains a render crash to its own section', () => {
+ const Boom = () => {
+ throw new Error('boom');
+ };
+ const spy = vi.spyOn(console, 'error').mockImplementation(() => {});
+ vi.spyOn(console, 'warn').mockImplementation(() => {});
+ render(
+
+ before
+
+ after
+ ,
+ );
+ expect(screen.getByText('before')).toBeTruthy();
+ expect(screen.getByText('after')).toBeTruthy();
+ expect(screen.getByRole('alert').textContent).toBe(label('error.section'));
+ spy.mockRestore();
+ });
+});
+
+describe('App states', () => {
+ it('shows the error page and never a MATCH when data fails', () => {
+ const { container } = render( );
+ expect(screen.getByRole('alert').textContent).toContain(label('error.title'));
+ expect(screen.getByRole('button', { name: label('error.retry') })).toBeTruthy();
+ expect(container.querySelectorAll('.result-MATCH, [data-result="MATCH"]')).toHaveLength(0);
+ });
+ it('shows a loading state that claims nothing', () => {
+ const { container } = render( );
+ expect(screen.getByRole('status').textContent).toBe(label('loading'));
+ expect(container.querySelectorAll('[data-result]')).toHaveLength(0);
+ });
+ it('marks the current page in the navigation', () => {
+ render( );
+ const current = document.querySelector('nav a[aria-current="page"]')!;
+ expect(current.textContent).toBe(label('nav.verification'));
+ });
+ it('shows the brand mark next to the site title', () => {
+ const { container } = render( );
+ const img = container.querySelector('.wordmark img');
+ expect(img).not.toBeNull();
+ expect(img!.getAttribute('src')).toMatch(/logo\.svg$/);
+ expect(img!.getAttribute('alt')).toBe('');
+ expect(container.querySelector('.wordmark')!.textContent).toContain(label('site.title'));
+ expect(container.querySelector('[data-label="site.title.llm"]')!.textContent).toBe(label('site.title.llm'));
+ expect(container.querySelector('.wordmark-by')!.textContent).toBe(label('site.by'));
+ expect(container.querySelector('footer')!.textContent).toBe(`${label('footer')} ${label('newtab')}`);
+ });
+ it('shows a background toggle that only switches light and dark', () => {
+ const { container } = render( );
+ const btn = container.querySelector('[data-theme-toggle]');
+ expect(btn).not.toBeNull();
+ expect(btn!.getAttribute('aria-label')).toBe(`${label('theme.toDark')}. ${label('theme.group')}`);
+ expect(btn!.getAttribute('aria-pressed')).toBe('false');
+ fireEvent.click(btn!);
+ expect(btn!.getAttribute('aria-pressed')).toBe('true');
+ expect(document.documentElement.dataset.theme).toBe('dark');
+ fireEvent.click(btn!);
+ expect(document.documentElement.dataset.theme).toBe('light');
+ });
+});
+
+describe('loadData', () => {
+ it('returns an error on HTTP failure', async () => {
+ const r = await loadData((async () => new Response('nope', { status: 500 })) as typeof fetch);
+ expect(r).toEqual({ error: 'HTTP 500' });
+ });
+ it('returns an error on malformed JSON or an unpinned revision', async () => {
+ expect('error' in (await loadData((async () => new Response('{not json')) as typeof fetch))).toBe(true);
+ const d = fresh();
+ d.revision = 'main';
+ expect(await loadData((async () => new Response(JSON.stringify(d))) as typeof fetch)).toEqual({ error: 'revision is not the pinned 96dc282a' });
+ });
+});
+
+describe('loadData with a build hash', () => {
+ const raw = JSON.stringify(fresh());
+ const hex = (b: ArrayBuffer) => [...new Uint8Array(b)].map((x) => x.toString(16).padStart(2, '0')).join('');
+ it('fetches the content-hashed file and accepts data whose sha256 matches the build', async () => {
+ const h = hex(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(raw)));
+ let url = '';
+ const r = await loadData((async (u: string) => ((url = u), new Response(raw))) as unknown as typeof fetch, h);
+ expect(url).toMatch(new RegExp(`data/site-data\\.${h.slice(0, 16)}\\.json$`));
+ expect('error' in r).toBe(false);
+ });
+ it('rejects valid-looking data that is not the data the HTML was built from', async () => {
+ const r = await loadData((async () => new Response(raw)) as typeof fetch, 'a'.repeat(64));
+ expect(r).toEqual({ error: 'data does not match the build' });
+ });
+});
+
+describe('copy buttons', () => {
+ it('puts the exact full digest on the clipboard and announces it', async () => {
+ const writeText = vi.fn(async () => {});
+ Object.defineProperty(navigator, 'clipboard', { value: { writeText }, configurable: true });
+ const d = fresh();
+ mount(Downloads, d);
+ const btn = document.querySelector('.files .hash button')!;
+ await act(async () => fireEvent.click(btn));
+ expect(writeText).toHaveBeenCalledWith(d.downloads[0]!.files[0]!.sha256);
+ expect(btn.parentElement!.querySelector('[role="status"]')!.textContent).toBe(label('copied'));
+ });
+});
+
+describe('overview and limits layout', () => {
+ it('shows only the scoreboard, three headline facts and three limits', () => {
+ mount(Overview);
+ const ids = [...document.querySelectorAll('[data-claim]')].map((e) => e.dataset.claim);
+ expect(ids).toEqual([...OVERVIEW_FACTS, ...OVERVIEW_LIMITS]);
+ expect(document.querySelectorAll('.tiles-strip .tile')).toHaveLength(37);
+ for (const id of OVERVIEW_LIMITS) expect(document.querySelector(`[data-claim="${id}"] .limit`)).toBeNull();
+ });
+ it('shows each distinct limit once across a page', () => {
+ for (const Page of [Overview, Verification]) {
+ mount(Page);
+ const texts = [...document.querySelectorAll('.limits-list .plain')].map((e) => e.textContent);
+ expect(new Set(texts).size).toBe(texts.length);
+ cleanup();
+ }
+ expect(distinctLimits()).toEqual(['LI-05', 'LI-06']); // LI-02 is "see OV-12", shown in Hardware
+ // The same point must not appear as a claim and again as a limit: a "see X" limit is never
+ // listed on a page that already shows claim X.
+ for (const Page of [Overview, Verification]) {
+ mount(Page);
+ for (const el of document.querySelectorAll('.limits-list [data-claim]')) {
+ const d = duplicateOf(el.dataset.claim!);
+ if (d) expect(document.querySelector(`[data-claim="${d}"]`), `${el.dataset.claim} repeats ${d}`).toBeNull();
+ }
+ cleanup();
+ }
+ expect(distinctLimits()).not.toContain('LI-01');
+ });
+});
+
+describe('source toggle', () => {
+ it('shows one chip and keeps the rest in a native whose summary reports aria-expanded', () => {
+ const d = fresh();
+ mount(Overview, d);
+ const ev = document.querySelector('[data-claim="OV-04"]')!;
+ const id = (ev as HTMLElement).dataset.claim!;
+ const n = d.claimSources[id]!.length;
+ expect(n).toBeGreaterThan(1);
+ const det = ev.querySelector('details.more-src')!;
+ const sum = det.querySelector('summary.more')!;
+ expect(sum.getAttribute('aria-expanded')).toBe('false');
+ expect(sum.textContent).toContain(String(n - 1));
+ const more = document.getElementById(sum.getAttribute('aria-controls')!)!;
+ expect(det.contains(more)).toBe(true);
+ expect(det.open).toBe(false);
+ act(() => {
+ det.open = true;
+ det.dispatchEvent(new Event('toggle'));
+ });
+ expect(sum.getAttribute('aria-expanded')).toBe('true');
+ expect(more.querySelectorAll('details.chip')).toHaveLength(n - 1);
+ expect(ev.querySelectorAll('details.chip')).toHaveLength(n);
+ });
+});
+
+describe('without JavaScript (prerendered HTML)', () => {
+ it.each(PAGES)('%s: no at all, extra sources in , tiles link to seg-N rows', async (key, Page) => {
+ const { renderToString } = await import('react-dom/server');
+ const d = fresh();
+ const html = renderToString(
+
+
+ ,
+ );
+ expect(html).not.toContain(']*href="\/verification\/#seg-(\d+)"/g)].map((m) => Number(m[1]));
+ expect(links).toHaveLength(37);
+ for (const k of links) expect(html).toContain(`id="seg-${k}"`);
+ }
+ });
+});
+
+describe('v3 follow-up', () => {
+ it('Overview limits are OV-13 and LI-01, LI-01 not repeated on Verification; OV-12 moved to Verification', () => {
+ expect(OVERVIEW_LIMITS).toEqual(['OV-13', 'LI-01']);
+ mount(Verification);
+ expect(document.querySelector('.limits-list [data-claim="LI-01"]')).toBeNull();
+ expect(document.querySelector('.limits-list [data-claim="LI-04"]')).toBeNull();
+ expect(document.querySelector('[data-claim="VE-10"]')).not.toBeNull();
+ for (const id of ['OV-06', 'OV-12']) expect(document.querySelector(`[data-claim="${id}"]`), id).not.toBeNull();
+ });
+ it('the trained sentence is the ledger plain line of OV-01, verbatim; OV-02/03 are on Timeline', () => {
+ mount(Overview);
+ const parts = [...document.querySelectorAll('[data-trained] [data-claim-ref]')];
+ expect(parts.map((e) => e.dataset.claimRef)).toEqual(['OV-01']);
+ for (const e of parts) expect(e.textContent!.trim()).toBe(claim(e.dataset.claimRef!).plain);
+ });
+ it('limit lines drop the "Limit" prefixes and still name the project', () => {
+ for (const Page of [Overview, Verification]) {
+ mount(Page);
+ for (const el of document.querySelectorAll('.limits-list .plain')) {
+ expect(el.textContent).not.toMatch(/^Limit/);
+ expect(el.textContent).toMatch(/the project/i);
+ }
+ cleanup();
+ }
+ });
+ it('a ✓ glyph comes from MATCH status only; other statuses get distinct glyphs; names unchanged', () => {
+ const d = fresh();
+ d.verifications.tiles[0]!.result = 'MISMATCH';
+ d.verifications.tiles[1]!.result = 'NOT_RUN';
+ mount(Verification, d);
+ const tiles = [...document.querySelectorAll('.tiles-int .tile')];
+ tiles.forEach((t, k) => {
+ const g = t.querySelector('.glyph')!;
+ expect(g.getAttribute('aria-hidden')).toBe('true');
+ const want = k === 0 ? '✗' : k === 1 ? '…' : '✓';
+ expect(g.textContent).toBe(want);
+ expect(t.querySelector('.sr')!.textContent).toContain(d.verifications.tiles[k]!.result);
+ });
+ });
+ it('one extra source reads "more source", several read "more sources"', () => {
+ expect(label('sources.one')).toBe('more source');
+ expect(label('sources.more')).toBe('more sources');
+ });
+});
diff --git a/frontend/tests/unit/fill.test.tsx b/frontend/tests/unit/fill.test.tsx
new file mode 100644
index 00000000..1edd5c46
--- /dev/null
+++ b/frontend/tests/unit/fill.test.tsx
@@ -0,0 +1,112 @@
+import { afterEach, describe, expect, it } from 'vitest';
+import { cleanup, render } from '@testing-library/react';
+import { fillCounts } from '../../src/content/fill';
+import { copy } from '../../src/content/ledger';
+import { ClaimBlock } from '../../src/components/ClaimBlock';
+import { DataContext } from '../../src/data/context';
+import { fresh } from './helpers';
+
+afterEach(cleanup);
+
+describe('counts come from the data, never from copy', () => {
+ it('fills {matched} of {total} from site-data.json', () => {
+ const d = fresh();
+ expect(fillCounts('OV-04', copy['OV-04']!.plain, d)).toContain(`${d.verifications.segmentsMatched} of ${d.chain.segments} segments`);
+ });
+ it('no copy line hardcodes "N of N" or "N/N" segments', () => {
+ for (const [id, v] of Object.entries(copy)) for (const t of Object.values(v)) expect(t, id).not.toMatch(/\b\d+ of \d+ segments|\b\d+\/\d+ segments/);
+ });
+ it('withholds "{matched} of {total}" when a segment is not MATCH', () => {
+ const d = fresh();
+ d.verifications.tiles[5]!.result = 'MISMATCH';
+ d.verifications.segmentsMatched -= 1;
+ d.verifications.allMatch = false;
+ expect(fillCounts('OV-04', copy['OV-04']!.plain, d)).toBeNull();
+ expect(fillCounts('VE-01', copy['VE-01']!.plain, d)).toBeNull();
+ });
+ it('withholds any "all match" line when allMatch is false, and EX-* reads the exclusion data', () => {
+ const d = fresh();
+ d.verifications.allMatch = false;
+ expect(fillCounts('VE-03', 'There are 46 check results, all matches', d)).toBeNull();
+ expect(fillCounts('EX-05', 'all MATCH', d)).toBe('all MATCH');
+ d.exclusion.allMatch = false;
+ expect(fillCounts('EX-05', 'all MATCH', d)).toBeNull();
+ });
+ it('VE-01 fills {total} from the data for a segment count other than 37 (D2 regression)', () => {
+ for (const N of [38, 1000]) {
+ const d = fresh();
+ const t0 = d.verifications.tiles[0]!;
+ d.verifications.tiles = Array.from({ length: N }, (_, k) => ({ ...t0, segment: k }));
+ d.chain.segments = N;
+ d.verifications.segmentsMatched = N;
+ const line = fillCounts('VE-01', copy['VE-01']!.plain, d)!;
+ expect(line).toContain(`${N} tiles`);
+ expect(line).toContain(`${N} of ${N}`);
+ expect(line).not.toMatch(/\b37\b/);
+ }
+ });
+ it('VE-01 fails closed when the total disagrees with the tiles or matched != total', () => {
+ const d = fresh();
+ d.chain.segments = 1000; // tiles still 37: a stale or mixed total is withheld, never printed
+ expect(fillCounts('VE-01', copy['VE-01']!.plain, d)).toBeNull();
+ const e = fresh();
+ e.verifications.segmentsMatched -= 1; // allMatch left true on purpose: "All match" must still fail closed
+ expect(fillCounts('VE-01', copy['VE-01']!.plain, e)).toBeNull();
+ expect(fillCounts('X', 'The project checked all {matched}.', e)).toBeNull();
+ expect(fillCounts('X', '{matched} checked. All match.', e)).toBeNull();
+ });
+ it('an unknown placeholder is withheld, not printed', () => {
+ expect(fillCounts('X', 'got {nope}', fresh())).toBeNull();
+ });
+ it('ClaimBlock shows the scoped error, not the stale count, when data disagrees', () => {
+ const d = fresh();
+ d.verifications.segmentsMatched = 36;
+ d.verifications.allMatch = false;
+ const { container } = render(
+
+
+ ,
+ );
+ expect(container.querySelector('[data-claim-part="plain"]')).toBeNull();
+ expect(container.querySelector('[data-claim-part="withheld"]')).not.toBeNull();
+ expect(container.querySelector('[data-claim-part="developer"]')).toBeNull();
+ });
+});
+
+describe('shipped copy.json, filled from the shipped data, agrees with the ledger', () => {
+ const nums = (t: string) => new Set((t.match(/\d[\d,]*/g) ?? []).map((x) => x.replace(/,/g, '')));
+ it('every placeholder value appears as a literal number in that claim\'s ledger text', async () => {
+ const { ledger } = await import('../../src/content/ledger');
+ const d = fresh();
+ for (const [id, v] of Object.entries(copy)) {
+ const lc = ledger.claims.find((c) => c.id === id);
+ for (const t of Object.values(v)) {
+ const keys = [...t.matchAll(/\{(\w+)\}/g)].map((m) => m[1]!);
+ if (!keys.length) continue;
+ expect(lc, id).toBeTruthy();
+ const filled = fillCounts(id, t, d);
+ expect(filled, `${id}: ${t}`).not.toBeNull();
+ const lit = nums(`${lc!.plain} ${lc!.developer}`);
+ const tpl = t.split(/\{\w+\}/);
+ // value each placeholder took, recovered from the filled text
+ let rest = filled!;
+ for (let i = 0; i < keys.length; i++) {
+ rest = rest.slice(tpl[i]!.length);
+ const val = /^\d+/.exec(rest)![0];
+ expect(lit.has(val), `${id} {${keys[i]}}=${val} not in ledger text`).toBe(true);
+ rest = rest.slice(val.length);
+ }
+ }
+ }
+ });
+ it('templated claim ids are exactly OV-04, VE-01, VE-03, VE-07, VE-08', () => {
+ expect(Object.entries(copy).filter(([, v]) => Object.values(v).some((t) => /\{\w+\}/.test(t))).map(([id]) => id)).toEqual(['OV-04', 'VE-01', 'VE-03', 'VE-07', 'VE-08']);
+ });
+ it('fills detection-odds copy from site-data.json, not literals', () => {
+ const d = fresh();
+ const ve07 = fillCounts('VE-07', copy['VE-07']!.plain, d)!;
+ expect(ve07).toContain(`${d.chain.segments} segments`);
+ expect(ve07).toContain(`${d.odds.m95} independent random checks`);
+ expect(fillCounts('VE-08', copy['VE-08']!.plain, d)).toContain(`${d.odds.m99} independent random checks`);
+ });
+});
diff --git a/frontend/tests/unit/format.test.ts b/frontend/tests/unit/format.test.ts
new file mode 100644
index 00000000..715d40ea
--- /dev/null
+++ b/frontend/tests/unit/format.test.ts
@@ -0,0 +1,29 @@
+import { describe, expect, it } from 'vitest';
+import { formatValue } from '../../src/data/format';
+import { getPath } from '../../src/data/path';
+import { fresh } from './helpers';
+
+describe('formatValue', () => {
+ it('formats the odds the way the brief states them', () => {
+ const d = fresh();
+ expect(formatValue(d.odds.p95, 'pct2')).toBe('95.09%');
+ expect(formatValue(d.odds.p99, 'pct2')).toBe('99.02%');
+ });
+ it('formats integers, dates, hashes and lists', () => {
+ expect(formatValue(7232582, 'int')).toBe('7,232,582');
+ expect(formatValue('2026-10-20T14:38:43Z', 'utc')).toBe('20 Oct 2026, 14:38:43 UTC');
+ expect(formatValue('8de1d60065b1', 'short')).toBe('8de1d600…');
+ expect(formatValue([21], 'list')).toBe('21');
+ expect(formatValue(true, 'yesno')).toBe('yes');
+ });
+ it('refuses to format a missing value instead of printing "undefined"', () => {
+ expect(() => formatValue(undefined)).toThrow();
+ expect(() => formatValue('not a date', 'utc')).toThrow();
+ });
+ it('reads dotted paths including array indexes and length', () => {
+ const d = fresh();
+ expect(getPath(d, 'events.0.segment')).toBe(10);
+ expect(getPath(d, 'hardware.length')).toBe(5);
+ expect(getPath(d, 'nope.deeper')).toBeUndefined();
+ });
+});
diff --git a/frontend/tests/unit/helpers.ts b/frontend/tests/unit/helpers.ts
new file mode 100644
index 00000000..9e250a55
--- /dev/null
+++ b/frontend/tests/unit/helpers.ts
@@ -0,0 +1,9 @@
+import { readFileSync } from 'node:fs';
+import path from 'node:path';
+import { createHash } from 'node:crypto';
+import type { SiteData } from '../../src/data/types';
+
+export const sha = (s: string) => createHash('sha256').update(s).digest('hex');
+const RAW = readFileSync(path.resolve(__dirname, '../../public/data/site-data.json'), 'utf8');
+/** A fresh deep copy of the real, committed site-data.json for each test. */
+export const fresh = (): SiteData => JSON.parse(RAW) as SiteData;
diff --git a/frontend/tests/unit/ledger.test.ts b/frontend/tests/unit/ledger.test.ts
new file mode 100644
index 00000000..590f079c
--- /dev/null
+++ b/frontend/tests/unit/ledger.test.ts
@@ -0,0 +1,92 @@
+import { describe, expect, it } from 'vitest';
+import { bannedIn, buildClaim, claim, claims, copy, ledger, numbersIn, ui, whoChecked } from '../../src/content/ledger';
+import { auditClaims, KNOWN_ISSUES, numberUniverse, unsupportedNumbers } from '../../src/content/audit';
+import { fresh } from './helpers';
+
+describe('claim ledger', () => {
+ it('renders only ALLOWED claims (71 of 74)', () => {
+ expect(ledger.claims).toHaveLength(74);
+ expect(claims.size).toBe(71);
+ for (const id of ['VE-05', 'UN-01', 'UN-02']) expect(() => claim(id)).toThrow(/not an ALLOWED/);
+ });
+
+ it('uses the Open Source Ops headline for every allowed claim', () => {
+ for (const c of claims.values()) expect(c.plain).toBe(copy[c.id]?.plain);
+ });
+
+ it('falls back to the ledger line when no copy exists (copy can be swapped)', () => {
+ const raw = ledger.claims.find((c) => c.id === 'OV-01')!;
+ expect(buildClaim(raw, {}).plain).toBe(raw.plain);
+ expect(buildClaim(raw, { 'OV-01': { plain: 'Swapped.' } }).plain).toBe('Swapped.');
+ });
+
+ it('never marks a check as independent (there are none in the pinned data)', () => {
+ for (const c of ledger.claims) expect(whoChecked(c)).not.toBe('independent');
+ expect(claim('VE-04').who).toBe('project');
+ expect(claim('OV-05').who).toBe('project');
+ });
+
+ it('passes the full audit: sources, banned phrases, numbers, verbatim commands', () => {
+ expect(auditClaims(fresh())).toEqual([]);
+ });
+
+ it('keeps the known-issue list exact, so a new unsupported number fails', () => {
+ const found = unsupportedNumbers(fresh()).map((u) => `${u.id}:${u.number}`);
+ expect(found).toEqual(KNOWN_ISSUES.map((u) => `${u.id}:${u.number}`));
+ });
+
+ it('flags a number that is not in the sources or the data', () => {
+ const d = fresh();
+ d.claimSources['OV-01'] = d.claimSources['OV-01']!.map((s) => ({ ...s, text: '', quote: '' }));
+ d.model.millionParameters = 24;
+ expect(auditClaims(d).some((e) => e.startsWith('OV-01'))).toBe(true);
+ });
+
+ it('flags a claim with no source', () => {
+ const d = fresh();
+ delete d.claimSources['VE-03'];
+ expect(auditClaims(d)).toContain('VE-03: no source');
+ });
+
+ it('does not treat digits that only live inside a sha256 as a number universe', () => {
+ const d = fresh();
+ const before = numberUniverse(d);
+ d.downloads[0]!.files[0]!.sha256 = 'aaa888aaa888aaa888aaa888aaa888aaa888aaa888aaa888aaa888aaa888aaa8';
+ expect(numberUniverse(d).has('888')).toBe(before.has('888'));
+ });
+
+ it('does not ship machine paths in source_roots', () => {
+ expect(JSON.stringify(ledger)).not.toMatch(/\/home\/box|\/workspace\//);
+ });
+});
+
+describe('banned phrases', () => {
+ it.each(ledger.forbidden_phrases.map((b) => [b.phrase]))('catches "%s"', (phrase) => {
+ expect(bannedIn(`Some text with ${phrase} in it`).length).toBeGreaterThan(0);
+ });
+ it('applies the ledger exceptions', () => {
+ expect(bannedIn('release/unlearning-3i-atlas/release-hashes.txt')).toEqual([]);
+ expect(bannedIn('about US$1–1.50 rented')).toEqual([]);
+ expect(bannedIn('Signed results are on the roadmap.')).toEqual([]);
+ });
+ it('enforces the brief wording rules', () => {
+ expect(bannedIn('We checked it')).toContain('bare "we"');
+ expect(bannedIn('after 100 training steps')).toContain('say "segments", not "steps"');
+ expect(bannedIn('segment 8 matched on a fresh machine')).toContain('segment 8 is not in the pinned data');
+ expect(bannedIn('an independent fresh machine')).toContain('the fresh machine is not independent');
+ });
+ it('finds none in UI labels', () => {
+ for (const v of Object.values(ui)) expect(bannedIn(v)).toEqual([]);
+ });
+});
+
+describe('numbersIn', () => {
+ it('keeps thousands separators and splits lists', () => {
+ expect(numbersIn('7,118,121,139 targets; segments (30,31) and 3.3860')).toEqual(['7118121139', '30', '31', '3.3860']);
+ });
+ it('does not split a git sha into quantities', () => {
+ expect(numbersIn('pinned to revision 96dc282a')).toEqual([]);
+ expect(numbersIn('142,815,808 bytes sha256 541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de')).toEqual(['142815808']);
+ expect(numbersIn('sha256 8de1d600…ba68')).toEqual([]);
+ });
+});
diff --git a/frontend/tests/unit/logo.test.ts b/frontend/tests/unit/logo.test.ts
new file mode 100644
index 00000000..7d714ea2
--- /dev/null
+++ b/frontend/tests/unit/logo.test.ts
@@ -0,0 +1,18 @@
+import { describe, expect, it } from 'vitest';
+import { readFileSync } from 'node:fs';
+import path from 'node:path';
+
+const root = path.resolve(__dirname, '../..');
+const mark = 'M8 2H24A6 6 0 0 1 30 8V17.25H23.5V10.45';
+
+describe('approved OpenVerifiableLLM mark', () => {
+ it('ships the C-gate in public/logo.svg and favicon.svg', () => {
+ for (const name of ['logo.svg', 'favicon.svg']) {
+ const svg = readFileSync(path.join(root, 'public', name), 'utf8');
+ expect(svg).toContain(mark);
+ expect(svg).toContain('#00843D');
+ expect(svg).toContain('#FFCD00');
+ expect(svg).not.toContain('shape-rendering="crispEdges"');
+ }
+ });
+});
diff --git a/frontend/tests/unit/prerender-replace.test.ts b/frontend/tests/unit/prerender-replace.test.ts
new file mode 100644
index 00000000..68e5bb15
--- /dev/null
+++ b/frontend/tests/unit/prerender-replace.test.ts
@@ -0,0 +1,13 @@
+import { describe, expect, it } from 'vitest';
+
+const marker = '
';
+
+describe('prerender replacements', () => {
+ it('keeps $& and $\' in inserted HTML when the replacer is a function', () => {
+ const template = `head${marker}tail`;
+ const app = "cost $& and $'";
+ const want = `head${app}
tail`;
+ expect(template.replace(marker, `${app}
`)).not.toBe(want);
+ expect(template.replace(marker, () => `${app}
`)).toBe(want);
+ });
+});
diff --git a/frontend/tests/unit/static-server.test.ts b/frontend/tests/unit/static-server.test.ts
new file mode 100644
index 00000000..66a68215
--- /dev/null
+++ b/frontend/tests/unit/static-server.test.ts
@@ -0,0 +1,28 @@
+import { describe, expect, it } from 'vitest';
+import { readFileSync } from 'node:fs';
+import path from 'node:path';
+
+const src = readFileSync(path.resolve(__dirname, '../../scripts/static-server.mjs'), 'utf8');
+
+function contained(root: string, file: string): boolean {
+ const rel = path.relative(root, file);
+ return rel === '' || (!rel.startsWith('..') && !path.isAbsolute(rel));
+}
+
+describe('static-server path containment', () => {
+ const root = path.resolve('/x/dist');
+ it('allows files inside dist', () => {
+ expect(contained(root, path.resolve('/x/dist/index.html'))).toBe(true);
+ expect(contained(root, root)).toBe(true);
+ });
+ it('rejects a sibling such as dist-ssr', () => {
+ expect(contained(root, path.resolve('/x/dist-ssr/entry.js'))).toBe(false);
+ expect(contained(root, path.resolve('/x/dist2/index.html'))).toBe(false);
+ });
+ it('is the function the server exports', () => {
+ expect(src).toContain('export function contained(root, file)');
+ expect(src).toContain('path.relative(root, file)');
+ expect(src).toMatch(/!rel\.startsWith\('\.\.'\)/);
+ expect(src).toContain('fileURLToPath(import.meta.url)');
+ });
+});
diff --git a/frontend/tests/unit/theme.test.ts b/frontend/tests/unit/theme.test.ts
new file mode 100644
index 00000000..668c738d
--- /dev/null
+++ b/frontend/tests/unit/theme.test.ts
@@ -0,0 +1,49 @@
+import { afterEach, describe, expect, it } from 'vitest';
+import { applyStoredTheme, isTheme, readTheme, THEME_COLOR, THEME_KEY, writeTheme } from '../../src/theme';
+
+afterEach(() => {
+ localStorage.removeItem(THEME_KEY);
+ document.documentElement.removeAttribute('data-theme');
+ document.documentElement.style.colorScheme = '';
+});
+
+describe('theme', () => {
+ it('accepts only light and dark', () => {
+ expect(isTheme('light')).toBe(true);
+ expect(isTheme('dark')).toBe(true);
+ expect(isTheme('system')).toBe(false);
+ expect(isTheme('