fix(mesh): refine the anchor map before using it -- inconsistency 63 -> 51
Pass 1's anchor map contains exactly the mistakes the neighbourhood is meant to correct, so a resource sitting beside a mis-anchored neighbour inherits a bad reference. Re-anchoring against the improving map and repeating converges quickly: two rounds, and a third changes nothing (the loop exits early when a round is a fixpoint). before decoded 5480/6294 inconsistent 125 neighbourhood anchor decoded 5480/6294 inconsistent 63 + refining the map decoded 5480/6294 inconsistent 51 Coverage still unchanged. The 51 that remain cluster in _l (LOD) and _dead variants -- e001_l, e010_bdy_01_l, e106_eng_02_l, _rou_f302_base_dead, e303_base_dead and friends. A plausible reading is that a variant shares its base's vertex and index counts, making the two mutually confusable so that locality cannot separate them; recorded as untested rather than asserted. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -405,7 +405,13 @@ guesswork.
|
||||
| | decoded | shared | inconsistent |
|
||||
|---|---|---|---|
|
||||
| before | 5 480 / 6 294 | 681 | **125** |
|
||||
| after | 5 480 / 6 294 | 681 | **63** |
|
||||
| neighbourhood anchor | 5 480 / 6 294 | 681 | **63** |
|
||||
| + refining the map | 5 480 / 6 294 | 681 | **51** |
|
||||
|
||||
**Refining matters** because pass 1's anchor map contains the very mistakes the
|
||||
neighbourhood is meant to correct, so a resource beside a mis-anchored neighbour
|
||||
inherits a bad reference. Re-anchoring against the improving map and repeating
|
||||
converges quickly — two rounds, with a third changing nothing.
|
||||
|
||||
**Coverage is unchanged and inconsistency halves.** `e303_wep_01` now decodes to
|
||||
49 × 23 × 42 in *all* containers, and `e106` renders as a destroyer instead of a
|
||||
@@ -420,7 +426,12 @@ now collected regardless of the filter, but only the asked-for ones and their ±
|
||||
neighbours are decoded in pass 1, so a filtered decode stays proportional to what
|
||||
was asked for.
|
||||
|
||||
**63 remain.** The ignored test
|
||||
**51 remain**, and they cluster: `_l` (LOD) and `_dead` variants —
|
||||
`e001_l`, `e010_bdy_01_l`, `e011_bdy_01_l`, `e016_l`, `e104_bdy_05_l`,
|
||||
`e106_eng_02_l`, `e501_01_l`, `_rou_f301_base_dead`, `_rou_f302_base_dead`,
|
||||
`e303_base_dead`. 🟡 A plausible reading is that a variant shares its base's
|
||||
vertex and index counts, so the two are mutually confusable and the neighbourhood
|
||||
cannot separate them — untested. The ignored test
|
||||
[`mesh_consistency_disc.rs`](../../crates/sylpheed-formats/tests/mesh_consistency_disc.rs)
|
||||
still asserts the target state and now records 63 rather than 125; the remaining
|
||||
cases are where the neighbourhood is itself wrong or absent.
|
||||
|
||||
Reference in New Issue
Block a user