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
| Before | After | Reason |
|---|---|---|
axiolid-scalar / axiolid_scalar | axiolid-reference / axiolid_reference | reference algorithm role, not scalar storage |
axiolid-generate / axiolid_generate | axiolid-construct / axiolid_construct | construction semantics instead of vague verb |
axiolid-boolmesh | axiolid-mesh-boolean-boolmesh | operation and concrete provider are explicit |
axiolid-kernel aggregate | guarantees/common/mesh/operation contract packages plus axiolid-dispatch | portable contracts no longer own runtime policy |
axiolid-tessellate | axiolid-tessellation-contract | package already defines a portable seam, not an implementation |
axiolid-compile | axiolid-mesh-compile | output result domain is explicit |
GeometryCompiler::compile | MeshCompiler::compile_mesh | exact B-rep and discrete mesh results cannot be silently conflated |
ScalarCompiler | ReferenceMeshCompiler | reference implementation and output domain are explicit |
combined axiolid-field | axiolid-field values + axiolid-field-ops algorithms | representation-only consumers remain light |
Facade feature migration:
kernelis replaced bycontracts.fieldis value-only; addfield-opsorfield-navigationfor algorithms.pointcloudis value-only:axiolid+axiolid-core+axiolid-pointcloudand nothing else. Addpointcloud-queriesfor KNN/radius search,pointcloud-reconstructionfor the contract,dispatch-pointcloud-reconstructionto select a provider at runtime, orpointcloud-providerfor the bundled reference implementation.mesh-boolean,mesh-section, andgraph-compileexpose portable contracts.- provider selection is opt-in through
dispatch-mesh-booleanordispatch-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.geometrycapability 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:
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:
| Feature | Before packages | After packages | Before elapsed | After elapsed |
|---|---|---|---|---|
model | 17 | 17 | 1.915 s | 1.915 s |
field | 5 | 5 | 1.781 s | 1.815 s |
pointcloud | 3 | 3 | 3.54 s | 3.54 s |
pointcloud-reconstruction | 10 | 10 | 4.04 s | 4.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.