From 4b48aa46f670350ca91f132370008f57046dd6f0 Mon Sep 17 00:00:00 2001 From: Dogfather Date: Fri, 25 Sep 2026 04:04:29 +0200 Subject: [PATCH] Berichtigt: Die Leitung sieht wieder alle 68 -- gezaehlt wird das Zugetragene Filipe: "falsch, dogfather und die rechte hand sollen immer noch die 68 sachen sehen wie vorher und der button soll einfach perfektioniert werden damit wir beide sie den jeweiligen als aufgabe geben koennen. und die modis sollen nicht sehen. aber unsere sicht von dogfather und rechte hand soll sich nicht aendern." MEIN FEHLER WAR EINE VERWECHSLUNG von zwei Dingen, die gleich aussehen und verschieden sind: EINGRENZEN -- die Liste wird je Person kuerzer. Das habe ich gebaut. ZUTRAGEN -- aus der vollen Liste bekommt jemand etwas als AUFGABE. Das war gemeint. Der Unterschied zaehlt: Die 68 sind das, woran ihr euch entlanghangelt, wenn ihr jemanden anseht. Eine Liste, die sich je Person verkuerzt, waere bei jedem Menschen eine andere -- und dann faellt kein Vergleich mehr auf. DIE KARTE ZEIGT WIEDER ALLES, und an jedem Punkt steht, ob er diesem Menschen als Aufgabe zugetragen ist: eine Kante links und das WORT "Aufgabe". Nicht nur die Farbe -- wer Farben schlecht unterscheidet, saehe sonst nur einen etwas anderen Kasten. GEZAEHLT WIRD TROTZDEM DAS ZUGETRAGENE. Filipe: "es sollen nur die menge angezeigt werden die wir zutragen und erledigte dan auch nur die die erledigt wurden von den zugetragenen." Aus "0 von 68 angesehen" wird "3 von 12 erledigt". BEIDE HAELFTEN MUSSTEN MITZIEHEN, und das ist die Stelle, an der es leicht schiefgeht: Die Kachel nahm links die Zahl ALLER Einschaetzungen. Waere nur das Ganze nachgezogen worden, stuende dort "13 von 3" -- eine Zahl, die groesser ist als ihr Ganzes, und die niemand mehr erklaeren kann. Der Verbund mit der Zuteilung steht deshalb schon in der Abfrage, an drei Stellen: Karte, Uebersicht und Ring. NULL ZUGETRAGEN IST KEINE NULL, SONDERN EIN SATZ. "0 von 0 erledigt" liest sich wie ein Versaeumnis; "noch nichts zugetragen" sagt, was zu tun ist. Der Knopf heisst jetzt auch, was er tut: "Aufgaben zutragen". Der leere Kasten, der im ersten Anlauf die ganze Karte ersetzte, ist weg -- genau der hatte die Sicht der Leitung veraendert. Geprueft: pruef-entwicklung 61 -> 63 Punkte. Die neuen halten ausdruecklich fest, was ich falsch gemacht hatte: Die Leitung sieht den GANZEN Katalog (68), und die Liste bleibt auch nach dem Zutragen vollstaendig -- nur die Marke wandert. Ohne diese zwei Zeilen waere dieselbe Eingrenzung beim naechsten Umbau wieder eine Zeile Arbeit und niemandem aufgefallen. Dazu pruef-css-klassen und pruef-tippziele. Co-Authored-By: Claude Opus 5 --- server/pruef-entwicklung.mjs | 33 +++++++-- server/workspace-entwicklung.js | 81 ++++++++++++++++----- workspace/anruf-probe.html | 10 +-- workspace/app.webmanifest | 8 +-- workspace/assets/css/entwicklung.css | 24 +++++++ workspace/assets/js/entwicklung.js | 102 ++++++++++++++++++--------- workspace/aufgaben.html | 38 +++++----- workspace/automation.html | 32 ++++----- workspace/befinden.html | 34 ++++----- workspace/bereich.html | 44 ++++++------ workspace/bewerben.html | 38 +++++----- workspace/bewerbungen.html | 36 +++++----- workspace/calls.html | 34 ++++----- workspace/chat.html | 38 +++++----- workspace/content.html | 34 ++++----- workspace/crew-index.html | 12 ++-- workspace/crew.webmanifest | 8 +-- workspace/dateien.html | 34 ++++----- workspace/entwicklung.html | 36 +++++----- workspace/hilfe.html | 30 ++++---- workspace/index.html | 10 +-- workspace/kalender.html | 34 ++++----- workspace/leistung.html | 32 ++++----- workspace/material.html | 32 ++++----- workspace/personen.html | 32 ++++----- workspace/profil.html | 36 +++++----- workspace/rechte.html | 34 ++++----- workspace/report.html | 36 +++++----- workspace/scouting.html | 32 ++++----- workspace/start.html | 32 ++++----- workspace/startcheck.html | 34 ++++----- workspace/steckbrief.html | 36 +++++----- workspace/support.html | 28 ++++---- workspace/talente.html | 36 +++++----- workspace/team.html | 32 ++++----- workspace/teamlage.html | 34 ++++----- workspace/teilen.html | 30 ++++---- workspace/treff-moderation.html | 32 ++++----- workspace/treff-regeln.html | 32 ++++----- workspace/uebersicht.html | 32 ++++----- workspace/unsere-seiten.html | 30 ++++---- workspace/unterstuetzen.html | 32 ++++----- workspace/werdegang.html | 32 ++++----- workspace/willkommen.html | 30 ++++---- workspace/wissen.html | 34 ++++----- 45 files changed, 813 insertions(+), 687 deletions(-) diff --git a/server/pruef-entwicklung.mjs b/server/pruef-entwicklung.mjs index 262ec0d2..440f7014 100644 --- a/server/pruef-entwicklung.mjs +++ b/server/pruef-entwicklung.mjs @@ -405,10 +405,25 @@ console.log("\n=== Punkte je Person aussuchen ==="); `/workspace/api/entwicklung/person/${idModi}`, { host: CREW, keks })).daten; const vorher = await karte(dogi.keks); + const allePunkte = (b) => (b?.bloecke || []).flatMap((x) => x.punkte); + /* DIE SICHT DER LEITUNG AENDERT SICH NICHT (berichtigt 25.09.2026). + + Der erste Anlauf hat die Karte auf das Zugetragene eingegrenzt. + Filipe: „falsch, dogfather und die rechte hand sollen immer noch + die 68 sachen sehen wie vorher … aber unsere sicht von dogfather + und rechte hand soll sich nicht aendern." + + Die Pruefung haelt das jetzt ausdruecklich fest -- sonst waere die + naechste Eingrenzung wieder eine Zeile Arbeit und niemandem + aufgefallen. */ + ok(allePunkte(vorher).length === vorher?.gesamt_katalog + && (vorher?.gesamt_katalog || 0) >= 60, + `die Leitung sieht den ganzen Katalog (${allePunkte(vorher).length} Punkte)`); 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})`); + `ohne Zutragung zaehlt die Karte trotzdem nichts (${vorher?.gesamt})`); + ok(allePunkte(vorher).every((pt) => pt.zugetragen === false), + `und kein Punkt ist als Aufgabe markiert ` + + `(${allePunkte(vorher).filter((pt) => pt.zugetragen).length})`); /* DIE LISTE ZUM AUSSUCHEN zeigt ALLES, mit einem Haken an dem, was gilt. Zeigte sie nur das Zugeteilte, koennte man nie etwas @@ -430,10 +445,14 @@ console.log("\n=== Punkte je Person aussuchen ==="); `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)), + const markiert = allePunkte(nachher).filter((pt) => pt.zugetragen).map((x) => x.schluessel); + /* DIE LISTE BLEIBT VOLL, die Marke wandert. Das ist der ganze + Unterschied zwischen „eingrenzen" und „zutragen". */ + ok(allePunkte(nachher).length === vorher?.gesamt_katalog, + `die Liste bleibt vollstaendig (${allePunkte(nachher).length})`); + ok(nachher?.gesamt === 12 && markiert.length === 12, + `und genau zwoelf sind als Aufgabe markiert (${markiert.length})`); + ok(zwoelf.every((s) => markiert.includes(s)), " und zwar dieselben, nicht irgendwelche zwoelf"); /* DIE RECHTE HAND SIEHT DASSELBE -- sie beurteilt denselben diff --git a/server/workspace-entwicklung.js b/server/workspace-entwicklung.js index 767f0e49..b108fac5 100644 --- a/server/workspace-entwicklung.js +++ b/server/workspace-entwicklung.js @@ -607,8 +607,18 @@ entwicklungRouter.get("/workspace/api/entwicklung/lage", (req, res) => { davon verblasst sind, und wie viele wir beide verschieden sehen. Die Abweichung ist das Ergebnis -- deshalb steht sie schon in der Uebersicht und nicht erst in der Karte. */ + /* NUR, WAS ZUGETRAGEN IST (25.09.2026). Der Verbund mit der + Zuteilung ist der ganze Unterschied: Ohne ihn zaehlt die + Uebersicht Einschaetzungen zu Punkten mit, die dieser Mensch nie + bekommen hat -- und in der Karte daneben stuende eine kleinere + Zahl. Zwei Zahlen fuer dieselbe Sache, und die Uebersicht ist + die, die man zuerst sieht. */ const gesetzt = db().prepare( - "SELECT person_id, COUNT(*) AS n FROM entwicklung_stand WHERE von_id = ? GROUP BY person_id") + `SELECT s.person_id, COUNT(*) AS n + FROM entwicklung_stand s + JOIN entwicklung_zuteilung z + ON z.person_id = s.person_id AND z.schluessel = s.schluessel + WHERE s.von_id = ? GROUP BY s.person_id`) .all(req.person.id); const meineZahl = new Map(gesetzt.map((z) => [z.person_id, z.n])); @@ -641,6 +651,9 @@ entwicklungRouter.get("/workspace/api/entwicklung/lage", (req, res) => { stufen: ENTWICKLUNG_STUFEN, erwartung: ENTWICKLUNG_ERWARTUNG, verblasst_nach: VERBLASST_NACH_TAGEN, + /* Wie viele es im Katalog GIBT -- fuer die Auswahl, nicht fuer + die Zaehlung an der Kachel. Die steht seit heute auf dem, was + zugetragen ist (`zugeteilt` je Person). */ gesamt_fremd: ENTWICKLUNG_FREMD.length, personen: personen.map((p) => ({ id: p.id, name: p.name, @@ -657,9 +670,13 @@ entwicklungRouter.get("/workspace/api/entwicklung/lage", (req, res) => { gesetzt: meineZahl.get(p.id) || 0, veraltet: alteZahl.get(p.id) || 0, abweichungen: andersZahl.get(p.id) || 0, - /* Wie viele Punkte fuer sie ausgesucht sind. `0` heisst - ausdruecklich „noch keine" und nicht „keine Angabe" -- die - Oberflaeche sagt dann „Punkte auswaehlen", nicht „0 von 68". */ + /* WIE VIELE PUNKTE IHM ZUGETRAGEN SIND (25.09.2026). + + Filipe: „es sollen nur die menge angezeigt werden die wir + zutragen." Diese Zahl ist ab jetzt das GANZE der Kachel -- + „3 von 12", nicht „3 von 68". `0` heisst ausdruecklich „noch + nichts zugetragen" und nicht „keine Angabe"; die Oberflaeche + sagt dann einen Satz statt einer Null. */ zugeteilt: zuteilZahl.get(p.id) || 0, })), /* Die eigene Karte -- fuer jeden, der im Team ist. */ @@ -693,9 +710,28 @@ entwicklungRouter.get("/workspace/api/entwicklung/person/:id", nurLeitung, (req, const grenze = Date.now() - VERBLASST_NACH_TAGEN * TAG; const schritte = schritteVon(p.id); - /* NUR, WAS FUER IHN GILT (25.09.2026). Vorher stand hier - `katalogFuer` -- alle 68 fuer jeden. */ - const bloecke = katalogFuerPerson(req.person, id, false).map((b) => ({ + /* ==== KORRIGIERT NOCH AM SELBEN TAG (25.09.2026) ============== + + Der erste Anlauf hat die Karte auf das Zugetragene eingegrenzt. + Filipe: „falsch, dogfather und die rechte hand sollen immer noch + die 68 sachen sehen wie vorher … aber unsere sicht von dogfather + und rechte hand soll sich nicht aendern." + + ER HAT RECHT, und der Unterschied ist wichtig: Die 68 sind das, + woran IHR euch entlanghangelt, wenn ihr jemanden anseht -- eine + Liste, die sich je Person verkuerzt, waere eine andere Liste bei + jedem Menschen, und dann faellt kein Vergleich mehr auf. + + ZUGETRAGEN WIRD ETWAS ANDERES: eine AUFGABE fuer diesen + Menschen. Das ist eine Auswahl AUS der Liste, nicht eine + Beschneidung der Liste. Deshalb steht hier wieder der ganze + Katalog -- und an jedem Punkt, ob er zugetragen ist. + + GEZAEHLT WIRD TROTZDEM DAS ZUGETRAGENE (siehe unten bei + `gesetzt`/`gesamt`): „0 von 68" war die Zahl, die ihn gestoert + hat, und sie sagt bei jemandem mit drei Aufgaben nichts. */ + const zugeteilt = zugeteiltFuer(id); + const bloecke = katalogFuer(req.person, false).map((b) => ({ ...b, punkte: b.punkte.map((pt) => { const m = meine.get(pt.schluessel) || null; @@ -717,6 +753,10 @@ entwicklungRouter.get("/workspace/api/entwicklung/person/:id", nurLeitung, (req, nicht auf einer eigenen Liste: Wer die Beobachtung sieht, soll im selben Blick sehen, ob daraus etwas geworden ist. */ schritt: schritte.get(pt.schluessel) || null, + /* IST ER DIESEM MENSCHEN ZUGETRAGEN? (25.09.2026) Der Punkt + bleibt sichtbar -- die Marke sagt, dass er ihm als Aufgabe + gegeben wurde. */ + zugetragen: zugeteilt.has(pt.schluessel), }; }), })); @@ -781,20 +821,25 @@ entwicklungRouter.get("/workspace/api/entwicklung/person/:id", nurLeitung, (req, erwartung: ENTWICKLUNG_ERWARTUNG, bloecke, abweichungen, - /* „X VON Y" ZAEHLT AB HEUTE DAS ZUGETEILTE (25.09.2026). + /* „X VON Y" ZAEHLT DAS ZUGETRAGENE (25.09.2026). - `ENTWICKLUNG_FREMD.length` sind alle 68 -- die Zahl war damit - fuer jeden gleich, egal wie viele Punkte ihn ueberhaupt - betreffen. „0 von 68" bei jemandem, fuer den zwoelf gelten, - ist keine Auskunft, sondern eine Entmutigung. + Filipe: „es sollen nur die menge angezeigt werden die wir + zutragen und erledigte dan auch nur die die erledigt wurden + von den zugetragenen." - `meine.size` musste ebenfalls nachgezogen werden: Wer frueher - zu einem Punkt gesetzt hat, der ihm inzwischen nicht mehr - zugeteilt ist, haette sonst „13 von 12" bekommen. Gezaehlt - wird deshalb nur, was auch in der Liste steht. */ + Vorher stand hier `ENTWICKLUNG_FREMD.length` -- alle 68, fuer + jeden dieselbe Zahl, egal wie viel ihm ueberhaupt aufgetragen + wurde. „0 von 68" sagt bei jemandem mit drei Aufgaben nichts + und entmutigt bei jedem. + + UND DIE LINKE ZAHL EBENSO: Gezaehlt wird, was von den + ZUGETRAGENEN erledigt ist. Wer frueher zu einem Punkt gesetzt + hat, der ihm nie zugetragen wurde, haette sonst „13 von 3" + bekommen -- eine Zahl, die groesser ist als ihr Ganzes, und + die niemand mehr erklaeren kann. */ gesetzt: bloecke.reduce((n, b) => n - + b.punkte.filter((pt) => pt.meins).length, 0), - gesamt: bloecke.reduce((n, b) => n + b.punkte.length, 0), + + b.punkte.filter((pt) => pt.zugetragen && pt.meins).length, 0), + gesamt: zugeteilt.size, /* Wie viele es insgesamt GAEBE -- die Oberflaeche sagt damit „12 von 68 ausgewaehlt", ohne die Liste selbst zu kennen. */ gesamt_katalog: ENTWICKLUNG_FREMD.length, diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index 3fa64cab..4e603c81 100644 --- a/workspace/anruf-probe.html +++ b/workspace/anruf-probe.html @@ -16,15 +16,15 @@ verdeckt. Gefunden hat es pruef-struktur. Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> - - + + - +