Record converter keyword collision fix

This commit is contained in:
Meta Vens 2026-05-04 20:06:14 +01:00
commit 488b207c5c
6 changed files with 55 additions and 6 deletions

View file

@ -75,6 +75,7 @@ current VibeGeometry toolchain branch, and applies the patches stored in:
patches/geometry-script/0001-fix-nested-tree-group-references-on-blender-4.patch
patches/geometry-script/0002-Port-node-tree-conversion-operator.patch
patches/geometry-script/0003-Tolerate-Blender-menu-socket-defaults.patch
patches/geometry-script/0004-Avoid-duplicate-converter-keywords-for-socket-backed-properties.patch
```
`external/` is intentionally ignored by the VibeGeometry repository. The clone
@ -96,6 +97,8 @@ This is the branch VibeGeometry should use locally. It contains:
- a Blender 5.1 port of the historical `nodes_to_script` converter prototype
- a Blender 5.1 menu-socket default tolerance fix so group construction does
not fail when `NodeSocketMenu` enum items are not populated yet
- a converter duplicate-key fix for nodes that expose one control as both an
RNA property and a linkable input socket, such as `FunctionNodeAxesToRotation`
The converter adds:
@ -115,6 +118,8 @@ Current acceptance:
- Converter runs in Blender 5.1.1.
- Generated drafts compile as Python for the tested groups.
- The full 176-node `Field Value` source group emits a 179-line draft script.
- IRCSS `GenerateArc` and `MakeStairs` now emit compiling drafts instead of
duplicate `primary_axis` keyword syntax errors.
- Generated text is a bootstrap draft, not doctrine-quality final code or style
guidance.

View file

@ -105,13 +105,25 @@ the source and translation, then compare sorted evaluated vertices.
path exposed the previous-geometry state as `None`.
- `GenerateWindowsFromEdges` uses `For Each Geometry Element` zones.
- `Pole` uses repeat zones and geometry-node gizmos.
- `GenerateArc` and `MakeStairs` exposed a `nodes_to_script` converter bug:
duplicated keyword arguments for `primary_axis`.
- `WindowBeams` depends on specific upstream edge/curve inputs. A synthetic
harness could verify its secondary base-point output, but the main beam mesh
stayed empty for both source and translation. That was rejected as an
acceptance target.
## Toolchain Fixes From This Pass
- `GenerateArc` and `MakeStairs` originally exposed a `nodes_to_script`
converter bug: duplicated keyword arguments for `primary_axis`.
- The Geometry Script fork now drops duplicate property keywords when a node
exposes the same control as a linkable input socket.
- Expanded IRCSS converter smoke now compiles drafts for `GenerateArc`,
`MakeStairs`, `GenerateStairCase`, `GenerateBricks`,
`GenerateMedialAxisRectangleTopology`, `GenerateWindowsFromEdges`, `Pole`,
`Round Bottom`, and `WindowBeams`.
- These are still converter drafts, not accepted translations. Repeat zones,
foreach zones, closures, gizmos, dependency groups, and behavioral harnesses
still decide what can be trusted.
## Lessons
- City-scale graphs are hierarchies of organs. Start with reusable spines,

View file

@ -46,8 +46,10 @@ Accepted corpus families so far:
Current frontier: IRCSS French Houses city-scale graph work. The accepted
footholds are `MakeSpiral` and `PointyGothicCone`. Mapped blockers are
repeat-zone feedback state, repeat `Top` boolean outputs, foreach zones, gizmo
nodes, `nodes_to_script` duplicate-key failures around axes-to-rotation, and a
rejected empty-output harness for `WindowBeams`.
nodes, and a rejected empty-output harness for `WindowBeams`. The previous
`nodes_to_script` duplicate-key failure around axes-to-rotation is fixed in the
Geometry Script fork, so `GenerateArc` and `MakeStairs` now have compiling
converter drafts.
Current authoring prior: use the full Python stack. Python structures intent,
tables, loops, variants, cleanup, validation, docs, and scene/render

View file

@ -0,0 +1,29 @@
From ebac332fe79a608525b223b88f1a89fb2fe80eb9 Mon Sep 17 00:00:00 2001
From: Meta Vens <rwvens@hotmail.com>
Date: Mon, 4 May 2026 20:04:50 +0100
Subject: [PATCH] Avoid duplicate converter keywords for socket-backed
properties
---
operators/convert_tree.py | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/operators/convert_tree.py b/operators/convert_tree.py
index 8485ea2..fa239ab 100644
--- a/operators/convert_tree.py
+++ b/operators/convert_tree.py
@@ -265,6 +265,11 @@ def convert_node_tree(tree):
values.append(_convert_value(socket.default_value))
if not values:
continue
+ # Some Blender nodes expose the same conceptual control as both an
+ # RNA enum property and an input socket. Geometry Script maps that
+ # collapsed control to one Python keyword, so prefer the socket
+ # value/link and drop the duplicate property keyword.
+ assignment.props.pop(key, None)
if len(values) == 1:
assignment.arguments[key] = values[0]
if output_names:
--
2.53.0.windows.3

View file

@ -29,3 +29,4 @@
{"ts": "2026-05-04T17:15:09+00:00", "type": "research", "status": "accepted", "note": "Started IRCSS French Houses city-scale corpus target. Inspected 108 geometry node groups and verified first foothold MakeSpiral -> VG Make Spiral with 200 ordered curve points matching source at max delta 0.0. Recorded blockers from larger city graphs: repeat-zone feedback state, repeat Top output sockets, foreach zones, gizmo nodes, converter duplicate-key failures, and empty-output harness rejection."}
{"ts": "2026-05-04T18:01:03+00:00", "type": "maintenance", "status": "accepted", "note": "Distilled persistent state: handoff now points to corpus docs instead of duplicating completed graph lists; implementation plan reflects post-corpus contract and IRCSS frontier; compaction helper warns on bloated handoff and stale first-corpus planning."}
{"ts": "2026-05-04T19:01:27+00:00", "type": "verification", "status": "accepted", "note": "Added IRCSS PointyGothicCone translation as VG Pointy Gothic Cone; plain and ornamented harness cases match source evaluated geometry with sorted max vertex delta 0.0, proving ornament can be grown from captured structural ribs after instancing."}
{"ts": "2026-05-04T19:05:41+00:00", "type": "tooling", "status": "accepted", "note": "Patched Geometry Script nodes_to_script on branch vibegeometry/blender-5-nodes-to-script to drop duplicate property keywords when a same-named input socket exists; GenerateArc and MakeStairs now compile from converter drafts, and expanded IRCSS smoke passes for 11 target groups."}

View file

@ -91,8 +91,8 @@ data_flow:
- If state grows faster than understanding, cut it back.
current_status:
summary: VibeGeometry has an initial persistence scaffold plus verified Geometry Script translations for local math/utility samples, a first official Blender demo tranche, and two IRCSS French Houses city-scale footholds. The IRCSS pass verified MakeSpiral as an architectural spine and PointyGothicCone as ornament grown from a structural host, while mapping blockers in larger systems: repeat-zone feedback, repeat Top outputs, foreach zones, gizmo nodes, and converter duplicate-key failures. The repo-local Geometry Script fork includes a Blender 5.1 nodes_to_script converter port plus nested-group and menu-socket fixes needed by these translations.
next_action: Continue IRCSS French Houses by choosing the next city-organ target after either fixing repeat-zone/foreach/gizmo toolchain blockers or selecting another non-zone architectural helper with a non-empty behavioral harness.
summary: VibeGeometry has an initial persistence scaffold plus verified Geometry Script translations for local math/utility samples, a first official Blender demo tranche, and two IRCSS French Houses city-scale footholds. The IRCSS pass verified MakeSpiral as an architectural spine and PointyGothicCone as ornament grown from a structural host, while mapping blockers in larger systems: repeat-zone feedback, repeat Top outputs, foreach zones, and gizmo nodes. The repo-local Geometry Script fork includes a Blender 5.1 nodes_to_script converter port plus nested-group, menu-socket, and duplicate-key fixes needed by these translations.
next_action: Continue IRCSS French Houses by using the newly compiling GenerateArc/MakeStairs converter drafts as candidates for the next city-organ translation, or select another non-zone architectural helper with a non-empty behavioral harness.
remotes:
vibegeometry: https://github.com/GameCult/VibeGeometry
geometry_script_fork: https://github.com/GameCult/geometry-script