# NativeCAD 0.12.0 "Jurowski" — `cad_contest`: enter a showcase contest from the default package

**126 tools (+`cad_contest`), nothing removed or renamed.** The release that makes the showcase contests at https://featureboard.ai/contests possible (CADSF-1595 on the MCP side, FBF-563 on the site). The first one is the Spooktacular Halloween CAD Contest — Halloween animatronics, entries to 31 October 2026, two winners get a year of NativeCAD Studio.

## What it is
`cad_contest` (`contests` | `start` | `status` | `submit` | `end`) joins the evaluation allow-list, so it runs without a licence key. `start` with a ticket from a contest page opens a **contest scope** for the server process: on an UNLICENSED server the ordinary modelling tools run until the contest's entries close, and the twelve tools that would let the build leave the machine for the entrant's own use — `cad_export_body`, `cad_save`, `cad_restore`, `cad_versions`, `cad_import`, `cad_assembly_import`, `cad_mesh_to_brep`, `cad_mesh_payload`, `cad_quote_payload`, `cad_quote_submit`, `cad_eval_packet`, `cad_eval_share` — answer the new code **`E_CONTEST_SCOPE`**. The only way out of a contest build is `submit` (with `agree:true`), which exports the active document to glb — authored animation clips ride along — plus a 512 px poster from `cad_preview_body`, into a private temp directory, posts the `docs/CONTEST_CONTRACT.md` §4 envelope to `featureboard.ai/api/contest/entries`, and deletes the temp files whatever happens. There is deliberately no offline bundle: the entrant keeps nothing, the contest gets the entry. A LICENSED server is unaffected by the scope; `submit` still works there.

- Ticket check at `start` (and again at `submit`) against the site; an unreachable site still opens the scope (`offline:true`) and the ticket is checked at submit.
- `E_LICENSE_REQUIRED` now carries `details.contestHint`; `cad_server_info.gate.contest` and `cad_help` state the scope.
- Env: `CADSOLVER_MCP_CONTEST_ENDPOINT` (default `https://featureboard.ai`), `CADSOLVER_MCP_CONTEST_TIMEOUT_MS` (20 000).

## Gates
schema-sync 481/481 · package 219 · cadsf-1128 35 (bundle + `.mcpb` + determinism) · cadsf-1148 51 (private groups withheld) · contest 108 · license-gate 56 · license 145 · batch 48 · share 92 + 171 · mcp-smoke `dist/server.min.js` = `bin/nativecad-mcp.js` = 126 tools · bundle-smoke on the shipped `.mcpb` (unlicensed host). `dist/server.min.js` sha256 `85710df5…` identical in the tree build, the tgz and the `.mcpb`.

## Known — filed, not hidden
- `tool-list-budget.test.js` red on master before and after (tools/list 417 KB against the 400 KB ceiling; `cad_contest` is 3.5 KB of that).
- "MCP published-shape matrix" CI lane red on the self-hosted runner for want of a root `npm install` (esbuild) — CADSB-987 — since before this release.

**Downloads are served from featureboard.ai** (see `latest.json` for bytes + sha256):
https://featureboard.ai/nativecad/releases/nativecad-mcp-0.12.0.mcpb
https://featureboard.ai/nativecad/releases/nativecad-mcp-0.12.0.tgz
Staged kernel: git 5c725c5b, tree 7813f2bc7787 (348 files). Built with `SOURCE_DATE_EPOCH` pinned to 10bdfb7b from a clean `git archive` export, esbuild 0.28.1.
