design: #14 robustness gate decisions
@@ -427,3 +427,8 @@ Alpha is always kept (scaled to the bit depth). Distance = near + t·(far − ne
427
427
## Decision 2026-11-07 (#13 orientation + envelope, implementation choice)
428
428
- Orientation convention fixed and test-guarded with labelled markers: +Y up, character faces −Z, its right is +X; yaw 0 = front (character's right on image left), 90 = left side, 180 = back, 270 = right side; positive pitch looks from above.
429
429
- "Omhullende animaties" is a one-shot, user-triggered button: height and center Y are set so every clip, every frame at project fps and all 60 views fit, +5% margin per side; the pivot is unchanged. Framing stays fixed afterwards: no per-frame, per-clip or per-layer autozoom. Equipment allowance stays manual. Root motion stays retained, so a travelling clip widens the envelope.
430
431
## Decision 2026-11-07 (#14 robustness gate, implementation choice)
432
- Robustness acceptance is an automated, deterministic mutation suite (`tests/robustness.rs`): corrupt/truncated/mutated glTF/GLB, FBX, OBJ bodies, .ppe presets, .ppd manifests and .ppda files must yield an error or a valid result, never a panic or a non-finite body.
433
- glTF loading rejects non-finite positions/normals/weights, mismatched attribute lengths and out-of-range indices; panics inside the gltf parser are caught and reported as load errors (editor import overview included).
434
- Not covered (no automated gate possible here): accessibility, real OS file pickers and non-Linux platforms; these stay manual acceptance items.
@@ -427,3 +427,8 @@ Alpha is always kept (scaled to the bit depth). Distance = near + t·(far − ne427
## Decision 2026-11-07 (#13 orientation + envelope, implementation choice)427
## Decision 2026-11-07 (#13 orientation + envelope, implementation choice)428
- Orientation convention fixed and test-guarded with labelled markers: +Y up, character faces −Z, its right is +X; yaw 0 = front (character's right on image left), 90 = left side, 180 = back, 270 = right side; positive pitch looks from above.428
- Orientation convention fixed and test-guarded with labelled markers: +Y up, character faces −Z, its right is +X; yaw 0 = front (character's right on image left), 90 = left side, 180 = back, 270 = right side; positive pitch looks from above.429
- "Omhullende animaties" is a one-shot, user-triggered button: height and center Y are set so every clip, every frame at project fps and all 60 views fit, +5% margin per side; the pivot is unchanged. Framing stays fixed afterwards: no per-frame, per-clip or per-layer autozoom. Equipment allowance stays manual. Root motion stays retained, so a travelling clip widens the envelope.429
- "Omhullende animaties" is a one-shot, user-triggered button: height and center Y are set so every clip, every frame at project fps and all 60 views fit, +5% margin per side; the pivot is unchanged. Framing stays fixed afterwards: no per-frame, per-clip or per-layer autozoom. Equipment allowance stays manual. Root motion stays retained, so a travelling clip widens the envelope.430
431
## Decision 2026-11-07 (#14 robustness gate, implementation choice)432
- Robustness acceptance is an automated, deterministic mutation suite (`tests/robustness.rs`): corrupt/truncated/mutated glTF/GLB, FBX, OBJ bodies, .ppe presets, .ppd manifests and .ppda files must yield an error or a valid result, never a panic or a non-finite body.433
- glTF loading rejects non-finite positions/normals/weights, mismatched attribute lengths and out-of-range indices; panics inside the gltf parser are caught and reported as load errors (editor import overview included).434
- Not covered (no automated gate possible here): accessibility, real OS file pickers and non-Linux platforms; these stay manual acceptance items.