Skip to content

feat(showcase): add wooden-yoke - #255

Merged
TMHSDigital merged 1 commit into
mainfrom
feat/showcase-wooden-yoke
Sep 25, 2026
Merged

TMHSDigital merged 1 commit into
mainfrom
feat/showcase-wooden-yoke

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

Adds showcase/wooden-yoke: a double ox yoke. A carved oak beam with neck saddles and upturned ends stands on two bent-hickory oxbows, whose legs pass up through the beam and are pinned above it. A forged staple under the centre carries a hung iron ring.

Selection: it is the first unclaimed candidate in the ROADMAP pool now that apothecary-shelf has shipped. It is a prop, so it goes in showcase. There were no open PRs, and the only feat/showcase-* ref is already-merged work. The pool is restocked with a hitch candidate (a tongue or plough beam that hooks the yoke's ring).

Binaries (all local, .scratch/):

  • blender-4.5.11-windows-x64 reports Blender 4.5.11 LTS
  • blender-5.1.2-windows-x64 reports Blender 5.1.2
  • blender-5.2.1-windows-x64 reports Blender 5.2.1 LTS

The budget that matters: neck opening (exit 19)

A yoke exists to close round two necks. A bow bent too tight fails its job, and every other check still passes:

  • it still stands on the floor, so zmin and the named bows pass;
  • its legs still pass up through the beam;
  • its pins still rest on the beam;
  • it still fits the bounding box.

The piece measures each opening off the finished mesh:

  • Width: between the inner faces of the bow's legs.
  • Height: from the bow's inner bottom up to the saddle apex.
width (band 240–300 mm) height (band 300–400 mm)
default 266.0 mm 370.9 mm
--pinch-bows (legs 35 mm in) 196.0 mm → exit 19 unchanged

Under --pinch-bows every other budget passes and the AABB is unchanged. live-run-proven

Falsifiers: exit codes per binary (live-run-proven)

default --skip-decimate --stray-vert --lift-z --float-bow --short-bows --short-staple --edge-on-ring --float-pins --clip-ring --pinch-bows --skew-bow --output
4.5.11 0 9 15 16 16 17 17 17 18 18 19 19 —
5.1.2 0 9 15 16 16 17 17 17 18 18 19 19 —
5.2.1 0 9 15 16 16 17 17 17 18 18 19 19 0
Flag Target budget Measured Exit
--skip-decimate LOD1 ratio 1.0000 9
--stray-vert hygiene loose_v 1 15
--lift-z grounded zmin 0.050 16
--float-bow named bows left bow 8 mm up 16
--short-bows leg protrusion −2.3 mm 17
--short-staple staple bite −2.6 mm 17
--edge-on-ring threaded ring cos 0.0000 (floor 0.9397) 17
--float-pins pin seat −3.5 mm 18
--clip-ring hung ring +5.0 mm 18
--pinch-bows neck opening 196 mm wide 19
--skew-bow mirrored bows 6.0 mm 19

Envelope: every falsifier leaves the AABB unchanged. live-run-proven

Checks run locally

  • tests/check_falsifier_targets.py: the static check passes. --run <BLENDER> --only wooden-yoke passes all 11 falsifiers on each of the three binaries. live-run-proven

  • tests/smoke/run_example.py --forbid-skip: [PASS] wooden-yoke on 4.5.11, 5.1.2 and 5.2.1. live-run-proven

  • Other local checks:

    • check_exit_code_readme, check_import_export_rules, check_engine_id, check_gallery_images, test_harness
    • the inline validate-manifest, validate-counts and referenced-paths steps, plus the gallery-drift logic, all in a clean worktree (33 showcase pieces, no drift)

    All pass. live-run-proven

  • Determinism: every budget value is byte-identical across the three binaries. The only difference is the glTF byte count: 159760 on 5.2.1 against 159764 on the others, which is exporter metadata. There is no RNG. Check-only wall-clock is about 2.5 s on 4.5.11 and 4.6 s on 5.2.1. live-run-proven

  • Remote-only checks: the ecosystem drift check and the 4.5 / 5.1 / 5.2 smoke jobs are CI-proven on this PR.

Fix cycles (live-run-proven unless marked)

  • Pin seat on a span. The pin lathe had rings only at its ends, so no vertex sat over the beam and the audit raised on an empty set. Two shank rings now sit over the beam's crown.
  • No vertex on the axis. Ten-segment pin sections have no vertex straight down, so the seat read 1.21 mm against a designed 1.50 mm. Pins and staple are now 12-segment, and the seat reads 1.50 mm.
  • Collider. Hulls over all vertices, then over a thinned grid, came to 766 and then 744 triangles against a 300 ceiling. The hulls now take stride-sampled rings: 260 triangles over seven hulls. A single hull per bow would fill the neck opening, so each bow gets one hull per leg and one for its foot.
  • Bamboo bows (inspection-only). A per-face grain from the path tangent broke the wood figure at every ring. The bows now take one grain direction, up the legs, and the hickory is warmer.

Visual gates

Contact sheet: docs/gallery/contact-sheets/wooden-yoke-contact-sheet.webp

criterion wooden-yoke calibration verdict
mean luminance 0.2690 0.151–0.302 in band
stage darkness 0.2025 0.145–0.236 in band
wedge warmth +0.166 −0.43 … +0.37 warm pool on the floor behind the right bow
saturation 0.2020 0.144–0.231 in band
subject fill 0.756 tall 0.70–0.90 passes the framing gate, min margin 0.122
thumbnail legibility — — a beam on two U-bows with a hung ring reads as a yoke at tile size

Asset sheet: docs/gallery/asset-sheets/wooden-yoke.webp, beside the four reference panels re-rendered with the current harness. Verdict: passes.

  • Alone under neutral light, it shows a carved beam with saddles and upturned ends, bent bows through it, pins and a hung ring.
  • It sits at the level of the rocket and arm and is not the least-designed object.
  • It is a simpler silhouette than the hydrant and jerry can.

inspection-only

Close-ups (lit and clay: pin, ring, saddle, foot, beam end, underside, top): pins rest on the crown and the ring hangs over the staple's bar. The staple legs enter the beam, and the bows stand on their bottoms. There is no z-fight speckle and no faceting on the bent bows. inspection-only

The hero was rendered on 5.2.1 through scripts/render_hero.py, and build_gallery.py was run last. I read the generated <img alt> and the witnesses callout in docs/gallery/index.html and docs/gallery/wooden-yoke/index.html. inspection-only

needs-5.1 is applied because the piece runs a normal bake.

🤖 Generated with Claude Code

The wooden yoke was the first unclaimed showcase candidate. What an
envelope check cannot see on a yoke is whether each bow still closes
round a neck: a bow bent too tight still stands on the floor, passes
up through the beam, takes its pins and fits the bounding box. The
piece measures each opening between the bow legs and up to the
saddle off the mesh; --pinch-bows exits 19 at 196 mm while every
other budget and the envelope still pass.

Also asserts the legs stand proud of the beam, the staple bites it,
the ring is threaded along and hung on the staple's bar, the pins
rest on the beam and the bows are mirrored, each with a falsifier
proven 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>
@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 25, 2026
@github-actions github-actions Bot added showcase Budget-conformance props under showcase/ documentation Improvements or additions to documentation labels Sep 25, 2026
@TMHSDigital
TMHSDigital merged commit ef98ce6 into main Sep 25, 2026
14 checks passed
@TMHSDigital
TMHSDigital deleted the feat/showcase-wooden-yoke branch September 25, 2026 22:43
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 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