e3e015bca402a8d6cd82bb4cff03d9bae8808e97
5
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
e3e015bca4 |
Kopfleiste: ein Name, der zweimal vergeben war
Filipe zu einem Bildschirmfoto: "was soll das jetzt, wieso sieht das in
gewissen seiten so scheisse aus?!"
Der Teilen-Knopf stand doppelt so hoch wie seine Nachbarn, mit dem
Zeichen UEBER dem Wort statt daneben. Es war kein Gestaltungsfehler,
sondern ein Name: `.teilen` gab es ZWEIMAL --
gate.css Knopf der Kopfleiste inline-flex, waagerecht
bereich.css Layout der Teilen-Seite flex column, 22px, 44rem
Auf den drei Seiten, die beide Dateien laden (bereich, bewerben,
teilen), gewann die spaeter geladene. Der Knopf bekam das Layout einer
ganzen Seite. "Gewisse Seiten" war exakt richtig beobachtet.
DERSELBE NAME KOSTETE AUSSERDEM DEN KNOPF: kopf.js baut ihn nur ein,
wenn `getElementById('teilen')` nichts findet -- ein Schutz gegen
doppelten Einbau. Auf teilen.html steht `<section id="teilen">` aber
schon im HTML. Dort fehlte der Knopf ganz, ohne Spur, ohne Meldung.
REPARIERT ALS REGEL, NICHT ALS EINZELFALL:
- Was kopf.js in die Leiste haengt, traegt jetzt `kopf-` davor
(kopf-teilen, kopf-sicht-wahl, kopf-sicht-feld, kopf-fremd-band).
Eine Seite darf dann heissen wie sie will -- auch "teilen", "chat"
oder "suchen", und genau diese Woerter braucht als naechstes eine
Seite.
- Die Teilen-Seite bekommt eigene Klassennamen (tl-*).
NEU: server/pruef-namen.mjs (12 Pruefungen, ohne Server, <1 s).
Es ist der ZWEITE Namenskonflikt an einem Tag -- der erste war
`.t-schritt` auf der Talente-Seite, gefunden nur durch Zaehlen im
Browser. Beide waren gruen in jeder bestehenden Prueflinie.
Gemessen, um den Schnitt zu finden, der etwas taugt:
2872 Klasse in zwei geladenen Dateien erwaehnt -> Rauschen
1887 davon mit eigener Blockdefinition -> Rauschen
12 davon mit widersprechendem `display`
6 davon ohne `display: none` -> geprueft
Mit Gegenprobe, die aus den Dateien ABGELEITET wird (die erste, fest
abgeschriebene Fassung fand nichts, weil die gewaehlte Klasse dort gar
kein `display` setzt -- eine Gegenprobe, die selbst danebenliegt,
beweist nichts).
pruef-kopf-messen: 3 -> 16 Messungen, und drei eigene Fehler behoben,
die alle dieselbe Form hatten -- zu frueh hingesehen:
1. Sie mass NUR uebersicht.html. Die laedt bereich.css nicht und war
fuer diesen Fehler blind.
2. Sie mass nur 320/390/430px. Unter 720px versteckt gate.css das
Wort "Teilen"; der Knopf bleibt klein, auch falsch angeordnet.
Filipes Bild war 1366px breit.
3. Sie wartete 300ms. kopf.js haengt Teile erst nach `/api/ich` ein
und hat ein Netz bei 1200ms. Zweiter Versuch: warten, bis `#wer`
Text hat -- SOFORT wahr, dort steht `…` als Platzhalter. Dritter:
auf Stabilitaet warten -- nach 0ms und 500ms gleich gross, also
"fertig". Erst die Mindestwartezeit (1200 aus kopf.js plus Luft)
davor machte die Messung echt.
Bewiesen an der Gegenprobe: mit dem alten Fehler meldet sie jetzt
"kopf-teilen ist 77px -- die anderen im Schnitt 43px", vorher blieb sie
gruen.
Statt einer festen Hoehe wird gefragt, ob EIN Teil aus der Reihe faellt
(> 1,6x der Schnitt seiner Nachbarn). Das waechst mit, wenn die Leiste
groesser wird, und muss bei keinem neuen Knopf nachgezogen werden.
Gruen: namen, kopf-messen, sicht, css-klassen, struktur.
Co-Authored-By: Claude Opus 5 <[email protected]>
|
||
|
|
e54c6829f1 |
Talente: der Trichter bekommt einen Ausgang
Gemessen vor dem Bau: talentNaechste kettet aufgefallen -> beobachtet -> angesprochen -> probe -> imteam, und danach kommt nichts. Eine Suche nach "beenden|abgesagt|verworfen|archiv" in workspace-entwicklung.js fand nichts. Der Trichter hatte genau einen Ausgang -- obwohl der Text der Probe-Stufe woertlich verspricht: "Nach 30 Tagen: uebernehmen -- der Zugang entsteht dabei -- oder sauber beenden." Wer nicht passte, blieb also auf seiner Stufe stehen, mit wachsender Standzeit und rotem "liegt"-Zeichen. Nach einem Jahr hat die Liste mehr Karteileichen als Kandidaten, und dann schaut niemand mehr hin. DREI SPALTEN, KEINE NEUE STUFE. Eine neue Stufe haette einen CHECK-Umbau auf laufenden Daten verlangt -- und eine Auskunft zerstoert: Die Stufe haelt fest, WO es geendet hat. "Beendet in der Probe" und "beendet nach dem ersten Hinsehen" sind zwei verschiedene Saetze, und genau der Unterschied ist die Frage, wenn dieselbe Person in einem halben Jahr wieder auffaellt. DER SATZ IST PFLICHT (10 Zeichen, wie beim Ablehnen einer Anfrage) -- aus zwei Richtungen: Nach vorn, weil beim zweiten Anlauf niemand mehr weiss, was damals war. Nach innen, weil wer schreiben muss, anders entscheidet als wer klickt. "Passt nicht" hat neun Zeichen. WIEDER AUFNEHMEN setzt auf "aufgefallen" zurueck -- Menschen aendern sich, ein Urteil von damals gilt nicht weiter -- und rettet den alten Satz in die Notiz, statt ihn zu loeschen. AM BILDSCHIRMFOTO GEFUNDEN, nicht an einer Zahl: Auf einer Karte auf "Im Team" stand "Nichts mehr zu tun -- der Zugang steht" und direkt darunter "Passt doch nicht?". Ein Beenden dort haette die Karte stillgelegt und den ZUGANG offengelassen -- eine halbe Handlung, die sich wie eine ganze anfuehlt. Jetzt steht dort der Weg zu "Personen & Zugaenge", und der Server weist es mit 409 ab. pruef-nachwuchs 152 -> 200, davon 21 im echten Browser (der erste Browserblick auf diese Seite ueberhaupt -- mit einer Messung, ob Name und Datum bei 390 px uebereinanderliegen, statt einer Zahl im CSS). Sechs Gegenproben, jede genau auf ihr Ziel: Grenze auf 0 -> 3 rot Beendete bleiben drin -> 2 rot beendete: [] -> 5 rot alter Grund verworfen -> 1 rot Serverriegel imteam -> 5 rot Browserzweig imteam -> 3 rot Dazu gruen: css-klassen, struktur, entwicklung, uebergang. Nebenbefund behoben: absage() im Browser warf einen erklaerenden Satz des Servers lautlos weg und zeigte "Ging nicht." -- die Auskunft war da. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
3a49e30aa4 |
Die Probezeit hat einen Inhalt -- und man sieht, wer was gesehen hat
Filipe: "wie talente bewertet werden, aufgaben bekommen, analysiert werden von vanvan und mir, alles moegliche, wie gesagt ich will hoch profissionel arbeiten." WAS GEMESSEN FEHLTE Die Stufe "Probe" hatte eine Frist von 30 Tagen, einen Buddy, ein Datum -- und einen Satz: "Nach 30 Tagen: uebernehmen oder sauber beenden." Worauf diese Entscheidung sich gruenden soll, stand nirgends. Eine Probezeit ohne Inhalt ist keine Probe, sondern eine Wartezeit; am dreissigsten Tag entscheidet dann das Bauchgefuehl dessen, der zuletzt etwas gesehen hat. Und: `von_id` stand seit dem Bau in talent_merkmal und wurde nie ausgeliefert. Man sah, DASS ein Merkmal gesetzt ist -- nicht, von wem. Bei zwei Leuten, die unabhaengig beobachten, ist genau das die Auskunft. DER PROBEPLAN Zwoelf Schritte in drei Phasen: mitlaufen -> selbst machen -> allein. Die Reihenfolge ist der Punkt (Discord empfiehlt sie so, in der Ausbildung heisst sie "see one, do one"). Wer die mittlere Stufe ueberspringt, hat am Tag 30 zwei Sorten Kandidaten, die man nicht unterscheiden kann. JEDER SCHRITT HAT EINEN ZUSTAENDIGEN -- sechs das Talent, drei der Buddy, drei die Leitung. Ohne diese Angabe wandern in jeder Probezeit dieselben drei an niemanden: Der Buddy denkt, die Leitung macht es. KEINE PUNKTZAHL. Am Ende stehen drei Fragen, die ein Mensch beantwortet; die Haken sagen nur, ob er genug gesehen hat. Und "entscheidbar" haengt an DREI Schritten, nicht an einer Anzahl: Wer nie allein gearbeitet hat und wen das Team nie beurteilt hat, ueber den weiss man nichts, egal wie viele andere Haken stehen. Neun von zwoelf reichen nicht, drei genuegen -- wenn es die richtigen sind. WAS DAS HINSEHEN GEFUNDEN HAT `.t-schritt` gibt es auf dieser Seite schon -- es ist die Zeile mit dem naechsten Schritt der Trichterstufe. Meine Regeln standen SPAETER in derselben Datei und haetten sie ueberschrieben. Gefunden hat das keine Ueberlegung, sondern das Nachzaehlen im Browser: 13 Elemente mit `.t-schritt`, obwohl der Plan zwoelf hat. ZWEI PRUEFUNGEN WAREN SCHON VORHER ROT (gemessen mit git stash) pruef-schritt (6 rot) und pruef-befinden (4 rot) -- seit den Erweiterungen von heute frueh: aus sechs Befinden-Fragen wurden zwoelf, aus vier Kategorien sechs, und die Personenkachel zaehlt seit heute in Kaesten statt in einem Satz. Die Zahlen standen als feste Werte in den Pruefdateien. Nicht die Zahlen angepasst, sondern ABGELEITET: aus ENTWICKLUNG_BLOECKE und ENTWICKLUNG_PUNKTE.befinden. Eine feste Zahl ist eine Rechnung von gestern; wer sie nachtraegt, traegt sie beim naechsten Mal wieder nach. GEPRUEFT pruef-nachwuchs 123 -> 152. Vier Gegenproben, jede trifft ihr Ziel: Liste auch vor der Probe -> 1 rot, Abhaken ohne Stufenpruefung -> 7 rot, "entscheidbar" nach Anzahl statt nach den drei -> 3 rot, Name nicht mitgeliefert -> 1 rot. Dazu gruen: schritt 65, befinden 75, entwicklung 43, uebergang, neue-seiten, rechtetafel, css-klassen, struktur, deutsche-texte, modi-wortleck. |
||
|
|
470c65a46b |
Anfragen fuer Modi: ein Fragebogen, vier Wege, eine Bruecke
Filipe, mit dem Bildschirmfoto des Bretts "Mitmachen": "ich will dass die leute sich da anonym bei mir melden koennen ... wie ein fragebogen wieso die person modi werden will warum sie sollte, positiv negative sachen ... und dan soll ich annehmen ablehnen, in warteschlange stellen oder sofort kommunizieren koennen. und wenn ich annehme dan soll diese person automatisch zu talente kategorie weiter geleitet werden." Seine zwei Entscheidungen auf Rueckfrage: "Vertraulich, aber nicht namenlos" und "Du und die rechte Hand". WAS ES GIBT 15 Fragen in 6 Gruppen, 9 davon Pflicht. Vier davon standen nicht auf seinem Zettel und kommen aus der Recherche zu Moderator-Bewerbungen: Alter, frühere Sperren, "ein Freund bricht die Regeln - was machst du?" und "was kannst du nicht so gut?". Die letzte ist die aussagekraeftigste: Wer darauf "nichts" schreibt, hat sich gerade selbst beantwortet. Vier Wege: Reden - Warteschlange - Annehmen - Ablehnen. "Reden" steht vorne, weil die haeufigste richtige Antwort auf eine Bewerbung eine Rueckfrage ist und keine Entscheidung; stuende "Annehmen" oben, wuerde es geklickt. "Sofort kommunizieren" ist ein Satz, den sie liest. Kein Chat: Ein Zugang aus der Community steht ausdruecklich in keiner Chatliste (AUSSEN_ROLLEN). Der Satz ist damit der einzige Weg, dieser Person etwas zu sagen -- deshalb ist er bei "Reden" und "Ablehnen" Pflicht, und WELCHE Wege ihn verlangen, steht im Katalog und nicht zweimal. Nach "Annehmen" entsteht ein Talent auf der Stufe "Angesprochen". Die ersten beiden Stufen fragen, ob ueberhaupt Interesse besteht; wer sich selbst meldet, hat das beantwortet. WAS DABEI HERAUSKAM, DAS NICHT GESUCHT WAR aufgaben.js entschied mit `p.rolle === 'modi' || p.rolle === 'hand'`, wer eine Katalogaufgabe bekommen kann. Diese Datei ist ohne Anmeldung aus dem offenen Netz lesbar -- damit stand der verborgene Zugang darin nachzulesen. Jetzt entscheidet es der Server und schickt ein Ja/Nein. Gefunden von der Wortleck-Pruefung, nicht vom Auge. pruef-struktur meldete teilen.html seit heute frueh als "von nirgendwo verlinkt" -- und lag falsch: Auf sie zeigt `share_target.action` im Manifest. Die Manifeste sind jetzt Verweisquelle, nicht die eine Seite eine Ausnahme. Und im Bildschirmfoto stand der Schriftzug der Buehne mitten im Text einer Anfrage: `color-mix(..., transparent)` mischt mit DURCHSICHTIG. Deckend ist `#ffffff 6%`, so wie es .t-karte macht. Dieselbe Stelle hat mich heute schon einmal erwischt. GEPRUEFT pruef-bewerbung 77, davon 14 im Browser. Vier Gegenproben, jede trifft genau ihr Ziel: Bruecke ohne "genau einmal" -> 2 rot, Vertraulichkeit weg -> 5 rot, Nachricht-Pflicht weg -> 2 rot, Knopf ohne Rollenfrage -> 1 rot. Dazu unveraendert gruen: rollen 315, modi-verborgen 80, modi-katalog 49, entwicklung 43, treff, bereiche-lesend, haus-seiten, alle-wege, rechtetafel, css-klassen, struktur, deutsche-texte, start-ansicht, sicht, aufgabenbrett, womit, kanaele. |
||
|
|
a0d9dc38e4 |
Teilen -> Workspace: aus fuenf Schritten wird ein Tipp
SCHRITT 4 AUS DEM VIDEO-PLAN Filipe postet ein Video auf dem Handy. Bisher: Link kopieren, App oeffnen, Bereich suchen, Feld finden, einfuegen. Fuenf Schritte, von denen jeder einzelne der Grund sein kann, es "spaeter" zu machen -- und spaeter heisst nie. Jetzt: in TikTok auf "Teilen", DogFather waehlen, uebernehmen. Die neue Seite workspace/teilen.html ist das Ziel dieses Tipps, eingetragen als share_target in beiden Manifesten. DER STOLPERSTEIN, DEN JEDE ANLEITUNG VERSCHWEIGT Das Teilen-Ziel kennt drei Felder: title, text, url. Man baut es, testet mit "?url=https://…" und ist fertig. IM ECHTEN LEBEN KOMMT DER LINK IN `text`. Android-Apps -- TikTok eingeschlossen -- teilen als reinen Text: "Sieh dir das an! https://vm.tiktok.com/xyz/" steht dann in `text`, und `url` ist leer. Wer nur `url` liest, hat eine Seite gebaut, die im Test funktioniert und auf dem Handy eine leere Maske zeigt. Gesucht wird deshalb in allen drei Feldern nach einem MUSTER, nicht nach einem Feldnamen -- und ein Satzzeichen am Ende gehoert nicht zur Adresse. SIE TRAEGT NICHT VON SELBST EIN. Die Seite kann nicht wissen, ob der Griff in die Tasche gemeint war. Ein Video, das ungefragt in den Highlights landet, muss jemand wieder loeschen -- das ist mehr Arbeit als ein Tipp auf "Uebernehmen". Und wohin ist eine Frage, keine Annahme: Highlights sind vorausgewaehlt, Treff und Anschlagbrett stehen daneben. GET UND NICHT POST. POST braeuchte einen Service Worker, der die Anfrage abfaengt -- eine Stelle mehr, die kaputtgehen kann, und zwar genau die unsichtbare: Man tippt auf Teilen und landet auf einer leeren Seite. Hier wird nur ein Link geteilt, keine Datei. GESEHEN, NICHT NUR GEZAEHLT Das Bildschirmfoto auf 390 px zeigte einen Mangel, den keine Zahl gemeldet haette: Das gewaehlte Ziel hob sich nur ueber Helligkeit ab. Bei einer echten Wahl ist das zu wenig, und wer Farben schlecht unterscheidet, sieht gar nichts. Jetzt: farbiger Streifen links, deutlicherer Grund -- und ein HAKEN, der ohne jede Farbwahrnehmung funktioniert. EIN SICHERHEITSFUND NEBENBEI -- UND ER IST DER WICHTIGERE pruef-alle-wege meldete: Von 126 schreibenden Wegen hatte genau EINER keine Herkunftspruefung. POST /workspace/api/aufbewahrung/jetzt -> 200 Eine beliebige fremde Seite kann im Browser eines angemeldeten DogFather ein Formular dorthin abschicken; der Browser gibt das Sitzungsplaetzchen mit, der Server fuehrt aus. Und ausgerechnet dieser Weg: aufbewahrungLauf() LOESCHT abgelaufene Daten. Ein Aufruf zur falschen Zeit loescht wirklich etwas, und im Protokoll sieht es aus, als haette DogFather es selbst angestossen. Die anderen 125 Wege hatten den Riegel -- dieser eine wurde beim Hinzufuegen uebersehen. Genau dafuer geht die Pruefung ALLE Wege durch, statt einer Liste zu glauben. Behoben, danach: "kein schreibender Weg nimmt eine fremde Herkunft an". DIE PRUEFUNG (server/pruef-teilen.mjs, 27 Pruefungen) Auf 390 px gemessen -- diese Seite wird fast nur dort geoeffnet, eine Messung auf 1400 px misst etwas, das niemand sieht. Geprueft wird der Satz mit Link darin, das Satzzeichen am Ende, der Fall ohne Link (Feld zum Einfuegen statt Fehlermeldung), das Eintragen, die Dublette, das zweite Brett -- und dass share_target in BEIDEN Manifesten steht. Ohne den Eintrag erscheint der Workspace gar nicht erst im Teilen-Menue, und die ganze Seite waere unerreichbar, ohne dass eine der anderen 26 Pruefungen es merkt. GEGENPROBE: nur `url` lesen statt aller drei Felder -- also genau die naheliegende Fassung, die im Test funktioniert und auf dem Handy versagt -> 8 Pruefungen rot. Stempel 202609171416. Co-Authored-By: Claude Opus 5 <[email protected]> |