ROADMAP opened by saying nothing in it is a promise. Section 7 holds eighteen standing principles cited by number as settled law from commit messages and from other documents - 4 governs what is hashed, 13 defines what a standard is, 17 governs what may write to a record, 18 governs how a contribution is admitted. A reader taking the header at its word would conclude Principle 17 is optional. The disclaimer now says what it always meant: it covers section 4 sequence and section 5 assumptions, not section 7.
Principle 5 gets the same qualification PROCESS section 8 got. A permanent deviation is the specification is right about facts on a host and would be licence to lower a REQ if read without limit.
PRECISION section 10 requires every section 7 entry to say whether it is a limit that work may lift or a boundary that was chosen. The prismatic-only entry said neither, which is the single most consequential ambiguity in the document. It is a limit, and the reason is now recorded: the oracle is a two-dimensional oracle with a scalar length multiplier - every recorded value is a property of the cross-section except LENGTH_MM, VOLUME_MM3 and MASS_G, and volume equals rounded section area times length to within 3.6e-12 across all 113 accepted cases. Lift it carelessly and that relation stops holding; nothing fails, it just stops meaning what it means. Anything keeping each station two-dimensional preserves it.
Also in PRECISION: STL export landed and is no longer planned. An absent export format is a limit; the refusal to emit toolpaths is a boundary.
ROADMAP section 4a corrected to match STAGING-STATE section 3a: nothing here is implemented on Kane Fabric, and SASE was used and never defined. The port is recorded done. The seed commit and test count are removed as derivable.
IDENTITY-CONTRACT: the rewrap owed from a76879f.
Applied by anchored patcher. Suite 643 passed, oracle intact. Documentation only.
376 lines
17 KiB
Markdown
376 lines
17 KiB
Markdown
# What "accurate" means here
|
||
|
||
**Written for readers with no engineering background.** No mathematics beyond
|
||
arithmetic is required.
|
||
|
||
---
|
||
|
||
## 0. Scope — read this before anything else
|
||
|
||
This document has a deliberately narrow subject. It is not a guide to precision
|
||
in general, and it must not be allowed to become one.
|
||
|
||
**In scope: two manufacturing families only.**
|
||
|
||
- **Additive** — material added in layers. 3D printing of plastic, metal or
|
||
concrete.
|
||
- **Subtractive** — material cut away from a solid block. Milling, turning,
|
||
grinding, lapping, polishing.
|
||
|
||
**Out of scope, and deliberately so:**
|
||
|
||
- **Formative** processes — casting, forging, injection moulding, stamping,
|
||
sheet bending. Material reshaped rather than added or removed.
|
||
- **Crystal growth, deposition and lithography.** Semiconductor fabrication is a
|
||
different discipline with different physics and different units of concern.
|
||
- **Joining** — welding, adhesives, fasteners, fits and interference.
|
||
- **Metrology** — the science of measuring finished parts.
|
||
- **Surface finish** — roughness and texture, as opposed to dimension. These are
|
||
routinely confused; they are not the same property and are not discussed here.
|
||
|
||
Section 5 is the only place another domain is mentioned at all, and it is
|
||
mentioned to *bound a claim*, not to extend the subject.
|
||
|
||
**Why the boundary is drawn this hard.** The Mechanical Compiler produces
|
||
prismatic timber-strap members for additive and subtractive workflows. Every
|
||
number below was measured against that use. A tolerance figure borrowed from
|
||
casting or lithography would carry no evidence from this project and no
|
||
guarantee from this software, while looking exactly as authoritative as the
|
||
figures that do. **Scope creep in a specification is more dangerous than scope
|
||
creep in code, because nothing fails visibly when it happens.**
|
||
|
||
---
|
||
|
||
## 1. The one idea that makes the rest make sense
|
||
|
||
Nothing manufactured is exactly the size it was meant to be.
|
||
|
||
Ask a carpenter for a shelf 800 mm long and you will get something between about
|
||
799 and 801 mm. Ask a machine shop and you will get 799.98 to 800.02. Nobody
|
||
ever hits the number exactly, because "exactly" would require infinite care.
|
||
|
||
So engineering does not ask for exact. It asks for **exact enough, and states
|
||
how much is enough**. That stated allowance is a **tolerance**:
|
||
|
||
800 mm ± 0.05 mm
|
||
|
||
meaning anything from 799.95 to 800.05 is acceptable.
|
||
|
||
A tolerance describes the **worst** case, not the typical one. If a part is
|
||
usually within 0.05 mm but occasionally out by 0.5 mm, its tolerance is 0.5 mm.
|
||
The bad case is the one that jams the assembly.
|
||
|
||
### Units
|
||
|
||
| | | in mm | comparison |
|
||
|---|---|---|---|
|
||
| millimetre | mm | 1 | credit card ≈ 0.8 mm thick |
|
||
| micrometre ("micron") | µm | 0.001 | human hair: 20–100 µm across |
|
||
| nanometre | nm | 0.000001 | about 5 silicon atoms |
|
||
|
||
**Anchor for everything below: a human hair is roughly 70 µm, or 0.07 mm.**
|
||
|
||
---
|
||
|
||
## 2. Three different numbers, constantly confused
|
||
|
||
**(a) Model precision.** How exactly the *design file* describes the intended
|
||
shape. No material involved. **This is the only one this software controls.**
|
||
|
||
**(b) Machine resolution.** The smallest step a machine can be *commanded* to
|
||
take. "0.01 mm resolution" on a printer's spec sheet is this number.
|
||
|
||
**(c) Achieved accuracy.** How far the *finished object* differs from the
|
||
design. The number that decides whether the part works.
|
||
|
||
Resolution is the most quoted and least meaningful. A printer stepping in
|
||
0.01 mm increments can still produce a part 0.5 mm wrong, because plastic
|
||
shrinks, belts stretch, machines warm up, and parts sag. One industry write-up
|
||
puts it plainly: print resolution determines only the smallest feature the
|
||
software will not ignore. Building a wall from smaller bricks does not make the
|
||
wall the right length.
|
||
|
||
> **The most common error in this area:** quoting a machine's resolution as
|
||
> though it were the accuracy of the result.
|
||
|
||
---
|
||
|
||
## 3. The ladder of real-world precision
|
||
|
||
Additive and subtractive only, per section 0. Typical values, not records;
|
||
every one depends on material, size, temperature and operator skill.
|
||
|
||
| Process | Typical accuracy | In hairs (~70 µm) |
|
||
|---|---|---|
|
||
| 3D-printed concrete | ±0.5 mm at best, often several mm | 7+ |
|
||
| Desktop FDM printer | ±0.3 mm under 100 mm; ±0.2% above | 4 |
|
||
| Resin printer (SLA/DLP) | ±0.2 mm | 3 |
|
||
| Everyday CNC milling | ±0.025 mm | 1/3 |
|
||
| Good CNC milling | ±0.014 mm | 1/5 |
|
||
| CNC positioning, slow feed | ±0.0025 mm | 1/28 |
|
||
| Precision grinding | ±0.002 – 0.005 mm | 1/20 |
|
||
| Lapping / honing | 0.0001 – 0.001 mm | 1/700 |
|
||
|
||
**Grinding and polishing do reach 0.001 mm and better.** Lapping works below one
|
||
micron routinely.
|
||
|
||
Two observations.
|
||
|
||
**The spread is a factor of several thousand** across these two families alone.
|
||
There is no single number for "how accurate is manufacturing."
|
||
|
||
**Size makes it worse.** The FDM row switches from a fixed figure to a
|
||
*percentage* above 100 mm. Errors that scale with size — thermal expansion,
|
||
machine flex, shrinkage — are the norm. A process holding 0.014 mm on a small
|
||
part may hold only 0.097 mm at 500 mm. **This is why assembling large printed
|
||
structures is hard, and why it is not attempted here.**
|
||
|
||
---
|
||
|
||
## 4. Why the design file must be far tighter than the machine
|
||
|
||
> If no machine on Earth holds 0.0001 mm, why compute to 0.0001 mm?
|
||
|
||
Because errors accumulate. A finished part's error is the sum of every
|
||
contribution: design, translation to machine instructions, machine motion,
|
||
material behaviour. If the design consumed a large share of the allowance, there
|
||
would be none left for the parts that genuinely cannot be improved. The common
|
||
rule of thumb is that the manufacturing process should consume only about **ten
|
||
percent** of the tolerance on the drawing. The design should consume far less.
|
||
|
||
**An analogy.** You are budgeting a 60-minute journey. The train takes 45
|
||
minutes and is sometimes 10 minutes late — unavoidable variability, so you plan
|
||
around it. The walk to the platform takes 4 minutes. You would not agonise over
|
||
whether it is 4 minutes or 4 minutes and 2 seconds.
|
||
|
||
**The design file is the 2 seconds.** Computing to 0.0001 mm is not a claim that
|
||
any part will be that accurate. It guarantees the design contributes *nothing
|
||
worth counting* — that when a part comes out wrong, the file is not the reason.
|
||
|
||
Model precision is cheap; machine precision is expensive. Grinding can cost
|
||
several times more than milling for the same feature. Tighter arithmetic costs
|
||
nothing — same runtime, same code.
|
||
|
||
---
|
||
|
||
## 5. Curves, and the one hard limit
|
||
|
||
Computers do not store curves. They store corners.
|
||
|
||
Every rounded corner here is a fan of short straight lines, like a stop sign
|
||
standing in for a circle. The shape is always very slightly smaller than a true
|
||
circle, because each straight line cuts the corner.
|
||
|
||
The setting is **`facets`**, currently **48** — a full circle drawn with 48
|
||
segments.
|
||
|
||
| Corner radius | Gap from the true curve |
|
||
|---|---|
|
||
| 1.25 mm (this project's 4-strap corners) | 0.0027 mm — 1/26 hair |
|
||
| 2.00 mm (this project's 3-strap corners) | 0.0043 mm — 1/16 hair |
|
||
| 4.67 mm | 0.0100 mm — the limit in section 6 |
|
||
| 50 mm | 0.107 mm — 1.5 hairs |
|
||
|
||
**At fixed `facets`, the error is proportional to radius: double the radius,
|
||
double the error.**
|
||
|
||
**The rule:** at `facets = 48`, radii up to **4.67 mm** stay within 0.01 mm of a
|
||
true curve. Above that, raise `facets`. The required count grows with the
|
||
*square root* of radius, so a 50 mm radius — forty times larger — needs
|
||
`facets = 158`, not forty times as many.
|
||
|
||
Every shape this project produces uses radii of 1.25 to 2.00 mm, well inside the
|
||
limit. **A documented boundary, not a defect** — but a real one.
|
||
|
||
### The only cross-domain note in this document
|
||
|
||
It is sometimes said that greater precision is achievable in space. Within this
|
||
document's scope the claim does not apply: no additive or subtractive process
|
||
described above is performed in orbit at production scale.
|
||
|
||
The evidence usually cited comes from **crystal growth**, which section 0 places
|
||
out of scope. Microgravity does improve *material quality* — a survey of 160
|
||
semiconductor crystals grown in orbit between 1973 and 2016 found improvement in
|
||
at least one metric for 86% of materials studied. That is purity and uniformity,
|
||
not dimensional control.
|
||
|
||
**The distinction:** space improves *what the material is*. It does not improve
|
||
*where the surface sits*. Different kinds of precision; improving one does not
|
||
improve the other. Nothing further about space belongs in this document.
|
||
|
||
---
|
||
|
||
## 6. What the Mechanical Compiler guarantees
|
||
|
||
**Every dimensional quantity agrees with the reference implementation to within
|
||
0.0001 mm, across all 123 verification cases, with no exceptions.** That covers
|
||
each cross-section's overall width and height, the thinnest surviving wall, and
|
||
every internally solved placement value.
|
||
|
||
That is **100× tighter** than the 0.01 mm criterion adopted for this project,
|
||
and about 1/700 of a human hair.
|
||
|
||
Boundary curves are within **0.0027 mm** (4-strap) and **0.0043 mm** (3-strap)
|
||
of true curves, per section 5.
|
||
|
||
Accuracy does **not** degrade with object size. Positions are computed by direct
|
||
calculation — "this corner is where these two lines cross" — solved in one step
|
||
from the original numbers, never accumulated by adding increments. At a
|
||
coordinate of 100 metres the representational limit is around a hundred-billionth
|
||
of a millimetre.
|
||
|
||
---
|
||
|
||
## 7. What the Mechanical Compiler does NOT do
|
||
|
||
This section is as important as section 6 and should be read with equal weight.
|
||
|
||
**It has no assembly layer — by design, not by omission.** It describes the
|
||
cross-section of *one* member. Nothing positions multiple members in a shared
|
||
coordinate frame, and nothing ever should.
|
||
|
||
Positioning is field work. Parts made and shipped by different manufacturers
|
||
have no knowledge of each other's assembly tolerances; interchangeable
|
||
manufacture works *because* of that separation, not in spite of it. A bolt
|
||
supplier holds a thread specification, not a tolerance stack for the bridge the
|
||
bolt ends up in. Fit-up is resolved on site, against conditions no designer had.
|
||
|
||
The compiler's obligation is therefore to make each member independently
|
||
reproducible and to state its interfaces plainly. How members meet belongs to
|
||
whoever is holding them.
|
||
|
||
**Read this as a boundary that was chosen, not a gap to be filled.** A future
|
||
contributor proposing an assembly layer is proposing a different product.
|
||
|
||
**It models one shape family.** Prismatic members: a two-dimensional
|
||
cross-section swept along a straight axis. Not tapers, not curved axes, not
|
||
varying sections, not surfaces of revolution, not anything organic.
|
||
|
||
**This is a limit, not a boundary** — §10's distinction, which this entry failed
|
||
to state until 2026-09-13. It may be lifted by work, and the reason it exists is
|
||
not that sweeping is the honest bound of what the compiler may claim.
|
||
|
||
It exists because **the oracle is a two-dimensional oracle with a scalar length
|
||
multiplier.** Of the values the 123 cases record, every one is a property of the
|
||
cross-section except `LENGTH_MM`, `VOLUME_MM3` and `MASS_G` — and volume equals
|
||
rounded section area times length to within 3.6e-12 across all 113 accepted
|
||
cases. Lift the restriction carelessly and that relation stops holding. Nothing
|
||
would fail; it would simply stop meaning what it means.
|
||
|
||
Anything that keeps each station's section two-dimensional preserves it. A member
|
||
modelled as an ordered set of prismatic segments, each carrying its own section,
|
||
still verifies segment by segment through the existing machinery, and a
|
||
one-segment member is byte-identical to today. Tapers and curved axes stay
|
||
outside the family and should: they vary continuously rather than piecewise, and
|
||
the volume relation would not survive them.
|
||
|
||
**It performs no engineering analysis whatsoever.** No stress, no load, no
|
||
deflection, no buckling, no fatigue, no thermal behaviour, no failure
|
||
prediction. It reports geometry — area, wall thickness, mass — and nothing about
|
||
whether a member will carry anything. **A part that passes every check in this
|
||
software may be structurally unsound.** Assessing that is a separate discipline
|
||
and requires a qualified engineer.
|
||
|
||
**It verifies only its tested range.** 123 cases; strap widths 13.4–15.875 mm;
|
||
corner radii 1.25–2.00 mm. Outside that, no measurements exist. Section 5's
|
||
radius limit is exactly why this matters.
|
||
|
||
**It agrees with a reference; it is not proven exact.** Both programs draw
|
||
curves with flat segments. Section 5 bounds the absolute error by calculation;
|
||
the test suite only checks that the two agree.
|
||
|
||
**Cross-section area is held looser than dimensions.** Area is derived from the
|
||
flat-segment approximation, so it inherits it. Two correct programs can disagree
|
||
slightly on area while agreeing exactly on every dimension. Area is not a
|
||
position — it places no material — so it is held to the 0.01 mm-equivalent
|
||
criterion rather than 0.0001 mm.
|
||
|
||
**It says nothing about surface finish, material properties, or joining.** Per
|
||
section 0.
|
||
|
||
**It does not generate machine instructions.** No toolpaths, no G-code, no
|
||
slicing.
|
||
|
||
Geometry interchange is a different thing and is *not* excluded here. An STL or
|
||
a STEP file describes a shape; a toolpath describes what a machine should do.
|
||
Exporting the former is in scope; producing the latter is not.
|
||
|
||
**STL export landed 2026-09-12** and needs no CAD kernel — a member is prismatic
|
||
by definition, so the mesh is two triangulated caps and a quad strip down the
|
||
boundary. STEP remains unbuilt. An absent export format is a *limit* in §10's
|
||
sense; the refusal to emit toolpaths is a *boundary*.
|
||
|
||
---
|
||
|
||
## 8. Summary
|
||
|
||
- A tolerance is a stated allowance describing the **worst** case.
|
||
- **Resolution is not accuracy.**
|
||
- Within additive and subtractive processes, real accuracy spans a factor of
|
||
several thousand. Grinding and polishing reach 0.001 mm and better.
|
||
- The design must be **much tighter than the machine**, so it contributes
|
||
nothing worth counting.
|
||
- This software holds every dimension to **0.0001 mm** — 100× tighter than
|
||
required.
|
||
- Curves: fine below **4.67 mm radius**; above that raise `facets`, which grows
|
||
with the square root of radius.
|
||
- Accuracy does **not** degrade with object size.
|
||
- **One member at a time. No assembly. No structural analysis. No toolpaths.**
|
||
The first three are chosen boundaries, not unfinished work — see section 7.
|
||
|
||
---
|
||
|
||
## 9. References
|
||
|
||
Machining and grinding tolerances:
|
||
- https://www.tuofa-cncmachining.com/tuofa-blog/standard-machining-tolerances.html
|
||
- https://www.fiveflute.com/guide/first-principles-of-manufacturing-cnc-milling-tolerances/
|
||
- https://www.zenithinmfg.com/grinding-vs-milling-tolerances-guide/
|
||
- https://www.lkmixer.com/blog/what-is-the-difference-between-grinding-and-lapping/
|
||
|
||
3D printing accuracy, and resolution versus accuracy:
|
||
- https://protoplastic.pl/en/dimensional-tolerances-technology-versus-3d-printing-accuracy/
|
||
- https://projet.my/guide-to-3d-printing-tolerances-accuracy-and-precision/
|
||
|
||
Concrete printing:
|
||
- https://www.sciencedirect.com/science/article/pii/S0008884622000643
|
||
|
||
Microgravity materials (out of scope; cited only in section 5):
|
||
- https://www.nature.com/articles/s41526-024-00410-7
|
||
|
||
Standards worth knowing by name: **ISO 286** (fits and IT grades), **ISO 2768**
|
||
(general tolerances where none is stated), **ISO 230-4** (how machine-tool
|
||
accuracy is measured).
|
||
|
||
Figures from commercial sources are typical values published by suppliers, not
|
||
independently verified measurements, and are indicative only. The claims in
|
||
sections 6 and 7 are measurements from this project's own test suite,
|
||
reproducible with `make test`.
|
||
|
||
---
|
||
|
||
## 10. Maintenance note
|
||
|
||
**This document is scoped by section 0. Additions that widen the scope should be
|
||
refused, not accommodated.**
|
||
|
||
**Section 0's lock is on this document's subject, not on the software's
|
||
roadmap.** It exists to stop this becoming a general precision guide whose
|
||
borrowed figures would look as authoritative as the measured ones. It is not a
|
||
freeze on what the compiler may one day do, and it was misread that way once.
|
||
|
||
**Section 7 holds two kinds of entry, and they are not the same.** Some are
|
||
*limits* that may be lifted by work — untested ranges, absent export formats.
|
||
Others are *boundaries* that were chosen and should not be — the absence of an
|
||
assembly layer, of structural analysis, of toolpaths. Do not read section 7 as
|
||
a to-do list. Each entry says which kind it is.
|
||
|
||
If a reader needs casting tolerances, weld distortion, surface roughness or
|
||
lithography, the answer is a different document — not another row in section 3's
|
||
table. Every such row would look as authoritative as the measured ones while
|
||
carrying no evidence from this project.
|
||
|
||
Section 7 should grow more readily than section 6. A limitation discovered and
|
||
written down costs nothing; a limitation discovered by someone who trusted this
|
||
document costs a great deal more.
|