diff --git a/.planning/.continue-here.md b/.planning/.continue-here.md deleted file mode 100644 index 9500a20..0000000 --- a/.planning/.continue-here.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -context: default -phase: betrieb-nach-1.2.0 -task: null -total_tasks: 0 -status: paused -last_updated: 2026-09-18T10:06:16.288Z ---- - -# Wiedereinstieg — v1.2.0 live, Beta mit In-App-Updater, nichts angefangen - -## Critical Anti-Patterns - -Alle aus tatsaechlichen Fehlschlaegen dieser und der vorigen Sitzungen. - -| Muster | Beschreibung | Schwere | Vermeidung | -|--------|--------------|---------|------------| -| Alter Client als Beleg | User meldete „Beenden geht nicht" — sein installierter Client war ein Stand VOR dem Fix (alpha lieferte bis Mittag 280aab6). | blocking | Zuerst den installierten Stand feststellen (Setup-Seite zeigt seit a6d1a64 „Tessera-App X.Y.Z · Stand "; Tray-Menue „Auf Beta-Stand … aktualisieren" = alt), dann erst am Code suchen. | -| Plugin-Timeout gilt fuer den Download | `updater_builder().timeout(15s)` wird vom Plugin auch fuer `download_and_install` uebernommen — 100-MB-AppImage waere abgebrochen. | blocking | Vor `download_and_install` `update.timeout = Some(600 s)` setzen (so gebaut); bei Aenderungen am Update-Fluss nicht anfassen. | -| Radio-Klick im NSIS verfehlt | „Bereits installiert"-Seite: Klick auf „Nicht deinstallieren" (465,401) ging einmal daneben → Deinstallation lief zuerst (Daten blieben). | advisory | Nach jedem Installer-Schritt Screenshot pruefen statt Klickfolge blind abzuspulen. | -| Hintergrund-Tunnel stirbt | `run_in_background` beendet den socat-Tunnel nach 10 min; `pkill -f socat` traf die eigene Shell. | advisory | `setsid -f socat …` (Port 8017) und `kill ` gezielt. | -| Zwei Schreiber auf einer Datei | Executoren strikt nacheinander; Planer nur lesend, nie committen. | advisory | CHANGELOG/i18n: nur Zeilen ergaenzen, eigene Namensraeume. | -| `git checkout -- ` als Rueckweg | setzte auch unkommittierte Nutz-Aenderung zurueck. | advisory | Patchdatei + `git apply -R`. | - - -**Gemessen 2026-09-18 10:06Z:** `git status --porcelain` leer, `main == origin/main` (efbd6e8), keine async-jobs, nichts angefangen. - -**Beta (alpha.tessera.ctl.de):** a6d1a64 (User hat gepullt) — mit In-App-Updater, CI-Desktop-Skip, Favoriten-Symbol/-Sortierung, Desktop-Server-Adresse, Bildmarke in Akzentfarbe, Versionszeile auf der Setup-Seite. -**Live (tessera.ctl.de):** v1.2.0 — OHNE Updater; kommt mit der naechsten Freigabe (1.3.0, neue Funktionen), auf Zuruf. -**CHANGELOG `## Unveröffentlicht`:** gefuellt (Neu/Geändert/Behoben) — bei Freigabe umbenennen (Kap. 9). -**Signierschluessel:** `~/.tessera/desktop-updater/` (Dev-Rechner), Gitea-Secrets `TAURI_SIGNING_PRIVATE_KEY`/`_PASSWORD`; vom User extern gesichert. -**Tests:** Web 431 / API 1101+23 / Rust 35. **Ledger WINDOWS.md:** unveraendert 15 offen (nur #35/#36/#37 ohne Mandantenbezug). - - - -Sitzung 2026-09-17/18: sechs Auftraege des Users komplett — Quick 260917-jdf (Bildmarke), -jdh (CI-Skip), -jdd (Favoriten), -jn2 (Server-Adresse), -kgc (Update in der App), Schnellfix a6d1a64 (Versionszeile); jeweils Plan → Pruefer → Executor → Verifier → Nachweis (Playwright lokal, CI-Laeufe 382-385, Windows-Test-VM: In-App-Update 7479cb4 → a6d1a64 per Tray-Klick). Details: Quick-Task-Tabelle in `.planning/STATE.md`, Berichte unter `.planning/quick/260917-*/`. - - - -Nichts Angefangenes. Naechste Arbeit kommt vom User. Ohne Termin: Freigabe 1.3.0 (bringt Updater auf Live), Ship Phase 17 (blockiert bei open_count 15), Ledger #35/#36/#37. Nicht ansprechen: Mandantenfaehigkeit, Lizenzierung. - - - -Siehe `HANDOFF.json` — Updater-Regeln (nur https, Beta-Commit-Vergleich, Live gleicher Basis = kein Update), Schluesselablage, CI-Stempel, Favoriten-TLS nur an der Fetch-Stelle. - - - -Keine. Fuer den User: eigenen Client einmal per Browser-Installer erneuern (alter Stand ohne Beenden-Fix/Updater). - - -## Required Reading (in order) - -1. `.planning/STATE.md` — Session Continuity + Quick-Task-Tabelle (Zeilen 260917-jdf … kgc, fast) -2. `CHANGELOG.md` — Regel: jede Aenderung sofort unter `## Unveröffentlicht` -3. `docs/anleitung-betrieb.md` Kap. 9 (Freigabe) und Kap. 10 (Desktop-Pakete, Signierschluessel, Skip) -4. Claude-Memory `reference_windows_test_vm.md` — VM-Bedienung inkl. Klickkoordinaten, Paketbezug aus `api:beta` - -## Infrastructure State - -- Live tessera.ctl.de (`IMAGE_TAG=live`, v1.2.0); Beta alpha 192.168.13.12 (a6d1a64). Deploy macht der User (pull + `up -d --force-recreate api web`). -- Lokal: `db`, `api`, `web` laufen (web/api aus 4d48543); Admin admin/admin123; DB ohne Host-Port. -- Gitea 1.26.2 + Runner auf diesem Rechner (ein Auftrag gleichzeitig); CI ueber API localhost:3002 (Token aus Push-URL, nie ausgeben); Skript `scratchpad/ci-wait.sh ` wartet auf einen Lauf (Scratchpad ist sitzungsgebunden — bei Bedarf neu anlegen). -- Windows-Test-VM 8233: Client a6d1a64 installiert, mit alpha verbunden; Tunnel/Dateiserver beendet. -- Registry-Abbild `localhost:3002/schalli/tessera-ctl/api:beta` enthaelt die CI-Pakete (`/app/desktop-dist/`) — per `docker cp` holbar. - - -`/gsd-resume-work`, dann das, was der User nennt — als `/gsd-quick --validate` mit voller Kette (Planer lesend, Executoren nacheinander, Nachweis per Playwright/VM, dann Push). Bei „Version freigeben": Rezept Kap. 9; dabei 18-UAT #2 (Release-Anhaenge am Tag) beobachten. - diff --git a/.planning/HANDOFF.json b/.planning/HANDOFF.json deleted file mode 100644 index e6ca5d3..0000000 --- a/.planning/HANDOFF.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "version": "1.0", - "timestamp": "2026-09-18T10:06:16.288Z", - "phase": "18", - "phase_name": "desktop-client-fertigstellen (abgeschlossen) — Betrieb nach 1.2.0, Beta-Pflege per Quick-Tasks", - "phase_dir": ".planning/quick/", - "plan": 0, - "task": 0, - "total_tasks": 0, - "status": "paused", - "completed_tasks": [ - {"id": 1, "name": "260917-jdf Bildmarke: ganzes T in Akzentfarbe", "status": "done", "commit": "ecff144,29db4c0"}, - {"id": 2, "name": "260917-jdh CI: Desktop-Bau ueberspringen bei unveraendertem Stand", "status": "done", "commit": "8c4aaa5,e7633e1"}, - {"id": 3, "name": "260917-jdd Favoriten: Symbol bei Zertifikatsfehler/intern, Sortierung", "status": "done", "commit": "2a562d0,b18ac25,b023d6f"}, - {"id": 4, "name": "260917-jn2 Desktop: Server-Adresse sichtbar + aenderbar", "status": "done", "commit": "29c132e,4c79874,4d48543"}, - {"id": 5, "name": "260917-kgc Desktop: Update in der App (signiert)", "status": "done", "commit": "678ba51,de81c74,7004b5b,7479cb4"}, - {"id": 6, "name": "Schnellfix: Setup-Seite zeigt Version + Stand", "status": "done", "commit": "a6d1a64"}, - {"id": 7, "name": "Aktenstand + alle Nachweise (Browser, CI 382-385, Windows-VM)", "status": "done", "commit": "efbd6e8"} - ], - "remaining_tasks": [], - "blockers": [], - "async_jobs": [], - "human_actions_pending": [ - {"action": "Eigenen Arbeitsplatz-Client einmal per Browser-Installer (alpha) erneuern", "context": "Alter Stand ohne Beenden-Fix und ohne Updater; ab dann Updates per Tray-Klick", "blocking": false}, - {"action": "Naechste Freigabe (1.3.0) auf Zuruf — bringt den Updater auf Live", "context": "Live tessera.ctl.de steht auf v1.2.0 ohne Updater; Rezept docs/anleitung-betrieb.md Kap. 9", "blocking": false} - ], - "decisions": [ - {"decision": "In-App-Update mit tauri-plugin-updater und minisign-signierten Paketen; nur https; Beta-Regel: gleiche Basisversion + anderer Commit-Stempel = neuer, Live gleicher Basis = kein Update", "rationale": "Robuster Install/Neustart unter Windows, Signatur als Vertrauensbasis, keine Update-Schleife", "phase": "quick-260917-kgc"}, - {"decision": "Signierschluessel liegt ausserhalb des Repos unter ~/.tessera/desktop-updater/ (Dev-Rechner), als Gitea-Secrets TAURI_SIGNING_PRIVATE_KEY/_PASSWORD; User hat ihn am 18.09. extern gesichert", "rationale": "Verlust = alle Clients einmal per Installer; Secrets sind nicht auslesbar", "phase": "quick-260917-kgc"}, - {"decision": "CI-Desktop-Skip: Stempel = Version + letzter Commit auf apps/desktop + Skripte + ci.yml; Tags bauen immer; check-Gate verlangt Manifest/Signatur", "rationale": "Docs-/Web-Pushes sparen 5-8 min Rust-Bau; Fail-safe bei kaputtem Cache", "phase": "quick-260917-jdh"}, - {"decision": "Favoriten: TLS-Fehler nur an der Icon-Fetch-Stelle toleriert (undici-Dispatcher), SSRF-Schutz unveraendert; interne Hosts per Browser-Direktbild", "rationale": "Kein serverseitiges Aufweichen des SSRF-Schutzes", "phase": "quick-260917-jdd"}, - {"decision": "Mandantenfaehigkeit und Lizenzierung ruhen weiterhin — nicht ansprechen", "rationale": "User-Entscheidung 2026-09-14", "phase": "-"} - ], - "uncommitted_files": [], - "next_action": "/gsd-resume-work; dann das, was der User nennt (als /gsd-quick --validate mit voller Kette: Planer → Pruefer → Executor → Verifier → Browser/VM-Nachweis → Push). Bei 'Version freigeben': Rezept Kap. 9 (CHANGELOG umbenennen, Tag; Release-Anhaenge + Update-Hinweis im Client beobachten).", - "context_notes": "Alles committet und gepusht (main == origin/main efbd6e8), Arbeitsbaum leer. Beta alpha.tessera.ctl.de laeuft mit a6d1a64 (User hat gepullt), Live mit v1.2.0. Lokaler Docker-Stack (web/api aus 4d48543, db) laeuft; Playwright-Browser noch auf der Proxmox-noVNC-Seite; socat-Tunnel und http.server beendet. Windows-Test-VM 8233: Client a6d1a64 installiert, mit alpha verbunden. CI-Skip in allen drei Faellen bewiesen (Laeufe 382/383/384 bauen, 385 ueberspringt in 18 s)." -} diff --git a/.planning/STATE.md b/.planning/STATE.md index eaba40b..c1dbe06 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -484,8 +484,8 @@ sind. Kein Anlass, sie vorher erneut vorzulegen. ## Session Continuity -Last session: 2026-09-18T09:30:00Z +Last session: 2026-09-18T10:20:00Z Resumed: 2026-09-17 — Sitzung ueber /gsd-resume-work fortgesetzt; sechs Auftraege des Users komplett abgearbeitet (Quick 260917-jdf/jdh/jdd/jn2/kgc + Schnellfix a6d1a64), alle mit Plan-Pruefung, Verifikation und Nachweis (lokaler Browser via Playwright, CI-Laeufe 382-384, Windows-Test-VM 8233). -Stopped at: Alles committet und gepusht. Nichts angefangen. Beta (alpha) laeuft mit a6d1a64 (User hat gepullt). Live (tessera.ctl.de) steht auf v1.2.0 — der dortige Client hat den Updater noch nicht; erst die naechste Freigabe (1.3.0, neue Funktionen) bringt ihn; danach aktualisieren sich Clients per Tray-Klick. Offen fuer den User: eigenen Arbeitsplatz-Client einmal per Browser-Installer erneuern (alter Stand ohne Beenden-Fix/Updater). Signierschluessel: ~/.tessera/desktop-updater/ (Dev-Rechner) — sichern; Verlust = neue Clients per Installer noetig. Letzter offener CI-Beweis (Docs-Push ueberspringt den Desktop-Bau) = der Lauf zu diesem Aktenstand-Commit. Beide .continue-here-Dateien entfernt (ueberholt), Desktop-Todo geschlossen. +Stopped at: Sitzung 2026-09-18 per /gsd-resume-work wiederaufgenommen (HANDOFF.json + .continue-here.md verbraucht und entfernt); naechster Auftrag des Users: Fehlermeldung soll Herkunft ausweisen (Browser oder Desktop-App, Windows/Linux, App-Version) — als /gsd-quick --validate. Vorher: Alles committet und gepusht. Nichts angefangen. Beta (alpha) laeuft mit a6d1a64 (User hat gepullt). Live (tessera.ctl.de) steht auf v1.2.0 — der dortige Client hat den Updater noch nicht; erst die naechste Freigabe (1.3.0, neue Funktionen) bringt ihn; danach aktualisieren sich Clients per Tray-Klick. Offen fuer den User: eigenen Arbeitsplatz-Client einmal per Browser-Installer erneuern (alter Stand ohne Beenden-Fix/Updater). Signierschluessel: ~/.tessera/desktop-updater/ (Dev-Rechner) — sichern; Verlust = neue Clients per Installer noetig. Letzter offener CI-Beweis (Docs-Push ueberspringt den Desktop-Bau) = der Lauf zu diesem Aktenstand-Commit. Beide .continue-here-Dateien entfernt (ueberholt), Desktop-Todo geschlossen. Resume file: None Last activity: 2026-09-18 - Quick 260917-kgc (Update in der App) + Schnellfix a6d1a64 abgeschlossen; alle Nachweise erbracht (lokaler Browser, CI 382-384, Windows-VM: In-App-Update 7479cb4 → a6d1a64)