# NativeCAD 0.22.1 "Dutoit" — fasteners through existing holes, a smarter fastener audit, fast import replays, STEP trims, self-update on by default

**180 tools, unchanged from 0.22.0.** Installs on 0.17.2 and later pick this release up through the self-update.

* **`.mcpb` and plugin installs now update themselves.** If you have never set `autoUpdate`, a `.mcpb` or plugin install now installs signed releases on its own: it downloads and verifies the release, installs it while the server is idle, and an app reload finishes it. npm and dev installs still only announce a release. An explicit setting still wins; `cad_configure {autoUpdate:"notify"}` keeps the old behaviour, `{autoUpdate:"off"}` turns it off. Every safety gate is unchanged: signature and sha256, idle-only install, rollback after 3 failed starts, halted versions, staged rollout.
* **Fasteners through existing holes and slots.** `cad_fastener` now joins a part whose existing hole or slot the axis runs down, instead of reading it as a gap. A hole already wide enough and open all the way through is kept; a narrower or blind one is drilled to size. Each is reported in `fastener.existingHoles[]`. The head-side washer now sits on the first part, not inside it.
* **A fastener audit that knows nuts and washers.** `cad_fastener_audit` recognises a nut (ISO 4032/4035) or a washer (DIN 125-A / ISO 7089) by its geometry when it has no name or role, and scores a nut as a nut. It also audits bodies from several open documents together.
* **Fast edits beside a big STEP import.** The result of a leading `cad_import` is cached against the file's contents, so a trivial op on a document that imported a large assembly drops from about 12-21 s to under 100 ms.
* **STEP reading.** `TRIMMED_CURVE` trims are honoured (a cylinder's trimmed rims no longer import as straight chords), two halves of one closed curve are no longer reported as duplicates, import health flags a shell whose volume cannot fit its bounding box, and planar outlines on tilted walls project correctly.

See `packages/mcp/CHANGELOG.md` under `## 0.22.1` for every field and refusal.

## Gates

* **bundle-smoke over stdio, on the shipped `.mcpb` and `.plugin`.** `cadsolver 0.22.1`, tools/list 180, staged git 3d22dec8.

**Downloads:** https://featureboard.ai/nativecad/releases/nativecad-mcp-0.22.1.mcpb, https://featureboard.ai/nativecad/releases/nativecad-mcp-0.22.1.plugin and https://featureboard.ai/nativecad/releases/nativecad-mcp-0.22.1.tgz, plus the kernel library https://featureboard.ai/nativecad/releases/nativecad-kernel-0.3.2.tgz (`latest.json` lists bytes and sha256).

```
1bf20613e154b77c669f0563f86e25d841ee9127bbe8704bb1684e1a084040bf  nativecad-mcp-0.22.1.mcpb
4f1309959e166513ef581aff69e472f9ec2b99ba9d85a27016377efaecbbe54d  nativecad-mcp-0.22.1.plugin
e01b63a0e012496cde912b591563eecda2fa44e78b16eab8daec98b0544cf6ef  nativecad-mcp-0.22.1.tgz
ddbff515ae856b23af40afcfbb1bfab11757de16d50748d4b1c54d46ad8f3056  nativecad-kernel-0.3.2.tgz
```

**Build.** Built in the Cowork VM from `3d22dec8` (master `a7d9768f` plus the version bump, worktree `ticket/CADSF-101849`), with `SOURCE_DATE_EPOCH` set to 1792198458 (that commit's time). `dist/server.min.js` (sha256 `6db1a8cb…`) is identical in the `.tgz`, the `.mcpb` and the `.plugin`.
