Blueprint Risk Engine

Blueprint Risk Engine / how it works

How it works

Written for people who read bid packages for a living and have no reason to care how software is built. No code in this page. The design is unusual in exactly one way, and that one way is the whole point.

The short version: the AI reads and points at sentences. It is never allowed to decide anything or produce a number. Ordinary code does all of that, from written rules, and every line of output names the rule and the page it came from.

Standing notice: not yet benchmarked

This engine has never been measured against real outcomes. There is no benchmark dataset, no precision figure, no recall figure, and no accuracy claim anywhere on this site. Nothing on this page, and nothing in any output it describes, may be read as evidence that the engine produces correct output. It may be wrong, and how often it is wrong is currently unknown and unmeasured.

The measurement that would matter is precision and recall of pre-bid flags against the change orders a project actually issued. That measurement does not exist yet. Until it does, read this page as a description of a design, not as a claim about results.

Required by project amendment A-003. This notice is permanent and cannot be dismissed.

01The problem

The scope that gets missed is not hidden. It is scattered.

A bid package is hundreds of pages. Drawings, specification sections, addenda, equipment schedules. The security scope inside it is rarely stated in one place, and it is almost never wrong in an obvious way. It is spread across documents that were each written correctly by a different person.

Three places it goes missing, all of them ordinary:

The seam between trade divisions

Door hardware is specified in Division 8 by the architect. Access control is specified in Division 28. Electric strikes, electrified locksets and latch retraction devices sit exactly on that line. For any given opening there are four outcomes: the locking device is specified in Division 28, in Division 8, in both with conflicting requirements, or in neither. Both and neither are where the money is. The failure is symmetrical, which is what makes it expensive. A sentence reads "by others, by Division 28". The security contractor reads it as somebody else's scope. The hardware supplier reads the same sentence, agrees the work is Division 28, and neither party prices the rough-in.

Addenda that quietly overrule the base spec

An addendum is a pre-bid modification to the contract documents. It is legally binding, it routinely changes quantities, and it is routinely missed. Reading the base drawings carefully and then not reconciling them against addendum three does not produce a cautious bid. It produces a confident, wrong one.

Schedules that do not agree with the plans

A device appears in a drawing schedule and every specification reference to it assigns it to another party, or to no party at all. Nothing here is a contradiction anybody left on purpose. It is what happens when a set of documents is assembled by several trades under deadline.

A pre-bid RFI is free. The same question asked after award is a negotiation.

None of this is a reading-comprehension problem. A good estimator catches these when there is time. The week before a bid closes there is not time, and what gets skipped first is the cross-check between documents, because it is the slowest part and it usually finds nothing. This system is aimed at that specific skipped review, not at the estimate.

02Reads, does not decide

The AI reads and points. It never decides.

This is the one design decision worth understanding, and everything else follows from it. The language model is used the way you would use a very fast reader with no authority: it can find a sentence, tell you where it is, and tell you what it appears to say. It is not allowed to conclude anything from it.

The model is allowed to
  • Locate. Point at a sentence and report the document, the page or sheet, and where on the page it sits.
  • Transcribe. Report the sentence verbatim, not a tidied paraphrase of it.
  • Classify. Say that a sentence looks like a scope assignment rather than a general note.
  • Match. Say that this line and that line appear to refer to the same opening.
  • Report its own uncertainty. Every reading carries a confidence.
The model is never allowed to
  • Compute a count. No quantities, no per-leaf math, no totals.
  • Pick a part number. No device selection, no hardware assignment.
  • Produce a risk score. No severity, no ranking, no ordering of the register.
  • Rule on compliance. No judgment that something does or does not meet code.
  • Write a number into the output. Any figure it produced would be a figure nobody can check.

Who does the deciding instead

Ordinary, boring code does, following rules that are written down in versioned files rather than learned. A rule says, in effect: when a located sentence carries a scope marker and that marker names Division 28, raise this finding, at this severity, cite this authority, and recommend this pre-bid action. The rule is readable by a person. It behaves the same way on Tuesday as it did on Monday. It can be argued with, and if it is wrong, it can be corrected in a way that stays corrected.

Why the split is drawn there and not somewhere more convenient

Because of what happens in the room. You bring a flag to a pre-bid review and the engineer whose design you are questioning asks where it came from. "The AI said so" ends that conversation badly, and it should. A named rule, a quoted sentence, and a page number does not end it at all. It turns it into a discussion about the document, which is the discussion worth having.

A number you cannot trace back to a sentence in a document is a number you cannot defend in a bid review.

The same logic applies in the other direction. Any model that can produce a number can produce a plausible one on a page where it read nothing at all, and a plausible number is worse than no number, because nobody checks it. Refusing to let the model produce numbers is not caution about model quality. It is what makes the output auditable at all.

The separation is enforced mechanically rather than by intention: the parts of the system that decide and compute cannot reach a model at all, and tests assert that in both directions. That enforcement has itself been found broken once and repaired, which is described on the overview page. That is the reason nothing here is offered as proof that the engine is accurate.

03Two readers

Two independent readers, and deliberately no tiebreak

The same content can be read by models from two different vendors, independently, without either one seeing the other's answer. Two things can then happen, and only two.

THEY AGREE

The value is used, at the lower of the two confidences

Agreement is not treated as a bonus. It withholds the review flag that disagreement would have raised, and that is all it does. The confidence carried forward is the minimum of the two, never a blend and never a lift.

Two readers each 80 percent sure does not become 96 percent sure. That combined figure would be a number this system invented about its own reliability, which is the exact thing the design exists to prevent.

Agreement also does not rescue a bad reading. Agreeing on an illegible cell is still agreeing on an illegible cell, so a low confidence still raises its own flag.

THEY DISAGREE

No value is produced at all

Not a value with a warning next to it. No value. A record is filed in its place holding every reading, the vendor and model that produced each one, and the exact location in the document, and it is marked for a human. There is deliberately no field on that record for a winner, because none of them won.

The item reaches the register as a flag rather than as a finding, and a person decides.

Why a tiebreak would be the wrong feature

It is the obvious next feature, and it is the one that would quietly destroy the value of having two readers in the first place.

What a tiebreak would actually be doing
  • Disagreement is evidence about the document, not about the models. Two independent readers diverging on a construction document is a strong signal that the passage is genuinely ambiguous. That is a fact about the bid package, and it is exactly the kind of fact an estimator is paid to know before the bid closes. Resolving it internally throws away the only thing the second reader was there to find.
  • Every scheme for picking a winner is arbitration. Taking the more confident reading is arbitration. Taking a majority of three is arbitration. Taking whichever vendor sorts first alphabetically is arbitration with the decision hidden inside a sort order. Each one converts "these two readings conflict" into "here is the answer", and the conflict never reaches the person who needed to see it.
  • A value that does not exist cannot be misused. A flag can be ignored by a later step that forgot to check it. An absent value cannot. Emitting nothing is not just the honest choice, it is the mechanically safer one.
  • Fewer flags would read as a cleaner package. That is the failure mode that matters. A tiebreak reduces the flag count without reducing the ambiguity, and the estimator reads the shorter list as good news about the documents rather than as a change in how the software behaves.

The same reasoning is why a run refuses to start when only one reader is available. Quietly falling back to a single vendor because the second one was not configured would report agreement that was never actually checked, and the register would come out wrong in the direction of false confidence. It stops instead and says why.

This applies to reading, not to judgment. Adding a second vendor does not give either one any new authority. Neither may compute a quantity, assign a part number, score an item, or determine compliance, no matter how many of them agree.

04Every line traces

Every line traces back to a page you can open

An output line without provenance is treated as a defect in the software, not as a formatting preference. Each item in the register carries the following, and it is not optional on any of them.

Rule
The identifier of the specific rule that produced the finding, and the version of the rule pack it came from. Two runs a month apart can be compared because the rule that fired is named in both.
Where
The document, and the page or the sheet. Not "the specifications" but the section and the page inside it.
What it says
The sentence itself, verbatim. A tidied reading of a line is what a reviewer ends up arguing with instead of arguing with the document.
Why it matters
The rationale in plain English, plus the authority the rule leans on, such as the division boundary or a general-conditions clause. Code interpretation varies by jurisdiction, so rules cite their authority and stay overridable on a project.
What to do
A recommended pre-bid action, phrased as something you can act on before the bid closes rather than as an observation.
How sure
The confidence on the underlying reading, and whether the item is flagged for human confirmation.

Including the rules that did not fire

When two rules could both apply to the same sentence, one wins and the other is recorded as suppressed, along with the reason. That is not an error log. It is there so a reviewer who expected a different finding can read the rule that displaced it instead of guessing why the software went quiet. Reporting both against a single sentence would put the same money in the register twice.

The same package produces the same register

A run replays exactly, given the same documents and the same configuration, down to the individual characters of the report. That matters for an ordinary reason: if the register changes, something changed, and you can find out what. It also matters for a less ordinary one. A run that cannot be replayed cannot be benchmarked, and the benchmark is the thing this project does not have yet.

An example of a single finding, with all of the above filled in, is on the overview page. It was produced from an invented test package rather than from anyone's real project, and it is there to show the shape of a finding rather than to demonstrate that the finding is correct.

05Not this

What it does not do

Stated plainly, because in this category of product the limits are more useful than the features, and because a page like this looks the same whether the engine is right or wrong.

It does not price work.

No unit costs, no labor rates, no extended totals, no quotations, and nothing a reader could mistake for an offer. Pricing is deliberately kept out of client-facing output, and that is enforced in the software rather than left to whoever is writing the report.

Exposure figures are planning bands, not estimates.

Each register item carries an order-of-magnitude band whose job is to give the ranking something to sort on. It is not a quotation and it is not derived from a takeoff. Every band shipped today is additionally marked in the deliverable as an uncalibrated placeholder, because none of them is yet derived from cost history. No figures appear on this site for that reason.

It does not replace an estimator.

It does not decide what to bid, what to carry, or what to walk away from. It performs one specific review that gets skipped under deadline: the cross-check between documents. The output is a list of questions to resolve before the bid closes, and a person resolves them.

An empty result is not a clearance.

A short register means the rules that exist did not fire on the documents that were read. It does not mean the package is clean. Rule coverage is a known limit, and there is at least one detection gap recorded and held open on purpose rather than papered over.

It does not read plans yet.

Extraction from real drawing sheets is specified and not built. What ships today works from documents. Nothing in the system draws a plan.

It is not benchmarked.

The standing notice at the top of this page is the honest summary of this project's status and it is repeated here on purpose. There is no measurement of how often the engine is right. What it can defend today is narrower and worth stating exactly: every output line carries a rule and a citation, runs replay deterministically, and the system refuses rather than guessing when the documents do not determine something. Whether the things it flags are the things that actually become change orders is unmeasured.