docs(quick-260923-le6): Proxmox-Abnahmebefunde behoben (PMG-Teilsumme, Aktualisieren nur fuer Admins)
Tessera CI/CD / Lint & Type Check (push) Successful in 57s
Tessera CI/CD / Tests (push) Successful in 1m54s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 20s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m22s

Uebergabe-Notizen der pausierten Sitzung entfernt, die Arbeit ist wieder aufgenommen.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-23 15:35:30 +02:00
parent e1b191bf0b
commit c294bfddf2
5 changed files with 397 additions and 199 deletions
-149
View File
@@ -1,149 +0,0 @@
---
context: default
phase: null
task: null
total_tasks: null
status: paused
last_updated: 2026-09-23T13:15:42.473Z
---
<current_state>
Kein laufender Meilenstein; die Arbeit laeuft als Quick-Tasks. **Version 1.3.1 ist am
23.09. freigegeben** (Tag `v1.3.1` auf `ad004b2`, Abbilder `live` + `v1.3.1`, Gitea-Release
mit beiden Desktop-Paketen).
**14 Commits liegen lokal und sind NICHT gepusht.** Arbeitsbaum sauber. Der lokale Stack
laeuft mit dem Proxmox-Stand (web, api, db neu gebaut).
Unterbrochen wurde NICHT mitten in einer Aufgabe: das Proxmox-Modul ist vollstaendig gebaut,
geprueft und die drei Befunde aus dem Rundgang sind behoben. Offen ist EIN Befund aus der
Abnahme (siehe Restarbeit) und der Push.
</current_state>
<completed_work>
Diese Sitzung (22.09. abends bis 23.09. nachmittags):
- **quick-260922-vdk** — Dashboard-Raster misst seine Breite auch aus dem Leerzustand heraus.
Meldung kam aus dem **Linux-Client**; Ursache war ein `useEffect(..., [])`, das den
ResizeObserver nie anhaengte, wenn das Dashboard beim Einhaengen leer war. Breite blieb auf
dem Startwert 1200 -> rechts ein toter Streifen. Im echten AppImage gegengemessen.
- **Platte aufgeraeumt** — 3,6 GB frei -> 66 GB. Nur Wegwerf-Sachen (Docker-Build-Cache 27,9 GB,
58 verwaiste Image-Schichten 43,3 GB, verwaiste CI-Volumes).
- **Freigabe 1.3.1** — CHANGELOG abgeschlossen, `live` vorgezogen, Tag gepusht.
- **quick-260923-ad9** — Dashboard-Reiter: mehrere Dashboards je Benutzer, per Ziehen sortierbar,
der erste ist der Standard. Bestand wandert per Migration in den ersten Reiter.
- **quick-260923-dhh** — Proxmox-Modul (PVE/PBS/PMG), nur beobachten, sieben Aufgaben.
- **quick-260923-ku6** — drei Befunde aus dem Proxmox-Rundgang behoben.
Jeder Punkt wurde im Browser bzw. im echten Client geprueft; die Protokolle stehen in den
jeweiligen SUMMARY.md unter `.planning/quick/`.
</completed_work>
<remaining_work>
1. **Offener Befund der Abnahme (zuerst):** `sumOrNull` in
`apps/api/src/proxmox/proxmox-normalize.ts` liefert bei EINEM fehlenden Teilwert die halbe
Summe statt `null` — also einen stillen Falschwert genau dort, wo die Feldnamen am
schlechtesten belegt sind (PMG, Annahme A5). Ein Test fuer „nur eine Haelfte vorhanden“
fehlt bisher ganz.
2. **Kleinbefund:** „Jetzt aktualisieren“ auf der Proxmox-Modulseite wird allen mit
Modulzugriff gezeigt; der Endpunkt verlangt aber ADMIN/SUPER_ADMIN. Bei anderen passiert
beim Klick nichts.
3. **Push** (14 Commits) und CI abwarten.
4. **Proxmox-Dashboard-Kachel** als eigener kleiner Auftrag ueber den Weg aus 260922-m1h
(`WIDGET_TYPES` + `WIDGET_MODULE_SLUGS` + `registerWidget`).
5. **Freigabe 1.4.0**, sobald Reiter und Proxmox auf alpha bestaetigt sind (neue Funktionen,
also Minor, nicht Patch).
</remaining_work>
<decisions_made>
- **Proxmox: nur beobachten.** Einzige nicht-lesende Anfrage ist die Ticket-Anmeldung; sie liegt
an genau einer Stelle und `proxmox-nur-lesen.spec.ts` zaehlt sie gegen eine benannte Konstante.
- **Keine SSRF-Adresssperre** — Proxmox steht per Definition im internen Netz, eine Sperre wuerde
jede echte Adresse blockieren. Schutz ist, dass nur ein Administrator Adressen eintraegt.
- **PMG nur Benutzer/Passwort** (Recherche A1, Forenbeleg). Faellt beim Test auf, wenn es doch
Token kann — dann nachruesten.
- **Zertifikats-Ausnahme je Serverzeile**, niemals global.
- **Dashboard-Reiter:** der erste Reiter ist der Standard; „als Favorit festlegen“ heisst nach
vorn ziehen. Kein zusaetzliches Kennzeichen.
- **Dashboard-Raster:** belegter Platz bleibt gesperrt, nichts weicht aus. Nutzeransage 22.09.
- **KEIN Umbau der Proxmox-Modulseite.** Der Nutzer hat den Wunsch nach mehr Detailgrad und
Statusfarben am 23.09. ausdruecklich zurueckgezogen („vergiss das letzte, was ich geschrieben
habe“). **Nicht von selbst wieder aufgreifen.**
</decisions_made>
<blockers>
- Die Proxmox-Feldnamen bei PBS und PMG sind nicht aus erster Quelle belegt (A2/A3/A5). Nur der
Test des Nutzers auf alpha gegen echte Server klaert das. Die Auswertung ist deshalb nachsichtig
gebaut, und jede Feldnamenliste liegt als EINE benannte Konstante in `proxmox-normalize.ts`.
- Live steht moeglicherweise noch auf 1.3.0: der Nutzer hat gezogen, bevor die `live`-Abbilder
fertig waren (Tag-Lauf war zuerst rot). Ein zweiter `pull` steht aus, unbestaetigt.
</blockers>
## Required Reading (in order)
1. `.planning/quick/260923-dhh-proxmox-modul-pve-pbs-und-pmg-anbinden-n/260923-dhh-VERIFICATION.md`
— der offene Befund steht dort mit Reproduktion.
2. `.planning/quick/260923-dhh-.../260923-dhh-RESEARCH.md` — Annahmen-Log A1…A5, die einzige
Stelle, an der steht, was an der Proxmox-Anbindung belegt und was abgeleitet ist.
3. `.planning/quick/260923-ku6-.../260923-ku6-SUMMARY.md` — die Merge-Regel des Verbindungstests
(Formular vs. gespeichert, Geheimnisfelder).
4. `.planning/STATE.md` — Abschnitt „Current Position“ und die letzten Zeilen der Quick-Tabelle.
## Critical Anti-Patterns (do NOT repeat these)
- [ANTI-PATTERN]: Im Desktop-Client gegen `getBoundingClientRect()`/`getComputedStyle()` messen →
260922-vdk: die Werte blieben auf dem ALTEN Stand, obwohl `style.width` bereits richtig war.
WebKitGTK friert die Animationsuhr ein, wenn das Fenster im Hintergrund liegt, und die
`width`-Uebergangsanimation bleibt stehen. **Mitigation:** im Client gegen die GESETZTEN Werte
messen (`style.width`, `style.transform`) oder gegen die React-Eigenschaften aus dem Fiber.
- [ANTI-PATTERN]: Ein Bestaetigungsfenster nur ueber `[role="dialog"]` suchen → der Loeschen-Dialog
der Reiter traegt `role="alertdialog"`; die Pruefung sah „es passiert nichts“, obwohl das Fenster
offen war. **Mitigation:** auf beide Rollen abfragen.
- [ANTI-PATTERN]: Nach dem Tag sofort auf dem Server `pull` ausfuehren → eine Freigabe loest DREI
Pipelines aus; faellt der Tag-Lauf um (bei 1.3.1: ein flackernder Test mit 5-Sekunden-Grenze),
werden Abbild-Bau und Desktop-Pakete UEBERSPRUNGEN, und `pull` holt still den alten Stand.
**Mitigation:** erst pruefen, dass die Abbilder `live`/`beta` einen neuen Zeitstempel tragen,
dann ziehen. Todo zum flackernden Test liegt unter `.planning/todos/pending/`.
- [ANTI-PATTERN]: Eine Vermutung ueber die Ursache aus einem Bildausschnitt ableiten → beim
Raster-Fehler fuehrte der erste Verdacht („eine Nachbarkachel blockiert“) in die Irre; erst das
volle Fenster und das Rueckrechnen der Spaltenbreite (51,5 px, letzte Spalte 13) haben die echte
Ursache gezeigt. **Mitigation:** bei Bildbefunden das GANZE Fenster anfordern, nicht den
Ausschnitt, und die Geometrie nachrechnen.
## Infrastructure State
- **Lokaler Stack:** `docker compose` mit web, api, db, gebaut auf dem Proxmox-Stand.
`up` allein baut NICHT neu. DB ohne Host-Port — Prisma vom Host ueber die Container-IP
(`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' tessera-ctl-db-1`,
`tessera:tessera_dev`).
- **Proxmox-Nachbau:** Node-Skript mit selbstsigniertem Zertifikat im Scratchpad
(`scratchpad/fake-proxmox.mjs`, Port 8006, aus dem api-Container ueber `172.21.0.1` erreichbar).
Laeuft noch; `/tmp` ueberlebt keinen Neustart, das Skript ist aber schnell neu gebaut.
Endpunkte: `/api2/json/cluster/resources`, `/status/datastore-usage`,
`/admin/datastore/{name}/snapshots`, `/statistics/mail`, `POST /access/ticket`.
- **Lokale Testdaten (duerfen weg):** zwei Proxmox-Server in der DB („Nachbau PVE“ und
„Nachbau kaputth“, letzterer absichtlich unerreichbar), Proxmox im Marktplatz aktiviert,
im Admin-Dashboard ein Reiter „Dashboard“ mit 5 Kacheln.
- **alpha** (`alpha.tessera.ctl.de`): Stand 1.3.1-Beta; Reiter und Proxmox fehlen dort noch,
weil nicht gepusht.
- **Live** (`tessera.ctl.de`): 1.3.1 freigegeben; ob der Server sie wirklich zieht, ist offen.
<context>
Der rote Faden: erst ein gemeldeter Fehler aus dem Linux-Client (Kachel liess sich nicht ganz
nach rechts ziehen), der sich als Breitenmessung entpuppte; dann Freigabe; dann zwei Wuensche des
Nutzers nacheinander — Dashboard-Reiter und das Proxmox-Modul. Beim Proxmox-Modul ist die
Besonderheit, dass hier KEIN echter Server steht: deshalb wurde ein Nachbau gebaut, die Auswertung
bewusst nachsichtig ausgelegt und jede Feldnamenliste an genau eine Stelle gelegt, damit der
Nutzer sie nach seinem Test auf alpha in einem Griff korrigieren kann.
</context>
<next_action>
Start with: den offenen Befund der Abnahme beheben — `sumOrNull` in
`apps/api/src/proxmox/proxmox-normalize.ts` muss `null` liefern, sobald EIN Teilwert fehlt
(heute `(a ?? 0) + (b ?? 0)`), plus ein Test fuer „nur eine Haelfte vorhanden“. Gleich mit
erledigen: „Jetzt aktualisieren“ nur fuer ADMIN/SUPER_ADMIN anzeigen. Danach Tore laufen lassen,
committen, die 14 Commits pushen und die CI abwarten.
</next_action>