What this got wrong, where it moved, and what the closed papers still say
Three records, on one page. What was published here and later found wrong. What was held, tested and changed without anyone having published an error — a larger set, and a more useful one. And what the closed papers still say, because a published document is never edited after the fact.
They were four pages, and they linked to each other more than anything else linked to them. Nothing has been dropped in the merge: every entry, every ID, and every URL that pointed at any of them still resolves.
Corrections — 53 entries The August 2026 revision The research log — 20 positions Errata — 77 passages across 5 closed documents Findings
OneWhere this was wrong
Everything published here that was later found wrong, weaker than stated, or in need of repair — with the corrected form alongside it. An entry is never deleted once it is fixed, because the record of the error is the point.
Error 34 Weakness 12 Maintenance 7 53 published · 53 resolved · 0 open · 0 removed — an entry is never deleted once it is fixed, because the record of the error is the point.
RegisterE-040 E-041 E-042 check these rows →
RegisterE-033 check these rows →
RegisterE-051 E-023 check these rows →
RegisterE-052 E-054 E-055 E-056 check these rows →
RegisterE-004 E-028 E-031 E-032 E-056 check these rows →
RegisterE-006 E-067 E-068 check these rows →
RegisterE-054 check these rows →
RegisterE-030 E-031 check these rows →
RegisterE-001 E-021 check these rows →
One: the arithmetic beat was wrong. The site's climax claimed nobody replicated Singapore because the cost of hand-encoding a jurisdiction, multiplied by twenty thousand jurisdictions, exceeded any plausible return. The Singapore checking engine was in fact transplanted — a Norwegian pilot on the e-PlanCheck base, a completed New York City pilot using ICC codes, testing with Japanese and Australian models (E-080). Those projects inherited the engine and did not pay the encoding cost from zero, and none of them has been identified reaching production (E-081). If encoding cost were the binding constraint, at least one should have cleared. The best available adoption study finds twelve variables governing whether automated compliance checking is adopted, and eight of them are non-technical (E-082). A diagnosis in which the constraint is a unit cost does not survive that.
Two: "twenty-eight years bought one city" misstated the record. CORENET was introduced in 1995 and upgraded in 2002 as e-PlanCheck; the peer-reviewed study reports it commissioned by Singapore's building authority and commercially used, and the scope is architectural and building services — building control, barrier-free access, fire code — not a whole building code (E-078, E-079). The site was describing a system that reached industry use within a few years, and a partial code, as twenty-eight years of effort buying one jurisdiction.
Three: thirty-two to seven was not a like-for-like comparison. Four of the seven months in the compiled path are factory build and set. The comparison therefore set site-built-today against factory-built-tomorrow and credited compiled approval with a saving that partly belongs to a change of construction method (E-070). Everything derived from it — the twenty-five months eliminated, the annualized-return arithmetic — inherits the defect (E-071).
Four: two rows asserted more than their sources. E-001, the regulation-share figure, is published on NAHB's own advocacy blueprint by the party it benefits, while NAHB's separate member survey does not list approval duration among builders' serious problems at all (E-099) — two instruments from the same organization disagreeing about what constrains building. E-009 carried the manufactured-housing approval gap as "<30% vs >70%" and omitted the finding that carries the weight: the gap persists after controlling for credit score.
Thirty rows are added covering what the research found (E-078 to E-107), and a new page, `/literature`, states what Pew, Mercatus, the Lincoln Institute and the National Zoning Atlas published first. `/revisions` states all of this in plain language and is linked from the story and the about page.
RegisterE-001 E-009 E-051 E-070 E-071 E-078 E-079 E-080 E-081 E-082 E-099 check these rows →
The same report defines an approval rate explicitly, at footnote 32 — originations plus approved-and-not-accepted, divided by that sum plus denials — and publishes it in Figure 3 by credit band. So the site was using the report's own vocabulary for a different one of the report's own measures.
Two consequences followed. The row carried three measures in one value field: 27/74 origination, and 63/80/95 approval in the super-prime band, with nothing to tell a reader the denominators differ. Anyone comparing 27% to 63% would read a rise where there is a change of instrument. And the strongest figure in the source was never used at all: 42 percent of manufactured-housing purchase applications were denied — 50 percent of chattel and 33 percent of MH mortgage — against 7 percent of site-built. One measure, one denominator, a six-fold gap.
Worth being exact about what was and was not wrong, because the two look alike. C-013 corrected "<30% vs >70%" to 27%/74% and that was right: the rounded pair was a fair rounding of these same origination figures, so it was a de-rounding, not a substitution of one measure for another. The defect C-013 did not see is that the noun above both was wrong before the correction and stayed wrong after it. A correction that checks the digits against the source and not the label will do this every time.
E-112 is the figure to prefer wherever the point is that the loan was refused. The site's lender row said "closes a gap of <30% vs >70% loan approval"; the gap it should name is the one the report states as a denial.
RegisterE-009 E-112 E-113 check these rows →
This is the failure C-009 named and did not fix: an unresolved instruction inside the register is invisible unless something goes looking for it. E-088 had been carrying that instruction for a week while the claim it qualified was used in argument.
So a private organization's design determination has been portable across every state, by federal regulation, since 1976 — which is stronger than what the site claimed and is the opposite of the "never demonstrated" label the roadmap still carries on the link about a jurisdiction accepting an outside determination.
The scope limit is recorded on the row and is the whole of it: a DAPIA approves against one federal standard that preempts local construction rules (E-091), not against twenty thousand local rulesets. The precedent shows portability works where a single standard exists, which is an argument for preemption rather than for a compiled multi-jurisdiction determination. Stated the other way round it would be the same overreach this log exists to record.
RegisterE-088 check these rows →
One: the sum mixes two populations. Census publishes two tables. In the authorization-to-start table, the 2022 figure for all 1-unit buildings is 1.4 months. In the start-to-completion table, 8.3 is the figure for all 1-unit buildings and 7.6 is the built-for-sale column — contractor-built is 10.1 and owner-built is 12.1. The row took the Total from one table and a subset from the other and added them. Like for like, the answer is 9.7 months (Total plus Total) or 9.0 (built-for-sale plus built-for-sale).
Two: 9.1 is neither. 1.4 + 7.6 = 9.0. The stated total does not equal its own stated parts, and it does not equal the like-for-like sum.
Three: there is no 2024 figure. Both average tables were last updated on 19 March 2024 and carry data through 2022. Census publishes percent distributions for 2024 — those were updated in July 2026 — but no average. The year on the row could not have come from the source cited.
And the same defect sits in the row beside it. E-003 read "16.5 months (2025)" for buildings with 2 or more units. 16.5 appears in no year of that series, there is no 2025 average, and the neighbouring published years are 15.4 for 2019–2021 and 17.0 for 2022 — so it is not a stale reading of an earlier year either. Two Confirmed rows in the spine, both citing figures the named source does not contain.
One thing that survives, and it is the headline. The eight months of building rounds from the 8.3 figure, which is the correct like-for-like number for 2022. "Eight of thirty-two" is not withdrawn by this. It was resting on the wrong half of the wrong column and happens to land in the same place — which is luck, not method, and is why the row is corrected rather than left alone.
E-003 is restated to 17.0 months for 2022.
E-114 is added for what 2024 actually publishes: the completion-time distribution — 13% of single-family units completed in three months or less, 46% in four to six, 20% in seven to nine, 9% in ten to twelve, 13% in thirteen or more. A midpoint approximation of that distribution lands near 7.0 to 7.4 months, which is derived and not published; it is recorded on the row with that stamp and must not be quoted as a measurement. It is worth recording because it points down from 8.3, and anyone tempted to lean harder on the eight should know the direction of travel before doing so.
The first is that Census stopped publishing these averages after 2022 and this project did not notice for two years while quoting a 2024 figure from them. A review date would not have caught it; the row was inside its review window. What catches this is opening the source, which is the same finding as C-009 and C-010 and now C-014.
The second is the pattern. This is the third correction in a week produced by asking whether a row names the measure its source defines rather than whether the number matches the register. C-014 found a live claim under the wrong noun; this one found a live claim under the wrong population and the wrong year. Both rows were graded Confirmed, both read as internally perfect, and no check in this repository could have flagged either — the sweep that found this one flagged E-002 only because 1.4 + 7.6 did not equal 9.1, which was the least serious of its three defects.
RegisterE-002 E-003 E-114 check these rows →
They name a publisher, a category, or a description: "CFPB". "Urban Institute". "Pew Charitable Trusts". "BCA Singapore". "Arizona statute". "Legislative record". "Public reporting". "Practitioner sources (multiple)". "Multiple secondary sources". "Academic literature on Japanese prefabricated housing manufacturers".
Thirty-two of the forty-four were graded Confirmed, which this register defines as "independent published evidence supports the claim". Nobody reading those rows could tell which published evidence, find it, or check the row against it. Whatever is true of the underlying claims — and several are probably fine — the grade was never supported by anything, because there was nothing there to support it.
This is the same defect as C-009, C-014 and C-016 seen from further back. Each of those was one Confirmed row whose source, when opened, did not say what the row said. These forty-four could not be opened at all.
The register goes from 70 Confirmed to 40, from 24 Supported to 12, and from 16 Untested to 60 — more than half the register is now ungraded, which is the honest position and was the position all along.
A gate is added. `tools/check_citations.py` refuses to let a row carry Confirmed or Supported unless its source field contains a resolvable identifier — a URL, a DOI, a statute or regulation section, a case citation, a docket number, a working-paper number, a named series or table, or a titled publication. It runs in the blocking set, so this cannot recur silently.
The gate is a floor and not a warrant, and the tool says so in its own docstring. It cannot tell whether the cited document says what the row claims, or whether it exists; a fabricated DOI passes. It moves a row from "nobody can even look" to "someone now has to look", and the looking is the work that has produced every correction in this log.
Two things follow that are not closed here. First, the count of Untested rows now means two different things — rows nobody has measured, which is the research agenda this project publishes deliberately, and rows whose citation could not be identified, which is a filing failure. They are separable by the notes marker and both are derived at build time, and the site now states both rather than one total that would flatter the second by mixing it with the first.
Second, forty-four is a floor on the problem rather than a measure of it. The rows that passed the gate did so on the strength of naming a document, which is not the same as that document supporting the claim — three of the corrections in this log were rows that would have passed. The source-by-source pass through the survivors is what settles it, and it is sized in `audit/measure-names-2026-08.md`.
RegisterE-004 E-005 E-007 E-008 E-010 E-011 E-012 E-013 E-014 E-019 E-020 E-021 E-022 E-023 E-024 E-025 E-026 E-027 E-028 E-029 E-033 E-034 E-036 E-040 E-041 E-042 E-043 E-044 E-045 E-046 E-047 E-048 E-049 E-050 E-052 E-058 E-059 E-061 E-066 E-072 E-102 E-104 E-105 E-109 check these rows →
The builder row was struck: WITHDRAWN Aug 2026 — rows E-070/E-071 compared site-built today with factory-built tomorrow, not like for like. Directly beneath it, the buyer row still read "10% margin at 7 months still doubles today's return — so speed can go to price", sourced in its own last cell to "Assumption — rows E-070/E-071, graded Untested".
Same two rows. Same defect. Opposite treatment, one line apart, with the citation to the withdrawn rows printed in the row that kept its claim. A reader comparing the two would reasonably conclude the buyer figure rested on something else.
Two further surfaces carried the same arithmetic without the strike. The caption below the bars described them as "arithmetic on assumed margins and a modeled seven-month cycle — register rows E-070 and E-071, both graded Untested", which states the provenance and keeps the claim. The closing note said "two are arithmetic on registered assumptions", counting the withdrawn figures as a present feature of the table.
And the beat's own opening paragraph still promised that the builder gets "capital that turns four times as often" — the withdrawn claim in prose, four paragraphs above its own retraction, on the same screen.
While in the table, the lender row was corrected under C-014 from the retired "<30% vs >70% loan approval" to the denial comparison E-112 carries — the loan is refused 42% of the time against 7% for site-built.
The prose contradiction is now gated rather than left to review. `tools/check_retired.py` fails the build on a paragraph asserting a claim that its own `<section>` has already struck, which is the rule that catches this class without anyone having to notice it.
RegisterE-070 E-071 E-112 check these rows →
Nobody published anything. Register row E-060 reads Untested, and its value was "Estimated to move roughly 2 of the 32 months" — this project's own estimate, never measured, never published, by anyone. The site turned its own guess into a finding by an outside market, and then rested the entire argument for legal weight over better information on it.
This is the argument's hinge. If compiled information alone captures little, the wedge must carry legal weight; if it captures a lot, the case for an authoritative determination is much weaker. That question is currently answered by an estimate wearing the clothes of a measurement.
Research into current municipal deployments was undertaken to re-evidence the claim, and produced two rows rather than a figure. E-117 records what a permitting authority itself publishes — Honolulu requiring the CivCheck pre-application process for eligible residential applications from 1 September 2026, read from the city's own page. E-118 records the effect figures, graded Untested, because the only sources located for them are the company selling the software and a trade publication. The Honolulu DPP page announcing the mandate publishes no before-and-after figures; the city auditor's permit-processing report predates the deployment.
That grading is the point rather than caution for its own sake. C-009 was a Confirmed claim traced to a working paper marked do-not-cite; C-010 was a headline figure whose newest source was a blog post. A vendor case study reporting that the vendor's product halved a city's decision times is the same instrument as NAHB publishing the regulatory share of a home's price, and E-001 is graded Contested for exactly that reason.
E-117 is the competing path, and it is now stated in the objections table at full strength: a jurisdiction can buy automation directly. It needs no outside determination, no professional of record, no carrier, no portability and no conformance authority — Honolulu is mandating one, and the department still makes the decision at the end of it. If that path captures most of the available time, the architecture this project proposes is answering a question the market is already closing by a simpler route.
What survives, and it is narrower than the beats claimed: a pre-application screen is not a determination, and Honolulu's own framing keeps the decision with the department. The distinction between advisory and authoritative is intact. What is gone is any number attached to what the distinction is worth — in either direction.
RegisterE-060 E-117 E-118 check these rows →
Found during the source-verification pass. The notice could not be retrieved from the Federal Register or from GovInfo, and the sentence could not be confirmed to exist in it. That does not make it wrong; it makes it unverified, on a row graded Confirmed, in quotation marks, attributed to a page number.
Quotation marks are a stronger claim than a paraphrase. They assert that a named source used these words, which is checkable in principle and was not checked here.
The row keeps its grade because the claim does not need the quotation. The absence of pre-approval is established by the statutory scheme containing no approval provision, which is a stronger basis than a sentence from a notice nobody on this project has opened.
Worth noting what found it: not a check. `check_citations` passes this row and always did — the Federal Register citation is perfectly resolvable, it just does not resolve to anything anyone here retrieved. That is the limit the citation gate documents in its own docstring, demonstrated on the second row of the pass.
RegisterE-110 check these rows →
Sixty-five quoted strings across thirty-eight rows. Most are document titles in `source`, which are verified when the document is retrieved and are therefore the source-verification pass's business rather than this entry's. Twenty-four quote content. Of those, thirteen are this project quoting its own superseded wording — "9.1 months", "<30% vs >70%", "twenty-eight years bought one city" — which carries no external attribution and no risk. Nine were verified verbatim against retrieved documents during this session.
Two were not:
E-006 quoted a working paper's title page as `PRELIMINARY - DO NOTE CITE`, typo included, with a (sic). Reproducing a typo is the strongest possible assertion that a document was read.
E-079 quoted the peer-reviewed CORENET study as saying e-PlanCheck `has been commercially used`. That phrase is the hinge of the dormancy argument — the whole reconstruction of the thirty-three years turns on when the system reached industry use — and the row already carries a note saying it rests on one source and corroboration is outstanding.
Neither document was retrieved in this cycle. Both quotations may well be accurate; neither is checked.
Each row records what would restore the quotation: opening the paper. E-079's retrieval is already owed by the CORENET working paper's sourcing audit, and E-006's by phase 3 of the source-verification pass.
RegisterE-006 E-079 check these rows →
E-012, the shipment collapse, read "240,000/yr (1977–95) → 93,000 (2017)" sourced to "Urban Institute" — a publisher, not a publication, and already regraded under C-017.
E-093, the share of manufactured homes ever moved after placement, was `[UNMEASURED]` with a note recording that it is widely quoted at under 5% with no primary source located.
E-092 carried the observation that the count of states still issuing certificates of title — the brief says 42 — was unverified and not claimed.
E-093 does not close, and the reason is worth more than the figure would have been. The Lincoln Institute of Land Policy states it twice on one page with no footnote, no hyperlink and no named study — and in two incompatible forms in adjacent sentences: "fewer than 5–7 percent of all manufactured homes are ever moved after initial placement" and "roughly 95 percent of homes are never moved". Pew repeats it. Nobody cites anybody. A number that varies between 5% and 7% inside a single clause is a number with no origin. The row stays `[UNMEASURED]` and the claim will not be written.
E-092 does not close either, and it is worse than unverified. The leading 50-state legal survey — the CFED and National Consumer Law Center review of titling law — contains no count of states issuing certificates of title. The number it does give answers a different question: "Approximately three-quarters of the states have statutes that set forth a procedure to convert a manufactured home from personal to real property." So 42 is not merely unchecked; the obvious authority does not state it.
The two failures cost the act less than they look. Neither claim is needed: a home titled as a vehicle is taxed, financed and depreciated as one whether or not it ever moves, and that point is structural rather than statistical. What the argument gains instead is a harder number than either — 49,700 shipments in 2009 against 373,100 in 1998 — which nobody on this project had ever stated, and which is Census primary rather than advocacy secondary.
RegisterE-012 E-092 E-093 check these rows →
E-104 — that HUD-code housing is the cheapest way to build and its buyers earn far less — was the income comparison the act's opening beat needs, and C-017 had regraded it for citing "Hamilton, Mercatus Center, congressional testimony": a person, an institution and a genre, but not a document.
The titling argument had one leg. 42 U.S.C. 5403(d) preempts construction standards and is silent on property classification, which shows federal law left the question alone. It does not show what the states did — and the count that would have shown it, 42 states issuing certificates of title, could not be located in the obvious authority at all.
The missing five-percent figure was recorded as an absence and nothing more. E-093 said no primary source had been found. That undersells what the search actually established.
Restored to Supported, not Confirmed, and the distinction is the point: this is an expert asserting a figure in a congressional record, not a measurement. Hamilton attributes the income comparison to her footnote 7 and neither that footnote nor footnote 8 has been chased. The site will say told Congress, not found.
E-120 gives the titling argument its second leg, from the source that says something rather than the one that does not. The CFED and NCLC 50-state review: "Approximately three-quarters of the states have statutes that set forth a procedure to convert a manufactured home from personal to real property", with the states listed in Appendix A. The inference is stated on the row so it can be attacked: a statute providing a procedure to convert from personal to real property only has work to do where the default is personal property.
E-121 turns the failure into a finding. The claim that few manufactured homes ever move is published by the Lincoln Institute twice on one page with no citation of any kind, in two incompatible forms in adjacent sentences — "fewer than 5–7 percent" and "roughly 95 percent are never moved" — and repeated by Pew. What is Confirmed is not the housing fact but the state of the literature, read directly off the pages. The absent number itself stays `[UNMEASURED]` at E-093.
RegisterE-104 E-120 E-121 check these rows →
The series was derived — scraped out of the monthly shipment workbooks and summed. Those files place two year-blocks side by side, and the parser read them as one stream, mis-assigning years by a whole block. Three attempts produced three different answers for the same years. The version that shipped carried:
- "It has not been above 100,000 since" — false. Shipments were 105,772 in 2021, 112,882 in 2022, 103,314 in 2024 and 102,738 in 2025. - A mean of 233,350 across 1977–1995 — computed over a range in which eight years were missing from the parse entirely. - Twenty-four years with no total at all, disclosed on the row as "44 annual totals rather than a complete run", which framed a parsing failure as a property of the source.
The one honest thing about it was that disclosure, and it was the clue: a government series does not have holes in it. The holes were in the reading.
The corrected series, and it is a better argument than the one it replaces:
- 373,143 in 1998, the peak. - 130,748 in 2004 — a 65% fall reached before the financial crisis, while site-built housing was in the middle of its largest boom in decades. - 49,717 in 2009, the trough, 87% below peak. - Back above 100,000 since 2021, and still under a third of 1998.
The boom-era number is the one that matters, and it was invisible in the peak-to-trough framing the site had. "2009 was the financial crisis" is the obvious rebuttal to a 1998–2009 comparison, and it is answered by the fact that two thirds of the decline had already happened by 2004, running opposite to the cycle. The recovery is stated too: the collapse is real, it is not permanent, and pretending otherwise would have been the same error in the other direction.
Nothing in this repository could have caught it. `check_citations` passes both versions; the citation was resolvable and the file was real. `check_grades` passes both; the prose matched the row. Only reading the source the second time found it, which is the fourth instance of the same finding in a fortnight and is recorded with the others in `audit/measure-names-2026-08.md`.
RegisterE-012 check these rows →
The report says shipments fell "only a 20 percent" in 2000. The Census series this project read directly gives 348,102 to 250,419, which is 28.1 percent. Using their number makes the financing look like it contracted 2.5 times as fast as the volume it financed. Using ours it is 1.8 times.
Both support the same direction, and taking the larger one anyway is how a case gets overstated a fraction at a time. This project already has a correction — C-024 — about assembling a number rather than reading the table that states it. This is the milder cousin: quoting a denominator from a secondary source while holding the primary series in hand.
E-123 records a second search for a repossession series, and it failed again. Checked: Census MHS, HUD USER, GAO, the Federal Reserve, Fannie Mae and Freddie Mac publications, and the Manufactured Housing Institute. Census settles the question for its own series in its own words — "The Manufactured Housing Survey does not include data on repossessed homes or resale units" — so the competing-supply channel is absent from E-012 by construction rather than by oversight. GAO-07-879 confirms the channel existed, describing a large number of repossessions from 2000 to 2002 that "flooded the market with units and increased the supply of manufactured homes", and gives no count.
A measure discrepancy is recorded rather than smoothed: GAO reports 332,000 new manufactured homes sold in 1996 against 118,000 in 2005, where Census reports 363,345 shipped in 1996 and 146,881 in 2005. Sold and shipped are different series.
E-124 is the reply that absorbs the objection instead of conceding it. Personal-property collateral is repossessed under UCC 9-609, which lets a secured party after default take possession "(1) pursuant to judicial process; or (2) without judicial process, if it proceeds without breach of the peace" — self-help, no court. Real property requires foreclosure, and GAO states the asymmetry plainly: repossession applies to personal property, foreclosure to real property, and "the consumer protections for repossession are often less extensive than those for foreclosure".
The repossession wave could move at that speed because of the title. A mortgage market cannot dump inventory that fast because the law does not permit it. The competing-supply channel is therefore not an alternative to the classification argument — it is a second consequence of the same classification.
RegisterE-122 E-123 E-124 check these rows →
Three things were wrong with it as an argument.
The load was on the wrong claim. The transplant story is four data points reported in one 2005 trade article. Sitting unused beneath it was E-082, a peer-reviewed cross-case study of eight countries finding twelve variables that govern adoption of automated compliance checking, eight of them non-technical. That is positive evidence about what actually decides adoption, and it should lead.
"Refuted" overstates what four cases can do. They do not establish that encoding cost was never binding anywhere. What they establish is narrower and still useful: encoding cost was zero for those four, so it cannot explain them — and no case has been identified in which cheap encoding produced adoption.
The American thread was missing entirely, and it complicates us. The ICC built SMARTCodes in 2006; development ended in 2010 for lack of funding. Fiatech's AutoCodes followed and stalled after its proof of concept. A project that dies in a budget is contingent, not structural. The beat implied these failures reveal something about the binding barrier; a funding event reveals nothing of the kind, and saying so is the difference between an argument and a case.
Four rows opened. E-127 for SMARTCodes and its funding cause, peer-reviewed and independently corroborated. E-128 for Potter's assessment of CORENET — cited deliberately because he is the source this project concedes to on prefabrication cost. E-125 for the AutoCodes proof of concept as ICC and Fiatech themselves describe it. E-126 for the quantified spread, which is reported and not retrieved and says so.
E-102 is re-cited properly, clearing the CITATION UNRESOLVED flag C-017 put on it: it read "Potter, Construction Physics" — a person and a publication, no article.
And the beat now carries the AutoCodes finding in both directions. For us: the standing objection to compiled review is that it sacrifices judgement, and on the most objective chapters in the code, thirteen jurisdictions reviewing the same plan set produced a reported spread of one flagged issue to 43. The status quo is not a reliable process automation might degrade; it is an unreliable one automation would stabilise. Against us: consistency is not correctness. An encoding picks one reading and applies it everywhere, which beats thirteen readings only if the reading is right, and somebody has to be authorised to pick it. That is the assent question with a number attached to what it would replace.
The New York City claim was challenged in review as a suspected conflation with the SMARTCodes thread. It was checked against its original source and it held. Khemlani (2005) states plainly that a New York City pilot on ICC codes was completed on the FORNAX platform, and the chronology rules the conflation out — the pilot is 2005 and SMARTCodes is 2006.
It is recorded here because a claim that survives a challenge should show that it was challenged. A corrections log that only contains defeats teaches a reader that unchallenged claims were never examined. The corroboration gap is on E-080 with it: one trade article, from the platform vendor's ecosystem, and three later surveys of this field that do not mention the pilot at all.
RegisterE-080 E-081 E-082 E-102 E-123 E-125 E-126 E-127 E-128 check these rows →
E-123 moves from `[UNMEASURED]` to Supported, with the grade explained: the 90,000 is the company reporting an industry estimate rather than a count it made, and one lender is not the market — Conseco Finance was the larger originator and its filings have not been read.
The general lesson is about search rather than about housing. Seven sources were checked and all were market statistics; the answer sat in the accounts of the firms doing the repossessing. When a phenomenon is invisible in aggregate data, look at the balance sheet of whoever it happened to.
RegisterE-123 check these rows →
That does not survive 2008 to 2011. Foreclosure moved millions of site-built homes in those years. Real property can produce an enormous wave of forced sales, and anyone who lived through it will reach for that immediately. The claim as written was about aggregate capacity, and aggregate capacity was never the thing the title constrains.
The limit is on the row: no source has been located comparing repossession-to-resale duration or cost against foreclosure-to-resale for manufactured housing in this period. The mechanism is documented in the statute; the magnitude of the per-unit difference is not measured anywhere found. E-124 says do not put a number on it.
Conseco Finance's filings are read, which C-027 said was owed. It was the larger lender and the numbers are much larger: 24,131 unsold properties in repossession or foreclosure at the end of 2001 against 20,110 a year before, and 25,750 units liquidated in 2001 at 57% average loss severity. That is one balance sheet accounting for roughly 13% of the year's new shipments. Two lenders together approach 37,000 units of flow, which makes Oakwood's industry estimate of 90,000 look conservative rather than inflated. E-129 is Confirmed where E-123 is Supported, because these are the company's own counts rather than its estimate of the market.
Conseco's filing also carries contemporaneous evidence on speed that this project did not have: competitors "have acted to more quickly dispose of repossessed manufactured housing inventory", and GreenPoint announced an objective to "quickly liquidate its repossessed inventory at below market prices in the wholesale market".
And the causal chain is now written out in five links rather than argued in two — title, chattel financing, self-help repossession, supply glut, collapse — each with its evidence named. A chain stated implicitly reads as convenient. Stated plainly it is a mechanism, and every link is a place to attack it. The beat says which link carries the most weight and the least measurement: link three.
RegisterE-124 E-129 check these rows →
`check_site.py` keeps a list of register numbers that must appear on named pages, so that a figure cannot survive in one rendering and silently vanish from another. Two of its seven entries had rotted, and one of them had rotted into an assertion that a corrected number should still be present.
"9.1 months" is in no register row. C-016 withdrew it: E-002 had added the Total column of one Census table to the built-for-sale column of another, stated a total equal to neither, and cited a year the series does not publish. The register was corrected. The check went on requiring the withdrawn figure on three pages — and printing OK when it found it, because the landing page still carried it: "single-family authorization-to-completion 9.1 months (2024), of which 7.6 building", exactly the wrong decomposition and exactly the wrong year.
"93,000" had become a coincidence. It was E-012's old shipment count. C-024 replaced that with 92,902, and the entry kept passing by matching an unrelated $93,000 income figure on a different row. A spot-check that matches the wrong number is worse than no spot-check: it reports confidence it has not earned.
Neither was caught by `check_retired`, because nobody added these figures to the retired-claims list when the corrections landed. The corrections fixed the register and the beats and stopped there.
The spot-check list is re-anchored on figures that still exist — and now leads with a comment saying that every entry must still exist in the register, and that when a correction lands, this is one of the places to come. "373,143" and "49,717" are added, so the anchor figure is now checked for presence across all three renderings.
Retired-claims gains patterns for the withdrawn figures, with written exemptions for E-002's own notes, which have to name what they corrected.
A correction has more surfaces than the register and the prose. C-016 and C-024 both corrected rows and beats, and both left a check behind that still encoded the old number. Nothing in the process pointed at `tools/` — the checks are where this project keeps its assumptions about what should be true, and an assumption is exactly the thing a correction invalidates.
That is now written into the file it applies to rather than only here.
RegisterE-002 E-012 check these rows →
In series, the weakest link governs everything downstream. The weakest link here is link three — the per-unit repossession claim, where the mechanism is in the statute and the magnitude is measured nowhere. Drawn as a line, a reader who doubts link three has been invited to discard the whole argument, including the origination story, which does not depend on link three at all.
The origination evidence is independent: securitisation halved in 2000 while shipments fell 28.1%, financing contracting 1.8 times as fast as the volume it financed. That stands whether or not repossession velocity is ever measured.
The beat says why it is drawn that way rather than leaving the reader to infer it: a chain drawn in series would have overstated what a single doubt destroys.
The 57% loss severity is now in the beat, where it belongs. Conseco liquidated 25,750 units in 2001 recovering 43 cents on the dollar, from its own income statement, contemporaneous. It is the strongest evidence that the glut was real and it had been sitting in the register only.
E-056's section text is read, closing the gap left when Cornell served only subpart headings. 14 CFR 21.11 and 183.41 now quote from GPO. One thing the text adds that this project had not recorded: an ODA performs its functions "on behalf of the Administrator" — the delegation is explicit and the authority stays with the FAA. That is a sharper reading than "delegated verification", and it cuts both ways: it confirms the structure is real, and it means the aviation model is delegation within an agency's authority rather than an outside determination the agency accepts, which is the distinct thing E-088 and E-089 are cited for. The row says not to blur them.
State the strongest version a hostile reader would accept, not the strongest version that is defensible. C-016, C-024, C-025 and C-028 were all the same failure — a true claim stated one notch beyond what the evidence carried, with the honest version equally available and nearly as strong. None was a sourcing error and none is catchable by any gate in this repository: `check_citations` sees a resolvable source, `check_grades` sees prose matching its row, `check_retired` sees no withdrawn claim. A true claim stated too strongly is invisible to all of them.
Drawing the chain in series was the same failure in a different medium — not a sentence overstated, but a structure that made the argument look more load-bearing than it is.
---
RegisterE-056 E-122 E-124 E-129 check these rows →
> III · CLIMAX — A NUMBER THAT MOVED, AND DID NOT MATTER
That is the encoding-cost climax. `C-013` withdrew it in August 2026 — the claim that the cost of hand-encoding a jurisdiction closed this market was refuted by this project's own research, four of them were retired, and the act was rebuilt. The plate was not part of any beat, so nothing regenerated it and nothing read it.
The act nav had drifted the same way and for the same reason: I The problem · II Four failures · III What changed · IV The solution · V What it is worth describes an arc the sheet stopped making two corrections ago.
Neither is a beat, a chip, a caption or a register field, so no gate reached them. `check_consistency` reads the arc block in the beat sheet; nothing compared a rendered act label to the sheet at all. Found by screenshot during the first increment of the restructure, and it had been live the whole time.
This is the fifth error class in a third place: a hand-maintained list that decides what the page says about its own structure. The withdrawn-figures list, the extractor's class allowlist, and the errata document list all failed identically.
The three copies in `build_story.py` are gone. The labels themselves now read the approved target arc: the gap, America already solved this once, the quarantine, what the other attempts prove, where it stands.
---
Deferring something and then specifying it at length is incoherent whichever way Gate 0 comes back. It also reads as readiness: a reader who meets that much system design reasonably concludes the system is closer to existing than it is.
* What is actually running — an implementation of the deferred thing. * One parcel, start to finish — a walkthrough of a product that does not exist. * If you just need a home — the same walkthrough from the household's seat.
Their register rows are used elsewhere, with one exception: E-014, whose only HAP-08 pointer was the household beat. Its `used_in` now reads `HAP-02 S08` alone — the row stands, and the claim it supports is no longer made anywhere in the live narrative. No replacement figure or beat was written. The gap is the point.
What remains of the product is a marked section — what was designed, that it is deferred, and what would revive it — and the determination specimen stays whole inside it, because it is the clearest statement of what would have to be true and an outside review called it the best teaching artifact on the site.
The three keep their place in the record: `R05`, `R06` and `R07` in the sheet, rendered on the story page and on /revisions with what each said and why it went.
---
RegisterE-014 E-039 check these rows →
`check_retired` never flagged any of the three because RC-04's patterns match the claim as it was published — "arithmetic, not engineering", "the missing layer" — and these cards carried a paraphrase. A pattern list catches the sentence it was written against, not the claim; the same failure shape as C-014, where the leak sat in an element the extractor could not read. Here the extractor read all three cards fine and had nothing to look for.
The same sweep found the deck's meta description still calling it "a twenty-five beat narrative" — a count from an arc four revisions old, invisible to `check_consistency` because the phrasing is singular ("beat narrative") where the count patterns expect "beats".
The paraphrase is patterned: RC-04 now carries `turned out to be arithmetic`, so all three would have failed the build, and any future restatement in those words will. The pattern was added BEFORE the fixes and the gate run against it — it found all three, including one on /solution this sweep had missed.
---
The split turned out to be citable in one subsection. A.R.S. §41-4006 preempts local inspection of anything a certified unit's certification already covers, and its subsection (D) then names what stays local: zoning, fire zones, building setback, maximum area and fire separation, site development, property lines, on-site utility terminals. Read from the legislature's own site and quoted verbatim as E-132, Confirmed. The federal half was already E-091 (42 U.S.C. §5403(d)), Confirmed.
E-049 is untouched: it asserts the same scope limit for modular programs generically and stays Untested for want of a named document. E-132 is that document, for one state and one program type.
---
RegisterE-131 E-132 E-091 check these rows →
* Two questions, two answers — the advisory/load-bearing distinction survives whole; it is the section's investor cut. E-060's pointer moves with it. * Seven layers, each falsifiable — survives as one sentence; the stack is in HAP-05/HAP-06, which the research cut names. * What actually gets built — survives as "three ordinary building types that are legal somewhere and impossible here"; E-036's pointer moves with it. * Each failure has a named answer — does not survive. A table of named answers is a claim about a built thing, and the section's whole point is that the thing is not built.
The specimen stays intact as the section's second and final beat — it is the clearest statement of what would have to be true — and its turn line now hands to the open question rather than to the machine beat C-032 removed. The four old numeric URLs are pinned to the section head. The section states the revival conditions by name: E-039 and E-098.
---
RegisterE-036 E-060 check these rows →
The restructure map planned a split — precedent half staying in Act II, finance half becoming a new Act III beat. Executing it revealed both halves already existed. The precedent half duplicates "It already worked once" almost clause for clause; the finance half is Act III's own beats — the collapse carries E-012 and the lending penalty carries E-009. A new origination beat would have restated an act that already argues that branch.
The act's close, "Nobody has both halves", still stated the compiler thesis — "Preemption grants the right. Compilation makes the right exercisable." — with a law-plus-compiler figure drawn from it.
"Nobody has both halves" is reframed per the map to the boundary the statutes draw: construction preempted (E-091), siting expressly local (E-132), property classification unaddressed — one national answer for how, no standard for what or where, magnitude unmeasured (E-131). The compiler-thesis figure comes off the beat; the slot stays empty rather than carrying a chart of the argument the beat no longer makes.
The old numeric URL pins to the precedent beat. Act II is a pair: what worked, and where it stopped.
RegisterE-091 E-132 E-131 E-010 E-011 E-014 check these rows →
The register holds 133 rows. `/documents/` printed 116 rows · CSV, and the same figure was spelled out as "One hundred and sixteen claims" on `/documents/`, `/`, `/story/` and in the `<meta>` and `og:description` of `/evidence/` — the text a search result and a link preview show. The table on `/evidence/` rendered 133 OF 133 ROWS directly beneath its own stale description.
Nineteen rows are gaps nobody has measured. Seven pages said sixteen, in eleven separate sentences. `/` also carried "Eleven of seventy-one rows are unmeasured", a sentence that states two counts and had both wrong.
`/documents/` was wrong about the corrections log as well — 8 entries, "All eight are resolved and all eight stay published" — against 36 entries, C-001 to C-036. It advertised the register download at 23 KB against a 117 KB file. `/corrections/` itself was right throughout; only the page describing it was wrong.
Why the gate could not see any of it. `check_consistency.py` does not read the number on the page. It takes each number it already knows about, renders it as a digit and a word, and searches for that. The word-forms lived in `NUMBER_WORDS`, a hand-maintained table of about forty integers. It stopped at 115. It also ran 2 to 15 and then jumped to 32, so sixteen was missing from the middle of it. A number absent from the table is a number the check cannot look for.
The table carried a comment saying exactly this, and prescribing the remedy: "When the register crosses the top of this table, extend it." The register crossed the top of the table. Nobody extended it.
There was a second blindness under the first. `word_or_digit()` wrapped every pattern in `(?<!and )(?<!hundred )` so that a compound ending in seven could not be read as a count of seven. That is a real defect and the guard was right about it, but it defended by making the compound unmatchable rather than by matching it — so extending the table would not have been enough on its own.
And a third: the check globbed `index.html`, a filename convention standing in for the set of pages that ship. `site/working-board.html` had never been read by it. `check_site.py` has globbed `*.html` all along.
This is the fourth time a hand-maintained list has failed this way here. The withdrawn-figures list (C-029), the extractor's class allowlist, and `build_errata.py`'s document list were the first three. `CONTRIBUTING.md` states the rule they produced — any list that decides what gets checked must be derived, inverted, or must fail loudly — and `NUMBER_WORDS` broke a rule that was written before it broke. None of them failed when something was missing. They succeeded, and reported clean.
Two further defects surfaced once the gate could see, and both are recorded here because they are the same failure wearing different clothes:
`/solution/` badged three rows Confirmed that the register grades Untested. Under the heading "The parts are not hypothetical", E-047, E-048 and E-050 each carried a Confirmed chip and the sentence "Three things this road depends on are already Confirmed in the register." C-017 regraded all three on 2026-08-10 because their source fields named no document a reader could open. The pitch page never moved behind the correction. `check_grades.py` was right to pass — it reads a beat's prose against the rows the beat cites, and this was builder-authored markup that cites nothing. The beat sheet had already committed to the honest version: "The rows this section rests on keep their grades … Nothing in this section upgrades them." Only the page disagreed.
E-074's notes froze a grade E-001 no longer holds. The row read "same posture as E-001, graded Supported". E-001 has gone Confirmed → Supported → Contested; it is Contested now, and it is this site's own headline cost figure. The note was true when written and became a claim that the register contradicts.
The phrasings were left narrow. Broadening one to "{n} rows" was tried and produced sixty false positives on sentences like "two rows asserted more than their sources" — the specificity was correct all along. What was wrong was the number side, not the phrase side.
The page set is now derived from what ships — every `*.html` under `site/` — with `working-board.html` carrying a written exemption, and `<meta>` and `og:description` are read as the prose they are.
Two new assertions close the surfaces this exposed. A grade word printed within forty characters of an E-number must match that row's grade, wherever on the site it appears. And the register download's advertised size is checked against the file, because that figure changes on every register edit and is the one number here nobody could keep right by hand.
Every stale figure is corrected. `build_evidence.py`, `build_story.py` and `build_solution.py` now interpolate the counts they used to spell out; `numword()` grew hundreds, since falling back to digits was why the sentence kept its hand-typed words. `narrative.py` gained `register_counts()` and `register_grades()`, because neither it nor `build_story.py` had ever read the register at all. The beat sheet's "Nineteen register rows are empty" also stops enumerating eleven of them as though the list were complete.
`/solution/` now renders each grade from the register and states the honest version: these three things operate in American law, their rows are graded Untested, the grade is about the filing rather than the law, and nothing on the page upgrades them.
`test_gates.py` gains five cases, four of them negative, and each was verified by breaking the gate and watching it fail. One of them failed to fail on the first attempt — it was written to prove that the alternation order protected the compound match, and reversing the order changed nothing, because backtracking does that work. The claim was wrong, the comment asserting it was wrong, and both were corrected. `GATE_LISTS` records what replaced `NUMBER_WORDS` and which shape each new list takes.
The lesson is not that the table needed a higher ceiling. A hole in the middle of it did the same damage as the edge — sixteen was missing at a value nobody would have thought to check, and it was wrong on seven pages against six for the number everyone was watching. Raising the ceiling would have closed neither. A list that decides what gets checked cannot be repaired by being made longer.
The correction that would have caught this earliest is not in `tools/` at all. It is that a comment describing a known defect and prescribing a manual remedy is not a fix. It is a defect with a note attached, and this one sat in the file for the whole time the site was wrong.
---
RegisterE-001 E-074 check these rows →
This is the failure mode a register is least protected against. Nothing was misread, no source was mis-cited, and no gate could have fired — the rows were accurate on their retrieval date and rotted afterwards. A `review_by` of 2027-02 would have caught it eighteen months late.
It also matters more than a vintage refresh usually would. The 8.3 months that E-002 carried is where the site's "eight are spent building it" rounds from, and where the month strip's `BUILD · 8` comes from. The current figure is 7.4.
Both figures were verified on 2026-08-17 by parsing the source workbook directly rather than reading a summary of it.
Five rows are added from research conducted alongside this correction. Three of them cut against this site rather than for it, and they are filed for that reason:
E-134 — Census tabulates the Survey of Construction for the United States and four regions only, and says in its own methodology that its sample cannot support state or local estimates. There is no state-level construction duration in America and no records request produces one.
E-135 — the authorization-to-start gap in the United States is 1.4 months. It is the one post-permit delay Census measures, and it is small. Any account of the months around the build has to place them before authorization, because this row closes the window after it.
E-136 — the Netherlands publishes the delivery period split into a permit phase and a construction phase, the only country found that does. The wait between permit granted and ground broken is 8.1 months and grew 62% in a decade, faster than construction grew. That phase is neither approval nor building, and it sits downstream of the Dutch statutory permit deadline, so no permit-office reform reaches it.
E-137 — England, where approval time exceeds construction time without ambiguity: a mean of 710 days to determine an outline application for major housing in 2024 against 284 days in 2014, with approvals slower than refusals at 857 days against 453.
E-138 — an owner-built American house takes 12.8 months to build against 6.1 for a spec house, and is the smaller of the two. A two-fold spread in construction time inside one regulatory environment sets a floor on how much of any national figure can be attributed to approval regimes.
---
RegisterE-002 E-114 E-134 E-135 E-136 E-137 E-138 check these rows →
Checking the series first is what stopped that. Census start to completion, Total 1-unit, runs 7.0 · 6.8 · 7.2 · 8.3 · 8.6 · 7.7 · 7.4 across 2019 to 2025. A headline anchored to the latest published year would have read eight, then nine, then eight, then seven across four consecutive vintages — without anything changing about how an American house gets built. 2023's 8.6 is a pandemic supply-chain peak and 2020's 6.8 is the trough of the same disturbance.
The defect was never the value. It was that a headline claim was pinned to a single observation of a noisy series, and would have gone stale on exactly the schedule that produced C-038 in the first place.
Every window from three to seven years rounds to eight — 3-year 7.90, 5-year 7.84, 7-year 7.57. Only the single year 2025 rounds to seven, and only the full 2018-2025 window does, at 7.46. Writing seven would have been the less supported of the two readings while looking like the more careful one.
Nothing else moves. The strip still sums to 32, the twenty-four months of paper are unchanged, and both sequence panels keep the 32-month ruler they are drawn on. The v2 work order's instruction on item 7 — keep the number, change what it is attributed to — turns out to be right for a reason it did not give.
RegisterE-139 E-002 E-114 check these rows →
The enrolled act says the opposite. IC 36-7-2.5 sec. 19: "An applicant may use a private provider … regardless of whether the unit is able to conduct the activity … within the time set forth in section 18." Private-provider use is unconditional. Missing the deadline triggers a fee refund plus a convenience fee capped at one hundred dollars, and nothing else.
That is a materially stronger fact than the one this row carried, and it was stated weaker for two years because nobody opened the statute.
The row was also wrong about when. It implied a 2025 regime; the act reads `[EFFECTIVE JANUARY 1, 2026]`. A vendor explainer circulating the July 2025 date is wrong, and the enrolled act is the document.
The underlying reason both errors survived is the one C-017 already named: the source field read "Indiana reform", which names no document a reader can open. C-017 correctly regraded the row to Untested for that. What C-017 could not do was notice that the unopenable citation was also concealing a wrong claim — an unresolved citation hides the content of the row, not just its provenance.
E-173 is added alongside it for the part of the same act this project had never looked at: the unit shall accept the provider's report without further inspection, and the unit and its agents are immune from liability for the provider's acts, indexed at IC 34-30-2.1-583.7.
This is the second state found to pair acceptance with express statutory immunity — Florida is the other, and its clause has been in the enabling act since 2002 (E-171).
The lesson is about what an unresolved citation costs. C-017 treated a naked source field as a provenance problem and regraded forty-four rows on that basis, which was right. This row shows the second cost: while the citation was unopenable, nobody could check the claim either, and the claim was wrong in the direction that understated the project's own case. Forty-one of those rows are still unresolved. Each is a claim nobody has been able to check since August 2026, and some of them will be wrong in this direction too.
RegisterE-050 E-173 check these rows →
The posted timeline for the current cycle closes 30 October 2026 at noon MST. The prior cycle closed 31 October 2025. Acting on the published claim would have missed the only route this project had identified as reachable, by roughly two months.
The claim was not invented. The Terms and Conditions do say "Nominations are accepted during the designated nomination period between September and December each year." The row quoted the general terms and never checked them against the cycle actually posted, and the two do not agree. A source that contradicts itself is a reason to read both halves, not to pick the convenient one.
The second half of the sentence is worse, because it was stated as fact and is contested. The Terms say the contest is open to "individuals over the age of 18 and organizations of all kinds." The FAQ on the prize page says "Organizations within the United States are eligible." For a solo researcher with no entity, that is the dispositive question, and this site asserted the favourable reading of a source that says both things.
The source field read "Ivory Innovations" — a publisher, not a publication. That is the C-017 signature, and it is the third row this month where an unopenable citation was concealing a wrong claim rather than merely an unverified one.
E-183 is added for the eligibility conflict and graded Contested, which is what a source disagreeing with itself produces. It says plainly that this must not be assumed either way and names the address to ask.
`/about` now states the October date, says the site itself had it wrong, and marks the individual-eligibility question contested rather than settled.
Nominations are not yet open — the form reads "Content coming soon" — so nothing was missed. The pack for filing it is in `HAP-kb/40-fieldwork/`.
What made it findable was the same act that has found the last three: opening the source. The register now carries a review date that expires before the deadline does.
RegisterE-045 E-183 check these rows →
`build_log.py` iterated `reversed(entries)` under a comment reading `# newest first`. That is only newest-first if the source file is in date order, and `research-log.md` is not: its headings run L-016, L-013, L-014, L-015, then L-001 through L-012. Reversing that produced L-012 … L-001, L-015, L-014, L-013, L-016 — so the newest entry in the log rendered last, below an entry from six days earlier, under a page that told the reader the opposite.
It has been wrong for as long as the page has existed. Nothing caught it because nothing here compares a rendered order against a stated one, and the failure is invisible to a reader who does not already know which entry is newest.
The source file stays in the order it is in. Ordering the record by hand is the thing that went wrong.
So every citation minted the obvious way — by reading an ID off the page and appending it — has been landing at the top of the log rather than at the entry, since the log was first published. `/corrections/#C-017` resolved to nothing. The site handed out the broken form itself, in the visible text, on every entry.
Internal links were unaffected: the builder lower-cases them, so all fifty-eight in-repo fragment links worked and `check_site.py` verified them. The defect existed exactly where no gate could see it — in the URL a reader constructs by hand.
The anchors are not renamed. Renaming them would break the fifty-eight links that do work, to fix a form that can be handled on arrival.
`file:///Users/johnmullin/Projects/lintel/site/corrections/#c-006`
Sixteen correction links, five "the PDF as published" links, and the document links — all of them `file:///` paths into a directory on the author's machine. `lintel-report.pdf` and `HAP-08-narrative-r1.0.pdf` are worse: they point into `file:///Users/johnmullin/Desktop/housing-as-a-product/`, a directory that no longer exists even on that machine.
The cause is mechanical. `render_pdf.py` copies the document to a temp file beside the source so the vendored fonts resolve, and headless Chrome then resolves every relative `../` against the local filesystem. The fonts were the thing being solved for; the links were not considered.
Nothing caught it. `build_errata.py` checks that every shipped download is covered by an erratum, and `test_gates.py` checks that the coverage list is derived from what ships. Neither opens a PDF and reads its link annotations, and `HAP-02-errata-r1.0.pdf` is explicitly self-excused from the text sweep on the grounds that rendering the errata of the errata is not useful.
The two older PDFs are not re-rendered. A shipped PDF is never edited in place, and `/errata` exists precisely because a citation has to keep resolving to what it cited. They will pick the fix up at their next revision.
`check_pdf_links.py` reads the link table of every shipped PDF and fails on any `file://` URI. It did not exist when this correction was written, and a correction without a gate is the shape this project keeps re-learning — the withdrawn-figures list, the extractor's class allowlist, the errata document list, and `NUMBER_WORDS` were all defects fixed once and repeated later.
The two documents that keep the defect are exempted inverted: each entry claims its file is still broken, so re-rendering one makes its exemption stale and fails the run. An exemption cannot outlive the defect it excuses.
What this says about derived artifacts. The errata sheet was regenerated faithfully, from the right source, by a tool that worked exactly as designed — and it was wrong about the world in a way no check in this repository could observe, because every gate here reads the repository. A PDF is the one artifact that is read somewhere else.
Only a reader who systematically walked every route found all four. The one page that carried the project's largest concession was reachable from a link inside a falsification statement and almost nowhere else.
Every entry survives. Every ID survives. Every old URL 301s.
The route is new rather than the busiest of the four, and that cost a redirect hop. Keeping `/corrections/` would have let 58 of the 70 citable fragments resolve with no redirect at all. But eight of the sixteen log entries carry `correction: —` — positions held, narrowed or abandoned with no error ever published — and citing those as `/corrections/#l-002` makes the URL assert something false about them. A 301 is permanent; new citations mint from the new path. A heading cannot outrank a path.
What the merge cost, and what was built to pay for it. Four pages meant four independent existence gates: an exemption naming a page that no longer exists is a hard failure, so deleting the errata used to fail the build three times over. One page means one exemption covering three times the surface, and deleting the errata section would have left every gate green.
Two new checks answer that. `check_sections.py` asserts every section anchor is present and carries at least its floor of entries, and holds the per-section reasons that used to sit one-per-page in three exemption lists. `check_redirects.py` reads `netlify.toml` — which nothing in this repository had ever read — and asserts that every retired route has a rule, that every destination exists, that every fragment resolves, and that no rule carries a fragment when its source route had citable anchors of its own. That last one matters: a browser re-applies the fragment it arrived with only when the redirect names none, so `to = "/record/#corrections"` would have silently discarded `#c-013` and landed every deep citation in the same place.
Both were verified by breaking them and watching them fail.
The merge is not obviously right and the case against it was argued before it was made. Four routes with four gates are safer than one route with one, a 33,000-word page is harder to read than four short ones, and the strongest objection — that consolidating gated exemptions into a page-wide skip is the exact shape this project has been burned by four times — is recorded here rather than in a footnote. The answer is that the granularity moved from the filesystem into `check_sections.py`, not that the objection was wrong.
The first two sentences are right. The last clause is wrong, and it is wrong about the provision that matters most.
Section 301 of the Act did not stop at the definition. Section 301(c) added a new subsection to the same statute the definition sits in — 42 U.S.C. 5403(i) — and it requires every state to certify, not later than 11 July 2027, that its own laws subject a chassis-free home to the same treatment as a chassis one, *"including with respect to financing, title, insurance, manufacture, sale, taxes, transportation, installation"* (E-197). A state that does not certify by its deadline must prohibit the manufacture, installation or sale of the home (E-198). Two years is allowed where a legislature meets biennially. Recertification is annual. And the Secretary is required to publish and maintain a list of which states are current.
So the fifty state legislatures are not an open-ended dependency. They are on a twelve-month clock, with a prohibition as the penalty, aimed expressly at title and financing — which is the exact layer this project's Act III argues the 1974 Act left alone.
How the error was made, because that is the more useful half. E-090 was written carefully. Its note lists the provisions a secondary brief attributed to the Act and says they are "NOT verified here and are not claimed" — and the first item on that list is "state certification deadlines". The row was honest. The failure was that the beat then wrote a sentence whose truth depended on the unverified provision being absent, rather than unknown. An unopened source is not an empty one. A row that declines to claim something does not license a claim that the something is not there.
Four rows were opened by reading the codified text of 42 U.S.C. 5403 subsection by subsection, which is what should have happened before the sentence was written. E-090's note stands unchanged and is now the record of a caution that was correct and then ignored one beat later.
Two of the other provisions E-090 declined to claim have also now been opened rather than left implied — E-212 for the Title I accessory-dwelling amendment, and the energy provisions deliberately left alone as outside this argument.
RegisterE-090 E-197 E-198 E-199 check these rows →
Arizona has required a plan library since 2025. A.R.S. 9-461.20, added by Laws 2025 Ch. 259, requires every municipality to establish standard preapproved housing design plans or a program, administratively approved "without discretionary review", and its class 4 — accessory dwelling units at two hundred, six hundred and one thousand square feet — was to begin 1 July 2026 (E-211). No population threshold applies, unlike the accessory-dwelling statute itself.
The claim was not merely stale. It was the load-bearing example of a thesis this site states four ways — that a granted right with no information layer behind it produces nothing — and the state named in the example had legislated part of the information layer a year before the sentence was published.
The argument survives the correction and is narrower for it. "Nothing exercises the right" was a stronger sentence than the evidence carried; "the right was granted, the plans were mandated, and the volume did not move" is what the record now shows, and it is a harder fact for a reader to dismiss.
Whether any Arizona municipality has actually published its class 4 plans is unmeasured and is a cheaper question than E-037 — it is a website read, not a records request.
RegisterE-027 E-211 check these rows →
Counts for three cities were obtained from city staff and published in the *East Valley Tribune* on 19 August 2025, under a headline that states the finding this project would have wanted: "Casita law has had little impact on Mesa". Mesa had issued 29 accessory-dwelling permits by August 2025 against 30 in all of 2024. Chandler had received 18 permit requests against 10 in 2024. Scottsdale had approved one application and issued no permit (E-210).
Two defects, and the second is worse than the first. NOT PUBLISHED was wrong — the figures existed, in a searchable newspaper, and nobody here had looked. And the absence was doing work: a gap this project called unmeasurable without records requests was partly answerable by reading, which is the cheapest possible test and was not run.
A third thing surfaced in the same pass: Tempe publishes an accessory-dwelling dashboard. Its figures could not be read and are not claimed.
The three numbers are in three different units. Permits issued, permit requests received, one application approved with no permit. They cannot be summed, ranked or averaged, and the single metro total that suggests itself is not a number anybody has. The first draft of the summary that produced this correction wrote "roughly 47 permits across two cities", which adds a count of permits to a count of requests.
Gate 1 is unchanged in purpose and cheaper in scope: the records requests are still the way to get a series, and the reading that should precede them has now started.
RegisterE-037 E-210 check these rows →
Act II's plate read "Four attempts, each failing bigger than the last". Act II is "America already solved this once" — the 1976 preemption. The attempts act is Act IV, whose plate read "What follows if that is true". Act V's read "What it is worth, who must want it, and what would kill it", which describes an act the sheet no longer has.
This is the fourth instance of one defect: the arc written down in more than one place. The file's own header says so — "This was a fourth hand-written copy of the arc" — and the count was five.
They are not derived from the sheet, and the reason is on the record rather than implied: an act plate deliberately withholds its act's payoff, so it cannot be generated from the act's own name or from its beats without spending the tension the act exists to build. That makes it the one copy that has to be written by hand — so it gets the treatment a hand-written copy needs, which is a consistency check rather than good intentions.
The sweep was run against the register, and the register did not contain the rulebooks. It does now. For a home certified to Fannie Mae's MH Advantage or Freddie Mac's CHOICEHome standards, an appraiser is directed to site-built comparable sales — Fannie requires "a minimum of two site-built homes" where fewer than three programme comps exist, Freddie says that where none are available the report *"must contain site-built homes as comparable sales"*, and FHA has said the same since November 2023 (E-207).
So the claim as written is too broad. Mandatory site-built comparables for a factory-built home are not a proposal; they are three years old in one rulebook and current in all three.
Chip and gloss are rewritten to the surviving claim. The absence-claims file's item 5 is reopened and reclassified from still standing to narrowed, which moves the sweep's own arithmetic: the corrections are no longer fewer than the findings by as much as it recorded.
E-207 is filed with a note stating that it cuts against this project's framing, so a future sweep meets the counter-evidence inside the register rather than having to rediscover it.
RegisterE-063 E-095 E-207 check these rows →
It is inline-styled on purpose. The global study brings its own stylesheet and its own `:root`, and the banner has to survive being dropped into it without either reaching into the other. So the CSS is assembled in `build_research.py` as a Python string and interpolated into a `style="..."` attribute. That string contained a font stack, and the font stack contained a double-quoted family name:
`font:500 13px/1.55 ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,…`
A double quote inside a double-quoted attribute closes the attribute. Parsed as a browser parses it, the `style` value ends at `BlinkMacSystemFont,` — a trailing comma, so invalid, so dropped entirely — and everything after `"Segoe UI"` becomes junk attributes on the tag: `segoe`, then `ui",roboto,helvetica,arial,sans-serif;background:#141618;color:#a9aba4;padding:14px`, then `#f5a524;margin:0"`.
The background, the colour, the padding and the rule under it never applied. The sentence those two documents exist to carry has rendered as unstyled body text, in both the banner and the footer, on both pages, for as long as the banner has existed.
Nothing caught it, and the reason is worth stating. Every gate in this repository reads the shipped pages as text. `check_site.py` greps the footer line, the leak list, the links and the anchors — every one of which was present and correct, because the content was never wrong. The bytes were exactly what the builder meant to write. What was wrong was how a browser reads them, and no check had ever parsed a generated page as HTML rather than searching it as a string.
It surfaced only because the August brand pass restyled these two pages, and an adversarial review of that commit parsed the output instead of grepping it. The brand pass also changed the banner's amber from two invented values to the register's own `#F5A524` — a change that, it turns out, never reached the page either.
`check_attrs.py` is new and parses every `.html` under `site/`, failing on any attribute name containing a character that cannot occur in one. It is written against name shape rather than a roster of known-good attributes: an allowlist would need maintaining against every legitimate `data-` and `aria-` attribute the site grows, would go stale, and would fail closed on the next honest addition. Its one module-level collection is the set of illegal characters, which is a property of the HTML grammar and not of this site, so it cannot drift against the pages.
The gate was checked against the defect before being trusted: run over the version that shipped in `50892ae` it reports seven malformed attributes, and over the fixed tree it reports none.
What this says about the shape of the gates. Three defects were found in this class in a single evening — this one, a `.rv` collision with `styles.css`'s scroll-reveal class that rendered every salvage line on `/models/` at `opacity:0`, and a bare `<div>` injected inside an `<h2>`. All three rendered rather than failed. The page loaded, the content was there in the bytes, every gate stayed green, and the result was wrong only to a person looking at it. The gates were built to protect the register — that a figure traces to a row, that a withdrawn claim does not survive, that a citation resolves. None of them was built to ask whether the page a reader actually sees says what the source says. `check_attrs.py` closes one narrow part of that, and the wider gap stands: the honest statement is that this project has no automated check on rendered appearance, and found all three of these by looking.
Live on the public page, in `cases.csv` C01:
> Share of new single-family fell from ~20% pre-2000 to ~9% (register).
No row carries that share, and none ever has. E-012 carries manufactured-home shipments — absolute unit counts — not a share of new single-family. The same unregistered share appeared a second time in `assignments.csv`. A reader who followed that attribution would have found nothing, which is the failure CLAUDE.md's first rule names as unrecoverable.
Two further classes, found only once a gate existed to look:
A mis-citation. C06 said SMARTcodes "ended 2010 for lack of funding (register)" over a structured pointer to E-082 — *variables governing adoption of automated compliance checking*, which does not support that claim. The row that does is E-127, which quotes the sentence verbatim.
Eight unresolvable appeals. `(register)`, `per register`, `register chattel penalty rows`, `register (chassis accident)` — attributions naming no row, in five more places.
And separately, C00 gave 7.5 months start-to-completion for 2025 where E-002 gives 7.4, verified against the source workbook on 2026-08-17.
The first two were caught by the session that built the route and handed to this one as data decisions rather than build ones. That was the right call and it understated the problem: there were ten, not two.
The unregistered share is not re-registered anywhere. It is arithmetically derivable from E-012 against Census single-family starts, but a derived figure needs its own row, its own grade and a stated derivation, and inventing one to keep a sentence would be the same error in a better disguise. The sentence changed instead.
`validate_design_space.py` grew the gate that was missing: an appeal to the register must name a row, and that row must exist. It deliberately does not require a duplicate `SRC-21` pointer — `assignments.csv` and `couplings.csv` have no sources column, and that rule would have failed honest rows and taught the next author to delete the attribution rather than name the row.
Mutation-tested in both directions before being trusted: restoring the original C01 sentence reproduces the failure, and pointing a named citation at a non-existent E-999 is refused as unresolvable.
RegisterE-002 E-009 E-011 E-012 E-080 E-081 E-090 E-091 E-127 E-128 check these rows →
CSS reads `\n` outside a string as an identifier escape for the letter "n". So
}\n.docbody .sheet{ ... }
parses as a rule for the selector `n.docbody .sheet` — an element named `n` carrying class `docbody`. No such element exists in HTML. Every rule after the first was dead, and the page rendered in whatever the site's own stylesheet happened to give it: the title block's 58px clamp lost to the global `h1` hero size, the sheets lost their cards, and the standfirst lost its colour.
`/research/global-build-times.html` has been live in that state since it published.
The interesting part is why nothing caught it. The builder already carried a guard written for this exact failure, and its docstring says so: scoping only ever adds a prefix, so if the stylesheet shrinks by more than a tenth, rules were dropped and the build must refuse. It passed. The bug did not drop a single character — it added two per rule. The stylesheet was longer than the original and every byte of every declaration was present and correct. Only the selectors were unparseable.
All eighteen checks were green over both pages.
`assert_css_sane()` now refuses the build when emitted CSS contains a literal backslash-n, and is called for both hosted documents. It was verified by reintroducing the original join and watching the build fail with 70 sequences named.
Two consequences were fixed in the same pass, both of which had been invisible while the stylesheet was dead:
The documents ignored the theme switch. Both hard-code a light palette — the global study also declares `color-scheme:light` — so once their rules were live they rendered a near-white page under a dark masthead. Their design tokens are now re-pointed at the site's, appended after the scoped stylesheet rather than edited into it, because the source file is a citation and has to keep resolving to what it cited.
The site was styling the document. Scoping stops a document styling the site; it does nothing in the other direction. The thesis collides with the design system on nine names it already owns — `.sheet`, `.stamp`, `.titleblock`, `.warn`, `.rail`, `.stage`, `.num`, `.dl`, `.dn`. The document's scoped rules won every property they declared and the site supplied the rest, which is how the standfirst arrived in upper case: the site's `.sheet` is a mono label utility carrying `text-transform:uppercase`, and the document had no reason to say `text-transform:none`. Its classes are namespaced at build time now, so the collision is not resolved in the document's favour — it is made impossible. The global study is deliberately not namespaced: it shares class names with `charts.CSS` on purpose, and prefixing it orphaned every chart selector.
The lesson is the one C-044 and C-051 already taught, arriving a third time. A derived artifact was faithfully generated, and wrong about how a browser would read it. The guard that should have caught it measured the artifact's size, which was right, and never its shape, which was not. A gate that counts bytes cannot see a selector that parses into something that matches nothing — and this correction is the third to say so.
Logged as C-013The largest correction
August 2026 · the largest correction this project has made What changed, and why. The central explanation this site offered — that one number closed the market for compiled building codes — is wrong. It has been removed rather than softened, and this page says what it said. In August 2026 a falsification statement was filed here, in public, before any evidence was collected. One of its three clauses has now been tested against the record. The thesis lost it. What follows is in four parts, for each thing that moved: what the site claimed, what the evidence showed, what replaced it, and what is now unmeasured as a result. Every claim has a row in the [evidence register](../evidence/), and every removal is logged in the [corrections log](../corrections/) as C-013. Removed · was the climax of the argument
A thesis whose credibility rests on grading its own claims cannot survive quietly editing away its errors. The falsification statement was filed in August 2026, before evidence collection, and it named encoding cost per jurisdiction as one of three things that would kill the thesis if it did not move. That clause has now been tested. The answer came back against the thesis — not because the cost failed to fall, but because the cost was never the constraint the statement assumed it was. That is a worse result than the statement anticipated, and a more useful one. The register's job was to make this discoverable rather than deniable. Thirty rows were added recording what the research found, four of its beats were deleted, one central claim was withdrawn, and the count of things nobody has measured went from eleven to fifteen — the correct direction for a project doing research, and the opposite of the direction a pitch moves in. Nothing on this page is a request. It is the record — of one revision. The whole sequence, every position held and given up since this project started, is [the research log](../log/). Register integrity, separately. An audit of every version of the evidence register in this project's history, run the same week, found that no row ID has ever been reassigned in eighteen versions — but that nine rows had their values or grades rewritten in place, and that nothing in the pipeline would have caught it if a change had gone unrecorded. IDs are now append-only by machine, and a claim's text cannot change without either a correction entry naming the row or a pointer to what superseded it.
TwoWhere this moved
The corrections log records where this project was wrong. This records where it moved — a larger set, and a more useful one. Newest first. 6 opened · 4 narrowed · 3 held · 3 withdrawn · 2 rewritten · 2 regraded.
RegisterE-222 E-227 check these rows →
RegisterE-039 E-107 E-200 E-208 E-211 check these rows →
RegisterE-199 E-200 check these rows →
RegisterE-197 E-198 E-200 E-201 check these rows →
RegisterE-133 check these rows →
RegisterE-056 E-057 E-088 E-089 E-109 check these rows →
RegisterE-027 E-080 E-081 E-100 E-107 E-108 check these rows →
RegisterE-080 E-081 E-082 E-088 E-089 E-108 check these rows →
RegisterE-039 E-107 check these rows →
RegisterE-102 E-103 E-104 E-105 E-106 check these rows →
RegisterE-070 E-071 check these rows →
RegisterE-051 E-078 E-079 E-080 E-081 E-082 check these rows →
RegisterE-075 E-076 E-077 check these rows →
RegisterE-001 E-021 check these rows →
RegisterE-030 E-031 check these rows →
RegisterE-054 check these rows →
RegisterE-052 E-054 E-055 E-056 check these rows →
RegisterE-040 E-041 E-042 E-060 check these rows →
RegisterE-002 E-004 E-038 check these rows →
ThreeWhat the closed papers still say
Errata for documents that cannot be edited. This site tells you to cite the paper. The paper was closed before the correction, so it still carries claims this project has withdrawn. Editing it is not an option — a citation has to keep resolving to what it cited — so the errata go here. Filable on its own as a PDF.
POSTER · Rev 3.1 Eight of Thirty-Two
…8–36 acquisition-to-entitled for complex projects; California subdivision routinely 3–7+ years; UCLA Anderson: full environmental impact report added 504 days on average in Los Angeles. CAVEAT · Today’s critical path is assembled from separate sources never designed to be added together. No dataset tracks a single project…
…industrialise housing rebuilt the one row that cannot compress. SOURCES · US Census Survey of Construction: single-family authorisation-to-completion 9.1 months (2024), of which 7.6 building. Entitlement commonly 6–18 months, 18–36 acquisition-to-entitled for complex projects; California subdivision routinely 3–7+ years; UCLA An…
…t the one row that cannot compress. SOURCES · US Census Survey of Construction: single-family authorisation-to-completion 9.1 months (2024), of which 7.6 building. Entitlement commonly 6–18 months, 18–36 acquisition-to-entitled for complex projects; California subdivision routinely 3–7+ years; UCLA Anderson: full environmental imp…
…black squares are not the problem. They are the product. Everything else is overhead. TODAY · 32 MONTHS FEAS · 2 ENTITLEMENT · 11 DESIGN + REVIEW · 5 20 MONTHS · NO PHYSICAL WORK OCCURS SITE · 4 4 · SITE BUILD · 8 SALE · 2 8 MONTHS · BUILDING THE HOUSE ↑ THE PART WE KEEP COMPILED · 7 MONTHS 25 MONTHS ELIMINATED — ALL OF IT WAIT…
HAP-02 · Rev 3.7 Twenty Thousand Uncompiled Codebases
…E SAVING REACHES THINGS NOBODY HAS MEASURED IRR ON AN IDENTICAL MARGIN, RESIDENTS How to read this FIVE MINUTES Sheet 00, then Sheet 05 (why this was arithmetic, not engineering) and Sheet 09 (why duration excludes capital). That is the investment case. TWENTY MINUTES Add Sheet 01 (the diagnosis), Sheet 04 (four cities, four locks) and Sheet 10…
…tion is old, and the arithmetic that defeated both is what changed. COST TO ENCODE ONE JURISDICTION HAND-CODED RULE TRANSLATION LLM-ASSISTED ENCODING VIABILITY THRESHOLD AT n = 20,000 CORENET begins · viable at n = 1 1997 2018 2026 CROSSING Schematic, not measured. The shape is the claim; the axis values are the research question. Quanti…
…o one replicated it is not that the idea was doubted. It is that the cost of writing a compiler by hand, multiplied by twenty thousand jurisdictions, exceeded any plausible return. That product was gated by a single number, and the number moved. The number is the cost of translating one jurisdiction's prose rules into executable logic. Until recen…
…d, and the arithmetic that defeated both is what changed. COST TO ENCODE ONE JURISDICTION HAND-CODED RULE TRANSLATION LLM-ASSISTED ENCODING VIABILITY THRESHOLD AT n = 20,000 CORENET begins · viable at n = 1 1997 2018 2026 CROSSING Schematic, not measured. The shape is the claim; the axis values are the research question. Quantifying the cros…
…es — the same constraint holds across every comparable system built to date. DIAGNOSIS: shipped L1, L3 and L4 — correctly, and in production. Roughly twenty-eight years of hand-translation bought exactly one jurisdiction. The compiler was written by hand. Katerra 2015–21 · venture capital Vertical integration of design and manufacture,…
…ludes risk capital, because the learning cycle is longer than a fund's life. 5. Singapore proved compiled codes work and hand-wrote the compiler over 28 years for one jurisdiction. That translation cost is what collapsed roughly three years ago — and it is the only reason this is now a live opportunity rather than a recurring…
…ordinance and the adopted code and writes out each binding provision as a rule by hand. Singapore did exactly that, and it is why twenty-eight years bought one city. Language models can now perform a large part of that reading and drafting, which is the first time in the history of this problem that the unit cost has moved at all. T…
…arated from general scholarship. THE POINT SHEET 01 Preemption grants the right; compilation makes the right exercisable. Neither delivers alone, and nobody has built both. THE DIAGNOSIS THE REPOSITORY NOBODY CAN READ The International Code Council publishes model codes on a three-year cycle. States and localities adopt them on their…
…ojects. California subdivision routinely runs 3–7+ years, and a UCLA Anderson study found projects requiring a full environmental impact report added 504 days on average. The compiled column is an estimate, not a measurement. Some stages overlap in practice; this is critical path, not the sum of all activity. Why duration…
…SDICTION FORKED RULESET AND VERSION PIN SINGAPORE, FROM 1997 32 → 7 MONTHS OF CRITICAL PATH, 9% → 47% TODAY VERSUS COMPILED FLOOR 32 MONTHS VERSUS 7 −23–28% 4 AUCKLAND RENTS AGAINST COUNTERFACTUAL REGISTER ROWS THAT RECORD AFTER UPZONING — THE SAVING REACHES THINGS NOBODY HAS MEASURED IRR ON AN IDENTICAL MARGIN, RESIDENTS Ho…
…e counterfactual within five years. Eight years on, rents were 23% below counterfactual under the preferred specification; a separate study puts them 28% below at six years. Lower Hutt replicated the result: starts up 10–18%, rents down about 21%. SOLVED: capacity — and, decisively, demonstrated that the saving reaches the resi…
…five years. Eight years on, rents were 23% below counterfactual under the preferred specification; a separate study puts them 28% below at six years. Lower Hutt replicated the result: starts up 10–18%, rents down about 21%. SOLVED: capacity — and, decisively, demonstrated that the saving reaches the resident rather than capitali…
…ge-scale natural experiment available anywhere. Measured outcomes: an additional 21,808 consents after five years — about 4% of the housing stock — or 43,500 within six years, about 9%, under a syntheticcontrol method comparing Auckland to similar New Zealand cities that did not upzone. Building permits per capita doubled aga…
…kland Unitary Plan 2016 upzoned ~75% of residential land and abolished minimum lot sizes; estimated +21,808 consents at five years (~4% of stock) and +43,500 at six years (~9%) by synthetic control; rents 23% below counterfactual at eight years and 28% below at six years; Lower Hutt starts +10–18% and rents −21%. See also the…
…ers, one dataset, six reconstructions, no single source of truth, no version. Singapore solved exactly this with a national data schema shared across seven agencies. → FIX: L3. One authoritative parcel-and-design record. BLOCKING SEQUENTIAL CALLS no concurrency, no timeouts Gates execute in series because each demands the prior gate…
…t four prior attempts spent their effort compressing the one segment that should be preserved. Today's figures: Census Survey of Construction reports 9.1 months authorization-tocompletion for single-family in 2024 (1.4 to start, 7.6 building); entitlement commonly runs 6–18 months, and 18–36 months acquisition-to-entitled for co…
…nce in the United States (2014). 7. Urban Institute. Challenges to Obtaining Manufactured Home Financing. Rate spreads and the shipment decline from ~240,000/yr (1977–95) to 93,000 (2017). 8. Study of by-right versus discretionary approval, Los Angeles Transit-Oriented Communities programme, ~350 multifamily projects, January 20…
…ng excluded them from most land. DIAGNOSIS: shipped L2 without L5. A certified type that no one could affordably finance. Shipments fell from roughly 240,000 a year to 93,000. The clearest evidence in existence that one layer is not enough. CORENET 1997–2026 · Singapore The first successful automated code-compliance system anywhere. Its curre…
…nce in the United States (2014). 7. Urban Institute. Challenges to Obtaining Manufactured Home Financing. Rate spreads and the shipment decline from ~240,000/yr (1977–95) to 93,000 (2017). 8. Study of by-right versus discretionary approval, Los Angeles Transit-Oriented Communities programme, ~350 multifamily projects, January 2018 – March 2020. By-…
…d be preserved. Today's figures: Census Survey of Construction reports 9.1 months authorization-tocompletion for single-family in 2024 (1.4 to start, 7.6 building); entitlement commonly runs 6–18 months, and 18–36 months acquisition-to-entitled for complex projects. California subdivision routinely runs 3–7+ years, and a UCLA Ande…
…tion-first experiment at commercial scale and published the result: compiled information without political standing is advisory, and it moved roughly two of the thirty-two months. What separates this from that category is not who the customer is — it is whether the determination carries legal weight. A screening tool tells you what it thinks; a c…
…survives in a sharper and stronger form, and so does the answer. Compiling the rules is necessary and insufficient. The screening market has already run the information-first experiment at commercial scale and published the result: compiled information without political standing is advisory, and it moved roughly two of the thirty-two months. What separa…
HAP-08 · Rev 1.0 The Narrative
…ng changed. MOVEMENT 3 OF 5 · CLIMAX CLIMAX Everything so far explains why it failed. This is the part that changed. THE TURN BEAT 16 · CLIMAX IT WAS ARITHMETIC, NOT ENGINEERING Nobody replicated Singapore because the idea was doubted. They did not replicate it because of a multiplication. 28 years of hand-encoding × n = 1 VIABLE — SINGAPORE BUI…
…OUS NARRATIVE TWENTY THOUSAND UNCOMPILED CODEBASES. Thirty-two beats in five movements — thirty-two months, four failed attempts, the constraint that turned out to be arithmetic, and an ending that concedes what it has not proved. Read it brief or in full, through whichever lens you like — the spine does not change. I · EXPOSITION — THE WORLD AS…
…ed about three years ago — because machines can now read the rules. COST TO ENCODE ONE JURISDICTION HAND-CODED RULE TRANSLATION LLM-ASSISTED ENCODING VIABILITY THRESHOLD AT n = 20,000 CORENET begins · viable at n = 1 1997 2018 2026 CROSSING Schematic, not measured. The shape is the claim; the axis values are the research question. For tw…
…a multiplication, not by a technology and not by political will. The cost of writing a compiler by hand, multiplied by twenty thousand jurisdictions, exceeded any plausible return. That is why the one success is a city-state: at n = 1, twenty-eight years of hand-encoding is affordable. At n = 20,000 it is not, and no amount of conviction changes t…
…and users cannot author new ones. INVESTORS Twenty-eight years, one jurisdiction. Multiply that unit cost by twenty thousand and you have the reason nobody replicated it. Remember that multiplication — it returns at beat 16. POLICYMAKERS This is the existence proof that compiled codes work in production, with a regulator's safety reco…
…hree years ago — because machines can now read the rules. COST TO ENCODE ONE JURISDICTION HAND-CODED RULE TRANSLATION LLM-ASSISTED ENCODING VIABILITY THRESHOLD AT n = 20,000 CORENET begins · viable at n = 1 1997 2018 2026 CROSSING Schematic, not measured. The shape is the claim; the axis values are the research question. For twenty-eight yea…
…12 C H EC K T H ES E R O WS → A certified type nobody could finance. Could it at least be compiled? ATTEMPT THREE · 1997–2026 BEAT 11 · RISING ACTION TWENTY-EIGHT YEARS BOUGHT ONE CITY It worked too. It cost twenty-eight years of handencoding to buy exactly one jurisdiction. 1997 –2026 CORENET · SINGAPORE FIXED Compiled rules, shared sc…
…actly one jurisdiction. 1997 –2026 CORENET · SINGAPORE FIXED Compiled rules, shared schema, 7-agency review in 20 days KILLED BY Rules hand-encoded — 28 years bought one jurisdiction Singapore built the first successful automated code-compliance system anywhere. Its current generation runs seven-agency concurrent review agains…
…E R O WS → A certified type nobody could finance. Could it at least be compiled? ATTEMPT THREE · 1997–2026 BEAT 11 · RISING ACTION TWENTY-EIGHT YEARS BOUGHT ONE CITY It worked too. It cost twenty-eight years of handencoding to buy exactly one jurisdiction. 1997 –2026 CORENET · SINGAPORE FIXED Compiled rules, shared schema, 7-agency r…
…S → A certified type nobody could finance. Could it at least be compiled? ATTEMPT THREE · 1997–2026 BEAT 11 · RISING ACTION TWENTY-EIGHT YEARS BOUGHT ONE CITY It worked too. It cost twenty-eight years of handencoding to buy exactly one jurisdiction. 1997 –2026 CORENET · SINGAPORE FIXED Compiled rules, shared schema, 7-agency review in 20 days KILLED BY Rules han…
…ion's prose rules into executable logic was for a person to read them and write out each provision by hand. That is what Singapore did, and it is why one city cost twenty-eight years. Language models can now do a large part of that reading and drafting — the first time the unit cost of this translation has moved at all. INVESTORS And the openin…
…not per project one record, one clock the type, not the comp built to a real order LINTEL a conformance authority — the part you actually build, and the only part that is new compiled determination + professional of record + insurance = accepted in place of first-pass review STAGES 04 AND 05 ALREADY EXIST Lenders and factories are not waiting…
…per project one record, one clock the type, not the comp built to a real order LINTEL a conformance authority — the part you actually build, and the only part that is new compiled determination + professional of record + insurance = accepted in place of first-pass review STAGES 04 AND 05 ALREADY EXIST Lenders and factories are not waiting…
…reamlined certification across state lines; Indiana's reform gives a private-review fallback when the jurisdiction misses a deadline. None of this is unprecedented — it is unassembled. RESEARCH Each layer is specified with a falsification test and a list of substitutable implementations, so a failed layer is replaced rather than fa…
…y time. E-027 THE PROBLEM, FULLY STATED BEAT 15 · CRISIS NOBODY HAS BOTH HALVES Preemption grants the right. Compilation makes the right exercisable. Nobody has built both. THE LAW GRANTS THE RIGHT Tokyo yes Auckland yes Arizona yes Singapore yes THE COMPILER MAKES THE RIGHT EXERCISABLE Tokyo no Auckland no Arizona no Singapore yes *…
…e objective rather than discretionary UNMEASURED 02 A jurisdiction accepts an outside determination In place of first-pass review, signed and insured NEVER DEMONSTRATED 03 A carrier insures it The determination becomes a priced, bounded risk NEVER DEMONSTRATED 04 A lender values the type, not the comp The lock that killed manufactured h…
…This is the part of the argument with the least evidence behind it and the most weight on it. That a jurisdiction will accept a Lintel determination has never been demonstrated; that a carrier will insure one has never been demonstrated. Both are named links on the road, both are unproven, and everything above rests on them. Naming a thing does…
…tles the question of whether the saving reaches residents: consents up 21,808 at five years, permits per capita doubled against counterfactual, rents 23–28% below, Lower Hutt replicating at 21%. RESEARCH Two caveats travel with this slide. Tokyo's permissive zoning is downstream of an asset structure America does not have —…
…s the question of whether the saving reaches residents: consents up 21,808 at five years, permits per capita doubled against counterfactual, rents 23–28% below, Lower Hutt replicating at 21%. RESEARCH Two caveats travel with this slide. Tokyo's permissive zoning is downstream of an asset structure America does not have — Japane…
…ion of whether the saving reaches residents: consents up 21,808 at five years, permits per capita doubled against counterfactual, rents 23–28% below, Lower Hutt replicating at 21%. RESEARCH Two caveats travel with this slide. Tokyo's permissive zoning is downstream of an asset structure America does not have — Japanese homes dep…
…part that has been shrinking 3.7M LIVING IN THEM homes short of demand Freddie Mac 2024 · 3.78M Up for Growth 2025 · estimates vary by method ~14% of output growth forgone, 1964–2009 $132k of regulation in each new home from housing supply constraints — contested, see below 26.4% of a $499,500 average — trade-association estimate Hsieh & M…
…is the part that has been shrinking 3.7M LIVING IN THEM homes short of demand Freddie Mac 2024 · 3.78M Up for Growth 2025 · estimates vary by method ~14% of output growth forgone, 1964–2009 $132k of regulation in each new home from housing supply constraints — contested, see below 26.4% of a $499,500 average — trade-association est…
…wered or conceded on the record, with the thing that would settle it named. Note the count has been corrected: the documents said nine objections and three conceded; there are eight, and five end in a concession. REGISTER E-016 E-017 E-031 C HE C K T HE S E R OW S → Five concessions. And four things nobody has measured at all. WHAT…
…gled it. 1976 THE HUD CODE FIXED A certified national type, by federal preemption KILLED BY Comparables-based finance treated it as personal property <30% vs >70% loan approval · 5.61% vs 1.20% spreads · 240,000/yr → 93,000 shipments A single national construction standard for manufactured homes, displacing local codes. Feder…
…. Federal preemption, delivered. It produced the only consistently low-cost newbuild housing product in the country. Then: loan applications approved under 30% of the time against over 70% for site-built. Rate spreads of 5.61% against 1.20%. Under 4% of chattel originations were refinances against 44% site-built. Shipments fell from roughly 240,000 a year…
…t When it goes wrong How long you wait Discovered by bidding against Quoted before you commit, like scarcity any other made thing A new kind of home: under 30% loan approval against over 70%, at A mortgage on a type with a published record — not a chattel 5.61% spreads against 1.20% loan on personal property Litigation — slow, expensive, A warranty against t…
…the same six parties, with the same authority, asking the same questions. What changes is that they stop each producing a private answer. Singapore's seven agencies read one national schema, which is why they can answer together in twenty working days. RESEARCH The claim that this is the binding pathology is argued rather than measu…
…t an accusation — it is an opportunity, because information processing is the one input that has become dramatically cheaper. RESEARCH Census reports 9.1 months authorization-to-completion for single-family in 2024, of which 7.6 is building. The pre-permit phase dominates the timeline and is not physical work. REGISTER E-002 C H…
…type, by federal preemption KILLED BY Comparables-based finance treated it as personal property <30% vs >70% loan approval · 5.61% vs 1.20% spreads · 240,000/yr → 93,000 shipments A single national construction standard for manufactured homes, displacing local codes. Federal preemption, delivered. It produced the only consistent…
…type, by federal preemption KILLED BY Comparables-based finance treated it as personal property <30% vs >70% loan approval · 5.61% vs 1.20% spreads · 240,000/yr → 93,000 shipments A single national construction standard for manufactured homes, displacing local codes. Federal preemption, delivered. It produced the only consistently low-co…
…site-built. Rate spreads of 5.61% against 1.20%. Under 4% of chattel originations were refinances against 44% site-built. Shipments fell from roughly 240,000 a year to 93,000. INVESTORS Preemption was granted and a certified national type existed. The product still died, because nobody could affordably finance it. This is the clearest evidenc…
…DOC HAP-08 · THE ARGUMENT AS ONE CONTINUOUS NARRATIVE TWENTY THOUSAND UNCOMPILED CODEBASES. Thirty-two beats in five movements — thirty-two months, four failed attempts, the constraint that turned out to be arithmetic, and an ending that concedes what it has not proved. Read it…
…the house? THE PRODUCT BEAT 02 · EXPOSITION EIGHT OF THIRTY-TWO Eight of those months are spent building the house. The other twenty-four are paper. 20 MONTHS — NO PHYSICAL WORK OCCURS 4 — SITE 8 MONTHS — THE PRODUCT 2 — SALE Twenty months pass before physical work begins. Four are site work. Eight are the house going up. Two…
…n a manual queue. Information first: the screening market — Symbium, Buildability, Canibuild — compiled rules across thousands of counties, and moved two of thirty-two months, because compiled information without political standing is advisory. Politics only: Arizona, a granted right with nothing to exercise it. Politics plus capital, skippin…
…already a commodity — Symbium, Buildability and Canibuild sell versions of it, and the screening market has shown what it is worth on its own: about two of the thirty-two months. The second row does not exist anywhere. The distance between advisory and authoritative is the whole business. POLICYMAKERS Note what the second row does not do. It doe…
…eue. No certified type for finance to attach to. Information first The screening Compiled rules without political standing are advisory. market Moved 2 of 32 months. Politics only Arizona A granted right with no plan library, no shared record, no type-based finance. Politics + capital The HUD Code Closest anyone came. No information…
…record to lend against. INVESTORS The screening market matters most here. It has already run the information-first experiment at commercial scale and published the answer. Compiling the rules is necessary and insufficient — the wedge has to carry legal weight, not just information. POLICYMAKERS The failures are not symmetric. Skipping pol…
…ecord and insured. INVESTORS The first row is already a commodity — Symbium, Buildability and Canibuild sell versions of it, and the screening market has shown what it is worth on its own: about two of the thirty-two months. The second row does not exist anywhere. The distance between advisory and authoritative is the whole business. POLICYMAKE…
…Code, the closest anyone came, with no type-based valuation record to lend against. INVESTORS The screening market matters most here. It has already run the information-first experiment at commercial scale and published the answer. Compiling the rules is necessary and insufficient — the wedge has to carry legal weight, not just information. POLICYMAKERS…
…oes not change. I · EXPOSITION — THE WORLD AS IT IS II · RISING ACTION — FOUR ATTEMPTS, EACH FAILING BIGGER III · CLIMAX — THE PART THAT CHANGED IV · FALLING ACTION — WHAT FOLLOWS IF THAT IS TRUE V · CONCLUSION — NO GATE HAS BEEN CLEARED. MOVEMENT 1 OF 5 · EXPOSITION EXPOSITION The world as it is, and the fact that breaks it ONE HOU…
…n first The screening Compiled rules without political standing are advisory. market Moved 2 of 32 months. Politics only Arizona A granted right with no plan library, no shared record, no type-based finance. Politics + capital The HUD Code Closest anyone came. No information layer, so finance defaulted to chattel. Capital first: Kate…
…tach to. Information first The screening Compiled rules without political standing are advisory. market Moved 2 of 32 months. Politics only Arizona A granted right with no plan library, no shared record, no type-based finance. Politics + capital The HUD Code Closest anyone came. No information layer, so finance defaulted to chattel. Capital fir…
HAP-05 · Rev 1.0 The Working Thesis, on One Page
…ecords requests. ✓ Possible now, not in 1969. The binding input — cost of encoding ~20,000 local codebases — collapsed ~3 years ago. Singapore needed 28 years to hand-encode one jurisdiction. GATE. Codes are compilably objective — never measured. Gate 0: two weeks, no capital. A jurisdiction will accept it; a carrier will insu…
…oduction). Singapore solved process (with state powers that don't transfer). Auckland solved capacity — and proved the savings reach residents: rents 23–28% below counterfactual. 1.20% rate spreads, shipments halved. ✕ Local zoning reform — fifty years of asking an agent to defect from their principal. Officials answer to in…
…ction). Singapore solved process (with state powers that don't transfer). Auckland solved capacity — and proved the savings reach residents: rents 23–28% below counterfactual. 1.20% rate spreads, shipments halved. ✕ Local zoning reform — fifty years of asking an agent to defect from their principal. Officials answer to incumben…
…40–1970, then collapsed when project-level regulation spread. THE CRITICAL PATH — EACH SQUARE ONE MONTH US CENSUS SOC · PRACTITIONER ENTITLEMENT DATA 20 months — no physical work occurs WHAT HAS BEEN 4 — site 8 months — the product (the part we keep) TRIED WHY THEY ALL FAIL THE SAME 2 — sale WAY ✕ Better factories — Operation B…
…has both halves — the legal right and the infrastructure to exercise it. Arizona is the live proof: statewide by-right casita rights since Jan 2026, no plan library, no shared record, Compiled-code screening — the rules are already digitized across thousands of counties. Cycle time didn't move: a private assertion of compliance carr…
HAP-06 · Rev 1.0 Three Locks, One Ordering
….3 · The newest frame — compiled screening already exists and principal-agent map — ranks evidence but and notably, most of its five moves need moved 2 of 32 months. not sequence. no compiler at all. ~20,000 forked rulesets, humanly interpreted, per-instance review. Compliance cannot be computed, so nothing certifies in advance and…
…formation without political standing is advisory. Cycle time moved 2 of 32 months. The market has already run this experiment at commercial scale and published the answer (E-040– 042). Politics only Arizona — statewide by-right casita rights, with automatic loss of local control on missed deadlines. A granted right with no plan library, n…
…E-040– 042). Politics only Arizona — statewide by-right casita rights, with automatic loss of local control on missed deadlines. A granted right with no plan library, no shared record, no type-based finance. Throughput unpublished and plausibly negligible: every unit still needs bespoke design, review, and lending. The right exists;…
…lished the answer (E-040– 042). Politics only Arizona — statewide by-right casita rights, with automatic loss of local control on missed deadlines. A granted right with no plan library, no shared record, no type-based finance. Throughput unpublished and plausibly negligible: every unit still needs bespoke design, review, and lending. The right…