Files

7.6 KiB

Hustler-Stufe: was die Oberfläche schon zeigen darf

Der Hustler-Dienst (knso/workers-dienst) geht Stufe für Stufe live, die Oberfläche (WOMS, /hustler) ist schon fertig. Damit Mitarbeiter keine Knöpfe und Bildschirme sehen, deren Endpunkte im Dienst noch fehlen (404 {"error":"Nicht gefunden."}), gibt es eine Stufen-Sperre mit genau einer Quelle der Wahrheit:

src/lib/hustlerStufe.js
export const HUSTLER_STUFE = stufeAus(buildWert(), 3)

Die 3 in dieser Zeile ist die Stufe der Produktion. Mehr ist zum Hochsetzen nicht zu ändern.

Es gibt drei Schwellen (alle in src/lib/hustlerStufe.js, mit je einer Funktion, die Bausteine und Tests fragen):

Konstante Wert Funktion Was sie freigibt
KELLER_BEGEHBAR_AB 3 kellerBegehbar(stufe) der Keller als Bildschirm: Keller-Etage als Link, ?tab=botleads (auch mit &bot=), Spur-Links in den Keller
STUFE_ANTWORTEN 4 antwortenOffen(stufe) die Antwort-Knöpfe im Pult (Dienst P4)
BOTLEADS_AB 6 botleadsAbrufbar(stufe) der Abruf GET /api/workers/botleads (Dienst P6): nur dann holt der Keller Daten

Keller begehbar und Bot-Leads abrufbar sind getrennt: Ab Stufe 3 öffnet der Keller seine Szene (Arne, Regale, Register-Buch, Reiter, Suche), auch wenn der Dienst die Bot-Leads noch nicht liefert. Dann steht das Register leer da (siehe unten) und es geht keine Anfrage hinaus.

Stufe Dienst Oberfläche
1 und 2 vor P3 (kein Produktionswert, nur für Tests des geschlossenen Kellers) wie Stufe 3, nur der Keller ist zu: Keller-Etage zoomt, ?tab=botleads fällt aufs Hochhaus, Spur-Links in den Keller sind Text. Keine Antwort-Knöpfe.
3 P1 + P3 (zusätzlich pult GET, claim, sent, discard, done, prospect) Hochhaus, Detailansicht, Pult mit Übernehmen, Kopieren & öffnen, Als gesendet markieren, Verwerfen, Erledigt, E-Mail schreiben. Keller begehbar, aber leer (kein Abruf der Bot-Leads). Keine Antwort-Knöpfe. Das ist die Produktion.
4 und 5 zusätzlich P4: POST /pult/:id/paste, /reply, /approve-preview, /start-build zusätzlich im Pult-Brief: Antwort des Kunden einfügen, Als Mensch antworten / Jetzt senden, Freigeben & senden, Vorschau bauen. Keller wie bei Stufe 3 (leer).
6 bis 9 zusätzlich P6: GET /botleads der Keller holt die Bot-Leads (Live-Daten): Register mit Zeilen, Suche, Raum-Reiter, Seiten, Akte. Entspricht dem vollen Stand von 75ed38e.

Was unterhalb von Stufe 4 gesperrt ist (P4-Aktionen)

  • rowModel (src/lib/workersPult.js, Parameter stufe, Standard HUSTLER_STUFE) liefert canReply, canPaste, canApprovePreview und canStartBuild immer als false. Brief und Liste lesen nur diese Felder, deshalb verschwinden Knöpfe, Eingabefelder, Rückfragen und Hinweise zusammen; die Aktionsgruppe schließt sich ohne Lücke.
  • PultList reicht stufe (Standard HUSTLER_STUFE) an rowModel durch. P3-Aktionen bleiben unverändert.

Keller: begehbar ab Stufe 3, Bot-Leads erst ab Stufe 6

Unterhalb von Stufe 3 (kellerBegehbar false) ist der Keller zu:

  • WorkersPage: ?tab=botleads (auch mit &bot=) und jeder andere unbekannte Wert zeigen das Hochhaus (pickTab nimmt den ersten erlaubten Bildschirm). BotLeadList wird nie eingehängt. Die Weiterleitungen /leads und /workers auf /hustler (Query bleibt) gelten weiter und enden dann im Hochhaus.
  • HochhausWelt: die Keller-Etage ist kein Link auf /hustler?tab=botleads, sondern ein Knopf wie jede andere Etage (zoomt heran, „Keller heranzoomen“).
  • HustlerDialog: ein Spur-Link in den Keller bleibt Text. Arne ist weiter sichtbar und klickbar (Detailansicht), die Zahl „Bot-Leads“ in der Kopfzeile und am Schild im Haus bleibt.

Ab Stufe 3 sind alle drei Punkte offen (Etage ist ein Link, ?tab=botleads gilt, Spur-Links führen hinein). Die Kennzahl „Bot-Leads“ in der Kopfzeile ist Text und bleibt es (sie führt auch ab Stufe 6 nirgends hin).

Unterhalb von Stufe 6 (botleadsAbrufbar false) gibt es GET /botleads im Dienst noch nicht. Darum:

  • BotLeadList (Prop stufe, Standard HUSTLER_STUFE, von WorkersPage durchgereicht) ruft api.botleads gar nicht erst auf: kein JWT, keine Anfrage, keine Ladeanzeige, kein Fehlerzustand, kein „Erneut versuchen“.
  • Der Keller zeigt seine normale Szene (Arne nach seinem Status, Regale, Register-Buch, Raum-Reiter, Suche) im Leer-Zustand mit ehrlichem Text (RegisterBuch, Prop ohneDienst): „Noch keine Bot-Leads.“ und darunter „Hier legt Arne Betriebe ohne Website ab, die Bea nicht für eine Mail ausgewählt hat. Die Branchen-Räume (Ärzte, Handwerk, Selbstständige, Läden) suchen noch nicht.“ Dieser Text gilt auch mit gewähltem Raum, getippter Suche und in der Einzelansicht (&bot=); „Keine Treffer.“ und die Zahl am Reiter gibt es ohne Dienst nicht.
  • Reiter, Suche, „Register zuklappen“ und „Alle anzeigen“ bleiben bedienbar und ändern nur die Anzeige; sie lösen nie einen Abruf aus und nehmen keinen Fokus weg.
  • workersApi.botleads bleibt unterhalb von Stufe 6 zusätzlich hart gesperrt (zweite Sicherung, falls ein Aufrufer die Stufe nicht prüft): kein JWT, keine Anfrage, Fehler 404 „Die Bot-Leads sind noch nicht freigeschaltet.“ (BOTLEADS_GESPERRT_TEXT).

Ab Stufe 6 gilt das Verhalten mit Live-Daten unverändert (Abruf, Suche mit Verzögerung, Seiten, Akte, Leer-Text „Betriebe, die nicht angeschrieben werden, erscheinen hier mit ihrem Grund.“).

Es gibt keine Überschreibung zur Laufzeit (kein localStorage, keine Adresse, kein Schalter in der Oberfläche).

Stufe beim Livegang hochsetzen

  1. Den Dienst-Stand live nehmen und prüfen, dass die Endpunkte antworten (P4: ein Pult-Eintrag lässt sich einfügen/beantworten; P6: GET /api/workers/botleads antwortet 200).
  2. In src/lib/hustlerStufe.js die 3 in der Zeile export const HUSTLER_STUFE = stufeAus(buildWert(), 3) ändern: auf 4 beim Livegang von P4, auf 6 beim Livegang von P6 (die Kommentarzeile darüber nennt die Stufen). Der Keller selbst ist schon mit 3 offen; die 6 schaltet nur seinen Datenabruf ein.
  3. Tests und Bau wie gewohnt: node --max-old-space-size=1024 --test tests/*.test.mjs tests/unit/*.test.mjs und vite build. Kein Test hängt an der 3: hustlerStufe.test.mjs liest die Stufe aus dem Quelltext, alle Stufen-Tests geben ihre Stufe (3 und 6) ausdrücklich an. Bricht nach dem Hochsetzen trotzdem ein Test, hat er die Stufe stillschweigend aus dem Standard gelesen und gehört auf eine ausdrückliche Stufe umgestellt.
  4. Committen, pushen, deployen wie jede andere Änderung. Danach im Browser prüfen: P4 zeigt im Brief „Antwort des Kunden einfügen“ bzw. „Als Mensch antworten“; P6 zeigt im Keller das Register mit den Bot-Leads (statt „Noch keine Bot-Leads. Hier legt Arne …“). Die Keller-Etage „Keller · Bot-Leads ▸“ ist schon ab 3 ein Link.

Prüfstand (scripts/workers-harness)

Der Prüfstand braucht P4 und die Bot-Leads (Live-Daten im Keller) für seine Szenarien K und L. build.mjs baut deshalb standardmäßig mit VITE_HUSTLER_STUFE=6:

node scripts/workers-harness/build.mjs "$(mktemp -d)"                          # Stufe 6, wie bisher (alle Szenarien)
VITE_HUSTLER_STUFE=3 node scripts/workers-harness/build.mjs "$(mktemp -d)"     # Stand der Produktion (Szenarien ohne P4; der Keller zeigt sein leeres Register)

VITE_HUSTLER_STUFE gilt nur zur Bauzeit und nur als Ziffer 1 bis 9; alles andere fällt auf die Stufe aus dem Quelltext zurück (Vite) bzw. bricht den Bau des Prüfstands ab. Die Variable gehört nicht in den Produktions-Bau (nicht in .env, nicht in Build-Argumente): die Produktion richtet sich allein nach dem Quelltext.