CIVICVS ruled on 11 SEP that the absence of an assembly layer is chosen, not unfinished. Positioning is field work. Parts made and shipped by different manufacturers have no knowledge of each other assembly tolerances, and interchangeable manufacture works because of that separation rather than in spite of it. Fit up is resolved on site against conditions no designer had. PRECISION.md section 7 now says so, and closes with read this as a boundary that was chosen, not a gap to be filled. Section 10 corrected. Its lock is on this document subject, not on the software roadmap, and it was misread that way once. Section 7 holds two kinds of entry: limits that may be lifted by work, and boundaries that were chosen and should not be. Without that distinction section 7 reads as a to do list. Section 7 also separates geometry interchange from machine instructions. An STL or STEP describes a shape; a toolpath describes what a machine should do. The first is in scope and planned, the second is not. The two sat one line apart with nothing saying they differ in kind. HANDOFF section 5 corrected: STL export needs no CAD kernel. A member here is prismatic by definition, so an STL is two triangulated caps and a quad strip. Verified in CT 100 that shapely constrained_delaunay_triangles handles a polygon with a hole correctly, area exact and no triangle inside the hole. That second check is the one that matters, because a triangulator that fills bores produces an STL which looks right in a slicer and prints solid where the conduit goes. STEP still needs the kernel. Priority order recorded with its reasoning so a successor can disagree with the argument rather than only the sequence. STL export first because it is the only item producing physical feedback. Then an authorship field in the design record, one field and a one way door. Then per member stock for the conduit core. Then persistence, which nothing has ever written despite MECHCOMP_DATA_DIR being declared since staging. Then ACL, last, because access control over nothing is machinery without a subject. A node is not an assembly. It is another artifact with declared interfaces and stays in scope. What is out of scope is positioning artifacts relative to one another. The project obligation is therefore to make each artifact interchangeable, which is what the stock descriptor and the design record already exist for.
353 lines
15 KiB
Markdown
353 lines
15 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.
|
||
|
||
**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 and planned; producing the latter is not.
|
||
|
||
---
|
||
|
||
## 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.
|