forked from 1b-agent/fieldcraft-upstream
Owner decisions 2026-10-13: no public CAD datasets (Thingi10K included); test parts are SolidCraft recipes and analytic shapes. Icons are VectorCraft artwork with the editable source committed; cargo xtask assets now also requires .vectorcraft and .solidcraft files to be attributed. AGENTS.md: GitHub CI runs the full gate, commit after each working step. Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
74 lines
4.1 KiB
Markdown
74 lines
4.1 KiB
Markdown
# ADR 0001: Libraries and licences
|
|
|
|
Status: accepted (2026-10-13)
|
|
|
|
## Context
|
|
|
|
ModelCraft is MIT OR Apache-2.0. Everything it links must allow that, and the meshing and solver
|
|
algorithms, where the obvious open-source implementations are GPL-family, must come from papers.
|
|
|
|
## Decision
|
|
|
|
**Geometry: SolidCraft's kernel**, as a git dependency pinned by rev
|
|
(`solidcraft-kernel`, `solidcraft-geom`; MIT OR Apache-2.0, built on the Apache-2.0 truck
|
|
crates). ModelCraft uses its B-rep bodies and its tessellation; it does not read CAD exchange
|
|
files itself. Only `modelcraft-geometry` may depend on it.
|
|
|
|
**Meshing: our own**, implemented from published papers (`docs/meshing/literature.md`).
|
|
Robust predicates follow Shewchuk's adaptive-precision arithmetic (the paper; his reference
|
|
`predicates.c` is public domain). A permissive crate may be adopted instead after review; record
|
|
it here.
|
|
|
|
**Linear algebra:** to be decided in the solver task, among permissively licensed pure-Rust
|
|
crates (for example `faer`, MIT). Record the choice here.
|
|
|
|
**Allowed:** MIT, BSD-2/3, Apache-2.0, ISC, Zlib, Unicode, MPL-2.0 (as an unmodified dependency),
|
|
CC0 and public domain.
|
|
|
|
**Rejected — never read, copy or link:**
|
|
|
|
| Project | Licence | Would have offered |
|
|
|---|---|---|
|
|
| TetGen | AGPL-3.0 | constrained Delaunay tetrahedralization |
|
|
| CGAL | GPL-3.0 / LGPL-3.0 | Delaunay, mesh generation |
|
|
| Gmsh | GPL-2.0+ | tet and hex meshing |
|
|
| Netgen | LGPL-2.1 | tet meshing |
|
|
| CalculiX | GPL-2.0 | implicit solver, Abaqus-like input |
|
|
| Code_Aster | GPL-3.0 | implicit solver |
|
|
| OpenRadioss | AGPL-3.0 | explicit solver |
|
|
| Elmer | GPL-2.0 / LGPL-2.1 | multiphysics solver |
|
|
| deal.II, FreeFEM, Salome | LGPL | FE libraries, pre-processing |
|
|
| OpenCASCADE | LGPL-2.1 | B-rep kernel |
|
|
| Attene's CDT, Indirect_Predicates, VolumeMesher | GPL / LGPL | robust CDT, indirect predicates (implement from the papers) |
|
|
| TetWild (original), Evocube, robustPolycube, ultimaille, invertible-maps | GPL-3.0 / AGPL-3.0 | tet meshing, polycube, injective maps |
|
|
| libHexEx, libHexHex, QGP3D, MC3D, CoMISo, Graphite | GPL | integer-grid-map hex extraction, quantization |
|
|
| Shewchuk's Triangle | non-commercial only | 2D meshing |
|
|
| geogram `third_party/tetgen`, `third_party/triangle` and their wrappers | AGPL / non-commercial | (the rest of geogram is BSD-3 and readable) |
|
|
| libigl `copyleft/` modules | GPL | (libigl core is MPL-2.0 and readable) |
|
|
| OpenVolumeMesh, CGoGN | believed LGPL, unverified | treat as forbidden until checked |
|
|
|
|
**Repositories without a licence are all rights reserved: never read them** (for example Gao
|
|
2019's octree hex code, LoopyCuts). Readable references for the meshing work (re-implement from
|
|
the paper, note anything adapted in ATTRIBUTION.md): Shewchuk's `predicates.c` (public domain),
|
|
`georust/robust` (Apache-2.0), geogram (BSD-3, exclusions above), fTetWild (MPL-2.0), CinoLib,
|
|
Gen-Adapt-Ref, HexaLab, robust_hex_dominant_meshing (MIT), quartet (ISC). The full table with
|
|
sources is in `docs/meshing/literature.md`.
|
|
|
|
**Test geometry** follows the same rule as test data: nothing produced with a commercial CAD or
|
|
CAE product. That excludes ABC (Onshape), MAMBO (files from commercial translators) and the HexMe
|
|
models that come from ABC, GrabCAD or Siemens NX; HexMe's Gmsh-made models are allowed (CC-BY-4.0).
|
|
Thingi10K is not used either (owner decision 2026-10-13: authoring tools unrecorded). **The test
|
|
corpus is our own:** parts built with SolidCraft (scripts or designs authored in SolidCraft,
|
|
committed as their recipes so the geometry is regenerated, not stored) and analytic shapes.
|
|
|
|
**Commercial products** (Abaqus, Nastran, LS-DYNA, LS-PrePost, HyperMesh, ANSA, Femap, Patran,
|
|
ANSYS) are never run, scripted or used as a source of data. Deck formats come from the vendors'
|
|
public reference manuals, described in our own words with our own examples.
|
|
|
|
## Consequences
|
|
|
|
- The tet and hex meshers are significant original work; the literature survey decides the
|
|
order and the methods.
|
|
- SolidCraft and ModelCraft move together: bumping the pinned rev bumps the repeated
|
|
`[patch.crates-io]` entries in the same commit.
|