# NativeCAD 0.8.0 "Fricsay" — the kernel worker survives the single-file bundle, blends close whole loops, and the eval loop is licensed

**105 tools (was 102), nothing removed or renamed — every 0.7.0 call keeps working.**
One class of call now REFUSES where it used to publish wrong geometry (the CADSB-749 volume gate); read "Behaviour changes" before keying off a boolean refusal.

## New tools
- **cad_design_knowledge** — the DFM knowledge packs (26 packs, 1379 entries) as a lookup: `listPacks`, `loadPack`, `search` over `data/dfm`, including the new investment-casting and turbomachinery packs (CADSF-1106, CADSF-1211).
- **cad_assembly_contacts** — which faces of an assembly actually touch, with the measured contact area and gap (CADSF-1161).
- **cad_gap_registry** — the register of what this build cannot do yet: reads a refusal's reason code, classifies it against the capability-gap taxonomy and files it (CADSF-1222/1223).

## Packaging — the release blocker this version fixes
- **CADSB-774** — the single-file `.mcpb` (CADSF-1128, 3.7 MB instead of 7.3 MB) shipped no `worker-entry.js`, so every tessellating tool on the installed bundle died `E_KERNEL_CRASHED`. The worker now re-enters the bundle itself as its worker_threads script; verified over stdio on the shipped file (`cad_box` → `cad_preview_body` → STL → flat DXF) before packing.
- `cad_server_info.stagedKernel` carries the git sha and tree hash of the kernel inside the bundle — `tools/kernel_doctor.js` compares it to the release.

## Behaviour changes
- **Booleans are volume-checked and refuse by name (CADSB-749).** A subtract whose result removes more or less than the tool sweeps inside the base is refused `volume_not_conserved` / `boolean_under_removal` with the measured band, instead of publishing a watertight-but-wrong body. Four general-engine cases that 0.7.0 published are now refused (CADSB-782) — the refusal carries `measured` and the engine trail.
- **`cad_fillet_edges` builds the reentrant plane × B-spline root fillet** as ONE rolling ball around the whole loop (CADSF-1210, CADSF-1258): the turbine-blade root fillet at r = 1.5 mm — 177/177 edges, seams 9e-5 mm, G1 1.5e-4, watertight. A plane × B-spline loop is no longer declined for its size and a partial loop is a result, not a refusal (CADSF-1248); `report.timeBudget` stops a loop instead of running past your timeout.
- **Stable face/edge identity across a blend re-solve** (CADSF-1157) — editing a blend's radius keeps the ids you already hold.
- **Native sketch primitives in profiles** (CADSF-1166): circles, arcs and slots are authored as CIRCLE / B-spline, not sampled N-gons; profile loops are auto-oriented so a reversed hole no longer costs two calls.
- **Appending an op no longer replays the whole document** (CADSF-1152); the session survives a kernel crash through an op journal and replay (CADSF-1162, CADSF-1102 kernel-host budget survival).
- **`cad_pad`** takes the same profile primitives as `cad_extrude_profile`; **`cad_measure`** gains `section`; **`cad_tessellate_body` / `cad_mesh_payload`** gain `maxEdgeLength`; **`cad_dfm_check`** pages a large issue list (`maxIssues` / `issueOffset`); **`cad_export_body`** maps unwritable paths to `E_IO`.
- **PMI and datum attachments bind by NAME** (CADSF-1181), so a re-solve cannot orphan a tolerance.
- **glTF**: B-rep edges are a pipeline primitive (`extras.kind = "edges"`, LINES), primitive `extras` survive export, and `alignVertexAttributes` fixes the 204 `MESH_PRIMITIVE_ACCESSOR_UNALIGNED` validator errors on quantized scenes (CADSF-1252).
- **Sheet metal**: `cad_sheet_fold` / `cad_sheet_box` with flat-pattern DXF and `bendCount` on the quote payload; SendCutSend catalog conformance (CADSF-937); OSH Cut packs and contour DXF.
- **Licensing + evaluation loop (ADR-11, CADSF-1218…1229)** — an unlicensed server refuses every tool outside the evaluation set (`cad_server_info`, `cad_help`, `cad_license`, `cad_evaluate`, `cad_eval_report`, `cad_eval_packet`, `cad_eval_share`, `cad_gap_registry`, `cad_report_bug`) with `E_LICENSE_REQUIRED`; `cad_evaluate` records terms; `cad_eval_packet` defaults to disclosure L1; `cad_eval_share` posts by default.
- `tools/list` is 15 % smaller (330 KiB, 3246 B per tool); private tool groups (CADSF-1148) keep FEA and partner tools off the public list.

## Fixes
- **CADSB-774** — see Packaging.
- **CADSB-731** — the governor never suggests an unusable `maxTriangles:0` retry.
- **CADSB-699 / CADSF-1181** — large selective edge reports are grouped, so a partition-path fillet response stays under the 16 KiB budget.
- A refused or thrown op leaves no residue body (CADSF-1162); faces whose file never marks an outer bound now blend and chamfer; fillets on imports that author `.F.` FACE_BOUNDs behave.
- Booleans against B-spline faces no longer lose volume to a one-quad tiling; a fillet whose band would cross a hole is refused before it is built.

## Showcases shipped with this release
- **Turbine blade** — the four-wall public page: sizing → build → root fillet → verdict (CADSF-1200/1201).
- **Turbogenerator** — every part mounted and audited (no floaters, no clashes), a Drawing (HLR) mode without z-fighting, viewer controls on the viewer (CADSF-1259, CADSB-766/767/768).
- **IMTS casing build 9** — liner lands, stiffening hoop, probe/drain/stacked bosses, PMI (CADSF-1206…1208).

## Known — filed, not hidden
- The general engine's cylinder-into-curved-wall subtracts that the volume gate now refuses (CADSB-782), two tessellation pins that moved the wrong way (CADSB-783), a coincident-cylinder false positive on a ring-bore imprint (CADSB-784). The full local unit suite's remaining reds are inventoried in the CADSB-712 burn-down.

**Downloads are served from featureboard.ai** (see `latest.json` for bytes + sha256):
https://featureboard.ai/nativecad/releases/nativecad-mcp-0.8.0.mcpb
Staged kernel: git 4c26c4ab, tree 9402f082707c.
