4 August 2026 · Jayesh Sahasi
Twenty-one corrections in this corpus. One of them fixed a spelling mistake.
What filers actually correct, counted from the filings, across seven state commissions.
On 9 September 2025 the Kentucky Attorney General and KIUC filed Lane Kollen's direct testimony in case 2025-00113. Page 95 of that testimony, PDF page 98:
7 their request for CPCN for Brown BESS. The Companies agree to take necessary
ky-2025-00113-kollen-direct-testimony-original.txt, line 4,608 · source PDF at psc.ky.gov
Two hundred and twenty-three PDF pages later, the same file reproduces the settlement that sentence describes:
1.2. Withdrawal of Cane Run Battery Energy Storage System ("BESS") CPCN
Request. The Utilities will withdraw their request for the Cane Run BESS without prejudice in
Same file, lines 13,566 and 13,568, PDF page 321. The two passages sit 670,104 characters apart in one 378-page filing.
Brown and Cane Run are different generating stations. Three weeks later:
Written Direct Testimony of their Witness Mr. Lane Kollen. The corrections are found on page 95 of Mr. Kollen’s testimony, and changes original references to “Brown BESS” to now read “Cane Run BESS.”
ky-2025-00113-kollen-correction-cover-letter.txt, lines 25–27 · source PDF at psc.ky.gov
Nobody needed the corrected version to find that. Page 95 says Brown BESS; section 1.2 of the settlement bound into the same PDF says Cane Run BESS; they describe one withdrawal. The document contradicted itself on the day it was filed. That is the pattern, and it is worth counting.
What I counted, and how
The corpus behind this site holds 102 public filings from eight jurisdictions, each with a provenance record naming its source URL, docket, filer, filing date and hash. Twenty of those filings correct an earlier one. One of the twenty, a Georgia Power refiling, corrects two quarterly reports at once, so there are twenty-one corrections, across nine dockets and seven state commissions.
That is the whole population, and the rule that makes it is one you can run: a filing that corrects an earlier filing whose date is on the record. For seventeen of the twenty-one the earlier version is in the corpus too. For the other four the date comes from the correction's own covering letter. Three corrected filings in the corpus are out because neither holds — the Indiana consumer counsellor's corrected exhibits for Alvarez, Gruca and Wright carry no notice saying what moved and no date for what they replace. Two more are out because they are not corrections: Duke refiling two reports into a new docket, and Ameren's amended stipulation, which is a renegotiated agreement.
To read each pair I split the file on newline, collapsed runs of whitespace on every line and
stripped it, ran difflib.SequenceMatcher over the two line lists, and took every
opcode that is not equal as one region. Then I read the regions. Where the filer's
own notice says what changed, that governs and I quote it below.
import difflib, re
def lines(path):
text = open(path, encoding="utf-8").read()
return [re.sub(r"\s+", " ", l).strip() for l in text.split("\n")]
a = lines("data/real/mo-ET-2025-0184-michels-direct-testimony-original-public.txt")
b = lines("data/real/mo-ET-2025-0184-michels-substitute-direct-testimony-public.txt")
ops = difflib.SequenceMatcher(None, a, b, autojunk=False).get_opcodes()
print(len(a), sum(1 for op in ops if op[0] != "equal"))
Prints 2177 3. Every line number on this page is a one-based index into
text.split("\n"). Do not use splitlines(): these files keep the PDF's
form feeds, so splitlines() counts each page break as a line and shifts every
number. In the Kollen file that is a drift of 377.
Sorting twenty-one corrections into kinds is a reading job, not a script, so the chart below
is my judgement. Every filing behind every bar is named in this piece or in
data/real/, so you can disagree with a specific row.
What the categories hold
A pointer that moved — 2
Ameren Missouri's witness Michels filed direct testimony on 14 May 2025 and a
substitute five days later. The whole difference is three page footers citing the rule that keeps
each page confidential: the original cites one authority three ways,
20 CSR 4240-2.135(2)(A)4,8 once and 20 CSR 4240-2.135(2)(A) twice, and
the substitute makes all three (2)(A)4. Nothing else in 2,177 lines moved. In Mark
Ellis's Utah errata two exhibit renumberings cross over — 2.2D becomes 6.1D, 2.1D becomes
6.2D — so the obvious rule, swap the 2 for a 6, gets both wrong.
A number or a figure that was wrong — 6
NIPSCO filed its 2021 performance metrics report on 1 July 2022 and a revision 46 days later:
After filing the 2021 Performance Metrics Report, NIPSCO discovered that the “DART” reported for 2020 and 2021 in Figure 2 on page 5 were incorrect. Previously reported as 1.4 and 2.06, respectively, the numbers should have been 1.59 and 1.69, respectively.
in-44688-nipsco-compliance-filing-pmc-update-v2-revision.txt · source PDF at iurc.portal.in.gov
As reported, the injury rate rose 47 per cent in a year. As corrected, 6. The sentence that explains the rise is not touched. It reads the same in both filings: “NIPSCO’s DART rate was impacted by the number of COVID-19 related cases requiring employees to be off work while recovering.” The revision moved the figure and the data appendix under it and left the prose to argue a 47 per cent jump that the new numbers do not show.
The plainest of the six is Virginia. Dominion's application went in on 31 March
2025; 35 days later an errata said a digit had dropped out of Figure 1 on page 5 of Stan
Blackwell's testimony, and billed sales to data centres for 2024 should read
24,248,543, not 4,248,543. The errata's own page prints a Gross Change of
660 per cent against a 2013 figure of 3,191,987, which is what 24,248,543 gives. The dropped-digit
version gives 33. I cannot tell you whether the original printed 660 per cent beside 4,248,543,
because the original application is not in this corpus and I have not opened it.
The redaction step broke it — 4
Four corrections exist only because somebody made a public version of a confidential document. Georgia Power's change flags, twice, are below. Virginia Staff pulled back three pages of Daniel Long's testimony that had been “erroneously designated as confidential”; Dominion's first Miller errata flipped three more the same way, on two other witnesses' pages. None of these is a mistake in the work. They are mistakes in the copy the public gets.
The basis a figure was counted on — 1
Billie LaConte's Utah testimony sets its own convention on page 2, then drops it:
39 x RMP is seeking to recover $185.7 million (total Company) or $82 million 40 (Utah-allocated) for ELI in the test year.1 RMP seeks recovery of its test-year […] 175 of $112.1 million in ELI expense for RMP’s 2023-2024 policy period.9 I understand […] 192 deferred ELI premium by $30.9 million.
ut-24-035-04-laconte-phase3-direct-testimony-original.txt, testimony
lines 39–40, 175 and 192. The bullet on line 39 extracts as x; that is the
PDF, not a typo ·
source
PDF at pscdocs.utah.gov
Eighteen days later the amendment adds (total Company) at line 175,
inserts a sentence giving the Utah share — 44.258 per cent, or $49.6 million — and turns
$30.9 million into $5.8 million. Her covering letter gives the reason: the
recommendation “needed to be updated to reflect only the Utah-allocated amount.”
Table 1 and the 0.86 per cent midpoint the sentence rests on are unchanged in both versions; only
the answer moves. The inserted sentence also pushes every numbered line from 184 down by one and
renumbers footnotes 10 to 15 as 11 to 16, so every line cite written before 25 February now points
one off.
Something left out — 4
Missouri's global stipulation came back two days later as CORRECTED, carrying the EXHIBIT A rate table it had shipped without. Duke's spring 2026 large-load report came back 85 days later: “We regret that due to a technical issue several ESAs were inadvertently omitted from the April 15, 2026 filing” — the attachments would not fit. And the Missouri Commission corrected its own order nine days after issuing it, because its summary of the revenue-sharing term left out a step. Ameren had to file a motion to get that one moved.
The three wording changes
They are not a category, because no filer filed for them. All three ride inside
Mark Ellis's errata, which was filed to renumber his exhibits: whitepaper became
white paper; infrequent-but-extreme lost its hyphens;
recover insurable losses are recoverable in rates lost the duplicated verb. Three in
102 filings, and the hyphens are not in the errata notice at all.
Which errors survive a review
Proofreading is the check every filer already runs, and it works. That is why nobody in this corpus filed an errata to fix a typo. Typing mistakes rarely survive proofreading, and the three that did travelled as passengers on an errata filed for something else.
The twenty-one survive because they read correctly. Brown is a real plant, $30.9 million a real figure, OCS 2.1D a well-formed exhibit number, 20 CSR 4240-2.135(2)(A) a real rule, 4,248,543 a real-looking megawatt-hour count. Each is the wrong one of a set of right-looking things, so a spell-check passes it, and so does a language model asked whether the sentence reads right — because it does. Then they sit in the record.
Five of Georgia Power's IRP errata paragraphs name the data request that surfaced the problem. The utility did not find those; somebody asking a question did, months in.
Six of the twenty-one were visible on day one
Not in hindsight, and not by comparing versions: from the one document, on the day it was filed, by four checks that open no second file.
1. One thing, named more than one way
Collect every reference to the same rule, exhibit or event and compare the strings. Michels cites one rule three ways in three page footers. Kollen calls one withdrawal Brown BESS on page 95 and Cane Run BESS in the settlement bound into the same PDF. Catches two.
2. A term whose prefix inverts its meaning, used both ways
Interclass is between rate classes, intraclass within one. Lisa Perry's testimony says interclass twice and intraclass once about the same subsidies, the odd one out on page 20, one page before a correct use in the same argument. It took Walmart 68 days. Run it on inter/intra, gross/net, total/allocated. Catches one.
3. A money figure with no basis, where the document names a basis elsewhere
LaConte sets the convention on page 2, marking $185.7 million (total Company) against $82 million (Utah-allocated), then gives $112.1 million and $30.9 million bare. A document that sets its own convention and breaks it is a stronger signal than any style rule. Catches one.
4. A change column where every cell says the same thing
Georgia Power's third-quarter public attachment carries 535 standalone Y lines
in twenty unbroken runs of 42, 39, 21 and 5 rows, each length five times: 107 project rows across
five change columns, every cell flagged. The fourth quarter gives
5 × 106 = 530. The corrected refiling covering both quarters has 186
flags in 110 runs, 67 of them a single row; the first and second quarters of 2025 carry 88 and
44, in 67 and 35 runs. A column that never once says no is not a column. Catches two.
Georgia Power, 4 March 2026: “The error resulted from a formula being inadvertently disturbed by the Company’s redaction process used to create the public disclosure version.”
The other fifteen need a second document, or knowing the plant is called Cane Run.
What to do on Monday
Take the last thing your team filed and run those four over it. Grep does the first two, a spreadsheet the fourth, and the third is a list you read.
That installs nothing and buys nothing. On this corpus it finds six of the twenty-one corrections on the day of filing. Those six actually waited 5, 18, 21, 21, 68 and 103 days.
The honest note
I build Verbatim, which reads successive versions of a proceeding and refuses to assert a claim whose citation does not verify against the source. That is the bias here: I went looking for what a version comparison misses.
Three limits. Twenty-one is a small number, and 102 filings I chose are not a sample of
anything. Three more corrected filings are left out because they never say what moved. And every
count comes from text extracted from PDFs: the Kollen correction was rescanned, so most of what a
raw diff reports between the two versions is the scanner disagreeing with itself —
21 ,751,906 against 21,751,906, hundreds of times. I read those out by
hand. Somebody else reading them would not land on exactly twenty-one.
Every passage in a boxed extract above is a verbatim substring of the file it
names, checked by a script that reads both, with the extraction damage left in. Quotations inside
a paragraph are the same words with the line breaks and column padding collapsed. Every number is
reproducible from data/real/ with difflib and no network.