From 9d62dfea7b80ea7288aee0012ce4148e5b18af67 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 10 Sep 2026 12:40:21 +0200 Subject: [PATCH] Pull the three open items out of the finished port note The dynamic-port note went to done/ while its tail still listed three things nobody built: a list of structs, a struct field of kind list, and the unconnected list input. Measured while extracting: inlineInputDef sends list, struct AND object into its number branch, so the last item is wider than the note claimed. Co-Authored-By: Claude Opus 5 --- .../done/nodes-mit-dynamischer-port-zahl.md | 5 ++- todo-notes/struct-und-listen-restposten.md | 35 +++++++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 todo-notes/struct-und-listen-restposten.md diff --git a/todo-notes/done/nodes-mit-dynamischer-port-zahl.md b/todo-notes/done/nodes-mit-dynamischer-port-zahl.md index c8c995ae..19552682 100644 --- a/todo-notes/done/nodes-mit-dynamischer-port-zahl.md +++ b/todo-notes/done/nodes-mit-dynamischer-port-zahl.md @@ -335,9 +335,8 @@ bearbeitete Zeile belebt den alten Wert der ersten wieder. Feld muss die Sektion also neu bauen. Ohne das erscheint die Zeile erst beim nächsten Rebuild — gemessen, genau ein Browser-Check fällt. -**Weiterhin offen:** „Liste aus Structs" (macht `ListValue`/`StructValue` gegenseitig rekursiv), -ein Struct-Feld vom Typ Liste, und der unverbundene `list`-Eingang, der immer noch ein Zahlenfeld -zeigt. +**Bewusst nicht gebaut:** „Liste aus Structs", ein Struct-Feld vom Typ Liste und der unverbundene +`list`-Eingang. Die drei stehen als eigene Notiz in `todo-notes/struct-und-listen-restposten.md`. ### Der teuerste Fund lag nicht im Struct diff --git a/todo-notes/struct-und-listen-restposten.md b/todo-notes/struct-und-listen-restposten.md new file mode 100644 index 00000000..6df1d268 --- /dev/null +++ b/todo-notes/struct-und-listen-restposten.md @@ -0,0 +1,35 @@ +# Restposten aus dynamischen Ports / Structs + +Drei Punkte, die beim Bau von List-Tab und Struct-Variablen bewusst liegen geblieben sind. Sie +standen am Ende von `done/nodes-mit-dynamischer-port-zahl.md` und sind hierher gezogen, damit sie +nicht mit der erledigten Notiz verschwinden. + +## 1. Der unverbundene Eingang zeigt das falsche Feld + +`inlineInputDef` (`NodeRegistry.ts:131`) kennt nur `boolean`, `string`/`any` und *alles andere* — +und "alles andere" wird ein **Zahlenfeld**. Betroffen sind damit **`list`, `struct` und `object`**: +ein unverbundener `list`-Eingang bietet heute ein Zahlenfeld an. + +Für `list` gäbe es die Antwort schon: der Knopf `n items` plus List-Tab. Der Weg dorthin ist +`listOpener` mit einer Slot-Adresse vom Kind `node` — der Slot existiert bereits. Für `object` +ist gar kein Inline-Wert sinnvoll; dort gehört das Feld weggelassen statt ersetzt. + +## 2. Ein Struct-Feld vom Typ Liste + +Ein deklariertes Struct-Feld ist heute ein Primitiv (Zahl, Text, Ja/Nein, Farbe), obwohl +`FieldValue` auch Listen zulässt. Ein Listen-Feld bräuchte einen Editor eine Ebene tiefer, also +einen **Pfad in der Slot-Adresse** (`ListSlot` in `state.ts` hat bewusst keinen). Die Naht ist die +eine Funktion `resolveList` — eine Signaturänderung, kein Umbau. + +## 3. Liste aus Structs + +Der teuerste der drei. `ListValue` ist heute `readonly (number | string | boolean)[]` und +`FieldValue` hält fest, dass kein Feld selbst ein Struct ist (`Properties.ts:5-8`); `sameValue` +verlässt sich darauf ("recurses exactly one level deep", `Properties.ts:50`), und +`LIST_ITEM_KINDS` macht eine Liste homogen. + +Structs in Listen machen `ListValue` und `StructValue` **gegenseitig rekursiv**: beliebige +Schachtelungstiefe, echter Deep-Compare, und die Items brauchen eine gemeinsame deklarierte +Feldform — die im Typmodell keine Heimat hat, solange sie nur an *einer* Property hängt. + +Setzt Punkt 2 voraus (Pfad in der Adresse).