← back to pin listJob reference — every published sheet pair is citable
kerfmaster pin list · Done
recordclosed d15closed d16States what the code does today. Auditable against the code — this is the only type that can go stale.
Content last changed 2026-08-06 — computed from the item itself, not typed.
Contract — Report stage
This contract describes the code as it runs today.
takes delivery
makes delivery
fails if A rebuilt sheet keeping the old revision code; a figure cited that has been withdrawn.
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 known defects 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. - D16 — A ring's inner hole is knocked out of the plate behind it (CLOSED)
mvt_prep.build() and build_mvt_preview.geometry() (~line 139) both compute CLOUD.difference(din), where din is the disc inside the ring's inner radius. That subtracts the ring's HOLE from the cloud sitting behind the ring.
Cost today: Options A and B are built with the cloud whole. The reissue is still outstanding: the withdrawn revision Q0QB is the last thing the customer has seen.
Verified: 2026-08-06, FIXED and verified. Both expressions are unions now -- mvt_prep.build() and build_mvt_preview.geometry() -- and both run through mvt_geom.changed(). Measured on the modified art: the cloud visible through the ring hole is 794.5 pt2 = 22.62 in2 = 0.803 lb, which is what the subtraction was deleting. That is larger than the 518 pt2 recorded when this was diagnosed, because that figure was measured on the old truncated cloud at the old ring position. NOT YET DONE: the published sheets have not been reissued.
Every customer/shop sheet pair carries a reference of the form
MVT-0001-C/Q0QB — job, option, revision.
The revision is four characters of sha256 over the measured numbers
and the customer copy, in a Crockford-style alphabet with no I, L, O or U
so it survives being read down a phone.
Why content-derived and not a counter. A job number alone cannot stop
the failure that actually costs money: a customer approving option C from a
sheet we have since rebuilt. If the numbers change, the code changes, and the
two sheets can be told apart without trusting anyone's memory. Every revision is
archived under rev/<code>/ with a ledger, and
verify(path) recomputes a published sheet's code from its own
data.json — so a sheet in the wild can be checked against
what we hold.
Built in build_mvt_preview.py, commit dd3bf55.
⚑ Current state: revision Q0QB is WITHDRAWN. Its cloud
was missing the top-left lobe (see the defect register), so its option C figures
are wrong — the cloud was stated at 8.84 lb and actually measures
11.82 lb. The mechanism worked exactly as designed: the numbers changed, so
the code must change, and the withdrawn code stays on the ledger rather than
being quietly reused.
What that job actually contains — the three options, the slot-break rule, the corrected coincidence measurement and the reference geometry — is on MVT icon client preview.
src — built 2026-08-05 (dd3bf55); withdrawal recorded 2026-08-06.