pruef-gifs war nicht kaputt, sondern nachts rot -- und ein Weg war ungeprüft

DIE ZWEI FEHLER AUS DEM LETZTEN LAUF WAREN KEINE FEHLER AM PRODUKT.

    FEHL das GIF steht danach wirklich im Verlauf
    FEHL und die Tafel geht zu -- man will sehen, wie es ankommt

Gemessen statt geraten: eine Sonde, die jede Anfrage mitschreibt. Die
Antwort stand sofort da, um 04:30 Uhr:

    POST /workspace/api/chat/raeume/1/gif
    403 {"fehler":"Das Rudel schläft. Ab 06:00 Uhr geht es weiter …",
         "nachtruhe":{"zu":true,"ab":0,"bis":6,"minuten":90}}

Die Pruefung klickte „das erste Gespraech in der Liste". Das erste ist
der TREFF, den der Server beim Start selbst anlegt -- und im Treff gilt
die Nachtruhe von 0 bis 6 Uhr. Also: tagsueber gruen, nachts rot, seit
es diese Pruefung gibt. Es ist derselbe Fehler wie am 06.09. im Shop
(„ein Test, der die Wanduhr als Annahme benutzt, misst irgendwann das
Gegenteil") -- dort ein Oeffnungstermin, hier ein Raum mit Nachtruhe.

Warum es nie jemandem auffiel: Fuer Dogfather Universe gibt es keinen
naechtlichen Pruefdienst (nachgesehen: `systemctl list-timers` kennt nur
`vandiy-pruefung` und `runone-pruefung`). Die Pruefung lief immer nur
dann, wenn jemand sie von Hand startete -- und das war bisher nie
nachts.

WAS GEAENDERT IST

1. pruef-gifs legt ein eigenes Gespraech mit Miss an und oeffnet GENAU
   DAS. Fuer ein normales Gespraech gibt es keine Nachtruhe; die Messung
   gilt jetzt rund um die Uhr. Findet es den Knopf nicht, bricht es laut
   ab statt still auf nichts zu klicken.

   Gemessen, 04:40 Uhr:
     verschicken: {"vorher":0,"nachher":1,"imVerlauf":true,
                   "adressen":["/workspace/api/chat/anhang/1"],
                   "tafelZu":true}
   17 Pruefungen, 0 Fehler. Und nebenbei belegt die Adresse, was der
   Quelltext behauptet: Das GIF wird KOPIERT und haengt danach als
   ganz normaler Anhang an der Nachricht.

2. DIE NACHTRUHE IST NICHT UNTER DEN TISCH GEFALLEN -- sie steht jetzt
   dort, wo sie hingehoert: in pruef-treffchat (110 -> 114). Dort wird
   das Fenster ueber die EINSTELLUNG verschoben, nicht ueber die
   Systemuhr, und beide Zustaende kommen in einem Lauf vor.

   DENN DER GIF-WEG WAR DORT ALS EINZIGER DER DREI UEBERHAUPT NICHT
   GEPRUEFT. Im Quelltext steht neben der Regel woertlich: „Sie nur
   beim Text und beim Anhang zu pruefen hiesse, dass man nachts zwar
   nicht schreiben, aber ein GIF schicken kann -- der Weg, den jeder
   findet, der es einmal versucht." Genau dieser Weg hatte keine
   Pruefung. Der Kommentar hat den Fehler beschrieben und nicht
   verhindert -- dieselbe Luecke wie beim Spaltenverlust vom 11.09.

   Gemessen, beide Zweige in einem Lauf:
     Fenster 7–9 Uhr, jetzt 4 -> 404 „Dieses GIF gibt es nicht mehr."
     Fenster 4–6 Uhr, jetzt 4 -> 403 „Das Rudel schläft. Ab 06:00 …"

   ZWEI ENTSCHEIDUNGEN DABEI, beide mit Grund:
   · Gefragt wird als DogFather, nicht als Gast. Die GIF-Kiste gehoert
     dem Rudel; ein Gast bekaeme seine 403 von der falschen Schranke
     (`nurRudel`) -- gruen, ohne die Nachtruhe je beruehrt zu haben.
   · Mit einer Nummer, die es NICHT gibt. Kommt trotzdem die
     Nachtruhe-Absage, steht die Schranke VOR dem Nachschlagen.
     Stuende sie dahinter, verriete der Server nachts an der Nummer,
     welche GIFs es gibt.

AM PRODUKT IST NICHTS GEAENDERT. Nur zwei Pruefdateien -- kein Stempel,
kein Neustart noetig.

GEPRUEFT: pruef-gifs 17 ok (vorher 15 ok / 2 FEHL) ·
pruef-treffchat 114 ok (vorher 110).

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-02 04:36:14 +02:00
co-authored by Claude Opus 5
parent 34a227605c
commit 87a3a14978
2 changed files with 88 additions and 4 deletions
+40
View File
@@ -335,6 +335,34 @@ let treffId = null;
{ cookie: kGast, "Content-Type": "image/png" }, { egal: 1 });
ok(anhang.code === 403, `auch kein Anhang (${anhang.code})`);
/* ==== UND DAS GIF (02.10.2026) ==================================
Neben dieser Regel steht in workspace-chat.js woertlich: „Sie
nur beim Text und beim Anhang zu pruefen hiesse, dass man
nachts zwar nicht schreiben, aber ein GIF schicken kann -- der
Weg, den jeder findet, der es einmal versucht."
Genau dieser dritte Weg war bis heute der einzige, den keine
Pruefung je gegangen ist. Der Kommentar hat den Fehler
beschrieben und nicht verhindert -- dieselbe Sorte Luecke wie
beim Spaltenverlust vom 11.09.
GEFRAGT WIRD ALS DOGFATHER, nicht als Gast. Die GIF-Kiste
gehoert dem Rudel; ein Gast bekaeme seine 403 von der FALSCHEN
Schranke (`nurRudel`), und die Messung waere wertlos -- grün,
ohne die Nachtruhe je berührt zu haben.
UND MIT EINER NUMMER, DIE ES NICHT GIBT. Das ist Absicht:
Kommt trotzdem die Nachtruhe-Absage, steht die Schranke VOR
dem Nachschlagen. Stuende sie dahinter, verriete der Server
nachts an der Nummer, welche GIFs es gibt. */
const gifNachts = await ruf(`/workspace/api/chat/raeume/${treffId}/gif`, CREW, "POST",
{ cookie: kDogi }, { gif_id: 999999 });
ok(gifNachts.code === 403, `auch kein GIF (${gifNachts.code})`);
ok(/schläft/i.test(json(gifNachts).fehler || ""),
"und zwar wegen der Nachtruhe, nicht wegen der Nummer: "
+ `„${(json(gifNachts).fehler || "").slice(0, 44)}…“`);
/* GELESEN WERDEN DARF DIE GANZE NACHT. Sonst waere es keine
Nachtruhe, sondern eine geschlossene Tuer -- und wer nachts
nachsehen will, was los war, koennte es nicht. */
@@ -366,6 +394,18 @@ let treffId = null;
} else {
ok(a.code === 201 || a.code === 200, `ein Gast kann schreiben (${a.code})`);
ok(b.code === 201 || b.code === 200, `ein Modi auch (${b.code})`);
/* DIE GEGENPROBE ZUM GIF. Dieselbe Anfrage, dieselbe erfundene
Nummer wie im Nachtzweig -- bei Tag MUSS die Absage vom
Nachschlagen kommen und nicht von der Nachtruhe. Ohne diese
Zeile waere „auch kein GIF" oben auch dann gruen, wenn die
Schranke rund um die Uhr zu waere. */
const gifTags = await ruf(`/workspace/api/chat/raeume/${treffId}/gif`, CREW, "POST",
{ cookie: kDogi }, { gif_id: 999999 });
ok(gifTags.code === 404,
`beim GIF antwortet bei Tag das Nachschlagen, nicht die Nachtruhe (${gifTags.code})`);
ok(!/schläft/i.test(json(gifTags).fehler || ""),
` und kein Wort von Schlaf („${(json(gifTags).fehler || "").slice(0, 44)}")`);
}
if (!NACHTLAUF) {