From 51206bea4f6dc162c1c4ca8754059e518ced7fc6 Mon Sep 17 00:00:00 2001 From: Nick Szaunig Date: Fri, 16 Oct 2026 12:54:21 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20T7-Plan=20Task=2020=20=E2=80=93=20Wiede?= =?UTF-8?q?rholung=20nach=20VOICE=5FCAPTURE=5FGONE=20mit=20demselben=20Ide?= =?UTF-8?q?mpotency-Key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 (1M context) --- docs/superpowers/plans/2026-10-16-t7-sprache.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/superpowers/plans/2026-10-16-t7-sprache.md b/docs/superpowers/plans/2026-10-16-t7-sprache.md index 60d353a..4498577 100644 --- a/docs/superpowers/plans/2026-10-16-t7-sprache.md +++ b/docs/superpowers/plans/2026-10-16-t7-sprache.md @@ -596,7 +596,7 @@ export const INSPECTION_SCALE_DIRECTIONS: Record<'broodPattern' | 'swarmMood' | ``` - `` (generisch, Teil 4): Wert in Worten, Zitat in Anführungszeichen, „Übernehmen“, „Ändern“, Chips „Korrigiert“/„Zuvor genannt: …“; Enter auf „Übernehmen“ setzt den Wert, meldet „Übernommen“ in einem `role="status"`-Bereich, Fokus bleibt; „Ändern“ setzt und fokussiert das Feld. - ``: „Sprachnotiz vom 14.10., 12 Vorschläge“, „Alle übernehmen“ mit Rückfrage „12 Felder aus der Sprachnotiz übernehmen?“, „Sprachnotiz verwerfen“ (Rückfrage), aufklappbar „Gesagt wurde:“ mit vollem Text (kopierbar), `unclear` als „Das konnte ich nicht zuordnen“ ohne Knopf, `dropped > 0` und leer: „Nichts Eindeutiges erkannt. Der Text steht oben.“; Status ≠ READY: passende Zeile („Wird noch ausgewertet“, „Auswertung gerade nicht möglich“ + Text). -- Seite: `?voice=` lädt `fetchVoiceCapture`, setzt Volk und Datum der Notiz, kein Feld belegt; Hinweise unter jedem Feld mit Vorschlag, **unter** dem „Letztes Mal“-Hinweis mit klarer Beschriftung; übernommene Felder bleiben „aus Sprache“, bis bearbeitet oder gespeichert; Speichern schickt `voiceCaptureId`; offline gespeichert geht die Id mit in die Warteschlange; Antwort 409 `VOICE_CAPTURE_GONE` (online oder beim Sync) → genau ein erneuter Versuch ohne `voiceCaptureId` mit denselben Eingaben und neuem Idempotency-Key, Hinweis „Sprachnotiz war abgelaufen, Durchsicht ohne sie gespeichert“; 409 `VOICE_CAPTURE_COLONY_MISMATCH` → Fehlertext, nichts gespeichert, Angebot „Ohne Sprachnotiz speichern“. Nach Erfolg `voiceKeys.all` invalidieren. +- Seite: `?voice=` lädt `fetchVoiceCapture`, setzt Volk und Datum der Notiz, kein Feld belegt; Hinweise unter jedem Feld mit Vorschlag, **unter** dem „Letztes Mal“-Hinweis mit klarer Beschriftung; übernommene Felder bleiben „aus Sprache“, bis bearbeitet oder gespeichert; Speichern schickt `voiceCaptureId`; offline gespeichert geht die Id mit in die Warteschlange; Antwort 409 `VOICE_CAPTURE_GONE` (online oder beim Sync) → genau ein erneuter Versuch ohne `voiceCaptureId` mit denselben Eingaben und **demselben** Idempotency-Key (der Server gibt den Schlüssel nach dem Handler-Fehler frei und vergleicht keinen Body; ein neuer Schlüssel könnte nach verlorener Antwort eine doppelte Durchsicht erzeugen – Review 2026-10-16), Hinweis „Sprachnotiz war abgelaufen, Durchsicht ohne sie gespeichert“; 409 `VOICE_CAPTURE_COLONY_MISMATCH` → Fehlertext, nichts gespeichert, Angebot „Ohne Sprachnotiz speichern“. Nach Erfolg `voiceKeys.all` invalidieren. - Sync-Seite des 409-Wegs: `drain` für `pending-inspections` bekommt einen Hook `retryWithout(entry, error)` (kleine Erweiterung in `sync.ts`) – **Dateikonflikt mit Task 18**: läuft in W7 nach W6, also zulässig; Test `a queued inspection with an expired voice capture is saved without it`. - [ ] **Schritt 1: Failing Tests**: `leaves the field empty until Übernehmen`; `Übernehmen sets the value and moves no focus`; `Ändern focuses the field`; `Alle übernehmen asks first and names the count`; `works with the keyboard only`; `axe finds nothing`; `saves with voiceCaptureId and shows no suggestion afterwards`; `a 409 VOICE_CAPTURE_GONE retries without the id`; `a queued inspection with an expired voice capture is saved without it`; `both hints stand one below the other and neither fills the field`; `scale directions equal the shared fixture`; `suggestion text is rendered as text, never as HTML`.