A pair of machined specimen tags that witnesses the custom ID-property
delete contract from
cross-version-property-delete.py
and custom-properties — not the
snippet's __main__, which keys off context.active_object and prints
nothing in --background.
The IDs are built with bpy.data.objects.new. The Keep tag still carries
["accession"] = 42 (emissive enamel). The Clear tag had del obj["accession"]
(empty pocket). Same del on 4.5 LTS and 5.x; there is no version branch.
What it witnesses: property_unset is a TypeError on a custom ID key and
does not remove it. del id_block[key] does. After factory-empty, there is
no active_object.
What failure each check would catch:
- exit 2 — someone set an active object; the snippet
__main__would have been the only path - exit 3 — the ID property never landed
- exit 4 —
property_unsetremoved the key or failed to raise - exit 7 —
deldid not run (--skip-delete/--unset-insteadfalsify this: measuredclear_has=True)
blender --background --python cross_version_property_delete.py --
blender --background --python cross_version_property_delete.py -- --output tags.png--skip-delete and --unset-instead are falsification switches: both leave
the Clear plate tagged and exit 7.
The --output render path measures framing against the Layer 1 band via
examples/gallery_framing.py (exit 10 on violation) before writing the still.
Per-script sequential checks. 9 is a valid check code; there is no rule
against it. 10 is the shared framing helper.
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Uncaught exception (FATAL wrapper) |
| 2 | argparse / usage; also an active object existed after the data-API build |
| 3 | Custom ID property did not land |
| 4 | property_unset on a custom ID key did not TypeError, or it deleted the key |
| 5 | del did not report removal |
| 6 | Keep plate lost the ID property |
| 7 | Clear plate still has the ID property (--skip-delete / --unset-instead land here) |
| 10 | Gallery 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, --skip-delete, or --unset-instead.