Files
tessera-ctl/.planning/quick/260918-gza-fehlermeldung-herkunft-ausweisen-browser/260918-gza-SUMMARY.md
T
schalli 55aa287296
Tessera CI/CD / Lint & Type Check (push) Successful in 51s
Tessera CI/CD / Tests (push) Successful in 1m6s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 5m43s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m7s
docs(quick-260918-gza): Fehlermeldung — Herkunft ausweisen (Browser/Desktop-App, OS, App-Version)
Plan, Ausfuehrungsbericht, Verifikation (9/9 must_haves) und Aktenstand;
lokaler Nachweis per Playwright/mailhog fuer Browser- und Desktop-Marker-Fall.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016g2npLxzH5gZpg8s2S6vKh
2026-09-18 12:48:01 +02:00

117 lines
7.2 KiB
Markdown

---
status: complete
phase: quick-260918-gza
plan: 01
subsystem: bug-reports
tags: [fehler-melden-knopf, herkunft, desktop-app, betreff-kuerzel]
dependency-graph:
requires: [quick-260914-m97, quick-260917-h2s]
provides: [herkunfts-kuerzel-im-betreff, herkunftszeile-in-der-mail, cookie-tessera_desktop_client]
affects: [apps/api/src/bug-reports, apps/desktop/src-tauri, apps/web/src/middleware.ts, apps/web/src/lib, apps/web/src/components/bug-report]
tech-stack:
added: []
patterns: [reine-helferfunktion-mit-eigener-spec, cookie-huelle-um-bestehenden-marker-mechanismus]
key-files:
created:
- apps/api/src/bug-reports/origin.ts
- apps/api/src/bug-reports/origin.spec.ts
- apps/web/src/lib/bug-report-api.test.ts
modified:
- apps/api/src/bug-reports/dto/bug-report.dto.ts
- apps/api/src/bug-reports/bug-reports.service.ts
- apps/api/src/bug-reports/bug-reports.service.spec.ts
- apps/api/src/bug-reports/bug-reports.controller.spec.ts
- apps/desktop/src-tauri/src/lib.rs
- apps/web/src/middleware.ts
- apps/web/src/middleware.test.ts
- apps/web/src/lib/desktop-client.ts
- apps/web/src/lib/desktop-client.test.ts
- apps/web/src/lib/bug-report-api.ts
- apps/web/src/components/bug-report/bug-report-dialog.tsx
- apps/web/src/components/bug-report/bug-report-button.test.tsx
- CHANGELOG.md
- docs/anleitung-administration.md
- docs/anleitung-betrieb.md
decisions:
- "Marker-/Cookie-Mechanismus aus quick-260917-h2s erweitert statt WebView-User-Agent zu ueberschreiben (Vorgabe des Orchestrators im Plan, keine Abweichung)."
- "Regex statt neuer ua-parser-Bibliothek in origin.ts — fuenf Browser/fuenf Betriebssysteme reichen fuer ein Postfach, kein neues Paket."
metrics:
duration: ca. 45 min
completed: 2026-09-18
actuals:
tokens: 68000
tasks: 3
commits: 4
plan_head_before: ab99a9a56e6d0e1e57e07c6feb2a2fa2ab866fc4
---
# Phase quick-260918-gza Plan 01: Herkunft der Fehlermeldung ausweisen — Summary
Fehlermeldungen des Fehler-melden-Knopfs tragen jetzt ein Herkunfts-Kuerzel im Betreff (`[Browser]`, `[Desktop/Windows]`, `[Desktop/Linux]`, Rueckfall `[Desktop]`) und eine Zeile `Herkunft: …` im Text, abgeleitet vom reinen Helfer `origin.ts` aus vier neuen optionalen DTO-Feldern (Desktop-App, ueber ein zweites Cookie `tessera_desktop_client`) bzw. dem User-Agent (Browser).
## Ausgefuehrte Tasks
1. **API — `origin.ts`, DTO-Felder, Betreff-Kuerzel, Zeile `Herkunft:`** — Commit `7169472`
2. **Desktop-Marker (`dv`/`dc`/`dos`), Middleware-Cookie, Web-Nutzlast** — zwei Commits:
- `b03cb21` — Rust: `with_client_marker` (rein) + `with_desktop_marker` (Huelle)
- `f245711` — Web: Middleware-Cookie, `desktop-client.ts`, `bug-report-api.ts`, Dialog
3. **CHANGELOG und Handbuecher** — Commit `e2a7946`
## Commits
| Hash | Betreff |
|------|---------|
| `7169472` | feat(bug-reports): Herkunft der Fehlermeldung im Betreff-Kuerzel und als Zeile Herkunft ausweisen |
| `b03cb21` | feat(desktop): Version, Stand und Betriebssystem im Desktop-Marker mitgeben (dv, dc, dos) |
| `f245711` | feat(web): Herkunft der Fehlermeldung — Cookie tessera_desktop_client und Client-Felder in der Nutzlast |
| `e2a7946` | docs: Fehlermeldungen — Herkunft (Browser/Desktop-App, Betriebssystem, Version) und Betreff-Kürzel (Handbücher, CHANGELOG) |
`commits: 4` (gemessen: `git rev-list --count ab99a9a..HEAD` = 4; `plan_head_before` ist der Stand vor Task 1).
## Testzahlen
| Suite | Vorher | Nachher | Befehl |
|---|---|---|---|
| API `src/bug-reports` | 11 | 24 (origin 10, service 10, controller 4) | `pnpm --filter @tessera/api exec vitest run src/bug-reports` |
| API vollstaendig | — | 1124/1124 gruen (69 Testdateien) | `pnpm --filter @tessera/api exec vitest run` |
| API `type-check` | — | ohne Fehler | `pnpm --filter @tessera/api type-check` |
| Web `src/lib`, `middleware.test.ts`, `src/components/bug-report` | 11 (desktop-client) + 5 (middleware) + 11 (button) = 27 | 101/101 gruen (13 Testdateien; middleware 9, desktop-client 13, bug-report-api 3 NEU, bug-report-button 13) | `pnpm --filter @tessera/web exec vitest run src/lib src/middleware.test.ts src/components/bug-report` |
| Web vollstaendig | — | 447/447 gruen (65 Testdateien) | `pnpm --filter @tessera/web exec vitest run` |
| Web `type-check` | — | ohne Fehler | `pnpm --filter @tessera/web type-check` |
| Rust `cargo test --lib` | 33 (STATE-Baseline) | 37/37 gruen, `cargo fmt --check` sauber | `apps/desktop/src-tauri && cargo fmt --check && cargo test --lib` |
Alle Zahlen erfuellen bzw. uebertreffen die Vorgaben aus `<success_criteria>` (Rust ≥ 5 Marker-Tests — 5 vorhanden: 3 umgestellt + leerer Commit + Huelle; Middleware 9; desktop-client ≥ 11 — 13; bug-report-api 3; Komponententest 13; origin ≥ 8 — 10; Service 10; Controller 4).
## Deviations from Plan
Keine — der Plan wurde wie geschrieben ausgefuehrt. Ergaenzend zwei kleine Implementierungsentscheidungen, die im Rahmen des Plans lagen (keine Abweichung von `<behavior>`/`<action>`):
- **Test 9 im Service-Spec** (Betreff/Zeile/Protokollzeile fuer Desktop/Windows) nutzt fuer die Pruefung "Logger genau einmal mit Kuerzel gerufen" eine zweite, frische `makeService()`-Instanz, damit der Aufruf-Zaehler nicht durch den vorherigen `submit()` in demselben Test verfaelscht wird. Ergebnis entspricht exakt der im Plan verlangten Erwartung.
- In `origin.ts` wurde `clean()` mit Default-Parameter `max = 40` implementiert (im Plan als `clean(value, max = 40)` vorgegeben) — keine Abweichung, nur Bestaetigung der genauen Umsetzung.
## Known Stubs
Keine.
## Threat Flags
Keine neue, im Plan nicht erfasste Sicherheitsflaeche gefunden — alle vier neuen DTO-Felder, das zweite Cookie und die Bereinigungsregeln entsprechen exakt dem Threat Register des Plans (T-GZA-01 bis T-GZA-04, T-GZA-SC).
## Offene Punkte fuer den Orchestrator (Nachweis, nicht Aufgabe des Executors)
Laut `<verification>` des Plans, ausdruecklich NICHT Teil dieser Ausfuehrung:
1. **Browser-Fall (Playwright MCP + mailhog):** lokal `docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d mailhog` und `docker compose up -d --build api web`, dann ueber den Fehler-melden-Knopf eine Meldung senden und in `http://localhost:8025` pruefen: Betreff `[Tessera Fehlermeldung] [Browser] dev dev - /…`, Zeile `Herkunft: Browser — Chrome <N> auf Linux`, Zeilen `Browser:`/`Fenster:` weiterhin vorhanden; `docker compose logs api | grep "Bug report"` zeigt das Kuerzel.
2. **Desktop-Fall (Windows-Test-VM nach CI-Bau):** Client auf der VM installieren bzw. per In-App-Update aktualisieren (Zugang laut Memory `reference_windows_test_vm.md`), gegen alpha melden -> Betreff `[Desktop/Windows]`, Zeile `Herkunft: Desktop-App (Windows), Tessera-App <Version> · Stand <sha7>`.
3. **Optional — alter Desktop-Client:** ein bestehender 1.2.0-Client ohne Update erzeugt `[Desktop]` und `Desktop-App (unbekannt)` — dokumentiertes Verhalten (Betriebshandbuch Kap. 10), kein zwingender Nachweis.
## Self-Check: PASSED
- `apps/api/src/bug-reports/origin.ts` — FOUND
- `apps/api/src/bug-reports/origin.spec.ts` — FOUND
- `apps/web/src/lib/bug-report-api.test.ts` — FOUND
- Commit `7169472` — FOUND (`git log --oneline --all | grep 7169472`)
- Commit `b03cb21` — FOUND
- Commit `f245711` — FOUND
- Commit `e2a7946` — FOUND