Problem
Im Replay können Antworten für text-area-math-Elemente fehlerhaft an den Aspect-Player übergeben werden, wenn ein Feld nie bearbeitet wurde und als [] gespeichert ist.
Beispiel aus NDB006:
- Variable
02b
- Elementtyp:
text-area-math
- Format:
math-text-mix
- gespeicherter Wert bei unberührtem Feld:
[]
- Status:
DISPLAYED
Aktuell wird [] im Backend als echtes Array geparst und im Replay an den Player weitergereicht. Aspect-Player 2.9.4/2.10.1 erwarten für dieses Element aber einen JSON-String, z. B. "[]" oder '[{"type":"text","value":""}]'. Wird stattdessen ein Array übergeben, bricht der Player mit Fehlern wie SyntaxError: Unexpected end of JSON input und Folgefehlern ab; die Replay-Anzeige bleibt leer.
Beobachtung auf develop
Geprüft gegen origin/develop Stand 32eacbe9.
Relevante Stellen:
apps/backend/src/app/database/services/test-results/workspace-test-results.service.ts
parseStoredResponseValue() parst primitive JSON-Arrays für Nicht-Marking-Variablen zu Arrays.
[] fällt ebenfalls darunter.
apps/frontend/src/app/replay/components/unit-player/unit-player.component.ts
handleResponsesChange() normalisiert nur den äußeren Response-Content.
sendUnitData() sendet dataParts danach ohne Elementtyp-spezifische Korrektur an den Player.
Eine bestehende Sonderbehandlung für text-area-math oder math-text-mix wurde auf develop nicht gefunden.
Erwartetes Verhalten
Replay soll text-area-math-/math-text-mix-Werte robust normalisieren, sodass der Player immer den erwarteten JSON-String erhält.
Für betroffene Werte gilt:
value: [] -> value: "[]"
value: [{"type":"text","value":""}] als Array -> entsprechender JSON-String
- bereits korrekt gespeicherte Strings bleiben unverändert
- andere Elementtypen bleiben unverändert
Lösungsvorschlag
Bevorzugt im Frontend normalisieren, weil UnitPlayerComponent die Unit-Definition kennt und damit Elementtypen/Aliase auflösen kann.
Ansatz:
- Beim Aufbau der Replay-
dataParts die Unit-Definition auswerten.
- IDs/Aliase von
text-area-math-Elementen bzw. Variablen mit math-text-mix erkennen.
- Innerhalb der Chunk-Responses für diese IDs Array-Werte per
JSON.stringify(value) in Strings umwandeln.
- Alle anderen Werte unverändert lassen.
Alternativ kann die Normalisierung backendseitig erfolgen, falls dort die nötige Unit-Metainformation zuverlässig verfügbar ist. Dann muss auf Cache-Invalidierung für Replay-Responses geachtet werden.
Akzeptanzkriterien
- Unit-/Jest-Test für Replay-Normalisierung:
text-area-math mit value: [] wird als "[]" an den Player gegeben.
text-area-math mit Array aus Text/Formel-Tokens wird als JSON-String gegeben.
- bereits stringifizierte Werte bleiben unverändert.
- nicht betroffene Variablen mit Array-Werten bleiben Arrays.
- Manuelle Prüfung oder Playwright-Reproduktion mit NDB006 und Aspect-Player 2.9.4:
- Replay lädt sichtbar.
- keine
Unexpected end of JSON input-Fehler mehr.
- Relevante Tests laufen:
npx nx test frontend
- bei Backend-Änderung zusätzlich
npx nx test backend
Hinweis
Der gezielte Datenpatch für die akuten NDB006-Fälle bleibt die schnellere und risikoärmere Maßnahme für den laufenden Zeitplan. Dieses Issue dient dazu, die Kodierbox künftig gegen gleichartige Replay-Payloads abzusichern.
Problem
Im Replay können Antworten für
text-area-math-Elemente fehlerhaft an den Aspect-Player übergeben werden, wenn ein Feld nie bearbeitet wurde und als[]gespeichert ist.Beispiel aus NDB006:
02btext-area-mathmath-text-mix[]DISPLAYEDAktuell wird
[]im Backend als echtes Array geparst und im Replay an den Player weitergereicht. Aspect-Player 2.9.4/2.10.1 erwarten für dieses Element aber einen JSON-String, z. B."[]"oder'[{"type":"text","value":""}]'. Wird stattdessen ein Array übergeben, bricht der Player mit Fehlern wieSyntaxError: Unexpected end of JSON inputund Folgefehlern ab; die Replay-Anzeige bleibt leer.Beobachtung auf develop
Geprüft gegen
origin/developStand32eacbe9.Relevante Stellen:
apps/backend/src/app/database/services/test-results/workspace-test-results.service.tsparseStoredResponseValue()parst primitive JSON-Arrays für Nicht-Marking-Variablen zu Arrays.[]fällt ebenfalls darunter.apps/frontend/src/app/replay/components/unit-player/unit-player.component.tshandleResponsesChange()normalisiert nur den äußeren Response-Content.sendUnitData()sendetdataPartsdanach ohne Elementtyp-spezifische Korrektur an den Player.Eine bestehende Sonderbehandlung für
text-area-mathodermath-text-mixwurde aufdevelopnicht gefunden.Erwartetes Verhalten
Replay soll
text-area-math-/math-text-mix-Werte robust normalisieren, sodass der Player immer den erwarteten JSON-String erhält.Für betroffene Werte gilt:
value: []->value: "[]"value: [{"type":"text","value":""}]als Array -> entsprechender JSON-StringLösungsvorschlag
Bevorzugt im Frontend normalisieren, weil
UnitPlayerComponentdie Unit-Definition kennt und damit Elementtypen/Aliase auflösen kann.Ansatz:
dataPartsdie Unit-Definition auswerten.text-area-math-Elementen bzw. Variablen mitmath-text-mixerkennen.JSON.stringify(value)in Strings umwandeln.Alternativ kann die Normalisierung backendseitig erfolgen, falls dort die nötige Unit-Metainformation zuverlässig verfügbar ist. Dann muss auf Cache-Invalidierung für Replay-Responses geachtet werden.
Akzeptanzkriterien
text-area-mathmitvalue: []wird als"[]"an den Player gegeben.text-area-mathmit Array aus Text/Formel-Tokens wird als JSON-String gegeben.Unexpected end of JSON input-Fehler mehr.npx nx test frontendnpx nx test backendHinweis
Der gezielte Datenpatch für die akuten NDB006-Fälle bleibt die schnellere und risikoärmere Maßnahme für den laufenden Zeitplan. Dieses Issue dient dazu, die Kodierbox künftig gegen gleichartige Replay-Payloads abzusichern.