Nothing Is Ever Fixed, Only Replaced

An RFC is never edited. When someone finds an error the error stays where it is, and a note is filed in a separate database that the document itself never learns about. Errata are not incorporated into the TXT, the PDF or the XML, so the only correction that reaches the normative document is a new one replacing it, and this asks whether the replacement carries the fix. Across 1,039 cases where a replacement exists, mostly it does: 832 rewrote the passage outright and 129 carry the correction word for word. In 62 the exact text somebody reported as wrong is still there, and every one of those is printed here to read and to check against the source. Then the part that was expected and did not survive: technical errors looked twice as likely to be carried forward as typos, until two documents came out of the sample and the difference went to nothing. Four of seven pre-registered predictions broke, including that one and including the replication. What holds is smaller and stranger. When an error does survive into the replacement, the erratum recording it almost never follows, so in 50 cases the mistake is in a specification that is current today and is absent from that specification's own list of known mistakes.

The rule that makes the rest of this possible

The documents that specify the internet are called RFCs, and there are 9,835 of them. They have one property that surprises people who assume a specification is a living document: an RFC is never edited. Not for a typo, not for an error that breaks implementations. The publisher says so in its own words.

Because RFCs do not change after publication, there is an errata system to note these errors. RFC Editor, “Errata in RFCs”

So when someone finds a mistake they file an erratum: a note recording what the document says and what it should have said. The note lives in a separate database. It does not reach the document, and the publisher is equally direct about that:

Errata are not incorporated into the TXT, PDF, or XML formats of RFCs. RFC Editor, “Errata in RFCs”

Note which formats that sentence names. The TXT, the PDF and the XML are the specification as anybody cites it, and none of them carries a correction. There is one channel through which a fix can reach the normative document a reader downloads: somebody writes a new RFC that obsoletes the old one. Nothing is fixed. Things are replaced.

A correction to this page, and what it turned into

The paragraph above used to end differently. It said a reader gets the uncorrected text with nothing anywhere to say that a correction exists, and it shipped saying that, which was too strong. The RFC Editor also publishes a separate rendering, at /rfc/inline-errata/rfcNNNN.html, that folds errata into the text. Nothing in the quotation above is wrong (it names TXT, PDF and XML, and it is exact about them) but the page's gloss on it was.

So the rendering was measured rather than just conceded. On the 12 documents carrying both statuses that have attracted the most errata, all 12 reachable, it announces itself in these words, every time:

This is a purely informative rendering of an RFC that includes verified errata. This rendering may not be used as a reference. RFC Editor, the inline-errata rendering, on all 12 documents sampled

And what it incorporates is exactly what it says: on every one of the 12, the set of errata folded in is precisely the Verified set, no more and no less. Of the 273 Held for Document Update errata on those same documents, 0 appear in the rendering, and no rejected one does either.

Which makes the correction sharpen the point rather than blunt it. There is a view of an RFC that shows its corrections, and it is explicitly not the specification: it says so on its own face, in its own words, that it may not be used as a reference. And the status whose definition promises consideration in a future revision is the one that view leaves out. 1,838 Held for Document Update errata sit on documents that are still current, and no rendering of those documents shows any of them.

That makes the errata database an unusual object, a public and dated ledger of known defects in documents that cannot be repaired. This page counts how much of that acknowledged defect is sitting in the specifications that are current right now, and then asks the question the ledger has never been asked: when a replacement document was eventually written, did the correction get in?

The standing ledger

4,864accepted errata on documents still current
1,915documents carrying them
63 of 125current Internet Standards affected
736errata never ruled on at all

Of the 8,035 errata in the database, 4,864 have been accepted (either marked Verified, meaning reviewed and confirmed, or Held for Document Update, meaning agreed but deferred) and sit against an RFC that has not been obsoleted and is not marked Historic. That is to say: against a document that is still the specification. They break down by the status of the document they are attached to like this.

Current status of the documentAccepted errata
Proposed Standard2,833
Informational1,215
Internet Standard283
Best Current Practice186
Experimental167
Draft Standard153
Unknown27

The row worth pausing on is Internet Standard. That is the top of the IETF maturity ladder, the grade a specification reaches only after it has been shown to work and to interoperate, and there are 125 of them in force. 63 of those 125 carry 283 accepted errata between them. This is not by itself evidence that the most-proven documents are the worst written, and the page does not claim it is. The likelier reading is the one McQuistin and colleagues gave in 2023: standards-track documents attract more readers, and more readers find more errors. Attention and defect are not separable here and nothing below pretends otherwise.

A smaller number, harder to explain away: 736 errata are still marked Reported, meaning nobody has yet decided whether they are right. The median one has been waiting 1,417 days. 68 have been waiting more than ten years, and the oldest has been waiting 6,068 days, which is since 2010-01.

The promise in the status name

One of the four statuses is a promise about the future, and it is worth quoting exactly, because everything after this tests it:

Held for Document Update. The erratum is not a necessary update to the RFC. However, it should be considered in future revisions of the RFC. RFC Editor, the official status definitions

“It should be considered in future revisions.” That status is carried by 2,414 errata, and it is the only one of the four that makes a commitment about what happens next. It is also a commitment that can be checked, and one team has already checked half of it. McQuistin, Karan, Khare, Perkins, Purver, Healey, Castro and Tyson, in “Errare humanum est: What do RFC Errata say about Internet Standards?” (TMA 2023), performed the first study of this database, over 6,759 errata filed between 2001 and 2022. In it they write:

Of the 930 RFCs that have hold for document update errata filed against them, only 40% have been updated or obsoleted by a subsequent RFC. We flag that this may be a cause for concern, or at least a missed opportunity for improvements to standards. McQuistin et al., TMA 2023, §III

That measures whether a future revision happened. It does not open the revision and look inside. So the obvious next question was left sitting there, and as far as I can find nobody has asked it: in the cases where the replacement document was written, did it carry the correction, or did it carry the error?

How you can tell, and how you can tell you are being told the truth

An erratum quotes the passage it says is wrong. That quotation is a string. The replacement document is a string. So the test is a substring search, run after squashing the pagination that RFC text files carry, and the whole method fits in a sentence: take the exact words somebody reported as wrong, and look for them in the document that replaced the one they were reported against.

The reason to trust a substring search is that you can break it on purpose and watch it break. Four of the five controls, all fixed in the pre-registration before any matching code was written. The fifth is a replication of the prior study and has its own section below, because it broke.

The controls

Min lengthTestedReal text foundOne-character mutation found
06,04975.55%0.12%
105,98375.63%0%
205,86075.51%0%
305,69875.54%0%
405,53975.36%0%
605,13874.93%0%
804,72573.9%0%
1204,00672.39%0%
2002,65968.45%0%

The highlighted row is the pre-registered threshold. It is not load-bearing.

What the replacements did, and the first prediction to break

Restrict to accepted errata whose quoted text can be found in the document it was filed against, so the instrument is known to reach it, and where that document has since been obsoleted by a replacement whose text is available. That is 1,039 erratum-and-replacement pairs. For each one, look in the replacement for the reported-wrong text and for the corrected text:

832rewritten: neither string, so nothing can be said
129corrected: the fix is there instead
62carried: wrong text still there
5.97%of all pairs, carried

I predicted, in writing and before looking, that the carried share would land between 10% and 40%. It is 5.97%. That prediction is broken, and it is broken in the direction that says the system mostly works. Four fifths of these passages were rewritten outright, and where the passage is still recognisable the correction is there about twice as often as the error. If you came here expecting a story about a standards process that ignores its own bug reports, the aggregate does not support it, and this paragraph is where the page says so instead of burying it.

Only one of those four numbers is a strong claim. Finding the exact reported-wrong string in the replacement is evidence that the replacement repeats the error. Not finding it is consistent with a fix, a rewrite, a rewording, or the passage simply being cut, and this method cannot tell those apart. So “corrected” is a floor rather than a count, “rewritten” is not a result at all, and everything below is about the 62 that were carried.

The 62 that were carried, and where they actually live

Before any rate: these 62 cases come from only 26 document pairs, and 54.84% of them come from two.

ReplacementCarried errata
RFC5661 replaced by RFC888120
RFC4601 replaced by RFC776114
RFC2421 replaced by RFC38014
RFC8446 replaced by RFC98462
RFC4753 replaced by RFC59031
RFC4234 replaced by RFC52341
RFC3066 replaced by RFC46461
RFC2184 replaced by RFC22311
RFC1894 replaced by RFC34641
RFC1891 replaced by RFC34611
RFC2489 replaced by RFC29391
RFC7749 replaced by RFC79911
RFC2988 replaced by RFC62981
RFC4306 replaced by RFC59961
RFC2396 replaced by RFC39861
RFC1065 replaced by RFC11551
RFC3600 replaced by RFC37001
RFC2898 replaced by RFC80181
RFC5451 replaced by RFC70011
RFC6855 replaced by RFC97551
RFC7001 replaced by RFC76011
RFC2633 replaced by RFC38511
RFC1522 replaced by RFC20471
RFC3501 replaced by RFC90511
RFC5272 replaced by RFC100021
RFC9280 replaced by RFC99201

Those two are big consolidating republications: RFC 8881 restates the NFS version 4.1 protocol from RFC 5661 under the same title, and RFC 7761 is the revised PIM sparse-mode specification replacing RFC 4601, which the prior study identified as the single most errata-attracting RFC in the series and which still is: 114 errata, ahead of the next document by 59. Carried error is not spread thinly across the corpus. It pools in the documents that were rewritten wholesale.

This matters more than a caveat usually does, because it decides what the number means. Take those two pairs out and the carried rate falls from 5.97% to 3.03% over the remaining 923 pairs. It also means these 62 observations are not independent of one another, which is the reason the significance tests further down come to nothing.

Read by hand, all of them

A substring match cannot tell whether the replacement is repeating the old text or quoting it in a section explaining what changed. Those are opposite findings. Every carried case was located to a section and screened for that automatically, and then every one was read. All 62 carried cases were read by hand against the rubric: 61 repeat the reported text as live content of the replacement, 1 is the replacement quoting the old wording in a 'Changes from' section, and none was a coincidental or boilerplate match. The automatic change-log screen flagged 2, of which the audit confirmed 1.

So the headline after the audit is 61, not 62: that many cases where the reported-wrong text is live content of the document that replaced the one it was reported against. The rubric permitted a 40-case random sample at this population size and all 62 were read instead, which is strictly less selective than the sample it allowed.

Read them yourself

This is the part that does not require trusting me. Below is every carried case: the erratum's own words, the passage as it stands in the replacement document, the two dates, and links to the erratum and to both RFCs on the RFC Editor's own site, so you can check any of it against the source in about thirty seconds. They are ordered by how long the correction had been on the record before the replacement was published.

The finding that survives: the erratum does not follow the error

An erratum is filed against a document. When that document is replaced and the replacement repeats the mistake, the erratum stays where it was, attached to the obsolete document. Nothing moves it. So the question is whether anybody re-filed it against the new one, and mostly nobody did.

56carried cases whose replacement is itself still current
50of those with no erratum re-filed against it
89.29%orphaned
24.7years, the oldest still standing

Of the 62 carried cases, 56 were carried into a document that is itself still current, not obsoleted and not Historic. For 50 of those 56, no erratum quoting that passage has ever been filed against the replacement. The defect is in the specification a reader downloads today, and it is absent from that specification's own list of known defects. Only 7 of the 62 were re-filed.

The longest-standing is erratum 440, filed on 2002-01-06 against RFC2421. Its text is present in RFC3801, Voice Profile for Internet Mail - version 2 (VPIMv2), which replaced it and is today a draft standard. That is 24.7 years, and no erratum against RFC3801 records it.

This is exploratory: it was not part of the pre-registration, which asked only about the replacement's text. It is reported as an observation about 56 specific cases, all of them listed above, and not as a rate about the series. Matching is by quoted passage, so an erratum that reports the same defect in different words would not be found, which makes 50 an upper bound on the orphaning.

All seven predictions, and the four that broke

Predicted, before lookingWhat happenedVerdict
1. The instrument finds the quoted passage in its own document 60% to 90% of the time75.36%held
2. The corrected text appears in the uncorrected original under 10% of the time, and under a fifth as often as the original text3.46%held
3. A one-character mutation collapses the match rate below 2%0%held
4. The published 2001 to 2022 status shares replicate to within 1 pointoff by up to 8.49broke
5. Carried lands between 10% and 40%5.97%broke
6. Carried is at least 5 points lower when the erratum predates the replacement5.82% vs 7.21%broke
7. Carried is at least 5 points lower for technical errata than editorial ones7.17% vs 4.65%broke backwards

Prediction 7 is the interesting one, and it is the reason this section exists rather than a paragraph claiming a result. I expected technical errata, the ones the RFC Editor defines as errors in technical content, to be carried forward less often than typos, because someone rewriting a specification would attend to them first. The opposite showed up. Among errata filed before the replacement was published, technical ones are carried at 7.32% against 3.91% for editorial ones, which is a two-to-one difference with a two-sided Fisher exact p of 0.0335.

It does not survive contact with the concentration above. Remove the two document pairs that supply half the carried cases and the same comparison gives 3.31% against 2.73%, p = 0.7021. It would not survive a Bonferroni correction across the 7 comparisons on this page either, which needs p < 0.0071. So the honest report is: no difference is established, by type, by status, or by whether the correction was available in time. Here is every comparison run, including the ones that came to nothing, because listing only the one that nearly worked is how a result like this gets manufactured.

ComparisonCarriedvsFisher p
Technical vs Editorial, all pairs7.17% (39/544)4.65% (23/495)0.0899
Technical vs Editorial, erratum predates the replacement7.32% (38/519)3.91% (16/409)0.0335
Held for Document Update vs Verified, all pairs7.38% (33/447)4.9% (29/592)0.1121
Held for Document Update vs Verified, erratum predates7.45% (31/416)4.49% (23/512)0.0664
Erratum predates the replacement vs postdates it5.82% (54/928)7.21% (8/111)0.5258
Technical vs Editorial, with the two dominant document pairs removed3.31% (16/483)2.73% (12/440)0.7021
Held for Document Update vs Verified, two dominant pairs removed2.58% (9/349)3.31% (19/574)0.6928

The status comparison in that table was not pre-registered. It is here because the name invites it: Held for Document Update promises consideration in a future revision and Verified promises nothing, so the two ought to part company if the promise means anything. Among errata filed before the replacement they run 7.45% against 4.49%, p = 0.0664, and that dies when the two documents come out as well. So the promise is not measurably broken more often than anything else here. It is also not measurably kept.

The replication that broke, and why that is the useful part

Prediction 4 broke in a way that says something about how this database should be read by anyone, including this page.

The plan was to replicate McQuistin et al.'s status split on their own window, 2001 to 2022, as a check that my data handling matched published work. The count replicates about as well as a count can: they report 6,759 errata in that window and I find 6,758, a difference of 1 in 6,759. The shares do not replicate at all.

StatusPublished, 2023Same errata, read 2026Change
Verified42.5%46.61%+4.11
Held for Document Update30.3%33.22%+2.92
Rejected13%14.46%+1.46
Reported (not yet ruled on)14.2%5.71%-8.49

Nothing is wrong with their arithmetic or with mine. It is the same set of errata, and three years passed between the two readings. In that time 8.49 percentage points of that cohort left the Reported column, and 8.49 points arrived in the other three: the same figure, to the hundredth. The backlog they described as a concern was worked through, and you can watch where it went.

The lesson is small and load-bearing. An erratum's status is not a property of the erratum. It is a property of the erratum on the day you looked. Every percentage here is stamped with the date it was read, for that reason.

What this cannot tell you

Run it yourself

Every number above comes from three public files and about six hundred lines of Node with no dependencies. The sources are the errata database, the RFC index, and the plain text of the individual RFCs. The check that tests the actual claim needs one file, Node, and a network connection: it picks carried cases at random, fetches the successor documents from rfc-editor.org, and confirms the reported-wrong text really is there.

curl -O https://artwaste.land/checks/verify-nothing-is-ever-fixed-only-replaced.mjs
node verify-nothing-is-ever-fixed-only-replaced.mjs --live 8

That is the whole recipe, in an empty directory, owning nothing you did not just download. It was tested that way rather than reasoned about, and the first attempt failed: the case list lives in the repository and a lone copy of the checker could not read it. The checker now falls back to the published copy, so the sentence above is something you can do rather than something that sounds like it would work.

Read 2026-09-07. The errata database is live and these figures will move.