Skip to content

Axiolid restructure: implemented crate map

Implemented from base 372b16f64fa9be962df48751a654f8cda3f3b4a0 under ADR 0035.

Physical ownership

PackagePathRole
axiolid-corecrates/foundation/coredependency root
axiolid-curve, axiolid-surface, axiolid-primitivecrates/representations/analytic/*analytic values
axiolid-profilecrates/representations/region/profilebounded region values
axiolid-topology, axiolid-brepcrates/representations/{topology,brep}topology/exact B-rep values
axiolid-meshcrates/representations/discrete/meshdiscrete mesh values
axiolid-fieldcrates/representations/sampled/fieldsampled-field values/configuration/evidence
axiolid-modelcrates/representations/modeling/graphauthored immutable graph
axiolid-guaranteescrates/contracts/guaranteescertification/escalation/precision vocabulary
axiolid-contractscrates/contracts/common/basecommon backend/execution/diagnostic contracts
axiolid-mesh-contractscrates/contracts/common/meshshared mesh admissibility
operation contract packagescrates/contracts/operations/*tessellation, mesh Boolean, mesh section, graph-to-mesh compile schemas
focused algorithm packagescrates/algorithms/*reference, NURBS, construction, query, planar, sampled, repair
axiolid-mesh-boolean-boolmeshcrates/providers/mesh/boolmeshconcrete optional provider
axiolid-dispatchcrates/execution/dispatchregistration/fallback/device/budget policy
axiolid-mesh-compilecrates/execution/compilereference graph-to-mesh execution
CPU/GPU packagescrates/execution/{cpu,gpu}execution contexts/adapters
axiolidcrates/facade/axiolidadditive public feature facade

The generated crate map and dependency graph are authoritative and freshness-checked by cargo xtask architecture check.

Public migration table

BeforeAfterReason
axiolid-scalar / axiolid_scalaraxiolid-reference / axiolid_referencereference algorithm role, not scalar storage
axiolid-generate / axiolid_generateaxiolid-construct / axiolid_constructconstruction semantics instead of vague verb
axiolid-boolmeshaxiolid-mesh-boolean-boolmeshoperation and concrete provider are explicit
axiolid-kernel aggregateguarantees/common/mesh/operation contract packages plus axiolid-dispatchportable contracts no longer own runtime policy
axiolid-tessellateaxiolid-tessellation-contractpackage already defines a portable seam, not an implementation
axiolid-compileaxiolid-mesh-compileoutput result domain is explicit
GeometryCompiler::compileMeshCompiler::compile_meshexact B-rep and discrete mesh results cannot be silently conflated
ScalarCompilerReferenceMeshCompilerreference implementation and output domain are explicit
combined axiolid-fieldaxiolid-field values + axiolid-field-ops algorithmsrepresentation-only consumers remain light

Facade feature migration:

  • kernel is replaced by contracts.
  • field is value-only; add field-ops or field-navigation for algorithms.
  • mesh-boolean, mesh-section, and graph-compile expose portable contracts.
  • provider selection is opt-in through dispatch-mesh-boolean or dispatch-mesh-section.

Resolved conflicts

  • Exact B-rep ownership from ADRs 0020/0024 is preserved. Mesh compilation was renamed rather than generalized falsely.
  • The existing default facade remains mesh + cpu; default-feature changes are outside this restructure.
  • Source schemas, wire formats, and vendor interpretation remain outside Axiolid geometry packages.
  • The neutral packages remain evidence targets for external openbim.geometry capability claims; no Pkl runtime or schema types are carried into Rust contracts.
  • Dev-only upward edges are permitted only when explicitly allowlisted for integration/conformance tests; production/build edges still obey the role DAG.

Downstream

openbimrs/ifc's ifc-geometry crate must pin the landed Axiolid commit, retain source-format lowering outside Axiolid, and use the format-neutral authored OpenProfile graph declaration. A facade-only model consumer must continue to work with:

toml
axiolid = { default-features = false, features = ["model"] }

without compiler, provider, field-operation, source-format, or GPU dependencies.

Measurement

Fresh-target cargo check -p axiolid --no-default-features measurements on the same host and Rust 1.88.0:

FeatureBefore packagesAfter packagesBefore elapsedAfter elapsed
model17171.915 s1.915 s
field551.781 s1.815 s

The package split changes ownership and compilation units, not external normal-dependency count. This single cold run is noise-equivalent and is not evidence of a performance improvement.

Released under the Mozilla Public License 2.0.