fix: park-bench, fence-kit and soccer-ball-goldberg quality pass - #240
Merged
Merged
Conversation
… carries The scroll feet were separate arcs stopped 14 mm under square posts, the back slats straddled vertical posts, and the iron read as chrome. Each leg is now one swept round bar from toe to reclined back; slats and armrests bite named bearers (exit 20), legs are asserted whole (exit 21), and the back recline is a band (exit 19). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
…posts The iron collars were loose plates with open corners and stood 12 mm past each tile edge, and the brace ran post centre to post centre through the bands and 6 mm into every rail. Bands are now one mitred shell each, posts are placed from the tile (exit 21), and the brace is a plumb-cut board housed in both posts and bearing on the middle rail (exit 20). 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 white hexagons merged into one shell and the ball read lumpy; a render-only seam overlay and a Cast modifier fix both. The render path now calls check_framing, remapped to exit 14 because 10 is the centroid check. Contract, assertions and exit codes 0-13 unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
…el stage Also refreshes the gallery cards and root README alts for the three restaged stills and regenerates docs/gallery. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.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.
Quality pass: three items (two showcase pieces, one gallery example). 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.Picks. Every showcase piece has had some pass. Track A took two that had only the old-era pass (#182/#183), which still had the 14 m stage, set-ordered bevel input, a 2° X tilt in the hero, a leaked temp
.glband single-tone timber:park-benchandfence-kit. Track B tooksoccer-ball-goldberg, never reviewed and outside both pinned reference sets. Track C: none. Every pathology and sidecar example has been reviewed.A:
showcase/park-benchTook 2 inspection rounds.
Defects
joint_foot_front,joint_foot_back,ortho_left). Each scroll foot was its own arc, started 8% along (t0=0.08), and each post started at the arc's top. That left about 14 mm of daylight at every join. No budget saw it: the toes grounded, and the stretcher gap only measured stretchers.joint_back_slats_post,ortho_left). The slats were centred on the post plane, 30 mm thick against 24 mm posts, so each post ran through every slat end. The back was dead vertical.joint_center_stretcher,joint_stretcher_post). They rendered as tapering cylinders, and they met 6-gon round scroll tubes at the feet.joint_arm_scroll). The armrest sat 0.6 mm above its arm bar..glbleak. Set-ordered bevel input.Fixes, and why each is structural
r + SLAT_T/2 − SLAT_BITEin front of it.SLAT_BITEinto the arm bar and overhangs the front leg. A quarter-round bracket runs from the leg up into the overhang. The front leg tenons 12 mm into the armrest.SLAT_BITEinto the side rails, computed from the rail's top line.PlankTone/GrainDirwood (the watchtower shader) and dark rusted iron (metallic 0.6, roughness 0.55).New budgets, identical on 4.5.11, 5.1.2 and 5.2.1:
Triangles: 2520 → 3272 (band re-fitted from 2200–4200 to 2900–3700). Collider 82 → 64. Outer AABB z 0.884 → 0.887 (heavier top rail). Hygiene all zero, z-fight pairs 0. Same-binary deterministic: two full matrix runs printed identical measurements.
Falsifiers, identical on all three binaries:
--float-slatslifts the seat slats 6 mm → 20 (−0.00354).--split-feetrestores the first build's separate foot arcs → 21 (0 of 4). The toes still ground and every gap budget still passes.--upright-backsets the recline to 0 with the back top kept → 19 (0.00°).Existing exit codes, before → after, identical on all three: default 0→0,
--skip-decimate9→9,--stray-vert15→15,--lift-z16→16,--short-feet16→16,--float-stretcher17→17,--gap-slats18→18,--narrow-seat19→19.Hero:
check_framingwithoutdeviation=passes. Contact sheet:docs/gallery/contact-sheets/park-bench-contact-sheet.webp. Luma 0.181 (band 0.151–0.305), stage 0.167, warmth +0.045, saturation 0.118.A:
showcase/fence-kitTook 1 inspection round.
Defects
joint_rail0/1/2_post,joint_shoe_left/right).joint_brace_low,joint_brace_high,joint_brace_mid_rail,ortho_top):ortho_top,ortho_bottom). The AABB was 1.624 m against a 1.60 m tile. The bands stood 12 mm past each end, so copies placed at the pitch interpenetrated 24 mm. The README said the width was the tile..glbleak. Set-ordered bevel input.Fixes
add_collarextrudes one mitred profile per band. A shoe is a closed ring. A rail band is a U whose arms stop a quarter-thickness inside the post's inner face, so no arm end lands on that face's plane.BRACE_BITEinto the middle rail's front face, derived from that rail's own depth;HX = TILE/2 − KIT_CLEAR − band reach. Changing post stock or band thickness moves the posts, not the tile.New budgets, identical on all three binaries:
The bearing is measured plane to plane. The brace and rail cross mid-span, where neither has a vertex, so a vertex-depth metric reported a false 0.15 m gap on the first try.
Triangles: 1092 → 1012 (band re-fitted from 1000–1400 to 850–1200). Outer AABB 1.624 → 1.596 m. Collider 32 → 24. Hygiene all zero. Same-binary deterministic.
Falsifiers, identical on all three binaries:
--float-bracemoves the brace 6 mm forward → 20 (−0.00400).--wide-tilerestores the first build's post stations, rails moved with them → 21 (1.6240). The tile check runs before the AABB gate so the envelope cannot steal it. On the first try this falsifier landed on 20, because the middle-rail lookup keyed on the constant rail length; the lookup now keys on the rail's station height.Existing exit codes, before → after, identical on all three: default 0→0,
--skip-decimate9→9,--stray-vert15→15,--lift-z16→16,--short-shoes16→16,--short-brace17→17,--gap-rails18→18,--long-rails19→19.Hero: framing passes. Contact sheet:
docs/gallery/contact-sheets/fence-kit-contact-sheet.webp. Luma 0.183, stage 0.167, warmth +0.203, saturation 0.135.B:
examples/soccer-ball-goldbergRender path only.
build_ballandcheckare untouched.Inspection (clay, wireframe, hero, close-up) found three problems:
Presentation changes:
CASTsphere at the cage's own circumradius.check_framingreturns 10, and this example already uses 10 for the centroid check, so the call site maps a violation to 14. This adds a render-path-only row to the exit table; no existing code changes meaning.Contract unchanged. Before → after, identical on all three binaries: default 0 → 0,
--invert-bind13 → 13. The check output is byte-identical to before: edge max_dev 6.471e-06, planarity 1.888e-06, circumradius max_dev 8.956e-06.Contact sheet:
docs/gallery/contact-sheets/soccer-ball-goldberg-contact-sheet.webp. Luma 0.240, stage 0.178. Saturation is 0.074, low by design: it is a black-and-white subject.Also
showcase/README.mdgains four conventions:teaches,altandwitnessesFixtext and the root README alts are updated. The gallery is regenerated, and the generated<img alt>and witness callouts were read back.tests/check_falsifier_targets.py: passed, 209 falsifiers across 28 pieces.🤖 Generated with Claude Code