78 lines
15 KiB
Markdown
78 lines
15 KiB
Markdown
# Umschalten auf die neue Kundenansicht
|
|
|
|
Anleitung für Inhaber und Controller, Reihenfolge laut Spec 5.10: Kundenart setzen, Fassung 6 hochgeladen, WOMS-Pflichtfeld live, dann `KUNDENANSICHT_NEU=on`. Bis zum Schalter bleibt für Kunden alles wie heute. Der Rückweg heißt `off` und gilt bis Abschnitt 8.
|
|
|
|
- **Stop: Inhaber-OK nötig** heißt: Ein Agent führt den Schritt nie von sich aus aus, er meldet dir, was bereitliegt. Pushen tust nur du, nur fast-forward, nie `--force`.
|
|
- Befehle mit `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10` laufen im Worktree, der Teil A trägt (anderer Worktree: Pfad ersetzen). Protokolle liegen in `/root/reports/kundenansicht-neu-2026-10-15/umschalten`.
|
|
- Die `.env` wird nie ausgegeben: nur `command grep -a -n '^<SCHLÜSSEL>=' /home/webklar/apps/.env` und `sed -i` auf genau eine Zeile, vorher eine Sicherung. Neu gestartet wird nur mit `docker compose up -d --no-deps kundenbereich-server`, nie `preview-portal`.
|
|
|
|
## 1. Voraussetzungen
|
|
|
|
1. Du hast Vorschau, Pilot und Fassung 6 freigegeben und ausdrücklich „umschalten“ gesagt. Der Hauptzweig des Portals ist nach Phase E fertig (P0 bis P8 und die freigegebene Rechtsrunde), `WORTLAUT_STATUS` steht auf `'freigegeben'`; das WOMS-Paket P9 prüft Abschnitt 4.
|
|
2. Teil A prüfen und taggen (erwartet: `fail 0`, Status leer): `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 && timeout 900 nice -n 10 node --max-old-space-size=1024 --test --test-concurrency=1 test/kundenartBestand.test.js test/knUmschaltSeiten.test.js test/knUmschaltNachpruefung.test.js test/kaufBestandPruefen.test.js test/knUmschaltCheckliste.test.js test/kundenansichtDashboard.test.js test/adminPanelGone.test.js test/legalDocs.test.js && git status --short && git tag kn-p10-a`
|
|
3. **Stop: Inhaber-OK nötig** (Push, Teil A ändert für Kunden nichts, solange der Schalter nicht `on` ist): `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 && git fetch origin && git log --oneline origin/main..kn-p10-a`, dann `git push origin 'kn-p10-a^{commit}:refs/heads/main'`. Fragt git nach dem Passwort (HTTP 401, der Zugang steckt in der Remote-Adresse), pushst du den Zweig mit Zugang: `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 && git fetch origin && bash /root/reports/workers-2026-10-16/push-mit-zugang.sh /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 feature/kn-p10-a main "$(git rev-parse origin/main)" "$(git rev-parse --short=7 kn-p10-a)"` (letzte Zeile `✓ origin/main = …`). Für spätere Pushes gilt dasselbe mit dem jeweiligen Zweig.
|
|
4. Deploy prüfen (beide Kurzformen gleich, sonst zwei Minuten warten; im Log kein `Unbehandelter Fehler`): `git -C /home/webklar/apps/kundenbereich.webklar.com/build rev-parse --short HEAD && git -C /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 rev-parse --short kn-p10-a && docker logs --since 5m webklar-kundenbereich-server 2>&1 | tail -5`
|
|
5. Ruhezustand (Exit 0, alle Zeilen `ok`): `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 && node scripts/umschalten-nachpruefung.mjs https://project.webklar.com --erwartet=alt`
|
|
|
|
## 2. Kundenart der Bestandseinträge setzen
|
|
|
|
1. Prüfen (nur lesend): `mkdir -p /root/reports/kundenansicht-neu-2026-10-15/umschalten; docker exec -w /app webklar-kundenbereich-server node scripts/kundenart-bestand.mjs --pruefen | tee /root/reports/kundenansicht-neu-2026-10-15/umschalten/kundenart-pruefen-$(date -u +%Y%m%d-%H%M%S).log`
|
|
2. Erwartet: `Ohne Kundenart: <N>`, `Unbekannte Werte: 0` und die Bestätigungszeile `Kundenart unternehmen setzen: <N>`. Stand der Spec (15.10.): 42 Einträge, 6 Kunden, 31 Leads, 5 verlorene. Weicht `<N>` ab oder gibt es unbekannte Werte, nennt der Controller dir die Zahlen und wartet.
|
|
3. **Stop: Inhaber-OK nötig:** Der Controller zeigt dir die Zahlen und fragt, ob alle diese Einträge auf `unternehmen` gesetzt werden. Das Skript füllt nur leere Felder; ohne die passende Bestätigungszeile schreibt es nichts.
|
|
4. Setzen, `<N>` aus Schritt 1 (Exit 0, letzte Zeile `Summe gesetzt=<N> uebersprungen=0 fehler=0`): `set -o pipefail; docker exec -w /app webklar-kundenbereich-server node scripts/kundenart-bestand.mjs --ausfuehren --bestaetigung="Kundenart unternehmen setzen: <N>" | tee /root/reports/kundenansicht-neu-2026-10-15/umschalten/kundenart-ausfuehren-$(date -u +%Y%m%d-%H%M%S).log`
|
|
5. Gegenprobe: Schritt 1 noch einmal, erwartet `Ohne Kundenart: 0`.
|
|
|
|
## 3. Fassung 6 hochgeladen
|
|
|
|
1. Schlüssel, Bucket und Karten lesen (nur lesend, Schlüssel `/root/.appwrite-rechtliches.key` stellst du bereit; jede fehlende Karte ist ein Stopp): `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 && node scripts/rechtliches-hochladen.mjs --probe`. Gibt es den Schlüssel nicht, lädt der Controller die Fassung über die WOMS-Oberfläche in Chrome hoch (wie am 17.10.) und Schritt 2 entfällt; Schritt 3 gilt dann allein
|
|
2. Aktuelle Version prüfen (nur lesend): `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 && node scripts/rechtliches-hochladen.mjs --pruefen | command grep -a abo-bedingungen`. Erwartet `ok abo-bedingungen`, also eine aktuelle Version, deren `source` auf `:public/neu/rechtliches/abo-bedingungen.html` endet. Die übrigen Zeilen betreffen die Funktionsunterlagen.
|
|
3. Du bestätigst in WOMS unter „Rechtliches“, dass die Karte `abo-bedingungen` die Fassung 6 trägt („Version 6 · Stand 28.10.2026“). Die WOMS-Nummer `vN` zählt Uploads und ist nicht die Fassung.
|
|
4. Fehlt sie, stoppt der Controller. **Stop: Inhaber-OK nötig:** Hochladen (Aufruf im Kopf von `scripts/rechtliches-hochladen.mjs`) nur auf deinen ausdrücklichen Auftrag.
|
|
|
|
## 4. WOMS-Pflichtfeld live
|
|
|
|
1. Ist `kn-p9` im live gebauten WOMS enthalten? `git -C /home/webklar/apps/ticket.webklar.com/build merge-base --is-ancestor kn-p9 HEAD && echo live`. Erwartet: `live`.
|
|
2. Du bestätigst: „Neuer Lead“ und „Neuer Kunde“ zeigen die Kundenart ohne Vorgabe.
|
|
3. Fehlt eines von beiden, wird nicht umgeschaltet: Neue Einträge ohne Kundenart würden den Stand aus Abschnitt 2 sofort wieder aufweichen.
|
|
|
|
## 5. Schalter auf on
|
|
|
|
1. Kundenart (Vorflug): `docker exec -w /app webklar-kundenbereich-server node scripts/kundenart-bestand.mjs --pruefen | command grep -a "Ohne Kundenart"`. Erwartet `Ohne Kundenart: 0`, sonst Abschnitt 2 wiederholen (ein Lead, der seitdem entstand, ist normal).
|
|
2. Setup und Wortlaut: `docker exec -w /app webklar-kundenbereich-server node scripts/kundenansicht-setup.mjs --pruefen; docker exec -w /app webklar-kundenbereich-server grep -n "WORTLAUT_STATUS" server/services/bestelltexte.js`. Erwartet: keine fehlenden Attribute (insbesondere `featureConsents.kundenart`, sonst scheitert jede Bestellung der neuen Ansicht mit 500) und `'freigegeben'`. Das Setup selbst läuft nur auf Anweisung nach deinem OK.
|
|
3. Schalter in Compose und `.env`: `command grep -a -n 'KUNDENANSICHT_NEU' /home/webklar/apps/docker-compose.yml; command grep -a -n '^KUNDENANSICHT_NEU' /home/webklar/apps/.env`. Erwartet in `docker-compose.yml` zwei Zeilen `- KUNDENANSICHT_NEU=${KUNDENANSICHT_NEU:-off}` und `- KUNDENANSICHT_NEU_PILOT_EMAILS=${KUNDENANSICHT_NEU_PILOT_EMAILS:-}`, in `.env` `KUNDENANSICHT_NEU=pilot` und die Pilot-Liste. Fehlt eine Compose-Zeile, meldet der Controller es und wartet auf die Korrektur.
|
|
4. Katalog-Schalter, du bestätigst jeden Wert: `command grep -a -n '^\(ABO_PILOT_EMAILS\|TERMINE_ENABLED\|SHOP_ENABLED\|UNTERKUNFT_ENABLED\|ZEITEN_ENABLED\|ANALYSE_ENABLED\|AUFTRAEGE_ENABLED\)=' /home/webklar/apps/.env`. `ABO_PILOT_EMAILS` muss `*` sein (sonst antwortet jede Abo-Bestellung eines Nicht-Pilot-Kunden mit 403). Stand 29.10.: `TERMINE`, `ZEITEN` und `UNTERKUNFT` stehen auf `pilot`, `SHOP` auf `on` (die Zeile steht doppelt), `ANALYSE_ENABLED` auf `on`: du bestätigst, dass die Analyse danach für alle unter „Entdecken“ erscheint. `AUFTRAEGE_ENABLED` hat weder `.env`- noch Compose-Zeile und bleibt damit `off`.
|
|
5. Ruhe und Sicherung (Erwartet: 0, sonst die Zeilen ansehen): `docker logs --since 72h webklar-kundenbereich-server 2>&1 | command grep -a -c 'Unbehandelter Fehler'`, dann `cp -n /home/webklar/apps/.env /home/webklar/apps/.env.bak-$(date -u +%Y-%m-%d)-kundenansicht-on`
|
|
6. Käufe (nur lesend, Exit 0 und `Offene Bestellungen: 0`, sonst wartest du die Zahlung ab; `Fristen laufen` ist nur Information, eine Zeile `Behalten-Sitzung eingetragen` klärt der Controller vorher): `set -o pipefail; docker exec -w /app webklar-kundenbereich-server node scripts/kauf-bestand-pruefen.mjs | tee /root/reports/kundenansicht-neu-2026-10-15/umschalten/kauf-bestand-$(date -u +%Y%m%d-%H%M%S).log`
|
|
7. **Stop: Inhaber-OK nötig:** Der Controller nennt dir das Ergebnis der Schritte 1 bis 6 und schlägt eine ruhige Uhrzeit vor; du sagst „umschalten, jetzt“.
|
|
8. `.env` ändern (erwartet genau die Zeile `KUNDENANSICHT_NEU=on`, sonst stoppt der Controller): `sed -i 's/^KUNDENANSICHT_NEU=.*/KUNDENANSICHT_NEU=on/' /home/webklar/apps/.env && command grep -a -n '^KUNDENANSICHT_NEU=' /home/webklar/apps/.env`
|
|
9. Neu starten (erwartet `Up …`; der Server lauscht erst nach `npm install`, weiter erst, wenn `docker logs --since 2m webklar-kundenbereich-server 2>&1 | command grep -a -c 'Kundenbereich läuft auf Port'` mindestens 1 ergibt): `cd /home/webklar/apps && docker compose up -d --no-deps kundenbereich-server && docker ps --filter name=webklar-kundenbereich-server --format '{{.Status}}'`
|
|
|
|
## 6. Nachprüfung
|
|
|
|
1. Seiten (Exit 0, alle Zeilen `ok`, einschließlich `/abo-bedingungen.html` mit `Version 6` und des PDFs): `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 && node scripts/umschalten-nachpruefung.mjs https://project.webklar.com --erwartet=neu`. Das Skript prüft beim PDF nur Typ und Anfang, deshalb dazu der Inhalt (beide Werte gleich): `curl -s https://project.webklar.com/WEBklar-Abo-Vertragsunterlagen.pdf | sha256sum; cat public/neu/rechtliches/WEBklar-Abo-Vertragsunterlagen.pdf.sha256`
|
|
2. Routen (erwartet JSON mit `"authenticated":false`): `curl -s https://project.webklar.com/api/auth/me`
|
|
3. Login und Oberfläche, du mit zwei Konten (Betrieb und Pilot-Konto) auf Handy und Desktop: (a) `/login.html` ist weiß, die Anmeldung führt auf Website; (b) `#chat`, `#rechnungen`, `#wartung` und `#termine?bestellt=1&projekt=<id>` landen am richtigen Ort mit erhaltener Query; (c) „Verträge kündigen“ und „Vertrag widerrufen“ liegen höchstens zwei Taps entfernt, beide Seiten öffnen weiß; (d) Funktionen zeigt „Meine/Entdecken“ ohne Preise, „Einschalten“ eines Betriebs hat kein Häkchen; (e) die Kundenansicht der Mitarbeiter (WOMS) zeigt die neue Oberfläche und sperrt Schreibaktionen.
|
|
4. Mails, optional: Probekauf mit dem Testkonto aus `ABO_TEST_EMAILS` (0,50 €). Erwartet: K01 an den Kunden und T02 ans Team kommen an, der Anhang `WEBklar-Abo-Vertragsunterlagen.pdf` ist Fassung 6, in `featureConsents` steht eine Zeile mit `featureKey` `abo` und der Kundenart. **Stop: Inhaber-OK nötig** für Kauf und Stornieren.
|
|
5. Logs (erwartet 0): `docker logs --since 30m webklar-kundenbereich-server 2>&1 | command grep -a -c -i 'Unbehandelter Fehler'`
|
|
6. Installierte App und offene Tabs: Ein Tab der alten Ansicht von vor dem Umschalten bekommt bei Bestellung, Wechsel oder Speicher 409 „Seite neu laden“ (gewollt, keine Bestellung nach Fassung 5 mehr). Android öffnet weiß. iOS liest die Statusleiste beim Installieren; bleibt sie schwarz, entfernst du die App vom Home-Bildschirm und fügst sie neu hinzu.
|
|
7. Beobachtungszeit: Beginn und Ende (Vorschlag: sieben Tage) stehen in `/root/reports/kundenansicht-neu-2026-10-15/umschalten/beobachtung.txt`. Die Offline-Seite aus Abschnitt 8 darf sofort laufen, das Festschreiben erst nach Ablauf und mit deinem neuen OK.
|
|
|
|
## 7. Rückweg
|
|
|
|
1. Nur bei Fehler, und vorher informiert der Controller dich kurz.
|
|
2. `.env` zurück auf `off` und neu starten: `sed -i 's/^KUNDENANSICHT_NEU=.*/KUNDENANSICHT_NEU=off/' /home/webklar/apps/.env && cd /home/webklar/apps && docker compose up -d --no-deps kundenbereich-server`
|
|
3. Dann aus dem Worktree, sobald der Server wieder lauscht (wie Abschnitt 5, Schritt 9; erwartet Exit 0): `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 && node scripts/umschalten-nachpruefung.mjs https://project.webklar.com --erwartet=alt`
|
|
4. Verträge, die unter Fassung 6 abgeschlossen wurden, bleiben gültig: Fassungstabelle und Archiv bleiben stehen.
|
|
5. Der Schalter ist der Rückweg nur bis zum Festschreiben (Abschnitt 8).
|
|
|
|
## 8. Danach: festschreiben und aufräumen
|
|
|
|
1. Offline-Seite (Tag `kn-p10-b`, Cache `kb-offline-v2`): erst nach dem Umschalten, sonst speichert der Service Worker die alte dunkle Seite erneut. **Stop: Inhaber-OK nötig:** `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 && git push origin 'kn-p10-b^{commit}:refs/heads/main'`, danach `curl -s https://project.webklar.com/sw.js | command grep -a -c kb-offline-v2` (erwartet `1`).
|
|
2. Beobachtungszeit aus Abschnitt 6 abwarten, dann sagst du „festschreiben“.
|
|
3. **Ab dem Festschreiben (Teil C, Tasks 14 bis 25 des Plans) gibt es kein Rückweg per Schalter:** `off` würde die alten Bestellseiten (Wortlaut Fassung 5) mit Fassung 6 als einziger geltender Fassung kombinieren. Fehler werden vorwärts korrigiert.
|
|
4. Vorher die Hashes prüfen; bei Abweichung stoppt der Agent: `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 && sha256sum public/WEBklar-Abo-Vertragsunterlagen.pdf public/vertragsunterlagen/v5/WEBklar-Abo-Vertragsunterlagen.pdf public/neu/rechtliches/abo-bedingungen.html public/neu/rechtliches/WEBklar-Abo-Vertragsunterlagen.pdf && cat public/neu/rechtliches/WEBklar-Abo-Vertragsunterlagen.pdf.sha256 && command grep -a -c 'href="/neu/rechtliches/WEBklar-Abo-Vertragsunterlagen.pdf"' public/neu/rechtliches/abo-bedingungen.html && git status --short`. Erwartet: Zeile 1 gleich Zeile 2, Prüfsumme neben dem PDF gleich Zeile 3, Zahl der Entwurfslinks `1`, Status leer.
|
|
5. Festschreiben (Plan, Task 14): Seite und PDF wandern nach `public/`, `termsVersion` und `termsVersionNeu` werden eins, alle Pins laufen grün, Commit und Tag `kn-p10-c1`. Die Rechtstexte ändern sich dabei nie; schlägt eine Wortlaut-Assertion fehl, stoppt der Agent und meldet sie dir.
|
|
6. **Stop: Inhaber-OK nötig** (Push): `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 && git push origin 'kn-p10-c1^{commit}:refs/heads/main'`. Prüfen (gleiche Kurzformen, Exit 0, `200`): `git -C /home/webklar/apps/kundenbereich.webklar.com/build rev-parse --short HEAD && cd /home/webklar/apps/kundenbereich.webklar.com/dev-kn-p10 && git rev-parse --short kn-p10-c1 && node scripts/umschalten-nachpruefung.mjs https://project.webklar.com --erwartet=neu && curl -s -o /dev/null -w '%{http_code}\n' https://project.webklar.com/vertragsunterlagen/v5/abo-bedingungen.html`
|
|
7. Weiterleitung (erwartet `301 https://project.webklar.com/abo-bedingungen.html`): `curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' https://project.webklar.com/neu/rechtliches/abo-bedingungen.html`. Altvertrag: Ein Kunde mit Fassung 5 öffnet Verträge, Abo, „Bedingungen“ und bekommt das Archiv v5, nicht Fassung 6. Logs wie in Abschnitt 6, Schritt 5.
|
|
8. Danach folgen im Plan das Lösen des Logins von `app.js` und das Löschen der alten Oberfläche (Tasks 16 bis 25), jeweils mit eigenem Tag und eigenem OK von dir.
|