The weapon/prop models (rou_fxxx_wep_nn.xpr) rendered with triangular holes in the hull and misplaced/extra spikes. Root cause: XBG7 sub-mesh index buffers are triangle STRIPS, but the decoder read them as triangle LISTS — a strip of N indices is N-2 triangles, a list is only N/3, so ~2/3 of every hull was missing (the holes) and each list-triple of strip data spanned unrelated vertices (the spikes). The tell: triangles-per-vertex was 0.5-1.0 with 0 unreferenced vertices (a closed surface needs ~2.0). - mesh.rs: expand_triangle_strip() converts strip -> list with alternating winding, skipping degenerate triangles (repeated index = strip restart). Applied in both from_xpr2 (weapons) and read_pool_mesh (stage sub-models). All 71 weapon submeshes now have healthy ratios; hulls fill in (wep_03 cannon, wep_04 pod, wep_11, wep_37 verified coherent). - Module doc updated (strip, not list). - sylpheed-cli: `mesh info` reports per-submesh degenerate/unref/spanning-triangle counts; `mesh render` gains --dist (camera zoom). XMESHDBG env dumps the descriptor index markers. Known residual: an index buffer may concatenate several strips with no degenerate bridge, leaving ~2 spanning "spike" triangles at each restart (index jump to a new vertex region) — <1% of tris on most models. Decoding the restart mechanism is a follow-up (a blanket spanning-filter is unsafe: clean models have legit elongated tip triangles). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>