Skip to content

Axiolid restructure: implemented crate map ​

Implemented from base 372b16f64fa9be962df48751a654f8cda3f3b4a0 under ADR 0035.

Physical ownership ​

The crate reference lists every package by layer, and the generated crate map and dependency graph give each package's path, role and allowed dependencies. They are freshness-checked by cargo xtask docs --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.
  • pointcloud is value-only: axiolid + axiolid-core + axiolid-pointcloud and nothing else. Add pointcloud-queries for KNN/radius search, pointcloud-reconstruction for the contract, dispatch-pointcloud-reconstruction to select a provider at runtime, or pointcloud-provider for the bundled reference implementation.
  • 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
pointcloud333.54 s3.54 s
pointcloud-reconstruction10104.04 s4.04 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.