Chestnut Labs G-code Preview
    Preparing search index...

    ToolpathIR & the capability model

    Everything downstream of parsing speaks ToolpathIR (@chestnutlabs/toolpath-core): a versioned, structure-of-arrays representation of a toolpath — geometry (per-segment start/end positions, extrusion, feedrate, moveKind, layer, tool) held in parallel typed arrays, plus header metadata and a source index that maps segments back to byte offsets in the original file.

    Structure-of-arrays (SoA) rather than an array of objects is deliberate: it keeps large files compact and cache-friendly, lets the renderer upload contiguous buffers, and makes draw-range operations (layer clip, scrub) index math rather than object walks.

    ToolpathIR is the contract between parsing and everything else — the renderer, the progress mapper, and any consumer read the IR, never the raw G-code. It carries a schema version so consumers can evolve safely.

    The stack's defining rule: it discloses what it knows and refuses to fabricate what it doesn't. Every derived claim is tagged with a confidence level:

    Confidence Meaning
    known Observed directly from the source (a command or field was present).
    inferred Not stated, but resolved from a defensible default (disclosed as a default, not asserted).
    approximated Derived with known error (e.g. a position between two sparse signals).
    unavailable Cannot be determined from this input.

    These live in the IR header's capabilities map — for example extrusionMode, positioningMode, layers, sourcePositions, parametricProgram. A consumer reads them to decide what UI to show: feature coloring only when the feature was disclosed, a layer slider only when layers are known, an uncertainty band when a position is approximated.

    The same rule governs computed geometry. When a file uses the RS274NGC programming layer (parameters, expressions, loops, subroutines — see Parametric programs), the interpreter computes the coordinates rather than inferring them, so a clean run reports parametricProgram: 'known'. If a resource limit was hit or a construct couldn't be executed, it reports approximated and emits a specific warning (each rs274-… warning names what was lost) — the geometry it did produce is still real, and what it couldn't do is stated, not faked.

    This is why the preview never silently lies: if a dialect didn't emit feature annotations, the stack says so rather than inventing them; if the extruder mode wasn't stated, it defaults and tells you it defaulted. See Live progress & motion model for the model in action across firmware differences.