A bug we found in our own insulation detection
We're not going to pretend this doesn't happen: while running a real permit set through ReadMyBlueprint to double-check the results, we found a genuine bug in our own insulation detection. It fabricated a callout for "R-308 batt insulation" — a number that doesn't exist in the real world. We're writing this up in detail, not because it makes us look good, but because how a tool handles being wrong tells you more about it than any accuracy claim on a homepage.
What actually happened
Real batt insulation comes in a narrow, well-known range — roughly R-11 for a thin wall cavity up to R-49 for a deep attic. So when a real 5-page permit set came back with a callout reading "R-308 batt insulation" on two of its pages, that number was an immediate red flag. Nothing in construction insulates to R-308. The measurement itself wasn't wrong — the callout was fabricated from text that was never describing insulation at all.
The actual root cause
ReadMyBlueprint reads insulation callouts by scanning the real text embedded in your PDF for patterns like "R-13 BATT" or "R-38." The pattern that does this allowed the letter "R" to appear as the tail end of any word — not just a standalone "R" — with a small gap before the digits that followed. That gap was permissive enough to jump across a line break into a completely unrelated sentence.
On the sheet in question, a legend block read, in part:
"DETECTOR" ends in the letter R. "3080" is a standard architectural code for a 3'-0" × 8'-0" door — completely ordinary, completely unrelated to insulation. But the pattern matching didn't require that "R" to be its own standalone word, so it read the R at the end of "DETECTOR," jumped the line break, and grabbed the first three digits of the door code that happened to follow it. R + "308" became "R-308 batt insulation" — a real, physically impossible reading built entirely out of two unrelated legend entries.
How we caught it
Not from a customer complaint — from actually using the product the way we're always telling people to. We ran a real, unremarkable permit set through auto-detect specifically to check the output line by line rather than trust it, the same way we'd want anyone doing a real bid to treat any tool's numbers. R-308 didn't blend in; it stood out immediately as physically implausible, which is exactly the point of looking at your own results instead of assuming they're right.
The fix, and why it's not just a patch
The fix requires that "R" stand on its own — not be the last letter of some other word — before a number counts as an insulation value. We then went back and audited every other pattern in the same file for the identical shape of mistake, since a bug found once in one place is a real signal to check for siblings, not a one-off. That audit found and closed the same gap in how the tool reads CMU block sizes, and documented one more theoretical case we chose not to force a fix for, because the fix itself risked being worse than the bug — silently dropping real, valid readings to prevent a false one.
Every one of these fixes shipped with a permanent test built from the exact real text that exposed it, so this specific mistake — and the pattern behind it — can't quietly come back in a future change without a test failing first.
What this doesn't mean
It doesn't mean the reading was somehow "close enough" or that this class of mistake is common — an R-308 callout is exactly as implausible as it sounds, and the real point of writing this up is that implausible, wrong output is findable and fixable when a tool's reasoning is a real, inspectable pattern instead of an opaque model's best guess. It also doesn't mean every number ReadMyBlueprint has ever produced is now suspect — the fix was verified against the same real document plus every other real plan set we test against, and every genuinely correct reading (R-13, R-30, R-38, R-48, and more) still comes through exactly as before.
Frequently asked questions
What was the R-308 insulation bug?
On a real 5-page permit set, our insulation detection reported 'R-308 batt insulation'. No such product exists. The pattern let the letter R at the end of the word DETECTOR in a legend jump a line break and pick up the first three digits of the door-size code 3080.
How was it fixed?
An insulation value now only counts when the R stands alone as its own token. We then audited every other pattern in the same file, closed the same gap in CMU block size reading, and added permanent tests built from the exact text that triggered it.
How do I catch a wrong reading like this on my own takeoff?
Sanity-check every number against what is physically plausible, and use a tool that labels each result matched, ambiguous or needs confirmation instead of showing one confident total.
See what confirm-before-it-counts actually looks like
Upload a real plan set and see every reading labeled honestly — your first one is free.
Get started