Sample risk register

Five findings, one Division 08 to 28 seam.

This page is the unmodified output of one engine run against a fixture package that ships inside the repository. The command that produced it, the three input files, their hashes and the config hash are all below, so you can see what went in before you read what came out. Nothing on this page has been edited for presentation: every finding, quote, page number, authority, confidence value and recommended action is reproduced exactly as the engine emitted it.

The one concession to a web page: each rule's rationale runs to a full paragraph, and the panels below carry the first two or three sentences of it, cut at a sentence boundary. No sentence has been reworded, shortened or reordered. The complete text of every rationale is in packs/division_seam.json and is reprinted on the rules page.

This is a synthetic fixture, not a real client project. tests/golden/division_seam/ is a small hand-authored document set, one project manual of twelve pages holding two specification sections, built for one purpose: to drive every branch of the seam rules so the golden test can compare the output byte for byte. No district wrote it. No estimator bid it.

That matters in both directions. What this page does show is exactly what the output looks like, what the rules actually check, what evidence they carry and where they stop short. What it cannot show is how the rules behave on a real bid package, because a fixture written to make rules fire will always make them fire.

What Blueprint does not detect

The run, reproducible

One command. Three inputs. One config hash.

Clone the repository, run this, and compare. The same three input files and the same two rule packs produce the same config hash and the same register on any machine, because nothing in the scoring path calls a model, reads a clock or reads the network.

terminal engine 0.1.0 · seed 0 · jurisdiction CA-DSA
$ bre run \
    --packs packs/division_seam.json \
    --packs packs/scope_boundary.json \
    --model tests/golden/division_seam/spatial_model.json \
    --documents tests/golden/division_seam/document_model.json \
    --out out/

5 risk item(s), 0 blocking. config_hash 27793629219d1c37
wrote out/report.md
wrote out/engine_output.json
Inputs to this run, with the role and content hash the run manifest recorded.
Role Path sha256
spatial_model tests/golden/division_seam/spatial_model.json a25377ade5533632
document_model tests/golden/division_seam/document_model.json 2654c2dc31146cb1
pack packs/division_seam.json (division_seam 0.1.0) ad42ce584cba42b1
pack packs/scope_boundary.json (scope_boundary 0.1.0) d9fc9edc9358d3cc

Hashes are shown to sixteen characters, the way the report renders them. The full config hash for this run is 27793629219d1c374b1ee630b608840308fbb3cb71da24bd263aac45b3d265e7; the command line prints its first sixteen. Change one character in one input file and the hash changes, which is the point: a register you cannot replay cannot be argued with.

The register

Every item, with the evidence that produced it.

Five items, ranked by severity, then by the engine's internal exposure band, then by rule id. Select a row to open it. Each panel reads in one order: the finding, every citation the engine attached, the rationale from the rule pack, then the recommended pre-bid action. The cited authority, the exposure slot and the rule trace showing the conditions that were true when it fired follow underneath.

out/engine_output.json 5 risk items · 0 blocking · 1 flagged for review · config_hash 27793629219d1c37
Risk register, five items in rank order. Select a row to open its evidence panel.
# Severity Target Rule Source Conf. Review
1 High D101 locking device SB-020 08 71 00 p4
28 13 00 p8
0.93 no
2 High D103 rough-in SB-022 08 71 00 p5
28 13 00 p9
0.9 no
3 High D104 power SB-023 08 71 00 p3
28 13 00 p7
0.55 review
4 Medium D103 power SB-024 08 71 00 p6 0.86 no
5 Medium D102 locking device SB-021 08 71 00 p5
28 13 00 p9
0.91 no
High SB-020 DOCUMENT_CONTRADICTION Rank 1 · Opening D101, locking device at the Division 08 / Division 28 seam seam:op-d101:locking_device

Finding

Division 08 (section 08 71 00) and Division 28 (section 28 13 00) both specify the locking device at opening D101, and they do not require the same thing. Division 08 requires: Electric strike, fail secure. Division 28 requires: Electrified mortise lockset.

Extracted evidence

Provide an electric strike, fail secure, at Door D101. doc-manual · section 08 71 00 · page 4
Provide an electrified mortise lockset at Door D101. doc-manual · section 28 13 00 · page 8

Section headings, cited to show both sections were read

SECTION 08 71 00 - DOOR HARDWARE doc-manual · section 08 71 00 · page 3
SECTION 28 13 00 - ACCESS CONTROL doc-manual · section 28 13 00 · page 7

Every seam item cites both section headings as well as its substantive quotes. That is how the register shows the reading was two-sided: a finding about what Division 28 does not say is worthless if Division 28 was never opened.

Rule rationale

Two sections requiring two different devices at one door is the argument half of section 2.4's 'a duplicate buy or an argument'. Only one device gets installed, so one of the two sections is unmet the day the door is hung, and which one is unmet is decided by whoever ordered first rather than by the design. The estimator's exposure is the difference between the two products plus the frame preparation that suits only one of them, and an electrified lockset and an electric strike do not share a frame prep.

Recommended pre-bid action

File a pre-bid RFI asking the design team to delete one of the two requirements, and state in the RFI which one you carried. An answer that changes the documents protects the price; an answer given verbally does not.

Authority

CSI MasterFormat Division 08 and Division 28 boundary; AIA A201 General Conditions 1.2.1 on complementary documents and 3.2.2 on the contractor's obligation to report discovered discrepancies before proceeding

Exposure

Commercial exposure: calibration pending The engine computes an order-of-magnitude band for this item. It is not calibrated against real project cost history, so it is not published.

Rule trace

  1. seam_determinable eq true
  2. carried_by_division_08 eq true
  3. carried_by_division_28 eq true
  4. requirements_conflict eq true
  5. effect raise_flag SEAM_REQUIREMENTS_CONFLICT, severity HIGH, category DOCUMENT_CONTRADICTION
  6. priority 20, conflict_group opening_division_seam, uncontested on this target

confidence 0.93 · review_required false · category DOCUMENT_CONTRADICTION · pack_id division_seam · pack_version 0.1.0

The engine sorts on an exposure band after severity, and the band is withheld from this page until it is calibrated against real project cost history.

Boundaries

What the register does not contain.

Absences here are deliberate and enforced in the data model, not left to the discretion of whoever renders the report. If a field does not exist, no rendering can invent it.

No unit cost

There is no unit price on any line of this output, and no field on the bill of materials line to hold one.

No extended cost

Quantity times price is not computed anywhere, because the second operand does not exist in the model.

No labor dollars

The device catalog holds labor hours for future use. No dollar value is attached to them and none reaches the deliverable.

No part number chosen by a model

A model may read a part number off a page. It may never assign one. Device selection is a rule, and the rule id is recorded on every assignment.

No compliance determination

Nothing here says a design complies or does not. Rules cite authority and report a state; the determination belongs to the AHJ and the engineer of record.

No accuracy claim

No precision figure, recall figure or time saved appears anywhere in this output. The register reports states and cites evidence. It does not score itself.

A bill of materials in this system carries quantity and device identity only. The BomLine model holds device id, category, description, manufacturer, part number, quantity, unit of each or foot, the rule and target every assignment is attributed to, a withheld flag, and at least one evidence citation. There is no cost field of any kind on it, which is why no report, export or chat rendering can produce one.

This run produced no bill of materials at all. The seam packs raise flags about responsibility; they do not select devices, so the BOM section of the report reads "No devices were assigned by this run." An empty section is the honest output when nothing was assigned.

The rule family

The four states of a seam.

For every controlled opening the pack reads which division the documents put its locking device, its power and its rough-in on, and reports only the states that cost money: both divisions, neither division, each division pointing at the other, and the state where the documents do not settle it at all. Four states, five rule ids, because "both divisions" splits on whether the two sections agree about the device.

The five seam rules, their state, the flag each raises, and the commercial consequence stated in the rule's own rationale.
Rule State at the seam Flag raised Severity Commercial consequence
SB-020 Both divisions specify the work and they require different things SEAM_REQUIREMENTS_CONFLICT High Only one device gets installed, so one of the two sections is unmet the day the door is hung, and which one is unmet is decided by whoever ordered first rather than by the design.
SB-021 Both divisions carry the work and do not disagree about it SEAM_DUPLICATE_SCOPE Medium Both sections are correct in isolation and both estimators price the device, so either the owner pays for two of them or, more often, one bidder assumes the other trade has it, deletes it, and is the low bidder for the wrong reason.
SB-022 Each division assigns the work to the other SEAM_CIRCULAR_ASSIGNMENT High At bid time nobody prices it, because each estimator reads their own section and correctly concludes it is not theirs.
SB-023 Neither division specifies the work, and no other division is named SEAM_UNASSIGNED High Nobody has priced the item, so at award it is a change order or 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-024 The seam cannot be determined from these documents SEAM_UNDETERMINED Medium The severity is medium rather than high because the finding is about our reading rather than about the documents: it tells a reader where to look, not what they will find there.

Each consequence above is a single unedited sentence from that rule's rationale in packs/division_seam.json.

Why SB-024 is deliberately separate from SB-023. Both of them end with nobody carrying the item, so collapsing them into one rule would look like a simplification. It is not.

From SB-024's rationale, verbatim: "Neither is a conclusion, reached after reading both sections and finding nothing; undetermined is the admission that one of them was not in the document set, or that the only sentence covering this work moves it to a party the documents decline to name." And: "Reporting the second as the first would be Part 13's confident output where the honest output is a flag, and it would be the specific version of that failure this product can least afford, because a bidder shown 'nobody specifies the rough-in' on a package whose Division 08 section was never supplied will find the specification, find the assignment, and stop believing the register."

The two also fail differently, are answered differently, and are cited separately when benchmark results are published. In this run both fired, on the same opening: SB-024 on the power at D103, where "by others" points at nobody, and SB-023 on the power at D104, where nothing points anywhere at all.

This was a fixture. Run it against a real package.

A fixture proves the mechanism works. Only a real bid package tells you whether the rules catch what matters and how much noise they make doing it. That is what the pilot is for, and telling us what was wrong is the deliverable we want back.