diff --git a/CLAUDE.md b/CLAUDE.md index 27e7d51..8bd4e67 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -214,6 +214,25 @@ length dimension on a rectangle edge is not a radius). It is not a gate hole — `scripts/drive/m3-c-dimensions.json` clicks `chip:⌀ diameter` and asserts the geometry 12 typed as a diameter produces — but the L2 gate does not exercise it. +**M4 and M5 landed partially on 2026-09-07, in a close-out pass, and what did NOT land was cut +rather than left floating.** Three interrupted lanes were finished to green and merged: **M4-R** +(edge and vertex picking with per-compile ids that are never persisted, hover off the ID buffer +already rendered, `Selection::Edges/EdgeChain/Vertices`, and the section cutaway with an offset +plane), **M4-K** (the kernel and façade half of direct modelling: per-face offsets, defeaturing, +face splitting by imprinted edges, and the general transforms, each written against a K0 probe +number rather than a guess), and **M5-1** (the multi-body compile core: `BodyId` from the document +allocator, `FeatureTarget` replacing `cut: bool`, the `Boolean` feature, `Compiled.bodies` with +`body_of_face`, body-scoped resolution with `BrokenReason::BodyGone`, and document format 27 on a +two-step migration ladder with naming store v5). **The gate is 1306 tests, 44 selftest checks and +18 drive scripts, both negative controls failing at their own step.** What is NOT here: M4's +document glue, gestures and history tools (lanes D, G, H), M5's scene, items panel and gesture +wiring (lanes 2 and 3), and the L3 and L4 ladder gates. The `sole_body()` shims are deliberate +and refuse ambiguity by name rather than guessing a body. Everything the close-out removed or left +owed is listed in the session's follow-up notes, and one item is worth repeating here because it +was a defect on main rather than any lane's: **`SilencedMessenger` mutated a process-global OCCT +singleton with no lock**, which corrupted the heap in three of six workspace runs and could make a +STEP export silently write no file; it is mutex-guarded now. + **M2 (naming completeness) is complete as of 2026-09-07; M2-1/2 and M2-6/7 in brief, M2-3/4/5 below.** `TopoRef` exists as a record in the naming store keyed (holder feature, picked id); payloads keep the bare id; fingerprints are persisted (store v3) and `OwnerTable::Live` reads the