From 22d0cb684b8028b76cd880dbc5f8073027346250 Mon Sep 17 00:00:00 2001 From: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Date: Wed, 16 Sep 2026 05:48:46 -0400 Subject: [PATCH 1/2] docs(showcase): add seat conformance, plumb, and shading conventions The chopping-block pass found three defect classes the existing conventions did not cover, and each one had already shipped past a green check on at least one piece. A hoop generated as a circle on an out-of-round host gaps on one side and sinks on the other, but a seat check that compares against a single global midpoint radius classifies the outer chamfer vertices as inner ones and reports a clean fit. Seat depth has to be banded and sampled per angular segment against the host's own radius function. A prop with an appendage has an outer AABB that is the appendage, so the body underneath can drift to any size while the AABB budget stays green. Plumb measured off the exact zmin and zmax rings is meaningless once a rim is notched, because those rings are a handful of vertices. Coplanar face pairs belong in the hygiene family, counted over faces that share no vertex; counting fan-cap triangles makes the budget unsatisfiable rather than meaningful. Shading is not measurable, which is why it needs saying: smoothing a wobbled 36-gon erases every bit of surface modelling in it. Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Cursor --- showcase/README.md | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/showcase/README.md b/showcase/README.md index fe34264..96e5368 100644 --- a/showcase/README.md +++ b/showcase/README.md @@ -37,16 +37,22 @@ entry in `showcase/gallery.json`, and a rendered still. falsifier (exit 9), `--stray-vert` the mesh-hygiene falsifier (exit 15), `--lift-z` the grounded-zmin falsifier (exit 16), and `--fat-rungs` (or the piece's equivalent) the joint-fit falsifier - (exit 17). A budget with no falsifier witnesses nothing: prove each - one fails once, and check the exit code, not just non-zero. + (exit 17), and `--round-band` (or equivalent) the seat-conformance + falsifier (exit 18). A budget with no falsifier witnesses nothing: + prove each one fails once, and check the exit code, not just + non-zero. - **Hygiene budgets.** Copied combinatorics from `examples/mesh-hygiene-audit` (do not import the example). Every piece asserts on the generated mesh: non-manifold edges 0, loose verts 0, loose edges 0, doubles at 1e-5 0, zero-area faces 0, n-gons 0, world - AABB min Z within 1e-4 of 0. Multi-body props do **not** require Euler - characteristic 2 — that is a single-shell contract. Pairs of parts - meant to touch assert a BVH surface gap below a named epsilon - (vert-vert is the wrong metric for thin straps and collars). + AABB min Z within 1e-4 of 0, and coplanar disjoint face pairs 0. Count + the last one over faces that share **no** vertex: the triangles of one + flat fan cap are coplanar and close-centred by construction, and + counting those makes the budget unsatisfiable rather than meaningful. + Multi-body props do **not** require Euler characteristic 2 — that is a + single-shell contract. Pairs of parts meant to touch assert a BVH + surface gap below a named epsilon (vert-vert is the wrong metric for + thin straps and collars). - **Joint-fit budgets.** Parts that interpenetrate on purpose — a tenon in a mortise, a peg in a hub — assert how deep the overlap goes, not just that it exists. Split the mesh into shells by edge connectivity, @@ -58,6 +64,25 @@ entry in `showcase/gallery.json`, and a rendered still. the host's chamfer as a spike — that is the class this catches. Measure in the construction frame (un-rotate by any rake) so a tilted host does not inflate its own AABB. +- **Seat conformance (exit 18).** A band, hoop, strap or collar wrapped + around a host asserts a **banded** seat depth — a minimum so it cannot + float and a maximum so it cannot sink — sampled per angular segment + rather than as a single global figure. Derive the wrapper's profile + from the host's own radius function instead of a circle, and classify + inner versus outer vertices against the host surface at each vertex's + own angle. A global midpoint radius misclassifies outer chamfer + vertices as inner ones the moment the host is out of round, which is + how a hoop that visibly gapped on one side still passed. The paired + falsifier makes the wrapper a true circle on an out-of-round host. +- **Plumb and real-world size (exit 19).** Assert that the axis of a + turned or lofted body is vertical, by comparing the XY centroid of a + bottom slab against a top slab — not the exact `zmin` and `zmax` + rings, which may be a handful of vertices once a rim is notched or + chipped. Separately assert the body's own diameter and height against + the dimensions the README states in metres, with a named tolerance. + The outer AABB does not cover this: on a prop with an appendage the + AABB is the appendage, and the body can drift to any size underneath + it. - **Material face floors.** Every declared material asserts a named minimum face count on the finished mesh, recomputed from `polygon.material_index`. This catches the slot-assignment wipe class: @@ -67,7 +92,14 @@ entry in `showcase/gallery.json`, and a rendered still. append/replace, never clear-and-rebuild. - **Exit codes** are file-local: `0` success, argparse `2`, `3` and above in check order. `9` is legal. FATAL `sys.exit(1)` is a crash, never a - named check. + named check. `15`–`19` are reserved across pieces for the hygiene + family above: `15` hygiene, `16` grounded, `17` joint fit, `18` seat + conformance and contact, `19` plumb and real-world size. +- **Shading is part of the model.** A flat-shaded low-poly body and a + smooth-shaded one are different objects to a viewer. Smoothing a + wobbled 36-gon erases every bit of surface modelling in it and leaves + a featureless drum, so decide per part and say why. Nothing here is + measurable, which is exactly why it has to be looked at. - **Rendered still and gallery entry.** Showcase pieces are visual by definition. The pathology / sidecar exemption does not apply. Call `examples/gallery_framing.check_framing` on the `--output` path only. From 8f279cd407902a19d852ab74d5f18d1f5751e93c Mon Sep 17 00:00:00 2001 From: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Date: Wed, 16 Sep 2026 05:48:46 -0400 Subject: [PATCH 2/2] fix(showcase): rebuild chopping-block as a log round with a felling axe The piece passed every budget it declared and still read as a tapered pail with a hammer balanced on the lid. Eleven defects came out of the inspection sheet; the budgets could not see any of them. The stump was a truncated cone wider at the base, so the silhouette was a bucket. It is now an out-of-round loft whose radius is a closed-form function of angle and height, with real log-round proportions: 0.535 m across by 0.360 m tall, where it was 1:1 and read as a canister no amount of surface detail could rescue. The axe head was four flat plates with visible daylight between them, built from stacked boxes and resting on the top face without entering it. It is one lofted shell from poll to bit, buried 78.7 mm below the sawn face. Its chamfers are modelled into the section profile because bevelling a four-sided loft left sixteen boundary edges and two doubles at the bit -- the chamfer is now structural rather than an operator applied to geometry that cannot take it. The hoop was a 14-gon torus that alternately poked through the wood and floated off it. It is generated from the log's own radius function, so it seats uniformly by construction, and it moved from under the rim, where it read as a lid clamp, down to stump height. The log is flat-shaded. Smoothed, its wobble and the drying checks in the end grain were invisible and the whole point of the surface modelling was lost. Every defect that can be measured is now an assertion recomputed from the generated mesh: hygiene at exit 15, grounded at 16, four-shell axe joint fit at 17, hoop seat band and haft clearance at 18, plumb and stated size at 19. Five falsifiers prove them, each against a named budget. Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Cursor --- docs/gallery/assets/chopping-block-hero.webp | Bin 8672 -> 13806 bytes docs/gallery/chopping-block/index.html | 1245 ++++++++++++++---- docs/gallery/index.html | 6 +- showcase/chopping-block/README.md | 103 +- showcase/chopping-block/chopping_block.py | 1207 +++++++++++++---- showcase/chopping-block/preview.webp | Bin 7818 -> 13806 bytes showcase/gallery.json | 4 +- 7 files changed, 1968 insertions(+), 597 deletions(-) diff --git a/docs/gallery/assets/chopping-block-hero.webp b/docs/gallery/assets/chopping-block-hero.webp index 5362d1d2d25a4f4f1abac85b1aed214bec2e8f4b..7cda9bc941c53b61eeed6bddaaab923945136076 100644 GIT binary patch literal 13806 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 literal 8672 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 diff --git a/docs/gallery/chopping-block/index.html b/docs/gallery/chopping-block/index.html index d8ea858..1cef3ac 100644 --- a/docs/gallery/chopping-block/index.html +++ b/docs/gallery/chopping-block/index.html @@ -4,18 +4,18 @@ chopping-block — Examples — Blender Developer Tools - + - + - +