The first real project manual
Three hundred and thirty-three pages of somebody else's specification, and the only question that mattered was whether it quoted them honestly.
Everything before this had been run against documents I made up. That is a comfortable way to test software and it proves almost nothing. So I pulled a real one: a public project manual for a school-district HVAC replacement, 333 pages, issued for bid.
It read the full mechanical division — all eight Division 23 technical sections, 49 pages of specification — in 75 seconds, entirely on the box. Then I took every passage it had quoted and went back to the source to see whether those words were actually there.
Twelve of twelve, verbatim. Every paragraph number it cited was real. That is the load-bearing claim of this whole product and it held on first contact with a document I did not write.
It surfaced six candidate conflicts and then argued itself out of all six. Every one is exactly the false positive a keyword matcher would have dropped on a coordinator's desk: dielectric unions rated 250 psig against flexible connectors rated 125 — different components, not a contradiction. Duct insulation at 1-1/2" concealed against 1" exposed — separated by scope. Duct liner against external wrap — different assemblies entirely.
The sixth is the one I keep thinking about. Two sections both call for 5,000 psi grout, and one of them writes it psig. It declined to call that a conflict and flagged it as the spec writer's typo instead, on the grounds that compressive strength is not a gauge pressure.
Nothing was found because nothing was there. But six times it declined to waste my afternoon, and once it caught something the spec writer missed. Precision is the thing every checking tool I have been sold got wrong — an unread clash report is just a different way of missing the conflict.
What I can say is that it reads a real bid package and cites it honestly. Whether it reliably catches a conflict is a different claim, and it needs a set where one actually exists before I will make it.
The schema that couldn't say "fine." The first attempt failed, and the reason was mine, not the model's. I had asked for a list of findings with no way to record a negative. So when it correctly concluded that a pair of clauses did not conflict, it had nowhere to put that conclusion except the findings list — and filed it as a finding anyway. Then it looped, re-titling the same entry "(Final Check)", "(Final Final Check)", until it hit the token ceiling. Its judgment was right the entire time; my output contract was wrong. Any schema like this needs a legitimate place to say I checked this and it's fine.
A false alarm worth recording. My verification script initially reported one quote as a hallucination. It wasn't. The PDF text layer had split 10-feet across a line break, and my whitespace handling turned that into a mismatch. Strip everything before you accuse a model of making something up.