Aus #233 (Abschluss vom 2026-10-01, „Finding, not fixed … No issue is filed for it yet“), gefunden in Durchgang 4 von #156.
Befund
Am Node Animation playing überdeckt der Name der gewählten Animation die Beschriftung des Ausgangs progress in derselben Zeile. Gesehen in #233 in der verkleinerten Fit-Ansicht.
Die Ursache liegt nicht an diesem Node, sondern in NodeView.rebuildTexts (src/editor/graph/NodeView.ts:434). Eingang und Ausgang einer Zeile werden unabhängig voneinander gekürzt:
Der Eingangstext beginnt bei x = 15 und darf 108 px breit werden (NODE_WIDTH / 2 + 20), reicht also bis x = 123.
Der Ausgangstext endet bei x = 161 und darf 78 px breit werden (NODE_WIDTH / 2 - 10), beginnt also frühestens bei x = 83.
Zwischen x = 83 und 123 können sich beide überlagern, bis zu 40 px.
Der Eingangstext ist bei einer Inline-Auswahl Name Wert (inputText, Zeile 350). Ein längerer Wert schiebt ihn bis an seine Grenze. Betroffen ist also jeder Node mit einem Inline-Feld und einem Ausgang in derselben Zeile, nicht nur Animation playing.
Gemessen im Bild habe ich das nicht. Die Zahlen oben stammen aus dem Code.
Zu bauen (Vorschlag)
Eingang und Ausgang einer Zeile teilen sich den Platz: Der Ausgang behält seine Beschriftung, der Eingang wird bis 6 px davor gekürzt (…), wie der Titel heute schon.
Die Regel als reine Funktion (Breite des Nodes, Breite der Ausgangsbeschriftung → höchstens erlaubte Breite des Eingangs), damit sie ohne Browser prüfbar ist.
Der Wert, den ein laufendes Spiel neben dem Ausgang einblendet (valueSlots), bekommt dieselbe Grenze. Heute kann dort left > right herauskommen.
Beweis beim Schließen
Unit für die Regel: kurzer Eingang bleibt ungekürzt, langer wird vor dem Ausgang gekürzt, eine Zeile ohne Ausgang behält die volle Breite.
e2e im Graph-Modul: Animation playing mit einer Animation, deren Name lang ist. Die Kästen von Eingangs- und Ausgangstext in Zeile 2 überschneiden sich nicht (Test-Hook liefert die Kästen). Dazu ein Screenshot des Nodes, angesehen.
Gegenprobe: Ohne die Regel überschneiden sich die Kästen.
Offen (mit Vorschlag)
Wer gibt nach, Eingang oder Ausgang? Vorschlag: der Eingang. Die Beschriftung eines Ausgangs ist kurz und nötig, um die richtige Kante zu ziehen. Der volle Wert steht ohnehin im Inspector des Nodes.
Breiterer Node statt Kürzen? Vorschlag: nein. NODE_WIDTH ist fest, und GraphCanvas rechnet an mehreren Stellen damit (GraphCanvas.ts:436, :724, :971, :1104).
Aus #233 (Abschluss vom 2026-10-01, „Finding, not fixed … No issue is filed for it yet“), gefunden in Durchgang 4 von #156.
## Befund
- Am Node `Animation playing` überdeckt der Name der gewählten Animation die Beschriftung des Ausgangs `progress` in derselben Zeile. Gesehen in #233 in der verkleinerten *Fit*-Ansicht.
- Die Ursache liegt nicht an diesem Node, sondern in `NodeView.rebuildTexts` (`src/editor/graph/NodeView.ts:434`). Eingang und Ausgang einer Zeile werden unabhängig voneinander gekürzt:
- Der Eingangstext beginnt bei x = 15 und darf 108 px breit werden (`NODE_WIDTH / 2 + 20`), reicht also bis x = 123.
- Der Ausgangstext endet bei x = 161 und darf 78 px breit werden (`NODE_WIDTH / 2 - 10`), beginnt also frühestens bei x = 83.
- Zwischen x = 83 und 123 können sich beide überlagern, bis zu 40 px.
- Der Eingangstext ist bei einer Inline-Auswahl `Name Wert` (`inputText`, Zeile 350). Ein längerer Wert schiebt ihn bis an seine Grenze. Betroffen ist also jeder Node mit einem Inline-Feld und einem Ausgang in derselben Zeile, nicht nur `Animation playing`.
- Gemessen im Bild habe ich das nicht. Die Zahlen oben stammen aus dem Code.
## Zu bauen (Vorschlag)
- Eingang und Ausgang einer Zeile teilen sich den Platz: Der Ausgang behält seine Beschriftung, der Eingang wird bis 6 px davor gekürzt (`…`), wie der Titel heute schon.
- Die Regel als reine Funktion (Breite des Nodes, Breite der Ausgangsbeschriftung → höchstens erlaubte Breite des Eingangs), damit sie ohne Browser prüfbar ist.
- Der Wert, den ein laufendes Spiel neben dem Ausgang einblendet (`valueSlots`), bekommt dieselbe Grenze. Heute kann dort `left > right` herauskommen.
## Beweis beim Schließen
- Unit für die Regel: kurzer Eingang bleibt ungekürzt, langer wird vor dem Ausgang gekürzt, eine Zeile ohne Ausgang behält die volle Breite.
- e2e im Graph-Modul: `Animation playing` mit einer Animation, deren Name lang ist. Die Kästen von Eingangs- und Ausgangstext in Zeile 2 überschneiden sich nicht (Test-Hook liefert die Kästen). Dazu ein Screenshot des Nodes, angesehen.
- Gegenprobe: Ohne die Regel überschneiden sich die Kästen.
## Offen (mit Vorschlag)
1. **Wer gibt nach, Eingang oder Ausgang?** Vorschlag: der Eingang. Die Beschriftung eines Ausgangs ist kurz und nötig, um die richtige Kante zu ziehen. Der volle Wert steht ohnehin im Inspector des Nodes.
2. **Breiterer Node statt Kürzen?** Vorschlag: nein. `NODE_WIDTH` ist fest, und `GraphCanvas` rechnet an mehreren Stellen damit (`GraphCanvas.ts:436`, `:724`, `:971`, `:1104`).
meleki
added the new label 2026-10-03 17:56:50 +02:00
Der Eingang gibt nach (offener Punkt 1, wie entschieden): NodeView.rebuildTexts setzt zuerst die Beschriftung des Ausgangs. Danach wird der Eingangstext bis 6 px davor mit … gekürzt.
Die Regel ist eine reine Funktion in src/editor/graph/portRow.ts: inputTextRoom(inputX, ownMax, outputLeft). In einer Zeile ohne Ausgang bleibt die bisherige Grenze von 108 px.
Der Wert, den ein laufendes Spiel neben dem Ausgang einblendet, nutzt dieselbe Regel (valueSpan). Seine linke Kante kann nicht mehr rechts von der rechten liegen.
Neuer Test-Hook __gm.graph.rowSpans(nodeId): Er liefert je Zeile den gekürzten Eingangs- und Ausgangstext samt linker und rechter Kante, in Node-Einheiten.
NODE_WIDTH bleibt (offener Punkt 2, wie entschieden).
Wiki: Behaviors beschreibt die Regel (wer gibt nach, voller Wert im Inspector). Architecture nennt portRow, die Summe auf Development ist 1729 (Wiki-Commit 30c94a3).
Beweis (auf melektaus-atx)
Unit (tests/editor/port-row.test.ts, 6 Tests):
Ein kurzer Eingang behält seine Grenze, ein langer wird 6 px vor dem Ausgang gekürzt.
Eine Zeile ohne Ausgang behält die volle Breite, und es gibt nie eine negative Breite.
Der Laufwert liegt zwischen Eingang und Ausgang, left ist nie größer als right.
e2e 6:Animation playing mit der Animation „Swing with a name far too long for its row“. ALL PASSED – 149 checks (148 + 1).
PASS-Zeile: {"input":{"text":"animation Swi…","left":15,"right":107.77},"output":{"text":"progress","left":114.08,"right":161}}, die Lücke ist also 6,3 px.
Screenshot angesehen (28b-animation-playing-long-name, Fit-Ansicht): „animation Swi…“ endet sichtbar vor „progress“, und „progress“ steht vollständig da.
Gegenprobe greift: Ist die Regel abgeschaltet, reicht der Eingang als „animation Swing…“ bis x = 121,4, also 7,3 px unter „progress“ (ab x = 114,1). Der neue Check fällt dann.
Der erste Lauf von e2e 6 war rot, wegen meines eigenen Checks: Er verlangte „Swing“ im gekürzten Text, gekürzt wird aber schon nach „Swi“. Jetzt prüft er, dass der gekürzte Text ein Anfang des vollen Texts ist.
Der erste Screenshot zeigte den Scene-Tab statt des Graphs, weil der Schritt nach einem play/stop lief. Der Check las die Zeile über den Hook und war davon nicht betroffen. Der Schritt schaltet jetzt vorher auf den Graph (b895ae9).
Nicht geprüft
Andere Nodes mit Inline-Feld und Ausgang in derselben Zeile habe ich nicht im Browser angesehen. Sie laufen über dieselbe Stelle in rebuildTexts.
Den Laufwert neben einem Ausgang (valueSpan) gibt es nur als Unit-Test, nicht im Browser.
Erledigt mit `2aa635f` und `b895ae9`.
## Was geändert ist
- **Der Eingang gibt nach** (offener Punkt 1, wie entschieden): `NodeView.rebuildTexts` setzt zuerst die Beschriftung des Ausgangs. Danach wird der Eingangstext bis 6 px davor mit `…` gekürzt.
- **Die Regel ist eine reine Funktion** in `src/editor/graph/portRow.ts`: `inputTextRoom(inputX, ownMax, outputLeft)`. In einer Zeile ohne Ausgang bleibt die bisherige Grenze von 108 px.
- **Der Wert, den ein laufendes Spiel neben dem Ausgang einblendet**, nutzt dieselbe Regel (`valueSpan`). Seine linke Kante kann nicht mehr rechts von der rechten liegen.
- **Neuer Test-Hook `__gm.graph.rowSpans(nodeId)`**: Er liefert je Zeile den gekürzten Eingangs- und Ausgangstext samt linker und rechter Kante, in Node-Einheiten.
- **`NODE_WIDTH` bleibt** (offener Punkt 2, wie entschieden).
- Wiki: *Behaviors* beschreibt die Regel (wer gibt nach, voller Wert im Inspector). *Architecture* nennt `portRow`, die Summe auf *Development* ist 1729 (Wiki-Commit `30c94a3`).
## Beweis (auf `melektaus-atx`)
- **Unit** (`tests/editor/port-row.test.ts`, 6 Tests):
- Ein kurzer Eingang behält seine Grenze, ein langer wird 6 px vor dem Ausgang gekürzt.
- Eine Zeile ohne Ausgang behält die volle Breite, und es gibt nie eine negative Breite.
- Der Laufwert liegt zwischen Eingang und Ausgang, `left` ist nie größer als `right`.
- **e2e 6:** `Animation playing` mit der Animation „Swing with a name far too long for its row“. **ALL PASSED – 149 checks** (148 + 1).
PASS-Zeile: `{"input":{"text":"animation Swi…","left":15,"right":107.77},"output":{"text":"progress","left":114.08,"right":161}}`, die Lücke ist also 6,3 px.
- **Screenshot angesehen** (`28b-animation-playing-long-name`, *Fit*-Ansicht): „animation Swi…“ endet sichtbar vor „progress“, und „progress“ steht vollständig da.
- **Gegenprobe greift:** Ist die Regel abgeschaltet, reicht der Eingang als „animation Swing…“ bis x = 121,4, also 7,3 px unter „progress“ (ab x = 114,1). Der neue Check fällt dann.
- Gate: 230 Files, 3520 Tests, `CHECK EXIT 0` (+6 aus `port-row.test.ts`).
## Gefunden und behoben
- Der erste Lauf von e2e 6 war rot, wegen meines eigenen Checks: Er verlangte „Swing“ im gekürzten Text, gekürzt wird aber schon nach „Swi“. Jetzt prüft er, dass der gekürzte Text ein Anfang des vollen Texts ist.
- Der erste Screenshot zeigte den Scene-Tab statt des Graphs, weil der Schritt nach einem `play`/`stop` lief. Der Check las die Zeile über den Hook und war davon nicht betroffen. Der Schritt schaltet jetzt vorher auf den Graph (`b895ae9`).
## Nicht geprüft
- Andere Nodes mit Inline-Feld und Ausgang in derselben Zeile habe ich nicht im Browser angesehen. Sie laufen über dieselbe Stelle in `rebuildTexts`.
- Den Laufwert neben einem Ausgang (`valueSpan`) gibt es nur als Unit-Test, nicht im Browser.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Aus #233 (Abschluss vom 2026-10-01, „Finding, not fixed … No issue is filed for it yet“), gefunden in Durchgang 4 von #156.
Befund
Animation playingüberdeckt der Name der gewählten Animation die Beschriftung des Ausgangsprogressin derselben Zeile. Gesehen in #233 in der verkleinerten Fit-Ansicht.NodeView.rebuildTexts(src/editor/graph/NodeView.ts:434). Eingang und Ausgang einer Zeile werden unabhängig voneinander gekürzt:NODE_WIDTH / 2 + 20), reicht also bis x = 123.NODE_WIDTH / 2 - 10), beginnt also frühestens bei x = 83.Name Wert(inputText, Zeile 350). Ein längerer Wert schiebt ihn bis an seine Grenze. Betroffen ist also jeder Node mit einem Inline-Feld und einem Ausgang in derselben Zeile, nicht nurAnimation playing.Zu bauen (Vorschlag)
…), wie der Titel heute schon.valueSlots), bekommt dieselbe Grenze. Heute kann dortleft > rightherauskommen.Beweis beim Schließen
Animation playingmit einer Animation, deren Name lang ist. Die Kästen von Eingangs- und Ausgangstext in Zeile 2 überschneiden sich nicht (Test-Hook liefert die Kästen). Dazu ein Screenshot des Nodes, angesehen.Offen (mit Vorschlag)
NODE_WIDTHist fest, undGraphCanvasrechnet an mehreren Stellen damit (GraphCanvas.ts:436,:724,:971,:1104).Erledigt mit
2aa635fundb895ae9.Was geändert ist
NodeView.rebuildTextssetzt zuerst die Beschriftung des Ausgangs. Danach wird der Eingangstext bis 6 px davor mit…gekürzt.src/editor/graph/portRow.ts:inputTextRoom(inputX, ownMax, outputLeft). In einer Zeile ohne Ausgang bleibt die bisherige Grenze von 108 px.valueSpan). Seine linke Kante kann nicht mehr rechts von der rechten liegen.__gm.graph.rowSpans(nodeId): Er liefert je Zeile den gekürzten Eingangs- und Ausgangstext samt linker und rechter Kante, in Node-Einheiten.NODE_WIDTHbleibt (offener Punkt 2, wie entschieden).portRow, die Summe auf Development ist 1729 (Wiki-Commit30c94a3).Beweis (auf
melektaus-atx)tests/editor/port-row.test.ts, 6 Tests):leftist nie größer alsright.Animation playingmit der Animation „Swing with a name far too long for its row“. ALL PASSED – 149 checks (148 + 1).PASS-Zeile:
{"input":{"text":"animation Swi…","left":15,"right":107.77},"output":{"text":"progress","left":114.08,"right":161}}, die Lücke ist also 6,3 px.28b-animation-playing-long-name, Fit-Ansicht): „animation Swi…“ endet sichtbar vor „progress“, und „progress“ steht vollständig da.CHECK EXIT 0(+6 ausport-row.test.ts).Gefunden und behoben
play/stoplief. Der Check las die Zeile über den Hook und war davon nicht betroffen. Der Schritt schaltet jetzt vorher auf den Graph (b895ae9).Nicht geprüft
rebuildTexts.valueSpan) gibt es nur als Unit-Test, nicht im Browser.