diff --git a/README.md b/README.md index 44d32a9..34ee2bd 100644 --- a/README.md +++ b/README.md @@ -188,7 +188,7 @@ python -m venv .venv pip install -r requirements-dev.txt pip install -e ".[server]" # [server] adds the API (fastapi + multipart) -pytest # 289 offline backend tests +pytest # 290 offline backend tests python -m claimscene.cli --case demo --out out ``` @@ -353,7 +353,7 @@ desynced or over-length video fails the build. ## Testing & CI -- **289 offline backend tests** (unit / integration / e2e): schema +- **290 offline backend tests** (unit / integration / e2e): schema round-trips and rejection of hallucinated fields, layout determinism and contact-geometry properties, golden-file SVG, provenance seal/tamper, real B2 adapter against an S3 stub (**+ a presign contract test asserting SigV4 + @@ -362,7 +362,7 @@ desynced or over-length video fails the build. SDK-boundary contract tests, and the **full API chain** through FastAPI's TestClient (extract → preview → render → get → verify → playback, honest degrade, path sanitisation, 422s). -- **126 frontend tests** (Vitest): the review-panel edit logic, the +- **208 frontend tests** (Vitest): the review-panel edit logic, the schematic-preview live-update wiring, the ReviewStep centrepiece render, the **ExtractProgress** extract-latency UI, the playback-url selection, and the in-browser verify pinned to a **golden manifest produced by the real backend** diff --git a/demo/SUBMISSION.md b/demo/SUBMISSION.md index 40c5ce4..5d248e7 100644 --- a/demo/SUBMISSION.md +++ b/demo/SUBMISSION.md @@ -76,7 +76,7 @@ The honest lesson came from the live path. Our contract tests run against the re - A measured accuracy number (100% on the committed set) instead of a vibe. - A human-in-the-loop review step that is the trust story and the production-readiness story at once. - A sealed AI→human approval receipt: the render seals the exact proposed→confirmed scene diff with a recomputable `decision_digest` that self-voids if the confirmed scene drifts, and the whole case re-verifies from stored bytes through a named-check receipt (`GET /cases/{id}/verify`) plus a detached, self-sealed receipt written as its own B2 object. -- 289 backend tests plus 126 frontend tests, gitleaks, CodeQL and a machine-checkable readiness gate, all runnable with zero credentials. +- 290 backend tests plus 208 frontend tests, gitleaks, CodeQL and a machine-checkable readiness gate, all runnable with zero credentials. ### What we learned Constrain the model to a vocabulary and let deterministic code do the geometry. Label the generative layer loudly. And make honesty a data structure: a sealed manifest that records sources and disclosure by construction, not a promise in the footer. diff --git a/demo/assets/claimscene-07-architecture.png b/demo/assets/claimscene-07-architecture.png index 6901bec..705935e 100644 Binary files a/demo/assets/claimscene-07-architecture.png and b/demo/assets/claimscene-07-architecture.png differ diff --git a/demo/assets/src/claimscene-07-architecture.patch.json b/demo/assets/src/claimscene-07-architecture.patch.json index 63395e5..029391e 100644 --- a/demo/assets/src/claimscene-07-architecture.patch.json +++ b/demo/assets/src/claimscene-07-architecture.patch.json @@ -1,5 +1,5 @@ { - "_comment": "Regenerates demo/assets/claimscene-07-architecture.png by patching only the two stale stat numbers in place. Source of truth for the numbers: the latest green CI run's pytest/vitest summary lines (see README.md '289 offline backend tests' / '126 frontend tests'). Run via: python scripts/patch_gallery_card.py demo/assets/src/claimscene-07-architecture.patch.json -- or push a change to this file and let .github/workflows/render-cards.yml do it.", + "_comment": "Regenerates demo/assets/claimscene-07-architecture.png by patching only the two stale stat numbers in place. Source of truth for the numbers: the latest green CI run's pytest/vitest summary lines (see README.md '290 offline backend tests' / '208 frontend tests'). Run via: python scripts/patch_gallery_card.py demo/assets/src/claimscene-07-architecture.patch.json -- or push a change to this file and let .github/workflows/render-cards.yml do it.", "base_image": "demo/assets/claimscene-07-architecture.png", "output_image": "demo/assets/claimscene-07-architecture.png", "font": "DejaVuSansMono-Bold", @@ -7,17 +7,17 @@ "text_color": [232, 163, 61], "patches": [ { - "note": "backend test count: 181 -> 289 (pytest summary, README.md:190)", + "note": "backend test count: 289 -> 290 (pytest summary, README.md:191)", "erase_box": [85, 568, 148, 596], - "new_text": "289", + "new_text": "290", "anchor_left_x": 92, "ink_top_y": 574, "ink_bottom_y": 593 }, { - "note": "frontend test count: 42 -> 126 (vitest summary, README.md:364)", + "note": "frontend test count: 126 -> 208 (vitest summary, README.md:365)", "erase_box": [192, 568, 254, 596], - "new_text": "126", + "new_text": "208", "anchor_left_x": 200, "ink_top_y": 574, "ink_bottom_y": 593