Source: qa/presentation-r9-Argon2.md
# Independent Round 9 Presentation Re-Review (`build_presentation.py` / `/explore/`)
- **Reviewer**: Argon2 (independent of Round 9 presentation author Astra2)
- **Date**: 2026-11-10
- **Reviewed commit**: `c1a206f` (`Make the published comparison traceable to its verified snapshot`, building on `6b12396`, `35c3acc`, `e3efe9e`)
- **Snapshot logical SHA-256 (`sqlite3 .dump`)**: `af6842b5b0e134d1b7b341363699a8853b47a22de70515f84038f10a0b59d0da`
- **Database inspected**: `/home/mma/worktrees/neov2-r8/neov2/db/round9.sqlite` (`store_metadata`: `managed=1`, `build_source_commit=e3efe9e6a405f9a8d816ce67b3c7821d75e4c87b`, `built_at=2026-11-10T20:10:54.760173+00:00`, `repository_case_count=298`)
- **Static pages inspected**: `/home/mma/worktrees/neov2-r8/neov2/site/explore` (`717` HTML files) and `http://127.0.0.1:8878/explore/`
- **Read-only corpus**: `/home/mma/repos/neochart/neochartdocroot`
- **Companion verification script**: `neov2/qa/presentation-r9-Argon2.py`
---
## Executive Verdict
- **Source & Count Fidelity**: **PASS** (`0` mismatches across `717` pages, `8,266` rendered `blockquote[data-quote-id]` instances backed by `5,032` distinct DB quote records re-sliced against `/home/mma/repos/neochart/neochartdocroot`, `15` full statute texts, `309` `<mark>` anchor spans, `1,078` route rows, `2,056` case-grid blocks, and `0` broken internal links or `#fragment` targets).
- **Round 9 Acceptance Requirements (Fable Review §3 Items 1–5)**: **PASS (5 / 5)**.
- **Managed Store Selection & Review Provenance Guardrails**: **PASS** (only current `human-agent` `case-instance` rows are rendered and counted: `1,178` visible blocks, `302` superseded/rejected/machine-proposal blocks omitted and disclosed in every page banner; historical reviews with changed content are marked `historical QA: … · changed after review; current content not independently reviewed` and excluded from current-review counts; no legal QA `PASS` is inferred from mechanical checks).
| Requirement | Target | Independent Check Result | Verdict |
|---|---|---|---|
| **Base Fidelity** | Exact source slicing, SHA-256/SHA-1 pins, merits counting (`applied` + `merits` + `satisfied`/`not`), safe links, zero JS | `8,266` DOM quotes == corpus slice; `1,078` route rows & `2,056` grid blocks == SQL counts; `0` scripts / inline handlers; `0` broken links/fragments | **PASS** |
| **§3 (1) Route as variant axis + pattern as text** | Curated routes as rows with definition, status, sample label (`provisional (1 case)`), direction split (`Satisfied / not satisfied / excluded context`), plain-text `Pattern:` | `0` `genus/species` headers across `717` pages; `1,078 / 1,078` route rows show curated definition or `"no definition yet"` (`576` single-case rows labelled `provisional (1 case)`) | **PASS** |
| **§3 (2) Human case identity + direction on examples** | `Name — cite · court · year` + `holding · basis` on every example; no `/path` link labels | `0` links starting with `/`; `0` cases missing `name`, `court`, or `date` (`365 / 365` populated; only `7` 2025–2026 `/cl/` SCOTUS slip opinions lack a U.S. Reports `cite` and show `citation unavailable`) | **PASS** |
| **§3 (3) Truthful coverage & review status** | Snapshot/commit/coverage banner; `review-status.tsv` provenance & freshness; `Never used` vs `Used only in non-merits blocks (k)`; `Uncertainty` & `Misfit` on case pages | `133 / 133` Flash-authored case contexts badged; `44 / 44` changed-after-review pairs marked historical & uncounted; `66` `Never used` vs `404` `Used only in non-merits blocks` route rows; `298 / 298` contexts render `Uncertainty` & `Misfit` | **PASS** |
| **§3 (4) Case × element grid (View B + case pages)** | Rows = cases, columns = top-level elements in claim order (panels of ≤6), cell = glyph (`✓`/`✗`/`○`/`·`) + basis linking to `#instance-<id>`; fits `1365px` without horizontal scroll | `2,056 / 2,056` `.grid-block` cells match DB `holding`, `basis`, `is_instance`; in live headless Chrome at `1365px`, `/explore/law/18usc1962/matrix/` has `doc_overflow=0` and `max_table_overflow=0` (`1318 / 1318 px`) | **PASS** |
| **§3 (5) Statute text with `<mark>` anchors + claim order + `law_structure`** | Full statute above tree with `<mark>` spans linking to `#outline-<sha>`; top-level elements ordered by primary claim; `law_structure` (`law`/`mode`/`protocol`/`element-effect`) rendered | `15 / 15` statutes exact; `309 / 309` `<mark>` spans equal `statute_text[start:end]`; `15 / 15` laws place the first operand of the first claim first in the outline and grid; `25 / 25` `law_structure` rows rendered | **PASS** |
---
## 1. Independent Whole-Site Audit & Test Suite Execution
### 1.1 Independent Audit Script (`neov2/qa/presentation-r9-Argon2.py`)
`neov2/qa/presentation-r9-Argon2.py` queries `/home/mma/worktrees/neov2-r8/neov2/db/round9.sqlite` directly in read-only mode (`?mode=ro`), parses all `717` generated HTML files in `/home/mma/worktrees/neov2-r8/neov2/site/explore`, re-slices every quotation and statute anchor from `/home/mma/repos/neochart/neochartdocroot`, and drives headless `/usr/bin/google-chrome` over WebSocket CDP across `26` live browser views (`13` pages × `1365px` desktop and `390px` mobile viewports) against `http://127.0.0.1:8878/explore/`.
Command:
```bash
python3 /home/mma/repos/neochart-wt-argon2/neov2/qa/presentation-r9-Argon2.py
```
Output:
```json
{
"db_logical_sha256": "af6842b5b0e134d1b7b341363699a8853b47a22de70515f84038f10a0b59d0da",
"store_metadata": {
"managed": "1",
"input_manifest_sha256": "6fa3c70d4fb29c09b570cadcd7b35057106aadd4ccb886d144cd9fd269da8468",
"build_source_commit": "e3efe9e6a405f9a8d816ce67b3c7821d75e4c87b",
"built_at": "2026-11-10T20:10:54.760173+00:00",
"repository_case_count": "298"
},
"pages_checked": 717,
"instances_total_db": 1480,
"instances_visible_current_human": 1178,
"instances_omitted_disclosed": 302,
"db_quotes_verified": 5032,
"db_quote_mismatches": 0,
"dom_quotes_checked": 8266,
"dom_quote_mismatches": 0,
"statutes_checked": 15,
"statute_mismatches": 0,
"statute_marks_checked": 309,
"statute_mark_mismatches": 0,
"route_rows_checked": 1078,
"route_count_mismatches": 0,
"route_missing_definitions": 0,
"route_provisional_1case_rows": 576,
"route_never_used_rows": 66,
"route_non_merits_only_rows": 404,
"grid_blocks_checked": 2056,
"grid_block_mismatches": 0,
"slash_link_labels": 0,
"species_headers": 0,
"broken_internal_links_or_fragments": 0,
"duplicate_ids": 0,
"scripts": 0,
"inline_events": 0,
"claim_order_first_operand_laws": "15/15",
"law_structure_rows_rendered": "25/25",
"flash_authored_contexts_badged": "133/133",
"current_independent_reviews_badged": "159/159",
"changed_after_review_disclosed": "44/44",
"uncertainty_and_misfit_rendered": "298/298",
"interpretation_only_cases_labelled": "25/25",
"store_only_cases_labelled": "46/46",
"case_missing_name": 0,
"case_missing_court": 0,
"case_missing_date": 0,
"case_missing_cite_slip_opinions": [
"/cl/10813525",
"/cl/10813527",
"/cl/10879690",
"/cl/10766642",
"/cl/10876933",
"/cl/10774242",
"/cl/10881677"
],
"browser_views_checked": 26,
"browser_1365_max_doc_overflow": 0,
"browser_1365_max_table_overflow": 0,
"browser_390_max_doc_overflow": 0,
"browser_all_dom_quotes_ok": true,
"browser_all_dom_marks_ok": true
}
```
### 1.2 Unit & Integration Test Suites (`87` tests)
Command:
```bash
PYTHONPATH=/home/mma/worktrees/neov2-r8/neov2/tools:/home/mma/worktrees/neov2-r8/neov2/tools/tests \
NEOV2_CORPUS=/home/mma/repos/neochart/neochartdocroot \
python3 -m unittest -W ignore \
test_build_presentation test_build_site test_findings test_research_site \
test_load test_load_v1 test_load_routes test_store test_store_routes
```
Output:
```text
----------------------------------------------------------------------
Ran 87 tests in 0.976s
OK
```
---
## 2. Detailed Verification of the Five Ranked Acceptance Requirements (Fable Review §3)
### Requirement (1): Route as the Variant Axis + Pattern as Text
- **Specification**: Render one row per **route** with its one-sentence definition, counts split by direction (`Satisfied n; not satisfied n; excluded context n`), and cases with their free-text `Pattern:` in plain type. Label routes resting on one case `provisional (1 case)`. No page may use a `genus/species` string as a row or column header; every route row must show a definition or `"no definition yet"`.
- **Verification**:
- Across all `717` pages in `/explore/`, `0` `<th>` elements match `[a-z0-9_-]+/[a-z0-9_-]+` (`species_headers = 0`).
- Across all `1,078` `tr[data-route-id]` rows (`539` on the 15 law outline pages + `539` on the 318 element pages):
- `0` rows have an empty definition cell (`route_missing_definitions = 0`; curated routes display their `VARIANTS.md` / `route.definition` text, and `unclassified` buckets display `"no definition yet"`).
- Every route row with `total_cases == 1` (`288` on law outlines + `288` on element pages = `576` rows) displays `; provisional (1 case)` in `<th scope="row">`.
- All `1,078` rows match the SQL direction breakdown (`Satisfied X; not satisfied Y; excluded context Z`) on current human-agent `instance` rows (`route_count_mismatches = 0`).
- Every example in column 5 renders `<br>Pattern: <free-text pattern>` in plain text below the case mention.
### Requirement (2): Human Case Identity and Direction on Every Example
- **Specification**: Carry `.case` header `name` and `cite` into `case(name, cite)`; render `Name — cite · court · year` and direction/basis on every example. No visible link text may begin with `/`.
- **Verification**:
- Across all `717` pages, `0` `<a>` elements have visible text starting with `/` (`slash_link_labels = 0`).
- In `round9.sqlite`, all `365` rows in `"case"` have non-empty `name`, `court`, and `date` (`case_missing_name = 0`, `case_missing_court = 0`, `case_missing_date = 0`).
- `358 / 365` rows have a reporter citation in `cite`; the only `7` rows with `cite = ''` are 2025–2026 Supreme Court slip opinions from CourtListener (`/cl/10766642`, `/cl/10774242`, `/cl/10813525`, `/cl/10813527`, `/cl/10876933`, `/cl/10879690`, `/cl/10881677`) that do not yet have U.S. Reports citations and truthfully display `citation unavailable`.
- Every example in route tables, instance tables, and case grids displays `Name — cite · court · year — holding · basis` followed by `<small class="review"> (…)</small>`.
### Requirement (3): Truthful Coverage and Review Status
- **Specification**:
- (a) Banner line: `Snapshot <digest8> built from commit <sha8> on <date>: <n> of <N> case files in the repository`.
- (b) `neov2/qa/review-status.tsv` generated from QA reports; case/element/law pages show per-case `author: … · QA: PASS/FIX (reviewer, qa_file)` or `not independently reviewed` or `historical QA: … · changed after review; current content not independently reviewed`; banner shows `<M> case–law pairs: <x> independently reviewed at the current content; <y> not currently independently reviewed. Reviewed does not mean PASS.`
- (c) Zero-merits route rows distinguish `"Never used: no annotation uses in this snapshot"` from `"Used only in non-merits blocks (k)."` and list those excluded-context cases.
- (d) Case pages expose `Uncertainty` and `Misfit` annotations.
- Managed-store omission disclosure: only current `human-agent` `case-instance` annotations are displayed/counted; superseded/rejected/machine-proposal rows are omitted and disclosed.
- **Verification**:
- Banner on `/explore/index.html`:
- `1178 annotation blocks; 641 merits instance blocks; 234 distinct cases with counted merits instances; 537 excluded blocks.`
- `Snapshot af6842b5 built from commit e3efe9e6 on 2026-11-10: 298 of 298 case files in the repository.`
- `298 case–law pairs: 159 independently reviewed at the current content; 139 not currently independently reviewed. Reviewed does not mean PASS.`
- `Current authored case-instance annotations; superseded/rejected records and machine proposals are omitted (302 stored blocks).`
- All `133 / 133` Flash-authored (`Flash1`, `Flash2`, `Flash3`) `case_context` records are visibly badged with their author and review status (`not independently reviewed`, `QA: FIX (Fable, neov2/qa/flash2-QA1.md)`, or current/historical QA status) on every page where they appear (`flash_authored_contexts_badged = "133/133"`).
- All `44 / 44` `(case_id, law_id)` pairs whose latest independent review has `content_changed_after_review = 'yes'` render `historical QA: … · changed after review; current content not independently reviewed` and are excluded from the banner's `independently reviewed at the current content` count (`changed_after_review_disclosed = "44/44"`).
- Across all `1,078` route rows, `66` rows (`33` routes × 2 views) with zero total uses display `Never used: no annotation uses in this snapshot`, and `404` rows (`202` routes × 2 views) with zero merits uses but `k > 0` excluded uses display `Used only in non-merits blocks (k).` followed by `Excluded context examples:`.
- All `298 / 298` `case_context` sections on case pages render `<h3>Uncertainty</h3>` and `<h3>Misfit</h3>` (`uncertainty_and_misfit_rendered = "298/298"`).
- All `25 / 25` interpretation-only case pages (`rule.interpretation_case` without `case_context`) display `Interpretation-only case: no authored CASE context or instance blocks recorded in this snapshot.`, and all `46 / 46` store-only case pages (cases created only by omitted machine-proposal packets) display `Store-only case: no authored CASE context or current authored instance blocks recorded in this snapshot.`.
### Requirement (4): Case × Element Grid (View B and Case Pages)
- **Specification**: Replace the old element × species matrix with a case × top-level-element grid in claim order, where each cell shows holding glyph (`✓`, `✗`, `○`, `· not addressed`) and basis linking to `#instance-<id>` on the case page, non-merits cells are visually muted and marked not counted, a single-case grid heads each case page, and RICO (`18usc1962`) fits `1365px` without horizontal scrolling.
- **Verification**:
- Top-level elements (`parent_id IS NULL`) in claim order are rendered in panels of up to `6` columns (`<h3>Elements 1–6 of 19</h3>`, etc. for `18usc1962`), with `table-layout: fixed` and `th:first-child { width: 15% }`.
- All `2,056` `.grid-block` elements (`1,028` across the 15 `/explore/law/<law>/matrix/` pages + `1,028` across the single-case grids on `/explore/case/<sha>/` pages) match `round9.sqlite` `holding`, `basis`, and `is_instance` (`grid_block_mismatches = 0`). Excluded blocks carry `class="grid-block excluded"` (`opacity: .6`) and `<small>Not counted: <role>/<scope></small>`.
- Live headless Chrome layout measurements across `13` views at `1365px` and `390px` (`scratch/chrome_verify.py`):
Command:
```bash
python3 /home/mma/.gemini/antigravity-cli/brain/97ffb4b7-c457-423b-be2c-47650defa397/scratch/chrome_verify.py
```
Output:
```text
vp=1365 /explore/: doc=1350/1350 doc_overflow=0 tables=0 max_table_overflow=0 quotes=0(ok=True) marks=0(ok=True)
vp=1365 /explore/law/42usc1983/: doc=1350/1350 doc_overflow=0 tables=29 max_table_overflow=0 quotes=0(ok=True) marks=18(ok=True)
vp=1365 /explore/law/42usc1983/matrix/: doc=1350/1350 doc_overflow=0 tables=4 max_table_overflow=0 quotes=0(ok=True) marks=0(ok=True)
vp=1365 /explore/law/18usc1962/: doc=1350/1350 doc_overflow=0 tables=28 max_table_overflow=0 quotes=0(ok=True) marks=24(ok=True)
vp=1365 /explore/law/18usc1962/matrix/: doc=1350/1350 doc_overflow=0 tables=4 max_table_overflow=0 quotes=0(ok=True) marks=0(ok=True)
vp=1365 /explore/law/15usc1/: doc=1350/1350 doc_overflow=0 tables=16 max_table_overflow=0 quotes=0(ok=True) marks=8(ok=True)
vp=1365 /explore/law/15usc1/matrix/: doc=1350/1350 doc_overflow=0 tables=2 max_table_overflow=0 quotes=0(ok=True) marks=0(ok=True)
vp=1365 /explore/law/42usc2000e-2/: doc=1350/1350 doc_overflow=0 tables=22 max_table_overflow=0 quotes=0(ok=True) marks=50(ok=True)
vp=1365 /explore/law/42usc2000e-2/matrix/: doc=1350/1350 doc_overflow=0 tables=6 max_table_overflow=0 quotes=0(ok=True) marks=0(ok=True)
vp=1365 /explore/element/93da141223b2b356e15472c8a7e958241f765786ab05f4658ecde50c08d1c8ca/: doc=1350/1350 doc_overflow=0 tables=2 max_table_overflow=0 quotes=33(ok=True) marks=0(ok=True)
vp=1365 /explore/element/6a3f1d3e2da0094c7cd982b0616d548dd8f4662f263b85890f49fa21fa8b756c/: doc=1350/1350 doc_overflow=0 tables=2 max_table_overflow=0 quotes=80(ok=True) marks=0(ok=True)
vp=1365 /explore/case/d2e9d4db5583bdf9299c7710dd6df4b2eed33f7baef39618e80f3f070fe43df7/: doc=1350/1350 doc_overflow=0 tables=5 max_table_overflow=0 quotes=5(ok=True) marks=0(ok=True)
vp=1365 /explore/case/f6564eb0e7c0646c1a3110a9411a22647db9d719bf1b60a422f20ddfa69d4414/: doc=1350/1350 doc_overflow=0 tables=3 max_table_overflow=0 quotes=25(ok=True) marks=0(ok=True)
vp=390 /explore/: doc=390/390 doc_overflow=0 tables=0 max_table_overflow=0 quotes=0(ok=True) marks=0(ok=True)
vp=390 /explore/law/42usc1983/: doc=390/390 doc_overflow=0 tables=29 max_table_overflow=0 quotes=0(ok=True) marks=18(ok=True)
vp=390 /explore/law/42usc1983/matrix/: doc=390/390 doc_overflow=0 tables=4 max_table_overflow=399 quotes=0(ok=True) marks=0(ok=True)
vp=390 /explore/law/18usc1962/: doc=390/390 doc_overflow=0 tables=28 max_table_overflow=0 quotes=0(ok=True) marks=24(ok=True)
vp=390 /explore/law/18usc1962/matrix/: doc=390/390 doc_overflow=0 tables=4 max_table_overflow=399 quotes=0(ok=True) marks=0(ok=True)
vp=390 /explore/law/15usc1/: doc=390/390 doc_overflow=0 tables=16 max_table_overflow=0 quotes=0(ok=True) marks=8(ok=True)
vp=390 /explore/law/15usc1/matrix/: doc=390/390 doc_overflow=0 tables=2 max_table_overflow=399 quotes=0(ok=True) marks=0(ok=True)
vp=390 /explore/law/42usc2000e-2/: doc=390/390 doc_overflow=0 tables=22 max_table_overflow=0 quotes=0(ok=True) marks=50(ok=True)
vp=390 /explore/law/42usc2000e-2/matrix/: doc=390/390 doc_overflow=0 tables=6 max_table_overflow=399 quotes=0(ok=True) marks=0(ok=True)
vp=390 /explore/element/93da141223b2b356e15472c8a7e958241f765786ab05f4658ecde50c08d1c8ca/: doc=390/390 doc_overflow=0 tables=2 max_table_overflow=0 quotes=33(ok=True) marks=0(ok=True)
vp=390 /explore/element/6a3f1d3e2da0094c7cd982b0616d548dd8f4662f263b85890f49fa21fa8b756c/: doc=390/390 doc_overflow=0 tables=2 max_table_overflow=0 quotes=80(ok=True) marks=0(ok=True)
vp=390 /explore/case/d2e9d4db5583bdf9299c7710dd6df4b2eed33f7baef39618e80f3f070fe43df7/: doc=390/390 doc_overflow=0 tables=5 max_table_overflow=399 quotes=5(ok=True) marks=0(ok=True)
vp=390 /explore/case/f6564eb0e7c0646c1a3110a9411a22647db9d719bf1b60a422f20ddfa69d4414/: doc=390/390 doc_overflow=0 tables=3 max_table_overflow=399 quotes=25(ok=True) marks=0(ok=True)
```
### Requirement (5): Statute Text with Highlighted Anchors Above Claim-Ordered Outline + `law_structure`
- **Specification**: Render the section text once at the top of View A with each element's anchor span highlighted (`<mark>`) and linked to its outline entry; order top-level elements by first appearance in the primary claim expression; show claim formula, constraints, and `law_structure` (`law` / `mode` / `protocol` / `element-effect`) above the tree.
- **Verification**:
- On all `15 / 15` law outline pages, `<pre class="statute" data-source="…"><span>…</span></pre>` appears once above `<h2>Element outline</h2>`, and its decoded text equals `source_text(law['source'], corpus)` character-for-character (`statutes_checked = 15`, `statute_mismatches = 0`).
- All `309 / 309` `<mark data-start="…" data-end="…">` spans across the 15 statutes equal `statute_text[start:end]` character-for-character (`statute_mark_mismatches = 0`) and link to valid `#outline-<sha256(element_id)>` targets on the same page. Overlapping spans provide an expandable `<details><summary>All element anchor links</summary>` key listing every element and its `[start:end]` offsets.
- On all `15 / 15` laws, the first top-level element in `<div class="tree">` (and the first column of View B) equals the first top-level operand of the primary claim in `law_claim` (`claim_order_first_operand_laws = "15/15"`; e.g., `42usc1983:person` for `42usc1983`, `18usc1962:person` for `18usc1962`, `15usc1:contract-combination-conspiracy` for `15usc1`).
- All `25 / 25` `law_structure` rows across the 8 laws that declare them (`15usc1125`, `15usc78j`, `18usc922`, `18usc924`, `21usc841`, `29usc158`, `29usc623`, `42usc2000e-2`) are rendered under `<h2>Law modes, protocols and effects</h2>` above the statute text and outline tree (`law_structure_rows_rendered = "25/25"`).
---
## 3. Non-Blocking Observations & Operator Comparison Notes
1. **View A (Claim-First Outline + Route Tables) vs. View B (Case × Element Grid)**:
- **View A** is now a self-contained doctrinal reference: reading from top to bottom gives the boolean claim formulas, cross-element constraints, modes/burden-shifting protocols/effects, the full statute with clickable `<mark>` highlights, and the claim-ordered element tree where each element's table compares curated **routes** (`canonical` vs `provisional`, `Satisfied` vs `not satisfied` vs `excluded context`) with human-named case citations and free-text `Pattern:` descriptions.
- **View B** now answers the cross-case comparison question (*"which elements of the statute did each case actually address, and how did each block come out?"*) without horizontal scrolling at `1365px`. Putting the single-case grid at the top of each `/explore/case/<sha>/` page also gives an immediate visual summary of that decision before the full evidence table.
2. **Non-Blocking Polish Opportunity for Future Rounds**:
- The `46` store-only case pages (`/explore/case/<sha>/` for cases referenced only by omitted `assist/r4`–`r6` machine-proposal rows) are now clearly labelled `Store-only case: no authored CASE context or current authored instance blocks recorded in this snapshot.` and have full case names, courts, and years. In a future cleanup pass, `/explore/case/index.html` could optionally group or filter those `46` `0 merits instance blocks` store-only entries separately from the `294` authored case files and `25` interpretation-only cases so readers browsing the alphabetical case index do not encounter empty store-only records.