Skip to content

fix: wooden-ladder, wheelbarrow, curve-bevel-arc and sky-texture-sun-elevation quality pass - #235

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

TMHSDigital merged 5 commits into
mainfrom
fix/quality-pass-ladder-barrow-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-ladder

Took 1 inspection round plus two hero passes.

Defects

  1. The rungs were unevenly spaced on purpose. RUNG_Z_OFFSETS jittered them up to ±18 mm, and the barrel thickness varied from 0.82× to 1.22× (front ortho: the gaps alternated at about 53/40/52/40/50 px). An even pitch is part of what a ladder is.
  2. The hero leaned the ladder at its 12° rake with nothing to lean on (hero).
  3. Flat single-tone wood; glossy grey-black iron (three-quarters, hero).
  4. The temp .glb export leaked.
  5. Face order changed between runs. A Python set of edges was handed to bmesh.ops.bevel. Found by the determinism re-run, where one mat_index_counts print came out in a different key order; every measured value was identical. The same pattern was in the pristine script.

Fixes, and why each is structural

  • 1: the rungs sit at one pitch; DRIFT_Z_OFFSETS keeps the old values for the falsifier only. RUNG_BARREL_SCALE now varies within ±4%.
  • 2: render-only wall section. Its side is computed from the rail geometry (the side the tops rake toward), and its face passes through the rail tops. The ladder is turned so that side faces away from the camera. My first pass put the panel on the wrong side and it hid the ladder; the corrected version derives the side from the mesh.
  • 3: per-shell PlankTone/GrainDir wood (from shipping-crate), rusted iron.
  • 4: export removed after measuring.
  • 5: bm.edges.index_update() and sort by index before every bevel. Three repeat runs are now identical.

New budget, identical on 4.5.11, 5.1.2 and 5.2.1:

Budget Band Measured
Rung pitch (exit 19) 6 rungs; every rung-to-rung gap within 0.002 m of the mean 6; 0.00000

Triangles: 2536 → 2536 (same topology). Same-binary deterministic (three runs).

Falsifier: --drift-rungs restores the old heights → 19 on all three binaries (worst gap 0.03287 m off the mean).

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-stile 18→18, --twin-sole 15→15, --fat-rungs 17→17.

Hero: check_framing without deviation= (fill y 0.883, min margin 0.044). Contact sheet: docs/gallery/contact-sheets/wooden-ladder-contact-sheet.webp, luma 0.174 (band 0.151–0.305), stage 0.171.

A — showcase/wheelbarrow

Took 1 inspection round.

Defects

  1. Each tray wall was one plain slab beside a planked floor (tray_floor close-up, front ortho).
  2. Flat single-tone wood; glossy black iron (hero).
  3. The temp .glb export leaked.
  4. Face order varied between runs, from the same set-to-bevel pattern as the ladder.

Fixes, and why each is structural

  • 1: add_board_stack: the side and front walls are 2 boards with a 2 mm seam (WALL_BOARDS, WALL_SEAM), held by the existing straps; the low rear wall stays one board. tray_size and wall_floor_seat now take a side wall as the union of its boards. Before, they matched a single shell of WALL_H.
  • Triangles: the boards cost 324 triangles and broke the 2800 ceiling (2824). Rather than raise it, they are paid for with faces nobody sees. Tray-part edges that lie entirely below the floor top (wall bottoms buried in the floor, slat undersides) get no bevel. Faces beveled on some edges and not others came out as n-gons, which the hygiene audit caught (exit 15); they are now split, at the same triangle count. 2500 → 2536.
  • 2: per-board wood, rusted iron. 3: export removed after measuring. 4: bevel input sorted by edge index.

New budget, identical on all three binaries:

Budget Band Measured
Wall boards (exit 17) 2 boards per side wall and in the front wall; every seam 0.001–0.004 m 2 / 2 / 2; 0.00200

Falsifier: --wide-seams opens the seams to 8 mm → 17 on all three binaries. The first version, --one-piece-walls, built single slabs and exited 4: fewer boards took the count under the 2300 triangle floor. --wide-seams keeps the same boards and triangles, so only the seam band fails.

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-legs 16→16, --float-walls 17→17, --pipe-rim 18→18, --fat-spokes 17→17.

Hero: check_framing passes without deviation=. Contact sheet: docs/gallery/contact-sheets/wheelbarrow-contact-sheet.webp, luma 0.172.

B — examples/curve-bevel-arc

Presentation changes (render path only): both ends of the semicircle face −Y, so the camera now looks from −Y and shows both filled caps (use_fill_caps, the witness) face-on, with the arc behind them. The old angle showed one cap and the other end edge-on. The cap's 12-sided outline is the pinned tessellation (EXPECT_VERTS 1044), which a presentation pass cannot change. README: staging note.

Contract unchanged. Before → after, identical on all three binaries: default 0 → 0, --no-caps 6 → 6.

Framing: check_framing passes (fill x 0.847, min margin 0.062). Contact sheet: docs/gallery/contact-sheets/curve-bevel-arc-contact-sheet.webp, luma 0.181.

B — examples/sky-texture-sun-elevation

The committed hero showed "sun_elevation 8 deg" labels that the current code does not draw, so the still had drifted from the code. Rendering the pristine script confirmed it: no labels, and the jar almost identical in both panels.

Presentation changes (render path only):

  • The sky now lights the jar. A 420 W studio key lit a saturated terracotta jar, so both panels looked the same and the sky, the variable under test, was not what lit it. The jar is now pale glaze, the key and fill only model it (70 W / 10 W), and the still's Background strength is 0.14 (was 0.08). Under the 8° sun the jar reads dim twilight blue; under 55°, bright.
  • The jar's base now sits on the floor (it floated 5 mm).
  • README: Stage deviation updated. Framing deviation no longer cites the removed deviation= flag.

Contract unchanged. The zenith probe values are identical before and after (low 0.1557, high 0.3520, rise 2.2607 on 5.2.1). Before → after exit codes, identical on all three binaries: default 0 → 0, --unlink-sky 6 → 6.

Framing: this diptych is not wired to check_framing (a documented world-contract deviation). Contact sheet: docs/gallery/contact-sheets/sky-texture-sun-elevation-contact-sheet.webp. Luma 0.359 is above the dark-stage band; the committed drifted hero measured 0.271. docs/VISUAL-STYLE.md § "The contact-sheet gate under deviation" makes luma information, not pass/fail, for sky-texture contracts. Verdict: a bright daylight sky that belongs to this gallery on materials, view transform and legibility.

Also

  • showcase/README.md conventions: Variation goes into surface, never into function; A plank wall is boards, and extra boards are paid for; Sort bmesh operator inputs; A leaning prop is staged against something.
  • Gallery alts, witnessesFix text and root README alts and lines updated. Gallery regenerated, with the generated <img alt> and witness callouts read back.
  • Known gaps, not closed here:

🤖 Generated with Claude Code

TMHSDigital and others added 5 commits September 23, 2026 15:56
Rung heights were jittered up to 18 mm; they now sit at one pitch (rung
pitch, exit 19, --drift-rungs). Per-piece wood, rusted iron, bevel inputs
sorted so face order is stable run to run, temp glb removed. The hero leans
the ladder against a render-only wall section.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
Side and front walls are two boards with a 2 mm seam (wall boards, exit 17,
--wide-seams); the audits take a wall as the union of its boards. The
boards are paid for by skipping bevels on buried and underside tray edges,
so the triangle ceiling holds. Per-board wood, rusted iron, sorted bevel
inputs, 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: the camera looks along the direction both capped ends
face, so the witness (use_fill_caps) shows twice. 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: a pale glaze and dimmed studio lights let the sky, the
variable under test, light the jar, so the two elevations differ. The
committed hero had drifted from the code. Zenith probe values 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>
…erator input order

From the wooden-ladder and wheelbarrow 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 39ef779 into main Sep 23, 2026
14 checks passed
@TMHSDigital
TMHSDigital deleted the fix/quality-pass-ladder-barrow-examples branch September 23, 2026 20:03
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