Skip to content

v2026.09.25 — counts and page text for assistants; the independent graders' fixes; JSON shape 3

Choose a tag to compare

@camrex camrex released this 17 Sep 09:39

Two new MCP tools, the independent graders' fixes, and migrations 0030–0032 (PRs #34, #35, #36, #37, #38, #39, #40).

A migrating release (schema 29 → 32): deploy behind the wall (infra/deploy/README.md § Deploying a migrating release). Roll back with a Litestream restore, not a tag. JSON shape 3: a sheet's last_checked now means the last poll, and last_new_entry holds what last_checked used to mean. It is announced on /data.

What changes

  • MCP count_filings (#38) counts filings by the Board's own filing type, prefix and filed-date range, and how many of those proceedings also hold a second type.
    • It counts distinct filings and proceedings as entered.
    • It names unfinished months, including months no wave has begun.
    • It says what it did not count.
  • MCP read_page, and a matched passage on each page search hit (#38, ADR 0022 addendum). An assistant may read page text on a user's request.
    • Each answer carries who read the page, the Board's file, the scan, the operator's caveat and the licence line.
    • Engine-read pages say they carry OCR errors.
  • The independent graders' first fixes (#39):
    • Decision summaries and deciding bodies are passed through MCP.
    • A .json miss answers with JSON.
    • The /api example is held to the live shape by a test.
    • Wording an assistant repeats is corrected: 1 filing, last filed …, the note at the 100-entry cap, the hedge on a comment miss.
    • README and CONTRIBUTING describe the live project.
  • The operator's nine decisions (#40):
    • robots.txt: ChatGPT-User, Claude-User and Perplexity-User may read party and text pages. Indexers and training crawlers stay refused, and /search stays refused to every named agent.
    • Decision dates are labelled served, JSON entries gain date_kind, and the cite line reads (STB served Sept. 3, 2026).
    • "Last checked" means the last poll (JSON shape 3).
    • Webhooks add a timestamped signature alongside the unchanged one, and the payload carries shape_version.
    • Cite blocks carry an access date and the newest kept archive.
    • /coverage, /stats and early sheets say the early years are thin because the Board's own table is.
    • The CC0 label covers the compilation and the Board's own fields; filings and comments are reproduced as filed.
    • The methodology's repeated-filer sentence matches the rule.
  • Migrations 0030–0032 (#35, #37, #36): the veto trigger, per-page OCR failure records, and the router's verdict (page_route). Their addenda were accepted 2026-09-16.
  • The tabular fleet pass (#34): HunyuanOCR-1.5 workers, plus the worker fixes. Fleet code only; the running pass picks it up when the fleet is redeployed.

Verified before release

  • Rehearsed 2026-09-17 in v2026.09.24's image (SQLite 3.46.1) on a Litestream restore of production taken at 09:35 UTC, with main mounted.
    • The 0030 pre-check returned 0 rows.
    • 29 → 32 in 11.4 s: foreign keys clean, quick_check ok, row counts unchanged across capture, event, docket, filing, decision_record, enviro_comment, document and document_text (1,685,851).
    • The site served from the migrated store, every page checked in under 350 ms.
    • On real data: JSON shape 3 with the true last poll, the early-years counts (1996: 4 … 2001: 456 · 2002: 2,382), the UP-SP sheet's record-begins line, the served cite line, the JSON 404 and the robots split.
    • All six MCP tools answered. count_filings gave 201 AB proceedings holding a Consummation Notice and a trail-use filing (59 ms), and read_page read Decision 46314 from a "trackage rights Peoria" search.
  • Reviews:
    • /code-review at medium, high and low levels on each PR, with every finding fixed or dated in docs/deferred.md.
    • /security-review on the MCP tools and the webhook signing: no findings.
    • Copilot's findings on #34, #38 and #40 fixed. Codex was at its usage limit throughout.
  • Tests and CI: 998 tests pass; CI green on every PR.

Deployed 2026-09-17 behind the wall, 09:41:23–09:44:52 UTC (restore point 09:41:23Z, Litestream generation 073494ca664fa87f).

  • The 0030 pre-check returned 0 rows on the live store at schema 29.
  • migrate took the store 29 → 32. /health reports v2026.09.25, schema 32, and ingest polled on the new release at 09:44:01.
  • Checked against the live store before the wall came down: foreign keys clean; JSON shape 3; the sheet, coverage and served-cite changes; all six MCP tools, including count_filings (201) and read_page.
  • From outside after: every page checked returns 200, /filing/nope.json returns a JSON 404, and MCP lists six tools.