Phase 20 — First Training 3D Model and a Count/Length Ledger, Without an 80–90% Claim
STATUS: SUCCESS_MODEL_PASS. G1 training model and G3 SOR ledger both hold. Training PDF: 澳門大學—S33教職員宿舍建造工程/圖則.pdf. Sole-storey G, four fittings, fabricatedGeometry false. Ledger: countRows = 11, lengthRows = 0, lengthMetresSum = 0. Not a Peak P&D 3D 80/80 claim. Not a measured pipe-length claim. Not a multi-floor aligned building. Not corpus 80–90%. Live Peak 3D tab remains empty (model persisted: false). Assumed 3.15 m is labelled assumed, never measured.
This is an investigation journal plus a product how-to. Every figure below is copied from the Phase 20 success report (docs/PEAK_PHASE20_SUCCESS_REPORT.md), the reconstruct ledger (reconstruct-ledger.v1.json), and the SOR count/length ledger (sor-qty-length-ledger.v1.json). Nothing was re-scored for publication. Zero metres means no centerline was lifted. It is not 0% length accuracy.
What Phase 20 asked
Phases 18 and 19 shipped the in-app world_metres_v1 path and planned a Peak P&D 3D Detection / QA@20 gate of at least 80%. The live Peak P drawing still stops on FLOOR_IDENTITY_AMBIGUOUS with zero floors. Phase 20 changed the first question: can one real training_data PDF reconstruct a non-fabricated model, and can we write SOR count items and length metres from that model?
The estimand is qty_3d (methodVersion phase20_qty_3d_v1). It is not Phase 5–17 2D QA@20. The two scores must not be blended. Opt-in research flags (EVIDENCE_TILED_EXTRACT, VECTOR_GEOMETRY_COUNT) stay off in the signed-in default extract; they are not this 3D path either.
Verdict: G1 and G3
All five Phase 20 gates passed on the artefacts. G1 and G3 are the public ones. G1 is not status: reconstructed. The clause used is floorKeys.length ≥ 1 and at least one fitting with world coordinates. G3 requires a tracked ledger that lists count items and length items, including an empty length section when no pipe_run or riser exists.
| Gate | Result | n / metres | Note |
|---|---|---|---|
| G1 Training model | PASS | floorKeys = [G]; 4 fittings | S33 sole page 2. fabricatedGeometry false. Status stored partial (DISCIPLINE_UNRESOLVED is soft). |
| G3 SOR ledger | PASS | countRows = 11; lengthRows = 0; lengthMetresSum = 0 | Count items written. Length section present as empty arrays. 0 m is not a length accuracy percent. |
G2 (artefact on disk), G4 (expanded tests), and G5 (honesty: assumed height never labelled measured; blocked ≠ 0%; no IFC) also passed. Verification is PASS_WITH_BLOCKERS: automated suites are green; the live 3D tab was not certified because there was no signed-in Clerk session and the S33 model was never written to the product database.
The training model (S33, not Peak)
The SUCCESS_CASE is training_data/澳門大學—S33教職員宿舍建造工程/圖則.pdf (27 pages). Sole page 2 is the G1 primary: floor key G, four fittings with world coordinates, no pipe_run, no riser. Height provenance is assumed (3.15 m opted in). The survey stack on pages 1, 2, 3, 6, 7, 10 and 11 stays PLANS_UNALIGNED and is recorded, not promoted as a registered building.
| Drawing | Status | Floors | Elements | Pipes / risers |
|---|---|---|---|---|
| S33 sole p2 (G1 primary) | partial / earned for G1 | G | 4 fittings | 0 / 0 |
| S33 survey | partial / PLANS_UNALIGNED | B, G, 1, 11, R (as stored) | 12 fittings | 0 / 0 |
| Peak P (product slice) | FLOOR_IDENTITY_AMBIGUOUS | 0 | 0 | 0 / 0 |

SOR count n = 11, length = 0 m
The tracked ledger (sor-qty-length-ledger.v1.json) scores sheet P&D from the page title, not from the filename 圖則.pdf (that filename stays soft DISCIPLINE_UNRESOLVED). Pairing on every count row is identity_only. Peak-SOR.xlsx was not loaded. Sole and survey are two ledger drawings of the same PDF, not 11 unique fittings added across buildings.
| Roll-up | Count rows | Length rows | Measured m | Assumed m |
|---|---|---|---|---|
| S33 sole p2 | 4 | 0 | 0 | 0 |
| S33 survey | 7 | 0 | 0 | 0 |
| Total | 11 | 0 | 0 | 0 |
Sole page 2 count items (qty_3d, unit nos.): 25 mm potable_water fitting (1); 20 mm reclaimed_water fitting (1); 50 mm reclaimed_water fitting (1); 80 mm potable_water fitting (1). Survey adds further printed labels on other pages (potable_water 2, reclaimed_water 2, unlabelled fitting 4). Length items: none. The model had no measured-eligible pipe_run or riser metres.
What this is not
- Not Peak P&D 3D Detection / QA@20 ≥ 80%. NJ left peak80Optional.claimStatus: not_evaluated with both percents null. That gate remains Phase 19.
- Not a measured pipe-length pass. lengthMetresSum = 0 means no centerline, not perfect zero error.
- Not a multi-floor aligned building. Survey stays PLANS_UNALIGNED.
- Not a live in-app model. db.persisted is false. Peak /3d and the Peak P 3D tab stay empty.
- Not corpus 80–90%. Phase 17 sufficiency remains INSUFFICIENT_CROSS_PROJECT_COVERAGE.
How to open the 3D tab and read the blockers
The rest of this post is a walkthrough of the shipped drawing viewer. It is not a claim that 3D takeoff is product-default accurate. For upload, extract, legend takeoff, geometric length and Schedule C review, start at /blog/how-to-use-teraquant. The Phase 18 3D path post is /blog/phase18-pdf-to-in-app-3d.
Host: https://www.teraquant.ai. The signed-in vertical slice is still Peak (143a3a07-99c1-46b4-809c-716365a673b8), P drawing 198b4105-324b-4ded-8cf8-a267248b19c4. The S33 SUCCESS_CASE is not in that project database. You will see Peak’s empty / partial chrome, not four S33 fittings.
1. Sign in and open the drawing
Sign in at https://www.teraquant.ai/sign-in. From /projects open The Peak, or go directly to /projects/143a3a07-99c1-46b4-809c-716365a673b8. Open P 06 AI007_Construction Drawing(12-6-2026).pdf. The centre canvas stays on 圖則 / Drawing. The right inspector defaults to 圖紙總覽 / Drawing summary — a 2D extract and Schedule C narrative, not a 3D scoreboard.

2. Switch the inspector to 3D 模型 / 3D model
On the right inspector, open 3D 模型 (English: 3D model). The PDF canvas can stay visible. Below the inspector hint sits the Phase 20 SOR 3D strip: count rows, length metres, a phase20 badge, and a status that must say blocked (not 0%) when there is no model. Peak P shows dashes, not a fabricated qty_3d.

3. Read the empty 3D canvas diagnostics
Flip the centre canvas from 圖則 / Drawing to 3D 模型 / 3D model. Phase 20 added an empty-state diagnostic: Why this 3D view is empty. Peak P is partial, 0 floors, 0 elements, FLOOR_IDENTITY_AMBIGUOUS on pages 2 and 3. The copy says the tab will not invent pipes. Do not read this as 3D Detection = 0%.

4. Assumed storey height is labelled assumed
The control reads 以假設層高 3.15 m 預覽(非量度) / Preview with assumed 3.15 m storey height (not measured). After you opt in, both the canvas and the inspector must show 假設標準層高(非量度) / Assumed typical storey height (not measured). Assumed height does not fabricate a building and is excluded from lengthMetresSum. On Peak P the floor count stays 0.

5. What the SOR 3D strip will and will not show
- On Peak P today: blocked / not run. Count and length cells are dashes. Reason FLOOR_IDENTITY_AMBIGUOUS. The strip repeats: blocked is not a 0% quantity.
- On the offline S33 ledger (not in the product database): countRows 11, lengthRows 0, lengthMetresSum 0, badge phase20. That strip is not what the signed-in Peak tab shows.
- 圖紙總覽 / Drawing summary stays on 2D extract plus live SOR match. It does not carry qty_3d. Do not blend Phase 17 2D QA@20 into this strip.
What not to expect
- No fabricated pipe tree. If the model is empty, the UI stays empty.
- No IFC, Revit or glTF export. Artefacts record ifcOutput: false.
- Do not headline 80–90% 3D accuracy. Phase 17 corpus coverage is still insufficient. Phase 19 Peak 80/80 was not evaluated here.
- Do not treat 0 m as a length win.
What happens next
- Lift real pipe_run / riser centerlines on a 1:N plan before any length_3d_m KPI. Keep assumed 3.15 m out of measured metres.
- S33 multi-storey survey still needs an evidenced XY datum. No centroid nudge.
- Persist the S33 model only via the opt-in reconstruct path. Peak P still needs title-block floor identity before the live tab can show this kind of mesh.
- Do not promote 3D quantity as a product accuracy headline.
Internal report: docs/PEAK_PHASE20_SUCCESS_REPORT.md. Verification: docs/PHASE20_VERIFICATION.md. Broader 3D path: /blog/phase18-pdf-to-in-app-3d. S33 classification study: /blog/s33-cross-market-verification. Field guide: /blog/how-to-use-teraquant.
Related articles
Phase 18 — PDF to In-App 3D to SOR, Without a 3D Accuracy Claim
Phase 18 shipped a PDF → in-app 3D → SOR path. Corpus reconstruct is 0 fully rebuilt, 9 partial, 12 blocked out of 21. Every 3D Detection and QA@20 figure is blocked (null, not 0%). Badge: INSUFFICIENT_CROSS_PROJECT_COVERAGE. No 80–90% claim. This post is the investigation journal plus a signed-in how-to for the 3D model tab — including honest empty / partial screenshots.
18 min readHow to Use Teraquant: A Field Guide for QS Teams
A practical walkthrough of the Teraquant workflow — from uploading drawings and a SOR, through AI-assisted takeoff, to a signed-off, exportable quote.
6 min read