Skip to content

fix: market-stall, stone-well, gltf-export-roundtrip and prop-origin-transform quality pass - #238

Merged
TMHSDigital merged 5 commits into
mainfrom
fix/quality-pass-market-stall-stone-well
Sep 24, 2026
Merged

TMHSDigital merged 5 commits into
mainfrom
fix/quality-pass-market-stall-stone-well

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

Quality pass: four items, two showcase (Track A) and two gallery examples (Track B). No pathology/cross-version example (Track C) was left unreviewed. 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/market-stall

Took 1 inspection round.

Defects

  1. The side braces hung in the air (ortho_left, ortho_right, joint_awning_corner, three_quarter_b). Each started at the back post and stopped at y = +0.04, 0.43 m short of the front post, nearly level, joined to nothing at the front.
  2. The joint audit never saw them. A near-level brace fails the "diagonal" shape test (dz > 0.35), so the brace-vs-counter check was measuring the side plates, not the braces.
  3. Flat single-tone timber, flat stripe paint (hero).
  4. The wall edge showed in the corner of the hero (14 m stage).
  5. Temp .glb leak; bevel input built from a set, so face order depended on memory addresses.

Fixes, and why each is structural

  • 1: each brace now runs from post centre to post centre: from the front post just above the counter up to the back post under the header. The side bay is triangulated.
  • 2: the new seat budget picks out the braces below the front header by name, and counts them.
  • 3: grained wood with a tone per piece (PlankTone / GrainDir face attributes, seeded), matte canvas stripes with faint dirt. 4: stage 60 m. 5: export removed after measuring; bevel input sorted by edge index.

New budget, identical on 4.5.11, 5.1.2 and 5.2.1:

Budget Band Measured
Brace-in-post seat (exit 17) 2 side braces, each end ≥ 0.020 m past the inner face of the post it tenons into 0.0418

Triangles: 4324 → 4324 (the brace moved; nothing was added). Same-binary deterministic (three runs of the measured output hash identically).

Falsifier: --short-brace stops the front end at the old mid-depth point, inside the envelope → 17 on all three binaries (−0.4181 m). --low-brace still exits 17 on the overlap check.

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-feet 16→16, --float-awning 18→18, --low-brace 17→17, --rake-posts 19→19.

Hero: check_framing without deviation= (fill y 0.783, min margin 0.056). Contact sheet: docs/gallery/contact-sheets/market-stall-contact-sheet.webp, luma 0.185 (band 0.151–0.305).

A — showcase/stone-well

Took 1 inspection round. No geometric defect found. The four posts stand on the diagonals, which looks odd in the front and side orthos, but it is deliberate: they carry the hip corners, and the --turn-posts budget asserts it. The defects were surface:

  1. Every stone one grey, so the courses read as a moulded ring.
  2. Hoops and crank read as chrome (metallic 1.0, roughness 0.30); flat wood on the roof.
  3. The wall edge in the corner of the hero (14 m stage).
  4. Set-ordered bevel input (stone and wood).

Fixes: a value shift per stone from the seeded PlankTone attribute; rusted iron; grained per-piece wood; stage 60 m; bevel input sorted by edge index. No new budget.

(Inspection note: the inspection sheet's bright lighting washes the stone to white in both rounds. The stone was judged in the hero.)

Triangles: 9380 → 9380. Same-binary deterministic (three runs).

Existing exit codes, before → after, identical on all three: default 0→0, --skip-decimate 9→9, --lift-z 16→16, --float-stone 16→16, --shallow-tenon 18→18, --stand-posts 15→15, --turn-posts 19→19, --drop-bucket 18→18.

Hero: framing passes (fill y 0.861, min margin 0.033). Contact sheet: docs/gallery/contact-sheets/stone-well-contact-sheet.webp, luma 0.186.

B — examples/gltf-export-roundtrip

Checked first: the render path samples no pixels, so the layout is free to change.

Presentation changes (render path only):

  • Both twins turn 22° to show a side and their corner armour; dead-on, the pair read as two flat front elevations. The re-imported object comes back in QUATERNION rotation mode, so the render switches it to XYZ first.
  • 60 m stage; the camera raised slightly.
  • This example had no in-path framing gate (a seventh one, not on the known list of six). It now calls check_framing. The helper returns 10, which is already a check code here (POSITION count), so the call site remaps a framing violation to 22, following the showcase remap convention.
  • README: staging note and the exit-22 row.

Framing gate falsified: a scratch copy with the lens at 110 mm exits 22 (fill 1.000, all four edges touched). Restored.

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

Framing: passes (fill x 0.853, min margin 0.059). Contact sheet: docs/gallery/contact-sheets/gltf-export-roundtrip-contact-sheet.webp, luma 0.232.

B — examples/prop-origin-transform

Checked first: the render path samples no pixels.

Presentation changes (render path only):

  • The origin markers were invisible. The origin sits at the base centre inside the plinth, and the 0.28 m stubs pointed outward from it, all buried. The picture never showed the fact it witnesses. The red X and green Y stubs are now centred on the origin and run 1.7 m along the floor, exiting the plinth on both sides; where they cross is the origin.
  • The TRAP / MPI KEEP labels went from 0.11 m to 0.21 m, with a slight extrude; they vanished at card size before.
  • 60 m stage. README: staging note.

Contract unchanged. Before → after, identical on all three binaries: default 0 → 0, --skip-mpi 8 → 8.

Framing: passes (fill x 0.816, min margin 0.069). Contact sheet: docs/gallery/contact-sheets/prop-origin-transform-contact-sheet.webp, luma 0.250.

Also

  • showcase/README.md conventions: A brace joins two members (exit 17); Laid stone and cut timber vary piece by piece.
  • Gallery alts, witnessesFix text and root README alts updated. Gallery regenerated, with the generated <img alt> read back (one alt was 211 chars and the build refused it; shortened to 186).
  • tests/check_falsifier_targets.py: passed, 201 falsifiers across 28 pieces.
  • Known gaps, not closed here:

🤖 Generated with Claude Code

TMHSDigital and others added 5 commits September 23, 2026 20:12
The side braces stopped at mid-depth, 0.43 m short of the front post, and
were so nearly level the joint audit never classed them as braces. They
now run front post to back post, and a brace-in-post seat budget asserts
both ends (exit 17, --short-brace). Grained per-piece wood, canvas stripes,
sorted bevel input, 60 m stage, 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>
No geometric defect found; the diagonal posts are deliberate and budgeted.
Each stone takes its own shade, the roof and posts take grain and a tone
per piece, and the hoops and crank are rusted iron instead of chrome.
Sorted bevel input and a 60 m stage.

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

Render path only: both twins turn 22 degrees to show a side, and the render
now calls check_framing, which it never did. Exit 10 is a check code here,
so a framing violation is remapped to 22. 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 origin markers were buried in the plinth. The X and Y
stubs now cross under each base and exit it on the floor; labels are legible
at card size. 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>
From the market-stall and stone-well 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 24, 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 24, 2026
@TMHSDigital
TMHSDigital merged commit 76a0230 into main Sep 24, 2026
13 checks passed
@TMHSDigital
TMHSDigital deleted the fix/quality-pass-market-stall-stone-well branch September 24, 2026 00:20
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