Alongside the 3D model, every run must deliver a measurement log: the self-documentation that traces every decision back to a piece of evidence. Shown here as an example is the log of Claude Code · opus-5 · run 1 for its own bearing-block case — the run reached shape fidelity 1.00.
Task: Build a 3D model from the technical drawing of a bearing block (17 dimensions) — the supplied text recognition reproduced only 4 of the 17 dimension texts, one of them incorrectly. Approach: The agent did not merely look at the vector drawing, it measured it (scale 1:1) and tagged every dimension with an evidence level. Self-correction: It resolved the recognition error “R9” by measurement into R8 + Ø9; it refuted its own misreading of the “60” as plate width against the dimension-line endpoints. Result: projection check 44/44, all 47 template edges coincident, volume counter-check 0.0000 % — shape fidelity 1.00. Limits: material, tolerances, and manufacturing interpretation remain open and are documented as assumptions.
Here is how the case ran chronologically — each station points to the section with the evidence:
Alongside the drawing, the task package for each case includes a machine text-recognition output (recognized text and cropped view regions) — the line references in this log refer to it.
The text recognition is nearly empty. As dimension text it contains only four entries: R9 (line 3), 45° (line 10), 14 (line 11), 50 (line 12) — plus the title block (line 17): Lagerbock Demo-900 · 1:1 · mm · ISO 2768-m · Projektion: Methode E (ISO 5456-2). All remaining dimensions appear only in the image crops or in the text layer of the PDF. That is why the dimension table states three evidence levels per dimension:
| Level | Meaning |
|---|---|
| OCR | verbatim in the text recognition (line number + quote) |
| Image | read from the image crop — omitted by the text recognition |
| text object or measured vector geometry of the drawing |
The drawing is a vector drawing (produced with FreeCAD TechDraw), not a raster graphic. The agent therefore did not merely look at it but measured it: scale 1:1 ⇒ 1 mm = 2.83465 pt. That allowed every part edge in the template to be converted to mm — all values land exactly on whole millimeters (residual error ≤ 0.003 mm from the rounding of the PDF coordinates). This replaces no dimension; it decides which feature a dimension figure belongs to (see §4, “60”).
For the completeness of this measurement: the drawing knows exactly two line weights — 1.98 pt (47 paths = part edges) and 0.99 pt (49 paths = extension lines/arrows). Not a single path has a dash pattern ⇒ the drawing contains no hidden edges. All 47 part edges are checked edge by edge against the model in §5.
Title block: “Projektion: Methode E (ISO 5456-2)” ⇒ European method / first angle.
| View | Position on the sheet | Extent (measured) |
|---|---|---|
| Front view | top left | 90 × 74 mm |
| Top view | below the front view | 90 × 50 mm |
| Side view | right of the front view | 50 × 74 mm |
By method E, the view below the front view is the top view (looking from above), and its edge facing the front view is the rear edge of the part. That is where the upright plate stands in the template — consistent with the front view. The view on the right is the view from the left.
Open point (inconsequential): Read the drawing wrongly by third angle, and “front” and “rear” would swap. The delivered solid does not change as a result: the part is mirror-symmetric about the plane X = 45, so a 180° rotation about Z maps one reading congruently onto the other. The relative arrangement (R8 corners opposite the upright plate, rib foot 14 mm from the R8 side) follows in any case from the consistency of the top and side views alone.
Model coordinates: X = width 0…90, Y = depth 0 (front, R8 corners) … 50 (rear, upright plate), Z = height 0 (underside of base plate) … 74.
| # | Dimension | Evidence | View | What follows from it |
|---|---|---|---|---|
| 1 | 90 | Image/PDF text; measured: outer contour 255.11 pt = 90.000 mm | Top/front view | Width of the base plate |
| 2 | 50 | OCR l. 12; PDF text (2×) | Side/top view | Depth of the base plate |
| 3 | 12 | PDF text (2×) | Front/top view | 1× thickness of base plate, 1× thickness of upright plate — both dimension spans exactly 34.01 pt = 12.000 mm |
| 4 | R8 | Image + PDF text; measured: arc radius 22.68 pt = 8.000 mm | Top view | Corner radius, only the two front corners (§3) |
| 5 | Ø9 | Image + PDF text; measured: circle Ø 25.52 pt = 9.000 mm | Top view | 2 fastening holes, through |
| 6 | 15 | Image/PDF text; measured 42.52 pt = 15.000 mm | Top view | 1st hole axis from the left edge |
| 7 | 60 | Image/PDF text; measured: endpoints land on both hole axes | Top view | Axis spacing of the Ø9, not the plate width (§4, failed attempt) |
| 8 | 20 | Image/PDF text; measured 56.70 pt = 20.000 mm | Top view | Hole axes from the front edge |
| 9 | 10 | Image/PDF text; measured 28.35 pt = 10.000 mm | Top view | Rib width |
| 10 | 52 | Image/PDF text; measured 147.40 pt = 52.000 mm | Front view | Axis height of the bearing bore above the underside of the base plate |
| 11 | 16 | Image/PDF text; measured 45.36 pt = 16.000 mm | Front view | Distance hole axis → rib top edge ⇒ rib top edge at Z = 52 − 16 = 36 |
| 12 | R22 | Image + PDF text; measured: arc radius 62.36 pt = 22.000 mm | Front view | Half-circle head of the upright plate, concentric to the Ø20 |
| 13 | Ø20 | Image + PDF text; measured: circle Ø 56.69 pt = 20.000 mm | Front view | Bearing bore, axis horizontal (∥ Y) |
| 14 | 14 | OCR l. 11; PDF text; measured 39.68 pt = 14.000 mm | Side view | Rib foot from the front edge of the base plate |
| 15 | 45° | OCR l. 10; PDF text; measured: flank line dy/dx = 68.03/68.03 pt | Side view | Inclination of the rib flank |
| 16 | 1:1 / mm / ISO 2768-m | OCR l. 17 | Title block | Scale 1:1 ⇒ direct pt→mm conversion; general tolerance medium — no nominal dimension |
| Quantity | Value | Derivation |
|---|---|---|
| Width of the upright plate | 44 | = 2 × R22. The flanks run tangentially into the head arc; measured plate width 124.72 pt = 44.000 mm = 2 × 22 ✓ |
| Overall height | 74 | = 52 + R22 (the head is a half-circle about the bore axis). Measured view height 209.76 pt = 74.000 mm ✓ |
| Position of the upright plate in Y | 38…50 | 12 thick, flush with the rear edge: measured front face 38.000 mm from the front edge = 50 − 12 ✓ |
| Rib legs | 24 × 24 | horizontal 38 − 14 = 24; vertical 36 − 12 = 24 ⇒ 45° — the three figures (14, 16, 45°) are redundant and consistent; the dimension check of the build script anchors exactly this. |
| Rib in X | 40…50 | 10 wide, centered (measured center = view center) |
| Upright plate in X | 23…67 | 44 wide, centered |
| R8 only at the front | 2 corners | Only the paths at the front edge are arcs; at the rear a straight line meets the side edge at a right angle. Confirmed by the tangent lines in the front and side views. |
From the finished solid, three TechDraw projections are generated via the command interface and read out and measured by machine — no image inspection. The view orientation is derived from the projection (which axis carries height/depth, which side is the front), not assumed — otherwise one would be checking one's own assumption.
| View | checked | Target | Measured | Dev. |
|---|---|---|---|---|
| Front view | Span width / height | 90 / 74 | 90.000 / 74.000 | 0 |
| Ø20 present as a circle, axis height / axis position | 52 / 45 | 52.000 / 45.000 | 0 | |
| R22 is an arc, not a straight line, concentric to Ø20 | arc at 52 | arc r = 22 at 52.000 | 0 | |
| no R8 arcs in this view | 0 | 0 | — | |
| 2 R8 tangent lines, each 8 from the outer edge | 2 | 2 | — | |
| Rib: exactly 2 flanks, width / top edge / center | 2 / 10 / 36 / 45 | 2 / 10.000 / 36.000 / 45.000 | 0 | |
| Upright-plate flanks tangential (length 40) | present | present | — | |
| Top view | Span width / depth | 90 / 50 | 90.000 / 50.000 | 0 |
| exactly 2 Ø9; axis spacing / from side edge / from front edge | 2 / 60 / 15 / 20 | 2 / 60.000 / 15.000 / 20.000 | 0 | |
| exactly 2 R8 corner arcs, both on the same side | 2 / yes | 2 / yes | — | |
| Upright plate at the rear, thickness / width | 12 / 44 | 12.000 / 44.000 | 0 | |
| exactly 2 rib longitudinal edges, width / foot from front edge | 2 / 10 / 14 | 2 / 10.000 / 14.000 | 0 | |
| no Ø20 circle (axis lies horizontal) | 0 | 0 | — | |
| Side view | Spans = {depth 50, height 74} | yes | yes | — |
| Edge length at the top edge = plate thickness | 12 | 12.000 | 0 | |
| 45° flank as an inclined line (not a rectangle), length | 1 pc / 33.941 | 1 / 33.941 | 0 | |
| Foot point: height / distance from front edge | 12 / 14 | 12.000 / 14.000 | 0 | |
| Apex: height / distance from front edge | 36 / 38 | 36.000 / 38.000 | 0 | |
| Direction of the slope: rises toward the upright plate | yes | yes | — | |
| Tangent line head/flank at axis height | 52 | present | — | |
| Base-plate thickness / plate rear face at the rear edge | 12 / 40 | 12.000 / 40.000 | 0 |
Overall check: passed (44/44).
The three deviations reported at first were errors in the checking procedure, not in the model: the side view maps height and depth onto the view axes differently than assumed, and one edge was searched over the maximum instead of by position. Both were fixed; the view orientation has since been derived.
Beyond the self-check, every visible part edge of the template (all 47 thick paths, converted to mm) was held against the corresponding edge of the run's own projection (tolerance 0.02 mm):
| View | Template | Own model | missing | extra |
|---|---|---|---|---|
| Front view | 15 lines + 6 arc segments | 11 lines + 4 splines + circles | 0 | 0 |
| Top view | 12 lines + 10 arc segments | 10 lines + 2 splines + circles | 0 | 0 |
| Side view | 14 lines + 0 arc segments | 10 lines + 4 splines | 0 | 0 |
Coincident: yes. The difference “line ↔ spline” is purely a matter of representation: where a circle is projected parallel to an edge, the template draws a straight line, and the run's own projection draws the same segment as a degenerate spline of the same length and position — each of these edges was individually matched by length and position.
The title block names neither material nor density nor weight; the weight check is dropped for lack of a target value. As a substitute, the volume was checked against the value computed analytically from the dimensions:
V(model) = 81 496.8314 mm³ · V(analytic) = 81 496.8314 mm³ · deviation 0.0000 %
The delivered build script is an executable program against the command interface; every value in it carries, as a comment, its origin in the drawing. Here is the sequence in essence (pseudo-commands — the concrete interface names remain internal):
After re-import of the delivered STEP file:
| Topology | 1 solid, closed, valid · 18 faces · 48 edges · 32 vertices |
| Volume / surface area | 81 496.8314 mm³ · 19 509.756 mm² |
| Bounding dimensions | 90 × 50 × 74 mm — identical to the overall dimensions of the drawing |
Marked as an assumption, because the drawing is silent on it:
The manufacturing heuristics of the rulebook (“when in doubt, air, not material”) do not come into play here: there are neither draft angles nor undimensioned gaps. Every face of the part is dimensioned and evidenced by at least two views — the template evidence decides completely, without a rule of doubt.