Aus dem Benchmark-Lauf des Engine-Prompts (benchmark/engine-prompt.md, defc34b): Dort lässt sich die Verbindungslinie selbst anklicken und löschen. Das soll bei uns das Disconnect am Port ersetzen.
Stand heute
Eine Verbindung wird nur über ihren Port gelöst: Rechtsklick auf den Port öffnet das Link-Menü (openLinkMenu in src/editor/graph/graphMenus.ts) mit Hide link, Show link und Disconnect. Hängen mehrere Links am Port, trifft der Eintrag alle.
Die Linie selbst nimmt keine Eingaben an (EdgeLayer zeichnet nur). Anklickbar ist allein die Marke eines versteckten Links (markAt).
Am Ausgangsport stehen im selben Menü die Split-Einträge (splitEntries).
State Machines: Ein Übergang lässt sich nur in der Liste im Inspector löschen. Im Wiki steht dazu ausdrücklich, dass der Pfeil nicht anklickbar ist.
Zu bauen (Vorschlag)
Linie wählen: Ein Klick auf eine Verbindung wählt sie und hebt sie hervor. Die Trefferprüfung als reine Funktion (Abstand zur Bezier-Kurve, Toleranz in Bildschirmpixeln, die oberste gewinnt).
Löschen:Delete oder Backspace löst die gewählte Verbindung. Rechtsklick auf die Linie öffnet ein Menü mit Delete.
Am Port fällt Disconnect weg.
Je Löschen ein Undo-Schritt, wie bisher über DisconnectCommand.
Wiki Behaviors (Abschnitt Editing und der zu versteckten Links), State machines und Keyboard nachziehen.
Offene Fragen
Was bleibt am Port?Hide link und die Split-Einträge stehen heute im selben Menü. Vorschlag: Beide bleiben am Port, nur Disconnect geht. Hide link kommt zusätzlich ins Menü der Linie.
Versteckte Links: Ihre Marke ist der einzige Griff, die Linie ist nicht da. Vorschlag: Das Menü der Marke behält Show link und Disconnect.
Mehrere Linien auf einmal: Reicht eine gewählte Linie, oder sollen Ctrl+Klick und das Gummiband auch Linien sammeln?
Übergänge der State Machine: Sollen die Pfeile mit derselben Mechanik wählbar und löschbar werden? Dann zeigt der Inspector bei gewähltem Pfeil den Übergang.
Was zeigt der Inspector bei einer gewählten Daten- oder Exec-Verbindung? Vorschlag: nichts Eigenes, die Auswahl lebt nur im Graph.
Tests (Vorschlag)
Unit für die Trefferprüfung: nah an der Kurve trifft, daneben nicht, bei zwei überlappenden gewinnt die obere, ein versteckter Link trifft nie.
e2e in Modul 06 mit echter Maus: Klick auf die Linie wählt, Delete löst genau diese eine, Rechtsklick → Delete ebenso, Undo stellt sie wieder her. Das Port-Menü zeigt kein Disconnect mehr.
Die bestehenden Checks, die über das Port-Menü trennen, auf den neuen Weg umstellen.
Aus dem Benchmark-Lauf des Engine-Prompts (`benchmark/engine-prompt.md`, `defc34b`): Dort lässt sich die Verbindungslinie selbst anklicken und löschen. Das soll bei uns das *Disconnect* am Port ersetzen.
## Stand heute
- Eine Verbindung wird nur über ihren **Port** gelöst: Rechtsklick auf den Port öffnet das Link-Menü (`openLinkMenu` in `src/editor/graph/graphMenus.ts`) mit *Hide link*, *Show link* und *Disconnect*. Hängen mehrere Links am Port, trifft der Eintrag alle.
- Die Linie selbst nimmt keine Eingaben an (`EdgeLayer` zeichnet nur). Anklickbar ist allein die Marke eines versteckten Links (`markAt`).
- Am Ausgangsport stehen im selben Menü die Split-Einträge (`splitEntries`).
- **State Machines:** Ein Übergang lässt sich nur in der Liste im Inspector löschen. Im Wiki steht dazu ausdrücklich, dass der Pfeil nicht anklickbar ist.
## Zu bauen (Vorschlag)
- **Linie wählen:** Ein Klick auf eine Verbindung wählt sie und hebt sie hervor. Die Trefferprüfung als reine Funktion (Abstand zur Bezier-Kurve, Toleranz in Bildschirmpixeln, die oberste gewinnt).
- **Löschen:** `Delete` oder `Backspace` löst die gewählte Verbindung. Rechtsklick auf die Linie öffnet ein Menü mit *Delete*.
- **Am Port fällt *Disconnect* weg.**
- Je Löschen ein Undo-Schritt, wie bisher über `DisconnectCommand`.
- Wiki *Behaviors* (Abschnitt Editing und der zu versteckten Links), *State machines* und *Keyboard* nachziehen.
## Offene Fragen
1. **Was bleibt am Port?** *Hide link* und die Split-Einträge stehen heute im selben Menü. Vorschlag: Beide bleiben am Port, nur *Disconnect* geht. *Hide link* kommt zusätzlich ins Menü der Linie.
2. **Versteckte Links:** Ihre Marke ist der einzige Griff, die Linie ist nicht da. Vorschlag: Das Menü der Marke behält *Show link* und *Disconnect*.
3. **Mehrere Linien auf einmal:** Reicht eine gewählte Linie, oder sollen `Ctrl`+Klick und das Gummiband auch Linien sammeln?
4. **Übergänge der State Machine:** Sollen die Pfeile mit derselben Mechanik wählbar und löschbar werden? Dann zeigt der Inspector bei gewähltem Pfeil den Übergang.
5. **Was zeigt der Inspector** bei einer gewählten Daten- oder Exec-Verbindung? Vorschlag: nichts Eigenes, die Auswahl lebt nur im Graph.
## Tests (Vorschlag)
- Unit für die Trefferprüfung: nah an der Kurve trifft, daneben nicht, bei zwei überlappenden gewinnt die obere, ein versteckter Link trifft nie.
- e2e in Modul 06 mit echter Maus: Klick auf die Linie wählt, `Delete` löst genau diese eine, Rechtsklick → *Delete* ebenso, Undo stellt sie wieder her. Das Port-Menü zeigt kein *Disconnect* mehr.
- Die bestehenden Checks, die über das Port-Menü trennen, auf den neuen Weg umstellen.
admin
added this to the Development project 2026-10-01 18:31:49 +02:00
admin
moved this to Next in Development on 2026-10-01 18:32:00 +02:00
Disconnect kann auch bleiben, Port darf unverändert bleiben
siehe 1. - ergibt sich dadurch
multi select wenn es keine umstände macht, ctrl oder shift, das gummiband darf natürlich dementsprechend auch linien sammeln
an das habe ich garnicht gedacht, aber wäre auch cool
hmm, naja wenn man eine line auswählt muss das im inspector angezeigt werden, auch wenn es "nichts" ist
1. Disconnect kann auch bleiben, Port darf unverändert bleiben
2. siehe 1. - ergibt sich dadurch
3. multi select wenn es keine umstände macht, ctrl oder shift, das gummiband darf natürlich dementsprechend auch linien sammeln
4. an das habe ich garnicht gedacht, aber wäre auch cool
5. hmm, naja wenn man eine line auswählt muss das im inspector angezeigt werden, auch wenn es "nichts" ist
Done in c5ba215, wiki 5c47242 (Behaviors, State machines, Keyboard, Development).
What changes
The line is the handle now, in a behavior's graph and between the states of a state machine.
Pick: a click on a line selects that link and draws a halo behind it. A press counts within 6 screen pixels of the line, and where two cross the one drawn last wins.
Several:Ctrl- or Shift-click adds a link or takes it away. The rubber band takes every line it crosses, into the same selection as the nodes and boxes it caught (answer 3).
Delete:Delete or Backspace removes what is picked as one undo step. A right-click on a line offers Hide link and Delete link.
Inspector: a picked link shows the node and port at each end and the type it carries, with Hide link and Delete link below. For several it says how many (answer 5).
State machine: the arrow of a transition is picked the same way, on its name too. Delete or a right-click → Delete transition removes it (answer 4).
Port menu: unchanged, Disconnect included (answers 1 and 2).
Decided here
A hidden link has no line and is never picked this way, also while it is shown on loan. Its mark at the port stays its handle.
The menu of a line speaks about the whole selection, like the menu of a box. With nodes or boxes held alongside it reads Delete N items.
Hiding picked links lets go of them, since no line is left to pick.
A link wins over the box it crosses, and the mark of a hidden link wins over a line.
A transition has no Hide entry.
With nodes or boxes in the selection the inspector keeps showing the node or box, not the link.
Under the hood
src/editor/graph/edgeHit.ts holds the hit test as pure functions (curve, straight arrow, loop, band). EdgeLayer remembers what it stroked, the canvas only asks.
The selection has a new kind edge, and node and annotation carry edgeIds for links picked alongside.
removeGraphSelection takes the links first, then nodes and boxes, as one step through DisconnectCommand.
src/editor/inspector/edgeSection.ts builds the section.
The full run was done for exactly the committed state.
15 unit tests in tests/editor/edge-selection.test.ts.
Six e2e checks with a real mouse: block 6z-xi in module 06 and 26e7 in module 26.
Screenshots of a picked link and a picked transition looked at before the last build, none after it.
Counter-check
Result
12 in the unit tests
all work
Browser, no hit on the line
fails
Browser, no halo
fails
Browser, a band that skips lines
fails
The unit counter-checks ran on stein2, not in the container. The build went through for all three browser ones.
The 1629 before this change are measured (CI run 279 for 0f85476 is green). The CI run for c5ba215 was not waited for.
Done in `c5ba215`, wiki `5c47242` (*Behaviors*, *State machines*, *Keyboard*, *Development*).
**What changes**
The line is the handle now, in a behavior's graph and between the states of a state machine.
- **Pick:** a click on a line selects that link and draws a halo behind it. A press counts within 6 screen pixels of the line, and where two cross the one drawn last wins.
- **Several:** `Ctrl`- or `Shift`-click adds a link or takes it away. The rubber band takes every line it crosses, into the same selection as the nodes and boxes it caught (answer 3).
- **Delete:** `Delete` or `Backspace` removes what is picked as one undo step. A right-click on a line offers *Hide link* and *Delete link*.
- **Inspector:** a picked link shows the node and port at each end and the type it carries, with *Hide link* and *Delete link* below. For several it says how many (answer 5).
- **State machine:** the arrow of a transition is picked the same way, on its name too. `Delete` or a right-click → *Delete transition* removes it (answer 4).
- **Port menu:** unchanged, *Disconnect* included (answers 1 and 2).
**Decided here**
- A hidden link has no line and is never picked this way, also while it is shown on loan. Its mark at the port stays its handle.
- The menu of a line speaks about the whole selection, like the menu of a box. With nodes or boxes held alongside it reads *Delete N items*.
- Hiding picked links lets go of them, since no line is left to pick.
- A link wins over the box it crosses, and the mark of a hidden link wins over a line.
- A transition has no *Hide* entry.
- With nodes or boxes in the selection the inspector keeps showing the node or box, not the link.
**Under the hood**
- `src/editor/graph/edgeHit.ts` holds the hit test as pure functions (curve, straight arrow, loop, band). `EdgeLayer` remembers what it stroked, the canvas only asks.
- The selection has a new kind `edge`, and `node` and `annotation` carry `edgeIds` for links picked alongside.
- `removeGraphSelection` takes the links first, then nodes and boxes, as one step through `DisconnectCommand`.
- `src/editor/inspector/edgeSection.ts` builds the section.
**Tests** (on `melektaus-atx`)
```
gate 201 files, 2982 tests, CHECK EXIT 0 (2967 + 15)
e2e (full) ALL PASSED - 1635 checks, E2E EXIT 0 (1629 + 6)
smokes 24 / 19 / 21, SMOKES EXIT 0
```
- The full run was done for exactly the committed state.
- 15 unit tests in `tests/editor/edge-selection.test.ts`.
- Six e2e checks with a real mouse: block 6z-xi in module 06 and 26e7 in module 26.
- Screenshots of a picked link and a picked transition looked at before the last build, none after it.
| Counter-check | Result |
|---|---|
| 12 in the unit tests | all work |
| Browser, no hit on the line | fails |
| Browser, no halo | fails |
| Browser, a band that skips lines | fails |
- The unit counter-checks ran on stein2, not in the container. The build went through for all three browser ones.
- The 1629 before this change are measured (CI run 279 for `0f85476` is green). The CI run for `c5ba215` was not waited for.
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 dem Benchmark-Lauf des Engine-Prompts (
benchmark/engine-prompt.md,defc34b): Dort lässt sich die Verbindungslinie selbst anklicken und löschen. Das soll bei uns das Disconnect am Port ersetzen.Stand heute
openLinkMenuinsrc/editor/graph/graphMenus.ts) mit Hide link, Show link und Disconnect. Hängen mehrere Links am Port, trifft der Eintrag alle.EdgeLayerzeichnet nur). Anklickbar ist allein die Marke eines versteckten Links (markAt).splitEntries).Zu bauen (Vorschlag)
DeleteoderBackspacelöst die gewählte Verbindung. Rechtsklick auf die Linie öffnet ein Menü mit Delete.DisconnectCommand.Offene Fragen
Ctrl+Klick und das Gummiband auch Linien sammeln?Tests (Vorschlag)
Deletelöst genau diese eine, Rechtsklick → Delete ebenso, Undo stellt sie wieder her. Das Port-Menü zeigt kein Disconnect mehr.Done in
c5ba215, wiki5c47242(Behaviors, State machines, Keyboard, Development).What changes
The line is the handle now, in a behavior's graph and between the states of a state machine.
Ctrl- orShift-click adds a link or takes it away. The rubber band takes every line it crosses, into the same selection as the nodes and boxes it caught (answer 3).DeleteorBackspaceremoves what is picked as one undo step. A right-click on a line offers Hide link and Delete link.Deleteor a right-click → Delete transition removes it (answer 4).Decided here
Under the hood
src/editor/graph/edgeHit.tsholds the hit test as pure functions (curve, straight arrow, loop, band).EdgeLayerremembers what it stroked, the canvas only asks.edge, andnodeandannotationcarryedgeIdsfor links picked alongside.removeGraphSelectiontakes the links first, then nodes and boxes, as one step throughDisconnectCommand.src/editor/inspector/edgeSection.tsbuilds the section.Tests (on
melektaus-atx)tests/editor/edge-selection.test.ts.0f85476is green). The CI run forc5ba215was not waited for.