B
HomeLibrariesCode AISearchProjectsBookmarksAddress
FeedbackHelp Desk
Libraries
Code LibraryDiagramsAssembliesProductsCalculatorsChecklistsCSI MasterFormat SpecificationsPermitsAddress ReportDOT SpecsModel CodesTransportationRailroadFire SafetyAccessibilityStructuralTransit SpecsUSACE
Other Jurisdictions
Transportation
MUTCDFHWA FP-14
Accessibility
ADA StandardsPROWAG
PricingLog in

We publish what we got wrong

Every construction-code database has errors. Ours included. The difference we are willing to be judged on is that we go looking for them, and we tell you what we find.

This page is the record — not a summary of one. Every number on it is queried from the database when the page is built, including the numbers that make us look bad. If you are deciding whether to trust a code reference with a plan review, this is more useful than a feature list.

What we removed

32,193 code sections withdrawn in total. They are retained internally as the audit trail and excluded from search, from the assistant, and from the site.

31,205 sections that were not code

Each had a real section number and an invented title over template text: “This section establishes specific code requirements. Refer to the official…” The dangerous case was not the empty ones. NEC 680.22 governs receptacle placement near pools and spas. It was being served with the body “This section covers allowable building height, area, and number of stories” — IBC Chapter 5 text on an electrical shock-hazard provision. All of them were embedded, so all were reachable by search and by the assistant.

We had published the larger number. It appeared on our home page and in our own planning documents. The real figure is 7,109 distinct sections across 15 code editions.

923 duplicate copies of real sections

The same text filed under two section numbers — 404.1.2 and R404.1.2, 3501.1 and E3501.1. Both copies published, both were embedded, and they disagreed with each other about their own titles. Before removing them we checked each pair and moved the better title onto the copy we kept, because sometimes the duplicate was the one that had it right.

65 rows that attributed code provisions to states that may not have made them

Rows titled “Georgia Amendment: Guards Required” and “Ohio Amendment: Automatic Sprinkler Systems” carrying text byte-identical to the unamended model code. The worst cluster was IBC 903.2, where automatic sprinklers are required: ten states sharing one paragraph.

A second, smaller set was found only by asking what the first check would miss. It makes the identical claim without using the word amendment“Illinois — Where Required”, “Georgia — Group A Sprinklers” — so a check keyed on that word could never have seen it. Sprinkler thresholds and wind loads are life-safety provisions. Telling a designer their state has amended a section when it may not have is the most consequential error on this list.

What we have not fixed

These are not removals. They are problems we can measure and have not yet solved, which we would rather state than leave for you to discover.

80% of our DOT specification text never reaches the assistant

Our assistant reads a bounded excerpt of any specification section when answering. Most of our 8,562 verified DOT sections are longer than that, so the majority of that text is not shown on any given query. Until recently it was cut off silently. Excerpts now carry an explicit marker saying what was omitted, so the assistant cannot treat the end of an excerpt as the end of a requirement.

Worse: 17 sections hit a hard character ceiling when we ingested them. That text was never stored, so no amount of indexing recovers it — only re-reading the source. We have now confirmed source documents for 49 of 50 state specification manuals so that re-ingestion can happen. Until it does, a DOT section on this site may end mid-requirement, and it will say so.

910 DOT sections we could not verify

Sections attributed to state DOT manuals that turned out to be model-generated summaries rather than extracted text. They read as authoritative and were specific enough to act on. One example, checked against the source: a California Highway Design Manual page claimed a 10% maximum superelevation rate for rural highways. Caltrans Topic 202 actually specifies 12% for two-lane rural conventional highways, and 4% — not 6% — for urban streets below 35 mph. A designer following our page would have been given an unconservative number on a real safety parameter. All are withdrawn.

The checks that find these

Each of the above was found by a person looking. That does not scale, so each one is now a query that runs continuously. 26 checks; 7 of 8 marked critical currently pass, and 9 checks in total are failing. We would rather show you a failing check than a page implying everything passes.

CheckSeverityObservedStatus
amendment_rows_with_base_text
A row titled as a state amendment whose content is byte-identical to a non-amendment row.
critical0PASS
amendment_title_flag_mismatch
Title says amendment but is_amendment is not true.
critical0PASS
assemblies_unverified_total
Assemblies still awaiting a check against their issuing listing. Excludes the 25 rows retired by 108. Of the 80 remaining, 59 carry a well-formed UL or GA identifier that cannot be read without a subscription this project does not hold, and 21 carry an identifier that does not match the scheme of the issuer named. Per-row reasons are in assemblies.verification_note. Held back from search by 084; this counts work, not a live exposure. The 93 rows loaded from IBC Table 721.1(2) by 108 are verified and are not counted here.
medium1,061FAIL
conflicting_titles_same_content
Published rows sharing an exact content hash but disagreeing on title. A floor, not a measure of title quality: a single row with a wrong title is invisible to it. See titles_not_verified_against_source.
high84FAIL
dot_documents_content_unverified
DOT manuals whose cited source_url has never been shown to contain this corpus text. url_status = confirmed only means the URL returned something. On 2026-08-20 fl cited the wrong edition, ny and wi cited HTML landing pages, pa cited a one-page list of change-packet dates, and in cited a book whose pagination does not match the stored text -- every one of them confirmed. Clears when a re-ingest dry run aligns stored sections against an extraction of the document; record the result in content_sections_aligned / content_sections_probed.
high45FAIL
dot_sections_truncated_at_ingest
Verified DOT sections that hit the 12,000-char ingest ceiling: text was never stored. Needs re-ingest -- see dot_reingest_queue.
high17FAIL
dot_specs_missing_embedding
Verified DOT sections with no embedding: invisible to the semantic half of search. dot_specs embeddings are generated inline by scripts/ingest-dot-specs.ts at first ingest and nothing re-embeds a row rewritten afterwards, so every row scripts/reingest-dot-specs.mjs touches lands here. Backfill with scripts/embed-dot-specs.mjs.
high0PASS
dot_specs_unverified_total
Unverified dot_specs rows remaining. Target 0 per Phase 2 step 2.3.
medium14FAIL
dot_specs_without_source_document
Verified DOT sections whose manual has no confirmed source URL in dot_documents. Cannot be re-derived.
medium0PASS
invariants_cache_stale
corpus_invariants_cache itself is over 2h old, so every other figure on this page is at least that stale. Computed live at read time. Added by migration 083 after the 2026-08-19 outage, when a frozen cache reported PASS for four hours.
high0PASS
oversized_dot_specs_not_chunked
Verified DOT sections longer than the 15,000-character cap in scripts/embed-dot-specs.mjs. The vector describes the opening only; text past the cap is reachable by text search but not by semantic search. Chunk them with build_dot_spec_chunks() and embed the chunks with scripts/embed-dot-chunks.mjs; search_dot_specs_semantic_chunked then reaches the whole section. Counts rows with no embedded chunk, so it returns to FAIL if a section grows and is not re-chunked. The Florida recovery on 2026-08-20 created most of them.
medium0PASS
oversized_sections_not_chunked
Sections over the 15,000-char embed cap with no embedded chunks: text past 15k is unretrievable.
high0PASS
permit_pages_overstating_sources
Pages claiming more source-verified rules than have either source_url or fee_source_url.
high0PASS
permit_rules_fee_model_incoherent
A rule claims a computable valuation fee model but has no working formula. Would imply a fee we cannot produce.
critical0PASS
permit_rules_verified_no_source
Rules stamped verified_at with neither source_url nor fee_source_url.
high0PASS
published_matview_stale
corpus_stats_cache older than 2h: the hourly pg_cron job (052) has stopped. Computed live at read time, not read from the cache the same job writes -- see migration 083.
high0PASS
same_content_dual_numbered
Content filed under both a bare and a letter-prefixed section number.
medium12FAIL
sections_missing_embedding
Published sections with no embedding: invisible to semantic search.
high0PASS
sections_over_embed_cap
Sections longer than the 15,000-char MAX_CHARS in scripts/embed-code-sections.mjs.
medium108FAIL
served_edition_contradicts_jurisdiction
Published sections whose edition disagrees with the edition that jurisdiction's own verified record names. On 2026-08-20 this was 2,928: 1,729 IBC and 1,199 IRC sections served as the 2021 edition under california, whose verified record reads "2025 CBC (IBC 2024 base)" and "2025 CRC (IRC 2024 base)". The 2025 California Building Standards Code took effect 1 January 2026. Both figures came from inside this database; nothing was comparing them. Call sections_contradicting_jurisdiction_edition() for the breakdown. See migration 102.
critical2,928FAIL
state_prefixed_base_text
Title opens with a state name, asserting a state-specific provision. Regression guard for 048.
critical0PASS
stub_content_in_public_view
Placeholder content reachable through the canonical view. Regression guard for 2026-08-17.
critical0PASS
stub_rows_in_base_table
Unpublished stub rows still in code_sections. Cleared 2026-08-18 by migrations 055-057; this is now a regression guard.
medium0PASS
titles_not_verified_against_source
Published sections whose title was neither read from the section source page (title_verified_at) nor captured with its own text. Sampling on 2026-08-19 found about half of these contradicted their own section -- IBC 2304.12.1 read "Wood in ground contact" over text saying "Wood used ABOVE ground". Being corrected chapter by chapter from the cited source; see code_section_title_corrections.
high10FAIL
unverified_assemblies_searchable
Fire-resistance assemblies returned by search_assemblies without having been checked against their issuing listing. A design number carries a rating a plan reviewer will rely on; serving one we cannot trace is the most consequential unverified claim in this corpus. Regression guard for migration 084.
critical0PASS
unverified_dot_specs_searchable
Unverified dot_specs returned by text search. Regression guard for migration 031.
critical0PASS

Checks last evaluated Mon, 24 Aug 2026 21:07:00 GMT. Figures on this page computed Mon, 24 Aug 2026 21:07:00 GMT. We show these timestamps because a stale number should be detectable rather than silently served.

What we refuse to serve

  • Unverified DOT specifications are gated out of retrieval at the database level, not filtered in the interface — two separate search paths, both gated. When we found that only one of them was, we fixed the other the same day.
  • We do not manufacture verification dates. Not one of our 7,109 sections has been independently verified against the issuing authority’s publication, so not one carries a verification stamp. Section pages say “added [date] · not independently verified” instead. We could have backfilled ingest dates and shown 7,109 green ticks. That would have been a lie with a timestamp on it.
  • We do not infer a permit fee we cannot source. 332 jurisdictions price permits on construction valuation rather than a flat fee. Their notes are full of percentages — but most of those are plan review expressed as a share of the permit fee, not of the project. Reading them as valuation rates would have produced a permit fee of 65% of valuation. We model the 7 that state their rate outright and say “not modelled” for the rest.

What we do not have yet

Distinct code sections7,109 across 15 editions
Sections independently verified against the issuing authority0
DOT specification sections, all verified8,562
…whose text was truncated when we ingested it17
Jurisdictions in our permit database2,208
…with a verified fee-schedule source619
…complete: verified source, rules on file, and actual fee amounts157

That last distinction matters and it is the kind of thing usually left ambiguous. 619 jurisdictions have a fee schedule we have located and dated. 157 have that and the rules and the amounts. When we say “coverage,” we mean 157.

Why we publish this

Two reasons, and neither is modesty.

The first is that you can check it. Every figure here comes from a query against a database you can spot-check by opening any section and following its source link. A claim you can verify is worth more than a claim you cannot.

The second is that a code reference which has never found an error in itself is not error-free — it is unexamined. We found 31,205 fabricated sections because we went looking. We would rather tell you that than have you find the next one.

If you spot something wrong, tell us and it goes on this page.