Use these commands when validating the HTML rollout end to end.
For downstream rollout, dual-run, and rollback behavior around routed-family
consumption, see docs/HTML_CONSUMER_CUTOVER.md.
Run the full repository verification surface, including tests and clippy:
bash scripts/html_verify.shThis is the non-interactive command intended for CI or local pre-merge checks.
Verify that selector-anchored HTML regions emit only bounds/indices and that raw HTML page-break boundaries remain addressable without adding a synthesized page model:
bash scripts/selector_region_e2e.shThe wrapper writes artifacts under artifacts/html-e2e/region/selector/, uses
the existing HTML e2e harness, and records region_table_count,
region_page_spans, region_as_of_dates, and
region_byte_offsets_present in run.summary.json.
Compare selector-bounded Schedule of Investments regions against legacy SOI
metrics and emit mismatch details under artifacts/html-e2e/parity/<label>/.
Prepare a JSONL file with one row per filing. The committed CI fixture uses
period_end, table_count, page_span, and holding_row_count:
{"path":"/abs/path/to/filing.html","period_end":"2025-09-30","table_count":1,"page_span":[5,5],"holding_row_count":1}Then run:
bash scripts/soi_parity.sh \
--definitions-dir rules \
--legacy-results /tmp/soi-legacy.jsonl \
--artifact-root artifacts/html-e2e \
--label soi-parityFor an external real-filing corpus, pass --manifest /path/to/corpus.jsonl and
--legacy-command-template 'python3 /path/to/extract_schedule_sections.py {path}'.
The command must emit a JSON object with the same metric keys.
Compare fingerprint family routing to a legacy route source and emit mismatch
artifacts under artifacts/html-e2e/parity/<label>/.
Prepare a JSONL file with one row per document:
{"path":"/abs/path/to/filing.html","legacy_family":"ares"}Then run:
bash scripts/html_parity_audit.sh \
--definitions-dir rules \
--legacy-results /tmp/legacy-routes.jsonl \
--artifact-root artifacts/html-e2e \
--label committed-fixturesIf the full 40+ filing corpus lives outside the repository, point the harness at
an external manifest and invoke the existing Python router with a command
template. {path} is replaced with the absolute document path for each file.
bash scripts/html_parity_audit.sh \
--definitions-dir rules \
--manifest /data/bdc/html_corpus.jsonl \
--inventory tests/fixtures/html/inventory.json \
--legacy-command-template 'python /path/to/fingerprint_schedule_family.py {path}' \
--artifact-root artifacts/html-e2e \
--label external-corpus \
--diagnose-mismatchesmatrix/<label>/— raw fingerprint matrix run produced by the shared HTML e2e harnessparity/<label>/parity.summary.json— overall parity counts and artifact pointersparity/<label>/parity.mismatches.jsonl— file-level mismatches with observed family, legacy family, child-routing status, and diagnose artifact pathsparity/<label>/legacy.routes.jsonl— normalized legacy routing records used for the comparison
stderr.events.json— parsed--progressstream fromfingerprint; inspect this when a run appears to stall or when warning counts increase unexpectedly.diagnostics.json— normalizedfingerprint.diagnosticspayloads for each stdout record, including attempted fingerprints, first failed assertions, near misses, and short-circuit context.fixture.summary.jsonl— one row per document withroute_resolved,child_routing_status,selected_child_fingerprint_id,matched_child_fingerprint_ids, refusal codes, and skip status.family.summary.json— aggregated routed-family counts keyed by expected family and selected fingerprint ID.run.summary.json— top-level counters such asambiguous_route_count,selected_child_count,progress_event_count,warning_event_count, and the artifact file manifest for the run.
For mismatch triage, start with parity.summary.json, open the corresponding rows in
parity.mismatches.jsonl, then follow any diagnose_artifact_dir pointer into the
shared harness artifacts. The quickest signal is usually:
fixture.summary.jsonlto see whether the route failed, skipped, or became ambiguous.diagnostics.jsonto identify which child assertion lost the route.stderr.events.jsonto confirm whether parser warnings or progress anomalies happened during the run.