IFClite TypeScript API
    Preparing search index...

    Interface GeometryDiagnostics

    CSG / opening diagnostics for a geometry pass. Mirrors the Rust GeometryDiagnostics (camelCase serde) the server and the WASM batch path both emit. totalCsgFailures and the classification counts are exact; productsWithFailures, hostsWithOpenings and silentNoOps are batch-summed upper bounds.

    interface GeometryDiagnostics {
        classification: {
            diagonal: number;
            nonRectangular: number;
            rectangular: number;
            total: number;
        };
        failuresByReason: { count: number; reason: string }[];
        hostsWithOpenings: number;
        oversizedRefDrops?: number;
        productsWithFailures: number;
        rectFast: {
            deferHostNotBox: number;
            deferNearEdge: number;
            deferNoOpenings: number;
            deferNotThrough: number;
            deferOffFace: number;
            deferTooManyOpenings?: number;
            fired: number;
            openingsCut: number;
        };
        schemaVersion: number;
        silentNoOps: number;
        totalCsgFailures: number;
        totalUnsupportedItems?: number;
        unsupportedItemsByType?: { count: number; reason: string }[];
        worstHosts: {
            bbox?: { max: [number, number, number]; min: [number, number, number] };
            csgFailures: number;
            firstFailureLabel?: string;
            ifcType: string;
            openings: number;
            productId: number;
            triangleCount?: number;
        }[];
    }
    Index
    classification: {
        diagonal: number;
        nonRectangular: number;
        rectangular: number;
        total: number;
    }

    Opening-classifier outcome counts.

    failuresByReason: { count: number; reason: string }[]

    Failure counts by stable reason label, sorted desc by count.

    hostsWithOpenings: number

    Hosts that had openings processed (batch-summed upper bound).

    oversizedRefDrops?: number

    Content-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.

    productsWithFailures: number

    Distinct products with at least one failure (batch-summed upper bound).

    rectFast: {
        deferHostNotBox: number;
        deferNearEdge: number;
        deferNoOpenings: number;
        deferNotThrough: number;
        deferOffFace: number;
        deferTooManyOpenings?: number;
        fired: number;
        openingsCut: number;
    }

    rect_fast fast-path engagement (perf observability).

    Type Declaration

    • deferHostNotBox: number
    • deferNearEdge: number
    • deferNoOpenings: number
    • deferNotThrough: number
    • deferOffFace: number
    • OptionaldeferTooManyOpenings?: number

      Optional: absent on payloads produced before this counter existed (#1649).

    • fired: number
    • openingsCut: number
    schemaVersion: number

    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.

    silentNoOps: number

    Hosts where rectangular cutters ran, the triangle count was unchanged, and NO failure was recorded (cut attempted, geometry not modified). Batch-summed upper bound.

    totalCsgFailures: number

    Total CSG boolean failures (un-cut openings, emptied hosts, kernel fallbacks).

    totalUnsupportedItems?: number

    Representation 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.

    unsupportedItemsByType?: { count: number; reason: string }[]

    totalUnsupportedItems broken down by IFC type, sorted desc by count.

    worstHosts: {
        bbox?: { max: [number, number, number]; min: [number, number, number] };
        csgFailures: number;
        firstFailureLabel?: string;
        ifcType: string;
        openings: number;
        productId: number;
        triangleCount?: number;
    }[]

    Bounded top-N worst-failing hosts (opt-in per-product detail).

    Type Declaration

    • 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.

    • csgFailures: number
    • OptionalfirstFailureLabel?: string
    • ifcType: string
    • openings: number
    • productId: number
    • OptionaltriangleCount?: number

      Final triangle count of the host's mesh (post-cut when a void subtraction ran, otherwise the pre-cut count).