Skip to content

fix(skills): document that registered props are not ID properties on 5.0+ - #420

Merged
TMHSDigital merged 1 commit into
mainfrom
fix/registered-props-5x
Oct 5, 2026
Merged

TMHSDigital merged 1 commit into
mainfrom
fix/registered-props-5x

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

Closes #354.

Problem

On 4.x a registered bpy.props value was stored as an ID property. On 5.0+ it isn't, so the 4.x idioms break with a KeyError or ValueError, or silently miss the property. The custom-properties skill called its operations "version-stable" and never mentioned this.

Measured

Live run (--factory-startup), bpy.types.Scene.p = IntProperty(default=1); scene.p = 5. Binaries report 4.5.11 LTS, 5.1.2 and 5.2.1 LTS:

Access 4.5.11 5.1.2 5.2.1
scene.p 5 5 5
scene["p"] 5 KeyError KeyError
scene.get("p") 5 None None
"p" in scene.keys() True False False
del scene["p"] resets to 1 KeyError KeyError
path_resolve('["p"]') (driver path) 5 ValueError ValueError
path_resolve("p"), property_unset, is_property_set ok ok ok
bl_system_properties_get absent present present

A .blend saved by 4.5.11 (value 9) opens in 5.2.1 with scene.p == 9.

Change

  • custom-properties:
  • drivers-and-app-handlers: data_path now distinguishes '["custom"]' (an ID property) from a registered prop's plain name.
  • snippets/cross-version-property-delete.py: warns about the reverse case (32 lines).
  • examples/cross-version-property-delete:
    • new check_registered(), run on every version: asserts which side of the split the prop sits on, that attribute access and plain paths work, and that property_unset resets it; exit 8;
    • new falsifier --subscript-registered, which reads scene["bdt_counter"] the 4.x way;
    • catalog row gets that second falsifier with min_version: "5.0";
    • README exit table, witness text and smoke line updated; gallery regenerated.

Evidence (live run, three versions)

Run 4.5.11 5.1.2 5.2.1
default 0 (in_keys=True split=False) 0 (in_keys=False split=True) 0 (same as 5.1.2)
--subscript-registered 0 (subscript still works; catalog records SKIP via min_version) 8 (KeyError … read it as scene.bdt_counter) 8
--skip-delete (existing) 7 7 7
  • check_smoke_catalog, check_exit_code_readme, check_falsifier_targets, check_skill_refs and check_site_links pass.
  • Not run: the --output render path. check_registered() touches only a temporary Scene property, which it unregisters in finally, and the still is driven by the lamps' keys(), which are unchanged.

🤖 Generated with Claude Code

…5.0+

On 4.x a registered bpy.props value was stored as an ID property, so
scene["my_prop"], "my_prop" in scene.keys(), del scene["my_prop"] and a
'["my_prop"]' driver path all reached it. On 5.0+ it lives in a separate
system-property group and every one of those raises KeyError/ValueError
or silently misses it (measured on 4.5.11, 5.1.2, 5.2.1). Legacy add-on
code and AI-written code break here without a clear error, and the
custom-properties skill called its operations "version-stable".

custom-properties now has the measured table and the branch-free recipe
(attribute access, property_unset, is_property_set, plain data path),
plus a common-mistakes entry; drivers-and-app-handlers distinguishes
'["custom"]' from a registered prop's plain path; the delete snippet
warns that del id["registered"] raises on 5.0+.

examples/cross-version-property-delete proves it in CI: a new
registered-prop check (exit 8) runs on every version, and a new
--subscript-registered falsifier (min_version 5.0) reads the prop the 4.x
way and must exit 8.

Closes #354

Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added skills snippets examples Runnable smoke-gated examples under examples/ documentation Improvements or additions to documentation labels Oct 5, 2026
@TMHSDigital

Copy link
Copy Markdown
Owner Author

CI evidence before merge: all checks pass ( 13 pass ). Blender Smoke on PR head: Blender 5.2.2 LTS / Blender 4.5.14 LTS. Summaries (happy path; falsifiers) per leg: 141 passed, 3 skipped, 0 failed;136 passed, 7 skipped, 0 failed;143 passed, 1 skipped, 0 failed;143 passed, 0 skipped, 0 failed;

@TMHSDigital
TMHSDigital merged commit b612f3a into main Oct 5, 2026
13 checks passed
@TMHSDigital
TMHSDigital deleted the fix/registered-props-5x branch October 5, 2026 00:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation examples Runnable smoke-gated examples under examples/ skills snippets

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills: nothing covers the 5.0 split between bpy.props values and ID properties (id['prop'] / id.keys() break silently)

1 participant