diff --git a/ROADMAP.md b/ROADMAP.md index 7c23c1ac..07923610 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -169,7 +169,6 @@ Not committed; open subjects only. Remove a subject when it ships (CLAUDE.md § - Tighten inverted smoke canaries: assert the expected `[FAIL]` marker text (`skipped on ... should run` / `missing post-exit sidecar`) alongside wrapper exit 1, so a canary that dies for the wrong reason does not satisfy the gate - Overlapping / mirrored UV islands as a *shipped* pathology (not lightmap `--falsify`): SAT hits matching a constructed overlap, then glTF TEXCOORD survival. Deferred — `lightmap-uv-channel` already owns the zero-overlap gate. - Vendor CC0 asset fixtures (Kenney, Quaternius, ambientCG only — no aggregators) as `.glb` not `.blend`, with per-fixture provenance records mirroring the Free-Game-Dev-Assets frontmatter schema. Permitted only where the assertion is an invariant over the fixture rather than a measurement of it. Deferred pending a decision on repo weight and CI fetch policy. -- Falsification flags on shipped examples (Phases 6–8 `--skip-delete` / `--unpair-*` / `--bypass`, Phase 9 `--silent-handler` / `--wrong-text`, Phase 10 `--no-dissolve` / `--identity` / `--no-duplicate`) were proven local-Windows only — chat and `.scratch`, not CI history. Decide later whether a cron should exercise them or whether flags in the scripts are sufficient record. - `modal-operators` skill -- `invoke` returning `RUNNING_MODAL`, the `modal()` event handler, modal cancellation patterns - `usd-pipelines` skill -- USD export options, `evaluation_mode`, instancing, the USD vs glTF tradeoffs - `mathutils-patterns` skill -- `mathutils.Vector`, `Matrix`, `Quaternion`, common transforms, the `@` operator diff --git a/docs/gallery/cross-version-property-delete/index.html b/docs/gallery/cross-version-property-delete/index.html index cf612a7a..d245817d 100644 --- a/docs/gallery/cross-version-property-delete/index.html +++ b/docs/gallery/cross-version-property-delete/index.html @@ -79,7 +79,7 @@

Run

Exit codes#

Per-script sequential checks. 9 is a valid check code; there is no rule against it. 10 is the shared framing helper.

CodeMeaning
0Success
1Uncaught exception (FATAL wrapper)
2argparse / usage; also an active object existed after the data-API build
3Custom ID property did not land
4property_unset on a custom ID key did not TypeError, or it deleted the key
5del did not report removal
6Keep lamp lost the ID property
7Clear lamp still has the ID property (--skip-delete / --unset-instead land here)
8Registered-prop contract broke: attribute/property_unset failed, the prop sits on the wrong side of the 5.0 ID-property split, or scene["name"] raised KeyError (--subscript-registered on 5.0+; exits 0 on 4.5, where subscript access still works)
10Gallery framing violation
12--output produced no file
-

The blender-smoke workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the needs-5.1 PR label, or manual dispatch). Smoke does not pass --output or --unset-instead. Its catalog falsifiers are --skip-delete (expects exit 7); --subscript-registered (expects exit 8; 5.0+ only; SKIP on older Blender).

+

The blender-smoke workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the needs-5.1 PR label, or manual dispatch). Smoke does not pass --output. Its catalog falsifiers are --skip-delete (expects exit 7); --unset-instead (expects exit 7); --subscript-registered (expects exit 8; 5.0+ only; SKIP on older Blender).

Source

diff --git a/docs/gallery/gn-modifier-inputs/index.html b/docs/gallery/gn-modifier-inputs/index.html index 153209fe..c4696771 100644 --- a/docs/gallery/gn-modifier-inputs/index.html +++ b/docs/gallery/gn-modifier-inputs/index.html @@ -84,7 +84,7 @@

Run

Exit codes#

Per-script sequential checks. 9 is a valid check code; there is no rule against it. 10 is the shared framing helper.

CodeMeaning
0Success
1Uncaught exception (FATAL wrapper)
2argparse / usage
3Height input identifier missing on the tree interface
4Modifiers do not share one node_group
5Version-path write raised (--api dict on 5.2, --api rna on 4.5)
6Version-path read raised
7Readback ≠ intended height (--same-height lands here)
8Evaluated Z-extent ≠ intended height
9Evaluated mesh not sitting on z=0
10Gallery framing violation
11Evaluated extents not distinct
12--output produced no file
-

The blender-smoke workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the needs-5.1 PR label, or manual dispatch). Smoke does not pass --output or --api dict/rna. Its catalog falsifier is --same-height (expects exit 7).

+

The blender-smoke workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the needs-5.1 PR label, or manual dispatch). Smoke does not pass --output. Forcing the RNA path is not smoke-tested (it raises on 4.5 and is the default on 5.2). Its catalog falsifiers are --same-height (expects exit 7) and --api dict (expects exit 5; 5.2+ only, where the dict write raises; SKIP on older Blender, where it exits 0).

Falsification#

ProbeBinaryResult
--api dict5.2.1 LTSexit 5, TypeError: id properties not supported for this type
--api rna4.5.11 LTSexit 5, AttributeError: 'NodesModifier' object has no attribute 'properties'
--api dict5.1.2exit 0 (5.1 still takes the dict form)
--api rna5.1.2exit 5, AttributeError: 'NodesModifier' object has no attribute 'properties'
--same-height5.2.1, 5.1.2, 4.5.11exit 7, readback 1.0 != written 2.0 on SpiralStair.H2
RAIL_H = -0.5 (treads climb past the post)5.2.1, 4.5.11exit 8, evaluated Z-extent 1.934334 != height 1.0
--api auto5.2.1, 5.1.2, 4.5.11exit 0, extents 1.000 / 2.000 / 3.000
diff --git a/docs/gallery/gn-sim-fountain/index.html b/docs/gallery/gn-sim-fountain/index.html index 15c5aa1a..2f28b277 100644 --- a/docs/gallery/gn-sim-fountain/index.html +++ b/docs/gallery/gn-sim-fountain/index.html @@ -84,7 +84,7 @@

FalsifiersExit codes#

Per-script sequential checks. 10 is the shared framing helper.

CodeMeaning
0Success
1Uncaught exception (FATAL wrapper)
2argparse / usage
3Point count or frame-start state off the launch data
4Stepped frames off the closed-form arc (position or velocity)
5Direct jump did not reproduce the one-step trap
6After the cache fill, random-access frames off the arc (or fill not FINISHED)
10Gallery framing violation
12--output produced no file
-

The blender-smoke workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the needs-5.1 PR label, or manual dispatch). Smoke does not pass --output or any falsifier.

+

The blender-smoke workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the needs-5.1 PR label, or manual dispatch). Smoke does not pass --output. Its catalog falsifiers are the three in the table above: --euler (expects exit 4), --prebake-trap (expects exit 5) and --calc-to-frame (expects exit 6).

Source

diff --git a/docs/gallery/gn-zone-iterate/index.html b/docs/gallery/gn-zone-iterate/index.html index f2b6ec6d..ac1ead1e 100644 --- a/docs/gallery/gn-zone-iterate/index.html +++ b/docs/gallery/gn-zone-iterate/index.html @@ -77,7 +77,7 @@

Run

Exit codes#

Per-script sequential checks. 9 is a valid check code; there is no rule against it. 10 is the shared framing helper.

CodeMeaning
0Success
1Uncaught exception (FATAL wrapper)
2argparse / usage; also carrier mesh was rewritten
3Repeat evaluated vert/face count off closed form
4Repeat X-centers off closed form
5For Each evaluated vert/face count off closed form
6For Each Z-centers off closed form
10Gallery framing violation
12--output produced no file
-

The blender-smoke workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the needs-5.1 PR label, or manual dispatch). Smoke does not pass --output, --no-offset, or --unpair-foreach. Its catalog falsifier is --unpair-repeat (expects exit 3).

+

The blender-smoke workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the needs-5.1 PR label, or manual dispatch). Smoke does not pass --output. Its catalog falsifiers are --unpair-repeat (expects exit 3), --no-offset (expects exit 4), --unpair-foreach and --foreach-main (each expects exit 5).

Source

diff --git a/docs/gallery/usd-export-evaluation-mode/index.html b/docs/gallery/usd-export-evaluation-mode/index.html index 280341fe..cbf4501d 100644 --- a/docs/gallery/usd-export-evaluation-mode/index.html +++ b/docs/gallery/usd-export-evaluation-mode/index.html @@ -74,7 +74,7 @@

Run

Exit codes#

Per-script sequential checks. 9 is a valid check code; there is no rule against it. 10 is the shared framing helper.

CodeMeaning
0Success
1Uncaught exception (FATAL wrapper)
2argparse / usage; also base cube verts ≠ 8
3VIEWPORT TESSELLATE point/face count off closed form
4RENDER TESSELLATE point/face count or scheme off closed form
5BEST_MATCH cage point count or scheme off
6RENDER and VIEWPORT USDA point counts are identical (check), or the re-imported RENDER goblet is not denser than the VIEWPORT one (--output)
10Gallery framing violation
12--output produced no file
-

The blender-smoke workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the needs-5.1 PR label, or manual dispatch). Smoke does not pass --output or --evaluation-mode. Its catalog falsifier is --subdivision BEST_MATCH (expects exit 4).

+

The blender-smoke workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the needs-5.1 PR label, or manual dispatch). Smoke does not pass --output. Its catalog falsifiers are --subdivision BEST_MATCH (expects exit 4) and --evaluation-mode VIEWPORT (expects exit 4).

Source

diff --git a/examples/coincident-vert-weld/README.md b/examples/coincident-vert-weld/README.md index c417560d..8eca3cb4 100644 --- a/examples/coincident-vert-weld/README.md +++ b/examples/coincident-vert-weld/README.md @@ -88,4 +88,4 @@ against it. The `blender-smoke` workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch). -Smoke does not pass `--weld`. Its catalog falsifier is `--no-duplicate` (expects exit 3). +Its catalog falsifiers are `--no-duplicate` (expects exit 3) and `--weld` (expects exit 4). diff --git a/examples/cross-version-property-delete/README.md b/examples/cross-version-property-delete/README.md index 2335c7cb..e33ac6e0 100644 --- a/examples/cross-version-property-delete/README.md +++ b/examples/cross-version-property-delete/README.md @@ -90,4 +90,4 @@ against it. `10` is the shared framing helper. The `blender-smoke` workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch). -Smoke does not pass `--output` or `--unset-instead`. Its catalog falsifiers are `--skip-delete` (expects exit 7); `--subscript-registered` (expects exit 8; 5.0+ only; SKIP on older Blender). +Smoke does not pass `--output`. Its catalog falsifiers are `--skip-delete` (expects exit 7); `--unset-instead` (expects exit 7); `--subscript-registered` (expects exit 8; 5.0+ only; SKIP on older Blender). diff --git a/examples/exit-pre-sidecar/README.md b/examples/exit-pre-sidecar/README.md index 486b3bab..07b50876 100644 --- a/examples/exit-pre-sidecar/README.md +++ b/examples/exit-pre-sidecar/README.md @@ -96,4 +96,6 @@ against it. `77` is the smoke skip protocol, not a product check. The `blender-smoke` workflow runs the check on Blender 5.2 LTS (5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch) and skips on 4.5 -LTS. Smoke does not pass the falsifier flags. +LTS. Every falsifier in the table above is a catalog falsifier: the harness +must fail the sidecar for `--atexit-instead`, `--no-handler`, `--silent-handler`, +`--wrong-text` and `--write-in-main`. Smoke does not pass `--force-run`. diff --git a/examples/gn-bundle-roundtrip/README.md b/examples/gn-bundle-roundtrip/README.md index 5bacf994..fa6bd5f7 100644 --- a/examples/gn-bundle-roundtrip/README.md +++ b/examples/gn-bundle-roundtrip/README.md @@ -102,5 +102,6 @@ Measured on 4.5.11 / 5.0.1 / 5.1.2 / 5.2.1: The `blender-smoke` workflow runs the check on Blender 5.2 LTS (5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch) and skips on 4.5 -LTS. Its catalog falsifier is `--legacy-rna` (expects exit 7). Smoke does -not pass `--bypass`, `--mismatch`, `--mismatch-mark`, or `--force-run`. +LTS. Its catalog falsifiers are `--legacy-rna` (expects exit 7), `--mismatch` +(expects exit 3), `--bypass` (expects exit 4) and `--mismatch-mark` (expects +exit 5). Smoke does not pass `--force-run`. diff --git a/examples/gn-modifier-inputs/README.md b/examples/gn-modifier-inputs/README.md index 324803bf..921532a4 100644 --- a/examples/gn-modifier-inputs/README.md +++ b/examples/gn-modifier-inputs/README.md @@ -75,7 +75,7 @@ against it. `10` is the shared framing helper. The `blender-smoke` workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch). -Smoke does not pass `--output` or `--api dict`/`rna`. Its catalog falsifier is `--same-height` (expects exit 7). +Smoke does not pass `--output`. Forcing the RNA path is not smoke-tested (it raises on 4.5 and is the default on 5.2). Its catalog falsifiers are `--same-height` (expects exit 7) and `--api dict` (expects exit 5; 5.2+ only, where the dict write raises; SKIP on older Blender, where it exits 0). ## Falsification diff --git a/examples/gn-sim-fountain/README.md b/examples/gn-sim-fountain/README.md index 5b3f2b9a..b9d329a3 100644 --- a/examples/gn-sim-fountain/README.md +++ b/examples/gn-sim-fountain/README.md @@ -106,4 +106,4 @@ Per-script sequential checks. `10` is the shared framing helper. The `blender-smoke` workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch). -Smoke does not pass `--output` or any falsifier. +Smoke does not pass `--output`. Its catalog falsifiers are the three in the table above: `--euler` (expects exit 4), `--prebake-trap` (expects exit 5) and `--calc-to-frame` (expects exit 6). diff --git a/examples/gn-zone-iterate/README.md b/examples/gn-zone-iterate/README.md index 308f1d77..4289cfb4 100644 --- a/examples/gn-zone-iterate/README.md +++ b/examples/gn-zone-iterate/README.md @@ -69,4 +69,4 @@ against it. `10` is the shared framing helper. The `blender-smoke` workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch). -Smoke does not pass `--output`, `--no-offset`, or `--unpair-foreach`. Its catalog falsifier is `--unpair-repeat` (expects exit 3). +Smoke does not pass `--output`. Its catalog falsifiers are `--unpair-repeat` (expects exit 3), `--no-offset` (expects exit 4), `--unpair-foreach` and `--foreach-main` (each expects exit 5). diff --git a/examples/ngon-triangulate/README.md b/examples/ngon-triangulate/README.md index 37520ee4..800e2f57 100644 --- a/examples/ngon-triangulate/README.md +++ b/examples/ngon-triangulate/README.md @@ -110,4 +110,4 @@ against it. The `blender-smoke` workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch). -Smoke does not pass `--skip-triangulate`. Its catalog falsifier is `--no-dissolve` (expects exit 3). +Its catalog falsifiers are `--no-dissolve` (expects exit 3) and `--skip-triangulate` (expects exit 4). diff --git a/examples/unapplied-scale-gltf/README.md b/examples/unapplied-scale-gltf/README.md index f1557686..327ef111 100644 --- a/examples/unapplied-scale-gltf/README.md +++ b/examples/unapplied-scale-gltf/README.md @@ -92,4 +92,4 @@ against it. The `blender-smoke` workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch). -Smoke does not pass `--bake`. Its catalog falsifier is `--identity` (expects exit 3). +Its catalog falsifiers are `--identity` (expects exit 3) and `--bake` (expects exit 4). diff --git a/examples/usd-export-evaluation-mode/README.md b/examples/usd-export-evaluation-mode/README.md index ef426bf5..0bbf0ba6 100644 --- a/examples/usd-export-evaluation-mode/README.md +++ b/examples/usd-export-evaluation-mode/README.md @@ -71,4 +71,4 @@ against it. `10` is the shared framing helper. The `blender-smoke` workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch). -Smoke does not pass `--output` or `--evaluation-mode`. Its catalog falsifier is `--subdivision BEST_MATCH` (expects exit 4). +Smoke does not pass `--output`. Its catalog falsifiers are `--subdivision BEST_MATCH` (expects exit 4) and `--evaluation-mode VIEWPORT` (expects exit 4). diff --git a/tests/smoke/catalog.json b/tests/smoke/catalog.json index 5d2b2df2..45884786 100644 --- a/tests/smoke/catalog.json +++ b/tests/smoke/catalog.json @@ -15,7 +15,7 @@ {"name": "shader-node-group", "script": "examples/shader-node-group/shader_node_group.py", "falsifiers": [{"args": ["--same-tint"], "expect_exit": 6}]}, {"name": "temp-override-join", "script": "examples/temp-override-join/temp_override_join.py", "falsifiers": [{"args": ["--no-override"], "expect_exit": 3}]}, {"name": "gn-instance-grid", "script": "examples/gn-instance-grid/gn_instance_grid.py", "falsifiers": [{"args": ["--one-cell"], "expect_exit": 4}]}, - {"name": "gn-modifier-inputs", "script": "examples/gn-modifier-inputs/gn_modifier_inputs.py", "falsifiers": [{"args": ["--same-height"], "expect_exit": 7}]}, + {"name": "gn-modifier-inputs", "script": "examples/gn-modifier-inputs/gn_modifier_inputs.py", "falsifiers": [{"args": ["--same-height"], "expect_exit": 7}, {"args": ["--api", "dict"], "expect_exit": 5, "min_version": "5.2"}]}, {"name": "shape-key-blend", "script": "examples/shape-key-blend/shape_key_blend.py", "falsifiers": [{"args": ["--zero-blend"], "expect_exit": 5}]}, {"name": "curve-bevel-arc", "script": "examples/curve-bevel-arc/curve_bevel_arc.py", "falsifiers": [{"args": ["--no-caps"], "expect_exit": 6}]}, {"name": "compositor-glare", "script": "examples/compositor-glare/compositor_glare.py", "falsifiers": [{"args": ["--threshold-high"], "expect_exit": 3}]}, @@ -57,15 +57,15 @@ {"name": "lightmap-uv-channel", "script": "examples/lightmap-uv-channel/lightmap_uv_channel.py", "falsifiers": [{"args": ["--overlap-islands"], "expect_exit": 7}]}, {"name": "socket-attach-points", "script": "examples/socket-attach-points/socket_attach_points.py", "falsifiers": [{"args": ["--skip-mpi"], "expect_exit": 3}]}, {"name": "vertex-color-ao", "script": "examples/vertex-color-ao/vertex_color_ao.py", "falsifiers": [{"args": ["--uniform-hemisphere"], "expect_exit": 3}]}, - {"name": "cross-version-property-delete", "script": "examples/cross-version-property-delete/cross_version_property_delete.py", "falsifiers": [{"args": ["--skip-delete"], "expect_exit": 7}, {"args": ["--subscript-registered"], "expect_exit": 8, "min_version": "5.0"}]}, - {"name": "usd-export-evaluation-mode", "script": "examples/usd-export-evaluation-mode/usd_export_evaluation_mode.py", "falsifiers": [{"args": ["--subdivision", "BEST_MATCH"], "expect_exit": 4}]}, - {"name": "gn-zone-iterate", "script": "examples/gn-zone-iterate/gn_zone_iterate.py", "falsifiers": [{"args": ["--unpair-repeat"], "expect_exit": 3}]}, - {"name": "gn-sim-fountain", "script": "examples/gn-sim-fountain/gn_sim_fountain.py", "falsifiers": [{"args": ["--unpair"], "expect_exit": 3}]}, + {"name": "cross-version-property-delete", "script": "examples/cross-version-property-delete/cross_version_property_delete.py", "falsifiers": [{"args": ["--skip-delete"], "expect_exit": 7}, {"args": ["--subscript-registered"], "expect_exit": 8, "min_version": "5.0"}, {"args": ["--unset-instead"], "expect_exit": 7}]}, + {"name": "usd-export-evaluation-mode", "script": "examples/usd-export-evaluation-mode/usd_export_evaluation_mode.py", "falsifiers": [{"args": ["--subdivision", "BEST_MATCH"], "expect_exit": 4}, {"args": ["--evaluation-mode", "VIEWPORT"], "expect_exit": 4}]}, + {"name": "gn-zone-iterate", "script": "examples/gn-zone-iterate/gn_zone_iterate.py", "falsifiers": [{"args": ["--unpair-repeat"], "expect_exit": 3}, {"args": ["--no-offset"], "expect_exit": 4}, {"args": ["--unpair-foreach"], "expect_exit": 5}, {"args": ["--foreach-main"], "expect_exit": 5}]}, + {"name": "gn-sim-fountain", "script": "examples/gn-sim-fountain/gn_sim_fountain.py", "falsifiers": [{"args": ["--unpair"], "expect_exit": 3}, {"args": ["--euler"], "expect_exit": 4}, {"args": ["--prebake-trap"], "expect_exit": 5}, {"args": ["--calc-to-frame"], "expect_exit": 6}]}, { "name": "gn-bundle-roundtrip", "script": "examples/gn-bundle-roundtrip/gn_bundle_roundtrip.py", "min_version": "5.0", - "falsifiers": [{"args": ["--legacy-rna"], "expect_exit": 7}] + "falsifiers": [{"args": ["--legacy-rna"], "expect_exit": 7}, {"args": ["--mismatch"], "expect_exit": 3}, {"args": ["--bypass"], "expect_exit": 4}, {"args": ["--mismatch-mark"], "expect_exit": 5}] }, { "name": "exit-pre-sidecar", @@ -73,11 +73,11 @@ "min_version": "5.1", "expect_sidecar": "$OUT/exit-pre-sidecar.sidecar", "sidecar_contains": "exit_pre-ok", - "falsifiers": [{"args": ["--atexit-instead"], "expect_sidecar_fail": true}] + "falsifiers": [{"args": ["--atexit-instead"], "expect_sidecar_fail": true}, {"args": ["--no-handler"], "expect_sidecar_fail": true}, {"args": ["--silent-handler"], "expect_sidecar_fail": true}, {"args": ["--wrong-text"], "expect_sidecar_fail": true}, {"args": ["--write-in-main"], "expect_sidecar_fail": true}] }, - {"name": "ngon-triangulate", "script": "examples/ngon-triangulate/ngon_triangulate.py", "falsifiers": [{"args": ["--no-dissolve"], "expect_exit": 3}]}, - {"name": "unapplied-scale-gltf", "script": "examples/unapplied-scale-gltf/unapplied_scale_gltf.py", "falsifiers": [{"args": ["--identity"], "expect_exit": 3}]}, - {"name": "coincident-vert-weld", "script": "examples/coincident-vert-weld/coincident_vert_weld.py", "falsifiers": [{"args": ["--no-duplicate"], "expect_exit": 3}]}, + {"name": "ngon-triangulate", "script": "examples/ngon-triangulate/ngon_triangulate.py", "falsifiers": [{"args": ["--no-dissolve"], "expect_exit": 3}, {"args": ["--skip-triangulate"], "expect_exit": 4}]}, + {"name": "unapplied-scale-gltf", "script": "examples/unapplied-scale-gltf/unapplied_scale_gltf.py", "falsifiers": [{"args": ["--identity"], "expect_exit": 3}, {"args": ["--bake"], "expect_exit": 4}]}, + {"name": "coincident-vert-weld", "script": "examples/coincident-vert-weld/coincident_vert_weld.py", "falsifiers": [{"args": ["--no-duplicate"], "expect_exit": 3}, {"args": ["--weld"], "expect_exit": 4}]}, {"name": "bake-normal-high-to-low", "script": "examples/bake-normal-high-to-low/bake_normal_high_to_low.py", "falsifiers": [{"args": ["--flat-source"], "expect_exit": 5}]}, {"name": "vse-linear-modifiers", "script": "examples/vse-linear-modifiers/vse_linear_modifiers.py", "falsifiers": [{"args": ["--assume-present"], "expect_exit": 4, "min_version": "5.2"}]}, {"name": "gn-socket-rename", "script": "examples/gn-socket-rename/gn_socket_rename.py", "falsifiers": [{"args": ["--legacy-ids"], "expect_exit": 5, "min_version": "5.2"}]},