Faster agent edits, faster opens and updates in the web viewer and the CAD app, a CAD-app transport no host can choke on, a new Render studio, viewer UI cleanups, and fixes. Supersedes #492, #493 and #497.
- **Builds.** An all-link parent composes its tree and splices its STEP from its children's saved files; a STEP whose bytes would not change is kept; a job verifies each stored object once, and its claims keep that; kinematics resolve from the tree's occurrences, not every component's surfaces.
- **Opens and updates.** A package opens with batched reads (hypercar's warm open: 1,575 requests to 96, settled 3.00 → 2.06 s; a cold open 160 → 96 s); the viewer verifies a tree's component map once; a saved file's catalog row is ready as its build ends; large JSON crosses the CAD app's channel gzipped.
- **CAD app safety.** No `cad_http` reply carries more than 4 MiB of body (a message under 5.6 MB), so no host's per-message cap can close the connection; a longer body comes in byte ranges, joined and verified as before.
- **Viewer state.** An update keeps the camera, the select mode, Position and a pose whose joints did not change; a model is framed once, from its declared box; leaving a model drops its view.
- **Render.** A studio lit by softboxes and strips, with a soft contact shadow; a dithered floor at the model's lowest point, Matte by default or Glossy; showcase playback without jumps; Explode eases out and back; close-ups keep their depth resolution; pan and zoom follow the surface under the cursor.
- **Viewer UI.** Display is a navbar dropdown (the perspective box) between Settings and Preview; Settings holds only global settings, the same on the home and in the viewer (Analytics, Features with Quick edit, Feedback); References are compact; Preview is offered only for 3D files.
- **Fixes.** Three tessellator faults (the hypercar's interior streaks and plenum flicker, w16 failing to load, STL exports missing volume); non-ASCII names and names OCCT's reader would misread; failed builds and failed loads reach the CAD app; the WebGL context leak; dropped write-backs; cancelled surface jobs; killed workers' scratch; five snapshot-vs-viewer differences; a Windows digest memo that never hit.
- **Final end-to-end fixes.** The Glossy floor's last pass sampled its own target (WebGL refused it every redraw); a warm daemon imported another project's `lib` when it came back to a project; a catalog row computed from a store missing a part was kept after the repair ("Reading model" forever); f1's animation exported more than its clips; an Edges colour edit never reached the live scene.
Benchmarks against main, each item with its tests, the owner's decisions and the verification rounds: https://github.com/earthtojake/text-to-cad/pull/499
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>