Skip to content

Commit 3408e46

Browse files
TMHSDigitalclaude
andcommitted
fix(examples): redesign cross-version-property-delete as two stage lamps lit by their ID property
The old still showed two blank signboards on a stand. The two IDs under test are now stage-lamp housings (a lathed, finned can) hanging in U-yokes from one T-stand. After the check has run, the render path reads each housing's keys(). A lamp that still carries ["accession"] gets an emissive lens and a real SPOT light along its beam axis, which pools warm light on its floor placard. A lamp without the property keeps a dark lens and casts nothing. The placards, set in the bundled DejaVu Sans Mono, carry the code that produced each state: obj["accession"] = 42 and del obj["accession"]. The check logic is unchanged; it now runs against the lamp housings instead of plates, and its messages say "lamp". Evidence (live runs, local): - E:\Blender-Developer-Tools\.scratch\blender-5.2.1-windows-x64\blender.exe (Blender 5.2.1 LTS): check-only exit 0 (property_unset TypeError='Object.property_unset("accession") not found', keep_has=True clear_has=False). --unset-instead exits 7 (clear_has=True), and --skip-delete exits 7. - E:\Blender-Developer-Tools\.scratch\blender-4.5.11-windows-x64\blender.exe (Blender 4.5.11 LTS): check-only exit 0 with the same values; --output renders the identical scene. - Framing: fill x=0.588 y=0.794; margins l=0.062 r=0.072 b=0.050 t=0.067. - Contact sheet (docs/gallery/contact-sheets/cross-version-property-delete-contact-sheet.webp): candidate luma 0.214 / stage 0.243 / warmth +0.146 / sat 0.131, against armature-bend 0.243/0.192/-0.144/0.237, damped-track-aim 0.237/0.218/+0.105/0.178, and bmesh-gear 0.236/0.177/+0.303/0.250. Warmth is in range. Saturation is low because the housings are black powder coat by design; the lit/dark lens contrast carries the thumbnail. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1 parent a31a2b1 commit 3408e46

7 files changed

Lines changed: 210 additions & 117 deletions

File tree

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -790,7 +790,7 @@ remains, sources are gone, and the five part materials merge with every face kep
790790
</tr>
791791
<tr>
792792
<td width="46%" valign="middle">
793-
<a href="examples/cross-version-property-delete/"><img src="examples/cross-version-property-delete/preview.webp" alt="Cross-version property delete: two brass specimen tags hanging on rods from a dark studio stand — left tag with a cyan emissive enamel inlay (ID property kept), right tag with an empty grey pocket (ID property deleted)" /></a>
793+
<a href="examples/cross-version-property-delete/"><img src="examples/cross-version-property-delete/preview.webp" alt="Cross-version property delete: two stage lamps on one stand — the left lamp keeps its ID property and glows, lighting a placard reading obj[&quot;accession&quot;] = 42; the right lamp had del obj[&quot;accession&quot;] and stands dark" /></a>
794794
</td>
795795
<td valign="middle">
796796

5.15 KB
Loading
-1.11 KB
Loading

‎examples/cross-version-property-delete/README.md‎

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
# Cross-version property delete
22

3-
A pair of machined specimen tags that witnesses the custom **ID-property**
3+
A pair of stage lamps that witnesses the custom **ID-property**
44
delete contract from
55
[`cross-version-property-delete.py`](../../snippets/cross-version-property-delete.py)
66
and [`custom-properties`](../../skills/custom-properties/SKILL.md) — not the
77
snippet's `__main__`, which keys off `context.active_object` and prints
88
nothing in `--background`.
99

10-
The IDs are built with `bpy.data.objects.new`. The Keep tag still carries
11-
`["accession"] = 42` (emissive enamel). The Clear tag had `del obj["accession"]`
12-
(empty pocket). Same `del` on 4.5 LTS and 5.x; there is no version branch.
10+
The IDs are two stage-lamp housings built with `bpy.data.objects.new`. The
11+
Keep lamp still carries `["accession"] = 42`; the Clear lamp had
12+
`del obj["accession"]`. Same `del` on 4.5 LTS and 5.x; there is no version
13+
branch.
1314

1415
**What it witnesses:** `property_unset` is a TypeError on a custom ID key and
1516
does **not** remove it. `del id_block[key]` does. After factory-empty, there is
@@ -26,22 +27,25 @@ no `active_object`.
2627

2728
## Staging
2829

29-
The two tags now hang from the stand's bar on steel rods. The bar used
30-
to run 0.17 m behind the plates with nothing joining them, and the
31-
"rings" were solid discs, so the plates hung on air. The bar spans both
32-
plates, the post rises to it, and the base is as wide as what it
33-
carries. Render path only: the check reads ID properties, never
34-
geometry.
30+
Both lamps hang in U-yokes from one T-stand. The render path reads each
31+
housing's `keys()` after the check has run, so the still is driven by the
32+
checked IDs, not staged from the expected outcome. A lamp that still
33+
carries the property gets an emissive lens and a real SPOT light along its
34+
beam axis, which pools warm light on the placard below it. A lamp without
35+
the property keeps a dark lens and casts nothing. Each placard is set in
36+
the bundled DejaVu Sans Mono and shows the line of code that produced its
37+
lamp's state. Only render-side geometry (stand, yokes, lenses, placards) is
38+
added in the render path; the check reads ID properties, never geometry.
3539

3640
## Run
3741

3842
```bash
3943
blender --background --python cross_version_property_delete.py --
40-
blender --background --python cross_version_property_delete.py -- --output tags.png
44+
blender --background --python cross_version_property_delete.py -- --output lamps.png
4145
```
4246

4347
`--skip-delete` and `--unset-instead` are falsification switches: both leave
44-
the Clear plate tagged and exit 7.
48+
the Clear lamp tagged and exit 7.
4549

4650
The `--output` render path measures framing against the Layer 1 band via
4751
`examples/gallery_framing.py` (exit 10 on violation) before writing the still.
@@ -59,8 +63,8 @@ against it. `10` is the shared framing helper.
5963
| 3 | Custom ID property did not land |
6064
| 4 | `property_unset` on a custom ID key did not TypeError, or it deleted the key |
6165
| 5 | `del` did not report removal |
62-
| 6 | Keep plate lost the ID property |
63-
| 7 | Clear plate still has the ID property (`--skip-delete` / `--unset-instead` land here) |
66+
| 6 | Keep lamp lost the ID property |
67+
| 7 | Clear lamp still has the ID property (`--skip-delete` / `--unset-instead` land here) |
6468
| 10 | Gallery framing violation |
6569
| 12 | `--output` produced no file |
6670

0 commit comments

Comments
 (0)