docs(quick-260916-hiv): Kalenderquellen-Formular — URL-Platzhalter je Typ + EWS-Hinweis; Zusammenfassung, Aktenstand

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-16 12:49:28 +02:00
parent 9439c33989
commit a60c168587
2 changed files with 142 additions and 1 deletions
+2 -1
View File
@@ -410,6 +410,7 @@ Gerettet aus `.continue-here.md`. Relevant fuer die noch offenen Live-Tests.
| 260916-bwo | **Dashboard — feineres Raster, skalierende Widget-Inhalte, halbe Abstaende.** Raster verdoppelt (COLS 24/20/12/8/2, rowHeight 20, margin 8; WIDGET_CONSTRAINTS x2), gespeicherte Anordnungen einmalig x2 mit Marker `__gridVersion: 2` (nur im JSON, `migrateGridLayouts`/`withGridVersion`, idempotent). Widget-Rumpf `container-type: size`; Uhr/Stoppuhr/Rechner skalieren per Container-Queries; Uhr mit `timeFontSizePt` (leer = automatisch, 8..200 = fest in pt) und Feld in Einstellungen -> Dashboard -> Widgets. Abstaende halbiert: `app-shell` p-6 -> p-3 (alle Seiten, User-Nachtrag), Dashboard p-2, Grid 8 px, Widget-Innenabstaende; `mt-8` bleibt (Umschalter-Hoehe). Anwenderhandbuch. Tests Web 260 -> 286 / 46 Dateien, API 1076 -> 1078, tsc 0, 29 Dateien gegen 5f50c5f, vier Commits, CI-Lauf 351 gruen, Beta-Abbild `v1.0.0-10-g1aefaa3`. Browser-Beweis durch den Orchestrator: SQL-Probe in alten Einheiten -> DB verdoppelt + Marker; Rand 28 px (vorher 56), Abstand 8 px (vorher 16), main 12 px; Uhr 51 px -> 107 px beim Vergroessern; 36 pt = 48 px fest. Verifiziert 8/8 + Browser, gepusht. | 2026-09-16 | 3f5afb0,2d8efe1,a175c00,1aefaa3 | [260916-bwo-dashboard-feineres-raster-spalten-und-ze](./quick/260916-bwo-dashboard-feineres-raster-spalten-und-ze/) |
| 260916-dyv | **Dashboard-Nachbesserung nach User-Test.** Mindestgroessen inhaltsgetrieben (clock 2/2, search 6/2, calendar 3/3, note 4/4, calculator 3/10 — vom Orchestrator im Browser von 9 auf 10 korrigiert, sechs Tastenreihen —, favorites 3/3, link 3/2, stopwatch 4/3 mit kompakter Bedienleiste), gespeicherte Layout-Eintraege bekommen minW/minH aus den Konstanten und zu kleine w/h werden angehoben (`applyConstraintMinima`, Test 9/9b). Bearbeiten-Schalter in feste Leiste unten rechts, `mt-8` weg: Rand oben 28 px statt 60. Drag & Drop: ganze Kachel als Griff mit Overlay-Kopfleiste, `dragConfig.cancel` (Eingaben, Knoepfe, .widgetNoDrag, Resize-Griff), `preventCollision: true` mit `noCompactor` (Ablegen auf belegtem Raum stoppt am Nachbarn, kein Ueberlappen). Anwenderhandbuch. Tests Web 286 -> 294 / 47 Dateien, API 67/1078, tsc 0, 12 Dateien gegen df16f46 + Fix 8792819; CI-Laeufe 353 und der Fix-Lauf gruen. Browser-Beweis: 28 px, Uhr 126x48, Ziehen an Kachelmitte, Suchfeld ohne Drag, Kollision stoppt, Rechner 272 px ohne Ueberlauf. Ledger #39 fixed. Verifiziert 6/6 + Browser, gepusht. | 2026-09-16 | dc992c9,dbbd54f,cf97b5b,8792819 | [260916-dyv-dashboard-nachbesserung-mindestgroessen-](./quick/260916-dyv-dashboard-nachbesserung-mindestgroessen-/) |
| 260916-dcz | **Aenderungsliste.** `CHANGELOG.md` (Keep-a-Changelog, Alltagssprache, echte Umlaute: `## Unveröffentlicht` mit Neu/Geändert/Behoben, `## 1.0.0 – 2026-09-15` mit 11 Punkten); Seite "Was ist neu" unter `/changelog` (Server-Komponente, Text zur Bauzeit ueber `env.TESSERA_CHANGELOG_MD` in next.config.ts, nur im Server-Bundle; Kanalfilter `filterChangelogForChannel`: live ohne Unveroeffentlicht, beta/dev markiert; `MDEditor.Markdown` + `rehypeSanitize`), Versionsabzeichen als Link; Dockerfile `COPY CHANGELOG.md` + `.dockerignore !CHANGELOG.md`; `.gitea/scripts/publish-release.sh` (awk-Abschnitt, jq, API-Basis aus GITHUB_*, POST/PATCH, --dry-run, Exit 1 ohne Abschnitt) + ci.yml-Schritt nur bei Tag-Refs; Gitea-Release `v1.0.0` rueckwirkend angelegt (id 1); Handbuecher (Betrieb Kap. 9, Anwender "Was ist neu", Entwicklung, CI). Tests Web 294 -> 309 / 49 Dateien, API 67/1078, tsc 0, 19 Dateien gegen 963fa36; CI 356/357 gruen. Nachtrag c3d8e16: 21 fehlende Uebersetzungen (Kalenderquellen-Formular, Kalender-Einstellungen, Marktplatz) in de/en, Changelog "Behoben". Browser-Beweis: /changelog mit 20 Punkten, Kalender-Formular ohne Schluesselnamen. Verifiziert 8/8 + Browser, gepusht. | 2026-09-16 | ba06db9,6940bd0,c5f4ade,c3d8e16 | [260916-dcz-aenderungsliste-changelog-md-in-alltagss](./quick/260916-dcz-aenderungsliste-changelog-md-in-alltagss/) |
| 260916-hiv | **Kalenderquellen-Formular: URL-Platzhalter je Typ + EWS-Hinweis.** Adressfeld zeigt je nach Typ ein Beispiel (Exchange EWS `https://mail.firma.de/EWS/Exchange.asmx`, Graph, CalDAV, ICS) statt fix `https://`; bei Exchange EWS grauer Hinweis unter dem Feld (vollstaendige Adresse inkl. /EWS/Exchange.asmx noetig). 5 i18n-Schluessel de/en, neuer Komponententest (6 Faelle), Changelog "Geändert". Ausloeser: User scheiterte mit blossem Hostnamen `owa.ctl.de`, curl bestaetigte 401 + NTLM auf `/EWS/Exchange.asmx`. Tests Web 309 -> 315 / 50 Dateien, tsc 0. | 2026-09-16 | 618fbd6,2306a6d,9439c33 | [260916-hiv-kalenderquellen-formular-url-platzhalter](./quick/260916-hiv-kalenderquellen-formular-url-platzhalter/) |
## Deferred Items
@@ -455,4 +456,4 @@ 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.
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: .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-hiv: Kalenderquellen-Formular — URL-Platzhalter je Typ + EWS-Hinweis
@@ -0,0 +1,140 @@
---
phase: quick-260916-hiv
plan: 01
subsystem: ui
tags: [next-intl, i18n, react, calendar, form]
requires: []
provides:
- "Typabhaengiger URL-Platzhalter im Kalenderquellen-Formular (CalDAV/ICS/Exchange-Graph/Exchange-EWS)"
- "Grauer EWS-Hinweis unter dem Adressfeld, nur bei Exchange + EWS, unterhalb eines eventuellen Fehlers"
- "Fuenf neue i18n-Schluessel unter widgets.calendar (de/en, identische Platzhalter, uebersetzter Hinweis)"
affects: [dashboard-calendar-widget, calendar-source-form]
actuals:
tokens: 2402
tasks: 3
commits: 3
plan_head_before: a5f30d4
tech-stack:
added: []
patterns: []
key-files:
created:
- apps/web/src/components/settings/calendar-source-form.test.tsx
modified:
- apps/web/src/components/settings/calendar-source-form.tsx
- apps/web/src/messages/de.json
- apps/web/src/messages/en.json
- CHANGELOG.md
key-decisions:
- "Der EWS-Hinweis steht IMMER unter dem Feld bei Exchange+EWS (nicht nur wenn fehlerfrei) und bei einem Fehler UNTER dem Fehlertext, wie in der Planvorgabe festgelegt."
- "Die vier Beispiel-URLs sind in de.json und en.json bewusst identisch (Beispiel-Adressen, kein zu uebersetzender Fliesstext); nur der Hinweistext ist uebersetzt."
patterns-established: []
requirements-completed: [QUICK-260916-HIV]
coverage:
- id: D1
description: "URL-Feld zeigt je Typ das vorgegebene Platzhalter-Beispiel (EWS/Graph/CalDAV/ICS), ohne Typ weiterhin https://"
requirement: "QUICK-260916-HIV"
verification:
- kind: unit
ref: "apps/web/src/components/settings/calendar-source-form.test.tsx#Test 1-5"
status: pass
human_judgment: false
- id: D2
description: "Grauer EWS-Hinweis erscheint nur bei Exchange+EWS, unterhalb eines eventuellen Fehlers"
requirement: "QUICK-260916-HIV"
verification:
- kind: unit
ref: "apps/web/src/components/settings/calendar-source-form.test.tsx#Test 5-6"
status: pass
human_judgment: false
- id: D3
description: "de.json und en.json tragen dieselben fuenf neuen Schluessel, Umlaut-Waechter bleibt gruen, keine kundenspezifische Domain"
requirement: "QUICK-260916-HIV"
verification:
- kind: unit
ref: "apps/web/src/messages/umlaut-guard.spec.ts"
status: pass
human_judgment: false
- id: D4
description: "CHANGELOG.md: Eintrag unter Unveroeffentlicht / Geaendert"
requirement: "QUICK-260916-HIV"
verification:
- kind: unit
ref: "apps/web/src/lib/changelog.test.ts"
status: pass
human_judgment: false
duration: 3min
completed: 2026-09-16
status: complete
---
# Quick 260916-hiv: Kalenderquellen-Formular — URL-Platzhalter je Typ Summary
**Adressfeld im Kalenderquellen-Formular zeigt jetzt je nach Typ ein passendes Beispiel (EWS/Graph/CalDAV/ICS) und bei Exchange-EWS einen grauen Hinweis, dass die vollstaendige Adresse inkl. `/EWS/Exchange.asmx` noetig ist.**
## Performance
- **Duration:** ~3 min
- **Started:** 2026-09-16T12:44:00+02:00 (approx.)
- **Completed:** 2026-09-16T12:47:25+02:00
- **Tasks:** 3
- **Files modified:** 5 (2 neu, davon 1 Testdatei; 3 geaendert)
## Accomplishments
- URL-Feld im Kalenderquellen-Formular zeigt einen typabhaengigen Beispiel-Platzhalter statt des festen `https://` (CalDAV, ICS, Exchange-Graph, Exchange-EWS), solange kein Typ gewaehlt ist bleibt es bei `https://`.
- Bei Exchange + EWS erscheint ein grauer Hinweis (`text-xs text-muted-foreground`) unter dem Feld, der auf die noetige vollstaendige EWS-Adresse hinweist; bei einem gleichzeitigen Validierungsfehler steht der Hinweis unterhalb des Fehlertextes.
- Fuenf neue Uebersetzungsschluessel (`widgets.calendar.formFieldUrlPlaceholderEws|Graph|Caldav|Ics`, `formFieldUrlHintEws`) in de.json und en.json, Platzhalter identisch in beiden Sprachen, Hinweistext uebersetzt, keine kundenspezifische Domain.
- Neuer Komponententest `calendar-source-form.test.tsx` mit 6 Faellen (TDD: erst rot, dann gruen durch die Implementierung).
- CHANGELOG.md-Eintrag unter „Unveroeffentlicht“ → „Geaendert“.
## Task Commits
Each task was committed atomically:
1. **Task 1: Fuenf Uebersetzungsschluessel in de.json und en.json** - `618fbd6` (feat)
2. **Task 2: Typabhaengiger Platzhalter + EWS-Hinweis in der Komponente, mit Komponententest** - `2306a6d` (feat, TDD: Test + Implementierung in einem Commit nach rot→gruen)
3. **Task 3: Changelog-Eintrag unter Unveroeffentlicht / Geaendert** - `9439c33` (docs)
**Plan metadata:** wird vom Orchestrator nach diesem SUMMARY committet (siehe Constraints — SUMMARY/STATE nicht selbst committen)
## Files Created/Modified
- `apps/web/src/messages/de.json` - fuenf neue Schluessel unter `widgets.calendar`
- `apps/web/src/messages/en.json` - dieselben fuenf Schluessel
- `apps/web/src/components/settings/calendar-source-form.tsx` - `urlPlaceholder`-Ableitung, `placeholder={urlPlaceholder}`, EWS-Hinweisabsatz, Doku-Kommentar ergaenzt
- `apps/web/src/components/settings/calendar-source-form.test.tsx` - neu, 6 Testfaelle
- `CHANGELOG.md` - Eintrag unter Unveroeffentlicht / Geaendert
## Decisions Made
- Der EWS-Hinweis ist bei Exchange+EWS immer sichtbar und steht bei einem Fehler unter dem Fehlertext (Plan-Vorgabe, eine von zwei erlaubten Varianten).
- Platzhalter-Werte sind in de.json und en.json identisch (Beispiel-Adressen, kein Fliesstext), nur der Hinweistext ist uebersetzt.
## Deviations from Plan
None - plan executed exactly as written. Alle Datei- und Zeilen-Annahmen aus dem Plankontext (Zeilennummern, Schluesselreihenfolge) haben exakt gepasst; keine Rule-1/2/3/4-Faelle aufgetreten.
## Issues Encountered
None.
## User Setup Required
None - keine externe Konfiguration noetig.
## Next Phase Readiness
- Kein Docker-Bau, kein Deploy in diesem Auftrag — der User zieht den naechsten Pull selbst und prueft im Browser auf der Beta.
- Keine offenen Punkte fuer diesen Auftrag.
---
*Phase: quick-260916-hiv*
*Completed: 2026-09-16*
## Self-Check: PASSED
Alle fuenf Dateien vorhanden (calendar-source-form.test.tsx, calendar-source-form.tsx, de.json, en.json, CHANGELOG.md); alle drei Task-Commits (618fbd6, 2306a6d, 9439c33) in der Historie gefunden.