Kundenansicht neu P10: Checkliste zum Umschalten in der Reihenfolge der Spec
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e8ede69188
commit
30adafd779
2 files changed
+90
No files matched your search
@@ -0,0 +1,76 @@
|
||||
# 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-kundenansicht` 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-kundenansicht && 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-kundenansicht && git fetch origin && git log --oneline origin/main..kn-p10-a`, dann `git push origin 'kn-p10-a^{commit}:refs/heads/main'`.
|
||||
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-kundenansicht 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-kundenansicht && 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-kundenansicht && node scripts/rechtliches-hochladen.mjs --probe`
|
||||
2. Aktuelle Version prüfen (nur lesend): `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kundenansicht && 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); `ANALYSE_ENABLED` und `AUFTRAEGE_ENABLED` bleiben `off`, bis ihre eigenen Livegänge erledigt sind.
|
||||
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. **Stop: Inhaber-OK nötig:** Der Controller nennt dir das Ergebnis der Schritte 1 bis 5 und schlägt eine ruhige Uhrzeit vor; du sagst „umschalten, jetzt“.
|
||||
7. `.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`
|
||||
8. Neu starten (erwartet `Up …`; bei 502 in den ersten Sekunden Abschnitt 6 nach 10 s wiederholen): `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-kundenansicht && node scripts/umschalten-nachpruefung.mjs https://project.webklar.com --erwartet=neu`
|
||||
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: 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 (erwartet Exit 0): `cd /home/webklar/apps/kundenbereich.webklar.com/dev-kundenansicht && 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-kundenansicht && 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-kundenansicht && 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-kundenansicht && 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-kundenansicht && 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.
|
||||
@@ -0,0 +1,14 @@
|
||||
import { test } from 'node:test'
|
||||
import assert from 'node:assert/strict'
|
||||
import { readFileSync } from 'node:fs'
|
||||
|
||||
// Umschalt-Checkliste (P10 Task 6): Abschnitte in der Reihenfolge der Spec 5.10, Befehle und Stopps stehen drin
|
||||
const doc = readFileSync(new URL('../docs/umschalten-kundenansicht.md', import.meta.url), 'utf8')
|
||||
const KOEPFE = ['## 1. Voraussetzungen', '## 2. Kundenart der Bestandseinträge setzen', '## 3. Fassung 6 hochgeladen', '## 4. WOMS-Pflichtfeld live', '## 5. Schalter auf on', '## 6. Nachprüfung', '## 7. Rückweg', '## 8. Danach: festschreiben und aufräumen']
|
||||
|
||||
test('Überschriften in der Reihenfolge der Spec 5.10', () => {
|
||||
const pos = KOEPFE.map((k) => doc.indexOf(k)); assert.ok(pos.every((p, i) => p > -1 && (i === 0 || p > pos[i - 1])), pos.join(','))
|
||||
})
|
||||
test('nennt die Befehle und die Stopps', () => {
|
||||
for (const s of ['kundenart-bestand.mjs --pruefen', '--ausfuehren', 'KUNDENANSICHT_NEU=on', 'KUNDENANSICHT_NEU=off', 'docker compose up -d --no-deps kundenbereich-server', '--erwartet=neu', 'docker-compose.yml', 'Stop: Inhaber-OK nötig', 'kein Rückweg per Schalter']) assert.ok(doc.includes(s), s)
|
||||
})
|
||||
Reference in new issue
Block a user