Interactive concept demo

The pipeline, drawn end to end, with the built parts marked.

This page is a concept demo. It walks the intended production workflow in five stages and states, at every stage, whether that stage runs today or is a depiction of a system that does not exist yet. Two of the five run. Three do not.

The findings carried through the walkthrough are real. The interfaces drawn around them are not. That split is the first thing on the page and it is not a footnote.

Real output with nothing depicted around it: the sample risk register

What on this page is real, and what is a depiction.

Every row below is one element of this page. The middle column is the only thing you need to read before you read anything else. Nothing here can be dismissed, collapsed or scrolled past, because the rest of the page is only defensible with it attached.

Every element of this page, marked real or concept, with the source that makes the marking checkable.
Element Real or concept Where it comes from, or what is missing
The five findings SB-020 to SB-024 Real A published fixture run in the repository, tests/golden/division_seam/, config_hash 27793629219d1c37, reproducible byte for byte.
Every evidence quote, section number and page number Real The run's own evidence citations against doc-manual, sections 08 71 00 and 28 13 00. Reproduced unedited.
Rule ids, flag codes, severities, priorities and conflict group Real packs/division_seam.json, pack_version 0.1.0, jurisdiction CA-DSA.
Recommended pre-bid actions Real Emitted by the run, quoted rather than rewritten.
Opening marks D101 to D104 and their frame materials Real tests/golden/division_seam/spatial_model.json, the hand-authored input to the same run.
Stage 3, deterministic rule evaluation Real Runs today on a real package. No model is reachable from it.
Stage 1, the intake interface Concept There is no upload feature and no hosted application. There is no file input element anywhere on this page.
Stage 2, the two-vendor extraction log Concept The comparator is written and unit tested. No command reaches it. The vendor confidences and the pairing of vendor to reading are drawn, not recorded.
Stage 5, the plan placement Concept Plan extraction is not built and no module exists. The fixture spatial model carries no coordinates, so every position in that drawing was placed by hand.
Stage 5, the phase view Concept A way of reading one real finding over time. The register has no phase field and the engine emits nothing of this shape.

Concept does not mean planned-and-nearly-done. It means this page drew it. Where a stage has code behind it, the stage says which code and what state that code is in.

The intended workflow

Five stages, left to right.

A bid package goes in on the left. A ranked register with citations comes out on the right. Select a stage to open it. Every stage carries a build state and none of them is allowed to borrow credibility from the stage next to it.

Stage 1. Intake.

Depiction only

Four document classes go in. Only one of them is read today, and the other three are specified rather than built. The panel below is a drawing of an interface.

package intake depiction · nothing here accepts a file

Specifications and project manual

CSI sections segmented by number. Requirements, scope statements and responsibility assignments extracted with page and span provenance. This is where the Division 08 to Division 28 seam is read.

Pilot

Drawings

Sheets, scale provenance, controlled openings, room boundaries and equipment symbols. Rasterization, tiling and geometric deduplication are specified in the contract and no module exists.

Planned

Bill of materials

A bidder take-off read as an input, never as a contract document and never joined against as though it were one. Quantity and device identity only. There is no cost field on the model that would hold it.

Planned

Addenda

Each addendum diffed against the base documents for quantity changes, product substitutions, added or deleted scope. Rule ids DC-020 to DC-029 are reserved for it and no rule is written.

Planned

There is no file input element on this page. Not a hidden one, not a disabled one. There is no upload endpoint, no hosted application to upload to, and no account to hold a package. The four panels above are drawn boxes.

What actually happens today: a package is prepared by hand into two JSON models, a SpatialModel and a DocumentModel, and the command line reads those. The run on the sample register page shows the exact command, the three input files and their hashes.

Stage 2. Two independent readings of the same page.

In Development

The comparator is written and unit tested. It is reached by no command today. What follows is the rule the code implements, and a log drawn to show that rule working.

Two vendors, named

Models from Anthropic and from OpenAI read the same content independently. Both vendors are named in the codebase rather than described as "our models". Neither is preferred. Neither is asked whether the other is right.

Agreement emits the minimum

Where every field agrees, one row is emitted and its confidence is the minimum of the two vendor confidences. Agreement withholds the disagreement flag. It never lifts a number, because a lifted number is one this repository invented.

Disagreement emits nothing

Where any field diverges, no entity record is emitted at all. A disagreement record is written in its place carrying every vendor's raw reading, the span and review_required true. A value that does not exist cannot be consumed by a rule that forgot to check a flag.

No arbitration of any kind

No vote, no average, no tiebreak, no higher-confidence-wins, no sort by confidence, no alphabetical order, no preferred vendor. Each of those was considered, rejected, and has a test asserting the code does not do it.

extraction log depiction · no run has produced this
A drawn extraction log. Four rows where both vendors agree and one where they diverge, with what the comparator emits in each case.
Row Anthropic reads OpenAI reads Emitted
08 71 00 p4
D101 locking device
"Provide an electric strike, fail secure, at Door D101." 0.94 "Provide an electric strike, fail secure, at Door D101." 0.91 agree emitted at 0.91, the minimum
28 13 00 p8
D101 locking device
"Provide an electrified mortise lockset at Door D101." 0.92 "Provide an electrified mortise lockset at Door D101." 0.95 agree emitted at 0.92, the minimum
08 71 00 p5
D103 rough-in
"Conduit at Door D103 is work of Division 28." 0.90 "Conduit at Door D103 is work of Division 28." 0.93 agree emitted at 0.90, the minimum
28 13 00 p9
D103 rough-in
"Conduit at Door D103 is furnished under Division 08." 0.89 "Conduit at Door D103 is furnished under Division 08." 0.94 agree emitted at 0.89, the minimum
schedule row 12
reader quantity
"14" 0.88 "l4" 0.86 disagree nothing emitted. EX-001 raised, both readings kept, review_required true, routed to a human

What is real in that log and what is not. The four quoted sentences are real fixture text and their sections and page numbers are the run's own citations. The vendor names are real. The confidence values, the pairing of a vendor to a reading, and the schedule row are drawn. No command reaches the comparator, so no log of this kind exists to publish.

The fixture document set contains no equipment schedule, which is why the disagreement row is a drawn row rather than a fixture row. The reading it shows is the case the comparator's tests pin by name: a lowercase L read for a one, which is what character recognition does to a schedule quantity.

A model never verifies a finding by consulting the open web. There is no search step, no browsing step and no second opinion fetched from the internet. The only outside source is a second model reading the same page, and the only power that model has is to withhold agreement. Two independent readers disagreeing about a construction document is evidence about the document, not about the models.

A model never decides anything. Extraction produces structured facts and stops. Every decision and every number after that point is code, and an import-graph test fails the build if a model client becomes reachable from the rule evaluator, the validators, the scoring code or the risk register.

Normalization before comparison is four rules and nothing else: canonical Unicode composition, whitespace runs collapsed to one space, case folded, and a trailing zero dropped after a decimal point. It does not fold a letter into a digit, it does not drop a leading zero, and it does not fuzzy match. CR-1 is not CR-11.

Stage 3. The rules fire, in code.

Available

This stage runs today. No model is involved in it, no model is reachable from it, and nothing in it reads a clock or the network. Same inputs plus the same config hash produce the same register on any machine.

rule trace · SB-022 real output · config_hash 27793629219d1c37
target
seam:op-d103:rough_in, opening D103, rough-in at the Division 08 / Division 28 seam
rule
SB-022, "Each division assigns the work to the other"
pack
division_seam 0.1.0, jurisdiction CA-DSA
  1. seam_determinable eq true
  2. each_division_assigns_to_the_other eq true
  3. effect raise_flag SEAM_CIRCULAR_ASSIGNMENT, severity HIGH, category SCOPE_GAP
  4. priority 10, conflict_group opening_division_seam
  5. won the conflict group on this target over SB-021, "Both divisions carry the work"

The two sentences the conditions read

Conduit at Door D103 is work of Division 28. doc-manual · section 08 71 00 · page 5
Conduit at Door D103 is furnished under Division 08. doc-manual · section 28 13 00 · page 9

Why SB-022 displaces SB-021

Counting assignments alone makes a circular hand-off look like two parties carrying one item, which is the opposite of what has happened. Reporting it as a duplicate buy would send an estimator to delete a line they never had. The suppression is recorded in the run output rather than hidden by it.

Why it is worth an RFI and not a phone call

After award the two sentences are still there. The answer has to change a document, which is why the recommended action is a pre-bid RFI quoting both sentences side by side rather than a conversation nobody can cite.

The boundary is enforced, not promised. tests/unit/test_architecture.py walks the import graph and fails if a model client is reachable from engine, validators, scoring or risk. It is never skipped and never weakened to accommodate a vendor.

Stage 4. The register.

Available

Five items from one run, ranked by severity then by rule id. This is the compact view. The full register, with every evidence citation, rationale, authority and rule trace, is on the sample register page.

out/engine_output.json 5 risk items · 0 blocking · 1 flagged for review
Five risk items in rank order, with target, rule id, source pages, exposure state and confidence.
# Risk Target Rule Source Exposure Conf.
1 High D101 locking deviceBoth divisions specify it and they specify different devices. RFI to delete one of the two requirements. SB-020 08 71 00 p4
28 13 00 p8
Commercial exposure: calibration pending 0.93
2 High D103 rough-inEach division assigns it to the other. RFI quoting both sentences side by side. SB-022 08 71 00 p5
28 13 00 p9
Commercial exposure: calibration pending 0.9
3 High review D104 powerNeither division specifies it. RFI asking which division carries the item. SB-023 08 71 00 p3
28 13 00 p7
Commercial exposure: calibration pending 0.55
4 Medium D103 powerThe documents do not settle it. Read the cited sections by hand before relying on this seam. SB-024 08 71 00 p6 Commercial exposure: calibration pending 0.86
5 Medium D102 locking deviceBoth divisions carry it and agree. Confirm which one carries it and price it once. SB-021 08 71 00 p5
28 13 00 p9
Commercial exposure: calibration pending 0.91

The engine still emits an exposure band and the field is still there. The band is a structural placeholder so the ranking key has something deterministic to sort on after severity, and no band in any shipped pack is derived from cost history. The slot is kept and the number is withheld until it means something.

The full register, every citation and every rule trace Read every rule

Stage 5. Where the finding sits, and when you can still act on it.

In Development

Two views of the same five findings. One puts them on the building. The other puts one of them on a calendar. Both are drawn.

Spatial. The four controlled openings, with their findings on them.

In Development Plan extraction is not built and no module exists. The fixture spatial model records frame material, leaf count and confidence for each opening but carries no coordinates at all, so every position in this drawing was chosen by hand to be legible rather than measured off a sheet. Read it as a layout of findings, not as a floor plan.

Isometric layout of one corridor with four controlled openings A drawn isometric corridor. Four door openings are marked along the back wall: D101 carrying finding SB-020, D102 carrying SB-021, D103 carrying SB-022 and SB-024, and D104 carrying SB-023. An IDF node is marked on the floor. Positions are illustrative and are not extracted from a drawing. D101 SB-020 D102 SB-021 D103 SB-022 power SB-024 D104 SB-023 IDF 1 Corridor C1 ILLUSTRATIVE PLACEMENT, NOT EXTRACTED T-101 Security Plan, Level 1 · positions hand-placed, no coordinates exist in the model D101 exterior hollow metal · D102 hollow metal · D103 hollow metal · D104 exterior aluminum storefront, confidence 0.55
The same placement as text: each opening, its frame material, and the findings placed on it.
Opening Frame, from the model Findings placed on it
D101 Hollow metal, exterior, confidence 0.95 SB-020, locking device
D102 Hollow metal, confidence 0.94 SB-021, locking device
D103 Hollow metal, confidence 0.93 SB-022 rough-in, SB-024 power
D104 Aluminum storefront, exterior, confidence 0.55, review_required true SB-023, power

Phase. One finding, four moments.

In Development SB-022 is real and its recommended action is real. This view is a framing rather than an engine output: the register carries no phase field and nothing in the run emits anything of this shape. Move the scrubber to see what changes.

finding
SB-022, opening D103, rough-in. Division 08 assigns the conduit to Division 28 and Division 28 assigns it back to Division 08.
mechanism
A pre-bid RFI quoting both sentences side by side and asking which division carries the work.
position
Strongest. Nothing is priced yet and the documents can still be changed. The answer costs an email.
what changed
Nothing. Both sentences are in the project manual and either one can still be deleted.

Quote both. Asking the question with only one of them attached invites the answer that it is obviously yours. SB-022, recommended pre-bid action

finding
Unchanged. The two sentences still contradict each other.
mechanism
A written qualification, or a stated allowance carried in the number.
position
Reduced. The question is no longer whether the documents will change. It is whether you carry the item or exclude it in writing, and whether a public agency will accept a qualified bid is a question for the instructions to bidders and your counsel, not for this engine.
what changed
The clarification window has closed. The same two sentences are about to become part of a contract.

At bid time nobody prices it, because each estimator reads their own section and correctly concludes it is not theirs. SB-022, rationale

finding
Unchanged, and now binding on both parties.
mechanism
A change order request, which is a negotiation rather than a question.
position
Weak. It is a negotiation with a party who can point at their contract and be right, and neither side has to move first.
what changed
The documents are complementary and what one requires is as binding as if all required it, so the contradiction is now inside the agreement rather than in front of it.

After award the two sentences are still there, which is why this is worth an RFI and not a phone call: the answer has to change a document. SB-022, rationale

finding
No longer a document question. The conduit is either in the wall or it is not.
mechanism
Absorbed or disputed. The work is installed by whoever is standing closest to the opening, or it stops and becomes a claim.
position
Lowest. Schedule pressure now decides the argument, and the party who is right is usually the party who cannot afford to wait.
what changed
Being right stopped being useful. The seam was determinable from the documents on day one and is now a field condition.

It is absorbed by whichever trade is standing closest to the opening when the gap is found, which in practice is the one already pulling cable. SB-023, rationale. The same run, a different target, describing the same end state

There is no cost axis on this view, and that is a decision rather than an omission. Exposure bands in the engine are structural placeholders carrying calibrated false. A figure that moved across four phases would be four uncalibrated numbers instead of one, presented in a shape that makes them look measured. The cost dimension is withheld until calibration data exists.

What the view does carry is mechanism and position, both of which are stated in the rule's own rationale and recommended action rather than invented here. Every italicised sentence above is quoted from the run and carries the rule it came from.

This walkthrough needs no JavaScript. The stage selector and the phase scrubber are form controls with a stylesheet behind them, and with the stylesheet off every stage and every phase renders in order as one long document.

Build state

What runs, what is being built, what is only specified.

Four states and no fifth. Available runs today on a real package. Pilot runs and is being validated with design partners. In Development is being built and is not reachable yet. Planned means the identifier block is reserved and no code exists.

Every capability named on this site, with its build state and the qualification that applies to it.
Capability Qualification State
Deterministic rule evaluation, validators, risk register, report Runs today, reproducible byte for byte Available
Specification and project-manual cross-check, Division 08 / 28 seam Runs, being validated with design partners Pilot
Seam rules SB-020 to SB-024 The five rules this page walks through Pilot
Scope-ownership statements, SB-001 and SB-002 Single-statement scope rules, no join Pilot
Access-control opening rules, AC-001, AC-010 to AC-014, AC-020 to AC-022, AC-030 Base kit, egress hardware, storefront withholding, supply sizing Pilot
Video-surveillance rules, VS-001 and VS-002 Experimental. Not a promise anywhere on this site In Development
Dual-vendor extraction agreement Code written and unit tested, reached by no command In Development
Hosted web application, login, chat copilot In the repository, not deployed, nothing to sign into In Development
Schedule-to-specification join, SB-010 to SB-019 Identifiers reserved, no rules written Planned
Addendum reconciliation, DC-020 to DC-029 Identifiers reserved, no rules written Planned
Cross-document contradiction, DC-001 to DC-019 Identifiers reserved, no rules written Planned
Plan and drawing extraction No module exists Planned
Bill of materials as an input Specified, no ingest path Planned

The full build status What Blueprint does not detect

The boundary

AI reads. Rules decide. You approve.

Every stage above sits on one line, and the line is the same whether one vendor reads the page or two. It is not a policy in a document. It is an import-graph test that fails the build.

What a model is permitted to do

  • Read a page and transcribe what is on it.
  • Extract a structured fact and attach the document, page and span it came from.
  • Classify a document, a section or a statement into a named type.
  • Locate an element and report where it is.
  • Match one reference against another and report the match with a confidence.
  • Write prose about a finding that code has already produced, in the narration layer and nowhere else.

What only code may do

  • Compute a quantity.
  • Assign a part number or select a device.
  • Produce a risk score or rank an item.
  • Determine that something complies or does not.
  • Decide that two readings agree, and decide what happens when they do not.
  • Emit a number of any kind into the deliverable.

And two things nothing in the system does at all. No model checks a finding against the open web, because a model that searched for corroboration would be producing a judgment with a citation attached rather than a fact. No model settles a disagreement between two readings, because choosing a winner is arbitration and arbitration by a model is exactly the output this product cannot defend in a design review.

What we publish is measured. What isn't measured is labeled accordingly, which is what the states above are for and why three of the five stages on this page say Concept.

How the boundary is enforced What we will and will not claim

Three of these five stages are drawings. Help decide which one gets built next.

A pilot is a real bid package run through the stages that exist, with the output read by someone who knows what should have been on the list. Telling us what the register missed is the deliverable we want back.