Parts
A part wraps a solid with manufacturing identity and optional physical data:massDensity expression or a legacy
descriptive material label. A label is not resolved against the material
registry and does not supply density.
Fixed-placement assembly
{ suppressed: true }.
Nested assembly
Evaluated occurrences
An evaluated assembly provides occurrence data, aggregate measurements, physical mass properties when densities are resolvable, mesh/export views, and a deterministic bill of materials.Current boundary
Assemblies in 0.1 use fixed authored placements. There is no mate/joint solver, degrees-of-freedom analysis, motion study, contact, or interference engine yet. Those are planned as separate protocols rather than hidden behavior inside fixed transforms.Repository-only staged fixed-placement products
The staged facade provides a source-onlyassembly(...) authoring method. Its
callback receives a StagedLocalAssemblyBuilderV7 and can add fixed-placement
instances of owned local parts, already-completed local assemblies from the same
builder, direct external-part handles, or external-assembly handles. Requiring a
local referenced assembly to be complete makes facade-authored local nesting
acyclic by construction.
externalPart(resource, output) binds one named part output from a committed
InvariantCAD document. externalAssembly(resource, output) binds one named
assembly output. Neither handle publishes a local feature node. Staged
assemblies can be published as product outputs and selected through
evaluateProductAssemblyOutputsV7(...); the historical local evaluator/result
names remain source aliases during staging. This entire capability is
repository-only work for 0.2. It is not available from the public 0.1.1 package
root, a package subpath, the public evaluator, or the CLI.
Evaluation expands the active root-local graph iteratively. A direct external
part contributes one part leaf. A fixed external subassembly first admits its
committed child document, requires the selected output to directly reference an
assembly, and then expands that assembly’s child-local parts and nested local
assemblies in authored depth-first order. Every emitted occurrence retains its
full root-to-leaf instance path; its id is the final path segment, while the
complete path supplies stable identity independent of array position or
geometry.
Every leaf part must use geometry admitted by the direct staged part evaluator:
one supported primitive/import/Boolean/transform solid DAG root or one supported
body set, including commitment-verified imported leaves. This product boundary
does not widen the child part feature families.
The configuration active at each containing assembly controls that definition’s
instance suppression and placement expressions. A named
configuration.instanceSuppressed(assembly, instanceId, false) can explicitly
activate an instance authored as suppressed in that assembly definition. Each
active edge then selects inherit, base, or a named configuration for its
referenced component. For an external edge, inherit maps root base to child
base or a named parent ID to the same ID in the child; base and named select
the child directly. Descendant selectors are interpreted inside the child
document. Root caller parameter overrides never cross the external boundary.
Placement operations execute in authored order on each edge, then nested
placements compose parent first so every returned matrix is root-relative.
Repeated local instances retain distinct full paths and quantities while
reusing one evaluated part result for equal part/configuration contexts. Direct
external parts reuse equal resource/output/configuration contexts. Leaves
reached through a fixed subassembly share geometry by resource, child part node,
and child configuration; distinct assembly output aliases retain separate
component, diagnostic, and BOM identity. None of those rules creates a
cross-run cache or geometric-equivalence guarantee.
The product result retains ordered active occurrences and their configuration,
material, density, and placement evidence. External occurrences additionally
retain committed component-document evidence. Exact child solids keep
capability-gated per-solid or per-body topology and native export.
Whole-product mesh, binary/ASCII STL, and OBJ are merged placed tessellations
and therefore approximate/lossy even when every retained leaf is exact.
Contextual BOM and physical-mass operations count every occurrence and every
multibody membership, transform mass properties by placement, and never fuse
overlaps or subtract interference.
Traversal is bounded independently by maxAssemblyDepth and the aggregate
maxOccurrencePathSegments stored across emitted leaves, in addition to the
selected-output, external-document, scanned-instance, active-occurrence,
placement, contextual-part, solid, material, document, and resource ceilings.
Suppression is resolved before descendant admission and prunes an entire nested
subtree, so an effectively suppressed external descendant is inert and charges
no descendant traversal or resolution work.
Each active occurrence path may cross at most one external-document boundary.
Child-local parts and nested local assemblies are supported, but an active
external descendant fails before nested resolution or child geometry/kernel
work. Cyclic local-assembly graphs are also unsupported: the staged facade
cannot construct one, strict document admission rejects hand-authored dependency
cycles, and evaluation fails closed if one reaches traversal. Mates, joints,
DOF, motion, contact, interference, collision, assembly topology, aggregate
geometric measure(), and exact aggregate STEP/BREP remain unsupported.
Ownership rules
Parts, materials, assemblies, and components must belong to the sameDesignBuilder. Instance IDs are unique within their containing assembly and
are part of configuration suppression keys, so keep them stable across design
revisions.