From 9d33345560c50a0de5a14c37091e6401a83213cc Mon Sep 17 00:00:00 2001 From: "Claude (auto-RE)" Date: Wed, 12 Aug 2026 06:34:41 +0000 Subject: [PATCH] re: the grouped pivot floor is not the blocker either -- anchor work plateaus at 98.7% Sweeping XBG7_GROUPED_CONSISTENCY 0.85 -> 0.80 -> 0.75 decodes no additional resources and leaves inconsistency at 39, while changing which geometry some grouped models get -- strictly worse, so 0.85 stays. With the degeneracy/extent fix already refuted, the remaining 82 misses are not a threshold away; they need a structural answer (marker lists that do not map onto stored blocks), which means a capture, not more tuning. Records the state of the four shipped changes. Co-Authored-By: Claude Opus 5 (1M context) --- crates/sylpheed-formats/src/mesh.rs | 9 ++++++++- docs/re/structures/xbg7-mesh.md | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/crates/sylpheed-formats/src/mesh.rs b/crates/sylpheed-formats/src/mesh.rs index a0c659c..7fcf46f 100644 --- a/crates/sylpheed-formats/src/mesh.rs +++ b/crates/sylpheed-formats/src/mesh.rs @@ -969,6 +969,13 @@ fn edge_cap() -> f32 { std::env::var("XBG7_EDGE_CAP").ok().and_then(|v| v.parse().ok()).unwrap_or(1.0) } +/// Winding floor for the grouped-pool **pivot** (default `0.85`). The single-block +/// path settled at 0.70 on measurement; this is the same question for the pivot, +/// and `XBG7_GROUPED_CONSISTENCY` sweeps it. +fn grouped_consistency() -> f32 { + std::env::var("XBG7_GROUPED_CONSISTENCY").ok().and_then(|v| v.parse().ok()).unwrap_or(0.85) +} + /// Smallest bounding-box extent a block may have (default `0.5`). An absolute /// floor on a format with no unit convention is a scale assumption, so it is a /// knob: `XBG7_MIN_EXTENT`. @@ -1473,7 +1480,7 @@ fn anchor_grouped_meshes( // collapses well below 0.85, so only the true pad/pivot passes. let ib_k = ib0 + rel_ib[kmax]; let vb_k = vb0 + off_v[kmax]; - if !validate_block(bytes, ib_k, vb_k, vck, ick, decl, 0.85, true) { + if !validate_block(bytes, ib_k, vb_k, vck, ick, decl, grouped_consistency(), true) { continue; } diff --git a/docs/re/structures/xbg7-mesh.md b/docs/re/structures/xbg7-mesh.md index e932511..1226160 100644 --- a/docs/re/structures/xbg7-mesh.md +++ b/docs/re/structures/xbg7-mesh.md @@ -1042,6 +1042,29 @@ not obviously right, and both points are one env var apart (`XBG7_PAD0_CONSISTENCY`, `XBG7_EDGE_CAP`) for anyone who wants the conservative end. +### The anchor work has plateaued at 98.7 % — state and what is left + +Four evidence-driven changes took the decoder from 5 480 to **6 212 of 6 294** +resources (**98.7 %**), capture-verified anchors from 29/46 to **46/46**, and +cross-container inconsistency from 125 to **39**: + +1. distinct anchor assignment (single-block, then grouped pools), +2. the connectivity cap 0.28 → 0.42, then replaced entirely by +3. the winding-consistency gate at 0.70, and +4. structural requirements on pre-pivot sub-meshes (index range, pool coverage). + +**Two further threshold moves were tested and refuted**: the scale-free +degeneracy test plus a lower extent floor (zero extra resources, inconsistency +39 → 44), and lowering the grouped-pool **pivot** winding floor +(`XBG7_GROUPED_CONSISTENCY`): 0.85 → 0.80 → 0.75 decodes **no more resources** +and leaves inconsistency at 39, while quietly changing which geometry some +grouped models get (the vertex total moves), i.e. strictly worse. + +So the remaining **82** misses are not a threshold away. They need a structural +answer of the kind the `.dat` composites already showed — marker lists that do +not map 1:1 onto stored blocks — and the honest next step is a capture of a stage +containing them, not more tuning. + ### Where the remaining 82 misses stand — and a refuted fix With the winding gate shipped, coverage is **6 212 / 6 294 = 98.7 %** and only