|
| 1 | +# Evaluated mesh datablock name |
| 2 | + |
| 3 | +Pathology witness for the 5.2 change in |
| 4 | +`Object.evaluated_get(depsgraph).data.name`. A cube plus SUBSURF is |
| 5 | +enough; there is no gallery still (same class as |
| 6 | +[`vse-linear-modifiers`](../vse-linear-modifiers/), |
| 7 | +[`ngon-triangulate`](../ngon-triangulate/)). |
| 8 | + |
| 9 | +Follows [`depsgraph-and-evaluated-data`](../../skills/depsgraph-and-evaluated-data/SKILL.md) |
| 10 | +and the version-gated assertion shape of |
| 11 | +[`gn-modifier-inputs`](../gn-modifier-inputs/) (per-version contract, exit |
| 12 | +0 on every matrix leg). Scaffolding matches |
| 13 | +[`cross-version-property-delete`](../cross-version-property-delete/) |
| 14 | +(`check()` returns, argparse naive-API flag, FATAL wrapper). That example |
| 15 | +does **not** version-branch, so the gate itself is copied from |
| 16 | +`gn-modifier-inputs`, not from `del`. |
| 17 | + |
| 18 | +**What it witnesses:** with source mesh named `SourceMesh`, |
| 19 | +`evaluated_get().data.name` is generic `Mesh` on 4.5.11 and 5.1.2, and |
| 20 | +`SourceMesh` on 5.2.1. `to_mesh().name` is `SourceMesh` on all three — |
| 21 | +that accessor is not the witness. SUBSURF `levels=1` on a cube is |
| 22 | +load-bearing: 8 source verts vs 26 evaluated (Catmull-Clark). Name |
| 23 | +comparison that treats inequality as "this is evaluated" is silently |
| 24 | +wrong on 5.2; nothing raises. |
| 25 | + |
| 26 | +**What failure each check would catch:** |
| 27 | + |
| 28 | +- exit 3 — source cube was not 8 verts, or evaluated data is missing |
| 29 | +- exit 4 — SUBSURF did not produce a distinct evaluated mesh (not 26 verts) |
| 30 | +- exit 5 — source datablock name is not `SourceMesh` |
| 31 | +- exit 6 — evaluated datablock name is wrong for this Blender |
| 32 | + (`--assume-distinct-names` on 5.2 lands here: names match) |
| 33 | +- exit 7 — `to_mesh().name` is not `SourceMesh` |
| 34 | + |
| 35 | +`--assume-distinct-names` is the falsifier: skip the version gate and |
| 36 | +demand the 4.5/5.1 inequality. It exits **0 on 4.5.11 and 5.1.2** (the |
| 37 | +names still differ) and **6 on 5.2.1**. That is unlike `--same-axis`, |
| 38 | +which is red on every binary. |
| 39 | + |
| 40 | +No `SMOKE_SKIP`. Every matrix leg exercises the contract. |
| 41 | + |
| 42 | +## Run |
| 43 | + |
| 44 | +```bash |
| 45 | +blender --background --python eval_mesh_datablock_name.py -- |
| 46 | +blender --background --python eval_mesh_datablock_name.py -- --assume-distinct-names |
| 47 | +``` |
| 48 | + |
| 49 | +## Exit codes |
| 50 | + |
| 51 | +Per-script sequential checks. `9` is a valid check code; there is no rule |
| 52 | +against it. |
| 53 | + |
| 54 | +| Code | Meaning | |
| 55 | +| --- | --- | |
| 56 | +| 0 | Success | |
| 57 | +| 1 | Uncaught exception (FATAL wrapper) | |
| 58 | +| 2 | argparse / usage | |
| 59 | +| 3 | Source cube missing or not 8 verts | |
| 60 | +| 4 | SUBSURF did not produce a distinct evaluated mesh | |
| 61 | +| 5 | Source datablock name is not `SourceMesh` | |
| 62 | +| 6 | Evaluated datablock name wrong for this version (`--assume-distinct-names` on 5.2) | |
| 63 | +| 7 | `to_mesh().name` is not `SourceMesh` | |
| 64 | + |
| 65 | +The `blender-smoke` workflow runs the check on Blender 5.2 LTS and 4.5 LTS |
| 66 | +(5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch). |
| 67 | +Smoke does not pass `--assume-distinct-names`. |
0 commit comments