From 9009dade8124b96ed7824f552897899d14abd054 Mon Sep 17 00:00:00 2001 From: Schalli Date: Fri, 18 Sep 2026 12:07:43 +0200 Subject: [PATCH] =?UTF-8?q?wip:=20Betrieb=20nach=201.2.0=20pausiert=20?= =?UTF-8?q?=E2=80=94=20Wiedereinstieg=20(HANDOFF.json=20+=20.continue-here?= =?UTF-8?q?.md),=20nichts=20angefangen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_016g2npLxzH5gZpg8s2S6vKh --- .planning/.continue-here.md | 68 +++++++++++++++++++++++++++++++++++++ .planning/HANDOFF.json | 37 ++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 .planning/.continue-here.md create mode 100644 .planning/HANDOFF.json diff --git a/.planning/.continue-here.md b/.planning/.continue-here.md new file mode 100644 index 0000000..9500a20 --- /dev/null +++ b/.planning/.continue-here.md @@ -0,0 +1,68 @@ +--- +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 new file mode 100644 index 0000000..e6ca5d3 --- /dev/null +++ b/.planning/HANDOFF.json @@ -0,0 +1,37 @@ +{ + "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)." +}