From d465c89289fa4a34195397b3c4e27c36e53bce91 Mon Sep 17 00:00:00 2001 From: Dogfather Date: Sun, 27 Sep 2026 18:46:53 +0200 Subject: [PATCH] Ein Werkzeug, das abstuerzt, soll abstuerzen Das Videowerkzeug hat zweimal zwoelf Minuten lang an nichts gearbeitet. Es war nicht langsam, es war tot: Beim Fuellen des Medienregals warf es 'no such table: material', und index.js faengt uncaughtException ab und protokolliert nur. Fuer den Betrieb ist das richtig -- ein Fehler in einer Nebensache darf die Website nicht offline nehmen. Wer die Datei importiert, erbt das Netz, und der laufende HTTP-Server haelt den Prozess danach am Leben. Von aussen sieht das aus wie 'rechnet noch'. Ein Stillstand ist schlimmer als ein Fehlschlag: Ein Fehlschlag ist rot und steht da. Genau diese Falle steht seit dem 06.09.2026 in den Projektregeln ('Auffangnetze im Betrieb sind Fallen in der Pruefung'), und ich bin trotzdem hineingelaufen -- weil ich das Werkzeug nicht als Pruefung verbucht habe, sondern als Werkzeug. Der Unterschied ist keiner: Entscheidend ist, wer index.js importiert. process.on ERGAENZT, es ersetzt nicht. Die Meldung von index.js kommt weiterhin, danach endet der Lauf mit Rueckgabewert 8. Beide Richtungen nachgefahren: PROBE_ABSTURZ=ja endet sofort mit 8, ein normaler Lauf endet mit 0 und einem fertigen Video. Ein Netz, das man nie hat reissen sehen, ist eine Hoffnung. --- server/tiktok-videos.mjs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/server/tiktok-videos.mjs b/server/tiktok-videos.mjs index 45f523a2..1c057485 100644 --- a/server/tiktok-videos.mjs +++ b/server/tiktok-videos.mjs @@ -112,6 +112,34 @@ const express = (await import("express")).default; const ec = express.response.cookie; express.response.cookie = function (n, w, o) { return ec.call(this, n, w, { ...(o || {}), secure: false }); }; await import("./index.js"); + +/* ==== EIGENE ZUHOERER NEBEN DIE VON index.js ========================== + (27.09.2026, nachdem dieses Werkzeug zweimal zwoelf Minuten lang + an nichts gearbeitet hat.) + + index.js spannt am Ende ein Auffangnetz: `uncaughtException` und + `unhandledRejection` werden nur PROTOKOLLIERT. Fuer den Betrieb ist + das genau richtig -- ein Fehler in einer Nebensache darf die + Website nicht offline nehmen. + + Wer die Datei importiert, erbt das Netz. Beim ersten Versuch, das + Medienregal zu fuellen, warf das Werkzeug "no such table: + material". Der Fehler wurde aufgeschrieben, sonst nichts -- und + der laufende HTTP-Server hielt den Prozess danach am Leben. Von + aussen sah das aus wie "rechnet noch"; tatsaechlich war schon + alles vorbei. Genau diese Falle steht seit dem 06.09.2026 in den + Projektregeln, und ich bin trotzdem hineingelaufen. + + `process.on` ERGAENZT, es ersetzt nicht: Die Meldung von index.js + kommt weiterhin, danach beendet dieser Zuhoerer den Lauf. Ein + Werkzeug, das abstuerzt, soll abstuerzen. */ +for (const art of ["uncaughtException", "unhandledRejection"]) { + process.on(art, (f) => { + console.error(` +ABBRUCH (${art}): ${f?.stack || f}`); + process.exit(8); + }); +} await new Promise((r) => setTimeout(r, 1200)); /* ---------- Sprechen mit Hausadresse ---------------------------------- */ @@ -227,6 +255,15 @@ async function eintrag(wer, brett, art, titel, text) { return id; } +/* GEGENPROBE ZUM ABBRUCH (PROBE_ABSTURZ=ja): Wirft mitten im Lauf. + Ohne die Zuhoerer oben bliebe der Prozess danach stehen, bis + jemand ihn beendet -- mit ihnen endet er sofort und mit + Rueckgabewert 8. Ein Netz, das man nie hat reissen sehen, ist eine + Hoffnung. */ +if (process.env.PROBE_ABSTURZ === "ja") { + setTimeout(() => { throw new Error("Probe: so sieht ein Absturz aus"); }, 50); +} + console.log("Fuelle die Bretter …"); /* Die Reihenfolge ist Absicht: „Stamm" verlangt drei eigene