fix(mesh): pre-pivot sub-meshes must cover their pool, not just index in range
The last two blocks that under-covered their vertex pool were f102_break.dat and f104_break.dat in ptc_pack.xpr, each reading a neighbouring block's index buffer against the wrong declaration (414 verts indexed to 404; 160 indexed to 79). Their marker lists do not map onto the stored blocks -- only 2 of 9 and 4 of 10 sub-meshes decoded at all. Requiring coverage (max_idx + 4 >= vtx_count) for pre-pivot sub-meshes drops exactly the mismatched pieces. Every decoded sub-mesh disc-wide now covers its pool: 8580 at slack 0, 49 within tolerance, none beyond, none negative. Coverage 6069/6294, inconsistency 56, truth table 46/46 -- all unchanged. Suite green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -995,6 +995,20 @@ Everything else holds: 6 069/6 294 decoded, cross-container inconsistency 56, th
|
||||
capture truth table still 46/46 claimed with 0 unclaimed, suite green. The vertex
|
||||
total falls by 1 546 — exactly the garbage that is no longer emitted.
|
||||
|
||||
**The same reasoning finished the job.** The two remaining outliers were the only
|
||||
decoded blocks that did not cover their pool: `f102_break.dat` had a sub-mesh
|
||||
declared 414 vertices whose indices stopped at 404, and `f104_break.dat` one
|
||||
declared 160 whose indices stopped at 79 — both reading a *neighbouring* block's
|
||||
index buffer against the wrong declaration. These are grouped `.dat` composites
|
||||
in `ptc_pack.xpr` whose marker lists (9 and 10 entries) clearly do not map 1:1
|
||||
onto the stored blocks; only 2 of 9 and 4 of 10 sub-meshes ever decoded. Applying
|
||||
the **coverage** requirement to pre-pivot sub-meshes as well drops exactly those
|
||||
two mismatched pieces and keeps the rest.
|
||||
|
||||
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.
|
||||
|
||||
### 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