fix(showcase): rebuild chopping-block as a log round with a felling axe - #173
Merged
Merged
Conversation
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 <cursoragent@cursor.com>
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 <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A showcase visual quality pass on
chopping-block. It was picked because itand
wheelbarrowwere the two worst silhouettes among the eleven pieces thathave never had a pass, and of those two it was the only one whose hero did not
read as any recognisable object: a tapered pail with a grey lump on the lid.
Every budget it declared was green throughout. The budgets could not see a
single one of the eleven defects below, which is the point of the pass.
Three inspection rounds. Renders stayed in
.scratch/and are not committed.Defects found (Step 3)
Two more surfaced from the audits once the rebuild was underway and are fixed
in the same pass: a
bmesh.ops.bevelon the head produced 16 non-manifoldedges, 2 doubles and 53 coplanar face pairs; and the hoop seat check reported a
clean fit on a hoop that visibly gapped.
Fixes, and why each is structural
Stump (1, 2). Replaced the cone with a loft whose radius is a closed-form
function of angle and height — three wobble harmonics with a height-dependent
twist. The hoop profile, the rim scale and the drying checks are all evaluated
from that same function, so they stay seated when a dimension changes. The
proportion moved to 0.535 m across by 0.360 m tall and is now asserted against
the README's stated size.
Top (3, 4). The top is a ring stack, not a single fan, so the sawn face can
carry a dish, hack scarring and three radial checks. The disc is no longer a
separate plate; the rim is chipped by an angular scale function so there is no
clean horizontal seam to read as a lid.
Axe head (5, 6, 7). One lofted shell from poll to bit. Its chamfers are
modelled into the section profile rather than bevelled on afterwards —
bevelling a four-sided loft with a thin bit is what produced the 16 boundary
edges, so removing the operator is the fix, not tuning its offset. The head is
sized off the block (roughly half the block diameter) rather than off an
absolute idea of an axe, and bury depth is asserted rather than positioned.
Haft (8). Swept along a quadratic Bézier through the eye with a
shoulder-waist-swell radius profile. It passes through the head rather than
being pushed against it, and the joint is asserted three ways.
Hoop (9, 10). Generated from the log's own radius function, so it conforms
to an out-of-round host by construction. Moved to stump height.
Kerf (11). Deleted. The wobble supplies the variation it was there for.
Shading. The log is flat-shaded. Smoothed, a wobbled 36-gon is a
featureless drum and rounds 1 and 2 both failed on this alone — the geometry
was already correct and invisible.
New hygiene budgets
Recomputed from the generated mesh. Identical on all three binaries.
zminThe hoop bite is binned per angular segment against the log's own radius at
each vertex's own angle. A single global midpoint radius classifies outer
chamfer vertices as inner ones on an out-of-round host, which is exactly how a
visibly gapping hoop passed before.
Coplanar pairs are counted over faces that share no vertex. Counting fan-cap
triangles, which are coplanar and close-centred by construction, makes the
budget unsatisfiable rather than meaningful.
Exit codes, all three binaries
--skip-decimate--stray-vert--lift-zzminis 0--fat-haft--round-band--fat-haftmeasured 0.00057 against the 0.006 minimum.--round-bandmeasured a 0.00000–0.01720 bite against the 0.002–0.007 band: it floats clean
off the wood at the narrow angles and sinks 17 mm at the wide ones, which is
the original defect reproduced exactly.
Triangle counts
Before 2016, after 1472, on all three binaries. The drop is not hidden-face
removal — the head lost its bevel and gained modelled chamfers, which is a net
saving, and the deleted kerf bar took its faces with it. The log gained
segments and the top gained rings. Collider 188 → 434, a real increase: the
convex hull of a 36-gon out-of-round log with an axe through it is genuinely
larger than the hull of a 20-gon cone. LOD ratios agree exactly across all
three series here; the gate is still a band.
Materials went from 2 to 3. The sawn end grain is its own material because a
log round's cut face is much paler than its bark, and that contrast is what
makes the silhouette read. Face floors are asserted per material.
Convention changes
showcase/README.mdgains seat conformance (exit 18), plumb and real-worldsize (exit 19), coplanar pairs in the hygiene family, the reservation of
15–19 across pieces, and a note that shading is part of the model.
Rounds
Three. Round 1 fixed topology and the four-plate head but left a canister.
Round 2 fixed proportions and added cracks but the log was still smooth-shaded
so none of it read. Round 3 flat-shaded the log, scaled the head to the block,
and widened the haft profile.
Evidence
Proven by live run on 4.5.11, 5.1.2 and 5.2.1 (
.scratch/binaries, versionsconfirmed from the binaries themselves): all measured values above, all six
exit codes, the smoke harness
[PASS], and the framing gate on the re-renderedhero.
Established by inspection only: the generated
docs/gallery/HTML was readdirectly rather than trusted from
gallery.json— cardaltis capped at 160characters with an ellipsis and is not truncated at a dotted path, and the
detail-page callout carries the full witnesses text. The previous entry
contained mojibake (
×for×) which is now plain ASCII.