re: coverage is 96.4% (6069/6294) -- and the 225 misses get a gate breakdown
undecoded.rs supplies the denominator the coverage numbers never had; the disc holds 6294 XBG7 resources, 6069 decode, 225 are searched and missed, 0 lack a descriptor. gate_histogram.rs attributes each miss to the furthest gate its best candidate reached: 120 connectivity, 74 grouped-pool (different path), 15 degenerate/extent, 9 winding, 7 buffer-not-covered. Recorded as a work-list, not a verdict -- a wrong candidate can pass more gates than the true block. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -965,6 +965,38 @@ container holds two direct copies **and** two mirrored ones
|
||||
(`0x33b7754`, `0x342e284`); our twins take the two direct copies, which is
|
||||
self-consistent but unverified — `n206` appears in no captured stage.
|
||||
|
||||
### 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`
|
||||
supplies both by enumerating the XBG7 directory of every container:
|
||||
|
||||
**6 294 XBG7 resources on the disc — 6 069 decode (96.4 %), 225 are searched and
|
||||
missed, 0 lack a usable descriptor.**
|
||||
|
||||
`examples/gate_histogram.rs` then asks, for each miss, **which gate the best
|
||||
candidate reached** before being rejected (`mesh::debug_best_rejection`):
|
||||
|
||||
| furthest gate reached | count | example |
|
||||
|---|---|---|
|
||||
| connectivity (mean edge / diagonal) | **120** | `g004`: 0.724 > cap 0.42 |
|
||||
| grouped pool — placed by a different path, not analysed here | 74 | `t170` (2 sub-meshes) |
|
||||
| degenerate / implausible positions | 15 | `g005`: extent 0.346 (min 0.5), 7/8 degenerate |
|
||||
| winding consistency | 9 | `e007_bdy_01_l`: 0.667 < 0.85 |
|
||||
| buffer not covered by indices | 7 | `e101_bdy_02_d`: indices reach 13 171 of 15 430 |
|
||||
|
||||
⚠️ **Read this as a work-list, not a verdict.** "Furthest gate reached" is taken
|
||||
over *all* candidates, and a wrong candidate can pass more gates than the true
|
||||
block — so this says where to look, not what is broken. What it does establish is
|
||||
that after the cap move to 0.42, **connectivity is still the single largest
|
||||
blocker** (53 % of single-block misses), and that a third of the misses are
|
||||
grouped-pool resources that need the pivot path analysed on its own terms.
|
||||
|
||||
The two smallest buckets are the interesting ones for a fix that cannot go wrong:
|
||||
`extent < 0.5` rejects genuinely tiny props (`g005` spans 0.346), and "buffer not
|
||||
covered" fires when the index buffer addresses only part of a large vertex pool —
|
||||
which is exactly what a **sub-range draw** looks like, and the capture's
|
||||
`indices=` field already showed the engine issuing those.
|
||||
|
||||
### The twin invariant, checked disc-wide (2026-08-12)
|
||||
|
||||
The capture gave a rule that needs no capture to apply: a `…_01`/`…_02` pair of
|
||||
|
||||
Reference in New Issue
Block a user