fix(doc): designs saved before format 14 keep their piece names (#136)

Pieces a cut splits a body into are named after their faces since names
follow history (lineage::order_lumps), so they keep their body names when
an upstream edit moves the cut. The kernel's shell order named them
before, and the two orders can differ: a slot along X through a 40x30x10
block swaps Body1 and Body1 (1). A design saved by an older build stores
body names meaning the old order (fillet and chamfer bodies, targets,
participants, materials, appearances, joints), so it would act on the
other piece.

Each feature now says which order names its pieces
(Feature::shell_piece_order). The v13 to v14 step sets it on every saved
feature, so an older design evaluates as it was saved; features made from
now on, in new or old designs, name their pieces after their faces.

The corpus gains split-body-pieces, saved by v0.3.2: a fillet, a chamfer
and an appearance refer to the two pieces by body name. Without the
setting the two pieces swap names (the corpus test fails); with it they
stay as saved. Migration tests that compared an upgraded design with the
original now expect the setting on its features.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J53sR6gEaVt56soFDpTck8
This commit is contained in:
Iraklis KourtisandClaude Opus 5.5 authored and bherbruck committed 2026-10-12 11:52:53 -04:00
1 parent cc668668ce
commit a9efae864d
11 files changed
+710 -5

No files matched your search

+7 -1
View File
@@ -51,7 +51,8 @@ curve the profile segment lies on exactly; nothing is sampled.
reported when only geometry confirms it).
- **Lumps.** When a cut leaves a body in pieces, the whole is named first, so pieces of one face in
different bodies are told apart, and the bodies (`Bar`, `Bar (1)`) are assigned in the order of
their least face name, not the kernel's shell order (which an upstream edit can swap).
their least face name, not the kernel's shell order (which an upstream edit can swap; see
[Older designs](#older-designs)).
Names are worked out lazily, on first request, and shared by a body's clones.
@@ -87,6 +88,11 @@ its centre, its inner circle). Migrating such a design marks those names (`?F2:t
are found among the names geometry gives, as the build that saved them found them: an older design
evaluates as it was saved. Picking the face again stores its exact name.
Their features also keep naming the pieces they split a body into in the kernel's shell order
(`Feature::shell_piece_order`, set by the migration): the body names stored after them (fillet and
chamfer bodies, targets, participants, materials, appearances, joints) mean the pieces in that
order. Features added later name their pieces after their faces.
## Not done yet
- Certificates (`FaceSource`, the strict attachment identities behind sketches on faces and