diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml
new file mode 100644
index 00000000..02a3eafa
--- /dev/null
+++ b/.github/workflows/frontend.yml
@@ -0,0 +1,57 @@
+name: Frontend CI
+
+on:
+ push:
+ branches: [main]
+ pull_request:
+
+permissions:
+ contents: read
+
+jobs:
+ frontend-test:
+ name: Frontend Tests & Verification
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: frontend
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ persist-credentials: false
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 22
+ cache: npm
+ cache-dependency-path: frontend/package-lock.json
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Typecheck
+ run: npm run typecheck
+
+ - name: Unit and validator tests
+ run: npm test
+
+ - name: Build static site
+ run: npm run build
+
+ - name: Install Playwright Chromium
+ run: npx playwright install --with-deps chromium
+
+ - name: Playwright E2E and A11y tests
+ run: npx playwright test
+ env:
+ CI: "true"
+
+ - name: Upload Playwright report on failure
+ uses: actions/upload-artifact@v4
+ if: failure()
+ with:
+ name: playwright-report
+ path: frontend/playwright-report/
+ retention-days: 7
diff --git a/frontend/.gitignore b/frontend/.gitignore
new file mode 100644
index 00000000..a3619a7d
--- /dev/null
+++ b/frontend/.gitignore
@@ -0,0 +1,9 @@
+node_modules
+dist
+.vite
+*.local
+.DS_Store
+test-results
+playwright-report
+blob-report
+playwright/.cache
diff --git a/frontend/README.md b/frontend/README.md
new file mode 100644
index 00000000..dbe63a3e
--- /dev/null
+++ b/frontend/README.md
@@ -0,0 +1,45 @@
+# OpenVerifiableLLM Frontend (Site v3)
+
+Static single-page project site for OpenVerifiableLLM, presenting real bit-for-bit training verification evidence from Hugging Face revision `96dc282a`.
+
+## Overview
+
+- **Single-page navigation**: Evidence-first landing page with section anchors (`#check`, `#verification`, `#timeline`, `#exclusion`, `#downloads`).
+- **Real evidence data**: Pinned Hugging Face dataset `AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence` at revision `96dc282a`.
+- **Prebuild validation**: `npm run build` runs `prebuild` (`npm run validate`), failing closed if any data contract or hash link is violated.
+- **Accessible design**: WCAG 2.2 AA compliant, zero axe violations across themes (dark default, light opt-in) and viewports.
+- **Offline bundle**: System fonts only (no web fonts), embedded SVG brand assets, and zero runtime external CDN dependencies.
+
+## Commands
+
+```bash
+cd frontend
+npm ci
+npm run dev # start local development server at http://127.0.0.1:5173
+npm run typecheck # verify TypeScript types (tsc -b --noEmit)
+npm test # run Vitest suite (validation, copy lint, components)
+npm run build # validate evidence and build static output to dist/
+npm run preview # preview production build locally
+```
+
+## Structure
+
+```
+frontend/
+├── public/
+│ ├── brand/ # Segment check SVGs (logo-dark, logo-light, favicon, app-icon, aossie-logo)
+│ └── data/ # evidence.json (pinned data committed for offline validation)
+├── scripts/
+│ └── fetch-evidence.mjs # Manual script to fetch and assemble snapshot from Hugging Face
+├── src/
+│ ├── components/ # React components (Hero, Overview, CheckLadder, Verification, TrainingTimeline, etc.)
+│ ├── content/ # copy.ts (single source of truth for text and copy linting)
+│ ├── data/ # contracts.ts and validate.ts (strict schemas, invariant validator)
+│ └── styles/ # tokens.css (color tokens and ratios) and base.css (typography and layouts)
+└── tests/
+ ├── browser/ # Playwright + axe-core accessibility and interaction test suite
+ ├── fixtures/ # Corrupted evidence fixtures for fail-closed validation tests
+ ├── components.test.tsx
+ ├── copy-lint.test.ts
+ └── validate.test.ts
+```
diff --git a/frontend/index.html b/frontend/index.html
new file mode 100644
index 00000000..492b18c1
--- /dev/null
+++ b/frontend/index.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+ OpenVerifiableLLM
+
+
+
+
+
+
+
+
+
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
new file mode 100644
index 00000000..9ca653b4
--- /dev/null
+++ b/frontend/package-lock.json
@@ -0,0 +1,3199 @@
+{
+ "name": "openverifiablellm-frontend",
+ "version": "0.1.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "openverifiablellm-frontend",
+ "version": "0.1.0",
+ "dependencies": {
+ "react": "^19.1.1",
+ "react-dom": "^19.1.1"
+ },
+ "devDependencies": {
+ "@axe-core/playwright": "^4.14.0",
+ "@playwright/test": "^1.63.0",
+ "@testing-library/jest-dom": "^7.0.1",
+ "@testing-library/react": "^16.3.0",
+ "@testing-library/user-event": "^14.6.1",
+ "@types/node": "^26.6.6",
+ "@types/react": "^19.1.12",
+ "@types/react-dom": "^19.1.9",
+ "@vitejs/plugin-react": "^5.0.2",
+ "jsdom": "^26.1.0",
+ "typescript": "~5.9.2",
+ "vite": "^7.1.5",
+ "vitest": "^3.2.4"
+ }
+ },
+ "node_modules/@adobe/css-tools": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.5.0.tgz",
+ "integrity": "sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@asamuzakjp/css-color": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz",
+ "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/css-calc": "^2.1.3",
+ "@csstools/css-color-parser": "^3.0.9",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "lru-cache": "^10.4.3"
+ }
+ },
+ "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "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.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
+ "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.7",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
+ "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz",
+ "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.8"
+ },
+ "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.7",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz",
+ "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==",
+ "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.8",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz",
+ "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==",
+ "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.8",
+ "@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.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@csstools/color-helpers": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz",
+ "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@csstools/css-calc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz",
+ "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-color-parser": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz",
+ "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/color-helpers": "^5.1.0",
+ "@csstools/css-calc": "^2.1.4"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-parser-algorithms": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz",
+ "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-tokenizer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz",
+ "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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/@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.63.0",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.63.0.tgz",
+ "integrity": "sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright": "1.63.0"
+ },
+ "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.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.4.tgz",
+ "integrity": "sha512-I+BSHzTAhKN2n7ZwGZsegGcZjDpLqFOMAtJz/u6uFGe0pUFbq56dEHjqJV/ZUdRJtNXNxA+hREUatZBvMR3Oiw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.4.tgz",
+ "integrity": "sha512-pu3BdjS2LtEzRu2elmGzS3fIeWSZy4BMDIaLNwjorO76+k2d0LMluijhsDx3KQyQBQ/lLUZCQA9/s6csvUfuhw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.4.tgz",
+ "integrity": "sha512-xfSrj9MHnWK9GaSqT9U0ImHtH/N8WZlHLx4cZHiuLcqs640hvZ3hLPd5UR2AZS57FaE8HrRUSpltbZdWRxHiDA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.4.tgz",
+ "integrity": "sha512-bqU99PLJb/dqb3S0GIMdeuyAEETSUgZBoqXYd3Sd+WCsV+MmPhnN6JrotWyir31+QgH7EvvE5/mwGJlEoci8Fw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.4.tgz",
+ "integrity": "sha512-JinsFZ5G40oXQb+sUuiA5x689vhr6dDYK0H0NL+rwKdL6CqnmYN8PE4ZwfRSoIjrCxqTQG/SLfTtSvHeGxoVlw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.4.tgz",
+ "integrity": "sha512-GAdA4UxpiNm27cLHr2GqXBpAD0x9FqwYBY7/YSP0Ss0/PNi4k8gbviqpIpYbVSRBaS2ZcegXEzgTQMbRNCwxCw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.4.tgz",
+ "integrity": "sha512-qDd6NoA1znaLjp4jR5U/KWCdLAKDJNB8W9ChbbDaKbo0xA+Atln5HK6LFCZ4oJQpemtRZA288DCirFRjrspptw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.4.tgz",
+ "integrity": "sha512-WtB5Tz5KTNINb8ZA+8sQ7bmjuS1JrRT7YverYIhUGdWWDlpzVWmIwuZE+jidkEXUn1l0zrEkaIMa8dHF3NGcsA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.4.tgz",
+ "integrity": "sha512-VcQ3L1tjnkKzWjryAVaFhHEWcqOfICX9uxVVoDzm2t0DpgKRHd2zOpVrJc0xsWeBZcBFyYROCIBdyR/fS174pg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.4.tgz",
+ "integrity": "sha512-6+ZQX6P5s0cMDN2Ypb8Lbm2+/sZYmZjdaYny992ujUU9UKi/4CWoJWsl1pNvjWJHNHGK51m+jKGLlh1ylb2ifQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.4.tgz",
+ "integrity": "sha512-D72ZnvkFkBXOfzMMQLcwfPLyGkKb7HZ9/mf97B7v6/P5Lbv4oFOtSY/uHbS8lH6uKUOxoKiuokdb50XZSzzbJw==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.4.tgz",
+ "integrity": "sha512-piU6BxeqA3O9KSu3kRCIQQtNqFFaTu21SEV4FwaRZowpnj3bLaWPZHw+xFqCs0XlJ+aOH3PTRWGoglH+mKA/OA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.4.tgz",
+ "integrity": "sha512-/5PGpHwqt2EEEOUs1XwzubE/ucr0dWDQ+to3zqi4Ds7EWpwtQ79wXc4JBoxqj/OwpawTsKWzJxHfSuBOq3DrWA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.4.tgz",
+ "integrity": "sha512-cX3beZDLWt7G2oJF+nhChiT+qtaihs+S2xi7ziGmVB+2pwPng6D0Ed0HmElQOgv2UsUmSJJLGwpBao/3TDx3VA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.4.tgz",
+ "integrity": "sha512-1uz2mGWHyptR7DgHHrlbdRAjXK7v7elGZ9lMja910/RP+ZYbX6xAmCiU9UZSX4hqmgtHMv6lr5l3kq1HIOpcag==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.4.tgz",
+ "integrity": "sha512-nLS8topojxyz7SRpKR2IODRpQ0XPZ+xaOXvT3+hqK/Uy8Lo5HFgkkIBiIrCu5tL5YqzTvgovGw55PwpahTAGig==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.4.tgz",
+ "integrity": "sha512-gs7DRKotr3l3q+jGPQBjH0ng1FjlEDm5ueQrkw5JtQvtLyEIcLASqAEaor56BhkKRzk+IcQzrcanBdb/bBQn8g==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.4.tgz",
+ "integrity": "sha512-791ET7W17NnScOZM7h4dX5hYspxE28htPFsb1awY/NRR8+PRNkS53e475rDdxXXDrP+kwnCcNWg9CX5ztn/Aqw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.4.tgz",
+ "integrity": "sha512-iwZQRcmj7g88g3tzefIrQY7qvmuA/cfYwhrDtTBhsmukO4U2huVO5W+86XacUMRvdSFVAc6kZUZy21JaRwiB9w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.4.tgz",
+ "integrity": "sha512-dVHFp9gRWrdTpnqQuGfCwd7hOQDatK1VCP2iWhLY/cGrOQs/ucFzJ6A5SRqbXX12ZDI8EUuejSM5kwg+ja7Png==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.4.tgz",
+ "integrity": "sha512-t3NlauOW6gxZVVFcBEnO62Cb4wbyDFL416gTg1uFI/2tgqYQlf69FbSE115Ajre9I+c26Lk4mcmdFUsS/DGifQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.4.tgz",
+ "integrity": "sha512-xWuIaSye5FWZF8+UYtVEcHtRJDN5kN9Kfgxx3Kq8XIov9KSKbc1fiqQCm90SKrgQbUXZelbnUhnlUJmfSE7P9A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.4.tgz",
+ "integrity": "sha512-9ALJJUOg/ZflMJepVo2PlgsGxSaxN7SQ4Z8GoZfVlarWr6r3rkHUNsd/zAio7p4YMtChSMXPionxej4Hkf6CXQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.4.tgz",
+ "integrity": "sha512-blj9z5qx/Pv4WU0W1NMFDB97e0JH5ed+aZGywW8WCvp/NhWX/4PFAq5uu6Q0AebNn+Vo6KzUYDT++JzTT5ojlQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.4.tgz",
+ "integrity": "sha512-Erx822VRBwLa124shbj+wNXe//BOgMEctDV0m1aqTQdNO1S69DgNUCFKC1RCeZfixs1J31l6igk1ziyXErbigQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "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",
+ "peer": true,
+ "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/jest-dom": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-7.0.1.tgz",
+ "integrity": "sha512-oMDTC3oA+6CXSO2JZnvOI7CA6oVub6kij5ggk9ohwye5slmkwxYDXcPOVxgMw/RQlticjtO0C1RZkR97HgrWMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@adobe/css-tools": "^4.4.0",
+ "aria-query": "^5.0.0",
+ "css.escape": "^1.5.1",
+ "dom-accessibility-api": "^0.6.3",
+ "picocolors": "^1.1.1",
+ "redent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=22",
+ "npm": ">=6",
+ "yarn": ">=1"
+ },
+ "peerDependencies": {
+ "@testing-library/dom": ">=10 <11",
+ "vitest": ">= 0.32"
+ },
+ "peerDependenciesMeta": {
+ "vitest": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz",
+ "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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/@testing-library/user-event": {
+ "version": "14.6.7",
+ "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.7.tgz",
+ "integrity": "sha512-MPCpX8bxe8zS+JmmTwLp8jd0dy1rAm60Te/SL8JrQM3qvQJcBOs1d7IefJMyZzqM3EWBrDn/LWDt1BCGu4ASfg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ },
+ "peerDependencies": {
+ "@testing-library/dom": ">=7.21.4"
+ }
+ },
+ "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",
+ "peer": true
+ },
+ "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.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/@types/node": {
+ "version": "26.6.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.6.tgz",
+ "integrity": "sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~8.9.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/@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": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.7.tgz",
+ "integrity": "sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/chai": "^5.2.2",
+ "@vitest/spy": "3.2.7",
+ "@vitest/utils": "3.2.7",
+ "chai": "^5.2.0",
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/mocker": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.7.tgz",
+ "integrity": "sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/spy": "3.2.7",
+ "estree-walker": "^3.0.3",
+ "magic-string": "^0.30.17"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "msw": "^2.4.9",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "msw": {
+ "optional": true
+ },
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vitest/pretty-format": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.7.tgz",
+ "integrity": "sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/runner": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.7.tgz",
+ "integrity": "sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/utils": "3.2.7",
+ "pathe": "^2.0.3",
+ "strip-literal": "^3.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/snapshot": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.7.tgz",
+ "integrity": "sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "3.2.7",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/spy": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.7.tgz",
+ "integrity": "sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyspy": "^4.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/utils": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.7.tgz",
+ "integrity": "sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "3.2.7",
+ "loupe": "^3.1.4",
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "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",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "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/baseline-browser-mapping": {
+ "version": "2.11.25",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.25.tgz",
+ "integrity": "sha512-gMmEShwwq7FJqMwvfRwvCl00v4kN+KOfJqXn+f4nrufak5gNHJOksd/60Dvjuz7sI8Y5WiSFBa8FEYr+zoyqCw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.29.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.0.tgz",
+ "integrity": "sha512-3GSvyjvDI4Dur1Meg2BekJquu5uF+9R9a1+5M1Mde192eZoXbeXjzgOsgqPS2V8D5wrrip0gR5Hf/GhWQ9ZzaA==",
+ "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.23",
+ "caniuse-lite": "^1.0.30001810",
+ "electron-to-chromium": "^1.5.427",
+ "node-releases": "^2.0.55",
+ "update-browserslist-db": "^1.3.3"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "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/caniuse-lite": {
+ "version": "1.0.30001810",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz",
+ "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==",
+ "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": "5.3.3",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz",
+ "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assertion-error": "^2.0.1",
+ "check-error": "^2.1.1",
+ "deep-eql": "^5.0.1",
+ "loupe": "^3.1.0",
+ "pathval": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/check-error": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz",
+ "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ }
+ },
+ "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/css.escape": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
+ "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cssstyle": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz",
+ "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@asamuzakjp/css-color": "^3.2.0",
+ "rrweb-cssom": "^0.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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/data-urls": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
+ "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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/decimal.js": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
+ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/deep-eql": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
+ "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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",
+ "peer": true
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.433",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.433.tgz",
+ "integrity": "sha512-5lCAbyZBjtmUt/RAGHRqrL2q0oEFRThDAsZHHDn9XHa89Qw7gMYOeSicBTy+AHfvo0r6vwsZvqNJTQIQy1BLzA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/entities": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+ "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/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/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/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/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/html-encoding-sniffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
+ "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-encoding": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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/jsdom": {
+ "version": "26.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssstyle": "^4.2.1",
+ "data-urls": "^5.0.0",
+ "decimal.js": "^10.5.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.6",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.16",
+ "parse5": "^7.2.1",
+ "rrweb-cssom": "^0.8.0",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^5.1.1",
+ "w3c-xmlserializer": "^5.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.1.1",
+ "ws": "^8.18.0",
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "canvas": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
+ "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/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/loupe": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz",
+ "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==",
+ "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",
+ "peer": true,
+ "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/min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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.19",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz",
+ "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==",
+ "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/node-releases": {
+ "version": "2.0.56",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.56.tgz",
+ "integrity": "sha512-x0InOIyzgdk+eyaWaRJFH5snEtiImgBgblZ2CyPrLmqqcuMQkEvcDPHbzqbD8eDsSeJbVOjn+crzyzHaM4D+/A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/nwsapi": {
+ "version": "2.2.28",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.28.tgz",
+ "integrity": "sha512-IlVB7OS7qrOsVYlpnFIkETjMwT9jwvmocJmmM+GZU/PAB3uGi9Ezd7vcWhWBUnSc0ya4ppmQITOyP1ez9gg8cg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/parse5": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "entities": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "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/pathval": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz",
+ "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.16"
+ }
+ },
+ "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.63.0",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz",
+ "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright-core": "1.63.0"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/playwright-core": {
+ "version": "1.63.0",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz",
+ "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "playwright-core": "cli.js"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.28",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz",
+ "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==",
+ "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.18",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "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",
+ "peer": true,
+ "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/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.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz",
+ "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "19.3.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz",
+ "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==",
+ "license": "MIT",
+ "dependencies": {
+ "scheduler": "^0.28.0"
+ },
+ "peerDependencies": {
+ "react": "^19.3.0"
+ }
+ },
+ "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",
+ "peer": true
+ },
+ "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/redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.63.4",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.4.tgz",
+ "integrity": "sha512-4U0liVayNIoLp3GFl1FcI8561WepLnZ1rqfraGh7S9B3Ur5F9S283y8Futii7RUU2C/97tOBmBy7nYvhoiOpbQ==",
+ "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.63.4",
+ "@rollup/rollup-android-arm64": "4.63.4",
+ "@rollup/rollup-darwin-arm64": "4.63.4",
+ "@rollup/rollup-darwin-x64": "4.63.4",
+ "@rollup/rollup-freebsd-arm64": "4.63.4",
+ "@rollup/rollup-freebsd-x64": "4.63.4",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.63.4",
+ "@rollup/rollup-linux-arm-musleabihf": "4.63.4",
+ "@rollup/rollup-linux-arm64-gnu": "4.63.4",
+ "@rollup/rollup-linux-arm64-musl": "4.63.4",
+ "@rollup/rollup-linux-loong64-gnu": "4.63.4",
+ "@rollup/rollup-linux-loong64-musl": "4.63.4",
+ "@rollup/rollup-linux-ppc64-gnu": "4.63.4",
+ "@rollup/rollup-linux-ppc64-musl": "4.63.4",
+ "@rollup/rollup-linux-riscv64-gnu": "4.63.4",
+ "@rollup/rollup-linux-riscv64-musl": "4.63.4",
+ "@rollup/rollup-linux-s390x-gnu": "4.63.4",
+ "@rollup/rollup-linux-x64-gnu": "4.63.4",
+ "@rollup/rollup-linux-x64-musl": "4.63.4",
+ "@rollup/rollup-openbsd-x64": "4.63.4",
+ "@rollup/rollup-openharmony-arm64": "4.63.4",
+ "@rollup/rollup-win32-arm64-msvc": "4.63.4",
+ "@rollup/rollup-win32-ia32-msvc": "4.63.4",
+ "@rollup/rollup-win32-x64-gnu": "4.63.4",
+ "@rollup/rollup-win32-x64-msvc": "4.63.4",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rrweb-cssom": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/saxes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "xmlchars": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=v12.22.7"
+ }
+ },
+ "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/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.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "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": "3.10.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz",
+ "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-literal": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz",
+ "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^9.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/strip-literal/node_modules/js-tokens": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
+ "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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": "0.3.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
+ "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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/tinypool": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-2.2.0.tgz",
+ "integrity": "sha512-jBrmx4lYmaC9k/mgPbylxs7kBUxHtD8256up+HjLaDFfXScKJQyil+SWXSvhAtT7XHo+yTVlpB81PGmHP8oLSQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^20.0.0 || >=22.0.0"
+ }
+ },
+ "node_modules/tinyrainbow": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz",
+ "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tinyspy": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.6.tgz",
+ "integrity": "sha512-u8KszXvGfU68hVcZpRHKG28T0krMuv2G5nDhiHaMLen/gIuFEgIJhaJuO69qjnXg5paSrbPMFfx3brNuN8eVSg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tldts": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
+ "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tldts-core": "^6.1.86"
+ },
+ "bin": {
+ "tldts": "bin/cli.js"
+ }
+ },
+ "node_modules/tldts-core": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
+ "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tough-cookie": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
+ "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tldts": "^6.1.32"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
+ "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz",
+ "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz",
+ "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==",
+ "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/vite": {
+ "version": "7.3.6",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz",
+ "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==",
+ "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": "3.2.7",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.7.tgz",
+ "integrity": "sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/chai": "^5.2.2",
+ "@vitest/expect": "3.2.7",
+ "@vitest/mocker": "3.2.7",
+ "@vitest/pretty-format": "^3.2.7",
+ "@vitest/runner": "3.2.7",
+ "@vitest/snapshot": "3.2.7",
+ "@vitest/spy": "3.2.7",
+ "@vitest/utils": "3.2.7",
+ "chai": "^5.2.0",
+ "debug": "^4.4.1",
+ "expect-type": "^1.2.1",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.2",
+ "std-env": "^3.9.0",
+ "tinybench": "^2.9.0",
+ "tinyexec": "^0.3.2",
+ "tinyglobby": "^0.2.14",
+ "tinypool": "^1.1.1",
+ "tinyrainbow": "^2.0.0",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
+ "vite-node": "3.2.4",
+ "why-is-node-running": "^2.3.0"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@types/debug": "^4.1.12",
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "@vitest/browser": "3.2.7",
+ "@vitest/ui": "3.2.7",
+ "happy-dom": "*",
+ "jsdom": "*"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@types/debug": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@vitest/browser": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/w3c-xmlserializer": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
+ "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/whatwg-encoding": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-mimetype": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-url": {
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
+ "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tr46": "^5.1.0",
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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/ws": {
+ "version": "8.21.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz",
+ "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==",
+ "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/xml-name-validator": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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"
+ }
+ }
+}
diff --git a/frontend/package.json b/frontend/package.json
new file mode 100644
index 00000000..badeff1f
--- /dev/null
+++ b/frontend/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "openverifiablellm-frontend",
+ "private": true,
+ "version": "0.1.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc -b && vite build",
+ "preview": "vite preview",
+ "typecheck": "tsc -b --noEmit",
+ "test": "vitest run",
+ "e2e": "playwright test",
+ "fetch-evidence": "node scripts/fetch-evidence.mjs",
+ "validate": "vitest run tests/validate.test.ts",
+ "prebuild": "npm run validate"
+ },
+ "dependencies": {
+ "react": "^19.1.1",
+ "react-dom": "^19.1.1"
+ },
+ "devDependencies": {
+ "@axe-core/playwright": "^4.14.0",
+ "@playwright/test": "^1.63.0",
+ "@testing-library/jest-dom": "^7.0.1",
+ "@testing-library/react": "^16.3.0",
+ "@testing-library/user-event": "^14.6.1",
+ "@types/node": "^26.6.6",
+ "@types/react": "^19.1.12",
+ "@types/react-dom": "^19.1.9",
+ "@vitejs/plugin-react": "^5.0.2",
+ "jsdom": "^26.1.0",
+ "typescript": "~5.9.2",
+ "vite": "^7.1.5",
+ "vitest": "^3.2.4"
+ },
+ "overrides": {
+ "tinypool": "^2.1.2"
+ }
+}
diff --git a/frontend/playwright.config.ts b/frontend/playwright.config.ts
new file mode 100644
index 00000000..083d512b
--- /dev/null
+++ b/frontend/playwright.config.ts
@@ -0,0 +1,20 @@
+import { defineConfig } from '@playwright/test';
+
+export default defineConfig({
+ testDir: './tests/browser',
+ fullyParallel: false,
+ workers: 1,
+ timeout: 60000,
+ use: {
+ baseURL: 'http://127.0.0.1:4173',
+ channel: process.env.CI ? undefined : (process.platform === 'win32' ? 'chrome' : undefined),
+ trace: 'retain-on-failure',
+ },
+ reporter: [['list'], ['html', { open: 'never' }]],
+ webServer: {
+ command: 'npx vite preview --port 4173 --host 127.0.0.1',
+ url: 'http://127.0.0.1:4173',
+ reuseExistingServer: !process.env.CI,
+ timeout: 30000,
+ },
+});
diff --git a/frontend/public/brand/aossie-logo.svg b/frontend/public/brand/aossie-logo.svg
new file mode 100644
index 00000000..76ccad89
--- /dev/null
+++ b/frontend/public/brand/aossie-logo.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/brand/app-icon.svg b/frontend/public/brand/app-icon.svg
new file mode 100644
index 00000000..cf0d7996
--- /dev/null
+++ b/frontend/public/brand/app-icon.svg
@@ -0,0 +1,5 @@
+
+ OpenVerifiableLLM
+
+
+
diff --git a/frontend/public/brand/favicon.svg b/frontend/public/brand/favicon.svg
new file mode 100644
index 00000000..cf0d7996
--- /dev/null
+++ b/frontend/public/brand/favicon.svg
@@ -0,0 +1,5 @@
+
+ OpenVerifiableLLM
+
+
+
diff --git a/frontend/public/brand/logo-dark.svg b/frontend/public/brand/logo-dark.svg
new file mode 100644
index 00000000..7925c5a2
--- /dev/null
+++ b/frontend/public/brand/logo-dark.svg
@@ -0,0 +1,5 @@
+
+ OpenVerifiableLLM
+
+
+
diff --git a/frontend/public/brand/logo-light.svg b/frontend/public/brand/logo-light.svg
new file mode 100644
index 00000000..20f4276c
--- /dev/null
+++ b/frontend/public/brand/logo-light.svg
@@ -0,0 +1,6 @@
+
+ OpenVerifiableLLM
+
+
+
+
diff --git a/frontend/public/data/evidence.json b/frontend/public/data/evidence.json
new file mode 100644
index 00000000..36d99984
--- /dev/null
+++ b/frontend/public/data/evidence.json
@@ -0,0 +1,1945 @@
+{
+ "schemaVersion": 1,
+ "dataset": "AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence",
+ "revision": "96dc282a",
+ "fetchedAt": "2026-10-30T15:32:03.178Z",
+ "sourceHashes": {
+ "release/simple-run/chain.jsonl": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "release/simple-run/verifications.jsonl": "ec73fe8fdce56eb075783c37383dbb5afaa23fac168fbd6619c01240de41b770",
+ "release/simple-run/hardware-map.jsonl": "5116f365398795a5e79513a3709d48995cc72a059ae9c69c653e324e723884e4",
+ "release/simple-run/release-hashes.txt": "479ce030fa8022f0f92262849f88dfde4c9cf2a0748b8830357f3aa277080e8d",
+ "release/simple-run/anchor.json": "2adaea4cae25439199ec2396c0e6e94d1d14188c070f217ed7e360ce10c1c18d",
+ "release/simple-run/README.md": "d3a4a5b221d9d1bd9318e8e414b44adc75f66155d03cd356b489165243e932e9",
+ "release/unlearning-3i-atlas/loo-results.json": "c926c965d1e040ab23c591c9dcdd007e5ece75a57ecfa100fd69515d190ead69",
+ "prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68"
+ },
+ "preparation": {
+ "articles": 7232582,
+ "wikipediaTargets": 7118121139,
+ "conversations": 3481,
+ "trainingLoopLines": "~630 lines",
+ "preparedDataId": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68"
+ },
+ "chain": [
+ {
+ "index": 0,
+ "kind": "initial",
+ "control": {
+ "batches": "10ea13010a13668c8bf9e2884e16bdbd16f8933d9bf4d09eda0c47459133eddb",
+ "cursor": 0,
+ "epoch": 0,
+ "global_step": 0,
+ "phase": "wikipedia",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "64041a4736bd76b64b149c2a784950a312fb19ed641c7eb87e7300c171d002fc",
+ "model": "2b167bcb407f94ac3f1dead8f316ea180823a1cb40489b8a1ff974bf2bcd959d",
+ "previous": null,
+ "time": 1792422250.861772,
+ "entryHash": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2"
+ },
+ {
+ "index": 1,
+ "kind": "progress",
+ "control": {
+ "batches": "e3f19a5269c4824fb1615d433b678fa54a6fc23ea99fd82c3e83f3f400f66809",
+ "cursor": 274561003,
+ "epoch": 0,
+ "global_step": 18080,
+ "phase": "wikipedia",
+ "phase_step": 18080,
+ "pos": [
+ 14363834,
+ 3072
+ ]
+ },
+ "state": "ef5090325fcf3c392503406ac2f7e6bd99118d267c38fbe4b624df41b48eca8f",
+ "model": "c32f02fac9e87d0c4279aa39a0fa06b5cc06d5b141d5ff29503cb8431c4ca180",
+ "previous": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2",
+ "time": 1792424215.6430938,
+ "entryHash": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f"
+ },
+ {
+ "index": 2,
+ "kind": "progress",
+ "control": {
+ "batches": "d5b199348b8d97e5a30ee2ea1a9bc465fd5dc0220a1a4297b4fa0716abdc84dc",
+ "cursor": 547313827,
+ "epoch": 0,
+ "global_step": 36160,
+ "phase": "wikipedia",
+ "phase_step": 36160,
+ "pos": [
+ 30161308,
+ 6656
+ ]
+ },
+ "state": "94e253d50adff230867baf0f9b2fbb247399b598511dd238cca10838439a228c",
+ "model": "29c055caaaefce12e962bb5905f79640bf7bcfc2dfe09070704f50a35e954868",
+ "previous": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f",
+ "time": 1792426181.1370955,
+ "entryHash": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789"
+ },
+ {
+ "index": 3,
+ "kind": "progress",
+ "control": {
+ "batches": "f520d10b29d43cbbe5556d887bd7e622a26ed3003eaa8677366993ed6a0965df",
+ "cursor": 812314162,
+ "epoch": 0,
+ "global_step": 54240,
+ "phase": "wikipedia",
+ "phase_step": 54240,
+ "pos": [
+ 50875269,
+ 0
+ ]
+ },
+ "state": "63f2f1cf69a97b295ef4924af836583cc5942d4cfdde34a0d68da658e9b56875",
+ "model": "bc0210cc1ce7eb55786921b9be9142224551daaa14a5a94b5851415d9954513f",
+ "previous": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789",
+ "time": 1792428164.4587104,
+ "entryHash": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37"
+ },
+ {
+ "index": 4,
+ "kind": "progress",
+ "control": {
+ "batches": "9b1c36b8b217b225ab637476b5f96e9d13723e8ff2f49474a1aff9fe4b6c6836",
+ "cursor": 1071169817,
+ "epoch": 0,
+ "global_step": 72320,
+ "phase": "wikipedia",
+ "phase_step": 72320,
+ "pos": [
+ 75821490,
+ 512
+ ]
+ },
+ "state": "38544968f3a1f342c17ee65afed30915acacf2131314c3254cfb1d3367acf0f6",
+ "model": "f6c1733d73e556de085fd9cb99f4137296f9ad7835fc3c88c9f8588cfeca0165",
+ "previous": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37",
+ "time": 1792430142.4307606,
+ "entryHash": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6"
+ },
+ {
+ "index": 5,
+ "kind": "progress",
+ "control": {
+ "batches": "0feb0c99169621a584609ce24a7ba1710f4dd1127205dae3911df09e1ab75698",
+ "cursor": 1326339931,
+ "epoch": 0,
+ "global_step": 90400,
+ "phase": "wikipedia",
+ "phase_step": 90400,
+ "pos": [
+ 103716532,
+ 512
+ ]
+ },
+ "state": "0f66051bfcf2b8512da505733cf9814527aba0412b28109071d9ebe1e7949165",
+ "model": "521f1f5f34c6a0992a15e539f1eab5f5590f5fdca15fdf16c60842c1d8612754",
+ "previous": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6",
+ "time": 1792432107.6645238,
+ "entryHash": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa"
+ },
+ {
+ "index": 6,
+ "kind": "progress",
+ "control": {
+ "batches": "dd5c823c56a28362db599fa09567143434f9f343784400622105200695fca78d",
+ "cursor": 1575735740,
+ "epoch": 0,
+ "global_step": 108480,
+ "phase": "wikipedia",
+ "phase_step": 108480,
+ "pos": [
+ 135269108,
+ 0
+ ]
+ },
+ "state": "d3f93a22ceb28a8640734ceca70e0217cf991b696807ecb6fdd31d318ad30aa8",
+ "model": "655aa1b3b7f5a34c9f0a2eba172ddbfef233acb3f121373e351b6d2cd982475f",
+ "previous": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa",
+ "time": 1792434050.5597794,
+ "entryHash": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a"
+ },
+ {
+ "index": 7,
+ "kind": "progress",
+ "control": {
+ "batches": "496333b0221dbc6a2edeeb9ea5318d3b33069b8f91c98d489cf742f70bab1d43",
+ "cursor": 1821662484,
+ "epoch": 0,
+ "global_step": 126560,
+ "phase": "wikipedia",
+ "phase_step": 126560,
+ "pos": [
+ 169162007,
+ 512
+ ]
+ },
+ "state": "228e635e6ee63fca5189f1af685f15c9d52a27527f300e7dac7a5ade82688e11",
+ "model": "ab677b66cfcc2d0652d37b5cc354e5d6980716b273cc99b78ae53f63e581ba14",
+ "previous": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a",
+ "time": 1792435994.2637668,
+ "entryHash": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc"
+ },
+ {
+ "index": 8,
+ "kind": "progress",
+ "control": {
+ "batches": "a009f3186720dd943c7c0e3c597706610370b795c3fd87b65df4ce8cdc54822d",
+ "cursor": 2062246462,
+ "epoch": 0,
+ "global_step": 144640,
+ "phase": "wikipedia",
+ "phase_step": 144640,
+ "pos": [
+ 206335253,
+ 0
+ ]
+ },
+ "state": "6cb7cf58b036f71d793b7940617d2756e4d24e906a8a4fdb6ec58ee56031ad53",
+ "model": "4419b42c7902c6f650e634055a1de54ca172e2a0a26c5bbad58ee8516cf4dfc6",
+ "previous": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc",
+ "time": 1792437967.4633026,
+ "entryHash": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae"
+ },
+ {
+ "index": 9,
+ "kind": "progress",
+ "control": {
+ "batches": "9f883e76562c687ddae51575bda5430cc91dbc45e57e7311d3646340a420a020",
+ "cursor": 2299429619,
+ "epoch": 0,
+ "global_step": 162720,
+ "phase": "wikipedia",
+ "phase_step": 162720,
+ "pos": [
+ 245609368,
+ 0
+ ]
+ },
+ "state": "0947a1b7cb257922ed1bb71e36059bdde1fa1c76509255c1af8cb3167bff72db",
+ "model": "967ff641117b62e0f4bbb19fda16cfb7a1b6c20adc35295ff0738a0664953048",
+ "previous": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae",
+ "time": 1792439938.9320748,
+ "entryHash": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43"
+ },
+ {
+ "index": 10,
+ "kind": "progress",
+ "control": {
+ "batches": "14ffdd92074c743ba35ff842d9d2956a29ff1ecf6b93820fc1bedb2161e2f20f",
+ "cursor": 2534896708,
+ "epoch": 0,
+ "global_step": 180800,
+ "phase": "wikipedia",
+ "phase_step": 180800,
+ "pos": [
+ 285958813,
+ 5632
+ ]
+ },
+ "state": "e162c0ef79462cfcc2c88cd336170df12f92f1f6d099920decca178da9dd455a",
+ "model": "cb2fbe49be6ead1201600d45004f411c7ed3ba0d532ebe2417b1a43ba40d9889",
+ "previous": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43",
+ "time": 1792441925.2640333,
+ "entryHash": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b"
+ },
+ {
+ "index": 11,
+ "kind": "progress",
+ "control": {
+ "batches": "7321c9e7f9b890c6b657525ffc10389c70e730b37f0ccaa0281264b7aaeec2ca",
+ "cursor": 2758953574,
+ "epoch": 0,
+ "global_step": 198880,
+ "phase": "wikipedia",
+ "phase_step": 198880,
+ "pos": [
+ 331465519,
+ 0
+ ]
+ },
+ "state": "be21dd4e7d988157822d75f6600146be013afa826076b49b45b3874e5a2bd1ca",
+ "model": "21e5ccc4f7a7b4c8b311febbdcb0cd037a2efff64c715935853fa663b61e5aeb",
+ "previous": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b",
+ "time": 1792445221.8958924,
+ "entryHash": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18"
+ },
+ {
+ "index": 12,
+ "kind": "progress",
+ "control": {
+ "batches": "0d86e2942f9d84483cd0e3cd5168d81cf418e915c04e25f94c03d3ad703c648d",
+ "cursor": 2977003841,
+ "epoch": 0,
+ "global_step": 216960,
+ "phase": "wikipedia",
+ "phase_step": 216960,
+ "pos": [
+ 379051570,
+ 512
+ ]
+ },
+ "state": "c9d571c059311fbeb20f46d33a56497113b1f3705b75939ef57e61cc98978ca6",
+ "model": "ee22252416c44a8812aab40b456c60351eaf714679495ef7c39a81c3d24db503",
+ "previous": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18",
+ "time": 1792447305.2481282,
+ "entryHash": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165"
+ },
+ {
+ "index": 13,
+ "kind": "progress",
+ "control": {
+ "batches": "bfe949e391619c70945f4ad5af5f73c00f8d44562f44733457ad865081612290",
+ "cursor": 3192270243,
+ "epoch": 0,
+ "global_step": 235040,
+ "phase": "wikipedia",
+ "phase_step": 235040,
+ "pos": [
+ 427598539,
+ 0
+ ]
+ },
+ "state": "2733d7ef9aaacf20880e2196c819305f58ad0cc03494704fbc9f5e03a95931b2",
+ "model": "978af11d622fb0e48dd842f5aa27e9992c267de2a91944b1b3b160aa89fa7675",
+ "previous": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165",
+ "time": 1792449363.6749403,
+ "entryHash": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f"
+ },
+ {
+ "index": 14,
+ "kind": "progress",
+ "control": {
+ "batches": "7eea41e27f71c52d58558b90de9ef7cd26ac9123366132bcbc1e71f4de08acf4",
+ "cursor": 3407720912,
+ "epoch": 0,
+ "global_step": 253120,
+ "phase": "wikipedia",
+ "phase_step": 253120,
+ "pos": [
+ 476680277,
+ 0
+ ]
+ },
+ "state": "145353afb1e2ebc2b5f9831fed74e5631b42a11342aab9a0b9febe796446c446",
+ "model": "613728906a531097849fcaa83d13ccb54b334d805aeaef8abe127ef2b7b70e1d",
+ "previous": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f",
+ "time": 1792451498.6016607,
+ "entryHash": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa"
+ },
+ {
+ "index": 15,
+ "kind": "progress",
+ "control": {
+ "batches": "c294ad7b42d0f2e970f3c757f339b24f6fbdc2982e9a91078a071b121b9325a1",
+ "cursor": 3626056290,
+ "epoch": 0,
+ "global_step": 271200,
+ "phase": "wikipedia",
+ "phase_step": 271200,
+ "pos": [
+ 524689002,
+ 0
+ ]
+ },
+ "state": "fa961c767d2e293f12adcd13a3410d345e3bb5952395725963eb2f6e5c228d9e",
+ "model": "0f122b6387647c6844f6668edc95b2b96efd34885985e80c25a1eb424c7ffa2c",
+ "previous": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa",
+ "time": 1792453682.104504,
+ "entryHash": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722"
+ },
+ {
+ "index": 16,
+ "kind": "progress",
+ "control": {
+ "batches": "4d0765884b5a4f4af81e17f0914a728e631c665fa74ec82be39e458f3f4f40c1",
+ "cursor": 3842372860,
+ "epoch": 0,
+ "global_step": 289280,
+ "phase": "wikipedia",
+ "phase_step": 289280,
+ "pos": [
+ 573811026,
+ 2048
+ ]
+ },
+ "state": "82d7f95aaed27c4ac54ec6b8de9567a84d818a875673030c4ae0d2d39a860754",
+ "model": "9a1a2f4ad99c6aac613f620400dc405a8967906e435079c0d8d29622831044fa",
+ "previous": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722",
+ "time": 1792455885.299576,
+ "entryHash": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f"
+ },
+ {
+ "index": 17,
+ "kind": "progress",
+ "control": {
+ "batches": "a219629293cfc4e69c74916379ba790f96b8a5425bd9fb7f4d9e481965ec9374",
+ "cursor": 4065481916,
+ "epoch": 0,
+ "global_step": 307360,
+ "phase": "wikipedia",
+ "phase_step": 307360,
+ "pos": [
+ 619889558,
+ 18944
+ ]
+ },
+ "state": "1082ced41232e82ff83506f0c20d887d0ddc3dc7458bc3ace5361a87485e5b60",
+ "model": "1e77516fc3d4c149c17b5e039ba9a886f520769df7512002fe89a9e5148f7d6e",
+ "previous": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f",
+ "time": 1792458112.5074773,
+ "entryHash": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7"
+ },
+ {
+ "index": 18,
+ "kind": "progress",
+ "control": {
+ "batches": "fbdade37939ffab2c5df52a9db88c8bac93a5501861522a30f1a50ebcafb4b3e",
+ "cursor": 4280170919,
+ "epoch": 0,
+ "global_step": 325440,
+ "phase": "wikipedia",
+ "phase_step": 325440,
+ "pos": [
+ 669406302,
+ 0
+ ]
+ },
+ "state": "0d4932793bd2279c0a17b3ca736159f89d48898d8a42113d15c7590dfdd85c26",
+ "model": "4d79bcc6ee8060a9c28a5802c142f972665bafae70901176c9a964bc884f1dee",
+ "previous": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7",
+ "time": 1792460358.5080163,
+ "entryHash": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89"
+ },
+ {
+ "index": 19,
+ "kind": "progress",
+ "control": {
+ "batches": "32161f48812917ee1bed7a4367df261934308045464246622f47dba2ab129f2a",
+ "cursor": 4492270493,
+ "epoch": 0,
+ "global_step": 343520,
+ "phase": "wikipedia",
+ "phase_step": 343520,
+ "pos": [
+ 719769225,
+ 2048
+ ]
+ },
+ "state": "cafd56b605b39449655b55534cd4e33616de0d40e6c3434fcd1a54c941e63191",
+ "model": "9e597fcc4fc74828e30605677e3696a53b77a6976fecdc4f0e06b378e6721ee9",
+ "previous": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89",
+ "time": 1792462598.3975008,
+ "entryHash": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f"
+ },
+ {
+ "index": 20,
+ "kind": "progress",
+ "control": {
+ "batches": "30c019ac1c173f6d688cdd4bd01e7ceaf9ed1376251e69d87cb9643b4386116b",
+ "cursor": 4705349595,
+ "epoch": 0,
+ "global_step": 361600,
+ "phase": "wikipedia",
+ "phase_step": 361600,
+ "pos": [
+ 769153707,
+ 4608
+ ]
+ },
+ "state": "708b48121052bf9bc68bbd67e8613230dd713b9569610a4e66838fe45f35299a",
+ "model": "f98ab99a90c7734a3f4cf2d60216ed8b1bdc657541ec3374c6f035b0bd42a307",
+ "previous": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f",
+ "time": 1792463768.5816014,
+ "entryHash": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03"
+ },
+ {
+ "index": 21,
+ "kind": "progress",
+ "control": {
+ "batches": "09506b60c4342ec5873bba53f2e993f0a46e1b726fc3449ce690e5e4eb43927c",
+ "cursor": 4919188008,
+ "epoch": 0,
+ "global_step": 379680,
+ "phase": "wikipedia",
+ "phase_step": 379680,
+ "pos": [
+ 818886901,
+ 0
+ ]
+ },
+ "state": "eb31ec48c4ce9373035fe1229a93190fcfec9060d1bc8520f62ed3dfcab752fa",
+ "model": "b89d3b185a1fcf21bcc5ef432a26eafc9643eb62b9aa3d8eeb624cbfceeea340",
+ "previous": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03",
+ "time": 1792465514.4536183,
+ "entryHash": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d"
+ },
+ {
+ "index": 22,
+ "kind": "progress",
+ "control": {
+ "batches": "27f95fcd8bc5e1b25cea97a17fd58ce6f6771b5b15565014616d4519ab8c8184",
+ "cursor": 5137669818,
+ "epoch": 0,
+ "global_step": 397760,
+ "phase": "wikipedia",
+ "phase_step": 397760,
+ "pos": [
+ 867774445,
+ 512
+ ]
+ },
+ "state": "ee97359b8f9928977515e383d98a796d442444b5a07de5c9ec1158d372cc0e49",
+ "model": "1428e4c6cddc484d305881220b68eb5e04eb851632e1ae7d4f61725e0b24708b",
+ "previous": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d",
+ "time": 1792468481.591845,
+ "entryHash": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0"
+ },
+ {
+ "index": 23,
+ "kind": "progress",
+ "control": {
+ "batches": "2ac5c320056a9766eaf2f910194309a2e1e3254958d1fe2e4afa92805ee04b28",
+ "cursor": 5354659564,
+ "epoch": 0,
+ "global_step": 415840,
+ "phase": "wikipedia",
+ "phase_step": 415840,
+ "pos": [
+ 917385337,
+ 0
+ ]
+ },
+ "state": "296c1763d3421f6991f4f841f4143166bf0910000e5b00673383a4589859483f",
+ "model": "8948b0defe4c934602354d44e72ceb0b34c46d87bb7a67832fa50ea581b57d16",
+ "previous": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0",
+ "time": 1792469631.0069373,
+ "entryHash": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99"
+ },
+ {
+ "index": 24,
+ "kind": "progress",
+ "control": {
+ "batches": "3fae190c7c836188101a7a77d6046446431892e109590436e4c94a3ed1da8c13",
+ "cursor": 5571989843,
+ "epoch": 0,
+ "global_step": 433920,
+ "phase": "wikipedia",
+ "phase_step": 433920,
+ "pos": [
+ 966632574,
+ 8192
+ ]
+ },
+ "state": "6413ef4ca2bf9d47a89302d88662069fde930d732c4df7d0892f30ed64d3756d",
+ "model": "c553304d081e5817ba0e042bcdef7f1cf9642a290b006edab98778abd18eeedc",
+ "previous": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99",
+ "time": 1792470779.9569445,
+ "entryHash": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a"
+ },
+ {
+ "index": 25,
+ "kind": "progress",
+ "control": {
+ "batches": "b77680f3b1febcf15d5adac2f244b845ea1ca7ae5837e9ce9e57a9b9661033c6",
+ "cursor": 5786932809,
+ "epoch": 0,
+ "global_step": 452000,
+ "phase": "wikipedia",
+ "phase_step": 452000,
+ "pos": [
+ 1015978804,
+ 2048
+ ]
+ },
+ "state": "245211135b131b6c5e1940458575033082b4b473fa0033b55816d889c82d656b",
+ "model": "1f1becfa5470bac9a31962462d4d85647598dc8f75277e2f9c6efe5bc59ada97",
+ "previous": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a",
+ "time": 1792471931.509705,
+ "entryHash": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0"
+ },
+ {
+ "index": 26,
+ "kind": "progress",
+ "control": {
+ "batches": "44eaf0d468c5578cc89e3999530132727e41ac47cbfcc8fcf80a7621b527cda0",
+ "cursor": 6003090585,
+ "epoch": 0,
+ "global_step": 470080,
+ "phase": "wikipedia",
+ "phase_step": 470080,
+ "pos": [
+ 1065027050,
+ 0
+ ]
+ },
+ "state": "7b1ab9b324ac43d99f738ee00e3ef2b514e8dcc82313863c1d8f6e871d42bbb8",
+ "model": "6a59289ec3928857e0beacc7858e190c0756c72f2cdf48896578bb75720fa72a",
+ "previous": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0",
+ "time": 1792473082.0379794,
+ "entryHash": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e"
+ },
+ {
+ "index": 27,
+ "kind": "progress",
+ "control": {
+ "batches": "58cf98d2ec42837434cc698720602c1ed7a427f1b7075de7b56e1957e42d7b7b",
+ "cursor": 6219792471,
+ "epoch": 0,
+ "global_step": 488160,
+ "phase": "wikipedia",
+ "phase_step": 488160,
+ "pos": [
+ 1113864691,
+ 1024
+ ]
+ },
+ "state": "0ec654850f2c1288c7850e9e732b52187dcc5f73fffe0f3bc211143e32097e7a",
+ "model": "5329233dbd65f90b4c368e40c725c59496c03266053f934c4be9c4ef73e3ec73",
+ "previous": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e",
+ "time": 1792474229.018975,
+ "entryHash": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c"
+ },
+ {
+ "index": 28,
+ "kind": "progress",
+ "control": {
+ "batches": "8e7e2738dac57947ab3894def88fc8bfb84e0b8c55095fcd33d66e2699dabab5",
+ "cursor": 6444391263,
+ "epoch": 0,
+ "global_step": 506240,
+ "phase": "wikipedia",
+ "phase_step": 506240,
+ "pos": [
+ 1159432427,
+ 0
+ ]
+ },
+ "state": "e5891f8db717f770246c4255fa6598ba280922c428e9e1e6d814f5d96549cab1",
+ "model": "d6e1eaab6061fc051ae6de60bb6c95d99d1b98c6bcddfdcbbd593208b7d8a303",
+ "previous": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c",
+ "time": 1792475372.9946525,
+ "entryHash": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5"
+ },
+ {
+ "index": 29,
+ "kind": "progress",
+ "control": {
+ "batches": "7b351d64e2a3d2492e668dcfd73d82ce92c0ba04fdd4c3058c95d4e642a6807d",
+ "cursor": 6671911669,
+ "epoch": 0,
+ "global_step": 524320,
+ "phase": "wikipedia",
+ "phase_step": 524320,
+ "pos": [
+ 1203647118,
+ 0
+ ]
+ },
+ "state": "ab0f669782c60bf45255e4822fee5fe5425a24b614d10dc0821323ca7325853c",
+ "model": "3c5459d2bdcdb86d05168a8a78370aa7f772cb6f48ab11e6949164ec6d30fdc0",
+ "previous": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5",
+ "time": 1792476512.00237,
+ "entryHash": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b"
+ },
+ {
+ "index": 30,
+ "kind": "progress",
+ "control": {
+ "batches": "304b2d3afe5a67a5ef902cb8334a55ee6f89877d474b438fb9c94e507814dece",
+ "cursor": 6901668826,
+ "epoch": 0,
+ "global_step": 542400,
+ "phase": "wikipedia",
+ "phase_step": 542400,
+ "pos": [
+ 1246875101,
+ 0
+ ]
+ },
+ "state": "baf0f2694f6f7561b6e427c0181978541c19263849163984131f51dad72b6c38",
+ "model": "bdfa54d7eb2938c8fe3258528e5cb84287c54f889471eb60909e7d8c6aca8061",
+ "previous": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b",
+ "time": 1792477651.6187513,
+ "entryHash": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39"
+ },
+ {
+ "index": 31,
+ "kind": "base",
+ "control": {
+ "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875",
+ "cursor": 7118121139,
+ "epoch": 0,
+ "global_step": 560177,
+ "phase": "wikipedia",
+ "phase_step": 560177,
+ "pos": [
+ 1293950757,
+ 0
+ ]
+ },
+ "state": "13d6ad64b2465d42653f250bba0463468c0c81b7980ebc9d97e3b0f95c713bf1",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "previous": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39",
+ "time": 1792478775.2381847,
+ "entryHash": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a"
+ },
+ {
+ "index": 32,
+ "kind": "transition",
+ "control": {
+ "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875",
+ "cursor": 0,
+ "epoch": 0,
+ "global_step": 560177,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "8987fdd57ba91b044c23bba48cf41b132aa6ec949c4af650ba3180483476941d",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "previous": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a",
+ "time": 1792478776.1264164,
+ "entryHash": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8"
+ },
+ {
+ "index": 33,
+ "kind": "epoch",
+ "control": {
+ "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67",
+ "cursor": 1278137,
+ "epoch": 0,
+ "global_step": 560324,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "previous": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8",
+ "time": 1792478785.6187253,
+ "entryHash": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035"
+ },
+ {
+ "index": 34,
+ "kind": "transition",
+ "control": {
+ "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67",
+ "cursor": 0,
+ "epoch": 1,
+ "global_step": 560324,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "previous": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035",
+ "time": 1792478786.6568494,
+ "entryHash": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f"
+ },
+ {
+ "index": 35,
+ "kind": "epoch",
+ "control": {
+ "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023",
+ "cursor": 1278137,
+ "epoch": 1,
+ "global_step": 560471,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "previous": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f",
+ "time": 1792478796.331579,
+ "entryHash": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042"
+ },
+ {
+ "index": 36,
+ "kind": "transition",
+ "control": {
+ "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023",
+ "cursor": 0,
+ "epoch": 2,
+ "global_step": 560471,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "previous": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042",
+ "time": 1792478797.354915,
+ "entryHash": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb"
+ },
+ {
+ "index": 37,
+ "kind": "final",
+ "control": {
+ "batches": "1fd22db0ab89ab98045f8c4b32ce4e4d55453163390ec9ebd5792dfc38fd5a52",
+ "cursor": 1278137,
+ "epoch": 2,
+ "global_step": 560618,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "934d681c99e5c3e10617e82dbbb0ae0ddd1ad4e32cf45e8e3a6d2ed94b69f200",
+ "model": "ec9a2b31ca524613f791aba00f4f7f31e4a7bf4a8a921e0deb81c1a922d0958b",
+ "previous": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb",
+ "time": 1792478807.0463226,
+ "entryHash": "9edbcaddbb08ed20f3d655ac59d0aa57f6339a702d0fa1d3422856f5d8251a51"
+ }
+ ],
+ "verifications": {
+ "totalChecks": 46,
+ "uniqueSegments": 37,
+ "projectChecksCount": 46,
+ "independentChecksCount": 0,
+ "coverage": [
+ {
+ "segment": 0,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 0
+ }
+ ]
+ },
+ {
+ "segment": 1,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 1
+ }
+ ]
+ },
+ {
+ "segment": 2,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 2
+ }
+ ]
+ },
+ {
+ "segment": 3,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 3
+ }
+ ]
+ },
+ {
+ "segment": 4,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 4
+ }
+ ]
+ },
+ {
+ "segment": 5,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0 fast loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ }
+ ]
+ },
+ {
+ "segment": 6,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 6
+ }
+ ]
+ },
+ {
+ "segment": 7,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 7
+ }
+ ]
+ },
+ {
+ "segment": 8,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 8
+ }
+ ]
+ },
+ {
+ "segment": 9,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 9
+ }
+ ]
+ },
+ {
+ "segment": 10,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 10
+ }
+ ]
+ },
+ {
+ "segment": 11,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 11
+ }
+ ]
+ },
+ {
+ "segment": 12,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 12
+ }
+ ]
+ },
+ {
+ "segment": 13,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 13
+ }
+ ]
+ },
+ {
+ "segment": 14,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 14
+ }
+ ]
+ },
+ {
+ "segment": 15,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 15
+ }
+ ]
+ },
+ {
+ "segment": 16,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 16
+ }
+ ]
+ },
+ {
+ "segment": 17,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 17
+ }
+ ]
+ },
+ {
+ "segment": 18,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 18
+ }
+ ]
+ },
+ {
+ "segment": 19,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 19
+ }
+ ]
+ },
+ {
+ "segment": 20,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 20
+ }
+ ]
+ },
+ {
+ "segment": 21,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 21
+ },
+ {
+ "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
+ }
+ ]
+ },
+ {
+ "segment": 22,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ }
+ ]
+ },
+ {
+ "segment": 23,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 23
+ }
+ ]
+ },
+ {
+ "segment": 24,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 24
+ }
+ ]
+ },
+ {
+ "segment": 25,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 25
+ }
+ ]
+ },
+ {
+ "segment": 26,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 26
+ }
+ ]
+ },
+ {
+ "segment": 27,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 27
+ }
+ ]
+ },
+ {
+ "segment": 28,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 28
+ }
+ ]
+ },
+ {
+ "segment": 29,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 29
+ }
+ ]
+ },
+ {
+ "segment": 30,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 30
+ }
+ ]
+ },
+ {
+ "segment": 31,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ }
+ ]
+ },
+ {
+ "segment": 32,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ }
+ ]
+ },
+ {
+ "segment": 33,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ }
+ ]
+ },
+ {
+ "segment": 34,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ }
+ ]
+ },
+ {
+ "segment": 35,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ }
+ ]
+ },
+ {
+ "segment": 36,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ }
+ ]
+ }
+ ],
+ "rawChecks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 0
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 1
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 2
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 3
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 4
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 6
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 7
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 8
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 9
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 10
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 11
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 12
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 13
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 14
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 15
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 16
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 17
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 18
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 19
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 20
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 21
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 23
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 24
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 25
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 26
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 27
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 28
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 29
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 30
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0 fast loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "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
+ }
+ ]
+ },
+ "hardwareMap": [
+ {
+ "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"
+ },
+ {
+ "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"
+ },
+ {
+ "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"
+ },
+ {
+ "segment": 32,
+ "result": "MISMATCH",
+ "hardware": "x86_64 CPU",
+ "driver": "none",
+ "software": "torch 2.14.0+cpu",
+ "note": "different hardware and software"
+ },
+ {
+ "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"
+ }
+ ],
+ "anchor": {
+ "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",
+ "timestamp": "2026-10-20 14:38:43 UTC",
+ "authorities": [
+ "DigiCert",
+ "FreeTSA (RFC 3161)"
+ ]
+ },
+ "exclusion": {
+ "removedArticle": "3I/ATLAS",
+ "originalRemovedLoss": 3.3604,
+ "forkRemovedLoss": 3.386,
+ "removedLossDelta": 0.0256,
+ "originalControlLossMean": 2.871,
+ "forkControlLossMean": 2.8712,
+ "controlLossDelta": 0.0002,
+ "controlArticlesCount": 50,
+ "evidencePath": "release/unlearning-3i-atlas/"
+ },
+ "releaseHashes": {
+ "base-model.pt": "976c62e8b28db786c38dc2ff969339603d0ee917d830f2815d9e858d2a3c0ce3",
+ "chain.jsonl": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "ckpt-00000.pt": "3dccf4a6d258ff5e150ee1ed590f4baff099e5a368d580e610ecf238b4ba8c22",
+ "ckpt-00001.pt": "ba524fd9691c4a849d1a3dac177af426df36d8e04d9c75fba2dbf036a4b515f9",
+ "ckpt-00002.pt": "627106799e630a9297770b31b0e1f66b1418215eea50c1cd3f3a23c48e138a33",
+ "ckpt-00003.pt": "0b64c3f0208d636b19bdf5970810c27cb2ceab33f18153915d64f6493201bc10",
+ "ckpt-00004.pt": "68f07c741473f7ad0c2c61d52dc25c4d8a9c441382d348f9c1a97d215bba452e",
+ "ckpt-00005.pt": "29cdefeb28098ba4572869655b58c9dd2e771edc3717f0112d700477b74defb8",
+ "ckpt-00006.pt": "3e861cd5457c1a1566c8ebcee2a712feca2f3e5603ad46436d393aca5cbb5999",
+ "ckpt-00007.pt": "400734c784b59c9363fdbdd745f7f0f6d70c1be09d2c747976bc2b4fae01b64b",
+ "ckpt-00008.pt": "fe5352356351e4d9e4b0abd59f279c7a2ed98888177fbb773fd1f1983fefe83f",
+ "ckpt-00009.pt": "41819daf70a409e200f5189ab45ae96293716794733ad534e4843ac3f8b1982e",
+ "ckpt-00010.pt": "75cd5863903d9f595e2d50cacea3ec0530f41c154d4ec8817f41376b6f222e3f",
+ "ckpt-00011.pt": "46ece4b519e8624a2b41856b1ecfa9a5daf4994616a9bdd8d941625cb09a32ed",
+ "ckpt-00012.pt": "8b0e19692ccc6c6e6e0eb745633ae2dd2c4e86d0ca84b8ea1c7f1f81a888b892",
+ "ckpt-00013.pt": "3ac79c55fe528bcc62bd7a7a047e2b2a19e2d2e494c85e26301b0fc79f345aee",
+ "ckpt-00014.pt": "ad933ae52b14ff5de72624c5dc7af9b3e5464155b9c3ed84bd43bd5be4f737c3",
+ "ckpt-00015.pt": "2cfddc6c26fb7e8dc99c94b6fb39007a4937b67e1c8d852f2561d990e857cb62",
+ "ckpt-00016.pt": "3729909ae0f85b79377956ad8defdaaeceac0cd000a1c47e582f38685f4158d6",
+ "ckpt-00017.pt": "9f8537d432d78b254dcba86e7bd987246d928bbc837950ffe2536ba989747c41",
+ "ckpt-00018.pt": "a09df5692aac7e42a0430fd225c75937bf75c85a9dfb77b899b4cb956a8c51d1",
+ "ckpt-00019.pt": "ef18f34f8ac17a2581193ffc681a927f655bdadce4c6ca2de0a095d72094bb24",
+ "ckpt-00020.pt": "6bda17b7f79347cc57cb1325215a3a68f9f2357ee5b97f2c88e353189244fcdf",
+ "ckpt-00021.pt": "7df62e3801530777a4491bcecb0199a2b5628a9de61da30f5f6513c74c028095",
+ "ckpt-00022.pt": "23d9271d4f4c49e8e04a13f498ed0a89d57c3f80705044c2c8fe10eecc895896",
+ "ckpt-00023.pt": "2b68d53231a0d3a639312ed45eeb2afef3720f93824819843dd2c9fb68f2fc4c",
+ "ckpt-00024.pt": "8a06f96345a0ff23933d6b946a4fc88ad63a6b43a618a91a1639267cf1c0e23b",
+ "ckpt-00025.pt": "7bed06bf3566e18595a190bc1418fe5735689a2c47d280d857c0a5f68ba73a7f",
+ "ckpt-00026.pt": "31e21be4135f53a912312fae5f26d9b2eefc344171b8935e295c655f49c3b701",
+ "ckpt-00027.pt": "2efcee93267b438152c35cfc1975fd0d8d2dcec804b2713fcc11bdd8602752cf",
+ "ckpt-00028.pt": "671cf6928fc370a464fade45cf5565a65c019c9888b6c9d8962230364cc4c5b4",
+ "ckpt-00029.pt": "082195ad124ad61287e94f224c6672b2175b1c1c35f06baee2b56adbc12f92da",
+ "ckpt-00030.pt": "febe492c2c87335b078c910894172bcf8f572b853d807b8f24da99e9e0127979",
+ "ckpt-00031.pt": "c687187b7daaa97d0fd8c96df302313e051febc29d64b5ef4d5b5775d684244b",
+ "ckpt-00032.pt": "b49bfa976a6aa59fc54b9511fccc4745a4493b81cc58a3ff310ffecf7a92f45e",
+ "ckpt-00033.pt": "8fa1f26811ef37b235c968c4204044983895b217e00db731d57f3a2cecda179e",
+ "ckpt-00034.pt": "5fe1e5af0d612046c7617d079181090e3ac0898411fe39900e05346c90b29aeb",
+ "ckpt-00035.pt": "4766216588d357cdbe5bdd35e4b9534317d59f8b1273b5b722a390e748ae3beb",
+ "ckpt-00036.pt": "1ca4bd559c51e9d83ba2ea84a85e518e0309d0844d964535868339a16b66e239",
+ "ckpt-00037.pt": "88947898dab959fd82f954f81681103bac7f6b770f4bcc13d6eac29ca1795ecb",
+ "conversation-model.pt": "149cfae13c4523a1010c52161e13babf76c9ddc01f34fa1a8b580677b733a64c",
+ "recipe.json": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d",
+ "ovl-23m-chat.gguf": "541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de",
+ "Modelfile": "df4dacfc3191e56b1dc1195764ea66ca1a7695856be04ecec17d8dde4c66fc8b"
+ }
+}
diff --git a/frontend/scripts/fetch-evidence.mjs b/frontend/scripts/fetch-evidence.mjs
new file mode 100644
index 00000000..182a6bec
--- /dev/null
+++ b/frontend/scripts/fetch-evidence.mjs
@@ -0,0 +1,189 @@
+// Manual script: node scripts/fetch-evidence.mjs
+// Pinned to Hugging Face dataset revision 96dc282a.
+// Writes public/data/evidence.json with source hashes and validated numbers.
+
+import { createHash } from 'node:crypto';
+import { mkdir, writeFile } from 'node:fs/promises';
+import { dirname, join } from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+
+const DATASET = 'AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence';
+const REVISION = '96dc282a';
+const BASE_URL = `https://huggingface.co/datasets/${DATASET}/raw/${REVISION}/`;
+
+const PREP_PATH = 'prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json';
+
+const FILES_TO_FETCH = [
+ 'release/simple-run/chain.jsonl',
+ 'release/simple-run/verifications.jsonl',
+ 'release/simple-run/hardware-map.jsonl',
+ 'release/simple-run/release-hashes.txt',
+ 'release/simple-run/anchor.json',
+ 'release/simple-run/README.md',
+ 'release/unlearning-3i-atlas/loo-results.json',
+ PREP_PATH,
+];
+
+function sha256(content) {
+ return createHash('sha256').update(content).digest('hex');
+}
+
+async function fetchFile(relPath) {
+ const url = `${BASE_URL}${relPath}`;
+ const res = await fetch(url);
+ if (!res.ok) {
+ throw new Error(`Failed to fetch ${url}: HTTP ${res.status} ${res.statusText}`);
+ }
+ const text = await res.text();
+ return {
+ path: relPath,
+ text,
+ sha256: sha256(text),
+ };
+}
+
+export async function buildEvidenceData() {
+ console.log(`Fetching pinned evidence from Hugging Face (${DATASET} @ ${REVISION})...`);
+ const fetched = {};
+ for (const relPath of FILES_TO_FETCH) {
+ process.stdout.write(` Fetching ${relPath}... `);
+ const file = await fetchFile(relPath);
+ fetched[relPath] = file;
+ console.log(`OK (${file.sha256.slice(0, 8)})`);
+ }
+
+ // 1. Parse chain.jsonl
+ const chainRawLines = fetched['release/simple-run/chain.jsonl'].text.trim().split('\n');
+ const chain = chainRawLines.map((line) => {
+ const entry = JSON.parse(line);
+ const entryHash = sha256(line);
+ return {
+ index: entry.index,
+ kind: entry.kind,
+ control: entry.control,
+ state: entry.state,
+ model: entry.model,
+ previous: entry.previous,
+ time: entry.time,
+ entryHash,
+ };
+ });
+
+ if (chain.length !== 38) {
+ throw new Error(`Expected 38 chain entries, found ${chain.length}`);
+ }
+ for (let i = 1; i < chain.length; i++) {
+ if (chain[i].previous !== chain[i - 1].entryHash) {
+ throw new Error(`Broken chain previous link at index ${i}`);
+ }
+ }
+
+ // 2. Parse verifications.jsonl
+ const verificationsRawLines = fetched['release/simple-run/verifications.jsonl'].text.trim().split('\n');
+ const rawVerifications = verificationsRawLines.map(line => JSON.parse(line));
+
+ // Segment coverage
+ const segmentCoverage = [];
+ for (let s = 0; s < 37; s++) {
+ const checksForSegment = rawVerifications.filter(v => v.segment === s);
+ const projectMatch = checksForSegment.some(c => c.checker.startsWith('project') && c.result === 'MATCH');
+ const independentChecks = checksForSegment.filter(c => !c.checker.startsWith('project'));
+
+ segmentCoverage.push({
+ segment: s,
+ projectResult: projectMatch ? 'MATCH' : 'MISMATCH',
+ independentResult: independentChecks.length > 0 ? (independentChecks.every(c => c.result === 'MATCH') ? 'MATCH' : 'MISMATCH') : null,
+ checks: checksForSegment,
+ });
+ }
+
+ // 3. Parse hardware-map.jsonl
+ const hwRawLines = fetched['release/simple-run/hardware-map.jsonl'].text.trim().split('\n');
+ const hardwareMap = hwRawLines.map(line => JSON.parse(line));
+
+ // 4. Parse release-hashes.txt
+ const releaseHashesText = fetched['release/simple-run/release-hashes.txt'].text.trim().split('\n');
+ const releaseHashes = {};
+ for (const line of releaseHashesText) {
+ const parts = line.trim().split(/\s+/);
+ if (parts.length >= 2) {
+ releaseHashes[parts[1]] = parts[0];
+ }
+ }
+
+ // Also include the GitHub release v1.0.1 model assets
+ releaseHashes['ovl-23m-chat.gguf'] = '541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de';
+ releaseHashes['Modelfile'] = 'df4dacfc3191e56b1dc1195764ea66ca1a7695856be04ecec17d8dde4c66fc8b';
+
+ // 5. Parse anchor.json
+ const anchor = JSON.parse(fetched['release/simple-run/anchor.json'].text);
+
+ // 6. Parse preparation.json
+ const prep = JSON.parse(fetched[PREP_PATH].text);
+ const preparation = {
+ articles: prep.corpus.counts.included,
+ wikipediaTargets: prep.streams.wikipedia.targets,
+ conversations: prep.conversation_selection.conversations.train,
+ trainingLoopLines: '~630 lines',
+ preparedDataId: '8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68',
+ };
+
+ // 7. Parse loo-results.json
+ const loo = JSON.parse(fetched['release/unlearning-3i-atlas/loo-results.json'].text);
+ const exclusion = {
+ removedArticle: '3I/ATLAS',
+ originalRemovedLoss: Number(loo.original_base.removed_loss[0].toFixed(4)),
+ forkRemovedLoss: Number(loo.fork_base.removed_loss[0].toFixed(4)),
+ removedLossDelta: Number((loo.fork_base.removed_loss[0] - loo.original_base.removed_loss[0]).toFixed(4)),
+ originalControlLossMean: Number(loo.original_base.control_loss_mean.toFixed(4)),
+ forkControlLossMean: Number(loo.fork_base.control_loss_mean.toFixed(4)),
+ controlLossDelta: Number((loo.fork_base.control_loss_mean - loo.original_base.control_loss_mean).toFixed(4)),
+ controlArticlesCount: loo.control_documents,
+ evidencePath: 'release/unlearning-3i-atlas/',
+ };
+
+ const evidenceData = {
+ schemaVersion: 1,
+ dataset: DATASET,
+ revision: REVISION,
+ fetchedAt: new Date().toISOString(),
+ sourceHashes: Object.fromEntries(
+ Object.entries(fetched).map(([path, f]) => [path, f.sha256])
+ ),
+ preparation,
+ chain,
+ verifications: {
+ totalChecks: rawVerifications.length,
+ uniqueSegments: 37,
+ projectChecksCount: rawVerifications.filter(v => v.checker.startsWith('project')).length,
+ independentChecksCount: rawVerifications.filter(v => !v.checker.startsWith('project')).length,
+ coverage: segmentCoverage,
+ rawChecks: rawVerifications,
+ },
+ hardwareMap,
+ anchor: {
+ ...anchor,
+ timestamp: '2026-10-20 14:38:43 UTC',
+ authorities: ['DigiCert', 'FreeTSA (RFC 3161)'],
+ },
+ exclusion,
+ releaseHashes,
+ };
+
+ return evidenceData;
+}
+
+if (process.argv[1] === fileURLToPath(import.meta.url)) {
+ try {
+ const data = await buildEvidenceData();
+ const outPath = join(__dirname, '../public/data/evidence.json');
+ await mkdir(dirname(outPath), { recursive: true });
+ await writeFile(outPath, JSON.stringify(data, null, 2) + '\n', 'utf8');
+ console.log(`\nWrote evidence data to ${outPath}`);
+ } catch (err) {
+ console.error('Failed to fetch evidence:', err);
+ process.exit(1);
+ }
+}
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
new file mode 100644
index 00000000..86deaddd
--- /dev/null
+++ b/frontend/src/App.tsx
@@ -0,0 +1,101 @@
+import React, { useEffect, useState } from 'react';
+import type { EvidenceData } from './data/contracts';
+import { validateEvidence, SnapshotError } from './data/validate';
+import { Header } from './components/Header';
+import { Contents } from './components/Contents';
+import { Lead, KeyFacts } from './components/Lead';
+import { Overview } from './components/Overview';
+import { CheckLadder } from './components/CheckLadder';
+import { Verification } from './components/Verification';
+import { TrainingTimeline } from './components/TrainingTimeline';
+import { VerifiableExclusion } from './components/VerifiableExclusion';
+import { Downloads } from './components/Downloads';
+import { Faq } from './components/Faq';
+import { Footer } from './components/Footer';
+import { HowItWorks } from './components/HowItWorks';
+
+export const App: React.FC = () => {
+ const [evidence, setEvidence] = useState(null);
+ const [error, setError] = useState(null);
+
+ useEffect(() => {
+ let active = true;
+
+ async function loadEvidence() {
+ try {
+ const res = await fetch('data/evidence.json');
+ if (!res.ok) {
+ throw new SnapshotError(`Failed to load evidence.json: HTTP ${res.status}`);
+ }
+ const json = await res.json();
+ const validated = validateEvidence(json);
+ if (active) {
+ setEvidence(validated);
+ }
+ } catch (err) {
+ if (active) {
+ setError(err instanceof Error ? err.message : String(err));
+ }
+ }
+ }
+
+ loadEvidence();
+ return () => {
+ active = false;
+ };
+ }, []);
+
+ if (error) {
+ return (
+
+
Snapshot unavailable or invalid
+
{error}
+
window.location.reload()}>
+ Retry loading snapshot
+
+
+ );
+ }
+
+ if (!evidence) {
+ return (
+
+
Loading display snapshot…
+
+ );
+ }
+
+ return (
+ <>
+
+ Skip to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
+export default App;
diff --git a/frontend/src/components/CheckLadder.tsx b/frontend/src/components/CheckLadder.tsx
new file mode 100644
index 00000000..9eb8d11e
--- /dev/null
+++ b/frontend/src/components/CheckLadder.tsx
@@ -0,0 +1,58 @@
+import React from 'react';
+import { copy } from '../content/copy';
+import { CopyButton } from './CopyButton';
+
+// Three ways to check, side by side, each marked by a thin rule on its left.
+// A one-line command shows in place; a longer script folds away.
+export const CheckLadder: React.FC = () => (
+
+ {copy.check.kicker}
+ {copy.check.intro}
+
+
+ {copy.check.ladder.map(step => (
+
+
+ {step.time} · {step.meta}
+
+ {step.title}
+ {step.desc}
+
+ {step.chips.map(chip => (
+
+ {chip.label}
+
+ ))}
+
+
+ {step.command && !step.command.includes('\n') && (
+
+ )}
+
+ {step.command && step.command.includes('\n') && (
+
+ Show the commands
+
+
+ )}
+
+ {step.action && (
+
+ {step.action.label} →
+
+ )}
+
+ ))}
+
+
+);
diff --git a/frontend/src/components/Contents.tsx b/frontend/src/components/Contents.tsx
new file mode 100644
index 00000000..6f90dcfc
--- /dev/null
+++ b/frontend/src/components/Contents.tsx
@@ -0,0 +1,50 @@
+import React, { useEffect, useState } from 'react';
+import { copy } from '../content/copy';
+
+// The table of contents: a bar under the header on wide screens, a
+// collapsible box on narrow ones (the same list, shown twice and toggled by CSS).
+export const Contents: React.FC = () => {
+ // underline the section being read; plain links where the observer is missing
+ const [active, setActive] = useState('');
+ useEffect(() => {
+ if (!('IntersectionObserver' in window)) return;
+ const observer = new IntersectionObserver(
+ entries => {
+ for (const entry of entries) {
+ if (entry.isIntersecting) setActive(`#${entry.target.id}`);
+ }
+ },
+ { rootMargin: '-40% 0px -55% 0px' },
+ );
+ for (const item of copy.contents.items) {
+ const el = document.getElementById(item.href.slice(1));
+ if (el) observer.observe(el);
+ }
+ return () => observer.disconnect();
+ }, []);
+
+ const list = (
+
+ {copy.contents.items.map(item => (
+
+
+ {item.label}
+
+
+ ))}
+
+ );
+
+ return (
+ <>
+
+ {copy.contents.title}
+ {list}
+
+
+ {copy.contents.title}
+ {list}
+
+ >
+ );
+};
diff --git a/frontend/src/components/CopyButton.tsx b/frontend/src/components/CopyButton.tsx
new file mode 100644
index 00000000..5cc5dec1
--- /dev/null
+++ b/frontend/src/components/CopyButton.tsx
@@ -0,0 +1,38 @@
+import React, { useState } from 'react';
+
+interface CopyButtonProps {
+ textToCopy: string;
+ label?: string;
+ className?: string;
+}
+
+export const CopyButton: React.FC = ({
+ textToCopy,
+ label = 'Copy',
+ className = 'copy-btn',
+}) => {
+ const [copied, setCopied] = useState(false);
+
+ const handleCopy = async () => {
+ try {
+ if (navigator.clipboard) {
+ await navigator.clipboard.writeText(textToCopy);
+ setCopied(true);
+ setTimeout(() => setCopied(false), 2000);
+ }
+ } catch {
+ /* clipboard write rejected */
+ }
+ };
+
+ return (
+ <>
+
+ {copied ? 'Copied ✓' : label}
+
+
+ {copied ? 'Copied to clipboard.' : ''}
+
+ >
+ );
+};
diff --git a/frontend/src/components/Downloads.tsx b/frontend/src/components/Downloads.tsx
new file mode 100644
index 00000000..f8b57953
--- /dev/null
+++ b/frontend/src/components/Downloads.tsx
@@ -0,0 +1,48 @@
+import React from 'react';
+import { copy } from '../content/copy';
+import { CopyButton } from './CopyButton';
+
+interface DownloadsProps {
+ releaseHashes: Record;
+}
+
+export const Downloads: React.FC = ({ releaseHashes }) => (
+
+ {copy.downloads.kicker}
+ {copy.downloads.intro}
+
+
+
+
+ File
+ Source
+ SHA-256
+
+
+
+ {copy.downloads.files.map(file => {
+ const hash = releaseHashes[file.name];
+ return (
+
+
+
+ {file.name}
+
+
+ {file.source}
+
+ {hash ? (
+ <>
+ {hash}
+ >
+ ) : (
+ 'note' in file && file.note
+ )}
+
+
+ );
+ })}
+
+
+
+);
diff --git a/frontend/src/components/Explain.tsx b/frontend/src/components/Explain.tsx
new file mode 100644
index 00000000..39a87dd9
--- /dev/null
+++ b/frontend/src/components/Explain.tsx
@@ -0,0 +1,14 @@
+import React from 'react';
+
+interface ExplainProps {
+ label?: string;
+ children: React.ReactNode;
+}
+
+// A longer explanation folded away under a section, for readers who want it.
+export const Explain: React.FC = ({ label = 'Explain this', children }) => (
+
+ {label}
+ {children}
+
+);
diff --git a/frontend/src/components/Faq.tsx b/frontend/src/components/Faq.tsx
new file mode 100644
index 00000000..6f88d0ef
--- /dev/null
+++ b/frontend/src/components/Faq.tsx
@@ -0,0 +1,20 @@
+import React from 'react';
+import { copy } from '../content/copy';
+
+export const Faq: React.FC = () => (
+
+);
diff --git a/frontend/src/components/Footer.tsx b/frontend/src/components/Footer.tsx
new file mode 100644
index 00000000..2c5a469f
--- /dev/null
+++ b/frontend/src/components/Footer.tsx
@@ -0,0 +1,105 @@
+import React from 'react';
+import { copy } from '../content/copy';
+
+const { footer } = copy;
+
+interface FooterProps {
+ revision: string;
+}
+
+// The page footer: a short line about the project, the outside links in
+// three columns, then a bar with the licence, evidence revision and socials.
+export const Footer: React.FC = ({ revision }) => (
+
+);
+
+const helpLinks = [
+ { label: copy.faq.discord, href: 'https://discord.gg/hjUhu33uAn' },
+ { label: copy.faq.issue, href: copy.faq.issueHref },
+ { label: footer.contactEmail, href: `mailto:${footer.contactEmail}` },
+];
+
+const LinkColumn: React.FC<{ title: string; links: { label: string; href: string }[] }> = ({
+ title,
+ links,
+}) => (
+
+ {title}
+
+
+);
+
+const Socials: React.FC = () => (
+
+);
diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx
new file mode 100644
index 00000000..51f46286
--- /dev/null
+++ b/frontend/src/components/Header.tsx
@@ -0,0 +1,100 @@
+import React, { useEffect, useState } from 'react';
+import { copy } from '../content/copy';
+
+type Theme = 'light' | 'dark';
+
+// Small line icons for the header buttons, drawn with the text colour.
+const icons: Record = {
+ Source: (
+ <>
+
+
+ >
+ ),
+ Evidence: (
+ <>
+
+
+
+ >
+ ),
+ dark: ,
+ light: (
+ <>
+
+
+ >
+ ),
+};
+
+const Icon: React.FC<{ name: string }> = ({ name }) => (
+
+ {icons[name]}
+
+);
+
+// Light by default, like a reference page; the reader's choice is remembered.
+function initialTheme(): Theme {
+ try {
+ const stored = localStorage.getItem('ovl-theme');
+ if (stored === 'light' || stored === 'dark') return stored;
+ } catch {
+ // localStorage unavailable
+ }
+ return 'light';
+}
+
+export const Header: React.FC = () => {
+ const [theme, setTheme] = useState(initialTheme);
+
+ useEffect(() => {
+ try {
+ if (theme === 'dark') {
+ document.documentElement.setAttribute('data-theme', 'dark');
+ } else {
+ document.documentElement.removeAttribute('data-theme');
+ }
+ localStorage.setItem('ovl-theme', theme);
+ } catch {
+ // ignore localStorage errors
+ }
+ }, [theme]);
+
+ return (
+
+ );
+};
diff --git a/frontend/src/components/HowItWorks.tsx b/frontend/src/components/HowItWorks.tsx
new file mode 100644
index 00000000..2f278924
--- /dev/null
+++ b/frontend/src/components/HowItWorks.tsx
@@ -0,0 +1,17 @@
+import React from 'react';
+import { copy } from '../content/copy';
+
+// The idea behind the project in three steps, under the lead.
+export const HowItWorks: React.FC = () => (
+
+ {copy.how.title}
+
+ {copy.how.steps.map(step => (
+
+ {step.title}
+ {step.text}
+
+ ))}
+
+
+);
diff --git a/frontend/src/components/Lead.tsx b/frontend/src/components/Lead.tsx
new file mode 100644
index 00000000..139d72ec
--- /dev/null
+++ b/frontend/src/components/Lead.tsx
@@ -0,0 +1,80 @@
+import React from 'react';
+import { copy } from '../content/copy';
+import type { EvidenceData } from '../data/contracts';
+
+// The article title, a one-line byline and the lead paragraphs.
+export const Lead: React.FC = () => {
+ const a = copy.article;
+ return (
+
+
{a.title}
+
+ {a.from} · {a.kicker}
+
+
+ {a.title} (OVL) {a.lead[0]}
+
+ {a.lead.slice(1).map(p => (
+
{p}
+ ))}
+
+ );
+};
+
+interface KeyFactsProps {
+ evidence: EvidenceData;
+ // keeps the heading id unique if the card is ever rendered twice
+ idSuffix: string;
+}
+
+// The key numbers, beside the lead on wide screens and under it on narrow ones.
+export const KeyFacts: React.FC = ({ evidence, idSuffix }) => {
+ const titleId = `facts-title-${idSuffix}`;
+ const box = copy.article.infobox;
+ const { verifications, revision } = evidence;
+ const segments = verifications.coverage.length;
+ const matched = verifications.coverage.filter(c => c.projectResult === 'MATCH').length;
+
+ return (
+
+
+
+
+
{copy.article.factsTitle}
+
+
+
+
Recomputed
+
+ {matched} / {segments} {box.checked}
+
+
+
+
Independent checks
+
+ {verifications.independentChecksCount} {box.independent}
+
+
+
+
Release
+ {box.release}
+
+
+
Stamped
+ {box.stamped}
+
+
+
+
+ {copy.article.factsCta}
+
+
+ );
+};
diff --git a/frontend/src/components/Overview.tsx b/frontend/src/components/Overview.tsx
new file mode 100644
index 00000000..4acd67d0
--- /dev/null
+++ b/frontend/src/components/Overview.tsx
@@ -0,0 +1,86 @@
+import React from 'react';
+import { copy } from '../content/copy';
+import { Explain } from './Explain';
+import type { PreparationData } from '../data/contracts';
+
+interface OverviewProps {
+ preparation: PreparationData;
+}
+
+export const Overview: React.FC = ({ preparation }) => {
+ const o = copy.overview;
+ return (
+
+ {o.kicker}
+ {o.subtitle}
+ {o.explain}
+
+
+
+
+ Headline results
+
+
+ Claim
+ Result
+ Evidence
+
+
+
+ {o.facts.map(fact => (
+
+ {fact.title}
+
+ {fact.value}
+ {fact.total}
+
+ {fact.chip}
+
+ ))}
+
+
+
+
+ Training data
+
+
+ Articles
+ {preparation.articles.toLocaleString('en-US')}
+
+
+ Wikipedia targets
+ {preparation.wikipediaTargets.toLocaleString('en-US')}
+
+
+ Conversations
+ {preparation.conversations.toLocaleString('en-US')}
+
+
+ Training loop
+ {preparation.trainingLoopLines}
+
+
+
+
+
+
+
{o.shownTitle}
+
+ {o.shownItems.map(item => (
+ {item}
+ ))}
+
+
+
+
{o.notShownTitle}
+
+ {o.notShownItems.map(item => (
+ {item}
+ ))}
+
+
+
+
+
+ );
+};
diff --git a/frontend/src/components/TrainingTimeline.tsx b/frontend/src/components/TrainingTimeline.tsx
new file mode 100644
index 00000000..69a7af6e
--- /dev/null
+++ b/frontend/src/components/TrainingTimeline.tsx
@@ -0,0 +1,192 @@
+import React from 'react';
+import { copy } from '../content/copy';
+import type { ChainBoundary } from '../data/contracts';
+
+interface TrainingTimelineProps {
+ chain: ChainBoundary[];
+}
+
+export const TrainingTimeline: React.FC = ({ chain }) => {
+ const W = 900;
+ const L = 16;
+ const R = 16;
+ const yy = 78;
+ const x = (i: number): number => L + (i * (W - L - R)) / 37;
+ const rx = (x(10) + x(11)) / 2;
+
+ // Ticks are evenly spaced, so the very short conversation phase gets a
+ // bracket that says how long it really took.
+ const baseIndex = chain.findIndex(b => b.kind === 'base');
+ const last = chain.length - 1;
+ const convSeconds = baseIndex > 0 ? Math.round(chain[last].time - chain[baseIndex].time) : 0;
+
+ return (
+
+ {copy.timeline.kicker}
+ {copy.timeline.intro}
+
+
+
+
+ Training timeline: 38 boundaries placed by time
+
+ {copy.timeline.h2} Host restart at segment 10. Code change from segment 19 onward.
+ Both MATCH.
+
+
+
+
+ Code change from segment 19 →
+
+
+ {/* Baseline axis */}
+
+
+ {/* Green segment bars (MATCH) */}
+ {Array.from({ length: 37 }).map((_, k) => (
+
+ {`Segment ${k}: MATCH`}
+
+ ))}
+
+ {/* Host restart at segment 10 */}
+
+
+ Host restart at segment 10
+
+
+ {/* Boundary tick marks */}
+ {Array.from({ length: 38 }).map((_, i) => {
+ const isMajor = i === 0 || i === 37;
+ // 35 is skipped to avoid label collision with 37
+ const showNumber = (i % 5 === 0 && i !== 35) || i === 37;
+ return (
+
+
+ {`Boundary ${i}${chain[i] ? ` (${chain[i].kind}, step ${chain[i].control.global_step})` : ''}`}
+
+ {showNumber && (
+
+ {i}
+
+ )}
+
+ );
+ })}
+
+ {baseIndex > 0 && (
+
+
+
+ Conversation phase: {convSeconds} s · not to scale
+
+
+ )}
+
+
+ 37 segments, all matched. Evenly spaced, not to time.
+
+
+
+
+
+ {copy.timeline.restartTitle} ({copy.timeline.restartTag.toLowerCase()})
+
+
+ {copy.timeline.restartDesc} ✓ MATCH
+
+
+ {copy.timeline.codeChangeTitle} ({copy.timeline.codeChangeTag.toLowerCase()})
+
+
+ {copy.timeline.codeChangeDesc} ✓ MATCH
+
+
+
+
{copy.timeline.timestampNote}
+
+
+
+ Training boundaries sequence and timestamps
+
+
+ Boundary
+ Phase
+ Step
+ Timestamp
+
+
+
+ {chain.map(entry => (
+
+ {entry.index}
+
+ {entry.kind} ({entry.control.phase})
+
+ {entry.control.global_step}
+ {new Date(entry.time * 1000).toISOString()}
+
+ ))}
+
+
+
+ );
+};
diff --git a/frontend/src/components/VerifiableExclusion.tsx b/frontend/src/components/VerifiableExclusion.tsx
new file mode 100644
index 00000000..da8bb7f9
--- /dev/null
+++ b/frontend/src/components/VerifiableExclusion.tsx
@@ -0,0 +1,74 @@
+import React from 'react';
+import { copy } from '../content/copy';
+import { Explain } from './Explain';
+import type { ExclusionData } from '../data/contracts';
+
+interface VerifiableExclusionProps {
+ exclusion: ExclusionData;
+}
+
+const signed = (n: number) => (n > 0 ? `+${n.toFixed(4)}` : n.toFixed(4));
+
+export const VerifiableExclusion: React.FC = ({ exclusion }) => {
+ const c = copy.exclusion;
+ return (
+
+ {c.kicker}
+
+ {c.h2} Removed article: {exclusion.removedArticle} .
+
+ {c.explain}
+
+
+ Loss before and after the removal
+
+
+ Measured on
+ Original model
+ Fork
+ Change
+ Reading
+
+
+
+
+ {c.removedArticleLabel.replace('Loss on ', '')}
+ {exclusion.originalRemovedLoss.toFixed(4)}
+ {exclusion.forkRemovedLoss.toFixed(4)}
+ {signed(exclusion.removedLossDelta)}
+ {c.removedArticleNote}
+
+
+ {c.controlArticlesLabel.replace('Loss on ', '')}
+ {exclusion.originalControlLossMean.toFixed(4)}
+ {exclusion.forkControlLossMean.toFixed(4)}
+ {signed(exclusion.controlLossDelta)}
+ {c.controlArticlesNote}
+
+
+
+
+
+
+
{c.whyHoldsTitle}
+
+ {c.whyHoldsItems.map(item => (
+ {item}
+ ))}
+
+
+
+
{c.limitsTitle}
+
+ {c.limitsItems.map(item => (
+ {item}
+ ))}
+
+
+
+
+ {c.evidenceLabel} {exclusion.evidencePath}
+
+
+ );
+};
diff --git a/frontend/src/components/Verification.tsx b/frontend/src/components/Verification.tsx
new file mode 100644
index 00000000..16253846
--- /dev/null
+++ b/frontend/src/components/Verification.tsx
@@ -0,0 +1,240 @@
+import React from 'react';
+import { copy } from '../content/copy';
+import { Explain } from './Explain';
+import type { HardwareProbe, VerificationsData } from '../data/contracts';
+
+interface VerificationProps {
+ verifications: VerificationsData;
+ hardwareMap: HardwareProbe[];
+}
+
+export const Verification: React.FC = ({ verifications, hardwareMap }) => {
+ // SVG odds calculations
+ const W = 520;
+ const H = 250;
+ const L = 44;
+ const R = 16;
+ const T = 34;
+ const B = 34;
+ const max = 200;
+
+ const getX = (m: number) => L + (m / max) * (W - L - R);
+ const getY = (p: number) => T + (1 - p) * (H - T - B);
+ const getOdds = (m: number) => 1 - Math.pow(36 / 37, m);
+
+ let linePath = '';
+ let areaPath = `M${getX(0)},${getY(0)}`;
+ for (let m = 0; m <= max; m += 2) {
+ const pt = `${getX(m).toFixed(1)},${getY(getOdds(m)).toFixed(1)}`;
+ linePath += (m === 0 ? 'M' : 'L') + pt;
+ areaPath += 'L' + pt;
+ }
+ areaPath += `L${getX(max)},${getY(0)}Z`;
+
+ return (
+
+ {copy.verification.kicker}
+ {copy.verification.intro}
+
+ {copy.verification.warningNotice} {copy.verification.captionNotice}
+
+
+ Coverage map
+
+
+ {verifications.uniqueSegments} / {verifications.uniqueSegments} matched
+
+
+ ■ Project: {verifications.uniqueSegments}
+ ▨ Independent: {verifications.independentChecksCount}
+
+
+
+
+ Project
+ {verifications.coverage.map(seg => (
+
+ ))}
+ Independent
+ {verifications.coverage.map(seg => (
+
+ ))}
+
+
+
+ {verifications.coverage.map(seg => (
+
+ {seg.segment % 6 === 0 || seg.segment === 36 ? seg.segment : ''}
+
+ ))}
+
+
+
+
+
{copy.verification.oddsTitle}
+
+ {copy.verification.oddsFormula}
+
+
+
+ Detection odds curve for 37 segments
+ {copy.verification.oddsDescription}
+
+ {/* Grid lines */}
+ {[0, 0.5, 1].map(p => (
+
+
+
+ {p * 100}%
+
+
+ ))}
+
+ {/* X Axis */}
+ {[0, 50, 100, 150, 200].map(m => (
+
+ {m}
+
+ ))}
+
+ {/* Area & curve */}
+
+
+
+ {/* Threshold points (110 and 169) */}
+ {[
+ { m: 110, p: 0.95, label: '110 checks: 95%', align: 'left' },
+ { m: 169, p: 0.99, label: '169 checks: 99%', align: 'center' },
+ ].map(({ m, label, align }) => {
+ const cx = getX(m);
+ const cy = getY(getOdds(m));
+ return (
+
+
+
+
+ {label}
+
+
+ );
+ })}
+
+ {/* Current position (M = 0) */}
+
+
+ You are here: 0 independent checks
+
+
+
+
+ Detection odds by number of independent checks
+
+
+ Checks (M)
+ Detection Probability
+
+
+
+
+ 0
+ 0% (Current: 0 independent checks)
+
+
+ 110
+ 95.0%
+
+
+ 169
+ 99.0%
+
+
+
+ {copy.verification.explain}
+
+
+
+
+
{copy.verification.hardwareTitle}
+
{copy.verification.hardwareNote}
+
+
+
+ Hardware
+ Probe
+ Result
+
+
+
+ {hardwareMap.map((probe, i) => {
+ const isFullRun = probe.segment === 'all 37';
+ const scopeLabel = isFullRun
+ ? 'Full run, all 37 segments'
+ : `Segment ${probe.segment}${probe.note ? `: ${probe.note.split(';')[0]}` : ''}`;
+ return (
+
+ {probe.hardware}
+ {scopeLabel}
+
+
+ {probe.result === 'MATCH' ? '✓ MATCH' : '✕ MISMATCH'}
+
+
+
+ );
+ })}
+
+
+
+
+
+ );
+};
diff --git a/frontend/src/content/copy.ts b/frontend/src/content/copy.ts
new file mode 100644
index 00000000..2f5a5a07
--- /dev/null
+++ b/frontend/src/content/copy.ts
@@ -0,0 +1,289 @@
+// Content copy for OpenVerifiableLLM site
+export const copy = {
+ header: {
+ title: 'OpenVerifiable',
+ suffix: 'LLM',
+ tagline: 'By AOSSIE',
+ links: [
+ { label: 'Source', href: 'https://github.com/AOSSIE-Org/OpenVerifiableLLM' },
+ { label: 'Evidence', href: 'https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence' },
+ ],
+ themeToggleAria: 'Switch between dark and light theme',
+ },
+ contents: {
+ title: 'Contents',
+ items: [
+ { label: "What's proven", href: '#overview' },
+ { label: 'Check it yourself', href: '#check' },
+ { label: 'Verification', href: '#verification' },
+ { label: 'Training timeline', href: '#timeline' },
+ { label: 'Verifiable exclusion', href: '#exclusion' },
+ { label: 'Downloads', href: '#downloads' },
+ { label: 'Common questions', href: '#faq' },
+ { label: 'External links', href: '#links' },
+ ],
+ },
+ article: {
+ title: 'OpenVerifiableLLM',
+ from: 'An AOSSIE project',
+ kicker: 'Release v1.0.1 · 28 October 2026 · Record timestamped 20 October 2026',
+ lead: [
+ 'is a language model whose training anyone can recompute. It\'s small, 23 million parameters, trained on English Wikipedia and a few conversations. You don\'t have to take our word for how it was made.',
+ ],
+ factsTitle: 'Key facts',
+ factsCta: 'Try checking a segment →',
+ infobox: {
+ caption: 'OpenVerifiableLLM',
+ release: 'v1.0.1, 28 Oct',
+ parameters: '23 million',
+ data: 'English Wikipedia, one exact pass',
+ checked: 'by the project',
+ independent: 'none yet',
+ stamped: '20 Oct 2026',
+ license: 'GPL-3.0',
+ source: 'GitHub',
+ },
+ },
+ how: {
+ title: 'How it works',
+ steps: [
+ {
+ title: '1. Training is cut into pieces',
+ text: 'Training ran in 37 segments, with a checkpoint saved after each.',
+ },
+ {
+ title: '2. Each checkpoint points back',
+ text: 'Each checkpoint stores the hash of the one before, so any change breaks the chain.',
+ },
+ {
+ title: '3. Anyone can redo a piece',
+ text: 'Rerun a segment on the same GPU type and you get our exact bytes.',
+ },
+ ],
+ },
+ faq: {
+ h2: 'Common questions',
+ stillTitle: 'Still stuck?',
+ discord: 'Ask on Discord',
+ issue: 'Open an issue',
+ issueHref: 'https://github.com/AOSSIE-Org/OpenVerifiableLLM/issues',
+ items: [
+ {
+ q: 'What does "verified" mean here?',
+ a: 'Someone recomputed a segment and got exactly our bytes. It says nothing about answer quality.',
+ },
+ {
+ q: 'Who has checked it so far?',
+ a: 'Only us. Nobody outside the project has sent a result yet.',
+ },
+ {
+ q: 'What does the 10-minute check prove?',
+ a: 'That your files match the record stamped on 20 October. It doesn\'t redo training.',
+ },
+ {
+ q: 'Why does it need the same GPU type?',
+ a: 'GPUs round numbers slightly differently. On an RTX 5090 the bits match; on other hardware they drift, and that is normal.',
+ },
+ {
+ q: 'Are its answers any good?',
+ a: 'Not really. It\'s tiny and often wrong. The project is about how it was trained.',
+ },
+ {
+ q: "Why should I check if you already did?",
+ a: 'One outside result would mean more than all 46 of ours.',
+ },
+ ],
+ },
+ overview: {
+ kicker: "What's proven",
+ subtitle: 'Recomputed bit for bit on a second RTX 5090 by the project; 0 independent checks so far.',
+ explain: 'A segment is one of 37 slices of training. Start from the checkpoint before it, rerun it, and compare the result with ours. One different bit is a mismatch.',
+ facts: [
+ {
+ value: '37',
+ total: ' / 37',
+ title: 'Training segments recomputed bit for bit',
+ chip: 'Checked by the project',
+ },
+ {
+ value: 'Exact',
+ total: '',
+ title: 'Training data rebuilt from the Wikipedia dump',
+ chip: '8de1d600…',
+ },
+ {
+ value: '20 Oct',
+ total: '',
+ title: 'Release record timestamped',
+ chip: 'DigiCert · FreeTSA',
+ },
+ ],
+ shownTitle: 'What this shows',
+ shownItems: [
+ 'The weights came from the recorded run.',
+ 'The data is exactly the stated Wikipedia dump.',
+ 'The record is unchanged since 20 October.',
+ ],
+ notShownTitle: 'What it doesn\'t show',
+ notShownItems: [
+ 'That the answers are right. It\'s small and often wrong.',
+ 'That it matches on other kinds of GPU.',
+ 'That anyone outside the project agrees yet.',
+ ],
+ counts: [
+ { key: 'articles', label: 'Articles' },
+ { key: 'targets', label: 'Wikipedia targets' },
+ { key: 'conversations', label: 'Conversations' },
+ { key: 'loopLines', label: 'Training loop', value: '~630 lines' },
+ ],
+ },
+ check: {
+ kicker: 'Check it yourself',
+ intro: 'Pick how much time you have. Only the last one redoes training.',
+ ladder: [
+ {
+ time: '2 min',
+ meta: 'Free · any laptop',
+ title: 'Try the model',
+ chips: [{ label: '○ Demo, checks nothing', type: 'h' }],
+ desc: 'Chat with it on your own machine.',
+ command: 'ollama run ryoari/openverifiablellm',
+ },
+ {
+ time: '10 min',
+ meta: 'Free · no GPU',
+ title: 'Consistency check',
+ chips: [
+ { label: '✓ Release matches its record', type: 'm' },
+ { label: '○ No training recomputed', type: 'h' },
+ ],
+ desc: 'Check the release against the stamped record.',
+ command: `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`,
+ },
+ {
+ time: '1 hour',
+ meta: 'About US$1.50 · RTX 5090',
+ title: 'The actual verification',
+ isKey: true,
+ chips: [{ label: '✓ Recomputes a segment bit for bit', type: 'm' }],
+ desc: 'Rebuild one segment and compare every byte with ours.',
+ action: {
+ label: 'Open the RunPod template',
+ href: 'https://console.runpod.io/deploy?template=mai1ozh35g',
+ },
+ },
+ ],
+ },
+ verification: {
+ kicker: 'Verification',
+ intro: 'Every segment matched, but only we have checked so far. That\'s where we need help.',
+ explain: 'If one segment had been tampered with, 110 random checks would catch it 95% of the time and 169 would catch it 99%. There are no independent checks yet, so the curve starts at zero.',
+ captionNotice: '46 checks across 37 segments, all matching, none independent.',
+ warningNotice: 'Self-reported and not yet signed.',
+ oddsTitle: 'How many checks would catch a bad segment',
+ oddsFormula: 'P = 1 − (36/37)^M, with N = 37',
+ oddsDescription: 'Detection odds: 95% at 110 random checks, 99% at 169. Current independent checks: 0.',
+ hardwareTitle: 'Which hardware reproduces the bits',
+ hardwareNote: 'Only the same GPU model gives identical bits; a mismatch elsewhere is normal.',
+ },
+ timeline: {
+ kicker: 'Training timeline',
+ intro: 'The machine restarted once and the code changed once. Both segments still matched.',
+ h2: 'One machine restart and one code change. Both segments still matched.',
+ restartTitle: 'Host restart',
+ restartTag: 'Segment 10',
+ codeChangeTitle: 'Code change',
+ codeChangeTag: 'Segment 19 onward',
+ restartDesc: 'Picked up from the saved checkpoint on a new machine.',
+ codeChangeDesc: 'Each segment ran the code recorded for it.',
+ timestampNote: 'Timestamps prove the record existed by 20 October 2026, not when training ran.',
+ },
+ exclusion: {
+ kicker: 'Verifiable exclusion',
+ h2: 'We trained a second copy of the model with one article taken out, and we can show it never saw it.',
+ desc: 'The fork removed 3I/ATLAS before training reached it. Everything else is identical.',
+ removedArticleLabel: 'Loss on the removed article',
+ removedArticleNote: 'Higher, as you\'d expect: the fork never saw it.',
+ controlArticlesLabel: 'Loss on 50 control articles',
+ controlArticlesNote: 'Barely moved.',
+ whyHoldsTitle: 'Why we can say this',
+ whyHoldsItems: [
+ 'Checkpoints 0 to 30 are identical in both copies.',
+ 'The removal is recorded in the chain.',
+ 'Every segment of the second copy matched.',
+ ],
+ limitsTitle: 'What it can\'t do',
+ limitsItems: [
+ 'It shows this model never saw the article. Nothing beyond that.',
+ 'It can\'t make a model forget something it already learned.',
+ 'It\'s one run, so there\'s no variance estimate yet.',
+ ],
+ evidenceLabel: 'Evidence:',
+ explain: 'This doesn\'t make a model forget anything. It shows that if you leave a text out early enough, you can prove you did.',
+ evidencePath: 'release/unlearning-3i-atlas/',
+ },
+ downloads: {
+ kicker: 'Downloads',
+ intro: 'Run sha256sum on each file and compare it with the hash below.',
+ files: [
+ {
+ name: 'ovl-23m-chat.gguf',
+ source: 'GitHub release v1.0.1',
+ actionLabel: 'Download',
+ url: 'https://github.com/AOSSIE-Org/OpenVerifiableLLM/releases/download/v1.0.1/ovl-23m-chat.gguf',
+ },
+ {
+ name: 'Modelfile',
+ source: 'GitHub release v1.0.1',
+ actionLabel: 'Download',
+ url: 'https://github.com/AOSSIE-Org/OpenVerifiableLLM/releases/download/v1.0.1/Modelfile',
+ },
+ {
+ name: 'conversation-model.pt',
+ source: 'Hugging Face, revision 96dc282a',
+ actionLabel: 'Open',
+ url: 'https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence/blob/96dc282a/release/simple-run/conversation-model.pt',
+ },
+ {
+ name: 'ryoari/openverifiablellm',
+ source: 'Ollama',
+ actionLabel: 'Open',
+ note: 'Install with ollama run',
+ url: 'https://ollama.com/ryoari/openverifiablellm',
+ },
+ ],
+ },
+ footer: {
+ org: 'An AOSSIE project',
+ license: 'OpenVerifiableLLM is licensed under GPL-3.0.',
+ evidenceNote: 'Evidence pinned to Hugging Face revision',
+ contactEmail: 'contact@aossie.org',
+ projectHeading: 'Project',
+ communityHeading: 'Community',
+ contactHeading: 'Contact',
+ helpHeading: 'Get help',
+ projectLinks: [
+ { label: 'Source code on GitHub', href: 'https://github.com/AOSSIE-Org/OpenVerifiableLLM' },
+ { label: 'Release v1.0.1', href: 'https://github.com/AOSSIE-Org/OpenVerifiableLLM/releases/tag/v1.0.1' },
+ { label: 'Evidence on Hugging Face', href: 'https://huggingface.co/datasets/AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence' },
+ { label: 'Model on Ollama', href: 'https://ollama.com/ryoari/openverifiablellm' },
+ ],
+ communityLinks: [
+ { label: 'Contribution guidelines', href: 'https://github.com/AOSSIE-Org/Info/blob/main/Rules/Contribution.md' },
+ { label: 'Code of Conduct', href: 'https://github.com/AOSSIE-Org/Info/blob/main/CODE_OF_CONDUCT.md' },
+ { label: 'AI usage policy', href: 'https://github.com/AOSSIE-Org/Info/blob/main/Rules/AI.md' },
+ { label: 'About AOSSIE', href: 'https://aossie.org/en/about' },
+ ],
+ },
+};
diff --git a/frontend/src/data/contracts.ts b/frontend/src/data/contracts.ts
new file mode 100644
index 00000000..27a38e1f
--- /dev/null
+++ b/frontend/src/data/contracts.ts
@@ -0,0 +1,116 @@
+// Contracts and schemas for OpenVerifiableLLM evidence data
+
+export type CanonicalCheckerCategory = 'project' | 'independent';
+
+// Explicit whitelist mapping for recognized checker strings in evidence
+export const KNOWN_CHECKER_MAP: Readonly> = Object.freeze({
+ 'project second pod': 'project',
+ 'project training pod': 'project',
+ 'project fresh machine public files only': 'project',
+});
+
+export interface ChainControl {
+ batches?: string;
+ cursor: number;
+ epoch: number;
+ global_step: number;
+ phase: string;
+ phase_step: number;
+ pos: [number, number];
+}
+
+export interface ChainBoundary {
+ index: number;
+ kind: 'initial' | 'progress' | 'base' | 'transition' | 'epoch' | 'final';
+ control: ChainControl;
+ state: string;
+ model: string;
+ previous: string | null;
+ time: number;
+ entryHash: string;
+}
+
+export interface RawVerificationCheck {
+ checker: string;
+ code: string;
+ driver: string;
+ gpu: string;
+ result: 'MATCH' | 'MISMATCH';
+ segment: number;
+}
+
+export interface SegmentCoverage {
+ segment: number;
+ projectResult: 'MATCH' | 'MISMATCH';
+ independentResult: 'MATCH' | 'MISMATCH' | null;
+ checks: RawVerificationCheck[];
+}
+
+export interface VerificationsData {
+ totalChecks: number;
+ uniqueSegments: number;
+ projectChecksCount: number;
+ independentChecksCount: number;
+ coverage: SegmentCoverage[];
+ rawChecks: RawVerificationCheck[];
+}
+
+export interface HardwareProbe {
+ segment: number | string;
+ result: 'MATCH' | 'MISMATCH';
+ hardware: string;
+ driver: string;
+ software: string;
+ note: string;
+}
+
+export interface ReleaseAnchor {
+ chain_entries: number;
+ chain_head_index: number;
+ chain_head_sha256: string;
+ chain_jsonl_sha256: string;
+ commit: string;
+ dataset: string;
+ final_model: string;
+ final_state: string;
+ path: string;
+ release_hashes_sha256: string;
+ schema: string;
+ timestamp: string;
+ authorities: string[];
+}
+
+export interface ExclusionData {
+ removedArticle: string;
+ originalRemovedLoss: number;
+ forkRemovedLoss: number;
+ removedLossDelta: number;
+ originalControlLossMean: number;
+ forkControlLossMean: number;
+ controlLossDelta: number;
+ controlArticlesCount: number;
+ evidencePath: string;
+}
+
+export interface PreparationData {
+ articles: number;
+ wikipediaTargets: number;
+ conversations: number;
+ trainingLoopLines: string;
+ preparedDataId: string;
+}
+
+export interface EvidenceData {
+ schemaVersion: number;
+ dataset: string;
+ revision: string;
+ fetchedAt: string;
+ sourceHashes: Record;
+ preparation: PreparationData;
+ chain: ChainBoundary[];
+ verifications: VerificationsData;
+ hardwareMap: HardwareProbe[];
+ anchor: ReleaseAnchor;
+ exclusion: ExclusionData;
+ releaseHashes: Record;
+}
diff --git a/frontend/src/data/validate.ts b/frontend/src/data/validate.ts
new file mode 100644
index 00000000..118fb931
--- /dev/null
+++ b/frontend/src/data/validate.ts
@@ -0,0 +1,184 @@
+// Structural and internal consistency validator for OpenVerifiableLLM evidence data
+import {
+ type EvidenceData,
+ KNOWN_CHECKER_MAP,
+} from './contracts';
+
+export class SnapshotError extends Error {
+ constructor(message: string) {
+ super(message);
+ this.name = 'SnapshotError';
+ }
+}
+
+function assert(condition: boolean, message: string): asserts condition {
+ if (!condition) {
+ throw new SnapshotError(message);
+ }
+}
+
+const HEX_64_REGEX = /^[0-9a-f]{64}$/i;
+
+export function validateEvidence(data: unknown): EvidenceData {
+ assert(typeof data === 'object' && data !== null, 'Evidence data must be a non-null object');
+
+ const root = data as Record;
+ assert(
+ typeof root.schemaVersion === 'number' && Number.isInteger(root.schemaVersion) && root.schemaVersion >= 1,
+ `Invalid schemaVersion: ${root.schemaVersion}`
+ );
+ assert(
+ typeof root.revision === 'string' && /^[0-9a-f]{7,40}$/i.test(root.revision),
+ `Invalid evidence revision format: ${root.revision}`
+ );
+
+ // 1. Preparation counts & types (internal consistency, no hand-typed numbers)
+ assert(typeof root.preparation === 'object' && root.preparation !== null, 'Missing preparation section');
+ const prep = root.preparation as Record;
+ assert(
+ typeof prep.articles === 'number' && Number.isInteger(prep.articles) && prep.articles > 0,
+ `articles count must be a positive integer, got ${prep.articles}`
+ );
+ assert(
+ typeof prep.wikipediaTargets === 'number' && Number.isInteger(prep.wikipediaTargets) && prep.wikipediaTargets > 0,
+ `wikipediaTargets count must be a positive integer, got ${prep.wikipediaTargets}`
+ );
+ assert(
+ typeof prep.conversations === 'number' && Number.isInteger(prep.conversations) && prep.conversations > 0,
+ `conversations count must be a positive integer, got ${prep.conversations}`
+ );
+ assert(
+ typeof prep.preparedDataId === 'string' && HEX_64_REGEX.test(prep.preparedDataId),
+ `Invalid preparedDataId SHA-256 hash: ${prep.preparedDataId}`
+ );
+
+ // 2. Chain boundaries: cryptographic continuity and segment count derivation
+ assert(Array.isArray(root.chain), 'Chain must be an array');
+ assert(
+ root.chain.length >= 2,
+ `Chain must have at least 2 entries to define training segments, got ${root.chain.length}`
+ );
+
+ const chain = root.chain as Array>;
+ for (let i = 0; i < chain.length; i++) {
+ const entry = chain[i];
+ assert(entry.index === i, `Chain entry index mismatch: expected ${i}, got ${entry.index}`);
+ assert(typeof entry.state === 'string' && HEX_64_REGEX.test(entry.state), `Invalid state hash at boundary ${i}`);
+ assert(typeof entry.model === 'string' && HEX_64_REGEX.test(entry.model), `Invalid model hash at boundary ${i}`);
+ assert(typeof entry.entryHash === 'string' && HEX_64_REGEX.test(entry.entryHash), `Invalid entryHash at boundary ${i}`);
+
+ if (i === 0) {
+ assert(entry.previous === null, 'Boundary 0 must have null previous pointer');
+ } else {
+ const prevEntry = chain[i - 1];
+ assert(
+ entry.previous === prevEntry.entryHash,
+ `Broken previous link at boundary ${i}: ${entry.previous} !== ${prevEntry.entryHash}`
+ );
+ }
+ }
+
+ // Number of segments is derived directly from chain boundaries (N boundaries => N - 1 segments)
+ const segmentCount = chain.length - 1;
+
+ // 3. Verifications and segment coverage
+ assert(typeof root.verifications === 'object' && root.verifications !== null, 'Missing verifications section');
+ const ver = root.verifications as Record;
+ assert(
+ ver.uniqueSegments === segmentCount,
+ `Segment count mismatch: chain has ${chain.length} boundaries (${segmentCount} segments), but verifications reported ${ver.uniqueSegments}`
+ );
+ assert(Array.isArray(ver.coverage), 'Verifications coverage must be an array');
+ assert(
+ ver.coverage.length === segmentCount,
+ `Coverage array length (${ver.coverage.length}) does not match derived segment count (${segmentCount})`
+ );
+
+ const coverage = ver.coverage as Array>;
+ for (let s = 0; s < segmentCount; s++) {
+ const seg = coverage[s];
+ assert(seg.segment === s, `Coverage segment order mismatch at index ${s}`);
+ assert(
+ seg.projectResult === 'MATCH' || seg.projectResult === 'MISMATCH',
+ `Invalid projectResult for segment ${s}: ${seg.projectResult}`
+ );
+ }
+
+ // 4. Verification checks: every row in verifications.jsonl points at a real segment
+ assert(Array.isArray(ver.rawChecks), 'verifications.rawChecks must be an array');
+ const rawChecks = ver.rawChecks as Array>;
+ assert(rawChecks.length >= segmentCount, `Expected at least ${segmentCount} checks, got ${rawChecks.length}`);
+
+ for (let r = 0; r < rawChecks.length; r++) {
+ const check = rawChecks[r];
+ assert(
+ typeof check.segment === 'number' && Number.isInteger(check.segment),
+ `Check #${r} segment must be an integer, got ${check.segment}`
+ );
+ assert(
+ check.segment >= 0 && check.segment < segmentCount,
+ `Check #${r} points at invalid segment ${check.segment}; must be in [0, ${segmentCount - 1}]`
+ );
+ assert(typeof check.checker === 'string', `Check #${r} checker name must be a string`);
+ assert(
+ Object.prototype.hasOwnProperty.call(KNOWN_CHECKER_MAP, check.checker),
+ `Unknown or unauthorized checker string: "${check.checker}"`
+ );
+ const category = KNOWN_CHECKER_MAP[check.checker];
+ assert(
+ category === 'project' || category === 'independent',
+ `Checker category outside {project, independent}: ${category}`
+ );
+ assert(
+ check.result === 'MATCH' || check.result === 'MISMATCH',
+ `Invalid verification result: ${check.result}`
+ );
+ }
+
+ // 5. Source Hashes & Release Hashes validation
+ assert(typeof root.sourceHashes === 'object' && root.sourceHashes !== null, 'Missing sourceHashes');
+ const sourceHashes = root.sourceHashes as Record;
+ for (const [file, hash] of Object.entries(sourceHashes)) {
+ assert(
+ typeof hash === 'string' && HEX_64_REGEX.test(hash),
+ `Invalid or corrupted SHA-256 hash for ${file}: ${hash}`
+ );
+ }
+
+ assert(typeof root.releaseHashes === 'object' && root.releaseHashes !== null, 'Missing releaseHashes');
+ const releaseHashes = root.releaseHashes as Record;
+ assert(Object.keys(releaseHashes).length > 0, 'releaseHashes must not be empty');
+ for (const [file, hash] of Object.entries(releaseHashes)) {
+ assert(
+ typeof hash === 'string' && HEX_64_REGEX.test(hash),
+ `Invalid SHA-256 hash in releaseHashes for ${file}: ${hash}`
+ );
+ }
+
+ // 6. Exclusion validation (internal loss delta consistency)
+ assert(typeof root.exclusion === 'object' && root.exclusion !== null, 'Missing exclusion section');
+ const excl = root.exclusion as Record;
+ assert(typeof excl.removedArticle === 'string' && excl.removedArticle.length > 0, 'Missing removedArticle');
+ assert(typeof excl.originalRemovedLoss === 'number' && excl.originalRemovedLoss > 0, 'Invalid originalRemovedLoss');
+ assert(typeof excl.forkRemovedLoss === 'number' && excl.forkRemovedLoss > 0, 'Invalid forkRemovedLoss');
+ assert(typeof excl.removedLossDelta === 'number', 'Invalid removedLossDelta');
+ assert(
+ Math.abs(excl.removedLossDelta - (excl.forkRemovedLoss - excl.originalRemovedLoss)) < 0.001,
+ `Exclusion removed loss delta inconsistent: ${excl.removedLossDelta} !== ${excl.forkRemovedLoss} - ${excl.originalRemovedLoss}`
+ );
+
+ assert(
+ typeof excl.controlArticlesCount === 'number' && Number.isInteger(excl.controlArticlesCount) && excl.controlArticlesCount > 0,
+ `controlArticlesCount must be a positive integer, got ${excl.controlArticlesCount}`
+ );
+ assert(typeof excl.originalControlLossMean === 'number' && excl.originalControlLossMean > 0, 'Invalid originalControlLossMean');
+ assert(typeof excl.forkControlLossMean === 'number' && excl.forkControlLossMean > 0, 'Invalid forkControlLossMean');
+ assert(typeof excl.controlLossDelta === 'number', 'Invalid controlLossDelta');
+ assert(
+ Math.abs(excl.controlLossDelta - (excl.forkControlLossMean - excl.originalControlLossMean)) < 0.001,
+ `Exclusion control loss delta inconsistent: ${excl.controlLossDelta} !== ${excl.forkControlLossMean} - ${excl.originalControlLossMean}`
+ );
+ assert(excl.evidencePath === 'release/unlearning-3i-atlas/', `Invalid exclusion evidencePath: ${excl.evidencePath}`);
+
+ return data as EvidenceData;
+}
diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx
new file mode 100644
index 00000000..82a4f9ec
--- /dev/null
+++ b/frontend/src/main.tsx
@@ -0,0 +1,13 @@
+import { StrictMode } from 'react';
+import { createRoot } from 'react-dom/client';
+import App from './App';
+import './styles/base.css';
+
+const root = document.getElementById('root');
+if (!root) throw new Error('root element missing');
+
+createRoot(root).render(
+
+
+ ,
+);
diff --git a/frontend/src/styles/base.css b/frontend/src/styles/base.css
new file mode 100644
index 00000000..48e96406
--- /dev/null
+++ b/frontend/src/styles/base.css
@@ -0,0 +1,1211 @@
+@import "./tokens.css";
+
+/* A study page in the style of an encyclopedia article: a contents sidebar,
+ one readable column, an infobox, plain tables and figures with captions.
+ System fonts only, and no animation of any kind. */
+
+* {
+ box-sizing: border-box;
+}
+
+html {
+ -webkit-text-size-adjust: 100%;
+ scroll-padding-top: 16px;
+}
+
+body {
+ margin: 0;
+ background: var(--paper);
+ color: var(--ink);
+ font: 400 16px/1.6 var(--sans);
+}
+
+h1,
+h2,
+h3,
+p,
+dl,
+dd {
+ margin: 0;
+}
+
+a {
+ color: var(--link);
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a:visited {
+ color: var(--link-visited);
+}
+
+:focus-visible {
+ outline: 2px solid var(--focus-ring);
+ outline-offset: 2px;
+}
+
+code,
+pre {
+ font-family: var(--mono);
+ font-size: 0.875em;
+}
+
+code {
+ padding: 1px 4px;
+ border: 1px solid var(--rule);
+ border-radius: 2px;
+ background: var(--code);
+ overflow-wrap: anywhere;
+}
+
+.skip {
+ position: absolute;
+ left: -999px;
+ top: 8px;
+ z-index: 10;
+}
+
+.skip:focus {
+ left: 8px;
+ padding: 6px 12px;
+ background: var(--paper);
+ border: 2px solid var(--focus-ring);
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border: 0;
+ left: 0;
+}
+
+/* tables ignore the 1px width, so pin their layout too */
+table.sr-only {
+ table-layout: fixed;
+ width: 1px;
+ max-width: 1px;
+}
+
+/* Logos: the light-theme logo by default, the dark one in dark mode */
+/* important: these must win over layout rules such as .brand img */
+.logo-d {
+ display: none !important;
+}
+
+:root[data-theme="dark"] .logo-d {
+ display: inline-block !important;
+}
+
+:root[data-theme="dark"] .logo-l {
+ display: none !important;
+}
+
+/* Header ------------------------------------------------------------------ */
+header {
+ border-bottom: 1px solid var(--rule-strong);
+ background: var(--sheet);
+}
+
+.bar {
+ display: flex;
+ align-items: center;
+ gap: 20px;
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 12px 24px;
+}
+
+.brand {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ color: var(--ink);
+}
+
+.brand:visited {
+ color: var(--ink);
+}
+
+.brand:hover {
+ text-decoration: none;
+}
+
+.brand img {
+ display: block;
+}
+
+.brand-name {
+ display: block;
+ font: 400 20px/1.1 var(--serif);
+}
+
+.brand-name em {
+ font-style: normal;
+}
+
+.brand-by {
+ display: block;
+ font-size: 12px;
+ color: var(--ink-3);
+}
+
+.top-links {
+ display: flex;
+ gap: 16px;
+ margin-left: auto;
+ font-size: 14px;
+}
+
+.tbtn,
+.btn,
+.copy-btn {
+ min-height: 32px;
+ padding: 4px 12px;
+ border: 1px solid var(--rule-strong);
+ border-radius: 2px;
+ background: var(--sheet);
+ color: var(--ink);
+ font: 600 14px var(--sans);
+ cursor: pointer;
+}
+
+.tbtn:hover,
+.btn:hover,
+.copy-btn:hover {
+ background: var(--rule);
+}
+
+/* Page: a contents bar under the header, then the article at full width -- */
+.tocbar {
+ position: sticky;
+ top: 0;
+ z-index: 10;
+ border-bottom: 1px solid var(--rule);
+ background: var(--paper);
+}
+
+.toc {
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 0 24px;
+ font-size: 14px;
+}
+
+.toc ol,
+.toc-mobile ol {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+.toc ol {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0 4px;
+ margin-left: -10px;
+}
+
+.toc li a {
+ display: block;
+ padding: 12px 10px 10px;
+ border-bottom: 2px solid transparent;
+ color: var(--ink-3);
+ font-weight: 500;
+}
+
+.toc li a:visited {
+ color: var(--ink-3);
+}
+
+.toc li a:hover {
+ border-bottom-color: var(--rule-strong);
+ color: var(--ink);
+ text-decoration: none;
+}
+
+.toc li a[aria-current] {
+ border-bottom-color: var(--link);
+ color: var(--ink);
+ font-weight: 600;
+}
+
+.toc-mobile li a {
+ display: block;
+ padding: 4px 0;
+}
+
+.toc-mobile {
+ display: none;
+}
+
+.page {
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 24px 24px 64px;
+}
+
+.article section {
+ scroll-margin-top: 48px;
+}
+
+.article {
+ min-width: 0;
+}
+
+.article p,
+.article ul,
+.article dl,
+.article table,
+.article figure,
+.article .code {
+ margin-bottom: 16px;
+}
+
+.article p {
+ max-width: none;
+}
+
+/* Title and section headings, serif with a rule underneath */
+.lead h1 {
+ padding-bottom: 6px;
+ border-bottom: 1px solid var(--rule-strong);
+ font: 400 36px/1.25 var(--serif);
+}
+
+.byline {
+ margin: 6px 0 18px;
+ font-size: 14px;
+ color: var(--ink-3);
+}
+
+.article section {
+ clear: both;
+ padding-top: 32px;
+}
+
+.article h2 {
+ margin-bottom: 14px;
+ padding-bottom: 6px;
+ border-bottom: 1px solid var(--rule-strong);
+ font: 400 28px/1.3 var(--serif);
+}
+
+.article h3 {
+ margin: 20px 0 8px;
+ font-size: 17px;
+ font-weight: 700;
+}
+
+.article ul {
+ padding-left: 24px;
+}
+
+.article li + li {
+ margin-top: 4px;
+}
+
+/* Infobox on the right of the lead ---------------------------------------- */
+.infobox {
+ float: right;
+ clear: right;
+ width: 290px;
+ margin: 4px 0 16px 28px;
+ border: 1px solid var(--rule-strong);
+ border-collapse: collapse;
+ background: var(--sheet);
+ font-size: 14px;
+ line-height: 1.45;
+}
+
+.infobox .ib-title {
+ padding: 8px 10px;
+ background: var(--rule);
+ font-size: 16px;
+ text-align: center;
+}
+
+.infobox th,
+.infobox td {
+ padding: 5px 10px;
+ border-top: 1px solid var(--rule);
+ vertical-align: top;
+ text-align: left;
+}
+
+.infobox th {
+ width: 42%;
+ font-weight: 700;
+}
+
+.infobox .ib-logo {
+ padding: 12px;
+ text-align: center;
+}
+
+/* Tables ------------------------------------------------------------------ */
+.wikitable {
+ width: 100%;
+ border: 1px solid var(--rule-strong);
+ border-collapse: collapse;
+ background: var(--paper);
+ font-size: 15px;
+}
+
+.wikitable tbody tr:nth-child(even) {
+ background: var(--sheet);
+}
+
+.wikitable caption {
+ padding: 6px 0;
+ font-weight: 700;
+ text-align: left;
+}
+
+.wikitable th,
+.wikitable td {
+ padding: 6px 12px;
+ border: 1px solid var(--rule-strong);
+ text-align: left;
+ vertical-align: top;
+}
+
+.wikitable thead th {
+ background: var(--rule);
+}
+
+.wikitable tbody th {
+ font-weight: 600;
+}
+
+.wikitable .num {
+ text-align: right;
+ font-variant-numeric: tabular-nums;
+ white-space: nowrap;
+}
+
+.files .hash code {
+ display: inline-block;
+ margin-bottom: 4px;
+}
+
+/* Two lists side by side */
+.cols {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 16px;
+ margin-bottom: 16px;
+}
+
+.cols > div {
+ padding: 4px 16px 0;
+ border: 1px solid var(--rule);
+ border-top: 3px solid var(--match);
+ background: var(--aqua);
+}
+
+.cols > div + div {
+ border-top-color: var(--rule-strong);
+ background: var(--nimbus);
+}
+
+.cols h3 {
+ margin-top: 10px;
+}
+
+.ticks li::marker {
+ content: "✓ ";
+ color: var(--match);
+}
+
+.circles li::marker {
+ content: "○ ";
+ color: var(--ink-3);
+}
+
+/* Results: a text label, a symbol and a colour, never colour alone */
+.res {
+ display: inline-block;
+ padding: 0 6px;
+ border-radius: 2px;
+ font: 600 13px var(--mono);
+ white-space: nowrap;
+}
+
+.res.match {
+ background: var(--match-soft);
+ color: var(--match);
+}
+
+.res.mismatch {
+ background: var(--miss-soft);
+ color: var(--miss);
+}
+
+.code {
+ position: relative;
+}
+
+.code pre {
+ margin: 0;
+ padding: 12px 96px 12px 14px;
+ border: 1px solid var(--rule-strong);
+ background: var(--code);
+ overflow-x: auto;
+ line-height: 1.6;
+}
+
+.code .copy-btn {
+ position: absolute;
+ top: 8px;
+ right: 8px;
+}
+
+/* Notice box, like an article maintenance banner */
+.ambox {
+ margin-bottom: 16px;
+ padding: 10px 14px;
+ border: 1px solid var(--rule-strong);
+ border-left: 8px solid var(--notice-rule);
+ background: var(--notice);
+ font-size: 15px;
+}
+
+/* Coverage map */
+.cov-sum {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: baseline;
+ gap: 8px 20px;
+}
+
+.legend {
+ display: inline-flex;
+ flex-wrap: wrap;
+ gap: 16px;
+ font: 13px var(--mono);
+}
+
+.lg-p {
+ color: var(--match);
+}
+
+.lg-i {
+ color: var(--ink-3);
+}
+
+.covgrid,
+.axis {
+ display: grid;
+ grid-template-columns: 96px repeat(37, 1fr);
+ gap: 2px;
+ align-items: center;
+}
+
+.rl {
+ font-size: 13px;
+ color: var(--ink-3);
+}
+
+.cell {
+ height: 22px;
+ border: 1px solid var(--rule-strong);
+}
+
+.cell.p {
+ background: var(--match-fill);
+ border-color: var(--match-fill);
+}
+
+.cell.i {
+ background: repeating-linear-gradient(135deg, transparent 0 3px, var(--rule) 3px 4px);
+}
+
+.axis {
+ margin: 4px 0 16px;
+ font: 11px var(--mono);
+ color: var(--ink-3);
+}
+
+.axis span {
+ text-align: center;
+}
+
+/* Figures with a border and caption, like article thumbnails */
+.thumb {
+ max-width: none;
+ margin: 0 0 16px;
+ padding: 8px;
+ border: 1px solid var(--rule-strong);
+ background: var(--sheet);
+}
+
+.thumb.wide {
+ max-width: none;
+}
+
+.thumb figcaption {
+ padding: 6px 4px 2px;
+ font-size: 14px;
+ color: var(--ink-3);
+}
+
+.thumb .fig-title {
+ padding: 0 4px 6px;
+ color: var(--ink);
+ font-weight: 600;
+}
+
+.thumb svg {
+ display: block;
+ width: 100%;
+ height: auto;
+}
+
+svg text {
+ font-family: var(--sans);
+ fill: var(--ink-3);
+}
+
+.tlwrap {
+ overflow-x: auto;
+}
+
+/* Definition lists: timeline events and questions */
+.events dt,
+.qa dt {
+ font-weight: 700;
+}
+
+.events dd,
+.qa dd {
+ margin: 2px 0 12px 24px;
+}
+
+.note {
+ font-size: 14px;
+ color: var(--ink-3);
+}
+
+/* Footer ------------------------------------------------------------------ */
+footer {
+ border-top: 1px solid var(--rule);
+ background: var(--nimbus);
+ font-size: 14px;
+ color: var(--ink-3);
+}
+
+.foot-org {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ color: var(--ink);
+ font-weight: 600;
+}
+
+.foot-org:visited {
+ color: var(--ink);
+}
+
+.socials {
+ display: flex;
+ gap: 4px;
+}
+
+.socials a {
+ display: grid;
+ place-items: center;
+ width: 36px;
+ height: 36px;
+ color: var(--ink-3);
+}
+
+.socials svg {
+ width: 18px;
+ height: 18px;
+ fill: none;
+ stroke: currentColor;
+ stroke-width: 1.8;
+ stroke-linecap: round;
+ stroke-linejoin: round;
+}
+
+.fcols {
+ display: grid;
+ grid-template-columns: 1.4fr repeat(3, 1fr);
+ gap: 32px;
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 36px 24px 28px;
+}
+
+.fcols h2 {
+ margin: 0 0 10px;
+ font: 600 13px var(--sans);
+ letter-spacing: 0.06em;
+ text-transform: uppercase;
+ color: var(--ink);
+}
+
+.fcols ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+.fcols li {
+ margin-bottom: 6px;
+}
+
+.fbar {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: space-between;
+ gap: 8px 24px;
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 12px 24px 20px;
+ border-top: 1px solid var(--rule);
+}
+
+/* Loading and error states */
+.page-msg {
+ max-width: 640px;
+ margin: 64px auto;
+ padding: 0 24px;
+}
+
+.page-msg h2 {
+ margin-bottom: 8px;
+ font: 400 24px var(--serif);
+}
+
+.page-msg .err {
+ margin-bottom: 16px;
+ color: var(--miss);
+}
+
+/* Narrow screens: contents become a collapsible box, the infobox stacks ---- */
+@media (max-width: 900px) {
+ .fcols {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+
+ .fcol-about {
+ grid-column: 1 / -1;
+ }
+
+ .toc {
+ display: none;
+ }
+
+ .tocbar {
+ position: static;
+ border: 0;
+ }
+
+ .toc-mobile {
+ display: block;
+ margin: 12px 16px 0;
+ padding: 8px 12px;
+ border: 1px solid var(--rule-strong);
+ background: var(--sheet);
+ font-size: 14px;
+ }
+
+ .toc-mobile summary {
+ margin: 0;
+ cursor: pointer;
+ }
+
+ .toc-mobile ol {
+ margin-top: 8px;
+ }
+
+ .infobox {
+ float: none;
+ width: 100%;
+ margin: 0 0 16px;
+ }
+
+ .top-links {
+ display: none;
+ }
+
+ .tbtn {
+ margin-left: auto;
+ }
+}
+
+@media (max-width: 640px) {
+ .cols {
+ grid-template-columns: 1fr;
+ gap: 0;
+ }
+
+ .covgrid,
+ .axis {
+ grid-template-columns: repeat(37, 1fr);
+ gap: 1px;
+ }
+
+ .covgrid .rl {
+ grid-column: 1 / -1;
+ margin-top: 6px;
+ }
+
+ .axis > span:first-child {
+ display: none;
+ }
+
+ .cell {
+ height: 18px;
+ }
+
+ /* tables fit the screen instead of scrolling sideways */
+ .wikitable {
+ width: 100%;
+ font-size: 14px;
+ }
+
+ .wikitable th,
+ .wikitable td {
+ padding: 6px 8px;
+ overflow-wrap: anywhere;
+ }
+
+ .wikitable .num {
+ white-space: normal;
+ }
+
+ .code pre {
+ padding-right: 14px;
+ padding-top: 44px;
+ }
+
+}
+
+
+.facts-card {
+ padding: 12px 16px;
+ border: 1px solid var(--rule-strong);
+ border-radius: 4px;
+ background: var(--orchid);
+ font-size: 14px;
+}
+
+.fc-head {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ margin-bottom: 10px;
+ padding-bottom: 8px;
+ border-bottom: 1px solid var(--rule);
+}
+
+.facts-card .fc-head h2 {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font: 700 15px var(--sans);
+}
+
+.facts-card dl {
+ display: grid;
+ gap: 10px;
+}
+
+.facts-card dt {
+ font-size: 12px;
+ color: var(--ink-3);
+}
+
+.facts-card dd {
+ margin: 0;
+}
+
+.fc-big dd {
+ font: 600 22px/1.2 var(--sans);
+ font-variant-numeric: tabular-nums;
+}
+
+.fc-big dd span {
+ display: block;
+ font: 400 13px var(--sans);
+ color: var(--ink-3);
+}
+
+.fc-cta {
+ display: block;
+ margin-top: 10px;
+ padding-top: 8px;
+ border-top: 1px solid var(--rule);
+ font-weight: 600;
+}
+
+/* one-line subtitle under a section heading */
+.article .sub {
+ margin-bottom: 16px;
+ color: var(--ink-3);
+}
+
+.lead .intro {
+ font-size: 17px;
+}
+
+/* Side by side: the lead and its key facts, and pairs of blocks in sections */
+.top {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) 360px;
+ gap: 32px;
+ align-items: start;
+}
+
+/* two big numbers on one row, three small facts on the next */
+.top .facts-card dl {
+ grid-template-columns: repeat(6, minmax(0, 1fr));
+ gap: 10px 14px;
+}
+
+.top .facts-card dl > div {
+ grid-column: span 2;
+}
+
+.top .facts-card dl > .fc-big {
+ grid-column: span 3;
+}
+
+.split,
+.pair {
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ gap: 24px;
+ align-items: start;
+ margin-bottom: 16px;
+}
+
+.split .wikitable,
+.pair .thumb {
+ margin-top: 0;
+}
+
+
+.cols.stack {
+ grid-template-columns: minmax(0, 1fr);
+ gap: 12px;
+}
+
+/* Common questions: ruled columns, like the checks */
+.qa {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: 28px 32px;
+ margin-bottom: 28px;
+}
+
+.qa > div {
+ padding: 2px 0 2px 18px;
+ border-left: 2px solid var(--rule-strong);
+}
+
+.qa dt {
+ margin-bottom: 6px;
+ font-size: 17px;
+}
+
+.qa dd {
+ margin: 0;
+ color: var(--ink-3);
+}
+
+@media (min-width: 901px) and (max-width: 1100px) {
+ .qa {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+}
+
+@media (max-width: 900px) {
+ .top,
+ .split,
+ .pair,
+ .qa {
+ grid-template-columns: minmax(0, 1fr);
+ }
+}
+
+/* How it works: three numbered steps under the lead */
+.how ol {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: 16px;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+.article .how li {
+ margin: 0;
+ padding: 14px 16px;
+ border: 1px solid var(--rule);
+ border-top: 3px solid var(--link);
+ background: var(--ice);
+}
+
+.how h3 {
+ margin: 0 0 6px;
+ font-size: 16px;
+}
+
+.article .how p {
+ margin: 0;
+}
+
+/* "Explain this": a longer note folded away under a section */
+.explain {
+ margin-bottom: 16px;
+ border: 1px solid var(--rule);
+ background: var(--sheet);
+}
+
+.explain summary {
+ padding: 8px 12px;
+ color: var(--link);
+ font-weight: 600;
+ cursor: pointer;
+}
+
+.explain > div {
+ padding: 0 12px 12px;
+}
+
+@media (max-width: 900px) {
+ .how ol {
+ grid-template-columns: minmax(0, 1fr);
+ }
+}
+
+/* Check it yourself: three columns, each set off by a thin rule */
+.steps {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: 32px;
+ list-style: none;
+ margin: 8px 0 16px;
+ padding: 0;
+}
+
+.article .steps > li {
+ margin: 0;
+ padding: 2px 0 2px 18px;
+ border-left: 2px solid var(--rule-strong);
+}
+
+.article .steps > li.key {
+ border-left-color: var(--match-fill);
+}
+
+.article .step-meta {
+ margin: 0;
+ font-size: 13px;
+ color: var(--ink-3);
+}
+
+.step h3 {
+ margin: 2px 0 6px;
+ font-size: 17px;
+}
+
+.article .step-desc {
+ margin-bottom: 10px;
+ color: var(--ink-3);
+}
+
+.article .step-proves {
+ list-style: none;
+ margin: 0 0 12px;
+ padding: 0;
+ font-size: 14px;
+}
+
+.article .step-proves li {
+ margin: 0;
+ color: var(--ink-3);
+}
+
+.article .step-proves li.m {
+ color: var(--match);
+}
+
+.step .code pre {
+ padding: 10px 84px 10px 12px;
+ font-size: 13px;
+}
+
+.step-code summary {
+ color: var(--link);
+ font-weight: 600;
+ cursor: pointer;
+}
+
+.step-code .code {
+ margin-top: 8px;
+}
+
+.step-code pre {
+ max-height: 260px;
+}
+
+.article .step-action {
+ margin: 0;
+ font-weight: 600;
+}
+
+/* a one-line command wraps instead of scrolling in the narrow column */
+.step > .code pre {
+ white-space: pre-wrap;
+ overflow-wrap: anywhere;
+}
+
+.step .step-code pre {
+ padding: 40px 12px 10px;
+}
+
+/* Verification: the odds chart and the hardware table as matching panels */
+.pair {
+ align-items: stretch;
+}
+
+.panel {
+ display: flex;
+ flex-direction: column;
+ min-width: 0;
+}
+
+.article .panel h3 {
+ margin: 0 0 4px;
+}
+
+.article .panel .note {
+ margin-bottom: 12px;
+}
+
+.article .panel .thumb,
+.article .panel .hw {
+ flex: 1;
+ margin: 0;
+}
+
+.panel .thumb {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+}
+
+.panel .explain {
+ margin: 8px 0 0;
+}
+
+.hw {
+ font-size: 14px;
+}
+
+.hw th,
+.hw td {
+ padding: 8px 10px;
+}
+
+/* Header buttons: Source, Evidence and the theme switch share one look */
+.top-links {
+ gap: 8px;
+}
+
+.hbtn {
+ display: inline-flex;
+ align-items: center;
+ gap: 6px;
+ min-height: 34px;
+ padding: 5px 12px;
+ border: 1px solid var(--rule-strong);
+ border-radius: 6px;
+ background: var(--paper);
+ color: var(--ink);
+ font: 600 14px var(--sans);
+ text-decoration: none;
+}
+
+.hbtn:visited {
+ color: var(--ink);
+}
+
+.hbtn:hover {
+ border-color: var(--ink-3);
+ background: var(--sheet);
+ text-decoration: none;
+}
+
+.hicon {
+ width: 16px;
+ height: 16px;
+ fill: none;
+ stroke: currentColor;
+ stroke-width: 1.8;
+ stroke-linecap: round;
+ stroke-linejoin: round;
+}
+
+/* Exclusion: the two lists as equal ruled columns under the table */
+.cols.ruled {
+ gap: 32px;
+ margin-top: 8px;
+}
+
+.cols.ruled > div {
+ padding: 14px 18px 4px;
+ border: 0;
+ border-left: 3px solid var(--match-fill);
+ border-radius: 0 6px 6px 0;
+ background: var(--aqua);
+}
+
+.cols.ruled > div + div {
+ border-left-color: var(--notice-rule);
+ background: var(--peach);
+}
+
+.cols.ruled h3 {
+ margin-top: 0;
+}
+
+/* the evidence path as a small tinted tag */
+#exclusion .note {
+ display: inline-block;
+ padding: 4px 10px;
+ border-radius: 6px;
+ background: var(--orchid);
+ color: var(--ink);
+}
+
+#exclusion .note code {
+ background: none;
+}
+
+.bar {
+ gap: 8px;
+}
+
+/* Phones: the three ways to check stack, one under another */
+@media (max-width: 900px) {
+ .steps {
+ grid-template-columns: minmax(0, 1fr);
+ gap: 28px;
+ }
+}
diff --git a/frontend/src/styles/tokens.css b/frontend/src/styles/tokens.css
new file mode 100644
index 00000000..280c5078
--- /dev/null
+++ b/frontend/src/styles/tokens.css
@@ -0,0 +1,64 @@
+/* A soft pastel palette (Pantone Cloud Dancer, Ice Melt, Lemon Icing, Almost
+ Aqua, Raindrops on Roses, Peach Dust, Orchid Tint, Nimbus Cloud). The
+ pastels are only ever backgrounds; text, links and marks stay deep enough
+ to read on all of them. Green and red only mean MATCH and MISMATCH. Light
+ is the default; dark is opt-in. */
+:root {
+ --paper: #F0EEE9;
+ --sheet: #E8E5DE;
+ --rule: #DAD6CD;
+ --rule-strong: #A39E95;
+ --ink: #2A2826;
+ --ink-2: #2A2826;
+ --ink-3: #4F4B47;
+ --link: #2F558C;
+ --link-visited: #6A4C86;
+ --event: #7A5A00;
+ --match: #2E5E3E;
+ --match-fill: #5E8463;
+ --match-soft: #CAD3C1;
+ --miss: #8E3A3F;
+ --miss-soft: #EBD7DA;
+ --notice: #F6EBC8;
+ --notice-rule: #D9B84A;
+ --code: #E8E5DE;
+ --focus-ring: #2F558C;
+ --ice: #D2DDEA;
+ --peach: #F0D8CC;
+ --orchid: #DDD3DD;
+ --aqua: #CAD3C1;
+ --nimbus: #D5D5D8;
+ --sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Lato, Helvetica, Arial, sans-serif;
+ --serif: "Linux Libertine", Georgia, Times, "Source Serif Pro", serif;
+ --mono: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
+ color-scheme: light;
+}
+
+/* Dark keeps the same hues: deep tinted surfaces, pastel text and accents. */
+:root[data-theme="dark"] {
+ --paper: #1B1A1E;
+ --sheet: #242328;
+ --rule: #34323A;
+ --rule-strong: #5B5862;
+ --ink: #ECEAE5;
+ --ink-2: #ECEAE5;
+ --ink-3: #B8B3BB;
+ --link: #A9C1E0;
+ --link-visited: #CDB8D3;
+ --event: #F6E3A1;
+ --match: #B5CDA8;
+ --match-fill: #8FB58A;
+ --match-soft: #263126;
+ --miss: #EDB3BD;
+ --miss-soft: #3A2629;
+ --notice: #34301F;
+ --notice-rule: #CDB55A;
+ --code: #242328;
+ --focus-ring: #A9C1E0;
+ --ice: #222A35;
+ --peach: #33282A;
+ --orchid: #2B2530;
+ --aqua: #232C24;
+ --nimbus: #26262B;
+ color-scheme: dark;
+}
diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts
new file mode 100644
index 00000000..11f02fe2
--- /dev/null
+++ b/frontend/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/frontend/tests/browser/site.spec.ts b/frontend/tests/browser/site.spec.ts
new file mode 100644
index 00000000..17c20710
--- /dev/null
+++ b/frontend/tests/browser/site.spec.ts
@@ -0,0 +1,146 @@
+import { test, expect } from '@playwright/test';
+import AxeBuilder from '@axe-core/playwright';
+
+test.describe('OpenVerifiableLLM Site', () => {
+ test('renders all sections and numbers from evidence.json', async ({ page }) => {
+ await page.goto('/');
+
+ // Article title, byline with separated dates, and lead
+ await expect(page.getByText(/Release v1\.0\.1 · 28 October 2026 · Record timestamped 20 October 2026/)).toBeVisible();
+ await expect(page.getByRole('heading', { level: 1 })).toHaveText('OpenVerifiableLLM');
+ await expect(page.getByText(/is a language model whose training anyone can recompute/)).toBeVisible();
+ await expect(page.getByRole('complementary', { name: 'Key facts' }).first()).toBeVisible();
+
+ // Check Overview text clarifying checker attribution
+ await expect(
+ page.locator('#overview').getByText('Recomputed bit for bit on a second RTX 5090 by the project; 0 independent checks so far.')
+ ).toBeVisible();
+
+ // Check Overview numbers
+ await expect(page.getByText('7,232,582', { exact: true })).toBeVisible();
+ await expect(page.getByText('7,118,121,139', { exact: true })).toBeVisible();
+ await expect(page.getByText('3,481', { exact: true })).toBeVisible();
+
+ // Check Verification: 37 of 37 matched
+ await expect(page.getByText('37 / 37 matched')).toBeVisible();
+ await expect(page.getByText('■ Project: 37')).toBeVisible();
+ await expect(page.getByText('▨ Independent: 0')).toBeVisible();
+ await expect(page.getByText(/46 checks across 37 segments/)).toBeVisible();
+
+ // Check Verifiable Exclusion losses
+ await expect(page.getByText('3.3604')).toBeVisible();
+ await expect(page.getByText('3.3860')).toBeVisible();
+ await expect(page.getByText('2.8710')).toBeVisible();
+ await expect(page.getByText('2.8712')).toBeVisible();
+
+ // Check Downloads
+ await expect(page.getByText('ovl-23m-chat.gguf')).toBeVisible();
+ await expect(page.getByText('541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de')).toBeVisible();
+ });
+
+ test('copy button provides visual feedback and clipboard content', async ({ page, context }) => {
+ await context.grantPermissions(['clipboard-read', 'clipboard-write']);
+ await page.goto('/');
+
+ const copyBtn = page.getByRole('button', { name: 'Copy', exact: true }).first();
+ await expect(copyBtn).toBeVisible();
+ await copyBtn.click();
+ await expect(page.getByRole('button', { name: 'Copied ✓' })).toBeVisible();
+ const clipboardText = await page.evaluate(() => navigator.clipboard.readText());
+ expect(clipboardText.length).toBeGreaterThan(10);
+ });
+
+ test('theme toggle switches between light and dark themes', async ({ page }) => {
+ await page.goto('/');
+ const html = page.locator('html');
+ await expect(html).not.toHaveAttribute('data-theme', 'dark');
+
+ const themeBtn = page.getByRole('button', { name: /switch between dark and light theme/i });
+ await themeBtn.click();
+ await expect(html).toHaveAttribute('data-theme', 'dark');
+
+ await themeBtn.click();
+ await expect(html).not.toHaveAttribute('data-theme', 'dark');
+ });
+
+ test('contents links jump to every section', async ({ page }) => {
+ await page.setViewportSize({ width: 1440, height: 900 });
+ await page.goto('/');
+ const toc = page.getByRole('navigation', { name: 'Contents' });
+ const links = toc.getByRole('link');
+ await expect(links).toHaveCount(8);
+ for (const href of await links.evaluateAll(els => els.map(e => e.getAttribute('href')))) {
+ await expect(page.locator(href as string)).toHaveCount(1);
+ }
+ });
+
+ test('keyboard-only navigation: skip link and tab navigation', async ({ page }) => {
+ await page.setViewportSize({ width: 1440, height: 900 });
+ await page.goto('/');
+ await page.waitForSelector('.skip');
+ await page.locator('body').focus();
+
+ await page.keyboard.press('Tab');
+ const skipLink = page.getByRole('link', { name: 'Skip to content' });
+ await expect(skipLink).toBeFocused();
+
+ await page.keyboard.press('Enter');
+ await expect(page.locator('#main')).toBeVisible();
+ });
+
+ test('handles snapshot load errors gracefully', async ({ page }) => {
+ await page.route('**/data/evidence.json', (route) => {
+ route.fulfill({
+ status: 500,
+ contentType: 'application/json',
+ body: JSON.stringify({ error: 'Internal Server Error' }),
+ });
+ });
+
+ await page.goto('/');
+ await expect(page.getByRole('alert')).toBeVisible();
+ await expect(page.getByRole('heading', { name: 'Snapshot unavailable or invalid' })).toBeVisible();
+ await expect(page.getByRole('button', { name: 'Retry loading snapshot' })).toBeVisible();
+ });
+
+ const viewports = [
+ { name: 'desktop', width: 1440, height: 900 },
+ { name: 'tablet-200pct-zoom', width: 720, height: 900 },
+ { name: 'mobile', width: 390, height: 844 },
+ ];
+
+ for (const vp of viewports) {
+ for (const theme of ['dark', 'light'] as const) {
+ test(`a11y and layout: ${vp.name} (${vp.width}px) in ${theme} theme passes WCAG 2.2 AA`, async ({ page }) => {
+ await page.setViewportSize({ width: vp.width, height: vp.height });
+ await page.goto('/');
+
+ if (theme === 'dark') {
+ const themeBtn = page.getByRole('button', { name: /switch between dark and light theme/i });
+ await themeBtn.click();
+ await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark');
+ }
+
+ const axeResults = await new AxeBuilder({ page })
+ .withTags(['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa', 'wcag22aa'])
+ .analyze();
+
+ expect(axeResults.violations).toEqual([]);
+
+ // Ensure no horizontal overflow
+ const hasNoHorizontalScroll = await page.evaluate(
+ () => document.documentElement.scrollWidth <= window.innerWidth
+ );
+ expect(hasNoHorizontalScroll, `Horizontal scroll detected on ${vp.name} in ${theme} theme`).toBe(true);
+ });
+ }
+ }
+
+ test('respects prefers-reduced-motion', async ({ page }) => {
+ await page.emulateMedia({ reducedMotion: 'reduce' });
+ await page.goto('/');
+
+ const title = page.getByRole('heading', { level: 1 });
+ await expect(title).toBeVisible();
+ });
+});
diff --git a/frontend/tests/components.test.tsx b/frontend/tests/components.test.tsx
new file mode 100644
index 00000000..d2b0cf7d
--- /dev/null
+++ b/frontend/tests/components.test.tsx
@@ -0,0 +1,69 @@
+import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
+import { render, screen, fireEvent, act } from '@testing-library/react';
+import { Header } from '../src/components/Header';
+import { CopyButton } from '../src/components/CopyButton';
+
+describe('Header component', () => {
+ beforeEach(() => {
+ localStorage.clear();
+ document.documentElement.removeAttribute('data-theme');
+ });
+
+ afterEach(() => {
+ document.documentElement.removeAttribute('data-theme');
+ });
+
+ it('renders branding and section links', () => {
+ render();
+ expect(screen.getByText('OpenVerifiable')).toBeInTheDocument();
+ expect(screen.getByText('LLM')).toBeInTheDocument();
+ expect(screen.getByRole('link', { name: 'Source' })).toBeInTheDocument();
+ expect(screen.getByRole('link', { name: 'Evidence' })).toBeInTheDocument();
+ });
+
+ it('starts light and toggles to dark', () => {
+ render();
+ const button = screen.getByRole('button', { name: /switch between dark and light theme/i });
+ expect(document.documentElement.getAttribute('data-theme')).toBeNull();
+
+ fireEvent.click(button);
+ expect(document.documentElement.getAttribute('data-theme')).toBe('dark');
+
+ fireEvent.click(button);
+ expect(document.documentElement.getAttribute('data-theme')).toBeNull();
+ });
+});
+
+describe('CopyButton component', () => {
+ beforeEach(() => {
+ vi.useFakeTimers();
+ Object.assign(navigator, {
+ clipboard: {
+ writeText: vi.fn().mockResolvedValue(undefined),
+ },
+ });
+ });
+
+ afterEach(() => {
+ vi.useRealTimers();
+ });
+
+ it('copies text and provides feedback', async () => {
+ render( );
+ const btn = screen.getByRole('button', { name: /copy/i });
+ expect(btn).toHaveTextContent('Copy');
+
+ await act(async () => {
+ fireEvent.click(btn);
+ });
+
+ expect(navigator.clipboard.writeText).toHaveBeenCalledWith('test command');
+ expect(btn).toHaveTextContent('Copied ✓');
+
+ act(() => {
+ vi.advanceTimersByTime(2500);
+ });
+
+ expect(btn).toHaveTextContent('Copy');
+ });
+});
diff --git a/frontend/tests/copy-lint.test.ts b/frontend/tests/copy-lint.test.ts
new file mode 100644
index 00000000..0c04a7fd
--- /dev/null
+++ b/frontend/tests/copy-lint.test.ts
@@ -0,0 +1,36 @@
+import { describe, it, expect } from 'vitest';
+import { readFileSync } from 'node:fs';
+import { resolve } from 'node:path';
+
+describe('Copy Rules Lint', () => {
+ const copyPath = resolve(process.cwd(), 'src/content/copy.ts');
+ const copyContent = readFileSync(copyPath, 'utf8');
+
+ // Pinned path exception
+ const ALLOWED_PINNED_PATH = 'release/unlearning-3i-atlas/';
+
+ // Remove the allowed pinned path before checking
+ const sanitized = copyContent.replaceAll(ALLOWED_PINNED_PATH, 'REDACTED_ALLOWED_PATH');
+
+ const BANNED_PATTERNS = [
+ { word: 'trustworthy', regex: /\btrustworthy\b/i },
+ { word: 'guaranteed', regex: /\bguaranteed\b/i },
+ { word: 'secure', regex: /\bsecure\b/i },
+ { word: 'revolutionary', regex: /\brevolutionary\b/i },
+ { word: 'fully', regex: /\bfully\b/i },
+ { word: 'proven-safe', regex: /\bproven-safe\b/i },
+ { word: 'unlearning', regex: /\bunlearning\b/i },
+ { word: 'one file', regex: /\bone\s+file\b/i },
+ ];
+
+ for (const { word, regex } of BANNED_PATTERNS) {
+ it(`does not contain banned term "${word}" in copy`, () => {
+ const match = sanitized.match(regex);
+ expect(match, `Found banned word "${word}" in copy.ts`).toBeNull();
+ });
+ }
+
+ it('contains the authorized pinned evidence path release/unlearning-3i-atlas/', () => {
+ expect(copyContent).toContain(ALLOWED_PINNED_PATH);
+ });
+});
diff --git a/frontend/tests/fixtures/broken-link.json b/frontend/tests/fixtures/broken-link.json
new file mode 100644
index 00000000..462d3991
--- /dev/null
+++ b/frontend/tests/fixtures/broken-link.json
@@ -0,0 +1,1945 @@
+{
+ "schemaVersion": 1,
+ "dataset": "AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence",
+ "revision": "96dc282a",
+ "fetchedAt": "2026-10-30T15:32:03.178Z",
+ "sourceHashes": {
+ "release/simple-run/chain.jsonl": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "release/simple-run/verifications.jsonl": "ec73fe8fdce56eb075783c37383dbb5afaa23fac168fbd6619c01240de41b770",
+ "release/simple-run/hardware-map.jsonl": "5116f365398795a5e79513a3709d48995cc72a059ae9c69c653e324e723884e4",
+ "release/simple-run/release-hashes.txt": "479ce030fa8022f0f92262849f88dfde4c9cf2a0748b8830357f3aa277080e8d",
+ "release/simple-run/anchor.json": "2adaea4cae25439199ec2396c0e6e94d1d14188c070f217ed7e360ce10c1c18d",
+ "release/simple-run/README.md": "d3a4a5b221d9d1bd9318e8e414b44adc75f66155d03cd356b489165243e932e9",
+ "release/unlearning-3i-atlas/loo-results.json": "c926c965d1e040ab23c591c9dcdd007e5ece75a57ecfa100fd69515d190ead69",
+ "prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68"
+ },
+ "preparation": {
+ "articles": 7232582,
+ "wikipediaTargets": 7118121139,
+ "conversations": 3481,
+ "trainingLoopLines": "~630 lines",
+ "preparedDataId": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68"
+ },
+ "chain": [
+ {
+ "index": 0,
+ "kind": "initial",
+ "control": {
+ "batches": "10ea13010a13668c8bf9e2884e16bdbd16f8933d9bf4d09eda0c47459133eddb",
+ "cursor": 0,
+ "epoch": 0,
+ "global_step": 0,
+ "phase": "wikipedia",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "64041a4736bd76b64b149c2a784950a312fb19ed641c7eb87e7300c171d002fc",
+ "model": "2b167bcb407f94ac3f1dead8f316ea180823a1cb40489b8a1ff974bf2bcd959d",
+ "previous": null,
+ "time": 1792422250.861772,
+ "entryHash": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2"
+ },
+ {
+ "index": 1,
+ "kind": "progress",
+ "control": {
+ "batches": "e3f19a5269c4824fb1615d433b678fa54a6fc23ea99fd82c3e83f3f400f66809",
+ "cursor": 274561003,
+ "epoch": 0,
+ "global_step": 18080,
+ "phase": "wikipedia",
+ "phase_step": 18080,
+ "pos": [
+ 14363834,
+ 3072
+ ]
+ },
+ "state": "ef5090325fcf3c392503406ac2f7e6bd99118d267c38fbe4b624df41b48eca8f",
+ "model": "c32f02fac9e87d0c4279aa39a0fa06b5cc06d5b141d5ff29503cb8431c4ca180",
+ "previous": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2",
+ "time": 1792424215.6430938,
+ "entryHash": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f"
+ },
+ {
+ "index": 2,
+ "kind": "progress",
+ "control": {
+ "batches": "d5b199348b8d97e5a30ee2ea1a9bc465fd5dc0220a1a4297b4fa0716abdc84dc",
+ "cursor": 547313827,
+ "epoch": 0,
+ "global_step": 36160,
+ "phase": "wikipedia",
+ "phase_step": 36160,
+ "pos": [
+ 30161308,
+ 6656
+ ]
+ },
+ "state": "94e253d50adff230867baf0f9b2fbb247399b598511dd238cca10838439a228c",
+ "model": "29c055caaaefce12e962bb5905f79640bf7bcfc2dfe09070704f50a35e954868",
+ "previous": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f",
+ "time": 1792426181.1370955,
+ "entryHash": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789"
+ },
+ {
+ "index": 3,
+ "kind": "progress",
+ "control": {
+ "batches": "f520d10b29d43cbbe5556d887bd7e622a26ed3003eaa8677366993ed6a0965df",
+ "cursor": 812314162,
+ "epoch": 0,
+ "global_step": 54240,
+ "phase": "wikipedia",
+ "phase_step": 54240,
+ "pos": [
+ 50875269,
+ 0
+ ]
+ },
+ "state": "63f2f1cf69a97b295ef4924af836583cc5942d4cfdde34a0d68da658e9b56875",
+ "model": "bc0210cc1ce7eb55786921b9be9142224551daaa14a5a94b5851415d9954513f",
+ "previous": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789",
+ "time": 1792428164.4587104,
+ "entryHash": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37"
+ },
+ {
+ "index": 4,
+ "kind": "progress",
+ "control": {
+ "batches": "9b1c36b8b217b225ab637476b5f96e9d13723e8ff2f49474a1aff9fe4b6c6836",
+ "cursor": 1071169817,
+ "epoch": 0,
+ "global_step": 72320,
+ "phase": "wikipedia",
+ "phase_step": 72320,
+ "pos": [
+ 75821490,
+ 512
+ ]
+ },
+ "state": "38544968f3a1f342c17ee65afed30915acacf2131314c3254cfb1d3367acf0f6",
+ "model": "f6c1733d73e556de085fd9cb99f4137296f9ad7835fc3c88c9f8588cfeca0165",
+ "previous": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37",
+ "time": 1792430142.4307606,
+ "entryHash": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6"
+ },
+ {
+ "index": 5,
+ "kind": "progress",
+ "control": {
+ "batches": "0feb0c99169621a584609ce24a7ba1710f4dd1127205dae3911df09e1ab75698",
+ "cursor": 1326339931,
+ "epoch": 0,
+ "global_step": 90400,
+ "phase": "wikipedia",
+ "phase_step": 90400,
+ "pos": [
+ 103716532,
+ 512
+ ]
+ },
+ "state": "0f66051bfcf2b8512da505733cf9814527aba0412b28109071d9ebe1e7949165",
+ "model": "521f1f5f34c6a0992a15e539f1eab5f5590f5fdca15fdf16c60842c1d8612754",
+ "previous": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6",
+ "time": 1792432107.6645238,
+ "entryHash": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa"
+ },
+ {
+ "index": 6,
+ "kind": "progress",
+ "control": {
+ "batches": "dd5c823c56a28362db599fa09567143434f9f343784400622105200695fca78d",
+ "cursor": 1575735740,
+ "epoch": 0,
+ "global_step": 108480,
+ "phase": "wikipedia",
+ "phase_step": 108480,
+ "pos": [
+ 135269108,
+ 0
+ ]
+ },
+ "state": "d3f93a22ceb28a8640734ceca70e0217cf991b696807ecb6fdd31d318ad30aa8",
+ "model": "655aa1b3b7f5a34c9f0a2eba172ddbfef233acb3f121373e351b6d2cd982475f",
+ "previous": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa",
+ "time": 1792434050.5597794,
+ "entryHash": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a"
+ },
+ {
+ "index": 7,
+ "kind": "progress",
+ "control": {
+ "batches": "496333b0221dbc6a2edeeb9ea5318d3b33069b8f91c98d489cf742f70bab1d43",
+ "cursor": 1821662484,
+ "epoch": 0,
+ "global_step": 126560,
+ "phase": "wikipedia",
+ "phase_step": 126560,
+ "pos": [
+ 169162007,
+ 512
+ ]
+ },
+ "state": "228e635e6ee63fca5189f1af685f15c9d52a27527f300e7dac7a5ade82688e11",
+ "model": "ab677b66cfcc2d0652d37b5cc354e5d6980716b273cc99b78ae53f63e581ba14",
+ "previous": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a",
+ "time": 1792435994.2637668,
+ "entryHash": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc"
+ },
+ {
+ "index": 8,
+ "kind": "progress",
+ "control": {
+ "batches": "a009f3186720dd943c7c0e3c597706610370b795c3fd87b65df4ce8cdc54822d",
+ "cursor": 2062246462,
+ "epoch": 0,
+ "global_step": 144640,
+ "phase": "wikipedia",
+ "phase_step": 144640,
+ "pos": [
+ 206335253,
+ 0
+ ]
+ },
+ "state": "6cb7cf58b036f71d793b7940617d2756e4d24e906a8a4fdb6ec58ee56031ad53",
+ "model": "4419b42c7902c6f650e634055a1de54ca172e2a0a26c5bbad58ee8516cf4dfc6",
+ "previous": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc",
+ "time": 1792437967.4633026,
+ "entryHash": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae"
+ },
+ {
+ "index": 9,
+ "kind": "progress",
+ "control": {
+ "batches": "9f883e76562c687ddae51575bda5430cc91dbc45e57e7311d3646340a420a020",
+ "cursor": 2299429619,
+ "epoch": 0,
+ "global_step": 162720,
+ "phase": "wikipedia",
+ "phase_step": 162720,
+ "pos": [
+ 245609368,
+ 0
+ ]
+ },
+ "state": "0947a1b7cb257922ed1bb71e36059bdde1fa1c76509255c1af8cb3167bff72db",
+ "model": "967ff641117b62e0f4bbb19fda16cfb7a1b6c20adc35295ff0738a0664953048",
+ "previous": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae",
+ "time": 1792439938.9320748,
+ "entryHash": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43"
+ },
+ {
+ "index": 10,
+ "kind": "progress",
+ "control": {
+ "batches": "14ffdd92074c743ba35ff842d9d2956a29ff1ecf6b93820fc1bedb2161e2f20f",
+ "cursor": 2534896708,
+ "epoch": 0,
+ "global_step": 180800,
+ "phase": "wikipedia",
+ "phase_step": 180800,
+ "pos": [
+ 285958813,
+ 5632
+ ]
+ },
+ "state": "e162c0ef79462cfcc2c88cd336170df12f92f1f6d099920decca178da9dd455a",
+ "model": "cb2fbe49be6ead1201600d45004f411c7ed3ba0d532ebe2417b1a43ba40d9889",
+ "previous": "0000000000000000000000000000000000000000000000000000000000000000",
+ "time": 1792441925.2640333,
+ "entryHash": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b"
+ },
+ {
+ "index": 11,
+ "kind": "progress",
+ "control": {
+ "batches": "7321c9e7f9b890c6b657525ffc10389c70e730b37f0ccaa0281264b7aaeec2ca",
+ "cursor": 2758953574,
+ "epoch": 0,
+ "global_step": 198880,
+ "phase": "wikipedia",
+ "phase_step": 198880,
+ "pos": [
+ 331465519,
+ 0
+ ]
+ },
+ "state": "be21dd4e7d988157822d75f6600146be013afa826076b49b45b3874e5a2bd1ca",
+ "model": "21e5ccc4f7a7b4c8b311febbdcb0cd037a2efff64c715935853fa663b61e5aeb",
+ "previous": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b",
+ "time": 1792445221.8958924,
+ "entryHash": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18"
+ },
+ {
+ "index": 12,
+ "kind": "progress",
+ "control": {
+ "batches": "0d86e2942f9d84483cd0e3cd5168d81cf418e915c04e25f94c03d3ad703c648d",
+ "cursor": 2977003841,
+ "epoch": 0,
+ "global_step": 216960,
+ "phase": "wikipedia",
+ "phase_step": 216960,
+ "pos": [
+ 379051570,
+ 512
+ ]
+ },
+ "state": "c9d571c059311fbeb20f46d33a56497113b1f3705b75939ef57e61cc98978ca6",
+ "model": "ee22252416c44a8812aab40b456c60351eaf714679495ef7c39a81c3d24db503",
+ "previous": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18",
+ "time": 1792447305.2481282,
+ "entryHash": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165"
+ },
+ {
+ "index": 13,
+ "kind": "progress",
+ "control": {
+ "batches": "bfe949e391619c70945f4ad5af5f73c00f8d44562f44733457ad865081612290",
+ "cursor": 3192270243,
+ "epoch": 0,
+ "global_step": 235040,
+ "phase": "wikipedia",
+ "phase_step": 235040,
+ "pos": [
+ 427598539,
+ 0
+ ]
+ },
+ "state": "2733d7ef9aaacf20880e2196c819305f58ad0cc03494704fbc9f5e03a95931b2",
+ "model": "978af11d622fb0e48dd842f5aa27e9992c267de2a91944b1b3b160aa89fa7675",
+ "previous": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165",
+ "time": 1792449363.6749403,
+ "entryHash": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f"
+ },
+ {
+ "index": 14,
+ "kind": "progress",
+ "control": {
+ "batches": "7eea41e27f71c52d58558b90de9ef7cd26ac9123366132bcbc1e71f4de08acf4",
+ "cursor": 3407720912,
+ "epoch": 0,
+ "global_step": 253120,
+ "phase": "wikipedia",
+ "phase_step": 253120,
+ "pos": [
+ 476680277,
+ 0
+ ]
+ },
+ "state": "145353afb1e2ebc2b5f9831fed74e5631b42a11342aab9a0b9febe796446c446",
+ "model": "613728906a531097849fcaa83d13ccb54b334d805aeaef8abe127ef2b7b70e1d",
+ "previous": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f",
+ "time": 1792451498.6016607,
+ "entryHash": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa"
+ },
+ {
+ "index": 15,
+ "kind": "progress",
+ "control": {
+ "batches": "c294ad7b42d0f2e970f3c757f339b24f6fbdc2982e9a91078a071b121b9325a1",
+ "cursor": 3626056290,
+ "epoch": 0,
+ "global_step": 271200,
+ "phase": "wikipedia",
+ "phase_step": 271200,
+ "pos": [
+ 524689002,
+ 0
+ ]
+ },
+ "state": "fa961c767d2e293f12adcd13a3410d345e3bb5952395725963eb2f6e5c228d9e",
+ "model": "0f122b6387647c6844f6668edc95b2b96efd34885985e80c25a1eb424c7ffa2c",
+ "previous": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa",
+ "time": 1792453682.104504,
+ "entryHash": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722"
+ },
+ {
+ "index": 16,
+ "kind": "progress",
+ "control": {
+ "batches": "4d0765884b5a4f4af81e17f0914a728e631c665fa74ec82be39e458f3f4f40c1",
+ "cursor": 3842372860,
+ "epoch": 0,
+ "global_step": 289280,
+ "phase": "wikipedia",
+ "phase_step": 289280,
+ "pos": [
+ 573811026,
+ 2048
+ ]
+ },
+ "state": "82d7f95aaed27c4ac54ec6b8de9567a84d818a875673030c4ae0d2d39a860754",
+ "model": "9a1a2f4ad99c6aac613f620400dc405a8967906e435079c0d8d29622831044fa",
+ "previous": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722",
+ "time": 1792455885.299576,
+ "entryHash": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f"
+ },
+ {
+ "index": 17,
+ "kind": "progress",
+ "control": {
+ "batches": "a219629293cfc4e69c74916379ba790f96b8a5425bd9fb7f4d9e481965ec9374",
+ "cursor": 4065481916,
+ "epoch": 0,
+ "global_step": 307360,
+ "phase": "wikipedia",
+ "phase_step": 307360,
+ "pos": [
+ 619889558,
+ 18944
+ ]
+ },
+ "state": "1082ced41232e82ff83506f0c20d887d0ddc3dc7458bc3ace5361a87485e5b60",
+ "model": "1e77516fc3d4c149c17b5e039ba9a886f520769df7512002fe89a9e5148f7d6e",
+ "previous": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f",
+ "time": 1792458112.5074773,
+ "entryHash": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7"
+ },
+ {
+ "index": 18,
+ "kind": "progress",
+ "control": {
+ "batches": "fbdade37939ffab2c5df52a9db88c8bac93a5501861522a30f1a50ebcafb4b3e",
+ "cursor": 4280170919,
+ "epoch": 0,
+ "global_step": 325440,
+ "phase": "wikipedia",
+ "phase_step": 325440,
+ "pos": [
+ 669406302,
+ 0
+ ]
+ },
+ "state": "0d4932793bd2279c0a17b3ca736159f89d48898d8a42113d15c7590dfdd85c26",
+ "model": "4d79bcc6ee8060a9c28a5802c142f972665bafae70901176c9a964bc884f1dee",
+ "previous": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7",
+ "time": 1792460358.5080163,
+ "entryHash": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89"
+ },
+ {
+ "index": 19,
+ "kind": "progress",
+ "control": {
+ "batches": "32161f48812917ee1bed7a4367df261934308045464246622f47dba2ab129f2a",
+ "cursor": 4492270493,
+ "epoch": 0,
+ "global_step": 343520,
+ "phase": "wikipedia",
+ "phase_step": 343520,
+ "pos": [
+ 719769225,
+ 2048
+ ]
+ },
+ "state": "cafd56b605b39449655b55534cd4e33616de0d40e6c3434fcd1a54c941e63191",
+ "model": "9e597fcc4fc74828e30605677e3696a53b77a6976fecdc4f0e06b378e6721ee9",
+ "previous": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89",
+ "time": 1792462598.3975008,
+ "entryHash": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f"
+ },
+ {
+ "index": 20,
+ "kind": "progress",
+ "control": {
+ "batches": "30c019ac1c173f6d688cdd4bd01e7ceaf9ed1376251e69d87cb9643b4386116b",
+ "cursor": 4705349595,
+ "epoch": 0,
+ "global_step": 361600,
+ "phase": "wikipedia",
+ "phase_step": 361600,
+ "pos": [
+ 769153707,
+ 4608
+ ]
+ },
+ "state": "708b48121052bf9bc68bbd67e8613230dd713b9569610a4e66838fe45f35299a",
+ "model": "f98ab99a90c7734a3f4cf2d60216ed8b1bdc657541ec3374c6f035b0bd42a307",
+ "previous": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f",
+ "time": 1792463768.5816014,
+ "entryHash": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03"
+ },
+ {
+ "index": 21,
+ "kind": "progress",
+ "control": {
+ "batches": "09506b60c4342ec5873bba53f2e993f0a46e1b726fc3449ce690e5e4eb43927c",
+ "cursor": 4919188008,
+ "epoch": 0,
+ "global_step": 379680,
+ "phase": "wikipedia",
+ "phase_step": 379680,
+ "pos": [
+ 818886901,
+ 0
+ ]
+ },
+ "state": "eb31ec48c4ce9373035fe1229a93190fcfec9060d1bc8520f62ed3dfcab752fa",
+ "model": "b89d3b185a1fcf21bcc5ef432a26eafc9643eb62b9aa3d8eeb624cbfceeea340",
+ "previous": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03",
+ "time": 1792465514.4536183,
+ "entryHash": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d"
+ },
+ {
+ "index": 22,
+ "kind": "progress",
+ "control": {
+ "batches": "27f95fcd8bc5e1b25cea97a17fd58ce6f6771b5b15565014616d4519ab8c8184",
+ "cursor": 5137669818,
+ "epoch": 0,
+ "global_step": 397760,
+ "phase": "wikipedia",
+ "phase_step": 397760,
+ "pos": [
+ 867774445,
+ 512
+ ]
+ },
+ "state": "ee97359b8f9928977515e383d98a796d442444b5a07de5c9ec1158d372cc0e49",
+ "model": "1428e4c6cddc484d305881220b68eb5e04eb851632e1ae7d4f61725e0b24708b",
+ "previous": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d",
+ "time": 1792468481.591845,
+ "entryHash": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0"
+ },
+ {
+ "index": 23,
+ "kind": "progress",
+ "control": {
+ "batches": "2ac5c320056a9766eaf2f910194309a2e1e3254958d1fe2e4afa92805ee04b28",
+ "cursor": 5354659564,
+ "epoch": 0,
+ "global_step": 415840,
+ "phase": "wikipedia",
+ "phase_step": 415840,
+ "pos": [
+ 917385337,
+ 0
+ ]
+ },
+ "state": "296c1763d3421f6991f4f841f4143166bf0910000e5b00673383a4589859483f",
+ "model": "8948b0defe4c934602354d44e72ceb0b34c46d87bb7a67832fa50ea581b57d16",
+ "previous": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0",
+ "time": 1792469631.0069373,
+ "entryHash": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99"
+ },
+ {
+ "index": 24,
+ "kind": "progress",
+ "control": {
+ "batches": "3fae190c7c836188101a7a77d6046446431892e109590436e4c94a3ed1da8c13",
+ "cursor": 5571989843,
+ "epoch": 0,
+ "global_step": 433920,
+ "phase": "wikipedia",
+ "phase_step": 433920,
+ "pos": [
+ 966632574,
+ 8192
+ ]
+ },
+ "state": "6413ef4ca2bf9d47a89302d88662069fde930d732c4df7d0892f30ed64d3756d",
+ "model": "c553304d081e5817ba0e042bcdef7f1cf9642a290b006edab98778abd18eeedc",
+ "previous": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99",
+ "time": 1792470779.9569445,
+ "entryHash": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a"
+ },
+ {
+ "index": 25,
+ "kind": "progress",
+ "control": {
+ "batches": "b77680f3b1febcf15d5adac2f244b845ea1ca7ae5837e9ce9e57a9b9661033c6",
+ "cursor": 5786932809,
+ "epoch": 0,
+ "global_step": 452000,
+ "phase": "wikipedia",
+ "phase_step": 452000,
+ "pos": [
+ 1015978804,
+ 2048
+ ]
+ },
+ "state": "245211135b131b6c5e1940458575033082b4b473fa0033b55816d889c82d656b",
+ "model": "1f1becfa5470bac9a31962462d4d85647598dc8f75277e2f9c6efe5bc59ada97",
+ "previous": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a",
+ "time": 1792471931.509705,
+ "entryHash": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0"
+ },
+ {
+ "index": 26,
+ "kind": "progress",
+ "control": {
+ "batches": "44eaf0d468c5578cc89e3999530132727e41ac47cbfcc8fcf80a7621b527cda0",
+ "cursor": 6003090585,
+ "epoch": 0,
+ "global_step": 470080,
+ "phase": "wikipedia",
+ "phase_step": 470080,
+ "pos": [
+ 1065027050,
+ 0
+ ]
+ },
+ "state": "7b1ab9b324ac43d99f738ee00e3ef2b514e8dcc82313863c1d8f6e871d42bbb8",
+ "model": "6a59289ec3928857e0beacc7858e190c0756c72f2cdf48896578bb75720fa72a",
+ "previous": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0",
+ "time": 1792473082.0379794,
+ "entryHash": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e"
+ },
+ {
+ "index": 27,
+ "kind": "progress",
+ "control": {
+ "batches": "58cf98d2ec42837434cc698720602c1ed7a427f1b7075de7b56e1957e42d7b7b",
+ "cursor": 6219792471,
+ "epoch": 0,
+ "global_step": 488160,
+ "phase": "wikipedia",
+ "phase_step": 488160,
+ "pos": [
+ 1113864691,
+ 1024
+ ]
+ },
+ "state": "0ec654850f2c1288c7850e9e732b52187dcc5f73fffe0f3bc211143e32097e7a",
+ "model": "5329233dbd65f90b4c368e40c725c59496c03266053f934c4be9c4ef73e3ec73",
+ "previous": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e",
+ "time": 1792474229.018975,
+ "entryHash": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c"
+ },
+ {
+ "index": 28,
+ "kind": "progress",
+ "control": {
+ "batches": "8e7e2738dac57947ab3894def88fc8bfb84e0b8c55095fcd33d66e2699dabab5",
+ "cursor": 6444391263,
+ "epoch": 0,
+ "global_step": 506240,
+ "phase": "wikipedia",
+ "phase_step": 506240,
+ "pos": [
+ 1159432427,
+ 0
+ ]
+ },
+ "state": "e5891f8db717f770246c4255fa6598ba280922c428e9e1e6d814f5d96549cab1",
+ "model": "d6e1eaab6061fc051ae6de60bb6c95d99d1b98c6bcddfdcbbd593208b7d8a303",
+ "previous": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c",
+ "time": 1792475372.9946525,
+ "entryHash": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5"
+ },
+ {
+ "index": 29,
+ "kind": "progress",
+ "control": {
+ "batches": "7b351d64e2a3d2492e668dcfd73d82ce92c0ba04fdd4c3058c95d4e642a6807d",
+ "cursor": 6671911669,
+ "epoch": 0,
+ "global_step": 524320,
+ "phase": "wikipedia",
+ "phase_step": 524320,
+ "pos": [
+ 1203647118,
+ 0
+ ]
+ },
+ "state": "ab0f669782c60bf45255e4822fee5fe5425a24b614d10dc0821323ca7325853c",
+ "model": "3c5459d2bdcdb86d05168a8a78370aa7f772cb6f48ab11e6949164ec6d30fdc0",
+ "previous": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5",
+ "time": 1792476512.00237,
+ "entryHash": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b"
+ },
+ {
+ "index": 30,
+ "kind": "progress",
+ "control": {
+ "batches": "304b2d3afe5a67a5ef902cb8334a55ee6f89877d474b438fb9c94e507814dece",
+ "cursor": 6901668826,
+ "epoch": 0,
+ "global_step": 542400,
+ "phase": "wikipedia",
+ "phase_step": 542400,
+ "pos": [
+ 1246875101,
+ 0
+ ]
+ },
+ "state": "baf0f2694f6f7561b6e427c0181978541c19263849163984131f51dad72b6c38",
+ "model": "bdfa54d7eb2938c8fe3258528e5cb84287c54f889471eb60909e7d8c6aca8061",
+ "previous": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b",
+ "time": 1792477651.6187513,
+ "entryHash": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39"
+ },
+ {
+ "index": 31,
+ "kind": "base",
+ "control": {
+ "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875",
+ "cursor": 7118121139,
+ "epoch": 0,
+ "global_step": 560177,
+ "phase": "wikipedia",
+ "phase_step": 560177,
+ "pos": [
+ 1293950757,
+ 0
+ ]
+ },
+ "state": "13d6ad64b2465d42653f250bba0463468c0c81b7980ebc9d97e3b0f95c713bf1",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "previous": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39",
+ "time": 1792478775.2381847,
+ "entryHash": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a"
+ },
+ {
+ "index": 32,
+ "kind": "transition",
+ "control": {
+ "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875",
+ "cursor": 0,
+ "epoch": 0,
+ "global_step": 560177,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "8987fdd57ba91b044c23bba48cf41b132aa6ec949c4af650ba3180483476941d",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "previous": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a",
+ "time": 1792478776.1264164,
+ "entryHash": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8"
+ },
+ {
+ "index": 33,
+ "kind": "epoch",
+ "control": {
+ "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67",
+ "cursor": 1278137,
+ "epoch": 0,
+ "global_step": 560324,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "previous": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8",
+ "time": 1792478785.6187253,
+ "entryHash": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035"
+ },
+ {
+ "index": 34,
+ "kind": "transition",
+ "control": {
+ "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67",
+ "cursor": 0,
+ "epoch": 1,
+ "global_step": 560324,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "previous": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035",
+ "time": 1792478786.6568494,
+ "entryHash": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f"
+ },
+ {
+ "index": 35,
+ "kind": "epoch",
+ "control": {
+ "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023",
+ "cursor": 1278137,
+ "epoch": 1,
+ "global_step": 560471,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "previous": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f",
+ "time": 1792478796.331579,
+ "entryHash": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042"
+ },
+ {
+ "index": 36,
+ "kind": "transition",
+ "control": {
+ "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023",
+ "cursor": 0,
+ "epoch": 2,
+ "global_step": 560471,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "previous": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042",
+ "time": 1792478797.354915,
+ "entryHash": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb"
+ },
+ {
+ "index": 37,
+ "kind": "final",
+ "control": {
+ "batches": "1fd22db0ab89ab98045f8c4b32ce4e4d55453163390ec9ebd5792dfc38fd5a52",
+ "cursor": 1278137,
+ "epoch": 2,
+ "global_step": 560618,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "934d681c99e5c3e10617e82dbbb0ae0ddd1ad4e32cf45e8e3a6d2ed94b69f200",
+ "model": "ec9a2b31ca524613f791aba00f4f7f31e4a7bf4a8a921e0deb81c1a922d0958b",
+ "previous": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb",
+ "time": 1792478807.0463226,
+ "entryHash": "9edbcaddbb08ed20f3d655ac59d0aa57f6339a702d0fa1d3422856f5d8251a51"
+ }
+ ],
+ "verifications": {
+ "totalChecks": 46,
+ "uniqueSegments": 37,
+ "projectChecksCount": 46,
+ "independentChecksCount": 0,
+ "coverage": [
+ {
+ "segment": 0,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 0
+ }
+ ]
+ },
+ {
+ "segment": 1,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 1
+ }
+ ]
+ },
+ {
+ "segment": 2,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 2
+ }
+ ]
+ },
+ {
+ "segment": 3,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 3
+ }
+ ]
+ },
+ {
+ "segment": 4,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 4
+ }
+ ]
+ },
+ {
+ "segment": 5,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0 fast loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ }
+ ]
+ },
+ {
+ "segment": 6,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 6
+ }
+ ]
+ },
+ {
+ "segment": 7,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 7
+ }
+ ]
+ },
+ {
+ "segment": 8,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 8
+ }
+ ]
+ },
+ {
+ "segment": 9,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 9
+ }
+ ]
+ },
+ {
+ "segment": 10,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 10
+ }
+ ]
+ },
+ {
+ "segment": 11,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 11
+ }
+ ]
+ },
+ {
+ "segment": 12,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 12
+ }
+ ]
+ },
+ {
+ "segment": 13,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 13
+ }
+ ]
+ },
+ {
+ "segment": 14,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 14
+ }
+ ]
+ },
+ {
+ "segment": 15,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 15
+ }
+ ]
+ },
+ {
+ "segment": 16,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 16
+ }
+ ]
+ },
+ {
+ "segment": 17,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 17
+ }
+ ]
+ },
+ {
+ "segment": 18,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 18
+ }
+ ]
+ },
+ {
+ "segment": 19,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 19
+ }
+ ]
+ },
+ {
+ "segment": 20,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 20
+ }
+ ]
+ },
+ {
+ "segment": 21,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 21
+ },
+ {
+ "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
+ }
+ ]
+ },
+ {
+ "segment": 22,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ }
+ ]
+ },
+ {
+ "segment": 23,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 23
+ }
+ ]
+ },
+ {
+ "segment": 24,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 24
+ }
+ ]
+ },
+ {
+ "segment": 25,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 25
+ }
+ ]
+ },
+ {
+ "segment": 26,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 26
+ }
+ ]
+ },
+ {
+ "segment": 27,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 27
+ }
+ ]
+ },
+ {
+ "segment": 28,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 28
+ }
+ ]
+ },
+ {
+ "segment": 29,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 29
+ }
+ ]
+ },
+ {
+ "segment": 30,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 30
+ }
+ ]
+ },
+ {
+ "segment": 31,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ }
+ ]
+ },
+ {
+ "segment": 32,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ }
+ ]
+ },
+ {
+ "segment": 33,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ }
+ ]
+ },
+ {
+ "segment": 34,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ }
+ ]
+ },
+ {
+ "segment": 35,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ }
+ ]
+ },
+ {
+ "segment": 36,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ }
+ ]
+ }
+ ],
+ "rawChecks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 0
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 1
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 2
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 3
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 4
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 6
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 7
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 8
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 9
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 10
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 11
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 12
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 13
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 14
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 15
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 16
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 17
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 18
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 19
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 20
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 21
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 23
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 24
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 25
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 26
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 27
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 28
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 29
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 30
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0 fast loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "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
+ }
+ ]
+ },
+ "hardwareMap": [
+ {
+ "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"
+ },
+ {
+ "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"
+ },
+ {
+ "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"
+ },
+ {
+ "segment": 32,
+ "result": "MISMATCH",
+ "hardware": "x86_64 CPU",
+ "driver": "none",
+ "software": "torch 2.14.0+cpu",
+ "note": "different hardware and software"
+ },
+ {
+ "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"
+ }
+ ],
+ "anchor": {
+ "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",
+ "timestamp": "2026-10-20 14:38:43 UTC",
+ "authorities": [
+ "DigiCert",
+ "FreeTSA (RFC 3161)"
+ ]
+ },
+ "exclusion": {
+ "removedArticle": "3I/ATLAS",
+ "originalRemovedLoss": 3.3604,
+ "forkRemovedLoss": 3.386,
+ "removedLossDelta": 0.0256,
+ "originalControlLossMean": 2.871,
+ "forkControlLossMean": 2.8712,
+ "controlLossDelta": 0.0002,
+ "controlArticlesCount": 50,
+ "evidencePath": "release/unlearning-3i-atlas/"
+ },
+ "releaseHashes": {
+ "base-model.pt": "976c62e8b28db786c38dc2ff969339603d0ee917d830f2815d9e858d2a3c0ce3",
+ "chain.jsonl": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "ckpt-00000.pt": "3dccf4a6d258ff5e150ee1ed590f4baff099e5a368d580e610ecf238b4ba8c22",
+ "ckpt-00001.pt": "ba524fd9691c4a849d1a3dac177af426df36d8e04d9c75fba2dbf036a4b515f9",
+ "ckpt-00002.pt": "627106799e630a9297770b31b0e1f66b1418215eea50c1cd3f3a23c48e138a33",
+ "ckpt-00003.pt": "0b64c3f0208d636b19bdf5970810c27cb2ceab33f18153915d64f6493201bc10",
+ "ckpt-00004.pt": "68f07c741473f7ad0c2c61d52dc25c4d8a9c441382d348f9c1a97d215bba452e",
+ "ckpt-00005.pt": "29cdefeb28098ba4572869655b58c9dd2e771edc3717f0112d700477b74defb8",
+ "ckpt-00006.pt": "3e861cd5457c1a1566c8ebcee2a712feca2f3e5603ad46436d393aca5cbb5999",
+ "ckpt-00007.pt": "400734c784b59c9363fdbdd745f7f0f6d70c1be09d2c747976bc2b4fae01b64b",
+ "ckpt-00008.pt": "fe5352356351e4d9e4b0abd59f279c7a2ed98888177fbb773fd1f1983fefe83f",
+ "ckpt-00009.pt": "41819daf70a409e200f5189ab45ae96293716794733ad534e4843ac3f8b1982e",
+ "ckpt-00010.pt": "75cd5863903d9f595e2d50cacea3ec0530f41c154d4ec8817f41376b6f222e3f",
+ "ckpt-00011.pt": "46ece4b519e8624a2b41856b1ecfa9a5daf4994616a9bdd8d941625cb09a32ed",
+ "ckpt-00012.pt": "8b0e19692ccc6c6e6e0eb745633ae2dd2c4e86d0ca84b8ea1c7f1f81a888b892",
+ "ckpt-00013.pt": "3ac79c55fe528bcc62bd7a7a047e2b2a19e2d2e494c85e26301b0fc79f345aee",
+ "ckpt-00014.pt": "ad933ae52b14ff5de72624c5dc7af9b3e5464155b9c3ed84bd43bd5be4f737c3",
+ "ckpt-00015.pt": "2cfddc6c26fb7e8dc99c94b6fb39007a4937b67e1c8d852f2561d990e857cb62",
+ "ckpt-00016.pt": "3729909ae0f85b79377956ad8defdaaeceac0cd000a1c47e582f38685f4158d6",
+ "ckpt-00017.pt": "9f8537d432d78b254dcba86e7bd987246d928bbc837950ffe2536ba989747c41",
+ "ckpt-00018.pt": "a09df5692aac7e42a0430fd225c75937bf75c85a9dfb77b899b4cb956a8c51d1",
+ "ckpt-00019.pt": "ef18f34f8ac17a2581193ffc681a927f655bdadce4c6ca2de0a095d72094bb24",
+ "ckpt-00020.pt": "6bda17b7f79347cc57cb1325215a3a68f9f2357ee5b97f2c88e353189244fcdf",
+ "ckpt-00021.pt": "7df62e3801530777a4491bcecb0199a2b5628a9de61da30f5f6513c74c028095",
+ "ckpt-00022.pt": "23d9271d4f4c49e8e04a13f498ed0a89d57c3f80705044c2c8fe10eecc895896",
+ "ckpt-00023.pt": "2b68d53231a0d3a639312ed45eeb2afef3720f93824819843dd2c9fb68f2fc4c",
+ "ckpt-00024.pt": "8a06f96345a0ff23933d6b946a4fc88ad63a6b43a618a91a1639267cf1c0e23b",
+ "ckpt-00025.pt": "7bed06bf3566e18595a190bc1418fe5735689a2c47d280d857c0a5f68ba73a7f",
+ "ckpt-00026.pt": "31e21be4135f53a912312fae5f26d9b2eefc344171b8935e295c655f49c3b701",
+ "ckpt-00027.pt": "2efcee93267b438152c35cfc1975fd0d8d2dcec804b2713fcc11bdd8602752cf",
+ "ckpt-00028.pt": "671cf6928fc370a464fade45cf5565a65c019c9888b6c9d8962230364cc4c5b4",
+ "ckpt-00029.pt": "082195ad124ad61287e94f224c6672b2175b1c1c35f06baee2b56adbc12f92da",
+ "ckpt-00030.pt": "febe492c2c87335b078c910894172bcf8f572b853d807b8f24da99e9e0127979",
+ "ckpt-00031.pt": "c687187b7daaa97d0fd8c96df302313e051febc29d64b5ef4d5b5775d684244b",
+ "ckpt-00032.pt": "b49bfa976a6aa59fc54b9511fccc4745a4493b81cc58a3ff310ffecf7a92f45e",
+ "ckpt-00033.pt": "8fa1f26811ef37b235c968c4204044983895b217e00db731d57f3a2cecda179e",
+ "ckpt-00034.pt": "5fe1e5af0d612046c7617d079181090e3ac0898411fe39900e05346c90b29aeb",
+ "ckpt-00035.pt": "4766216588d357cdbe5bdd35e4b9534317d59f8b1273b5b722a390e748ae3beb",
+ "ckpt-00036.pt": "1ca4bd559c51e9d83ba2ea84a85e518e0309d0844d964535868339a16b66e239",
+ "ckpt-00037.pt": "88947898dab959fd82f954f81681103bac7f6b770f4bcc13d6eac29ca1795ecb",
+ "conversation-model.pt": "149cfae13c4523a1010c52161e13babf76c9ddc01f34fa1a8b580677b733a64c",
+ "recipe.json": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d",
+ "ovl-23m-chat.gguf": "541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de",
+ "Modelfile": "df4dacfc3191e56b1dc1195764ea66ca1a7695856be04ecec17d8dde4c66fc8b"
+ }
+}
\ No newline at end of file
diff --git a/frontend/tests/fixtures/hash-mismatch.json b/frontend/tests/fixtures/hash-mismatch.json
new file mode 100644
index 00000000..3d72202e
--- /dev/null
+++ b/frontend/tests/fixtures/hash-mismatch.json
@@ -0,0 +1,1945 @@
+{
+ "schemaVersion": 1,
+ "dataset": "AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence",
+ "revision": "96dc282a",
+ "fetchedAt": "2026-10-30T15:32:03.178Z",
+ "sourceHashes": {
+ "release/simple-run/chain.jsonl": "corrupted_hash_not_64_hex",
+ "release/simple-run/verifications.jsonl": "ec73fe8fdce56eb075783c37383dbb5afaa23fac168fbd6619c01240de41b770",
+ "release/simple-run/hardware-map.jsonl": "5116f365398795a5e79513a3709d48995cc72a059ae9c69c653e324e723884e4",
+ "release/simple-run/release-hashes.txt": "479ce030fa8022f0f92262849f88dfde4c9cf2a0748b8830357f3aa277080e8d",
+ "release/simple-run/anchor.json": "2adaea4cae25439199ec2396c0e6e94d1d14188c070f217ed7e360ce10c1c18d",
+ "release/simple-run/README.md": "d3a4a5b221d9d1bd9318e8e414b44adc75f66155d03cd356b489165243e932e9",
+ "release/unlearning-3i-atlas/loo-results.json": "c926c965d1e040ab23c591c9dcdd007e5ece75a57ecfa100fd69515d190ead69",
+ "prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68"
+ },
+ "preparation": {
+ "articles": 7232582,
+ "wikipediaTargets": 7118121139,
+ "conversations": 3481,
+ "trainingLoopLines": "~630 lines",
+ "preparedDataId": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68"
+ },
+ "chain": [
+ {
+ "index": 0,
+ "kind": "initial",
+ "control": {
+ "batches": "10ea13010a13668c8bf9e2884e16bdbd16f8933d9bf4d09eda0c47459133eddb",
+ "cursor": 0,
+ "epoch": 0,
+ "global_step": 0,
+ "phase": "wikipedia",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "64041a4736bd76b64b149c2a784950a312fb19ed641c7eb87e7300c171d002fc",
+ "model": "2b167bcb407f94ac3f1dead8f316ea180823a1cb40489b8a1ff974bf2bcd959d",
+ "previous": null,
+ "time": 1792422250.861772,
+ "entryHash": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2"
+ },
+ {
+ "index": 1,
+ "kind": "progress",
+ "control": {
+ "batches": "e3f19a5269c4824fb1615d433b678fa54a6fc23ea99fd82c3e83f3f400f66809",
+ "cursor": 274561003,
+ "epoch": 0,
+ "global_step": 18080,
+ "phase": "wikipedia",
+ "phase_step": 18080,
+ "pos": [
+ 14363834,
+ 3072
+ ]
+ },
+ "state": "ef5090325fcf3c392503406ac2f7e6bd99118d267c38fbe4b624df41b48eca8f",
+ "model": "c32f02fac9e87d0c4279aa39a0fa06b5cc06d5b141d5ff29503cb8431c4ca180",
+ "previous": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2",
+ "time": 1792424215.6430938,
+ "entryHash": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f"
+ },
+ {
+ "index": 2,
+ "kind": "progress",
+ "control": {
+ "batches": "d5b199348b8d97e5a30ee2ea1a9bc465fd5dc0220a1a4297b4fa0716abdc84dc",
+ "cursor": 547313827,
+ "epoch": 0,
+ "global_step": 36160,
+ "phase": "wikipedia",
+ "phase_step": 36160,
+ "pos": [
+ 30161308,
+ 6656
+ ]
+ },
+ "state": "94e253d50adff230867baf0f9b2fbb247399b598511dd238cca10838439a228c",
+ "model": "29c055caaaefce12e962bb5905f79640bf7bcfc2dfe09070704f50a35e954868",
+ "previous": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f",
+ "time": 1792426181.1370955,
+ "entryHash": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789"
+ },
+ {
+ "index": 3,
+ "kind": "progress",
+ "control": {
+ "batches": "f520d10b29d43cbbe5556d887bd7e622a26ed3003eaa8677366993ed6a0965df",
+ "cursor": 812314162,
+ "epoch": 0,
+ "global_step": 54240,
+ "phase": "wikipedia",
+ "phase_step": 54240,
+ "pos": [
+ 50875269,
+ 0
+ ]
+ },
+ "state": "63f2f1cf69a97b295ef4924af836583cc5942d4cfdde34a0d68da658e9b56875",
+ "model": "bc0210cc1ce7eb55786921b9be9142224551daaa14a5a94b5851415d9954513f",
+ "previous": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789",
+ "time": 1792428164.4587104,
+ "entryHash": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37"
+ },
+ {
+ "index": 4,
+ "kind": "progress",
+ "control": {
+ "batches": "9b1c36b8b217b225ab637476b5f96e9d13723e8ff2f49474a1aff9fe4b6c6836",
+ "cursor": 1071169817,
+ "epoch": 0,
+ "global_step": 72320,
+ "phase": "wikipedia",
+ "phase_step": 72320,
+ "pos": [
+ 75821490,
+ 512
+ ]
+ },
+ "state": "38544968f3a1f342c17ee65afed30915acacf2131314c3254cfb1d3367acf0f6",
+ "model": "f6c1733d73e556de085fd9cb99f4137296f9ad7835fc3c88c9f8588cfeca0165",
+ "previous": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37",
+ "time": 1792430142.4307606,
+ "entryHash": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6"
+ },
+ {
+ "index": 5,
+ "kind": "progress",
+ "control": {
+ "batches": "0feb0c99169621a584609ce24a7ba1710f4dd1127205dae3911df09e1ab75698",
+ "cursor": 1326339931,
+ "epoch": 0,
+ "global_step": 90400,
+ "phase": "wikipedia",
+ "phase_step": 90400,
+ "pos": [
+ 103716532,
+ 512
+ ]
+ },
+ "state": "0f66051bfcf2b8512da505733cf9814527aba0412b28109071d9ebe1e7949165",
+ "model": "521f1f5f34c6a0992a15e539f1eab5f5590f5fdca15fdf16c60842c1d8612754",
+ "previous": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6",
+ "time": 1792432107.6645238,
+ "entryHash": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa"
+ },
+ {
+ "index": 6,
+ "kind": "progress",
+ "control": {
+ "batches": "dd5c823c56a28362db599fa09567143434f9f343784400622105200695fca78d",
+ "cursor": 1575735740,
+ "epoch": 0,
+ "global_step": 108480,
+ "phase": "wikipedia",
+ "phase_step": 108480,
+ "pos": [
+ 135269108,
+ 0
+ ]
+ },
+ "state": "d3f93a22ceb28a8640734ceca70e0217cf991b696807ecb6fdd31d318ad30aa8",
+ "model": "655aa1b3b7f5a34c9f0a2eba172ddbfef233acb3f121373e351b6d2cd982475f",
+ "previous": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa",
+ "time": 1792434050.5597794,
+ "entryHash": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a"
+ },
+ {
+ "index": 7,
+ "kind": "progress",
+ "control": {
+ "batches": "496333b0221dbc6a2edeeb9ea5318d3b33069b8f91c98d489cf742f70bab1d43",
+ "cursor": 1821662484,
+ "epoch": 0,
+ "global_step": 126560,
+ "phase": "wikipedia",
+ "phase_step": 126560,
+ "pos": [
+ 169162007,
+ 512
+ ]
+ },
+ "state": "228e635e6ee63fca5189f1af685f15c9d52a27527f300e7dac7a5ade82688e11",
+ "model": "ab677b66cfcc2d0652d37b5cc354e5d6980716b273cc99b78ae53f63e581ba14",
+ "previous": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a",
+ "time": 1792435994.2637668,
+ "entryHash": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc"
+ },
+ {
+ "index": 8,
+ "kind": "progress",
+ "control": {
+ "batches": "a009f3186720dd943c7c0e3c597706610370b795c3fd87b65df4ce8cdc54822d",
+ "cursor": 2062246462,
+ "epoch": 0,
+ "global_step": 144640,
+ "phase": "wikipedia",
+ "phase_step": 144640,
+ "pos": [
+ 206335253,
+ 0
+ ]
+ },
+ "state": "6cb7cf58b036f71d793b7940617d2756e4d24e906a8a4fdb6ec58ee56031ad53",
+ "model": "4419b42c7902c6f650e634055a1de54ca172e2a0a26c5bbad58ee8516cf4dfc6",
+ "previous": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc",
+ "time": 1792437967.4633026,
+ "entryHash": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae"
+ },
+ {
+ "index": 9,
+ "kind": "progress",
+ "control": {
+ "batches": "9f883e76562c687ddae51575bda5430cc91dbc45e57e7311d3646340a420a020",
+ "cursor": 2299429619,
+ "epoch": 0,
+ "global_step": 162720,
+ "phase": "wikipedia",
+ "phase_step": 162720,
+ "pos": [
+ 245609368,
+ 0
+ ]
+ },
+ "state": "0947a1b7cb257922ed1bb71e36059bdde1fa1c76509255c1af8cb3167bff72db",
+ "model": "967ff641117b62e0f4bbb19fda16cfb7a1b6c20adc35295ff0738a0664953048",
+ "previous": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae",
+ "time": 1792439938.9320748,
+ "entryHash": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43"
+ },
+ {
+ "index": 10,
+ "kind": "progress",
+ "control": {
+ "batches": "14ffdd92074c743ba35ff842d9d2956a29ff1ecf6b93820fc1bedb2161e2f20f",
+ "cursor": 2534896708,
+ "epoch": 0,
+ "global_step": 180800,
+ "phase": "wikipedia",
+ "phase_step": 180800,
+ "pos": [
+ 285958813,
+ 5632
+ ]
+ },
+ "state": "e162c0ef79462cfcc2c88cd336170df12f92f1f6d099920decca178da9dd455a",
+ "model": "cb2fbe49be6ead1201600d45004f411c7ed3ba0d532ebe2417b1a43ba40d9889",
+ "previous": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43",
+ "time": 1792441925.2640333,
+ "entryHash": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b"
+ },
+ {
+ "index": 11,
+ "kind": "progress",
+ "control": {
+ "batches": "7321c9e7f9b890c6b657525ffc10389c70e730b37f0ccaa0281264b7aaeec2ca",
+ "cursor": 2758953574,
+ "epoch": 0,
+ "global_step": 198880,
+ "phase": "wikipedia",
+ "phase_step": 198880,
+ "pos": [
+ 331465519,
+ 0
+ ]
+ },
+ "state": "be21dd4e7d988157822d75f6600146be013afa826076b49b45b3874e5a2bd1ca",
+ "model": "21e5ccc4f7a7b4c8b311febbdcb0cd037a2efff64c715935853fa663b61e5aeb",
+ "previous": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b",
+ "time": 1792445221.8958924,
+ "entryHash": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18"
+ },
+ {
+ "index": 12,
+ "kind": "progress",
+ "control": {
+ "batches": "0d86e2942f9d84483cd0e3cd5168d81cf418e915c04e25f94c03d3ad703c648d",
+ "cursor": 2977003841,
+ "epoch": 0,
+ "global_step": 216960,
+ "phase": "wikipedia",
+ "phase_step": 216960,
+ "pos": [
+ 379051570,
+ 512
+ ]
+ },
+ "state": "c9d571c059311fbeb20f46d33a56497113b1f3705b75939ef57e61cc98978ca6",
+ "model": "ee22252416c44a8812aab40b456c60351eaf714679495ef7c39a81c3d24db503",
+ "previous": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18",
+ "time": 1792447305.2481282,
+ "entryHash": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165"
+ },
+ {
+ "index": 13,
+ "kind": "progress",
+ "control": {
+ "batches": "bfe949e391619c70945f4ad5af5f73c00f8d44562f44733457ad865081612290",
+ "cursor": 3192270243,
+ "epoch": 0,
+ "global_step": 235040,
+ "phase": "wikipedia",
+ "phase_step": 235040,
+ "pos": [
+ 427598539,
+ 0
+ ]
+ },
+ "state": "2733d7ef9aaacf20880e2196c819305f58ad0cc03494704fbc9f5e03a95931b2",
+ "model": "978af11d622fb0e48dd842f5aa27e9992c267de2a91944b1b3b160aa89fa7675",
+ "previous": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165",
+ "time": 1792449363.6749403,
+ "entryHash": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f"
+ },
+ {
+ "index": 14,
+ "kind": "progress",
+ "control": {
+ "batches": "7eea41e27f71c52d58558b90de9ef7cd26ac9123366132bcbc1e71f4de08acf4",
+ "cursor": 3407720912,
+ "epoch": 0,
+ "global_step": 253120,
+ "phase": "wikipedia",
+ "phase_step": 253120,
+ "pos": [
+ 476680277,
+ 0
+ ]
+ },
+ "state": "145353afb1e2ebc2b5f9831fed74e5631b42a11342aab9a0b9febe796446c446",
+ "model": "613728906a531097849fcaa83d13ccb54b334d805aeaef8abe127ef2b7b70e1d",
+ "previous": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f",
+ "time": 1792451498.6016607,
+ "entryHash": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa"
+ },
+ {
+ "index": 15,
+ "kind": "progress",
+ "control": {
+ "batches": "c294ad7b42d0f2e970f3c757f339b24f6fbdc2982e9a91078a071b121b9325a1",
+ "cursor": 3626056290,
+ "epoch": 0,
+ "global_step": 271200,
+ "phase": "wikipedia",
+ "phase_step": 271200,
+ "pos": [
+ 524689002,
+ 0
+ ]
+ },
+ "state": "fa961c767d2e293f12adcd13a3410d345e3bb5952395725963eb2f6e5c228d9e",
+ "model": "0f122b6387647c6844f6668edc95b2b96efd34885985e80c25a1eb424c7ffa2c",
+ "previous": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa",
+ "time": 1792453682.104504,
+ "entryHash": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722"
+ },
+ {
+ "index": 16,
+ "kind": "progress",
+ "control": {
+ "batches": "4d0765884b5a4f4af81e17f0914a728e631c665fa74ec82be39e458f3f4f40c1",
+ "cursor": 3842372860,
+ "epoch": 0,
+ "global_step": 289280,
+ "phase": "wikipedia",
+ "phase_step": 289280,
+ "pos": [
+ 573811026,
+ 2048
+ ]
+ },
+ "state": "82d7f95aaed27c4ac54ec6b8de9567a84d818a875673030c4ae0d2d39a860754",
+ "model": "9a1a2f4ad99c6aac613f620400dc405a8967906e435079c0d8d29622831044fa",
+ "previous": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722",
+ "time": 1792455885.299576,
+ "entryHash": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f"
+ },
+ {
+ "index": 17,
+ "kind": "progress",
+ "control": {
+ "batches": "a219629293cfc4e69c74916379ba790f96b8a5425bd9fb7f4d9e481965ec9374",
+ "cursor": 4065481916,
+ "epoch": 0,
+ "global_step": 307360,
+ "phase": "wikipedia",
+ "phase_step": 307360,
+ "pos": [
+ 619889558,
+ 18944
+ ]
+ },
+ "state": "1082ced41232e82ff83506f0c20d887d0ddc3dc7458bc3ace5361a87485e5b60",
+ "model": "1e77516fc3d4c149c17b5e039ba9a886f520769df7512002fe89a9e5148f7d6e",
+ "previous": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f",
+ "time": 1792458112.5074773,
+ "entryHash": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7"
+ },
+ {
+ "index": 18,
+ "kind": "progress",
+ "control": {
+ "batches": "fbdade37939ffab2c5df52a9db88c8bac93a5501861522a30f1a50ebcafb4b3e",
+ "cursor": 4280170919,
+ "epoch": 0,
+ "global_step": 325440,
+ "phase": "wikipedia",
+ "phase_step": 325440,
+ "pos": [
+ 669406302,
+ 0
+ ]
+ },
+ "state": "0d4932793bd2279c0a17b3ca736159f89d48898d8a42113d15c7590dfdd85c26",
+ "model": "4d79bcc6ee8060a9c28a5802c142f972665bafae70901176c9a964bc884f1dee",
+ "previous": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7",
+ "time": 1792460358.5080163,
+ "entryHash": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89"
+ },
+ {
+ "index": 19,
+ "kind": "progress",
+ "control": {
+ "batches": "32161f48812917ee1bed7a4367df261934308045464246622f47dba2ab129f2a",
+ "cursor": 4492270493,
+ "epoch": 0,
+ "global_step": 343520,
+ "phase": "wikipedia",
+ "phase_step": 343520,
+ "pos": [
+ 719769225,
+ 2048
+ ]
+ },
+ "state": "cafd56b605b39449655b55534cd4e33616de0d40e6c3434fcd1a54c941e63191",
+ "model": "9e597fcc4fc74828e30605677e3696a53b77a6976fecdc4f0e06b378e6721ee9",
+ "previous": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89",
+ "time": 1792462598.3975008,
+ "entryHash": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f"
+ },
+ {
+ "index": 20,
+ "kind": "progress",
+ "control": {
+ "batches": "30c019ac1c173f6d688cdd4bd01e7ceaf9ed1376251e69d87cb9643b4386116b",
+ "cursor": 4705349595,
+ "epoch": 0,
+ "global_step": 361600,
+ "phase": "wikipedia",
+ "phase_step": 361600,
+ "pos": [
+ 769153707,
+ 4608
+ ]
+ },
+ "state": "708b48121052bf9bc68bbd67e8613230dd713b9569610a4e66838fe45f35299a",
+ "model": "f98ab99a90c7734a3f4cf2d60216ed8b1bdc657541ec3374c6f035b0bd42a307",
+ "previous": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f",
+ "time": 1792463768.5816014,
+ "entryHash": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03"
+ },
+ {
+ "index": 21,
+ "kind": "progress",
+ "control": {
+ "batches": "09506b60c4342ec5873bba53f2e993f0a46e1b726fc3449ce690e5e4eb43927c",
+ "cursor": 4919188008,
+ "epoch": 0,
+ "global_step": 379680,
+ "phase": "wikipedia",
+ "phase_step": 379680,
+ "pos": [
+ 818886901,
+ 0
+ ]
+ },
+ "state": "eb31ec48c4ce9373035fe1229a93190fcfec9060d1bc8520f62ed3dfcab752fa",
+ "model": "b89d3b185a1fcf21bcc5ef432a26eafc9643eb62b9aa3d8eeb624cbfceeea340",
+ "previous": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03",
+ "time": 1792465514.4536183,
+ "entryHash": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d"
+ },
+ {
+ "index": 22,
+ "kind": "progress",
+ "control": {
+ "batches": "27f95fcd8bc5e1b25cea97a17fd58ce6f6771b5b15565014616d4519ab8c8184",
+ "cursor": 5137669818,
+ "epoch": 0,
+ "global_step": 397760,
+ "phase": "wikipedia",
+ "phase_step": 397760,
+ "pos": [
+ 867774445,
+ 512
+ ]
+ },
+ "state": "ee97359b8f9928977515e383d98a796d442444b5a07de5c9ec1158d372cc0e49",
+ "model": "1428e4c6cddc484d305881220b68eb5e04eb851632e1ae7d4f61725e0b24708b",
+ "previous": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d",
+ "time": 1792468481.591845,
+ "entryHash": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0"
+ },
+ {
+ "index": 23,
+ "kind": "progress",
+ "control": {
+ "batches": "2ac5c320056a9766eaf2f910194309a2e1e3254958d1fe2e4afa92805ee04b28",
+ "cursor": 5354659564,
+ "epoch": 0,
+ "global_step": 415840,
+ "phase": "wikipedia",
+ "phase_step": 415840,
+ "pos": [
+ 917385337,
+ 0
+ ]
+ },
+ "state": "296c1763d3421f6991f4f841f4143166bf0910000e5b00673383a4589859483f",
+ "model": "8948b0defe4c934602354d44e72ceb0b34c46d87bb7a67832fa50ea581b57d16",
+ "previous": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0",
+ "time": 1792469631.0069373,
+ "entryHash": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99"
+ },
+ {
+ "index": 24,
+ "kind": "progress",
+ "control": {
+ "batches": "3fae190c7c836188101a7a77d6046446431892e109590436e4c94a3ed1da8c13",
+ "cursor": 5571989843,
+ "epoch": 0,
+ "global_step": 433920,
+ "phase": "wikipedia",
+ "phase_step": 433920,
+ "pos": [
+ 966632574,
+ 8192
+ ]
+ },
+ "state": "6413ef4ca2bf9d47a89302d88662069fde930d732c4df7d0892f30ed64d3756d",
+ "model": "c553304d081e5817ba0e042bcdef7f1cf9642a290b006edab98778abd18eeedc",
+ "previous": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99",
+ "time": 1792470779.9569445,
+ "entryHash": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a"
+ },
+ {
+ "index": 25,
+ "kind": "progress",
+ "control": {
+ "batches": "b77680f3b1febcf15d5adac2f244b845ea1ca7ae5837e9ce9e57a9b9661033c6",
+ "cursor": 5786932809,
+ "epoch": 0,
+ "global_step": 452000,
+ "phase": "wikipedia",
+ "phase_step": 452000,
+ "pos": [
+ 1015978804,
+ 2048
+ ]
+ },
+ "state": "245211135b131b6c5e1940458575033082b4b473fa0033b55816d889c82d656b",
+ "model": "1f1becfa5470bac9a31962462d4d85647598dc8f75277e2f9c6efe5bc59ada97",
+ "previous": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a",
+ "time": 1792471931.509705,
+ "entryHash": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0"
+ },
+ {
+ "index": 26,
+ "kind": "progress",
+ "control": {
+ "batches": "44eaf0d468c5578cc89e3999530132727e41ac47cbfcc8fcf80a7621b527cda0",
+ "cursor": 6003090585,
+ "epoch": 0,
+ "global_step": 470080,
+ "phase": "wikipedia",
+ "phase_step": 470080,
+ "pos": [
+ 1065027050,
+ 0
+ ]
+ },
+ "state": "7b1ab9b324ac43d99f738ee00e3ef2b514e8dcc82313863c1d8f6e871d42bbb8",
+ "model": "6a59289ec3928857e0beacc7858e190c0756c72f2cdf48896578bb75720fa72a",
+ "previous": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0",
+ "time": 1792473082.0379794,
+ "entryHash": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e"
+ },
+ {
+ "index": 27,
+ "kind": "progress",
+ "control": {
+ "batches": "58cf98d2ec42837434cc698720602c1ed7a427f1b7075de7b56e1957e42d7b7b",
+ "cursor": 6219792471,
+ "epoch": 0,
+ "global_step": 488160,
+ "phase": "wikipedia",
+ "phase_step": 488160,
+ "pos": [
+ 1113864691,
+ 1024
+ ]
+ },
+ "state": "0ec654850f2c1288c7850e9e732b52187dcc5f73fffe0f3bc211143e32097e7a",
+ "model": "5329233dbd65f90b4c368e40c725c59496c03266053f934c4be9c4ef73e3ec73",
+ "previous": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e",
+ "time": 1792474229.018975,
+ "entryHash": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c"
+ },
+ {
+ "index": 28,
+ "kind": "progress",
+ "control": {
+ "batches": "8e7e2738dac57947ab3894def88fc8bfb84e0b8c55095fcd33d66e2699dabab5",
+ "cursor": 6444391263,
+ "epoch": 0,
+ "global_step": 506240,
+ "phase": "wikipedia",
+ "phase_step": 506240,
+ "pos": [
+ 1159432427,
+ 0
+ ]
+ },
+ "state": "e5891f8db717f770246c4255fa6598ba280922c428e9e1e6d814f5d96549cab1",
+ "model": "d6e1eaab6061fc051ae6de60bb6c95d99d1b98c6bcddfdcbbd593208b7d8a303",
+ "previous": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c",
+ "time": 1792475372.9946525,
+ "entryHash": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5"
+ },
+ {
+ "index": 29,
+ "kind": "progress",
+ "control": {
+ "batches": "7b351d64e2a3d2492e668dcfd73d82ce92c0ba04fdd4c3058c95d4e642a6807d",
+ "cursor": 6671911669,
+ "epoch": 0,
+ "global_step": 524320,
+ "phase": "wikipedia",
+ "phase_step": 524320,
+ "pos": [
+ 1203647118,
+ 0
+ ]
+ },
+ "state": "ab0f669782c60bf45255e4822fee5fe5425a24b614d10dc0821323ca7325853c",
+ "model": "3c5459d2bdcdb86d05168a8a78370aa7f772cb6f48ab11e6949164ec6d30fdc0",
+ "previous": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5",
+ "time": 1792476512.00237,
+ "entryHash": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b"
+ },
+ {
+ "index": 30,
+ "kind": "progress",
+ "control": {
+ "batches": "304b2d3afe5a67a5ef902cb8334a55ee6f89877d474b438fb9c94e507814dece",
+ "cursor": 6901668826,
+ "epoch": 0,
+ "global_step": 542400,
+ "phase": "wikipedia",
+ "phase_step": 542400,
+ "pos": [
+ 1246875101,
+ 0
+ ]
+ },
+ "state": "baf0f2694f6f7561b6e427c0181978541c19263849163984131f51dad72b6c38",
+ "model": "bdfa54d7eb2938c8fe3258528e5cb84287c54f889471eb60909e7d8c6aca8061",
+ "previous": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b",
+ "time": 1792477651.6187513,
+ "entryHash": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39"
+ },
+ {
+ "index": 31,
+ "kind": "base",
+ "control": {
+ "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875",
+ "cursor": 7118121139,
+ "epoch": 0,
+ "global_step": 560177,
+ "phase": "wikipedia",
+ "phase_step": 560177,
+ "pos": [
+ 1293950757,
+ 0
+ ]
+ },
+ "state": "13d6ad64b2465d42653f250bba0463468c0c81b7980ebc9d97e3b0f95c713bf1",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "previous": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39",
+ "time": 1792478775.2381847,
+ "entryHash": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a"
+ },
+ {
+ "index": 32,
+ "kind": "transition",
+ "control": {
+ "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875",
+ "cursor": 0,
+ "epoch": 0,
+ "global_step": 560177,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "8987fdd57ba91b044c23bba48cf41b132aa6ec949c4af650ba3180483476941d",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "previous": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a",
+ "time": 1792478776.1264164,
+ "entryHash": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8"
+ },
+ {
+ "index": 33,
+ "kind": "epoch",
+ "control": {
+ "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67",
+ "cursor": 1278137,
+ "epoch": 0,
+ "global_step": 560324,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "previous": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8",
+ "time": 1792478785.6187253,
+ "entryHash": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035"
+ },
+ {
+ "index": 34,
+ "kind": "transition",
+ "control": {
+ "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67",
+ "cursor": 0,
+ "epoch": 1,
+ "global_step": 560324,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "previous": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035",
+ "time": 1792478786.6568494,
+ "entryHash": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f"
+ },
+ {
+ "index": 35,
+ "kind": "epoch",
+ "control": {
+ "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023",
+ "cursor": 1278137,
+ "epoch": 1,
+ "global_step": 560471,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "previous": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f",
+ "time": 1792478796.331579,
+ "entryHash": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042"
+ },
+ {
+ "index": 36,
+ "kind": "transition",
+ "control": {
+ "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023",
+ "cursor": 0,
+ "epoch": 2,
+ "global_step": 560471,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "previous": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042",
+ "time": 1792478797.354915,
+ "entryHash": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb"
+ },
+ {
+ "index": 37,
+ "kind": "final",
+ "control": {
+ "batches": "1fd22db0ab89ab98045f8c4b32ce4e4d55453163390ec9ebd5792dfc38fd5a52",
+ "cursor": 1278137,
+ "epoch": 2,
+ "global_step": 560618,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "934d681c99e5c3e10617e82dbbb0ae0ddd1ad4e32cf45e8e3a6d2ed94b69f200",
+ "model": "ec9a2b31ca524613f791aba00f4f7f31e4a7bf4a8a921e0deb81c1a922d0958b",
+ "previous": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb",
+ "time": 1792478807.0463226,
+ "entryHash": "9edbcaddbb08ed20f3d655ac59d0aa57f6339a702d0fa1d3422856f5d8251a51"
+ }
+ ],
+ "verifications": {
+ "totalChecks": 46,
+ "uniqueSegments": 37,
+ "projectChecksCount": 46,
+ "independentChecksCount": 0,
+ "coverage": [
+ {
+ "segment": 0,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 0
+ }
+ ]
+ },
+ {
+ "segment": 1,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 1
+ }
+ ]
+ },
+ {
+ "segment": 2,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 2
+ }
+ ]
+ },
+ {
+ "segment": 3,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 3
+ }
+ ]
+ },
+ {
+ "segment": 4,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 4
+ }
+ ]
+ },
+ {
+ "segment": 5,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0 fast loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ }
+ ]
+ },
+ {
+ "segment": 6,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 6
+ }
+ ]
+ },
+ {
+ "segment": 7,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 7
+ }
+ ]
+ },
+ {
+ "segment": 8,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 8
+ }
+ ]
+ },
+ {
+ "segment": 9,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 9
+ }
+ ]
+ },
+ {
+ "segment": 10,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 10
+ }
+ ]
+ },
+ {
+ "segment": 11,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 11
+ }
+ ]
+ },
+ {
+ "segment": 12,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 12
+ }
+ ]
+ },
+ {
+ "segment": 13,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 13
+ }
+ ]
+ },
+ {
+ "segment": 14,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 14
+ }
+ ]
+ },
+ {
+ "segment": 15,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 15
+ }
+ ]
+ },
+ {
+ "segment": 16,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 16
+ }
+ ]
+ },
+ {
+ "segment": 17,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 17
+ }
+ ]
+ },
+ {
+ "segment": 18,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 18
+ }
+ ]
+ },
+ {
+ "segment": 19,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 19
+ }
+ ]
+ },
+ {
+ "segment": 20,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 20
+ }
+ ]
+ },
+ {
+ "segment": 21,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 21
+ },
+ {
+ "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
+ }
+ ]
+ },
+ {
+ "segment": 22,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ }
+ ]
+ },
+ {
+ "segment": 23,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 23
+ }
+ ]
+ },
+ {
+ "segment": 24,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 24
+ }
+ ]
+ },
+ {
+ "segment": 25,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 25
+ }
+ ]
+ },
+ {
+ "segment": 26,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 26
+ }
+ ]
+ },
+ {
+ "segment": 27,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 27
+ }
+ ]
+ },
+ {
+ "segment": 28,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 28
+ }
+ ]
+ },
+ {
+ "segment": 29,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 29
+ }
+ ]
+ },
+ {
+ "segment": 30,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 30
+ }
+ ]
+ },
+ {
+ "segment": 31,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ }
+ ]
+ },
+ {
+ "segment": 32,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ }
+ ]
+ },
+ {
+ "segment": 33,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ }
+ ]
+ },
+ {
+ "segment": 34,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ }
+ ]
+ },
+ {
+ "segment": 35,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ }
+ ]
+ },
+ {
+ "segment": 36,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ }
+ ]
+ }
+ ],
+ "rawChecks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 0
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 1
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 2
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 3
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 4
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 6
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 7
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 8
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 9
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 10
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 11
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 12
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 13
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 14
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 15
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 16
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 17
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 18
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 19
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 20
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 21
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 23
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 24
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 25
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 26
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 27
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 28
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 29
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 30
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0 fast loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "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
+ }
+ ]
+ },
+ "hardwareMap": [
+ {
+ "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"
+ },
+ {
+ "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"
+ },
+ {
+ "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"
+ },
+ {
+ "segment": 32,
+ "result": "MISMATCH",
+ "hardware": "x86_64 CPU",
+ "driver": "none",
+ "software": "torch 2.14.0+cpu",
+ "note": "different hardware and software"
+ },
+ {
+ "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"
+ }
+ ],
+ "anchor": {
+ "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",
+ "timestamp": "2026-10-20 14:38:43 UTC",
+ "authorities": [
+ "DigiCert",
+ "FreeTSA (RFC 3161)"
+ ]
+ },
+ "exclusion": {
+ "removedArticle": "3I/ATLAS",
+ "originalRemovedLoss": 3.3604,
+ "forkRemovedLoss": 3.386,
+ "removedLossDelta": 0.0256,
+ "originalControlLossMean": 2.871,
+ "forkControlLossMean": 2.8712,
+ "controlLossDelta": 0.0002,
+ "controlArticlesCount": 50,
+ "evidencePath": "release/unlearning-3i-atlas/"
+ },
+ "releaseHashes": {
+ "base-model.pt": "976c62e8b28db786c38dc2ff969339603d0ee917d830f2815d9e858d2a3c0ce3",
+ "chain.jsonl": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "ckpt-00000.pt": "3dccf4a6d258ff5e150ee1ed590f4baff099e5a368d580e610ecf238b4ba8c22",
+ "ckpt-00001.pt": "ba524fd9691c4a849d1a3dac177af426df36d8e04d9c75fba2dbf036a4b515f9",
+ "ckpt-00002.pt": "627106799e630a9297770b31b0e1f66b1418215eea50c1cd3f3a23c48e138a33",
+ "ckpt-00003.pt": "0b64c3f0208d636b19bdf5970810c27cb2ceab33f18153915d64f6493201bc10",
+ "ckpt-00004.pt": "68f07c741473f7ad0c2c61d52dc25c4d8a9c441382d348f9c1a97d215bba452e",
+ "ckpt-00005.pt": "29cdefeb28098ba4572869655b58c9dd2e771edc3717f0112d700477b74defb8",
+ "ckpt-00006.pt": "3e861cd5457c1a1566c8ebcee2a712feca2f3e5603ad46436d393aca5cbb5999",
+ "ckpt-00007.pt": "400734c784b59c9363fdbdd745f7f0f6d70c1be09d2c747976bc2b4fae01b64b",
+ "ckpt-00008.pt": "fe5352356351e4d9e4b0abd59f279c7a2ed98888177fbb773fd1f1983fefe83f",
+ "ckpt-00009.pt": "41819daf70a409e200f5189ab45ae96293716794733ad534e4843ac3f8b1982e",
+ "ckpt-00010.pt": "75cd5863903d9f595e2d50cacea3ec0530f41c154d4ec8817f41376b6f222e3f",
+ "ckpt-00011.pt": "46ece4b519e8624a2b41856b1ecfa9a5daf4994616a9bdd8d941625cb09a32ed",
+ "ckpt-00012.pt": "8b0e19692ccc6c6e6e0eb745633ae2dd2c4e86d0ca84b8ea1c7f1f81a888b892",
+ "ckpt-00013.pt": "3ac79c55fe528bcc62bd7a7a047e2b2a19e2d2e494c85e26301b0fc79f345aee",
+ "ckpt-00014.pt": "ad933ae52b14ff5de72624c5dc7af9b3e5464155b9c3ed84bd43bd5be4f737c3",
+ "ckpt-00015.pt": "2cfddc6c26fb7e8dc99c94b6fb39007a4937b67e1c8d852f2561d990e857cb62",
+ "ckpt-00016.pt": "3729909ae0f85b79377956ad8defdaaeceac0cd000a1c47e582f38685f4158d6",
+ "ckpt-00017.pt": "9f8537d432d78b254dcba86e7bd987246d928bbc837950ffe2536ba989747c41",
+ "ckpt-00018.pt": "a09df5692aac7e42a0430fd225c75937bf75c85a9dfb77b899b4cb956a8c51d1",
+ "ckpt-00019.pt": "ef18f34f8ac17a2581193ffc681a927f655bdadce4c6ca2de0a095d72094bb24",
+ "ckpt-00020.pt": "6bda17b7f79347cc57cb1325215a3a68f9f2357ee5b97f2c88e353189244fcdf",
+ "ckpt-00021.pt": "7df62e3801530777a4491bcecb0199a2b5628a9de61da30f5f6513c74c028095",
+ "ckpt-00022.pt": "23d9271d4f4c49e8e04a13f498ed0a89d57c3f80705044c2c8fe10eecc895896",
+ "ckpt-00023.pt": "2b68d53231a0d3a639312ed45eeb2afef3720f93824819843dd2c9fb68f2fc4c",
+ "ckpt-00024.pt": "8a06f96345a0ff23933d6b946a4fc88ad63a6b43a618a91a1639267cf1c0e23b",
+ "ckpt-00025.pt": "7bed06bf3566e18595a190bc1418fe5735689a2c47d280d857c0a5f68ba73a7f",
+ "ckpt-00026.pt": "31e21be4135f53a912312fae5f26d9b2eefc344171b8935e295c655f49c3b701",
+ "ckpt-00027.pt": "2efcee93267b438152c35cfc1975fd0d8d2dcec804b2713fcc11bdd8602752cf",
+ "ckpt-00028.pt": "671cf6928fc370a464fade45cf5565a65c019c9888b6c9d8962230364cc4c5b4",
+ "ckpt-00029.pt": "082195ad124ad61287e94f224c6672b2175b1c1c35f06baee2b56adbc12f92da",
+ "ckpt-00030.pt": "febe492c2c87335b078c910894172bcf8f572b853d807b8f24da99e9e0127979",
+ "ckpt-00031.pt": "c687187b7daaa97d0fd8c96df302313e051febc29d64b5ef4d5b5775d684244b",
+ "ckpt-00032.pt": "b49bfa976a6aa59fc54b9511fccc4745a4493b81cc58a3ff310ffecf7a92f45e",
+ "ckpt-00033.pt": "8fa1f26811ef37b235c968c4204044983895b217e00db731d57f3a2cecda179e",
+ "ckpt-00034.pt": "5fe1e5af0d612046c7617d079181090e3ac0898411fe39900e05346c90b29aeb",
+ "ckpt-00035.pt": "4766216588d357cdbe5bdd35e4b9534317d59f8b1273b5b722a390e748ae3beb",
+ "ckpt-00036.pt": "1ca4bd559c51e9d83ba2ea84a85e518e0309d0844d964535868339a16b66e239",
+ "ckpt-00037.pt": "88947898dab959fd82f954f81681103bac7f6b770f4bcc13d6eac29ca1795ecb",
+ "conversation-model.pt": "149cfae13c4523a1010c52161e13babf76c9ddc01f34fa1a8b580677b733a64c",
+ "recipe.json": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d",
+ "ovl-23m-chat.gguf": "541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de",
+ "Modelfile": "df4dacfc3191e56b1dc1195764ea66ca1a7695856be04ecec17d8dde4c66fc8b"
+ }
+}
\ No newline at end of file
diff --git a/frontend/tests/fixtures/invalid-chain-len.json b/frontend/tests/fixtures/invalid-chain-len.json
new file mode 100644
index 00000000..eeb12746
--- /dev/null
+++ b/frontend/tests/fixtures/invalid-chain-len.json
@@ -0,0 +1,1924 @@
+{
+ "schemaVersion": 1,
+ "dataset": "AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence",
+ "revision": "96dc282a",
+ "fetchedAt": "2026-10-30T15:32:03.178Z",
+ "sourceHashes": {
+ "release/simple-run/chain.jsonl": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "release/simple-run/verifications.jsonl": "ec73fe8fdce56eb075783c37383dbb5afaa23fac168fbd6619c01240de41b770",
+ "release/simple-run/hardware-map.jsonl": "5116f365398795a5e79513a3709d48995cc72a059ae9c69c653e324e723884e4",
+ "release/simple-run/release-hashes.txt": "479ce030fa8022f0f92262849f88dfde4c9cf2a0748b8830357f3aa277080e8d",
+ "release/simple-run/anchor.json": "2adaea4cae25439199ec2396c0e6e94d1d14188c070f217ed7e360ce10c1c18d",
+ "release/simple-run/README.md": "d3a4a5b221d9d1bd9318e8e414b44adc75f66155d03cd356b489165243e932e9",
+ "release/unlearning-3i-atlas/loo-results.json": "c926c965d1e040ab23c591c9dcdd007e5ece75a57ecfa100fd69515d190ead69",
+ "prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68"
+ },
+ "preparation": {
+ "articles": 7232582,
+ "wikipediaTargets": 7118121139,
+ "conversations": 3481,
+ "trainingLoopLines": "~630 lines",
+ "preparedDataId": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68"
+ },
+ "chain": [
+ {
+ "index": 0,
+ "kind": "initial",
+ "control": {
+ "batches": "10ea13010a13668c8bf9e2884e16bdbd16f8933d9bf4d09eda0c47459133eddb",
+ "cursor": 0,
+ "epoch": 0,
+ "global_step": 0,
+ "phase": "wikipedia",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "64041a4736bd76b64b149c2a784950a312fb19ed641c7eb87e7300c171d002fc",
+ "model": "2b167bcb407f94ac3f1dead8f316ea180823a1cb40489b8a1ff974bf2bcd959d",
+ "previous": null,
+ "time": 1792422250.861772,
+ "entryHash": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2"
+ },
+ {
+ "index": 1,
+ "kind": "progress",
+ "control": {
+ "batches": "e3f19a5269c4824fb1615d433b678fa54a6fc23ea99fd82c3e83f3f400f66809",
+ "cursor": 274561003,
+ "epoch": 0,
+ "global_step": 18080,
+ "phase": "wikipedia",
+ "phase_step": 18080,
+ "pos": [
+ 14363834,
+ 3072
+ ]
+ },
+ "state": "ef5090325fcf3c392503406ac2f7e6bd99118d267c38fbe4b624df41b48eca8f",
+ "model": "c32f02fac9e87d0c4279aa39a0fa06b5cc06d5b141d5ff29503cb8431c4ca180",
+ "previous": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2",
+ "time": 1792424215.6430938,
+ "entryHash": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f"
+ },
+ {
+ "index": 2,
+ "kind": "progress",
+ "control": {
+ "batches": "d5b199348b8d97e5a30ee2ea1a9bc465fd5dc0220a1a4297b4fa0716abdc84dc",
+ "cursor": 547313827,
+ "epoch": 0,
+ "global_step": 36160,
+ "phase": "wikipedia",
+ "phase_step": 36160,
+ "pos": [
+ 30161308,
+ 6656
+ ]
+ },
+ "state": "94e253d50adff230867baf0f9b2fbb247399b598511dd238cca10838439a228c",
+ "model": "29c055caaaefce12e962bb5905f79640bf7bcfc2dfe09070704f50a35e954868",
+ "previous": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f",
+ "time": 1792426181.1370955,
+ "entryHash": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789"
+ },
+ {
+ "index": 3,
+ "kind": "progress",
+ "control": {
+ "batches": "f520d10b29d43cbbe5556d887bd7e622a26ed3003eaa8677366993ed6a0965df",
+ "cursor": 812314162,
+ "epoch": 0,
+ "global_step": 54240,
+ "phase": "wikipedia",
+ "phase_step": 54240,
+ "pos": [
+ 50875269,
+ 0
+ ]
+ },
+ "state": "63f2f1cf69a97b295ef4924af836583cc5942d4cfdde34a0d68da658e9b56875",
+ "model": "bc0210cc1ce7eb55786921b9be9142224551daaa14a5a94b5851415d9954513f",
+ "previous": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789",
+ "time": 1792428164.4587104,
+ "entryHash": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37"
+ },
+ {
+ "index": 4,
+ "kind": "progress",
+ "control": {
+ "batches": "9b1c36b8b217b225ab637476b5f96e9d13723e8ff2f49474a1aff9fe4b6c6836",
+ "cursor": 1071169817,
+ "epoch": 0,
+ "global_step": 72320,
+ "phase": "wikipedia",
+ "phase_step": 72320,
+ "pos": [
+ 75821490,
+ 512
+ ]
+ },
+ "state": "38544968f3a1f342c17ee65afed30915acacf2131314c3254cfb1d3367acf0f6",
+ "model": "f6c1733d73e556de085fd9cb99f4137296f9ad7835fc3c88c9f8588cfeca0165",
+ "previous": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37",
+ "time": 1792430142.4307606,
+ "entryHash": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6"
+ },
+ {
+ "index": 5,
+ "kind": "progress",
+ "control": {
+ "batches": "0feb0c99169621a584609ce24a7ba1710f4dd1127205dae3911df09e1ab75698",
+ "cursor": 1326339931,
+ "epoch": 0,
+ "global_step": 90400,
+ "phase": "wikipedia",
+ "phase_step": 90400,
+ "pos": [
+ 103716532,
+ 512
+ ]
+ },
+ "state": "0f66051bfcf2b8512da505733cf9814527aba0412b28109071d9ebe1e7949165",
+ "model": "521f1f5f34c6a0992a15e539f1eab5f5590f5fdca15fdf16c60842c1d8612754",
+ "previous": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6",
+ "time": 1792432107.6645238,
+ "entryHash": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa"
+ },
+ {
+ "index": 6,
+ "kind": "progress",
+ "control": {
+ "batches": "dd5c823c56a28362db599fa09567143434f9f343784400622105200695fca78d",
+ "cursor": 1575735740,
+ "epoch": 0,
+ "global_step": 108480,
+ "phase": "wikipedia",
+ "phase_step": 108480,
+ "pos": [
+ 135269108,
+ 0
+ ]
+ },
+ "state": "d3f93a22ceb28a8640734ceca70e0217cf991b696807ecb6fdd31d318ad30aa8",
+ "model": "655aa1b3b7f5a34c9f0a2eba172ddbfef233acb3f121373e351b6d2cd982475f",
+ "previous": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa",
+ "time": 1792434050.5597794,
+ "entryHash": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a"
+ },
+ {
+ "index": 7,
+ "kind": "progress",
+ "control": {
+ "batches": "496333b0221dbc6a2edeeb9ea5318d3b33069b8f91c98d489cf742f70bab1d43",
+ "cursor": 1821662484,
+ "epoch": 0,
+ "global_step": 126560,
+ "phase": "wikipedia",
+ "phase_step": 126560,
+ "pos": [
+ 169162007,
+ 512
+ ]
+ },
+ "state": "228e635e6ee63fca5189f1af685f15c9d52a27527f300e7dac7a5ade82688e11",
+ "model": "ab677b66cfcc2d0652d37b5cc354e5d6980716b273cc99b78ae53f63e581ba14",
+ "previous": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a",
+ "time": 1792435994.2637668,
+ "entryHash": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc"
+ },
+ {
+ "index": 8,
+ "kind": "progress",
+ "control": {
+ "batches": "a009f3186720dd943c7c0e3c597706610370b795c3fd87b65df4ce8cdc54822d",
+ "cursor": 2062246462,
+ "epoch": 0,
+ "global_step": 144640,
+ "phase": "wikipedia",
+ "phase_step": 144640,
+ "pos": [
+ 206335253,
+ 0
+ ]
+ },
+ "state": "6cb7cf58b036f71d793b7940617d2756e4d24e906a8a4fdb6ec58ee56031ad53",
+ "model": "4419b42c7902c6f650e634055a1de54ca172e2a0a26c5bbad58ee8516cf4dfc6",
+ "previous": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc",
+ "time": 1792437967.4633026,
+ "entryHash": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae"
+ },
+ {
+ "index": 9,
+ "kind": "progress",
+ "control": {
+ "batches": "9f883e76562c687ddae51575bda5430cc91dbc45e57e7311d3646340a420a020",
+ "cursor": 2299429619,
+ "epoch": 0,
+ "global_step": 162720,
+ "phase": "wikipedia",
+ "phase_step": 162720,
+ "pos": [
+ 245609368,
+ 0
+ ]
+ },
+ "state": "0947a1b7cb257922ed1bb71e36059bdde1fa1c76509255c1af8cb3167bff72db",
+ "model": "967ff641117b62e0f4bbb19fda16cfb7a1b6c20adc35295ff0738a0664953048",
+ "previous": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae",
+ "time": 1792439938.9320748,
+ "entryHash": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43"
+ },
+ {
+ "index": 10,
+ "kind": "progress",
+ "control": {
+ "batches": "14ffdd92074c743ba35ff842d9d2956a29ff1ecf6b93820fc1bedb2161e2f20f",
+ "cursor": 2534896708,
+ "epoch": 0,
+ "global_step": 180800,
+ "phase": "wikipedia",
+ "phase_step": 180800,
+ "pos": [
+ 285958813,
+ 5632
+ ]
+ },
+ "state": "e162c0ef79462cfcc2c88cd336170df12f92f1f6d099920decca178da9dd455a",
+ "model": "cb2fbe49be6ead1201600d45004f411c7ed3ba0d532ebe2417b1a43ba40d9889",
+ "previous": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43",
+ "time": 1792441925.2640333,
+ "entryHash": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b"
+ },
+ {
+ "index": 11,
+ "kind": "progress",
+ "control": {
+ "batches": "7321c9e7f9b890c6b657525ffc10389c70e730b37f0ccaa0281264b7aaeec2ca",
+ "cursor": 2758953574,
+ "epoch": 0,
+ "global_step": 198880,
+ "phase": "wikipedia",
+ "phase_step": 198880,
+ "pos": [
+ 331465519,
+ 0
+ ]
+ },
+ "state": "be21dd4e7d988157822d75f6600146be013afa826076b49b45b3874e5a2bd1ca",
+ "model": "21e5ccc4f7a7b4c8b311febbdcb0cd037a2efff64c715935853fa663b61e5aeb",
+ "previous": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b",
+ "time": 1792445221.8958924,
+ "entryHash": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18"
+ },
+ {
+ "index": 12,
+ "kind": "progress",
+ "control": {
+ "batches": "0d86e2942f9d84483cd0e3cd5168d81cf418e915c04e25f94c03d3ad703c648d",
+ "cursor": 2977003841,
+ "epoch": 0,
+ "global_step": 216960,
+ "phase": "wikipedia",
+ "phase_step": 216960,
+ "pos": [
+ 379051570,
+ 512
+ ]
+ },
+ "state": "c9d571c059311fbeb20f46d33a56497113b1f3705b75939ef57e61cc98978ca6",
+ "model": "ee22252416c44a8812aab40b456c60351eaf714679495ef7c39a81c3d24db503",
+ "previous": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18",
+ "time": 1792447305.2481282,
+ "entryHash": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165"
+ },
+ {
+ "index": 13,
+ "kind": "progress",
+ "control": {
+ "batches": "bfe949e391619c70945f4ad5af5f73c00f8d44562f44733457ad865081612290",
+ "cursor": 3192270243,
+ "epoch": 0,
+ "global_step": 235040,
+ "phase": "wikipedia",
+ "phase_step": 235040,
+ "pos": [
+ 427598539,
+ 0
+ ]
+ },
+ "state": "2733d7ef9aaacf20880e2196c819305f58ad0cc03494704fbc9f5e03a95931b2",
+ "model": "978af11d622fb0e48dd842f5aa27e9992c267de2a91944b1b3b160aa89fa7675",
+ "previous": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165",
+ "time": 1792449363.6749403,
+ "entryHash": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f"
+ },
+ {
+ "index": 14,
+ "kind": "progress",
+ "control": {
+ "batches": "7eea41e27f71c52d58558b90de9ef7cd26ac9123366132bcbc1e71f4de08acf4",
+ "cursor": 3407720912,
+ "epoch": 0,
+ "global_step": 253120,
+ "phase": "wikipedia",
+ "phase_step": 253120,
+ "pos": [
+ 476680277,
+ 0
+ ]
+ },
+ "state": "145353afb1e2ebc2b5f9831fed74e5631b42a11342aab9a0b9febe796446c446",
+ "model": "613728906a531097849fcaa83d13ccb54b334d805aeaef8abe127ef2b7b70e1d",
+ "previous": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f",
+ "time": 1792451498.6016607,
+ "entryHash": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa"
+ },
+ {
+ "index": 15,
+ "kind": "progress",
+ "control": {
+ "batches": "c294ad7b42d0f2e970f3c757f339b24f6fbdc2982e9a91078a071b121b9325a1",
+ "cursor": 3626056290,
+ "epoch": 0,
+ "global_step": 271200,
+ "phase": "wikipedia",
+ "phase_step": 271200,
+ "pos": [
+ 524689002,
+ 0
+ ]
+ },
+ "state": "fa961c767d2e293f12adcd13a3410d345e3bb5952395725963eb2f6e5c228d9e",
+ "model": "0f122b6387647c6844f6668edc95b2b96efd34885985e80c25a1eb424c7ffa2c",
+ "previous": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa",
+ "time": 1792453682.104504,
+ "entryHash": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722"
+ },
+ {
+ "index": 16,
+ "kind": "progress",
+ "control": {
+ "batches": "4d0765884b5a4f4af81e17f0914a728e631c665fa74ec82be39e458f3f4f40c1",
+ "cursor": 3842372860,
+ "epoch": 0,
+ "global_step": 289280,
+ "phase": "wikipedia",
+ "phase_step": 289280,
+ "pos": [
+ 573811026,
+ 2048
+ ]
+ },
+ "state": "82d7f95aaed27c4ac54ec6b8de9567a84d818a875673030c4ae0d2d39a860754",
+ "model": "9a1a2f4ad99c6aac613f620400dc405a8967906e435079c0d8d29622831044fa",
+ "previous": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722",
+ "time": 1792455885.299576,
+ "entryHash": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f"
+ },
+ {
+ "index": 17,
+ "kind": "progress",
+ "control": {
+ "batches": "a219629293cfc4e69c74916379ba790f96b8a5425bd9fb7f4d9e481965ec9374",
+ "cursor": 4065481916,
+ "epoch": 0,
+ "global_step": 307360,
+ "phase": "wikipedia",
+ "phase_step": 307360,
+ "pos": [
+ 619889558,
+ 18944
+ ]
+ },
+ "state": "1082ced41232e82ff83506f0c20d887d0ddc3dc7458bc3ace5361a87485e5b60",
+ "model": "1e77516fc3d4c149c17b5e039ba9a886f520769df7512002fe89a9e5148f7d6e",
+ "previous": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f",
+ "time": 1792458112.5074773,
+ "entryHash": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7"
+ },
+ {
+ "index": 18,
+ "kind": "progress",
+ "control": {
+ "batches": "fbdade37939ffab2c5df52a9db88c8bac93a5501861522a30f1a50ebcafb4b3e",
+ "cursor": 4280170919,
+ "epoch": 0,
+ "global_step": 325440,
+ "phase": "wikipedia",
+ "phase_step": 325440,
+ "pos": [
+ 669406302,
+ 0
+ ]
+ },
+ "state": "0d4932793bd2279c0a17b3ca736159f89d48898d8a42113d15c7590dfdd85c26",
+ "model": "4d79bcc6ee8060a9c28a5802c142f972665bafae70901176c9a964bc884f1dee",
+ "previous": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7",
+ "time": 1792460358.5080163,
+ "entryHash": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89"
+ },
+ {
+ "index": 19,
+ "kind": "progress",
+ "control": {
+ "batches": "32161f48812917ee1bed7a4367df261934308045464246622f47dba2ab129f2a",
+ "cursor": 4492270493,
+ "epoch": 0,
+ "global_step": 343520,
+ "phase": "wikipedia",
+ "phase_step": 343520,
+ "pos": [
+ 719769225,
+ 2048
+ ]
+ },
+ "state": "cafd56b605b39449655b55534cd4e33616de0d40e6c3434fcd1a54c941e63191",
+ "model": "9e597fcc4fc74828e30605677e3696a53b77a6976fecdc4f0e06b378e6721ee9",
+ "previous": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89",
+ "time": 1792462598.3975008,
+ "entryHash": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f"
+ },
+ {
+ "index": 20,
+ "kind": "progress",
+ "control": {
+ "batches": "30c019ac1c173f6d688cdd4bd01e7ceaf9ed1376251e69d87cb9643b4386116b",
+ "cursor": 4705349595,
+ "epoch": 0,
+ "global_step": 361600,
+ "phase": "wikipedia",
+ "phase_step": 361600,
+ "pos": [
+ 769153707,
+ 4608
+ ]
+ },
+ "state": "708b48121052bf9bc68bbd67e8613230dd713b9569610a4e66838fe45f35299a",
+ "model": "f98ab99a90c7734a3f4cf2d60216ed8b1bdc657541ec3374c6f035b0bd42a307",
+ "previous": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f",
+ "time": 1792463768.5816014,
+ "entryHash": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03"
+ },
+ {
+ "index": 21,
+ "kind": "progress",
+ "control": {
+ "batches": "09506b60c4342ec5873bba53f2e993f0a46e1b726fc3449ce690e5e4eb43927c",
+ "cursor": 4919188008,
+ "epoch": 0,
+ "global_step": 379680,
+ "phase": "wikipedia",
+ "phase_step": 379680,
+ "pos": [
+ 818886901,
+ 0
+ ]
+ },
+ "state": "eb31ec48c4ce9373035fe1229a93190fcfec9060d1bc8520f62ed3dfcab752fa",
+ "model": "b89d3b185a1fcf21bcc5ef432a26eafc9643eb62b9aa3d8eeb624cbfceeea340",
+ "previous": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03",
+ "time": 1792465514.4536183,
+ "entryHash": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d"
+ },
+ {
+ "index": 22,
+ "kind": "progress",
+ "control": {
+ "batches": "27f95fcd8bc5e1b25cea97a17fd58ce6f6771b5b15565014616d4519ab8c8184",
+ "cursor": 5137669818,
+ "epoch": 0,
+ "global_step": 397760,
+ "phase": "wikipedia",
+ "phase_step": 397760,
+ "pos": [
+ 867774445,
+ 512
+ ]
+ },
+ "state": "ee97359b8f9928977515e383d98a796d442444b5a07de5c9ec1158d372cc0e49",
+ "model": "1428e4c6cddc484d305881220b68eb5e04eb851632e1ae7d4f61725e0b24708b",
+ "previous": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d",
+ "time": 1792468481.591845,
+ "entryHash": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0"
+ },
+ {
+ "index": 23,
+ "kind": "progress",
+ "control": {
+ "batches": "2ac5c320056a9766eaf2f910194309a2e1e3254958d1fe2e4afa92805ee04b28",
+ "cursor": 5354659564,
+ "epoch": 0,
+ "global_step": 415840,
+ "phase": "wikipedia",
+ "phase_step": 415840,
+ "pos": [
+ 917385337,
+ 0
+ ]
+ },
+ "state": "296c1763d3421f6991f4f841f4143166bf0910000e5b00673383a4589859483f",
+ "model": "8948b0defe4c934602354d44e72ceb0b34c46d87bb7a67832fa50ea581b57d16",
+ "previous": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0",
+ "time": 1792469631.0069373,
+ "entryHash": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99"
+ },
+ {
+ "index": 24,
+ "kind": "progress",
+ "control": {
+ "batches": "3fae190c7c836188101a7a77d6046446431892e109590436e4c94a3ed1da8c13",
+ "cursor": 5571989843,
+ "epoch": 0,
+ "global_step": 433920,
+ "phase": "wikipedia",
+ "phase_step": 433920,
+ "pos": [
+ 966632574,
+ 8192
+ ]
+ },
+ "state": "6413ef4ca2bf9d47a89302d88662069fde930d732c4df7d0892f30ed64d3756d",
+ "model": "c553304d081e5817ba0e042bcdef7f1cf9642a290b006edab98778abd18eeedc",
+ "previous": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99",
+ "time": 1792470779.9569445,
+ "entryHash": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a"
+ },
+ {
+ "index": 25,
+ "kind": "progress",
+ "control": {
+ "batches": "b77680f3b1febcf15d5adac2f244b845ea1ca7ae5837e9ce9e57a9b9661033c6",
+ "cursor": 5786932809,
+ "epoch": 0,
+ "global_step": 452000,
+ "phase": "wikipedia",
+ "phase_step": 452000,
+ "pos": [
+ 1015978804,
+ 2048
+ ]
+ },
+ "state": "245211135b131b6c5e1940458575033082b4b473fa0033b55816d889c82d656b",
+ "model": "1f1becfa5470bac9a31962462d4d85647598dc8f75277e2f9c6efe5bc59ada97",
+ "previous": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a",
+ "time": 1792471931.509705,
+ "entryHash": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0"
+ },
+ {
+ "index": 26,
+ "kind": "progress",
+ "control": {
+ "batches": "44eaf0d468c5578cc89e3999530132727e41ac47cbfcc8fcf80a7621b527cda0",
+ "cursor": 6003090585,
+ "epoch": 0,
+ "global_step": 470080,
+ "phase": "wikipedia",
+ "phase_step": 470080,
+ "pos": [
+ 1065027050,
+ 0
+ ]
+ },
+ "state": "7b1ab9b324ac43d99f738ee00e3ef2b514e8dcc82313863c1d8f6e871d42bbb8",
+ "model": "6a59289ec3928857e0beacc7858e190c0756c72f2cdf48896578bb75720fa72a",
+ "previous": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0",
+ "time": 1792473082.0379794,
+ "entryHash": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e"
+ },
+ {
+ "index": 27,
+ "kind": "progress",
+ "control": {
+ "batches": "58cf98d2ec42837434cc698720602c1ed7a427f1b7075de7b56e1957e42d7b7b",
+ "cursor": 6219792471,
+ "epoch": 0,
+ "global_step": 488160,
+ "phase": "wikipedia",
+ "phase_step": 488160,
+ "pos": [
+ 1113864691,
+ 1024
+ ]
+ },
+ "state": "0ec654850f2c1288c7850e9e732b52187dcc5f73fffe0f3bc211143e32097e7a",
+ "model": "5329233dbd65f90b4c368e40c725c59496c03266053f934c4be9c4ef73e3ec73",
+ "previous": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e",
+ "time": 1792474229.018975,
+ "entryHash": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c"
+ },
+ {
+ "index": 28,
+ "kind": "progress",
+ "control": {
+ "batches": "8e7e2738dac57947ab3894def88fc8bfb84e0b8c55095fcd33d66e2699dabab5",
+ "cursor": 6444391263,
+ "epoch": 0,
+ "global_step": 506240,
+ "phase": "wikipedia",
+ "phase_step": 506240,
+ "pos": [
+ 1159432427,
+ 0
+ ]
+ },
+ "state": "e5891f8db717f770246c4255fa6598ba280922c428e9e1e6d814f5d96549cab1",
+ "model": "d6e1eaab6061fc051ae6de60bb6c95d99d1b98c6bcddfdcbbd593208b7d8a303",
+ "previous": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c",
+ "time": 1792475372.9946525,
+ "entryHash": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5"
+ },
+ {
+ "index": 29,
+ "kind": "progress",
+ "control": {
+ "batches": "7b351d64e2a3d2492e668dcfd73d82ce92c0ba04fdd4c3058c95d4e642a6807d",
+ "cursor": 6671911669,
+ "epoch": 0,
+ "global_step": 524320,
+ "phase": "wikipedia",
+ "phase_step": 524320,
+ "pos": [
+ 1203647118,
+ 0
+ ]
+ },
+ "state": "ab0f669782c60bf45255e4822fee5fe5425a24b614d10dc0821323ca7325853c",
+ "model": "3c5459d2bdcdb86d05168a8a78370aa7f772cb6f48ab11e6949164ec6d30fdc0",
+ "previous": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5",
+ "time": 1792476512.00237,
+ "entryHash": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b"
+ },
+ {
+ "index": 30,
+ "kind": "progress",
+ "control": {
+ "batches": "304b2d3afe5a67a5ef902cb8334a55ee6f89877d474b438fb9c94e507814dece",
+ "cursor": 6901668826,
+ "epoch": 0,
+ "global_step": 542400,
+ "phase": "wikipedia",
+ "phase_step": 542400,
+ "pos": [
+ 1246875101,
+ 0
+ ]
+ },
+ "state": "baf0f2694f6f7561b6e427c0181978541c19263849163984131f51dad72b6c38",
+ "model": "bdfa54d7eb2938c8fe3258528e5cb84287c54f889471eb60909e7d8c6aca8061",
+ "previous": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b",
+ "time": 1792477651.6187513,
+ "entryHash": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39"
+ },
+ {
+ "index": 31,
+ "kind": "base",
+ "control": {
+ "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875",
+ "cursor": 7118121139,
+ "epoch": 0,
+ "global_step": 560177,
+ "phase": "wikipedia",
+ "phase_step": 560177,
+ "pos": [
+ 1293950757,
+ 0
+ ]
+ },
+ "state": "13d6ad64b2465d42653f250bba0463468c0c81b7980ebc9d97e3b0f95c713bf1",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "previous": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39",
+ "time": 1792478775.2381847,
+ "entryHash": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a"
+ },
+ {
+ "index": 32,
+ "kind": "transition",
+ "control": {
+ "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875",
+ "cursor": 0,
+ "epoch": 0,
+ "global_step": 560177,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "8987fdd57ba91b044c23bba48cf41b132aa6ec949c4af650ba3180483476941d",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "previous": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a",
+ "time": 1792478776.1264164,
+ "entryHash": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8"
+ },
+ {
+ "index": 33,
+ "kind": "epoch",
+ "control": {
+ "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67",
+ "cursor": 1278137,
+ "epoch": 0,
+ "global_step": 560324,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "previous": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8",
+ "time": 1792478785.6187253,
+ "entryHash": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035"
+ },
+ {
+ "index": 34,
+ "kind": "transition",
+ "control": {
+ "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67",
+ "cursor": 0,
+ "epoch": 1,
+ "global_step": 560324,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "previous": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035",
+ "time": 1792478786.6568494,
+ "entryHash": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f"
+ },
+ {
+ "index": 35,
+ "kind": "epoch",
+ "control": {
+ "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023",
+ "cursor": 1278137,
+ "epoch": 1,
+ "global_step": 560471,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "previous": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f",
+ "time": 1792478796.331579,
+ "entryHash": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042"
+ },
+ {
+ "index": 36,
+ "kind": "transition",
+ "control": {
+ "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023",
+ "cursor": 0,
+ "epoch": 2,
+ "global_step": 560471,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "previous": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042",
+ "time": 1792478797.354915,
+ "entryHash": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb"
+ }
+ ],
+ "verifications": {
+ "totalChecks": 46,
+ "uniqueSegments": 37,
+ "projectChecksCount": 46,
+ "independentChecksCount": 0,
+ "coverage": [
+ {
+ "segment": 0,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 0
+ }
+ ]
+ },
+ {
+ "segment": 1,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 1
+ }
+ ]
+ },
+ {
+ "segment": 2,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 2
+ }
+ ]
+ },
+ {
+ "segment": 3,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 3
+ }
+ ]
+ },
+ {
+ "segment": 4,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 4
+ }
+ ]
+ },
+ {
+ "segment": 5,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0 fast loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ }
+ ]
+ },
+ {
+ "segment": 6,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 6
+ }
+ ]
+ },
+ {
+ "segment": 7,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 7
+ }
+ ]
+ },
+ {
+ "segment": 8,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 8
+ }
+ ]
+ },
+ {
+ "segment": 9,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 9
+ }
+ ]
+ },
+ {
+ "segment": 10,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 10
+ }
+ ]
+ },
+ {
+ "segment": 11,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 11
+ }
+ ]
+ },
+ {
+ "segment": 12,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 12
+ }
+ ]
+ },
+ {
+ "segment": 13,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 13
+ }
+ ]
+ },
+ {
+ "segment": 14,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 14
+ }
+ ]
+ },
+ {
+ "segment": 15,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 15
+ }
+ ]
+ },
+ {
+ "segment": 16,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 16
+ }
+ ]
+ },
+ {
+ "segment": 17,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 17
+ }
+ ]
+ },
+ {
+ "segment": 18,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 18
+ }
+ ]
+ },
+ {
+ "segment": 19,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 19
+ }
+ ]
+ },
+ {
+ "segment": 20,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 20
+ }
+ ]
+ },
+ {
+ "segment": 21,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 21
+ },
+ {
+ "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
+ }
+ ]
+ },
+ {
+ "segment": 22,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ }
+ ]
+ },
+ {
+ "segment": 23,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 23
+ }
+ ]
+ },
+ {
+ "segment": 24,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 24
+ }
+ ]
+ },
+ {
+ "segment": 25,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 25
+ }
+ ]
+ },
+ {
+ "segment": 26,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 26
+ }
+ ]
+ },
+ {
+ "segment": 27,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 27
+ }
+ ]
+ },
+ {
+ "segment": 28,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 28
+ }
+ ]
+ },
+ {
+ "segment": 29,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 29
+ }
+ ]
+ },
+ {
+ "segment": 30,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 30
+ }
+ ]
+ },
+ {
+ "segment": 31,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ }
+ ]
+ },
+ {
+ "segment": 32,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ }
+ ]
+ },
+ {
+ "segment": 33,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ }
+ ]
+ },
+ {
+ "segment": 34,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ }
+ ]
+ },
+ {
+ "segment": 35,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ }
+ ]
+ },
+ {
+ "segment": 36,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ }
+ ]
+ }
+ ],
+ "rawChecks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 0
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 1
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 2
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 3
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 4
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 6
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 7
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 8
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 9
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 10
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 11
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 12
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 13
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 14
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 15
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 16
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 17
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 18
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 19
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 20
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 21
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 23
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 24
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 25
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 26
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 27
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 28
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 29
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 30
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0 fast loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "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
+ }
+ ]
+ },
+ "hardwareMap": [
+ {
+ "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"
+ },
+ {
+ "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"
+ },
+ {
+ "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"
+ },
+ {
+ "segment": 32,
+ "result": "MISMATCH",
+ "hardware": "x86_64 CPU",
+ "driver": "none",
+ "software": "torch 2.14.0+cpu",
+ "note": "different hardware and software"
+ },
+ {
+ "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"
+ }
+ ],
+ "anchor": {
+ "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",
+ "timestamp": "2026-10-20 14:38:43 UTC",
+ "authorities": [
+ "DigiCert",
+ "FreeTSA (RFC 3161)"
+ ]
+ },
+ "exclusion": {
+ "removedArticle": "3I/ATLAS",
+ "originalRemovedLoss": 3.3604,
+ "forkRemovedLoss": 3.386,
+ "removedLossDelta": 0.0256,
+ "originalControlLossMean": 2.871,
+ "forkControlLossMean": 2.8712,
+ "controlLossDelta": 0.0002,
+ "controlArticlesCount": 50,
+ "evidencePath": "release/unlearning-3i-atlas/"
+ },
+ "releaseHashes": {
+ "base-model.pt": "976c62e8b28db786c38dc2ff969339603d0ee917d830f2815d9e858d2a3c0ce3",
+ "chain.jsonl": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "ckpt-00000.pt": "3dccf4a6d258ff5e150ee1ed590f4baff099e5a368d580e610ecf238b4ba8c22",
+ "ckpt-00001.pt": "ba524fd9691c4a849d1a3dac177af426df36d8e04d9c75fba2dbf036a4b515f9",
+ "ckpt-00002.pt": "627106799e630a9297770b31b0e1f66b1418215eea50c1cd3f3a23c48e138a33",
+ "ckpt-00003.pt": "0b64c3f0208d636b19bdf5970810c27cb2ceab33f18153915d64f6493201bc10",
+ "ckpt-00004.pt": "68f07c741473f7ad0c2c61d52dc25c4d8a9c441382d348f9c1a97d215bba452e",
+ "ckpt-00005.pt": "29cdefeb28098ba4572869655b58c9dd2e771edc3717f0112d700477b74defb8",
+ "ckpt-00006.pt": "3e861cd5457c1a1566c8ebcee2a712feca2f3e5603ad46436d393aca5cbb5999",
+ "ckpt-00007.pt": "400734c784b59c9363fdbdd745f7f0f6d70c1be09d2c747976bc2b4fae01b64b",
+ "ckpt-00008.pt": "fe5352356351e4d9e4b0abd59f279c7a2ed98888177fbb773fd1f1983fefe83f",
+ "ckpt-00009.pt": "41819daf70a409e200f5189ab45ae96293716794733ad534e4843ac3f8b1982e",
+ "ckpt-00010.pt": "75cd5863903d9f595e2d50cacea3ec0530f41c154d4ec8817f41376b6f222e3f",
+ "ckpt-00011.pt": "46ece4b519e8624a2b41856b1ecfa9a5daf4994616a9bdd8d941625cb09a32ed",
+ "ckpt-00012.pt": "8b0e19692ccc6c6e6e0eb745633ae2dd2c4e86d0ca84b8ea1c7f1f81a888b892",
+ "ckpt-00013.pt": "3ac79c55fe528bcc62bd7a7a047e2b2a19e2d2e494c85e26301b0fc79f345aee",
+ "ckpt-00014.pt": "ad933ae52b14ff5de72624c5dc7af9b3e5464155b9c3ed84bd43bd5be4f737c3",
+ "ckpt-00015.pt": "2cfddc6c26fb7e8dc99c94b6fb39007a4937b67e1c8d852f2561d990e857cb62",
+ "ckpt-00016.pt": "3729909ae0f85b79377956ad8defdaaeceac0cd000a1c47e582f38685f4158d6",
+ "ckpt-00017.pt": "9f8537d432d78b254dcba86e7bd987246d928bbc837950ffe2536ba989747c41",
+ "ckpt-00018.pt": "a09df5692aac7e42a0430fd225c75937bf75c85a9dfb77b899b4cb956a8c51d1",
+ "ckpt-00019.pt": "ef18f34f8ac17a2581193ffc681a927f655bdadce4c6ca2de0a095d72094bb24",
+ "ckpt-00020.pt": "6bda17b7f79347cc57cb1325215a3a68f9f2357ee5b97f2c88e353189244fcdf",
+ "ckpt-00021.pt": "7df62e3801530777a4491bcecb0199a2b5628a9de61da30f5f6513c74c028095",
+ "ckpt-00022.pt": "23d9271d4f4c49e8e04a13f498ed0a89d57c3f80705044c2c8fe10eecc895896",
+ "ckpt-00023.pt": "2b68d53231a0d3a639312ed45eeb2afef3720f93824819843dd2c9fb68f2fc4c",
+ "ckpt-00024.pt": "8a06f96345a0ff23933d6b946a4fc88ad63a6b43a618a91a1639267cf1c0e23b",
+ "ckpt-00025.pt": "7bed06bf3566e18595a190bc1418fe5735689a2c47d280d857c0a5f68ba73a7f",
+ "ckpt-00026.pt": "31e21be4135f53a912312fae5f26d9b2eefc344171b8935e295c655f49c3b701",
+ "ckpt-00027.pt": "2efcee93267b438152c35cfc1975fd0d8d2dcec804b2713fcc11bdd8602752cf",
+ "ckpt-00028.pt": "671cf6928fc370a464fade45cf5565a65c019c9888b6c9d8962230364cc4c5b4",
+ "ckpt-00029.pt": "082195ad124ad61287e94f224c6672b2175b1c1c35f06baee2b56adbc12f92da",
+ "ckpt-00030.pt": "febe492c2c87335b078c910894172bcf8f572b853d807b8f24da99e9e0127979",
+ "ckpt-00031.pt": "c687187b7daaa97d0fd8c96df302313e051febc29d64b5ef4d5b5775d684244b",
+ "ckpt-00032.pt": "b49bfa976a6aa59fc54b9511fccc4745a4493b81cc58a3ff310ffecf7a92f45e",
+ "ckpt-00033.pt": "8fa1f26811ef37b235c968c4204044983895b217e00db731d57f3a2cecda179e",
+ "ckpt-00034.pt": "5fe1e5af0d612046c7617d079181090e3ac0898411fe39900e05346c90b29aeb",
+ "ckpt-00035.pt": "4766216588d357cdbe5bdd35e4b9534317d59f8b1273b5b722a390e748ae3beb",
+ "ckpt-00036.pt": "1ca4bd559c51e9d83ba2ea84a85e518e0309d0844d964535868339a16b66e239",
+ "ckpt-00037.pt": "88947898dab959fd82f954f81681103bac7f6b770f4bcc13d6eac29ca1795ecb",
+ "conversation-model.pt": "149cfae13c4523a1010c52161e13babf76c9ddc01f34fa1a8b580677b733a64c",
+ "recipe.json": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d",
+ "ovl-23m-chat.gguf": "541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de",
+ "Modelfile": "df4dacfc3191e56b1dc1195764ea66ca1a7695856be04ecec17d8dde4c66fc8b"
+ }
+}
\ No newline at end of file
diff --git a/frontend/tests/fixtures/invalid-checker.json b/frontend/tests/fixtures/invalid-checker.json
new file mode 100644
index 00000000..82e679cf
--- /dev/null
+++ b/frontend/tests/fixtures/invalid-checker.json
@@ -0,0 +1,1953 @@
+{
+ "schemaVersion": 1,
+ "dataset": "AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence",
+ "revision": "96dc282a",
+ "fetchedAt": "2026-10-30T15:32:03.178Z",
+ "sourceHashes": {
+ "release/simple-run/chain.jsonl": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "release/simple-run/verifications.jsonl": "ec73fe8fdce56eb075783c37383dbb5afaa23fac168fbd6619c01240de41b770",
+ "release/simple-run/hardware-map.jsonl": "5116f365398795a5e79513a3709d48995cc72a059ae9c69c653e324e723884e4",
+ "release/simple-run/release-hashes.txt": "479ce030fa8022f0f92262849f88dfde4c9cf2a0748b8830357f3aa277080e8d",
+ "release/simple-run/anchor.json": "2adaea4cae25439199ec2396c0e6e94d1d14188c070f217ed7e360ce10c1c18d",
+ "release/simple-run/README.md": "d3a4a5b221d9d1bd9318e8e414b44adc75f66155d03cd356b489165243e932e9",
+ "release/unlearning-3i-atlas/loo-results.json": "c926c965d1e040ab23c591c9dcdd007e5ece75a57ecfa100fd69515d190ead69",
+ "prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68"
+ },
+ "preparation": {
+ "articles": 7232582,
+ "wikipediaTargets": 7118121139,
+ "conversations": 3481,
+ "trainingLoopLines": "~630 lines",
+ "preparedDataId": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68"
+ },
+ "chain": [
+ {
+ "index": 0,
+ "kind": "initial",
+ "control": {
+ "batches": "10ea13010a13668c8bf9e2884e16bdbd16f8933d9bf4d09eda0c47459133eddb",
+ "cursor": 0,
+ "epoch": 0,
+ "global_step": 0,
+ "phase": "wikipedia",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "64041a4736bd76b64b149c2a784950a312fb19ed641c7eb87e7300c171d002fc",
+ "model": "2b167bcb407f94ac3f1dead8f316ea180823a1cb40489b8a1ff974bf2bcd959d",
+ "previous": null,
+ "time": 1792422250.861772,
+ "entryHash": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2"
+ },
+ {
+ "index": 1,
+ "kind": "progress",
+ "control": {
+ "batches": "e3f19a5269c4824fb1615d433b678fa54a6fc23ea99fd82c3e83f3f400f66809",
+ "cursor": 274561003,
+ "epoch": 0,
+ "global_step": 18080,
+ "phase": "wikipedia",
+ "phase_step": 18080,
+ "pos": [
+ 14363834,
+ 3072
+ ]
+ },
+ "state": "ef5090325fcf3c392503406ac2f7e6bd99118d267c38fbe4b624df41b48eca8f",
+ "model": "c32f02fac9e87d0c4279aa39a0fa06b5cc06d5b141d5ff29503cb8431c4ca180",
+ "previous": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2",
+ "time": 1792424215.6430938,
+ "entryHash": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f"
+ },
+ {
+ "index": 2,
+ "kind": "progress",
+ "control": {
+ "batches": "d5b199348b8d97e5a30ee2ea1a9bc465fd5dc0220a1a4297b4fa0716abdc84dc",
+ "cursor": 547313827,
+ "epoch": 0,
+ "global_step": 36160,
+ "phase": "wikipedia",
+ "phase_step": 36160,
+ "pos": [
+ 30161308,
+ 6656
+ ]
+ },
+ "state": "94e253d50adff230867baf0f9b2fbb247399b598511dd238cca10838439a228c",
+ "model": "29c055caaaefce12e962bb5905f79640bf7bcfc2dfe09070704f50a35e954868",
+ "previous": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f",
+ "time": 1792426181.1370955,
+ "entryHash": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789"
+ },
+ {
+ "index": 3,
+ "kind": "progress",
+ "control": {
+ "batches": "f520d10b29d43cbbe5556d887bd7e622a26ed3003eaa8677366993ed6a0965df",
+ "cursor": 812314162,
+ "epoch": 0,
+ "global_step": 54240,
+ "phase": "wikipedia",
+ "phase_step": 54240,
+ "pos": [
+ 50875269,
+ 0
+ ]
+ },
+ "state": "63f2f1cf69a97b295ef4924af836583cc5942d4cfdde34a0d68da658e9b56875",
+ "model": "bc0210cc1ce7eb55786921b9be9142224551daaa14a5a94b5851415d9954513f",
+ "previous": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789",
+ "time": 1792428164.4587104,
+ "entryHash": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37"
+ },
+ {
+ "index": 4,
+ "kind": "progress",
+ "control": {
+ "batches": "9b1c36b8b217b225ab637476b5f96e9d13723e8ff2f49474a1aff9fe4b6c6836",
+ "cursor": 1071169817,
+ "epoch": 0,
+ "global_step": 72320,
+ "phase": "wikipedia",
+ "phase_step": 72320,
+ "pos": [
+ 75821490,
+ 512
+ ]
+ },
+ "state": "38544968f3a1f342c17ee65afed30915acacf2131314c3254cfb1d3367acf0f6",
+ "model": "f6c1733d73e556de085fd9cb99f4137296f9ad7835fc3c88c9f8588cfeca0165",
+ "previous": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37",
+ "time": 1792430142.4307606,
+ "entryHash": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6"
+ },
+ {
+ "index": 5,
+ "kind": "progress",
+ "control": {
+ "batches": "0feb0c99169621a584609ce24a7ba1710f4dd1127205dae3911df09e1ab75698",
+ "cursor": 1326339931,
+ "epoch": 0,
+ "global_step": 90400,
+ "phase": "wikipedia",
+ "phase_step": 90400,
+ "pos": [
+ 103716532,
+ 512
+ ]
+ },
+ "state": "0f66051bfcf2b8512da505733cf9814527aba0412b28109071d9ebe1e7949165",
+ "model": "521f1f5f34c6a0992a15e539f1eab5f5590f5fdca15fdf16c60842c1d8612754",
+ "previous": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6",
+ "time": 1792432107.6645238,
+ "entryHash": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa"
+ },
+ {
+ "index": 6,
+ "kind": "progress",
+ "control": {
+ "batches": "dd5c823c56a28362db599fa09567143434f9f343784400622105200695fca78d",
+ "cursor": 1575735740,
+ "epoch": 0,
+ "global_step": 108480,
+ "phase": "wikipedia",
+ "phase_step": 108480,
+ "pos": [
+ 135269108,
+ 0
+ ]
+ },
+ "state": "d3f93a22ceb28a8640734ceca70e0217cf991b696807ecb6fdd31d318ad30aa8",
+ "model": "655aa1b3b7f5a34c9f0a2eba172ddbfef233acb3f121373e351b6d2cd982475f",
+ "previous": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa",
+ "time": 1792434050.5597794,
+ "entryHash": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a"
+ },
+ {
+ "index": 7,
+ "kind": "progress",
+ "control": {
+ "batches": "496333b0221dbc6a2edeeb9ea5318d3b33069b8f91c98d489cf742f70bab1d43",
+ "cursor": 1821662484,
+ "epoch": 0,
+ "global_step": 126560,
+ "phase": "wikipedia",
+ "phase_step": 126560,
+ "pos": [
+ 169162007,
+ 512
+ ]
+ },
+ "state": "228e635e6ee63fca5189f1af685f15c9d52a27527f300e7dac7a5ade82688e11",
+ "model": "ab677b66cfcc2d0652d37b5cc354e5d6980716b273cc99b78ae53f63e581ba14",
+ "previous": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a",
+ "time": 1792435994.2637668,
+ "entryHash": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc"
+ },
+ {
+ "index": 8,
+ "kind": "progress",
+ "control": {
+ "batches": "a009f3186720dd943c7c0e3c597706610370b795c3fd87b65df4ce8cdc54822d",
+ "cursor": 2062246462,
+ "epoch": 0,
+ "global_step": 144640,
+ "phase": "wikipedia",
+ "phase_step": 144640,
+ "pos": [
+ 206335253,
+ 0
+ ]
+ },
+ "state": "6cb7cf58b036f71d793b7940617d2756e4d24e906a8a4fdb6ec58ee56031ad53",
+ "model": "4419b42c7902c6f650e634055a1de54ca172e2a0a26c5bbad58ee8516cf4dfc6",
+ "previous": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc",
+ "time": 1792437967.4633026,
+ "entryHash": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae"
+ },
+ {
+ "index": 9,
+ "kind": "progress",
+ "control": {
+ "batches": "9f883e76562c687ddae51575bda5430cc91dbc45e57e7311d3646340a420a020",
+ "cursor": 2299429619,
+ "epoch": 0,
+ "global_step": 162720,
+ "phase": "wikipedia",
+ "phase_step": 162720,
+ "pos": [
+ 245609368,
+ 0
+ ]
+ },
+ "state": "0947a1b7cb257922ed1bb71e36059bdde1fa1c76509255c1af8cb3167bff72db",
+ "model": "967ff641117b62e0f4bbb19fda16cfb7a1b6c20adc35295ff0738a0664953048",
+ "previous": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae",
+ "time": 1792439938.9320748,
+ "entryHash": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43"
+ },
+ {
+ "index": 10,
+ "kind": "progress",
+ "control": {
+ "batches": "14ffdd92074c743ba35ff842d9d2956a29ff1ecf6b93820fc1bedb2161e2f20f",
+ "cursor": 2534896708,
+ "epoch": 0,
+ "global_step": 180800,
+ "phase": "wikipedia",
+ "phase_step": 180800,
+ "pos": [
+ 285958813,
+ 5632
+ ]
+ },
+ "state": "e162c0ef79462cfcc2c88cd336170df12f92f1f6d099920decca178da9dd455a",
+ "model": "cb2fbe49be6ead1201600d45004f411c7ed3ba0d532ebe2417b1a43ba40d9889",
+ "previous": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43",
+ "time": 1792441925.2640333,
+ "entryHash": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b"
+ },
+ {
+ "index": 11,
+ "kind": "progress",
+ "control": {
+ "batches": "7321c9e7f9b890c6b657525ffc10389c70e730b37f0ccaa0281264b7aaeec2ca",
+ "cursor": 2758953574,
+ "epoch": 0,
+ "global_step": 198880,
+ "phase": "wikipedia",
+ "phase_step": 198880,
+ "pos": [
+ 331465519,
+ 0
+ ]
+ },
+ "state": "be21dd4e7d988157822d75f6600146be013afa826076b49b45b3874e5a2bd1ca",
+ "model": "21e5ccc4f7a7b4c8b311febbdcb0cd037a2efff64c715935853fa663b61e5aeb",
+ "previous": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b",
+ "time": 1792445221.8958924,
+ "entryHash": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18"
+ },
+ {
+ "index": 12,
+ "kind": "progress",
+ "control": {
+ "batches": "0d86e2942f9d84483cd0e3cd5168d81cf418e915c04e25f94c03d3ad703c648d",
+ "cursor": 2977003841,
+ "epoch": 0,
+ "global_step": 216960,
+ "phase": "wikipedia",
+ "phase_step": 216960,
+ "pos": [
+ 379051570,
+ 512
+ ]
+ },
+ "state": "c9d571c059311fbeb20f46d33a56497113b1f3705b75939ef57e61cc98978ca6",
+ "model": "ee22252416c44a8812aab40b456c60351eaf714679495ef7c39a81c3d24db503",
+ "previous": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18",
+ "time": 1792447305.2481282,
+ "entryHash": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165"
+ },
+ {
+ "index": 13,
+ "kind": "progress",
+ "control": {
+ "batches": "bfe949e391619c70945f4ad5af5f73c00f8d44562f44733457ad865081612290",
+ "cursor": 3192270243,
+ "epoch": 0,
+ "global_step": 235040,
+ "phase": "wikipedia",
+ "phase_step": 235040,
+ "pos": [
+ 427598539,
+ 0
+ ]
+ },
+ "state": "2733d7ef9aaacf20880e2196c819305f58ad0cc03494704fbc9f5e03a95931b2",
+ "model": "978af11d622fb0e48dd842f5aa27e9992c267de2a91944b1b3b160aa89fa7675",
+ "previous": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165",
+ "time": 1792449363.6749403,
+ "entryHash": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f"
+ },
+ {
+ "index": 14,
+ "kind": "progress",
+ "control": {
+ "batches": "7eea41e27f71c52d58558b90de9ef7cd26ac9123366132bcbc1e71f4de08acf4",
+ "cursor": 3407720912,
+ "epoch": 0,
+ "global_step": 253120,
+ "phase": "wikipedia",
+ "phase_step": 253120,
+ "pos": [
+ 476680277,
+ 0
+ ]
+ },
+ "state": "145353afb1e2ebc2b5f9831fed74e5631b42a11342aab9a0b9febe796446c446",
+ "model": "613728906a531097849fcaa83d13ccb54b334d805aeaef8abe127ef2b7b70e1d",
+ "previous": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f",
+ "time": 1792451498.6016607,
+ "entryHash": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa"
+ },
+ {
+ "index": 15,
+ "kind": "progress",
+ "control": {
+ "batches": "c294ad7b42d0f2e970f3c757f339b24f6fbdc2982e9a91078a071b121b9325a1",
+ "cursor": 3626056290,
+ "epoch": 0,
+ "global_step": 271200,
+ "phase": "wikipedia",
+ "phase_step": 271200,
+ "pos": [
+ 524689002,
+ 0
+ ]
+ },
+ "state": "fa961c767d2e293f12adcd13a3410d345e3bb5952395725963eb2f6e5c228d9e",
+ "model": "0f122b6387647c6844f6668edc95b2b96efd34885985e80c25a1eb424c7ffa2c",
+ "previous": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa",
+ "time": 1792453682.104504,
+ "entryHash": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722"
+ },
+ {
+ "index": 16,
+ "kind": "progress",
+ "control": {
+ "batches": "4d0765884b5a4f4af81e17f0914a728e631c665fa74ec82be39e458f3f4f40c1",
+ "cursor": 3842372860,
+ "epoch": 0,
+ "global_step": 289280,
+ "phase": "wikipedia",
+ "phase_step": 289280,
+ "pos": [
+ 573811026,
+ 2048
+ ]
+ },
+ "state": "82d7f95aaed27c4ac54ec6b8de9567a84d818a875673030c4ae0d2d39a860754",
+ "model": "9a1a2f4ad99c6aac613f620400dc405a8967906e435079c0d8d29622831044fa",
+ "previous": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722",
+ "time": 1792455885.299576,
+ "entryHash": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f"
+ },
+ {
+ "index": 17,
+ "kind": "progress",
+ "control": {
+ "batches": "a219629293cfc4e69c74916379ba790f96b8a5425bd9fb7f4d9e481965ec9374",
+ "cursor": 4065481916,
+ "epoch": 0,
+ "global_step": 307360,
+ "phase": "wikipedia",
+ "phase_step": 307360,
+ "pos": [
+ 619889558,
+ 18944
+ ]
+ },
+ "state": "1082ced41232e82ff83506f0c20d887d0ddc3dc7458bc3ace5361a87485e5b60",
+ "model": "1e77516fc3d4c149c17b5e039ba9a886f520769df7512002fe89a9e5148f7d6e",
+ "previous": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f",
+ "time": 1792458112.5074773,
+ "entryHash": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7"
+ },
+ {
+ "index": 18,
+ "kind": "progress",
+ "control": {
+ "batches": "fbdade37939ffab2c5df52a9db88c8bac93a5501861522a30f1a50ebcafb4b3e",
+ "cursor": 4280170919,
+ "epoch": 0,
+ "global_step": 325440,
+ "phase": "wikipedia",
+ "phase_step": 325440,
+ "pos": [
+ 669406302,
+ 0
+ ]
+ },
+ "state": "0d4932793bd2279c0a17b3ca736159f89d48898d8a42113d15c7590dfdd85c26",
+ "model": "4d79bcc6ee8060a9c28a5802c142f972665bafae70901176c9a964bc884f1dee",
+ "previous": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7",
+ "time": 1792460358.5080163,
+ "entryHash": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89"
+ },
+ {
+ "index": 19,
+ "kind": "progress",
+ "control": {
+ "batches": "32161f48812917ee1bed7a4367df261934308045464246622f47dba2ab129f2a",
+ "cursor": 4492270493,
+ "epoch": 0,
+ "global_step": 343520,
+ "phase": "wikipedia",
+ "phase_step": 343520,
+ "pos": [
+ 719769225,
+ 2048
+ ]
+ },
+ "state": "cafd56b605b39449655b55534cd4e33616de0d40e6c3434fcd1a54c941e63191",
+ "model": "9e597fcc4fc74828e30605677e3696a53b77a6976fecdc4f0e06b378e6721ee9",
+ "previous": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89",
+ "time": 1792462598.3975008,
+ "entryHash": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f"
+ },
+ {
+ "index": 20,
+ "kind": "progress",
+ "control": {
+ "batches": "30c019ac1c173f6d688cdd4bd01e7ceaf9ed1376251e69d87cb9643b4386116b",
+ "cursor": 4705349595,
+ "epoch": 0,
+ "global_step": 361600,
+ "phase": "wikipedia",
+ "phase_step": 361600,
+ "pos": [
+ 769153707,
+ 4608
+ ]
+ },
+ "state": "708b48121052bf9bc68bbd67e8613230dd713b9569610a4e66838fe45f35299a",
+ "model": "f98ab99a90c7734a3f4cf2d60216ed8b1bdc657541ec3374c6f035b0bd42a307",
+ "previous": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f",
+ "time": 1792463768.5816014,
+ "entryHash": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03"
+ },
+ {
+ "index": 21,
+ "kind": "progress",
+ "control": {
+ "batches": "09506b60c4342ec5873bba53f2e993f0a46e1b726fc3449ce690e5e4eb43927c",
+ "cursor": 4919188008,
+ "epoch": 0,
+ "global_step": 379680,
+ "phase": "wikipedia",
+ "phase_step": 379680,
+ "pos": [
+ 818886901,
+ 0
+ ]
+ },
+ "state": "eb31ec48c4ce9373035fe1229a93190fcfec9060d1bc8520f62ed3dfcab752fa",
+ "model": "b89d3b185a1fcf21bcc5ef432a26eafc9643eb62b9aa3d8eeb624cbfceeea340",
+ "previous": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03",
+ "time": 1792465514.4536183,
+ "entryHash": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d"
+ },
+ {
+ "index": 22,
+ "kind": "progress",
+ "control": {
+ "batches": "27f95fcd8bc5e1b25cea97a17fd58ce6f6771b5b15565014616d4519ab8c8184",
+ "cursor": 5137669818,
+ "epoch": 0,
+ "global_step": 397760,
+ "phase": "wikipedia",
+ "phase_step": 397760,
+ "pos": [
+ 867774445,
+ 512
+ ]
+ },
+ "state": "ee97359b8f9928977515e383d98a796d442444b5a07de5c9ec1158d372cc0e49",
+ "model": "1428e4c6cddc484d305881220b68eb5e04eb851632e1ae7d4f61725e0b24708b",
+ "previous": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d",
+ "time": 1792468481.591845,
+ "entryHash": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0"
+ },
+ {
+ "index": 23,
+ "kind": "progress",
+ "control": {
+ "batches": "2ac5c320056a9766eaf2f910194309a2e1e3254958d1fe2e4afa92805ee04b28",
+ "cursor": 5354659564,
+ "epoch": 0,
+ "global_step": 415840,
+ "phase": "wikipedia",
+ "phase_step": 415840,
+ "pos": [
+ 917385337,
+ 0
+ ]
+ },
+ "state": "296c1763d3421f6991f4f841f4143166bf0910000e5b00673383a4589859483f",
+ "model": "8948b0defe4c934602354d44e72ceb0b34c46d87bb7a67832fa50ea581b57d16",
+ "previous": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0",
+ "time": 1792469631.0069373,
+ "entryHash": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99"
+ },
+ {
+ "index": 24,
+ "kind": "progress",
+ "control": {
+ "batches": "3fae190c7c836188101a7a77d6046446431892e109590436e4c94a3ed1da8c13",
+ "cursor": 5571989843,
+ "epoch": 0,
+ "global_step": 433920,
+ "phase": "wikipedia",
+ "phase_step": 433920,
+ "pos": [
+ 966632574,
+ 8192
+ ]
+ },
+ "state": "6413ef4ca2bf9d47a89302d88662069fde930d732c4df7d0892f30ed64d3756d",
+ "model": "c553304d081e5817ba0e042bcdef7f1cf9642a290b006edab98778abd18eeedc",
+ "previous": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99",
+ "time": 1792470779.9569445,
+ "entryHash": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a"
+ },
+ {
+ "index": 25,
+ "kind": "progress",
+ "control": {
+ "batches": "b77680f3b1febcf15d5adac2f244b845ea1ca7ae5837e9ce9e57a9b9661033c6",
+ "cursor": 5786932809,
+ "epoch": 0,
+ "global_step": 452000,
+ "phase": "wikipedia",
+ "phase_step": 452000,
+ "pos": [
+ 1015978804,
+ 2048
+ ]
+ },
+ "state": "245211135b131b6c5e1940458575033082b4b473fa0033b55816d889c82d656b",
+ "model": "1f1becfa5470bac9a31962462d4d85647598dc8f75277e2f9c6efe5bc59ada97",
+ "previous": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a",
+ "time": 1792471931.509705,
+ "entryHash": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0"
+ },
+ {
+ "index": 26,
+ "kind": "progress",
+ "control": {
+ "batches": "44eaf0d468c5578cc89e3999530132727e41ac47cbfcc8fcf80a7621b527cda0",
+ "cursor": 6003090585,
+ "epoch": 0,
+ "global_step": 470080,
+ "phase": "wikipedia",
+ "phase_step": 470080,
+ "pos": [
+ 1065027050,
+ 0
+ ]
+ },
+ "state": "7b1ab9b324ac43d99f738ee00e3ef2b514e8dcc82313863c1d8f6e871d42bbb8",
+ "model": "6a59289ec3928857e0beacc7858e190c0756c72f2cdf48896578bb75720fa72a",
+ "previous": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0",
+ "time": 1792473082.0379794,
+ "entryHash": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e"
+ },
+ {
+ "index": 27,
+ "kind": "progress",
+ "control": {
+ "batches": "58cf98d2ec42837434cc698720602c1ed7a427f1b7075de7b56e1957e42d7b7b",
+ "cursor": 6219792471,
+ "epoch": 0,
+ "global_step": 488160,
+ "phase": "wikipedia",
+ "phase_step": 488160,
+ "pos": [
+ 1113864691,
+ 1024
+ ]
+ },
+ "state": "0ec654850f2c1288c7850e9e732b52187dcc5f73fffe0f3bc211143e32097e7a",
+ "model": "5329233dbd65f90b4c368e40c725c59496c03266053f934c4be9c4ef73e3ec73",
+ "previous": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e",
+ "time": 1792474229.018975,
+ "entryHash": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c"
+ },
+ {
+ "index": 28,
+ "kind": "progress",
+ "control": {
+ "batches": "8e7e2738dac57947ab3894def88fc8bfb84e0b8c55095fcd33d66e2699dabab5",
+ "cursor": 6444391263,
+ "epoch": 0,
+ "global_step": 506240,
+ "phase": "wikipedia",
+ "phase_step": 506240,
+ "pos": [
+ 1159432427,
+ 0
+ ]
+ },
+ "state": "e5891f8db717f770246c4255fa6598ba280922c428e9e1e6d814f5d96549cab1",
+ "model": "d6e1eaab6061fc051ae6de60bb6c95d99d1b98c6bcddfdcbbd593208b7d8a303",
+ "previous": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c",
+ "time": 1792475372.9946525,
+ "entryHash": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5"
+ },
+ {
+ "index": 29,
+ "kind": "progress",
+ "control": {
+ "batches": "7b351d64e2a3d2492e668dcfd73d82ce92c0ba04fdd4c3058c95d4e642a6807d",
+ "cursor": 6671911669,
+ "epoch": 0,
+ "global_step": 524320,
+ "phase": "wikipedia",
+ "phase_step": 524320,
+ "pos": [
+ 1203647118,
+ 0
+ ]
+ },
+ "state": "ab0f669782c60bf45255e4822fee5fe5425a24b614d10dc0821323ca7325853c",
+ "model": "3c5459d2bdcdb86d05168a8a78370aa7f772cb6f48ab11e6949164ec6d30fdc0",
+ "previous": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5",
+ "time": 1792476512.00237,
+ "entryHash": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b"
+ },
+ {
+ "index": 30,
+ "kind": "progress",
+ "control": {
+ "batches": "304b2d3afe5a67a5ef902cb8334a55ee6f89877d474b438fb9c94e507814dece",
+ "cursor": 6901668826,
+ "epoch": 0,
+ "global_step": 542400,
+ "phase": "wikipedia",
+ "phase_step": 542400,
+ "pos": [
+ 1246875101,
+ 0
+ ]
+ },
+ "state": "baf0f2694f6f7561b6e427c0181978541c19263849163984131f51dad72b6c38",
+ "model": "bdfa54d7eb2938c8fe3258528e5cb84287c54f889471eb60909e7d8c6aca8061",
+ "previous": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b",
+ "time": 1792477651.6187513,
+ "entryHash": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39"
+ },
+ {
+ "index": 31,
+ "kind": "base",
+ "control": {
+ "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875",
+ "cursor": 7118121139,
+ "epoch": 0,
+ "global_step": 560177,
+ "phase": "wikipedia",
+ "phase_step": 560177,
+ "pos": [
+ 1293950757,
+ 0
+ ]
+ },
+ "state": "13d6ad64b2465d42653f250bba0463468c0c81b7980ebc9d97e3b0f95c713bf1",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "previous": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39",
+ "time": 1792478775.2381847,
+ "entryHash": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a"
+ },
+ {
+ "index": 32,
+ "kind": "transition",
+ "control": {
+ "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875",
+ "cursor": 0,
+ "epoch": 0,
+ "global_step": 560177,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "8987fdd57ba91b044c23bba48cf41b132aa6ec949c4af650ba3180483476941d",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "previous": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a",
+ "time": 1792478776.1264164,
+ "entryHash": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8"
+ },
+ {
+ "index": 33,
+ "kind": "epoch",
+ "control": {
+ "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67",
+ "cursor": 1278137,
+ "epoch": 0,
+ "global_step": 560324,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "previous": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8",
+ "time": 1792478785.6187253,
+ "entryHash": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035"
+ },
+ {
+ "index": 34,
+ "kind": "transition",
+ "control": {
+ "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67",
+ "cursor": 0,
+ "epoch": 1,
+ "global_step": 560324,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "previous": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035",
+ "time": 1792478786.6568494,
+ "entryHash": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f"
+ },
+ {
+ "index": 35,
+ "kind": "epoch",
+ "control": {
+ "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023",
+ "cursor": 1278137,
+ "epoch": 1,
+ "global_step": 560471,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "previous": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f",
+ "time": 1792478796.331579,
+ "entryHash": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042"
+ },
+ {
+ "index": 36,
+ "kind": "transition",
+ "control": {
+ "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023",
+ "cursor": 0,
+ "epoch": 2,
+ "global_step": 560471,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "previous": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042",
+ "time": 1792478797.354915,
+ "entryHash": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb"
+ },
+ {
+ "index": 37,
+ "kind": "final",
+ "control": {
+ "batches": "1fd22db0ab89ab98045f8c4b32ce4e4d55453163390ec9ebd5792dfc38fd5a52",
+ "cursor": 1278137,
+ "epoch": 2,
+ "global_step": 560618,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "934d681c99e5c3e10617e82dbbb0ae0ddd1ad4e32cf45e8e3a6d2ed94b69f200",
+ "model": "ec9a2b31ca524613f791aba00f4f7f31e4a7bf4a8a921e0deb81c1a922d0958b",
+ "previous": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb",
+ "time": 1792478807.0463226,
+ "entryHash": "9edbcaddbb08ed20f3d655ac59d0aa57f6339a702d0fa1d3422856f5d8251a51"
+ }
+ ],
+ "verifications": {
+ "totalChecks": 46,
+ "uniqueSegments": 37,
+ "projectChecksCount": 46,
+ "independentChecksCount": 0,
+ "coverage": [
+ {
+ "segment": 0,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 0
+ }
+ ]
+ },
+ {
+ "segment": 1,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 1
+ }
+ ]
+ },
+ {
+ "segment": 2,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 2
+ }
+ ]
+ },
+ {
+ "segment": 3,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 3
+ }
+ ]
+ },
+ {
+ "segment": 4,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 4
+ }
+ ]
+ },
+ {
+ "segment": 5,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0 fast loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ }
+ ]
+ },
+ {
+ "segment": 6,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 6
+ }
+ ]
+ },
+ {
+ "segment": 7,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 7
+ }
+ ]
+ },
+ {
+ "segment": 8,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 8
+ }
+ ]
+ },
+ {
+ "segment": 9,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 9
+ }
+ ]
+ },
+ {
+ "segment": 10,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 10
+ }
+ ]
+ },
+ {
+ "segment": 11,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 11
+ }
+ ]
+ },
+ {
+ "segment": 12,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 12
+ }
+ ]
+ },
+ {
+ "segment": 13,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 13
+ }
+ ]
+ },
+ {
+ "segment": 14,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 14
+ }
+ ]
+ },
+ {
+ "segment": 15,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 15
+ }
+ ]
+ },
+ {
+ "segment": 16,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 16
+ }
+ ]
+ },
+ {
+ "segment": 17,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 17
+ }
+ ]
+ },
+ {
+ "segment": 18,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 18
+ }
+ ]
+ },
+ {
+ "segment": 19,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 19
+ }
+ ]
+ },
+ {
+ "segment": 20,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 20
+ }
+ ]
+ },
+ {
+ "segment": 21,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 21
+ },
+ {
+ "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
+ }
+ ]
+ },
+ {
+ "segment": 22,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ }
+ ]
+ },
+ {
+ "segment": 23,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 23
+ }
+ ]
+ },
+ {
+ "segment": 24,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 24
+ }
+ ]
+ },
+ {
+ "segment": 25,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 25
+ }
+ ]
+ },
+ {
+ "segment": 26,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 26
+ }
+ ]
+ },
+ {
+ "segment": 27,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 27
+ }
+ ]
+ },
+ {
+ "segment": 28,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 28
+ }
+ ]
+ },
+ {
+ "segment": 29,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 29
+ }
+ ]
+ },
+ {
+ "segment": 30,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 30
+ }
+ ]
+ },
+ {
+ "segment": 31,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ }
+ ]
+ },
+ {
+ "segment": 32,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ }
+ ]
+ },
+ {
+ "segment": 33,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ }
+ ]
+ },
+ {
+ "segment": 34,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ }
+ ]
+ },
+ {
+ "segment": 35,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ }
+ ]
+ },
+ {
+ "segment": 36,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ }
+ ]
+ }
+ ],
+ "rawChecks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 0
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 1
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 2
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 3
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 4
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 6
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 7
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 8
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 9
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 10
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 11
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 12
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 13
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 14
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 15
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 16
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 17
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 18
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 19
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 20
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 21
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 23
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 24
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 25
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 26
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 27
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 28
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 29
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 30
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0 fast loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "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
+ },
+ {
+ "checker": "rogue anonymous checker",
+ "code": "ovl.py",
+ "driver": "595.91.07",
+ "gpu": "RTX 5090",
+ "result": "MATCH",
+ "segment": 1
+ }
+ ]
+ },
+ "hardwareMap": [
+ {
+ "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"
+ },
+ {
+ "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"
+ },
+ {
+ "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"
+ },
+ {
+ "segment": 32,
+ "result": "MISMATCH",
+ "hardware": "x86_64 CPU",
+ "driver": "none",
+ "software": "torch 2.14.0+cpu",
+ "note": "different hardware and software"
+ },
+ {
+ "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"
+ }
+ ],
+ "anchor": {
+ "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",
+ "timestamp": "2026-10-20 14:38:43 UTC",
+ "authorities": [
+ "DigiCert",
+ "FreeTSA (RFC 3161)"
+ ]
+ },
+ "exclusion": {
+ "removedArticle": "3I/ATLAS",
+ "originalRemovedLoss": 3.3604,
+ "forkRemovedLoss": 3.386,
+ "removedLossDelta": 0.0256,
+ "originalControlLossMean": 2.871,
+ "forkControlLossMean": 2.8712,
+ "controlLossDelta": 0.0002,
+ "controlArticlesCount": 50,
+ "evidencePath": "release/unlearning-3i-atlas/"
+ },
+ "releaseHashes": {
+ "base-model.pt": "976c62e8b28db786c38dc2ff969339603d0ee917d830f2815d9e858d2a3c0ce3",
+ "chain.jsonl": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "ckpt-00000.pt": "3dccf4a6d258ff5e150ee1ed590f4baff099e5a368d580e610ecf238b4ba8c22",
+ "ckpt-00001.pt": "ba524fd9691c4a849d1a3dac177af426df36d8e04d9c75fba2dbf036a4b515f9",
+ "ckpt-00002.pt": "627106799e630a9297770b31b0e1f66b1418215eea50c1cd3f3a23c48e138a33",
+ "ckpt-00003.pt": "0b64c3f0208d636b19bdf5970810c27cb2ceab33f18153915d64f6493201bc10",
+ "ckpt-00004.pt": "68f07c741473f7ad0c2c61d52dc25c4d8a9c441382d348f9c1a97d215bba452e",
+ "ckpt-00005.pt": "29cdefeb28098ba4572869655b58c9dd2e771edc3717f0112d700477b74defb8",
+ "ckpt-00006.pt": "3e861cd5457c1a1566c8ebcee2a712feca2f3e5603ad46436d393aca5cbb5999",
+ "ckpt-00007.pt": "400734c784b59c9363fdbdd745f7f0f6d70c1be09d2c747976bc2b4fae01b64b",
+ "ckpt-00008.pt": "fe5352356351e4d9e4b0abd59f279c7a2ed98888177fbb773fd1f1983fefe83f",
+ "ckpt-00009.pt": "41819daf70a409e200f5189ab45ae96293716794733ad534e4843ac3f8b1982e",
+ "ckpt-00010.pt": "75cd5863903d9f595e2d50cacea3ec0530f41c154d4ec8817f41376b6f222e3f",
+ "ckpt-00011.pt": "46ece4b519e8624a2b41856b1ecfa9a5daf4994616a9bdd8d941625cb09a32ed",
+ "ckpt-00012.pt": "8b0e19692ccc6c6e6e0eb745633ae2dd2c4e86d0ca84b8ea1c7f1f81a888b892",
+ "ckpt-00013.pt": "3ac79c55fe528bcc62bd7a7a047e2b2a19e2d2e494c85e26301b0fc79f345aee",
+ "ckpt-00014.pt": "ad933ae52b14ff5de72624c5dc7af9b3e5464155b9c3ed84bd43bd5be4f737c3",
+ "ckpt-00015.pt": "2cfddc6c26fb7e8dc99c94b6fb39007a4937b67e1c8d852f2561d990e857cb62",
+ "ckpt-00016.pt": "3729909ae0f85b79377956ad8defdaaeceac0cd000a1c47e582f38685f4158d6",
+ "ckpt-00017.pt": "9f8537d432d78b254dcba86e7bd987246d928bbc837950ffe2536ba989747c41",
+ "ckpt-00018.pt": "a09df5692aac7e42a0430fd225c75937bf75c85a9dfb77b899b4cb956a8c51d1",
+ "ckpt-00019.pt": "ef18f34f8ac17a2581193ffc681a927f655bdadce4c6ca2de0a095d72094bb24",
+ "ckpt-00020.pt": "6bda17b7f79347cc57cb1325215a3a68f9f2357ee5b97f2c88e353189244fcdf",
+ "ckpt-00021.pt": "7df62e3801530777a4491bcecb0199a2b5628a9de61da30f5f6513c74c028095",
+ "ckpt-00022.pt": "23d9271d4f4c49e8e04a13f498ed0a89d57c3f80705044c2c8fe10eecc895896",
+ "ckpt-00023.pt": "2b68d53231a0d3a639312ed45eeb2afef3720f93824819843dd2c9fb68f2fc4c",
+ "ckpt-00024.pt": "8a06f96345a0ff23933d6b946a4fc88ad63a6b43a618a91a1639267cf1c0e23b",
+ "ckpt-00025.pt": "7bed06bf3566e18595a190bc1418fe5735689a2c47d280d857c0a5f68ba73a7f",
+ "ckpt-00026.pt": "31e21be4135f53a912312fae5f26d9b2eefc344171b8935e295c655f49c3b701",
+ "ckpt-00027.pt": "2efcee93267b438152c35cfc1975fd0d8d2dcec804b2713fcc11bdd8602752cf",
+ "ckpt-00028.pt": "671cf6928fc370a464fade45cf5565a65c019c9888b6c9d8962230364cc4c5b4",
+ "ckpt-00029.pt": "082195ad124ad61287e94f224c6672b2175b1c1c35f06baee2b56adbc12f92da",
+ "ckpt-00030.pt": "febe492c2c87335b078c910894172bcf8f572b853d807b8f24da99e9e0127979",
+ "ckpt-00031.pt": "c687187b7daaa97d0fd8c96df302313e051febc29d64b5ef4d5b5775d684244b",
+ "ckpt-00032.pt": "b49bfa976a6aa59fc54b9511fccc4745a4493b81cc58a3ff310ffecf7a92f45e",
+ "ckpt-00033.pt": "8fa1f26811ef37b235c968c4204044983895b217e00db731d57f3a2cecda179e",
+ "ckpt-00034.pt": "5fe1e5af0d612046c7617d079181090e3ac0898411fe39900e05346c90b29aeb",
+ "ckpt-00035.pt": "4766216588d357cdbe5bdd35e4b9534317d59f8b1273b5b722a390e748ae3beb",
+ "ckpt-00036.pt": "1ca4bd559c51e9d83ba2ea84a85e518e0309d0844d964535868339a16b66e239",
+ "ckpt-00037.pt": "88947898dab959fd82f954f81681103bac7f6b770f4bcc13d6eac29ca1795ecb",
+ "conversation-model.pt": "149cfae13c4523a1010c52161e13babf76c9ddc01f34fa1a8b580677b733a64c",
+ "recipe.json": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d",
+ "ovl-23m-chat.gguf": "541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de",
+ "Modelfile": "df4dacfc3191e56b1dc1195764ea66ca1a7695856be04ecec17d8dde4c66fc8b"
+ }
+}
\ No newline at end of file
diff --git a/frontend/tests/fixtures/invalid-segment-count.json b/frontend/tests/fixtures/invalid-segment-count.json
new file mode 100644
index 00000000..79a7d93a
--- /dev/null
+++ b/frontend/tests/fixtures/invalid-segment-count.json
@@ -0,0 +1,1922 @@
+{
+ "schemaVersion": 1,
+ "dataset": "AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence",
+ "revision": "96dc282a",
+ "fetchedAt": "2026-10-30T15:32:03.178Z",
+ "sourceHashes": {
+ "release/simple-run/chain.jsonl": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "release/simple-run/verifications.jsonl": "ec73fe8fdce56eb075783c37383dbb5afaa23fac168fbd6619c01240de41b770",
+ "release/simple-run/hardware-map.jsonl": "5116f365398795a5e79513a3709d48995cc72a059ae9c69c653e324e723884e4",
+ "release/simple-run/release-hashes.txt": "479ce030fa8022f0f92262849f88dfde4c9cf2a0748b8830357f3aa277080e8d",
+ "release/simple-run/anchor.json": "2adaea4cae25439199ec2396c0e6e94d1d14188c070f217ed7e360ce10c1c18d",
+ "release/simple-run/README.md": "d3a4a5b221d9d1bd9318e8e414b44adc75f66155d03cd356b489165243e932e9",
+ "release/unlearning-3i-atlas/loo-results.json": "c926c965d1e040ab23c591c9dcdd007e5ece75a57ecfa100fd69515d190ead69",
+ "prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68"
+ },
+ "preparation": {
+ "articles": 7232582,
+ "wikipediaTargets": 7118121139,
+ "conversations": 3481,
+ "trainingLoopLines": "~630 lines",
+ "preparedDataId": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68"
+ },
+ "chain": [
+ {
+ "index": 0,
+ "kind": "initial",
+ "control": {
+ "batches": "10ea13010a13668c8bf9e2884e16bdbd16f8933d9bf4d09eda0c47459133eddb",
+ "cursor": 0,
+ "epoch": 0,
+ "global_step": 0,
+ "phase": "wikipedia",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "64041a4736bd76b64b149c2a784950a312fb19ed641c7eb87e7300c171d002fc",
+ "model": "2b167bcb407f94ac3f1dead8f316ea180823a1cb40489b8a1ff974bf2bcd959d",
+ "previous": null,
+ "time": 1792422250.861772,
+ "entryHash": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2"
+ },
+ {
+ "index": 1,
+ "kind": "progress",
+ "control": {
+ "batches": "e3f19a5269c4824fb1615d433b678fa54a6fc23ea99fd82c3e83f3f400f66809",
+ "cursor": 274561003,
+ "epoch": 0,
+ "global_step": 18080,
+ "phase": "wikipedia",
+ "phase_step": 18080,
+ "pos": [
+ 14363834,
+ 3072
+ ]
+ },
+ "state": "ef5090325fcf3c392503406ac2f7e6bd99118d267c38fbe4b624df41b48eca8f",
+ "model": "c32f02fac9e87d0c4279aa39a0fa06b5cc06d5b141d5ff29503cb8431c4ca180",
+ "previous": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2",
+ "time": 1792424215.6430938,
+ "entryHash": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f"
+ },
+ {
+ "index": 2,
+ "kind": "progress",
+ "control": {
+ "batches": "d5b199348b8d97e5a30ee2ea1a9bc465fd5dc0220a1a4297b4fa0716abdc84dc",
+ "cursor": 547313827,
+ "epoch": 0,
+ "global_step": 36160,
+ "phase": "wikipedia",
+ "phase_step": 36160,
+ "pos": [
+ 30161308,
+ 6656
+ ]
+ },
+ "state": "94e253d50adff230867baf0f9b2fbb247399b598511dd238cca10838439a228c",
+ "model": "29c055caaaefce12e962bb5905f79640bf7bcfc2dfe09070704f50a35e954868",
+ "previous": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f",
+ "time": 1792426181.1370955,
+ "entryHash": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789"
+ },
+ {
+ "index": 3,
+ "kind": "progress",
+ "control": {
+ "batches": "f520d10b29d43cbbe5556d887bd7e622a26ed3003eaa8677366993ed6a0965df",
+ "cursor": 812314162,
+ "epoch": 0,
+ "global_step": 54240,
+ "phase": "wikipedia",
+ "phase_step": 54240,
+ "pos": [
+ 50875269,
+ 0
+ ]
+ },
+ "state": "63f2f1cf69a97b295ef4924af836583cc5942d4cfdde34a0d68da658e9b56875",
+ "model": "bc0210cc1ce7eb55786921b9be9142224551daaa14a5a94b5851415d9954513f",
+ "previous": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789",
+ "time": 1792428164.4587104,
+ "entryHash": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37"
+ },
+ {
+ "index": 4,
+ "kind": "progress",
+ "control": {
+ "batches": "9b1c36b8b217b225ab637476b5f96e9d13723e8ff2f49474a1aff9fe4b6c6836",
+ "cursor": 1071169817,
+ "epoch": 0,
+ "global_step": 72320,
+ "phase": "wikipedia",
+ "phase_step": 72320,
+ "pos": [
+ 75821490,
+ 512
+ ]
+ },
+ "state": "38544968f3a1f342c17ee65afed30915acacf2131314c3254cfb1d3367acf0f6",
+ "model": "f6c1733d73e556de085fd9cb99f4137296f9ad7835fc3c88c9f8588cfeca0165",
+ "previous": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37",
+ "time": 1792430142.4307606,
+ "entryHash": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6"
+ },
+ {
+ "index": 5,
+ "kind": "progress",
+ "control": {
+ "batches": "0feb0c99169621a584609ce24a7ba1710f4dd1127205dae3911df09e1ab75698",
+ "cursor": 1326339931,
+ "epoch": 0,
+ "global_step": 90400,
+ "phase": "wikipedia",
+ "phase_step": 90400,
+ "pos": [
+ 103716532,
+ 512
+ ]
+ },
+ "state": "0f66051bfcf2b8512da505733cf9814527aba0412b28109071d9ebe1e7949165",
+ "model": "521f1f5f34c6a0992a15e539f1eab5f5590f5fdca15fdf16c60842c1d8612754",
+ "previous": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6",
+ "time": 1792432107.6645238,
+ "entryHash": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa"
+ },
+ {
+ "index": 6,
+ "kind": "progress",
+ "control": {
+ "batches": "dd5c823c56a28362db599fa09567143434f9f343784400622105200695fca78d",
+ "cursor": 1575735740,
+ "epoch": 0,
+ "global_step": 108480,
+ "phase": "wikipedia",
+ "phase_step": 108480,
+ "pos": [
+ 135269108,
+ 0
+ ]
+ },
+ "state": "d3f93a22ceb28a8640734ceca70e0217cf991b696807ecb6fdd31d318ad30aa8",
+ "model": "655aa1b3b7f5a34c9f0a2eba172ddbfef233acb3f121373e351b6d2cd982475f",
+ "previous": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa",
+ "time": 1792434050.5597794,
+ "entryHash": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a"
+ },
+ {
+ "index": 7,
+ "kind": "progress",
+ "control": {
+ "batches": "496333b0221dbc6a2edeeb9ea5318d3b33069b8f91c98d489cf742f70bab1d43",
+ "cursor": 1821662484,
+ "epoch": 0,
+ "global_step": 126560,
+ "phase": "wikipedia",
+ "phase_step": 126560,
+ "pos": [
+ 169162007,
+ 512
+ ]
+ },
+ "state": "228e635e6ee63fca5189f1af685f15c9d52a27527f300e7dac7a5ade82688e11",
+ "model": "ab677b66cfcc2d0652d37b5cc354e5d6980716b273cc99b78ae53f63e581ba14",
+ "previous": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a",
+ "time": 1792435994.2637668,
+ "entryHash": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc"
+ },
+ {
+ "index": 8,
+ "kind": "progress",
+ "control": {
+ "batches": "a009f3186720dd943c7c0e3c597706610370b795c3fd87b65df4ce8cdc54822d",
+ "cursor": 2062246462,
+ "epoch": 0,
+ "global_step": 144640,
+ "phase": "wikipedia",
+ "phase_step": 144640,
+ "pos": [
+ 206335253,
+ 0
+ ]
+ },
+ "state": "6cb7cf58b036f71d793b7940617d2756e4d24e906a8a4fdb6ec58ee56031ad53",
+ "model": "4419b42c7902c6f650e634055a1de54ca172e2a0a26c5bbad58ee8516cf4dfc6",
+ "previous": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc",
+ "time": 1792437967.4633026,
+ "entryHash": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae"
+ },
+ {
+ "index": 9,
+ "kind": "progress",
+ "control": {
+ "batches": "9f883e76562c687ddae51575bda5430cc91dbc45e57e7311d3646340a420a020",
+ "cursor": 2299429619,
+ "epoch": 0,
+ "global_step": 162720,
+ "phase": "wikipedia",
+ "phase_step": 162720,
+ "pos": [
+ 245609368,
+ 0
+ ]
+ },
+ "state": "0947a1b7cb257922ed1bb71e36059bdde1fa1c76509255c1af8cb3167bff72db",
+ "model": "967ff641117b62e0f4bbb19fda16cfb7a1b6c20adc35295ff0738a0664953048",
+ "previous": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae",
+ "time": 1792439938.9320748,
+ "entryHash": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43"
+ },
+ {
+ "index": 10,
+ "kind": "progress",
+ "control": {
+ "batches": "14ffdd92074c743ba35ff842d9d2956a29ff1ecf6b93820fc1bedb2161e2f20f",
+ "cursor": 2534896708,
+ "epoch": 0,
+ "global_step": 180800,
+ "phase": "wikipedia",
+ "phase_step": 180800,
+ "pos": [
+ 285958813,
+ 5632
+ ]
+ },
+ "state": "e162c0ef79462cfcc2c88cd336170df12f92f1f6d099920decca178da9dd455a",
+ "model": "cb2fbe49be6ead1201600d45004f411c7ed3ba0d532ebe2417b1a43ba40d9889",
+ "previous": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43",
+ "time": 1792441925.2640333,
+ "entryHash": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b"
+ },
+ {
+ "index": 11,
+ "kind": "progress",
+ "control": {
+ "batches": "7321c9e7f9b890c6b657525ffc10389c70e730b37f0ccaa0281264b7aaeec2ca",
+ "cursor": 2758953574,
+ "epoch": 0,
+ "global_step": 198880,
+ "phase": "wikipedia",
+ "phase_step": 198880,
+ "pos": [
+ 331465519,
+ 0
+ ]
+ },
+ "state": "be21dd4e7d988157822d75f6600146be013afa826076b49b45b3874e5a2bd1ca",
+ "model": "21e5ccc4f7a7b4c8b311febbdcb0cd037a2efff64c715935853fa663b61e5aeb",
+ "previous": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b",
+ "time": 1792445221.8958924,
+ "entryHash": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18"
+ },
+ {
+ "index": 12,
+ "kind": "progress",
+ "control": {
+ "batches": "0d86e2942f9d84483cd0e3cd5168d81cf418e915c04e25f94c03d3ad703c648d",
+ "cursor": 2977003841,
+ "epoch": 0,
+ "global_step": 216960,
+ "phase": "wikipedia",
+ "phase_step": 216960,
+ "pos": [
+ 379051570,
+ 512
+ ]
+ },
+ "state": "c9d571c059311fbeb20f46d33a56497113b1f3705b75939ef57e61cc98978ca6",
+ "model": "ee22252416c44a8812aab40b456c60351eaf714679495ef7c39a81c3d24db503",
+ "previous": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18",
+ "time": 1792447305.2481282,
+ "entryHash": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165"
+ },
+ {
+ "index": 13,
+ "kind": "progress",
+ "control": {
+ "batches": "bfe949e391619c70945f4ad5af5f73c00f8d44562f44733457ad865081612290",
+ "cursor": 3192270243,
+ "epoch": 0,
+ "global_step": 235040,
+ "phase": "wikipedia",
+ "phase_step": 235040,
+ "pos": [
+ 427598539,
+ 0
+ ]
+ },
+ "state": "2733d7ef9aaacf20880e2196c819305f58ad0cc03494704fbc9f5e03a95931b2",
+ "model": "978af11d622fb0e48dd842f5aa27e9992c267de2a91944b1b3b160aa89fa7675",
+ "previous": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165",
+ "time": 1792449363.6749403,
+ "entryHash": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f"
+ },
+ {
+ "index": 14,
+ "kind": "progress",
+ "control": {
+ "batches": "7eea41e27f71c52d58558b90de9ef7cd26ac9123366132bcbc1e71f4de08acf4",
+ "cursor": 3407720912,
+ "epoch": 0,
+ "global_step": 253120,
+ "phase": "wikipedia",
+ "phase_step": 253120,
+ "pos": [
+ 476680277,
+ 0
+ ]
+ },
+ "state": "145353afb1e2ebc2b5f9831fed74e5631b42a11342aab9a0b9febe796446c446",
+ "model": "613728906a531097849fcaa83d13ccb54b334d805aeaef8abe127ef2b7b70e1d",
+ "previous": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f",
+ "time": 1792451498.6016607,
+ "entryHash": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa"
+ },
+ {
+ "index": 15,
+ "kind": "progress",
+ "control": {
+ "batches": "c294ad7b42d0f2e970f3c757f339b24f6fbdc2982e9a91078a071b121b9325a1",
+ "cursor": 3626056290,
+ "epoch": 0,
+ "global_step": 271200,
+ "phase": "wikipedia",
+ "phase_step": 271200,
+ "pos": [
+ 524689002,
+ 0
+ ]
+ },
+ "state": "fa961c767d2e293f12adcd13a3410d345e3bb5952395725963eb2f6e5c228d9e",
+ "model": "0f122b6387647c6844f6668edc95b2b96efd34885985e80c25a1eb424c7ffa2c",
+ "previous": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa",
+ "time": 1792453682.104504,
+ "entryHash": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722"
+ },
+ {
+ "index": 16,
+ "kind": "progress",
+ "control": {
+ "batches": "4d0765884b5a4f4af81e17f0914a728e631c665fa74ec82be39e458f3f4f40c1",
+ "cursor": 3842372860,
+ "epoch": 0,
+ "global_step": 289280,
+ "phase": "wikipedia",
+ "phase_step": 289280,
+ "pos": [
+ 573811026,
+ 2048
+ ]
+ },
+ "state": "82d7f95aaed27c4ac54ec6b8de9567a84d818a875673030c4ae0d2d39a860754",
+ "model": "9a1a2f4ad99c6aac613f620400dc405a8967906e435079c0d8d29622831044fa",
+ "previous": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722",
+ "time": 1792455885.299576,
+ "entryHash": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f"
+ },
+ {
+ "index": 17,
+ "kind": "progress",
+ "control": {
+ "batches": "a219629293cfc4e69c74916379ba790f96b8a5425bd9fb7f4d9e481965ec9374",
+ "cursor": 4065481916,
+ "epoch": 0,
+ "global_step": 307360,
+ "phase": "wikipedia",
+ "phase_step": 307360,
+ "pos": [
+ 619889558,
+ 18944
+ ]
+ },
+ "state": "1082ced41232e82ff83506f0c20d887d0ddc3dc7458bc3ace5361a87485e5b60",
+ "model": "1e77516fc3d4c149c17b5e039ba9a886f520769df7512002fe89a9e5148f7d6e",
+ "previous": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f",
+ "time": 1792458112.5074773,
+ "entryHash": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7"
+ },
+ {
+ "index": 18,
+ "kind": "progress",
+ "control": {
+ "batches": "fbdade37939ffab2c5df52a9db88c8bac93a5501861522a30f1a50ebcafb4b3e",
+ "cursor": 4280170919,
+ "epoch": 0,
+ "global_step": 325440,
+ "phase": "wikipedia",
+ "phase_step": 325440,
+ "pos": [
+ 669406302,
+ 0
+ ]
+ },
+ "state": "0d4932793bd2279c0a17b3ca736159f89d48898d8a42113d15c7590dfdd85c26",
+ "model": "4d79bcc6ee8060a9c28a5802c142f972665bafae70901176c9a964bc884f1dee",
+ "previous": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7",
+ "time": 1792460358.5080163,
+ "entryHash": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89"
+ },
+ {
+ "index": 19,
+ "kind": "progress",
+ "control": {
+ "batches": "32161f48812917ee1bed7a4367df261934308045464246622f47dba2ab129f2a",
+ "cursor": 4492270493,
+ "epoch": 0,
+ "global_step": 343520,
+ "phase": "wikipedia",
+ "phase_step": 343520,
+ "pos": [
+ 719769225,
+ 2048
+ ]
+ },
+ "state": "cafd56b605b39449655b55534cd4e33616de0d40e6c3434fcd1a54c941e63191",
+ "model": "9e597fcc4fc74828e30605677e3696a53b77a6976fecdc4f0e06b378e6721ee9",
+ "previous": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89",
+ "time": 1792462598.3975008,
+ "entryHash": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f"
+ },
+ {
+ "index": 20,
+ "kind": "progress",
+ "control": {
+ "batches": "30c019ac1c173f6d688cdd4bd01e7ceaf9ed1376251e69d87cb9643b4386116b",
+ "cursor": 4705349595,
+ "epoch": 0,
+ "global_step": 361600,
+ "phase": "wikipedia",
+ "phase_step": 361600,
+ "pos": [
+ 769153707,
+ 4608
+ ]
+ },
+ "state": "708b48121052bf9bc68bbd67e8613230dd713b9569610a4e66838fe45f35299a",
+ "model": "f98ab99a90c7734a3f4cf2d60216ed8b1bdc657541ec3374c6f035b0bd42a307",
+ "previous": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f",
+ "time": 1792463768.5816014,
+ "entryHash": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03"
+ },
+ {
+ "index": 21,
+ "kind": "progress",
+ "control": {
+ "batches": "09506b60c4342ec5873bba53f2e993f0a46e1b726fc3449ce690e5e4eb43927c",
+ "cursor": 4919188008,
+ "epoch": 0,
+ "global_step": 379680,
+ "phase": "wikipedia",
+ "phase_step": 379680,
+ "pos": [
+ 818886901,
+ 0
+ ]
+ },
+ "state": "eb31ec48c4ce9373035fe1229a93190fcfec9060d1bc8520f62ed3dfcab752fa",
+ "model": "b89d3b185a1fcf21bcc5ef432a26eafc9643eb62b9aa3d8eeb624cbfceeea340",
+ "previous": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03",
+ "time": 1792465514.4536183,
+ "entryHash": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d"
+ },
+ {
+ "index": 22,
+ "kind": "progress",
+ "control": {
+ "batches": "27f95fcd8bc5e1b25cea97a17fd58ce6f6771b5b15565014616d4519ab8c8184",
+ "cursor": 5137669818,
+ "epoch": 0,
+ "global_step": 397760,
+ "phase": "wikipedia",
+ "phase_step": 397760,
+ "pos": [
+ 867774445,
+ 512
+ ]
+ },
+ "state": "ee97359b8f9928977515e383d98a796d442444b5a07de5c9ec1158d372cc0e49",
+ "model": "1428e4c6cddc484d305881220b68eb5e04eb851632e1ae7d4f61725e0b24708b",
+ "previous": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d",
+ "time": 1792468481.591845,
+ "entryHash": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0"
+ },
+ {
+ "index": 23,
+ "kind": "progress",
+ "control": {
+ "batches": "2ac5c320056a9766eaf2f910194309a2e1e3254958d1fe2e4afa92805ee04b28",
+ "cursor": 5354659564,
+ "epoch": 0,
+ "global_step": 415840,
+ "phase": "wikipedia",
+ "phase_step": 415840,
+ "pos": [
+ 917385337,
+ 0
+ ]
+ },
+ "state": "296c1763d3421f6991f4f841f4143166bf0910000e5b00673383a4589859483f",
+ "model": "8948b0defe4c934602354d44e72ceb0b34c46d87bb7a67832fa50ea581b57d16",
+ "previous": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0",
+ "time": 1792469631.0069373,
+ "entryHash": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99"
+ },
+ {
+ "index": 24,
+ "kind": "progress",
+ "control": {
+ "batches": "3fae190c7c836188101a7a77d6046446431892e109590436e4c94a3ed1da8c13",
+ "cursor": 5571989843,
+ "epoch": 0,
+ "global_step": 433920,
+ "phase": "wikipedia",
+ "phase_step": 433920,
+ "pos": [
+ 966632574,
+ 8192
+ ]
+ },
+ "state": "6413ef4ca2bf9d47a89302d88662069fde930d732c4df7d0892f30ed64d3756d",
+ "model": "c553304d081e5817ba0e042bcdef7f1cf9642a290b006edab98778abd18eeedc",
+ "previous": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99",
+ "time": 1792470779.9569445,
+ "entryHash": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a"
+ },
+ {
+ "index": 25,
+ "kind": "progress",
+ "control": {
+ "batches": "b77680f3b1febcf15d5adac2f244b845ea1ca7ae5837e9ce9e57a9b9661033c6",
+ "cursor": 5786932809,
+ "epoch": 0,
+ "global_step": 452000,
+ "phase": "wikipedia",
+ "phase_step": 452000,
+ "pos": [
+ 1015978804,
+ 2048
+ ]
+ },
+ "state": "245211135b131b6c5e1940458575033082b4b473fa0033b55816d889c82d656b",
+ "model": "1f1becfa5470bac9a31962462d4d85647598dc8f75277e2f9c6efe5bc59ada97",
+ "previous": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a",
+ "time": 1792471931.509705,
+ "entryHash": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0"
+ },
+ {
+ "index": 26,
+ "kind": "progress",
+ "control": {
+ "batches": "44eaf0d468c5578cc89e3999530132727e41ac47cbfcc8fcf80a7621b527cda0",
+ "cursor": 6003090585,
+ "epoch": 0,
+ "global_step": 470080,
+ "phase": "wikipedia",
+ "phase_step": 470080,
+ "pos": [
+ 1065027050,
+ 0
+ ]
+ },
+ "state": "7b1ab9b324ac43d99f738ee00e3ef2b514e8dcc82313863c1d8f6e871d42bbb8",
+ "model": "6a59289ec3928857e0beacc7858e190c0756c72f2cdf48896578bb75720fa72a",
+ "previous": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0",
+ "time": 1792473082.0379794,
+ "entryHash": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e"
+ },
+ {
+ "index": 27,
+ "kind": "progress",
+ "control": {
+ "batches": "58cf98d2ec42837434cc698720602c1ed7a427f1b7075de7b56e1957e42d7b7b",
+ "cursor": 6219792471,
+ "epoch": 0,
+ "global_step": 488160,
+ "phase": "wikipedia",
+ "phase_step": 488160,
+ "pos": [
+ 1113864691,
+ 1024
+ ]
+ },
+ "state": "0ec654850f2c1288c7850e9e732b52187dcc5f73fffe0f3bc211143e32097e7a",
+ "model": "5329233dbd65f90b4c368e40c725c59496c03266053f934c4be9c4ef73e3ec73",
+ "previous": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e",
+ "time": 1792474229.018975,
+ "entryHash": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c"
+ },
+ {
+ "index": 28,
+ "kind": "progress",
+ "control": {
+ "batches": "8e7e2738dac57947ab3894def88fc8bfb84e0b8c55095fcd33d66e2699dabab5",
+ "cursor": 6444391263,
+ "epoch": 0,
+ "global_step": 506240,
+ "phase": "wikipedia",
+ "phase_step": 506240,
+ "pos": [
+ 1159432427,
+ 0
+ ]
+ },
+ "state": "e5891f8db717f770246c4255fa6598ba280922c428e9e1e6d814f5d96549cab1",
+ "model": "d6e1eaab6061fc051ae6de60bb6c95d99d1b98c6bcddfdcbbd593208b7d8a303",
+ "previous": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c",
+ "time": 1792475372.9946525,
+ "entryHash": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5"
+ },
+ {
+ "index": 29,
+ "kind": "progress",
+ "control": {
+ "batches": "7b351d64e2a3d2492e668dcfd73d82ce92c0ba04fdd4c3058c95d4e642a6807d",
+ "cursor": 6671911669,
+ "epoch": 0,
+ "global_step": 524320,
+ "phase": "wikipedia",
+ "phase_step": 524320,
+ "pos": [
+ 1203647118,
+ 0
+ ]
+ },
+ "state": "ab0f669782c60bf45255e4822fee5fe5425a24b614d10dc0821323ca7325853c",
+ "model": "3c5459d2bdcdb86d05168a8a78370aa7f772cb6f48ab11e6949164ec6d30fdc0",
+ "previous": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5",
+ "time": 1792476512.00237,
+ "entryHash": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b"
+ },
+ {
+ "index": 30,
+ "kind": "progress",
+ "control": {
+ "batches": "304b2d3afe5a67a5ef902cb8334a55ee6f89877d474b438fb9c94e507814dece",
+ "cursor": 6901668826,
+ "epoch": 0,
+ "global_step": 542400,
+ "phase": "wikipedia",
+ "phase_step": 542400,
+ "pos": [
+ 1246875101,
+ 0
+ ]
+ },
+ "state": "baf0f2694f6f7561b6e427c0181978541c19263849163984131f51dad72b6c38",
+ "model": "bdfa54d7eb2938c8fe3258528e5cb84287c54f889471eb60909e7d8c6aca8061",
+ "previous": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b",
+ "time": 1792477651.6187513,
+ "entryHash": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39"
+ },
+ {
+ "index": 31,
+ "kind": "base",
+ "control": {
+ "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875",
+ "cursor": 7118121139,
+ "epoch": 0,
+ "global_step": 560177,
+ "phase": "wikipedia",
+ "phase_step": 560177,
+ "pos": [
+ 1293950757,
+ 0
+ ]
+ },
+ "state": "13d6ad64b2465d42653f250bba0463468c0c81b7980ebc9d97e3b0f95c713bf1",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "previous": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39",
+ "time": 1792478775.2381847,
+ "entryHash": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a"
+ },
+ {
+ "index": 32,
+ "kind": "transition",
+ "control": {
+ "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875",
+ "cursor": 0,
+ "epoch": 0,
+ "global_step": 560177,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "8987fdd57ba91b044c23bba48cf41b132aa6ec949c4af650ba3180483476941d",
+ "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f",
+ "previous": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a",
+ "time": 1792478776.1264164,
+ "entryHash": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8"
+ },
+ {
+ "index": 33,
+ "kind": "epoch",
+ "control": {
+ "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67",
+ "cursor": 1278137,
+ "epoch": 0,
+ "global_step": 560324,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "previous": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8",
+ "time": 1792478785.6187253,
+ "entryHash": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035"
+ },
+ {
+ "index": 34,
+ "kind": "transition",
+ "control": {
+ "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67",
+ "cursor": 0,
+ "epoch": 1,
+ "global_step": 560324,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03",
+ "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e",
+ "previous": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035",
+ "time": 1792478786.6568494,
+ "entryHash": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f"
+ },
+ {
+ "index": 35,
+ "kind": "epoch",
+ "control": {
+ "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023",
+ "cursor": 1278137,
+ "epoch": 1,
+ "global_step": 560471,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "previous": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f",
+ "time": 1792478796.331579,
+ "entryHash": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042"
+ },
+ {
+ "index": 36,
+ "kind": "transition",
+ "control": {
+ "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023",
+ "cursor": 0,
+ "epoch": 2,
+ "global_step": 560471,
+ "phase": "conversation",
+ "phase_step": 0,
+ "pos": [
+ 0,
+ 0
+ ]
+ },
+ "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2",
+ "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda",
+ "previous": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042",
+ "time": 1792478797.354915,
+ "entryHash": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb"
+ },
+ {
+ "index": 37,
+ "kind": "final",
+ "control": {
+ "batches": "1fd22db0ab89ab98045f8c4b32ce4e4d55453163390ec9ebd5792dfc38fd5a52",
+ "cursor": 1278137,
+ "epoch": 2,
+ "global_step": 560618,
+ "phase": "conversation",
+ "phase_step": 147,
+ "pos": [
+ 849666,
+ 0
+ ]
+ },
+ "state": "934d681c99e5c3e10617e82dbbb0ae0ddd1ad4e32cf45e8e3a6d2ed94b69f200",
+ "model": "ec9a2b31ca524613f791aba00f4f7f31e4a7bf4a8a921e0deb81c1a922d0958b",
+ "previous": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb",
+ "time": 1792478807.0463226,
+ "entryHash": "9edbcaddbb08ed20f3d655ac59d0aa57f6339a702d0fa1d3422856f5d8251a51"
+ }
+ ],
+ "verifications": {
+ "totalChecks": 46,
+ "uniqueSegments": 36,
+ "projectChecksCount": 46,
+ "independentChecksCount": 0,
+ "coverage": [
+ {
+ "segment": 0,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 0
+ }
+ ]
+ },
+ {
+ "segment": 1,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 1
+ }
+ ]
+ },
+ {
+ "segment": 2,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 2
+ }
+ ]
+ },
+ {
+ "segment": 3,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 3
+ }
+ ]
+ },
+ {
+ "segment": 4,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 4
+ }
+ ]
+ },
+ {
+ "segment": 5,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0 fast loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ }
+ ]
+ },
+ {
+ "segment": 6,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 6
+ }
+ ]
+ },
+ {
+ "segment": 7,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 7
+ }
+ ]
+ },
+ {
+ "segment": 8,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 8
+ }
+ ]
+ },
+ {
+ "segment": 9,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 9
+ }
+ ]
+ },
+ {
+ "segment": 10,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 10
+ }
+ ]
+ },
+ {
+ "segment": 11,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 11
+ }
+ ]
+ },
+ {
+ "segment": 12,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 12
+ }
+ ]
+ },
+ {
+ "segment": 13,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 13
+ }
+ ]
+ },
+ {
+ "segment": 14,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 14
+ }
+ ]
+ },
+ {
+ "segment": 15,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 15
+ }
+ ]
+ },
+ {
+ "segment": 16,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 16
+ }
+ ]
+ },
+ {
+ "segment": 17,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 17
+ }
+ ]
+ },
+ {
+ "segment": 18,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 18
+ }
+ ]
+ },
+ {
+ "segment": 19,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 19
+ }
+ ]
+ },
+ {
+ "segment": 20,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 20
+ }
+ ]
+ },
+ {
+ "segment": 21,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 21
+ },
+ {
+ "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
+ }
+ ]
+ },
+ {
+ "segment": 22,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ }
+ ]
+ },
+ {
+ "segment": 23,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 23
+ }
+ ]
+ },
+ {
+ "segment": 24,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 24
+ }
+ ]
+ },
+ {
+ "segment": 25,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 25
+ }
+ ]
+ },
+ {
+ "segment": 26,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 26
+ }
+ ]
+ },
+ {
+ "segment": 27,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 27
+ }
+ ]
+ },
+ {
+ "segment": 28,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 28
+ }
+ ]
+ },
+ {
+ "segment": 29,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 29
+ }
+ ]
+ },
+ {
+ "segment": 30,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 30
+ }
+ ]
+ },
+ {
+ "segment": 31,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ }
+ ]
+ },
+ {
+ "segment": 32,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ }
+ ]
+ },
+ {
+ "segment": 33,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ }
+ ]
+ },
+ {
+ "segment": 34,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ }
+ ]
+ },
+ {
+ "segment": 35,
+ "projectResult": "MATCH",
+ "independentResult": null,
+ "checks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ }
+ ]
+ }
+ ],
+ "rawChecks": [
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 0
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 1
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 2
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 3
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 4
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 6
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 7
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 8
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 9
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 10
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 11
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 12
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 13
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 14
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 15
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 16
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 17
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py 202ac6ce",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 18
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 19
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 20
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 21
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 23
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 24
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 25
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 26
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 27
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 28
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 29
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 30
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project second pod",
+ "code": "ovl.py c4a942c0 reference loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 22
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 31
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 32
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 33
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 34
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 35
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 36
+ },
+ {
+ "checker": "project training pod",
+ "code": "ovl.py c4a942c0 fast loader",
+ "driver": "595.91.07",
+ "gpu": "NVIDIA GeForce RTX 5090",
+ "result": "MATCH",
+ "segment": 5
+ },
+ {
+ "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
+ }
+ ]
+ },
+ "hardwareMap": [
+ {
+ "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"
+ },
+ {
+ "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"
+ },
+ {
+ "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"
+ },
+ {
+ "segment": 32,
+ "result": "MISMATCH",
+ "hardware": "x86_64 CPU",
+ "driver": "none",
+ "software": "torch 2.14.0+cpu",
+ "note": "different hardware and software"
+ },
+ {
+ "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"
+ }
+ ],
+ "anchor": {
+ "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",
+ "timestamp": "2026-10-20 14:38:43 UTC",
+ "authorities": [
+ "DigiCert",
+ "FreeTSA (RFC 3161)"
+ ]
+ },
+ "exclusion": {
+ "removedArticle": "3I/ATLAS",
+ "originalRemovedLoss": 3.3604,
+ "forkRemovedLoss": 3.386,
+ "removedLossDelta": 0.0256,
+ "originalControlLossMean": 2.871,
+ "forkControlLossMean": 2.8712,
+ "controlLossDelta": 0.0002,
+ "controlArticlesCount": 50,
+ "evidencePath": "release/unlearning-3i-atlas/"
+ },
+ "releaseHashes": {
+ "base-model.pt": "976c62e8b28db786c38dc2ff969339603d0ee917d830f2815d9e858d2a3c0ce3",
+ "chain.jsonl": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327",
+ "ckpt-00000.pt": "3dccf4a6d258ff5e150ee1ed590f4baff099e5a368d580e610ecf238b4ba8c22",
+ "ckpt-00001.pt": "ba524fd9691c4a849d1a3dac177af426df36d8e04d9c75fba2dbf036a4b515f9",
+ "ckpt-00002.pt": "627106799e630a9297770b31b0e1f66b1418215eea50c1cd3f3a23c48e138a33",
+ "ckpt-00003.pt": "0b64c3f0208d636b19bdf5970810c27cb2ceab33f18153915d64f6493201bc10",
+ "ckpt-00004.pt": "68f07c741473f7ad0c2c61d52dc25c4d8a9c441382d348f9c1a97d215bba452e",
+ "ckpt-00005.pt": "29cdefeb28098ba4572869655b58c9dd2e771edc3717f0112d700477b74defb8",
+ "ckpt-00006.pt": "3e861cd5457c1a1566c8ebcee2a712feca2f3e5603ad46436d393aca5cbb5999",
+ "ckpt-00007.pt": "400734c784b59c9363fdbdd745f7f0f6d70c1be09d2c747976bc2b4fae01b64b",
+ "ckpt-00008.pt": "fe5352356351e4d9e4b0abd59f279c7a2ed98888177fbb773fd1f1983fefe83f",
+ "ckpt-00009.pt": "41819daf70a409e200f5189ab45ae96293716794733ad534e4843ac3f8b1982e",
+ "ckpt-00010.pt": "75cd5863903d9f595e2d50cacea3ec0530f41c154d4ec8817f41376b6f222e3f",
+ "ckpt-00011.pt": "46ece4b519e8624a2b41856b1ecfa9a5daf4994616a9bdd8d941625cb09a32ed",
+ "ckpt-00012.pt": "8b0e19692ccc6c6e6e0eb745633ae2dd2c4e86d0ca84b8ea1c7f1f81a888b892",
+ "ckpt-00013.pt": "3ac79c55fe528bcc62bd7a7a047e2b2a19e2d2e494c85e26301b0fc79f345aee",
+ "ckpt-00014.pt": "ad933ae52b14ff5de72624c5dc7af9b3e5464155b9c3ed84bd43bd5be4f737c3",
+ "ckpt-00015.pt": "2cfddc6c26fb7e8dc99c94b6fb39007a4937b67e1c8d852f2561d990e857cb62",
+ "ckpt-00016.pt": "3729909ae0f85b79377956ad8defdaaeceac0cd000a1c47e582f38685f4158d6",
+ "ckpt-00017.pt": "9f8537d432d78b254dcba86e7bd987246d928bbc837950ffe2536ba989747c41",
+ "ckpt-00018.pt": "a09df5692aac7e42a0430fd225c75937bf75c85a9dfb77b899b4cb956a8c51d1",
+ "ckpt-00019.pt": "ef18f34f8ac17a2581193ffc681a927f655bdadce4c6ca2de0a095d72094bb24",
+ "ckpt-00020.pt": "6bda17b7f79347cc57cb1325215a3a68f9f2357ee5b97f2c88e353189244fcdf",
+ "ckpt-00021.pt": "7df62e3801530777a4491bcecb0199a2b5628a9de61da30f5f6513c74c028095",
+ "ckpt-00022.pt": "23d9271d4f4c49e8e04a13f498ed0a89d57c3f80705044c2c8fe10eecc895896",
+ "ckpt-00023.pt": "2b68d53231a0d3a639312ed45eeb2afef3720f93824819843dd2c9fb68f2fc4c",
+ "ckpt-00024.pt": "8a06f96345a0ff23933d6b946a4fc88ad63a6b43a618a91a1639267cf1c0e23b",
+ "ckpt-00025.pt": "7bed06bf3566e18595a190bc1418fe5735689a2c47d280d857c0a5f68ba73a7f",
+ "ckpt-00026.pt": "31e21be4135f53a912312fae5f26d9b2eefc344171b8935e295c655f49c3b701",
+ "ckpt-00027.pt": "2efcee93267b438152c35cfc1975fd0d8d2dcec804b2713fcc11bdd8602752cf",
+ "ckpt-00028.pt": "671cf6928fc370a464fade45cf5565a65c019c9888b6c9d8962230364cc4c5b4",
+ "ckpt-00029.pt": "082195ad124ad61287e94f224c6672b2175b1c1c35f06baee2b56adbc12f92da",
+ "ckpt-00030.pt": "febe492c2c87335b078c910894172bcf8f572b853d807b8f24da99e9e0127979",
+ "ckpt-00031.pt": "c687187b7daaa97d0fd8c96df302313e051febc29d64b5ef4d5b5775d684244b",
+ "ckpt-00032.pt": "b49bfa976a6aa59fc54b9511fccc4745a4493b81cc58a3ff310ffecf7a92f45e",
+ "ckpt-00033.pt": "8fa1f26811ef37b235c968c4204044983895b217e00db731d57f3a2cecda179e",
+ "ckpt-00034.pt": "5fe1e5af0d612046c7617d079181090e3ac0898411fe39900e05346c90b29aeb",
+ "ckpt-00035.pt": "4766216588d357cdbe5bdd35e4b9534317d59f8b1273b5b722a390e748ae3beb",
+ "ckpt-00036.pt": "1ca4bd559c51e9d83ba2ea84a85e518e0309d0844d964535868339a16b66e239",
+ "ckpt-00037.pt": "88947898dab959fd82f954f81681103bac7f6b770f4bcc13d6eac29ca1795ecb",
+ "conversation-model.pt": "149cfae13c4523a1010c52161e13babf76c9ddc01f34fa1a8b580677b733a64c",
+ "recipe.json": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d",
+ "ovl-23m-chat.gguf": "541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de",
+ "Modelfile": "df4dacfc3191e56b1dc1195764ea66ca1a7695856be04ecec17d8dde4c66fc8b"
+ }
+}
\ No newline at end of file
diff --git a/frontend/tests/setup.ts b/frontend/tests/setup.ts
new file mode 100644
index 00000000..bd09bfcb
--- /dev/null
+++ b/frontend/tests/setup.ts
@@ -0,0 +1,45 @@
+import '@testing-library/jest-dom/vitest';
+import { cleanup } from '@testing-library/react';
+import { afterEach } from 'vitest';
+
+afterEach(cleanup);
+
+// Mock browser observers if missing in jsdom
+class NoopObserver {
+ observe() {}
+ unobserve() {}
+ disconnect() {}
+ takeRecords() {
+ return [];
+ }
+}
+
+for (const name of ['ResizeObserver', 'IntersectionObserver']) {
+ if (!(name in globalThis)) {
+ Object.defineProperty(globalThis, name, {
+ value: NoopObserver,
+ configurable: true,
+ });
+ }
+}
+
+// Mock localStorage in jsdom environment
+if (typeof window !== 'undefined') {
+ let store: Record = {};
+ const mockLocalStorage = {
+ getItem: (key: string) => store[key] ?? null,
+ setItem: (key: string, value: string) => {
+ store[key] = String(value);
+ },
+ removeItem: (key: string) => {
+ delete store[key];
+ },
+ clear: () => {
+ store = {};
+ },
+ };
+ Object.defineProperty(window, 'localStorage', {
+ value: mockLocalStorage,
+ writable: true,
+ });
+}
diff --git a/frontend/tests/validate.test.ts b/frontend/tests/validate.test.ts
new file mode 100644
index 00000000..7c26e000
--- /dev/null
+++ b/frontend/tests/validate.test.ts
@@ -0,0 +1,84 @@
+import { describe, it, expect } from 'vitest';
+import { readFileSync } from 'node:fs';
+import { resolve } from 'node:path';
+import { validateEvidence, SnapshotError } from '../src/data/validate';
+
+describe('Evidence Validator', () => {
+ const getFixturePath = (filename: string) =>
+ resolve(process.cwd(), 'tests/fixtures', filename);
+
+ const validData = JSON.parse(
+ readFileSync(resolve(process.cwd(), 'public/data/evidence.json'), 'utf8')
+ );
+
+ it('validates official pinned evidence.json successfully', () => {
+ const validated = validateEvidence(validData);
+ expect(validated.revision).toBe('96dc282a');
+ expect(validated.chain.length).toBe(38);
+ expect(validated.verifications.uniqueSegments).toBe(37);
+ expect(validated.verifications.totalChecks).toBe(46);
+ expect(validated.preparation.articles).toBeGreaterThan(0);
+ expect(validated.preparation.wikipediaTargets).toBeGreaterThan(0);
+ expect(validated.preparation.conversations).toBeGreaterThan(0);
+ expect(validated.exclusion.removedArticle).toBe('3I/ATLAS');
+ expect(validated.exclusion.forkRemovedLoss).toBeGreaterThan(validated.exclusion.originalRemovedLoss);
+ });
+
+ it('fails if chain length is less than 2 boundaries', () => {
+ const bad = JSON.parse(JSON.stringify(validData));
+ bad.chain = [bad.chain[0]];
+ expect(() => validateEvidence(bad)).toThrow(SnapshotError);
+ expect(() => validateEvidence(bad)).toThrow(/Chain must have at least 2 entries/);
+ });
+
+ it('fails if unique segment count does not match derived count from chain.jsonl', () => {
+ const bad = JSON.parse(
+ readFileSync(getFixturePath('invalid-segment-count.json'), 'utf8')
+ );
+ expect(() => validateEvidence(bad)).toThrow(SnapshotError);
+ expect(() => validateEvidence(bad)).toThrow(/Segment count mismatch/);
+ });
+
+ it('fails if previous link in chain is broken', () => {
+ const bad = JSON.parse(
+ readFileSync(getFixturePath('broken-link.json'), 'utf8')
+ );
+ expect(() => validateEvidence(bad)).toThrow(SnapshotError);
+ expect(() => validateEvidence(bad)).toThrow(/Broken previous link at boundary 10/);
+ });
+
+ it('fails if any row in verifications points at an invalid segment', () => {
+ const bad = JSON.parse(JSON.stringify(validData));
+ bad.verifications.rawChecks[0].segment = 999;
+ expect(() => validateEvidence(bad)).toThrow(SnapshotError);
+ expect(() => validateEvidence(bad)).toThrow(/points at invalid segment 999/);
+ });
+
+ it('fails if checker string is unknown / unauthorized', () => {
+ const bad = JSON.parse(
+ readFileSync(getFixturePath('invalid-checker.json'), 'utf8')
+ );
+ expect(() => validateEvidence(bad)).toThrow(SnapshotError);
+ expect(() => validateEvidence(bad)).toThrow(/Unknown or unauthorized checker string/);
+ });
+
+ it('fails if a source SHA-256 hash is corrupted or invalid', () => {
+ const bad = JSON.parse(
+ readFileSync(getFixturePath('hash-mismatch.json'), 'utf8')
+ );
+ expect(() => validateEvidence(bad)).toThrow(SnapshotError);
+ expect(() => validateEvidence(bad)).toThrow(/Invalid or corrupted SHA-256 hash/);
+ });
+
+ it('fails if verifiable exclusion loss delta is mathematically inconsistent', () => {
+ const bad = JSON.parse(JSON.stringify(validData));
+ bad.exclusion.removedLossDelta = 9.9999;
+ expect(() => validateEvidence(bad)).toThrow(SnapshotError);
+ expect(() => validateEvidence(bad)).toThrow(/Exclusion removed loss delta inconsistent/);
+ });
+
+ it('fails on null or non-object payloads', () => {
+ expect(() => validateEvidence(null)).toThrow(SnapshotError);
+ expect(() => validateEvidence('not-an-object')).toThrow(SnapshotError);
+ });
+});
diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json
new file mode 100644
index 00000000..3f6cbc69
--- /dev/null
+++ b/frontend/tsconfig.app.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
+ "target": "ES2022",
+ "useDefineForClassFields": true,
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "verbatimModuleSyntax": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+ "resolveJsonModule": true,
+ "jsx": "react-jsx",
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "erasableSyntaxOnly": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true
+ },
+ "include": ["src", "tests"]
+}
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
new file mode 100644
index 00000000..1ffef600
--- /dev/null
+++ b/frontend/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "files": [],
+ "references": [
+ { "path": "./tsconfig.app.json" },
+ { "path": "./tsconfig.node.json" }
+ ]
+}
diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json
new file mode 100644
index 00000000..953116cc
--- /dev/null
+++ b/frontend/tsconfig.node.json
@@ -0,0 +1,21 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
+ "target": "ES2023",
+ "lib": ["ES2023"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "verbatimModuleSyntax": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "erasableSyntaxOnly": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts
new file mode 100644
index 00000000..18ae2b4a
--- /dev/null
+++ b/frontend/vite.config.ts
@@ -0,0 +1,13 @@
+import { defineConfig } from 'vitest/config';
+import react from '@vitejs/plugin-react';
+
+export default defineConfig({
+ base: './',
+ plugins: [react()],
+ test: {
+ environment: 'jsdom',
+ globals: false,
+ setupFiles: ['./tests/setup.ts'],
+ exclude: ['e2e/**', 'node_modules/**', 'tests/browser/**'],
+ },
+});