Architecture decisions
These records capture durable choices that preserve Axiolid’s format-neutral, pure-Rust, feature-tiered design. A decision record explains its context, boundary, alternatives, consequences, and follow-up risks; it is not a changelog.
Package names and paths in older accepted records describe the tree at the time of the decision. Status and amendment notes govern conflicts; ADR 0035 and the implemented crate map are authoritative for current ownership.
| ADR | Decision |
|---|---|
| 0001 | IFC split and kernel contract |
| 0002 | Hardware abstraction and backend selection |
| 0003 | Pure-Rust mesh Boolean direction |
| 0004 | Package layout and backend features |
| 0009 | Layered geometry DAG and operation providers |
| 0011 | Native accelerator backends out of tree |
| 0012 | Scalar reference ownership |
| 0013 | Deferred performance techniques |
| 0014 | Adopt Boolmesh as mesh Boolean provider |
| 0015 | Adopt Earcut for polygon triangulation |
| 0016 | Predicate ownership and adopted implementations |
| 0017 | Solid boolean semantics defined before implementation |
| 0018 | Curve evaluation belongs to the scalar reference |
| 0019 | Validate and refine NURBS on the scalar read path |
| 0020 | Exact B-rep is the kernel model; tessellation is an output |
| 0021 | axiolid-kernel; retire axiolid-sweep |
| 0022 | General NURBS algorithms are a kernel capability |
| 0023 | Solid generation is an L2 crate, not part of the compiler |
| 0024 | Exact B-rep results own analytic supports and trims |
| 0025 | Certified NURBS queries use outward-rounded subdivision |
| 0026 | Planar NURBS roots require interval existence proofs |
| 0027 | Curve/surface roots require bounded transverse existence proofs |
| 0028 | Affine surface/surface traces compose exact identities and certified boundary roots |
| 0029 | Certified finite traces become split faces plus embedded curves |
| 0030 | Surface closest-point certificates require bounded global branch-and-bound |
| 0031 | Periodic curve behavior is an opt-in verified view |
| 0032 | Periodic B-spline surfaces use an explicit cyclic schema |
| 0033 | Mesh plane sections are an explicit approximation tier |
| 0034 | Authored open profiles are graph declarations, not areas |
| 0035 | Physical layout follows ownership; contracts remain provider-neutral |
| 0036 | Minimal dependency closures are packages and machine-checked promises |
| 0037 | Mapped 3D certificates require an independent verification oracle |
| 0038 | Constructed intersection curves carry certified topology |
| 0039 | Downstream profiles share a versioned, typed capability handshake |
| 0040 | Native consumers use a versioned, allocation-neutral C ABI |
| 0041 | CMake consumers share one target across immutable source and native archives |
| 0042 | Downstream compatibility is an executable black-box gate |
| 0043 | Release version/changelog rollover is a checked, reviewed script |
| 0044 | Pointcloud representation and reconstruction extend the discrete-family DAG |
| 0045 | Boolean construction arithmetic is f64; predicates verify, they do not construct |
| 0046 | Exact boolean path for interpenetrating solids |
| 0047 | Absorb the mesh boolean into the provider crate |
| 0048 | Coplanar seam merging across chained booleans |
| 0065 | Ownership replaces read-only/mutable type pairs |
| 0066 | Domain interpretations stay downstream of the kernel |
| 0067 | Crates version independently |
| 0068 | Exact numbers: num-bigint integers under an owned filtered layer |
| 0069 | Arc booleans: keep cavalier_contours, scaled; exact path later |
| 0070 | Exact arc booleans replace cavalier_contours |
| 0071 | Sinusoid pcurves for plane cuts across cylinders |
| 0072 | Column solids over one planar arrangement |
| 0073 | Exact mass properties over curved faces by Green's theorem |
| 0074 | Certified boundary distance by branch and bound |
| 0075 | General B-rep boolean: our own general-fuse pipeline |
| 0076 | Ruled quadric sections: exact quartic intersection curves |
| 0077 | Implicit section curves: certified tracing of analytic sections |
| 0078 | Context lives beside the code; open work lives in issues |
| 0079 | Least-squares fitting lives in axiolid-nurbs and depends on axiolid-numeric |
| 0080 | The exact compiler cuts placed openings with the general boolean |
| 0081 | Banked curves name their cant convention |
| 0082 | Stations measure in their basis curve's convention |