State machine: Übergang auf denselben Zustand (Self-Transition) #163

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 erste Grenze steht in #162.

Befund

  • Ein Übergang von einem Zustand auf sich selbst ist gesperrt: ConnectCommand wirft A node cannot connect to itself (src/core/commands/graphCommands.ts:190).
  • Gebraucht wird das für „Zustand neu betreten“, z. B. Angriff --nochmal--> Angriff, damit On state entered erneut feuert.

Zu bauen (Vorschlag)

  • In Maschinen-Graphen erlaubt: Kante von einem Zustand auf sich selbst, gezeichnet als Schleife am Rand des Nodes.
  • State transition über eine Self-Transition feuert exited und danach entered desselben Zustands.
  • Tests: Ereignisreihenfolge, lokale und globale Maschine, Undo.

Offen (mit Vorschlag)

  1. Feuert exit/enter wirklich? Vorschlag: ja, das ist der Sinn des Übergangs. Wer nur „bleiben“ will, braucht keinen Übergang.
Aus #52 („Zwei Grenzen bleiben bewusst offen“, dort: „Beides gehört in je ein eigenes Issue, wenn du es willst“). Die erste Grenze steht in #162. ## Befund - Ein Übergang von einem Zustand auf sich selbst ist gesperrt: `ConnectCommand` wirft *A node cannot connect to itself* (`src/core/commands/graphCommands.ts:190`). - Gebraucht wird das für „Zustand neu betreten“, z. B. `Angriff --nochmal--> Angriff`, damit `On state entered` erneut feuert. ## Zu bauen (Vorschlag) - In Maschinen-Graphen erlaubt: Kante von einem Zustand auf sich selbst, gezeichnet als Schleife am Rand des Nodes. - `State transition` über eine Self-Transition feuert `exited` und danach `entered` desselben Zustands. - Tests: Ereignisreihenfolge, lokale und globale Maschine, Undo. ## Offen (mit Vorschlag) 1. **Feuert exit/enter wirklich?** Vorschlag: ja, das ist der Sinn des Übergangs. Wer nur „bleiben“ will, braucht keinen Übergang.
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:32:07 +02:00

vorschlag passt

vorschlag passt
admin added the low-priority label 2026-09-19 12:33:20 +02:00
admin added this to the Development project 2026-09-19 12:33:23 +02:00
admin moved this to Next in Development on 2026-09-19 12:48:36 +02:00
Author
Owner

Umgesetzt in 010b6a7

Dein Vorschlag ist so gebaut, wie er oben steht.

  • Anlegen: Rechtsklick auf einen Zustand → Make transition → noch einmal auf denselben Zustand klicken. Die Vorschau zeigt schon beim Zielen die Schleife.
  • Laufzeit: Wird die Self-Transition genommen, feuert On state exited und danach On state entered, jedes Mal. Gilt für lokale und globale Maschinen.
  • Set state in den aktuellen Zustand bleibt still wie bisher; neu betreten wird nur über State transition.
  • Nur Zustände dürfen sich selbst verbinden, jeder andere Node wird weiter mit A node cannot connect to itself abgelehnt. Pro Zustand eine Selbstkante (mehrere pro Paar sind #162).
  • Zeichnung: Schleife über der Mitte der Oberkante, Pfeil nach unten, Name am Scheitel.
  • Inspector: Die Schleife steht einmal unter Transitions out, nicht zusätzlich unter in (selbst entschieden, damit ein Übergang nicht wie zwei aussieht).

Tests

npm run check                  → 113 Files, 1617 Tests (vorher 1607), CHECK EXIT 0
GM_STEPS=26 (frisch geseedet)  → ALL PASSED – 66 checks (vorher 63), zweimal gelaufen
  • 10 neue Unit-Tests in tests/core/self-transition.test.ts (Verbinden/Speichern/Undo, Sperren, Ereignisreihenfolge lokal und global, Geometrie der Schleife).
  • Gegenprobe mit 8 eingebauten Fehlern: 7 gefangen, 1 war gleichwertig zum Original und hat eine Lücke gezeigt, die mit einem zusätzlichen Test geschlossen ist.
  • e2e 26e5 (3 Checks, neuer Hook transitionLabelAt): echter Klick auf den eigenen Zustand, Schleife und Name über dem Node, Undo.

Wiki: State machines ergänzt (3676ad0). Die Check-Summe 1088 ist gerechnet; CI zu 010b6a7 läuft noch und ist nicht abgewartet.

## Umgesetzt in `010b6a7` Dein Vorschlag ist so gebaut, wie er oben steht. - **Anlegen:** Rechtsklick auf einen Zustand → *Make transition* → noch einmal auf denselben Zustand klicken. Die Vorschau zeigt schon beim Zielen die Schleife. - **Laufzeit:** Wird die Self-Transition genommen, feuert `On state exited` und danach `On state entered`, jedes Mal. Gilt für lokale und globale Maschinen. - **`Set state` in den aktuellen Zustand bleibt still** wie bisher; neu betreten wird nur über `State transition`. - **Nur Zustände** dürfen sich selbst verbinden, jeder andere Node wird weiter mit *A node cannot connect to itself* abgelehnt. Pro Zustand eine Selbstkante (mehrere pro Paar sind #162). - **Zeichnung:** Schleife über der Mitte der Oberkante, Pfeil nach unten, Name am Scheitel. - **Inspector:** Die Schleife steht einmal unter *Transitions out*, nicht zusätzlich unter *in* (selbst entschieden, damit ein Übergang nicht wie zwei aussieht). ### Tests ``` npm run check → 113 Files, 1617 Tests (vorher 1607), CHECK EXIT 0 GM_STEPS=26 (frisch geseedet) → ALL PASSED – 66 checks (vorher 63), zweimal gelaufen ``` - 10 neue Unit-Tests in `tests/core/self-transition.test.ts` (Verbinden/Speichern/Undo, Sperren, Ereignisreihenfolge lokal und global, Geometrie der Schleife). - Gegenprobe mit 8 eingebauten Fehlern: 7 gefangen, 1 war gleichwertig zum Original und hat eine Lücke gezeigt, die mit einem zusätzlichen Test geschlossen ist. - e2e 26e5 (3 Checks, neuer Hook `transitionLabelAt`): echter Klick auf den eigenen Zustand, Schleife und Name über dem Node, Undo. Wiki: *State machines* ergänzt (`3676ad0`). Die Check-Summe **1088** ist gerechnet; CI zu `010b6a7` läuft noch und ist nicht abgewartet.
admin moved this to Done in Development on 2026-09-19 16:13:12 +02:00
Author
Owner

CI-Nachtrag zu 010b6a7

Beide Jobs grün, Logs selbst gelesen:

  • Gate (Task 156): 113 Testdateien grün, CHECK EXIT 0
  • Suite (Task 157): ALL PASSED – 1088 checks, Smokes 24 / 19 / 21

Die Check-Summe 1088 ist damit bestätigt.

## CI-Nachtrag zu `010b6a7` Beide Jobs grün, Logs selbst gelesen: - **Gate (Task 156):** 113 Testdateien grün, `CHECK EXIT 0` - **Suite (Task 157):** `ALL PASSED – 1088 checks`, Smokes 24 / 19 / 21 Die Check-Summe 1088 ist damit bestätigt.
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#163