diff --git a/server/pruef-zentrale-ring.mjs b/server/pruef-zentrale-ring.mjs index 55070543..29ecf11c 100644 --- a/server/pruef-zentrale-ring.mjs +++ b/server/pruef-zentrale-ring.mjs @@ -119,6 +119,19 @@ setzen(idLeer, "offen", tagLokal(5)); setzen(idSaeu, "offen", tagLokal(-4)); setzen(idSaeu, "offen", tagLokal(-3)); setzen(idSaeu, "arbeit", tagLokal(-1)); +/* DREI TERMINE IN DERSELBEN STUNDE -- der Fall, an dem "kommt noch" + Stunden statt Termine zaehlte und deshalb 1 statt 3 meldete. Die + Stunde liegt bewusst spaet, damit sie in JEDER Tageszeit noch in der + Zukunft liegt; eine Pruefung, die nur vormittags gruen ist, waere + eine Zeitbombe. */ +const SPAET = 23; +for (let i = 0; i < 3; i++) { + d.prepare(`INSERT INTO termine (titel, beginn, dauer_min, teilnehmer_id, erstellt, erstellt_von) + VALUES (?,?,?,?,?,?)`) + .run("Sendung", `${heuteLokal()}T${SPAET}:${String(10 + i * 5).padStart(2, "0")}:00`, + 30, idTut, jetzt, idTut); +} + d.close(); async function ring(code) { @@ -212,6 +225,38 @@ melde("=== 5. Was der Ring NICHT mehr ist ==="); `die alte Uhrzeit-Rechnung ergaebe jetzt ${alt} %, der Ring zeigt ${r.prozent} %`); } +/* ======================================================================= + 6. DIE DREI ZAHLEN UNTER DEM RING + ======================================================================= */ +melde(""); +melde("=== 6. Termine heute, kommt noch ==="); +{ + const r = await ring("CODE-TUT-00001"); + const schilder = (r.zahlen || []).map((z) => z.schild); + /* "heute" ALLEIN WAR ZWEIDEUTIG: Der Ring darueber sagt jetzt "Heute + geschafft" und meint Aufgaben, diese Zahl meint Termine. */ + ok(schilder[0] === "Termine heute", + `die erste Zahl sagt, WAS heute ist ("${schilder[0]}")`); + + /* UND DER EIGENTLICHE FEHLER: drei Termine in derselben Stunde. */ + const kommtNoch = (r.zahlen || [])[1]; + const jetztStunde = new Date().getHours(); + if (jetztStunde > 23) { + melde(" -- nach 23 Uhr nicht messbar -- die drei Termine liegen dann hinter uns"); + } else { + ok(kommtNoch?.wert === 3, + `drei Termine um 23 Uhr zaehlen als drei, nicht als eine Stunde (${kommtNoch?.wert})`); + } + + /* GEGENPROBE: Wer keine Termine hat, bekommt hier auch keine -- sonst + hiesse "3" nur, dass immer 3 herauskommt. */ + const leer = await ring("CODE-LEER-0001"); + ok((leer.zahlen || [])[1]?.wert === 0, + `und wer keine hat, sieht null (${(leer.zahlen || [])[1]?.wert})`); + ok((leer.zahlen || [])[0]?.wert === 0, + `auch bei "Termine heute" (${(leer.zahlen || [])[0]?.wert})`); +} + /* ------------------------------------------------------------------- */ melde(""); melde(`${geprueft} Pruefungen, ${fehler} Fehler`); diff --git a/server/workspace-zentrale.js b/server/workspace-zentrale.js index 388f8f8d..def012a4 100644 --- a/server/workspace-zentrale.js +++ b/server/workspace-zentrale.js @@ -300,8 +300,26 @@ zentraleRouter.get("/workspace/api/zentrale", (req, res) => { prozent: dran ? Math.round((heuteFertig / dran) * 100) : 100, segmente, zahlen: [ - { wert: meine.length, schild: "heute" }, - { wert: [...mitTermin].filter((s) => s >= stundeJetzt).length, schild: "kommt noch" }, + /* "TERMINE HEUTE", NICHT NUR "HEUTE" (17.09.2026). + + Hier stand blosses "heute" -- und gezaehlt werden Termine. + Solange der Ring darueber die Uhrzeit zeigte, fiel das nicht + auf. Seit er "Heute geschafft" heisst und AUFGABEN zaehlt, + stehen zwei verschiedene "heute" uebereinander: eins meint + Aufgaben, eins Termine. Wer das liest, haelt die kleinere + Zahl fuer einen Fehler in der groesseren. */ + { wert: meine.length, schild: "Termine heute" }, + /* UND HIER WURDEN STUNDEN GEZAEHLT, NICHT TERMINE. + + `mitTermin` ist eine Menge von STUNDEN -- fuer den Ring + richtig, denn er faerbt Stundensegmente. Als Zahl daneben + war es falsch: Drei Termine um 20 Uhr ergaben "1 kommt + noch". Niemand haette das gemeldet, weil eine zu kleine Zahl + nicht auffaellt; man verlaesst sich nur darauf und wundert + sich spaeter. Gezaehlt wird jetzt, was es ist. */ + { wert: meine.filter( + (t) => Number(String(t.beginn).slice(11, 13)) >= stundeJetzt).length, + schild: "kommt noch" }, /* "BETREUT" IST FUER EINEN MODI IMMER NULL (10.09.2026). Er betreut keine Creator -- das ist die Arbeit der Scouts und diff --git a/workspace/app.webmanifest b/workspace/app.webmanifest index 4be57ba6..65ae51fb 100644 --- a/workspace/app.webmanifest +++ b/workspace/app.webmanifest @@ -13,25 +13,25 @@ "theme_color": "#06090f", "icons": [ { - "src": "/assets/img/app-symbole/workspace-192.png?v=202609162320", + "src": "/assets/img/app-symbole/workspace-192.png?v=202609170226", "sizes": "192x192", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-512.png?v=202609162320", + "src": "/assets/img/app-symbole/workspace-512.png?v=202609170226", "sizes": "512x512", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609162320", + "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609170226", "sizes": "192x192", "type": "image/png", "purpose": "maskable" }, { - "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609162320", + "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609170226", "sizes": "512x512", "type": "image/png", "purpose": "maskable" diff --git a/workspace/assets/js/start.js b/workspace/assets/js/start.js index cb1fd611..21150106 100644 --- a/workspace/assets/js/start.js +++ b/workspace/assets/js/start.js @@ -348,8 +348,20 @@ const marke = el('span', 'kachel__zahl', String(zahl.n)); if (zahl.warn) marke.dataset.warn = 'ja'; /* Vorlesende Programme bekommen einen Satz statt einer nackten - Zahl -- "Aufgaben, 3" sagt nichts. */ - marke.setAttribute('aria-label', `${zahl.n} offene Punkte in ${b.name}`); + Zahl -- "Aufgaben, 3" sagt nichts. + + NICHT "OFFENE PUNKTE" (17.09.2026). Gezaehlt werden + HINWEISE: bei Aufgaben etwa "2 ueberfaellig" plus "2 heute + faellig" -- also 4. Darunter steht im Zahlenblock aber "6 + Offen", und beides ist richtig. Das Wort "offen" war die + einzige Stelle, an der daraus ein Widerspruch wurde: Wer + die Kachel vorgelesen bekam, hoerte eine Zahl offener + Aufgaben, die es so nicht gibt. + + "Liegt an" ist das Wort, das im Haus ohnehin dafuer steht + -- der Block darueber heisst "Was ist dran". */ + marke.setAttribute('aria-label', + `${b.name}: ${zahl.n} ${zahl.n === 1 ? 'Sache liegt an' : 'Sachen liegen an'}`); a.append(marke); } else { a.append(el('span', 'kachel__pfeil', '→')); diff --git a/workspace/aufgaben.html b/workspace/aufgaben.html index 7139f2c0..f59e20f0 100644 --- a/workspace/aufgaben.html +++ b/workspace/aufgaben.html @@ -12,19 +12,19 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - + + + + + + - +
@@ -282,10 +282,10 @@ - - - - - + + + + +