* claim: #2089 (3MF production extension: review follow-ups)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* 3MF import: production extension review follow-ups (#2089)
Follow-ups from the review of #2127:
- Only the root model's build is read; other parts' build sections are
ignored as the spec asks (a slicer's child build pointing at a thumbnail
no longer matters).
- A model part that can't be read fails only the placements that need it;
the package-wide caps (part names, 1 GB of model XML) still refuse the
package. The root XML is dropped once parsed and each part is read
against the remaining budget.
- Loops are reported apart from depth, keyed by (part, object).
- Messages name parts as written; objects are kept in id order so parts are
read in the same order every run; %XX escapes in part names are decoded;
the model unit is a local of the parser.
- Tests: a component without p:path stays in its part (T1), the same id in
two parts is no loop (T2), a slicer-shaped project (T3), the placement
budget across parts (T4), a loop through three parts and a chain past the
depth cap (T5), broken parts and child builds (T6), escaped names; the
hostile-parts test asserts its messages; the mutation test also mutates
the parts' XML and zips it again.
- Guide: what slicer-only data is not read.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Tyler Chiriboga <18270301+Tyler-Chiriboga@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>