Anruf: wer auflegt, hinterlaesst jetzt auch eine Spur

Filipe, 00:30 Uhr: „hab angerufen aufgelegt und da steht immer noch
nichts im chat vom anruf...."

Im Protokoll: vier Anrufe, je drei bis zehn Sekunden, kein einziger
Eintrag im Gespraech. Und mein Denkfehler dahinter war einfach:

„Verpasster Anruf" stand NUR in `aufraeumen()` -- also erst, wenn ein
Anruf nach zwei Minuten von selbst verfaellt. Wer vorher auflegt,
loeschte ihn spurlos. Abschnitt 5e hat damit genau den Weg geprueft,
den niemand geht: warten, bis es von allein aufhoert. Im Alltag legt
man auf.

Fuer die andere Seite ist ein Anrufer, der aufgibt, ERST RECHT ein
verpasster Anruf.

UND EINE ZWEITE FALLE, die die erste verdeckt hat: `verpasstVermerken`
nahm den Anrufer aus der Runde der Anwesenden (`a.wer`). Beim
Verfallen steht er noch darin -- beim AUFLEGEN ist sie leer. Die
Zeile waere also auch dann ausgefallen, wenn der Aufruf an der
richtigen Stelle gestanden haette. Jetzt kommt er aus `a.anrufer`,
wie beim gefuehrten Anruf auch.

Zwei Fehler, die einander gedeckt haben, und beide hat dieselbe
Pruefluecke durchgelassen: Ich hatte den Ablauf geprueft, den ich
gebaut hatte, nicht den, den ein Mensch geht.

Geprueft: pruef-anruf 106 -> 111. Der neue Abschnitt ruft an, wartet
kurz, legt auf -- und misst, dass genau EINE Zeile entsteht, dass sie
„verpasst" sagt, dass der Anrufer daran steht und dass spaeteres
Aufraeumen keine zweite schreibt.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-19 00:32:57 +02:00
co-authored by Claude Opus 5
parent ff09a67578
commit d766be57b6
2 changed files with 94 additions and 9 deletions
+33 -9
View File
@@ -210,9 +210,16 @@ function anrufVermerken(raumId, a) {
* richtigen Stelle im Verlauf, wird mitgezaehlt wie jede andere und
* braucht keine Sonderbehandlung in der Oberflaeche. */
function verpasstVermerken(raumId, a) {
const anrufer = [...a.wer.entries()][0];
if (!anrufer) return;
const [id, wer] = anrufer;
/* AUS `a.anrufer`, NICHT AUS `a.wer`.
`wer` ist die Runde der gerade Anwesenden. Beim Verfallen steht
der Anrufer noch darin -- beim AUFLEGEN ist sie leer, und die
Zeile waere still ausgefallen. Genau dieser Unterschied hat den
Fehler vom 19.09. so schwer sichtbar gemacht: In der Pruefung
(Anruf verfaellt) ging es, im Alltag (Anrufer legt auf) nicht. */
const wer = a.anrufer;
if (!wer) return;
const id = wer.id;
const d = db();
const n = new Date().toISOString();
const text = a.video ? "📞 Verpasster Videoanruf" : "📞 Verpasster Anruf";
@@ -471,14 +478,31 @@ anrufRouter.post("/workspace/api/anruf/:raum/ende", gleicheHerkunft, (req, res)
const dauer = war ? Math.round((Date.now() - war.seit) / 1000) : 0;
if (!a.wer.size) {
laufend.delete(raumId);
/* DER LETZTE GEHT -- also ist das Gespraech vorbei. Jetzt
gehoert eine Zeile in den Chat, wie bei jedem Telefon.
/* DER LETZTE GEHT -- also ist es vorbei. Jetzt gehoert eine
Zeile in den Chat, wie bei jedem Telefon.
ZWEI FAELLE, UND DER ZWEITE HAT GEFEHLT (19.09.2026):
warGespraech jemand ist rangegangen -> „Anruf · 0:42"
sonst niemand ist rangegangen -> „Verpasster Anruf"
Der zweite Fall stand vorher NUR in `aufraeumen()` -- also
erst, wenn ein Anruf nach zwei Minuten von selbst verfaellt.
Wer vorher auflegt, loeschte ihn damit spurlos.
Genau das hat Filipe gemeldet: viermal angerufen, nach drei
bis zehn Sekunden aufgelegt, „da steht immer noch nichts im
chat vom anruf". Vier verpasste Anrufe, von denen keiner
irgendwo stand -- und fuer die andere Seite ist ein Anrufer,
der aufgibt, ERST RECHT ein verpasster Anruf.
Eigenes try: Ein Fehler beim Schreiben darf das Auflegen
nicht scheitern lassen. */
if (warGespraech) {
try { anrufVermerken(raumId, a); } catch (fe) {
console.error("[anruf] vermerken:", fe?.message);
}
try {
if (warGespraech) anrufVermerken(raumId, a);
else verpasstVermerken(raumId, a);
} catch (fe) {
console.error("[anruf] vermerken:", fe?.message);
}
}
chatEreignis(raumId, {