Engineering · September 7, 2026 · 8 min
The contradiction was ours
On one set, 305 refusals for the same reason: two elevations at one offset. It looked like the plans arguing with themselves. It was our stroke-joining code.
On one set — the Oregon cross-sections — the engine logged 305 refusals for the same reason: a traced line carrying two different elevations at the same offset. (These are what refuses when a stand-in fixture, not a person, confirms which pen settings are ground; no modeller has ruled this set.) That reads like the drawing contradicting itself. It did not. The fault was in our own code — the step that glues pen strokes back together into a continuous line, which joins them by whichever ends sit closest to each other and never checks that the result is still one elevation per offset.
It would have been easy to publish this the other way round. "Public plan sets contradict themselves, here is the proof" is a better headline and it is not what happened. What happened is that we built a line that cannot exist and then blamed the sheet for it.
A ground line has exactly one elevation per offset
On a cross-section sheet, the ground line is a function of offset. Pick a station, pick an offset left or right of centreline, and there is one elevation there. That property is the entire reason a digitized section is worth anything: it is what lets you stack one surface on another and get a cut or fill depth. A line that reports two elevations at the same offset cannot be subtracted from anything.
A PDF does not hand you that line. It hands you pen strokes — short separate segments that a person's eye reads as one continuous ground line but that the file stores as unrelated pieces. Somebody has to decide which strokes belong to the same line. In our engine that decision is one function, chain(), and it makes the decision on distance alone: if this stroke ends near where that stroke begins, they are the same line. It never asks the one question that matters — is what I just built still a single elevation per offset?
We read the sheets rather than the design files because of what the agencies themselves wrote about which document governs. TxDOT’s PS&E Preparation Manual posts cross sections and 3D models under a section headed "For Information only," with a mandated disclaimer that the data "is for non-construction purposes, only". WisDOT's Construction Data Packet requires the contractor to build to the plans. FHWA HIF-17-031 says the data "is often not sufficient for construction" because the original ground basis for the design differs from field conditions — an engineering observation, not a statement about contractual status. SUDAS Standard Specifications section 1040 says electronic support files "are for information only," and that "Should there be a discrepancy between an electronic support file and a contract document, the contract documents shall govern"; Caltrans ranks "supplemental project information" last of six contract parts in Standard Specifications 5-1.02 (2025 Edition) and describes electronic design files in the subsection of that name — though whether a given project’s model carries that status is set by its special provisions, not by the Standard Specifications. So the sheets are what we digitize — and the joining problem is ours to solve, not the drafter's.
The worst one we measured
On the Oregon set, page 21, station 40575: a ground line traced out across a run of offsets, doubled back over those same offsets, and then dropped 64.04 ft straight down at offset 39.83 — where it terminated on the plot frame. All of that came out as one exported line.
That last piece is the tell. No ground drops 64 ft vertically at a single offset. The vertical run is the border of the drawing, not terrain. Our join walked off the end of the ground line, onto the frame, and kept going as though the frame were more ground. The out-and-back is the same failure earlier in the same line: two strokes covering the same offsets got welded end to end, so at every offset in the overlap the line now holds two elevations.
("Oregon" here is the location, not the owner. The set is FHWA Federal Lands Highway project OR FLAP DOT CRGNSA 100(9), Historic Columbia River Highway, public domain, pulled by hand from SAM.gov on 2026-09-04. It is not Oregon DOT.)
Across one style family on Oregon — the hairline dashed pen the ground is drawn with — 37% of the traced lines came out holding more than one elevation somewhere along their length.
The obvious fix does not work
The first thing anyone tries is to cut every line at the point where it reverses direction. If a line runs right, then runs left over the same ground, cut it there and you get two pieces, each of which is well behaved on its own.
We tried it. The count went from 305 to 305.
Every piece was single-valued, and the sections were refused anyway, because the collisions were never inside a single piece. They were between the pieces. Two fragments that both sit over offsets 20 through 40 at different elevations still give you two elevations at offset 30 once they are stapled into the same line. Cutting at reversals fixes the shape of the line and leaves the actual error untouched, which is the decision about which strokes belonged to the same line in the first place.
Why we cannot just look at the line and know
The honest next question is: fine, then decide which strokes belong together by what each one is drawing. Existing ground goes with existing ground, finished grade with finished grade.
The only hint the file gives us is how the pen was set — width, colour, and dash pattern. That describes the pen, not the surface, and why a pen setting does not tell you which line is the dirt is a problem of its own. Two different surfaces drawn with the same pen setting are indistinguishable in the file, and one surface drawn with two settings looks like two things.
Here is what that looks like on two sets. Each row is a count of how many distinct pen settings appear on a single stationed cross-section:
| Distinct pen settings on one section | Oregon (86 sections) | FL-003 (111 sections) |
|---|---|---|
| 1 | 19 | 0 |
| 2 | 22 | 0 |
| 3 | 13 | 0 |
| 4 | 12 | 0 |
| 5 | 8 | 0 |
| 6 | 9 | 0 |
| 7 | 3 | 0 |
| 8 | 0 | 3 |
| 9 | 0 | 6 |
| 10 | 0 | 31 |
| 11 | 0 | 27 |
| 12 | 0 | 28 |
| 13 | 0 | 11 |
| 14 | 0 | 4 |
| 15 | 0 | 1 |
Nineteen of 86 Oregon sections carry exactly one pen setting, so on those the grouping is unambiguous. On the other 67 it is not. On FL-003, zero of 111 sections are unambiguous; every section carries between eight and fifteen distinct settings.
The legend does not rescue this. On this corpus, legends do not map line styles to surfaces, and the layer names that would tell you live in the PDF's layer metadata rather than printed on the sheet. So for most sections we genuinely cannot tell, from the drawing alone, whether two strokes over the same offsets are two surfaces or one surface we broke into pieces and rejoined wrong.
What this costs
Those 305 refusals all sit on the Oregon set — more of them than that set has sections — and each one is a piece of ground the engine will not build. The engine writes down a named reason — in this case, the same offset appearing twice with conflicting elevations — and stops, rather than picking one of the two elevations and shipping a number nobody can check. That is a deliberate choice we have written about before in why the engine writes down a named reason instead of guessing a value, and it is why our counts come out lower than a count that fills the gap with a guess.
It is also not the only thing standing in the way. Of the 26 packages built so far — none of them by the engine as it stands today — 26 come out with no surface in them at all: zero points, zero triangles. Every one of them carries the same three standing reasons: the left/right handedness of the section frame is unconfirmed, no alignment is present, and the alignment's curvature is unknown. Mathyra has never shipped a surface. That is the plain state of the work.
One caveat on any count we publish. Across the five sets we work on, 434 source pages have yielded 332 stationed cross-sections. That 332 is sections exported. There is no denominator anywhere of sections that exist on those sheets, so it is not coverage and it is not recall, and we will not present it as either.
What we will not claim about sheets disagreeing
None of this means plan sets never disagree with themselves. They may. We cannot show you one: our honest count of scoreable cross-sheet station comparisons is 0 against a registered bar of 12, and the most favourable ground-line ruling reaches only 7. So in the report the engine writes into every package, cross-sheet agreement is marked NOT CLAIMED, and external accuracy is marked UNMEASURED.
Publishing "the plans contradict themselves, 305 times" while sitting on a scoreable count of zero would have been the same mistake as the joining bug, one level up: asserting a property of the drawing that was really a property of our own instrument.
The rule we took from it
Before you write down that the drawing is wrong, check whether you built the thing you are reading.
This has a practical edge for anybody doing file-work off scanned or vector plan sheets. If a digitized surface comes back with a spike, a vertical wall, or a section that will not triangulate, the first suspect is not the drafter. It is the step that decided which pieces of ink were the same line — and if that step joins by proximity and never tests the result, it will produce impossible ground quietly, on good drawings, at a rate you will not notice until you count.
Mathyra is in private development. Figures quoted here are measurements from our own engineering runs, with their limits stated; nothing above claims an accuracy we have not shown.