[framework] bench2 preview emits preview_hard_zoom (three-view+iso) + CI gate (warns first) - #18
Merged
Merged
Conversation
bench2 validateslotted_din_railspeaker_pole_mount_socketPreviews: the |
…require it The four benchmark views are all diagonal isos, so axis-aligned features are hard to read. Add render_three_view (front/side/top/iso, top uses a slight tilt to avoid the up-vector collapse of a pure (0,0,1) view) and have 'bench2 preview' emit preview_hard_zoom.png for a hard example — a real three-view a reviewer can reconstruct the part from. family-pr-checks now requires it (7 files); DESIGN_SPEC / PR template / CONTRIBUTING updated to the four-render set. Signed-off-by: BenchCAD <benchcad@users.noreply.github.com>
BenchCAD
force-pushed
the
feat/preview-hard-zoom
branch
from
July 19, 2026 17:13
45c4202 to
54b1aa6
Compare
HaozheZhang6
approved these changes
Jul 22, 2026
Resolve against main's newer family-pr-checks/template/CONTRIBUTING: - family-pr-checks: main added a package whitelist (step 4) that did NOT list preview_hard_zoom.png, so requiring the file (step 3) and rejecting it as a stray file would have contradicted each other — whitelist it. - preview_hard_zoom.png is WARNED about, not required: every family PR opened before this branch is based on pre-#18 main and literally cannot generate the file, and the two families already merged to main lack it too. Hard-failing on merge would turn 11 open community PRs red at once. Step 3b warns with the exact command; flip it into step 3 once the backlog and main are backfilled. - PR template / CONTRIBUTING: keep main's added links and rules, state the four-render set with the fourth marked as warn-now/required-soon. - cli.py: widen the hard-zoom label column 300 -> 390 px; a 2-params-per-line caption overran 300 px and was clipped by the first panel (verified by re-rendering slotted_din_rail + speaker_pole_mount_socket). Signed-off-by: BenchCAD <benchcad@users.noreply.github.com>
This was referenced Jul 28, 2026
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.
Makes the heldout three-view+iso a standard, reproducible output of
bench2 preview, and starts gating on it.Why
The four benchmark views (
preview_views.png) are all diagonal isometric octants, so axis-aligned features (a hole pattern on a flat plate, a shaft crossing a duct) are hard to reconstruct. Heldout ships apreview_hard_zoom.pngfor exactly this — but it was generated by an ad-hoc script.Changes
render.py:render_three_view()— front / side / top / iso.render_isohard-codesup=(0,0,1), so a pure topfront=(0,0,1)collapses the camera basis (blank panel); the top view uses a small forward tilt (near-plan) instead.cli.py:bench2 previewalso writespreview_hard_zoom.pngfor a deterministic hard example (hard, seed 0). Label column is 390 px (not the 300 px default) — a 2-params-per-line caption overran it and was clipped by the first panel.family-pr-checks.yml:preview_hard_zoom.pngis added to the package whitelist, and a new step 3b warns when it is missing.Warn, not require (changed from the first revision)
The first revision made the file a hard requirement. That is wrong to merge as-is:
main, so it cannot generate the file — merging a hard gate would turn 11 open community PRs red at once, through no fault of their authors (5 of 16 have it: [family] articulating_monitor_arm_vesa_plate: VESA FDMI adapter plate #11/[family] round_duct_butterfly_damper: round HVAC balancing damper #12/[family] drum_tension_lug: drum-shell tension lug #15/[family] guitar_tuning_machine_head: sealed geared tuning machine #22/[family] tilting_speaker_wall_bracket: tilt-adjustable speaker wall mount #23);main(slotted_din_rail,speaker_pole_mount_socket) also lack it, somainitself would be non-conformant and any later fix PR to those families would be blocked.So step 3b emits a
::warning::with the exact command instead. Flipping it into the hard-required list (and backfillingmain) is tracked in the follow-up issue.Merge conflict resolved (this is why the PR was
dirty)mainmeanwhile rewrotefamily-pr-checks.yml, the PR template and CONTRIBUTING. Resolution keeps both sides, plus one real bug the auto-merge would have shipped:Verified
uv run bench2 previewre-run on both merged families on the merged tree: four panels, no blank/collapsed views, captions no longer clipped.speaker_pole_mount_socketis the case in point — the top plan shows the 4-hole pattern + bore that all four diagonal isos hide.Pairs with adding
family-pr-checksto the branch ruleset's required checks (separate, admin-side).