fix(mesh): winding consistency replaces the connectivity heuristic
Gate attribution put connectivity behind 153 of 225 misses -- the largest blocker, and the gate already known to reject a capture-proven block. Testing it against winding consistency (an objective topology signal: ~1.0 or ~0.0 for a real mesh, ~0.5 for a mis-carve) shows a floor of 0.70 with connectivity inert dominates the previous default on both axes: 6212 resources decoded (+143) with 39 shared inconsistencies (-17), capture oracle unchanged at 46/46, twin invariant clean, coverage invariant intact. Suite green. The 0.80 cliff (5770 resources, 0 inconsistent) is documented, not taken -- consistency is the weaker witness, and both points are one env var apart. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,7 @@ file offset vcount candidate claimed by our decode ou
|
||||
0x1a0befc 2296 yes f101_bdy_03(2296) f101_bdy_03 f101_bdy_03 @ -0x0
|
||||
0x1a22c1c 7694 yes f101_eng_01(7694) f101_eng_01 f101_eng_01 @ -0x0
|
||||
0x1be5df4 628 yes f101_wep_01_m(628) f101_wep_01_m f101_wep_01_m @ -0x0
|
||||
0x1bf40f4 261 yes e_rob_f001(24), _rou_f105_break(261), e_rou_f106(24), e_rou_f302_barrel(24), e_rou_f302_base(24), e_rou_f303_barrel(24), e_rou_f303_base(24), e_rou_e007_Far(24), e_rou_e007_Near(24), e_rou_e010_Far(24), e_rou_e010_Near(24), e_rou_e105(24), e_rou_e105_wep_01(24), e_rou_e106(24), e_rou_e106_eng(24), e_rou_e106_wep_02_01(24), e_rou_e106_wep_02_joint(24), e_rou_e108_Missile_open(24), e_rou_e201(24), e_rou_e302_barrel(24), e_rou_e302_base(24), e_rou_e303_barrel_Near(24), e_rou_e303_base_Near(24), e_rou_e501(24) f106_eng_01_l e_rob_f001 @ -0x0
|
||||
0x1bf40f4 261 yes e_rob_f001(24), e_rou_f003_Near(24), e_rou_f101_wep_01(24), e_rou_f105(24), _rou_f105_break(261), e_rou_f106(24), e_rou_f302_barrel(24), e_rou_f302_base(24), e_rou_f303_barrel(24), e_rou_f303_base(24), e_rou_e007_Far(24), e_rou_e007_Near(24), e_rou_e010_Far(24), e_rou_e010_Near(24), e_rou_e105(24), e_rou_e105_wep_01(24), e_rou_e106(24), e_rou_e106_eng(24), e_rou_e106_wep_02_01(24), e_rou_e106_wep_02_joint(24), e_rou_e108_Missile_open(24), e_rou_e201(24), e_rou_e302_barrel(24), e_rou_e302_base(24), e_rou_e303_barrel_Near(24), e_rou_e303_base_Near(24), e_rou_e501(24) f106_eng_01_l e_rob_f001 @ -0x0
|
||||
0x1bf596c 2446 NO _rou_f105_break(2446) f105_bdy_01_m _rou_f105_break @ -0x0
|
||||
0x1c03ebc 1960 NO _rou_f105_break(1960) f105_bdy_02_m _rou_f105_break @ -0x0
|
||||
0x1c0f67c 82 NO _rou_f105_break(82) e106_wep_02_01_l _rou_f105_break @ -0x0
|
||||
|
||||
@@ -1009,6 +1009,39 @@ Every decoded sub-mesh on the disc now covers its own vertex pool: **8 580 at
|
||||
slack 0, 49 within the ±4 tolerance, none beyond it, none negative.** Coverage,
|
||||
consistency and the capture oracle are all unchanged by the tightening.
|
||||
|
||||
### ✅ Fixed: winding consistency replaces the connectivity heuristic
|
||||
|
||||
With every miss attributed (below), **connectivity accounted for 153 of 225** —
|
||||
by far the largest blocker, and the one gate already known to reject a
|
||||
capture-proven block. So it was tested against the alternative the decoder
|
||||
already trusts elsewhere: **winding consistency**, `max(na, 1−na)`, where a real
|
||||
mesh sits at ≈1.0 or ≈0.0 and a mis-carve lands near 0.5. It is an objective
|
||||
topology test; the edge-ratio is a shape heuristic.
|
||||
|
||||
Swapping them (connectivity inert, winding gating the pad-0 path):
|
||||
|
||||
| winding floor | resources decoded | shared inconsistent | capture oracle |
|
||||
|---|---|---|---|
|
||||
| — (connectivity 0.42, previous default) | 6 069 | 56 | 46/46 |
|
||||
| 0.60 | 6 214 | 53 | — |
|
||||
| **0.70 (now)** | **6 212** | **39** | **46/46** |
|
||||
| 0.80 | 5 770 | 1 | — |
|
||||
| 0.85 | 5 770 | 0 | 46/46 |
|
||||
|
||||
**0.70 dominates the previous default on both axes** — 143 more resources decode
|
||||
*and* 17 fewer shared resources disagree across containers — with the capture
|
||||
oracle unchanged at 46/46 claimed, 0 unclaimed, the twin invariant still clean
|
||||
(18 exact mirrors, 22 related, 0 collapses, 0 unrelated across 40 pairs, up from
|
||||
34), and every decoded sub-mesh still covering its pool. So it ships, and the
|
||||
connectivity cap drops to an inert 1.0, kept as a knob and a backstop.
|
||||
|
||||
The cliff at 0.80 is recorded rather than taken: it buys **perfect** cross-container
|
||||
consistency (0 inconsistent) for 442 resources. Consistency is the weaker witness
|
||||
— a systematic mis-anchor is consistent — so paying that much coverage for it is
|
||||
not obviously right, and both points are one env var apart
|
||||
(`XBG7_PAD0_CONSISTENCY`, `XBG7_EDGE_CAP`) for anyone who wants the conservative
|
||||
end.
|
||||
|
||||
### Coverage has a denominator now, and the misses have a cause breakdown
|
||||
|
||||
Coverage has been quoted as "resources decoded" with no total. `examples/undecoded.rs`
|
||||
|
||||
Reference in New Issue
Block a user