From 488b207c5c28e94994a2f11d356ceedacaa8e4d8 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 4 May 2026 20:06:14 +0100 Subject: [PATCH] Record converter keyword collision fix --- docs/research/geometry-script-fork-notes.md | 5 ++++ .../translations/ircss-french-houses.md | 16 ++++++++-- notes/fresh-workspace-handoff.md | 6 ++-- ...eywords-for-socket-backed-properties.patch | 29 +++++++++++++++++++ state/evidence.jsonl | 1 + state/map.yaml | 4 +-- 6 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 patches/geometry-script/0004-Avoid-duplicate-converter-keywords-for-socket-backed-properties.patch diff --git a/docs/research/geometry-script-fork-notes.md b/docs/research/geometry-script-fork-notes.md index 9d2941d..458d882 100644 --- a/docs/research/geometry-script-fork-notes.md +++ b/docs/research/geometry-script-fork-notes.md @@ -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. diff --git a/docs/research/translations/ircss-french-houses.md b/docs/research/translations/ircss-french-houses.md index cc4ec0f..f4f939a 100644 --- a/docs/research/translations/ircss-french-houses.md +++ b/docs/research/translations/ircss-french-houses.md @@ -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, diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index 977244a..e4d7da7 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -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 diff --git a/patches/geometry-script/0004-Avoid-duplicate-converter-keywords-for-socket-backed-properties.patch b/patches/geometry-script/0004-Avoid-duplicate-converter-keywords-for-socket-backed-properties.patch new file mode 100644 index 0000000..698b274 --- /dev/null +++ b/patches/geometry-script/0004-Avoid-duplicate-converter-keywords-for-socket-backed-properties.patch @@ -0,0 +1,29 @@ +From ebac332fe79a608525b223b88f1a89fb2fe80eb9 Mon Sep 17 00:00:00 2001 +From: Meta Vens +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 + diff --git a/state/evidence.jsonl b/state/evidence.jsonl index 8c93586..b2c1f9f 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -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."} diff --git a/state/map.yaml b/state/map.yaml index d5f6708..ddcdd4c 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -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