docs: Arbeitsstand pausiert — v1.1.0 live, nichts angefangen; Handoff fuer die naechste Sitzung
Tessera CI/CD / Lint & Type Check (push) Successful in 50s
Tessera CI/CD / Tests (push) Successful in 58s
Tessera CI/CD / Build & Publish Images (push) Successful in 2m49s

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018N9CD3ebPKm1b32bPpBknY
This commit is contained in:
2026-09-16 12:29:37 +02:00
parent 29fe3d772a
commit 2a820b630c
3 changed files with 132 additions and 1 deletions
+87
View File
@@ -0,0 +1,87 @@
---
context: default
phase: betrieb-nach-live-gehen
task: null
total_tasks: 0
status: paused
last_updated: 2026-09-16T10:28:05.211Z
---
# Wiedereinstieg — v1.1.0 ist live, nichts angefangen
## Critical Anti-Patterns
Alle aus tatsaechlichen Fehlschlaegen dieser und der vorigen Sitzungen.
| Muster | Beschreibung | Schwere | Vermeidung |
|--------|--------------|---------|------------|
| Zaehlung ohne Ansehen | Der Planer zaehlte fuenf Tastenreihen im Rechner, es sind sechs — die Mindesthoehe schnitt die unterste Reihe ab. Erst der Browser-Blick fand es. | blocking | Zahlen, die eine Groesse tragen, im Browser messen (Bounding-Box, scrollHeight), nicht aus dem Quelltext ableiten. |
| Gespeicherte Werte vergessen | Konstanten zu aendern haette fuer den User NICHTS bewirkt — react-grid-layout nimmt gespeicherte Layout-Eintraege woertlich (inkl. minW/minH). | blocking | Bei jeder Aenderung an Vorgaben pruefen, ob persistierte Daten dieselben Werte tragen; dann beim Laden ueberschreiben/anheben. |
| `git checkout -- <Datei>` als Falsifizierungs-Rueckweg | setzte auch die noch unkommittierte Nutz-Aenderung zurueck. | advisory | Vor Rueckbau-Proben committen, oder Patchdatei + `git apply -R`. |
| Zwei Schreiber auf einer Datei | Uebersetzungs-Fix musste warten, weil der laufende Executor de.json/en.json anfasste. | advisory | Quick-Tasks mit ueberlappenden Dateien nacheinander ausfuehren. |
| Platte voll durch Bau-Cache | vier Docker-Bauten + CI: `no space left on device`. | advisory | `docker builder prune -af` und `docker image prune -f` bei Bedarf; Volumes nie anfassen. |
| Bericht statt Arbeitsbaum | (aus Etappe 2) Agenten brachen nach getaner Arbeit ab. | blocking | `git status` ist die Wahrheit. |
<current_state>
**Gemessen 2026-09-16 10:28Z:** `git status --porcelain` leer, `main == origin/main`
(29fe3d7), keine async-jobs, keine angefangene Arbeit.
**Live:** tessera.ctl.de laeuft `v1.1.0` (User hat gepullt, "sieht gut aus").
**Beta:** alpha.tessera.ctl.de holt `beta`/`latest` — derselbe Stand e0d4532.
**Registry:** beta/latest/live/v1.0.0/v1.1.0. **Gitea-Releases:** 1.0.0 und 1.1.0
(letzterer von der Pipeline angelegt — erster CI-Beweis des Release-Wegs).
**Schalter:** AUS und bleibt es. **Mandantenfaehigkeit:** RUHT (User 2026-09-14).
**Tests:** Web 49/309, API 67/1078, Werkzeug 253/253. **Ledger:** 15 offen / 1
zurueckgestellt / 23 geschlossen / 39.
</current_state>
<completed_work>
Seit 2026-09-14: WINDOWS #29, Etappe 3c, Kanalmodell + Versionsstempel,
Fehler-melden-Knopf, Erstfreigabe v1.0.0 (live 15.09.), Dashboard-Umbau +
Nachbesserung, Aenderungsliste (CHANGELOG.md, Seite "Was ist neu",
Gitea-Release je Tag), Uebersetzungs-Fix, Freigabe v1.1.0. Alle als Quick-Tasks
mit voller Kette; Details in der Quick-Task-Tabelle in `.planning/STATE.md`.
</completed_work>
<remaining_work>
Nichts Angefangenes. Naechste Arbeit kommt vom User (Feedback aus dem Betrieb).
Ohne Termin: Desktop-Client-Todo, Ship Phase 17 (blockiert bei open_count 15),
Ledger #35/#36/#37. Nicht ansprechen: Mandantenfaehigkeit, Lizenzierung.
</remaining_work>
<decisions_made>
Siehe `HANDOFF.json` — Kanalmodell, Versionsnummern-Regel (Funktionen -> mittlere
Stelle, Fixes -> dritte), Mandantenfaehigkeit ruht, Lizenzmodell nur festgehalten,
Dashboard-Entscheidungen (inhaltsgetriebene Minima, Ueberschreiben gespeicherter
Minima, ganze Kachel Griff, preventCollision).
</decisions_made>
<blockers>
Keine. Eine nicht-blockierende Handreichung fuer den User: auf alpha einmalig
`IMAGE_TAG=beta` und die zwei `image:`-Zeilen (Kap. 9) — bis dahin laeuft alpha
ueber `latest`, das dasselbe Abbild ist.
</blockers>
## Required Reading (in order)
1. `.planning/STATE.md` — Session Continuity + Quick-Task-Tabelle
2. `CHANGELOG.md` — Regel: jede Aenderung sofort unter `## Unveröffentlicht`
3. `docs/anleitung-betrieb.md` Kapitel 9 — Freigabe/Hotfix-Rezept
4. `.planning/WINDOWS.md` — 15 offen, davon nur #35/#36/#37 ohne Mandantenbezug
## Infrastructure State
- Live-Server tessera.ctl.de (`IMAGE_TAG=live`, eigene DB); alpha 192.168.13.12
(Beta); Deploy macht der User (pull + `up -d --force-recreate api web`).
- Lokal: `db`, `api`, `web`, `mailhog` laufen (web aus c3d8e16); Admin
admin/admin123; DB ohne Host-Port (IP per `docker inspect`, tessera:tessera_dev);
Prisma-Binary aus `apps/api/node_modules/.bin/prisma`.
- Gitea 1.26.2 + Runner auf diesem Rechner; Runner arbeitet EINEN Auftrag
gleichzeitig; CI ueber API localhost:3002 beobachtbar (Token aus Push-URL, nie
ausgeben). `grep` ist hier ugrep (`$` als Anker).
<next_action>
`/gsd-resume-work`, dann das, was der User nennt — als `/gsd-quick --validate`
mit voller Kette; Browser-Nachweis per Playwright MCP gegen lokale Container;
CHANGELOG pflegen; bei "Version freigeben" das Rezept aus Kap. 9.
</next_action>
+44
View File
@@ -0,0 +1,44 @@
{
"version": "1.0",
"timestamp": "2026-09-16T10:28:05.211Z",
"phase": null,
"phase_name": "Betrieb nach dem Live-Gehen — Quick-Tasks auf Zuruf des Users (kein laufender Meilenstein)",
"phase_dir": null,
"plan": null,
"task": null,
"total_tasks": 0,
"status": "paused",
"completed_tasks": [
{"id": 1, "name": "WINDOWS #29 Rechteausweitung ADMIN -> SUPER_ADMIN geschlossen (260914-ebg)", "status": "done", "commit": "759ea3b"},
{"id": 2, "name": "Etappe 3c Systemkontext forSystem() fuer Hintergrunddienste (260914-eym)", "status": "done", "commit": "939c812"},
{"id": 3, "name": "Zwei Auslieferungskanaele beta/live, Versionsstempel, Versionsanzeige (260914-ku1)", "status": "done", "commit": "ea6aa99"},
{"id": 4, "name": "Fehler-melden-Knopf mit Bildschirmfoto per E-Mail (260914-m97)", "status": "done", "commit": "77117de"},
{"id": 5, "name": "Erstfreigabe v1.0.0, Live-Gehen tessera.ctl.de am 2026-09-15 (User)", "status": "done", "commit": "e509860"},
{"id": 6, "name": "Dashboard: feineres Raster, skalierende Widget-Inhalte, halbe Abstaende (260916-bwo)", "status": "done", "commit": "1aefaa3"},
{"id": 7, "name": "Dashboard-Nachbesserung: Mindestgroessen, Rand oben, Drag & Drop (260916-dyv, Rechner-Minimum 8792819)", "status": "done", "commit": "cf97b5b"},
{"id": 8, "name": "Aenderungsliste: CHANGELOG.md, Seite Was ist neu, Gitea-Release je Tag (260916-dcz)", "status": "done", "commit": "c5f4ade"},
{"id": 9, "name": "21 fehlende Uebersetzungen (Kalenderquellen-Formular, Kalender-Einstellungen, Marktplatz)", "status": "done", "commit": "c3d8e16"},
{"id": 10, "name": "Version 1.1.0 freigegeben (Tag v1.1.0, live-Abbilder, Gitea-Release von der Pipeline); User hat Live gepullt: 'sieht gut aus'", "status": "done", "commit": "e0d4532"}
],
"remaining_tasks": [
{"id": 11, "name": "Nichts Angefangenes. Naechste Arbeit kommt vom User (Feedback aus dem Betrieb; Fehlermeldungen landen per Knopf im Postfach aus Administrator -> SMTP). Jede Aenderung SOFORT in CHANGELOG.md unter '## Unveröffentlicht' eintragen.", "status": "not_started"},
{"id": 12, "name": "Todo ohne Termin: Desktop-Client auslieferungsreif (Versions-Check, Windows-Installer, Abnahme, CI-Bau) — erst wenn der User die Bau-/Testmoeglichkeit hat (.planning/todos/pending/2026-09-15-desktop-client-auslieferungsreif-machen.md)", "status": "not_started"},
{"id": 13, "name": "Formal: /gsd-ship fuer Phase 17 (v1.2) nie gelaufen; windows_enforce blockiert bei open_count 15 — keine Dringlichkeit", "status": "not_started"},
{"id": 14, "name": "Ledger ohne Dringlichkeit: #35 Biome-Konfiguration im Bestand nicht lauffaehig (pnpm lint = Leerlauf), #36 Admin-Frontend verschluckt 403 still, #37 DKV Single-Flight prozessweit; die uebrigen 12 offenen Eintraege haengen am ruhenden Mandantenthema", "status": "not_started"}
],
"blockers": [],
"async_jobs": [],
"human_actions_pending": [
{"action": "Auf alpha (Beta) einmalig IMAGE_TAG=beta in /opt/tessera/.env und die zwei image:-Zeilen auf ${IMAGE_TAG:-beta} bringen (Kap. 9) — solange nicht geschehen, laeuft alpha ueber 'latest', das dasselbe Abbild wie 'beta' ist; nichts kaputt, nur unsauber", "context": "docs/anleitung-betrieb.md Kapitel 9, Abschnitt 'Die eine Zeile je Server'", "blocking": false}
],
"decisions": [
{"decision": "Mandantenfaehigkeit RUHT — 3a und Etappe 4 nicht weiterverfolgen, Thema nicht ansprechen; Ein-Firmen-Betrieb reicht; evtl. spaeter ein Container je Kunde", "rationale": "User 2026-09-14, veraergert ueber den Zeitaufwand; Memory feedback-mandantenfaehigkeit-nicht-ansprechen", "phase": "Betrieb"},
{"decision": "Kanalmodell: main = beta (alpha.tessera.ctl.de), Zweig live + Tag vX.Y.Z = live (tessera.ctl.de); IMAGE_TAG je Server", "rationale": "User will Live und Beta getrennt, Hotfixes ohne Beta-Neuerungen; Rezept Kap. 9", "phase": "260914-ku1"},
{"decision": "Versionsnummer entscheide ich: neue Funktionen -> mittlere Stelle (1.1.0), nur Fehlerbehebungen -> dritte Stelle (1.0.1)", "rationale": "User 2026-09-16: 'du entscheidest, ich habe keine Ahnung'", "phase": "Freigabe 1.1.0"},
{"decision": "Lizenzmodell (Betreiber gibt Modul je Server mit Lizenzanzahl frei, Firmenadmin lizenziert an bis zu N Benutzer) nur festgehalten, nicht bauen, nicht ansprechen", "rationale": "User 2026-09-14; Zettel .planning/todos/pending/2026-09-14-lizenzmodell-freigabe-je-server-mit-lizenzanzahl.md", "phase": "Betrieb"},
{"decision": "Dashboard: Mindestgroessen inhaltsgetrieben statt verdoppelt; gespeicherte Minima beim Rendern ueberschrieben; ganze Kachel Griff; preventCollision mit noCompactor", "rationale": "User-Test auf alpha 2026-09-16 ('nicht klein genug', 'Drag and Drop semi'); Messungen in 260916-dyv", "phase": "260916-dyv"}
],
"uncommitted_files": [],
"next_action": "/gsd-resume-work; dann das aufgreifen, was der User aus dem Betrieb von v1.1.0 mitbringt. Vor jeder Aenderung: CHANGELOG.md '## Unveröffentlicht' pflegen. Bei 'Version freigeben': Unveroeffentlicht -> X.Y.Z – Datum, neues leeres Unveroeffentlicht, Commit+Push, dann git checkout live && git merge --ff-only main && git tag -a vX.Y.Z -m 'Tessera X.Y.Z' && git push origin live vX.Y.Z — die Pipeline baut live/vX.Y.Z und legt den Gitea-Release an.",
"context_notes": "Gemessen 2026-09-16 10:28Z: git status --porcelain leer, main == origin/main (29fe3d7), keine async-jobs. LIVE: tessera.ctl.de auf v1.1.0 (User hat gepullt, 'sieht gut aus'); BETA: alpha.tessera.ctl.de holt 'beta'/'latest' (= v1.1.0 Stand, e0d4532). Registry: beta/latest/live/v1.0.0/v1.1.0. Gitea-Releases: v1.0.0 (manuell per Skript), v1.1.0 (von der Pipeline — erster CI-Beweis des Release-Wegs). DER SCHALTER IST AUS (DATABASE_URL auf BYPASSRLS-Rolle) und bleibt es. Endstand Tests: Web 49 Dateien / 309 Tests, API 67 / 1078; rls-scratch-check 253/253; Ledger 15 offen / 1 zurueckgestellt / 23 geschlossen / 39 gesamt. Arbeitsweise, die sich bewaehrt hat: /gsd-quick --validate mit voller Kette (Planer opus, Pruefer, Executor opus bei >10 Dateien, Verifizierer) — der Pruefer fing in dieser Sitzung u. a. ein fehlendes Clamp bei angehobenen Minima, ich selbst im Browser das abgeschnittene Rechner-Minimum (Planer zaehlte 5 statt 6 Tastenreihen). Browser-Nachweise mache ich selbst per Playwright MCP gegen lokale Container (docker compose up -d --build web; DB-Container ohne Host-Port; Admin admin/admin123 lokal; mailhog aus docker-compose.dev.yml fuer Mail-Proben). Fallen: Platte lief einmal voll (docker builder prune half); der Gitea-Runner arbeitet nur einen Auftrag gleichzeitig (andere Repos blockieren die Warteschlange); auf diesem Host ist grep = ugrep ($ wirkt als Anker); .dockerignore schliesst *.md aus (CHANGELOG.md per !-Ausnahme); Next.js bettet NEXT_PUBLIC_* nur bei woertlichem Zugriff ein; jsdom verwirft clamp() im Inline-Style; git checkout -- <Datei> setzt auch unkommittierte Aenderungen zurueck. User-Praeferenzen: Deutsch, duzen, Alltagssprache, keine technischen Fragen, nur Produktfragen; App-Texte siezen. Diese Sitzung endete bei ~70% Kontext — deshalb pausiert."
}
+1 -1
View File
@@ -454,5 +454,5 @@ sind. Kein Anlass, sie vorher erneut vorzulegen.
Last session: 2026-09-16T10:15:09.000Z Last session: 2026-09-16T10:15:09.000Z
Resumed: 2026-09-14 — Sitzung ueber /gsd-resume-work fortgesetzt; #29 und 3c als /gsd-quick --validate mit voller Kette durchgefuehrt. Resumed: 2026-09-14 — Sitzung ueber /gsd-resume-work fortgesetzt; #29 und 3c als /gsd-quick --validate mit voller Kette durchgefuehrt.
Stopped at: **VERSION 1.1.0 FREIGEGEBEN — 2026-09-16.** CHANGELOG `Unveröffentlicht` -> `1.1.0 – 2026-09-16` (e0d4532), `live` per ff-merge auf e0d4532, Tag `v1.1.0` gepusht; CI (Beta, live-Pruefung, Tag) gruen; Registry traegt `live`/`v1.1.0` (Stempel `v1.1.0 live e0d4532`); **erster echter CI-Beweis des Release-Wegs: Gitea-Release "Tessera 1.1.0" von der Pipeline angelegt** (Body 2146 Zeichen). Der User spielt 1.1.0 auf tessera.ctl.de ein (pull + up -d --force-recreate api web). Inhalt: Dashboard-Umbau + Nachbesserung, Seite "Was ist neu", Uebersetzungs-Fix. Offen ohne Dringlichkeit: Desktop-Client-Todo, Ship Phase 17, Ledger #35/#36/#37. Mandantenfaehigkeit RUHT. Schalter AUS. Einstieg: `/gsd-resume-work`. Stopped at: **VERSION 1.1.0 FREIGEGEBEN — 2026-09-16.** CHANGELOG `Unveröffentlicht` -> `1.1.0 – 2026-09-16` (e0d4532), `live` per ff-merge auf e0d4532, Tag `v1.1.0` gepusht; CI (Beta, live-Pruefung, Tag) gruen; Registry traegt `live`/`v1.1.0` (Stempel `v1.1.0 live e0d4532`); **erster echter CI-Beweis des Release-Wegs: Gitea-Release "Tessera 1.1.0" von der Pipeline angelegt** (Body 2146 Zeichen). Der User spielt 1.1.0 auf tessera.ctl.de ein (pull + up -d --force-recreate api web). Inhalt: Dashboard-Umbau + Nachbesserung, Seite "Was ist neu", Uebersetzungs-Fix. Offen ohne Dringlichkeit: Desktop-Client-Todo, Ship Phase 17, Ledger #35/#36/#37. Mandantenfaehigkeit RUHT. Schalter AUS. Einstieg: `/gsd-resume-work`.
Resume file: None Resume file: .planning/HANDOFF.json + .planning/.continue-here.md (2026-09-16T10:28Z)
Last activity: 2026-09-16 - Completed quick task 260916-dcz: Aenderungsliste — CHANGELOG.md, Seite Was ist neu, Gitea-Release Last activity: 2026-09-16 - Completed quick task 260916-dcz: Aenderungsliste — CHANGELOG.md, Seite Was ist neu, Gitea-Release