Keine fertigen Vorschläge mehr bei den Highlights

Filipe: "nimm die sachen da weg bitte. da sollen nur die sachen rein
kommen die die modis, linke und rechte hand oder dogfather
reinsetzen."

In der Spalte "Noch einzusortieren" standen drei vorgefertigte
Vorschlaege ("Was hier hingehoert", "Fanart von DogFather und Casper
ist ausdruecklich erwuenscht", "Ein Ausschnitt, der auf die Clips
soll"). Jemand hatte sie uebernommen, und danach standen sie zwischen
den echten Clips -- mit Datum, mit Verfasser, aeusserlich nicht von
einem echten Eintrag zu unterscheiden.

WARUM DIESES BRETT ANDERS IST ALS DIE UEBRIGEN: Anderswo ist ein
Vorschlag eine ANREGUNG, die man ausfuellt ("Der naechste Stream mit
DogFather" -> Datum eintragen). Highlights ist eine SAMMLUNG echter
Sachen. Ein vorgefertigter Text ist dort kein Anfang, sondern ein
Platzhalter, der aussieht wie Inhalt. Die anderen Bretter behalten
ihre Vorschlaege -- dazu hat er nichts gesagt.

Nebenbefund: Seine Rollenaufzaehlung ist genau TREFF_TEAM_ROLLEN
(modi, hand, linke, admin). Die Rechteregel stimmte also schon.

ZWEI ECHTE MAENGEL FIELEN DABEI AUF, beide beim Versuch, die drei
Eintraege wegzunehmen:

1. Der Knopf "loeschen" schickte DELETE OHNE GRUND. Der Server
   verlangt bei einem fremden Beitrag auf einem Treff-Brett einen
   (DSA Art. 17) und antwortet mit 400 -- die Oberflaeche zeigte nur
   "Loeschen hat nicht geklappt." Zwei Knoepfe nebeneinander, einer
   ging ("entfernen"), einer nicht, und die Meldung erklaerte nichts.
   Jetzt fragt auch "loeschen" nach dem Grund, wenn der Server einen
   braucht -- erkannt an `treffBrett` vom Server, nicht an einer
   abgeschriebenen Brettliste -- und die Fehlermeldung gibt wieder,
   was der Server gesagt hat.

2. Der Dialog liess DREI Zeichen als Grund durch, der Server verlangt
   ZEHN. Wer "spam" tippte, kam durch die Nachfrage und bekam danach
   eine Absage. `grund_min` steht seit dem 11.09. in /api/treff/lage
   und wurde nie benutzt; jetzt ist es angeschlossen. In nachfrage.js
   bestimmt der Aufrufer die Mindestlaenge (`grundMin`), Vorgabe
   bleibt 3 -- fuer alle anderen Nachfragen aendert sich nichts.

UND ZWEI PRUEFUNGEN, DIE ROT WAREN, OHNE DASS ETWAS KAPUTT WAR:

- pruef-treff-start verlangte `>= 8` Vorschlaege auf dem Schirm. Das
  stimmte bis zum Fenster-Umbau vom 20.09. -- seither kommen
  hoechstens VIER (FENSTER = 4). Vier Tage rot, ohne dass es jemand
  erfuhr. Gefragt wird jetzt der Server selbst. Und die Brettliste
  ["treff","anschlag","wunsch","highlight"] wird gegen den Bestand
  abgeglichen statt abgeschrieben -- mit ausdruecklichem Nachweis,
  dass Highlights keine mehr hat, damit das Wegfallen nicht einfach
  eine Pruefung weniger bedeutet. 41 -> 42 Pruefungen.

- pruef-nachfrage zaehlte `installieren.js` als "diese Seite fragt
  nach", obwohl der Aufruf dort hinter `if (typeof window.frageNach
  === 'function')` steht. Weil die Datei auf fast jeder Seite liegt,
  wurde damit JEDE Seite zur fragenden -- fuenf rote Zeilen, kein
  einziger echter Mangel. Ausserdem wurde die Kurzschreibweise
  `{ titel, … }` als "ohne Titel" gemeldet. 46 -> 53 Pruefungen, alle
  gruen; zwei davon sind neu (Gegenprobe plus Benennung der
  Ausnahmen).

Beide mit Gegenprobe (git stash) belegt: schon vor dieser Aenderung
rot.

Gemessen: 11 Messungen, 0 Befunde -- darunter die Gegenprobe, dass
der alte Weg (DELETE ohne Grund) wirklich mit 400 gescheitert waere.
Gruen: pruef-treff-start (42), pruef-nachfrage (53), pruef-highlights
(31), pruef-anschlagbrett (12), pruef-css-klassen.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-24 00:50:42 +02:00
co-authored by Claude Opus 5
parent 428235508f
commit d85694bd92
44 changed files with 800 additions and 618 deletions
+69 -6
View File
@@ -169,17 +169,57 @@ melde("=== 1. Was bereitliegt ===");
`${mit} von ${alle.length} Texten nennen DogFather, seine Kanaele oder Casper `
+ `(${Math.round(mit / alle.length * 100)} %)`);
/* UND DIE VIER BRETTER, DIE DIE COMMUNITY WIRKLICH SIEHT, ganz.
Auf dem Anschlagbrett, im Treff, in der Wunschliste und bei den
Highlights gibt es keinen Satz, der ohne ihn auskommt -- sie
handeln von seinen Streams. */
for (const b of ["treff", "anschlag", "wunsch", "highlight"]) {
/* JEDES BRETT, DAS VORSCHLAEGE HAT, ganz -- sie handeln von
seinen Streams, und keiner kommt ohne ihn aus.
DIE LISTE WIRD ABGELEITET, NICHT ABGESCHRIEBEN (24.09.2026).
Hier stand `["treff", "anschlag", "wunsch", "highlight"]`. Am
24.09. fielen die Vorschlaege fuer Highlights weg (Filipe: "da
sollen nur die sachen rein kommen die die modis, linke und
rechte hand oder dogfather reinsetzen"), und die Pruefliste
wusste es nicht: Sie verlangte weiter Texte von einem Brett,
das keine mehr hat. Dieselbe Falle wie jede abgeschriebene
Liste in diesem Haus -- eine, die niemand pflegt, kann nicht
veralten.
DASS ES UEBERHAUPT WELCHE GIBT, wird eine Zeile tiefer
geprueft. Sonst waere "alle geprueft" auch dann gruen, wenn
morgen gar kein Brett mehr Vorschlaege haette -- ein
uebersprungener Test beweist nichts. */
/* DIE ABSICHT BLEIBT, DIE LISTE WIRD GEPRUEFT (berichtigt beim
zweiten Anlauf am 24.09.2026).
Mein erster Versuch nahm einfach ALLE Bretter mit Vorschlaegen.
Das war bequem und falsch: "Regeln", "Mitmachen" und "Was
ansteht" haben zu Recht Saetze ohne seinen Namen ("Turnier",
"Schritt 2: Sag im Rudel, dass du Lust hast") -- fuer die gilt
die 60-%-Regel eine Zeile weiter oben, nicht diese hier. Die
Pruefung waere dadurch rot geworden, ohne dass etwas kaputt
war, und ich haette ihre Aussage veraendert statt ihre Liste zu
reparieren.
Richtig ist die Schnittmenge: die Bretter, die die Community
sieht UND die ueberhaupt Vorschlaege haben. Faellt eines weg,
faellt es hier lautlos heraus -- deshalb steht direkt darunter,
WIE VIELE es sein muessen, und fuer Highlights ausdruecklich,
dass es keine mehr hat. */
const GEMEINT = ["treff", "anschlag", "wunsch", "highlight"];
const mitVorschlaegen = GEMEINT.filter((b) => (TREFF_START[b] || []).length > 0);
ok(mitVorschlaegen.length === 3,
`${mitVorschlaegen.length} der Bretter, die die Community sieht, haben `
+ `Vorschlaege (${mitVorschlaegen.join(", ")})`);
for (const b of mitVorschlaegen) {
const liste = TREFF_START[b] || [];
const ohne = liste.filter((v) => !BEZUG.test(`${v.titel} ${v.text}`));
ok(liste.length > 0 && ohne.length === 0,
ohne.length ? `${b}: ohne Bezug -- "${ohne[0].titel}"`
: `${b}: alle ${liste.length} Texte sind auf ihn bezogen`);
}
/* UND HIGHLIGHTS HAT AUSDRUECKLICH KEINE MEHR. Ohne diese Zeile
wuerde das Wegfallen nur dazu fuehren, dass eine Pruefung
weniger laeuft -- und niemand merkte, wenn sie zurueckkaemen. */
ok(!(TREFF_START.highlight || []).length,
"Highlights hat keine fertigen Vorschlaege (auf Ansage vom 24.09.2026)");
/* GEGENPROBE: Ein anonymer Text MUSS auffallen. Ohne sie hiesse
"alle bezogen" nur, dass das Muster auf alles passt. */
@@ -333,7 +373,30 @@ melde("=== 6. Wie es aussieht ===");
alleKnopf: document.querySelector(".startkatalog__alle")?.textContent?.trim() || "",
leer: document.querySelector(".leer-hinweis")?.textContent?.trim() || "",
}));
ok(vorher.karten >= 8, `${vorher.karten} Vorschlaege stehen bereit`);
/* WIE VIELE STEHEN DA? NICHT EINE ZAHL VON GESTERN (24.09.2026).
Hier stand `>= 8`. Das stimmte, bis am 20.09.2026 das Fenster
eingefuehrt wurde -- seither kommen HOECHSTENS VIER auf einmal
(FENSTER = 4 in workspace-bereiche.js), und die Pruefung war
vier Tage lang rot, ohne dass es jemandem gesagt wurde. Genau
die Sorte Zahl, vor der CLAUDE.md warnt: eine Rechnung von
gestern, die still falsch wird.
Gefragt wird jetzt der Server selbst -- er weiss, wie viele er
schickt, und die Oberflaeche muss genau so viele zeichnen.
Zusaetzlich `> 0`, damit "gleich viele" nicht auch bei null
gruen ist. */
const ausDerAntwort = await seite.evaluate(async () => {
const a = await fetch("/workspace/api/bereich/mitmachen/start?ab=0",
{ credentials: "same-origin" });
if (!a.ok) return null;
const j = await a.json();
return { geschickt: (j.vorschlaege || []).length, vorrat: j.vorrat, offen: j.offen };
});
ok(!!ausDerAntwort && ausDerAntwort.geschickt > 0
&& vorher.karten === ausDerAntwort.geschickt,
`${vorher.karten} Vorschlaege stehen bereit -- genau so viele, wie der `
+ `Server schickt (${ausDerAntwort?.geschickt}), von ${ausDerAntwort?.offen} offenen`);
ok(/Alle \d+ übernehmen/.test(vorher.alleKnopf), `mit einem Knopf ("${vorher.alleKnopf}")`);
/* DER LEERTEXT IST DER DES BEREICHS, nicht der Einheitssatz. */
ok(vorher.leer.includes("dazugehören"),