v0.2.0 / Texas Family Courts / On-prem only

Every docket leaves a trail.

Unseal.legal reads court records the way a careful clerk would — case by case, exhibit by exhibit — and surfaces the structural anomalies, statutory violations, and ethics flags that the courthouse can't afford to see.1

Read the methodology
§ 0 Premise

A docket is a record of motion. Every filing, every order, every continuance has a date and a signature — or, conspicuously, doesn't. Read enough of them and patterns emerge that no individual lawyer in the room would ever notice: a judge who issues TROs that quietly outlive their fourteen-day statutory life;2 ripe motions that wait one hundred and twenty days for a ruling; cases that pass between courts without an order of transfer.

These aren't theories. They are arithmetic. The records exist. The statute exists. The Code of Judicial Conduct exists. What hasn't existed, until now, is the instrument that reads them all together and shows its work.

Unseal.legal is that instrument. It is built for attorneys, for judicial-reform researchers, and for the journalists who already know that something is wrong but cannot prove it in a form a State Commission will read.

§ I Methodology — Four-Layer Validation

Every finding passes through four layers of escalating scrutiny. Each layer produces its own artifact; each artifact is human-auditable; nothing is believed because a model said so.3

  1. Layer 1 · Deterministic

    Matched against the literal text

    Every finding begins as a deterministic match against the literal text of the Texas statute, rule, or canon that governs it. No interpretation, no model judgment — each finding ships with its criteria, its absence checks, and its exclusions, and is fully reproducible from the same docket snapshot every time.

    • TRUE_LIMBO — TRJA 6.1 + TRCP 165a + Canon 3B(9)
    • TRCP 680 — TRO 14-day expiration
    • Canon 3B(1) — Hear-and-decide ripe motions
    • Canon 3B(8) — Ex parte order candidates
  2. Layer 1.5 · Agent Pre-Review

    PDF cross-check

    A pre-review agent reads the underlying PDFs, tests each Layer 1 claim against what the documents actually say, and assembles a marked-up review list. The reviewer never starts from a blank page.

    • Verify absence checks against PDF text
    • Detect unsigned proposed orders (blank signature lines)
    • Detect court/judge transfers from PDF headers
    • Flag docket-PDF discrepancies
  3. Layer 2 · Human Review

    Reviewer of record

    An attorney or paralegal works the review list inside the Workbench. Each claim is confirmed, refuted, partially accepted, or escalated — with the reviewer's annotations preserved next to the original evidence, so every verdict is auditable.

    • Verdict: Confirmed / Refuted / Partial / Escalate
    • Native PDF.js viewer (zoom, search, annotate)
    • Auto-saves to Layer 2 review JSON
    • Generates a corrected evidence brief
  4. Layer 3 · Peer Baseline

    Contextualized, not asserted

    The same checks run against adjacent judges' dockets so that every finding lands in statistical context. A pattern is only meaningful relative to a baseline; the baseline ships with the brief.

    • Flagged-case rate comparison
    • Median disposition-time benchmarks
    • TRO conversion-rate norms
    • Unruled-motion day distributions
§ II Patterns — Four Detector Packs

Fifteen patterns, four statutory and ethical domains. Every pattern is anchored to a specific section of the Texas Family Code, the Rules of Civil Procedure, or the Code of Judicial Conduct — never to a vibe.

A note on redaction The example finding text below is masked the way it would be in a public filing. Scroll past each, and it reveals.

Pack A · Statutory Compliance

4 patterns
  • TRCP_680_TRO_14DAYTRO exceeds 14 days without extension or order.
  • TFC_6502_TEMP_INJMediation referral delays hearing >30 days.
  • TFC_263401_DFPSDFPS one-year dismissal deadline.
  • TFC_156_MOD_FINDModification orders missing required findings.

Pack B · Judicial Ethics

4 patterns
  • CANON_3B1_HEARRipe motions unruled >120 days.
  • CANON_3B8_EX_PARTEOrders entered without opposing-party notice.
  • CANON_3B2_DILIGENCECases languishing past reasonable time.
  • CANON_3C_RECUSALJudge hearing an associate's case.

Pack C · Structural

4 patterns
  • STRUCT_TRUE_LIMBOSix-criteria stuck-case definition.
  • MEDIATION_DEAD_ENDTwo or more mediations, no Final MSA.
  • HEARING_DRIFTThree or more continuances without orders.
  • CHRONIC_RELITIGATIONThree or more post-decree modifications.

Pack D · Data Quality

3 patterns
  • STATUS_MISMATCHAdmin status disagrees with docket.
  • MISSING_FILING_DATENo filing date in export.
  • PARTY_DATA_INCOMPLETERequired party fields blank.
§ III Pipeline — Data to Brief

IIngest IIBuild IIIDetect IVAgent pre-review VHuman review VIJudge review.

I · Ingest
Bring your own docket export — CSV (cases · parties · events) plus the associated PDFs. The pipeline lands them on disk for indexing; no scraping required.
II · Build
build_sqlite.pydockets.db (cases, parties, events, documents, text).
III · Detect
Four detectors emit one evidence JSON per flagged case, per the §4.1 schema (criteria, absence checks, exclusions).
IV · Agent Pre-Review
agent_pre_review.pyreview_todo_<case>.json (PDF-validated claims, agent-emitted).
V · Human Review
Workbench UI → Layer 2 verdicts → generate_brief.py → SCJC-formatted brief.
VI · Judge Review
A final-review agent reads the assembled brief end-to-end — testing each claim for soundness, citation accuracy, and structural integrity — and either signs off or returns the brief to Layer 2 with marked-up revisions.
§ IV Workbench — The Review Instrument

A purpose-built UI for Layer 2 review. Each detector finding arrives at the reviewer as a structured dossier — never a chat transcript, never a wall of model output. Confirm, refute, partial, escalate. Move on.

Dossier · Case ████ TRUE_LIMBO
Detectorabsence_dispositive_0 · conf 99%
ClaimNo Final Decree, Dismissal, Termination, or Nonsuit located in any PDF.
PDF Evidence71 docs scanned · 0 dispositive terms found
Court Transfer███TH → ███TH (20██) — flag for §I.IV peer baseline
Layer 1.5CONFIRMED
Reviewer verdict
Confirmed Refuted Partial Escalate
§ V Deployment — Exhibits A–D
Exhibit A

Docker Compose

# Mounts read-only data,
# writes Layer 2 to named volume.
export DOCKET_DATA_PATH=/path/to/docket_analysis
cd unseal-legal-workbench/docker
docker compose up --build -d
Exhibit B

Data Isolation

volumes:
  # read-only source
  - ./data:/data/ro:ro
  # Layer 2 write target
  - unseal-data:/data/rw

Source data never leaves your network. No cloud API calls.

Exhibit C

Access

# Open workbench
open http://localhost:8000/app/

# API health
curl http://localhost:8000/health

# Run Layer 1.5 agent
docker exec unseal-legal-workbench \
  python /app/backend/agent_pre_review.py --all
Exhibit D

Requirements

  • Docker 24+ / Compose v2
  • 4 GB RAM (8 GB recommended)
  • Linux · macOS · Windows (WSL2)
  • A docket export (CSV + PDFs) to point the pipeline at

Footnotes

  1. v0.2.0 is scoped to Texas family-court dockets in standard CSV + PDF form. The detector packs (§ II) generalize; bring the dockets, get the evidence.
  2. Tex. R. Civ. P. 680 — a temporary restraining order shall not exceed fourteen days unless extended by order, with the extension entered in the cause record.
  3. "Shows its work" is meant literally. Every Layer 1 finding ships with its absence checks and exclusions, every Layer 1.5 claim with the PDF text it was validated against, every Layer 2 verdict with the reviewer's annotation.