coach: reopen an interrupted conversation with a visible retry

An aborted stream now leaves a trace on both ends. The unmount cleanup
records the interrupted conversation (sessionStorage, one-shot) before
the abort fires, and invalidates the cached thread + rail so the return
visit refetches the advanced server state. The /coach page consumes the
record on its next mount: a known id reopens that thread, a first-turn
abort resolves via most-recent; every explicit entry intent (?c=, ?doc=,
?workout=, ?scope=, ?ask=) wins over the resume. The persisted cancelled
marker renders as a muted interrupted note with an Ask-again action that
resubmits the question through the normal send path and its gates.
Localised in all six languages. Refs #781
This commit is contained in:
Marc-André Bombeck committed 2026-08-13 06:16:45 +02:00
1 parent 9a631c8f8b
commit 13b7d0379b
13 files changed
+713 -230

No files matched your search

+4
View File
@@ -2934,6 +2934,10 @@
"railBadge": "Dokument-Chat (abgeschottet)",
"uploadError": "Upload fehlgeschlagen. Bitte versuche es erneut.",
"notFoundError": "Dieser Dokumentlink ist nicht mehr gültig – es wird ein normaler Chat gestartet."
},
"interrupted": {
"note": "Diese Antwort wurde unterbrochen, bevor sie fertig war.",
"retry": "Erneut fragen"
}
},
"relativeJustNow": "gerade eben",
+4
View File
@@ -2934,6 +2934,10 @@
"railBadge": "Fenced document chat",
"uploadError": "Upload failed. Please try again.",
"notFoundError": "That document link is no longer valid — starting a normal chat instead."
},
"interrupted": {
"note": "This answer was interrupted before it finished.",
"retry": "Ask again"
}
},
"relativeJustNow": "just now",
+4
View File
@@ -2934,6 +2934,10 @@
"railBadge": "Chat de documento aislado",
"uploadError": "Error al subir. Inténtalo de nuevo.",
"notFoundError": "Ese enlace de documento ya no es válido: se iniciará un chat normal."
},
"interrupted": {
"note": "Esta respuesta se interrumpió antes de terminar.",
"retry": "Preguntar de nuevo"
}
},
"relativeJustNow": "ahora mismo",
+4
View File
@@ -2934,6 +2934,10 @@
"railBadge": "Chat de document cloisonné",
"uploadError": "Échec du téléversement. Veuillez réessayer.",
"notFoundError": "Ce lien de document n'est plus valide : une conversation normale démarre à la place."
},
"interrupted": {
"note": "Cette réponse a été interrompue avant la fin.",
"retry": "Reposer la question"
}
},
"relativeJustNow": "à l’instant",
+4
View File
@@ -2934,6 +2934,10 @@
"railBadge": "Chat documento isolata",
"uploadError": "Caricamento non riuscito. Riprova.",
"notFoundError": "Quel link al documento non è più valido: verrà avviata una chat normale."
},
"interrupted": {
"note": "Questa risposta è stata interrotta prima di essere completata.",
"retry": "Chiedi di nuovo"
}
},
"relativeJustNow": "proprio ora",
+4
View File
@@ -2934,6 +2934,10 @@
"railBadge": "Odizolowany czat dokumentu",
"uploadError": "Przesyłanie nie powiodło się. Spróbuj ponownie.",
"notFoundError": "Ten link do dokumentu jest już nieprawidłowy – zamiast tego rozpoczynamy zwykły czat."
},
"interrupted": {
"note": "Ta odpowiedź została przerwana przed ukończeniem.",
"retry": "Zapytaj ponownie"
}
},
"relativeJustNow": "przed chwilą",