MCP: das Spiel an einer bestimmten Spielzeit anhalten #435

Closed
opened 2026-10-18 19:38:38 +02:00 by meleki · 1 comment
Owner

Aus #429, Nachbetrachtung nach Etappe 5d („was am MCP noch fehlt“). Punkt 5 von 6.

Anlass

Beim Nachbau des 5d-Tests sollte der Agent prüfen, ob der Player des Intros zwischen 0,5 s und 2 s Spielzeit zu sehen ist. Das Fenster ist ihm zweimal durchgerutscht: Zwischen play und dem nächsten get_runtime lag schon mehr als 2 s. Erst play_input mit {"wait": 1} und danach sofort play mit pause hat getroffen, und auch das nur ungefähr (t = 1,3 s).

Stand heute (im Code nachgesehen)

  • play kennt play, pause, resume und stop, ohne Zeitangabe.
  • play_input zählt hold und wait in Spielsekunden. Am Ende eines Aufrufs läuft das Spiel aber weiter, bis der nächste Aufruf kommt.
  • get_runtime liest den Zustand zu dem Zeitpunkt, an dem der Aufruf ankommt.

Vorschlag

  • play_input bekommt einen Schritt {"pause": true}: Das Spiel hält genau nach dem Schritt davor an, also auch nach einem wait bis zu einer bestimmten Spielzeit.
  • Alternativ oder dazu: play mit until (Spielsekunden). Das Spiel startet oder läuft weiter und hält bei dieser Zeit an.
  • Danach liest get_runtime den angehaltenen Zustand, und screenshot zeigt ihn.
  • Abzuwägen beim Plan: Ein Behavior kann die Spielzeit selbst anhalten (play_input kennt das schon als Fehlerfall), und ein Tab im Hintergrund zeichnet keine Frames.
Aus #429, Nachbetrachtung nach Etappe 5d („was am MCP noch fehlt“). Punkt 5 von 6. ## Anlass Beim Nachbau des 5d-Tests sollte der Agent prüfen, ob der Player des Intros zwischen 0,5 s und 2 s Spielzeit zu sehen ist. Das Fenster ist ihm zweimal durchgerutscht: Zwischen `play` und dem nächsten `get_runtime` lag schon mehr als 2 s. Erst `play_input` mit `{"wait": 1}` und danach sofort `play` mit `pause` hat getroffen, und auch das nur ungefähr (t = 1,3 s). ## Stand heute (im Code nachgesehen) - `play` kennt `play`, `pause`, `resume` und `stop`, ohne Zeitangabe. - `play_input` zählt `hold` und `wait` in Spielsekunden. Am Ende eines Aufrufs läuft das Spiel aber weiter, bis der nächste Aufruf kommt. - `get_runtime` liest den Zustand zu dem Zeitpunkt, an dem der Aufruf ankommt. ## Vorschlag - **`play_input` bekommt einen Schritt `{"pause": true}`**: Das Spiel hält genau nach dem Schritt davor an, also auch nach einem `wait` bis zu einer bestimmten Spielzeit. - Alternativ oder dazu: **`play` mit `until`** (Spielsekunden). Das Spiel startet oder läuft weiter und hält bei dieser Zeit an. - Danach liest `get_runtime` den angehaltenen Zustand, und `screenshot` zeigt ihn. - Abzuwägen beim Plan: Ein Behavior kann die Spielzeit selbst anhalten (`play_input` kennt das schon als Fehlerfall), und ein Tab im Hintergrund zeichnet keine Frames.
admin added this to the Development project 2026-10-18 19:38:51 +02:00
admin moved this to Next in Development on 2026-10-18 19:39:03 +02:00
Author
Owner

Umgesetzt in 70402aa, Wiki MCP in 3b3179c.

Was neu ist

  • play mit until: play, resume oder pause lassen das Spiel bis zu dieser Spielzeit laufen und halten es dort an. Der Aufruf antwortet erst, wenn das Spiel steht. get_runtime und screenshot zeigen danach genau diesen Moment.
  • Genau: Der Frame, der über die Zeit hinausginge, wird gekürzt (frameWithin in src/core/time.ts, verwendet in PlaySession). Das Spiel steht auf 0,5 s, nicht einen Frame später.
  • play_input hat einen letzten Schritt {"pause": true}. Nach einem wait hält das Spiel genau zu dessen Zeit, nach einer Taste oder einem Klick sofort. Die Antwort nennt die Spielzeit und ob das Spiel steht.
  • get_runtime und play_input geben Zeiten auf die Millisekunde an, nicht mehr auf Hundertstel.

Die offenen Fragen, entschieden

  • Eine Pause, die vorher kommt (Toolbar oder Break-Node), ein Load scene oder ein Restart game heben das until auf. Die Antwort sagt das.
  • Steht die Uhr still, gibt der Aufruf nach 25 s mit der aktuellen Zeit auf. Ein Tab im Hintergrund wird sofort abgelehnt.
  • Eine Aufnahme, die nicht in Echtzeit läuft, wird nicht gekürzt. Dort hält das Spiel im ersten Frame, der die Zeit erreicht.

Live (MCP Test Project)

play bis 0,5 s antwortete {"time":0.5,"paused":true}, resume bis 2,1 s ergab genau 2,1. Am Projekt wurde nichts geändert.

Tests

Prüfung Ergebnis
Unit agent-play (6 neu) und time (2 neu) 19/19, verwandte Tests 1158/1158
Gegenproben 6, alle kompilieren, alle rot
e2e 71 (atx) ALL PASSED, 27 Checks, neu 71h3 (0,505 s, 0,8 s, wait 0,31 s). Ohne Kürzen rot bei 0,5166 s
Gate (atx) CHECK EXIT 0, 327 Dateien, 5033 Tests
Umgesetzt in `70402aa`, Wiki *MCP* in `3b3179c`. ## Was neu ist - **`play` mit `until`:** `play`, `resume` oder `pause` lassen das Spiel bis zu dieser Spielzeit laufen und halten es dort an. Der Aufruf antwortet erst, wenn das Spiel steht. `get_runtime` und `screenshot` zeigen danach genau diesen Moment. - **Genau:** Der Frame, der über die Zeit hinausginge, wird gekürzt (`frameWithin` in `src/core/time.ts`, verwendet in `PlaySession`). Das Spiel steht auf 0,5 s, nicht einen Frame später. - **`play_input` hat einen letzten Schritt `{"pause": true}`.** Nach einem `wait` hält das Spiel genau zu dessen Zeit, nach einer Taste oder einem Klick sofort. Die Antwort nennt die Spielzeit und ob das Spiel steht. - `get_runtime` und `play_input` geben Zeiten auf die Millisekunde an, nicht mehr auf Hundertstel. ## Die offenen Fragen, entschieden - Eine Pause, die vorher kommt (Toolbar oder `Break`-Node), ein `Load scene` oder ein `Restart game` heben das `until` auf. Die Antwort sagt das. - Steht die Uhr still, gibt der Aufruf nach 25 s mit der aktuellen Zeit auf. Ein Tab im Hintergrund wird sofort abgelehnt. - Eine Aufnahme, die nicht in Echtzeit läuft, wird nicht gekürzt. Dort hält das Spiel im ersten Frame, der die Zeit erreicht. ## Live (*MCP Test Project*) `play` bis 0,5 s antwortete `{"time":0.5,"paused":true}`, `resume` bis 2,1 s ergab genau 2,1. Am Projekt wurde nichts geändert. ## Tests | Prüfung | Ergebnis | |---|---| | Unit `agent-play` (6 neu) und `time` (2 neu) | 19/19, verwandte Tests 1158/1158 | | Gegenproben | 6, alle kompilieren, alle rot | | e2e 71 (atx) | ALL PASSED, 27 Checks, neu 71h3 (0,505 s, 0,8 s, `wait` 0,31 s). Ohne Kürzen rot bei 0,5166 s | | Gate (atx) | `CHECK EXIT 0`, 327 Dateien, 5033 Tests |
admin moved this to Done in Development on 2026-10-19 05:57:10 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#435