State machine: mehrere benannte Übergänge zwischen demselben Paar #162

Closed
opened 2026-09-19 11:41:51 +02:00 by meleki · 3 comments
Owner

Aus #52 („Zwei Grenzen bleiben bewusst offen“, dort: „Beides gehört in je ein eigenes Issue, wenn du es willst“). Die zweite Grenze steht in #163.

Befund

  • Übergänge haben seit #52 Namen, und State transition wählt nach Namen. Trotzdem lehnt ConnectCommand eine zweite Kante zwischen demselben Paar mit Already connected ab (src/core/commands/graphCommands.ts:197), weil alle Übergänge auf denselben zwei Ports hängen.
  • A --alarm--> B neben A --gesehen--> B ist damit nicht möglich; man muss über einen Zwischenzustand ausweichen.

Zu bauen (Vorschlag)

  • Für Maschinen-Graphen erlaubt ConnectCommand mehrere Kanten zwischen demselben Paar, solange sie verschiedene Namen haben (in Behavior-Graphen bleibt die Sperre).
  • Die Pfeile zwischen demselben Paar werden nebeneinander gezeichnet (wie heute Hin- und Rückweg).
  • Tests: zwei benannte Übergänge A→B, State transition nimmt den richtigen; Undo.

Offen (mit Vorschlag)

  1. Zwei unbenannte Kanten zwischen demselben Paar? Vorschlag: nein, die zweite muss einen Namen bekommen, sonst wären sie ununterscheidbar.
Aus #52 („Zwei Grenzen bleiben bewusst offen“, dort: „Beides gehört in je ein eigenes Issue, wenn du es willst“). Die zweite Grenze steht in #163. ## Befund - Übergänge haben seit #52 Namen, und `State transition` wählt nach Namen. Trotzdem lehnt `ConnectCommand` eine **zweite Kante zwischen demselben Paar** mit *Already connected* ab (`src/core/commands/graphCommands.ts:197`), weil alle Übergänge auf denselben zwei Ports hängen. - `A --alarm--> B` neben `A --gesehen--> B` ist damit nicht möglich; man muss über einen Zwischenzustand ausweichen. ## Zu bauen (Vorschlag) - Für Maschinen-Graphen erlaubt `ConnectCommand` mehrere Kanten zwischen demselben Paar, solange sie verschiedene Namen haben (in Behavior-Graphen bleibt die Sperre). - Die Pfeile zwischen demselben Paar werden nebeneinander gezeichnet (wie heute Hin- und Rückweg). - Tests: zwei benannte Übergänge A→B, `State transition` nimmt den richtigen; Undo. ## Offen (mit Vorschlag) 1. **Zwei unbenannte Kanten zwischen demselben Paar?** Vorschlag: nein, die zweite muss einen Namen bekommen, sonst wären sie ununterscheidbar.
meleki added the new label 2026-09-19 11:41:51 +02:00
admin added state-machine and removed new labels 2026-09-19 12:34:30 +02:00

vorschlag passt

vorschlag passt
admin added this to the Development project 2026-09-19 12:35:24 +02:00
admin moved this to Next in Development on 2026-09-19 12:48:39 +02:00
admin moved this to Done in Development on 2026-09-19 16:30:51 +02:00
Author
Owner

Umgesetzt in 25ec787

Dein Vorschlag ist so gebaut, wie er oben steht.

  • Mehrere Übergänge in dieselbe Richtung zwischen zwei Zuständen gehen jetzt, angelegt wie gewohnt: Rechtsklick → Make transition → Ziel anklicken.
  • Ein weiterer Übergang bekommt sofort einen eigenen Namen: Transition 2, Transition 3 usw.; ein Name, der den Zustand schon verlässt, wird übersprungen. Zwei unbenannte Übergänge zwischen demselben Paar gibt es damit nie.
  • Umbenennen wird abgelehnt, wenn ein anderer Übergang zwischen demselben Paar in derselben Richtung den Namen schon trägt, auch der leere Name. Hinweis: Another transition between these states is already called "alarm". Gleiche Namen zu anderen Zielen werden wie bisher nur gewarnt.
  • Behavior-Graph: bleibt bei Already connected.

Über das Issue hinaus, selbst entschieden:

  • Schleifen gehen auch mehrfach. Jede weitere liegt als Ring außen um die vorige, die Vorschau zeigt schon den nächsten Ring.
  • Namensschilder weichen sich aus. Parallele Pfeile liegen nur 14 px auseinander, die Namen lagen im Screenshot genau übereinander. Ein Schild, das ein anderes verdecken würde, rutscht jetzt entlang seines eigenen Pfeils, bis es frei ist (reine Funktion freeLabelSpot). Das hilft auch bei benannten Hin-und-zurück-Paaren.

Tests (lokal):

npm run check                    → 114 Files, 1631 Tests (vorher 1617), CHECK EXIT 0
GM_STEPS=26 (frisch geseedet)    → ALL PASSED – 70 checks (vorher 66)
  • 14 neue Unit-Tests in tests/core/parallel-transitions.test.ts; Gegenprobe mit 11 eingebauten Fehlern, alle gefangen.
  • e2e 26e6 (4 Checks): zweiter Übergang mit eigenem Namen, Schilder überlappen nicht, Umbenennen über das echte Feld wird abgelehnt, Undo.

Doku: Wiki State-machines und Development (c436bfc). Die Check-Summe 1092 ist gerechnet; CI zu 25ec787 läuft noch (Gate Task 158, Suite Task 159).

Nebenfund, nicht angefasst: Beim Tab State machine State machine liegt das x über dem Textende (aus #171).

## Umgesetzt in `25ec787` Dein Vorschlag ist so gebaut, wie er oben steht. - **Mehrere Übergänge in dieselbe Richtung** zwischen zwei Zuständen gehen jetzt, angelegt wie gewohnt: Rechtsklick → *Make transition* → Ziel anklicken. - **Ein weiterer Übergang bekommt sofort einen eigenen Namen:** `Transition 2`, `Transition 3` usw.; ein Name, der den Zustand schon verlässt, wird übersprungen. Zwei unbenannte Übergänge zwischen demselben Paar gibt es damit nie. - **Umbenennen wird abgelehnt**, wenn ein anderer Übergang zwischen demselben Paar in derselben Richtung den Namen schon trägt, auch der leere Name. Hinweis: *Another transition between these states is already called "alarm"*. Gleiche Namen zu anderen Zielen werden wie bisher nur gewarnt. - **Behavior-Graph:** bleibt bei *Already connected*. **Über das Issue hinaus, selbst entschieden:** - **Schleifen gehen auch mehrfach.** Jede weitere liegt als Ring außen um die vorige, die Vorschau zeigt schon den nächsten Ring. - **Namensschilder weichen sich aus.** Parallele Pfeile liegen nur 14 px auseinander, die Namen lagen im Screenshot genau übereinander. Ein Schild, das ein anderes verdecken würde, rutscht jetzt entlang seines eigenen Pfeils, bis es frei ist (reine Funktion `freeLabelSpot`). Das hilft auch bei benannten Hin-und-zurück-Paaren. **Tests (lokal):** ``` npm run check → 114 Files, 1631 Tests (vorher 1617), CHECK EXIT 0 GM_STEPS=26 (frisch geseedet) → ALL PASSED – 70 checks (vorher 66) ``` - 14 neue Unit-Tests in `tests/core/parallel-transitions.test.ts`; Gegenprobe mit 11 eingebauten Fehlern, alle gefangen. - e2e 26e6 (4 Checks): zweiter Übergang mit eigenem Namen, Schilder überlappen nicht, Umbenennen über das echte Feld wird abgelehnt, Undo. **Doku:** Wiki *State-machines* und *Development* (`c436bfc`). Die Check-Summe **1092** ist gerechnet; CI zu `25ec787` läuft noch (Gate Task 158, Suite Task 159). **Nebenfund, nicht angefasst:** Beim Tab `State machine State machine` liegt das x über dem Textende (aus #171).
Author
Owner

Nachtrag: CI zu 25ec787

Grün, Job-Logs selbst gelesen:

Job Ergebnis
Gate (Task 158) 114 Testdateien bestanden, CHECK EXIT 0, Job succeeded
Suite (Task 159) ALL PASSED – 1092 checks, Smokes 24 / 19 / 21, Job succeeded

Die Check-Summe 1092 ist damit von CI bestätigt.

## Nachtrag: CI zu `25ec787` Grün, Job-Logs selbst gelesen: | Job | Ergebnis | |---|---| | Gate (Task 158) | 114 Testdateien bestanden, `CHECK EXIT 0`, `Job succeeded` | | Suite (Task 159) | `ALL PASSED – 1092 checks`, Smokes 24 / 19 / 21, `Job succeeded` | Die Check-Summe **1092** ist damit von CI bestätigt.
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#162