diff --git a/docs/re/structures/xbg7-mesh.md b/docs/re/structures/xbg7-mesh.md index f66e8e1..571f188 100644 --- a/docs/re/structures/xbg7-mesh.md +++ b/docs/re/structures/xbg7-mesh.md @@ -438,11 +438,27 @@ before the change both twins decode with mean_x = −66.83 → mirror bdy_02 after the change both twins decode with mean_x = +66.83 → mirror bdy_01 (contradicts it) ``` -Neither is right: two distinct resources sharing one decode is itself the bug, -and the mirror heuristic has been compensating for it. The runtime capture is -ground truth, so a change that contradicts it does not ship — **the real fix must -give each twin its own buffer**, after which the mirror rule can use each -resource's own geometry. +The runtime capture is ground truth, so a change that contradicts it does not +ship. + +**Correction (measured after the fact):** the first write-up of this said "two +distinct resources sharing one decode is itself the bug". **That is wrong.** +Sharing is normal here — 1 043 of 5 480 decoded resources (19 %) share geometry +with another resource, and of 1 242 related pairs, **1 241 are identical in every +container they co-occur in**, which is what legitimate asset reuse looks like. +A mirrored pair like `bdy_01`/`bdy_02` is *supposed* to share one geometry, with +the reflection applied at placement — exactly what `apply_twin_mirrors` does. + +What actually matters is **which of two mirrored buffers is canonical**. The disc +holds both an X+ and an X− version; the engine treats one as the base, and +`apply_twin_mirrors` was tuned against that. The neighbourhood anchor moved these +resources to the *nearer* buffer, which is the other one — hence the flip. So the +real fix is not "give each twin its own buffer" but **pin which buffer is +canonical**, with the capture as the oracle. + +**Exactly one pair is provably mis-anchored by this test**: `e105_bdy_02_l` / +`e105_brg_m` share a decode in 7 of the 15 containers holding both and differ in +the rest — two names cannot be the same geometry only sometimes. **The filtered path needed care.** `models_named` (what the viewer's ship rendering uses) drops non-wanted resources, which would leave a filtered decode