Team-Lage: fuenf Stufen mit eigener Farbe, Karten neu gebaut, 404 wirft nicht mehr hinaus
B7 -- "wenn ich auf diese sachen drücke werd ich auf die startseite geschickt" und "ich will das es ein zwei kategorien mehr gibt und das soll geiler aussehen und jede seine eigene farbe, stark erkennbar" 1. DER RAUSWURF. Ein Druck auf einen Stufen-Knopf schickte auf die Startseite. Ursache: `hole()` stand ACHTMAL Zeichen fuer Zeichen gleich in acht Dateien, und darin warf JEDER 404 hinaus -- auch der auf eine blosse Handlung. Jetzt eine gemeinsame `assets/js/holen.js` mit der engeren, abgeleiteten Regel: Ein 404 wirft nur, solange die Seite noch gar nichts bekommen hat. 2. ZWEI STUFEN MEHR, und keine davon erfunden: "Fortgeschritten" gibt es im Entwicklungs-Katalog laengst (ENTWICKLUNG_ERWARTUNG), hier fehlte genau diese Mitte; "Vertretung" stand bis heute IN der Beschreibung von Senior. Keine Datenbankaenderung noetig -- die Spalte ist absichtlich ein TEXT ohne CHECK. 3. DIE FARBEN SIND GERECHNET. Nachgemessen lagen "Probe" und "Standard" bei 0,0576 OKLab-Abstand; MINDEST_ABSTAND ist 0,090 -- die beiden waren nebeneinander dieselbe Farbe, und alle drei lagen unter MINDEST_BUNTHEIT. Die neuen fuenf sind ein Faecher aus fuenf Farbwinkeln im Abstand von 72 Grad; der Versatz ist der, bei dem der kleinste Abstand am groessten wird. Ergebnis: 0,1531 untereinander, 0,1108 zur Rollenmarke daneben, Kontrast 7,4 bis 8,6. B8 -- "die sollen viel krasser geiler und übersichtlicher sein ... und die kacheln sollen viel krass geiler und spezieller aussehen auch der hintergrund, veränder das komplett" 4. DIE KARTE IST NEU: Kopfband in der Farbe der Stufe bis an die Kanten, Zeichen von 44 auf 52 px mit Ring, Zahlenband als eigene Flaeche, neuer Hintergrund (Farbschein unter dem Kopfband, feine Schraffur, dunklere Platte). 781 px hoch gemessen, danach 746. 5. DIE ROLLE STEHT JETZT DA -- als Marke auf der Karte und als Ueberschrift ueber jeder Gruppe. Sortiert war schon vorher nach Rolle; man konnte es nur nicht sehen. DREI FEHLER, DIE DABEI AUFFIELEN * `auto-fit` liess die einzelne Karte der rechten Hand ueber die ganze Bildschirmbreite laufen, sobald gruppiert wurde. `auto-fill` haelt die leeren Spalten offen. * Der Name der Person trug `tperson__namen` statt `tperson__name` -- ein Buchstabe, und damit die Klasse fuer graues Kleingedrucktes. Auf einer Seite ueber Personen war der Name kleiner als die Beschriftung darunter. Gefunden hat es die neue Pruefung, die ueberall "?" las. * `stufeSetzen()` suchte das Stufen-Schild mit `[class*="tmerkmal--"]:not(...)` -- einer Aufzaehlung dessen, was es NICHT ist. Sobald die Rollenmarke davorstand, traf die Suche sie: Ein Druck auf "Standard" haette aus "Modi" das Wort "Standard" gemacht. Und die Karte faerbte sich beim Setzen nicht mit um. DREI PRUEFUNGEN, ALLE MIT GEGENPROBE * pruef-holen.mjs (NEU, 14): fuehrt die echte Datei aus und misst fuenf Wege; dieselben fuenf noch einmal an der ALTEN Fassung, die bei genau zwei durchfallen muss. Dazu: laedt jede der acht Seiten holen.js, und zwar VOR ihrem Skript. * pruef-teamlage-karten.mjs (NEU, 22): im Browser. Gruppen, Rollenwort, Stufenknoepfe nur bei Modis, der Druck selbst (kein Sprung, ein Abruf, Schild und Kartenfarbe ziehen mit), Gegenprobe mit dem zweiten Druck, und die neuen Baender auf 390 px. * pruef-team-stufen.mjs (28 -> 47): die abgeschriebene Liste ["probe","standard","senior"] ist raus -- geprueft werden jetzt Eigenschaften und die Farbabstaende, gelesen aus team.css. Gegenprobe ist der Stand von gestern, der durch dieselbe Messung faellt. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -77,30 +77,63 @@ const GESAMT = Object.fromEntries(
|
||||
* merkt es nicht -- eine vergessene Schranke faellt nur dem auf, der
|
||||
* hindurchgeht. */
|
||||
/* =====================================================================
|
||||
DIE DREI STUFEN (Blueprint V3.0, Kapitel 4.1)
|
||||
DIE FUENF STUFEN (Blueprint V3.0, Kapitel 4.1 -- erweitert 22.09.2026)
|
||||
|
||||
Probe -- in der Einarbeitung, wird eingeschaetzt.
|
||||
Standard -- der Normalfall: moderiert, arbeitet eigene Aufgaben ab.
|
||||
Senior -- kann zusaetzlich neue Probe-Modis einschaetzen, mehrere
|
||||
Kategorien gleichzeitig tragen und die rechte Hand bei
|
||||
Abwesenheit vertreten.
|
||||
Probe -- in der Einarbeitung, wird begleitet.
|
||||
Standard -- der Normalfall: moderiert, arbeitet eigene
|
||||
Aufgaben ab.
|
||||
Fortgeschritten-- kennt die Ablaeufe und braucht keinen Anstoss mehr.
|
||||
Senior -- schaetzt neue Probe-Modis ein und traegt mehrere
|
||||
Kategorien gleichzeitig.
|
||||
Vertretung -- springt fuer die rechte Hand ein, wenn sie nicht
|
||||
da ist.
|
||||
|
||||
SIE SIND EINE ARBEITSEINTEILUNG, KEINE RECHTEGRENZE -- jedenfalls
|
||||
heute noch nicht. Das gehoert ausgesprochen, damit niemand sie
|
||||
spaeter fuer eine haelt: Was ein Modi in dieser App darf, haengt an
|
||||
der ROLLE. Die Stufe sagt, wo er im Team steht, und macht den
|
||||
naechsten Schritt sichtbar. Die Rechte, die der Blueprint dort
|
||||
nennt, liegen ausserdem groesstenteils gar nicht hier, sondern im
|
||||
Stream (Timeout, Bann).
|
||||
ES WAREN DREI, UND ZWEI DAVON WAREN KEINE EIGENE STUFE, SONDERN EIN
|
||||
BUENDEL. Filipe am 22.09.2026: "und ich will das es ein zwei
|
||||
kategorien mehr gibt und das soll geiler aussehen und jede seine
|
||||
eigene farbe, stark erkennbar."
|
||||
|
||||
Die beiden neuen sind nicht erfunden, sondern herausgeloest:
|
||||
|
||||
(1) "Fortgeschritten" gibt es im Haus laengst -- der
|
||||
Entwicklungs-Katalog nennt seine Erwartungsstufen
|
||||
probe/standard/fort/senior (ENTWICKLUNG_ERWARTUNG in
|
||||
workspace-entwicklungs-punkte.js). Genau diese Mitte fehlte
|
||||
hier, und Filipe hatte sie dort am 17.09. selbst eingefordert
|
||||
("wieso ist da immer noch nicht perfektionniert wie bei den
|
||||
anderen mit fortgeschritten und so"). Zwei verschiedene
|
||||
Leitern fuer dieselben Menschen waren der eigentliche Fehler.
|
||||
|
||||
(2) "Vertretung" stand bis heute IN der Beschreibung von Senior --
|
||||
"und die rechte Hand bei Abwesenheit vertreten". Das ist etwas
|
||||
anderes als "kann einschaetzen": Einschaetzen koennen mehrere,
|
||||
einspringen tut eine bestimmte Person. In einer Zeile gebuendelt
|
||||
war es unsichtbar.
|
||||
|
||||
SIE SIND WEITERHIN EINE ARBEITSEINTEILUNG, KEINE RECHTEGRENZE. Das
|
||||
gehoert ausgesprochen, damit niemand sie fuer eine haelt: Was ein
|
||||
Modi in dieser App darf, haengt an der ROLLE. Die Stufe sagt, wo er
|
||||
im Team steht, und macht den naechsten Schritt sichtbar. Die Rechte,
|
||||
die der Blueprint dort nennt, liegen ausserdem groesstenteils gar
|
||||
nicht hier, sondern im Stream (Timeout, Bann).
|
||||
|
||||
KEINE DATENBANKAENDERUNG NOETIG, und das ist kein Zufall: Die Spalte
|
||||
`personen.stufe` ist absichtlich ein blankes TEXT ohne CHECK (siehe
|
||||
den Kommentar in workspace.js). Dort steht woertlich, warum: "Kaeme
|
||||
morgen eine vierte dazu, waere ein Tabellenneubau auf einer
|
||||
Live-Datenbank ein hoher Preis fuer eine Beschriftung." Heute kamen
|
||||
eine vierte und eine fuenfte, und der Preis war null.
|
||||
|
||||
Die Reihenfolge ist die Steigerung -- sie steht hier einmal, damit
|
||||
keine Liste im Browser eine eigene erfindet. */
|
||||
export const STUFEN = ["probe", "standard", "senior"];
|
||||
export const STUFEN = ["probe", "standard", "fort", "senior", "vertretung"];
|
||||
|
||||
export const STUFEN_NAME = {
|
||||
probe: "Probe",
|
||||
standard: "Standard",
|
||||
fort: "Fortgeschritten",
|
||||
senior: "Senior",
|
||||
vertretung: "Vertretung",
|
||||
};
|
||||
|
||||
/** NULL heisst "Probe", nicht "unbekannt".
|
||||
@@ -121,6 +154,16 @@ function darfEingang(person) {
|
||||
return fuehrtTeamDogi(person);
|
||||
}
|
||||
|
||||
/** Wer eine Stufe hat -- und damit eine, die sich setzen laesst.
|
||||
*
|
||||
* NUR MODIS. Ein Manager oder Creator hat keine; die rechte Hand
|
||||
* auch nicht -- sie ist eine Rolle, keine Stufe darin. Steht hier an
|
||||
* EINER Stelle, weil zwei Stellen danach fragen: die Liste (damit
|
||||
* die Knoepfe gar nicht erst erscheinen) und der Weg zum Setzen
|
||||
* (damit niemand daran vorbeikommt). Zwei Fassungen waeren die, bei
|
||||
* der die Oberflaeche etwas anbietet, das der Server ablehnt. */
|
||||
const hatStufe = (p) => p?.rolle === "modi";
|
||||
|
||||
teamlageRouter.get("/workspace/api/teamlage", (req, res) => {
|
||||
try {
|
||||
const person = sitzungLesen(req);
|
||||
@@ -406,6 +449,24 @@ teamlageRouter.get("/workspace/api/teamlage", (req, res) => {
|
||||
genau das soll sie: andere Reihenfolge, anderes Aussehen.
|
||||
Sie stand bisher nicht einmal in der Abfrage. */
|
||||
rolle: m.rolle,
|
||||
/* OB SICH EINE STUFE UEBERHAUPT SETZEN LAESST (22.09.2026).
|
||||
|
||||
Filipe: „wenn ich auf diese sachen druecke werd ich auf
|
||||
die startseite geschickt, scheck das bitte ab."
|
||||
|
||||
Nachgestellt: Die Oberflaeche zeigte die drei Stufen-
|
||||
Knoepfe an JEDER Karte -- auch an der der rechten Hand.
|
||||
Die hat keine Stufe (sie ist eine Rolle, keine Stufe
|
||||
darin), der Server antwortete mit 404, und der 404 warf
|
||||
von der Seite (das steckte in holen.js und ist dort
|
||||
behoben).
|
||||
|
||||
Ein Knopf, der mit 404 antwortet, ist schlimmer als
|
||||
keiner. Die Antwort auf „hat diese Person eine Stufe"
|
||||
kommt deshalb von der Stelle, die es entscheidet -- und
|
||||
aus derselben Funktion, die der Weg weiter unten
|
||||
benutzt. */
|
||||
stufe_aenderbar: hatStufe(m),
|
||||
bild: m.bild ? `/workspace/api/steckbrief/bild/${m.bild}` : null,
|
||||
letzter_login: m.letzter_login,
|
||||
/* Die drei Felder aus Kapitel 4: Status, "dabei seit", Stufe. */
|
||||
@@ -484,7 +545,7 @@ teamlageRouter.put("/workspace/api/teamlage/stufe", gleicheHerkunft,
|
||||
eine Rolle, keine Stufe darin. */
|
||||
const ziel = db().prepare(
|
||||
"SELECT id, name, rolle, stufe FROM personen WHERE id = ?").get(personId);
|
||||
if (!ziel || ziel.rolle !== "modi") {
|
||||
if (!ziel || !hatStufe(ziel)) {
|
||||
return res.status(404).json({ fehler: "nicht_gefunden" });
|
||||
}
|
||||
const vorher = STUFEN.includes(String(ziel.stufe || "")) ? String(ziel.stufe) : "probe";
|
||||
|
||||
Reference in New Issue
Block a user