Cascadia Portfolio · Matter Ledger
A governed model of the public federal civil docket — 10,960,173 case records — and what happens to one ordinary legal-operations question when the governance is missing.
How long does it take to resolve a contract dispute in federal court?
It is a question a legal-operations team gets asked, and the data to answer it is public. Below, it is answered twice from the same file, retrieved once, on the same day. Neither query contains a mistake anyone would call obvious.
Against the raw file
-742.3 days
32,767 matters behind this figure have a negative duration. Nothing errors, nothing warns, and no null appears anywhere to hint that something is wrong.
Against the governed model
208.0 days
Median, over 1,370,419 closed contract matters. Every figure on this page is re-derived from the frozen source down a second, independently written path before it is published.
| Step | Rule applied | Effect, days | Running answer, days |
|---|---|---|---|
| 1 | correct the encoding | +0.0 | -742.3 |
| 2 | disable quoting | -0.0 | -742.3 |
| 3 | quarantine field-shifted records | +0.0 | -742.3 |
| 4 | exclude pending matters | +1062.0 | 319.8 |
| 5 | one record per matter (reopenings) | -0.1 | 319.6 |
| 6 | the subject-matter control | -0.1 | 319.5 |
| 7 | median, not mean | -111.5 | 208.0 |
Both versions of the trend agree. That is not reassurance — it is the reason this class of error survives review.
| Statistical year | Ungoverned mean, days | Governed median, days |
|---|---|---|
| 2001 | 285.1 | 174.0 |
| 2002 | 327.5 | 223.0 |
| 2003 | 340.4 | 242.0 |
| 2004 | 356.1 | 250.0 |
| 2005 | 331.5 | 227.0 |
| 2006 | 330.7 | 219.0 |
| 2007 | 317.1 | 217.0 |
| 2008 | 304.6 | 218.0 |
| 2009 | 311.4 | 208.0 |
| 2010 | 313.1 | 223.0 |
| 2011 | 310.6 | 214.0 |
| 2012 | 317.9 | 221.0 |
| 2013 | 330.9 | 229.0 |
| 2014 | 321.0 | 217.0 |
| 2015 | 337.3 | 243.0 |
| 2016 | 338.4 | 231.0 |
| 2017 | 330.2 | 224.0 |
| 2018 | 338.6 | 222.0 |
| 2019 | 336.1 | 238.0 |
| 2020 | 355.1 | 243.0 |
| 2021 | 353.7 | 249.0 |
| 2022 | 371.5 | 267.0 |
| 2023 | 357.0 | 257.0 |
| 2024 | 359.1 | 268.0 |
| 2025 | 362.0 | 263.0 |
Suppose the analyst does notice the pending records and reaches for the obvious fix — keep only the rows the source marks as terminated. That gives 332.0 days, and silently discards 637,118 records, 45.0% of the slice, because the status field did not exist before statistical year 2001. Both reasonable choices are wrong, in opposite directions. Only a closure rule that is effective-dated is right, and that rule is not derivable from the data — it comes from a sentence in the publisher's codebook.
Three things, each of which caught something. A written rule
mapping a court docket onto a matter-shaped entity, stating what it loses. Conformed
dimensions loaded from the published codebook rather than written as CASE WHEN
blocks. And five certified measures, each with a definition, a named owner and source
lineage.
| Progress at termination | Group | Matters | Share | Median days |
|---|---|---|---|---|
| other, after issued joined | after issued joined | 254,521 | 18.6% | 274 |
| no court action, before issue joined | before issue joined | 245,289 | 17.9% | 108 |
| order entered, before issue joined | before issue joined | 244,641 | 17.9% | 120 |
| judgement on motion, after issued joined | after issued joined | 188,833 | 13.8% | 279 |
| pretrial conference held, after issued joined | after issued joined | 171,326 | 12.5% | 388 |
| no court action, after issued joined | after issued joined | 134,076 | 9.8% | 274 |
| order decided, before issue joined | before issue joined | 92,363 | 6.7% | 118 |
| after court trial, after issued joined | after issued joined | 13,130 | 1.0% | 654 |
| after jury trial, after issued joined | after issued joined | 12,663 | 0.9% | 641 |
| hearing held, before issue joined | before issue joined | 6,872 | 0.5% | 154 |
| during jury trial, after issued joined | after issued joined | 3,051 | 0.2% | 581 |
| during court trial, after issued joined | after issued joined | 2,302 | 0.2% | 495 |
| request for trial de novo after, after issued joined | after issued joined | 1,352 | 0.1% | 372 |
| Nature of suit | Closed matters | 25th pct | Median | 75th pct |
|---|---|---|---|---|
| Contract Product Liability | 13,652 | 113 | 307 | 636 |
| Stockholder's Suits | 12,266 | 98 | 280 | 636 |
| Insurance | 376,683 | 130 | 265 | 446 |
| Overpayments under the Medicare Act | 5,032 | 106 | 255 | 516 |
| Miller Act | 23,176 | 115 | 238 | 444 |
| Other Contract Actions | 588,952 | 103 | 234 | 462 |
| Negotiable Instruments | 42,084 | 108 | 224 | 438 |
| Marine Contract Actions | 72,809 | 93 | 202 | 399 |
| Franchise | 6,415 | 97 | 200 | 378 |
| Overpayments & Enforcement of Judgments | 15,872 | 64 | 159 | 363 |
| Recovery of Defaulted Student Loans | 166,985 | 68 | 106 | 178 |
| Recovery of Overpayments of Vet Benefits | 46,493 | 61 | 98 | 157 |
| Disposition | Matters | Share |
|---|---|---|
| settled | 421,277 | 30.7% |
| voluntarily | 224,458 | 16.4% |
| default | 169,367 | 12.4% |
| other | 142,391 | 10.4% |
| motion before trial | 107,632 | 7.9% |
| remanded to state court | 52,637 | 3.8% |
| lack of jurisdiction | 46,772 | 3.4% |
| consent | 46,743 | 3.4% |
| statistical closing | 32,851 | 2.4% |
| transfer to another district | 31,660 | 2.3% |
| other | 30,699 | 2.2% |
| want of prosecution | 27,123 | 2.0% |
| jury verdict | 12,200 | 0.9% |
| court trial | 11,419 | 0.8% |
| multi district litigation transfer | 4,585 | 0.3% |
| stayed pending bankruptcy | 3,153 | 0.2% |
| award of arbitrator | 2,171 | 0.2% |
| remanded to U.S. Agency | 1,827 | 0.1% |
| directed verdict | 1,187 | 0.1% |
| appeal affirmed (magistrate judge) | 178 | 0.0% |
| appeal denied (magistrate judge) | 89 | 0.0% |
The frozen model is validated once. The live edge is not: it runs on a schedule, takes a bounded increment from a second source, re-asserts the module's invariants on every run, and reconciles itself against the frozen baseline. The surface below is the module's own record of that, rendered from the machine-readable health file the pipeline writes — not restated by hand.
A surface that has only ever shown green has demonstrated nothing. This pipeline has caught four defects in itself, every one of them a silent failure — nothing errored, and each would have under-collected or mis-stated while reporting success. Each row below is checkable in the repository's history.
| What was wrong | How it surfaced | Fixed in |
|---|---|---|
| The watermark advanced past dockets whose rows were never written — 36 dockets marked done, zero rows persisted | The run's own record showed the watermark had moved while the output file did not exist | 5ef5234 |
| A docket was called complete on the strength of its first page; 29 of the first 36 had more than one | Row counts did not reconcile against the roster | 5ef5234 |
| The request budget read the daily rate-limit window while the hourly window was already exhausted | The run spent itself on 90-second backoffs for requests that could not succeed | 5ef5234 |
| A tie-break in the matter-grain rule depended on row order, which a parallel query engine does not guarantee | The independent re-derivation disagreed with the build by one record in 1,370,419 | 317d827 |
An independent portfolio project by Aaron Robbins. Built from the Federal Judicial Center's Integrated Database — public federal civil case records — frozen at 2026-08-26 and verified by SHA-256 on every build, plus a bounded live increment from CourtListener's RECAP archive. No client data and no proprietary data of any kind. Nothing here is legal advice, and nothing here is an assessment of any identified party's litigation exposure: the model is aggregate by construction and carries no party column.
Source, governance documents and build scripts:
github.com/RobbinsAnalytics/cascadia-matter-ledger.
Every figure on this page is computed at build time from a certified measure; the
independent re-derivation that gates publication is src/validate_measures.py.
Frozen as of 2026-08-26 · health surface generated 2026-08-29 02:44:00 UTC