Nicht jeder bekommt alle 68 Punkte -- DogFather und die rechte Hand suchen je Person aus
Filipe: "ich will dass die rechte hand und ich diese aufgaben die es da
gibt, individuel aussuchen koennen wer welche aufgabe bekommt. bis
dahin sollen die keine aufgaben sehen. nur die, die die rechte hand
oder dogfather ihnen zutragen."
VORHER GEFRAGT, UND ES WAR NOETIG. Auf entwicklung.html stehen zwei
Listen untereinander -- das Vorlagenbrett (Aufgaben zum Verteilen) und
der Beobachtungskatalog (die 68 Punkte je Person). Sein Text passte auf
das eine, sein Bildschirmfoto zeigte das andere. Am 24.09. habe ich in
genau dieser Lage geraten und an der falschen Stelle gebaut. Seine
Antwort: der 68-Punkte-Katalog, das Vorlagenbrett "nicht anfassen".
BIS HEUTE GALTEN ALLE 68 FUER JEDEN. Das war bequem und in der Sache
falsch: "Clips, Schnitt und Kommentare" gehoert nicht zu jemandem, der
nur im Chat moderiert -- und ein Punkt, der nie zutrifft, steht
trotzdem in der Zaehlung. "0 von 68" bei jemandem, fuer den zwoelf
gelten, ist keine Auskunft, sondern eine Entmutigung.
EINE TABELLE, EINE ZEILE JE PAAR. Eine kommagetrennte Liste in der
Personenzeile waere schneller gebaut und liesse sich nicht abfragen
("wer hat diesen Punkt?"), nicht zaehlen und nicht absichern. Wer und
wann stehen mit drin -- fuer die Frage "seit wann gilt das eigentlich
fuer ihn", die erfahrungsgemaess dann kommt, wenn sie niemand mehr
beantworten kann.
EINE STELLE FUER DIE ANTWORT, drei Aufrufer: die Karte der Leitung, die
Uebersicht mit den Zahlen und der Auswahl-Dialog. Drei Abschriften
waeren drei Gelegenheiten, dass eine nicht mitzieht -- und dann stuende
in der Uebersicht "von 68", waehrend in der Karte zwoelf Punkte stehen.
DIE ZAHLEN ZIEHEN MIT. "X von Y" zaehlt jetzt das Zugeteilte. Auch die
linke Zahl musste nachgezogen werden: Wer frueher zu einem Punkt
gesetzt hat, der ihm inzwischen nicht mehr zugeteilt ist, haette sonst
"13 von 12" bekommen.
GESPEICHERT WIRD DIE GANZE LISTE AUF EINMAL, in einer Transaktion. Wer
zwoelf Haken setzt und dabei die Verbindung verliert, haette sonst
sieben gesetzte und fuenf verlorene -- und saehe nicht, welche.
EINMALIG WIRD UEBERNOMMEN, wozu es schon eine Einschaetzung gibt. Ohne
das waere der Umbau Datenverlust auf dem Bildschirm: Wer zwanzig Punkte
gesetzt hat, saehe am naechsten Morgen eine leere Karte -- die Daten
liegen noch da, man kommt nur nicht mehr hin. Ein Flag verhindert, dass
die Uebernahme wiederkommt, nachdem jemand bewusst abgewaehlt hat; an
einer Wegwerf-Datenbank durchgespielt, beide Laeufe wie erwartet.
NOCH NICHTS AUSGESUCHT HEISST NICHT "KAPUTT". Die Karte sagt es dann
mit einem Satz und einem Knopf. Ein leerer Bildschirm ohne Erklaerung
ist die schlechteste Antwort von allen -- man weiss nicht, ob es laedt,
ob etwas kaputt ist oder ob schlicht noch niemand ausgesucht hat.
Geprueft: pruef-entwicklung 48 -> 61 Punkte. Zuerst das Wichtigste an
seinem Satz ("bis dahin sollen die keine aufgaben sehen"): ohne
Zuteilung ist die Karte leer -- ohne diese Zeile waere alles Folgende
auch dann gruen, wenn weiterhin alles fuer jeden gilt. Dazu vier
Gegenproben: erfundene Schluessel fallen weg, ein Modi sucht nicht aus
(404) und nach seinem Versuch steht der Bestand unveraendert da, und
alles wieder wegzunehmen geht ebenfalls (eine Auswahl, die man nur
erweitern kann, waere eine Falle). pruef-css-klassen und
pruef-tippziele (11) unveraendert gruen.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -384,6 +384,105 @@ console.log("=== Die Kacheln ===");
|
||||
ok(new Set(toene).size === toene.length, `kein Farbton doppelt (${toene.length} Kacheln)`);
|
||||
}
|
||||
|
||||
/* =====================================================================
|
||||
WELCHE PUNKTE GELTEN FUER DIESEN MENSCHEN (25.09.2026)
|
||||
=====================================================================
|
||||
|
||||
Filipe: „ich will dass die rechte hand und ich diese aufgaben die es
|
||||
da gibt, individuel aussuchen koennen wer welche aufgabe bekommt.
|
||||
bis dahin sollen die keine aufgaben sehen. nur die, die die rechte
|
||||
hand oder dogfather ihnen zutragen."
|
||||
|
||||
BIS HEUTE GALTEN ALLE 68 FUER JEDEN. Geprueft wird deshalb zuerst
|
||||
das Wichtigste an seinem Satz -- „bis dahin sollen die keine
|
||||
aufgaben sehen": Ohne Zuteilung ist die Karte LEER. Ohne diese
|
||||
Zeile waere alles Folgende auch dann gruen, wenn weiterhin alles
|
||||
fuer jeden gilt.
|
||||
===================================================================== */
|
||||
console.log("\n=== Punkte je Person aussuchen ===");
|
||||
{
|
||||
const karte = async (keks) => (await hole(
|
||||
`/workspace/api/entwicklung/person/${idModi}`, { host: CREW, keks })).daten;
|
||||
|
||||
const vorher = await karte(dogi.keks);
|
||||
ok(vorher && vorher.gesamt === 0,
|
||||
`ohne Zuteilung steht auf der Karte nichts (${vorher?.gesamt} Punkte)`);
|
||||
ok((vorher?.gesamt_katalog || 0) >= 60,
|
||||
`der Katalog hat trotzdem alle Punkte (${vorher?.gesamt_katalog})`);
|
||||
|
||||
/* DIE LISTE ZUM AUSSUCHEN zeigt ALLES, mit einem Haken an dem, was
|
||||
gilt. Zeigte sie nur das Zugeteilte, koennte man nie etwas
|
||||
hinzufuegen -- ein Auswahlfenster, in dem die Auswahl fehlt. */
|
||||
const wahl = (await hole(`/workspace/api/entwicklung/person/${idModi}/punkte`,
|
||||
{ host: CREW, keks: dogi.keks })).daten;
|
||||
const alle = (wahl?.bloecke || []).flatMap((b) => b.punkte);
|
||||
ok(alle.length === vorher?.gesamt_katalog,
|
||||
`die Auswahl zeigt den ganzen Katalog (${alle.length})`);
|
||||
ok(alle.every((x) => x.dabei === false),
|
||||
`und nichts davon ist angehakt (${alle.filter((x) => x.dabei).length} angehakt)`);
|
||||
|
||||
/* ---- Zwoelf aussuchen ------------------------------------------- */
|
||||
const zwoelf = alle.slice(0, 12).map((x) => x.schluessel);
|
||||
const gesetzt = await hole(`/workspace/api/entwicklung/person/${idModi}/punkte`,
|
||||
{ host: CREW, keks: dogi.keks, methode: "PUT",
|
||||
rumpf: JSON.stringify({ punkte: zwoelf }) });
|
||||
ok(gesetzt.status === 200 && gesetzt.daten?.zugeteilt === 12,
|
||||
`DogFather sucht zwoelf aus (HTTP ${gesetzt.status}, ${gesetzt.daten?.zugeteilt})`);
|
||||
|
||||
const nachher = await karte(dogi.keks);
|
||||
const drin = (nachher?.bloecke || []).flatMap((b) => b.punkte).map((x) => x.schluessel);
|
||||
ok(nachher?.gesamt === 12 && drin.length === 12,
|
||||
`und danach stehen genau die zwoelf auf der Karte (${nachher?.gesamt})`);
|
||||
ok(zwoelf.every((s) => drin.includes(s)),
|
||||
" und zwar dieselben, nicht irgendwelche zwoelf");
|
||||
|
||||
/* DIE RECHTE HAND SIEHT DASSELBE -- sie beurteilt denselben
|
||||
Menschen, und zwei verschiedene Listen fuer dieselbe Person waeren
|
||||
der Grund fuer jede Abweichung, die keine ist. */
|
||||
const beiHand = await karte(hand.keks);
|
||||
ok(beiHand?.gesamt === 12,
|
||||
`die rechte Hand sieht dieselben zwoelf (${beiHand?.gesamt})`);
|
||||
|
||||
/* UND SIE DARF SELBST AUSSUCHEN -- Filipes Satz nennt beide. */
|
||||
const vonHand = await hole(`/workspace/api/entwicklung/person/${idModi}/punkte`,
|
||||
{ host: CREW, keks: hand.keks, methode: "PUT",
|
||||
rumpf: JSON.stringify({ punkte: alle.slice(0, 5).map((x) => x.schluessel) }) });
|
||||
ok(vonHand.status === 200 && vonHand.daten?.zugeteilt === 5,
|
||||
`die rechte Hand sucht ebenfalls aus (HTTP ${vonHand.status}, ${vonHand.daten?.zugeteilt})`);
|
||||
|
||||
/* ---- Gegenproben ------------------------------------------------- */
|
||||
/* EIN ERFUNDENER SCHLUESSEL WIRD VERWORFEN. Ohne diesen Abgleich
|
||||
liesse sich beliebiger Text in die Tabelle schreiben -- er stuende
|
||||
danach in keiner Liste und waere auch nicht wegzubekommen. */
|
||||
const mitMuell = await hole(`/workspace/api/entwicklung/person/${idModi}/punkte`,
|
||||
{ host: CREW, keks: dogi.keks, methode: "PUT",
|
||||
rumpf: JSON.stringify({ punkte: [...zwoelf, "gibt_es_nicht", "auch_nicht"] }) });
|
||||
ok(mitMuell.daten?.zugeteilt === 12,
|
||||
`Gegenprobe: erfundene Schluessel fallen weg (${mitMuell.daten?.zugeteilt} statt 14)`);
|
||||
|
||||
/* EIN MODI DARF NICHT AUSSUCHEN -- weder fuer sich noch fuer
|
||||
andere. Ohne diese Zeile hiesse „DogFather darf" nur, dass
|
||||
ueberhaupt jemand darf. */
|
||||
const vonModi = await hole(`/workspace/api/entwicklung/person/${idModi}/punkte`,
|
||||
{ host: CREW, keks: ayla.keks, methode: "PUT",
|
||||
rumpf: JSON.stringify({ punkte: [] }) });
|
||||
ok(vonModi.status >= 400,
|
||||
`Gegenprobe: ein Modi sucht nicht aus (${vonModi.status})`);
|
||||
const nochDa = await karte(dogi.keks);
|
||||
ok(nochDa?.gesamt === 12,
|
||||
` und nach dem Versuch stehen die zwoelf noch (${nochDa?.gesamt})`);
|
||||
|
||||
/* ALLES WEGNEHMEN GEHT AUCH. Eine Auswahl, die man nur erweitern
|
||||
kann, waere eine Falle: Wer sich vertut, bekaeme den Punkt nie
|
||||
wieder los. */
|
||||
const leer = await hole(`/workspace/api/entwicklung/person/${idModi}/punkte`,
|
||||
{ host: CREW, keks: dogi.keks, methode: "PUT",
|
||||
rumpf: JSON.stringify({ punkte: [] }) });
|
||||
const danach = await karte(dogi.keks);
|
||||
ok(leer.status === 200 && danach?.gesamt === 0,
|
||||
`und alles wieder wegnehmen geht ebenfalls (${danach?.gesamt})`);
|
||||
}
|
||||
|
||||
d.close();
|
||||
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
|
||||
console.log("");
|
||||
|
||||
Reference in New Issue
Block a user