Skip to content

feat: target Blender 5.2 LTS and witness NodesModifier input writes - #122

Merged
TMHSDigital merged 3 commits into
mainfrom
feat/blender-52-lts-targeting
Sep 9, 2026
Merged

feat: target Blender 5.2 LTS and witness NodesModifier input writes#122
TMHSDigital merged 3 commits into
mainfrom
feat/blender-52-lts-targeting

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

Summary

  • Retarget the repo to Blender 5.2 LTS primary, 5.1 prior stable, 4.5 LTS fallback. Remove the stale “5.2 sweep planned July 2026” strings.
  • Close the gallery witness gap: new examples/gn-modifier-inputs/ writes a Geometry Nodes Float input through the version-appropriate path, reads it back, and asserts evaluated Z-extent == 1 / 2 / 3. The 5.1 dict form is still taught as correct on 4.5/5.1; 5.2 uses mod.properties.inputs.Socket_1.value and the dict form raises TypeError rather than silently no-opping.
  • PR smoke matrix is 5.2 + 4.5 LTS. 5.1 runs on the weekly cron only (one workflow, conditional matrix).

This first CI run includes an intentional 5.2 canary (exit 1 after Print Blender version). The 5.2 job must go red. A no-op download is indistinguishable from a pass. After the red run I will revert the canary and wait for green.

Witness (the point of the PR)

Shared GN tree, identifier Socket_1, three modifier copies, scales 1 / 2 / 3. Closed form: 1 m cube × S, lift S/2, evaluated Z-extent == S, zmin == 0.

Falsification — live-run-proven

Probe Binary Exit Error
--api auto .scratch/blender-5.2.1-windows-x64/blender.exe reports Blender 5.2.1 LTS (hash 9e2066aef7ef) 0 extents 1.000 / 2.000 / 3.000
--api dict same 5.2.1 LTS 5 TypeError: bpy_struct[key] = val: id properties not supported for this type
--api auto .scratch/blender-4.5.11-windows-x64/blender.exe reports Blender 4.5.11 LTS (hash 4db51e9d1e1e) 0 extents 1.000 / 2.000 / 3.000
--api rna same 4.5.11 LTS 5 AttributeError: 'NodesModifier' object has no attribute 'properties'
--api auto .scratch/blender-5.1.2-windows-x64/blender.exe reports Blender 5.1.2 (hash ec6e62d40fa9) 0 dict path, extents 1/2/3

If either form were hardcoded, one of those red runs would have been green. They were not.

CI download URL — live-run-proven

Python urllib against https://download.blender.org/release/Blender5.2/ (User-Agent set; bare urllib got 403). Matches in the listing: blender-5.2.0-linux-x64.tar.xz, blender-5.2.1-linux-x64.tar.xz. sort -V | tail -1 equivalent resolves:

https://download.blender.org/release/Blender5.2/blender-5.2.1-linux-x64.tar.xz

Framing / contact sheet

  • Render path on 5.2.1 LTS Cycles 32 spp, check_framing live-run-proven: fill y=0.806 (band 0.70–0.90), margins min=0.028, no edge touch.
  • Contact sheet: docs/gallery/contact-sheets/gn-modifier-inputs-contact-sheet.webp (candidate | armature-bend | damped-track-aim | bmesh-gear).
  • Mean Rec.709 luma — live-run-proven: candidate 61.6, armature-bend 71.08, damped-track-aim 43.9, bmesh-gear 77.71. Candidate sits in the calibration cluster; stage is dark; 1/2/3 stairs are thumbnail-legible. Not an asset-type example (no asset sheet).
  • Hero webp 9924 bytes (Pillow RGB quality 85). Generated <img alt> on the card is the full teaches string ending mod.properties.inputs.Socket_1.value. — no teaches.split(".")[0] truncation, no &lt;identifier&gt;. Witnesses callout matches witnessesFix character-for-character — inspection-only of generated HTML after python scripts/build_gallery.py.

Targeting / matrix — mixed

  • Skill geometry-nodes-python now shows both dict and RNA paths, TypeError vs AttributeError — inspection-only of the skill text; behavior proven by the example runs above.
  • blender-smoke.yml conditional matrix: schedule["5.2","5.1","4.5"], else ["5.2","4.5"]inspection-only until this PR’s jobs run.
  • 5.2 canary is in this SHA on purpose.

Untested-teaching surface (count only, no fixes)

Skills/snippets that teach a load-bearing API no example asserts:

  1. NodeSocketBundle / Combine+Separate Bundle
  2. For Each Element zone
  3. Repeat Zone (GeometryNodeRepeatInput/Output)
  4. bpy.app.handlers.exit_pre (5.1)
  5. snippet usd-export-evaluation-mode.py
  6. snippet cross-version-property-delete.py

Template-only (templates exist, no gallery example): addon-scaffolding / register_classes_factory, ui-panels, custom-properties / PointerProperty, bl-info-migration.

6 untested skill/snippet contracts + 4 template-only. foreach_get has only a weak token hit. This PR closed the NodesModifier input gap; the rest stay for later.

Test plan

  • 5.2 smoke job goes red on the canary (this SHA). Record the job URL and the resolved Downloading https://…blender-5.2.1-linux-x64.tar.xz line.
  • Revert canary, push.
  • 5.2 + 4.5 smoke green on the post-canary SHA. Confirm binary versions in the logs.
  • Validate + drift-check green. Socket Security Project Report + Pull Request Alerts green (do not merge while pending).
  • Squash-merge with feat: title, delete branch.
  • Post-merge: blender-smoke.yml has no push trigger — cite PR-head smoke, not merge SHA. Confirm release.yml fired and tagged (expect v0.47.0). If nothing fired, report it.

Evidence labels

Claims above are marked live-run-proven or inspection-only. Smoke matrix resolution and the 5.2 canary red run are not proven until CI on this PR.

CI was blind to the 5.2 removal of dict assignment on Geometry Nodes modifiers because no example asserted the write. Teach both sides of the split and fail the check if the value does not land.

Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions github-actions Bot added skills documentation Improvements or additions to documentation ci labels Sep 9, 2026
The 5.2 job downloaded blender-5.2.1-linux-x64.tar.xz, printed Blender 5.2.1 LTS, then exited 1 on the injected canary. The matrix leg executes.

Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@TMHSDigital

Copy link
Copy Markdown
Owner Author

5.2 canary — live-run-proven (then reverted)

Job (SHA 864fbf7): https://github.com/TMHSDigital/Blender-Developer-Tools/actions/runs/34401782403/job/102635164570

  • Listing https://download.blender.org/release/Blender5.2/
  • Downloading https://download.blender.org/release/Blender5.2/blender-5.2.1-linux-x64.tar.xz
  • Print Blender version: Blender 5.2.1 LTS
  • Canary step: ##[error]intentional 5.2 canary; revert after the red run — job conclusion failure
  • Twin job Blender 4.5 smoke succeeded on the same run (https://github.com/TMHSDigital/Blender-Developer-Tools/actions/runs/34401782403/job/102635165199), so the new example already passed 4.5 CI before the canary came out.

Canary removed in 773e0e1. Waiting on 5.2+4.5 green + Socket.

5.2 COLOR strips get readonly width/height from the scene resolution at new_effect. Creating at factory 1920 then rendering 96 made 0.36-scaled cells cover the frame so the mosaic pixel check sampled amber instead of crimson.

Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@TMHSDigital

Copy link
Copy Markdown
Owner Author

5.2 smoke after canary revert — real failure, then fix

Post-canary SHA 773e0e1: 4.5 smoke success, 5.2 smoke failed at vse-cut-list --check-pixels (exit 12).

live-run-proven (.scratch/blender-5.2.1-windows-x64/blender.exe = Blender 5.2.1 LTS):

  • TL sampled (0.949, 0.62, 0.102) (C amber) instead of crimson (0.85, 0.1, 0.22). Same numbers as CI.
  • 4.5.11 and 5.1.2 pixel checks still pass with TL crimson.
  • Cause: 5.2 COLOR strips bake readonly width/height from the scene render resolution at new_effect. CI creates at factory 1920 then renders 96×54; scale 0.36 of 1920 covers the tiny frame; C (ch 4) paints everything. 4.5/5.1 COLOR has no intrinsic size — scale is a fraction of the output frame.
  • Probe: a lone COLOR strip with scale 0.36 does transform on 5.2; the bug is media size vs later output size.

Fix in 036cd19: set 96×54 before build_cut_list in check_pixels, and assert A.width, A.height == (96, 54) on 5.2. Local 5.2.1 pixels now: TL(0.851, 0.102, 0.22) TR(0.059, 0.749, 0.8) BL(0.949, 0.62, 0.102) BR(blend)(0.341, 0.349, 0.463) exit 0.

gn-modifier-inputs had already passed on 5.2 CI before this step.

@TMHSDigital
TMHSDigital merged commit e5b1642 into main Sep 9, 2026
9 checks passed
@TMHSDigital
TMHSDigital deleted the feat/blender-52-lts-targeting branch September 9, 2026 20:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci documentation Improvements or additions to documentation skills

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant