Zentrale: "0 betreut" war fuer die Community dieselbe tote Zahl

Im Code stand die Loesung schon -- fuer jemand anderen. Am 10.09.2026
wurde dort vermerkt:

  "BETREUT" IST FUER EINEN MODI IMMER NULL. Er betreut keine Creator.
  Auf seiner Startseite stand deshalb dauerhaft "0 betreut": eine
  Zahl, die nie etwas anderes sagen kann, und damit schlimmer als
  keine. Wer sie sieht, sucht nach dem Fehler.

Fuer ein Mitglied der Community gilt das erst recht -- und dort blieb
es stehen. Dieselbe Zahl, derselbe Grund, dieselbe Wirkung.

Jetzt steht dort, was die Community wirklich betrifft: WUENSCHE OFFEN.
Der Ort, an dem sie mitentscheidet, was als Naechstes passiert -- eine
Zahl, die zum Hingehen einlaedt, statt eine, die nichts sagt.

WORAN DIE ENTSCHEIDUNG HAENGT: `freigabeBedingung` gibt nur fuer Leute
von aussen eine SQL-Bedingung zurueck, sonst null. Damit ist die Frage
"ist das jemand aus der Community" schon beantwortet, ohne dass hier
ein Rollenname steht -- und dieselbe Bedingung sorgt dafuer, dass nur
gezaehlt wird, was diese Person auch sehen darf.

GEMESSEN, beide Seiten:
  Community : "4 Wuensche offen"
  DogFather : "2 im Team" (unveraendert)
pruef-zentrale-ring: 14 Pruefungen, 0 Fehler.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-18 21:44:27 +02:00
co-authored by Claude Opus 5
parent 4f5ac04bc9
commit c2a8c5f15f
2 changed files with 61 additions and 6 deletions
+38 -6
View File
@@ -52,6 +52,7 @@
import express from "express"; import express from "express";
import { db, sitzungLesen, istLeitung, betreuteIds, scoutsVon, verborgeneIds, hausBedingung, import { db, sitzungLesen, istLeitung, betreuteIds, scoutsVon, verborgeneIds, hausBedingung,
TEAM_DOGI_ROLLEN } from "./workspace.js"; TEAM_DOGI_ROLLEN } from "./workspace.js";
import { freigabeBedingung } from "./workspace-treff.js";
export const zentraleRouter = express.Router(); export const zentraleRouter = express.Router();
@@ -332,12 +333,43 @@ zentraleRouter.get("/workspace/api/zentrale", (req, res) => {
die Zahl, die an dieser Stelle etwas bedeutet -- und sie die Zahl, die an dieser Stelle etwas bedeutet -- und sie
bekommt nur zu sehen, wer ohnehin weiss, dass es die Runde bekommt nur zu sehen, wer ohnehin weiss, dass es die Runde
gibt. */ gibt. */
TEAM_DOGI_ROLLEN.has(zeigt.rolle) /* UND FUER DIE COMMUNITY GILT DASSELBE (18.09.2026).
? { wert: db().prepare(
`SELECT COUNT(*) AS n FROM personen WHERE rolle IN (${ Der Absatz darueber loest dieses Problem seit dem 10.09. fuer
[...TEAM_DOGI_ROLLEN].map((r) => `'${r}'`).join(", ")}) AND aktiv = 1`).get().n, einen Modi -- fuer ein Mitglied der Community blieb es
schild: "im Team" } stehen. Es betreut erst recht niemanden; auf seiner
: { wert: betreuteIds(zeigt).length, schild: "betreut" }, Startseite stand dauerhaft „0 betreut", aus genau demselben
Grund und mit genau derselben Wirkung: Wer eine Zahl sieht,
die sich nie aendert, sucht den Fehler bei sich.
Stattdessen die Zahl, bei der es MITREDEN kann: offene
Wuensche. Dort entscheidet die Community mit, was als
Naechstes passiert -- eine Zahl, die zum Hingehen einlaedt,
statt eine, die nichts sagt.
WORAN ERKANNT: `freigabeBedingung` gibt nur fuer Leute von
aussen eine Bedingung zurueck, sonst null. Damit steht die
Frage „ist das jemand aus der Community" schon beantwortet,
ohne dass hier ein Rollenname steht -- und die Bedingung
sorgt zugleich dafuer, dass nur gezaehlt wird, was diese
Person auch sehen darf. Zwei Fliegen, eine Zeile. */
(() => {
if (TEAM_DOGI_ROLLEN.has(zeigt.rolle)) {
return { wert: db().prepare(
`SELECT COUNT(*) AS n FROM personen WHERE rolle IN (${
[...TEAM_DOGI_ROLLEN].map((r) => `'${r}'`).join(", ")}) AND aktiv = 1`).get().n,
schild: "im Team" };
}
const bed = freigabeBedingung(zeigt, "e");
if (bed) {
const n = db().prepare(
`SELECT COUNT(*) AS n FROM eintraege e
WHERE e.bereich = 'wunsch' AND e.status = 'offen' AND ${bed.wo}`)
.get(...bed.werte).n;
return { wert: n, schild: "Wünsche offen" };
}
return { wert: betreuteIds(zeigt).length, schild: "betreut" };
})(),
], ],
}); });
} catch (fehler) { } catch (fehler) {
+23
View File
@@ -237,6 +237,23 @@ console.log("");
const zahlenlinks = await seite.evaluate(() => const zahlenlinks = await seite.evaluate(() =>
[...document.querySelectorAll("#zahlen a")].map((a2) => a2.getAttribute("href"))); [...document.querySelectorAll("#zahlen a")].map((a2) => a2.getAttribute("href")));
console.log(` Zahlen-Links: ${zahlenlinks.length}`); console.log(` Zahlen-Links: ${zahlenlinks.length}`);
/* DIE ZENTRALE OBEN: Ring, drei Zaehler, Uhr. Was davon betrifft
ein Mitglied ueberhaupt? */
const zentrale = await seite.evaluate(() => {
const txt = (w) => (document.querySelector(w)?.textContent || "").replace(/\s+/g, " ").trim();
return {
ring: txt(".ring, .ringblock, [class*='ring']"),
zaehler: [...document.querySelectorAll(".standzahl, .stand, [class*='stand']")]
.map((e) => e.textContent.replace(/\s+/g, " ").trim()).filter(Boolean).slice(0, 6),
kopfzeilen: [...document.querySelectorAll(".zentrale *")]
.map((e) => e.children.length ? "" : (e.textContent || "").replace(/\s+/g, " ").trim())
.filter((t) => t && t.length < 60).slice(0, 14),
};
});
console.log(` Ring: „${zentrale.ring.slice(0, 60)}"`);
console.log(` Zaehler: ${zentrale.zaehler.join(" | ") || "(nicht gefunden)"}`);
console.log(` Texte oben: ${zentrale.kopfzeilen.join(" · ")}`);
if (zahlenlinks.length) { if (zahlenlinks.length) {
const ziel = new URL(zahlenlinks[0], `${BASIS}/workspace/`).href; const ziel = new URL(zahlenlinks[0], `${BASIS}/workspace/`).href;
const antwort = await seite.goto(ziel, { waitUntil: "domcontentloaded" }); const antwort = await seite.goto(ziel, { waitUntil: "domcontentloaded" });
@@ -319,11 +336,17 @@ console.log(fehlerAufSeite.length
block: !document.getElementById("zahlen-block")?.hidden, block: !document.getElementById("zahlen-block")?.hidden,
links: document.querySelectorAll("#zahlen a").length, links: document.querySelectorAll("#zahlen a").length,
satz: document.body.innerText.includes("Vorarbeiten"), satz: document.body.innerText.includes("Vorarbeiten"),
/* Behaelt DogFather seine dritte Zahl? „Wuensche offen" waere fuer
ihn die falsche -- er sieht ohnehin alles. */
drittezahl: [...document.querySelectorAll(".standzahl, .stand, [class*='stand']")]
.map((e) => e.textContent.replace(/\s+/g, " ").trim())
.find((t) => /betreut|im Team|Wünsche offen/.test(t)) || "(keine)",
})); }));
console.log(""); console.log("");
console.log("=== Gegenprobe: DogFather auf derselben Seite ==="); console.log("=== Gegenprobe: DogFather auf derselben Seite ===");
console.log(` Aufgabenblock: ${z.block ? "DA" : "FEHLT"} · Zahlen-Links: ${z.links}` console.log(` Aufgabenblock: ${z.block ? "DA" : "FEHLT"} · Zahlen-Links: ${z.links}`
+ ` · „Vorarbeiten": ${z.satz ? "ja" : "nein"}`); + ` · „Vorarbeiten": ${z.satz ? "ja" : "nein"}`);
console.log(` Dritte Zahl: ${z.drittezahl}`);
await ctx2.close(); await ctx2.close();
} }