From 365e789cce2914817d05e421994455c117a669f2 Mon Sep 17 00:00:00 2001 From: Dogfather Date: Fri, 2 Oct 2026 00:36:44 +0200 Subject: [PATCH] Tagesgrenze: jetzt auch die Vergleiche, nicht nur das Schreiben MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Von den sechzehn Stellen vom 01.10. SCHREIBEN zehn einen Tag in die Datenbank — die decken die zwei Abschnitte von vorhin ab. Sechs VERGLEICHEN gegen „heute": ist diese Frist vorbei, faellt dieser Lead in den Zeitraum, ist dieser Bericht aktuell. Davon findet ein Schreibtest keinen einzigen. Die Spalte sieht richtig aus; falsch ist die Zahl, die jemand auf dem Bildschirm liest. ZWEI AUFGABEN GENUEGEN. Die Regel im Haus ist `frist < heute`: Frist = gestern (Ortszeit) -> muss ueberfaellig sein Frist = heute (Ortszeit) -> darf es nicht sein Mit dem alten UTC-Tag geht das in BEIDEN Zweigen der verschobenen Uhr schief: Etc/GMT-14 (Ortstag = UTC+1): heute_alt waere gestern -> 0 statt 1 Etc/GMT+11 (Ortstag = UTC-1): heute_alt waere morgen -> 2 statt 1 GEGENPROBE AM ECHTEN CODE: In workspace-aufgaben.js den UTC-Tag wieder eingebaut -> „genau eine ist ueberfaellig (0)". Zurueckgedreht und wieder gruen. UND EIN BEFUND AN MEINER EIGENEN PRUEFUNG, bei genau dieser Gegenprobe: Die zweite Zahl (`heute`) blieb 1 — aber sie zaehlte die FALSCHE Aufgabe. Mit dem UTC-Tag galt die von gestern als heute faellig. Mit zwei Zahlen allein ist das nicht zu trennen; in beiden Zweigen bleibt sie 1. Sie steht jetzt ausdruecklich als BEGLEITPROBE da: Sie zeigt, dass ueberhaupt gezaehlt wird, und der Unterschied kommt aus der Zeile darueber. Eine Zahl, die aus dem falschen Grund stimmt, soll nicht aussehen wie ein Beweis. Dazu im Lauf eine ausgerechnete Zeile, die sagt, WARUM die Zahlen etwas beweisen: „mit dem UTC-Tag waeren es 0 statt 1". IM FENSTER NACHGEMESSEN (00:09 bis 00:40 Ortszeit, UTC noch der Vortag) — die restlichen Pruefungen, die ich gestern zur falschen Tageszeit geprueft hatte: zuteilung 75, aufgabenbrett 49, content 45, vorlagen 24, bewerbung 91, scout-zuteilung 37, unterstuetzung 70, aufbewahrung 45, ics 38, entwicklung 79 — alle 0 Fehler. Zusammen mit den vierzehn von vorhin sind das 24 Dateien, die diesmal im richtigen Zeitfenster gemessen wurden. pruef-tagesgrenze: 8 -> 12 Pruefungen, 0 Fehler. Co-Authored-By: Claude Opus 5 --- server/pruef-tagesgrenze.mjs | 60 ++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/server/pruef-tagesgrenze.mjs b/server/pruef-tagesgrenze.mjs index 70e7407b..144cb606 100644 --- a/server/pruef-tagesgrenze.mjs +++ b/server/pruef-tagesgrenze.mjs @@ -65,7 +65,7 @@ import { mkdtempSync, rmSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { eigenerPort } from "./helfer-port.mjs"; -import { heuteLokal } from "./helfer-tag.mjs"; +import { heuteLokal, tagLokal } from "./helfer-tag.mjs"; let fehler = 0, geprueft = 0; const ok = (b, t) => { geprueft++; console.log((b ? " ok " : " FEHL ") + t); if (!b) fehler++; }; @@ -180,7 +180,63 @@ console.log("\n=== 2. Und die Kette, an der es aufgefallen ist ==="); `und er liegt auf dem Ortstag ${ORTSTAG}, nicht auf ${UTC_TAG} (steht: ${t?.datum})`); } -console.log("\n=== 3. Gegenprobe: wuerde der alte Weg auffallen? ==="); +console.log("\n=== 3. Und die VERGLEICHE: was ist ueberfaellig? ==="); +/* Von den sechzehn Stellen vom 01.10. SCHREIBEN zehn einen Tag; die + zwei Abschnitte oben decken sie ab. Sechs VERGLEICHEN gegen + „heute" — und davon findet ein Schreibtest keinen einzigen. Die + Spalte sieht richtig aus; falsch ist die Zahl, die jemand auf dem + Bildschirm liest. + + Die Regel im Haus ist `frist < heute`. Zwei Aufgaben genuegen, und + sie unterscheiden in BEIDEN Zweigen der verschobenen Uhr: + + Etc/GMT-14 (Ortstag = UTC+1): heute_alt waere gestern + -> „gestern" nicht mehr kleiner als heute_alt -> 0 statt 1 + Etc/GMT+11 (Ortstag = UTC-1): heute_alt waere morgen + -> „heute" kleiner als heute_alt -> 2 statt 1 */ +{ + const GESTERN = tagLokal(-1); + const neueAufgabe = (titel, frist) => fetch(`${BASIS}/workspace/api/aufgaben`, { + method: "POST", headers: kopf(dogi), + body: JSON.stringify({ titel, frist, prioritaet: "mittel" }), + }); + + const a1 = await neueAufgabe("Frist war gestern", GESTERN); + const a2 = await neueAufgabe("Frist ist heute", ORTSTAG); + ok(a1.status === 201 && a2.status === 201, + `zwei Aufgaben angelegt, Fristen ${GESTERN} und ${ORTSTAG}` + + ` (${a1.status}/${a2.status})`); + + const u = await (await fetch(`${BASIS}/workspace/api/uebersicht`, + { headers: { cookie: dogi } })).json().catch(() => ({})); + + ok(u.ueberfaellig === 1, + `genau eine ist ueberfaellig — die von gestern (${u.ueberfaellig})`); + /* DIESE ZAHL UNTERSCHEIDET NICHT, und das gehoert dazugeschrieben. + Gemessen beim Rueckbau: Mit dem UTC-Tag blieb sie 1 — nur zaehlte + sie die FALSCHE Aufgabe (die von gestern galt dann als heute + faellig). Mit zwei Zahlen allein ist das nicht zu trennen; in + beiden Zweigen der verschobenen Uhr bleibt sie 1. + + Sie steht hier als Begleitprobe: Sie zeigt, dass ueberhaupt + gezaehlt wird. Der Unterschied kommt aus der Zeile darueber. Eine + Zahl, die aus dem falschen Grund stimmt, soll nicht aussehen wie + ein Beweis. */ + ok(u.heute === 1, + `und eine ist fuer heute faellig (${u.heute}) — Begleitprobe,` + + " sie unterscheidet nicht"); + + /* WAS DER ALTE WEG GESAGT HAETTE. Nicht nachgebaut, sondern + ausgerechnet: Damit steht im Lauf, warum diese zwei Zahlen etwas + beweisen und nicht nur zufaellig stimmen. */ + const alt = UTC_TAG; + const waere = [GESTERN, ORTSTAG].filter((f) => f < alt).length; + ok(waere !== 1, + `mit dem UTC-Tag (${alt}) waeren es ${waere} statt 1 — die Zeile` + + " ueber dieser unterscheidet also wirklich"); +} + +console.log("\n=== 4. Gegenprobe: wuerde der alte Weg auffallen? ==="); /* Eine Pruefung, die immer bestaetigt, bestaetigt nichts. Hier wird nachgebaut, was bis zum 01.10. im Code stand — und gezeigt, dass die Behauptungen oben daran scheitern wuerden. */