Hustler-Stufe: Doku trennt Keller begehbar (3) und Bot-Leads abrufbar (6)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-22 12:24:21 +00:00
1 parent 1ab760be0c
commit 5c3248ae8f
1 file changed
+35 -9
+35 -9
View File
@@ -10,11 +10,23 @@ 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 bis 3 | P1 + P3 (state, events, settings, pause, trace, pult GET, claim, sent, discard, done, prospect) | Hochhaus, Detailansicht, Pult mit Übernehmen, Kopieren & öffnen, Als gesendet markieren, Verwerfen, Erledigt, E-Mail schreiben. **Kein Keller, keine Antwort-Knöpfe.** |
| 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. Kein Keller. |
| 6 bis 9 | zusätzlich P6: `GET /botleads` | zusätzlich der Keller (Bot-Leads): Keller-Etage als Link, Bildschirm `?tab=botleads`, Deeplinks, Spur-Links. Entspricht dem vollen Stand von `75ed38e`. |
| 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)
@@ -22,13 +34,27 @@ Die `3` in dieser Zeile ist die Stufe der Produktion. Mehr ist zum Hochsetzen ni
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.
## Was unterhalb von Stufe 6 gesperrt ist (Keller)
## 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.
- `workersApi.botleads` ruft unterhalb von Stufe 6 gar nichts ab (kein JWT, keine Anfrage) und liefert den Fehler 404 „Der Keller ist noch nicht freigeschaltet.“
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).
@@ -36,19 +62,19 @@ Es gibt keine Überschreibung zur Laufzeit (kein localStorage, keine Adresse, ke
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).
(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 die Keller-Etage mit „Keller · Bot-Leads ▸“.
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 Keller für seine Szenarien K und L. `build.mjs` baut deshalb standardmäßig mit `VITE_HUSTLER_STUFE=6`:
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 und Keller)
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.