# NativeCAD 0.11.0 "Hrůša" — a mesh becomes a feature tree, and the parts are built the way they are made

**125 tools, 19 added, nothing removed or renamed — every 0.10.0 call keeps working.**
Verified by diffing the two bundles' manifests: 106 → 125, removed 0. No behaviour change is required of an existing caller.

## RECON2 — reconstruction stopped guessing from the chord (CADSF-1471, CADSB-921/937/943/944/946)
- The analytic cases are rebuilt **through the ground-truth body, not the tessellation's chord**. Measured against their source bodies: shaft −1.149 % → **−0.010 %**, vase −0.511 % → **−0.004 %**, elbow torus R 39.746 → **40.000**. Every ground-truth analytic case now lands within 0.1 % of the body it came from.
- The centroid gate no longer loses a coin toss to itself: an exact cylinder over its own tessellation read deviation 7.601e-2 against floor 7.601e-2 and fell off the analytic route. A tie within 1e-9 relative is a pass (`centroidWithin`) — nothing a real miss produces is that small.
- **The feature route's body agrees with itself** (CADSB-921). NIST's part comes back as one watertight shell: its two tessellations differ by **2e-2 %** where route M differed by 4.7–5.0 %, interior voids **0** (was 17–21), and the vs-mesh and vs-twin volume rulers agree (−0.002 % vs −0.008 %).
- A pad whose footprint genuinely runs along the host outline now **extends** the side faces it is flush with instead of insetting them (CADSB-937): NIST's legs lose their 1.7–3.5 mm inset, volume vs twin −0.89 % → **−0.008 %**.
- The rulers stop penalising an exact body for the mesh's own sag (CADSB-944) — the silhouette is drawn like for like, and the scoreboard holds a reconstruction to what the truth scores against the same fixture.
- Mesh handles are first-class in MCP (CADSF-1410): `cad_mass_properties`, `cad_view_body`, `cad_export_body` and `cad_tessellate_body` take them directly.

## Parts built the way they are actually made (the ten-chairs series)
New ops, each a real construction rather than a boolean approximation:
- `cad_joint` — mortise-and-tenon and friends between two parts **that stay two parts**.
- `cad_fastener` / `cad_fastener_audit` — standard fasteners placed at point + axis through a stack, each part cut the hole *its own material* wants.
- `cad_laminate` — bent-lamination members: a rectangular section along a spine of straight runs and true corner bends.
- `cad_turned_leg` — turned legs and spindles from a half-profile.
- `cad_shell_from_outline` — moulded shells, surface-first.
- `cad_weave` — woven seats as real swept strands (paper cord, cane, webbing), coarse slab lod and fine per-strand lod.

## Kernel robustness
- An exact tangency **interior to a face is a vertex** (CADSB-840): SSI pins the tangency the march stepped over, and faceSplit cuts every chain at it.
- A non-convex prism or flat-ruled loft rooted in a revolved sector's cylindrical face unions **analytically** (CADSF-1307, `ops/prismCylPierce.js`).
- A chamfer facet whose footprint crosses a hole is **built against it**, not laid across it (CADSF-1177) — that line had no gate at all before.
- A hole whose depth equals the wall authors the THROUGH tool, so the pierce answers analytically: **270 → 14 faces** on the mount plate (CADSB-866).
- `ops/loftSpline.js` takes non-planar sections (`sectionFrame:'spatial'`), so Rotor 67's fourteen surfaces of revolution loft under one rigid motion instead of being developed into planes (CADSF-1563).

## Document versions
`cad_snapshot` / `cad_branch` / `cad_restore` / `cad_versions` — journal-backed versions of a document (CADSF-1389). `cad_delete_body` and `cad_set_part` round out the editing surface.

## Known — filed, not hidden
- `splitByPlane` still refuses a B-spline crossing face (CADSF-1562), so Rotor 67's physical tip is **constructed** (interpolated between surfaces 13/14 to the shroud contour less the published clearance, bound 0.151 %) rather than boolean-trimmed. Carried, not tuned away.
- **GitHub Actions has not gated a push since 2026-09-04** (CADSB-947): `ci.yml` and `mcp-matrix.yml` are `workflow_dispatch:`-only, and `mcp-matrix` is nonetheless red on every push with no retrievable logs. This release was gated on the local release gate instead — 929 passed / 0 failed at 0a2b9782 — plus the bundle smoke (boot, `tools/list`, licence gate). The published-shape matrix that `mcp-matrix.yml` exists to run did **not** run for 0.11.0.
- `tools/check_test_wiring.js` reports the committed `web/dist/cad-bundle.js` stale against HEAD; the deployed site's bundle is rebuilt and verified byte-identical by `tools/sync_site.sh` on every sync.

**Downloads are served from featureboard.ai** (see `latest.json` for bytes + sha256):
https://featureboard.ai/nativecad/releases/nativecad-mcp-0.11.0.mcpb
Staged kernel: git 0a2b9782, tree c159c6821ec3 (340 files).
