fix: water-trough third quality pass; exit-pre-sidecar finding - #250
Merged
Merged
Conversation
Each end was one D-shaped slab, the case the "a head or bottom is boards" rule exists for. Each end is now three vertical boards of uneven width, each with its own tone, its bottom following the hull arc under its own span, lapped 1 mm into its neighbours so the joint is tight (no seam for water or a containment ray) and the bevel shows it as a groove. The rim span is read on the union of an end's boards. New budget: end boards per end >= 3 (exit 20, --slab-ends restores the one-piece board, measures 1). The water's grazing tint went from a pale grey-blue that read as a painted slab to a deep teal. Tris 3124 -> 3316 (four arc samples per board cost 3556, over the unchanged 3500 ceiling; three are used). Same codes and values on 4.5.11, 5.1.2 and 5.2.1. Asset sheet added. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
Extends "a head or bottom is boards, not a slab" to any end that closes a vessel: lap watertight boards a millimetre rather than leaving a through seam, and read rim tests on the union of an end's boards. 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.
A quality pass on
water-trough(Track A). It was the weakest showcase piece in #249's report. The run's second pick wasexit-pre-sidecar(Track C). Its re-verification found a wrong documented claim, so per the runbook it is not changed here; the finding is at the end.Binaries:
.scratch/blender-4.5.11-windows-x64(reportsBlender 4.5.11 LTS)blender-5.1.2-windows-x64(Blender 5.1.2)blender-5.2.1-windows-x64(Blender 5.2.1 LTS)The hero was rendered on 5.2.1 through
scripts/render_hero.py. The inspection renders stayed in.scratch/.water-trough(Track A)Inspection sheet: six orthographic views, two three-quarter views, clay, wireframe, eight joint close-ups and a ground-contact view. The geometry was largely sound:
Defects (round 0):
joint_end_cap_left/rightand the hero.Generator changes, and why each is structural:
END_BOARD_FRACS), each with its own seeded tone and grain.END_BOARD_LAP), so the joint is tight: a through seam would leak water and let a containment ray through. The bevel on each board's face edges shows the joint as a groove.New budget. Identical on 4.5.11, 5.1.2 and 5.2.1:
Existing budgets, re-measured:
Triangles: base 3124 → 3316, inside the unchanged 2800–3500 band. Four arc samples per board cost 3556 triangles, over the ceiling, so each board uses three. The collider went from 64 to 68, against a ceiling of 80.
Falsifier:
--slab-endsrestores the one-piece board and violates only the new budget, measuring 1 board. The older falsifiers still land on their own gates:--box-endson the rim span (160.7 mm).--open-endson containment (62 of 66 rays miss).--skip-decimate--stray-vert--lift-z--short-legs--box-ends--float-strap--narrow-hull--open-ends--slab-ends--outputInspection rounds: 2. Round 1 fixed the ends; round 2 fixed the water tint.
Framing: fill 0.794, minimum margin 0.044, with no
deviation=.Determinism: the default and
--outputruns on 5.2.1 report identical measured lines. Across binaries, only the export byte count differs, by 16 B.Contact sheet: water-trough.
It sits inside the band and is legible at card size.
Asset sheet: water-trough. Verdict: passes. Rendered alone and neutrally, the staved hull, straps, dark water and braced trestles read clearly. It sits mid-pack: above the rocket and the arm, below the hydrant and the jerry can.
Convention change (its own commit): "A head or bottom is boards, not a slab" now covers any end that closes a vessel. Watertight boards are lapped rather than seamed, and rim tests are read on the union of an end's boards.
exit-pre-sidecar(Track C): stopped, correctness findingI re-verified every claim through the real harness (
tests/smoke/run_example.py --expect-sidecar --sidecar-contains exit_pre-ok) on all three binaries.The mechanics hold:
exit_preinbpy.app.handlersexit_pre-ok--no-handler,--silent-handler--wrong-text,--write-in-main,--atexit-insteadnope/from-main/atexit-ok)--force-runAttributeErrorThe rationale is wrong. The README says
exit_pre"is the difference between a callback that runs and one that silently never does", and that code relying onatexit"is the class of bug this example exists to catch".A probe registered both callbacks and read
bpy.datain each:atexitdoes run on all three binaries. The--atexit-insteadsidecar above is its own output.atexit,bpy.data.objectsis empty (0 objects) without any error.exit_prestill sees the scene on 5.1.2 and 5.2.1 (3 objects, firstCamera).The real hazard is an exit callback that runs after Blender has freed its data and silently writes an empty manifest, not one that never runs. The assertions don't witness this either:
--atexit-insteadfails only on the marker text, so the example would pass anexit_prehandler that reads nothing, and fail anatexitthat "works".Correcting this means rewriting the README's contract paragraph. It probably also means strengthening the sidecar to carry scene data (for example an object count), with
--atexit-insteadthen failing on the content. That changes what the example witnesses, so it is left for a decision rather than folded into a polish pass.Checks
Run locally and passing:
check_exit_code_readme.pycheck_gallery_images.pycheck_falsifier_targets.py(230 falsifiers across 28 pieces)build_gallery.pywas run last. I read the generated alt text indocs/gallery/index.htmland on the water-trough detail page.🤖 Generated with Claude Code