diff --git a/server/pruef-teamlage-karten.mjs b/server/pruef-teamlage-karten.mjs index e0d57411..3a58dcf2 100644 --- a/server/pruef-teamlage-karten.mjs +++ b/server/pruef-teamlage-karten.mjs @@ -93,6 +93,17 @@ function anlegen(name, rolle, code) { anlegen("Filipe", "admin", "CODE-DOGI-0001"); anlegen("Rieke", "hand", "CODE-HAND-0001"); +/* DIE LINKE HAND GEHOERT IN DIESE PROBE (23.09.2026). + + Sie fehlte hier -- und deshalb war die Pruefung gruen, waehrend die + Seite sie gar nicht anzeigte: `WHERE rolle IN ('hand','modi')` in + workspace-teamlage.js. Eine Rolle, die in den Testdaten nicht + vorkommt, kann auch nicht vermisst werden. + + Filipe, mit dem Bildschirmfoto: „ich will dass die linke hand auch + ueberall zu sehen ist. reihenfolge immer. rechte hand, dan linke + hand und dan modis." */ +anlegen("Lino", "linke", "CODE-LINK-0001"); /* DIE STUFEN KOMMEN AUS DEM SERVERMODUL, nicht aus einer Liste hier. Genau so bleibt die Pruefung gueltig, wenn morgen eine sechste @@ -191,8 +202,9 @@ if (angekommen !== "/workspace/teamlage.html") { }; }); - ok(lage.karten.length === 1 + modis.length, - `${lage.karten.length} Karten stehen da (erwartet ${1 + modis.length})`); + ok(lage.karten.length === 2 + modis.length, + `${lage.karten.length} Karten stehen da (erwartet ${2 + modis.length})`); + /* DIE ROLLE STEHT AUF JEDER KARTE. Ohne das Wort ist die Sortierung unsichtbar -- genau der Befund vom 22.09. */ @@ -219,6 +231,21 @@ if (angekommen !== "/workspace/teamlage.html") { `jede Ueberschrift nennt ihre Rolle und ihre Anzahl richtig` + ` (${lage.gruppen.map((g) => `${g.wort} ${g.zahl}`).join(" · ")})`); + /* DIE REIHENFOLGE IST DIE AUSSAGE, nicht nur die Gruppierung. + Geprueft gegen ROLLEN_REIHE -- die eine Liste des Hauses -- und + nicht gegen drei hier hingeschriebene Namen. Wer die Reihenfolge + dort aendert, aendert sie hier mit. */ + { + const { ROLLEN_REIHE } = await import("./workspace.js"); + const erwartet = ROLLEN_REIHE.filter((r) => bloecke.includes(r)); + ok(bloecke.length === 3, + `drei Rollen stehen auf der Seite (${bloecke.join(" → ")})`); + ok(JSON.stringify(bloecke) === JSON.stringify(erwartet), + `und zwar in der Reihenfolge des Hauses: ${erwartet.join(" → ")}`); + ok(bloecke[0] === "hand" && bloecke[1] === "linke", + "rechte Hand zuerst, dann die linke -- genau so gewuenscht"); + } + /* =================================================================== 2. DIE STUFE STEHT NUR DA, WO ES EINE GIBT =================================================================== */ diff --git a/server/workspace-bereiche.js b/server/workspace-bereiche.js index 44a11a03..7035a835 100644 --- a/server/workspace-bereiche.js +++ b/server/workspace-bereiche.js @@ -2412,8 +2412,17 @@ bereicheRouter.post("/workspace/api/bereich/:bereich", gleicheHerkunft, (req, re ("Zugeordneter Creator existiert nicht" -- die Person existiert sehr wohl, sie ist nur kein Creator). Gefunden von der Pruefung, nicht vom Auge. */ + /* DIE LINKE HAND GEHOERT DAZU (23.09.2026). Hier stand + `rolle IN ('hand','modi')` -- eine zweite abgeschriebene Liste + derselben Sorte wie in workspace-teamlage.js. Ein Eintrag im + Entwicklungsbereich liess sich der linken Hand nicht zuordnen, + und die Meldung dazu lautete „Diese Person gehoert nicht zum + Team." -- ueber jemanden, der sehr wohl dazugehoert. + + Abgeleitet aus TEAM_DOGI_ROLLEN, der einen Liste des Hauses. */ + const teamListe = [...TEAM_DOGI_ROLLEN].map((r) => `'${r}'`).join(", "); const zielRollen = bereich === "entwicklung" - ? "rolle IN ('hand','modi')" + ? `rolle IN (${teamListe})` : "rolle = 'creator'"; if (aus.creator_id && !db().prepare(`SELECT 1 FROM personen WHERE id = ? AND ${zielRollen}`) diff --git a/server/workspace-teamlage.js b/server/workspace-teamlage.js index c4eeea59..a3f62e3f 100644 --- a/server/workspace-teamlage.js +++ b/server/workspace-teamlage.js @@ -34,7 +34,7 @@ import express from "express"; import { db, sitzungLesen, istDogFather, fuehrtTeamDogi, heuteLokal, protokolliere, echteIp, - ROLLEN_SORTIERUNG, + ROLLEN_SORTIERUNG, TEAM_DOGI_ROLLEN, } from "./workspace.js"; import { MODI_PUNKTE } from "./workspace-modi-punkte.js"; import { checklistenTabellen } from "./workspace-checkliste.js"; @@ -229,10 +229,32 @@ teamlageRouter.get("/workspace/api/teamlage", (req, res) => { auch die Personenliste, der Chat und die Rechtetafel benutzen. Eine eigene Reihenfolge hier waere die zweite Wahrheit, und die zweite ist die, die beim naechsten Rollenwechsel abweicht. */ + /* ==== DIE LINKE HAND GEHOERT DAZU (23.09.2026) ================ + + Filipe, mit dem Bildschirmfoto dieser Seite: „ich will dass die + linke hand auch ueberall zu sehen ist. reihenfolge immer. rechte + hand, dan linke hand und dan modis." + + Hier stand `rolle IN ('hand','modi')` -- eine abgeschriebene + Liste, und die linke Hand kam darin nicht vor. Sie fehlte damit + nicht nur als Karte: Der Eingang weiter unten sammelt aus + genau dieser Liste. Ihre Rueckmeldungen waeren nirgends + angekommen -- dasselbe, was am 11.09. schon der rechten Hand + passiert ist, an derselben Zeile. + + JETZT AUS DER EINEN LISTE DES HAUSES. `TEAM_DOGI_ROLLEN` ist + {hand, linke, modi} und steht in crew-adresse.js. Kaeme morgen + eine weitere Team-Rolle, waere sie hier von selbst dabei. + + DIE REIHENFOLGE STIMMTE SCHON: ROLLEN_REIHE nennt hand vor + linke vor modi, und ROLLEN_SORTIERUNG leitet daraus das CASE + ab. Sie war nur nie zu sehen, weil eine der drei fehlte. */ + const platzRollen = [...TEAM_DOGI_ROLLEN].map(() => "?").join(", "); const modis = db().prepare( `SELECT id, name, rolle, bild, letzter_login, aktiv, erstellt, stufe FROM personen - WHERE rolle IN ('hand','modi') AND id <> ? - ORDER BY aktiv DESC, ` + ROLLEN_SORTIERUNG + `, name`).all(zeigt.id); + WHERE rolle IN (${platzRollen}) AND id <> ? + ORDER BY aktiv DESC, ` + ROLLEN_SORTIERUNG + `, name`) + .all(...TEAM_DOGI_ROLLEN, zeigt.id); if (!modis.length) { /* `eingang` auch hier -- die Oberflaeche darf nicht raten