Every delivery hides the same defects: a dimension that lies, CAD pasted in years ago, a model dumped on one workset, two texts printed on top of each other. Assay sweeps the active model in a single read-only pass — model-health checks, view forensics and a full inventory — and turns what it finds into a number a BIM manager can quote: a health score out of 100, with the evidence one double-click from the element itself.
Revit accumulates warnings, overrides and hidden elements silently. Nobody sees them in a working view — the client sees them on the sheet.
Assay is read-only end to end — it opens no transactions, purges nothing, deletes nothing. Detection here; the fixing stays yours.
The empty state promises exactly what runs: warnings, content hygiene, links, worksets, rooms, sheets and view forensics — read-only, nothing is modified. Press Scan and the fast whole-model checks run first, the per-view forensics last, the inventory closes the pass — with a live phase line and a working Cancel, inline in the window, never a modal in your face.
| Severity | Area | Kind | View | Element | Detail | Recommendation | Count | ID |
|---|
One Scan is eleven passes in a fixed order: Revit warnings, content quality, link health, datum pinning, worksets, rooms and spaces, views and sheets and detail lines per view sweep the whole model; annotation clashes and the graphics-and-forged-dimensions pass then visit only the views placed on a sheet, so the forensics cost what the deliverable costs. The header stamps how many were visited. Working views are counted as a metric, not raised as 176 defects. The inventory runs last, and it takes everything.
Snowdon Towers — Sample Architecture · 05/07/2026 09:30 · 84 view(s) visited
The score starts at 100 and subtracts severity-weighted, capped penalties — a critical costs far more than a warning, and a warning-heavy model degrades on a curve instead of falling off a cliff. Five tiles above the grid carry the counts — clicking a severity tile filters to just it; the fifth flips to the Inventory. And one honesty rule above all: if a scanner could not run, a Warning row says so by name, the report's grade reads “partial” — and the score is never published to the rest of the suite as if the audit were whole.
| Severity | Area | Kind | View | Element | Detail | Recommendation | Count | ID |
|---|---|---|---|---|---|---|---|---|
| Critical | Annotations | FakeDimension | A101 — Ground Floor Plan | Dimension | Shows '2 400' but really measures 2 387 mm | Remove the text override so the dimension reports the true measurement. | 442901 | |
| Error | Content | ImportedCad | site-plan-old.dwg | CAD imported into the model embeds its geometry, line patterns and text styles permanently. | Delete and re-attach as a CAD link, or rebuild natively. | 301442 | ||
| Warning | Annotations | AnnotationClash | A104 — Level 2 Plan | Text Note | Text Notes vs Text Notes | Reposition so both texts stay readable on the sheet. | 455210 / 455211 | |
| Info | Graphics | GraphicOverride | S-201 — Section AA | FAC Brick 102 | Overrides: halftone, projection colour | Per-element overrides bypass view templates; reset to By View if unintended. | 388120 |
The view forensics catch what working views hide: elements hidden by hand, overridden graphics, hidden links, texts printing over each other, and the worst offender — dimensions whose displayed value has been typed over. The model-health suite reads the rest of the story: Revit warnings grouped by type and counted, in-place families, imported CAD, purgeable types, unpinned links, unenclosed, unplaced and duplicate rooms, sheets without title blocks, duplicate sheet numbers, views drafted over with hundreds of detail lines, and a model leaning on one overloaded workset.
| Severity | Area | Kind | View | Element | Detail | Recommendation | Count | ID |
|---|---|---|---|---|---|---|---|---|
| Warning | ModelHealth | ModelWarning | 12 elements | 12 occurrences · Highlighted walls overlap | Resolve via Manage ▸ Warnings; recurring types usually point at a modelling or family-authoring habit. | 12 | 402544 | |
| Warning | Coordination | WorksetHygiene | Shell | Workset 'Shell' holds 62 % of elements — worksets aren't segmenting the model. | Distribute elements across purpose-named worksets to reduce sync contention. | — | ||
| Info | Content | PurgeableContent | 210 unused element(s) (families, types, patterns, materials, templates) could be purged. | Run Manage ▸ Purge Unused to reduce file size. | 210 | — | ||
| Warning | Coordination | LinkNotPinned | MT-STR-Block A.rvt | An unpinned link can be moved by accident, breaking shared positioning. | Select the link and Pin it (most BEPs require links pinned). | 88213 | ||
| Warning | ModelHealth | UnplacedRoom | Store 1.07 | Exists in the schedule but is not placed in any view — it still counts in area take-offs. | Place it, or delete it from the schedule. | 391207 | ||
| Error | Standards | DuplicateSheetNumber | Sheet A-101 | 2 sheets share number 'A-101'. | Renumber so every sheet number is unique. | 2 | 220145 |
Connect a provider once in Synapse and the scan adds a single batched call: every warning type comes back ranked critical, soon or ignorable with a one-line reason, and Assay re-stamps the severity and puts the reason in front of the recommendation. Three slightly-off-axis walls drop to Info; two identical instances rise to Critical, because they double-count in every schedule. The call is capped at sixty seconds — miss it and the deterministic findings stand, with the report recording that the triage did not run.
| Severity | Area | Kind | View | Element | Detail | Recommendation | Count | ID |
|---|---|---|---|---|---|---|---|---|
| Critical | ModelHealth | ModelWarning | 2 elements | 2 occurrences · There are identical instances in the same place. This will result in double counting in schedules. | AI triage (critical): identical instances double-count in every schedule and take-off. · Resolve via Manage ▸ Warnings; recurring types usually point at a modelling or family-authoring habit. | 2 | 418223 | |
| Warning | ModelHealth | ModelWarning | 24 elements | 24 occurrences · Highlighted walls overlap. | AI triage (soon): overlapping walls distort net areas and print doubled hatching. · Resolve via Manage ▸ Warnings; recurring types usually point at a modelling or family-authoring habit. | 24 | 402544 | |
| Info | ModelHealth | ModelWarning | 9 elements | 9 occurrences · Room is not in a properly enclosed region. | AI triage (ignorable): these are the plant voids, which are unbounded on purpose. · Resolve via Manage ▸ Warnings; recurring types usually point at a modelling or family-authoring habit. | 9 | 391077 | |
| Info | ModelHealth | ModelWarning | 3 elements | 3 occurrences · Wall is slightly off axis and may cause inaccuracies. | AI triage (ignorable): three walls off axis by under a millimetre. · Resolve via Manage ▸ Warnings; recurring types usually point at a modelling or family-authoring habit. | 3 | 377410 |
Double-click a finding and Assay selects the element and zooms to it, opening a suitable view if the current one can't show it. A clash row hands over both texts at once, because the finding names them both. The right-click menu keeps the plumbing honest — Select in Revit, Zoom to, Copy element ID, ready for Select by ID — and an ID that no longer exists is simply ignored, never an error in your face. It is one row at a time: for a bulk hand-over, the CSV's ElementId column feeds Select by ID.
| Severity | Area | Kind | View | Element | Detail | Recommendation | Count | ID |
|---|---|---|---|---|---|---|---|---|
| Critical | Annotations | FakeDimension | A101 — Ground Floor Plan | Dimension | Shows '2 400' but really measures 2 387 mm | Remove the text override so the dimension reports the true measurement. | 442901 | |
| Warning | Visibility | HiddenInView | A101 — Ground Floor Plan | Party Wall 215 | Hidden via Hide Element / Hide in View | Confirm the hide is intentional; unhide if it masks required content. | 402118 |
One segmented control flips the window from Issues to Inventory: every sheet, view, model element and annotation the scan met, with its worksharing story — who created it, who last modified it, who owns it right now. Orphans only keeps just the views placed on no sheet, the classic model-bloat tell. Each tab remembers its own search and filters, so flipping back loses nothing.
| Kind | Name | Category | Author | Last modified | Owner | Orphan | ID |
|---|---|---|---|---|---|---|---|
| View | S-201 — Section AA | Section | jsmith | mrivera | None (Free) | Yes | 442871 |
| View | Detail — Parapet junction | Detail | avega | avega | None (Free) | Yes | 431006 |
| View | L2 — Working plan (copy) | FloorPlan | jsmith | jsmith | jsmith | Yes | 455102 |
The scan does not only find things, it counts them. Revit warnings and how many distinct types they are; in-place families; imported CAD against linked; raster images; what Purge Unused would remove; detail lines and the worst single view; linked models and the unpinned ones; unpinned datums; rooms unplaced or unenclosed; sheets missing a title block; working views; placed views with no template. Each carries a traffic light, and every poor or watch light is subtracted from the score — so the headline number can be checked, tile by tile.
Export HTML writes a single self-contained report — score ring with a written verdict, severity donut, area-by-severity matrix, the searchable findings and the inventory — that renders identically on a locked-down site-office laptop, because nothing in it phones home. Export CSV hands the issues to Excel. And the scan is read across the suite: Lens shows the Assay card on the selected element, and the suite dashboard carries the audit headline stamped with when it was measured.
The scan stays in the session, keyed to the document it came from — a title-only model such as Project1 must be the very same document, so one model's verdict is never read against another. Lens picks it up: an ASSAY card whose subtitle is the model's headline, then this element's findings as severity-led rows with a Show that jumps to the view where the finding bites. A clean element says so rather than pretending no scan ran. The Hub tile stays live and refuses to invent a score.
This is an actual HTML report Assay exports — self-contained, works offline, shareable as one file. Scroll it right here, or open it full-screen.
Assay ships on the QA / QC panel of the BIMIO tab. One read-only scan, a score you can quote at the milestone, and a report you can send tonight. Revit 2024–2027, full trial, no card.