# L4 live-adapter record — Fusion 2704.1.53 — 2026-09-06 Milestone **M2**. Records what was measured against the running kernel while building the adapter, per CLAUDE.md section 11 and PRD 14.4. Every figure below came from a probe run through `tools/fusion_exec.py`; none is inferred. | | | |---|---| | Fusion version | 2704.1.53 | | Python | 3.14.0 | | Platform | macOS x86_64 | | Documents opened | **0** — every body from `TemporaryBRepManager` | | Probes | `p09_adapter_api_shapes`, `p10_edge_closure_and_length`, `p11_open_edge_control`, `p12_adapter_smoke` | ## Confirmed API shapes (probe 09) | Claim | Verdict | Evidence | |---|---|---| | `getParameterExtents() -> (ok, start, end)` | **CONFIRMED** | arity 3, first element `True` | | `getStrokes` tolerance is **centimeters**, honored as chordal deviation | **CONFIRMED** | 0.000990087 mm achieved for a 0.001 mm request | | `Cylinder` exposes `origin`, `axis`, `radius` | **CONFIRMED** | | | `Cone` exposes `origin`, `axis`, `radius`, `halfAngle` | **CONFIRMED** | | | `Cone.origin` is **not** the apex | **CONFIRMED** | separation measured non-zero; PRD 6.3 | | `Torus` exposes `origin`, `axis`, `majorRadius`, `minorRadius` | **CONFIRMED** | | | `isinstance(face.geometry, adsk.core.Cylinder)` discriminates | **CONFIRMED** | | | **`BRepEdge.isClosed`** | **REFUTED — does not exist** | raises `AttributeError` | ## Edge closure (probes 10, 11) `BRepEdge` has no `isClosed`. Closure must come from vertex **geometry**: | Test | Result | |---|---| | `startVertex is endVertex` on a closed cope curve | **`False`** — identity is a trap | | `startVertex.geometry.isEqualTo(endVertex.geometry)` | **`True`** | | `\|P(end) − P(start)\|` | 0.000000000000 mm | **Control.** Every edge in `tools/probes/fixtures.py` is closed — 10 of 10 across cylinder, cone, torus, coped tube, severed tube and bent tube, all bodies of revolution. A discriminator only ever observed answering `True` is untested, so a box was added: **12 edges, 12 reported open.** Without that control the test could not fail. ## Arc length (probe 10) — PRD 6.4 `[CHANGED v1→v2]` **Analytic ground truth, which is the whole design of the measurement:** | Quantity | Value | |---|---| | `getLengthAtParameter`, circle `r = 14.3 mm` | 89.849549893 mm | | `BRepEdge.length`, same edge | 89.849549893 mm | | Analytic `2πr` | 89.849549893 mm | | **Error** | **0.000000000 mm** | | Inscribed chord sum, n = 20 000 | short by 3.69e-07 mm | So the function **is** exact on analytic geometry, and PRD 6.4's preference over chord summation stands. **Surface-surface intersection curves — the guarantee does not carry:** | Axis angle | `getLengthAtParameter` | chord sum n = 200 000 | chord − getLength | relative | |---|---|---|---|---| | 30° | 148.924974988 mm | 148.927406465 mm | +0.002431476 mm | +1.633e-05 | | 45° | 118.581262478 mm | 118.586505359 mm | +0.005242881 mm | +4.421e-05 | | 60° | 105.505783493 mm | 105.510396829 mm | +0.004613336 mm | +4.372e-05 | | 75° | 99.599232880 mm | 99.600681149 mm | +0.001448268 mm | +1.454e-05 | | 90° | 97.867166722 mm | 97.870609281 mm | +0.003442559 mm | +3.517e-05 | A converged **inscribed** chord sum cannot exceed the arc length of the curve it samples, so the two functions describe different curves. Not monotonic in the angle; `isTolerant` is `False` and `tolerance` `0.0` on all five. Which value is true is **`[OPEN-13]`**. ## Product code executed on kernel geometry (probe 12) The first end-to-end run of the real `adapter/` + `core/` path, not a probe reimplementation. | Step | Result | |---|---| | `cylinder_parameters_of` radius | 14.300000000 mm — millimeters at the boundary (ADR-011) | | `stroke_edge` | 456 points, worst radial deviation **0.000000000 mm** | | `outward_axis_for_cut_end` | `+z`, correctly opposite the cut | | **Tier A closure vs `2πr`** | **0.000000000 mm** | | `render_cylinder_template` | valid PDF | That closure figure reproduces PRD 11.9(c) through the **product code**. ## Hazard reproduced by accident — PRD 7.13 Taking "the first cylindrical face" of a coped tube returns the **cutting tool's** surface: | Face | Radius | Axis | Area | |---|---|---|---| | 0 | 16.0000 mm | (+0.866, 0, +0.500) | 857.9129 mm² | | 1 | **14.3000 mm** | (0, 0, +1.000) | 7739.4401 mm² | Here the areas differ by 9×, so "largest" happens to work — but PRD 7.13 measured a severing cut whose two candidates differ by **0.0112 %**, where it does not. Host-face selection is a deliberate act (FR-1), never a scan. ## New stub/runtime divergences Joining the seven in PRD 7.11: - **`BRepEdge.isClosed`** — in the stub, absent at runtime. - **`getPointAtParameter` raises `RuntimeError: 3`** past the parameter end rather than returning `ok = False`. Float rounding on `start + (end−start)·i/n` at `i == n` is enough to trigger it; clamp the parameter.