Skip to content

Replay-Payload für text-area-math / math-text-mix robust normalisieren #717

@jurei733

Description

@jurei733

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:

  1. Beim Aufbau der Replay-dataParts die Unit-Definition auswerten.
  2. IDs/Aliase von text-area-math-Elementen bzw. Variablen mit math-text-mix erkennen.
  3. Innerhalb der Chunk-Responses für diese IDs Array-Werte per JSON.stringify(value) in Strings umwandeln.
  4. 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.

Metadata

Metadata

Labels

bugSomething isn't working

Type

No fields configured for Bug.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions