Skip to content

fix: wooden-barrel, wooden-bucket, wave-displace and color-attribute-wheel quality pass - #233

Merged
TMHSDigital merged 5 commits into
mainfrom
fix/quality-pass-barrel-bucket-examples
Sep 23, 2026
Merged

TMHSDigital merged 5 commits into
mainfrom
fix/quality-pass-barrel-bucket-examples

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

Quality pass: four items, two showcase (Track A) and two gallery examples (Track B). Every pathology/cross-version example (Track C) had already been reviewed. Everything below comes from live runs on .scratch/blender-{4.5.11,5.1.2,5.2.1}-windows-x64/blender.exe, which report 4.5.11 LTS / 5.1.2 / 5.2.1 LTS, unless it is labelled inspection. Baselines were taken on the pristine tree before any edit.

(The prompt asks for "four or five pieces" in its intro and "two or three items" in Step 2. This run takes four.)

A — showcase/wooden-barrel

Took 1 inspection round plus the hero.

Defects

  1. The head was one featureless slab and read as a lid (hero, head close-ups).
  2. Every stave was the same flat tone, and the hoops were bright polished steel (hero, three-quarters).
  3. The gallery alt said "three metal hoops"; the barrel has four.
  4. The temp .glb export leaked into the working directory.

Fixes, and why each is structural

  • 1: each head is the croze outline cut across X into HEAD_BOARDS = 4 boards with a 1.5 mm BOARD_SEAM (add_board_disk, a Sutherland-Hodgman clip of the outline). Every board's outer edge is still the croze, so the seat is unchanged: head-croze gap 0.00698 → 0.00710. head_gap now classifies a head board by its span in plan (≥ BOARD_MIN_SPAN), not by a radius; the old "round" test would have dropped the edge boards.
  • 2: per-shell PlankTone/GrainDir face attributes and wood_material (copied from shipping-crate), so grain runs up each curved stave and across each head board. Hoops use the crate's rusted-iron recipe.
  • 3: alt rewritten.
  • 4: the export is removed once its size is measured.

New budget, identical on 4.5.11, 5.1.2 and 5.2.1:

Budget Band Measured
Head boards (exit 17) 4 per head; every seam 0.0008–0.003 m 4 + 4; 0.00150

Triangles: 7216 → 7312 (ceiling 8500). Same-binary deterministic.

Falsifier: --one-piece-head builds each head as a single slab → 17 on all three binaries (1 + 1 boards).

Existing exit codes, before → after: identical on all three binaries: default 0→0, --skip-decimate 9→9, --stray-vert 15→15, --lift-z 16→16, --short-staves 16→16, --float-head 17→17, --round-band 18→18.

Hero: check_framing runs without deviation=. Contact sheet: docs/gallery/contact-sheets/wooden-barrel-contact-sheet.webp, luma 0.176 (band 0.151–0.305), stage 0.166, warmth +0.136.

A — showcase/wooden-bucket

Took 1 inspection round, plus one fix the matrix forced (below).

Defects

  1. The bail was a smooth eight-sided tube in a rope material and read as a plastic hose (hero, bail close-ups).
  2. The rope ran through the ear plates. The ring offset was RING_MAJOR * 0.25, putting the rope's axis 3.25 mm off the plate with an 8 mm radius. The ring hid it in the old stills. Found while sizing the rope.
  3. Flat single-tone staves, a one-slab bottom visible from above, bright steel hoops (hero, interior close-up).
  4. The gallery alt said "curved wooden bail handle".
  5. The temp .glb export leaked.

Fixes, and why each is structural

  • 1: add_rope_curve lofts a three-lobed section of 9 vertices turned one vertex step per ring, so the lobes wind along the path as strands. The frame is fixed to the bail's plane, so the lay does not jump where the ends turn vertical. The ends now run 14 mm on through the rings. BAIL_SEGS 24 → 48. The unused add_pipe_curve is removed.
  • 2: RING_OFFSET = rope lobe radius + 0.5 mm. Asserted as a new budget. OUTER_SIZE was re-fitted to the honest envelope, (0.383, 0.346, 0.527) → (0.396, 0.346, 0.534): 12.5 mm wider across the ears and 6 mm taller.
  • 3: the same wood/iron as the barrel. The bottom is 3 boards (BOTTOM_BOARDS, 1.2 mm seams). floor_gap classifies boards by plan span.
  • 4: alt rewritten. 5: export removed after measuring.

Matrix-forced fix: after the refit, --float-handle exited 8 (envelope) instead of 17 on 4.5.11. On the baseline it sat just 1.1 mm inside the envelope tolerance (z 0.5131 against 0.527 ± 0.015). Following "keep a falsifier's envelope still", the smaller bail is now lifted by exactly what it lost (0.28 * rx), so its top stays at 0.5339 and only the bail-ear gap fails (0.0388 m). The flag still targets the same budget.

New budgets, identical on all three binaries:

Budget Band Measured
Bottom boards (exit 17) 3; every seam 0.0006–0.0025 m 3; 0.00120
Rope clears the ear plates (exit 17) 2 plates; 0 rope vertices inside either 2; 0

Triangles: 4872 → 5458 (ceiling 5800). Collider 302 → 276. Same-binary deterministic.

Falsifiers: --one-piece-bottom → 17 (1 board); --sunk-rope restores the old ring offset → 17 (19 rope vertices inside a plate). Both on all three binaries.

Existing exit codes, before → after: identical on all three: default 0→0, --skip-decimate 9→9, --stray-vert 15→15, --lift-z 16→16, --short-staves 16→16, --float-handle 17→17, --float-bottom 17→17, --round-band 18→18.

Hero: framing passes without deviation=. Contact sheet: docs/gallery/contact-sheets/wooden-bucket-contact-sheet.webp, luma 0.166, stage 0.176.

B — examples/wave-displace

The still was an edge-to-edge field: the sheet bled off the left, right and bottom edges on a black void, and the README documented a deviation= call that gallery_framing no longer has.

Presentation changes (render path only):

  • A copy of the checked grid has its boundary extruded down to a flat base 0.30 m below the deepest trough, so the wave is the top of a cast tile standing on a studio floor (floor, back wall, warm wedge). The checked Wave object is untouched and hidden from the render.
  • 3/4 camera on a Track-To aim. Standard view transform.
  • README: "Framing deviation" replaced by "Staging".

Contract unchanged. Before → after: identical on all three binaries: default 0 → 0, --flat 4 → 4.

Framing: measured externally (the render path has no check_framing): fill 0.753 x / 0.761 y, min margin 0.117. Contact sheet: docs/gallery/contact-sheets/wave-displace-contact-sheet.webp, luma 0.217, stage 0.222. The first pass measured stage 0.2465, above the brightest calibration stage (0.2368), so key and fill were lowered.

B — examples/color-attribute-wheel

The disc is zero-thickness. The still showed it as a paper-thin oval hovering 8 cm above the floor.

Presentation changes (render path only):

  • A render-only Solidify body (5 cm), at the same 52° lean, standing on a dark plinth with a strut behind. The height is computed so the lowest point of the rim rests on the plinth.
  • Camera pulled back from −8.0 to −9.4 m (the plinth first touched the bottom edge).
  • README: new "Staging" section.

Contract unchanged. Before → after: identical on all three binaries: default 0 → 0, --point-domain 5 → 5.

Framing: measured externally: fill 0.794 y, min margin 0.094. Contact sheet (new): docs/gallery/contact-sheets/color-attribute-wheel-contact-sheet.webp, luma 0.288, stage 0.193.

Also

  • showcase/README.md conventions: coopered staves and forged-iron hoops (under "Identical boards read as CG"); A head or bottom is boards, not a slab; Rope is laid, not piped; What passes through a part must clear its mount.
  • Gallery alts, witnessesFix text, and the root README image alts and summary lines updated; gallery regenerated, and the generated <img alt> and witness callouts were read back in docs/gallery/index.html and the four detail pages.
  • Known gaps, not closed here:

🤖 Generated with Claude Code

TMHSDigital and others added 5 commits September 23, 2026 14:00
…oops

Heads are four boards cut from the croze outline, with a head-board
budget (exit 17, --one-piece-head). Per-stave tone and grain, rusted iron
hoops, the temp glb removed after measuring, and the gallery alt fixed
(it said three hoops; there are four).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
The bail is three-strand rope and its rings now stand clear of the ear
plates the old rope ran through (exit 17, --sunk-rope). The bottom is
three boards (exit 17, --one-piece-bottom). OUTER_SIZE refit to the honest
envelope; --float-handle now keeps the envelope still. Per-stave wood,
iron hoops, temp glb removed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
Render path only: a skirted copy of the checked grid stands on the floor
instead of bleeding off three frame edges. Contract and exit codes
unchanged on 4.5.11, 5.1.2 and 5.2.1.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
Render path only: the zero-thickness disc gets a Solidify body and rests
on a plinth with a strut, instead of hovering above the floor. Contract
and exit codes unchanged on 4.5.11, 5.1.2 and 5.2.1. Also regenerates the
gallery index for all four items.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
…arance

From the wooden-barrel and wooden-bucket passes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
@TMHSDigital TMHSDigital added the needs-5.1 Opt-in Blender 5.1 smoke on this PR. Default matrix stays 4.5 + 5.2. Auto-label will not apply this. label Sep 23, 2026
@github-actions github-actions Bot added examples Runnable smoke-gated examples under examples/ showcase Budget-conformance props under showcase/ documentation Improvements or additions to documentation labels Sep 23, 2026
@TMHSDigital
TMHSDigital merged commit 1cd36af into main Sep 23, 2026
13 checks passed
@TMHSDigital
TMHSDigital deleted the fix/quality-pass-barrel-bucket-examples branch September 23, 2026 18:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation examples Runnable smoke-gated examples under examples/ needs-5.1 Opt-in Blender 5.1 smoke on this PR. Default matrix stays 4.5 + 5.2. Auto-label will not apply this. showcase Budget-conformance props under showcase/

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant