Aus #91 (Entscheidung G: „Scope scene — wird nicht gebaut. Ohne Load scene (#39) ist er zur Laufzeit nicht von global unterscheidbar — also erst mit #39, dann ist er messbar“). #39 ist inzwischen erledigt.
Befund
Variablen und State Machines kennen heute local und global (src/core/model/Scope.ts:6). Seit #39 geht beim Szenenwechsel genau der SharedState mit hinüber; alles Lokale wird neu gebaut.
Was pro Szene gelten soll (Gegner übrig in diesem Level, Schalter im Level), muss man heute global halten und beim Wechsel von Hand zurücksetzen.
Zu bauen (Vorschlag)
Dritter Scope scene: geteilt von allen Behaviors der Szene, beim Laden einer Szene frisch aus den Defaults, beim Wechsel weg.
Gilt für Variablen und State Machines, mit denselben Konfliktregeln wie global (#91, A2).
Tests: zwei Behaviors teilen den Wert; Load scene setzt ihn zurück; global bleibt dabei erhalten.
Offen (mit Vorschlag)
Zurück in eine schon besuchte Szene: frisch oder alter Stand? Vorschlag: frisch — ein Gedächtnis pro Szene wäre schon Persistenz (siehe #166).
Aus #91 (Entscheidung **G**: „Scope `scene` — wird nicht gebaut. Ohne `Load scene` (#39) ist er zur Laufzeit nicht von `global` unterscheidbar — also erst mit #39, dann ist er messbar“). #39 ist inzwischen erledigt.
## Befund
- Variablen und State Machines kennen heute `local` und `global` (`src/core/model/Scope.ts:6`). Seit #39 geht beim Szenenwechsel genau der `SharedState` mit hinüber; alles Lokale wird neu gebaut.
- Was pro Szene gelten soll (Gegner übrig in diesem Level, Schalter im Level), muss man heute global halten und beim Wechsel von Hand zurücksetzen.
## Zu bauen (Vorschlag)
- Dritter Scope **scene**: geteilt von allen Behaviors der Szene, beim Laden einer Szene frisch aus den Defaults, beim Wechsel weg.
- Gilt für Variablen und State Machines, mit denselben Konfliktregeln wie `global` (#91, A2).
- Tests: zwei Behaviors teilen den Wert; `Load scene` setzt ihn zurück; `global` bleibt dabei erhalten.
## Offen (mit Vorschlag)
1. **Zurück in eine schon besuchte Szene:** frisch oder alter Stand? Vorschlag: frisch — ein Gedächtnis pro Szene wäre schon Persistenz (siehe #166).
meleki
added the new label 2026-09-19 11:41:51 +02:00
Einen dritten Scope scene: geteilt wie global, aber mit jeder geladenen Szene frisch aus den Deklarationen gebaut. Für State Machines und Variables-Assets, wie oben vorgeschlagen und bestätigt.
Variables-Asset: neues Dropdown Scope mit Global (Vorgabe, wie bisher) und Scene. Ein fehlendes Feld heißt global, bestehende Projekte ändern sich nicht.
State Machine: das Dropdown hat eine dritte Stufe Scene. Ein fehlendes Feld heißt weiter local.
Zurück in eine schon besuchte Szene ist auch frisch (Antwort 1). Es gibt kein Gedächtnis pro Szene.
Nach einem Szenenwechsel wird der Startzustand wieder angekündigt, aber nur bei scene-Maschinen: On state entered in der neuen Szene hört ihn. Eine globale Maschine bleibt still, sie hat ihren Zustand nie verlassen.
Die Regel steckt in zwei reinen Funktionen in src/core/graph/sharedState.ts (carriedForward, restartedAssets).
Entscheidung ohne Rückmeldung
scene und persistent schließen sich aus (Variante A). Der Auswahldialog dazu wurde abgebrochen, deshalb ist das eine Annahme. Ein Asset mit Scope Scene zeigt den Persistent-Schalter nicht, und der Wechsel auf Scene löscht das Flag (Undo holt es zurück). Durchgesetzt wird das in isPersistent. Soll stattdessen B (beides erlaubt, der Scope gewinnt) oder C (Persistent gewinnt) gelten, ist das an drei Stellen schnell umgestellt.
9 neue Unit-Tests in tests/core/scene-scope.test.ts.
3 neue e2e-Checks: In 35 wird ein Variables-Asset mit Scope scene beim Szenenwechsel zurückgesetzt. In 32h geprüft: das Dropdown, die Notiz und dass der Persistent-Schalter verschwindet.
Gegenproben greifen: Wird restarted ignoriert, fallen 2 Unit-Tests und im Browser der neue Check in 35. Mit der alten Ankündigungsregel fällt 1 Unit-Test, ohne den Scope-Guard in isPersistent ebenfalls 1. Die Originale sind per cmp zurückgeholt.
Befund aus dem e2e: clickText('Scene') trifft den Scene-Tab statt den Menüeintrag. Das hat einen Check falsch grün gemacht. Beide Checks laufen jetzt über clickLast.
Die Check-Summe 1307 ist gerechnet. Zuletzt hat CI 1293 gemessen, und auf den Lauf zu diesem Commit wurde nicht gewartet.
Umgesetzt in `d7c0b7c`, Wiki `9087225`.
## Was es jetzt gibt
Einen dritten Scope **`scene`**: geteilt wie `global`, aber mit jeder geladenen Szene frisch aus den Deklarationen gebaut. Für State Machines **und** Variables-Assets, wie oben vorgeschlagen und bestätigt.
- **Variables-Asset:** neues Dropdown *Scope* mit **Global** (Vorgabe, wie bisher) und **Scene**. Ein fehlendes Feld heißt `global`, bestehende Projekte ändern sich nicht.
- **State Machine:** das Dropdown hat eine dritte Stufe *Scene*. Ein fehlendes Feld heißt weiter `local`.
- **Zurück in eine schon besuchte Szene ist auch frisch** (Antwort 1). Es gibt kein Gedächtnis pro Szene.
- **Nach einem Szenenwechsel wird der Startzustand wieder angekündigt**, aber nur bei `scene`-Maschinen: `On state entered` in der neuen Szene hört ihn. Eine globale Maschine bleibt still, sie hat ihren Zustand nie verlassen.
- Die Regel steckt in zwei reinen Funktionen in `src/core/graph/sharedState.ts` (`carriedForward`, `restartedAssets`).
## Entscheidung ohne Rückmeldung
**`scene` und `persistent` schließen sich aus** (Variante A). Der Auswahldialog dazu wurde abgebrochen, deshalb ist das eine Annahme. Ein Asset mit Scope *Scene* zeigt den Persistent-Schalter nicht, und der Wechsel auf *Scene* löscht das Flag (Undo holt es zurück). Durchgesetzt wird das in `isPersistent`. Soll stattdessen B (beides erlaubt, der Scope gewinnt) oder C (Persistent gewinnt) gelten, ist das an drei Stellen schnell umgestellt.
## Tests
```
./check.sh → 144 Files, 2142 Tests, CHECK EXIT 0 (vorher 143 / 2133)
GM_STEPS=32 (frisch) → ALL PASSED – 17 checks
GM_STEPS=1-3,17,18,26,32,35 → ALL PASSED – 213 checks
```
- 9 neue Unit-Tests in `tests/core/scene-scope.test.ts`.
- 3 neue e2e-Checks: In **35** wird ein Variables-Asset mit Scope `scene` beim Szenenwechsel zurückgesetzt. In **32h** geprüft: das Dropdown, die Notiz und dass der Persistent-Schalter verschwindet.
- **Gegenproben greifen:** Wird `restarted` ignoriert, fallen 2 Unit-Tests und im Browser der neue Check in 35. Mit der alten Ankündigungsregel fällt 1 Unit-Test, ohne den Scope-Guard in `isPersistent` ebenfalls 1. Die Originale sind per `cmp` zurückgeholt.
- Befund aus dem e2e: `clickText('Scene')` trifft den Scene-Tab statt den Menüeintrag. Das hat einen Check falsch grün gemacht. Beide Checks laufen jetzt über `clickLast`.
- Die Check-Summe **1307** ist gerechnet. Zuletzt hat CI 1293 gemessen, und auf den Lauf zu diesem Commit wurde nicht gewartet.
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 #91 (Entscheidung G: „Scope
scene— wird nicht gebaut. OhneLoad scene(#39) ist er zur Laufzeit nicht vonglobalunterscheidbar — also erst mit #39, dann ist er messbar“). #39 ist inzwischen erledigt.Befund
localundglobal(src/core/model/Scope.ts:6). Seit #39 geht beim Szenenwechsel genau derSharedStatemit hinüber; alles Lokale wird neu gebaut.Zu bauen (Vorschlag)
global(#91, A2).Load scenesetzt ihn zurück;globalbleibt dabei erhalten.Offen (mit Vorschlag)
vorschlag passt
Umgesetzt in
d7c0b7c, Wiki9087225.Was es jetzt gibt
Einen dritten Scope
scene: geteilt wieglobal, aber mit jeder geladenen Szene frisch aus den Deklarationen gebaut. Für State Machines und Variables-Assets, wie oben vorgeschlagen und bestätigt.global, bestehende Projekte ändern sich nicht.local.scene-Maschinen:On state enteredin der neuen Szene hört ihn. Eine globale Maschine bleibt still, sie hat ihren Zustand nie verlassen.src/core/graph/sharedState.ts(carriedForward,restartedAssets).Entscheidung ohne Rückmeldung
sceneundpersistentschließen sich aus (Variante A). Der Auswahldialog dazu wurde abgebrochen, deshalb ist das eine Annahme. Ein Asset mit Scope Scene zeigt den Persistent-Schalter nicht, und der Wechsel auf Scene löscht das Flag (Undo holt es zurück). Durchgesetzt wird das inisPersistent. Soll stattdessen B (beides erlaubt, der Scope gewinnt) oder C (Persistent gewinnt) gelten, ist das an drei Stellen schnell umgestellt.Tests
tests/core/scene-scope.test.ts.scenebeim Szenenwechsel zurückgesetzt. In 32h geprüft: das Dropdown, die Notiz und dass der Persistent-Schalter verschwindet.restartedignoriert, fallen 2 Unit-Tests und im Browser der neue Check in 35. Mit der alten Ankündigungsregel fällt 1 Unit-Test, ohne den Scope-Guard inisPersistentebenfalls 1. Die Originale sind percmpzurückgeholt.clickText('Scene')trifft den Scene-Tab statt den Menüeintrag. Das hat einen Check falsch grün gemacht. Beide Checks laufen jetzt überclickLast.