Opening-classifier outcome counts.
Failure counts by stable reason label, sorted desc by count.
Hosts that had openings processed (batch-summed upper bound).
OptionaloversizedContent-hash references the geometry pass refused because they exceeded
u32::MAX (#3421 / #3752). Nonzero means some instancing was skipped, not
that geometry is wrong. Optional: absent on payloads from producers
predating the counter.
Distinct products with at least one failure (batch-summed upper bound).
rect_fast fast-path engagement (perf observability).
OptionaldeferTooManyOpenings?: numberOptional: absent on payloads produced before this counter existed (#1649).
Contract version handshake (mirrors Rust
GEOMETRY_DIAGNOSTICS_SCHEMA_VERSION, currently 3). Bumped on field
renames/removals and count-semantics changes; also on an additive field
whose absence a consumer must tell apart from a real zero, which is why 3
(added totalUnsupportedItems) bumped. A purely additive optional field
that no consumer gates on does not bump. Kept worded the same as the
canonical copy in @ifc-lite/geometry: the structural contract test cannot
see comments, so a rule stated two ways here is drift nothing catches.
REQUIRED, not optional: the Rust field is a plain u32 serialized
unconditionally, so every producer since #1514 writes the key. A value of
0 is what Rust's #[serde(default)] yields when it READS a payload
written before #1514, and is the only "pre-versioned producer" signal a
consumer sees.
Hosts where rectangular cutters ran, the triangle count was unchanged, and NO failure was recorded (cut attempted, geometry not modified). Batch-summed upper bound.
Total CSG boolean failures (un-cut openings, emptied hosts, kernel fallbacks).
OptionaltotalRepresentation items dropped from the mesh output because no processor is registered for the item's type, or the registered processor errored (#3691). Optional: absent on payloads from producers predating the counter.
OptionalunsupportedtotalUnsupportedItems broken down by IFC type, sorted desc by count.
Bounded top-N worst-failing hosts (opt-in per-product detail).
Optionalbbox?: { max: [number, number, number]; min: [number, number, number] }World-space AABB of the host mesh, when a void cut captured it.
Mirrors the {min, max} shape used by MeshData.localBounds.
OptionalfirstFailureLabel?: stringOptionaltriangleCount?: numberFinal triangle count of the host's mesh (post-cut when a void subtraction ran, otherwise the pre-cut count).
CSG / opening diagnostics for a geometry pass. Mirrors the Rust
GeometryDiagnostics(camelCase serde) the server and the WASM batch path both emit.totalCsgFailuresand the classification counts are exact;productsWithFailures,hostsWithOpeningsandsilentNoOpsare batch-summed upper bounds.