Files
TheRON 0c220f449b ROADMAP: section 7 is binding. PRECISION: prismatic-only is a limit
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.
2026-09-14 04:45:04 -05:00

376 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.