You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 275e23d
Browse filesBrowse the repository at this point in the historyBrowse files
feat(smoke): every catalog row re-proves a falsifier on every smoke run
Falsifiers were proven once, by hand, in a PR body; nothing re-ran them, so a
check that lost its ability to fail stayed green forever.
Harness:
- catalog rows carry `falsifiers`: {"args": [...], "expect_exit": N}, or
{"args": [...], "expect_sidecar_fail": true} where the post-exit sidecar
check owns the contract (exit-pre-sidecar).
- run_example.py --expect-exit N / --expect-sidecar-fail; protocol.classify
passes a falsifier only on exactly N (not 0, not another check's code, not
1, never 77; a legal skip stays a skip).
- run_catalog.py runs each row's falsifiers after its happy path (all rows,
all failures listed; --no-falsifiers for local iteration).
- summarize.py tables falsifiers separately; a falsifier PASS never counts
toward the "at least one example passed" rule; any falsifier FAIL is red.
- check_smoke_catalog.py validates the schema (unknown keys rejected so a typo
cannot silently disable a falsifier) and requires >=1 falsifier per row.
- blender-smoke.yml: weekly cron on 5.2 also runs the full showcase sweep
(check_falsifier_targets.py --run); job timeout 45 -> 75 min.
Catalog: 142/142 rows seeded from README falsifier tables (78), exit-table rows
naming the flag (56) and 8 picked by hand. Four examples only had a
render-path visual falsify, so each gained a check-path flag reusing the same
defect: lightmap-uv-channel --overlap-islands (7), vertex-color-ao
--uniform-hemisphere (3), socket-attach-points --skip-mpi (3),
modular-kit-snap --seam-gap (5). tests/smoke/check_extension_template.py now
exits 3 (register) / 4 (unregister) and takes --skip-unregister (4). READMEs,
CLAUDE.md, CONTRIBUTING and docs/new-example-prompt.md document the field;
gallery pages regenerated for the four edited scripts.
Proof (local, .scratch/blender-5.2.1-windows-x64, 5.2.1 LTS):
- all 142 seeded falsifiers observed exiting exactly as declared (one, the
sidecar falsifier, exits 0 and fails the sidecar check as declared).
- run_catalog on a 4-row sub-catalog: 4 happy PASS + 4 falsifier PASS.
- probe: anvil declared 8 instead of 9 -> "[FAIL] anvil [falsifier
--skip-decimate]: falsifier exited 9, expected 8", exit 1.
- test_harness: 33 tests OK (exact-exit, exit-0, other-code, crash,
forbidden codes, legal skip, sidecar falsifier, catalog wiring).
Closes#320
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/gallery/lightmap-uv-channel/index.html
+42-19Lines changed: 42 additions & 19 deletions
Original file line number
Diff line number
Diff line change
@@ -72,20 +72,21 @@ <h1>Lightmap UV Channel</h1>
72
72
<p><strong>Render as proof:</strong> the cart beside its enlarged UV1 atlas display — a slate face in a walnut frame on a plinth with a brass <code>UV1 LIGHTMAP</code> plate, a faint quarter grid marking the [0,1] square the bounds check holds — the Bed's packed lightmap built from live UV data, so a change in the atlas moves the board geometry. The falsification variant (<code>--falsify</code>) translates the second-largest island onto the largest: a big emissive-red island visibly stacked over the atlas (15 SAT hits in the check probe). The render path also gates the asset itself through <code>examples/gallery_asset_quality.py</code> (naming, material variation, edge treatment — exit 11): 24 named parts, 5 materials, right-angle share 0.138. Wood, canvas and iron carry procedural grain, weave and pitting over Object coordinates; no check reads a material.</p>
73
73
<h2id="run">Run<aclass="anchor" href="#run" aria-label="Link to this section">#</a></h2>
<h2id="exit-codes">Exit codes<aclass="anchor" href="#exit-codes" aria-label="Link to this section">#</a></h2>
78
79
<p>Per-script sequential checks. <code>9</code> is a valid check code; there is no rule against it. <code>10</code> is the shared framing helper. <code>11</code> is the shared asset-quality helper.</p>
79
-
<divclass="table-wrap"><table><thead><tr><thscope="col">Code</th><thscope="col">Meaning</th></tr></thead><tbody><tr><td>0</td><td>Success</td></tr><tr><td>1</td><td>Uncaught exception (FATAL wrapper)</td></tr><tr><td>2</td><td>argparse / usage</td></tr><tr><td>3</td><td>UV layer names ≠ UV0 / UV1</td></tr><tr><td>4</td><td>UVMap / UV1 render/clone flags wrong after re-assert</td></tr><tr><td>5</td><td>Channel 0 (UV0) touched by the UV1 unwrap</td></tr><tr><td>6</td><td>UV1 loops outside <code>[0,1]</code></td></tr><tr><td>7</td><td>SAT overlap self-test failed, or UV1 triangle pairs overlap</td></tr><tr><td>8</td><td>Min island distance below margin</td></tr><tr><td>9</td><td>Part is not watertight</td></tr><tr><td>10</td><td>Gallery framing violation; also <code>--output</code> produced no file</td></tr><tr><td>11</td><td>Gallery asset-quality violation</td></tr></tbody></table></div>
80
-
<p>The <code>blender-smoke</code> workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the <code>needs-5.1</code> PR label, or manual dispatch). Smoke does not pass <code>--output</code> or <code>--falsify</code>.</p>
80
+
<divclass="table-wrap"><table><thead><tr><thscope="col">Code</th><thscope="col">Meaning</th></tr></thead><tbody><tr><td>0</td><td>Success</td></tr><tr><td>1</td><td>Uncaught exception (FATAL wrapper)</td></tr><tr><td>2</td><td>argparse / usage</td></tr><tr><td>3</td><td>UV layer names ≠ UV0 / UV1</td></tr><tr><td>4</td><td>UVMap / UV1 render/clone flags wrong after re-assert</td></tr><tr><td>5</td><td>Channel 0 (UV0) touched by the UV1 unwrap</td></tr><tr><td>6</td><td>UV1 loops outside <code>[0,1]</code></td></tr><tr><td>7</td><td>SAT overlap self-test failed, or UV1 triangle pairs overlap (<code>--overlap-islands</code> lands here)</td></tr><tr><td>8</td><td>Min island distance below margin</td></tr><tr><td>9</td><td>Part is not watertight</td></tr><tr><td>10</td><td>Gallery framing violation; also <code>--output</code> produced no file</td></tr><tr><td>11</td><td>Gallery asset-quality violation</td></tr></tbody></table></div>
81
+
<p>The <code>blender-smoke</code> workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the <code>needs-5.1</code> PR label, or manual dispatch). Smoke does not pass <code>--output</code> or <code>--falsify</code>. Its catalog falsifier is <code>--overlap-islands</code> (expect exit 7): the same island drag as <code>--falsify</code>, applied before the SAT scan.</p>
p.add_argument(<spanclass="s">"--output"</span>, default=<spanclass="k">None</span>, help=<spanclass="s">"optional: render a still PNG here"</span>)
0 commit comments