Files
TheRON a76879f4a0 IDENTITY-CONTRACT: three statements a reader would take as fact, corrected
G-1 records the standing lesson for this document: an interface document should contain no statement a reader will take as fact when it is not yet one. Three remained in it. Section 2 chain diagram read DECIDES against CT 101, which decides nothing and sets no header. Section 5 routing table listed /m/stl as members. Section 5 stated flatly that export is gated today. Section 8 said the opposite of all three, further down, where an outside implementer would reach it second.

None of the three is now removed or softened. The scheme stays and each says which it is - where the line falls once enforced, not where it falls now.

README: deploy/ added to the layout, absent since 12 SEP. The reading order no longer contradicts PROCESS section 8 and HANDOFF section 0, and points at DIVERGENCES.md. The AGPL section 13 obligation is marked not met, stated in the document that states the obligation.

ACCEPTANCE section 7 records that its correction finally landed in HANDOFF section 7, and why parking a correction in a second document is a bad pattern: it sat here for three weeks while the wrong numbers stayed where people read first.

Applied by anchored patcher. Suite 643 passed, oracle intact. Documentation only.
2026-09-14 04:37:01 -05:00

96 lines
4.0 KiB
Markdown

# Mechanical Compiler
Build the capacity to construct real structures from reclaimed and commodity
materials, using whatever fabrication is actually to hand — 3D printing,
tabletop CNC, welding, cement casting, COTS stock.
The reference case is a faceted timber shell: planar panels meeting along
straight fold lines, converging on nodes, sitting on a platform. Buildable
without a factory, provided someone has worked out what the pieces are and how
they meet. **That last clause is the project.** The Mechanical Compiler exists
to make the pieces computable, qualifiable, and reproducible by someone who was
not present when they were designed.
## Scope
**In scope:** geometry, qualification, and reproducibility of structural
members and their interfaces.
**Not in scope:** building codes, permitting, jurisdictional approval.
Qualification and compliance are different things. A qualification says *this
member is what it claims to be, made this way, from this stock*. Compliance is
a jurisdiction-specific argument someone else may build on top.
The project records **physical claims, never verdicts** — section modulus,
moment of inertia, material provenance, process parameters. Those are what any
future argument would need. A pass/fail verdict would bake in a jurisdiction we
do not want to be bound to. Measure and attest; never adjudicate.
## Repository layout
```
docs/ specification, state, failure log, roadmap
deploy/ service unit and vhost, under version control
legacy/openscad/ rev 8.0.0 generators — reference, not a live target
fixtures/ frozen acceptance oracles
tools/reference-toolchain/ pinned OpenSCAD + BOSL2, build-time only
src/mechcomp/ the application
tests/ acceptance against the oracle
```
Read `docs/ROADMAP.md` first for what this is, then `docs/PROCESS.md` before
issuing any command against a host. `docs/HANDOFF.md` §0 and `docs/PROCESS.md`
§8 both carry the full reading order and are kept in step with each other.
If you are writing provisioning automation, read `docs/FAILURES.md` **before**
`docs/ENVIRONMENT.md` — every entry is something a script written from the
specification alone would have got wrong. `docs/DIVERGENCES.md` lists the
requirements that are specified and not currently met.
## Getting started
```bash
make deps # virtualenv, base + CAD requirements
make verify-oracle # confirm the frozen oracle is intact
make test # pytest -n auto
```
`make verify-oracle` needs nothing but Python. It should pass on any machine at
any time; if it does not, stop.
## The oracle
`fixtures/strap-beam-8.0.0/` holds 123 frozen cases — 113 accepted, 10
rejected — produced by OpenSCAD 2021.01 with BOSL2 at `92d697c2`. It is the
acceptance criterion for any reimplementation of the generators.
**The ten rejected cases are part of the contract.** A port that accepts them is
wrong, however good its numbers look elsewhere. It is easy to reproduce the
geometry and quietly lose the constraint that made it trustworthy.
The generators under `legacy/openscad/` are the reference implementation, kept
so the oracle can be regenerated. They are not a live target and the running
application has no OpenSCAD dependency.
## Provenance
**This project's documents, code and roadmap are LLM-generated under human
direction.** That is stated plainly here and in any downstream submission. We
do not obscure it.
The maintainer reviews and owns every line. Anything that could not be defended
in a review thread does not ship.
## Licence
AGPL-3.0-or-later. See `LICENSE`.
Section 13 obliges us to offer source to users interacting over a network, so
any deployed web tier carries a visible link back to this repository. That is a
licence obligation, not a courtesy.
**It is not currently met.** The composer has been publicly reachable since
2026-09-11 and the served page carries no such link. Recorded as DIV-001 in
`docs/DIVERGENCES.md`, where it is the first item on the list, and required
again as constraint 11 in `docs/ENVIRONMENT.md` §14.