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.
This commit is contained in:
2026-09-27 18:46:53 +02:00
parent de4a9d0771
commit d465c89289
+37
View File
@@ -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