Aus #257 („Not done: the animation track picker still offers private variables.“).
Befund
Seit #257 kann eine Behavior-Variable Private sein. Platzierte Objekte zeigen sie nicht, und + Property am Properties-Node bietet sie nicht an (src/editor/inspector/portSection.ts:120).
Der Dialog „Add a row to …“ im Animation-Tab (src/editor/animation/RowDialog.ts:101) holt seine Auswahl über targetDefs und animatableDefsOf (src/core/model/animation.ts:373). Das liefert für ein Behavior alleasset.variables (Zeile 381), die privaten eingeschlossen.
Eine Animation kann also eine private Variable von außen keyen, obwohl sie sonst nirgends außerhalb des eigenen Graphen auftaucht.
Zu bauen (Vorschlag)
Der Dialog filtert private Variablen heraus, mit isPrivateVariable aus src/core/model/Asset.ts.
animatableDefsOf selbst bleibt, wie es ist. So laufen bestehende Zeilen weiter und behalten ihre Beschriftung (trackLabel und die Laufzeit lesen dieselbe Funktion).
Tests: Unit für die Auswahl des Dialogs (private Variable fehlt, öffentliche ist da). e2e in Modul 56: Variable auf Private schalten, der Dialog bietet sie danach nicht mehr an. Gegenprobe wie üblich.
Offen (mit Vorschlag)
Eine bestehende Zeile auf eine Variable, die später privat wird? Vorschlag: Sie läuft weiter und bleibt sichtbar, so wie ein von Hand benannter Port am Properties-Node in #257. Nur neu anbieten tut der Dialog sie nicht.
Aus #257 („Not done: the animation track picker still offers private variables.“).
## Befund
- Seit #257 kann eine Behavior-Variable **Private** sein. Platzierte Objekte zeigen sie nicht, und `+ Property` am `Properties`-Node bietet sie nicht an (`src/editor/inspector/portSection.ts:120`).
- Der Dialog „Add a row to …“ im Animation-Tab (`src/editor/animation/RowDialog.ts:101`) holt seine Auswahl über `targetDefs` und `animatableDefsOf` (`src/core/model/animation.ts:373`). Das liefert für ein Behavior **alle** `asset.variables` (Zeile 381), die privaten eingeschlossen.
- Eine Animation kann also eine private Variable von außen keyen, obwohl sie sonst nirgends außerhalb des eigenen Graphen auftaucht.
## Zu bauen (Vorschlag)
- Der Dialog filtert private Variablen heraus, mit `isPrivateVariable` aus `src/core/model/Asset.ts`.
- `animatableDefsOf` selbst bleibt, wie es ist. So laufen bestehende Zeilen weiter und behalten ihre Beschriftung (`trackLabel` und die Laufzeit lesen dieselbe Funktion).
- Tests: Unit für die Auswahl des Dialogs (private Variable fehlt, öffentliche ist da). e2e in Modul 56: Variable auf Private schalten, der Dialog bietet sie danach nicht mehr an. Gegenprobe wie üblich.
## Offen (mit Vorschlag)
1. **Eine bestehende Zeile auf eine Variable, die später privat wird?** Vorschlag: Sie läuft weiter und bleibt sichtbar, so wie ein von Hand benannter Port am `Properties`-Node in #257. Nur neu anbieten tut der Dialog sie nicht.
meleki
added the new label 2026-09-29 18:26:29 +02:00
Done in 6491888, wiki ba34f36 (Animations, Behaviors, Development).
What changes
The dialog "Add a row to ..." no longer offers a behavior's private variables. Public variables and everything else are offered as before.
Existing rows stay, as decided above. A row on a variable that goes private later keeps playing and keeps its label.
Deviation from the proposal
Under Change target… the row's own variable stays on offer, private or not. Otherwise the dialog would open with no property and a disabled button for such a row. Other private variables are not offered there either.
The command itself does not refuse a private variable, only the dialog does not offer it. That is how the issue meant it.
Under the hood
What the dialog offers is now the pure function offeredDefs in src/core/model/animation.ts: what the target can animate, less private variables and less what another row animates already. The filter moved there from RowDialog.ts.
animatableDefsOf is unchanged. The label and the runtime read it, so they know nothing of the lock.
Tests (on melektaus-atx)
gate 198 files, 2883 tests, CHECK EXIT 0 (2882 + 1)
e2e 55,56 ALL PASSED - 27 checks (56: +56e)
e2e 25 ALL PASSED - 31 checks (uses the same dialog)
56e opens the dialog with the real mouse through "+ Row". It offers Enabled, Run in editor, Run while paused and hp, and neither private variable. mood has no row, so it is not the "already has a row" rule that hides it. The row "Brain 56 · timer" stays in the timeline.
The three unit counter-checks work, each fails the new test: not filtering private variables, not excepting the row's own variable, and filtering in animatableDefsOf (the existing row then loses its variable).
The browser counter-check works too. The build went through, and 56e fails because mood shows up in the dialog.
Screenshot checked: object "Brain 56", property "hp", the row on timer is there.
The e2e total of 1610 is computed (1609 + 1). CI is still switched off, so there is no run for 6491888.
Finding, not fixed
e2e 56 fails when it runs alone (GM_STEPS=56, measured twice): typing "9" did not arrive: focus is BODY. That is 56a-ii from #257, which this change does not touch. With 55 before it the module passes, so a full run does not show it. It was not measured on HEAD without this change.
Done in `6491888`, wiki `ba34f36` (*Animations*, *Behaviors*, *Development*).
**What changes**
- The dialog "Add a row to ..." no longer offers a behavior's private variables. Public variables and everything else are offered as before.
- Existing rows stay, as decided above. A row on a variable that goes private later keeps playing and keeps its label.
**Deviation from the proposal**
- Under *Change target…* the row's own variable stays on offer, private or not. Otherwise the dialog would open with no property and a disabled button for such a row. Other private variables are not offered there either.
- The command itself does not refuse a private variable, only the dialog does not offer it. That is how the issue meant it.
**Under the hood**
- What the dialog offers is now the pure function `offeredDefs` in `src/core/model/animation.ts`: what the target can animate, less private variables and less what another row animates already. The filter moved there from `RowDialog.ts`.
- `animatableDefsOf` is unchanged. The label and the runtime read it, so they know nothing of the lock.
**Tests** (on `melektaus-atx`)
```
gate 198 files, 2883 tests, CHECK EXIT 0 (2882 + 1)
e2e 55,56 ALL PASSED - 27 checks (56: +56e)
e2e 25 ALL PASSED - 31 checks (uses the same dialog)
```
- **56e** opens the dialog with the real mouse through "+ Row". It offers `Enabled`, `Run in editor`, `Run while paused` and `hp`, and neither private variable. `mood` has no row, so it is not the "already has a row" rule that hides it. The row "Brain 56 · timer" stays in the timeline.
- The three unit counter-checks work, each fails the new test: not filtering private variables, not excepting the row's own variable, and filtering in `animatableDefsOf` (the existing row then loses its variable).
- The browser counter-check works too. The build went through, and 56e fails because `mood` shows up in the dialog.
- Screenshot checked: object "Brain 56", property "hp", the row on `timer` is there.
- The e2e total of 1610 is computed (1609 + 1). CI is still switched off, so there is no run for `6491888`.
**Finding, not fixed**
- e2e 56 fails when it runs alone (`GM_STEPS=56`, measured twice): `typing "9" did not arrive: focus is BODY`. That is 56a-ii from #257, which this change does not touch. With 55 before it the module passes, so a full run does not show it. It was not measured on HEAD without this change.
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 #257 („Not done: the animation track picker still offers private variables.“).
Befund
+ PropertyamProperties-Node bietet sie nicht an (src/editor/inspector/portSection.ts:120).src/editor/animation/RowDialog.ts:101) holt seine Auswahl übertargetDefsundanimatableDefsOf(src/core/model/animation.ts:373). Das liefert für ein Behavior alleasset.variables(Zeile 381), die privaten eingeschlossen.Zu bauen (Vorschlag)
isPrivateVariableaussrc/core/model/Asset.ts.animatableDefsOfselbst bleibt, wie es ist. So laufen bestehende Zeilen weiter und behalten ihre Beschriftung (trackLabelund die Laufzeit lesen dieselbe Funktion).Offen (mit Vorschlag)
Properties-Node in #257. Nur neu anbieten tut der Dialog sie nicht.vorschlag passt, alles bleibt, aber anbieten soll es der dialog einfach nicht mehr
Done in
6491888, wikiba34f36(Animations, Behaviors, Development).What changes
Deviation from the proposal
Under the hood
offeredDefsinsrc/core/model/animation.ts: what the target can animate, less private variables and less what another row animates already. The filter moved there fromRowDialog.ts.animatableDefsOfis unchanged. The label and the runtime read it, so they know nothing of the lock.Tests (on
melektaus-atx)Enabled,Run in editor,Run while pausedandhp, and neither private variable.moodhas no row, so it is not the "already has a row" rule that hides it. The row "Brain 56 · timer" stays in the timeline.animatableDefsOf(the existing row then loses its variable).moodshows up in the dialog.timeris there.6491888.Finding, not fixed
GM_STEPS=56, measured twice):typing "9" did not arrive: focus is BODY. That is 56a-ii from #257, which this change does not touch. With 55 before it the module passes, so a full run does not show it. It was not measured on HEAD without this change.