Filipe, 22.09.2026: "wenn wir in der kategorie material was hochladen
will ich dass die rechte und linke hand es auch bearbeiten und loeschen
koennen. dogfather auch fals es ein fehler gab. ... uebrigens ersetz das
wort material durch Dogi-Media. und mach kategorien welche sind benutzt
welche nicht welche sind noch offen, welche laufen von wan bis wann."
WAS JETZT GEHT
- Rechte Hand, linke Hand und DogFather bearbeiten und entfernen jedes
Stueck, nicht nur ihr eigenes. Bearbeitet wird Text und Zeitfenster,
nicht die Datei: Sonst zeigte dieselbe Nummer etwas anderes als das,
was sich jemand gerade angesehen hat.
- Ein vergebenes Stueck bleibt unberuehrt (409). Wer es genommen hat,
hat sich auf diesen Text verlassen.
- Vier Zustaende, gerechnet statt gespeichert: jetzt frei, kommt noch,
abgelaufen, schon benutzt. Die Kategorieleiste zeigt zu jedem die
Anzahl aus den echten Daten und filtert BEIDE Listen.
- "Material" heisst ueberall "Dogi-Media", der Dateiname bleibt.
DREI FEHLER AUS DEM EIGENEN ENTWURF, ALLE VOR DEM AUSLIEFERN GEMESSEN
1. `tagLokal()` ohne Argument gab "NaN-NaN-NaN" zurueck -- eine
Zeichenkette, die aussieht wie ein Datum. Im Vergleich gewinnt das N
gegen jede Ziffer, also galt JEDES Stueck mit Enddatum vom ersten Tag
an als abgelaufen, und "Kommt noch" gab es nie. Kein Absturz, keine
Meldung. Die drei Kopien der Funktion waren hier auseinandergelaufen;
alle drei haben jetzt die Vorbelegung und werfen bei einer Zahl, die
keine ist.
2. `frageNach` liefert bei einer reinen Rueckfrage `true`, nicht
`{ ok: true }`. Der Entwurf prueft auf `erg?.ok` -- "Entfernen" waere
ein Knopf gewesen, der nichts tut.
3. Drei erfundene Klassennamen (`knopf--leise`, `m-kat__knopf`,
`m-karte__weg-knopf`) statt der vorhandenen des Hauses. Jetzt
`.knopf-still`, `.knopf-still--warn` und die Filterleiste `.filter`.
EIN FUND IM BESTAND, ZWEI WOCHEN ALT
In start.css fehlten an einer Stelle die zwei Zeichen, die einen
Kommentar schliessen. CSS-Kommentare schachteln nicht: Der Block lief
bis zum naechsten Abschluss weiter und verschluckte `.kacheln {`; die
Fehlerbehebung des Browsers nahm danach auch die Regel `.kachel` mit.
In Chromium gemessen, beide Fassungen nacheinander: 738 statt 740
Regeln.
Der Entwurf, der dadurch nie gewirkt hat, ist NICHT wiederhergestellt
worden: Seine Flaeche mischte den Kachelton mit 30/11/3 Prozent ein --
pruef-kachelfarben fiel sofort von 36,5 % auf 4,1 % angekommene Farbe,
und 31 Toene sahen gleich aus. Das ist das Gegenteil dessen, was am
22.09. verlangt war. Er ist geloescht, mit dem Grund daneben. Offen
bleibt eine Frage an Filipe, keine Entscheidung von mir: zu demselben
Entwurf gehoerte ein schmaleres Kachelraster (fuenf bis sechs statt
drei pro Reihe). Das aendert das Aussehen der Startseite sichtbar und
bleibt deshalb, wie es ist.
GEMEINSAME BAUSTEINE AUS DEN SEITENDATEIEN GEHOLT
`.filter` stand Zeichen fuer Zeichen doppelt in dateien.css und
bereich.css, `.feld-hinweis` in aufgaben.css und leistung.css (und die
zwei waren schon auseinandergelaufen). Dogi-Media war jeweils die
dritte Seite, die sie braucht, und laedt keine davon. Derselbe Fehler
wie damals bei .knopf-still und beim Schalter -- jetzt in gate.css
bzw. start.css.
GEPRUEFT
pruef-material 155/0 (von 126, neu: Zeitfenster, Bearbeiten, Entfernen,
Rechte in der Liste und ein Abschnitt am echten Bildschirm mit Browser).
pruef-css-klassen um eine Pruefung erweitert, die genau den
start.css-Fehler findet -- mit sieben Gegenproben, darunter der echte
Fall. pruef-kachelfarben 22/0, pruef-start-ansicht, pruef-struktur,
pruef-meldungen, pruef-zeitraum, pruef-content, pruef-serien 69/0.
Co-Authored-By: Claude Opus 5 <[email protected]>
76 lines
3.5 KiB
JavaScript
76 lines
3.5 KiB
JavaScript
/* WELCHER TAG IST HEUTE? — für Prüfungen.
|
|
|
|
DER FEHLER, DEN DAS VERHINDERT, gefunden am 06.09.2026 um 00:10.
|
|
|
|
Der Gesamtlauf meldete plötzlich 13 Fehlschläge in
|
|
pruef-teilnehmer.mjs -- an einer Datei, die seit Stunden niemand
|
|
angefasst hatte. "der alte Termin ist da: FEHL", "sein Teilnehmer
|
|
wurde uebernommen: LEER". Es sah aus, als sei die Teilnehmerfunktion
|
|
kaputt.
|
|
|
|
Sie war es nicht. Es war zehn nach Mitternacht.
|
|
|
|
Ortszeit (MESZ): 06.09.2026, 00:10
|
|
UTC: 05.09.2026, 22:10
|
|
|
|
Die Prüfung bildete ihr Datum mit
|
|
`new Date().toISOString().slice(0, 10)` -- das ist UTC und ergab den
|
|
5. September. Die Anwendung rechnet den Tag dagegen LOKAL
|
|
(heuteLokal() in workspace.js) und suchte am 6. Die Prüfung legte
|
|
ihre Termine also auf gestern und wunderte sich, dass sie heute
|
|
keine fand.
|
|
|
|
ZWEI STUNDEN AM TAG war diese Prüfung damit rot -- zwischen
|
|
Mitternacht und zwei Uhr, im Winter eine Stunde. Wer nur tagsüber
|
|
läuft, sieht das nie; wer nachts arbeitet, sucht stundenlang an der
|
|
falschen Stelle. Dieselbe Sorte Fehler wie die Layout-Messung, die
|
|
je nach Serverlaune anschlug: Ein Ergebnis, das von der Uhrzeit
|
|
abhängt, ist kein Ergebnis.
|
|
|
|
Deshalb gibt es das hier EINMAL statt viermal in Kopie. Die
|
|
Rechenweise ist bewusst dieselbe wie in workspace.js -- eine
|
|
Prüfung, die den Tag anders bestimmt als die Anwendung, prüft nicht
|
|
die Anwendung, sondern sich selbst.
|
|
===================================================================== */
|
|
|
|
/** Der heutige Tag in ORTSZEIT, als "JJJJ-MM-TT". */
|
|
export function heuteLokal() {
|
|
const d = new Date();
|
|
const p = (n) => String(n).padStart(2, "0");
|
|
return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}`;
|
|
}
|
|
|
|
/** Derselbe Tag, um `versatz` Tage verschoben. Negativ heißt zurück.
|
|
*
|
|
* ZWEI DINGE AM 22.09.2026 NACHGEZOGEN, beide durch einen echten Schaden:
|
|
*
|
|
* (1) `versatz = 0`. Dogi-Media rief `tagLokal()` ohne Argument auf und
|
|
* bekam `"NaN-NaN-NaN"` zurück -- eine Zeichenkette, die aussieht
|
|
* wie ein Datum und sich wie keines verhält. Im Vergleich
|
|
* `"2026-12-31" < "NaN-NaN-NaN"` gewinnt das N, also galt JEDES
|
|
* Stück mit Enddatum vom ersten Tag an als abgelaufen, und
|
|
* "Kommt noch" gab es nie. Kein Absturz, keine Meldung, keine
|
|
* Zeile im Protokoll -- nur eine Seite, die etwas anderes zeigt
|
|
* als die Wahrheit. Die drei Kopien dieser Funktion waren an
|
|
* dieser Stelle auseinandergelaufen: helfer-tag.mjs hatte die
|
|
* Vorbelegung, die beiden anderen nicht.
|
|
*
|
|
* (2) Der Wurf bei einer Zahl, die keine ist. Eine Vorbelegung deckt
|
|
* nur den leeren Aufruf ab; `tagLokal(irgendwas)` mit einer
|
|
* undefinierten Variablen läge weiter still daneben. Ein Datum,
|
|
* das sich nicht ausrechnen lässt, muss SCHEITERN und nicht
|
|
* schweigen -- sonst wandert der Unsinn in die Datenbank und in
|
|
* die Anzeige, und gefunden wird er Wochen später.
|
|
*
|
|
* Gerechnet wird über die Millisekunden und danach lokal ausgelesen.
|
|
* `setDate(getDate() + n)` täte es auch, hat aber an den zwei
|
|
* Umstellungstagen im Jahr seine Tücken. */
|
|
export function tagLokal(versatz = 0) {
|
|
if (!Number.isFinite(Number(versatz))) {
|
|
throw new TypeError(`tagLokal: "${versatz}" ist keine Zahl von Tagen.`);
|
|
}
|
|
const d = new Date(Date.now() + versatz * 86400_000);
|
|
const p = (n) => String(n).padStart(2, "0");
|
|
return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}`;
|
|
}
|