Ein Vorschlag ist ein Vorschlag -- DogFather entscheidet
Filipe: "bei diesen vorschlägen ist sehr wichtig dass immer wenn es um
was geht was ich machen soll oder so dass immer erwähnt wird dass ich
immer am ende entscheide ob ich was mache oder nicht. ich kann immer
annehmen oder ablehnen. über all auf der website soll dass bei den
vorschlägen erwähnt werden."
WARUM DAS MEHR IST ALS HOEFLICHKEIT: Auf den Karten stehen Saetze wie
"Was soll DogFather im naechsten Stream unbedingt machen?" oder
"Welches Spiel soll DogFather mal ausprobieren?". Wer so gefragt wird,
schreibt etwas hin -- und rechnet damit. Passiert es dann nicht, sieht
es aus wie ein gebrochenes Versprechen, obwohl nie eines gegeben
wurde. Der Satz verhindert genau diese Enttaeuschung vorher, statt sie
hinterher zu erklaeren.
GEMESSEN, BEVOR GEBAUT WURDE -- und die Messung hat den Auftrag
groesser gemacht: Die Vorschlagskarten sieht NUR das Team. Die
Community bekommt sie mit 404 gar nicht; sie liest nur, was daraus auf
dem Brett landet. Ein Satz allein ueber den Karten haette also genau
die Leute nicht erreicht, um die es geht.
Deshalb steht er jetzt an ZWEI Stellen, aus EINER Quelle:
- ueber den Vorschlagskarten (das Team beim Auswaehlen)
- auf dem Brett selbst, unter der Ueberschrift (die Community beim
Lesen)
WELCHE BRETTER IHN TRAGEN, WIRD ABGELEITET: genau die, fuer die es
ueberhaupt Vorschlaege gibt. Eine zweite Liste "Bretter mit Hinweis"
waere die naechste, die altert -- wer ein Brett in den Katalog
aufnimmt, denkt nicht daran, es auch dort einzutragen. Auf einem Brett
fuer Termine oder Dateien steht er nicht: Ein Hinweis, der ueberall
steht, wird nirgends gelesen.
EINMAL UND NICHT AUF JEDER KARTE. Vier Karten nebeneinander mit
viermal demselben Satz liest niemand mehr. Er steht ueber dem Block,
wo man ihn liest, bevor man die erste antippt.
Der Text selbst steht an genau einer Stelle im Haus
(VORSCHLAG_HINWEIS), und pruef-vorschlaege haelt beide Anzeigeorte
dagegen -- mit Gegenprobe, dass ein Brett ohne Vorschlaege ihn NICHT
traegt.
pruef-vorschlaege: 28 Pruefungen, 0 Fehler (war 21)
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -173,6 +173,90 @@ ok(/if \(daten\.mehr_da\)/.test(js),
|
||||
ok(/let katalogAb = 0;[\s\S]{0,200}async function startkatalogZeigen/.test(js),
|
||||
"der Merker steht AUSSERHALB der Funktion - sonst spraenge die Liste nach jedem Uebernehmen zurueck");
|
||||
|
||||
/* =======================================================================
|
||||
WER ENTSCHEIDET -- steht der Satz ueberall, wo Vorschlaege sind?
|
||||
=======================================================================
|
||||
|
||||
Filipe am 21.09.2026: "bei diesen vorschlägen ist sehr wichtig dass
|
||||
immer wenn es um was geht was ich machen soll oder so dass immer
|
||||
erwähnt wird dass ich immer am ende entscheide ob ich was mache oder
|
||||
nicht. ich kann immer annehmen oder ablehnen. über all auf der
|
||||
website soll dass bei den vorschlägen erwähnt werden."
|
||||
|
||||
WARUM DAS EINE PRUEFUNG BRAUCHT: Ein Satz, den man an zwei Stellen
|
||||
einbaut, ist beim naechsten Brett an einer davon vergessen. Und
|
||||
gerade dieser faellt nicht auf, wenn er fehlt -- eine Seite ohne ihn
|
||||
sieht vollkommen normal aus. Sie sieht nur nicht mehr wie ein
|
||||
Vorschlag aus, sondern wie eine Zusage.
|
||||
|
||||
ZWEI ORTE, EINE QUELLE: ueber den Vorschlagskarten (das Team sieht
|
||||
sie beim Auswaehlen) und auf dem Brett selbst (dort liest die
|
||||
Community, was daraus geworden ist). Beide holen denselben Text aus
|
||||
VORSCHLAG_HINWEIS.
|
||||
======================================================================= */
|
||||
{
|
||||
const { VORSCHLAG_HINWEIS } = await import("./workspace-treff-start.js");
|
||||
|
||||
ok(/entscheidet/i.test(VORSCHLAG_HINWEIS)
|
||||
&& /ablehnen/i.test(VORSCHLAG_HINWEIS),
|
||||
`der Satz sagt beides -- entscheiden UND ablehnen ("${VORSCHLAG_HINWEIS}")`);
|
||||
|
||||
/* JEDES BRETT MIT VORSCHLAEGEN, nicht ein ausgewaehltes. Die Liste
|
||||
kommt aus dem Katalog selbst; ein neues Brett ist damit
|
||||
automatisch mitgeprueft, ohne dass es jemand hier eintraegt. */
|
||||
const { TREFF_START } = await import("./workspace-treff-start.js");
|
||||
const { ARBEIT_START } = await import("./workspace-arbeit-start.js").catch(() => ({}));
|
||||
const ARBEIT_HAT = Object.keys(ARBEIT_START || {});
|
||||
const bretter = Object.keys(TREFF_START);
|
||||
ok(bretter.length >= 3, `${bretter.length} Bretter haben Vorschlaege`);
|
||||
|
||||
const ohneKarten = [];
|
||||
const ohneBrett = [];
|
||||
for (const b of bretter) {
|
||||
const k = await hole(`/workspace/api/bereich/${b}/start?ab=0`);
|
||||
if (k.status === 200 && k.daten?.hinweis !== VORSCHLAG_HINWEIS) ohneKarten.push(b);
|
||||
const e = await hole(`/workspace/api/bereich/${b}`);
|
||||
if (e.status === 200 && e.daten?.einstellung?.entscheidung !== VORSCHLAG_HINWEIS) {
|
||||
ohneBrett.push(b);
|
||||
}
|
||||
}
|
||||
ok(ohneKarten.length === 0,
|
||||
ohneKarten.length ? `ueber den Karten fehlt er bei: ${ohneKarten.join(", ")}`
|
||||
: `er steht ueber den Karten aller ${bretter.length} Bretter`);
|
||||
ok(ohneBrett.length === 0,
|
||||
ohneBrett.length ? `auf dem Brett fehlt er bei: ${ohneBrett.join(", ")}`
|
||||
: "und auf jedem Brett selbst -- dort, wo die Community liest");
|
||||
|
||||
/* GEGENPROBE: Ein Brett OHNE Vorschlaege darf ihn NICHT tragen. Ein
|
||||
Hinweis, der ueberall steht, wird nirgends gelesen -- und diese
|
||||
Zeile beweist zugleich, dass die Pruefung darueber ueberhaupt
|
||||
unterscheiden kann. */
|
||||
const { BEREICHE } = await import("./workspace-bereiche.js");
|
||||
const ohneKatalog = Object.keys(BEREICHE || {})
|
||||
.filter((b) => !bretter.includes(b) && !ARBEIT_HAT.includes(b));
|
||||
/* DRITTER AUSGANG: Gaebe es gar kein Brett ohne Vorschlaege, waere
|
||||
diese Gegenprobe nicht durchfuehrbar -- und das ist kein "in
|
||||
Ordnung", sondern "konnte nicht nachsehen". */
|
||||
if (!ohneKatalog.length) {
|
||||
console.log(" -- Gegenprobe nicht moeglich: jedes Brett hat Vorschlaege");
|
||||
} else {
|
||||
const ohne = await hole(`/workspace/api/bereich/${ohneKatalog[0]}`);
|
||||
ok(ohne.status !== 200 || !ohne.daten?.einstellung?.entscheidung,
|
||||
`Gegenprobe: "${ohneKatalog[0]}" hat keine Vorschlaege und traegt ihn nicht `
|
||||
+ `(${ohne.status}, ${JSON.stringify(ohne.daten?.einstellung?.entscheidung)})`);
|
||||
}
|
||||
|
||||
/* Und die Oberflaeche zeigt ihn wirklich an -- ein Feld, das der
|
||||
Server schickt und niemand rendert, ist kein Hinweis. */
|
||||
const seite = readFileSync(new URL("../workspace/bereich.html", import.meta.url), "utf8");
|
||||
ok(/id="brett-entscheidung"/.test(seite),
|
||||
"die Brettseite hat den Platz dafuer");
|
||||
const js2 = readFileSync(
|
||||
new URL("../workspace/assets/js/bereich.js", import.meta.url), "utf8");
|
||||
ok(/brett-entscheidung/.test(js2) && /startkatalog__entscheidung/.test(js2),
|
||||
"und das Skript fuellt beide Stellen");
|
||||
}
|
||||
|
||||
console.log(`\n${fehler ? fehler + " FEHLER" : "Alles in Ordnung"} — ${geprueft} Prüfungen\n`);
|
||||
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
|
||||
process.exit(fehler ? 1 : 0);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
===================================================================== */
|
||||
|
||||
import express from "express";
|
||||
import { TREFF_START } from "./workspace-treff-start.js";
|
||||
import { TREFF_START, VORSCHLAG_HINWEIS } from "./workspace-treff-start.js";
|
||||
import { vorlagenFuer } from "./workspace-treff-vorlagen.js";
|
||||
import { ARBEIT_START } from "./workspace-arbeit-start.js";
|
||||
/* Wann ein Zettel einen Termin hat -- DIESELBE Regel, aus der auch der
|
||||
@@ -1491,8 +1491,33 @@ bereicheRouter.get("/workspace/api/bereich/:bereich", (req, res) => {
|
||||
const passend = meine.find((k) => String(k.ziel || "").split("?")[1] === "b=" + bereich);
|
||||
const ober = einstellung.ober || passend?.gruppe || null;
|
||||
|
||||
/* WER ENTSCHEIDET, STEHT AUF DEM BRETT SELBST (21.09.2026).
|
||||
|
||||
Filipe: "immer wenn es um was geht was ich machen soll ... dass
|
||||
ich immer am ende entscheide ob ich was mache oder nicht. ich
|
||||
kann immer annehmen oder ablehnen. über all auf der website soll
|
||||
dass bei den vorschlägen erwähnt werden."
|
||||
|
||||
DIE VORSCHLAGSKARTEN SIEHT NUR DAS TEAM -- nachgemessen: Die
|
||||
Community bekommt sie mit 404 gar nicht. Sie liest nur, was
|
||||
daraus auf dem Brett landet: "Was soll DogFather im naechsten
|
||||
Stream unbedingt machen?" Genau dort muss der Satz also stehen,
|
||||
nicht nur ueber den Karten.
|
||||
|
||||
WELCHE BRETTER IHN BEKOMMEN, WIRD ABGELEITET: genau die, fuer
|
||||
die es ueberhaupt Vorschlaege gibt (`STARTKATALOG`). Eine
|
||||
zweite Liste "Bretter mit Hinweis" waere die naechste, die
|
||||
altert -- und wer ein Brett in den Katalog aufnimmt, denkt nicht
|
||||
daran, es auch dort einzutragen.
|
||||
|
||||
`null`, wo es keine Vorschlaege gibt: Auf einem Brett fuer
|
||||
Termine oder Dateien waere der Satz sinnlos, und ein Hinweis,
|
||||
der ueberall steht, wird nirgends gelesen. */
|
||||
const entscheidung = STARTKATALOG[bereich] ? VORSCHLAG_HINWEIS : null;
|
||||
|
||||
res.json({
|
||||
bereich, einstellung: { ...einstellung, ober }, treff: treffBrett, gehoert, weiter,
|
||||
bereich, einstellung: { ...einstellung, ober, entscheidung },
|
||||
treff: treffBrett, gehoert, weiter,
|
||||
/* DARF DIESER MENSCH IN DEN KALENDER? Beantwortet von den zwei
|
||||
Stellen, die es entscheiden -- nicht von einer dritten Regel
|
||||
im Browser. Die Karte zeigt ihren Termin dann als Text statt
|
||||
@@ -1941,6 +1966,11 @@ bereicheRouter.get("/workspace/api/bereich/:bereich/start", (req, res) => {
|
||||
mehr_da: offeneListe.length > FENSTER,
|
||||
ab,
|
||||
vorrat: liste.length,
|
||||
/* DER HINWEIS GEHT IMMER MIT (21.09.2026). Er kommt aus
|
||||
workspace-treff-start.js, damit es ihn im ganzen Haus genau
|
||||
einmal gibt -- und damit eine Pruefung ihn gegen die Quelle
|
||||
halten kann statt gegen eine Abschrift. */
|
||||
hinweis: VORSCHLAG_HINWEIS,
|
||||
});
|
||||
} catch (fehler) {
|
||||
console.error("[workspace] Startkatalog:", fehler?.message);
|
||||
|
||||
@@ -60,6 +60,38 @@
|
||||
|
||||
/** Ein Eintrag: { art, titel, text }. `art` muss zu den Arten des
|
||||
* Bereichs passen — pruef-treff-start rechnet das nach. */
|
||||
/* =====================================================================
|
||||
EIN VORSCHLAG IST EIN VORSCHLAG (21.09.2026)
|
||||
|
||||
Filipe: "bei diesen vorschlägen ist sehr wichtig dass immer wenn es
|
||||
um was geht was ich machen soll oder so dass immer erwähnt wird dass
|
||||
ich immer am ende entscheide ob ich was mache oder nicht. ich kann
|
||||
immer annehmen oder ablehnen. über all auf der website soll dass bei
|
||||
den vorschlägen erwähnt werden."
|
||||
|
||||
WARUM DAS MEHR IST ALS HOEFLICHKEIT: Auf den Karten stehen Saetze
|
||||
wie "Was soll DogFather im naechsten Stream unbedingt machen?" oder
|
||||
"Welches Spiel soll DogFather mal ausprobieren?". Wer so gefragt
|
||||
wird, schreibt etwas hin -- und rechnet damit. Passiert es dann
|
||||
nicht, sieht es aus wie ein gebrochenes Versprechen, obwohl nie
|
||||
eines gegeben wurde. Der Satz verhindert genau diese Enttaeuschung,
|
||||
und zwar VORHER.
|
||||
|
||||
ER STEHT HIER UND NICHT IN DEN EINZELNEN TEXTEN. Es gibt ueber
|
||||
dreissig Vorschlaege; dreissig Abschriften desselben Satzes waeren
|
||||
dreissig Stellen, an denen er beim naechsten Mal fehlt oder anders
|
||||
lautet. Der Server schickt ihn mit jeder Vorschlagsliste mit, die
|
||||
Oberflaeche zeigt ihn einmal ueber den Karten.
|
||||
|
||||
EINMAL UND NICHT AUF JEDER KARTE: Vier Karten nebeneinander mit
|
||||
viermal demselben Satz liest niemand mehr -- und eine Warnung, die
|
||||
immer kommt, ist keine Warnung mehr. Er steht deshalb gross ueber
|
||||
dem Block, wo man ihn liest, bevor man die erste Karte antippt.
|
||||
===================================================================== */
|
||||
export const VORSCHLAG_HINWEIS =
|
||||
"DogFather entscheidet am Ende selbst, was davon passiert — "
|
||||
+ "er kann jeden Vorschlag annehmen oder ablehnen.";
|
||||
|
||||
export const TREFF_START = {
|
||||
|
||||
/* ===================================================================
|
||||
|
||||
Reference in New Issue
Block a user