a9dcb8f59aa7c74ff419f7703f43fc76a9bb4347
100
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
a9dcb8f59a |
Die Scout-Pipeline: 13 Felder statt 5, und getrennt von Team Dogi
Filipe: "perfektionnier diese kategorien wie die aussehen und was man
da noch alles immer in jeder kategorie eintragen kann. weil man kan da
nichts machen ... und das soll getrennt von der team dogi seite sein."
"MAN KANN DA NICHTS MACHEN" -- MAN KONNTE, UND DAS WAR DAS PROBLEM.
Der ganze Editor lag hinter einem stillen Textknopf namens "Details".
Ein Wort, das Lesen verspricht, an der einzigen Stelle, an der man
aendert. Er heisst jetzt "Bearbeiten", hat eine Kante und ein
aria-expanded. Aktivitaet und Potenzial waren dort ausserdem nur
ANZEIGE -- eintragen liessen sie sich ausschliesslich beim Anlegen.
Jetzt sind es Felder wie alle anderen.
SIEBEN NEUE FELDER, und keines davon ist Schmuck:
netzwerk schon bei einer Agentur? Die teuerste Frage der ganzen
Pipeline -- wer unter Vertrag steht, kann nicht
uebernommen werden. Steht auf der Karte VOR der
Prioritaet, rot. "unbekannt" ist eine eigene Antwort und
nicht dasselbe wie "nein".
land DE/AT/CH/LU/andere -- die vier Laender, in denen betreut
wird, und die Schweiz liegt rechtlich anders als die
drei EU-Laender (TikTok-Recherche vom 10.09.).
follower Reichweite. "12,4k" aus der Zwischenablage wird zu
12400 -- sonst stuende da eine 12, und das faellt
niemandem auf.
woher wie gefunden
kontaktweg wo angeschrieben
live_zeiten wann die Person ueblicherweise live ist
absage_grund erscheint NUR bei "Abgelehnt" -- ein "warum nicht" an
einem Kontakt, der gut laeuft, ist eine Frage, die
niemand gestellt hat.
Gemessen: 13 Felder im Editor statt 5.
DIE STUFEN ERKLAEREN SICH SELBST. Was "Interessiert" von "Gespraech"
unterscheidet, stand bisher nur im leeren Zustand der Seite -- also
genau so lange, bis der erste Kontakt da war. Der Satz steht jetzt an
der Stufe, und beide lesen aus derselben Liste (STUFE_WAS). Dazu eine
Kante im Ton der Stufe; die Farben gab es laengst, benutzt wurde nur
die Zahl.
GETRENNT VON TEAM DOGI -- und das war keine Formsache. `sichtbar()`
gibt fuer jeden mit `siehtAlles` schlicht `1=1` zurueck, und DogFather
hat `siehtAlles` auch auf der crew-Adresse. Die komplette Pipeline des
Workspace waere dort mitgekommen. Jetzt 404 fuer das ganze Modul,
sobald `haus === "crew"` -- nicht gefiltert, sondern nicht vorhanden.
Die Absperrung haengt an der gemeinsamen Schranke und gilt damit auch
fuer jeden Weg, der spaeter dazukommt.
NEUE PRUEFUNG (pruef-scouting-felder, 28 Pruefungen)
Sie misst alle drei Behauptungen: dass die Felder ankommen und
zurueckkommen, dass der Server Unsinn ablehnt (Land ausserhalb der
Liste, erfundene Netzwerk-Angabe, negative Follower) -- mit Gegenprobe,
dass das Richtige durchgeht -- und dass es die Pipeline auf crew. nicht
gibt. Dazu die Oberflaeche: Knopfname, Stufentext, die Fakten auf der
Karte, die Warnung, und die Zahl der Felder im Editor.
ZWEI EIGENE FEHLER AUF DEM WEG, beide von der Pruefung gefunden:
* `notbremse(240)` -- der Wert ist in MILLISEKUNDEN. Die Pruefung
brach nach einer Viertelsekunde mit "HING" ab, bevor sie anfing.
* Der crew-Test meldete 200 und sah wie ein Befund aus. Tatsaechlich
verwirft `fetch` einen selbst gesetzten `Host`-Kopf (verbotener
Header) -- die Anfrage war nie auf der crew-Adresse. Jetzt ueber
node:http, mit Gegenprobe, dass derselbe Weg ohne crew-Kopf
weiterhin 200 liefert.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
0ffb9e8781 |
Die Kategorien in Filipes Reihenfolge -- und das Band jetzt ueberall
Vier Meldungen von Filipe, drei davon erledigt.
1. "DIE DOGFATHER ROLLE SIEHT DIE CREATOR NICHT MEHR" -- NICHTS KAPUTT.
Nachgestellt mit frischer Datenbank und fuenf Creator: DogFather
sieht auf allen sechs Seiten mit Creator-Umschalter alle fuenf. In
der SICHT VON MIESMUSCHEL dagegen steht auf leistung.html und
profil.html genau einer -- ihr Name. Genau das zeigt sein
Bildschirmfoto. Er ist noch in der fremden Sicht von gestern.
MEINE SCHULD, NICHT SEINE. Gestern habe ich das Hinweis-Band
ausdruecklich nur aufs Handy gelegt, mit der Begruendung, am Rechner
stehe der Name ja im Umschalter und zwei Anzeigen fuer dieselbe
Sache seien eine zu viel. Einen Tag spaeter ist er am RECHNER darauf
hereingefallen, mit sichtbarem Namen im Umschalter UND goldenem
Rahmen. Damit ist die Begruendung widerlegt -- nicht durch ein
Argument, sondern durch den Fall. Das Band steht ab jetzt ueberall.
NEBENBEFUND, NICHT ANGEFASST: Die fremde Sicht greift nur auf der
Haelfte der Seiten. leistung und profil folgen ihr, bereich, content,
report und startcheck zeigen weiter alle Creator. Halb umgesetzt ist
schlechter als gar nicht -- das gehoert entschieden, nicht nebenbei
geaendert.
2. "RUND UM DAS TEAM UEBER TAEGLICH" -- verschoben, mitsamt dem Absatz,
der die alte Stelle begruendet hat.
3. "TEAM DOGI UND ENTWICKLUNG GANZ UNTEN, NUR DOGFATHER UND VANVAN".
`gruppeNach: "Täglich"` -> `"Team & System"`, der letzten Gruppe der
Liste. Als NAME und nicht als Position: Eine Zahl waere beim
naechsten Umsortieren still falsch, und still falsch hiesse hier,
dass privates Material wieder nach oben rutscht.
DIE SICHTBARKEIT WAR SCHON RICHTIG -- nachgesehen statt angenommen:
Auf der Workspace-Adresse bekommt die Kacheln nur `admin`. VanVan
traegt die Rolle `hand` und kann sich dort gar nicht anmelden
(sitzungPasstZurAdresse weist Team-Dogi-Rollen ab); sie sieht
dieselben Kacheln auf der crew-Adresse ueber HAND_BEREICHE. Die
Modis sehen sie nicht -- Entwicklung und Talente stehen nicht in
MODI_BEREICHE. Am Livesystem geprueft: genau ein admin, eine hand.
Gemessen kommt fuer DogFather heraus:
Rund um das Team | Taeglich | Rund um den Creator | Team & System
| Team Dogi | Entwicklung & Nachwuchs
Spicy Media sieht dieselbe Folge ohne die letzten beiden, Manager
und Creator wie bisher.
UND EINE PRUEFUNG, DIE DAS FALSCHE GEMESSEN HAT
pruef-start-ansicht wurde durch die neue Reihenfolge rot -- ohne dass
eine Kachel kleiner geworden waere. Sie las
`querySelector(".kachel__zeichen")`, also die ERSTE Kachel der Seite.
Solange "Taeglich" oben stand, war das zufaellig die grosse
Dashboard-Kachel. Die Pruefung hat damit nie belegt, was ihr Kommentar
behauptet ("die Kacheln sollen spuerbar groesser sein"), sondern nur
"die erste ist die grosse".
Jetzt misst sie die grosse Kachel ausdruecklich UND die kleinste aller
Kacheln, mit eigenen Untergrenzen. Das ist strenger als vorher: Vorher
konnte jede Kachel ausser der ersten beliebig schrumpfen.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
ad47fc2b00 |
Team Dogi: Sternenfeld auf jeder Kachel, und die Sicht zeigt endlich, was sie verspricht
DER GRUND JEDER KACHEL IM HAUS VON TEAM DOGI
Filipe: "ich will dass die hintergrunde von den kacheln immer unviersum
artig ist, es muss richtig geil sein aber immer so dass man alles noch
gut erkkent. und das IN DER GANZEN WEBSITE VON TEAM DOGI. nur die
kacheln. [...] wichtig ist die form der kacheln soll gleich bleiben."
module.css hat eine kanonische KACHELLISTE -- 48 Klassen, siebenmal in
der Datei, von pruef-css-klassen gegeneinander gehalten. Eine achte
Abschrift in crew-haus.css waere die Sorte Fehler, die nicht auffaellt:
heute vollstaendig, bei der naechsten neuen Kachel lautlos nicht mehr.
Deshalb faerbt crew-haus.css keine einzige Kachel. module.css baut den
Grund jetzt aus vier Werten (--sternenfeld, -mass, -lage,
--modul-schleier), und das zweite Haus setzt nur diese vier um. Damit
hat jede Kachel der ganzen Adresse den Himmel -- auch die, die es noch
nicht gibt. Im Agenturhaus steht `none`: kein Pixel aendert sich.
ZWEI DINGE HAT ERST DIE MESSUNG GEFUNDEN, NICHT DAS NACHDENKEN:
1. Die Nebel standen zuerst oben links. Dort ist aber JEDE Kachel dieses
Hauses schon von sich aus am hellsten -- ihr eigener Lichtverlauf
laeuft bei allen aus derselben Richtung (155/150/158 Grad) --, und
genau dort stehen ueberall die Ueberschriften. Hinter der leisesten
Textzeile lagen dadurch 2,09 % der Bildpunkte unter 4,5:1; im
Agenturhaus sind es an derselben Stelle 0,115 %. Nach dem Umzug in
die beiden gegenueberliegenden Ecken: 0,22 % -- und der Nebel durfte
dabei KRAEFTIGER werden (.80 statt .62), weil er nicht mehr auf dem
hellsten Punkt liegt. Besser lesbar und deutlicher zu sehen; das ist
selten und war hier umsonst zu haben.
2. Kleinere, dafuer hellere Sternkerne waren der falsche Weg: Der
hellste Punkt blieb fast gleich, der Stern wurde nur unschaerfer.
Entschieden hat die Deckkraft, nicht die Groesse.
Form unangetastet: Fase, Silhouette und die drei Eckwinkel werden vor
und nach dem Hauswechsel Zeichen fuer Zeichen verglichen.
pruef-kachel-universum.mjs (NEU, 37 Pruefungen, Port 4391) misst an
echten Bildpunkten und fragt nicht nach Durchschnitt allein, sondern
nach dem ANTEIL der Punkte unter 4,5:1 -- das unterscheidet einen Punkt
von einer Flaeche. Zwei Gegenproben: ein zu dunkler Text UND ein zu
heller Nebel muessen durchfallen.
MEINE SICHT -- "GENAU SO WIE SIE ES SEHEN"
Filipe: "oben bei meine sicht soll ich auch die sicht von allen jeden
moment sehen koennen und das genau genau so wie sie es sehen alles.
ausser die kalender daten oder chat daten wo ich nicht mit drin bin.."
Gemessen wurde nicht "mit Umschalter gegen ohne" -- das ist bei duenner
Datenlage ueberall gleich und beweist nichts. Gemessen wurde die
Antwort mit Umschalter gegen die Antwort, die die Person SELBST bekommt.
Das hat sechs Stellen gefunden:
* workspace-zentrale.js las `req.person.sicht` -- ein Feld, das es nicht
gibt. Der Ausdruck war immer `undefined || req.person`, daneben ein
ausfuehrlicher Kommentar, der genau das Richtige beschrieb. Die grosse
Kachel zeigte verlaesslich die eigene Lage, waehrend die Zahlen
darunter der fremden folgten -- zwei Wahrheiten in einer Kachel. Ein
Tippfehler in einem Variablennamen macht nichts kaputt; er tut nur
nichts, und genau deshalb faellt so etwas nie von selbst auf. Die
Route hatte ausserdem ZWEI Personenvariablen; jetzt hat sie eine.
* sichtPerson() gab die angesehene Person ohne Feld `haus` zurueck --
und nurHaus()/hausBedingung() fangen beide mit `haus !== "crew"` an.
Jede fremde Sicht war damit eine Agentursicht: In der Sicht auf einen
Modi kamen die Dateien, Personen und Berichte des anderen Hauses.
Das Haus haengt jetzt an der ROLLE, nicht an der Adresse.
* leistung, profil, schulung, fruehwarnung, report und teamlage lasen
weiterhin den Angemeldeten. Nur LESEN ist umgestellt, nie ein Recht --
und weil DogFather ohnehin alles sehen darf, kann das nichts oeffnen,
nur weniger zeigen.
Der Sicht-Umschalter zeichnete ausserdem nur die fuenf Rollen aus
bereiche.js; wer eine sechste hat, stand nicht darin. Dieselbe Luecke
wie in der Chat-Auswahl und der Personenliste, zum dritten Mal. Die
Ueberschrift kommt jetzt vom Server (`gruppe`), der Browser zeichnet,
was ankommt -- auch eine Rolle, deren Namen er nicht kennen darf.
DREI STELLEN FOLGEN BEWUSST NICHT: die Personenliste (aus ihr wird der
Umschalter gebaut -- folgte sie der Sicht, kaeme man aus einer fremden
nicht mehr heraus), die Auswahllisten beim Anlegen (Kategorien,
Empfaenger) und steckbrief/mein (ein Formular, das fremd liest und
eigen speichert, zerstoert Daten).
KALENDER UND CHAT BLEIBEN PRIVAT, auch mit Umschalter -- Termine,
Calls und Wiederholungen lesen ab jetzt immer die eigene Person. Eine
Pruefung musste dafuer umgedreht werden: pruef-sicht verlangte bis
heute das Gegenteil ("dafuer gibt es den Umschalter"). Die Gegenprobe
bleibt dieselbe Frage, nur andersherum -- Patrick selbst MUSS seine
Termine sehen, sonst hiesse "DogFather sieht sie nicht" nur, dass sie
niemand sieht. Dabei fiel auf, dass die Managerin gar keinen Call
hatte: Die Pruefung "bleibt privat" war nicht bestanden, sondern nicht
durchfuehrbar. Antwort darauf sind Daten, keine weichere Bedingung.
Gruen: pruef-sicht 84 (vorher 53), pruef-kachel-universum 37 (neu),
pruef-rollen 282, pruef-crew-adresse 129, pruef-start-ansicht 143,
pruef-kalender 104, pruef-haus-trennung 62, pruef-team-ampel 32,
pruef-team-stufen 26, pruef-css-klassen. Stempel 202609110209.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
9b47bd3ca0 |
Entwicklung & Nachwuchs -- zwei Bretter fuer DogFather und die rechte Hand
Filipe: "ich will dass ich genau so eine kategorie habe in der dogfather und rechten hand rollen, wo wir aufgaben oder bewertungen ueber modis eingeben koennen. auch fuer zuschauer die vielleicht modis werden koennten waere auch geil. mach dich schlau informier dich so krass wie es nur geht, hol die besten der besten und krassesten sachen, perfektionnier die dan auch alle und dan erst setzt du alles um." === WAS DIE RECHERCHE ERGEBEN HAT === DREI BEFUNDE HABEN DAS DESIGN BESTIMMT, und der erste hat es fast umgedreht: WARUM MODERATOREN AUFHOEREN (Schoepke-Gonzalez u. a., New Media & Society 2024): zwei Hauptgruende -- zu wenig Zeit, und Konflikte im Team beziehungsweise schaedliches Verhalten der Leitung. Eine Bewertungsfunktion ist damit genau das Werkzeug, mit dem man ein Team verliert, wenn man sie als Ueberwachung baut. Das ist kein Bauchgefuehl und keine Zimperlichkeit -- es ist der haeufigste gemessene Grund. WAS HAELT: Anerkennung. Dank und Rueckmeldung erhoehen die Verweildauer messbar; Rollenklarheit senkt Burnout. WORAN MAN GUTE MODERATOREN ERKENNT (ModSquad, Kitfox Games, Discord-Leitfaeden): nicht an Zahlen. Ruhig bleiben, wenn es hitzig wird; von selbst helfen; die Regeln UND die Leute kennen; regelmaessig da sein. Ausdruecklich NICHT: "schreibt viel" -- angenehm im Chat zu sein ist nachweislich etwas anderes. Und der treffsicherste Weg ueberhaupt ist die Empfehlung aus dem Team, gefolgt von einer Probezeit. === WAS DARAUS GEBAUT WURDE === ENTWICKLUNG. Keine Note, sondern eine Aufzeichnung ueber die Zeit, je Person. Fuenf Arten, und ihre REIHENFOLGE ist Absicht: "Das laeuft gut" und "Danke dafuer" stehen vorn. Wer ein Formular oeffnet, dessen erstes Feld "Problem" heisst, schreibt Probleme auf. "ZU VIEL GERADE" IST DIE WICHTIGSTE ART und die, die es sonst nirgends gibt. Der haeufigste Grund zu gehen ist Zeitmangel, und der zeigt sich frueh -- nur schreibt ihn niemand auf, weil es kein Feld dafuer gibt. TALENTE. Die vier Merkmale sind die aus der Literatur, nicht ausgedacht, dazu die Empfehlung aus dem Team. Der Status IST die Probezeit: `offen` heisst beobachtet, `angenommen` heisst angesprochen -- und was daraus wird, entscheidet sich in "Personen & Zugaenge" mit einem Zugang auf Stufe "Probe". Eine eigene Kandidatentabelle waere ein zweiter Ort fuer dieselbe Frage. DIE BRUECKE. Die Person sieht den Entwicklungs-Bereich NICHT -- eine halb sichtbare Akte ist schlimmer als eine geschlossene, weil niemand mehr weiss, was der andere gerade liest. Damit Anerkennung trotzdem ankommt, laesst sich jeder Eintrag EINMAL als Nachricht in den Chat schicken, mit Art, Titel und dem, was daraus folgen soll. Danach steht im Eintrag, wann es geschehen ist: Die Frage "habe ich ihr das eigentlich schon gesagt?" beantwortet man nach zwei Wochen falsch. ZWEI KACHELN UND NICHT DREI: Aufgaben an das Team gibt es laengst, mit Person, Frist und Status. Eine zweite Stelle dafuer waere ein zweiter Ort, an dem man nachsehen muesste, welche Aufgabe wirklich gilt. DIE GRUPPE HEISST NICHT "TEAM FUEHREN". Das waere der bequeme Name und der falsche: Im Haus gilt, dass DogFather nicht ueber seinem Team steht. "Entwicklung & Nachwuchs" sagt, was drinsteht. === KEIN NEUER BAUKASTEN === Beides sind BEREICHE wie das Ideen-Board: dieselbe Tabelle, dieselbe Seite, dieselben Regeln fuers Anlegen, Aendern und Loeschen. Neu sind eine Spalte (`gesendet_am`) und eine Route. Die Sendefunktion selbst steht im Chat-Modul und nicht daneben: Ein Zweier-Gespraech darf es nur einmal geben, die Leseraender muessen mitwandern, Live-Strom und Benachrichtigung haengen daran -- wer das nachbaut, hat zwei Fassungen, und die zweite ist die, in der jemand eine Nachricht nicht bekommt. === WAS DIE PRUEFUNG GEFUNDEN HAT === "Zugeordneter Creator existiert nicht" -- beim Anlegen eines Eintrags ueber ein Teammitglied. Die Regel verlangte einen Creator; bei Entwicklung geht es um Menschen aus dem Team. Die Meldung war dabei selbst irrefuehrend: Die Person existiert sehr wohl, sie ist nur kein Creator. Beides behoben. Und meine EIGENE Pruefung von vor einer Stunde wurde rot: Sie verlangte, dass jede Zusatzkachel in der Gruppe "Team Dogi" steht. Die naheliegende Reparatur waere gewesen, die Gruppe gar nicht mehr zu pruefen -- das haette die Aussage weggeworfen. Jetzt steht die erlaubte Liste ausgeschrieben da: Eine Kachel fuer zwei Menschen darf nicht in einer Gruppe landen, die alle sehen. Kommt eine dritte Gruppe, wird die Zeile rot, und das ist Absicht. Die zwei neuen Farbtoene trennen ueber Saettigung und Helligkeit statt ueber den Farbwinkel -- bei 25 Toenen ist der Kreis voll, und die groessten Luecken waeren ein drittes Gruen zwischen zwei vorhandenen. Bei einer achtundzwanzigsten Kachel brauchen die Kacheln Gruppenfarben statt Einzelfarben; das steht als Notiz im Quelltext. pruef-entwicklung 33 (neu) · pruef-start-ansicht 27 Kacheln, sechs Gruppen · pruef-rollen 278 -> 282 · pruef-modi-checkliste 70 · pruef-haus-trennung 62 · pruef-rueckmeldung 30 · pruef-modi-ideen 30 · pruef-modi-verborgen 80 · pruef-css-klassen gruen · pruef-modi-wortleck 5. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
bea1bb7194 |
Die rechte Hand meldet wie das Team, die Leiste wird ein Universum, sein Kalender bleibt ganz
Drei Wuensche aus zwei Bildschirmfotos und einem Satz. === 1. SIE DARF SAGEN, WAS PASST UND WAS NICHT === Filipe: "die rechte hand soll bei diesen aufgaben auch wie die modis sagen koennen ob es passt oder nicht ... die rechte hand ist da um mir zu helfen aber auch wie die modis um mir zu sagen was passt und nicht wo die denken bedarf oder nicht. perfektionier das alles." SIE KONNTE ES NICHT, UND ZWAR AN DREI STELLEN GLEICHZEITIG -- die zweite und dritte kamen erst zum Vorschein, nachdem die erste behoben war. Genau deshalb steht "perfektionier das alles" ueber diesem Commit und nicht "eine Zeile geaendert": ERSTENS: Die Frage "an wessen Liste arbeitest du?" kannte nur Creator und Modis (dann die eigene). Sie fiel durch beide Zweige und konnte ueberall antworten, nirgends urteilen. ZWEITENS: Nach der Reparatur durfte sie -- und bekam den KATALOG DER CREATOR. Ihre Meldung trug einen Schluessel, den der Eingang gar nicht kennt, und wurde dort stillschweigend uebersprungen. Die Pruefung meldete "sie darf urteilen (200)" und eine Zeile spaeter "ihre Meldung steht NICHT in DogFathers Eingang". Beides stimmte. DRITTENS: Der Eingang sammelt aus der Liste der Teammitglieder, und die hiess `rolle = 'modi'`. Sie war die Empfaengerin dieser Seite und kam auf ihr selbst nicht vor. Wer nicht in der Liste steht, kann melden, so viel er will -- es erreicht niemanden. Jetzt steht sie in derselben Liste (aber `id <> ich`: eine Karte ueber sich selbst ist kein Ueberblick, sondern ein Spiegel), bekommt denselben Beobachtungskatalog wie die Modis und meldet in denselben Eingang. Alle Rollenvergleiche kommen dabei aus der vorhandenen Menge TEAM_DOGI_ROLLEN statt als zwei Vergleiche danebengeschrieben -- sonst steht dort beim naechsten Mal einer zu wenig. === 2. DIE LEISTE === Filipe: "der hintergrund dieser leiste soll extrem speziell aussehen wie ein universum und soll von lila auf babyblau wechseln, von links nach rechts ... der husky links soll auch babyblau strahlen und nicht rot und der rechts lila. dan brauch ich auch noch einen teilen button." DIE RICHTUNG IST DIE EIGENTLICHE AENDERUNG: Der Schein lief von UNTEN nach oben (die Glut der Agenturseite, nur in Lila). Jetzt von LINKS nach rechts, mit zwei Nebeln und sieben Sternen -- als Verlaufslagen und nicht als Elemente: Sieben Punkte waeren sieben Knoten im Baum auf jeder der zwanzig Seiten, nur fuer Zierde. DIE ZEICHEN TAUSCHEN DIE SEITEN. Links stand ein warmes Rot, fest hingeschrieben in start.css; rechts strahlte der zweite Husky babyblau. Jetzt umgekehrt -- so hat jede Seite der Leiste beide Farben, statt dass jede nur eine hat. Beim rechten wird die FUELLUNG mitgetauscht, nicht nur der Schein: Ein lila Schein um ein blaues Zeichen waere ein Rand, keine Farbe. "UEBERTRIEBEN GEIL" HAT EINE GRENZE, und sie ist gemessen, nicht geschaetzt. Erster Anlauf: .30 -- der Verlauf war zu ahnen, nicht zu sehen, Kontrast 5,26:1. Zweiter: .40 -- sichtbar, aber 4,79:1 in der Mitte, bei einer Grenze von 4,5 zu knapp. Jetzt kraeftige Enden und eine zurueckhaltende Mitte: 5,92 / 5,26 / 7,06:1 an drei Stellen des Verlaufs, gemessen an echten Bildpunkten. Die Farbe liest das Auge an den Enden; in der Mitte gewinnt die Lesbarkeit. DER TEILEN-KNOPF fehlte, weil `DARF_TEILEN` Leitung und Scouts kennt -- die rechte Hand ist keins von beidem. Gefragt wird jetzt nicht nach der Rolle, sondern nach `ich.marke`: Die setzt der Server genau dann, wenn jemand zu Team Dogi gehoert. Der Rollenname bleibt damit aus einer Datei heraus, die jeder herunterlaedt -- und die Frage lautet ohnehin "gehoert diese Person hierher?". === 3. SEIN KALENDER BLEIBT GANZ === Filipe: "mein kalender (dogfather) auf dieser seite hier soll komplett verbunden sein mit dem kalender in der workspace seite ABER NUR IN DER DOGFATHER ROLLE BEI DOGFATHER: NICHT BEI VANVAN." Bei Aufgaben, Bereichen und Dateien ist die Haustrennung eine Hilfe -- man will das andere Haus dort gerade nicht sehen. Beim Kalender waere sie eine Falle: Wer auf der Team-Seite einen Termin eintraegt und die Haelfte seines Tages nicht sieht, legt ihn auf eine Zeit, in der er schon woanders sitzt. Ein Kalender, der nur die halbe Wahrheit zeigt, ist schlimmer als keiner. Geprueft wird die ROLLE und nicht der Name -- ein Name waere die Stelle, an der es beim naechsten Menschen bricht. === WAS DIE PRUEFUNGEN GEZEIGT HABEN === Eine Erwartung war seit Stunden stumm rot: pruef-modi-checkliste verlangte GENAU EINE Zusatzkachel, und seit dem Ideen-Board sind es drei. Ich hatte sie nach der Aenderung nicht noch einmal laufen lassen. Sie zaehlt jetzt nicht mehr auf eine feste Zahl, sondern prueft die AUSSAGE: Wer welche bekommen soll, bekommt welche -- und jede gehoert in die Gruppe "Team Dogi". Eine Pruefung, die bei jeder neuen Kachel rot wird, erzieht dazu, ihr Rotwerden zu ignorieren. Zwei weitere Erwartungen haben sich gedreht und sind im Quelltext begruendet: Der Kalender auf crew. zeigt DogFather jetzt alles (die Pruefung unterscheidet dafuer ER-ja/SIE-nein statt einer einzelnen Antwort -- das ist mehr, nicht weniger), und "aus dem Eingang verschwunden" fragt jetzt nach Schluessel UND Person: Seit die rechte Hand denselben Katalog benutzt, koennen zwei Menschen denselben Punkt melden, und die Pruefung meldete einen Fehler, den es nicht gab. Und eine war wertlos: "die rechte Hand sieht den Agenturtermin nicht" lief gegen einen leeren Kalender -- sie sah ueberhaupt nichts. Sie hat jetzt zwei eigene Termine, einen aus jedem Haus; erst damit sagt die Messung etwas. pruef-modi-checkliste 59 -> 70 · pruef-team-stufen 24 -> 26 · pruef-team-ampel 32 · pruef-haus-trennung 61 -> 62 · pruef-rollen 278 · pruef-css-klassen gruen · pruef-modi-wortleck 5. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
a16e4cb337 |
"Dein Team": neuer Name, ein falsches Schild weniger und ein eigener Grund
Filipe, drei Bildschirmfotos: den Namen der Kachel aendern, "diese zwei kacheln noch mehr perfektionieren", "veraender den hintergrund von diesen kacheln komplett", "perfektionnier diese seite einfach komplett". DER NAME, DRITTE FASSUNG. Zuerst "Team-Lage" -- das klang nach Bericht UEBER Menschen. Dann "Eingang" -- das beschrieb nur die eine Haelfte (was hereinkommt) und liess die groessere weg: wer da ist, wer heute kann, wer was offen hat. "Dein Team" sagt beides und stellt niemanden ueber jemanden. DREI SACHEN WAREN NICHT GESCHMACK, SONDERN FEHLER -- und alle drei hat erst das Nachmessen am fertigen Bildschirm gezeigt: UEBER SIEBEN TAGEN STAND "Kann heute". Im Singular, ueber einer ganzen Woche. Wer nur die Ueberschrift liest -- und das tut man bei einer Zeile in Versalien --, haelt den ganzen Streifen fuer den heutigen Tag und liest sechs Kaestchen falsch. Der Satz DARUNTER war immer richtig; zwei Aussagen ueber demselben Bild, und die auffaelligere war die falsche. DIE VIER ZAHLEN BRACHEN 3 + 1. Gemessen: Die Karte ist innen 536 px breit, die Regel verlangte je Spalte mindestens 130 px, vier Spalten braeuchten 544. Acht Pixel zu wenig. Die Lehre ist NICHT "130 auf 122 senken" -- das waere dieselbe Rechnung mit einer anderen Zahl. Vier Dinge sehen nur in 1x4, 2x2 oder 4x1 richtig aus; 3+1 ist die eine Anordnung, die immer falsch wirkt, und eine `auto-fit`-Regel kann jederzeit dort landen. Zwei feste Spalten koennen es nicht. DER WEG IN DEN CHAT war ein unterstrichener Satz ueber die volle Kartenbreite -- er sah aus wie eine Ueberschrift, nicht wie ein Knopf. DER GRUND DER KARTEN, und hier hat mich das erste Ergebnis widerlegt: Der Schein aus der oberen Ecke nahm `var(--r)`, die Farbe der STUFE. Das war logisch und unsichtbar -- bei "Probe" ist sie ein gedaempftes Grau, und ein Grauschein auf fast Schwarz ist kein Schein. Nach der Aenderung sah die Karte auf dem Bildschirmfoto genauso aus wie davor. Jetzt tragen die beiden Ecken die Hausfarben (Lila oben links, Babyblau unten rechts), dazu ein Lichtstreifen quer und ein Kantenlicht oben. Die Stufe bleibt, wo sie hingehoert: im Kantenlicht und am Schild. AUGENSCHONEND BLEIBT PFLICHT: Keine Lage geht ueber 26 %, der Lichtstreifen liegt bei 3 %, und die hellsten Stellen sitzen in den ECKEN -- nicht hinter dem Text. Ein Schein hinter einer Zahl macht sie schwerer lesbar, egal wie schoen er ist. Dazu: HEUTE ist im Wochenstreifen markiert (sieben gleich aussehende Kaestchen zwingen sonst dazu, den Wochentag im Kopf auszurechnen), ein freier Tag hat eine Andeutung statt gar nichts (sieben leere Rahmen sahen aus wie "noch nicht geladen"), und der Erklaerkasten im Kopf darf 68 statt 44 Zeichen breit sein -- auf einem breiten Bildschirm stand er als schmale Saeule mit sechs Zeilen zu je vier Woertern neben viel Bild. WARUM DIE FALSCHE UEBERSCHRIFT UEBERLEBEN KONNTE: pruef-team-ampel prueft seit dem ersten Tag, dass SIEBEN Tage kommen und der erste heute ist. Was sie nie angesehen hat, ist der Text darueber -- die Zahl stimmte ja. Sie prueft ihn ab jetzt, an derselben Stelle wie die Zahl, damit beide zusammen gelesen werden. Mit Gegenprobe: Die Suche muss das Wort "heute" auch finden koennen, sonst waere sie gruen, weil sie nie etwas liest. pruef-team-ampel 28 -> 32 · pruef-team-stufen 24 · pruef-css-klassen gruen · pruef-start-ansicht 143 · pruef-rollen 278 · pruef-modi-wortleck 5. OFFEN GEBLIEBEN und ihm gemeldet: Auf einem 1920er Bildschirm steht der Inhalt in einer Saeule von rund 1150 px, links und rechts bleibt Bild. Das ist die Breite ALLER zwanzig Seiten; sie hier allein zu aendern hiesse, eine Seite anders zu bauen als die anderen neunzehn. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
da7ddf7b5e |
Alle Kategorien in der Personenliste -- und die rechte Hand liest mit
Filipe, mit Bildschirmfoto der Team-Seite: "ich muss alle kategorien da sehen. und ich will dass die rechte hand auch alle sieht." AUF DEM BILD STAND EIN EINZIGER ABSCHNITT: DogFather. VanVan war in derselben Minute zur rechten Hand geworden (im Protokoll darunter zu sehen: "#4 VanVan: admin -> hand") -- und damit aus der Liste VERSCHWUNDEN. Nicht aus der Antwort des Servers. Der schickte sie die ganze Zeit mit. `assets/js/personen.js` gruppiert nach einer Liste mit fuenf Rollen, und wer dort nicht steht, wurde nicht gezeichnet: kein Fehler, keine Luecke, kein Hinweis. Dieselbe stille Lücke wie vorgestern in der Personenauswahl des Chats, an einer anderen Stelle -- und dieselbe Ursache: Die Namen der verborgenen Rollen duerfen in keiner ausgelieferten Datei stehen, also kannte der Browser sie nicht. DIE LOESUNG IST DIESELBE: Der Server schickt die Ueberschriften mit (`zusatzrollen` -- es gab sie schon, sie waren bisher nur die Auswahl beim Anlegen). Der Browser braucht dafuer keinen Rollennamen zu kennen, er bekommt einen Text. UND DARUNTER EIN AUFFANGBECKEN, das ist der eigentliche Fortschritt: Kaeme morgen eine siebte Rolle und niemand daechte an diese Stelle, stuenden ihre Leute trotzdem auf der Seite -- unter ihrem Rollennamen, sichtbar, statt lautlos zu fehlen. Ein Abschnitt mit einer unschoenen Ueberschrift ist tausendmal besser als ein Mensch, den es auf dem Bildschirm nicht gibt. DIE RECHTE HAND LIEST MIT -- LESEND. Das ist sein eigenes Wort ("sieht"): Codes, Sperren, Loeschen, Rollen vergeben und das Protokoll bleiben bei DogFather. Die Ausnahme im Server ist Wort fuer Wort so gebaut wie die, die Spicy Media schon hat: eine Methode, eine Adresse, eine Rolle. Zwei Fassungen derselben Ausnahme waeren zwei Regeln, und die zweite laesst irgendwann mehr durch als gedacht. DREI SCHICHTEN MUSSTEN ZUSTIMMEN, und die dritte hatte ich uebersehen: die Kachel, die Schnittstelle -- und die SEITE selbst. In der Rollentabelle in workspace.js stand personen.html fuer spicy, admin und manager; die rechte Hand flog von der Seite auf die Startseite zurueck, obwohl Kachel und Daten schon stimmten. Gefunden hat das nicht das Auge, sondern pruef-rollen. Sie geht jede Kachel jeder Rolle ab und schaut nach, wo man landet: "Rechte Hand Kachel personen.html LANDET AUF start.html". Das ist der Wert dieser Pruefung -- der Fehler war unsichtbar, solange man nicht selbst als rechte Hand auf die Kachel drueckt. EINE ERWARTUNG HAT SICH GEDREHT, und das steht jetzt im Quelltext: pruef-haus-trennung verlangte vor einer Stunde noch, dass die Kachel bei ihr NICHT steht und die Seite sie abweist -- richtig, solange sie die Seite nicht durfte. Die Pruefung ist dadurch nicht schwaecher geworden: Sie verlangt weiterhin, dass Kachel und Zugang DASSELBE sagen. Sie sagen jetzt beide ja statt beide nein. DIE NEUE MESSUNG VERGLEICHT ZAHL GEGEN ZAHL: wie viele Menschen der Server liefert, wie viele Zeilen auf dem Bildschirm stehen. Nicht "steht VanVan da" -- das waere ein Name, den man beim naechsten Umbau so lange anpasst, bis die Pruefung wieder passt. Eine Pruefung, die nur die Antwort des Servers ansieht, waere hier uebrigens gruen gewesen. Beim Schreiben dieser Messung ist sie zuerst viermal falsch angeschlagen: Die Abschnitte stehen zugeklappt da, und zugeklappt sind ihre Zeilen gar nicht im Dokument. Vier Fehler, die es nicht gab -- die Pruefung klappt jetzt erst auf, dann liest sie. pruef-personen-formular 27 -> 35 · pruef-haus-trennung 53 -> 61 · pruef-rollen 277 -> 278 · pruef-modi-verborgen 80 · pruef-start-ansicht 143 · pruef-css-klassen gruen · pruef-modi-wortleck 5. ANMERKUNG ZUR TEAM-ADRESSE: Dort zeigt die Liste weiterhin nur Team Dogi -- so, wie er es eine Stunde vorher verlangt hat ("bitte nur basiert auf diese seite"). "Alle Kategorien" heisst also: alle des Teams. Wenn er dort auch die Agentur sehen will, ist das eine Zeile, aber es waere eine andere Entscheidung. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
670ce4a5c1 |
Personen & Zugaenge auf der Team-Seite -- und eine Rolle laesst sich endlich aendern
Filipe wollte VanVan die Rolle "Rechte Hand" geben. Auf die Frage nach ihrem Code: "die kategorie personen & zugaenge fehlt also muss das hinzugefuegt werden und bitte nur basiert auf diese seite." BEIM NACHSEHEN KAMEN ZWEI DINGE HERAUS, und das zweite war das eigentliche: Die Kachel fehlte, weil ich sie mit den Agenturkacheln entfernt hatte -- ausgerechnet die, mit der man jemandem eine Rolle gibt. Die Team-Adresse war damit eine Seite, auf der man das Team nicht verwalten kann. UND ES GAB DIE FUNKTION GAR NICHT. Im ganzen Server aendert keine einzige Stelle `personen.rolle`. Anlegen ja, sperren ja, loeschen ja -- aendern nirgends, seit dem ersten Tag. Wer jemandem eine andere Aufgabe geben wollte, musste ihn loeschen und neu anlegen, und daran haengen seine Aufgaben, seine Nachrichten, seine Eintraege, sein ganzer Verlauf. Kapitel 4 des Pflichtenhefts verlangt ausdruecklich das Gegenteil. (Nebenbefund aus derselben Messung, ihm gemeldet: Auf dem Server gibt es KEINE Rolle 'hand'. VanVan ist ein zweiter DogFather-Zugang. Die Rueckmeldungen mit "nur an DogFather" wuerde sie deshalb heute mitlesen -- die Regel fragt "ist das DogFather?", und ihre Rolle antwortet ja.) DIE KACHEL traegt Namen, Zeichen und Farbton der Agenturseite. Es ist dieselbe Seite mit demselben Zweck; ein zweiter Name dafuer waere ein zweites Ding, das es nicht gibt. SIE STEHT NUR DORT, WO SIE AUCH FUNKTIONIERT. Die Personenseite haengt serverseitig an `nurAdmin`. In der Kachelliste der rechten Hand haette sie auf eine 404 gefuehrt -- ein Knopf, der eine Absage bringt, ist schlimmer als kein Knopf. Wenn sie das duerfen soll, ist das eine eigene Entscheidung und gehoert an dieselbe Stelle wie nurAdmin. "NUR BASIERT AUF DIESE SEITE" steht nicht in der Kachel, sondern im Server: Auf crew. liefert die Liste nur Team Dogi, und angelegt werden koennen nur Team-Rollen. Beides kommt aus Funktionen, die es schon gab (hausBedingung, darfAnlegen) -- und `darfAnlegen` baut auch die Knoepfe in der Oberflaeche, weshalb die anderen Rollen dort von selbst verschwinden statt eine Absage zu bringen. DER ROLLENWECHSEL HAT FUENF SICHERUNGEN, und jede hat ihren Grund: NUR DOGFATHER -- wer Rollen vergeben kann, kann sich selbst zum DogFather machen. NIE DIE EIGENE. Wer sich selbst herabstuft, sperrt sich aus; die Funktion zum Zurueckdrehen haengt an der Rolle, die er gerade abgegeben hat. Das ist keine Warnung wert, das ist eine Tuer, die zubleibt. NIE DEN LETZTEN AKTIVEN DOGFATHER. Gezaehlt werden die AKTIVEN: Ein gesperrter kann niemanden hereinlassen, ihn mitzuzaehlen waere eine Sicherung, die sich selbst beluegt. ALLE SITZUNGEN DIESER PERSON ENDEN. Eine Sitzung gehoert seit dem 10.09.2026 zu einer ADRESSE, und welche das ist, entscheidet die Rolle. Wer eben noch DogFather war und jetzt rechte Hand ist, saesse sonst mit einer Sitzung da, die auf der Agenturadresse laeuft und dort nicht mehr hingehoert -- ein halb gueltiger Zustand, der erst beim naechsten Klick auffaellt. DER CODE BLEIBT. Er haengt am Menschen, nicht an der Rolle. Ihn mitzutauschen waere bequem und falsch: Dann muesste jede Rollenaenderung von einem Gespraech begleitet sein, und wer das vergisst, sperrt jemanden aus, ohne es zu merken. Und es steht im Protokoll, mit beiden Rollen im Klartext. DIE AUSWAHL IM BROWSER wird nicht noch einmal gebaut, sondern aus dem Anlege-Formular gelesen. Dort stehen genau die Rollen, die der Server dieser Person zugesteht -- einschliesslich derer, die in keiner ausgelieferten Datei stehen duerfen und erst nachtraeglich dazukommen. Eine zweite Liste waere die, in der eine Rolle fehlt oder eine zu viel steht, und beides faellt erst auf, wenn jemand sie braucht. EINE PRUEFUNG WAR WERTLOS UND IST ES NICHT MEHR: "ihre Sitzungen sind beendet" lief gegen einen leeren Bestand -- ein gruener Haken ueber einer Null. Jetzt meldet sich die Person vorher an, und die Zahl davor muss groesser als null sein. pruef-haus-trennung 32 -> 53 · pruef-rollen 277 · pruef-personen-formular 27 · pruef-css-klassen 30 · pruef-start-ansicht 143 · pruef-modi-verborgen 78 · pruef-modi-wortleck 5. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
9c99a5b9c3 |
Zwei Haeuser auf einer Datenbank -- die Team-Adresse zeigt nur das Team
Filipe, mit Bildschirmfoto der Zentrale: "die daten von dieser seite
sollen nichts mit den daten am hut haben von der workspace seite bitte,
die hier soll ihre eigene daten haben und komplett von der anderen
getrennt sein. dogfather soll die daten auch auf der anderen seite
sehen in der team dogi kategorie aber auch nur er und vanvan."
GETRENNT WIRD DER AUSSCHNITT, NICHT DER BESTAND. Eine zweite Datenbank
haette den zweiten Satz unmoeglich gemacht -- er will dieselben Daten
auf beiden Adressen sehen. Es bleibt also alles an einem Ort, und die
ADRESSE entscheidet, welcher Ausschnitt davon herauskommt.
ALLES HAENGT AN EINEM WERT: `person.haus`, gesetzt in sitzungLesen()
aus dem Hostnamen. Von dort reist er mit der Person durch jede
Sichtbarkeitsregel im Haus. Der Grund ist ein praktischer: Die Regeln
bekommen ueberall dieselbe Person gereicht -- sichtbar(person),
sichtbareCreatorIds(person), bereicheFuer(person). Ein zusaetzliches
Argument haette an ueber dreissig Aufrufstellen mitgeschleift werden
muessen, und die eine vergessene waere das Loch gewesen.
RECHTE AENDERT ES NICHT. Es entscheidet, WAS jemand sieht, nicht, was
er darf -- wie die Sicht eines anderen (sichtPerson) das auch nicht tut.
DER FILTER IST DER SPIEGEL EINES VORHANDENEN. Es gab schon
`ohneTeamDogi` ("alles ausser dem Team") fuer Spicy Media. Dazu kommt
jetzt `ohneAgentur` -- gleiche Bauweise, andere Rollenmenge, GEMEINSAME
Implementierung. In der steckt die NULL-Falle (`IS NULL OR NOT IN`,
denn `NULL NOT IN (...)` ist weder wahr noch falsch), und die sieht man
einer Abschrift nicht an.
WARUM NICHT "MINDESTENS EINE SPALTE ZEIGT AUF TEAM DOGI": Das waere die
naheliegende Formulierung und sie waere falsch. Eine Aufgabe, die
DogFather fuer einen Creator anlegt, haette ueber `erstellt_von` (er
gehoert zum Haus) trotzdem gepasst und stuende auf der Team-Seite.
Andersherum stimmt es: Sobald IRGENDEINE Spalte auf Creator, Scout,
Manager oder Spicy Media zeigt, gehoert die Zeile ins andere Haus.
VIER TUEREN, EINE FORM. Aufgaben, Bereiche, Dateien und der Kalender
haben je eine eigene sichtbar()-Funktion. Alle vier bekommen dieselbe
Bedingung an derselben Stelle, in derselben Schreibweise -- damit keine
davon anders aussieht als die anderen. Beim Kalender steht sie in
termineSichtbar() in workspace.js und nicht im Kalendermodul: Sonst
haetten Termine, Wiederholungen und der ICS-Abruf sie einzeln
gebraucht, und der ICS-Abruf ist der, den man vergisst -- er laeuft
ohne Bildschirm.
ZWEI ABFRAGEN GEHEN ABSICHTLICH NICHT DURCH DIE LISTENFUNKTIONEN, und
genau die standen im Bildschirmfoto: der Ring der Zentrale ("9 IM
TEAM", obwohl das Team drei Leute hat -- gezaehlt wurde das ganze Haus)
und die Hinweiszeile darunter ("Creator-Profile sind noch leer"). Im
Quelltext der Zentrale steht sogar ausdruecklich, dass sie die einzige
solche Stelle ist; gefunden habe ich sie trotzdem erst, weil ich der
Zahl im Bild nachgegangen bin. Beide bekommen die Bedingung jetzt aus
derselben Funktion (`hausBedingung`), nicht aus einer zweiten
Rollenliste.
Die Hinweis-Bedingung sitzt am BLOCK und nicht an den vier Abfragen
darin: Wer eine fuenfte hinzufuegt, bekommt sie dadurch mit, ohne daran
zu denken.
DIE KACHELN: Auf crew. liefert der Server dieselbe Liste wie der
rechten Hand -- nicht eine dritte. Fuenfundzwanzig Kacheln, von denen
zwei Drittel Creator und Agentur betreffen, waeren dort Fenster in ein
Haus, in dem er gerade nicht ist, und hinter jedem stuende seit heute
eine leere Liste. Auf workspace. bleibt alles, wie es war: Dort schickt
der Server weiterhin `bereiche: null` ("nimm die Liste aus der Datei").
JEDE MESSUNG STEHT ZWEIMAL DA. Die Trennung kann auf zwei Arten falsch
sein: Sie greift nicht (dann steht die Agentur weiter auf der
Team-Seite, und niemand merkt es, weil alles funktioniert), oder sie
greift zu weit (dann verschwindet auf der Agenturseite etwas -- der
gefaehrlichere Fall, denn eine zu kurze Liste sieht aus wie "nichts zu
tun"). Deshalb folgt auf jede Messung auf crew. dieselbe Messung auf
workspace., mit DERSELBEN Sitzung; der einzige Unterschied ist der
Host-Kopf. Dazu zwei Gegenproben zur Regel selbst: 127.0.0.1 bleibt
unberuehrt (sonst waeren alle Pruefungen im Haus stillschweigend blind
geworden), und eine erfundene Adresse oeffnet kein drittes Haus.
NEBENBEI ZWEI EIGENE FEHLER BEHOBEN: pruef-chat-kanaele und
pruef-rueckmeldung liefen auf Ports, die schon vergeben waren (4359
neben pruef-modi-verborgen, 4371 neben pruef-crew-adresse). Beide sind
umgezogen. Fuenf weitere Doppelungen zwischen fremden Pruefdateien
(4186, 4188, 4189, 4193, 4198) bleiben stehen und sind gemeldet -- an
Dateien zu greifen, an denen gerade eine zweite Sitzung arbeitet, waere
genau der Fehler, den diese Doppelungen ohnehin schon zeigen.
pruef-haus-trennung 32 (neu) · pruef-rollen 277 · pruef-modi-verborgen
78 · pruef-chat gruen · pruef-rueckmeldung 30 · pruef-modi-ideen 30 ·
pruef-crew-adresse 129 · pruef-start-ansicht gruen ·
pruef-zwischenspeicher 21 · pruef-modi-wortleck 5.
BERICHTIGUNG zum vorigen Commit: Dort steht "pruef-rueckmeldung 34".
Es sind 30. Ich hatte die Zeilen geschaetzt statt sie zu lesen.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
be121a483e |
Rueckmeldung in beide Richtungen (Kapitel 5 und 6)
Filipe: "Nicht nur ich soll meine Modis bewerten oder ihnen Feedback geben koennen. Auch die Modis sollen mir Feedback geben koennen. Sie sollen mir beispielsweise sagen koennen: Was koennte ich verbessern?" Und der Schlusssatz seines Pflichtenhefts: "Es soll nicht nur dazu dienen, Leistungen zu kontrollieren. Es soll vor allem dabei helfen, als Team besser zu werden." EIN BRETT FUER BEIDE KAPITEL, NICHT ZWEI. Kapitel 5 (gegenseitiges Feedback) und Kapitel 6 (gemeinsame Reflexion) stellen dieselben Fragen -- "was laeuft gut, was laeuft schlecht, was fehlt" --, einmal an eine Person und einmal an das Team. Zwei Bretter haetten bedeutet, dass man beim Schreiben zuerst entscheiden muss, an WEN es geht, bevor man weiss, WAS man sagen will. Hier ist es umgekehrt: erst die Sache, dann die Richtung. DIE NEUN FRAGEN SIND SEINE, wortwoertlich aus dem Pflichtenheft zusammengezogen: laeuft gut · laeuft nicht gut · unbedingt behalten · an DogFather · was dem Team fehlt · Regel aendern · besser organisieren · Idee · Wunsch fuer spaeter. Sie stehen als feste Faecher da und nicht als freies Feld -- genau das ist der Unterschied zwischen einer Sammlung und einem Haufen: Neun Faecher kann man auswerten, tausend Formulierungen nicht. KEIN NEUER BAUKASTEN. Die Rueckmeldung ist ein BEREICH wie das Ideen-Board: dieselbe Tabelle, dieselbe Seite, dieselben Regeln fuers Anlegen, Aendern und Loeschen, dieselbe Zugangssperre. Ein eigenes Modul haette all das ein zweites Mal gebraucht -- und die zweite Fassung waere die gewesen, in der eine Regel fehlt. DIE EINE NEUE SACHE IST DIE RICHTUNG. Beim Schreiben waehlt man zwischen "fuers Team" (Vorgabe) und "nur an DogFather". Ohne diese Wahl haette man eines von beidem verloren: Wer "was koenntest du besser machen" vor versammelter Mannschaft sagen muss, sagt es nicht -- wer alles nur unter vier Augen sagen kann, hat kein Team-Gespraech. UND "NUR DOGFATHER" HEISST NUR DOGFATHER -- die rechte Hand ausdruecklich nicht. Sie sieht sonst ueberall dasselbe wie er; hier nicht, weil das Etikett sonst nicht stimmen wuerde. Eine Zusage mit einer Ausnahme im Kleingedruckten ist keine. Sie schreibt selbst genauso -- auch ueber ihn. DIE ZUSAGE STEHT IN sichtbarEintrag(), also in derselben Funktion, durch die auch das Lesen einer einzelnen Zeile, das Aendern und das Loeschen gehen. Eine Regel, die nur die Liste filtert, laesst die Zeile ueber ihre Nummer trotzdem heraus; die Pruefung klopft deshalb auch von hinten (PATCH und DELETE auf die vertrauliche Zeile: 404, auf die offene: 200). `COALESCE(nur_leitung, 0)`: Jede Zeile, die es vor heute gab, hat dort NULL, und in SQL ist `NULL = 0` nicht falsch, sondern UNBEKANNT. Ohne den Ersatzwert waere der gesamte alte Bestand von einer Minute auf die andere unsichtbar gewesen -- und niemand haette es gemeldet, denn ein leeres Brett sieht nicht nach Fehler aus. Beide Richtungen sind gemessen. KEINE ANONYMITAET, und das ist eine Entscheidung, keine Luecke. In einem Team dieser Groesse waere sie ohnehin keine: An drei Saetzen erkennt jeder jeden. Ein Versprechen, das nicht haelt, ist schlimmer als keines. DER FARBTON DER KACHEL IST AUSGERECHNET, NICHT AUSGESUCHT. Bei 24 vorhandenen Toenen landet ein neuer fast zwangslaeufig neben einem alten, und zwei Kacheln in FAST derselben Farbe sind schlimmer als in derselben -- bei gleicher merkt man den Fehler, bei fast gleicher sucht man ihn. Alle 24 wurden in Farbwinkel umgerechnet; die groesste Luecke liegt zwischen 90 und 160 Grad und ist 70 Grad breit, mehr als doppelt so viel wie die naechste. Der neue Ton sitzt in ihrer Mitte, 8,9 zu 1 auf dunklem Grund. pruef-rueckmeldung 34 (neu) · pruef-rollen 274 -> 277 · pruef-start-ansicht zaehlt jetzt 25 Kacheln und 25 Farben (sie zaehlt selbst, statt eine Zahl festzuhalten -- deshalb blieb sie gruen) · pruef-modi-ideen 30 · pruef-modi-verborgen 78 · pruef-css-klassen gruen · pruef-modi-wortleck 5. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
72b36d1c31 |
Ein eigenes Haus fuer Team Dogi -- Lila und Babyblau statt Rot
Filipe, screen1: "die leiste da und alles andere was noch rot ist auf
team dogi seite soll lila werden. richtig geiles lila und babyblau
mischung ueberall."
Und screen2: "ich will doch dass der eingang hier getrennt ist von der
workspace seite ... aber es soll trotzdem so bleiben dass ich die daten
hier und da sehe."
GETRENNT WIRD DAS AUSSEHEN, NICHT DER BESTAND. Dieselbe Datenbank,
dieselben Seiten, dasselbe Programm -- und zwei Haeuser, die man nicht
verwechseln kann. Filipe und die rechte Hand sehen ihre Zahlen
weiterhin auf beiden Adressen.
EINE ZEILE JE SEITE, EINE REGEL IM SERVER. Jede Seite laedt als LETZTE
Stilvorlage `haus.css`. Auf der Agenturadresse ist die leer -- das Haus
dort IST der Grundzustand. Auf crew.dogfather-universe.com biegt die
Weiche genau diesen Dateinamen auf `crew-haus.css` um.
Drei Wege habe ich dafuer verworfen, und jeder hat einen Grund:
* `data-haus` per JavaScript -> die Seite laedt erst im falschen Ton
und faerbt sich um. Sichtbar, auf jeder Seite, bei jedem Aufruf.
* dasselbe Attribut serverseitig in den HTML-Text schreiben -> jede
HTML-Antwort muesste durch einen Umschreiber statt als Datei
ausgeliefert zu werden, nur wegen einer Farbe.
* zwanzig zweite <link>-Zeilen -> die muesste jemand bei jeder neuen
Seite mitschreiben, und wer sie vergisst, bekommt eine Seite, die
still zum falschen Haus gehoert.
DAS HAUS SIND FAST NUR VARIABLEN. Wer zwei Dutzend Farbwerte tauscht,
tauscht jede Kachel, jeden Rand, jeden Knopf und jedes Leuchten auf
einmal -- auch an Stellen, die man beim Nachbauen uebersehen wuerde.
Eine Datei, die stattdessen Regel fuer Regel umfaerbt, waere beim
naechsten neuen Bauteil sofort unvollstaendig, ohne dass es auffiele.
WO KEINE VARIABLE STAND, HAT DAS MESSEN SIE GEFUNDEN. Ich habe nicht
im Quelltext gesucht, sondern am fertigen Bildschirm jedes Element nach
Farben abgefragt, bei denen der Rotkanal deutlich ueber den anderen
liegt -- ueber alle Farbquellen, nicht nur `color` und
`background-color`. Erst das brachte die eigentliche Stelle ans Licht:
DIE KOPFLEISTE HAT EINEN ROTEN VERLAUF. Genau die Leiste aus Filipes
Bildschirmfoto. Sie glimmt im Agenturhaus wie Feuer -- sein eigener
Wunsch von screen36, und dort bleibt das auch so. Hier schimmert sie
jetzt lila, in derselben Bauweise: unten waermer, nach oben dunkel,
in der Mitte kraeftiger, alles unter 30 % Deckkraft.
Dazu die Fassung der Zentrale (rot->lila, Silber und Babyblau
unberuehrt, Prozentzahlen auf den Punkt gleich -- sie sind am 08.09.
eigens nachgerechnet worden), die Uhr an vier Stellen, das Universum
dahinter, Glocke und Tagesruf, der Schriftzug, und auf der Zugangswand
Knopf, Kachelreihe, Innenglas und Karte.
ZWEI FEHLER, DIE ERST DER BILDSCHIRM ZEIGTE:
Der Schriftzug wurde zu einem ausgefuellten Balken. `background` ist
eine Kurzschreibweise und setzt `background-clip` mit zurueck -- und
genau darueber wird der Text in die Buchstaben ausgestanzt. Jetzt
`background-image`. Im Quelltext sah die Zeile voellig richtig aus.
Zwei Regeln wurden geladen und taten nichts: Die Originale stehen
unter `.kopfleiste .marke__haupt` und `.willkommen > .zuniversum`.
Wer nur die halbe Kette schreibt, verliert gegen zwei Klassen.
DIE MARKE HAENGT JETZT AN ZWEI DINGEN. `markeFuer()` kannte nur die
Rolle -- und DogFather gehoert nun einmal zur Agentur. Ueber der
Zentrale stand deshalb auch auf der zweiten Adresse gross "SPICY
MEDIA". Jetzt entscheidet auch der Hostname, an EINER Stelle.
WAS WARM BLEIBT, UND WARUM: Warnungen. Eine Warnung ist keine
Verzierung, sondern eine Bedeutung -- faerbt man sie ins Lila der
Seite, sieht "etwas stimmt nicht" aus wie alles andere. Sie wird nur
ins Rosa gezogen, damit sie neben Lila kein Fremdkoerper ist. Ebenso
bleiben die 24 Kachelfarben: dass jede Kachel ihre eigene hat, ist
gepruefte Absicht.
Weisse Schrift auf dem Anmeldeknopf haelt jetzt 6,23 zu 1 statt 5,1 --
an echten Bildpunkten gemessen, nicht an der Farbangabe.
pruef-crew-adresse 123 -> 129 · pruef-crew-wand-bild 45 ·
pruef-css-klassen gruen (prueft ab jetzt das PAAR module.css/haus.css,
nicht mehr eine Datei) · pruef-modi-wortleck 5 · pruef-rollen 274 ·
pruef-start-ansicht gruen · pruef-chat-kanaele 79.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
bcc1c70f4a |
Spicy Media legt Manager UND Scouts an -- eine Liste statt vier
Filipe, mit Bildschirmfoto der Zugaenge-Seite: "die spicy rolle soll auch manager und scouts hinzufuegen koennen." DER MANAGER-KNOPF FEHLTE NICHT AUS RECHTEGRUENDEN. Serverseitig war die Tuer /workspace/api/manager-anlegen fuer Spicy Media die ganze Zeit offen. Es gab nur nichts zum Draufdruecken -- wegen ZWEIER Listen in derselben Funktion, drei Zeilen auseinander (personen.js): const darf = ... spicy ? ['manager', 'creator'] : ['creator']; ... if ((r.wert === 'admin' || r.wert === 'manager') && ich.rolle !== 'admin') continue; Die erste erlaubt den Manager, die zweite nimmt ihn wieder weg. Uebrig blieb ein einziger Knopf: Creator. Nichts war kaputt, nichts wurde rot, es fehlte einfach -- die Sorte Fehler, die nur jemandem auffaellt, der davorsitzt. FUER SCOUTS GAB ES UEBERHAUPT KEINE TUER. Nur DogFather konnte welche anlegen. Und die Wegwahl in der Oberflaeche war eine Kette mit Auffangbecken (`rolle === 'manager' ? ... : creator-anlegen`): Ein Scout waere im else gelandet, und creator-anlegen legt IMMER einen Creator an. Der Knopf haette Erfolg gemeldet und das Falsche getan. DIE ANTWORT STEHT JETZT AN EINER STELLE. `darfAnlegen` in workspace.js sagt, wer wen anlegen darf. Daraus lesen: - die beiden Team-Tueren (Manager, Scout) - die allgemeine Verwaltungs-Tuer von DogFather - die Oberflaeche, ueber `darf_anlegen` in /workspace/api/ich Die Oberflaeche hat damit gar keine eigene Liste mehr und kann deshalb auch nicht mehr abweichen -- weder zu streng noch zu grosszuegig. ZWEI TUEREN, NICHT EINE MIT EINEM ROLLENFELD. Der Absatz an der Manager-Tuer raet davon ab, und der Rat gilt: Eine Tuer, die NICHTS anderes kann, als eine bestimmte Rolle anzulegen, ist sicherer als eine, die vorher nachfragt. `teamTuer(rolle)` baut beide aus demselben Text -- die Rolle wird beim Einhaengen festgelegt und kommt nie aus dem Aufruf. Geprueft: ein mitgeschicktes "rolle: admin" bleibt wirkungslos. GEPRUEFT (pruef-creator-anlegen, 33 -> 49 Pruefungen) - Spicy Media legt Manager an -> 201, Rolle stimmt - Spicy Media legt Scout an -> 201, Rolle stimmt - "rolle: admin" mitgeschickt -> wirkungslos, es wird ein Scout - ein Manager durch die Scout-Tuer -> 404 - ein Scout durch die Scout-Tuer -> 404 - Personenliste lesen -> 200 (die eine gewollte Ausnahme) - darueber anlegen -> 404, und es entsteht niemand - /api/ich nennt Spicy: manager, scout, creator -- und keinen DogFather - ein Manager bekommt genau eine Rolle genannt, ein Scout keine - die Knoepfe auf der Seite stimmen mit alldem ueberein - DogFather sieht unveraendert alle -- gemessen, nicht geglaubt Der erste Anlauf der Pruefung behauptete, Spicy Media komme gar nicht an /workspace/api/verwaltung. Falsch, und sie wurde zu Recht rot: nurAdmin laesst genau einen Fall durch, das LESEN der Personenliste. Diese Trennung ist jetzt festgenagelt. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
5f270c96c5 |
Beim Umbau einer Tabelle gehen ihre Indizes nicht mehr verloren
GEFUNDEN BEIM NACHDENKEN DARUEBER, WAS DIE NAECHSTE AUSLIEFERUNG AUF DEM ECHTEN SERVER TUT -- nicht im Betrieb, nicht von einer Pruefung. checkListeErweitern() baut eine Tabelle neu, wenn eine CHECK-Regel erweitert werden muss: neue Tabelle, Daten hinueber, alte weg, umbenennen. Sechs Aufrufe gehen durch diese Funktion. `DROP TABLE` nimmt aber JEDEN Index der Tabelle mit, und der Bauplan aus sqlite_master beschreibt nur die Tabelle -- die neue stand danach blank da. Gemerkt haette es niemand: Die Abfragen laufen weiter, sie lesen nur die ganze Tabelle. Beim naechsten Neustart waere der Index wieder da (er steht oben im Bauplan). "Bis zum naechsten Neustart falsch" ist trotzdem kein Zustand, den man einbaut -- und bei einem EINDEUTIGEN Index waere es keine Frage der Geschwindigkeit mehr, sondern der Richtigkeit: Die Zusage "einen Kanal je Zustaendigkeit" haette bis zum Neustart still ausgesetzt. Beim Ausliefern der Kanaele wird `chat_raeume` genau so umgebaut. Der Lauf sagt jetzt selbst, was er getan hat: 'kanal' in chat_raeume.art freigeschaltet, 1 Zeilen, 7 Spalten, 1 von 1 Indizes uebernommen, Verweise geprueft. Und er meldet es als ACHTUNG, wenn nicht alle zurueckkommen. DIE PRUEFUNG LAEUFT JETZT AUF EINER ALTEN DATENBANK. Bisher legte pruef-chat-kanaele eine frische an -- dort steht 'kanal' schon im Bauplan, die Umstellung tut nichts, und der gefaehrlichste Weg im Haus blieb ungeprueft. Die Datenbank wird deshalb VOR dem Start in die alte Form gebracht, mit Index und einer Zeile darin. Geprueft wird danach, dass die Regel erweitert ist, die Spalte dazugekommen, die Zeile noch da und der Index zurueck. GEGENPROBE GEFAHREN: Wiederherstellung stillgelegt, Lauf wiederholt -- "FEHL der Index hat den Umbau ueberlebt (idx_chat_kanal_kategorie)". Sie kann also auch nein sagen. Der zweite, aeltere Umbauweg im selben Haus (die Artenumstellung fuer 'bigmatch') hat dieselbe Luecke. Er bleibt hier unangetastet: Das ist eine dritte Abschrift derselben gefaehrlichen Prozedur, und sie ohne eigene Pruefung anzufassen waere genau der Handgriff, der Daten kostet. Notiert, nicht nebenbei erledigt. pruef-chat-kanaele 73 -> 79 · pruef-spicy 60 · pruef-modi-ideen 30 · pruef-rollen 274. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
d92ba76e33 |
Kategorie-Kanaele und angeheftete Ankuendigungen (Kapitel 7.2)
Die vier Saetze aus dem Anforderungsdokument, der Reihe nach: Team- Gruppenchat, Kategorie-Kanaele mit Zugriff fuer Owner und rechte Hand, private 1:1-Chats OHNE diesen Zugriff, und Pin-Nachrichten an alle. EIN KANAL IST KEINE VIERTE TABELLE, sondern eine dritte Art Raum (`art = 'kanal'` neben 'direkt' und 'gruppe'). Damit gilt fuer ihn ohne eine einzige neue Zeile alles, was schon da ist: Verlauf, Anhaenge, Suche, Ungelesen-Zaehler, Live-Strom, Wegraeumen. Eine eigene Tabelle haette all das ein zweites Mal gebraucht -- und die zweite Fassung waere die gewesen, in der die Zugriffsregel fehlt. Welche Zustaendigkeit, kommt aus MODI_KATEGORIEN -- derselben Liste, aus der auch die Aufgaben ihre Kategorie nehmen. Der NAME kommt aus der Kategorie und ist kein freies Feld: "Clipping" neben "Clipping-Team" waeren zwei halbe Verlaeufe, und man merkt es erst, wenn jemand die Antwort im falschen sucht. Ein eindeutiger Teilindex haelt das auch dann fest, wenn zwei Anfragen im selben Augenblick ankommen. DIE ZUGRIFFSREGEL STEHT IN istDrin() -- der Funktion, durch die alle sieben lesenden und schreibenden Wege gehen. In den Routen stuende sie in sechs davon und in der siebten nicht. Sie gilt AUSDRUECKLICH nur fuer 'kanal': Zweier-Gespraeche bleiben zu, auch fuer DogFather (so steht es im Dokument), und Gruppen ebenfalls -- wer eine Gruppe aufmacht, hat sich fuer einen geschlossenen Kreis entschieden, und den nachtraeglich still zu oeffnen waere das Gegenteil dessen, was er getan hat. Wenn Filipe das anders will, ist es eine Zeile -- aber es waere seine Entscheidung und muesste fuer die Beteiligten SICHTBAR sein. istDrin() nimmt dafuer die PERSON statt ihrer Nummer und wirft bei einer Nummer einen Fehler, statt stillschweigend "nein" zu antworten. HOECHSTENS DREI ANKUENDIGUNGEN je Raum. Nicht eine (Regeln, Live-Plan und Frist muessen gleichzeitig oben stehen koennen) und nicht beliebig viele -- eine Pinnwand, die scrollt, ist ein zweiter Verlauf. Der Aushang hat eine EIGENE Abfrage, weil der Verlauf nur 200 Zeilen liefert: Eine Ansage von vorletzter Woche waere sonst genau dann weg, wenn sie am laengsten oben stehen sollte. Wird die Nachricht zurueckgenommen, faellt sie ab UND gibt den Platz frei. DREI DINGE, DIE ERST DAS HINSEHEN GEZEIGT HAT: Der frisch angelegte Kanal hatte zwei Leute statt vier. Die Personenauswahl zeichnete nach der Rollenfolge aus bereiche.js -- wer dort nicht steht, wurde NICHT GEZEICHNET. Team Dogi steht dort nicht und darf es auch nicht (der Rollenname gehoert in keine Datei, die jeder herunterlaedt). Folge: DogFather konnte ueber die Auswahl niemandem aus seinem Team schreiben. Der Server schickt die Ueberschrift jetzt mit; der Browser braucht dafuer keinen Rollennamen. Der Kommentar, der genau davor warnte, stand die ganze Zeit darueber. Dieser Fehler war nebenbei ein Netz: Was nicht gezeichnet wird, kann auch nicht falsch gezeichnet werden. Deshalb ist jetzt gemessen, dass ein Manager und Spicy Media Team Dogi gar nicht erst geschickt bekommen -- und dabei fiel auf, dass Spicy Media in der EIGENEN Auswahl stand: Sobald es jemanden zu verbergen gibt, schreibt ohneVerborgene() aus "sieht alles" eine echte Liste, und darin steckt man selbst. Am Fuss jeder Nachricht stehen jetzt vier Handgriffe statt drei. Bei 390 px -- der haeufigsten Handybreite -- stand "kopieren" 18 px ueber der Blase, bei 320 px 75. Behoben mit `flex-wrap: wrap` und nicht mit einer Schwelle: Eine Regel, die misst, bleibt beim fuenften Handgriff richtig; eine Zahl nicht. pruef-chat-optik misst es ab jetzt. NACHGEZOGEN, was pruef-css-klassen an MEINEM letzten Commit fand: teamlage.html lud kopf.js ohne wahl.js (der Sicht-Umschalter sah aus wie aus einem anderen Programm -- kaputt war nichts, und genau deshalb faellt es niemandem auf), und .tampel__tag stand auf 11,2 px. Beides war schon gepusht, weil ich die Pruefung nicht laufen liess. pruef-chat-kanaele 73 (neu) · pruef-chat 48 · pruef-chat-ausbau 64 · pruef-chat-anhaenge 60 · pruef-chat-optik 24 -> 26 · pruef-css-klassen gruen · pruef-rollen 274 · pruef-modi-verborgen 78 · pruef-team-ampel 28 · pruef-start-ansicht gruen · pruef-modi-wortleck 5 · pruef-zwischenspeicher 21. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
6b2f34d105 |
Verfuegbarkeits-Ampel im Eingang -- und eine eigene Gruppe fuer Team Dogi
Filipe: "ich will dass die kacheln von den modis bei der rolle dogfather eine eigene kategorie haben. damit ich nicht zwischen den kacheln suchen muss." DIE AMPEL (Blueprint 7.1). Der Eingang zeigt je Person sieben Tage: gruen frei, gelb belegt, rot voll ab 180 Minuten. Die Abfrage sammelt Termine ueber VIER Wege (creator_id, teilnehmer_id, erstellt_von und die Tabelle termin_teilnehmer) -- ueber nur einen davon waeren die meisten Termine unsichtbar geblieben und die Ampel dauerhaft gruen. Sie waehlt NIE titel, beschreibung oder ort: Filipe soll sehen, WANN jemand kann, nicht WAS die Person vorhat. Belegung ist Arbeitslage, Inhalt ist privat. DIE GRUPPE. Die zwei Team-Kacheln standen zwischen einundzwanzig anderen. Jetzt tragen sie `gruppe: "Team Dogi"` und `gruppeNach: "Täglich"`; start.js setzt eine so markierte Gruppe direkt HINTER die genannte statt ans Ende. Ohne das waere sie unten gelandet -- richtig gruppiert und trotzdem zum Suchen. Das Ideen-Board ist dabei aus workspace/assets/js/bereiche.js ausgezogen. Es stand dort mit `rollen: ['admin']` in einer Datei, die jeder Modi herunterlaedt: die Kachel war unsichtbar, ihr Name nicht. Jetzt liefert der Server sie, wie den Eingang auch. DREI FEHLER, DIE DER BILDSCHIRM GEZEIGT HAT, NICHT DER CODE: Das Profilbild sprengte die Karte. teamlage.js baute ein blankes <img> in `.tperson__zeichen` -- ohne die Klasse `tperson__bild`, die es auf 44 px begrenzt. Gemeldet hat es Filipe mit einem Bildschirm- foto, nicht eine Pruefung. Der Eingang hatte ueberhaupt keine Buehne. `zuSeite()` sucht nur in bereiche.js, und die Eingangs-Kachel kommt vom Server -- der Rueck- fall war ausgerechnet der Spicy-Wasserfall. Jetzt haengt das Bild an `data-buehne="eingang"` im CSS, wo kein Skript daran vorbeikommt. Pausierte Mitglieder verschwanden. `WHERE aktiv = 1` versteckte sie samt ihrer offenen Meldungen. Jetzt stehen sie hinten, sichtbar gekennzeichnet. DIE ERWARTUNG IN pruef-start-ansicht steht auf FUENF Gruppen, in ihrer Reihenfolge -- die Position ist hier die eigentliche Aussage. Eine Gruppe, die ans Ende rutscht, faellt auf dem Bildschirm kaum auf. Die Kachelzahl blieb bei 24: umgezogen, nichts hinzugefuegt. pruef-team-ampel 28, pruef-team-stufen 24, pruef-rollen 274, pruef-crew-adresse 123, pruef-modi-ideen 30, pruef-modi-wortleck 5, pruef-zwischenspeicher 21, pruef-start-ansicht gruen. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
241b408edc |
Eigene Buehnen fuer die Modi-App -- und die Kopfleiste dazu
Filipe: "auch die hintergrund bilder vom crew espace sollen anderes
aussehen, der community angepasst wie die zugangscode seite die ist
mega."
UMFAERBEN HAETTE HIER NICHT GEREICHT. Bei der Zugangswand war Rot das
Problem; innen zeigen die neun Buehnen das SPICY-MEDIA-LOGO selbst, in
`halle` und `arena` vielfach nebeneinander. Ein blaues fremdes Logo
waere schlimmer gewesen als ein rotes.
Die Motive gibt es laengst -- auf der oeffentlichen Dogfather-Seite:
studio/lounge "Team Dogi -- Familie. Treue. Zusammenhalt."
halle TEAM DOGI mit den Menschen des Teams
skyline/portal "Streamplan": Dogi und HasiDog auf der Buehne
arena "DogFathers Galerie": Filmrollen, ein Archiv
garage "Der Streamer": Filipe an seinem Platz
Fuer `garage` stand zuerst der Holo-Kontrollraum da -- grossartiges
Bild, aber darauf steht "WERDE MODI". Eine Einladung hinter dem
Aufgabenbrett von Leuten, die laengst dabei sind, liest sich falsch.
Ein Bild sagt etwas, auch wenn es nur Hintergrund ist.
DIE ABDUNKLUNG IST GERECHNET, NICHT GEWAEHLT
Mein erster fester Wert haette 18 von 27 Fassungen HELLER gemacht als
die, die sie ersetzen (114 gegen 67) -- ueber ihnen steht derselbe
kleine Text. Das Werkzeug misst jetzt jede Fassung gegen die bestehende
Buehne derselben Szene und senkt sie genau auf deren Wert.
Ueber eine KURVE statt eines schwarzen Schleiers: v' = 255*(v/255)^g
senkt die Lichter viel staerker als die Tiefen -- das Bild wird dunkler
und behaelt seine Zeichnung. Ein Schleier haette bei den hellsten
Motiven ueber 80 % gebraucht, und darunter liegt dann Nebel statt Bild
(derselbe Fehler wie beim Tresorbild).
Der erste Anlauf mit einer geschlossenen Formel war falsch: Die Kurve
wirkt auf jeden FARBKANAL, die Helligkeit ist eine gewichtete Summe der
drei, und L(v^g) ist nicht L(v)^g. Die Rechnung sagte 61,5 und heraus
kamen 67. Jetzt wird genaehert und nachgemessen, hoechstens sechsmal.
Beim Hochkant-Ausschnitt wird zusaetzlich das FENSTER GESUCHT: fuenf
Kandidaten, erst "dunkel genug", dann "am meisten Motiv". Die Mitte --
die das Haus sonst nimmt -- ist bei diesen Bildern das Hellste.
ZWEI FUNDE AUS DEM BILDSCHIRMFOTO, die nichts mit den Buehnen zu tun
hatten:
1. DIE KOPFLEISTE sagte "SPICY & DOGI · CREATOR WORKSPACE". Reitertitel,
Begruessung und Symbol waren laengst richtig -- nur die Zeile, die
man als Erstes ansieht, nicht. Der Grund: Auf Unterseiten traegt die
Leiste einen Rueckweg-Verweis, auf der Startseite blossen Text; mein
Code kannte nur die erste Bauform.
2. DAS CHILI-ZEICHEN kommt aus dem CSS als Bild, an drei Stellen
(Kopfleiste, Siegel im Ring, die schwebenden Wasserzeichen). Auf
crew. wird die Datei serverseitig durch den Husky ersetzt -- alle
drei auf einmal, und ohne Flackern, weil schon der erste Abruf das
richtige Bild bekommt.
GEMESSEN
pruef-crew-adresse 123 (statt 117): Fuer JEDE Buehne aus start.css --
die Namen werden dort GELESEN, nicht abgeschrieben --
gibt es auf crew. ein eigenes Motiv, auf workspace.
das alte, und die beiden sind nachweislich
verschiedene Dateien.
pruef-rollen 274 pruef-start-ansicht, pruef-zwischenspeicher 21
pruef-modi-wortleck 5 -- er hat wieder angeschlagen, zweimal auf
Kommentare, die ich selbst geschrieben hatte.
27 Fassungen, 3,5 MB (die bisherigen neun Szenen brauchen 7,1).
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
449fe35c0a |
Der Eingang: Mitglieder-Kachel, drei Stufen -- und lesbar statt leer
Zwei Auftraege in einem Zug: "mach weiter" (Blueprint Kapitel 4/4.1)
und, zum Bildschirmfoto der Seite, "das muss viel krasser sein".
KAPITEL 4 -- DIE MITGLIEDER-KACHEL
Der Blueprint nennt: "Name & Foto · Rolle(n)/Kategorie(n) · Status
(aktiv/pausiert) · Anzahl offener Aufgaben · Datum 'Modi seit' ·
Schnellaktionen". Name, Foto und Zahlen standen schon; Status, "dabei
seit", Stufe und ein Knopf zum Schreiben kommen dazu.
KAPITEL 4.1 -- DIE DREI STUFEN
Probe, Standard, Senior. Sie sind eine ARBEITSEINTEILUNG, keine
Rechtegrenze -- was ein Modi darf, haengt an der Rolle; die Stufe sagt,
wo er im Team steht. Gesetzt werden sie nur von DogFather: Der
Blueprint gibt der rechten Hand den gleichen UEBERBLICK, aber
"Verwaltungsrechte optional durch Owner freischaltbar", also aus.
NULL heisst "Probe" und nicht "unbekannt" -- ein dritter Zustand waere
eine Frage, die niemand beantworten kann.
ZWEI ECHTE FEHLER, BEIDE VON DER NEUEN PRUEFUNG GEFUNDEN
1. PAUSIERTE VERSCHWANDEN KOMPLETT. In der Abfrage stand `AND aktiv =
1`. Wer jemanden pausierte, bei dem verschwand er samt seiner
OFFENEN RUECKMELDUNGEN aus dem Eingang -- die warteten weiter auf
eine Antwort, nur sah sie niemand mehr.
2. DER EINGANG HAETTE AUF FRISCHER ANLAGE 503 GELIEFERT. Die
Checklisten-Tabellen entstehen beim ersten Aufruf einer Checkliste;
diese Seite liest sie aber auch. Wer sie oeffnete, bevor je jemand
eine Checkliste angesehen hatte, bekam einen Fehler ohne Erklaerung
-- auf einer neuen Anlage also beim allerersten Blick. Das Schema
hat jetzt einen Besitzer, der es herausgibt; ein zweites CREATE
TABLE waere der Anfang von zwei Schemata gewesen.
"VIEL KRASSER" -- UND ZWAR MIT INFORMATION, NICHT MIT LAERM
* ZWEI REIHEN STATT EINER. Alle fuenf Kaesten lagen in EINEM Raster
mit 150 px Mindestbreite: Im Bildschirmfoto stand "Community 12
von" -- abgeschnitten mitten in der Zahl -- und die laengste Liste
machte die ganze Reihe so hoch wie sich selbst. Jetzt oben, was
eine Antwort braucht, darunter das Team; 300 px Mindestbreite.
* DIE KARTE WAR FAHL, und das war ein Fehler: `--r` fiel auf ein
helles Grau zurueck, aus dem das Kantenlicht einen Nebel ueber die
ganze Karte legte. Sie traegt jetzt die Farbe der Stufe -- kein
Nebel, und man sieht am Rand, wer wo steht.
* SECHS ZAHLENKAESTEN WURDEN DREI BALKEN. "40 offen" beantwortet
nicht, wie weit man ist: 40 von 40 ist etwas anderes als 40 von
100. Gruen (in Ordnung) und Bernstein (zu besprechen) fuellen den
Balken; die ganze Zeile ist der Weg dorthin.
* DIE DREI ZAHLEN DER SEITE stehen oben als Zahlen statt in einem
Satz. Die Warnfarbe erscheint NUR, wenn wirklich etwas wartet --
eine Null in Bernstein waere ein Alarm ohne Anlass, und ab dem
dritten Mal sieht man ihn nicht mehr.
GEMESSEN
pruef-team-stufen (neu) 24, mit Gegenprobe: hoch- und zurueckstufen,
und dieselbe Stufe zweimal zu setzen darf
keine zweite Protokollzeile erzeugen
pruef-rollen 274 pruef-modi-checkliste 59
pruef-zwischenspeicher 21
Ansicht: Rechner 1440 und Handy 412 -- keine Skriptfehler, nichts
ragt seitlich heraus (0 px).
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
cdddf32183 |
Husky bei DogFather und der Rechten Hand, Pfote bei den Modis
Filipe mit Bildschirmfoto: "bei rechte hand soll der husky sein und bei modis soll die pfote sein." DAS DREHT EINE FRUEHERE VORGABE UM, und der Grund gehoert in den Code: Am 09.09. hiess es "das modi symbol soll das gleiche sein wie bei dogfather" -- damals gab es dort zwei Rollen, und der Satz bedeutete "die Modis gehoeren zu Dogi, nicht zur Agentur". Mit drei Rollen sagt dieselbe Absicht etwas anderes: Der Husky steht bei den beiden, die den Ueberblick haben, die Pfote bei denen, die taeglich unterwegs sind. Zwei gleiche Zeichen und ein anderes lesen sich als Gruppe, nicht als Reihe. GEPRUEFT WIRD DIE ZUORDNUNG, NICHT DAS AUSSEHEN An beiden Stellen -- Zugangswand und Rollenauswahl in der Personenverwaltung -- wird gegen die DogFather-Karte verglichen, nicht gegen "#r-husky": Waere dort morgen ein anderes Zeichen, muesste die rechte Hand mitwandern. Gewollt ist "dasselbe wie er". DAZU DIE GEGENPROBE, die vorher fehlte: Der Modi muss sich davon UNTERSCHEIDEN. Ohne sie waere die Zeile darueber auch dann gruen, wenn alle drei Karten dasselbe truegen -- und genau so sah es bis heute Nachmittag aus. Nebenbei hat der Wortleck-Test wieder angeschlagen: Meine eigene Begruendung fuer die Pfote nannte zum Vergleich eine Rolle der anderen Wand. In einer Datei, die auf crew. ausgeliefert wird, hat die nichts verloren. GEMESSEN pruef-crew-adresse 117 (statt 115 -- die neue Zuordnungspruefung) pruef-personen-formular 27 pruef-crew-wand-bild 45 Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
d36f122926 |
Die alte Wand schweigt: ein Modi-Code zaehlt dort wie ein erfundener
Filipe: "auf der workspace seite fuer die agentur und so sollen die modis von mir nicht mehr rein kommen." Das war seit dem Deploy schon so -- ein Modi bekam dort keine Sitzung. Offen war nur, WIE die Wand reagiert: Bis eben zeigte sie ihm den Weg zur neuen Adresse. Seine Entscheidung: "gar nichts -- Code stimmt nicht." WARUM DAS EIN ANDERER WEG IST UND NICHT NUR EINE ANDERE ANTWORT Ein schlichtes `return 401` haette die richtige Meldung gezeigt und trotzdem eine Spur hinterlassen: Der verborgene Zugang waere weiterhin befragt worden -- ein Suchschluessel-Treffer und EIN scrypt-Durchlauf statt der Kandidatenschleife der gewaehlten Kachel. Das ist messbar, und Zeitunterschiede sind genau die Spur, die dieser Zugang vermeiden soll. Deshalb wird stillerZugang() auf den drei alten Adressen ueberhaupt nicht mehr aufgerufen. Der Code faellt danach durch den gewohnten Weg wie jeder unbekannte: dieselbe Schleife, derselbe Eintrag in `versuche`, dieselbe Antwort, dieselbe Dauer. Die alte Wand verhaelt sich exakt so wie an dem Tag, bevor es diese Rollen gab. GEPRUEFT WIRD DIE UNUNTERSCHEIDBARKEIT, NICHT DER STATUSCODE Eine 401 waere leicht zu erfuellen und truege trotzdem eine Spur, wenn Rumpf oder Koepfe anders aussaehen. Die Pruefung schickt deshalb einen echten Modi-Code und einen frei erfundenen an dieselbe Wand und vergleicht Zeichen fuer Zeichen: ok workspace.: der Modi-Code wird abgewiesen wie ein erfundener (401) ok workspace.: und die Antwort ist Zeichen fuer Zeichen dieselbe ok workspace.: die neue Adresse wird nicht genannt DER PREIS, und er gehoert genannt: Ein Modi mit der alten Verknuepfung sammelt dort jetzt Fehlversuche wie jeder andere. Acht in zehn Minuten sperren seine IP -- auch fuer die neue Adresse, denn die Sperre haengt an der IP, nicht am Hostnamen. GEMESSEN pruef-crew-adresse 115 (statt 114 -- die neue Gegenprobe) pruef-rollen 274 pruef-modi-verborgen 78 Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
63b3ace3fa |
Die rechte Hand -- drei Rollen auf der Adresse des Teams
Filipe: "3 rollen. dogfather. rechte hand und modis. perfektionier das." DIE RECHTE MUSSTE ICH NICHT ERFINDEN. Sie stehen im Blueprint V3.0, Kapitel 3.1 und in der Sichtbarkeitsmatrix 3.2: "Gleicher Ueberblick wie Owner. Kann Modis im Alltag koordinieren. Verwaltungsrechte optional durch Owner freischaltbar." Also: alle Aufgaben, Ideen und Angebote des Teams, der Eingang samt Entscheidungen, die Checklisten der Modis zum Ansehen -- aber keine Personenverwaltung (laut Blueprint "optional", also standardmaessig aus) und keine privaten Kalender oder Einzelchats. DER EIGENTLICHE UMBAU WAR NICHT DIE ROLLE, SONDERN EINE MENGE. Bis heute hiess "verborgen" im Code `rolle === "modi"` -- an acht Stellen. Bei ZWEI verborgenen Rollen ist das genau die Sorte Stelle, die man an sieben von acht Orten nachzieht; die achte faellt niemandem auf, weil dort dann einfach jemand sichtbar ist, der es nicht sein sollte. Ein vergessener Rechteschutz meldet sich nie. Jetzt lesen alle Regeln aus TEAM_DOGI_ROLLEN: die SQL-Ausblendung (ohneModi heisst deshalb jetzt ohneTeamDogi), die verborgenen Nummern, die Marke, die Adressregel, die Schranke beim Anlegen. Eine dritte verborgene Rolle waere eine Zeile. Die Menge wohnt in crew-adresse.js und nicht bei den uebrigen Rollen: workspace.js importiert jene Datei. Andersherum waere es ein Kreis -- Node loest ihn auf, aber mit halb gefuellten Modulen, und das faellt erst zur Laufzeit auf. ZWEI LOECHER, GEFUNDEN BEIM SYSTEMATISCHEN NACHLESEN 1. Die Bereichsschranke griff nur bei Modis -- die rechte Hand waere ueber die Adresszeile in die Agentur-Ablage gekommen. 2. Ihr Ideen-Board und ihr Angebote-Brett waeren LEER geblieben: Sie fiel durch den Team-Zweig hindurch in die Betreuungsregel, die fuer sie nichts findet. Derselbe Fehler wie am 01.09. beim Manager und am 09.09. beim Modi -- und er meldet sich nie, weil ein leeres Brett nicht nach Fehler aussieht. NEBENBEI EINE ALTE SCHWACHSTELLE WEG gate.js hatte eine zweite Namensliste fuer die Rollen, mit dem Kommentar daneben, sie sei "genau die Stelle, die beim naechsten Mal wieder vergessen wird" -- was schon passiert war. Mit zwei Zugangswaenden haette sie die Namen BEIDER tragen muessen, in einer Datei, die jeder bekommt. Sie liest den Namen jetzt aus der Kachel, wo er ohnehin steht. Die Zugangswand hat drei Kacheln: DogFather (Husky), Rechte Hand (Pfote, neu) und Modi (derselbe Husky, Wunsch vom 09.09.). Die Pfote liegt am naechsten an "rechte Hand", ohne eine Hand zu sein. GEMESSEN pruef-rollen 274 (statt 245; 128 statt 112 Durchgaenge) pruef-crew-adresse 114 pruef-modi-verborgen 78 (statt 75) pruef-modi-checkliste 59 pruef-crew-wand-bild 45 pruef-modi-ideen 30 pruef-personen-formular 27 (statt 25) pruef-modi-katalog 29 pruef-modi-kategorien 25 pruef-zwischenspeicher 21 pruef-modi-livecheck 16 pruef-modi-wortleck 5 pruef-start-ansicht, pruef-bereiche-lesend Jede gestiegene Zahl hat einen Grund: Die neue Rolle laeuft in DENSELBEN Listen mit wie die Modis, nicht in eigenen. pruef-modi-verborgen war vorher gruen, ohne sie ein einziges Mal angesehen zu haben. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
8bcbd83061 |
Die Modi-Seite gehoert Dogi und den Modis -- Wand, Zeichen, Reiter
Filipe zum Bildschirmfoto der Zugangswand auf crew.: "alles soll auf dogfather und die modis perfektionniert werden auf der neuen modi seite." Dort stand bis eben die gewohnte Wand: Spicy-Media-Logo, "Creator Workspace", der Satz ueber Manager, Scouts und Creator, fuenf Rollenkacheln. Fuer einen Modi war davon nichts richtig. DIE KACHELREIHE FAELLT WEG, und das ist eine Verbesserung: Eine Reihe mit genau einem Eintrag ist keine Auswahl, sondern eine Huerde -- man muesste erst daraufdruecken, bevor das Codefeld etwas annimmt. gate.js prueft jetzt, OB es Kacheln gibt, statt sie vorauszusetzen. DIE BUEHNE IST AUS DEM VORHANDENEN MOTIV GEBAUT, nicht neu erfunden, und das ist kein Sparen: Die Anmeldeseite ist eine MECHANIK. Rechts steht im Bild eine leere Tafel, und gate.css setzt die Karte auf Hundertstel genau dort hinein. Ein frei erfundenes Bild haette diese vier Zahlen mitgenommen. Also dieselbe Szene, ueber den Mischmodus "color" ins Blau umgefaerbt (hue-rotate haette Rot nach Cyan UND Blau nach Gelb gedreht), Dogi anstelle des Spicy-Medaillons, "TEAM DOGI" darunter. Gemessen: rote Bildpunkte 18,1 % -> 0,0 %, Karte auf 0 px genau. NACH DER ANMELDUNG geht es weiter: kopf.js zieht Reitertitel und Zeichen aus `ich.marke` nach -- "Aufgaben · Team Dogi" statt "· Spicy & Dogi", mit dem eigenen Symbol. An einer Stelle statt in 30 HTML-Dateien. DREI FUNDE, DIE NICHT AUS DEM KOPF KAMEN 1. DER KNOPF WAERE SCHLECHTER LESBAR GEWORDEN. Mein erstes Blau endete bei #4aa4cf -- weisse Schrift darauf: 2,8 zu 1. Der rot-blaue Verlauf, den er ersetzt, haelt ueber seine GANZE Laenge 4,65; er war offenbar genau darauf gebaut. Jetzt 5,10 zu 1, am fertigen Bildschirmfoto gemessen statt aus einer einzelnen Farbe hergeleitet. 2. DIE NEUE WAND WAR AUCH AUF workspace. ABRUFBAR. Sie liegt als Datei im selben Ordner. Aufgefallen ist das, weil der Wortleck-Test sie ueberhaupt las -- die Frage WARUM war die Antwort. Ausserhalb von crew. antwortet sie jetzt mit 404; auf den Pruefadressen bleibt sie erreichbar, sonst koennte die Pruefung sie nicht mehr oeffnen und waere gruen ohne etwas zu messen. 3. ZWEI GLEICHE KACHELN AUF DER STARTSEITE, seit dem letzten Deploy live. Die Team-Lage-Kachel von heute Mittag hatte Name, Zeichen, Ton UND Gruppe einer schon vorhandenen -- fuehrte aber woandershin. Gefunden von "jede Kachel hat ihre eigene Farbe (23 Farben auf 24 Kacheln)". Jetzt "Eingang", Gruppe Taeglich, neuer Ton 24 (#8a20cf, Abstand 38,5 im CIELAB-Raum; reines Blau haette 52 gehabt und waere auf dunklem Grund am schlechtesten zu fokussieren). Eine Fehlermeldung zeigte dadurch auf die falsche Seite -- ebenfalls behoben. Und die Pruefung, die es fand, zaehlte nur bereiche.js: Vom Server angehaengte Kacheln kannte sie nicht. Sie fragt jetzt beide Quellen. Der Wortleck-Test meldete ausserdem sieben Fundstellen -- allesamt Kommentare, die ich beim Bauen selbst geschrieben hatte. GEMESSEN pruef-crew-adresse 103 pruef-crew-wand-bild 43 (neu) pruef-modi-checkliste 59 pruef-modi-verborgen 75 pruef-rollen 245 pruef-zwischenspeicher 21 pruef-modi-wortleck 4 pruef-start-ansicht gruen Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
3cda64568d |
Die Modi-App bekommt ihre eigene Adresse: crew.dogfather-universe.com
Filipe: "ich will dass es eine eigene app wird" -- und dann "subdomain
machen jetzt sofort". Name von ihm gewaehlt: crew. (unauffaellig).
Auf einem Ursprung laesst sich genau EINE App installieren (w3c/manifest
Nr. 1180). Derselbe Grund, aus dem der Workspace am 06.09. umgezogen ist.
Getrennt wird ueber den HOSTNAMEN: ein Dienst, eine Datenbank, ein
Verzeichnis wie bisher.
DIE REGEL STEHT AN EINER STELLE
crew-adresse.js beantwortet: Darf diese Rolle auf dieser Adresse
angemeldet sein? Eingehaengt in sitzungLesen() -- durch die Funktion geht
jedes der 26 Fachmodule und jede Seitenschranke. Eine Middleware daneben
kann man in einem neuen Modul vergessen, und ein vergessener Rechteschutz
faellt nicht auf, weil dann alles geht.
crew. nur Modis; jeder andere bekommt 401 wie bei einem Tippfehler
workspace. keine Modis mehr; sie bekommen den Weg zur neuen Adresse
localhost UNVERAENDERT
Die dritte Zeile ist der Kern: Die Regel ist eine AUFZAEHLUNG der drei
echten Adressen, nicht "alles ausser crew". Sonst wuerden sieben andere
Pruefdateien ab sofort messen, dass ein Modi nirgends hereinkommt -- gruen,
weil sie nichts mehr finden.
ZWEI APPS, ZWEI NAMEN
Beide Adressen liefern dieselben HTML-Dateien. Auf crew. wird
/workspace/app.webmanifest serverseitig auf crew.webmanifest umgebogen --
so braucht keine der 30 Seiten eine zweite Zeile, die man bei der 31.
vergisst. "Team Dogi" statt "Creator Workspace", eigenes Zeichen:
derselbe Husky, aber ohne Chili (die gehoert zu Spicy Media, nicht zu
ihnen) und im Modi-Ton #5f8a9f.
tools/crew-symbol.mjs erzeugt die sechs Symbole und bricht ab, wenn sie
sich zu weniger als 10 % vom Workspace-Symbol unterscheiden. Gemessen:
43 bis 53 %.
GEMESSEN
pruef-crew-adresse 74 Pruefungen, 0 Fehler -- mit Gegenprobe: der Modi
bekommt in der Datenbank die Rolle 'manager', danach
MUSS dieselbe Sitzung auf crew. ins Leere laufen
pruef-rollen 245, unveraendert (die Regel ist lokal wirkungslos)
pruef-workspace-umzug 31 Faelle
pruef-zwischenspeicher 21 -- ein Stempel im Haus, jetzt ueber 23 Dateien
Der Server kennt die Adresse damit. DNS und Caddy bleiben Filipes Schritt.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
05f262eb61 |
Modis verteilen Aufgaben statt sie zu bekommen -- und Angebote zur Entscheidung
Die drei Beurteilungs-Bereiche liefen bisher in die falsche Richtung: Sie
bewerteten die Modis. Filipe: "die modis sind ja da um mir zu helfen."
Also umgedreht.
WAS SICH GEDREHT HAT
- Alle 101 Punkte sind jetzt Beobachtungen ueber den Stream, nicht
Pflichten des Modis ("Der Ton blieb verstaendlich" statt "Ton geprueft").
- Nur der Modi selbst drueckt auf seiner Liste. Wer sonst darauf zeigt,
bekommt 403 und den Weg zur Team-Lage -- bewerten wird hier niemand.
- "Verbessern" landet als Eingang bei DogFather. Ein Klick macht daraus
eine Aufgabe mit dem Satz des Modis im Text, oder eine Absage mit Grund.
Beides schreibt eine Nachricht zurueck, damit der Modi sieht: angekommen.
ANGEBOTE
Neuer Bereich, in dem Modis planen und vorschlagen: Nutzen und Aufwand
statt Bewertung und Dringlichkeit, dazu ein Feld "was DogFather danach
tun muss". Wird ein Angebot angenommen, entstehen zwei Aufgaben -- eine
beim Modi zum Umsetzen, eine bei DogFather aus genau diesem Feld.
GEMESSEN
pruef-modi-checkliste 59 Pruefungen, 0 Fehler (neu geschrieben)
pruef-rollen 245 statt 244 -- der Zuwachs ist die neue
Angebote-Kachel, alle 11 Modi-Kacheln kommen an
pruef-modi-ideen 30, pruef-modi-verborgen 75, pruef-bereiche-lesend: gruen
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
6122ea6972 |
Eigene Checklisten fuer die Modis -- und eine Seite fuer euch beide
Wunsch Filipe (10.09.2026): *"diese kategorien mussen auf dieser seite auch noch auf die modis perfektionniert werden, da mussen lauter sachen sein die vanvan und ich danach verteilen können und da anpassen können ob gut oder nicht."* Und: *"da soll es eine kategorie geben für uns beide nur sonst keinen wo wir dass alles sehen und behandeln können."* === TEIL 1: SEIN EIGENER PUNKTESATZ === 101 Punkte in workspace-modi-punkte.js -- Live-Ablauf 40, Community 36, Technik 25. Die vorhandenen sagen "Upload messen", "Sendeplan festlegen", "Verweildauer vergleichen": Ein Modi sendet nicht, er moderiert. Ihm dieselbe Liste vorzulegen hiesse, ihn an Dingen zu messen, die nicht seine Arbeit sind. DIESELBE EINTEILUNG (Vor/Waehrend/Nach usw.), nur andere Punkte darin. Zwei verschiedene Einteilungen waeren zwei Dinge zum Lernen statt einem, und die Oberflaeche kaeme ohne Umbau nicht damit zurecht. DIE SCHLUESSEL BEGINNEN MIT "m-". Der Stand haengt an (bereich, schluessel, person) -- ohne Praefix koennte ein Modi-Punkt eines Tages denselben Namen tragen wie ein Creator-Punkt und dessen Bewertung erben. BEIDE SAETZE STEHEN IN GUELTIG. Stuenden dort nur die Creator-Punkte, kaeme die Liste an und jeder Klick darauf brachte einen 404 -- die Sorte Fehler, die man erst beim Benutzen merkt. Ein Modi sieht SEINE Liste, ohne jemanden auszuwaehlen (wie ein Creator), und bewertet sich nicht selbst. Ohne diese Zeile waere er in den Betreuer-Zweig gefallen, haette eine Auswahl fremder Creator vorgesetzt bekommen und seine eigene Liste gar nicht gesehen. DER HEIKELSTE PUNKT WAR EIN ANDERER: `darfCreator` sagt bei siehtAlles() pauschal ja -- und darin steckt auch Spicy Media. Wer die Modi-Auswahl daran haengt, oeffnet sie ihr nebenbei mit, ohne dass an der Stelle etwas davon steht. Deshalb eine eigene Regel (darfPerson), und die Pruefung versucht es ueber die Liste, ueber die Adresse UND ueber das Bewerten. Die Auswahl heisst bei der DogFather-Rolle jetzt "Person" statt "Creator" -- ein Feld namens "Creator", in dem ein Modi steht, ist falsch beschriftet. Das Wort kommt vom Server; ein Rollenvergleich im Browser waere die Stelle, an der der Name in einer ausgelieferten Datei landet. === TEIL 2: DIE GEMEINSAME SEITE === teamlage.html, nur fuer die DogFather-Rolle -- also Filipe und VanVan. Fuer alle anderen gibt es weder die Kachel noch die Seite noch die Schnittstelle (404, wie bei einer Adresse, die es nicht gibt). Zwei Schloesser, absichtlich: die Schranke und die Abfrage. Faellt eines weg, haelt das andere. Je Person: offene und ueberfaellige Aufgaben, beigetragene Ideen, Rueckmeldungen, und je Bereich gut/verbessern/offen. Jede Zeile fuehrt in den Bereich -- MIT DER PERSON VORAUSGEWAEHLT. Dafuer liest die Checkliste jetzt `creator_id` aus der Adresse; ohne das landet man auf der erstbesten Person und weiss beim zweiten Suchen nicht mehr, warum man hier war. SIE ZAEHLT, SIE BEWERTET NICHT. Bewertet wird dort, wo die Punkte stehen. Eine zweite Stelle dafuer waere eine zweite Stelle, an der es auseinanderlaeuft. UND SIE IST KEINE UEBERWACHUNG. Ueber team.html steht schon, dass eine Seite mit Zahlen ueber Kollegen als Kontrolle gelesen wird -- und dann arbeitet niemand mehr offen damit. "Offen" heisst hier deshalb ausdruecklich: darueber habt ihr noch nicht geredet. Eine Merkliste fuer euch beide, keine Note. ALLES IN VIER ABFRAGEN, nicht vier je Person -- bei zehn Modis waeren das vierzig. Denselben Fehler hat das Haus bei den Terminen schon gemacht und ihn dort vermerkt. KEINE NEUEN CSS-KLASSEN: Fuer genau diese Karten gibt es sie schon (tperson, tz, schritt -- aus team.html). Elf neue haetten gepflegt werden muessen fuer ein Aussehen, das bereits da ist. ZUSATZKACHELN sind ein neuer, kleiner Mechanismus: `bereiche` ERSETZT die Liste im Browser (fuer Rollen, die dort nicht vorkommen), `bereiche_zusatz` HAENGT an. Gebraucht fuer Kacheln, die nur eine einzige Rolle bekommt -- in bereiche.js duerften sie nicht stehen, weil eine Kachel, die nur bei einem erscheint, die Frage aufwirft, fuer wen sie ist. Findet sich die genannte Gruppe nicht, wird eine eigene angelegt: Sonst faellt die Kachel lautlos weg, sobald jemand eine Gruppe umbenennt. EHRLICH ZUM UMFANG: Technik ist mit 25 Punkten der duennste Bereich. Das ist Absicht -- der technische Spielraum eines Moderators ist kleiner als der eines Streamers. Auffuellen haette Fuellmaterial in eine Liste gebracht, die Filipe und VanVan durchgehen muessen. GEPRUEFT: pruef-modi-checkliste (39, neu), pruef-rollen (244 statt 243 -- die neue Kachel wird angeklickt und muss ankommen), pruef-modi-verborgen (75), pruef-workspace-seiten. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
fb45072d25 |
Die Live-Checkliste am Termin -- ein Knopf, keine Automatik
KAPITEL 5.7 UND 11: "Wird pro Live-Termin als Checkliste erzeugt und den
eingeteilten Modis zugewiesen."
DAS DOKUMENT SAGT "AUTOMATISCH", FILIPE HAT SICH FUER EINEN KNOPF
ENTSCHIEDEN (10.09.2026). Vierzehn Aufgaben, die bei jedem Termin von
selbst erscheinen, ueberrumpeln -- und was ungefragt Dinge anlegt, ist
schwer wieder loszuwerden. Wer einen Termin nur zum Merken eintraegt,
haette danach aufzuraeumen.
Ein Druck erzeugt die vierzehn Punkte aus Kapitel 11 (fuenf vorher,
fuenf waehrend, vier danach), mit dem TERMINTAG als Frist -- eine
Vorbereitung, die nach dem Live faellig wird, ist keine -- verteilt auf
die eingeteilten Modis, jede mit ihrer Kategorie.
DREI STELLEN, AN DENEN SO ETWAS ERFAHRUNGSGEMAESS KIPPT. Alle drei
vorher benannt, dann gemessen:
* ZWEIMAL DRUECKEN. Der zweite Druck legt nichts an. Und der Knopf
zeigt die Zahl ("Checkliste (14)") -- sonst drueckt man ihn zur
Sicherheit noch einmal und weiss hinterher nicht, ob doppelt
angelegt wurde.
* DAS ZWEITE LIVE. Hier waere der Fehler teuer: Die Kennung, an der
"schon uebernommen" erkannt wird, traegt jetzt die TERMINNUMMER
(`mk-vor-technik#42`). Ohne sie stuende beim zweiten Live alles als
erledigt da, und niemand bekaeme seine Liste. Geprueft mit zwei
echten Terminen.
* EIN TERMIN OHNE EINGETEILTE MODIS. Vierzehn herrenlose Aufgaben
waeren schlimmer als keine -- stattdessen kommt eine Rueckfrage.
KEIN ROLLENNAME IM BROWSER, wie ueberall: Der Server schickt ein Ja/Nein
("gehoert der Knopf hierhin") und eine Zahl ("wie viele stehen schon").
Aus einer Zahl laesst sich nichts schliessen. Ein Manager bekommt den
Knopf gar nicht erst -- und wenn er es ueber die Schnittstelle versucht,
wortgleich dieselbe Absage wie fuer eine erfundene Art.
DIE ZAEHLUNG LAEUFT IN EINER ABFRAGE fuer alle Termine im Blick, nicht
je Zeile eine. Bei dreissig Terminen waeren das dreissig Abfragen -- den
Fehler hat das Haus bei den Teilnehmern schon einmal gemacht und drei
Zeilen darueber ausdruecklich vermerkt.
DIE TERMINE IN DER PRUEFUNG LIEGEN RELATIV in der Zukunft (+3 und +10
Tage). Ein festes Datum holt der Kalender irgendwann ein, und dann ist
die Pruefung rot, ohne dass etwas kaputt ist -- genau so ist es am
06.09.2026 bei der Oeffnungsschranke des Shops passiert.
GEPRUEFT: pruef-modi-livecheck (16, neu), pruef-kalender, pruef-serien
(69), pruef-vorlagen, pruef-modi-katalog (29).
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
e1608ee783 |
Das Ideen-Board -- und fuenf Kacheln, die ins Leere fuehrten
KAPITEL 5.6: "Sammelstelle fuer Content-, Live- und Community-Ideen mit
Priorisierung." Fast nichts davon musste neu gebaut werden: `eintraege`
hat Titel, Text, Status und `dringlichkeit` (hoch/mittel/niedrig) -- und
das IST die Priorisierung. Eine eigene Tabelle daneben waere eine VIERTE
Sichtbarkeitsregel gewesen; genau deren Vervielfaeltigung hat heute
schon ein Leck verursacht.
Der Bereich gehoert niemandem einzeln (`ohneCreatorBezug`) -- eine Idee
gehoert der Runde. KEIN `fuerAlle`: Das waere der naheliegende Griff
gewesen und der falsche, denn es heisst woertlich JEDER. Wer die
Sammlung sieht, entscheidet dieselbe Regel wie ueberall.
DER RISKANTE TEIL WAR DIE DATENBANK. Die erlaubten Bereiche stehen als
CHECK-Regel, und SQLite kann die nicht aendern -- die Tabelle muss neu
gebaut werden. Die alte Umstellung fuer 'agentur' schreibt dafuer den
ganzen Bauplan von Hand ab; im Kommentar dort steht, dass dabei schon
einmal drei Spalten vergessen wurden. Statt einer vierten Abschrift ist
die Fassung von heute Morgen jetzt tabellenunabhaengig
(checkListeErweitern): Spaltenliste aus der Tabelle, Sicherung vorher,
Zaehlung innerhalb der Transaktion.
UND DABEI WAERE EIN STILLER TOTALAUSFALL PASSIERT. Das Muster fuer den
Tabellenkopf stand in einem Template-Literal -- dort verschluckt
JavaScript den Backslash, aus `\s` wird `s`, das Muster hiess
"CREATE TABLEs+..." und traf nie etwas. Die Umstellung haette
SCHWEIGEND nichts getan: kein Fehler, kein Hinweis, nur ein Bereich, den
es nie gegeben haette. Im Quelltext war das nicht zu sehen; gefunden hat
es eine Messung. Jetzt steht dort gar kein Muster mehr -- alles vor der
ersten Klammer IST der Tabellenkopf, und das kann man nicht falsch
maskieren.
Die Pruefung baut deshalb eine ECHTE ALTE Tabelle und laesst die
Umstellung darauf laufen. Eine frische Datenbank bringt den Bereich
schon mit -- die Umstellung liefe gar nicht erst an, und alles waere
gruen, ohne das Riskante angesehen zu haben.
=== DER GROESSERE FUND ===
FUENF VON ZEHN MODI-KACHELN FUEHRTEN INS LEERE. Der Server hat eine
Liste, welche Rolle welche Seite oeffnen darf; bereich.html und
profil.html schlossen 'modi' aus. Vier Bereichs-Kacheln und das eigene
Profil leiteten wortlos auf die Startseite zurueck.
Der Rollen-Rundgang meldete sie trotzdem als "ok", und zu Recht: Eine
Umleitung ist kein Fehler. Die Seite laedt, keine rote Konsole, keine
4xx-Antwort. Sie ist nur eine ANDERE. Das ist eine eigene Fehlerklasse
-- nicht "kaputt", sondern "fuehrt woandershin" -- und sie faellt nur
dem auf, der die Anwendung benutzt und merkt, dass ein Knopf nichts tut.
Beinahe waere meine eigene Pruefung darauf hereingefallen: Sie fand auf
der zurueckgeleiteten Startseite das Wort "Ideen-Board" -- den Text der
KACHEL -- und hielt sie fuer das Board. Jetzt steht die Adresse in der
Bedingung.
DIE SPERRE DAGEGEN GILT AB SOFORT FUER ALLE: pruef-rollen klickt fuer
JEDE Rolle jede Kachel durch, die sie angeboten bekommt, und verlangt,
dass sie dort ankommt. Geprueft wird die Zusage der Startseite, nicht
eine Liste daneben -- eine Liste koennte selbst veralten. 113 -> 243
Pruefungen; der Zuwachs ist genau das.
Er hat im ersten Anlauf zwei weitere Loecher gefunden:
* "Mein Profil" war die falsche Seite. profil.html ist der
Creator-Entwicklungsplan und antwortet mit 404, wenn die Person kein
Creator ist. Die eigene Seite heisst steckbrief.html.
* content.html stand auf `null` ("jede angemeldete Rolle") -- mit der
neuen Rolle also auch sie. Die Seite laedt, ihre Schnittstelle gibt
404. Das ist die Kehrseite von "geschuetzt ist die Regel, nicht die
Ausnahme": Eine NEUE ROLLE erbt jedes `null` automatisch.
Und ein Modi kommt nur in SEINE Bereiche -- sonst waere er ueber die
Adresszeile in der Agentur-Ablage gelandet. Welche erlaubt sind, wird
aus seinen Kacheln abgeleitet statt danebengeschrieben.
=== KLEINERES, ABER SICHTBARES ===
Ueber dem Board stand "Betreuung" -- die Beschriftung fuer Akten, die
UEBER jemanden gefuehrt werden. Eine Sammelstelle ist das Gegenteil.
Aufgefallen auf dem Bildschirmfoto, wie so oft heute.
Der Farbton der Kachel ist nicht nach Gefuehl gewaehlt: Alle 22
vorhandenen waren belegt, also wurde der Abstand zu jedem ausgerechnet
und der genommen, der sich am deutlichsten unterscheidet, ohne grau zu
wirken (#5f8a9f, Abstand 127).
BEINAHE HAETTE ICH EIN LOCH REPARIERT, DAS ES NICHT GIBT: Meine Pruefung
meldete, die Suche verrate die Ideen an Spicy Media. Tatsaechlich fand
sie null Treffer -- die Pruefung hatte ihren EIGENEN Suchbegriff
wiedergefunden, weil die Antwort ihn im Feld `frage` zurueckspiegelt.
Gezaehlt wird jetzt, was gefunden wurde.
pruef-spicy erwartete den alten Wortlaut der Umstellungsmeldung. Sie
nennt jetzt Tabelle und Spalte statt "Rolle"; geprueft wird der Sinn,
nicht der Satz.
GEPRUEFT: pruef-modi-ideen (30, neu), pruef-rollen (243 statt 113),
pruef-modi-verborgen (75), pruef-modi-katalog (29), pruef-spicy (60),
pruef-css-klassen, pruef-start-ansicht.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
138bcce80b |
Spicy Media sah die Zeilen der Modis -- drei Tabellen, ein Loch
GEMESSEN, NICHT VERMUTET, und es war live: Aufgaben, Bereichs-Eintraege
und Dateien eines Modis waren fuer Spicy Media sichtbar. Die NAMEN der
Modis waren ueberall sauber verborgen -- ihre ZEILEN nicht. Eine halbe
Verborgenheit ist keine.
WARUM ES PASSIEREN KONNTE: Fuer Personen gibt es die Regel EINMAL
zentral (verborgeneIds). Fuer Zeilen gibt es sie DREIMAL -- in
workspace-aufgaben.js, workspace-bereiche.js und workspace-dateien.js --
und alle drei geben Spicy Media dasselbe: "alles ausser dem, was
DogFather gehoert" (ohneDogFather). Ein Modi-Eintrag gehoert ihm nicht,
also fiel er durch.
Manager, Scout und Creator waren nie betroffen, ihre Regeln sind enger.
Der Kalender auch nicht: termineSichtbar() gibt jedem nur Eigenes.
Beides nachgesehen, nicht angenommen.
GEFUNDEN HAT ES KEINE UEBERLEGUNG, sondern eine Pruefung, die etwas
ANLEGT und danach mit fremden Augen nachsieht. Vorher hatte ich nur
Namenslisten geprueft -- und die waren die ganze Zeit gruen. Der Anlass
war nicht einmal Misstrauen gegen diese Stelle: Ich wollte ein
Ideen-Board auf die Eintraege setzen und dabei wissen, wer sie sieht.
BEHOBEN mit ohneModi() als Gegenstueck zu ohneDogFather -- und zwar als
UMHUELLUNG um die drei Regeln, nicht als Flicken darin. Ein Flicken
haette den einen bekannten Zweig geschlossen und den naechsten
Rollenzweig wieder offen gelassen; gemerkt haette es niemand, weil an
der geaenderten Stelle nichts davon steht.
Dazu die `fuerAlle`-Ausnahme bei den Eintraegen: Sie haengt ein ODER an
und haette die Bedingung sonst wieder aufgemacht. Heute hat kein Modi
eine Kachel in einen solchen Bereich -- ein Aufruf an der Oberflaeche
vorbei braucht sie aber nicht. Eine Regel, die nur im Formular gilt,
ist keine Regel.
Nachgesehen, dass die Umhuellung nirgends das falsche Tabellenkuerzel
setzt: Alle Aufrufstellen in workspace-hinweise.js und workspace-suche.js
fuehren die Tabellen als a, d und e -- genau so, wie es dasteht.
NEBENBEI: Das Modi-Team teilt sich jetzt auch die Bereichs-Eintraege,
nicht nur die Aufgaben (Entscheidung Filipe, 09.09.2026: "sie sind
untereinander ein Team"). Ohne diesen Zweig saehe jeder Modi nur, was er
selbst geschrieben hat -- eine gemeinsame Sammlung waere keine.
ZWEI EIGENE FEHLER AUF DEM WEG DAHIN, beide festgehalten:
* Die neue Messung stand HINTER der Gegenprobe. Die macht eine Person
absichtlich zur Creatorin -- die Messung bekam 403 und meldete
"kann nichts anlegen". Gemessen wurde ein Zustand, den es im
Betrieb nicht gibt. Genau davor warnt der Kommentar, den ich selbst
zwei Tage vorher an diese Gegenprobe geschrieben hatte.
* Das "konnte nicht nachsehen" nannte KEINEN Grund. Damit ist der
dritte Ausgang nur dem Namen nach da -- man weiss danach so wenig
wie vorher. Erst mit der Fehlermeldung im Text kam ich auf die Spur.
GEPRUEFT: pruef-modi-verborgen (75, davon 18 neu ueber drei Tabellen und
fuenf Rollen), pruef-spicy (60), pruef-bereiche-lesend,
pruef-aufgabenbrett, pruef-modi-katalog (29).
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
390f592967 |
Der Modi traegt denselben Husky wie DogFather
Wunsch Filipe (Bildschirmfoto, 10.09.2026): "das modi symbol soll das
gleiche sein wie bei dogfather".
Vorher stand dort das Schild, und das war doppelt falsch: Es gehoert
schon dem Scout, und es stellte die Modis neben die Agentur statt zu
DogFather. Sie sind SEIN Team -- das Zeichen sagt das jetzt auch.
Kein neues Zeichen dafuer: `#r-husky` steht in personen.html laengst.
Ein eigenes waere eine Zeile mehr in einer Datei, die jeder bekommt --
und eine, die nur bei einer einzigen Rolle benutzt wird.
DIE PRUEFUNG VERGLEICHT GEGEN DIE ADMIN-KARTE, nicht gegen "#r-husky".
Waere dort morgen ein anderes Zeichen, muessten beide mitwandern --
der Wunsch war "dasselbe wie", nicht "der Husky".
AUF DEMSELBEN BILDSCHIRMFOTO stand "Sichtbar nur fuer die
DogFather-Rolle". In Kommentaren schreibt das Haus ASCII, in TEXT, den
jemand liest, nicht -- dort sieht es aus wie ein Fehler, weil es einer
ist. Berichtigt und mitgeprueft.
NEBENBEFUND, NICHT ANGEFASST: Im Creator-Katalog stehen zehn weitere
sichtbare Texte mit ASCII-Ersatz ("dafuer", "zaehlt", "spaet",
"groesser", "uebersteuert"). Sie stehen live auf den Bildschirmen der
Creator. Nachgemessen: In meinem eigenen Katalog aus Teil 2 sind es
0 von 120 sichtbaren Texten. Die zehn gehoeren berichtigt, aber nicht
nebenbei in einem Commit ueber ein Symbol.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
60e875814b |
Die 60 Aufgaben aus Teil 2 -- und kein Wort zu viel im Browser
Kapitel 14 des Anforderungsdokuments: "Alle Aufgaben dieses Katalogs
koennen 1:1 als Vorlagen in die App importiert werden -- inklusive
Kategorie, empfohlener Rolle und Frequenz. So ist das Aufgaben-Board ab
dem ersten Tag vollstaendig befuellt, statt leer zu starten."
DER KATALOG. 60 Aufgaben, Verteilung wie im Dokument: 12 Aufbau, 9
Alltag, 5 vor / 5 waehrend / 4 nach dem Live, 8 Content, 5 Woche, 5
Monat, 7 Community. Neun Etappen statt sechs Phasen -- Phase 3 zerfaellt
in Vor/Waehrend/Nach und Phase 5 in Woche/Monat, und das sind fuer den,
der davorsitzt, verschiedene Momente. "Waehrend des Lives" sucht man
nicht in derselben Liste wie "einmal im Monat".
Die TEXTE sind neu. Das Dokument nennt nur die Titel, und ein Titel
allein ("Eskalationsregeln definieren") sagt nicht, woran man erkennt,
dass man fertig ist. Jeder Satz nennt das EINE, was zaehlt -- nicht
drei, denn wer sich fuenf Dinge vornimmt, macht keines.
Uebernehmen legt eine ganz normale Aufgabe an, einzeln oder eine ganze
Etappe. Die Kategorie wandert mit: Ohne sie muesste man 60-mal von Hand
einsortieren, was im Dokument bereits danebensteht -- und niemand
merkte es, weil die Aufgabe ja da ist. Genau das prueft die neue
Pruefung ausdruecklich.
KEINE NEUE ADRESSE, kein neuer Feldname mit dem Rollennamen darin: Der
Katalog kommt unter "katalog" in der vorhandenen Antwort, das
Uebernehmen ueber die vorhandene Route mit einer neuen Art. Wer ihn
nicht bekommt, sieht `null` -- und ein Manager, der die Art trotzdem
schickt, bekommt WORTGLEICH dieselbe Absage wie fuer eine erfundene.
ZWEI SELBSTKORREKTUREN, beide von derselben Sorte:
* Die Kategorien waren auf ACHT zusammengefasst, begruendet damit,
dreizehn Knoepfe seien auf einem Handy unbedienbar. Gebaut ist aber
ein AUSWAHLFELD, keine Knopfleiste -- die Begruendung passte nicht
zu dem, was ich getan hatte, und haette eine Uebersetzungstabelle
noetig gemacht ("Branding gehoert zu Planung"), die spaeter niemand
nachvollzieht. Jetzt sind es die vierzehn des Dokuments, und jede
Aufgabe traegt genau die Kategorie, die danebensteht.
* Zwei Erwartungen in meiner eigenen Pruefung waren veraltet, beide
durch Aenderungen, die ich absichtlich gemacht hatte. Die eine
suchte woertlich nach "Clipping & Schnitt" -- nach dem Umbenennen
haette sie nach etwas gesucht, das es nicht mehr gibt, und waere
gruen gewesen, ohne etwas zu pruefen. Die Namen kommen jetzt aus
derselben Quelle wie die Oberflaeche.
UND WIEDER HAT ES DAS BILDSCHIRMFOTO GEZEIGT, nicht der Code: Die
Kopfleiste sagte auf jeder Seite "Creator Workspace" -- fuer jemanden,
der moderiert statt einen Kanal aufzubauen, der falsche Name. Sie folgt
jetzt demselben Weg wie die Zierzeile auf der Startseite. Nur der
Verweis wird umgeschrieben, der Seitenname dahinter bleibt; das
geschuetzte Leerzeichen ebenfalls, sonst faellt die Leiste auf schmalen
Handys in zwei Zeilen.
BEWUSST NICHT ANGEFASST: Im Hintergrundbild steht schwach "SPICY
MEDIA". Es ist kein Element im HTML, sondern in die buehne-*.webp
eingebacken -- dafuer braeuchte es einen zweiten Bildersatz. Nachgesehen
statt vermutet: Im DOM der Seite kommt der Text nicht vor.
GEPRUEFT: pruef-modi-katalog (29, neu), pruef-modi-kategorien (25),
pruef-modi-wortleck (4), pruef-rollen (113), pruef-kopf-messen,
pruef-vorlagen, pruef-aufgabenbrett.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
ede34fe386 |
Der Rollenname stand in zwei Dateien, die jeder bekommt
SELBST EINGEBAUT, EINE STUNDE VORHER. Beim Bau der Kategorien habe ich
SECHS Vergleiche und VIER Kommentare mit dem Rollennamen nach
assets/js/aufgaben.js und assets/js/start.js geschrieben -- waehrend ich
an anderer Stelle penibel darauf achtete, ihn herauszuhalten.
Alles unter workspace/ geht an JEDEN, der die Seite oeffnet. Ein Blick in
den Quelltext, und der ganze verborgene Zugang waere gefunden gewesen:
nicht wer ein Modi ist, aber dass es die Rolle ueberhaupt gibt -- und
genau das war Filipes Bedingung ("damit die von der workspace auch nicht
mal sehen dass die modis von mir einen eigenen zugang haben").
Gefunden habe ich es durch Nachsehen, nicht durch Nachdenken. Nachgedacht
hatte ich vorher schon, und zwar richtig -- beim Anzeigenamen und bei der
Rollenauswahl habe ich es sauber ueber den Server geloest. Eine Stunde
spaeter habe ich dieselbe Regel dreimal gebrochen, ohne es zu merken.
WAS AN DIE STELLE TRITT, dreimal derselbe Gedanke:
* Das Vorlagenbrett: /workspace/api/vorlagen liefert den Katalog jetzt
schlicht nicht an die Betroffenen. `if (!vorlagen) return` laesst das
Brett dann verborgen -- dieselbe Wirkung, ohne eine Zeile, die
verraet, fuer wen sie gilt.
* Das Kategorie-Feld: statt `ich.rolle === '...'` kommt vom Server
`kategorie_fuer` -- NUMMERN statt eines Rollennamens. Aus Nummern
laesst sich nichts schliessen; wer keine bekommt, sieht eine leere
Liste, und eine leere Liste sagt nichts. `null` heisst "gilt immer"
und muss `null` bleiben: Ein `|| []` daraus zu machen waere der
stille Fehler, aus "gilt immer" wuerde "gilt nie".
* Die Kommentare sagen jetzt, WAS gilt, ohne zu sagen, FUER WEN.
UND EINE SPERRE DAGEGEN: pruef-modi-wortleck durchsucht alle 73
ausgelieferten Dateien nach dem Rollennamen. Die Regel ist damit kein
Vorsatz mehr, sondern ein Werkzeug -- wer ihn dort hineinschreibt,
bekommt einen roten Lauf statt eines erhobenen Zeigefingers im Kommentar.
Mit Gegenprobe in beide Richtungen: Eine eingebaute Fundstelle MUSS
erkannt werden, und "modifiziert", "Modul", "Modus" duerfen NICHT
anschlagen -- eine Pruefung, die staendig Fehlalarm gibt, wird
abgeschaltet und faengt dann auch den echten Fall nicht mehr.
Die Dateizahl steht in der Bedingung, nicht nur im Meldetext: Faende die
Suche keine einzige Datei, waere sonst alles gruen, ohne dass etwas
angesehen wurde.
AUSSERDEM BELEGT statt behauptet: Dass das Kategorie-Feld bei DogFather
nur erscheint, wenn er wirklich einen Modi eintraegt, steht jetzt in der
Pruefung -- erst ein Creator (Feld bleibt weg), dann ein Modi (Feld
kommt). Ohne den zweiten Schritt waere "bleibt weg" auch dann gruen,
wenn es NIE kaeme.
GEPRUEFT: pruef-modi-wortleck (4, neu), pruef-modi-kategorien (25),
pruef-modi-verborgen (57), pruef-vorlagen, pruef-aufgabenbrett.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
114a00eed5 |
Der Modi bekommt seine eigene Seite -- und sein Brett zurueck
DER WICHTIGSTE FUND, und er kam nicht aus dem Nachdenken: Ein Modi sah
auf dem Aufgabenbrett GAR NICHTS -- nicht einmal seine eigenen Aufgaben.
sichtbar() endet mit `default: 0=1`, und 'modi' stand nicht darin.
Genau dieser Fehler ist am 01.09.2026 schon dem Manager passiert; der
Kommentar zwei Zeilen darueber warnt woertlich davor ("Ein leeres Brett
sieht aus wie 'nichts zu tun', nicht wie ein Fehler; deshalb ist das
vermutlich lange niemandem aufgefallen"). Der Rollen-Rundgang meldete
fuer den Modi trotzdem brav "aufgaben.html ok" -- die Seite laedt ja,
sie war nur leer. Gefunden hat es erst eine Pruefung, die eine Aufgabe
ANLEGT und sie danach wiederzufinden versucht.
Ein Modi sieht jetzt die Aufgaben des ganzen Modi-Teams (Filipes
Entscheidung "sie sind untereinander ein Team"), aendern darf er
weiterhin nur seine eigenen. Die Nummern werden bei jeder Abfrage frisch
gelesen -- eine beim Serverstart gebaute Liste waere ab dem naechsten
neuen Modi falsch, und niemand wuesste warum.
DIE STARTSEITE. Ein Modi hatte keine einzige Kachel: Jede traegt eine
feste Rollenliste, und 'modi' darf dort nicht stehen -- bereiche.js
bekommt jeder ausgeliefert, der die Seite oeffnet. Die Kacheln kommen
deshalb vom Server (MODI_BEREICHE), samt Beschriftung. Nur die Ziele zu
schicken haette nicht gereicht: Unter "Dashboard" stuende sonst "Alle
Creator auf einen Blick" -- fuer jemanden ohne Creator. Die Worte
gehoeren zum Empfaenger, nicht zum Ziel.
Neun Kacheln in drei Gruppen: Aufgaben, Chat, Kalender, Dateien /
Live-Ablauf, Community, Technik / Profil, Wissen. Nichts aus der
Agentur -- diese Seiten drehen sich um betreute Creator oder um Rechte.
`null` heisst "nimm deine eigene Liste", eine LEERE Liste hiesse "keine
Kacheln". Verwechselte man die beiden, haetten die fuenf bekannten
Rollen ab sofort eine leere Startseite.
ZWEI DINGE HAT DAS BILDSCHIRMFOTO GEZEIGT, NICHT DER CODE:
* Ueber der Modi-Startseite stand "Spicy Media" -- die Marke einer
Agentur, mit der er nichts zu tun hat. Jetzt "Team Dogi", wie auf
der oeffentlichen Seite. Ersetzt wird nur der Textknoten: In dem
Element sitzen zwei Zierrauten, ein textContent haette sie lautlos
geloescht.
* Auf seinem Aufgabenbrett stand das Creator-Vorlagenbrett, 80
Aufgaben fuer den Aufbau eines Kanals. Fuer einen Moderator ist
davon nichts gedacht. Ausgeblendet, bis sein Katalog aus Teil 2 des
Anforderungsdokuments da ist -- nichts ist ehrlicher als etwas
Fremdes.
Dazu: "0 betreut" stand dauerhaft auf seiner Startseite, eine Zahl, die
nie etwas anderes sagen kann. Jetzt zaehlt sie, wie viele im Modi-Team
sind. Und der Satz unter der Begruessung war nur das Wort "Modi", neben
fuenf Rollen mit einem ganzen Satz -- das sah nicht verborgen aus,
sondern unfertig.
KATEGORIEN (Kapitel 6.1), nach Filipes Entscheidung nur bei den Modis.
Acht Stueck; hier steht, wohin die dreizehn aus Teil 2 fallen
(Branding/Team/Kommunikation -> Planung, Wachstum -> Community).
Der heikelste Fall ist nicht das Setzen, sondern das SCHICKEN durch
jemanden, der es nicht darf: Eine Absage ("Unbekannte Kategorie") waere
die Auskunft, dass es das Feld gibt. Also faellt der Wert lautlos weg
und die Aufgabe entsteht ganz normal. Wer die Kategorien benutzen darf,
bekommt bei einem Tippfehler dagegen sehr wohl eine Absage.
Das Feld erscheint nur, wenn die Aufgabe wirklich zu einem Modi gehoert
-- bei DogFather also erst, wenn er einen als Person auswaehlt. Sonst
stuende es auch an jeder Creator-Aufgabe. Verborgen heisst dabei auch
"nichts mitschicken": Ein Wert in einem unsichtbaren Feld wandert sonst
beim naechsten Speichern mit.
KEINE NEUE CSS-KLASSE fuer die Kategorie auf der Karte. Sie muesste in
sieben gleichlautenden Kopien der Modulliste gepflegt werden -- sieben
Gelegenheiten fuer einen Unterschied, fuer eine Zeile Text.
AUSSERDEM BERICHTIGT, UND ES WAR SCHON VORHER ROT: pruef-start-ansicht
erwartete drei Kachelgruppen. Seit
|
||
|
|
7be488e0ca |
Ein Zugang, den ausser DogFather niemand bemerkt
Aus dem Anforderungsdokument (Master-Blueprint V3.0) fehlte die Rolle
"Modi" ganz -- es gab nur spicy, admin, manager, scout, creator. Filipes
Bedingung dazu: "dass die keine neue eingangs kachel bekommen wie spicy
dogfather und so sondern einfach einen code. damit die von der workspace
auch nicht mal sehen dass die modis von mir einen eigenen zugang haben."
DER EINGANG. Es gibt keine sechste Kachel und es laesst sich auch keine
erzwingen: Wer von aussen `rolle: "modi"` schickt, bekommt wortgleich
dieselbe Antwort wie bei einer erfundenen Rolle. Ein Modi tippt auf
irgendeine vorhandene Kachel -- welche, ist gleichgueltig -- und gibt
seinen Code ein. Der Code allein entscheidet.
Moeglich macht das eine neue Spalte `code_kennung`: ein HMAC ueber den
Code, in Mikrosekunden nachgeschlagen. Zwei naheliegende Wege wurden
verworfen, weil man sie finden kann: ein Merkmal im Code ("M-...") waere
ein sichtbares Kennzeichen auf dem Zettel des Modis, eine eigene Adresse
(/modi.html) eine Seite, die man aufrufen kann. Der Suchschluessel steht
VOR dem gewohnten Weg, nicht dahinter -- ein Rueckfall nach einem
Fehlversuch haette genau die Fehlversuche verlaengert, und daran waere
es zu erkennen gewesen.
Unbedenklich, weil nachgemessen: Ein Code hat 16 Zeichen aus einem
32er-Alphabet, also 80 Bit Zufall. Der Suchschluessel sagt ausserdem nur,
WEN man pruefen soll -- ob der Code stimmt, sagt weiterhin scrypt.
DIE UNSICHTBARKEIT sitzt in verborgeneIds(), also an derselben einen
Stelle wie die Regel fuer den zweiten Admin-Zugang, und nicht in den
rund 170 Abfragen, die Personen lesen. Sie haengt dabei an der ROLLE und
nicht an einer Nummer -- die Schwachstelle, die im Kommentar der alten
Regel offen dasteht (wird Zugang 1 geloescht, rueckt der naechste nach),
kann einer Rolle nicht passieren.
Nach Filipes Entscheidungen: Die Modis sehen sich untereinander (Kapitel
7.2 des Dokuments), VanVan sieht sie mit (Kapitel 3, sie traegt dieselbe
Rolle), Codes gibt Filipe selbst weiter -- kein Einladelink, der in einem
Verlauf landen kann.
ZWEIMAL WAERE DAS WORT "MODI" BEINAHE IN EINER DATEI GELANDET, DIE JEDER
BEKOMMT: in den Rollenlisten von start.js und personen.js. Ein Blick in
den Quelltext haette genuegt. Der Anzeigename kommt jetzt aus
/workspace/api/ich (beschreibt immer nur den Angemeldeten selbst), die
Rollenauswahl aus der Antwort des Servers und nur an die DogFather-Rolle.
GEPRUEFT mit pruef-modi-verborgen.mjs (45 Pruefungen): fuenf Kacheln
fuehren mit dem Modi-Code hinein, ein Manager-Code auf fremder Kachel
weiterhin nicht (sonst waere nebenbei die Rollenpruefung abgeschafft),
und ueber fuenf Schnittstellen sieht ausser DogFather, VanVan und den
Modis niemand etwas -- auch nicht die ZAHL daneben.
Die Gegenprobe steht bewusst ganz unten, weil sie eine Person absichtlich
aus der Regel aushaengt: Weiter oben haette sie jeden Abschnitt danach
verfaelscht. Beim ersten Anlauf stand sie in der Mitte, und prompt tauchte
die Person in einer spaeteren Managerliste auf.
Abschnitt 5 prueft den Weg durch die Anwendung selbst (DogFather legt an,
der Modi meldet sich an). Die Abschnitte davor tragen die Personen von
Hand ein und rechnen den Suchschluessel selbst aus -- damit waere NICHT
bewiesen, dass personAnlegen() ihn im Betrieb schreibt. Ohne ihn kaeme
kein einziger echter Modi herein, und oben waere trotzdem alles gruen.
Die Umstellung der Rollenliste in der Datenbank steht ab jetzt einmal in
rollenRegelUmstellen() statt zum dritten Mal abgeschrieben. Jede Abschrift
waere eine Gelegenheit, eine der vier Absicherungen zu vergessen: Sicherung
vorher, Zaehlung innerhalb der Transaktion, Spaltenliste aus der Tabelle,
Pruefung auf verwaiste Verweise danach.
pruef-personen-formular erwartet jetzt sechs Rollen statt fuenf und prueft
die Liste statt nur die Anzahl -- sechs Karten koennten auch fuenf richtige
und eine doppelte sein. Dass die sechste dort auftaucht, ist gleichzeitig
der Nachweis, dass der Weg ueber den Server funktioniert.
Unveraendert bestanden: pruef-spicy (60), pruef-rollen (97),
pruef-verborgen, pruef-personen-liste, pruef-css-klassen.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
88e2b5cd5d |
Der Wecker: das Zeitfeld ging auf -- nur ausserhalb des Bildschirms
Filipe: "wenn ich am handy auf den wecker drücke dan sieht man nichts."
Er hat woertlich recht. Der Knopf tut, was er soll, und das Zeitfeld
klappt auf -- es steht nur nicht im Bild. Aufgeklappt gemessen, fuenf
Breiten:
320 px Feld bei -127 .. -8 komplett draussen
360 px Feld bei -107 .. 12
390 px Feld bei -92 .. 27
412 px Feld bei -81 .. 38
430 px Feld bei -72 .. 47
DER GRUND IST EIN ANKER, DER GEWANDERT IST. `.tagesruf__feld` steht mit
`right: 56px` da -- "56 px nach links vom Knopf". Am Rechner ist das
richtig: Dort sitzt der Knopf am rechten Rand einer breiten Kachel, und
links davon liegt die Luecke zwischen Text und Uhr. Auf dem Handy wird
derselbe Knopf aus dem Fluss genommen und neben die zentrierte Uhr
gehaengt -- er steht dann ganz LINKS, und 56 px weiter links ist kein
Raum mehr, sondern der Bildschirmrand.
Der Abstand stimmte also noch, der Bezugspunkt nicht mehr. Dieselbe
Sorte Fehler wie die feste Umbruchschwelle und die 62 px Kopfhoehe: eine
Zahl, die fuer eine Anordnung ausgerechnet wurde und in der zweiten
still falsch ist.
Es oeffnet jetzt auf dem Handy nach RECHTS statt nach links -- in die
Richtung, in der dort der Platz ist. Das ist keine zweite Zahl, sondern
dieselbe Regel andersherum ("ins Freie oeffnen"). Der linke Rand des
Knopfes ist nie kleiner als 0, das Feld 119 px breit, der schmalste
Bildschirm 320 -- damit liegt es auf jeder Breite im Bild, ohne dass
eine Schwelle stimmen muss. `max-width: calc(100vw - 24px)` als
Sicherung, falls das Feld je breiter wird.
Die Regel steht in heim.css direkt neben der Regel, die den Knopf
verschiebt. Sie gehoeren zusammen: Wer den Anker bewegt, sieht die
Folge in derselben Medienabfrage.
GEPRUEFT WIRD ES JETZT AUCH (pruef-handy, 99 -> 115 Pruefungen). Das
Feld wird dafuer aufgeklappt gemessen, nicht zugeklappt -- ein
verstecktes Feld hat keine brauchbare Lage, und genau die ist die
Frage. Gegenprobe ist die Messung von vorher: Mit demselben Messmittel
lag das Feld bei -92..27, die Bedingung waere rot gewesen.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
6c48579f66 |
Die Kopfleiste bleibt auch in einer fremden Sicht in EINER Reihe
Filipe, mit Bildschirmfoto aus der installierten App: "es ist noch nicht alles in einer zeile und irgendwie funktionieren nicht alle knoepfe." DER GRUND WAR NICHT DIE BREITE SEINES GERAETS, SONDERN DER ZUSTAND. In der eigenen Sicht klappt der Umschalter auf 36 px zusammen; sobald man die Sicht einer anderen Person uebernimmt, stand der Name darin und er war 152 px breit. Gemessen waren es dann zwei Zeilen bei 320, 360, 390, 412 UND 430 px -- ausnahmslos. Auf seinem Bild stand "Miesmus..." im Umschalter und der goldene Rahmen um die Seite: er war in einer fremden Sicht. MEINE PRUEFUNGEN HABEN DEN FALSCHEN ZUSTAND GEMESSEN. pruef-handy lief ausschliesslich in der eigenen Sicht und war deshalb gruen, waehrend es beim Nutzer zweizeilig war. Ein gruener Haken sagt nur, dass die Bedingung erfuellt war -- nicht, dass sie den Zustand geprueft hat, in dem der Nutzer ist. Die Pruefung wechselt jetzt selbst in eine fremde Sicht (92 -> 99 Pruefungen). WAS SICH AENDERT - Auf dem Handy ist der Umschalter auch in fremder Sicht ein Zeichenknopf: Auge + Anfangsbuchstabe, 46-48 statt 152 px, in der ROLLENFARBE der Person, deren Sicht laeuft. Die Farbe kommt aus `data-rolle` -- dieselbe Zuordnung, die gate.css ohnehin hat, keine zweite Farbliste. - Der volle Name wandert in ein Band unter die Leiste, zusammen mit "Zurueck zu meiner Sicht" als ganzem Satz statt als 28-px-Kreuz. Er steht dort GANZ statt als "Miesmus...". Am Rechner bleibt alles wie bisher; dort ist Platz. - Der Rahmen um die Seite nimmt dieselbe Farbe an. Man sieht damit nicht nur DASS eine fremde Sicht laeuft, sondern WESSEN. - Das `:not([data-fremd="ja"])` faellt an beiden Stellen weg. Es war der ganze Fehler: eine Regel, die den wichtigeren Fall ausnahm. UND DER BLOCK FUER SCHMALE GERAETE STAND AN DER FALSCHEN STELLE Er galt bis 340 px und stand 3600 Zeilen VOR dem 560er-Block -- bei gleicher Spezifitaet verliert er damit. Gewirkt hat er nur, weil sein Selektor zufaellig ein `:not()` trug. Jetzt steht er direkt hinter dem 560er und gilt bis 400 px (34 px je Knopf, 4 px Abstand). Damit bleibt auch bei 360 px auf den UNTERSEITEN alles in einer Reihe -- dort stehen zusaetzlich der Zurueck-Knopf und die Glocke. Gemessen nach dem Umbau, eigene und fremde Sicht, Start- und Unterseite: 360, 390, 412 und 430 px alle einzeilig. Offen bleibt 320 px (iPhone SE 1. Generation bzw. Anzeige-Zoom) -- dort passt es ohne das Weglassen einer Funktion nicht, das ist eine Entscheidung und kein Handgriff. DER SICHERE BEREICH (auf Filipes Zusage) Jede der 20 Seiten sagt `viewport-fit=cover`, aber im ganzen Workspace stand kein einziges `env(safe-area-inset-*)`. Sein Android ist NICHT betroffen (im Bildschirmfoto nachgesehen), ein iPhone waere es: Von einem 36-px-Knopf blieben unter einer 47 px hohen Statusleiste rechnerisch 5 px zum Antippen. Einmal zentral benannt (gate.css) und an den vier Stellen angewandt, wo etwas am Rand klebt: Kopfleiste (oben und seitlich), Inhalt (seitlich und unten), Speichern-Leiste im Profil, Chat-Eingabe. Auf Geraeten ohne Aussparung sind alle vier Werte 0. Nebenbei: chat.js misst die Hoehe ueber der Chatflaeche jetzt einschliesslich des Bandes -- sonst stuende das Eingabefeld genau um dessen Hoehe unter dem Bildschirmrand. Derselbe Fehler wie mit den festen 62 px, nur mit einem anderen Element. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
d0ac8ee8d1 |
Das Logo: aus dem Fleck wird wieder ein Hund
Filipe: "kannst du bitte das logo wenn man es installiert auf pc oder handy und oben rechts in der leiste noch perfektionnieren." Beide Stellen hatten denselben Fehler, und er war derselbe wie an mehreren Stellen davor: Der Husky lag als MASKE auf einer Farbflaeche. Von einer Maske zaehlt nur der Alphakanal, und die Vorlage ist rundum freigestellt -- uebrig blieb eine geschlossene Flaeche in Hundeform. Kein Auge, keine Schnauze, kein Ohrinneres. Ein Fleck. Jetzt liegt an beiden Stellen dieselbe Zeichnung im Mischmodus "screen" ueber einer stahlblauen Silhouette: Schwarz laesst das Fell dunkel, Weiss hebt Gesicht, Ohren und Auge heraus. Gleiche Farben, gleicher Daempfer (.88) -- ein Zeichen, zwei Orte. App-Symbol ausserdem: - Die Chili lief mit ihrem Stiel quer ueber den Fang. Sie ist jetzt gespiegelt, kleiner und liegt hinter dem Hals. - Der Hals endete in einer geraden Kante (die Vorlage ist unten angeschnitten). Eine zweite Maske blendet ihn aus, statt ihn abzuschneiden. - Der Grund war matschig: Rot und Blau trafen sich diagonal genau dort, wo der Kopf steht. Jetzt kaltes Licht oben, warmes unten. - Unter 64 px faellt die Gesichtszeichnung weg, die Chili aber NICHT -- klein erkennt man ein Zeichen zuerst an der Farbe. - Alle Masse haengen an einer Zahl (Groesse der Gruppe), nicht an sechs. Kopfleiste ausserdem: - Die Chili links hatte einen BLAUEN Schein -- aus der Zeit, als dort der Husky stand. Der Schein ist nie mitgewandert. Jetzt warm. - `filter` ersetzt, es ergaenzt nicht: Beim Ueberfahren wurde der Schein geloescht und das Zeichen dabei flacher statt heller. Behoben. Damit die Aenderung auch ankommt: - Der Stempel gilt jetzt auch fuer die App-Symbole und fuer das Manifest. Bilder werden einen Tag zwischengespeichert, das Symbol der INSTALLIERTEN App gar nicht neu geholt -- ohne Stempel haette niemand das neue Zeichen gesehen. - pruef-zwischenspeicher prueft das (18 -> 21 Pruefungen). Werkzeuge: - tools/ausschnitt.mjs (neu): schneidet aus einem Bildschirmfoto ein Stueck heraus und vergroessert die PNG-Datei. Noetig, weil eine Vergroesserung per CSS-transform den Browser NEU rechnen laesst -- ich habe damit 264 px beurteilt und geglaubt, es seien 22, und daraus den falschen Schluss gezogen, ein Gesicht trage bei 22 px nicht. - tools/ansicht.mjs: AUSSCHNITT=<selektor> nimmt nur ein Element auf. - workspace-symbol.mjs: SYMBOL_ZIEL lenkt die Ausgabe um (Entwuerfe ansehen, ohne die sechs echten Dateien zu ueberschreiben), und zwei Gegenproben pruefen jetzt, dass Gesicht und Chili wirklich zu sehen sind -- die alte Pruefung sagte nur "es steht etwas drauf" und haette den Fleck anstandslos durchgewunken. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
5881f9ce2d |
Der Versionsstempel wird jetzt geprueft -- daran haengt das Update
Filipe: "ich hoffe der update passiert bei den benutzern alle immer
automatisch mit."
Nachgesehen statt behauptet. Die Kette lautet:
HTML geht mit `Cache-Control: no-cache` hinaus (live bestaetigt,
Cloudflare laesst sie durch: cf-cache-status DYNAMIC)
-> der Browser holt bei jedem Aufruf die neueste HTML
-> darin stehen die Versionsstempel der Stilvorlagen
-> neuer Stempel = neue Adresse = neue Datei.
Das funktioniert. Es haengt aber an EINEM Glied, und das setze ich von
Hand: dem Stempel. Vergesse ich ihn, bekommt der Benutzer die neue HTML
mit den ALTEN Adressen -- und die sind seit heute Mittag ein Jahr lang
gueltig zwischengespeichert. Er saehe die Aenderung monatelang nicht,
und niemandem fiele auf, warum.
--- WIE ERNST DAS IST, HAT SICH HEUTE GEAENDERT ---
Nachgezaehlt in den letzten vierzig Commits an workspace/assets: DREI
haben Stilvorlagen geaendert, ohne eine HTML anzufassen --
|
||
|
|
bec46ed991 |
Team-Seite: Kopf und Karten sind jetzt echte Kacheln
Filipe, mit Bildschirmfoto: "perfektionnir das in einer kachel in der
farbe von der kategorie bitte. und die kacheln unten in der seite auch
perfektionnieren und geil machen bitte."
--- DER KOPF ---
Er war eine freistehende Ueberschrift auf dem Buehnenbild. Jetzt ist er
eine Kachel wie jede andere im Haus: gefraeste Fase, Kantenlicht,
Eckwinkel, Raster -- alles aus der Modulliste in module.css, wo
`.t-kachel` seit diesem Commit steht.
DIE FARBE IST NICHT ABGESCHRIEBEN. Die Kachel traegt `data-ton="22"`,
und die Regel dazu steht in start.css -- dieselbe, aus der die Kachel
auf der Startseite ihre Farbe zieht (#ffd166). Es gibt weiterhin genau
EINE Stelle, an der die Farbe dieser Kategorie steht; wer sie dort
aendert, aendert beides. Eine zweite Hexzahl in team.css waere die
naechste gewesen, die auseinanderlaeuft.
Der Grenzsatz ("Termine, Chats und Dateien kommen hier nicht vor")
wechselt von Gruen in denselben Ton: In einer Kachel, die schon eine
Farbe hat, ist eine zweite Farbe daneben eine zweite Aussage.
--- DIE KARTEN UNTEN ---
`.tperson` und `.tl` stehen ebenfalls in der Modulliste. Ein
Manager-Kasten leuchtet damit lila, ein Scout-Kasten gruen, ein
Lueckenkasten rot -- ueber `--ton`, ohne dass eine einzige Farbe hier
ausgeschrieben stehen muss.
DER STREIFEN LINKS IST DAFUER WEG, und das ist kein Verlust: module.css
belegt ::before und ::after selbst (Kantenlicht und Eckwinkel) und
laedt NACH team.css -- ein eigenes ::after waere ohnehin wirkungslos
gewesen. Das Kantenlicht traegt die Rollenfarbe jetzt rund um die ganze
Karte statt auf drei Pixeln links.
DIE KENNZAHLEN BLEIBEN SCHLICHT, und das ist eine Entscheidung: Sie
stehen zu acht in einer Karte. Jede davon mit Fase, Kantenlicht und
Eckwinkel waere ein Schaufenster voller Rahmen und keine Auskunft mehr
-- eine Kachel in der Kachel in der Kachel liest niemand. Sie bekommen
nur die abgeschnittene Ecke aus derselben Formel, damit sie erkennbar
zur Familie gehoeren.
--- EIN FEHLER, DEN NUR DAS HANDY GEZEIGT HAT ---
Der Grenzsatz-Kasten hat `flex: 1 1 300px`. Am Rechner ist das richtig:
Dort ist die Hauptachse waagerecht, und er teilt sich die Breite mit
dem Titel. Am Handy dreht die Reihe auf eine SPALTE -- und derselbe
Wert liess ihn in die HOEHE wachsen. Auf dem Bildschirmfoto stand
danach die halbe Kachel leer.
Ein Flexwert gilt fuer eine Richtung, nicht fuer ein Element. Wer die
Richtung dreht, muss ihn mitdrehen.
--- Pruefung ---
pruef-css-klassen: die Modulliste steht weiterhin siebenmal und
Zeichen fuer Zeichen gleich (jetzt 48 Klassen).
pruef-team, 51 Pruefungen: darunter acht Kontrastmessungen an der
WIRKLICHEN Flaeche -- die Hintergruende haben sich durch den Umbau
geaendert, und eine Kachel mit Raster und Verlauf ist etwas anderes als
ein flacher Kasten. Gemessen jetzt 6,71 bis 15,12:1.
Ausserdem gruen: pruef-handy, pruef-lesbarkeit, pruef-buehne.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
b45de940e8 |
Rund um das Team -- die Arbeitslage von Managern und Scouts
Filipe: "so eine kategorie wie ueber die creator will ich dass nur fuer
die spicy und dogfather rolle auch ueber manager und scouts gibt ...
ich will dass es so ultra krass gut ist dass die spicy und dogfather
rolle einen kompletten teil haben mit daten ueber die arbeit von den
manager und scout. keine geheimen sachen also termine, chats und
geheime dateien soll auch so bleiben dass keiner."
--- ZUERST DIE KOPFLEISTE ---
Filipe meldete, die Kopfleiste sei bei DogFather "nicht gemacht".
Nachgemessen auf ALLEN 18 Seiten, in allen fuenf Rollen, bei drei
Breiten: einzeilig, Spanne 4 px. Und die neuen Dateien liegen
nachweislich auf dem Server (
|
||
|
|
a70bc4f235 |
Kalender: blaettern direkt ueber dem Raster, rot und gruen
Filipe, mit Bildschirmfoto: "ich will dass genau da ueber dem kalender
auch noch buttons sind um den monat zu wechseln, tage wechseln.
perfektionnier mir das bitte. und mach auch die buttons die schon da
sind noch viel klarer bitte und die neuen auch. lass die neuen auch
richtig geil aussehen, die einen rot und die anderen gruen."
--- WARUM DAS EINE ECHTE LUECKE WAR ---
Die Pfeile gab es schon -- oben neben der Ueberschrift, einen halben
Bildschirm ueber dem Raster, das sie bewegen. Wer durch Monate
blaettert, sieht auf das Raster und nicht auf die Ueberschrift; der Weg
dorthin war jedes Mal ein Blicksprung.
Die neuen Knoepfe rufen DIESELBE Funktion (`springen`), sie kopieren sie
nicht. Zwei Fassungen desselben Schritts waeren zwei Gelegenheiten,
dass die eine spaeter anders springt als die andere.
--- BESCHRIFTET, NICHT NUR BEPFEILT ---
Ein Pfeil sagt nicht, WIE WEIT er springt. In der Monatsansicht ist ein
Schritt ein Monat, in der Wochenansicht eine Woche, in Liste und
Zeitstrahl sechs Wochen. Genau das steht jetzt drauf und wird beim
Umschalten mitgefuehrt -- steht "Monat vor" und es springt eine Woche,
ist das schlimmer als gar keine Beschriftung.
"Heute" ist ausgegraut, solange man schon dort steht. Ausgegraut und
nicht versteckt: Sonst springen die drei Knoepfe beim Blaettern in der
Breite. Ein Knopf, der nichts tut, wird sonst einmal gedrueckt und
danach nicht mehr ernst genommen.
--- ROT UND GRUEN, ABER NICHT SIGNALROT ---
Diese beiden Knoepfe stehen den ganzen Tag auf dem Bildschirm. Genommen
sind die Haustoene: das gedeckte Rot der Warnfarbe, das Gruen der
Scout-Rolle. Beide hell genug fuer Schrift auf dunklem Grund, keins
leuchtet.
Die Richtung steckt zusaetzlich in der FORM: Der Pfeil steht links beim
Zurueck und rechts beim Vor. Wer Rot und Gruen nicht unterscheidet --
etwa acht Prozent der Maenner --, liest die Richtung trotzdem.
--- UND DIE VORHANDENEN KNOEPFE ---
Der Ansichts-Umschalter: Die drei nicht gewaehlten Knoepfe waren nackte
Schrift auf dunklem Grund -- sie sahen aus wie Beschriftungen, nicht wie
Schaltflaechen. Wer nicht weiss, dass "Woche" anklickbar ist, klickt
nicht darauf. Sie haben jetzt eine eigene Flaeche; die gewaehlte bleibt
das gebuerstete Metall und hebt sich dadurch sogar deutlicher ab.
Die Filterknoepfe standen auf --text-still, der leisesten Schrift der
Seite -- ausgerechnet an einem Bedienelement. Und "aus" unterschied
sich nur am hohlen Punkt.
--- EIN EIGENER FEHLER UNTERWEGS ---
Am Handy verschwindet das Wort, damit die Leiste nicht umbricht. Der
erste Anlauf liess die Polsterung stehen: Uebrig blieb ein 30 px
breites Pillchen mit einem winzigen Pfeil -- kleiner als das, was man
mit dem Daumen sicher trifft, und die Farbe war darauf kaum noch zu
sehen. Jetzt ein rundes Ziel von 44 px mit einem Pfeil, der die Flaeche
fuellt. Gesehen habe ich das erst auf dem Bildschirmfoto, nicht beim
Schreiben.
--- Pruefung ---
pruef-kalender, elf neue Messungen: beide Knoepfe blaettern wirklich,
die Beschriftung nennt die Schrittweite und folgt der Ansicht
("Monat vor" -> "Woche vor"), "Heute" graut sich richtig aus und wird
wieder anklickbar.
Rot und Gruen werden an ECHTEN Farbwerten geprueft (ueber ein Canvas
zurueckgelesen, weil color-mix() als "color(srgb ...)" herauskommt und
ein Muster ueber die Ziffern Unsinn liest -- derselbe Fehler wie heute
Mittag bei der Personenkachel). Dazu die Gegenprobe, dass die beiden
sich wirklich unterscheiden: Abstand 187.
Ausserdem gruen: pruef-css-klassen, pruef-lesbarkeit, pruef-handy.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
f3acfab10a |
Aufgaben: die Bedienung, nicht die Kacheln
Filipe: "ich will dass du dass system jetzt wie die vier kategorien bedient werden, perfektionnierst ... ich red von den aufgaben. das system von den aufgaben, die bedienung ... die hauptkachel von der kategorie nicht veraendern oder anfassen, die bleiben so." Die vier Kacheln sind unberuehrt. Geaendert ist, was danach kommt. --- 1. DAS VORLAGENBRETT WAR IM WEG --- Gemessen am Handy: Der Vorlagenblock fuellte ANDERTHALB BILDSCHIRME, bevor die erste eigene Aufgabe kam. Und mein eigener Ausbau von Profi und Meister ein paar Stunden vorher hat ihn noch laenger gemacht -- aus 48 Vorlagen wurden 80. Das ist die falsche Reihenfolge: Vorlagen holt man selten, das Brett benutzt man jeden Tag. Der Block bleibt an seiner Stelle (dort gehoert er hin, weil daraus Aufgaben auf das Brett darunter wandern), ist aber zugeklappt. Zugeklappt steht dort, WIE VIEL darin liegt -- sonst sieht er aus wie eine Ueberschrift ohne Inhalt und niemand macht ihn auf. Wer ihn aufmacht, findet ihn beim naechsten Mal offen: Wer Vorlagen holt, holt meistens mehrere. Und zugeklappt werden die achtzig Karten GAR NICHT ERST GEBAUT, nicht nur versteckt. --- 2. MAN SAH NICHT, WAS MAN SCHON GEHOLT HATTE --- Dieselbe Vorlage liess sich zweimal uebernehmen, und die Aufgabe stand dann zweimal auf dem Brett -- ohne jeden Hinweis. Bei achtzig Vorlagen ueber vier Stufen weiss niemand auswendig, was er letzten Monat schon geholt hat. Die Kennung der Vorlage steht jetzt an der Aufgabe (neue Spalte `vorlage`). Ueber den TITEL zu vergleichen waere die naheliegende Abkuerzung gewesen -- und faellt in dem Moment um, in dem jemand den Titel einer uebernommenen Aufgabe aendert. Uebernommene Karten treten zurueck (nicht: verschwinden -- wer sie ausblendet, nimmt die Moeglichkeit, sie bewusst noch einmal zu holen), tragen "schon uebernommen" MIT ZUSTAND, und ihr Knopf heisst "Nochmal". Darunter steht der Stand: "5 von 7 noch nicht uebernommen." Es braucht dafuer keine zweite Abfrage -- die Aufgaben liegen ohnehin im Browser. --- 3. DRINGEND SCHLAEGT WICHTIG --- Die Liste war nach PRIORITAET sortiert, dann nach Frist. Auf dem Brett stand damit eine seit vier Tagen ueberfaellige Aufgabe mit Prioritaet "niedrig" UNTER einer, die als "hoch" eingetragen ist und erst in dreissig Tagen faellig wird. Wer die Spalte von oben liest, faengt dann mit dem Falschen an. Eine Prioritaet ist eine Einschaetzung von damals, eine ueberschrittene Frist eine Tatsache von heute. Jetzt: erst was faellig ist, dann nach Datum, und die Prioritaet entscheidet nur noch bei gleichem Datum. Die Sortierung steht im SERVER -- Startseite und Uebersicht lesen dieselbe Liste, und zwei Sortierungen fuer dieselbe Frage laufen auseinander. --- 4. "WICHTIG" STEHT JETZT DA --- Die Prioritaet war ein 3 px breiter Rand links -- direkt neben der farbigen Kante der Spalte und damit praktisch unsichtbar. Als Wort steht sie dort, wo man sie liest. NUR bei "hoch" und nur solange nicht erledigt: Eine Marke an jeder Karte waere keine Marke mehr. --- Pruefung --- pruef-aufgaben-vorlagen: zugeklappt als Vorgabe (gemessen wird, dass die Karten gar nicht gebaut werden), Aufklappen, uebernommene Vorlage markiert samt Zustand und "Nochmal"-Knopf, Stand darunter, Zustand ueberlebt das Neuladen -- mit Gegenprobe, dass die uebrigen NICHT markiert sind. Dabei fiel eine eigene Nachlaessigkeit auf: Die Pruefung "die Karten sind gestaltet" mass zu einem Zeitpunkt, an dem es zugeklappt gar keine Karte gab -- getComputedStyle auf null liefert nichts, und der Haken wurde rot, ohne dass etwas kaputt war. Sie misst jetzt nach dem Aufklappen. pruef-aufgabenbrett: die Sortierung an zwei absichtlich unguenstig angelegten Aufgaben (ueberfaellig+niedrig gegen fern+hoch), plus die Gegenprobe, dass bei GLEICHER Frist weiterhin die Prioritaet entscheidet -- sonst waere die Prioritaet wirkungslos geworden, und das waere die andere Uebertreibung. Ausserdem gruen: pruef-css-klassen, pruef-start-ansicht, pruef-uebersicht. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
38416962b3 |
Kopfleiste am Handy: alles in einer Reihe
Filipe, mit Bildschirmfoto: "ich will dass es ueberall perfektionniert
wird. ich will dass du das richtig geil machst es soll alles in einer
reihe sein." Auf dem Bild stand "Abmelden" allein in einer zweiten
Zeile, darueber Teilen, Chat, Suche und das Profilbild.
--- GEMESSEN, BEVOR ETWAS GEAENDERT WURDE ---
Bei 390 px, alle fuenf Rollen:
verfuegbar fuer die rechte Gruppe 275 px
gebraucht als DogFather 393 px
(Sicht 150 · Teilen 38 · Chat 37 · Suche 47 · Bild 28 · Abmelden 93)
gebraucht als Scout/Manager/Spicy 243 px
gebraucht als Creator 205 px
Der Umbruch war also die richtige Antwort auf ein echtes
Platzproblem. `flex-wrap` misst und rechnet nicht -- das bleibt so.
Geaendert wird der PLATZBEDARF, nicht die Reaktion darauf. Eine
Schwelle, ab der nicht mehr umgebrochen wird, waere wieder eine
Rechnung von gestern: Beim naechsten Knopf staende alles uebereinander.
--- WAS SCHRUMPFT, UND WAS NICHT ---
Die drei Zeichen-Knoepfe waren 38, 37 und 47 px breit -- nebeneinander
sah das unruhig aus. Jetzt alle 36.
"Abmelden" wird auf schmalen Bildschirmen zum Zeichen (93 -> 36). Das
Wort bleibt im aria-label und am Rechner sichtbar: Dort ist Platz, und
ein Wort ist eindeutiger als ein Bild. Der Aufbau steht in kopf.js und
nicht in neunzehn HTML-Dateien -- neunzehn Stellen sind achtzehn
Gelegenheiten, eine zu vergessen.
Der Sicht-Umschalter wird ein Zeichen-Knopf wie die anderen (150 -> 36),
ABER NUR solange die eigene Sicht laeuft. Bei einer fremden behaelt er
den Namen, und dann darf die Leiste auch umbrechen: Dass man fremde
Zahlen ansieht, ist wichtiger als eine gerade Zeile. Das ist der
gefaehrlichste Fall dieser Funktion, und er bleibt unangetastet.
--- ZWEI DINGE, DIE ERST DIE MESSUNG GEZEIGT HAT ---
1. `max-width: 30px` am Umschalter-Kasten wirkte NICHT. Gemessen stand
da: berechnete Hoechstbreite 30 px, tatsaechliche Breite 104. Der
Knopf DARIN behielt seine Groesse und schob den Kasten wieder auf.
Wer nur den Rahmen begrenzt, begrenzt nichts -- die Breite kommt vom
Inhalt. Jetzt liegt der Knopf unsichtbar UEBER dem Auge: die ganze
Flaeche ist das Ziel, der Fokusring bleibt, die Breite ist 36.
2. Bei 360 px brach es weiter um, obwohl es rechnerisch passte. Ursache
war eine eigene Regel bei 380 px, die Marke und Bedienelemente
ausdruecklich in zwei Zeilen zwang -- richtig, solange die
Bedienelemente 243 bis 393 px brauchten, falsch seit sie 136 bis 238
brauchen. Die Schwelle liegt jetzt bei 300 px; darunter gibt es
Geraete, auf denen es wirklich nicht reicht.
--- Pruefung ---
pruef-handy, 15 neue Messungen (fuenf Rollen x 360/390/412): alle Teile
der Kopfleiste stehen in einer Reihe, Spanne 4 px.
Gemessen wird die ZEILENZAHL ueber die Oberkanten, nicht die Hoehe der
Leiste. Eine Hoehengrenze waere wieder eine Zahl von gestern -- sie
stimmt, bis jemand die Polsterung anfasst. Ob zwei Dinge in derselben
Zeile stehen, sieht man an ihrer Oberkante, und das gilt immer.
Ausserdem gruen: pruef-css-klassen.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
8c77995c2c |
Profi und Meister: aus 43 Eintraegen werden 217
Filipe, mit Bildschirmfoto der Stufenleiste (Anfaenger 7,
Fortgeschritten 9, Profi 6, Meister 4): "ich will dass die 2 kategorien
profi und meister ueberall noch mehr perfektionniert werden. ich will
dass da noch mehr aufgeben und moeglichkeiten sind. perfketionier diese
kategorien ultra ultra viel. die muessen richtig krass sein!!!!"
--- ZUERST GEZAEHLT, DANN GESCHRIEBEN ---
Er hatte an einer Zeile gesehen, was ueberall galt. Nachgezaehlt:
LIVE Vorbereitung 4 Profi / 3 Meister gegen 6 Fortgeschrittene
Mitschrift 2 / 0 <- KEIN einziger Meister-Punkt
Auswertung 4 / 2
COMM Moderation 4 / 2
Aktion 1 / 1
Konflikt 1 / 1
TECH Setup 3 / 1
Problem 2 / 1
Loesung 1 / 2
Content-Ideen 6 / 3 gegen 10 Anfaenger
Aufgaben je Bereich 3 / 3
Die oberen beiden Raenge waren ueberall die duennsten. Das ist die
falsche Richtung: Anfaenger ist man ein paar Wochen, Meister bleibt man
Jahre. Wer alles abgehakt hat, was dort steht, findet nichts mehr und
hoert auf hinzusehen.
--- WAS DAZUGEKOMMEN IST ---
Punkte und Ideen Profi 28 -> 85, Meister 15 -> 76
Aufgaben-Vorlagen Profi 12 -> 28, Meister 12 -> 28
Die neuen Eintraege sind bewusst NICHT nur schwerere Fassungen der
alten. Auf den oberen Stufen aendert sich die ART: weg vom eigenen
Koennen, hin zu Zahlen, Verfahren, anderen Menschen und dem
Weitergeben. Meister-Punkte sind deshalb Saetze wie "der Ablauf ist
uebergebbar", "eine zweite Person kann es auch", "die
Wiederherstellung ist einmal geprobt".
Recherchiert statt aus dem Bauch: Tonkette nach AES-Reihenfolge
(Hochpass, Gate, Kompressor, Begrenzer -- wer den Kompressor vorzieht,
macht das Rauschen mit lauter), Bitrate mit 20 bis 30 Prozent Reserve
auf den gemessenen Upload, Ton mindestens 160 kbit, zwei Wege ins Netz
ueber getrennte Anbieter, die sechsstufige Eskalationsleiter der
Moderation, Schichten gegen das Alleinsein (nicht gegen die Menge --
Isolation zermuerbt Moderatoren mehr als Arbeit), Gruppen nach
Eintrittsmonat statt Gesamtzahlen, ein Beitrag in vier Formate.
Fristen nach Hausregel eingehalten: kein Anfaenger ueber 5 Tage, kein
Meister unter 7. Alle 80 Schluessel eindeutig (zwei Dubletten beim
Einfuegen gefunden und entfernt).
--- UND DIE PRUEFUNGEN, DIE DAS FESTHALTEN ---
Zwei feste Zahlen von gestern ersetzt, statt sie hochzusetzen:
`gesamt === 48` und `nachher === vorher + 3`. Beide wurden in dem
Moment rot, in dem etwas BESSER wurde -- eine Zahl, die Verbesserung
bestraft, erzieht dazu, sie stumpf nachzuziehen. Die erwartete Menge
kommt jetzt aus der Vorlage selbst.
Neu, in pruef-checkliste UND pruef-aufgaben-vorlagen: Profi und
Meister duerfen in KEINER Gruppe duenner sein als Fortgeschritten --
verglichen wird mit Fortgeschritten statt mit einer festen Zahl, damit
die Regel richtig bleibt, wenn alle Stufen wachsen. Mit Gegenprobe.
Diese Regel hat sofort etwas gefunden, das mir entgangen war: Der
erste Ausbau hatte fast nur die Saeule "Wert" verdoppelt. Nach Saeulen
gezaehlt stand da 10/9 bei Wert, aber 2/4 bei Community und 2/0 bei
Eigenwerbung. Die GESAMTsumme (14/13 gegen 9) sah dabei tadellos aus
-- eine Summe deckt eine leere Ecke zuverlaessig zu. 15 Ideen
nachgezogen.
Gruen: pruef-checkliste, pruef-aufgaben-vorlagen, pruef-bereiche-lesend,
pruef-aufgabenbrett, pruef-content.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
9b1826721b |
Handy-Mitte, Babyblau und Spicy im Umschalter
Drei Bildschirmfotos, drei Befunde -- und alle drei waren messbar. --- SCREEN 2: RING UND UHR STANDEN SCHIEF --- Filipe: "ich will dass auf dem handy die uhr und der kreis ganz oben mit den erledigten aufgaben, schoen mittig, zentriert sind. die stehen sehr verzogen von der mitte. das soll bei jedem und jeder rolle verbessert werden." Gemessen bei 390 und 412 px, in allen fuenf Rollen, immer dieselbe Zahl: Ring 31 px nach links, Uhr 31 px nach rechts. Gleicher Betrag, entgegengesetzte Richtung -- eine Ursache, nicht zwei. `justify-content: center` zentriert den INHALT der Reihe, und in der Reihe steht neben dem Instrument noch ein Knopf (Glocke rechts vom Ring, Wecker links von der Uhr). Zentriert wurde also [Knopf + Abstand + Instrument] als Block; das Instrument rutschte um die halbe Knopfbreite zur Seite. Die Knopfbreite steht seit jeher als `--instrument-knoepfe: 62px` in derselben Datei -- 62 / 2 = 31. Die gemessene Zahl war von Anfang an aufgeschrieben, nur an anderer Stelle. Der Knopf zaehlt jetzt nicht mehr mit: aus dem Fluss genommen, neben das zentrierte Instrument gehaengt. NICHT um 31 px verschoben -- das waere dieselbe Zahl ein zweites Mal, und beim naechsten Knopf waere sie falsch. Jetzt folgt seine Lage dem Instrument, wie gross das auch ist. Nachher: 0 px Abweichung, alle fuenf Rollen, beide Breiten. --- SCREEN 3: DAS BABYBLAU WAR STAHLGRAU --- Filipe: "die rolle dogfather soll eine uebertrieben geile babyblau haben." Zum dritten Mal -- und die ersten beiden Male habe ich das Falsche vergroessert. Beide Male hatte ich den Abstand zwischen Rot- und Blaukanal im HEXWERT erhoeht (45 Stufen, dann 86). Diesmal zuerst gemessen, was am Bildschirm ankommt: Die DogFather-Zeile traegt 98,7 % farbige Bildpunkte -- MEHR als jede andere Rolle. An der Menge lag es also nie. Ihr Mittelwert war rgb(43,62,78): 35 Stufen zwischen Rot und Blau. Das ist Stahlgrau. Die richtige Groesse ist die SAETTIGUNG. In OKLab hatte #9ed3f4 eine Buntheit von 0,0718 -- der blasseste Wert aller fuenf Rollen. #5fbdff hat 0,1303, also 81 Prozent mehr. Die Zeile kommt damit auf rgb(36,60,79), und der mittlere Kanalabstand steigt von 35,2 auf 43,0. Nachgerechnet, was NICHT verlorengeht: Kontrast auf dem Grund 9,75:1 (vorher 12,49) -- weit ueber den 7 fuer AAA. Abstand zur naechsten Rollenfarbe 0,1608 in OKLab, vorher 0,1466; die Hausgrenze liegt bei 0,0973. DogFather ist also SICHERER unterscheidbar als vorher. Gemessen an der echten Flaeche: 8,84:1 und 9,60:1. --- SCREEN 4: SPICY FEHLTE IM UMSCHALTER --- Filipe: "ich will da auch noch die spicy rolle sehen und die leute in der rolle wie die anderen." Der Sicht-Umschalter fuehrte eine EIGENE Rollenliste -- vier Eintraege, Spicy Media fehlte. Zum vierten Mal derselbe Fehler: eine zweite Fassung einer Liste, die es zentral schon gibt. Vorher traf es die Leitungsliste (ein Set), die Rollennamen (ein Objekt in fuenf Skripten -- im Chat stand "UNDEFINED" ueber einem Namen) und die Personenliste. Jetzt steht dort keine Liste mehr, sondern eine Ableitung aus `ROLLENFOLGE` und `ROLLEN_GRUPPE`. Kommt eine sechste Rolle, ist sie ohne eine Zeile Arbeit dabei. --- Pruefung --- pruef-handy: zehn neue Messungen (fuenf Rollen x zwei Breiten), alle 0 px. Die beiden fehlenden Rollen sind dafuer in den Testdaten ergaenzt -- eine Pruefung an drei von fuenf haette "bei jeder Rolle" nicht belegen koennen. pruef-sicht: Cigdem als Spicy-Media-Person ergaenzt. Ohne sie waere es nie aufgefallen -- eine Rolle ohne Leute wird ohnehin weggelassen, und die alte Zusicherung "Manager, Scouts, Creator" waere weiter gruen gewesen. Dazu eine Gegenprobe, dass die Reihenfolge WIRKLICH aus der zentralen Liste kommt und nicht wieder abgeschrieben ist. pruef-personen-kachel: DogFather-Kontrast neu dabei. Ausserdem gruen: pruef-css-klassen, pruef-lesbarkeit. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
d5570ee501 |
Personenkachel: Rollenfarben, kein Leerband, dunklerer Grund
Filipe, mit Bildschirmfoto: "mach die ganze kachel perfekter detailliert schoenes. der hintergrund soll auch bissl dunkler sein von der kachel." --- 29 PIXEL NICHTS, FUENFMAL UNTEREINANDER --- Auf dem Bild stand unter jeder zugeklappten Rolle ein leerer Streifen. Nachgemessen: Abschnitt 74 px, Zeile darin 45 -- 29 px Leerraum. Sie kamen aus ZWEI Quellen, und nur eine stand in personen.css: padding-bottom: 14px am Abschnitt, plus margin-bottom: 14px an .gruppe__kopf aus start.css Zeile 765. Letzteres ist fuer die freistehenden Abschnitte der STARTSEITE geschrieben, wo unter der Ueberschrift wirklich gleich Karten kommen. Zugeklappt kommt hier aber nichts, und dann ist der Abstand Abstand zu nichts. Beide haengen jetzt am Zustand: offen -> Luft, zu -> keine. Die Kachel ist damit 383 px hoch statt 293 -- pardon, 293 statt 383. --- DIE ROLLEN HABEN FARBEN, NUR HIER NICHT --- Fuenf Zeilen sahen fuenfmal gleich aus. Das Haus fuehrt fuer jede Rolle eine Farbe (Anmeldeseite, Marken, Bereiche); ausgerechnet in der Liste, in der es NUR um Rollen geht, hoerten sie auf. Jeder Abschnitt traegt jetzt `data-rolle`, setzt daraus EIN --r, und alles Weitere liest davon: der Streifen links, die Anzahl, die Namenszeichen, der Pfeil, das Licht beim Aufklappen. Und `--ton`, die Variable, aus der module.css das Kantenlicht jeder Kachel zieht -- die Personenkarten in einem Manager-Abschnitt sind damit lila statt orange. Eine Zeile, und der Abschnitt wird ein Stueck. NEU: WER DRINSTEHT, OHNE AUFZUKLAPPEN. Vier Namenszeichen, ab dem fuenften "+n". Zugeklappt sagte die Zeile bisher nur, WIE VIELE es sind; wer wissen wollte, ob Patrick dabei ist, musste aufklappen. --- DER STREIFEN, DEN getComputedStyle NICHT SIEHT --- Erster Anlauf: 3 px breit, left: 0, volle Hoehe. Im Bild war nichts. getComputedStyle meldete trotzdem "3 px, sichtbar, Deckkraft 0,55". Der Grund steht in module.css: Jede Kachel traegt auf ::before ein Kantenlicht mit inset: 0 und z-index: 2 -- eine 1,6 px breite Linie UEBER allen Kindern. Vom Streifen blieben 1,4 px, und die lagen genau in der Kante. Er sitzt jetzt bei 3 px, gerundet, mit Luft oben und unten. Die Pruefung misst ihn deshalb an echten BILDPUNKTEN, und zwar dieselbe Stelle zweimal: einmal wie sie ist, einmal mit ausgeschaltetem Streifen. Was sich aendert, IST der Streifen -- und was sich nicht aendert, ist die Gegenprobe, ohne dass man sie erfinden muss. --- UND EINE PRUEFUNG, DIE GRUEN GELOGEN HAT --- Die Kontrastmessung las die Textfarbe mit `getComputedStyle(e).color.match(/\d+/g)`. Das geht, solange dort "rgb(148, 165, 187)" steht. Alle neuen Stellen kommen aus color-mix(), und Chromium antwortet darauf mit "color(srgb 0.36 0.51 0.42)". Aus dem Muster fielen "0", "510588", "0" -- die Pruefung meldete 775929299:1 und war gruen. Die Farbe wird jetzt in ein Canvas GEMALT und als Punkt zurueckgelesen; das versteht jede Schreibweise, die der Browser versteht. Davor steht eine Gegenprobe mit zwei bekannten Farben: Stimmt das Messgeraet nicht, ist alles darunter wertlos. Echte Werte jetzt: 7,95 bis 15,71:1. --- AM HANDY STAND DER PFEIL IN EINER DRITTEN ZEILE --- Der Zusatztext bekommt dort eine eigene Rasterzeile -- richtig, er passt sonst nicht. Der Pfeil bekam dadurch eine dritte und stand mittig unter dem Text wie ein vergessenes Zeichen: 106 px je Rolle. Er hat jetzt eine eigene Spalte und ueberspannt beide Zeilen: 75 px, und er steht da, wo die Hand ihn sucht. --- Pruefung --- server/pruef-personen-kachel.mjs, neu, 43 Pruefungen, alle gruen. Ausserdem gruen: pruef-personen-liste, pruef-css-klassen (die hat die Namenszeichen bei 10,56 px erwischt, bevor sie jemand lesen musste). Angesehen bei 1440 px und 390 px, zu und offen. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
14e9bbf7a5 |
Chat: Fotos und PDFs schicken, Gespraeche wegraeumen
Filipe, mit Bildschirmfoto: "man muss die chats auch geloescht bekommen!!! am besten waere es auch wenn man da auch im chat pdfs schicken koennte. pdfs und fotos." Zwei Entscheidungen vorher abgestimmt, weil sie den Bau bestimmen: Geloescht wird NUR BEI MIR. Schicken duerfen ALLE im Gespraech, auch Creator -- anders als in der Dateiablage, wo etwas in einem Bereich landet, den mehrere sehen. Hier bekommt es genau der, mit dem man ohnehin gerade spricht. --- ANHAENGE --- Drei Wege zur selben Sache, weil Leute unterschiedlich arbeiten: die Bueroklammer, Hineinziehen und Einfuegen mit Strg+V (der Weg fuer einen Screenshot -- der liegt in der Zwischenablage und nirgends als Datei). Alle drei laufen durch dieselbe Funktion; drei Fassungen waeren drei Gelegenheiten, dass eine die Pruefung vergisst. Ein Foto wird GEZEIGT, ein PDF wird als Karte ANGEBOTEN. Das ist kein Schoenheitsunterschied: Ein Bild erkennt man in einer Zehntelsekunde, ein PDF muss man ohnehin oeffnen -- eine Vorschau davon waere ein grauer Kasten, der so tut, als koennte man etwas lesen. DIE SICHERHEIT STEHT IN dateiErkennen(). Dateiname und Content-Type kommen vom Absender und sind frei erfunden; der Typ wird deshalb aus den ersten Bytes bestimmt (PNG/GIF/WebP/JPEG/PDF, mit Breite und Hoehe im selben Durchgang). SVG steht absichtlich NICHT in der Liste -- das ist XML, das Skripte enthalten darf, ein als Bild getarntes Programm. Ausgeliefert wird spaeter genau der ERKANNTE Typ, nie der eingeschickte, dazu nosniff und "default-src 'none'; sandbox". Auf der Platte bekommt jede Datei einen erzeugten Zufallsnamen, in einem Ordner ausserhalb des Repos. Zuruecknehmen loescht die Datei wirklich -- sonst waere sie im Verlauf weg und ueber die Adresse noch da, also nur der Anschein einer Ruecknahme. --- WEGRAEUMEN --- Zwei Spalten in chat_teilnehmer statt einer, wegen eines Randfalls: Bei einem Gespraech ohne jede Nachricht waere die Grenze 0 -- und 0 heisst sonst "nie geloescht". geloescht_am unterscheidet die beiden. Die Grenze wirkt in der Liste, im Verlauf, in der Vorschau, in der SUCHE, bei den Anhaengen und in der Ungelesen-Zahl. Die Suche ist die Stelle, an der so etwas typischerweise durchrutscht: aus der Liste weg, ueber die Suche noch da. --- DER FUND: 323 PIXEL --- Ein Bild ist spaeter fertig als der Rest der Seite. Beim Oeffnen springt der Verlauf ans Ende, dann kommt das Foto an und schiebt alles darunter weg -- man steht ploetzlich mittendrin, ohne etwas angeklickt zu haben. Das width/height-Attribut am <img>, wie man es ueberall liest, hilft hier NICHT: Es gibt nur das Seitenverhaeltnis. Damit daraus eine Hoehe wird, muss die Breite feststehen -- bei "width: auto" und einem nicht geladenen Bild ist sie 0. Der Platz wird jetzt am KASTEN reserviert (aspect-ratio + max-width aus den gemessenen Massen). Und die Pruefung dazu hatte denselben Fehler wie das Auge: Sie mass in einem Fenster, in dem das Bild laengst im Zwischenspeicher lag, und meldete tadellose 0 px. Sie misst jetzt in einem FRISCHEN Browser -- der Fall, um den es geht, ist der erste. --- SICHERUNG --- chat-anhaenge/ ist im selben Zug in tools/sicherung-holen.sh eingetragen, nicht spaeter, wenn es auffaellt: Genau so ist die Luecke bei den Profilbildern entstanden. tools/wiederherstellung-proben.mjs bestaetigt: "der Server benutzt 4 Datenordner", keiner fehlt. --- Pruefung --- server/pruef-chat-anhaenge.mjs, neu, 60 Pruefungen, alle gruen. Abschnitt 3 versucht ausdruecklich, hereinzukommen: HTML als bild.png, SVG als foto.png, SVG als svg, eine Textdatei, ein PNG-Kopf ohne Inhalt -- alle fuenf mit 415 abgewiesen, ein echtes JPEG danach mit 201 angenommen (sonst bewiese der Block nur, dass gar nichts durchkommt). 13 MB geben 413 mit lesbarem Text, nicht 500. Konsolenfehler werden nach ZEITPUNKT getrennt, nicht nach Statusnummer: Was waehrend eines absichtlichen Versuchs entsteht, ist gewollt. Nach Nummer zu filtern waere bequem und wuerde ab morgen echte 404 mit verschlucken. Ausserdem gruen: pruef-chat, pruef-chat-optik, pruef-chat-ausbau, pruef-css-klassen. Angesehen bei 1440 px und bei 390 px. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
e28724564a |
Chat: sechs Ergaenzungen -- und ein Absturz, den nie jemand gesehen hat
Filipe: "die kategorie chat, boah ich will dass du die wirklich ueberall perfektionierst. wirklich alles was gratis ist und hinzugefuegt werden kann ohne problem will ich drin haben bitte. ich will das es hoch profissionel und ultra krass geil ist." Zuerst Bestand aufgenommen, nicht gebaut: Suche, Ungelesen-Zahlen, die "ab hier neu"-Linie, Lesestand, Live-Strom, Antworten mit Zitat, Zuruecknehmen und Enter-zum-Senden gab es schon. Dazugekommen ist, was gefehlt hat und ohne fremde Bibliothek geht: 1. ADRESSEN SIND ANKLICKBAR. Gebaut als echte Knoten, nie ueber innerHTML -- ein Chat ist die eine Stelle, an der jeder schreiben darf. Erkannt wird bewusst wenig (http, https, www.): Wer mehr erkennt, macht irgendwann aus "z.b." einen Link ins Nichts. Satzzeichen am Ende bleiben beim Satz. rel="noopener noreferrer". 2. KOPIEREN je Nachricht, mit Rueckfall auf "Text markieren", wenn der Browser die Zwischenablage nicht hergibt. 3. DER VERLAUF REISST NIEMANDEN MEHR WEG. Vorher sprang er bei JEDEM Neuzeichnen ans Ende -- wer weiter oben nachlas und dabei eine Nachricht bekam, verlor die Stelle. Jetzt bleibt er stehen, und ein Knopf sagt, WIE VIEL unten wartet, nicht nur DASS etwas da ist. 4. ENTWUERFE JE GESPRAECH. Wer mitten im Satz wechselt, findet ihn wieder. Im localStorage, nicht auf dem Server: Ein Entwurf ist nichts, was jemand anders sehen soll. Abgeschickt heisst geloescht. 5. EMOJI-AUSWAHL, dreissig feste Zeichen, eingefuegt an der Cursorstelle. Am Handy hat die Tastatur sie ohnehin -- am Rechner nicht, und dort sitzt die Betreuung. 6. ZEICHENZAEHLER, sichtbar ab 400 Rest. Die Grenze steht NICHT im Skript, sondern kommt aus dem maxlength des Feldes -- zwei Stellen fuer dieselbe Zahl laufen auseinander. --- DER FUND, um den es eigentlich geht --- Die neue Pruefung hoert auf "pageerror". Damit kam sofort neun Mal dieselbe Meldung: "Cannot set properties of null (setting 'hidden')", raumOeffnen, Zeile 278. Ursache: verlaufZeichnen() leerte den Verlaufskasten mit `textContent = ''`. Darin liegt aber #verlauf-leer, der Absatz "Links ein Gespraech auswaehlen". Nach dem ersten Zeichnen gab es ihn nicht mehr, und raumOeffnen faellt sechs Zeilen weiter darueber. Die Folge ist nicht die Fehlermeldung, sondern der Abbruch: Beim ZWEITEN Aufruf liefen history.replaceState, gelesenMelden() und raeumeZeichnen() nie. Der zweite Aufruf ist der Normalfall -- der Ereignisstrom ruft nach jedem Verbindungsaufbau genau das, um nachzuholen, was waehrend der Pause geschrieben wurde. Dieses Nachholen hat nie funktioniert. Von aussen sah alles normal aus; nur die Konsole wusste Bescheid. Behoben, indem nur noch die Nachrichten entfernt werden und der Absatz stehenbleibt. Abschnitt 8 der Pruefung wechselt jetzt dreimal zwischen zwei Gespraechen OHNE Neuladen und verlangt null Abstuerze. --- UND EIN ZWEITER, der schon laenger drin war --- Abschnitt 9 misst den Kontrast an der wirklichen Flaeche (Text kurz unsichtbar, Flaeche fotografiert). Die Fusszeile jeder Nachricht stand auf --text-still: auf der eigenen Blase 3,68:1, unter den 4,5:1 fuer Text dieser Groesse. Aufgefallen ist es nie, weil niemand nachgemessen hat. Jetzt traegt .chat-nachricht__fuss EINE Farbe (--text-leise, 4,81:1) und Uhrzeit, antworten, zuruecknehmen und kopieren erben sie -- statt vier eigener Angaben, die beim naechsten Mal auseinanderlaufen. --- Pruefung --- server/pruef-chat-ausbau.mjs, neu, 64 Pruefungen, alle gruen. Zu jedem Punkt eine Gegenprobe: kein Link ohne Adresse, keine Auszeichnung aus <b>/<img onerror>, kein Kopier-Knopf an zurueckgenommenen Nachrichten, kein Sprungknopf fuer den, der schon unten steht, kein Entwurf nach dem Abschicken, ein absichtlich zu dunkler Text faellt durch, und ein absichtlich geworfener Fehler wird bemerkt (sonst waere Abschnitt 10 auch gruen, wenn niemand zuhoert). Ausserdem gruen: pruef-css-klassen, pruef-chat, pruef-chat-optik. Angesehen bei 1440 px und bei 390 px. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
7c00e76d63 |
Uhr: jedes Glied sitzt auf seiner Zahl, statt dort zu beginnen
Filipe (screen2): "oben in der mitte ist auch mittag, die stunden sehen bissl verschoben aus." Er hatte recht, und es ist ausrechenbar. Ein Strichmuster beginnt bei Position null -- der erste Balken lief also von zwoelf Uhr aus im Uhrzeigersinn weg, statt unter der Zwoelf zu stehen. Sein MITTELPUNKT lag damit um eine halbe Gliedlaenge daneben: Stunde 10 von 197,92 Umfang -> 9,09 Grad Minute 1,7 von 241,90 -> 1,27 Grad Sekunde 0,01 von 285,88 -> 0,006 Grad Deshalb faellt es nur bei den Stunden auf: Neun Grad sieht man, eineinviertel nicht. Der Fehler steckte aber in allen dreien -- und so etwas faellt beim naechsten Umbau auf die Fuesse, sobald die Glieder laenger werden. Deshalb ist es fuer alle drei behoben, nicht nur dort, wo es stoert. Eine halbe Gliedlaenge zurueck, und jedes Glied steht mittig auf seiner Zahl. Der Kopf bekommt denselben Versatz aus derselben Zahl -- zwei Rechnungen fuer denselben Ort waren an dieser Stelle schon einmal der Fehler. GEMESSEN an den gezeichneten Bildpunkten, alle zwoelf Plaetze, Kanten im 0,05-Grad-Raster gesucht und daraus die Mitte gerechnet: 0,13 · 29,95 · 59,85 · 89,92 · 119,85 · 149,97 · 180,13 210,23 · 240,35 · 270,32 · 300,27 · 330,35 Soll sind 0, 30, 60 ... 330. Groesste Abweichung 0,35 Grad, und die Vorzeichen wechseln -- das ist Messrauschen bei weichen Kanten, kein Versatz. Vorher lagen dieselben Mitten bei 9,1 · 39,1 · 69,1 ... Geprueft: pruef-start-ansicht -- gruen. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
50b60ebe8f |
Uhr: die Lichtkante leuchtet nur noch von oben
Filipe (screen1): "perfektionnier bitte die stunden. und da sind auch
noch striche die durch die stunden gehen, ist das normal?"
Nein, war es nicht.
DIE URSACHE
Die Lichtkante ist ein Kreis, der gegen seine Bahn versetzt ist -- bei
der Stunde um 2,6 Einheiten nach oben, bei einer Bandbreite von 5,8.
Das ergibt je nach Stelle am Zifferblatt etwas voellig Verschiedenes:
oben Der Versatz liegt QUER zum Balken -> echte Oberkante.
seitlich Der Versatz liegt LAENGS zum Balken -> ein heller Strich
mitten hindurch. Genau der, den Filipe gesehen hat.
unten Es waere eine Unterkante -- die bei Licht von oben gar nicht
leuchten duerfte.
Mit einem Versatz ist das nicht zu loesen: Ein verschobener Kreis ist an
den Seiten zwangslaeufig tangential zur Bahn. Am 09.09. hatte ich schon
einmal an dieser Stelle nachgebessert (die Achse von seitlich auf
senkrecht gedreht) -- das hat die Kante an den richtigen Ort gebracht,
aber nicht die Frage geloest, was sie dort ueberhaupt zu suchen hat.
DIE LOESUNG
Die Kante bekommt einen Verlauf statt einer festen Farbe und wird zu
den Seiten hin ausgeblendet. Sichtbar ist sie nur im oberen Drittel --
genau da, wo Licht von oben auf einen gewoelbten Ring faellt.
RICHTUNG NACHGEMESSEN, NICHT HERGELEITET. Das SVG traegt
`rotate(-90deg)`; SVG-x zeigt auf dem Bildschirm nach oben, der Verlauf
laeuft deshalb ueber x und nicht ueber y. Dieselbe Drehung hat heute
schon einmal die gesamte Lichtrichtung verdreht -- deshalb steht der
Hinweis direkt am Verlauf.
GEMESSEN, Querschnitt durch den Stundenbalken (28,1 bis 34,9; Mitte
31,5), alle zwoelf Plaetze gezeichnet:
oben bei 9,1° hellste Stelle r=34,4 (164) Mitte 123 -> 1,33x
rechts bei 99,1° hellste Stelle r=32,4 (118) Mitte 111 -> 1,06x
unten bei 189,1° hellste Stelle r=33,8 (137) Mitte 132 -> 1,04x
links bei 279,1° hellste Stelle r=32,7 (124) Mitte 114 -> 1,09x
Oben sitzt die hellste Stelle auf der AUSSENKANTE (34,4 von 34,9) und
ist ein Drittel heller als der Balken -- eine Kante. An den drei
anderen Richtungen bleibt die Ueberhoehung unter zehn Prozent, der
Strich ist damit weg.
Die Stunde teilt sich den Verlauf mit Sekunde und Minute und ist nur
ueber die Deckkraft schwaecher gestellt. Zwei Verlaeufe fuer dasselbe
Licht waeren zwei Sachen zum Pflegen.
Geprueft: pruef-start-ansicht, pruef-buehne, pruef-css-klassen -- gruen.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
a116b286cb |
Aufgaben-Vorlagen: vier Bereiche mal vier Stufen, 48 fertige Aufgaben
Filipe: "ich will dass du die vier klassen ueberall mit aufgaben perfektionnierst ... ich will dass die 4 kategorien ueberall perfekt angepasst sind, mit perfekt kategorien und aufgaben." WAS GEFEHLT HAT, NACHGEMESSEN Die Tabelle `aufgaben` kannte weder Bereich noch Stufe, und Aufgabenvorlagen gab es keine. Die Checkliste sagt, WAS sitzen muss -- sie sagt nicht, was jemand als Naechstes TUT. Zwischen "Ton ist der Grund Nummer eins" und einem Abend, an dem der Ton wirklich besser wird, liegt eine Aufgabe mit Frist und Verantwortlichem. Die musste bisher jemand von Hand tippen. WAS JETZT DASTEHT live 12 Aufgaben · 3 je Stufe content 12 Aufgaben · 3 je Stufe technik 12 Aufgaben · 3 je Stufe community 12 Aufgaben · 3 je Stufe zusammen 48 Drei je Feld und nicht zehn: Wer zehn Aufgaben bekommt, macht keine. Drei sind ein Abend, eine Woche, ein Monat -- und die Fristen sind entsprechend gestaffelt. Jede Aufgabe bringt ihre Frist als `tage` mit; eine Aufgabe ohne Frist ist ein Wunsch. Die Sachaussagen stammen aus derselben Recherche wie die Checklistenpunkte: Lautheit minus 20 bis minus 24 LUFS, Tonspur 160 kbit/s, Bitrate hoechstens 75 Prozent des Uploads, Ankuendigung 30 bis 60 Minuten vorher, Verweildauer ueber 15 Minuten, Eskalation in vier Stufen, Intro-Retention ab 70 Prozent. DER WEG BIS ZUR ECHTEN AUFGABE `/workspace/api/vorlagen` liefert sie aus, `/uebernehmen` legt sie an -- als Zeile in `aufgaben`, nicht als weiterer Eintrag in `eintraege`. Eine Aufgabe hat einen Verantwortlichen, eine Frist und einen Status, der sich bewegt; das ist etwas anderes als eine Notiz. Zwei Orte fuer dieselbe Sache waeren der Anfang davon, dass sie auseinanderlaufen. Ohne Creator wird abgelehnt statt herrenlos angelegt. Ein Creator legt sie immer fuer SICH an, auch wenn er jemand anderen angibt. AUF DER SEITE Ein Block ueber dem Aufgabenbrett: zwei Knopfreihen (Bereich, Stufe), drei Karten mit Titel, Erklaerung, Frist und einem Knopf. Die Knopfreihen benutzen `.stufenleiter` aus der Checkliste -- dieselbe Einteilung, dieselbe Darstellung. Eine zweite Optik fuer dieselben vier Bereiche waeren zwei Sachen zum Lernen statt einer. ZWEI EIGENE FEHLER, BEIDE VON PRUEFUNGEN GEFUNDEN 1. Ich hatte verlangt, dass die Frist mit der Stufe waechst. Die Pruefung schlug fehl: Profi 6,7 Tage gegen Fortgeschritten 7,4. Beim Nachsehen war die ERWARTUNG falsch. Eine Profi-Aufgabe ist meist eine Messung -- anspruchsvoll, aber an einem Abend erledigt; eine Fortgeschrittenen-Aufgabe wie "Saeulen anlegen und drei Wochen halten" braucht zwangslaeufig Wochen. Die Stufe sagt, was man KOENNEN muss, nicht wie lange es dauert. Geprueft wird jetzt, was wirklich gilt: keine Anfaengeraufgabe ueber fuenf Tage, keine Meisteraufgabe unter einer Woche. 2. Der Block war zu durchsichtig. pruef-buehne mass den Untergrund als rgb(84, 69, 70) -- das Buehnenfoto -- und die Ueberschrift kam auf 3,61:1 statt 4,5:1. Ein durchsichtiger Kasten hat keinen Untergrund, sondern den, der gerade dahinterliegt. Jetzt eine deckende Flaeche mit Weichzeichner: 5,21:1. GEPRUEFT Neu: server/pruef-aufgaben-vorlagen.mjs, 30 Pruefungen -- Vollstaendigkeit, der Weg bis zur Aufgabe auf dem Brett des Creators, und sechs Gegenproben (unbekannte Stufe, unbekannter Bereich, Nummer ohne Vorlage, ohne Creator, fremder Creator, und ein Creator, der jemand anderen angibt). Dazu ein Browserteil, der klickt statt nur zu zaehlen. Ausserdem gruen: pruef-aufgabenbrett, pruef-buehne, pruef-css-klassen, pruef-handy. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
5b80d7893b |
Checkliste: Stufen fuer die Content-Ideen, 34 neue Punkte aus der Recherche
Filipe (screen, Punkt 5): "du hast die bei der kategorie content-ideen
vergessen. und ich will dass du dich wirklich seeeehr krass informierst
ueber all diese kategorien in den 4 kategorien ... hol das beste vom
besten ... und dan perfektionnierst du diese kategorien bei anfaenger,
fortgeschrittene, profi und meister."
DER BEFUND, NACHGEZAEHLT
live 33 Punkte, 33 mit Stufe
community 23 Punkte, 23 mit Stufe
technik 19 Punkte, 19 mit Stufe <- sein Screenshot, 6/6/4/3
content 13 Punkte, 0 mit Stufe <- die Luecke
Die Stufenleiste erscheint nur, wenn mindestens ein Punkt eine Stufe
traegt. Bei den Content-Ideen trug keiner eine -- deshalb fehlte sie
dort, und nur dort. Nicht falsch, sondern FEHLEND: Die Seite sah
ueberall richtig aus, und aufgefallen ist es erst, als jemand alle vier
nebeneinander gesehen hat.
WAS JETZT DASTEHT
live 40 Punkte · 12 / 13 / 10 / 5
community 28 Punkte · 8 / 10 / 6 / 4
technik 26 Punkte · 7 / 9 / 6 / 4
content 28 Punkte · 10 / 9 / 6 / 3
zusammen 122 statt 88
Alle 13 vorhandenen Content-Ideen haben eine Stufe bekommen; 34 Punkte
sind neu. Kein bestehender Schluessel wurde geaendert -- an ihnen
haengen gespeicherte Bewertungen, und ein umbenannter Schluessel waere
eine stillschweigend geloeschte Beurteilung.
DIE RECHERCHE, UND WAS DAVON UEBRIG BLIEB
Zuerst die eigene Notiz im Vault (TikTok-LIVE-Algorithmus, Juli 2026),
dann fuenf gezielte Recherchen nach aussen. Aufgenommen wurde nur, was
NACHPRUEFBAR ist und was man am naechsten Abend anders machen kann:
- Ueber 70 Prozent entscheiden in den ersten zwei bis drei Sekunden.
Plattformen messen die "Intro-Retention" inzwischen ausdruecklich.
-> content: "Die erste Sekunde entscheidet" (profi)
- Ankuendigungsvideo 30 bis 60 Minuten vor dem LIVE buendelt den
Start; ein voller Start zieht neue nach.
-> live: "Ankuendigung kurz vorher" (fort)
-> content: "30 Minuten vorher" (anfaenger)
- Durchschnittliche Verweildauer ueber 15 Minuten gilt als Zeichen,
dass die Stimmung traegt. -> live: "Verweildauer abgelesen" (profi)
- Wiederkehr schlaegt Spitzenwert -- die Zahl, die man nicht faelschen
kann. -> live: "Wiederkehrer ueber vier Wochen" (meister)
- Ton: minus 20 bis minus 24 LUFS, Begrenzer bei minus 3, Tonspur
160 kbit/s, Mikrofon fuenf bis zehn Zentimeter leicht seitlich.
-> technik: vier neue Punkte, davon einer auf Profi
- Verworfene Bilder (Netz) und ausgelassene (Encoder) haben
verschiedene Ursachen. -> technik: "Netz oder Rechner unterschieden"
- Moderation: eine Ausnahmeliste erlaubter Woerter verhindert, dass
der Filter die Stammleute mitfaengt; Absprachen des Mod-Teams
gehoeren nicht in den oeffentlichen Chat.
-> community: zwei neue Punkte
- Beste Kurzformate 2026: Haken-zuerst, nummerierte Liste,
Vorher/Nachher, Selbstversuch, Vergleich.
-> content: fuenf neue Vorlagen mit ausformuliertem Aufhaenger
ZWEI WACHEN, DAMIT DIESE LUECKE NICHT WIEDERKOMMT
1. In den Daten: Jeder Punkt jedes Bereichs MUSS eine Stufe haben,
und alle vier Stufen muessen vorkommen. Mit zwei Gegenproben --
ein Punkt ohne Stufe und eine Liste mit nur einer Stufe muessen
beide auffallen.
2. Auf der Seite: Die Stufenleiste muss auf allen vier Seiten mit
fuenf Knoepfen dastehen ("Alle" plus vier Stufen). Die Zahl steht
jetzt in der Meldezeile, damit man sie nachlesen kann.
Die zweite braucht es zusaetzlich: "jeder Punkt hat eine Stufe" ist
nicht dasselbe wie "die Leiste ist zu sehen".
EIN EIGENER FEHLSCHLAG, FESTGEHALTEN
Zwischendurch habe ich die Content-Ideen ein zweites Mal zeichnen
lassen -- 6 Gruppen statt 3. Ich hatte nach `vorlagenBlock` gesucht,
nichts gefunden und daraus geschlossen, die Ideen wuerden nirgends
angezeigt. Tatsaechlich ruft content.js sie seit jeher auf (Zeile 427).
Eine plausible Herleitung statt einer Messung, genau die Sorte Fehler,
gegen die die Hausregel geschrieben ist. Zurueckgenommen; die Daten
allein waren die richtige Antwort.
Geprueft: pruef-checkliste (inkl. der neuen Wachen und Gegenproben),
pruef-content, pruef-css-klassen, pruef-buehne -- alle gruen.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
0a0dbff384 |
Fuenf Punkte aus screen1-5: Babyblau, zweite Nut, Spalten, Wasserzeichen, Jadeknoepfe
screen1 -- "da muss mehr babyblau zu sehen sein. da ist ja fast nichts."
Gemessen als Blaustich (Mittel Blaukanal minus Rotkanal ueber die
ganze Zeile): DogFather lag bei 7,4 und damit UNTER der roten
Spicy-Zeile (17,3). Ursache: --dogi-haupt war #c7dcf4, und das hat
zwischen Rot und Blau nur 45 Stufen Abstand -- im Hexwert ein Blau,
auf dem Bildschirm ein Weiss.
Jetzt #9ed3f4 (86 Stufen), dazu eine Schiene, deren Silber nur noch
ein Spitzlicht am oberen Ende ist, ein breiter babyblauer Schimmer
und der Name selbst in einem Verlauf von Silber nach Babyblau.
Blaustich 24,3 -- der hoechste aller fuenf Zeilen, und mit dem
hoechsten Gruenanteil, also Babyblau und nicht Lila. Abstand zur
naechsten Rollenfarbe 0,1295 in OKLab (Hausgrenze 0,0973), Kontrast
12,4:1.
screen2 -- "mach diesen strich der nach oben geht auch links bitte."
Die Zentrale hat drei Felder, aber nur EINE Nut. Jetzt zwei, aus
einem Regelsatz -- "genau gleich" heisst hier wirklich gleich und
nicht gespiegelt: Eine Fraesung in derselben Platte hat bei Licht von
oben links ueberall dieselbe Flanke.
Dabei ein echter Fehler gefunden: Die Nut wurde erst bei 620 px
abgeschaltet (start.css), die dritte Spalte faellt aber schon bei
1180 px weg (heim.css). Zwischen 621 und 780 px stand sie deshalb als
freier senkrechter Strich im Bild -- bei 700 px nachgemessen bei
x = 391, wo sie nichts mehr trennte. Das Abschalten steht jetzt in
derselben Regel wie der Spaltenwechsel, je einmal fuer 1180 und 780.
screen3 -- "die sollen schön untereinander sein."
`.gruppe__zahl` trug ein `margin-left: auto` -- geschrieben fuer die
Startseite, wo im Kopf nur Name, Zahl und Pfeil stehen. Auf der
Personenseite steht dazwischen noch der Zusatztext, und der Pfeil hat
sein eigenes auto. Zwei auto-Raender teilen den freien Platz zu
gleichen Teilen -- also stand die Gruppe [Zahl + Zusatz] mittig, und
ihre Lage hing an der Laenge des Rollennamens.
Jetzt vier Rasterspalten. Die Breite der Namensspalte wird an der
fertigen Liste GEMESSEN und als `--namen-spalte` gesetzt; eine feste
Angabe waere bis zur naechsten Rolle mit laengerem Namen richtig.
Spanne von Zahl und Zusatztext: 0,0 px (vorher 11 px). Gegenprobe:
ohne die gemessene Spalte laufen sie wieder 36,5 px auseinander.
screen4 -- "das symbol rechts in der kachel soll viel groesser sein."
Zum dritten Mal gemeldet, und zum dritten Mal hatte er recht. Zweimal
habe ich den KASTEN vergroessert; beide Male hat sich nichts geaendert,
und ich habe es auf die Kachelhoehe geschoben, statt nachzusehen. Der
Kasten war 124 px -- das SVG darin 39:
.kachel[data-gross="ja"] .kachel__svg { width: 39px } (0,3,0)
.kachel__wasserzeichen svg { width: 100% } (0,1,1)
Die erste Regel meint das Hauptsymbol links. Beide SVG tragen aber
dieselbe Klasse, weil sie aus derselben Funktion kommen -- und die
fremde Regel war staerker. Dasselbe galt fuer `.kachel:hover
.kachel__svg` und die Reduced-Motion-Regel; alle drei sind jetzt auf
`.kachel__zeichen` eingeschraenkt.
Und es waren WIEDER zwei Fassungen derselben Sache, 3600 Zeilen
auseinander: Rahmen 78 gegen 70, Zeichen 36 gegen 39. Der Kommentar
an der spaeteren Stelle behauptete sogar schon, es gebe "EINE
Fassung". Behauptet war es, gemessen nicht. Die toten sind entfernt.
Zweitens fuellt die Zeichnung jetzt ihren Kasten: Im 24er-Raster liegt
sie bei x 4 bis 20, rund 38 Prozent waren leerer Rand.
Ergebnis: Zeichnung von 26 auf 124 px, samt der 8-Grad-Drehung
(140 px) vollstaendig in der 152 px hohen Kachel. Deckkraft
unveraendert bei 0,14 -- er wollte groesser, nicht lauter.
screen5 -- "der abmelde button und teilen button sollen eine richtig
geile gruen haben ... aber so dass es nicht den augen wehtut."
Teilen #45d6a6, Abmelden #33b394. Beide sind WENIGER gesaettigt als
das Rot, das vorher dort stand (63 und 55 gegen 100 Prozent) -- die
Leiste wird ruhiger, nicht greller. Kontrast der Schrift 15,6:1 und
15,0:1 gegen vorher 13,6:1 und 12,6:1. Chat und Suchen bleiben rot;
damit trennt die Farbe "das mache ich mit der Seite" von "das mache
ich mit meinem Zugang".
Erster Versuch verworfen: Ein Rahmen aus drei Toenen ueber zwei
Hintergrundlagen machte beide Knoepfe FLAECHIG gruen, weil ich die
deckende obere Lage durchsichtig gesetzt hatte -- damit deckte sie den
Rahmenverlauf nicht mehr ab. Im Bildschirmfoto gesehen, nicht in den
Zahlen: Die Farbwerte waren die ganze Zeit richtig.
Geprueft: pruef-start-ansicht, pruef-buehne, pruef-css-klassen,
pruef-personen-liste -- alle gruen. Jede eigene Messung mit Gegenprobe.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
74ae4c292e |
Uhr: Stundenverlauf abgeflacht, Lichtkante auf die richtige Achse gedreht
Filipe: "kontrollier bitte nur noch einmal ab dass keine striche krum
sind, kein runder kreis der schief verlaeuft oder so, perfektionier die
stunden noch bissl auch bitte."
Nachgemessen statt nachgesehen. Drei Funde, zwei davon echt.
1. DIE LICHTKANTE LAG AUF DER FALSCHEN ACHSE.
Das SVG `.uhr__ring` traegt `rotate(-90deg)`, damit die Ringe oben
beginnen. Diese Drehung gilt auch fuer einen `translate` darin --
ein `translateY` erscheint auf dem Bildschirm deshalb als "links".
Gemessen an den Kaesten stand bei allen vier Lagen dy = 0: Kante
nach links, Schlagschatten nach rechts, waehrend die Kachel selbst
ihren Schatten mit `0px 14px` nach unten wirft. Zwei Lichter in
einem Koerper.
Sichtbar war es als heller Strich, der bei den oberen Balken LAENGS
durchlief statt auf der Oberkante zu sitzen -- der "Kratzer", der an
den Stunden schon zweimal gestoert hat. Die Kante war vorher
verschmaelert worden; das hat ihn gedaempft, aber nicht beseitigt,
weil die Ursache die Richtung war und nicht die Breite.
Jetzt translateX. Nachgemessen: dx = 0, Kante nach oben, Schatten
nach unten -- dieselbe Lichtrichtung wie der Kachelschatten. Die
hellste Stelle im Querschnitt liegt bei r = 34,1; rechnerisch soll
sie bei 31,5 + 2,6 = 34,1 liegen.
2. DIE ZWOELF STUNDENBALKEN WAREN UNTERSCHIEDLICH HELL.
Ein Verlauf laeuft diagonal ueber die ganze Zeichnung. Auf einem
durchgehenden Bogen ist das Material; auf zwoelf getrennten Balken
bekommt jeder eine andere Farbe. Gemessen, beide Faehrten im selben
Lauf:
alt 75 bis 145, Faktor 1,93
neu 114 bis 147, Faktor 1,29
Der tiefe Stopp #a81f2c traf die Plaetze 0 bis 3 -- die Stunden 1
bis 4, also genau die Balken, die als erste gezeichnet werden. Ein
75er neben einem 145er sieht nicht nach Licht aus, sondern nach
Ausfall. Minute und Sekunde behalten ihren vollen Verlauf: Bei 60
Gliedern liegen die Nachbarn dicht genug, dass der Wechsel als
Politur gelesen wird.
3. VIER TOTE BREITENREGELN, die 620 Zeilen spaeter ueberschrieben
wurden (2,6/3/3,6 statt der gezeichneten 3,2/5/5,8). Sie haben
nichts kaputtgemacht, aber sie haben mich beim Nachrechnen des
Kantenversatzes in die Irre gefuehrt -- entfernt, mit Verweis auf
die eine lebende Stelle. Dabei fiel auf, dass der Versatz der Stunde
noch mit einer Kantenbreite von 0,9 rechnete, obwohl sie laengst
0,6 ist: 2,05 statt 2,20.
NICHT KRUMM war der Rest, auch das gemessen: 9 runde Elemente, 0 Eier;
alle 15 Kreise der Uhr auf demselben Mittelpunkt; Kasten exakt
quadratisch; Umfaenge stimmen auf 0,01 Einheiten zum Muster. Die 30
gefundenen Drehungen sind samt und sonders gewollt (Chilis, Husky,
Wasserzeichen -8 Grad).
Geprueft: pruef-start-ansicht, pruef-css-klassen, pruef-buehne -- alle
gruen. Jede Messung mit Gegenprobe.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
6676998af8 |
Niemand sieht VanVan ausser DogFather -- plus vier Punkte vom Screen
--- DAS WICHTIGSTE ZUERST: die Verbergungsregel --- Filipe, ausdruecklich und dringlich: "und noch gaaaaaanz wichtig keiner soll vanvan sehen ausser ich, ueberall soll keiner vanvan sehen ausser dogfather." ES GAB DAVON NUR EINE HAELFTE. In der Personenliste wurde der zweite Admin-Zugang fuer Spicy Media ausgeblendet (Wunsch vom 31.08.). Ueberall sonst -- Chat, Kalender, Aufgaben, Dateien, Zentrale -- war er sichtbar. `sichtbarePersonenIds` hat ihn sogar ausdruecklich JEDER Rolle gezeigt, weil sie alle Admins einsammelt. WORAN DIE BEIDEN AUSEINANDERGEHALTEN WERDEN: In der Datenbank tragen beide die Rolle `admin`, es gibt kein unterscheidendes Feld. Der Unterschied, den es wirklich gibt, ist das Alter -- DogFather ist der erste Zugang. Also: der Admin mit der kleinsten Nummer ist DogFather, alle weiteren sind verborgen. Drei Ausnahmen: DogFather sieht alle, ein verborgener Zugang sieht sich selbst, und bei nur einem Admin gibt es nichts zu verbergen. WARUM AN EINER STELLE UND NICHT IN DEN ABFRAGEN: Allein workspace-personen.js hat 23 Abfragen auf `personen`. Eine Regel, die man 23-mal wiederholt, ist 23 Gelegenheiten, sie zu vergessen -- und beim Vergessen faellt niemand auf die Nase, sondern jemand SIEHT etwas. Die Regel sitzt deshalb in `verborgeneIds()` und wird ueber einen MANTEL um die sechs Listenfunktionen gelegt: Diese haben zusammen achtzehn Rueckgabewege; sie einzeln zu flicken waeren achtzehn Gelegenheiten, einen zu uebersehen. Die ungefilterten Fassungen (`...Roh`) werden nicht mehr exportiert -- niemand kann sie versehentlich benutzen. `null` HIESS BISHER "SIEHT ALLES". Sobald es etwas zu verbergen gibt, gilt das nicht mehr: Die Liste wird ausgeschrieben. Das ist strenger, nicht lockerer. NEUE PRUEFUNG server/pruef-verborgen.mjs -- sechs Personen (darunter ein zweiter Admin), fuenf Schnittstellen, jede Rolle einzeln. Sie hat beim ersten Lauf sofort ein Loch gefunden, das ich sonst nicht bemerkt haette: Die ZENTRALE holt sich das Haus selbst und ging an allen Listenfunktionen vorbei -- Spicy Media sah VanVan dort als Segment im Team-Ring. Und beim Korrigieren der Pruefpfade fiel ein zweites auf: `darfEintragen` im Kalender liess die Leitung JEDEN eintragen, bevor ueberhaupt eine Liste befragt wurde. Eine Sichtbarkeitsregel, die nur beim Lesen gilt und nicht beim Schreiben, hat ein Loch in der Mitte. Die Pruefung hat eine Gegenprobe: Ein Manager MUSS DogFather in derselben Liste sehen -- sonst waere "sieht VanVan nicht" auch dann gruen, wenn die Listen leer zurueckkaemen. --- screen1 Punkt 1: Silber mit Babyblau --- "ich will dass diese farbe gemischt wird mit babyblau." #c7dcf4 statt #d8e0ec -- dieselbe Helligkeit, mit Blaurichtung. Nachgerechnet bleibt der Abstand zur naechsten Rolle bei 0,1790, immer noch weiter als das frueher benutzte Babyblau (0,1349). Gemischt ist es ausserdem SICHTBAR: Die Schiene laeuft von Silber nach Babyblau, und der Glanz traegt beide Toene. Eine Mischung, die man nur im Hexwert findet, ist keine. --- screen1 Punkt 2: das Wasserzeichen --- "soll viel groesser sein und nicht so abgecuttet sondern gut zu sehen sein." NACHGEMESSEN war es auf der Dashboard-Kachel zu 50 Prozent abgeschnitten, und zwar auf DREI Seiten: 36 px ueber dem oberen Rand, 44 rechts, 60 unten -- 220 px Zeichen auf einer 152 px hohen Kachel. UND ES GAB ZUM DRITTEN MAL DIESE WOCHE EINE DOPPELREGEL: 3600 Zeilen unter der sorgfaeltig begruendeten Fassung (156 px bei 0,14) stand eine zweite (118 px bei 0,085) mit derselben Spezifitaet. Sie gewann, und die Begruendung oben war wirkungslos. Am 08.09. hatte ich beim Wasserzeichen schon einmal genau so eine Doppelung gefunden -- und diese hier uebersehen. Jetzt eine Fassung, und die Groesse haengt an der KACHELHOEHE: Ein um 8 Grad gedrehtes Quadrat der Seite S braucht S x 1,129 Platz, also `min(132px, 100% - 30px)`. Nachgemessen 100 Prozent sichtbar statt 50, bei 0,14 statt 0,085 -- die sichtbare Flaeche hat sich verdoppelt. --- screen1 Punkt 3: die Personenliste in einer Kachel --- Die fuenf Rollengruppen standen als fuenf lose Abschnitte frei auf dem Hintergrundbild. Es ist aber EINE Liste mit fuenf Abschnitten. Jetzt eine Sammelkachel aus der Modulliste, mit dunklen Fugen statt Luft -- und dunkler als die Karten darin, wie eine Vitrine. --- screen1 Punkt 4: "Womit meldest du dich an?" --- Der einzige Satz auf der Anmeldeseite, der eine FRAGE stellt, stand als graue Feldbeschriftung da. Jetzt gebuerstetes Metall, ein Anschlag aus drei Kerben in Rot und Babyblau und eine auslaufende Linie -- dieselbe Sprache wie die Typenschilder im Workspace. Rueckfall vollwertig: Faellt `background-clip: text` aus, steht dort heller Text. Geprueft: pruef-verborgen (neu), pruef-rollen, pruef-start-ansicht, pruef-css-klassen, pruef-workspace-seiten, pruef-buehne, pruef-handy, pruef-chat, pruef-kalender -- alle in Ordnung. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
1ad22b55c4 |
Ring so gross wie die Uhr, Stunden geschaerft, Report-Karten gerade, Schutz wird Magenta
--- screen1: Glocke nach rechts, Ring so gross wie die Uhr ---
"dieser button links vom kreis soll rechts davon sein und der kreis
soll die gleiche groesse wie die uhr haben."
Die KAESTEN waren schon exakt gleich gross (248 x 248, seit gestern aus
einer Variablen). Der gezeichnete Ring aber nicht: Sein aeusserer Bogen
lag bei Radius 128 von 150, plus halbe Strichbreite also bei 132,5 --
88 Prozent des Kastens, gerendert 219 statt 248 px. Die Uhr daneben
fuellt ihren Kasten ganz aus, ihr Leuchtkranz ragt sogar 7 px darueber
hinaus. Zwei gleich grosse Kaesten mit ungleich grossem Inhalt sehen
ungleich gross aus.
Jetzt 145 statt 128 (aussen) und 120 statt 106 (die Segmente) --
dasselbe Verhaeltnis zueinander, nur bis an den Rand. 145 + 4,5 =
149,5 von 150: ein halber Pixel Luft, damit die runde Kappe nicht
abgeschnitten wird.
Die Glocke steht jetzt rechts vom Ring. Damit liegen beide Knoepfe
INNEN, zwischen den Instrumenten und dem Text -- vorher sassen sie an
den beiden Aussenkanten, so weit voneinander entfernt wie moeglich,
obwohl sie dasselbe tun: einstellen, was einen erreicht.
--- screen2: die Stunden ---
"die stunden muss noch perfektionnieren."
DIE LICHTKANTE WAR EIN KRATZER. Sie stand auf 50 Prozent Weiss bei 0,9
Breite. Auf den schmalen Sekunden- und Minutenbahnen ist das eine
Kante; auf dem 5,8 px breiten Stundenbalken war es ein zweiter,
weisser Balken auf dem roten. Der Grund ist Verhaeltnis UND Farbe:
0,9 von 3,2 sind 28 Prozent, 0,9 von 5,8 nur 16 -- aber die Stunde ist
die einzige deckende, kraeftig gefaerbte Bahn, und auf Rot faellt
dasselbe Weiss doppelt so stark auf wie auf Silber. Jetzt 22 Prozent
bei 0,6 Breite.
DER KOPF BLEIBT ROT. Er stand auf #ffd9dd, also fast weiss -- das
aktuelle Glied war zwar das hellste, hatte aber die Farbe seiner Bahn
verloren und sah aus wie ein Fremdkoerper zwischen den roten Balken.
Jetzt ein helles, deutliches Rot: Es hebt sich durch Helligkeit ab,
nicht durch eine andere Farbe.
--- screen3: die Report-Karten stehen gerade ---
"ich will dass alles passt, nicht bedeckt ist, schief steht oder zu
tief oder zu hoch."
NACHGEMESSEN, ALLE 17 KARTEN -- der Befund deckt sich genau mit dem,
was er beschreibt: Name und Zahl lagen 12 bis 28 px auf VERSCHIEDENEN
Hoehen, sie ueberlappten sich waagerecht (gemessener Abstand -183 bis
-524 px), und Karten in derselben Reihe waren verschieden hoch.
DIE URSACHE IST EINE ZEILE: `.kachel__zahl` steht `position: absolute`
bei top 13 / right 13. Auf der Startseite ist das richtig -- gleich
grosse Kacheln, einzeiliger Name. Hier bricht der Name um ("Community:
neue Eintraege"), die Karte waechst nach unten, die Zahl bleibt oben
kleben. Sie war ausserdem fuer die Hoehenrechnung unsichtbar, weshalb
es vorher schon eine `min-height` als Pflaster brauchte.
Jetzt ein echtes Raster: Name links (Zeile 1), Trend darunter, Zahl
rechts ueber beide Zeilen und mittig. `display: contents` auf dem
Wrapper -- so werden seine Kinder selbst zu Rasterfeldern, ohne dass am
HTML etwas geaendert werden muss und ohne dass die Startseite, die
dieselben Klassen benutzt, etwas davon mitbekommt.
Nachgemessen danach: 17 von 17 sauber -- nichts ragt heraus, nichts
ueberlappt, nichts abgeschnitten, kein Versatz ueber 5 px, und keine
Reihe mit ungleichen Hoehen.
--- screen4: Schutz & Regeln wird Magenta ---
"ich will dass die kategorie eine farbe bekommt die extrem krass
auffaellt. diese kategorie ist naemlich seeeehr wichtig."
MAGENTA, WEIL ES DAS EINZIGE IST, DAS ES SONST NICHT GIBT. Rot ist fuer
"ueberfaellig" und Spicy Media vergeben, Babyblau fuer DogFather, Lila
fuer Manager, Gruen fuer Scout, Bronze fuer Creator, Bernstein fuer
"dringend". #ff2fd0 stoesst mit keinem davon zusammen -- es faellt
nicht auf, weil es HELLER ist, sondern weil es einzigartig ist. Das
ist verlaesslicher: Helligkeit konkurriert mit den Nachbarn,
Einzigartigkeit nicht.
Gerechnet wie bei Ton 21: Abstand zum naechsten Nachbarn 0,1305 (die
Grenze im Satz liegt bei 0,0973), Buntheit 0,276 -- die hoechste im
ganzen Satz, das alte Gold lag bei 0,170 --, Kontrast 6,00:1. Von
sieben Kandidaten sind drei an der Abstandsgrenze gescheitert. Das
Saeuregelb #e0ff00 waere lauter gewesen (16,86:1), haette sich aber
mit dem Bernstein von "dringend" und dem Gold der Nachbarkacheln um
dieselbe Wirkung gestritten. Die Kachel bleibt gebaut wie alle
anderen; was sie heraushebt, ist die Farbe, keine Sonderform.
--- Eine Rueckwirkung, die pruef-buehne gefunden hat ---
Die Typenschilder von gestern nutzen `background-clip: text` -- dafuer
MUSS `color: transparent` sein. pruef-buehne las genau dieses `color`,
machte daraus Schwarz und meldete 1,07:1 fuer Text, der hell und gut
lesbar ist. Fuenf Fehlalarme auf drei Seiten.
Eine Warnung, die bei richtiger Arbeit anschlaegt, wird abgeschaltet.
Sie ist deshalb nicht weichgemacht, sondern GENAUER geworden: Bei
Verlaufsschrift zaehlt jetzt der DUNKELSTE Farbstopp der ersten
Hintergrundebene -- der schlechteste Punkt, den es auf dieser Schrift
wirklich gibt. Damit meldet start.html 4,74:1 (noetig 4,5), die
Pruefung findet also weiter die engste Stelle.
UND DIE GEGENPROBE HAT SOFORT EINEN FEHLER IN MEINEM EIGENEN CODE
GEFUNDEN: Ich suchte das Ende der ersten Ebene mit `"),"` -- diese
Zeichenfolge steht aber schon am Ende des ERSTEN `rgb(...)`. Die
Messung las damit immer nur den ersten Stopp und haette einen dunklen
Verlauf fuer hell gehalten. Jetzt wird ueber Klammern gezaehlt. Der
Helfer steht einmal und wird als Quelltext in beide Seiten-Aufrufe
gereicht -- zwei Kopien waeren zwei Gelegenheiten auseinanderzulaufen.
Geprueft: pruef-buehne (mit neuer Gegenprobe), pruef-start-ansicht,
pruef-css-klassen, pruef-handy, pruef-workspace-seiten -- alle in
Ordnung.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
7de32a5ec7 |
Punkt 15: Der Chat bekommt Suche, Antworten mit Zitat und die Ungelesen-Linie
Wunsch Filipe: "ich will dass du diese seite viel krasser und detaillierter machst, ich will dass du dich informierst und alles reinsetzt was wir noch gebrauchen koennten." NICHT ALLES, SONDERN WAS TAEGLICH FEHLT. Der Chat konnte schon Raeume, Verlauf, Gelesen-Stand, Live-Zustellung, Gruppen und Zuruecknehmen. Drei Dinge fehlten, und jedes davon kostet ohne es echte Zeit: 1. SUCHE IN DEN NACHRICHTEN. Ein Chat ohne sie ist ab dem zweiten Monat ein Archiv, in dem man nichts findet. Ein Suchfeld gab es -- es durchsuchte aber nur die NAMEN der Gespraeche, also die kleinere Haelfte. Jetzt durchsucht dasselbe Feld beides und zeigt die Fundstellen UNTER der Gespraechsliste: Wer "Patrick" eingibt, will vielleicht das Gespraech und vielleicht die Nachricht -- ein Umschalter haette ihn zwingen wollen, das vorher zu wissen. 2. ANTWORTEN MIT ZITAT. Zu zweit weiss man meistens, worauf sich etwas bezieht. In einer Gruppe laufen drei Faeden parallel, und "ja, mach das" kann alles heissen. Das Zitat steht IN der Blase (es gehoert zur Antwort, nicht darueber) und fuehrt per Klick zur Stelle. 3. DIE LINIE "AB HIER NEU". Wer nach zwei Tagen zurueckkommt, sucht sonst die Stelle, an der er aufgehoert hat, indem er Uhrzeiten liest. BEWUSST NICHT GEBAUT: Anhaenge (dafuer gibt es den Dateien-Bereich mit Rechten und Ablauf), Reaktionen (eine vierte Sache, bevor die drei sich bewaehrt haben) und Tipp-Anzeigen (dauernder Verkehr fuer eine Auskunft, die man in zwei Sekunden ohnehin sieht). DIE SICHERHEIT DER SUCHE STEHT IM JOIN, nicht in einer nachtraeglichen Pruefung: `chat_teilnehmer` wird mit der eigenen Personenkennung verbunden, und was dort nicht drinsteht, kommt gar nicht erst aus der Datenbank. Ein Filter, der erst hinterher aussortiert, ist eine Zeile davon entfernt, vergessen zu werden. Ebenso beim Zitat: Worauf geantwortet wird, muss im SELBEN Raum liegen -- sonst koennte jemand die Kennung aus einem fremden Gespraech mitschicken, und beim Empfaenger stuende ein Zitat aus einem Raum, den er nie gesehen hat. DREI FEHLER, DIE DER DURCHLAUF GEFUNDEN HAT: 1. `ESCAPE '\'` IN EINEM TEMPLATE-LITERAL. Dort ist `\'` eine Fluchtsequenz fuer das Anfuehrungszeichen -- SQLite bekam ein LEERES Fluchtzeichen und antwortete "ESCAPE expression must be a single character". Die Suche war damit komplett tot. Kein Syntaxfehler, kein Warnhinweis: Erst der Aufruf mit echten Daten hat es gezeigt. 2. DIE MASKIERUNG KANNTE ZWEI VON DREI ZEICHEN. `%` und `_` waren dabei, der Backslash nicht -- ausgerechnet das Fluchtzeichen selbst. Geprueft wird das jetzt an der ZEILE AUS DER DATEI, nicht an einem Nachbau: Mein erster Test hat die Maskierung nachgebaut und dabei die Shell-Maskierung mitgeschleppt -- er meldete einen Fehler, den nur er hatte. 3. DIE UNGELESEN-LINIE SCHIEN NICHT ZU FUNKTIONIEREN. Sie tat es -- mein Testaufbau war falsch: Filipes Seite war noch offen, die neuen Nachrichten kamen ueber den Live-Strom an und wurden sofort als gelesen gemeldet. Es gab schlicht nichts Ungelesenes. Erst als er die Seite verlaesst, bevor Patrick schreibt, steht die Linie da -- und zwar genau vor "Neu von Patrick, eins", und beim zweiten Oeffnen ist sie weg. Der Gelesen-Stand wird deshalb beim OEFFNEN mitgeschickt, bevor er gesetzt wird -- eine Zeile spaeter waere er immer die letzte Nachricht, und die Linie staende nie irgendwo. Ohne Volltextindex, mit Absicht: `LIKE` liest die Tabelle, und bei einem Team dieser Groesse sind das einige tausend Zeilen. Ein FTS5-Index waere eine zweite Tabelle, die synchron gehalten werden muss -- genau daran gehen solche Sachen kaputt. Wenn der Verlauf sechsstellig wird, ist das der Zeitpunkt dafuer, nicht heute. Geprueft: pruef-chat, pruef-chat-optik, pruef-css-klassen, pruef-workspace-seiten, pruef-handy -- alle in Ordnung. Dazu im Browser durchgespielt: Zitat gesetzt und gelesen, Suche nach "Bitrate" (1 Treffer), nach "100 %" (1 Treffer -- die Maskierung haelt), nach Unsinn (0), einbuchstabige Suche (zu kurz), Antwortleiste mit dem richtigen Namen, Ungelesen-Linie an der richtigen Stelle und beim zweiten Oeffnen weg. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
e616d88a30 |
Punkt 7: Vier Koennensstufen in den Bereichslisten -- Anfaenger bis Meister
Wunsch Filipe: "ich will dass es in diesen kategorien ... kategorien
gibt wie jetzt, aber fuer anfaenger, fortgeschrittene, profis .... falls
es noch eine kategorie gibt fuege ruhig hinzu. informiere dich so krass
wie es nur geht ... und dan will ich dass du das perfekt alles aufbaust
mit aufgaben und so."
VIER STUFEN, UND DIE VIERTE IST NICHT AUSGEDACHT. In den gaengigen
Kompetenzmodellen (Dreyfus) folgt auf "kompetent" eine Stufe, auf der
es nicht mehr um das eigene Koennen geht, sondern darum, dass es OHNE
einen weiterlaeuft. Genau daran haengen die elf Punkte der obersten
Stufe: Vorlagen, eingewiesene Vertretung, abgelegte Loesungen.
Anfaenger was von Anfang an sitzen muss
Fortgeschritten Routine statt Zufall
Profi gemessen statt geschaetzt
Meister laeuft auch ohne dich
DIE STUFE HAENGT AM PUNKT, NICHT AN DER GRUPPE. Eine Gruppe ist ein
ABLAUF ("Vor der Sendung"), eine Stufe ist ein KOENNEN. Als Gruppen
gebaut waeren es zwoelf Abschnitte statt drei, und dieselbe Frage
stuende viermal da. So bleibt der Ablauf die Gliederung und die Stufe
ein Filter darueber.
DIE INHALTE SIND RECHERCHIERT, NICHT AUSGEDACHT. 47 vorhandene Punkte
haben eine Stufe bekommen, 28 neue sind dazugekommen -- ueberwiegend
auf Profi und Meister, weil der Bestand dort duenn war. Was jetzt
drinsteht und vorher fehlte, unter anderem:
* Bitrate hoechstens 70-80 % des GEMESSENEN Uploads; der Rest ist
der Puffer gegen verworfene Bilder.
* Keyframe-Abstand zwei Sekunden -- alles andere kann beim
Zuschauer zu Puffern oder gar nicht erst zum Abspielen fuehren.
* Tonfilter in der Reihenfolge Rauschunterdrueckung, Kompressor,
Rauschsperre: Ein Kompressor davor hebt das Rauschen mit an.
* Hardware-Encoder statt Prozessor -- der groesste Einzelgewinn an
Stabilitaet.
* Verworfene Bilder ABLESEN: Leitung und Kodierung sind zwei
verschiedene Fehler mit zwei verschiedenen Loesungen.
* Eskalationsleiter in vier Stufen (ansprechen, loeschen, Auszeit,
Sperre) -- vorher festgelegt, weil Ungleichbehandlung das ist, was
Communitys spaltet.
* Moderatoren EINGEWIESEN, nicht nur ernannt: Regeln schriftlich,
Eskalationsleiter, Werkzeuge einmal gezeigt.
* Privater Probelauf statt Programmvorschau -- erst der zeigt, was
beim Zuschauer ankommt.
Zahlen: LIVE 33 Punkte (11/10/8/4), Community 23 (7/7/5/4), Technik 19
(6/6/4/3). Jeder Punkt hat genau eine Stufe -- nachgemessen, nicht
angenommen.
DIE VORGABE IST "ALLE". Ein Filter, der beim Oeffnen schon etwas
versteckt, laesst einen Punkte suchen, die man gestern noch gesehen
hat. Die Gruppenzahlen zaehlen mit dem Filter mit; eine Gruppe, in der
nichts uebrigbleibt, sagt das in einem Satz statt leer dazustehen.
Die vier Stufenfarben sind GELIEHEN, nicht ausgesucht: dieselben, die
auf der Uebersicht schon "offen / dringend / laeuft / erledigt"
tragen. Wer die eine Seite kennt, liest die andere ohne Legende.
ZWEI EIGENE FEHLER UNTERWEGS:
1. NAMENSKOLLISION. Ich habe die Marke `fest-punkt__stufe` genannt --
den Namen gibt es dort laengst fuer den BEARBEITUNGSstand (Offen /
Passt so / Verbessern). Gemessen standen danach 66 Marken an 33
Punkten, und mein neues CSS faerbte den alten Behaelter mit. Heisst
jetzt `__koennen`. Zwei verschiedene Dinge unter einem Namen ist
derselbe Fehler wie zwei Regeln fuer dieselbe Sache, nur eine Ebene
frueher.
2. SCHRIFTGROESSE. Die Marke stand auf 0,66 rem = 10,56 px.
pruef-css-klassen hat es sofort gemeldet (44 statt 43 Stellen unter
11,5 px). Jetzt 0,72 rem.
Geprueft: pruef-checkliste, pruef-css-klassen, pruef-workspace-seiten,
pruef-schulung -- alle in Ordnung. Dazu alle drei Bereiche im Browser
durchgefiltert.
Quellen der Recherche: obsproject.com (NVENC/Encoder), dacast.com und
obs-versions.com (Bitrate, Keyframe, Tonfilter), switcherstudio.com
(Probelauf), help.twitch.tv und sendbird.com (Moderation,
Eskalation), jeffbullas.com (Einweisung von Moderatoren).
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
6815ba89ba |
screen1/2/3: Zahlen werden Ziele, Titel werden Typenschilder, DogFather wird Silber
--- screen1: die sieben Zahlen fuehren zu ihren Aufgaben ---
"wenn ich auf die druecke soll ich auf zu denen punkten gebracht
werden."
Der Weg dahin gab es laengst: `aufgaben.html?zeigen=<schluessel>`
springt zu den passenden Karten und legt eine Zeile darueber, was
gezeigt wird. Nur waren die sieben Karten `<li>` ohne Link -- die
Auskunft war da, der Weg dorthin nicht.
Zwei Schluessel fehlten und sind nachgetragen: "heute" (die Karten
tragen dafuer jetzt `data-heute`, denn "heute faellig" ist ein eigener
Zustand und kein Sonderfall von "ueberfaellig") und "abgebrochen" --
das klappt zusaetzlich den Kasten auf, in dem die Abgebrochenen
stehen. Ein Sprung in einen zugeklappten Kasten laesst einen glauben,
der Knopf sei kaputt.
EIN <a> IM <li>, NICHT DAS <li> KLICKBAR: Ein Listenpunkt mit einem
Klick-Zuhoerer ist fuer Tastatur und Vorleseprogramm kein Ziel. Die
Trefferflaeche wird ueber ein durchsichtiges `::after` auf die ganze
Kachel gestreckt -- im ersten Anlauf stand dort `padding: inherit`,
was die 14/16 der Kachel ein zweites Mal aufgetragen und sie siebenmal
um 28 px verbreitert haette.
DIE NULL BLEIBT EIN LINK. Der Sprung zeigt dann eine leere Spalte mit
der Zeile "Aufgaben, die offen sind" -- das ist eine Antwort. Ein
toter Knopf ist keine.
--- screen2: die Kategorietitel werden Typenschilder ---
"die titel von den kategorien sollen spezieller und geiler sein."
Fase statt Rundung (die Pille war das einzige Rund auf einer Seite aus
abgeschraegten Platten), ein gepraegter Anschlag aus drei Kerben
statt eines Strichs, gebuerstetes Metall in der Schrift und eine
auslaufende Linie nach rechts.
UND DABEI EIN FUND: Der "leuchtende Strich" vor "Was ist dran" und
"Deine Aufgaben" wurde NIE GEZEICHNET. `.zahlen-block .feldschild`
setzt `display: flex`, damit das Pseudoelement eine Box bekommt --
rund 1200 Zeilen spaeter steht `.inhalt .feldschild { display: block }`
mit derselben Spezifitaet, und die spaetere gewinnt. Das Schild war
`block`, das Pseudoelement damit `inline`, und ein Inline-Kasten
ignoriert `width` und `height`. Aufgefallen ist es nur, weil mein
neuer Anschlag ebenfalls unsichtbar blieb und die Messung sagte: Der
Text beginnt bei x=12, also genau an der Polsterung -- davor belegt
nichts Platz.
Die Gegenprobe hat mich dabei vor einer falschen Reparatur bewahrt:
Ich hatte den Textverlauf (`background-clip: text`) im Verdacht.
Einmal mit und einmal ohne gemessen -- in beiden Faellen x=12. Damit
war die Ursache ausgeschlossen, bevor ich an der falschen Stelle
gearbeitet habe.
--- screen3: DogFather wird Silber, der Husky wird das echte Logo ---
"dieses husky symbol soll ersetzt werden durch den husky oben in der
leiste. und die farbe von der rolle und die barre soll so richtig geil
silber sein ... und der husky soll eine geile babyblau [Auge] haben."
Damit kehrt die Rolle zu dem zurueck, was im allerersten Auftrag stand
("husky: silber und blaue augen").
DAS ZEICHEN war eine geometrische Eigenkonstruktion -- ein Fuenfeck mit
zwei dreieckigen Ohren. Ordentlich gebaut, aber nicht DER Husky: Oben
in der Leiste steht die richtige Marke, und zwei verschiedene Huskys
auf einer Seite sind einer zu viel. Jetzt das echte Logo als <image>,
eingefaerbt mit `feComponentTransfer` -- eine zweistufige Tabelle
bildet Schwarz auf dunklen Stahl und Weiss auf Silber ab. Ein
`feColorMatrix` koennte das nicht; er mischt nur linear und zoege die
Mitteltoene flach.
DAS AUGE IST GEMESSEN, NICHT GESETZT: Ein Durchlauf ueber die
Bildpunkte hat die Pupille als einzige dunkle Insel gefunden, die
ringsum von Hellem umgeben ist -- bei 165/258 von 512, also 32,2 % und
50,4 %.
DIE ROLLENFARBE NACHGERECHNET, weil Silber gefaehrlich ist: Es hat
kaum Buntheit und koennte neben einer anderen Rolle verschwinden. In
OKLab liegt #d8e0ec 0,1901 von seinem naechsten Nachbarn (Scout)
entfernt -- das bisherige Babyblau lag bei 0,1349. Die fuenf Rollen
sind dadurch BESSER auseinanderzuhalten als vorher. Kontrast 14,41:1.
"wie mit sternen" ist als GLANZ gebaut, nicht als Funkeln: ein
schmales schraeges Spitzlicht und drei winzige Lichtpunkte, alles
still. Ein wanderndes Glitzern auf der Anmeldeseite waere genau das,
was die Hausregel verbietet.
Nebenbei: `rs-silber` faerbte den alten Husky und wird jetzt nirgends
mehr benutzt -- entfernt statt liegengelassen.
--- Aufraeumen ---
`ruf.png` (ein Messbild von mir) war ueber `git add -A` ins Repo und
bis auf den Server gewandert -- die Loeschung kam eine Zeile zu spaet.
Entfernt, und `.gitignore` sperrt jetzt das Praefix `zz-`, das solche
Dateien ab sofort tragen. Eine Regel im Werkzeug ist besser als eine,
an die ich mich erinnern muss.
Geprueft: pruef-rollen (97), pruef-start-ansicht, pruef-css-klassen,
pruef-workspace-seiten -- alle in Ordnung. Dazu die sieben Links und
beide neuen Sprungziele im Browser durchgeklickt.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
cccafd2c31 |
Sechs Wuensche: Hintergruende, Knopfverteilung, Universum, Uhrkoepfe, Knallrot
--- screen3 + screen1: die Hintergruende draengeln nicht mehr --- "die hintergrunde sollen ueberall so sein dass die sich nicht in den vordergrund draengeln." / "mach den hintergrund von dieser kachel dunkler, so dass die die kacheln drin viel mehr auffallen." `--raster` stand auf .26 Deckkraft -- auf dunkler Flaeche kein Hauch mehr, sondern ein gezeichnetes Gitter. Im Tagdialog lief es sichtbar durch die Ueberschrift, in den Sammelkacheln stand es VOR den Karten darin. Jetzt .09: Man sieht eine Struktur, man zaehlt keine Linien. Eine Zahl fuer das ganze Haus -- sie steht einmal in module.css und wird an fuenf Stellen benutzt. Die Anlasskachel im Kalender lag mit rgba(19,26,38,.88) auf demselben Helligkeitsniveau wie die Karten darin: keine Vitrine, sondern eine dritte Flaeche gleicher Lautstaerke. Jetzt fast schwarz. An den Karten musste dafuer nichts geaendert werden -- der Abstand entsteht von selbst. --- screen2: ein Knopf wandert nach links --- "eins von diesen buttons soll links bei dem anderen kreis sein." Die GLOCKE geht nach links zum Ring, der WECKER bleibt rechts bei der Uhr. Das ist nicht ausgewuerfelt: Der Wecker ist eine Uhrzeit. Die Glocke entscheidet, ob man ueberhaupt etwas ueber sein Team erfaehrt -- und der Ring links zeigt genau das. Die Kachel ist damit spiegelsymmetrisch belegt: 48 px Knopf + 14 px Abstand + 248 px Instrument auf beiden Seiten. Genau das rechnet `--spalte`. Die Zentrierung des Rings ist weggefallen -- sie war noetig, solange er allein in einer fuer Instrument PLUS Knopf bemessenen Spalte stand. Der reservierte Platz schrumpft von 104 auf 48 px je Seite; die Begruendung fuer das Reservieren bleibt: Ein Platz, der erst mit der Antwort entsteht, laesst die Zeile springen. --- screen4: zwei Chilis und zwei Huskys dazu --- "setz in den hintergrund noch 1-2 peperonis und dan das logo von dogfather, also nur den husky." DER HUSKY IST EINE MASKE, KEIN BILD. Die Datei ist schwarz-weiss und freigestellt (nachgemessen: 49 % durchsichtig). Als Hintergrundbild bei 15 % verschwaenden die schwarzen Flaechen im dunklen Grund und uebrig blieben die hellen -- ein zerrissener Umriss, kein Hund. Als Maske ueber einer Farbflaeche wird daraus eine geschlossene Silhouette in DogFathers Babyblau. Im Universum schweben jetzt beide Marken in ihren beiden Farben: sieben Chilis rot, zwei Huskys blau. --- screen5: die Punkte sind ersetzt, das letzte Glied leuchtet --- "ich will dass du die punkte ersetzt und immer der letzte soll mehr strahlen oder so." / "alles ist mega ausser die stunden muss du noch perfektionnieren." DIE DREI UMLAUFENDEN PERLEN SIND WEG -- samt 60 Zeilen Rechnung. Sie waren ein zweites Ding an einer zweiten Stelle: eigene Uhr ab dem ersten Takt (weil die volle Unixzeit `rotate(1.07333e+10deg)` ergab), eigener Startwinkel je Bahn, drei Winkel, die die kleineren Einheiten anteilig mittragen mussten. All das war noetig, WEIL der Kopf neben der Reihe herlief statt Teil von ihr zu sein. Genau deshalb trugen sie am 08.09. noch die alten Farben, als die Bahnen getauscht wurden. Jetzt zeichnet eine zweite SVG-Lage genau EIN Glied heller -- dasselbe, das die Reihe darunter zuletzt gesetzt hat, aus denselben Zahlen. Sie kann gar nicht danebenstehen. Heller statt groesser: Waere der Kopf groesser, waere er ein Fremdkoerper in der Reihe. DIE STUNDEN WAREN BREITER ALS LANG -- 5,5 lang bei 7 breit, also 0,79:1. Ein Segment, das breiter ist als lang, liest sich als Klotz quer auf der Bahn statt als Balken entlang. Und weil die Kantenlage nur 0,4 versetzt ist, lief der 0,9 breite Lichtstrich MITTEN DURCH jeden Balken statt an seiner Kante. Jetzt 10 lang bei 5,8 breit (1,7:1), und der Kantenversatz ist nach Bandbreite gestaffelt: (Breite - 0,9) / 2, also 0,75 / 1,65 / 2,05 zusaetzlich zur Gruppe. --- screen6: die Scout-Pipeline wird knallrot --- "die farbe von dieser kategorie soll knall rot sein." Die anderen zwanzig Kachelfarben sind gerechnet (OKLab, groesstmoeglicher Abstand). Diese eine ist gewuenscht -- und wurde deshalb GEGEN den Satz geprueft statt eingetragen: Der engste vorhandene Abstand liegt bei 0,0973. #ff1f2e kommt seinem naechsten Nachbarn auf 0,1228 nahe, ist also weiter entfernt als das engste vorhandene Paar. Kontrast 5,01:1 (noetig 4,5). Von sechs geprueften Rottoenen der mit dem groessten Abstand UND genug Kontrast. tools/kachel-farben.mjs weiss jetzt davon: Ein kuenftiger Lauf wuerde wieder Rosa vorschlagen, und das waere eine stille Ruecknahme einer ausdruecklichen Entscheidung. --- Ein Messfehler, der festgehalten gehoert --- Beim Pruefen von screen4 meldete meine Foto-Methode vier Beschriftungen unter 4,5:1 -- bei einem Verlust von 0,00 bis 0,15 durch das Universum. Dass die Ursache nicht das Universum sein konnte, stand damit schon in den Zahlen. Exakt gerechnet (Vordergrundfarbe gegen die tatsaechliche Flaeche darunter) liegen dieselben Texte bei 9,13:1 bis 10,76:1. Die Foto-Methode mittelt ueber alle helleren Bildpunkte, und bei duenner Grossbuchstabenschrift ist die Haelfte davon halb ausgeleuchtete Kantenpunkte. Fuer grosse Schrift taugt sie, fuer kleine Versalien meldet sie systematisch zu wenig. Haette ich ihr geglaubt, haette ich vier Farben "repariert", die in Ordnung sind. Geprueft: pruef-start-ansicht, pruef-css-klassen, pruef-kalender, pruef-buehne, pruef-handy, pruef-workspace-seiten, pruef-tagesruf -- alle in Ordnung. Dazu Ring und Uhr auf 248/248 nachgemessen, die Kopf-Muster gegen die Uhrzeit nachgerechnet (01:24:59 -> Sekunde bei 281,115, Minute bei 96,76, Stunde bei 16,493) und die Kachelfarbe gegen alle zwanzig anderen in OKLab geprueft. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
ef6bf0d011 |
screen1 (neu): Aus dem Siegel wird eine Urkunde
Filipe: "wenn die kachel da ist soll die viel spezieller und geiler
sein. wirklich speziell machen bitte."
In der Nacht ist aus dem unsichtbaren Kasten ein Siegel geworden --
Flaeche, gruene Stempelschiene, gepraegte Muenze. Das war die halbe
Antwort. "Wirklich speziell" heisst: Es soll nicht nur ANDERS aussehen
als die Kacheln daneben, sondern nach etwas Bestimmtem.
ES IST EINE QUITTUNG. Alles auf dieser Seite ist eine Aufgabe -- etwas,
das noch zu tun ist. Dieses eine Feld sagt das Gegenteil. Die
Formensprache dafuer gibt es seit dreihundert Jahren und sie ist
ueberall dieselbe: Urkunde, Quittung, Wertpapier. Drei Merkmale machen
sie aus, alle drei sind jetzt gebaut:
1. GUILLOCHE -- das feine, sich kreuzende Linienwerk auf
Wertpapieren. Zwei Scharen in flachen gegenlaeufigen Winkeln.
2. DIE RAENDELUNG der Muenze -- der gekerbte Rand echter Geldstuecke,
28 Kerben, nur am Rand.
3. DIE PERFORATION rechts -- die Reisskante eines abgetrennten
Abschnitts. Sie sagt im Bild, was der Satz sagt: abgeschlossen.
KEIN EINZIGES NEUES ELEMENT: alles auf Pseudoelementen, die es schon
gab. Fuer eine Zierde gehoert nichts in den Dokumentbaum.
DREI ANLAEUFE, WEIL ICH ES DREIMAL ZU LAUT HATTE -- und jedes Mal hat
erst das Bild es gezeigt, nie eine Zahl:
* Die Raendelung lag mit `z-index: -1` HINTER der Muenze. Deren
Flaeche ist halbdurchsichtig, also schienen die Kerben ueber die
ganze Scheibe durch: eine Sonne mit Strahlen statt einer Muenze.
Jetzt liegt sie davor und wird maskiert.
* Das Maskenband war mit 70..74 % rund 0,6 px breit -- rechnerisch
ein Ring, auf dem Bildschirm ein Hauch. Jetzt 60..100 %, also
6,4 px, dasselbe Verhaeltnis wie an einem echten Geldstueck.
* Die Guilloche stand bei 4,5 % in Gruen: kein Material mehr,
sondern ein sichtbares Rautennetz, das die ganze Kachel nachfaerbte.
Jetzt 2 % in Silber und mit 9 statt 7 px Abstand -- dichte Linien
erzeugen mit dem Pixelraster ein Moiré, und das flimmert beim
Rollen.
Und noch ein Ausschnitt-Fehler wie gestern: Ich habe den ersten
Nachweis auf 640 px beschnitten und mich gewundert, wo die
Reisskante bleibt -- sie liegt am rechten Ende der Kachel, also
ausserhalb. Muenze und Perforation werden jetzt in ZWEI Ausschnitten
geprueft, weil sie an entgegengesetzten Enden liegen.
Kontrast unveraendert bei 14,47:1 (fett) und 7,39:1 (still).
Geprueft: pruef-start-ansicht, pruef-css-klassen, pruef-buehne -- alle
in Ordnung.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
8c7dc1fa94 |
Uhr und Ring sind jetzt gleich gross -- aus EINER Variablen
Wunsch Filipe: "die uhr und der [ring] sollen noch bissl groesser sein und ... dan auch am ende die selbe groesse haben bitte. sehr wichtig." WARUM SIE ES VORHER NICHT WAREN: Der Ring stand in heim.css (232 / 220 / 190), die Uhr in start.css (164 / 118). Zwei Dateien, zwei Zahlensaetze, und keine Stelle, an der jemand beide zugleich gesehen haette. Nachgemessen lagen sie am Rechner 68 px auseinander. Das war kein Versehen an einer Zahl, sondern die zwangslaeufige Folge davon, dass es zwei gab. Jetzt entscheidet `--instrument` ueber beide -- und ueber die Spalten, in denen sie sitzen. Gemessen: 248/248 am Rechner, 224/224 am Tablet, 196/196 am Handy. Ein Auseinanderlaufen ist nicht mehr moeglich, sondern muesste absichtlich geschrieben werden. Die alte Angabe in start.css ist ENTFERNT, nicht ueberschrieben: eine wirkungslose Zahl, die richtig aussieht, ist genau die Falle. ZWEI FOLGEN, BEIDE ERST IM BILD SICHTBAR: 1. DIE UHR HING 32 px UEBER DIE KACHELKANTE. Die rechte Spalte war auf das Instrument bemessen (248), braucht aber auch die Knopfreihe daneben (48 + 14 Abstand = 310). Die Seite liess sich trotzdem nicht seitlich schieben -- der Ueberstand lag INNERHALB der Kachel, also hat keine vorhandene Pruefung angeschlagen. Jetzt ist die Spaltenbreite abgeleitet (`--spalte`), nicht getippt. Beide Aussenspalten bekommen sie, obwohl links keine Knoepfe stehen: sonst saesse der Titel nicht mehr mittig. Der Ring wird in seiner Spalte zentriert. 2. DIE ZIFFERN WAREN ZU KLEIN. Sie standen in `rem` -- in einer Uhr von 164 px richtig, in einer von 248 verloren (29,76 px in einem 248-px-Zifferblatt, die Mitte eine leere Flaeche). Sie haengen jetzt ebenfalls an `--instrument`. Der Faktor ist nachgesehen, nicht gerechnet: 0,145 war noch zu klein, 0,168 fuellt die Mitte, ohne an die innerste Bahn zu stossen (Stundenbalken liegen bei Radius 31,5 von 50). Geprueft: pruef-start-ansicht (kein Text abgeschnitten, keine Konsolenfehler), pruef-handy, pruef-workspace-seiten (18 Seiten, Ueberstand 0 px), pruef-css-klassen -- alle in Ordnung. Dazu 1500/900/390 px einzeln nachgemessen: Uhr und Ring auf den Pixel gleich, Abstand zur Kachelkante 30 bzw. 64 px. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
b1810ddbc5 |
screen6: Die beiden Bestaetigungen werden zu Unterschriften
Filipe, mit Bildschirmfoto der beiden Felder: "die sollen geiler sein."
WAS SIE WIRKLICH SIND, stand nur im Klassennamen. Auf einer
Unterweisung bestaetigen ZWEI Personen, dass sie sie durchgegangen
sind -- der Creator und seine Betreuung. Das ist kein Statusfeld, das
ist eine Gegenzeichnung. Gezeichnet waren sie als zwei graue Kaesten
mit runden Ecken, die man auf dem dunklen Grund kaum sah. Zwei
Rechtecke sagen "hier steht etwas". Eine Unterschriftszeile sagt "hier
fehlt jemand".
ZWEI ZUSTAENDE, ZWEI BILDER -- und beide gab es im Code laengst als
`data-da="ja"/"nein"`, nur unterschieden sie sich um einen Hauch Gruen:
OFFEN eine gestrichelte Linie mit einem leeren Platz darauf. Sie
WARTET sichtbar. Der Federstrich links deutet an, wo man
ansetzt.
DA eine durchgezogene gruene Linie, der Name darueber, und ein
gepraegtes Siegel mit Haken -- wie ein abgestempeltes
Formular.
GLEICHE HOEHE IN BEIDEN ZUSTAENDEN, und das ist keine Kosmetik: Die
Felder stehen nebeneinander in einem Raster. Waere das unterschriebene
hoeher, spraenge die Karte in dem Moment, in dem jemand unterschreibt
-- unter dem Finger dessen, der gerade gedrueckt hat.
KEINE ZWEITE FASE. Die Karte drumherum steht schon in der Modulliste.
Eine abgeschraegte Ecke IN einer abgeschraegten Ecke liest sich als
Fehler, nicht als Absicht. Das Feld traegt deshalb die andere
Formensprache des Hauses: die Linie.
DER HAKEN IST EINE MASKE, kein Zeichensatz-Haken (der sieht in jeder
Schrift anders aus und faellt weg, wenn eine fehlt) und kein Bild
(eine Datei mehr fuer fuenfzehn Pixel). Erst stand er nur im
Kommentar, waehrend im Code eine leere Muenze lag -- nachgebaut, bevor
es committet wurde. Ein Kommentar, der mehr behauptet als der Code
tut, ist schlimmer als keiner.
ZWEI ANSICHTEN NACHGEMESSEN: Auf 1400 px nebeneinander, auf 390 px
untereinander. Das Siegel sass im ersten Anlauf mit
`translate(100%)` AUSSERHALB des Feldes -- breit sah das gut aus,
schmal waere es aus der Karte gelaufen. Jetzt sitzt es innen; die
Seite laesst sich bei 390 px nicht seitlich schieben.
(Fuer die Ansicht musste ich Testdaten anlegen -- ohne Unterweisung
gibt es keine Unterschriften, und ein Bildschirmfoto von einem leeren
Bereich beweist nichts. Die Daten liegen in der Wegwerf-Datenbank der
Pruefung, nicht im echten System.)
Geprueft: pruef-schulung, pruef-css-klassen -- beide in Ordnung.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
77ff1a1b52 |
screen1: Die vier Tafeln der Calls-Seite bekommen eine Flaeche und ihre Farbe
Filipe, mit Bildschirmfoto der vier Reiter: "lass die viel geiler aussehen bitte." `.gruppe[data-gruppe]` steht in der Modulliste und bekommt von dort Fase, Kantenlicht und Eckwinkel -- aber die Modulliste gibt nur die FORM. Die Flaeche bringt jedes Bauteil selbst mit, und hier stand nur `margin-bottom`. Die vier Reiter waren damit Silhouetten ohne Koerper: Das Hintergrundbild lag mitten in ihnen. DERSELBE FEHLER ZUM DRITTEN MAL IN DIESER NACHT -- beim Entscheidungsblock auf der Report-Seite, bei der Anlasskachel im Kalender und jetzt hier. Die Ursache ist jedes Mal dieselbe: Wer ein Bauteil in die Modulliste aufnimmt, haelt es fuer fertig gestaltet. Es hat dann eine Silhouette und keinen Koerper. Das gehoert in die Uebergabe, damit es beim vierten Bauteil nicht wieder passiert. DIE VIER FARBEN GAB ES SCHON -- an der falschen Stelle. `#f0c48a` fuer "Protokoll fehlt" und `#79d1a2` fuer "Festgehalten" standen bereits im Code, aber nur an den EINTRAEGEN in der aufgeklappten Tafel. Der Reiter selbst, den man zuerst sieht und der oft der einzige ist (drei von vier sind zugeklappt), trug sie nicht. Jetzt stehen sie einmal als `--gton` und faerben beides: die Flaeche und ueber `--ton` das Kantenlicht aus der Modulliste. Die Farben sind zugeordnet, nicht ausgesucht: Bernstein "etwas ist offen", Babyblau "kommt noch", Lila "laeuft von allein", Gruen "erledigt". EINE LEERE TAFEL TRITT ZURUECK -- dieselbe Ueberlegung wie bei den Zahlen auf der Uebersicht: Null darf leise sein. Vier gleich helle Reiter waeren vier gleich laute Rufe. EIN IRRTUM UNTERWEGS, DER FESTGEHALTEN GEHOERT: Nach der Aenderung sah ich im weiten Bildschirmfoto immer noch das Motiv "durch" die Tafeln scheinen und hielt die Reparatur fuer wirkungslos. Es waren die LUECKEN ZWISCHEN den Tafeln -- dort gehoert der Hintergrund hin. Erst ein enger Ausschnitt einer einzelnen Tafel hat es geklaert. Ein zu weiter Ausschnitt luegt genauso zuverlaessig wie ein zu schmaler (heute Nacht schon einmal, beim Messstreifen am linken Bildrand). Geprueft: pruef-call-kategorien, pruef-css-klassen, pruef-buehne -- alle in Ordnung. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
a4db78e937 |
screen2: Der Tagdialog bekommt die Silhouette des Hauses
Filipe: "die ganze kachel und button sollen geiler aussehen." Der INHALT war schon gebaut -- Eintraege mit Schiene in ihrer Farbe, Plaketten (TERMIN, FRIST), Knopfreihe, Akzentknopf. Nur die HUELLE nicht: ein Rechteck mit 18 px Rundung und einem gezeichneten Rand. Damit war der Dialog die einzige grosse Flaeche im Workspace ohne Fase -- und ausgerechnet die, die sich ueber alles andere legt. Man sieht es nicht als Fehler, sondern denkt "der gehoert wohl zum Browser". Jetzt dieselbe Bauart wie die Sammelkacheln: Der <dialog> traegt nur die Fassung (2 px Polsterung mit Farbverlauf darunter), alles Sichtbare liegt in einer neuen Ebene `.k-dialog__glas` darin. Ohne diese zweite Ebene muesste die Fassung ein `border` sein -- und ein Rand folgt dem Rechteck, nicht der abgeschraegten Ecke. ZWEI ECKEN, NICHT VIER: Bei einem Kasten, der mitten im Bild aufgeht, wirken vier abgeschnittene Ecken unruhig -- er soll wie eine Platte wirken, die man auflegt, nicht wie ein Achteck. Oben links und unten rechts geben die Richtung, die anderen beiden halten die Form. `border-radius: 0` ist dabei Pflicht und nicht Kosmetik: Bliebe der Radius neben dem `clip-path` stehen, wuerde er die Ecken der Flaeche INNERHALB der Silhouette runden -- an den nicht gefasten Ecken saehe man eine doppelte Kante. NEBENBEI EINEN WIRKUNGSLOSEN EFFEKT ENTFERNT: `backdrop-filter: blur(14px)` stand auf dem Dialog und waere mit auf die neue Glasebene gewandert. Die ist zu 97 Prozent deckend -- der Browser haette bei jedem Bild einen Weichzeichner ausgerechnet, den niemand sieht. Das Verwischen des Hintergrunds macht `.k-dialog::backdrop`, und dort gehoert es hin. Ein Effekt, der nichts bewirkt, ist nicht harmlos: Er kostet Rechenzeit und behauptet im Quelltext etwas ueber das Aussehen, das nicht stimmt. Geprueft: pruef-kalender, pruef-css-klassen, pruef-buehne -- alle in Ordnung. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
4c0f41762e |
screen18, zweite Haelfte: Die Tagesfelder werden Tasten in einer Platte
Filipe: "...und die kacheln vom kalender selber sollen viel krasser und geiler aussehen bitte." Die dunklen Fugen zwischen den Tagen waren die eine Haelfte des Wunsches und stehen seit dem 08.09. Die andere Haelfte sind die Felder SELBST: flache Rechtecke in drei Grautoenen. Eine gefraeste Platte mit Fugen, in der flache Flaechen liegen, ist halb fertig -- die Fuge sagt "Werkstueck", die Flaeche sagt "Tabelle". ZWEI PIXEL MACHEN DEN UNTERSCHIED: eine Lichtkante oben, eine Schattenkante unten. Dieselbe Rechnung wie ueberall im Haus -- Licht faellt von oben, also ist die obere Kante hell und die untere dunkel. Aus einer Flaeche wird ein Koerper, der in der Platte SITZT. Kein zusaetzliches Element, keine Groessenaenderung, kein Umbruch. DER WOCHENENDUNTERSCHIED WAR MESSBAR ZU KLEIN -- und das ist der eigentliche Fund. Werktag lag bei `rgba(11,15,25,.74)`, Wochenende bei `rgba(9,12,20,.8)`. Auf dem Bildschirm sind die beiden Spalten nicht auseinanderzuhalten. Die Angabe war also da und wirkungslos, und das ist die unangenehmste Sorte Fehler: Sie sieht im Quelltext nach einer Funktion aus, und niemand vermisst, was scheinbar existiert. Jetzt liegt das Wochenende sichtbar tiefer und etwas kuehler. Man sieht den Wochenrhythmus, ohne die Spaltenkoepfe zu lesen -- das ist keine Zierde, sondern die Information, wegen der ein Kalender ueberhaupt in Wochen gegliedert ist. HEUTE BLEIBT DAS LAUTESTE FELD, und das war die Bedingung fuer alles andere: Wenn jedes Feld eine Kante bekommt, muss das eine, auf das es ankommt, weiter herausstechen. Voller Ring plus ein leiser Schein nach innen. AUGENSCHONEND: Alle Werte unter 8 Prozent Deckkraft. Auf sechs mal sieben Feldern summiert sich jede Helligkeit -- was auf einer Kachel dezent ist, ist auf 42 Kacheln ein Raster. Geprueft: pruef-kalender, pruef-buehne (kalender.html schlechtester Kontrast 5,58:1 bei noetigen 4,5:1, 13 Stellen gemessen), pruef-css-klassen -- alle in Ordnung. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
f39e4d1133 |
screen29: Der Titel der Anmeldekarte wird in die Platte graviert
Filipe: "sehr gut aber ich will es noch viel geiler bitte." "Creator Workspace" stand als flaches Weiss ueber der Karte -- richtig gesetzt, aber ohne Material. Darunter liegt eine Karte aus Glas und Metall, darum ein Rahmen aus Rot und Babyblau; nur die Ueberschrift selbst gehoerte zu nichts davon. ZWEI SACHEN MACHEN AUS SCHRIFT EIN WERKSTUECK: 1. EIN VERLAUF VON OBEN NACH UNTEN, nicht von links nach rechts. Gebuerstetes Metall ist oben hell, in der Mitte dunkel und unten wieder hell -- weil es sich woelbt. Ein Verlauf, der nur von hell nach dunkel laeuft, ist eine Flaeche mit Farbverlauf; erst der WECHSEL liest sich als Metall. Dieselbe Ueberlegung wie bei der Fassung der Zentrale, nur hochkant. 2. EIN HARTER SCHATTEN DIREKT DARUNTER, ein Pixel. Er macht aus aufgelegter Schrift eingelassene: Das Auge liest die dunkle Linie als Kante der Vertiefung. Weich waere es ein Schlagschatten und damit das Gegenteil. Dazu ein feiner Lichtstrich unter der Markenzeile -- Rot links, Silber in der Mitte, Babyblau rechts, dieselbe Richtung wie der Rahmen der Rollenkachel darunter. DER RUECKFALL STEHT ZUERST UND IST VOLLWERTIG. `background-clip: text` traegt hier die Farbe -- faellt die Technik aus, waere durchsichtiger Text auf durchsichtigem Grund die Ueberschrift der wichtigsten Seite des Hauses. Also bleibt `color` gesetzt, und erst ein `@supports` schaltet den Verlauf dazu. `filter: drop-shadow` statt `text-shadow`, weil ein Textschatten bei durchsichtigem Text DURCH die Buchstaben scheint -- man saehe den Schatten im Buchstaben stehen. KONTRAST NACHGERECHNET, NICHT BEHAUPTET: Der dunkelste Punkt des Verlaufs (#9fb3c8) kommt gegen den Kartengrund auf 8,97:1 / 8,41:1 / 7,54:1 je nach angenommenem Untergrund. Grosse Schrift braucht 3:1, normale 4,5:1. Die Zahlen stehen im Kommentar, weil ich an genau dieser Datei schon einmal "liegt weit darueber" geschrieben hatte, ohne zu rechnen -- und beim Anmelde-Knopf damit danebenlag (4,20:1 statt der behaupteten 4,5+). Eine Behauptung ueber Kontrast ohne Zahl ist eine Vermutung. Geprueft: pruef-rollen (97 Pruefungen), pruef-css-klassen -- beide in Ordnung. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
af40b79a8c |
screen30 + screen32: Der leere Zustand wird ein Siegel, die Kennung ein Ausweis
--- Und ein Fund unterwegs: Cigdems Kennung war kaputt --- `--rollen-ton` faerbt Kennung und Rollenplakette in der Kopfleiste. Die Liste dahinter kannte admin, manager, scout und creator -- SPICY MEDIA nicht. Die Rolle kam am 07.09. dazu, diese Liste ist nicht mitgegangen. Was dabei passiert, ist schlimmer als eine falsche Farbe: Die Variable war GAR NICHT gesetzt, und `color-mix(in srgb, var(--rollen-ton) 62%, transparent)` ist mit einer leeren Variablen ungueltig -- der Browser wirft die ganze Deklaration weg. Nachgemessen im Browser: Hintergrund `none`, Rand `rgb(234,243,255)` (also currentColor, weil auch die Randfarbe fiel), Plakette grau statt rot. Cigdems Kennung war ein weisser Kasten in einer roten Leiste. DESHALB STEHT JETZT EINE VORGABE DAVOR, und die ist wichtiger als der nachgetragene Eintrag: Wer die naechste Rolle anlegt und diese Liste wieder vergisst, bekommt eine Kennung in der Hausfarbe -- nicht mehr eine kaputte. Ein fehlender Eintrag darf zu etwas Schlichterem fuehren, nie zu etwas Ungueltigem. --- screen30: der leere Zustand --- "das muss auch viel spezieller sein und auch nicht wie alle anderen kacheln da sondern wirklich krasser und geiler aber so dass es vom aussehen trotzdem noch zu seite passt." Das Gruen lief als Verlauf nach 60 Prozent ins Nichts, dahinter das Hintergrundbild -- auf Filipes Bild scheint ein Chili mitten durch die gute Nachricht. Eine Fassung, die nur auf der linken Haelfte existiert, ist keine. "Nicht wie alle anderen Kacheln" ist inhaltlich richtig: Alles andere auf dieser Seite ist eine AUFGABE, etwas, das man noch tun muss. Das hier ist die Quittung, dass nichts mehr offen ist. Es waere falsch, wenn es wie eine weitere Aufgabe aussaehe. Also die Form eines SIEGELS: die Fase sitzt rechts unten statt links oben -- spiegelverkehrt zur Kachelsprache --, links eine breite gruene Lichtschiene wie ein Stempelrand, und der Haken ist eine gepraegte Muenze statt eines Kreises mit einem Strich darin. Die Flaeche ist deckend; eine gute Nachricht, durch die man das Hintergrundbild sieht, liest sich wie ein Platzhalter. Leise bleibt es trotzdem: gedecktes Gruen, hoechstens 14 Prozent Flaeche, nichts pulsiert. Wer nichts offen hat, braucht kein Feuerwerk. Kontrast gemessen: 14,47:1 (fett) und 7,39:1 (still). --- screen32: die Kennung in der Kopfleiste --- "das sieht schon richtig gut aus aber ich will dass es noch krasser und spezieller aussieht." Sie sass als flaches, abgerundetes Quadrat zwischen vier Knoepfen und sah damit aus wie ein fuenfter Knopf, der sich nicht druecken laesst. Sie ist aber etwas anderes: Sie sagt, WER hier ist, nicht, was man tun kann. Jetzt die Fase des Hauses statt der Rundung (sie gehoert zur Seite, nicht zur Knopfreihe), ein gepraegter Ring statt eines gezeichneten Randes (Lichtkante oben, Schattenkante unten) und ein sehr leiser Schein in der Rollenfarbe. KEINE GROESSENAENDERUNG -- 28x28 bleibt. Die Kopfleiste ist am 06.09.2026 schon einmal an einem zusaetzlichen Element zerbrochen; was hier waechst, drueckt dort etwas heraus. Geprueft: pruef-workspace-seiten (18 Seiten, Ueberstand ueberall 0 px), pruef-handy, pruef-start-ansicht, pruef-css-klassen -- alle in Ordnung. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
41108d6c3c |
screen14 + screen16: Der Entscheidungsblock bekommt eine Flaeche, die Zahlen bekommen Bedeutung
--- screen14: "das soll auch bitte viel geiler und spezieller sein" ---
Zwei Dinge waren falsch, und nur eines davon sieht man im Code.
1. DIE FLAECHE WAR FAST DURCHSICHTIG -- 9 und 5 Prozent Deckkraft. Auf
einer Seite mit Hintergrundbild heisst das: Das Motiv scheint mitten
durch den Text. Auf Filipes Bildschirmfoto liest man den Satz "Ein
Review endet nicht mit einer Zusammenfassung" quer ueber einem
gespiegelten SPICY-MEDIA-Schriftzug. Ein Kasten, den man nicht
sieht, ist keine Fassung -- er ist ein Rand um nichts.
2. `border-radius` UND `border` STANDEN NOCH DA -- wirkungslos, weil
`.entscheidung` in der Modulliste von module.css steht und die
spaeter geladen wird. Zwei Angaben, die aussehen, als taeten sie
etwas, und es seit dem Umbau nicht mehr tun.
Er ist die HANDLUNG der Seite, nicht einer von vier Abschnitten: Alles
darueber ist Auskunft, hier wird entschieden und sofort eine Aufgabe
angelegt. Deshalb ein eigener `--ton` fuers Kantenlicht (die Modulliste
faerbt es darueber) statt des Seitentons, und eine kraeftigere Flaeche
als die Sammelkacheln darueber. Kein Rot: Rot heisst in diesem Haus
"ueberfaellig", und eine Entscheidung ist kein Alarm. Die Eingabefelder
sind jetzt eingelassen statt aufgesetzt -- wo man etwas hineinschreibt,
ist eine Vertiefung; und `color-scheme: dark`, sonst zeichnet Chrome
den Datumswaehler als weisses Kaestchen in die dunkle Flaeche.
--- screen16: "mit mehreren farben arbeiten, damit die wichtigsten
sachen auch auffallen" ---
Die sechs Zahlen je Creator (ueberfaellig, dringend, offen, in Arbeit,
im Review, erledigt) trugen alle dasselbe Blau -- und `data-warn`
faerbte zwei davon in DASSELBE Rot. "Ueberfaellig" ist eine versaeumte
Frist, "dringend" eine Sache, die schnell muss. Zwei verschiedene
Alarme, die gleich aussehen, sind ein Alarm.
Jetzt sechs Toene: Rot, Bernstein, Babyblau, Lila, Silber, Gruen.
DIE WICHTIGE ENTSCHEIDUNG WAR ABER NICHT WELCHE FARBE, SONDERN WANN.
Sechs dauerhaft leuchtende Felder waeren sechs gleich laute Rufe -- und
damit genau so wenig Hilfe wie sechs gleich blaue. Deshalb bleibt eine
NULL grau und still; nur was groesser als null ist, bekommt seine
Farbe. Auf einer Karte, auf der alles auf Null steht, aendert sich
nichts. Auf einer, auf der drei Sachen ueberfaellig sind, sieht man
genau die. Das ist der Unterschied zwischen Farbe als Schmuck und
Farbe als Auskunft.
Die Farbe haengt an `data-sorte` (einem Schluessel), nicht an
`:nth-child`: Wer morgen ein siebtes Feld dazwischenschiebt, soll nicht
sechs Farben verrutschen lassen. Und die Beschriftung bleibt der
eigentliche Traeger -- Farbe allein traegt in diesem Haus nie eine
Information.
KONTRAST NACHGERECHNET statt angenommen: Die Beschriftungen sind
11,2 px, also gilt 4,5:1. Gemessen gegen die Kartenflaeche liegen sie
zwischen 5,91:1 (erledigt) und 14,09:1 (im Review) -- alle sechs
deutlich darueber. pruef-barrierefrei-workspace habe ich deshalb NICHT
gestartet: Der Lauf haette 190 Sekunden gebraucht, um dasselbe zu
sagen.
Geprueft: pruef-uebersicht, pruef-uebersicht-browser, pruef-css-klassen,
pruef-buehne -- alle in Ordnung.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
8fcc9de1bb |
screen4: Die Anlass-Sammelkachel bekommt die Kachelsprache des Hauses
Wunsch Filipe: "ich will dass das alles in einer geilen kachel ist wie die kacheln in der start seite. und noch geiler." Der Umschlag um die drei Abschnitte (Als Naechstes / Im Monat / Laeuft von allein) gab es schon -- aber die Kachelform war in kalender.css NACHGEBAUT: eine Fase an einer Ecke, ein Raster, ein Innenschatten. Im Bildschirmfoto sah man den Rahmen kaum, waehrend die Karten DARIN (die seit jeher in der Modulliste stehen) Kantenlicht und Eckwinkel trugen. Die Sammelkachel war damit schwaecher gefasst als ihr eigener Inhalt -- genau andersherum, als es sein soll. "WIE DIE KACHELN AUF DER STARTSEITE" HEISST NICHT "AEHNLICH GEBAUT", SONDERN DIESELBE REGEL. `.k-anlasskachel` steht jetzt in der Modulliste von module.css -- in allen sieben Kopien, die pruef-css-klassen Zeichen fuer Zeichen vergleicht. Damit bekommt sie Fase, Kantenlicht, Eckwinkel und Schlagschatten aus derselben Quelle wie 43 andere Bauteile, und ein Nachbau daneben kann nicht mehr auseinanderlaufen. DABEI EINEN FEHLER GEMACHT UND GESEHEN: Beim Entfernen des Nachbaus ging der Hintergrund mit weg. Die Kachel war danach DURCHSICHTIG -- das Motiv der Seite schien mitten durch den Text. Die Modulliste gibt die FORM; die Flaeche bringt jede Kachel selbst mit, weil sie von Fall zu Fall verschieden ist. Eine Fassung ohne Fuellung ist kein Rahmen, sondern ein Loch. Gesehen im Bildschirmfoto, nicht in einer Zahl. Geprueft: pruef-css-klassen (sieben Kopien gleich, 44 Klassen), pruef-kalender, pruef-buehne -- alle in Ordnung. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
4e35c6f8e5 |
screen11: Der Chat hatte gar keinen Hintergrund -- seit jeher
Wunsch Filipe: "die hintergrund bilder sollen alle so strahlen und
schoen sein wie dieses. dieses ist wirklich mega und perfekt."
(Massstab ist die Scouting-Seite, Szene "wald".)
DER FUND: `chat.html` hat weder `.kopf-zeile` noch `.k-kopf` -- sie
traegt ihren Titel im eigenen `.chat__kopf`. In kopf.js stand ganz
oben:
const kopf = document.querySelector('.kopf-zeile, .k-kopf');
if (!B || !kopf) return;
Damit hing ALLES an der Frage, ob es eine Kopfzeile gibt, an die man
eine Plakette haengen kann -- auch der Farbton der Seite und ihr
Hintergrundbild, die damit nichts zu tun haben. Der Chat ist an dieser
Zeile ausgestiegen und hat WEDER Ton NOCH Buehne bekommen, obwohl in
bereiche.js seit jeher `szene: 'lounge'` fuer ihn steht. Eine
Zuordnung, die es gibt und die nie ankam.
Jetzt stehen Ton und Buehne VOR der Plakette: Sie brauchen nur den
Bereich. Die Plakette braucht zusaetzlich einen Kopf -- gibt es den
nicht, faellt eben nur sie aus.
WARUM DAS KEINE PRUEFUNG GEFUNDEN HAT, gleich zweimal:
1. `chat.html` stand nicht in der Seitenliste von
pruef-workspace-seiten. Eine Pruefung, die eine Seite nicht kennt,
kann auf ihr nichts finden. Jetzt drin, zusammen mit
leistung.html -- 18 Seiten statt 16.
2. Die Buehnenregel lautete `r.buehne ? r.buehneBild === r.buehne :
!!r.buehneBild` -- fehlt das Merkmal, reichte IRGENDEIN Bild.
Gedacht war die Ausnahme fuer die Startseite, geschrieben war sie
fuer jede Seite. Der Chat verlor sein `data-buehne`, fiel auf die
Grundszene zurueck, und die Pruefung sagte "ein Motiv ist da,
alles gut". Eine Bedingung, die bei fehlender Angabe MILDER wird
statt strenger, kann den Verlust dieser Angabe nicht melden --
sie belohnt ihn. Die Ausnahme haengt jetzt an der Startseite, nicht
am Fehlen des Merkmals.
Die Regel ist dafuer aus der Schleife herausgeloest (`buehneRichtig`)
und hat sieben Gegenproben bekommen -- darunter genau den Chat-Fall.
Ohne sie waere "alles in Ordnung" nur die Aussage, dass die Regel
nichts gemeldet hat, nicht dass sie etwas melden koennte.
DIE AUSNAHME DES CHATS STEHT JETZT MIT NAMEN in der Pruefung, statt
dass die Seite aus der Liste faellt: Plakette und Wasserzeichen
entfallen dort, weil es den Ort dafuer nicht gibt -- Ton und Buehne
gelten. Ob der Chat eine Plakette bekommen soll, ist eine
Gestaltungsfrage fuer Filipe, keine Fehlerfrage.
ZWEI FALSCHE AUSSAGEN in tools/gate-bauen.mjs richtiggestellt:
"halle: dieselbe Sammlung, GESPIEGELT" -- nachgemessen haben beide
Dateien dieselbe Pruefsumme, es gibt in diesem Werkzeug keine
Spiegelung. Und "0,42 ist gemessen" ueber `const DUNKEL = 0.26`; der
Wert wurde gesenkt, die Zeile ist nicht mitgegangen. Ein Kommentar, der
mehr behauptet als der Code tut, ist schlimmer als keiner.
ZUM EIGENTLICHEN WUNSCH, ehrlich: Ich habe die Hintergrundhelligkeit
aller 18 Seiten nachgemessen. Die Scouting-Seite ist tatsaechlich die
hellste (0,0263), alle anderen liegen 19 bis 65 Prozent darunter --
aber der Grund ist NICHT die Bildbehandlung. Schleier und Abdunklung
sind fuer alle Seiten gleich und mehrfach nachgemessen. Der Unterschied
ist, WIE VIEL vom Bild noch zu sehen ist: Die Scouting-Seite traegt
eine schmale Karte, die anderen dichte Tabellen und Kachelraster. Das
liesse sich aendern, aber es ist eine Entscheidung ueber die
Inhaltsdichte von 17 Seiten -- die gehoert Filipe, nicht mir um zwei
Uhr nachts.
(Meine erste Messung sagte das Gegenteil. Sie nahm einen Streifen bei
x 0..150 -- ausgerechnet die dunkelste Spalte jedes Motivs. Danach
schien die Scouting-Seite fast schwarz, waehrend das Bildschirmfoto
derselben Seite hell und farbig ist. Ein Messfeld, das nicht
repraesentativ ist, misst zuverlaessig das Falsche.)
Geprueft: pruef-workspace-seiten (18 Seiten, alles in Ordnung),
pruef-buehne, pruef-css-klassen -- alle in Ordnung.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
f3d5bcf198 |
screen20: Die fuenf Rollen in EINER Kachel
Wunsch Filipe: "ich will dass die rollen auch alle in einer grossen kacheln sind, die soll richtig krass sein, richtig speziell." Vorher waren es fuenf einzelne Kaesten mit je eigenem Rand, eigenen runden Ecken und 8 px Luft dazwischen -- der Hintergrund des Motivs schien ueberall durch. Das las sich als fuenf Dinge, die zufaellig untereinander stehen. Es ist aber EINE Frage mit fuenf Antworten, und genau so sieht es jetzt aus: ein Koerper mit abgeschraegten Ecken, in den fuenf Felder eingelassen sind. DIE FUGE MACHT DIE KACHEL, nicht der Rand aussen. Ein Spalt, durch den der Untergrund scheint, TRENNT; eine dunkle Fuge (#05070c) VERBINDET, weil sie zum selben Koerper gehoert. Dieselbe Entscheidung wie beim Kalender. DIE FASSUNG traegt dieselben vier Farben wie der Rand der Zentrale -- links Rot, rechts Babyblau, Silber als Treffpunkt, Schwarz als Fuge. Wer sich anmeldet, sieht damit schon hier die Handschrift der Seite dahinter. WAS BLEIBT, IST DIE SCHIENE. Sie war das Beste am alten Entwurf: Wer sich als Manager anmeldet, sieht schon hier das Lila, in dem ihm gleich seine Kacheln begegnen. Sie sitzt jetzt buendig an der Innenkante statt am Rand einer eigenen Karte -- dieselbe Wirkung, ein Koerper weniger. ZWEI SACHEN, DIE DABEI AUFFIELEN: 1. ES GAB ZWEI ENTWUERFE FUER DIESELBEN FUENF ZEILEN. Einen ab 1100 px (`.tafel .rolle`, mit Schiene und Tastenwirkung) und einen darunter (`.rolle`, schlicht). Mein erster Anlauf legte einen DRITTEN darueber -- im Bildschirmfoto standen die alten Karten unveraendert in meiner neuen Kachel. Statt der dritten Schicht sind jetzt beide vorhandenen auf Felder umgestellt: eine Aussage, zwei Groessen. 2. `transform: translateY(1px)` BEIM DRUECKEN MUSSTE WEG. Bei fuenf einzelnen Karten war das richtig -- eine Taste, die nachgibt. In einem geschlossenen Koerper schiebt sich damit ein Feld um einen Pixel aus der Kachel heraus, reisst die Fuge auf und sieht nach einem Fehler aus. Der eingelassene Schatten sagt dasselbe, ohne etwas zu verschieben. Nebenbei: Die Markierung der gewaehlten Rolle stand unter 1100 px fuer alle fuenf auf demselben Blau-Violett -- wer "Scout" waehlte, bekam Blau, obwohl Scout gruen ist. Die Rollenfarbe `--rf` war zwei Zeilen darueber definiert und wurde nicht benutzt. Jetzt kommt sie per `color-mix` aus den zentralen Hausfarben. Geprueft: pruef-rollen (97 Pruefungen, alles in Ordnung), pruef-css-klassen (alles in Ordnung), dazu 390/320/820 px nachgemessen -- nichts ragt heraus, nichts laesst sich seitlich schieben. Dabei hat meine eigene Messung erst fuenf Fehler gemeldet, die es nicht gab: Die Untertitel sind auf schmalen Geraeten ausgeblendet, ein ausgeblendetes Element hat die Masse 0/0, und 0 liegt links von jeder Kachel. Ohne den Blick aufs Bild haette ich einen Fehler gesucht, den nur die Pruefung hatte. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
f701dae53e |
screen10: Der Tagesruf -- einmal am Tag, was noch offen ist
Wunsch Filipe: "ich will das neben diesem kreis auch ein kleiner button
ist fuer den wecker von den aufgaben, oder quasi eine taetige meldung
einmal am tag zu aktivieren wenn noch aufgaben auf sind."
Ein Wecker-Knopf unter der Glocke, neben der Uhr. Eingeschaltet meldet
er sich einmal taeglich zur eingestellten Zeit -- aber nur, wenn
wirklich noch etwas offen ist. Der Satz nennt die Zahl und die
Ueberfaelligen: "3 Aufgaben sind noch offen / Davon eine ueberfaellig."
ALS EINZIGE ART MIT `vorgabe: false`, und das ist keine
Nachlaessigkeit. Alle anderen Benachrichtigungen antworten auf ein
Ereignis, das gerade passiert ist. Der Tagesruf kommt ungefragt zur
selben Zeit, ob es etwas Neues gibt oder nicht -- so etwas schaltet man
sich selbst ein, sonst ist es Werbung. Bei null offenen Aufgaben kommt
nichts: Eine taegliche Meldung "du hast nichts zu tun" ist der
schnellste Weg, dass man die naechste nicht mehr liest.
EIN FENSTER VON DREI STUNDEN. Der Takt laeuft alle fuenf Minuten; ein
einfaches "jetzt >= eingestellte Zeit" wuerde nach einem Serverausfall
den Ruf fuer neun Uhr um zwanzig Uhr zustellen. Wer eine Erinnerung an
einen vergangenen Tag bekommt, schaltet sie ab. Faellt der Tag aus, ist
das die ehrlichere Antwort.
VIER DINGE, DIE ERST DAS NACHMESSEN GEZEIGT HAT:
1. DER KNOPF VERSPRACH ETWAS, DAS ER NICHT HALTEN KONNTE. Chromium
meldet `Notification.permission === 'denied'` -- gemessen, nicht
vermutet. Der Knopf sah einladend aus ("Einmal am Tag melden…") und
sagte erst NACH dem Antippen ab. Ein Bedienelement, das den Grund
erst hinterher nennt, ist die schlechtere Haelfte einer
Fehlermeldung. Jetzt steht er im Titel, und der Knopf ist gedimmt.
2. EINE UHRZEIT IN DER RUHEZEIT WAERE EIN STILLES NICHTS. Der Server
laesst zwischen 22 und 7 Uhr nichts durch. Wer 23:00 einstellt,
bekaeme nie etwas und saehe nur einen Knopf auf "an". Jetzt steht
der Hinweis dort, wo man es einstellt -- mit den Grenzen VOM SERVER,
nicht mit hier getippten Zahlen.
3. `wert` UND `an` SIND ZWEI ENTSCHEIDUNGEN. Wer nur den Schalter
umlegt, schickt kein `wert` -- stumpf `req.body.wert` zu schreiben
haette bei jedem Aus- und Einschalten die Uhrzeit geloescht, und
beim naechsten Mal staende wieder neun Uhr da. Ein Datenverlust, den
niemand meldet, weil er wie eine Vorgabe aussieht. Genau dieser Weg
wird jetzt geprueft.
4. pruef-css-klassen HATTE ZWEIMAL RECHT. Der Stil lag in heim.css
(nur Startseite), die Zeichen entstehen aber in glocke.js (18
Seiten) -- auf 17 davon waere ein nackter Knopf gestanden. Und die
beiden neuen Schriftgroessen (10 und 11 px) haetten die Grundlinie
von 43 zu kleinen Stellen still auf 45 gehoben. Beides behoben:
Stil nach start.css, Schrift auf 12 px.
NEUE PRUEFUNG server/pruef-tagesruf.mjs, drei Schichten getrennt, weil
sie getrennt kaputtgehen: Oberflaeche im Browser, Schalten ueber die
Schnittstelle (aus der SEITE heraus, damit Sitzung und
Herkunftspruefung mitgehen), Zeitentscheidung als reine Rechnung. Die
Entscheidung wurde dafuer aus dem Rundgang herausgeloest -- dazwischen
steckend haette man zum Pruefen Datenbank und Push-Versand aufbauen
muessen, also haette man sie nicht geprueft.
Die Erwartung der ersten Schicht richtet sich nach der GEMESSENEN
Berechtigung statt sie vorauszusetzen: Erlaubt eine kuenftige
Chromium-Fassung Benachrichtigungen von sich aus, waere ein fest
verdrahtetes "muss blockiert sein" ein Fehlalarm ohne Fehler.
Gegenproben sind dabei: "99:99", "7:30" ohne fuehrende Null und ein
Wert an einer Art, die keinen kennt, muessen abgelehnt werden -- sonst
bewiese der Bereichstest nichts.
Der reservierte Platz waechst von 46 auf 104 px, damit der zweite Knopf
die Kachelreihe darunter nicht nach unten schiebt; das Zeitfeld schwebt
statt zu schieben. Beides derselbe Grund wie bei der Glocke: Ein
Sprung ist kein Schoenheitsfehler, sondern der Grund, warum man auf den
falschen Knopf drueckt.
Geprueft: pruef-tagesruf (neu, alles in Ordnung), pruef-push,
pruef-css-klassen, pruef-start-ansicht -- alle in Ordnung.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
cad3c4c4df |
screen21: Universum hinter der Zentrale, Fassung neu gewichtet
Wunsch Filipe: "ich will dass du im hintergrund dieser kachel das logo von spicy media machst ... es soll sogar paar mal zu sehen sein, es soll sich bewegen, schweben ... der ganze hintergrund soll wie ein universum aussehen. und der rand wie gesagt soll rot schwarz silber und babyblau sein, rot und babyblau soll man am meisten sehen." DER RAND HATTE ALLE VIER FARBEN -- IN DER FALSCHEN GEWICHTUNG. Jeden Stopp mit der Haelfte des Abstands zu seinen Nachbarn gewichtet: Schwarz 37,5 %, Babyblau 27,5 %, Silber 22 %, ROT 13 %. Die beiden Farben, die man am meisten sehen sollte, kamen zusammen auf 40,5 % -- Silber allein hatte mehr Platz als Rot. Im Quelltext faellt das nicht auf: Man sieht neun silberne Stopps und denkt an Spitzlichter, nicht an ein Fuenftel der Flaeche. Jetzt Babyblau 41,5 %, Rot 33 %, Schwarz 21,5 %, Silber 4 % -- zusammen 74,5 %, und die beiden nur 8,5 Punkte auseinander. Silber ist auf den Treffpunkt in der Mitte zurueckgenommen, dieselbe Stelle, an der sich im Schriftzug Chili und Husky treffen. DAS UNIVERSUM: drei Nebel (rot unten links, babyblau oben rechts, ein Hauch Lila als Uebergang), ein Sternenfeld aus acht gekachelten Verlaufsebenen und fuenf schwebende Chilis. Sechs Elemente insgesamt -- Sterne als Elemente waeren neunzig Knoten fuer eine Zierde. Bewegt werden nur `transform` und `opacity`; ein animiertes `background-position` zwingt den Browser bei jedem Bild zum Neuzeichnen einer Kachel mit vierzehn Hintergrundebenen. DIE ORTE SIND GEMESSEN, NICHT GESTREUT -- und das war die eigentliche Arbeit. Im ersten Anlauf lagen die Chilis quer ueber der Mittelspalte: einer deckte 34,5 % der Unterzeile und 45,9 % des Lagesatzes ab, der Kontrast fiel von 6,36:1 auf 5,87:1. Das war noch zulaessig, zwang die Deckkraft aber auf sechs Prozent -- und damit sah man die Chilis nicht mehr, was ausdruecklich gewuenscht war. Die bequeme Antwort waere gewesen, sie blasser zu machen. Richtig war, sie aus dem Text herauszunehmen: Sie stehen jetzt in den Zonen ohne Text, tragen 12 bis 17 statt 6 bis 10 Prozent und decken nachgemessen NULL Text ab. Der verbleibende Verlust von 0,49 kommt allein vom Nebel. AUGENSCHONEND HEISST HIER VOR ALLEM LANGSAM: Die Bahnen dauern 71 bis 118 Sekunden, die Sternendrift 240. Bei einer Kachel, die stundenlang im Bild steht, ist eine Bewegung, die man BEMERKT, eine, die stoert. Nichts blinkt, nichts pulsiert. Bei `prefers-reduced-motion` bleibt das Bild stehen statt zu verschwinden -- die Einstellung heisst "weniger Bewegung", nicht "weniger Gestaltung". Unter 700 px gehen die beiden groessten Chilis: Bei 380 px Breite naehme der grosse ein Drittel der Kachel ein und staende hinter dem Titel. Nebenbei zusammengelegt: Die Innenform der Kachel (das Fasen-Polygon) stand zweimal gleich da und steht jetzt einmal in `--k-innenform`. Genau diese Sorte Doppelung hat mich in dieser Datei heute schon zweimal Zeit gekostet. Geprueft: pruef-start-ansicht (alles in Ordnung), pruef-css-klassen (alles in Ordnung), Ueberdeckung und Kontrast im Browser nachgemessen (Foto zurueck in eine Leinwand, WCAG-Helligkeit), Bildschirmfoto bei doppelter Aufloesung. pruef-barrierefrei-workspace bewusst NICHT gestartet: Der Kontrast ist hier direkt gemessen (5,87:1 gegen 4,5 gefordert), der Lauf haette 190 Sekunden gebraucht, um dasselbe zu sagen. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
12c40256f7 |
Uhr: Stunden rot, Minuten silber, Sekunden babyblau -- alle drei als Reihen
Wunsch Filipe: "stunden soll rot sein, minuten schwarz/silber und die sekunden babyblau. die punkte herum sollen eine mischung von rot schwarz und babyblau sein. ich will auch dass die stunden und minuten auch barren oder punkte sind und nicht so eine durchlaufende schleife." ALLE DREI BAHNEN SIND JETZT REIHEN. Die Stunde bekommt zwoelf Balken (ein Zifferblatt hat zwoelf), Minute und Sekunde sechzig. Die Glieder sind verschieden lang -- Punkt (0,01 + runde Kappe), kurzer Balken (1,7), langer Balken (5,5). Damit liest man die drei Bahnen auch dann auseinander, wenn jemand Farben schlecht unterscheidet; Farbe allein traegt eine Information nie. VIER FUNDE BEIM NACHMESSEN, keiner davon war vorher sichtbar: 1. ABRUNDEN STATT RUNDEN. `Math.round` liess Minute und Stunde ab der HAELFTE einen Balken zu frueh aufleuchten: um 14:30 zeigte der Stundenring vier statt drei Balken, der Minutenring ab Sekunde 30 einen zu viel. Die Uhr war damit die halbe Zeit ueber falsch -- und ausgerechnet zur vollen Stunde, wo man hinsieht, richtig. Nachgerechnet: 10:30 -> 11, 14:30 -> 3, 23:59 -> 12, 00:00 -> 1. 2. DIE PERLENKOEPFE TRUGEN DIE ALTE ZUORDNUNG. Die drei Boegen waren getauscht, die drei Koepfe nicht: ein roter Kopf sass auf der blauen Sekundenreihe, ein silberner auf den roten Stundenbalken. Das sah nach einem Winkelfehler aus, obwohl alle drei auf die Zehntelgrad genau standen (354 / 161,9 / 343,0 bei 23:26:59, gemessen). Wer eine Farbe tauscht, tauscht sie an ALLEN Stellen: Bogen, Kopf, Schein, Kranz. 3. DER SCHEIN LAG DREIFACH UEBEREINANDER. Jeder Ring liegt dreimal im SVG (Schatten, Hauptlage, Kante); `.uhr__stunde` traf alle drei. Das rote Leuchten lief dadurch bis ueber die Ziffern, obwohl in der Regel nur 1,8 px stehen -- genau das Verschwommene, das Filipe nicht will. Jetzt `.uhr__ring > …`: nur die Hauptlage leuchtet, Schatten und Kante bleiben hart. 4. ZWEI TOTE FARBSCHICHTEN in heim.css (Sekunde rot / Minute blau / Stunde bronze). Sie wurden vom spaeteren Satz ueberschrieben und waren unsichtbar -- aber wer die Datei von oben liest, haelt sie fuer die geltende Regel und aendert die falsche Stelle. Entfernt statt stehengelassen: EINE Stelle entscheidet ueber eine Farbe. Ausserdem: Der Kometenschweif ist raus (HTML und CSS, nicht ausgeblendet). Eine Reihe zeigt ihre Richtung durch das letzte Glied; ohne eigenes Muster haette er einen vollen Ring quer ueber die Punkte gezogen. Der Punktkranz aussen mischt jetzt Rot, Babyblau und ein sehr dunkles Blau im 18-Grad-Takt -- das Dunkel ist kein Loch, sonst zerfiele der Ring aus dem Augenwinkel in zwei Haelften. Gedaempft bleibt Pflicht: Die Sekunde laeuft dauernd und bekommt das ruhigste Babyblau, die Stunde bewegt sich kaum und darf die kraeftigste Farbe tragen. Die Auslieferungskennung ist auf allen 19 Seiten hochgesetzt, sonst kaeme keine der Aenderungen an. Geprueft: pruef-start-ansicht (alles in Ordnung), pruef-css-klassen (alles in Ordnung), Segmentzahlen und Perlenwinkel im Browser nachgemessen, Bildschirmfoto bei vierfacher Aufloesung. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
e04d7afea7 |
Anlaesse und Report bekommen Sammelkacheln -- und die Zahlen ragten heraus
Filipe, mit zwei Bildschirmfotos: "ich will dass das alles in einer geilen kachel ist wie die kacheln in der start seite" und "die ganzen kacheln sollen viel geiler aussehen und spezieller. mach auch vielleicht 2 größere kacheln wo die anderen kleineren drin sind". DER KALENDER: Drei Abschnitte standen frei auf dem Hintergrundbild -- was als Naechstes ansteht, was in diesem Monat liegt, was von allein weiterlaeuft. Drei Ueberschriften ohne Fassung lesen sich als drei lose Listen; zusammen sind sie EINE Auskunft. Jetzt eine Kachel in der Sprache der Startseite. Das Formular "Neuer Termin" stand im Quelltext ZWISCHEN den Abschnitten und waere mitgenommen worden. Der Wiederholungs-Abschnitt ist deshalb nach oben gewandert, das Formular steht hinter der Kachel -- inhaltlich ohnehin die bessere Ordnung: erst lesen, was kommt, dann etwas anlegen. Sind alle drei Abschnitte leer, verschwindet die Kachel; `:has()` fragt das ab, ohne eine Zeile JavaScript. DER REPORT: Die vier Abschnitte sind jetzt Sammelkacheln, die kleinen Zahlenkarten liegen sichtbar darin. Vorher schwebten siebzehn Karten in einer Flaeche, ohne dass man sah, welche zu welcher Frage gehoert. UND DABEI EIN ECHTER FEHLER, DER NICHT DAS WAR, WONACH ER AUSSAH. In Filipes Bild standen die Zahlen unter "Was blockiert?" nur zur oberen Haelfte da -- die Aufgabenliste darunter schien sie zu ueberdecken. Nachgemessen liegt die Liste sauber unter dem Raster (543..594 gegen 594..802, kein Ueberlappen). Herausgeragt ist die ZAHL SELBST: `.kachel__zahl` ist `position: absolute` und damit fuer die Hoehenrechnung der Karte unsichtbar. Bei 27 px Schrift in einer 51 px hohen Karte steht sie 17 px unten ueber -- und was ueber den Rand steht, verdeckt das Naechste. Sechs von siebzehn Karten waren betroffen: genau die in Bloecken, deren Raster nur eine Zeile hat und deshalb niedriger ausfaellt. In den anderen war die Zeile hoch genug, dort fiel es nie auf. Der Fehler war immer da und nur manchmal sichtbar. Behoben ueber eine Mindesthoehe -- sie sagt der Karte, wie viel Platz ihr Inhalt WIRKLICH braucht. Die Zahl kleiner zu machen waere die bequemere und die falsche Antwort: Sie ist die Aussage der Karte. Nachgemessen: 6 -> 0 Karten mit herausragendem Inhalt. Dazu mehr Luft: 180 px Mindestbreite statt 158. Gemessen lagen in ALLEN 17 Karten Name und Zahl unter sechs Pixel auseinander. Beide Regeln stehen in report.css bzw. kalender.css, nicht in der Modulliste: `.block` gibt es auch auf automation.html, dort sind es Formularbloecke. Die Datei ist die Bedingung. pruef-kalender EXIT=0 (84), pruef-serien EXIT=0 (69), pruef-css-klassen EXIT=0 (28), pruef-start-ansicht EXIT=0 (143). Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
7bec3ea80c |
Sekunden als Punkte, Ringe gestaffelt, silberner Rand weg
Filipe: "ich will aber dass die sekunden wie punkte sind, die minuten
breiter und die stunden noch breiter … den silbernen rand weg bitte den
will ich nicht … es soll nichts verschwommen aussehen oder so, im
gegenteil, richtig scharf und perfekt."
DER SILBERNE RING IST WEG. Er war die breiteste Flaeche der ganzen Uhr
und damit das Erste, was das Auge traf -- ausgerechnet der Teil, der
nichts anzeigt. Jetzt dunkles Metall; die drei Bahnen sind das Hellste
im Bild. Die Skalenstriche bleiben, sie geben Mass ohne zu fuellen.
DIE SEKUNDE IST EINE PUNKTREIHE. Sechzig Punkte, einer je Sekunde --
der schnellste Wert wird zaehlbar statt nur gewachsen. Das ist auch
ehrlicher: Die Sekunde SPRINGT, ein durchgehender Bogen behauptet einen
fliessenden Wert.
DIE BREITEN STAFFELN SICH: 3,2 / 5 / 7 statt 3 / 3,4 / 4. Die alten
Werte waren rechnerisch verschieden und im Bild nicht zu unterscheiden
-- ein Unterschied unter einem Pixel ist keiner. Jetzt liest man die
Ringe an ihrer STAERKE: je langsamer, desto schwerer.
SCHAERFE STATT NEBEL: Die weichen Scheine lagen mit 7 bis 9 px Radius
ueber den Bahnen wie Dunst. Jetzt 1,5 px -- sie liegen als KANTE an
statt als Wolke. Die Tiefe kommt aus dem Versatz der Lagen, so wie im
Rest dieser Uhr auch.
DREIMAL AN DERSELBEN STELLE DANEBEN, UND JEDES MAL IM BILD GESEHEN:
1. Der Sekunden-Schweif stand noch im Dokument und war per CSS
ausgeblendet -- das griff nicht, und ohne `dasharray` zeichnete er
einen durchgehenden roten Ring um die ganze Uhr. Ein Element, das
nie sichtbar sein soll, gehoert nicht ins Dokument. Ausblenden ist
kein Entfernen.
2. Dann das Punktmuster: n Paare plus Schluss-Luecke sind 2n+1 Werte.
Bei ungerader Anzahl verdoppelt SVG die Liste und vertauscht dabei
Striche und Luecken.
3. Also eine Null angehaengt (`rest 0`) -- Anzahl gerade, Fehler
blieb. Denn in `dasharray` wechseln sich Strich und Luecke ab: Nach
2n Werten sitzt der naechste an UNGERADER Stelle und ist ein
Strich. Der Rest wurde weiter gezeichnet. Richtig ist die Null
ZUERST (`0 rest`), dann landet die Luecke an gerader Stelle.
UND DIE PRUEFUNG MUSSTE MIT. `pruef-start-ansicht` verglich die
REIHENFOLGE der Farbkanaele im Kachel-Licht. Das setzt voraus, dass die
Kanaele deutlich verschieden sind -- seit der neuen Palette stimmt das
nicht mehr: "Aufgaben" ist Tuerkis (G=191, B=163), gemessen 63 gegen 65.
ZWEI Stufen von 255. Die Reihenfolge kippt dort durch Rundung, und die
Pruefung meldete einen Fehler, wo keiner war.
Sie misst jetzt den FARBWINKEL -- dieselbe Frage ("ist es dieser Ton?"),
ohne die Voraussetzung. 40 Grad Toleranz; die Kachelfarben liegen nach
der Neuberechnung gut 60 Grad auseinander. Dazu eine GEGENPROBE je
Kachel: Der gemessene Ton wird gegen den Gegenton auf dem Farbkreis
gehalten und muss dort anschlagen. Eine Pruefung, die immer bestaetigt,
bestaetigt nichts.
Gemessen: Farbwinkel-Abstaende 13° / 16° / 7° von 40 erlaubten.
pruef-start-ansicht EXIT=0, 140 -> 143 Pruefungen (die drei Gegenproben
sind dazugekommen, keine ist verschwunden). pruef-css-klassen EXIT=0.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
5a67ef2948 |
Die Rabattcodes haengen am Konto, nicht mehr am Abo
Filipe: "die partner codes sollen auch schon fuer die leute sichtbar sein die angemeldet sind." Umgestellt, und auf Nachfrage dauerhaft: Rabattcodes sind ab jetzt ein Konto-Vorteil, kein Abo-Vorteil. WARUM DAS MEHR IST ALS EINE BEQUEMLICHKEIT Der alte Riegel verlangte einen Abo-Status. Nachgesehen, statt vermutet: Die Bezahlung auf abonnieren.html steht auf "Coming soon", bis Dogis PayPal-Business-Zugang da ist (der Kommentar dort nennt es beim Namen). Registrieren geht, bezahlen nicht. Der erste echte Partnercode lag damit seit gestern hinter einer Tuer, die sich gar nicht oeffnen laesst -- er waere fuer NIEMANDEN sichtbar gewesen ausser fuer Dogi und VanVan ueber die Rollenvorschau. Entschieden wird jetzt an "supporterToken" (beim Login gesetzt, beim Logout entfernt, supporter.js). Der Abo-Stand wird als Sicherheitsnetz weiter mitgelesen: Niemand soll Zugang verlieren, den er gestern hatte. BEIDE STELLEN, NICHT EINE Die Bedingung steht doppelt im Haus -- an der Kachel auf links.html und an der Seite selbst. Nur eine davon umzustellen erzeugt einen Fehler, den keine der beiden fuer sich zeigt: Man kaeme mit Konto auf die Seite und saehe dort die Sperre. Beide sind umgestellt, tragen den Hinweis aufeinander, und die Pruefung vergleicht sie in jedem Anmeldezustand gegeneinander. TEXTE, DIE SONST GELOGEN HAETTEN "Nur fuer Supporter" auf einer Seite, die ein kostenloses Konto oeffnet, schickt Leute zum Bezahlen fuer etwas, das sie umsonst bekommen. Kopf, Vorspann, Kachelband, Beschreibung und Sperrtext sagen jetzt "Konto", in allen fuenf Sprachen. Die Sperre bietet auf Filipes Wunsch beide Wege an: den kostenlosen zuerst, das Abo daneben -- mit einer Zeile darunter, dass es erst startet, wenn es offiziell live geht. Ohne die waere der zweite Knopf eine Falle. EIN FEHLER, DER SEIT DEM 03.08.2026 DRINSTAND Die Pruefung meldete auf der FREIGESCHALTETEN Kachel weiter "Nur mit Konto" statt "Freigeschaltet". Ursache: Das Skript setzte den Text (`badge.textContent = ...`), aber applyTranslations() schreibt aus dem data-i18n-Attribut zurueck -- und es laeuft danach noch einmal, weil dogiSiteTexteLaden() die Texte aus der Verwaltung holt und dann neu uebersetzt. NACHGEMESSEN STATT HERGELEITET, und die erste Erklaerung war zu schnell: Der Text war schon nach 50 ms falsch, also nicht "irgendwann spaeter ueberschrieben". Der Grund ist, dass TEAM_API_BASIS auf den ECHTEN Worker zeigt -- der Abruf gelingt selbst aus einer lokalen Testseite. Kontroll- versuch mit blockiertem Abruf: derselbe alte Code, und das Band bleibt korrekt. Ursache weg, Fehler weg. Behoben, indem der SCHLUESSEL getauscht wird statt des Textes. Damit schreibt jeder weitere Uebersetzungslauf von selbst das Richtige hin -- auch bei Sprachwechsel, wo die alte Fassung ebenfalls zurueckfiel. Aufgefallen ist es nie, weil bis gestern niemand in den freigeschalteten Zustand kommen konnte. NEBENBEFUND, NICHT ANGEFASST: index.html hat dieselbe Bauart beim Live-Status (#live-text mit data-i18n, Text per Skript gesetzt). Gemessen ist es dort ein Wettlauf zweier Abrufe -- in meinem Lauf gewann der Status um Haaresbreite, und ein Sprachwechsel repariert es dort ohnehin (dogi-sprache-geaendert). Kleiner, aber echt. Auf Ansage. pruef-rabattcodes EXIT=0 (63 Pruefungen, vorher 42). Neu darunter: drei Anmeldezustaende statt zweier -- ausgeloggt, angemeldet ohne Abo, angemeldet mit Abo --, jeder auf BEIDEN Seiten, dazu der Klick auf die Kachel (fuehrt sie wirklich weiter?), die Beschriftung des Bands und als Gegenprobe ein erzwungener Uebersetzungslauf, der den alten Fehler zuverlaessig ausloest. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
8cdc31bd46 |
Der erste Partnercode steht: DOGI10 auf einer gepraegten Muenze
Die Rabattcodeseite war ein Platzhalter -- "Codes folgen in Kuerze" und
darunter eine Vorschaukachel mit dem erfundenen Code "DOGFATHER". Jetzt
steht der erste echte drauf: DOGI10 fuer Van's DIY & Bastelbedarf,
verlinkt auf vans-diy-bastelbedarf.com.
DIE KONDITIONEN SIND ABGELESEN, NICHT GERATEN.
Aus "DOGI10" auf zehn Prozent zu schliessen, waere naheliegend gewesen,
haette zufaellig gestimmt und waere trotzdem falsch gewesen. Nachgesehen
im Shop selbst (src/content/partnercodes.json):
{ "code": "DOGI10", "prozent": 10, "bis": "2026-09-30",
"aktiv": true, "giltAufSale": false }
Zwei der drei Angaben stehen im Namen NICHT drin: dass der Code am
30.09.2026 auslaeuft und dass er auf bereits reduzierte Artikel nicht
gilt. Beides steht jetzt sichtbar auf der Karte. Eine falsche Zusage auf
einer Verkaufsseite kostet VanVan die Diskussion an der Kasse.
Gegengeprueft, dass die Datei auch wirklich gilt und kein Ueberbleibsel
ist: Sie wird an zwei Stellen ausgewertet, src/scripts/cart.ts fuer den
Warenkorb und server/lib/preis-berechnen.js fuer den Endpreis, beide mit
derselben Regel (aktiv !== false UND jetzt <= bis 23:59:59).
DAS ABLAUFDATUM IST EINE ZEITBOMBE, ALSO BEKOMMT ES EINEN ZUENDER.
Ein fest eingetippter Satz "gueltig bis 30.09.2026" stimmt, bis der
Kalender ihn ueberholt -- ab dem 01.10. verspraeche die Seite etwas, das
der Shop schon ablehnt. Genau dieselbe Falle hat am 06.09. den
Oeffnungstest im Shop umgeworfen. Das Datum steht deshalb nicht nur im
Text, sondern einmal als Zahl im Skript: Ist es vorbei, schaltet die
Karte selbsttaetig auf "abgelaufen", streicht den Code durch und sperrt
den Kopierknopf, statt weiter zu werben.
DAS LOGO: AUS EINEM SIEGEL WIRD EINE MUENZE.
Filipe hat das Logo als Bildschirmfoto aus TikTok geliefert, rundes
Siegel auf schwarzem Grund. Ungestellt waere daraus auf der dunklen
Karte ein sichtbarer schwarzer Kasten geworden -- derselbe Fehler wie
bei der Workspace-Marke, deren Zahlen damals tadellos aussahen.
Freigestellt wird per Flutfuellung vom Bildrand (tools/partner-siegel-
freistellen.mjs, 384 px WebP, 37 KB). Eine Kreismaske waere hier sogar
ausrechenbar gewesen -- Mitte 539,5/526,5, Radius 495 -- und haette
genau fuer dieses eine Bild funktioniert. Die Fuellung MISST die Form,
statt sie vorauszusetzen: Der naechste Partner ist ein Eintrag in
AUFTRAEGE und sonst nichts. Die Quelle liegt mit im Repo, sonst laesst
sich das Werkzeug genau einmal ausfuehren und ist danach Dekoration.
"Extrem speziell" fuehrt hier NICHT ueber mehr Farbe -- das Siegel ist
schwarz-weiss, jede Einfaerbung lackierte eine fremde Marke um. Es
fuehrt ueber mehr Material: sechs CSS-Lagen, kein zweites Bild.
Aura weicher Lichthof, atmet in 9 s
Raendel die geriffelte Muenzkante, 72 Zaehne. Sie steht STILL --
eine sich drehende Riffelung flimmert bei 148 px, und das
waere genau die grelle Optik, die die Hausregel ausschliesst
Glanz stattdessen wandert EIN Lichtpunkt in 22 s um die Kante.
Das ist die Bewegung, die eine Muenze im Licht macht
Schliff Praegekante nach innen, oben Licht, unten Schatten
Ablage elliptischer Schatten, damit die Muenze auf der Karte LIEGT
Bei prefers-reduced-motion steht alles davon still.
NEBENBEFUND, DER SONST NIEMANDEM AUFGEFALLEN WAERE: Der Text auf der
Sperrkachel endete auf "sobald die ersten Kooperationen live sind".
Seit heute IST die erste live -- der Satz haette jemanden dafuer zahlen
lassen, auf etwas zu warten, das schon hinter der Sperre liegt.
Ebenfalls nachgemessen statt vermutet: die Warengruppen im
Beschreibungssatz sind die echten Kategorien des Shops.
pruef-rabattcodes EXIT=0 (42 Pruefungen), darunter beide Richtungen der
Supporter-Sperre, die Bildpunkte des ausgelieferten Siegels (Ecken
durchsichtig, Mitte deckend, 69 % Flaeche), das Kopieren gegen die echte
Zwischenablage samt Gegenprobe davor, die Ablaufschaltung mit gestellter
Uhr an beiden Seiten des Stichtags und alle fuenf Sprachen.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
d694e34fcb |
Die Uhr nach Filipes Vorbild: LED-Kranz, Anker, rote Anzeige
Filipe hat eine Sci-Fi-Uhr geschickt (1250 px) und gesagt "so wie die".
Unsere ist 164 px gross -- Faktor 7,6. Was uebernehmbar ist, entscheidet
damit nicht der Geschmack, sondern die Groesse:
UEBERNOMMEN der blaue LED-Punktkranz aussen (das auffaelligste
Merkmal des Vorbilds), die vier Anker bei 12/3/6/9,
der rote Grundton der Digitalanzeige.
NICHT MOEGLICH die Minutenzahlen 00/05/…/55 und die Stundenzahlen
1-12. Im Vorbild sind sie rund 30 px hoch; hier waeren
es VIER. Zahlen, die man nicht lesen kann, sind kein
Zifferblatt, sondern Rauschen -- und sie wuerden die
drei Boegen zudecken, die die eigentliche Anzeige sind.
Der Kranz ist ein `repeating-conic-gradient` mit 6-Grad-Takt, aus dem
eine Maske einen schmalen Ring schneidet: 60 Punkte, einer je Sekunde,
in EINER Ebene. Sechzig <span> waeren sechzig Elemente fuer eine Zierde.
Die vier Anker ebenso, mit 90-Grad-Takt.
EINE FALSCHE BEGRUENDUNG, VON DER EIGENEN RECHNUNG WIDERLEGT: Ich hatte
in den Kommentar geschrieben, reines Neonrot wie im Vorbild "reisse den
Kontrast" und liege bei 4,0:1. Nachgerechnet sind es 5,27:1 -- es haelt
die Grenze von 4,5. Die schoenere Begruendung war die falsche.
Die Entscheidung bleibt trotzdem, nur mit dem echten Grund: Diese Uhr
steht DAUERHAFT im Bild einer Seite, an der gearbeitet wird. Reines
gesaettigtes Rot auf Schwarz ermuedet bei stundenlangem
Nebenherschauen, auch wenn es messbar lesbar ist -- genau das meint die
Hausregel "augenschonend", und das deckt keine Kontrastzahl ab. Die
Ziffern sind deshalb ein sehr helles Rotweiss (15,9:1), das seinen
roten Charakter aus dem Schein im Textschatten bekommt. Man liest
"rote Digitalanzeige", ohne stundenlang in eine Leuchtreklame zu sehen.
Aus demselben Grund liegt das Blau der LEDs bei rund 53 % Deckkraft:
Die Anmutung kommt vom Aufbau, nicht von der Grellheit.
pruef-start-ansicht EXIT=0 (140), pruef-css-klassen EXIT=0 (28).
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
e2bd6d4dc4 |
Die Uhr bekommt Kometenschweife -- und die Koepfe gleiten, statt zu springen
Filipe: "nehm diese uhr bitte und passe sie so gut wie es geht an, auch die lichter von sekunden, minuten und stunden perfekt anpassen ... überrasch mich." ZWEI DINGE, DIE EINE UHR LEBENDIG MACHEN. 1. DER KOMETENSCHWEIF. Ein Bogen in gleichmaessiger Farbe zeigt einen STAND. Ein Bogen, der zur Spitze hin heller wird, zeigt eine RICHTUNG -- man sieht ohne Nachdenken, wo "jetzt" ist und wohin es laeuft. Bei drei Ringen uebereinander ist das der Unterschied zwischen Ablesen und Erkennen. Gebaut als zweites, kuerzeres Segment ueber dem Bogen: die letzten rund 40 Grad, heller, mit runder Kappe. Ein Verlauf ENTLANG der Bahn geht in SVG nicht -- `linearGradient` folgt einer Geraden, keiner Kurve. Zwei Lagen sind der ehrliche Weg dorthin. Die Lage wird gerechnet, nicht geschaetzt: Bei Umfang U, Fortschritt a und Schweiflaenge s soll das Segment von (aU - s) bis aU liegen. Mit `dasharray: s, U-s` beginnt das sichtbare Stueck bei (U - offset), also ist offset = U*(1-a) + s. Die Laenge wird bei kurzen Boegen mitgekuerzt -- sonst haenge der Schweif am Anfang einer Minute am ENDE des Kreises, sichtbar als heller Strich bei zwoelf Uhr. 2. DIE KOEPFE GLEITEN. Bisher sprangen sie einmal je Sekunde. Jetzt uebernimmt der Browser die Bewegung dazwischen (Ueberblendung von 0,92 s) -- das Skript rechnet weiterhin nur EINMAL je Sekunde. Sechzig Bildberechnungen je Sekunde wuerden auf einer stundenlang offenen Seite den Rechner warm halten; diese Loesung kostet nichts. ZWEI FEHLER DABEI, BEIDE NUR IM BILD ZU SEHEN: Der erste Versuch rechnete die Winkel aus der vollen Unixzeit, damit sie immer weiterwachsen (sonst liefe die Ueberblendung einmal je Minute rueckwaerts durchs Zifferblatt). Ergebnis: `rotate(1.07333e+10deg)` -- Exponentialschreibweise, Nachkommastellen weg. Die Koepfe standen sichtbar neben ihren Boegen, der rote auf der anderen Seite der Uhr. Jetzt zaehlt eine eigene Uhr ab dem ersten Takt: klein genug zum Rechnen, wachsend genug fuer die Ueberblendung. Und ich hatte den Schweifen `rotate(-90deg)` gegeben, damit sie bei zwoelf beginnen -- das SVG ist aber bereits gedreht. Sie standen dadurch exakt eine Vierteldrehung daneben: oben links, waehrend die Boegen oben rechts endeten. NACHGEMESSEN, in Grad statt nach Augenmass: Kopf gegen Bogenende Abweichung 0,00° / 0,00° / 0,03° Schweifende gegen Bogen Abweichung 0,0° / 0,0° / 0,0° pruef-start-ansicht EXIT=0 (140), pruef-css-klassen EXIT=0 (28). Bei `prefers-reduced-motion` gleiten die Koepfe nicht -- sie springen dann wie vorher. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
4c0ff5caa9 |
Die vier Call-Reiter stehen bei jeder Rolle -- und die Tagesliste bekommt die Fase
Filipe mit zwei Bildschirmfotos nebeneinander: "wieso bei den scouts so und bei den manager so?" Bei Patrick stand EINE Tafel ueber die volle Breite, bei Schulle vier nebeneinander. DIE URSACHE war zweimal derselbe Satz Code an zwei Stellen in calls.js: `if (!liste.length) continue;` eine leere Gruppe wurde nicht gebaut `... return;` sind ALLE leer, gab es nur einen Satz Wer nichts Offenes hat, sah damit nicht "weniger", sondern eine anders AUFGETEILTE Seite: Bei einer Tafel zieht sich diese ueber die ganze Reihe. Genau derselbe Fehler wie bei den Aufgabenzahlen auf der Startseite heute -- und dieselbe Loesung: Die Tafel bleibt stehen, wird gedaempft und zeigt eine Null. "Protokoll fehlt: 0" ist eine Aussage, ein fehlender Reiter ist keine. Leere Tafeln starten zugeklappt -- aufklappen wuerde nur eine leere Liste zeigen. Der Hinweis "Noch keine Calls" bleibt, er ist nuetzlich, und steht jetzt UEBER den vier Tafeln statt an ihrer Stelle. DABEI EINEN ZWEITEN FEHLER GEBAUT UND GESEHEN: Der Hinweis wurde damit zum Geschwister der Tafeln, und `.call-brett` ist ein Flex-Kasten in EINER Reihe -- er nahm sich eine Spalte und quetschte die vier Tafeln daneben auf je 80 px. Im Bildschirmfoto standen vier Stummel neben einem breiten Satz. Behoben mit `flex-wrap: wrap` und voller Breite fuer den Hinweis; nachgemessen stehen die vier jetzt bei je 280 px. DAZU EIN BEFUND AUS DEM FORMVERGLEICH ueber alle fuenf Rollen: `.tagesliste__punkt` (die Terminzeilen auf der Startseite) trug noch runde Ecken -- direkt unter Kacheln mit Fase. Sie bekommt den Zuschnitt von Hand, nicht ueber die Modulliste: `::before` traegt die Farbkante links, die sagt, um welche Art Termin es geht, und die Modulliste braucht dasselbe Pseudo-Element fuer ihre Eckwinkel. NACHGEMESSEN ueber drei Rollen: scout 4 Reiter, admin 4, creator 4 -- alle mit derselben Aufteilung. pruef-abbrechen-optik EXIT=0 (27), pruef-start-ansicht EXIT=0 (140), pruef-css-klassen EXIT=0 (28). Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
da274f7825 |
Die Dialoge bekommen die Fase -- und einer war ueberhaupt nicht gestaltet
Filipe: "es soll bei jedem nicht nur bei patrick sondern bei jedem die
neue stile haben wie bei mir."
Mein Durchlauf ueber 18 Seiten und fuenf Rollen hatte die DIALOGE
ausdruecklich ausgenommen -- und genau dort lag noch etwas.
1. `.dialog` trug runde Ecken (4px 20px 20px 4px). Er bekommt jetzt
dieselbe Fase wie alles andere. NICHT ueber die Modulliste: Die
belegt `::before` und `::after` fuer die Eckwinkel, und beide sind
hier schon vergeben -- an die Leuchtschiene links und den Lichtsaum.
Beides gegen zwei Winkel zu tauschen waere ein Rueckschritt, also
nur der Zuschnitt von Hand, mit derselben Groesse `--fase`.
2. DER WECKER-DIALOG WAR GAR NICHT GESTALTET. Gefunden beim Nachsehen,
welche Dialoge nicht `.dialog` heissen: Dieser traegt `.tagdialog`,
und diese Klasse stand in KEINER Stilvorlage. Gemessen bekam er vom
Browser:
Hintergrund rgb(18, 18, 18) flaches Systemschwarz
Rand 3 px Systemrahmen
Fase keine
Raster keins
Er sah aus wie ein Fenster des Betriebssystems mitten im Workspace --
auf JEDER Rolle, denn den Wecker haben alle. Aufgefallen ist es nie,
weil er nur aufgeht, wenn man die Glocke an einem Termin drueckt.
Nebenbei stand das Schliesskreuz unter der Ueberschrift statt daneben:
Auch `.tagdialog__kopf` war ohne Regel.
DAS IST DER GRUND, WARUM DER ERSTE DURCHLAUF "0 im alten Muster" ergab
und trotzdem nicht die ganze Wahrheit war: Meine Messung suchte
Elemente mit runden ECKEN. Ein Baustein ganz ohne Gestaltung hat keine
runden Ecken -- er faellt durch dasselbe Sieb. Eine Suche findet nur,
wonach sie fragt.
pruef-kalender EXIT=0 (84), pruef-wecker EXIT=0 (20),
pruef-css-klassen EXIT=0 (28), pruef-start-ansicht EXIT=0 (140).
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
bd21062d29 |
Alle Seiten folgen derselben Form -- gemessen ueber 18 Seiten und fuenf Rollen
Filipe: "die seiten sollen bei jedem aussehen wie bei mir, bei patrick
zumbeispiel sieht sehr viel noch nach dem alten muster aus ... alles was
sie sehen soll dan auch nach der neuen struktur aufgebaut sein."
GEMESSEN STATT GESCHAUT. Das "alte Muster" ist praezise benennbar: runde
Ecken (border-radius 18px) statt der gefraesten Fase (clip-path polygon
mit 18px). Damit laesst es sich SUCHEN, nicht nur ahnen -- ein Durchlauf
ueber alle 18 Seiten in allen fuenf Rollen, der jedes Element ab
260x90 px meldet, das eine eigene Flaeche und runde Ecken hat.
vorher 5 Klassen im alten Muster, 90 Seitenaufrufe
jetzt 0 Klassen
DER GROESSTE EINZELPOSTEN war der Seitenkopf. `.kopf-zeile` trug runde
Ecken -- auf VIERZEHN Seiten das erste, was man sieht, direkt neben
Kacheln mit Fase. Dazu `.k-kopf` (Kalender), `.steckbrief`,
`.k-anlasskarte`, `.k-raster`, `.entscheidung` und die
Formulargruppen auf der Profilseite.
ZWEI SELEKTOREN MIT BEDACHT, weil derselbe Klassenname zweierlei meint:
`.gruppe[data-gruppe]` nur die Reiter auf der Calls-Seite. Auf der
Startseite heissen die Bereichsgruppen ebenso,
sind aber BEHAELTER fuer Kacheln und duerfen
selbst keine sein. `data-gruppe` setzt
ausschliesslich calls.js -- nachgeprueft.
`fieldset.gruppe` nur die Formularbloecke auf profil.html. Die
Startseite baut `section.gruppe`. Das Element
unterscheidet sie sauber, die Klasse nicht.
BEINAHE FALSCH GEMACHT: Ich war sicher, `.steckbrief` und
`.k-anlasskarte` staenden bereits in der Modulliste, und wollte
weitersuchen, warum die Regel bei ihnen nicht greift. Nachgesehen: Sie
standen gar nicht drin -- ich hatte sie mit `.k-listentag` und einer
Liste aus kopf.js verwechselt. Eine plausible Erinnerung ersetzt keinen
Blick in die Datei.
DIE MODULLISTE STEHT SIEBENMAL WORTGLEICH. Alle sieben ergaenzt;
pruef-css-klassen prueft "alle sieben Kopien sind Zeichen fuer Zeichen
gleich" und zaehlt jetzt 43 Klassen statt 36.
GEPRUEFT:
90 Seitenaufrufe (18 Seiten x 5 Rollen) -> 0 Bausteine im alten Muster
36 Seitenaufrufe auf 360/390/412 px -> 0 px waagerechter Ueberstand
pruef-css-klassen EXIT=0, pruef-start-ansicht EXIT=0 (140),
pruef-rollen EXIT=0 (97), pruef-abbrechen-optik EXIT=0 (27)
Die Handy-Messung gezielt selbst gefahren statt pruef-handy zu starten:
Die eine Frage, die diese Aenderung aufwirft, ist der Ueberstand -- in
40 Sekunden beantwortet statt in drei Minuten.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
cba46e79e6 |
Jede Rolle sieht dieselben Kategorien -- und die Reiter werden zu Kacheln
Filipe, mit Bildschirmfoto: "diese beiden kategorien sollen bei jedem in
jeder rolle gleich sein ... alles was kacheln ist und so soll gleich sein."
ERSTENS: DIE ZAHLENREIHE VERSCHWAND BEI EINER ROLLE.
Nachgemessen ueber alle fuenf Rollen sah Spicy Media als EINZIGE keine
Zahlenreihe, sondern einen Satz -- die anderen vier sahen sieben
Kategorien:
spicy 0 Zahlen (Leer-Hinweis statt Zahlen)
admin 7 Zahlen
manager 7 Zahlen
scout 7 Zahlen
creator 7 Zahlen
Die Ursache war eine gut gemeinte Regel: "Sechs Nullen nebeneinander
sind kein Bericht, sondern Rauschen" -- bei Summe null wurde die ganze
Reihe geloescht. Der Gedanke stimmt, die Folge nicht: Wer zwischen zwei
Rollen wechselt, findet die Seite anders aufgebaut vor und sucht, was
fehlt.
Jetzt steht die Reihe IMMER, mit denselben sieben Kategorien fuer alle.
Ist wirklich nichts offen, wird sie GEDAEMPFT (weniger Deckkraft, kein
Warnrot, Zahlen ohne Leuchten) und der Satz steht ZUSAETZLICH darunter
statt an ihrer Stelle. Gedaempft ist auch eine Antwort, nur eine leise --
und die Form der Seite bleibt ueber alle Rollen gleich.
Nachgemessen: alle fuenf zeigen jetzt dieselben sieben.
ZWEITENS: DIE REITER AUF DER CALLS-SEITE WAREN KEINE KACHELN.
Gemessen: Eine Kachel traegt `clip-path: polygon(18px 0 …)` -- die
gefraeste Fase -- plus Innenschatten. Die Reiter hatten `clip-path: none`
und nur einen feinen Lichtrand. Sie standen als einzige Bausteine
ausserhalb der gemeinsamen Sprache.
Sie sind jetzt in der Modulliste von module.css. Der Selektor ist
`.gruppe[data-gruppe]` und nicht `.gruppe`: Auf der Startseite heissen
die Bereichsgruppen genauso, sind aber BEHAELTER fuer Kacheln und
duerfen selbst keine sein. `data-gruppe` setzt ausschliesslich calls.js
-- nachgeprueft, nicht angenommen.
DIE MODULLISTE STEHT SIEBENMAL WORTGLEICH in der Datei. Alle sieben
wurden ergaenzt; `pruef-css-klassen` prueft genau das ("alle sieben
Kopien sind Zeichen fuer Zeichen gleich") und haette einen vergessenen
Eintrag gemeldet.
UND SIE HAT NOCH ETWAS GEMELDET, einen Fehler von heute Nachmittag:
".rs-funkel -- fehlt auf 1 Seite (index.html)". Beim Verdoppeln des
Rollen-Sprites auf die Anmeldeseite hatte ich die Gestaltung dazu nicht
mitgenommen; sie lag in personen.css, die index.html gar nicht laedt.
Der Manager-Stern stand dort ohne seinen Glanz. Die Regeln liegen jetzt
in gate.css -- auf allen 19 Seiten. Derselbe Fehler wie beim Sprite
selbst, nur eine Ebene hoeher: Wer etwas verdoppelt, muss alles
mitnehmen, was daran haengt.
pruef-css-klassen EXIT=0, pruef-start-ansicht EXIT=0 (140),
pruef-abbrechen-optik EXIT=0 (27).
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
2872f714f3 |
Ein App-Symbol aus beiden Marken: Husky in der Mitte, Chili als Sockel
Filipe: "ich will dass du da eine geile mischung machst von diesen zwei logo ... mach was ultra krass geiles draus bitte." DIE AUFGABE IST NICHT "zwei Bilder nebeneinander". Ein App-Symbol steht bei 32 px im Browserreiter und bei 192 px auf dem Startbildschirm. Zwei vollstaendige Logos nebeneinander ergeben dort zwei unlesbare Haelften. Gebraucht wird EINE Form, in der beide vorkommen. Der Husky steht im Zentrum -- eine Silhouette traegt bei kleiner Groesse am besten. Die Chili liegt als Bogen darunter, wie ein Sockel. Der Hintergrund traegt beide Farben: Chili-Rot unten links, Dogi-Blau oben rechts, und sie treffen sich in der Mitte -- dieselbe Klammer wie im Schriftzug "Spicy & Dogi" in der Kopfleiste. Der Husky wird als MASKE eingesetzt und mit Silber gefuellt: Das Original ist schwarzweiss und waere auf dunklem Grund ein dunkler Fleck. UNTER 64 px FAELLT DIE CHILI WEG. Sie waere dort ein verwaschener Fleck und wuerde die Husky-Silhouette anfressen. Ein Symbol, das klein noch erkennbar ist, ist mehr wert als eins, das alle Bestandteile zeigt und dabei zu Matsch wird. EINMAL NACHGEBESSERT nach dem Blick aufs Bild: Die Chili sass zuerst hoeher und schnitt dem Husky die Brust ab. Jetzt liegt sie tiefer, er steht vollstaendig. GEPRUEFT WIRD NICHT DIE DATEIGROESSE, sondern die Streuung der Helligkeit. Ein Symbol, das aus einem Fehler heraus einfarbig ist, hat dieselbe Bytezahl wie eines mit Motiv -- die beweist also nichts. Ein leeres Feld hat keine Streuung; gemessen wurden 48 bis 69 bei einer Untergrenze von 12, unter der das Werkzeug abbricht. EINE FALLE MITENTSCHAERFT: `tools/app-symbole.mjs` fuehrte den Workspace noch in seiner Liste und haette die sechs Dateien beim naechsten Lauf stillschweigend ueberschrieben -- gleiche Namen, gleicher Ordner, kein Fehler, nur wieder das alte Symbol. Er steht dort nicht mehr. pruef-workspace-seiten EXIT=0 (32), pruef-assets EXIT=0. Nebenbefund, NICHT von hier: pruef-verwaltung-app scheitert an einem MODULE_NOT_FOUND -- gegen den alten Stand gegengeprueft, dort derselbe Fehler. Vorbestehend, gehoert auf die offene Liste. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
25f35c1290 |
Die App-Leiste wird dunkel, und der Titel sagt nicht mehr alles doppelt
Filipe, mit Bildschirmfoto der installierten App: "die barre oben wenn ich die seite als app installiere ist blau, sie soll der seite angepasst werden auch der text oben soll jetzt der seite unten angepasst werden". DIE LEISTE stand auf `theme-color: #0674b9` -- ein kraeftiges Blau. In einem Browserfenster faellt das nicht auf, weil man die Angabe dort gar nicht sieht. Als installierte App ist sie die FENSTERLEISTE, und damit sass ueber einer durchweg dunklen Seite ein leuchtend blauer Balken. Jetzt derselbe Ton wie die Kopfleiste darunter (#06090f): Leiste und Seite sind eine Flaeche statt zweier. Geaendert auf allen 19 Seiten und im Manifest -- steht die Farbe nur an einer Stelle, blitzt beim Wechsel auf eine andere Seite kurz die alte auf. DER TITEL stand doppelt in der Leiste, und beide Haelften sagten dasselbe: "Creator Workspace — Dogfather Universe" (aus dem Manifest) plus "Dogfather Universe · Creator Workspace · Anmeldung" (aus <title>). Der Markenname kam zweimal, der Anwendungsname zweimal, und was die Seite tatsaechlich zeigt, stand ganz hinten. Jetzt steht vorn, WO man ist, und hinten die Marke: Anmeldung · Spicy & Dogi Kalender · Spicy & Dogi Personen & Zugaenge · Spicy & Dogi "Creator Workspace" faellt dabei aus den Unterseiten heraus -- es steht im Manifest und damit ohnehin im Fenstertitel. Neunzehn Titel, alle nach demselben Muster; vorher folgten sie zwei verschiedenen. Das Manifest heisst jetzt "Creator Workspace — Spicy & Dogi" und der Ladehintergrund #0a121e statt #151e2a: Er ist das Erste, was beim Starten der App zu sehen ist, und war heller als die Seite, die danach kommt -- ein Aufblitzen bei jedem Start. pruef-start-ansicht EXIT=0 (140), pruef-workspace-seiten EXIT=0 (32). Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
469bbe9d07 |
Babyblau statt Gold, lila Stern, sichtbarer Husky -- und eine zweite Variable
Drei Ansagen von Filipe nach dem Bildschirmfoto, alle an derselben Liste. screen2: "die hauptfarbe von der kategorie dogfather soll babyblausilber sein bitte." -- DAS WAR EIN FEHLER VON MIR, und zwar derselbe wie schon zweimal heute: Beim Umstellen auf die zentralen Rollenfarben habe ich `--rf` erwischt, aber `--rton` uebersehen. Die faerbt die GEWAEHLTE Rolle in der Tafel, und dort standen `--k-gold` (admin) und `--k-mittel` (manager) unveraendert. Deshalb leuchteten beide goldbraun, obwohl die Farben laengst umgestellt waren. Zwei Variablen fuer dieselbe Sache, nur eine angefasst -- wie die doppelte Groessenangabe beim Wasserzeichen und wie die zweite Kopie der Rollenzeichen in index.html. Jetzt kommen beide aus derselben Quelle; nachgemessen traegt admin rgba(63,189,245). screen3: "die hauptfarbe von denen ist lila, der stern soll so bleiben aber was gelb ist soll lila werden." -- Die FORM bleibt, nur die Farbe wechselt. Das ist auch stimmiger: Der Manager traegt Lila als Rollenfarbe, ein goldener Stern daneben war die einzige Stelle, an der Zeichen und Rolle auseinandergingen. Die Wechsel hell/dunkel im Verlauf bleiben -- sie machen aus einer Flaeche einen Koerper. screen1: "der husky soll viel besser aussehen und zu sehen sein." Zwei Gruende, warum er unterging, und beide sind behoben: Die OHREN waren nur angedeutet und gingen in der silbernen Flaeche auf -- dabei erkennt man einen Husky zuerst daran. Sie sind jetzt dunkel ausgelegt, mit hellem Innenohr. Die GESICHTSMASKE fehlte ganz. Ohne sie ist der Umriss nur eine spitze Form mit zwei Punkten; mit ihr ist es ein Gesicht. Dazu 21 -> 27 px fuer alle fuenf Zeichen: rund 65 % mehr Flaeche, ohne dass die Zeile ihre Hoehe aendert. Bei 21 px lagen Ohren, Maske und Augen auf drei bis vier Bildpunkten -- da hilft keine Zeichnung. Beide Dateien geaendert, nicht nur eine: Das Sprite steht seit heute in personen.html UND index.html. Genau diese Doppelung hatte den letzten Fehler verursacht. pruef-rollen EXIT=0 (97), pruef-start-ansicht EXIT=0 (140). Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
1d0451948a |
Die drei Bahnen der Uhr gluehen von innen -- und die Stunde wird Bronze
Filipe: "die minuten sekunden und stunden soll viel spezieller, krasser und geiler sein, noch vieeeel mehr." Die Bahnen waren flache Striche in einem Verlauf -- sauber gebaut, aber ohne Koerper. Drei Aenderungen, und alle drei arbeiten mit LICHT statt mit mehr Farbe: 1. EIGENLEUCHTEN je Bahn, in ihrer eigenen Farbe. Auf einem schwarzen Zifferblatt kann man einen Strich entweder heller machen (dann blendet er) oder leuchten lassen (dann wirkt er wie eine Anzeige, die Licht abgibt). Zwei Schatten je Bahn: der enge gibt die Kante, der weite die Aura. 2. DIE STUNDE WIRD WARM. Sie lief in Schwarzsilber und war damit dem Zifferblatt am aehnlichsten -- ausgerechnet die Bahn, die man am haeufigsten abliest. Jetzt Bronze: warm gegen das kalte Blau der Minute und das Rot der Sekunde. Damit sind alle drei auf einen Blick zu trennen. Die Wechsel hell/dunkel im Verlauf bleiben, sie sind es, die aus einem Strich Metall machen. 3. DIE PERLEN sind die Spitzen -- dort schaut man hin. Sie bekommen denselben Schein wie ihre Bahn, nur staerker, und einen weissen Kern: der Unterschied zwischen einem farbigen Punkt und einem Licht. UND EINMAL ZURUECKGENOMMEN, nach dem Blick aufs Bild: Die Sekunde bekam zuerst denselben Schein wie die anderen beiden. Sie ist aber die laengste Bahn, die hellste Farbe UND die einzige, die sich sichtbar bewegt -- im Bildschirmfoto war sie ein roter Reifen, neben dem die Uhrzeit selbst zurueckstand. Ihr Leuchten liegt jetzt eine Stufe niedriger als das von Minute und Stunde. Gesehen, nicht gerechnet. Kein Pulsieren: Die Uhr steht dauerhaft im Bild, ein animiertes Leuchten am Bildrand ist genau das, was die Hausregel verbietet. Bei `prefers-reduced-motion` entfaellt der Schein ganz -- die Bahnen bleiben in voller Farbe stehen. pruef-start-ansicht EXIT=0, 140 Pruefungen. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
80dbb08eee |
Die Anmeldeseite bekommt die neuen Rollenzeichen -- sie war vergessen worden
Filipe hat es im Bildschirmfoto gesehen: Auf der Anmeldeseite standen weiter die alten, einfarbigen Zeichen -- rosa Chili, GELBER Husky, violetter Stern, Schild mit Haken, Person-Silhouette. Die neuen lagen zu dem Zeitpunkt seit Stunden im Haus, nur eben ausschliesslich in personen.html. DER GRUND ist eine Doppelung, die man dem Code nicht ansieht: index.html trug die Zeichen als EIGENE Kopien im Quelltext, nicht als Verweis auf ein gemeinsames Sprite. Wer eines von beiden aendert, aendert das andere nicht -- und merkt es nicht, weil beide Stellen fuer sich richtig aussehen. Dieselbe Sorte Fehler wie die doppelte Groessenangabe beim Wasserzeichen heute frueh, nur ueber zwei Dateien verteilt statt ueber 3600 Zeilen. Gefunden hat es kein Prueflauf, sondern Filipes Blick auf die Seite. Das ist der Grund, warum ein Bildschirmfoto mehr wert ist als eine gruene Zahl: Die Pruefungen sagten die ganze Zeit "in Ordnung" -- sie pruefen, dass Zeichen DA sind, nicht welche. Jetzt traegt index.html dasselbe Sprite (aus personen.html uebernommen, nicht abgeschrieben) und verweist mit <use> darauf. Die Zeichen gibt es damit nur noch einmal im Haus. DAS CSS MUSSTE MIT: Wie bei `.rollenwahl__symbol` setzte `.rolle__zeichen` ein `fill: none` und ein `stroke` in der Rollenfarbe. Beides wird an die Pfade vererbt -- jedes Zeichen waere von einem 1,7 px dicken Rand ueberzogen und seine Verlaeufe uebermalt worden. Die gewaehlte Rolle hebt sich jetzt ueber Groesse und Schein ab statt ueber die Farbe: Die gehoert dem Zeichen. Nachgemessen: 5 von 5 Zeichen kommen aus dem Sprite. pruef-rollen EXIT=0 (97), pruef-start-ansicht EXIT=0 (140). Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
bcfe0b93f9 |
Die Fugen im Kalender werden dunkel statt hell
Filipe, screen18: "die linien zwischen den kacheln und der rand die so kras durchsichtig sind, ich will dass dass die viel dunkler sind und die kacheln vom kalender selber sollen viel krasser und geiler aussehen." WOHER DIE LINIEN KOMMEN, und das erklaert den Fehler: Sie sind gar nicht gezeichnet. Das Raster hat `gap: 1px` und darunter eine Flaeche -- in den Luecken zwischen den Tagen scheint diese Flaeche durch, DAS sind die Linien. Sie trugen `var(--rand)`, einen hellen halbdurchsichtigen Ton, der fuer Raender AUF dunklem Grund gedacht ist. Zwischen zwei ohnehin dunklen Kacheln wirkt derselbe Ton wie ein heller Schleier -- genau das, was Filipe "kras durchsichtig" nennt. Jetzt ein eigener tiefer Ton (#05070c): Die Fuge ist DUNKLER als die Kacheln daneben, nicht heller. Damit sieht sie eingefraest aus statt aufgemalt -- dieselbe Ueberlegung wie bei den Fasen auf der Startseite. Der aeussere Rand bekommt eine feine helle Innenkante, sonst verlaeuft der Kalender am Rand ins Nichts. DIE TAGE BEKOMMEN TIEFE: ein leichter Verlauf von oben nach unten und ein Lichtsaum an der Oberkante -- Licht kommt von oben, also ist die Oberkante hell und die Flaeche faellt ab. BEWUSST SCHWACH (der Verlauf umfasst rund vier Prozent Helligkeit): Ein Monatsraster hat 35 bis 42 dieser Felder nebeneinander. Was bei einer einzelnen Kachel wirkt, wird hier vierzigfach zu Unruhe. Wochenende und fremde Monate bleiben ruhiger und heben sich ueber WENIGER LICHT ab, nicht ueber eine andere Farbe. Nachgemessen am laufenden Kalender: Fugenfarbe rgb(5, 7, 12), 35 Tage im Raster. pruef-kalender EXIT=0, 84 Pruefungen. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
e282ad3b44 |
Der Anmelde-Knopf traegt beide Marken -- und wurde erst durch Nachrechnen lesbar
Filipe, screen28: "dieser anmelde button soll noch viel spezieller sein bitte. und viel geiler." NUR DIESER EINE KNOPF. Er traegt die Klasse `.knopf`, die im Workspace an Dutzenden Stellen haengt -- wer sie aendert, aendert jeden Knopf im Haus. Die Regel greift deshalb ueber `#knopf` und laesst alle anderen in Ruhe. Der Verlauf laeuft vom Chili-Rot von Spicy Media in das Blau von Dogi -- dieselbe Klammer wie im Schriftzug der Kopfleiste, und hier besonders am Platz: Dieser Knopf ist die Tuer ins Haus. UND DANN HAT MICH DIE RECHNUNG WIDERLEGT. Der erste Entwurf nahm die Marken-Toene direkt (#d94a3f bis #7ec8f2). Er sah gut aus -- genau das ist die Falle. Nachgerechnet lag weisser Text darauf bei: #d94a3f 4,20:1 #6ca8d8 2,55:1 #e2664a 3,37:1 #7ec8f2 1,84:1 Auf dem hellsten Punkt also nicht einmal beim halben Mindestwert. Ich hatte im Kommentar daneben "ueber 4,5:1 an jeder Stelle" behauptet, ohne es nachzurechnen. Der Knopf waere schoen und unlesbar gewesen. Jeder Stuetzpunkt ist jetzt so weit abgedunkelt, bis weisser Text 4,6:1 erreicht -- knapp ueber der Grenze, damit Rundungen nicht darunter rutschen. Die Farben bleiben erkennbar Rot und Blau, sie sind nur tiefer. Schlechtester Wert jetzt 4,63:1. MERKSATZ, der auch fuer jeden naechsten Verlauf gilt: Ein Verlauf ist so lesbar wie sein HELLSTER Punkt, nicht wie sein Durchschnitt. Beim Textverlauf in der Kopfleiste war es dieselbe Regel mit umgekehrtem Vorzeichen -- dort zaehlt der dunkelste. Der Glanz wandert beim Ueberfahren statt zu pulsieren (wie Manager-Stern und Kalender-Knopf), bei `prefers-reduced-motion` entfaellt er. Waehrend der Anmeldung wird der Knopf ruhig gestellt, damit der Ladepunkt die Aufmerksamkeit bekommt und nicht der Glanz. pruef-start-ansicht EXIT=0 (140), pruef-css-klassen EXIT=0. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
c262537b89 |
Der eigene Name leuchtet in der eigenen Rollenfarbe
Filipe, screen35: "die begrüßungen sollen auch viel krasser und geiler sein, so richtig auffällig. so dass die leute motivation bekommen weil es so geil aussieht." NICHT UEBER DIE GROESSE, und das ist der Kern. Genau die habe ich heute frueh von 88 auf 56 px zurueckgenommen: In der Anrede-Pille steckt ein <h1> mit Titelgroesse, dadurch standen ZWEI Ueberschriften uebereinander. Sie jetzt wieder aufzublasen hiesse, denselben Fehler ein zweites Mal zu machen. "Auffaellig" heisst ohnehin nicht "gross", sondern "hebt sich ab". Der Name hebt sich ueber die FARBE ab: Er traegt einen Verlauf in `--r-haupt`, der Farbe der angemeldeten Rolle. Jeder sieht damit seinen eigenen Namen in seiner eigenen Farbe -- nachgemessen: DogFather #7ec8f2 (babyblau), Scout #5fc99a (gruen), Creator #c79a6d (bronze). Das ist der Unterschied zwischen "da steht mein Name" und "das hier ist meins". Der Gruss davor bleibt bewusst leise und farblos. Wenn beides leuchtet, leuchtet nichts -- die Betonung gehoert dem Namen, nicht der Uhrzeit. Mit derselben Sicherung wie beim Schriftzug in der Kopfleiste: `color` steht zuerst und sichtbar da, Verlauf und durchsichtige Fuellung stehen nur im @supports-Block, und bei `forced-colors: active` wird alles zurueckgenommen. Durchsichtige Schrift ohne Rueckfallwert waere ein Ausfall, kein Schoenheitsfehler. Das Leuchten liegt als `drop-shadow` HINTER der Schrift -- es gibt dem Namen Tiefe, ohne ihn zu vergroessern. pruef-start-ansicht EXIT=0, 140 Pruefungen. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
8b317b23e2 |
Der Weg in den Kalender ist ein Knopf, kein Nebensatz
Filipe, screen33: "der kalender button da in der kachel oben rechts, der soll viel auffälliger sein und viel krasser und geiler." Er sah aus wie ein Verweis im Fliesstext -- kleine Schrift, kein Rahmen, keine Flaeche. Neben der fetten Ueberschrift "Heute" verschwand er, obwohl er die einzige Handlung in dieser Zeile ist. vorher Text in .78rem, ohne Fassung, rund 70x18 px jetzt 105x36 px, eigene Flaeche, farbiger Rahmen, Schimmer ER TRAEGT DEN KALENDER-TON, nicht das allgemeine Blau. Der Knopf fuehrt in den Kalender, und die Kachel dort hat genau diese Farbe (Nummer 8, #c06ad0). Wer ihn sieht, weiss ohne zu lesen, wo er landet -- das ist mehr wert als jede zusaetzliche Verzierung. Beim Ueberfahren wandert ein heller Streifen darueber. Derselbe Kniff wie beim Manager-Stern und aus demselben Grund: Glanz ist etwas, das sich BEWEGT -- ein Auf- und Abblenden waere ein Pulsieren. Der Streifen liegt in einem eigenen Element, damit er den Text nicht mitfaerbt, und bei `prefers-reduced-motion` entfaellt er. Der Knopf bleibt dann trotzdem auffaellig, er glaenzt nur nicht. `--f` wird mitgesetzt, damit der Schein beim Ueberfahren aus gate.css aus derselben Farbe kommt statt aus der Vorgabe. Nachgemessen am laufenden Browser: 105x36 px, Rahmen rgb(192,106,208) bei 48 % Deckkraft, Schrift 13,12 px / 650. pruef-start-ansicht EXIT=0, 140 Pruefungen -- diesmal GELESEN, bevor committet wurde, nicht in derselben Befehlskette daneben. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
80f410f5b8 |
Deckkraft des Wasserzeichens zurueckgenommen -- die Pruefung hatte recht
NACHTRAG ZU
|
||
|
|
b808e072c0 |
Das Zeichen der grossen Kachel wird groesser -- und eine zweite Regel fiel auf
Filipe, screen34: "das symbol rechts in der kachel, was so ganz klein ist das soll viel größer sein bitte!!!" Nachgemessen war es gar nicht klein: 178 px gegen 133 px bei den normalen Kacheln, also GROESSER. Es wirkt nur klein, und das ist der eigentliche Punkt -- die grosse Kachel ist 769 px breit (ueber die volle Reihe rund 1160), die normale 379. Dasselbe Zeichen hat dort doppelt so viel leere Flaeche um sich und verliert sich darin. Ein Zeichen wirkt nach dem Anteil der Flaeche, den es fuellt, nicht nach seiner Pixelzahl. DABEI KAM EINE ZWEITE REGEL ANS LICHT. Fuer dasselbe Element stand die Groesse an ZWEI Stellen in start.css -- einmal bei den Kachelregeln (196 px) und 3600 Zeilen spaeter noch einmal (158 px). Gleich starke Selektoren, also gewinnt der spaetere. Meine erste Vergroesserung blieb deshalb wirkungslos: gemessen weiterhin 178 px, obwohl im Quelltext 340 stand. Im Code sieht jede der beiden Regeln fuer sich richtig aus; erst die Zahl am laufenden Browser verraet, dass eine nie zur Wirkung kommt. Dieselbe Sorte Fehler wie bei `.kopfleiste .marke`, wo `flex` den Schrumpf-Faktor still zurueckgesetzt hat. Die Groesse steht jetzt nur noch an einer Stelle. UND EINMAL ZU WEIT. Der erste Versuch koppelte die Groesse an die BREITE: `min(46%, 340px)` ergab 384 px auf einer 152 px hohen Kachel. Im Bildschirmfoto war daraufhin GAR NICHTS mehr zu sehen -- was die Kachel nicht fasst, schneidet sie ab. Groesser ist hier nicht automatisch besser. Jetzt an der Hoehe ausgerichtet: 220 px, unten und rechts angeschnitten, der Grossteil im Bild. Gemessen wird seitdem die SICHTBARE Flaeche, nicht die Elementgroesse -- das ist die Zahl, auf die es ankommt: vorher rund 158x122 = 19k jetzt 204x152 = 31k (+63 %) pruef-start-ansicht EXIT=0, 140 Pruefungen. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
1f7761cb69 |
Die Kopfleiste glueht, die Knoepfe werden rot -- und DogFather sagt, was er tut
Drei Punkte aus der Nachtliste auf einmal, weil sie alle an derselben Leiste haengen. screen36: "hintergrund dieser leiste soll auch eine richtig geile mischung von rot schwarz sein, wie wenn es brennen würde." GLUT KOMMT VON UNTEN. Ein gleichmaessig roter Balken saehe aus wie eine Fehlermeldung. Feuer ist unten heiss und oben dunkel -- also liegt das Rot als flacher Schein an der Unterkante, wird nach oben schwarz und ist an den Raendern schwaecher als in der Mitte. Zwei uebereinanderliegende Verlaeufe machen das: einer fuer die Hoehe, einer fuer die Breite. Die Trennlinie nach unten glueht mit, sonst endet das Feuer an einer grauen Linie. Kein Flackern, und das ist Absicht: Diese Leiste steht auf JEDER Seite und liegt beim Lesen dauernd im Bild. Eine Animation waere ein Stroboskop am oberen Bildrand. Das Rot bleibt deshalb unter 30 % Deckkraft -- es glimmt, es leuchtet nicht. screen5: "die buttons: teilen, suchen und abmelden sollen rot, alle andere rot töne aber rot." Vier Knoepfe, vier verschiedene Rottoene -- "alle andere rot töne" heisst nicht viermal derselbe. Sie laufen von warm nach tief: Teilen im Chili-Rot der Marke, Chat ruhiger, Suchen glutorange, Abmelden am dunkelsten. Das ist auch die Reihenfolge, in der man sie braucht, und Abmelden soll am wenigsten locken. Gesetzt wird nur `--f`, die Knopffarbe aus gate.css -- sie faerbt Rahmen, Schimmer und den Schein beim Ueberfahren gleich mit. Fuenf Eigenschaften je Knopf zu setzen waere vier Gelegenheiten gewesen, eine zu vergessen. GERECHNET STATT GEMESSEN: Ein roter Text auf rotem Grund waere der naheliegende Fehler. Der Text nimmt deshalb nur 22 % der Knopffarbe an und bleibt sonst hell. Nachgerechnet gegen die HELLSTE Stelle der Glut (dort ist der Kontrast am schlechtesten): 10,45:1 im schlechtesten Fall, Grenze ist 4,5. Dafuer braucht es keinen 190-Sekunden-Lauf. screen27: Unter DogFather steht jetzt "Manager & Technik" statt "Gesamtuebersicht & Freigaben". Die alte Zeile beschrieb ein RECHT, die neue eine AUFGABE -- und danach sucht jemand, der vor der Rollenwahl steht: Er fragt sich nicht, was er duerfte, sondern was er hier tut. pruef-start-ansicht EXIT=0 (140), pruef-css-klassen EXIT=0. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
f42f9a7266 |
21 Kachelfarben neu gerechnet -- keine zwei aehneln sich mehr
Filipe, screen24/25: "viele kacheln haben noch fast die gleiche farben,
ähneln sich sehr und ich will dass du komplett eskalierst ... alle seine
eigenen farben und so dass sie sich nicht ähneln. sehr wichtig nicht
ähneln!!!!"
Er hatte recht, und es liess sich messen statt bereden:
kleinster Abstand zweier Toene 0,033 (Dateien gegen Creator-Profile)
Paare unter 0,05 (kaum trennbar) 21 von 210
Spanne der Helligkeit 0,002
DIE URSACHE WAR EINE GUTE ABSICHT. Die alte Palette lief gleichmaessig
um EINEN Farbring, mit bewusst konstanter Helligkeit und Farbstaerke --
"dadurch wirken alle gleich stark und keine draengt sich vor". Genau das
erzeugt den Fehler: Bleibt alles ausser dem Farbton gleich, ist der
Farbton der einzige Unterschied. 360 Grad auf 21 Kacheln sind 17 Grad,
und 17 Grad sieht man nicht.
Jetzt variieren Helligkeit UND Farbstaerke mit. Zwei Farben mit
aehnlichem Ton stehen trotzdem weit auseinander, weil die eine hell und
satt und die andere dunkel und ruhig ist -- der Abstand bekommt eine
zweite und dritte Dimension.
kleinster Abstand 0,097 (dreimal so gross)
Paare unter 0,05 0 von 210
Helligkeitsspanne 0,242
Gerechnet in OKLab, weil dort der Zahlenabstand dem entspricht, was das
Auge als Unterschied empfindet. Die Auswahl ist eine Suche, kein
Geschmack: erst gierig den jeweils entferntesten Ton nehmen, dann so
lange tauschen, wie der KLEINSTE Abstand dadurch waechst.
Drei Bedingungen halten dabei, und alle drei stehen im Werkzeug als
Abbruch, nicht nur im Bericht:
lesbar mindestens 4,5:1 gegen den Grund (schlechteste: 4,50)
augenschonend Farbstaerke gedeckelt bei 0,17 -- satt ja, Neon nein
trennbar gemessen ueber ALLE Paare, nicht nur ueber Nachbarn im
Raster: Auf der Uebersicht stehen dieselben Kacheln in
anderer Reihenfolge nebeneinander.
Das Werkzeug bricht ab, wenn eine neue Palette schlechter waere als der
alte Stand (0,0328) -- sonst waere ein schlechter Lauf von einem guten
nicht zu unterscheiden.
pruef-start-ansicht EXIT=0, 140 Pruefungen. Die Farben zusaetzlich am
laufenden Browser abgelesen, nicht nur aus der Datei.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
df0e74f751 |
Bearbeiten zeigt jetzt, was schon eingetragen war -- und loescht es nicht mehr
Filipe, screen19: "wenn ich auf bearbeiten drücke will ich dass mir immer
die daten angezeigt werden die schon ausgewählt wurden, damit ich auch
immer sehe okee das war alles und das änder ich."
Das war nicht nur unbequem, es war ein DATENVERLUST. Das Feld "Mit wem"
wurde beim Bearbeiten nie gefuellt und stand leer da. Beim Speichern wird
`teilnehmer_extern` aber trotzdem mitgeschickt -- der leere Wert
ueberschrieb also den vorhandenen. Wer einen Termin mit einem frei
eingetragenen Namen ("BananaStift") bearbeitete und speicherte, hatte den
Namen danach verloren, ohne ihn je gesehen zu haben. Nichts stuerzte ab,
nichts meldete sich; er war einfach weg.
DIE URSACHE lag tiefer als im Kalender: `window.personenwahl` konnte
lesen (`wert`, `extern`) und leeren (`zuruecksetzen`), aber NICHT
fuellen. Ein Bearbeiten-Formular hatte gar keine Moeglichkeit, einen
freien Namen anzuzeigen. Deshalb kommt die Reparatur in zwei Teilen:
wahl.js neue Funktion `setzen(wert, externText)`. Sie behandelt
die beiden Faelle als das, was sie sind: entweder eine
Person aus der Liste ODER ein freier Name -- nie beides.
Das eine setzt das andere zurueck.
kalender.js belegt das Gegenueber beim Bearbeiten vor, aus
creator_id / teilnehmer_id / teilnehmer_extern. Nur fuer
die Leitung, wie beim Speichern auch -- fuer die anderen
Rollen gibt es das Feld gar nicht.
Der Server lieferte die noetigen Felder die ganze Zeit mit
(t.teilnehmer_extern, t.creator_id, t.teilnehmer_id) -- es hat sie nur
niemand abgeholt.
Nachgemessen: `personenwahl('f-teilnehmer').setzen('', 'BananaStift')`
ergibt extern="BananaStift", wert="" -- der freie Name steht im Feld,
die Personennummer ist leer. pruef-kalender EXIT=0 (84),
pruef-serien EXIT=0 (69).
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
29785cc2a4 |
Abgebrochene Aufgaben mahnen nicht mehr -- an zwoelf Stellen, nicht an einer
Filipe, screen12: "die abgebrochenen sollen oben nicht mehr mit zaehlen
die sollen ihre eigenen kategorie kriegen".
DIE URSACHE war eine Bedingung, die harmlos aussieht: `a.status <>
'erledigt'`. Eine abgebrochene Aufgabe ist nicht "erledigt" -- also fiel
sie durch, und zwar in JEDE Zahl, die "noch zu tun" bedeutet. Eine
Aufgabe, die niemand mehr anfassen wird, mahnte weiter als ueberfaellig.
Das ist die Kehrseite einer bewussten Entscheidung: "abgebrochen" steht
absichtlich NICHT in STATUS, damit der normale Weg es nicht setzen kann.
Genau deshalb rutscht es aber durch jede Pruefung, die nur gegen
'erledigt' vergleicht.
FILIPE HAT EINE STELLE GESEHEN. Gesucht werden musste nach dem MUSTER:
Es waren zwoelf, in sieben Dateien.
workspace-aufgaben.js 2 ueberfaellig und heute (die Zahlen "oben")
workspace-hinweise.js 2 die Hinweiszeilen der Startseite
workspace-kalender.js 1 Aufgaben mit Frist im Kalender
workspace-personen.js 1 "offene_aufgaben" je Person
workspace-profil.js 1 dieselbe Zahl im Profil
workspace-push.js 2 ERINNERUNGEN, die verschickt werden
workspace-reports.js 3 Berichte
Am schwersten wiegt workspace-push.js: Dort gingen Push-Nachrichten
hinaus -- fuer Aufgaben, die laengst abgebrochen waren.
`NOT IN ('erledigt', 'abgebrochen')` statt einer zweiten Ungleichung: Wer
spaeter einen dritten Endzustand einfuehrt, ergaenzt eine Liste, statt
eine Kette von `<>` zu verlaengern, bei der das Vergessen niemandem
auffaellt.
DIE EIGENE KATEGORIE, die Filipe verlangt hat, gibt es jetzt in der
Schnittstelle (`abgebrochen`) und auf der Startseite -- hinten bei
"Erledigt", weil beides dasselbe bedeutet: vom Tisch.
GEGENPROBE an einer abgebrochenen Aufgabe mit Frist von gestern:
alte Bedingung "<> erledigt" -> ueberfaellig = 3
neue Bedingung "NOT IN (erledigt, abg)" -> ueberfaellig = 2
Unterschied 1 = genau die abgebrochene. Die Schnittstelle liefert 2
und abgebrochen = 1.
pruef-start-ansicht hat den Umbau bemerkt und "die Aufgabenzahlen stehen
(7)" gemeldet -- sie zaehlt die Kategorien und erwartete sechs. Die Zahl
steht in der Bedingung, nicht nur im Meldetext; deshalb faellt eine
Kategorie, die still verschwindet, sofort auf. Auf 7 nachgezogen:
EXIT=0, 140 Pruefungen. pruef-aufgabenbrett EXIT=0, 44.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
5925a61dfe |
Chat, Kalender, Calls -- die Reihenfolge nach Verbindlichkeit
Filipe, screen31: "die reihenfolge von denen, links der chat, mitte den kalender und rechts calls & protokolle". Vorher stand der Chat hinter "Calls & Protokolle", begruendet damit, dass beides Gespraech sei. Die neue Ordnung liest sich von links nach rechts nach Verbindlichkeit: Der Chat laeuft nebenher, der Kalender bindet an eine Uhrzeit, das Protokoll haelt fest, was verabredet wurde. Die Farbtoene bleiben an ihren Kacheln (Chat 4, Kalender 8, Calls 15). Sie kennzeichnen die Kachel, nicht ihren Platz -- wer sie beim Umsortieren mitwandern liesse, haette zwei Kacheln in derselben Farbe. Nachgemessen am laufenden System: 0 Dashboard, 1 Aufgaben, 2 Chat, 3 Kalender, 4 Calls & Protokolle, 5 Dateien. pruef-start-ansicht EXIT=0, weiterhin 140 Pruefungen. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
e3f7826ca5 |
Jede Rolle sieht ihre eigene Zahl -- Schulle zaehlte das ganze Haus
Filipe (screen22), nachdem Managerin Schulle "2 Creator" angezeigt bekam, obwohl sie einen hat: "die zahl die da angezeigt wird soll bitte immer jedem genau zutreffend sein." Und dazu (screen23), wer was sehen soll: "dogfather und cigdem haben die zahl vom insgesamten. manager sehen nur die gesamte zahl ihrer scouts und ihren creator die ihnen zugeteilt sind, die scout sehen die zahl nur von ihren creator und die creator da termine vom tag selber" DIE ZAHL WAR NICHT FALSCH GERECHNET, SIE BEANTWORTETE DIE FALSCHE FRAGE. Hier stand `SELECT ... FROM personen WHERE aktiv = 1` -- alle, fuer jeden aus der Leitung gleich. Ein Manager sah damit das ganze Haus als "sein Team", einschliesslich Leuten, mit denen er nichts zu tun hat. Jetzt je Rolle: admin/spicy alle aktiven Personen, ohne sich selbst manager seine Scouts UND die Creator (eigene wie die der Scouts) scout nur seine Creator creator unveraendert der eigene Tag SCOUTS BEKOMMEN DIESEN RING NEU. Sie zaehlen nicht zur Leitung und sahen deshalb den Stundenring des eigenen Tages -- aber ein Scout hat ein Team, naemlich seine Creator. Genau danach hat Filipe gefragt. Der Ring heisst bei ihm "Creator versorgt" statt "Team versorgt": Sonst liest ein Scout "Team" und sucht die anderen vier Rollen darin. OHNE SICH SELBST: Wer den Ring ansieht, ist die Person, die ihn liest. Sich selbst als Segment im eigenen Team mitzuzaehlen verschiebt jede Prozentangabe um einen Platz. KEINE ZWEITE RECHENVORSCHRIFT. Die Zuordnung wird nicht hier nachgebaut: `betreuteIds` kennt die Kette Manager -> Scouts -> deren Creator bereits, `scoutsVon` die Scouts. Eine eigene Fassung derselben Frage waere genau der Weg, auf dem zwei Wahrheiten entstehen. Dazu screen26: "liegt liegen, keine ahnung was das bedeuten soll aber das soll viel besser sein bitte." Gezaehlt werden Personen mit unerledigten Terminen aus der VERGANGENHEIT -- das Schild heisst jetzt "ueberfaellig". GEMESSEN an einer Lage, die den Fehler enthaelt: fuenf aktive Personen, darunter ein Creator, der zu niemandem gehoert. DogFather 4 im Team [Fremder, Tili, Schulle, Patrick] Manager Schulle 2 im Team [Tili, Patrick] <- ohne "Fremder" Scout Patrick 1 meine Creator [Tili] Creator Tili eigener Tag pruef-start-ansicht EXIT=0 (140), pruef-rollen EXIT=0 (97). Co-Authored-By: Claude Opus 5 <[email protected]> |