Commit Graph
433 Commits
Author SHA1 Message Date
ClaudeandClaude Sonnet 5.5 3c44c42681 Test: Szene bei Stufe 3 prüft Arne wirklich nach seinem Status
Der Test "die Szene zeigt Arne nach seinem Status" prüfte bisher nur die Zahl im
Schild und die Abruf-Anzahl. Er prüft jetzt bei Stufe 3 data-hk-arne, hk-arne-weg,
die drei hk-kl-ruht, den Marker hk-alarm und hk-steht für arbeitet, leerlauf,
fehler und angehalten.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 12:35:27 +00:00
ClaudeandClaude Sonnet 5.5 2c0553a6b2 Prüfstand: Kommentare nennen die getrennten Schwellen (Keller ab 3, Bot-Leads ab 6)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 12:29:13 +00:00
ClaudeandClaude Sonnet 5.5 5c3248ae8f Hustler-Stufe: Doku trennt Keller begehbar (3) und Bot-Leads abrufbar (6)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 12:24:21 +00:00
ClaudeandClaude Sonnet 5.5 1ab760be0c Hustler-Keller: unter Stufe 6 leeres Register ohne Abruf, mit ehrlichem Text
BotLeadList bekommt die Stufe (WorkersPage reicht sie durch). Unterhalb von BOTLEADS_AB
(Stufe 6) ruft sie weder api.botleads noch ein JWT, zeigt keine Ladeanzeige und keinen
Fehlerzustand: Szene mit Arne, Register-Buch, Reiter und Suche stehen da, das Register ist leer
("Noch keine Bot-Leads. Hier legt Arne Betriebe ohne Website ab, die Bea nicht fuer eine Mail
ausgewaehlt hat. Die Branchen-Raeume ... suchen noch nicht."), ohne Zahl am Reiter. Reiter,
Suche, Zuklappen und Alle anzeigen bleiben bedienbar und loesen nie einen Abruf aus. Ab Stufe 6
unveraendert (Live-Daten); der Test-Laeufer startet den Keller standardmaessig mit Stufe 6.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 12:23:03 +00:00
ClaudeandClaude Sonnet 5.5 6eb4dd3c51 Hustler-Stufe: Keller begehbar ab Stufe 3, Bot-Leads abrufbar erst ab Stufe 6
Die Stufen-Sperre trennt jetzt zwei Dinge: KELLER_BEGEHBAR_AB = 3 (Keller-Etage als Link,
?tab=botleads gueltig, Spur-Links in den Keller) und BOTLEADS_AB = 6 (Abruf von GET /botleads).
kellerOffen/STUFE_KELLER entfallen, dafuer kellerBegehbar() und botleadsAbrufbar().
workersApi.botleads bleibt unter Stufe 6 hart gesperrt, der Text heisst nun
BOTLEADS_GESPERRT_TEXT. Die Keller-Ansicht selbst (leeres Register ohne Abruf) folgt im
naechsten Commit.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 12:21:59 +00:00
ClaudeandClaude Opus 5.5 8363b63374 Merge remote-tracking branch 'origin/test' into feature/hustler-live
Hustler-Pixelwelt mit Stufen-Sperre (Stufe 3 = Dienst P3) mit Website-Statistik (f9b0cbc) zusammengeführt; Konflikt in tests/unit/navLinks.test.mjs: beide Listen vereint (hustler statt leads, statistik vor serverpuls).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 11:06:45 +00:00
ClaudeandClaude Opus 5.5 fe0dccb7af Test: useAuth-Prüfung in workersRoute.test.mjs wieder als eigene Anweisung (stand versehentlich im Kommentar)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 11:03:23 +00:00
ClaudeandClaude Sonnet 5.5 2652108e4c Hustler-Stufe: Prüfstand baut mit VITE_HUSTLER_STUFE=6, Notiz zum Hochsetzen beim Livegang von P4 und P6
build.mjs setzt die Stufe über define ein (Standard 6, andere Ziffer 1 bis 9 aus der Umgebung, Ungültiges bricht ab), damit die Szenarien K (Pult P4) und L (Keller) weiter laufen;
ein Test baut den Prüfstand mit Standard, 3 und ungültigen Werten. docs/superpowers/hustler-stufe.md erklärt Stufen, Sperren und die Schritte beim Hochsetzen.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 10:36:52 +00:00
ClaudeandClaude Sonnet 5.5 32f4f1d941 Hustler-Stufe: Keller und Bot-Leads erst ab Stufe 6 (Seite, Keller-Etage, Spur-Links, Abruf von /botleads)
WorkersPage: ?tab=botleads (auch mit &bot=) und unbekannte Werte fallen unterhalb von Stufe 6 auf das Hochhaus zurück, BotLeadList wird nie eingehängt; die Weiterleitungen /leads und /workers bleiben.
HochhausWelt: die Keller-Etage ist dann ein Knopf wie jede andere (zoomt heran) statt eines Links; Arne bleibt klickbar, die Zahl Bot-Leads in der Kopfzeile bleibt Text.
HustlerDialog: Spur-Links in den Keller bleiben Text. workersApi.botleads ruft unterhalb von Stufe 6 nichts ab (kein JWT, keine Anfrage), sondern liefert 404 mit deutschem Satz.
Bestehende Keller-Tests laufen ausdrücklich auf Stufe 6; neue Tests prüfen Stufe 1, 3 und 5 (gesperrt) und 6 bis 9 (offen).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 10:36:52 +00:00
ClaudeandClaude Sonnet 5.5 5e48fbf264 Hustler-Stufe: P4-Aktionen im Pult erst ab Stufe 4 (rowModel-Parameter stufe, PultList reicht ihn durch)
Unterhalb von Stufe 4 sind canReply, canPaste, canApprovePreview und canStartBuild immer false: Antwort des Kunden einfügen, Als Mensch antworten / Jetzt senden, Freigeben & senden
und Vorschau bauen verschwinden samt Feldern und Rückfragen, die Aktionsgruppe schließt sich ohne Lücke. P3-Aktionen (übernehmen, Kopieren & öffnen, als gesendet markieren, verwerfen,
erledigt, E-Mail schreiben) bleiben. Bestehende P4-Tests laufen ausdrücklich auf Stufe 6; neue Tests prüfen Stufe 3 gerendert und bedient (Reihenfolge der Knöpfe, kein Feld, Esc, Verwerfen mit Rückfrage).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 10:36:44 +00:00
ClaudeandClaude Sonnet 5.5 7cd74a23d2 Hustler-Stufe: Modul hustlerStufe.js mit HUSTLER_STUFE (Standard 3), Bauzeit-Wert VITE_HUSTLER_STUFE, Schwellen für Pult-Antworten (4) und Keller (6)
Eine Quelle der Wahrheit dafür, was die Oberfläche schon zeigen darf, solange der Dienst nur P1 und P3 kann. Der Wert aus dem Bau gilt nur als Ziffer 1 bis 9,
sonst die Standardstufe; keine Überschreibung zur Laufzeit. Dazu tabErlaubt (Keller = ?tab=botleads) und linkErlaubt (Links in den Keller, auch über /workers und /leads).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 10:36:44 +00:00
ClaudeandClaude Opus 5.5 75ed38e68d Hustler-Pixelwelt T13: Kopf-Symbole ruhen bei Pause, Warnrot #c8372d, Prüfstand-Befunde sind jetzt harte Prüfungen (0 Verstöße)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 09:52:04 +00:00
ClaudeandClaude Opus 5.5 5e6698f5e0 Hustler-Pixelwelt T13: Korrekturen Hochhaus (Fokus, Tastatur, weniger Bewegung, Handy-Tippflächen, Schnee per transform, Pause überall, Seite ohne Leerlauf-Blitz)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 09:47:57 +00:00
ClaudeandClaude Sonnet 5.5 0924a8d2ae Hustler-Pixelwelt T13: Korrekturen Pult und Keller (Sperre laufender Aktionen, Fokus, Kontrast, Handy-Tippflächen, Pause)
Pult: laufende Anfragen je Eintrags-Id in PultList (laufRef, Brief meldet Beginn/Ende): Brief schließen und denselben Eintrag
wieder öffnen sperrt alle Aktionsknöpfe, kein zweites reply/paste/start-build (P1); spätes Ergebnis nennt den Titel (P1b);
Original und Entwurf pre-wrap (P3); Überschrift nimmt beim Einhängen den Fokus (M2); „Pult zuklappen“ mit aria-expanded (K4);
paused -> hk-steht an der Szene (R3); Brief z-index 9 (R4); Textlinks am Handy 40 px (K7).
Keller: Überschrift-Fokus (M2), Reiter-Fokusring innen (M3), Seitenzeile/Punkte/Reiterzahl in Pixelify Sans 13 px (K5), Suchfeld und
Akte-Link 40 px am Handy (K7), Ortszeile mit title (W2), paused -> hk-steht (R3), Akte z-index 9 (R4); Arne ohne Eintrag neutral (R5).
Tests: Sperre laufender Aktionen, Titel im späten Ergebnis, Fokus, aria-expanded, paused, pre-wrap, z-index, Tippflächen, Reiter-Fokus,
Schrift, Kontrast (WCAG) von .hk-zeile-alt/.hk-kl-tag auf Papier und Hover, Arne neutral (alte „Arne schläft ohne Eintrag“-Prüfung ersetzt).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 09:40:06 +00:00
ClaudeandClaude Opus 5.5 ea1485c27c Hustler-Pixelwelt T13: Pause-Rückfrage unter der Handy-Schublade (z-index 9)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 09:33:22 +00:00
ClaudeandClaude Opus 5.5 2470f05acb Hustler-Pixelwelt T12: Prüfstand auf die Pixelwelt umgestellt (Szenarien A–M), Handy-Kopfzeile zweireihig
Prüfstand: entry.jsx zeigt nur noch die echte Seite WorkersPage (BrowserRouter, Adresse mit ?tab= lesbar); shot.cjs neu mit den Szenarien A–M
(Hochhaus, Regie, Handy, weniger Bewegung, Notbremse, Ausfall, Detail, Etagen, Pause, Pult P3, Pult P4, Keller, Handy Pult/Keller),
harte Prüfungen und Bildern mit Szenario-Vorsilbe; Befunde an der App stehen getrennt von den Verstößen. Skript-API: Gründe der Bot-Leads
wörtlich wie im Dienst. Kopfzeile am Handy: zwei Reihen (Geld + Pause/Zahnrad, dann die fünf Kennzahlen), schmaler Panel-Rand, 40-px-Knöpfe,
Querformat unter 500 px Höhe in einer Reihe; hustlerKopf.test um die Zusicherungen dazu ergänzt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 09:32:33 +00:00
ClaudeandClaude Opus 5.5 ebab573803 Hustler-Pixelwelt T13: Import bricht ohne pixelwelt-woms ab, statt die grauen Raum-Ebenen zu löschen (--ohne-woms für den bewussten Fall)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 09:28:18 +00:00
ClaudeandClaude Sonnet 5.5 ba007a325a Hustler-Pixelwelt T11: alte helle Oberfläche und Kanvas-Engine entfernt, workers.css gekürzt, Zusicherungen in die neuen Tests übertragen
- gelöscht: components/workers/engine/* (10 Dateien), WorkersStage, WorkersBoard, WorkerCard, WorkerList, WorkersKpis,
  die neun Engine-Tests samt workersSmoke (211 Tests) und die Helfer engineVm.mjs und fakeCtx.mjs (nur die Engine-Tests brauchten sie)
- workers.css (310 -> 60 Zeilen) behält nur Einstellungen-Dialog und Interessenten-Panel; @font-face für Pixelify Sans steht jetzt in hustler/schrift.css
- workersComponents: kein innerHTML und kein Kanvas rekursiv unter components/workers/**, jeder Knopf mit type, Links nur aus geprüften Feldern
  (externe mit noopener), keine Anmeldung in den Bildschirmen, alte Dateien weg und nirgends mehr importiert
- workersCss: jede wk-Klasse im Code hat eine Regel, keine Regel ohne Nutzer; workersFont: Pixelify Sans genau einmal in schrift.css
- hustlerAssets: Pixelify Sans in schrift.css erlaubt; hustlerDialog: Link-Ziele nur aus safeLink, Knöpfe mit type; hustlerSeite: Laden/Fehler/bereit am selben Einhängepunkt

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 09:09:37 +00:00
ClaudeandClaude Opus 5.5 4be9750f36 Hustler-Pixelwelt: Pult und Keller füllen die Seite (alte Hülle und Übergangsregel entfernt, CSS eingebunden)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:56:40 +00:00
ClaudeandClaude Opus 5.5 f12866dda3 Hustler-Pixelwelt T10: Erklärung „veraltet (nicht ausgewählt)“ nach der 72-Stunden-Regel des Dienstes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:55:04 +00:00
ClaudeandClaude Opus 5.5 5b5bb740c2 Hustler-Pixelwelt T9: Dein Pult (Szene, Klemmbrett mit Umschlägen, Brief mit den bisherigen Aktionen)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:54:39 +00:00
ClaudeandClaude Opus 5.5 1b3fdf5d97 Hustler-Pixelwelt T10: Keller (Szene mit Arne nach Status, Register-Buch, Akte, Gründe)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:53:56 +00:00
ClaudeandClaude Opus 5.5 ec63e5a43d Hustler-Pixelwelt: Blätterleiste der Detailansicht klebt unten (lange Spur), Prüfstand lädt die PNGs der Pixelwelt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:26:46 +00:00
ClaudeandClaude Opus 5.5 b4e67a43a2 Hustler-Pixelwelt: Hochhaus zusammengesteckt (Welt mit Regie, Kopfzeile, Detailansicht), CSS-Importe, forwardRef im Mini-Läufer
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:23:49 +00:00
ClaudeandClaude Opus 5.5 4c5074f4f6 Hustler-Pixelwelt T8: Regie (Ereignisse als Blasen, Icons, Flüge) in der Hochhaus-Welt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:20:56 +00:00
ClaudeandClaude Opus 5.5 94b88462c7 Hustler-Pixelwelt T5: Hochhaus-Welt (Ebenen, Figuren nach Status, graue Räume, Etagen) und Kamera
HochhausWelt.jsx baut die Welt 1:1 aus dem Markup der Zeichenfläche (Himmel, Bühne 2400x1200, Haus-, Licht- und Fensterebenen, Neon, Aufzug,
Raumschilder, Bildschirme, Radar, Schilder, Etagen, 19 Hustler, Schnee); Figuren, Zusätze, graue Raum-Ebenen samt Papier-Zettel, Briefkasten-Zähler
und Etagen-Links folgen dem Dienst-Zustand. useKamera.js ist der Hook für Rad, Ziehen, Pinch, Doppeltipp, Tasten und Gleiten.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:20:45 +00:00
ClaudeandClaude Opus 5.5 6f4350495f Hustler-Pixelwelt T6: Kopfzeile mit Münzen und Icons, Meldungen, Pause mit Pixel-Rückfrage, Einstellungen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:20:19 +00:00
ClaudeandClaude Opus 5.5 3027f03dbe Hustler-Pixelwelt T7: Detailansicht eines Hustlers (Szene nach Status, Daten, Spur, Blättern, Fokus)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:19:02 +00:00
ClaudeandClaude Opus 5.5 363419ed12 Hustler-Pixelwelt: gemeinsame Hilfsregeln (WOMS-Bausteine in der Pixelwelt, gedimmter Overseer, Fehler-Marker, Pause)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:06:38 +00:00
ClaudeandClaude Opus 5.5 93ee128879 Hustler-Pixelwelt T4: Overseer ohne Punkte, Zzz, Dampf und Stecker-Schild, außerhalb von „arbeitet“ nur gedimmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:05:26 +00:00
ClaudeandClaude Opus 5.5 43b4dcbe9f Hustler-Pixelwelt T4: reine Ableitungen (Figur, Detail, Kopfzeile, Kamera)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:04:35 +00:00
ClaudeandClaude Opus 5.5 d8912ee363 Hustler-Pixelwelt T3: Seite hält den Feed, Bildschirme Hochhaus/Pult/Keller, Vollhöhen-Rahmen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:02:44 +00:00
ClaudeandClaude Opus 5.5 8bd365b1fc Hustler-Pixelwelt T1+T2: Import der Zeichenfläche (Bilder, CSS mit hk-Vorsatz, Geometrie), helles Haus mit grauen Raum-Ebenen, Press Start 2P selbst gehostet
- scripts/hustler-import.mjs liest pixelwelt-v2 (+ pixelwelt-woms/haus) und schreibt src/assets/hustler, src/styles/hustler/{hochhaus,keller,pult}.css und src/lib/hustlerWelt.js; idempotent
- haus.png mit allen Räumen hell, acht graue Ebenen für die Such-Räume (GRAUE_RAEUME, .hk-raum-grau-<raum>)
- Press Start 2P lateinisch aus @fontsource/press-start-2p@5.2.7 (OFL), noch nirgends importiert
- 40 neue Tests (Assets, Geometrie, CSS-Umformung)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 07:55:25 +00:00
ClaudeandClaude Opus 5.5 6e24868995 Hustler-Pixelwelt: Spec und Plan zur Freigabe (Hochhaus, Pult, Keller aus der Zeichenfläche)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 07:27:05 +00:00
ClaudeandClaude Opus 5.5 c0163c3575 Workers P6: Kaltmail-Fuß im Plan und in der Betriebsanleitung an den Code angeglichen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 17:41:09 +00:00
ClaudeandClaude Sonnet 5.5 b1d3a391b7 Workers P6: Betriebsanleitung nach der Endprüfung (Teil A Datenschutz, Teil B Scouts, Resend und Weiterleitung, Freischalten, erste Nacht, Rückweg)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 17:39:35 +00:00
ClaudeandClaude Opus 5.5 02bb6875cd Workers P4: Betriebsanleitung nennt den Dienst-Stand 2f39374 (lineare Schlusszeichen auf Fremdtext)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 16:59:01 +00:00
ClaudeandClaude Sonnet 5.5 453d3585ba workers: Bot-Leads Fokus beim Blättern ohne Scrollen und ohne Fokusdiebstahl (N5), „Erneut versuchen“ nach einem Fehler (N6)
N5: Der Fokus geht nach dem Blättern über restoreFocus (workersFocus.js) mit preventScroll an die Seitenzeile zurück, aber nur, wenn er
wirklich verloren ging (body, nirgends, alter Knopf ausgehängt). Hat der Nutzer inzwischen Suchfeld oder Raumfilter angesteuert, bleibt er dort.
N6: Scheitert eine Anfrage, steht unter der Meldung „Erneut versuchen“; der Knopf stellt genau diese Anfrage (Raum, Suche, Seite oder Eintrag)
noch einmal und die Seitenzeile bekommt danach den Fokus zurück. CSS: .wk-bl-retry, am Handy 40 px.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 16:15:43 +00:00
ClaudeandClaude Sonnet 5.5 f80b831b6a workers: Bot-Leads am Handy mit 40 px Knöpfen, lesbare gekürzte Zeilen, Ort bricht nicht mitten im Wort
Endprüfung P6 (C5, W1, W2):
- Blätterknöpfe 36 px -> 40 px und „Alle anzeigen“ der Einzelansicht (32 px) -> 40 px über
  `.wk-bl-pager .btn` und `.wk-bl-single .btn` im Handy-Block; min-height schlägt height: 32px,
  keine globale .btn-Regel, kein !important.
- Gekürzte Zeilen: --text-2 statt --text-3 (Kontrast von etwa 2,9:1 auf mehr als 5:1).
- `.wk-bl .wk-bl-table td .cell-sub { overflow-wrap: break-word }` (0,3,1) schlägt das globale
  `.table td .cell-sub { overflow-wrap: anywhere }` (0,2,1) („Kaiserslau-tern“ in der Einzelansicht).
- Tests: workersCss.test.mjs (Farbe, Kontrast aus den Token von global.css, Höhen, Spezifität gegen die
  globale Regel); Prüfstand botleads und handy-botleads: 81 Prüfungen grün.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 15:19:52 +00:00
ClaudeandClaude Sonnet 5.5 ed5dfa9c0e workers: Bot-Leads behält den Tastaturfokus beim Blättern und nach „Alle anzeigen“, aria-current nur in der Einzelansicht
Endprüfung P6 (C5, W1): Beim Blättern hängt die Seitenzeile beim Laden aus, und „Alle anzeigen“
wird durch den Raumfilter ersetzt; der Fokus fiel jeweils auf <body>.
- Blättern: gemerkt wird der gedrückte Knopf; nach dem Laden bekommt er den Fokus zurück, ist er
  gesperrt (erste oder letzte Seite), der andere. Raum oder Suche bedient der Nutzer inzwischen,
  geschieht nichts; scheitert die Anfrage, gibt es keine Seitenzeile und nichts geschieht.
- „Alle anzeigen“: der Raumfilter bekommt den Fokus, sobald die Seite bot aus der Adresse
  genommen hat. Nicht beim Einhängen (am Handy öffnete das die Auswahl) und nicht bei einem
  anderen Weg zur Liste (Zurück-Taste).
- aria-current nur mit bot (single) und passender Kennung; Zeilen ohne Kennung teilen sich keinen key mehr.
- Tests: botleadList.test.mjs (Fokus-Attrappe über __fakeRef, Mutationsprobe für die Reset-Zeilen),
  botleadsView.test.mjs (Quelltext-Probe); der Prüfstand prüft zusätzlich den Fokus nach „Alle anzeigen“.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 15:19:52 +00:00
ClaudeandClaude Sonnet 5.5 78c8e3fbc2 Workers P6: Prüfstand für den Reiter Bot-Leads (Desktop und Handy)
Skript-API: botleads({ room, q, page, id }) antwortet wie GET /botleads des Dienstes
(items, total, pageSize 50; Telefon nie bei Heilberufen, gekürzte Stubs nur mit id).
60 sichtbare Einträge in vier Räumen (zwei Seiten), 3 gekürzte Stubs, Heilberufe mit
Altbestand-Telefon, eine http-Quelle, zwei feindliche Quellen, lange Namen und Gründe.
Schalter: faults.botleads, botleadsDelayMs, botleadsEmpty (?botleads=leer), botleadCalls.
Fetch-Weiche und entry.jsx (?bot=<Id>) um die Route und den Deep-Link ergänzt.

Szenarien: botleads (Reiter, Liste, Raumfilter, Blättern mit Fokus, Suche, Leerzustände,
Fehlertexte, Deep-Link, Quellen-Links, Telefon) und handy-botleads (390 x 844: kein
seitliches Scrollen, Knopfhöhe, Kontrast der gekürzten Zeile, Wortumbruch).
Der Pin in workersHarness.test.mjs prüft nun die neue Antwortform statt der leeren Liste.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 14:43:33 +00:00
ClaudeandClaude Opus 5.5 cd532e0cf0 Workers P4: Betriebsanleitung H4 verweist auf die P5-Schritte für WORKERS_KAUFLINK
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 13:00:34 +00:00
ClaudeandClaude Sonnet 5.5 4e743f11ca Workers P5: Betriebsanleitung nach der Endprüfung (Reihenfolge, Stripe-Ereignis, Testbestellung, Rechtsrunde, Kauf-Link-Schalter, Rückweg)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 12:59:52 +00:00
ClaudeandClaude Sonnet 5.5 999731d882 workers: workersPultUi.test nutzt den gemeinsamen Mini-Läufer aus helpers/fakeReact.mjs
Die zeichengleiche Inline-Kopie (FAKE_REACT und Plug-in) ist entfernt; der Baustein ist jetzt die einzige Fassung für workersPultUi.test.mjs und botleadList.test.mjs.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 10:31:26 +00:00
ClaudeandClaude Sonnet 5.5 3d830ced38 workers: Reiter Bot-Leads mit Filter, Grund, Telefon und Quelle
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 10:20:51 +00:00
ClaudeandClaude Opus 5.5 d1b7eddd10 Workers P4/P5: workersOffers.offerText (Schnappschuss des Angebotssatzes) in Übersicht und P4-Schema-Schritt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 04:52:56 +00:00
ClaudeandClaude Sonnet 5.5 f388a37c46 Workers P4: Betriebsanleitung nach der Endprüfung (Reihenfolge, Schema mit Setup-Schlüssel, Rückweg-Image, Live-Prüfungen, Pilot, Kauf-Link-Schalter)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 00:54:53 +00:00
ClaudeandClaude Opus 5.5 8bebe86c62 Workers P4: Übersicht und Plan an den gebauten Stand angeglichen (addPult idKey, Speichergrenze 1g, Plattform-Benachrichtigung ohne feste Regeln)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:06:57 +00:00
ClaudeandClaude Sonnet 5.5 41ae7ffd3f Endprüfung Nachrunde R7: Test der Zeitgrenze (D14) für reply, approve-preview und start-build wiederhergestellt
Der Commit 1536a3b hatte den Test „reply, approve-preview und start-build warten länger als die übrigen
Pult-Aktionen“ gelöscht. Der neue Test prüft gegen den heutigen Code (ACTION_TIMEOUT_MS 65 s,
REQUEST_TIMEOUT_MS 20 s, Optionen timeoutMs / actionTimeoutMs) mit den Uhren von node:test statt echter
Wartezeit: keine Abhängigkeit von der Last, Grenzen auf die Millisekunde (eine Millisekunde vor der Frist
läuft der Abruf, mit ihr endet er). Die drei langsamen Aktionen nehmen eine Antwort zwischen kurzer und langer
Frist an, claim/sent/discard/done/paste und das Lesen enden mit der kurzen Frist (DOWN_TEXT, status 0, Signal
abgebrochen), ein hängender Abruf endet nach der langen Frist. Derselbe Ablauf mit Standard- und mit
eingespeisten Fristen; ein zweiter Test pinnt, dass auch der Wiederholungsversuch nach einer 401 die Frist
der Aktion behält.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 23:54:10 +00:00
ClaudeandClaude Sonnet 5.5 c48d1834f4 Endprüfung Nachrunde R8: restoreFocus fokussiert mit preventScroll
Ohne die Option springt die Seite beim Zurückgeben des Fokus zum Ziel: bei einer Zeile weit unten in
einer langen Liste zur Meldung oben, und die Person verliert ihre Stelle. restoreFocus ruft jetzt
target.focus({ preventScroll: true }); der Fokus (und damit die Ansage) wandert, die Ansicht bleibt stehen.
Die Attrappe in workersFocus.test.mjs merkt sich die Argumente, ein neuer Test pinnt genau einen Aufruf
mit dieser Option.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 23:53:22 +00:00