diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index bffb357..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..6771c35 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,17 @@ +import nextCoreWebVitals from "eslint-config-next/core-web-vitals"; + +// Flat Config (ESLint 10 unterstützt das alte .eslintrc-Format nicht mehr). +// Entspricht dem bisherigen `{ "extends": "next/core-web-vitals" }`. +const eslintConfig = [ + { + ignores: [ + ".next/**", + "out/**", + "build/**", + "next-env.d.ts", + ], + }, + ...nextCoreWebVitals, +]; + +export default eslintConfig; diff --git a/features/INDEX.md b/features/INDEX.md index 369e86c..a804e40 100644 --- a/features/INDEX.md +++ b/features/INDEX.md @@ -88,12 +88,12 @@ | PROJ-70 | User-Self-Service IMAP-Rückholung (Archiv-Mail zurück ins Postfach) | Deployed | [PROJ-70](PROJ-70-imap-rueckholung-self-service.md) | 2026-07-07 | | PROJ-71 | TLS-Pflicht (optional) für eingehenden SMTP-BCC-Journaling-Kanal | Deployed | [PROJ-71](PROJ-71-smtp-require-tls.md) | 2026-07-08 | | PROJ-72 | Fix Superadmin kann Passwort/Rolle von Superadmin-Peers nicht ändern (Sicherheitsbug) | Deployed | [PROJ-72](PROJ-72-fix-superadmin-peer-patch.md) | 2026-07-27 | -| PROJ-73 | Restliche Crash-Härtung (Upload-Job-Status bei Panic, fehlende nil-Checks) | In Review | [PROJ-73](PROJ-73-restliche-crash-haertung.md) | 2026-08-05 | -| PROJ-74 | Vorbestehende Test-/Vet-Signatur-Drift beheben (go vet/test wieder komplett grün) | In Review | [PROJ-74](PROJ-74-test-suite-signatur-drift.md) | 2026-08-05 | -| PROJ-75 | DB-Performance-Audit (Query-Index-Nutzung, Fan-out, pgxpool-Tuning) | In Review | [PROJ-75](PROJ-75-db-performance-audit.md) | 2026-08-05 | -| PROJ-76 | Mail-HTML-Sanitizing schließt CSS-url()/link/srcset nicht ein (Tracking-Pixel-Umgehung) | In Review | [PROJ-76](PROJ-76-mail-html-sanitizing-luecken.md) | 2026-08-05 | -| PROJ-77 | Admin-Tab-Bundle-Optimierung (dynamic import statt 19 statische Imports) | In Review | [PROJ-77](PROJ-77-admin-tabs-dynamic-import.md) | 2026-08-05 | -| PROJ-78 | SearchResultsTable re-rendert bei jedem Tastenanschlag im Suchfeld | In Review | [PROJ-78](PROJ-78-search-results-rerender-perf.md) | 2026-08-05 | +| PROJ-73 | Restliche Crash-Härtung (Upload-Job-Status bei Panic, fehlende nil-Checks) | Deployed | [PROJ-73](PROJ-73-restliche-crash-haertung.md) | 2026-08-05 | +| PROJ-74 | Vorbestehende Test-/Vet-Signatur-Drift beheben (go vet/test wieder komplett grün) | Deployed | [PROJ-74](PROJ-74-test-suite-signatur-drift.md) | 2026-08-05 | +| PROJ-75 | DB-Performance-Audit (Query-Index-Nutzung, Fan-out, pgxpool-Tuning) | Deployed | [PROJ-75](PROJ-75-db-performance-audit.md) | 2026-08-05 | +| PROJ-76 | Mail-HTML-Sanitizing schließt CSS-url()/link/srcset nicht ein (Tracking-Pixel-Umgehung) | Deployed | [PROJ-76](PROJ-76-mail-html-sanitizing-luecken.md) | 2026-08-05 | +| PROJ-77 | Admin-Tab-Bundle-Optimierung (dynamic import statt 19 statische Imports) | Deployed | [PROJ-77](PROJ-77-admin-tabs-dynamic-import.md) | 2026-08-05 | +| PROJ-78 | SearchResultsTable re-rendert bei jedem Tastenanschlag im Suchfeld | Deployed | [PROJ-78](PROJ-78-search-results-rerender-perf.md) | 2026-08-05 | | PROJ-79 | Frontend-Dependency-Major-Upgrades (eslint, lucide-react, tailwindcss+tailwind-merge, typescript, @types/node) | In Progress | [PROJ-79](PROJ-79-dependency-major-upgrades.md) | 2026-08-05 | diff --git a/features/PROJ-73-restliche-crash-haertung.md b/features/PROJ-73-restliche-crash-haertung.md index d61d7d5..e230fed 100644 --- a/features/PROJ-73-restliche-crash-haertung.md +++ b/features/PROJ-73-restliche-crash-haertung.md @@ -1,7 +1,7 @@ --- id: PROJ-73 title: Restliche Crash-Härtung (Upload-Job-Status bei Panic, fehlende nil-Checks) -status: In Review +status: Deployed created: 2026-08-05 --- @@ -70,6 +70,8 @@ Lokal kein `go build` möglich (kein Go-Toolchain), nur statische Prüfung. Deployed auf 132 am 2026-08-05. +Deployed auf 131 (Produktiv) am 2026-08-05. + ## Acceptance Criteria - [x] Upload-Job zeigt nach einem simulierten Panic im Verarbeitungspfad diff --git a/features/PROJ-74-test-suite-signatur-drift.md b/features/PROJ-74-test-suite-signatur-drift.md index 5f88639..80cacfe 100644 --- a/features/PROJ-74-test-suite-signatur-drift.md +++ b/features/PROJ-74-test-suite-signatur-drift.md @@ -1,7 +1,7 @@ --- id: PROJ-74 title: Vorbestehende Test-/Vet-Signatur-Drift beheben (go vet/test wieder komplett grün) -status: In Review +status: Deployed created: 2026-08-05 --- @@ -147,6 +147,8 @@ Zwei zusätzliche Fixes waren nötig, über die ursprüngliche Analyse hinaus: Deployed auf 132 am 2026-08-05. +Deployed auf 131 (Produktiv) am 2026-08-05. + ## Acceptance Criteria - [x] `CGO_ENABLED=0 go build ./...` auf 132 fehlerfrei (alle Pakete diff --git a/features/PROJ-75-db-performance-audit.md b/features/PROJ-75-db-performance-audit.md index 1b99db1..8eaa9b4 100644 --- a/features/PROJ-75-db-performance-audit.md +++ b/features/PROJ-75-db-performance-audit.md @@ -1,7 +1,7 @@ --- id: PROJ-75 title: DB-Performance-Audit (Query-Index-Nutzung, Fan-out, pgxpool-Tuning) -status: In Review +status: Deployed created: 2026-08-05 --- @@ -95,6 +95,12 @@ Seq Scan → Index Scan bestätigt, Ausführungszeit von 13.3ms auf 0.086ms gesunken (~150x). Migration erfolgreich, nur auf 132 angewendet — 131 bewusst nicht angefasst. +Deployed auf 131 (Produktiv) am 2026-08-05. Der Index `idx_emails_unindexed` +wurde beim Backend-Start automatisch über `initSchema` (idempotent via +`CREATE INDEX IF NOT EXISTS`) angelegt — verifiziert per +`pg_indexes`-Abfrage auf 131, kein manueller SQL-Schritt nötig. Startup-Log +lief ohne Fehler durch, keine Auffälligkeiten trotz größerer Produktivtabelle. + - `ListExpiredMails` (mark_deletion.go, `WHERE retain_until IS NOT NULL AND retain_until < NOW() [AND tenant_id = $N] ORDER BY retain_until ASC LIMIT 500`): **Index Scan bestätigt, keine Änderung nötig.** Nutzt bereits diff --git a/features/PROJ-76-mail-html-sanitizing-luecken.md b/features/PROJ-76-mail-html-sanitizing-luecken.md index 905d51c..2fc8863 100644 --- a/features/PROJ-76-mail-html-sanitizing-luecken.md +++ b/features/PROJ-76-mail-html-sanitizing-luecken.md @@ -1,7 +1,7 @@ --- id: PROJ-76 title: Mail-HTML-Sanitizing schließt CSS-url()/link/srcset nicht ein (Tracking-Pixel-Umgehung) -status: In Review +status: Deployed created: 2026-08-05 --- @@ -71,6 +71,8 @@ werden neutralisiert, `data:`/`cid:`/``/Plaintext bleiben unverändert. Bekannte Restlücken (Blocklist-Ansatz bleibt umgehbar, daher Punkt 2/3): `@import "http://…"` in CSS, `
{qrCode && (