# NativeCAD 0.17.0 "Asahina" — NativeCAD keeps itself current

**166 tools: 159 from 0.16.0, plus 7 new ones. Nothing was removed or renamed.**

**NativeCAD updates itself.** Once a session has started, the server checks `featureboard.ai/nativecad/releases/latest.json`, once a day and in the background. How it treats a newer release depends on the `autoUpdate` setting:

1. **`notify` (the default)** names the newer release on every response and in `cad_server_info`.
2. **`auto`** also installs it when the server is idle. Restart Claude to finish.
3. **`off`** makes no network call at all.

`cad_configure {update: "now"}` installs the newest release on request.

Only a release signed with NativeCAD's release key, whose download matches the signed sha256, ever installs. The previous version is kept, and a version that fails to start three times is rolled back by itself. Self-install works for the Claude Desktop `.mcpb` and the Cowork `.plugin`; an npm install is told the command, and a source checkout is told to use git. Details are in `docs/UPDATES.md`.

**This is the first release that can update itself, so install 0.17.0 by hand once.** After that, new releases install themselves.

**New tools**

* `cad_pcb`: board analysis (impedance, DC drop, ampacity, thermal, UL 796 / IPC-6012 / creepage, return path), a BOM, and a diff between two board revisions (files or git refs) in the impactDiff v1 format.
* `cad_drawing`: shop-ready drawing sets.
* `cad_enclosure`: board enclosures.
* `cad_gdt_position`: position-tolerance sizing.
* `cad_sheet_convert`: solid to sheet metal.
* `cad_sketch_solve`: constrained 2D sketches.
* `cad_surface_analysis`: class-A surface checks.

`cad_pcb` and `cad_import` need a licence key. A free key is at https://featureboard.ai/register?source=nativecad.

See `packages/mcp/CHANGELOG.md` for every change.

## Gates

* **bundle-smoke over stdio, on the shipped `.mcpb` and `.plugin`.** Checks: initialize 0.17.0; tools/list 166; `cad_server_info` reports staged git `afcd5285` and tree `f8b0b11f6530`, 596 files; `cad_box`, `cad_preview_body` (on the kernel worker) and `cad_mass_properties` run unlicensed; `cad_export_body` is refused by name and writes no file.
* **Tool list.** The 0.16.0 and 0.17.0 bundles were compared: 159 to 166, with the 7 additions above.
* **Self-update end to end, on the real bundle, with the real release key.**
  * A 0.16.0-numbered build of this code, in `auto` mode, found a signed 0.17.99 release on a local server and verified it. It installed the release over its own directory once idle, while the kernel worker stayed pinned to a snapshot of the running bundle.
  * After a reload it booted as 0.17.99, and its first tool call marked it healthy.
  * The snapshot bundle, run from its relocated path, spawned and used the kernel worker.
* **Test files:** ncupdate (53 assertions), ncupdate-server (12), config, smoke, stdio, telemetry, schema-sync, tool-list-budget (371,204 B, 17,916 B headroom), cadsf-1662, cadsf-1128 (bundle and .mcpb build), and 50 more files that touch `cad_configure`, `cad_server_info`, the kernel worker or `_meta`.
* **Red, and not caused by this release** (they were already failing on master):
  * `output`, `cadsb-140`: `cad_drawing`'s registration and schema.
  * `package`, `cadsb-1479`: `child_process` in `src/tools/pcb/git-read.js`, plus bare `process.env` reads in `jobs/submit.js`, `tools/output/drawing.js` and `tools/pcb/git-read.js`.
  * `contest`: `cad_pcb` added to the contest denylist.
  * `cadsf-865`: the `pcb` progress family.

**Downloads are served from featureboard.ai** (`latest.json` lists bytes, sha256 and the signature): https://featureboard.ai/nativecad/releases/nativecad-mcp-0.17.0.mcpb

**Build.** Built from `ticket/CADSF-100058` `afcd5285` (parent: master `ca10666a`), with `SOURCE_DATE_EPOCH` pinned to its commit time (1790900830), esbuild 0.28.1 and the offline `plugin/lib/zip.js` writer. `dist/server.min.js` (sha256 `1c9beea3…`) is identical in the `.tgz`, the `.mcpb` and the `.plugin`. `latest.json` is signed with ed25519 key `d2791510af4077e7`.
