Vier rote Pruefungen -- drei Phantome und ein echtes Gewicht
Weiter durch die rote Liste. Drei der vier Befunde zeigten auf
gesunden Code; die Pruefungen selbst waren seit einem Umbau nicht
nachgezogen worden.
pruef-schritt (2 rot -> 71 gruen statt 47)
Meldete "1 von 6 Kategorien". Die Karte geht seit dem 01.10.2026
gefiltert auf ("zugetragen"), Bloecke ohne solche Punkte werden gar
nicht gezeichnet. Die Pruefung zaehlte danach alle. Schlimmer: Weil
dann kein Block mehr zugeklappt war, lief der Klick auf einen
zugeklappten 30 Sekunden in die Frist und riss den Lauf mit -- 24 von
71 Pruefungen liefen nie. Jetzt wird erst die Vorgabe geprueft (sie
ist eine Zusage), dann auf "Alle" gestellt.
pruef-glocke (1 rot -> 34 gruen)
Meldete "auf der Anmeldeseite steht der Knopf". Gemessen landete sie
auf start.html: Dieselbe Seite war eine Zeile zuvor angemeldet durch
zwanzig Arbeitsseiten gelaufen, und angemeldet fuehrt /workspace/
nicht zur Wand. Jetzt eigener Kontext ohne Keks -- und davor die
Zeile, dass die Wand wirklich erreicht wurde.
pruef-zeichen (1 rot -> 8 gruen)
Meldete content: "·" als Kodierungstruemmer. Die Bytes sind C2 B7,
also korrektes UTF-8; der Mittelpunkt ist ein begruendeter Trennpunkt
(seit 03.10.). Die Regel stammt aus einer Zeit, in der sie selbst
festhielt: "KEINE einzige benutzt ein Zeichen aus diesem Block."
Jetzt eine benannte Ausnahme MIT Veraltungsschutz: Jedes Zeichen
darin muss wirklich vorkommen, sonst wird die Ausnahme rot.
pruef-tempo-workspace (1 rot -> 9 gruen) -- DER ECHTE BEFUND
uebersicht.html 959 KB, bereich.html?b=live 1094 KB bei einer Grenze
von 900. Die Pruefung sagt jetzt auch, WORAN es liegt, und die
Antwort war eindeutig: ZWEI Buehnenbilder auf einer Seite, die eines
zeigt (281 KB studio + 262 KB portal).
Ursache: start.css traegt an body.start::before einen Rueckfall
(studio), und kopf.js setzt `data-buehne` erst, wenn die Seite steht.
Bis dahin ist der Rueckfall geholt -- auf 43 von 45 Seiten.
Jetzt steht die Szene fest im <body>, erzeugt aus bereiche.js
(tools/buehne-festschreiben.mjs, 20 Seiten). bereich.html bedient
fuenf Bretter und kann das nicht; sie bekommt ein kleines Skript
gleich hinter <body>, das die Szene aus `?b=` setzt, bevor gezeichnet
wird. Gemessen: 1094 -> 879 KB, und die Grenze haelt wieder.
DIE ZUORDNUNG STEHT DAMIT AN ZWEI STELLEN. Das ist nur vertretbar,
weil sie nicht auseinanderlaufen kann: pruef-buehnen-fest.mjs (neu,
13 Pruefungen) haelt HTML gegen bereiche.js, prueft die Lage des
Skripts und dass jede genannte Szene eine Regel hat.
Dabei gefunden und berichtigt -- zweimal an mir selbst: Der erste
Entwurf verglich Szenen mit Dateinamen und meldete teamlage.html
("eingang") als Fehler; die Szene gibt es, ihre Regel zeigt nur auf
ein crew-Bild. Und der Lage-Anker suchte `data-buehne`, das Skript
schreibt `dataset.buehne` -- indexOf gab -1, die Rechnung wurde
negativ und meldete "-2276 Zeichen dahinter".
Gegenproben gefahren: Szene verschoben -> rot mit Abstand; Ausnahme
verwaist -> rot; erfundene Szene -> erkannt.
Dazu gruen: css-klassen, workspace-seiten, neue-seiten, haus-trennung,
kopfleiste-farbe.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -234,11 +234,37 @@ console.log("=== 2. Der Server ===");
|
||||
console.log("");
|
||||
console.log("=== 3. Zeichen, die CSS auf den Bildschirm schreibt ===");
|
||||
|
||||
/** Truemmerverdacht: Latin-1-Block, wo echte Typografie nie hingehoert. */
|
||||
const istTruemmer = (c) => c >= 0x80 && c <= 0xbf;
|
||||
/* ==== DIE AUSNAHME, DIE NICHT VERALTEN KANN (07.10.2026) ============
|
||||
|
||||
Der Absatz darueber sagt: „Nachgemessen ueber alle 203
|
||||
content-Angaben im Haus: KEINE einzige benutzt ein Zeichen aus
|
||||
diesem Block." Das stimmte am 03.09.2026 und stimmt seit dem
|
||||
03.10.2026 nicht mehr: bereich.css setzt `content: "·"` als
|
||||
Trennpunkt vor den Aufgabenzaehler -- absichtlich, begruendet, und
|
||||
als korrektes UTF-8 gespeichert (Bytes C2 B7 nachgemessen).
|
||||
|
||||
DIE REGEL BLEIBT TROTZDEM. Sie hat den echten Fall gefunden (U+00B9,
|
||||
hochgestellte Eins) und wuerde ihn wieder finden. Was nicht bleiben
|
||||
darf, ist der Fehlalarm: Eine Pruefung, die bei jedem Lauf eine
|
||||
richtige Stelle anmeckert, wird weggeklickt -- und nimmt den echten
|
||||
Fund mit. Das steht vier Absaetze weiter oben in dieser Datei selbst.
|
||||
|
||||
DIE LISTE KANN NICHT ROTTEN, weil sie gegen die Wirklichkeit geprueft
|
||||
wird: Jedes Zeichen darin MUSS irgendwo wirklich vorkommen. Faellt
|
||||
der Trennpunkt eines Tages weg, wird die Ausnahme rot statt
|
||||
stillschweigend weiterzugelten -- dieselbe Bauweise wie bei den
|
||||
ausgenommenen Dateien in pruef-modi-wortleck. */
|
||||
const MIT_ABSICHT = new Map([
|
||||
[0x00b7, "Mittelpunkt als Trennzeichen vor dem Aufgabenzaehler (bereich.css)"],
|
||||
]);
|
||||
|
||||
/** Truemmerverdacht: Latin-1-Block, wo echte Typografie nie hingehoert --
|
||||
* bis auf die ausdruecklich benannten Ausnahmen. */
|
||||
const istTruemmer = (c) => c >= 0x80 && c <= 0xbf && !MIT_ABSICHT.has(c);
|
||||
|
||||
{
|
||||
const verdaechtig = [];
|
||||
const gesehen = new Set();
|
||||
let stellen = 0;
|
||||
for (const p of geliefert.filter((x) => extname(x) === ".css")) {
|
||||
const text = readFileSync(p, "utf8");
|
||||
@@ -246,6 +272,7 @@ const istTruemmer = (c) => c >= 0x80 && c <= 0xbf;
|
||||
stellen++;
|
||||
for (const z of m[1]) {
|
||||
const c = z.codePointAt(0);
|
||||
if (MIT_ABSICHT.has(c)) gesehen.add(c);
|
||||
if (istTruemmer(c)) {
|
||||
verdaechtig.push(`${relative(WURZEL, p)}: content "${m[1]}" enthaelt U+${c.toString(16).toUpperCase().padStart(4, "0")}`);
|
||||
}
|
||||
@@ -253,7 +280,15 @@ const istTruemmer = (c) => c >= 0x80 && c <= 0xbf;
|
||||
}
|
||||
}
|
||||
ok(stellen > 50 && verdaechtig.length === 0,
|
||||
`${stellen} content-Angaben in CSS, ${verdaechtig.length} mit Kodierungstruemmern`);
|
||||
`${stellen} content-Angaben in CSS, ${verdaechtig.length} mit Kodierungstruemmern`
|
||||
+ (verdaechtig.length ? ":\n " + verdaechtig.slice(0, 5).join("\n ") : ""));
|
||||
/* Und die Gegenprobe zur Ausnahme: Was hier steht, muss es geben. */
|
||||
const verwaist = [...MIT_ABSICHT.keys()].filter((c) => !gesehen.has(c));
|
||||
ok(verwaist.length === 0,
|
||||
`alle ${MIT_ABSICHT.size} benannten Ausnahmen kommen wirklich vor`
|
||||
+ (verwaist.length
|
||||
? ` -- verwaist: ${verwaist.map((c) => "U+" + c.toString(16).toUpperCase()).join(", ")}`
|
||||
: ""));
|
||||
for (const s of verdaechtig.slice(0, 12)) console.log(" " + s);
|
||||
|
||||
/* GEGENPROBE: Wuerde sie den echten Fall sehen? Nicht theoretisch --
|
||||
|
||||
Reference in New Issue
Block a user