Files
Webklar-Kundenbereich/docs/umschalten-kundenansicht.md
T

15 KiB

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.