← back to pin listEvidence discipline — controls, and the scope of a claim
kerfmaster pin list · The spec — what we build to
rulingclosed d15A decision by Aristide or Jordan. True because it was decided; it can be superseded, but it cannot be stale.
Content last changed 2026-08-06 — computed from the item itself, not typed.
Contract — Cross-cutting stage
This contract states a decision, not an implementation.
takes —
makes —
fails if A control that shares a code path with the thing it checks; a boolean that changes nothing reported as a pass; a claim stated wider than what was measured.
Contract last changed 2026-08-06 — computed, not typed. Dated separately from the text above, so neither date can speak for the other.
⚠ Known defects
This item's subject has a known defect in the code. Source: cadmaster/defects.json → cadmaster/KNOWN_DEFECTS.md, not this page — the text below is generated from the register so the two can never disagree.
- D15 — The cloud loses its whole top-left lobe: a subpath is subtracted as if it were a hole, and the two shapes are disjoint so the boolean is a no-op (CLOSED)
mvt_prep.py:~18 builds the cloud as Polygon(cloud[0]).difference(Polygon(cloud[1])). Path 2 of the MVT artwork has TWO subpaths: sub0 is the cloud body (9056.6 pt2) and sub1 is the big top-left lobe (2506.4 pt2). They are DISJOINT, not nested, so they are a UNION -- two pieces of one filled shape -- and the difference of two disjoint polygons is the first one, unchanged. The lobe is dropped and the area is identical before and after: 9056.6 in, 9056.6 out. Every downstream figure (area, weight, centre of mass, tipping) was computed from the truncated cloud.
Cost today: Nothing further is computed from the truncated cloud. What is still outstanding is the customer-facing reissue: revision Q0QB remains WITHDRAWN and no replacement sheet has been published. Option C's cloud goes from the published 8.84 lb to 11.83 lb, and the assembly from 12.21 lb to 15.32 lb.
Verified: 2026-08-06, FIXED and verified at the source. mvt_prep no longer reads an SVG export: the artwork comes out of the customer's modified .ai through mvt_geom, and the cloud is one closed Polygon of 11710.1 pt2 = 333.38 in2 = 11.83 lb. Control through an independent path -- MVT_MODIFIED_MEASURED.md was written by hand from the same file before mvt_geom existed, and all ten of its figures reproduce, worst disagreement 0.15% (total weight, 15.323 vs a hand-rounded 15.30). The general rule is now enforced rather than assumed: a cloud that arrives in more than one piece RAISES, because disjoint pieces are a union, and every boolean goes through mvt_geom.changed(), which states the area it should move and raises when it does not. NOT YET DONE: the published sheets have not been reissued, so revision Q0QB stays withdrawn until the A/B/C rebuild runs.
Aristide, 2026-08-06: “it is not just about duplicating what I
do … it is about understanding why I did it, what the reasoning was, and
how I problem solved.” Two rules came out of that, and they apply to
every measurement this project reports.
1. A boolean that changes nothing is a bug report
Polygon(body).difference(Polygon(lobe)) on two disjoint
shapes gave 9056.6 pt² in and 9056.6 pt² out —
and silently dropped the lobe, because cloud[1] was a second
subpath of the same outline, not a hole in the first. The equal area is exactly
what hid it. Every internal check agreed, because every internal check was
downstream of the same error.
- An operation whose measured effect is nil has either done nothing or done
something invisible. Investigate it; never accept it.
- A control must come through an independent path — here, a pixel
diff against the customer's own file rendered by a different renderer. Our own
polygons agreeing with our own polygons is not a control.
- Force flat fills before diffing. A gradient defeats a threshold, and
the first diff run was worthless for exactly that reason:
<style>*{fill:#000 !important;stroke:none !important}</style>
first, then compare.
2. State the question a number answers, in the same breath as the number
Ligament widths were measured correctly, and the conclusion reported from them
— “moving the ring buys nothing structural” — was stated
at the scope of the whole design decision. There was no wrong code anywhere in
it, and it still overrode a correct call by the person who owns the design. The
measurement answered what is the narrowest metal here; it was reported as
though it had answered is this move worth making.
So: a claim may not be broader than what was measured. Name the
measurement next to the conclusion, so the reader can see the gap between them.
src — Aristide, 2026-08-06, on the MVT icon;
cadmaster/LESSONS_MVT_ASSEMBLY.md (a4b3034). The two
defects that produced rule 1 are on the register.