revert(mesh): withdraw the neighbourhood anchor -- it regressed the e106 twin mirror
The neighbourhood anchor (f18d591) and its refinement (27a0701) took cross-container inconsistency from 125 to 51 with coverage unchanged, and made e106 render as a destroyer rather than a slab. Both are reverted. ship::tests::static_assembly_matches_runtime_capture is gated on SYLPHEED_ISO, so it SKIPS in an ordinary cargo test -- which is why the regression was invisible in every suite run so far. With the ISO it fails: e106_bdy_01: static M row0 [-1.0, 0.0, 0.0] != captured [1.0, 0.0, 0.0] e106_bdy_01 and _02 are a mirrored pair whose two buffers hold the same geometry reflected in X, and BOTH resources currently decode to the SAME buffer (identical counts, span and mean_x). apply_twin_mirrors picks which instance to reflect from the sign of that mean_x, so which buffer wins flips the decision: before both twins mean_x = -66.83 -> mirror bdy_02 (matches the capture) after both twins mean_x = +66.83 -> mirror bdy_01 (contradicts it) Neither is right -- two resources sharing one decode is itself the bug and the mirror heuristic has been compensating. The capture is ground truth, so a change that contradicts it does not ship. The real fix must give each twin its own buffer first. Kept from the attempt: this test now also asserts the SET of static placements against the capture (allow-list {e303_wep_01} for vbase dedup), so extra placements can finally fail it -- the direction it could never fail in before. Docs, backlog, INDEX and the ignored test's message all corrected to say diagnosed-not-fixed rather than fixed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -615,6 +615,27 @@ mod tests {
|
||||
}
|
||||
}
|
||||
}
|
||||
// ── Extras: the direction this test could not previously fail in. ──
|
||||
// The loop above walks the CAPTURE's parts and looks each up in ours, so
|
||||
// a static placement with no counterpart was invisible to it — which is
|
||||
// how a resource decoded 100x too large (`e303_wep_01`, 2026-08-12) sat
|
||||
// here unnoticed. Pin the set instead: the capture legitimately misses
|
||||
// repeated instances of a shared resource (vbase dedup), so `e303_wep_01`
|
||||
// is expected; anything else appearing only in the static assembly is a
|
||||
// regression.
|
||||
let captured: std::collections::BTreeSet<&str> =
|
||||
cap.parts.iter().map(|p| p.part.as_str()).collect();
|
||||
let extra: std::collections::BTreeSet<&str> = placed
|
||||
.iter()
|
||||
.map(|p| p.resource.as_str())
|
||||
.filter(|r| !captured.contains(r))
|
||||
.collect();
|
||||
let allowed: std::collections::BTreeSet<&str> = ["e303_wep_01"].into_iter().collect();
|
||||
assert_eq!(
|
||||
extra, allowed,
|
||||
"static placements with no counterpart in the runtime capture"
|
||||
);
|
||||
|
||||
// Multi-instance coverage the capture couldn't see (vbase dedup).
|
||||
let count = |res: &str| placed.iter().filter(|p| p.resource == res).count();
|
||||
assert_eq!(count("e106_eng_01"), 2, "both engine nacelles placed");
|
||||
|
||||
Reference in New Issue
Block a user