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:
+48
-4
@@ -57,7 +57,7 @@ function anlegen(name, rolle, code) {
|
||||
return d.prepare("SELECT last_insert_rowid() AS id").get().id;
|
||||
}
|
||||
anlegen("Filipe", "admin", "CODE-DOGI-0001");
|
||||
anlegen("Miss", "modi", "CODE-MODI-0001");
|
||||
const idMiss = anlegen("Miss", "modi", "CODE-MODI-0001");
|
||||
anlegen("Luna", "creator", "CODE-CREA-0001");
|
||||
d.close();
|
||||
|
||||
@@ -96,9 +96,53 @@ try {
|
||||
(Zeile 810), nicht geraten. Mein erster Versuch probierte drei
|
||||
erfundene Namen und traf keinen; der Raum blieb zu, und der
|
||||
GIF-Knopf deshalb verborgen. */
|
||||
await seite.evaluate(() => {
|
||||
document.querySelector(".chat-raum__knopf")?.click();
|
||||
});
|
||||
|
||||
/* ==== EIN GANZ NORMALES GESPRAECH, NICHT DAS ERSTE DER LISTE ======
|
||||
(02.10.2026 -- und das ist eine Zeitbombe, die hochgegangen ist)
|
||||
|
||||
Hier stand `document.querySelector(".chat-raum__knopf")?.click()`
|
||||
-- also „nimm das erste Gespraech". Das erste ist der TREFF, den
|
||||
der Server beim Start selbst anlegt. Und im Treff gilt die
|
||||
Nachtruhe: zwischen 0 und 6 Uhr weist der Server jedes Schreiben
|
||||
mit 403 ab, Text, Anhang und GIF.
|
||||
|
||||
FOLGE: Diese Pruefung war tagsueber gruen und nachts rot --
|
||||
seit es sie gibt. Gemessen um 04:30 Uhr, und die Antwort stand
|
||||
im Protokoll:
|
||||
|
||||
403 {"fehler":"Das Rudel schläft. Ab 06:00 Uhr geht es
|
||||
weiter …","nachtruhe":{"zu":true,"ab":0,"bis":6}}
|
||||
|
||||
Nicht das GIF war kaputt, sondern die Uhr war eine Annahme. Das
|
||||
ist derselbe Fehler wie am 06.09. im Shop („ein Test, der die
|
||||
Wanduhr als Annahme benutzt, misst irgendwann das Gegenteil") --
|
||||
dort war es ein Oeffnungstermin, hier ein Raum mit Nachtruhe.
|
||||
|
||||
Deshalb wird jetzt ein eigenes Gespraech mit Miss angelegt und
|
||||
GENAU DAS geoeffnet: Fuer ein normales Gespraech gibt es keine
|
||||
Nachtruhe, die Messung gilt rund um die Uhr.
|
||||
|
||||
UND DIE NACHTRUHE IST NICHT UNGEPRUEFT GEBLIEBEN: Sie steht
|
||||
jetzt in pruef-treffchat, wo das Zeitfenster richtig gesetzt
|
||||
wird (ueber die Einstellung, nicht ueber die Systemuhr) und
|
||||
beide Zustaende in einem Lauf vorkommen. Dort war der GIF-Weg
|
||||
als einziger der drei noch gar nicht geprueft. */
|
||||
await seite.evaluate(async (id) => {
|
||||
await fetch("/workspace/api/chat/direkt", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
credentials: "same-origin",
|
||||
body: JSON.stringify({ mit: id }),
|
||||
});
|
||||
}, idMiss);
|
||||
await seite.reload({ waitUntil: "networkidle" });
|
||||
await seite.waitForSelector(".chat-raum__knopf", { timeout: 8000 });
|
||||
const zuMiss = seite.locator(".chat-raum__knopf", { hasText: "Miss" }).first();
|
||||
/* LAUT ABBRECHEN, WENN ES IHN NICHT GIBT. Ein stilles
|
||||
`?.click()` auf nichts waere wieder eine Messung, die „der Raum
|
||||
ist zu" meldet und den Grund verschweigt. */
|
||||
await zuMiss.waitFor({ timeout: 8000 });
|
||||
await zuMiss.click();
|
||||
try {
|
||||
await seite.waitForFunction(
|
||||
() => { const k = document.getElementById("gif-auf"); return k && !k.hidden; },
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user