# Roadmap **Stand:** 09.10.2026 · Release **v1.7.0** · Live seit 20.07.2026 (pressekonto.com, presseecho.de, businessportal24.com) Diese Datei ist **die einzige laufende Liste offener Punkte**. Sie fasst alle Pläne, Audits und Protokolle unter `dev/` zusammen (Abgleich gegen Code und Git am 09.10.2026). Die Einzeldokumente bleiben als Begründung und Historie erhalten und sind je Punkt verlinkt. Neue offene Punkte kommen hierher, nicht in die Einzeldokumente; erledigte Punkte werden durchgestrichen und mit Datum oder Release versehen. | Aufwand | Bedeutung | |---|---| | S | eine Stunde bis ein halber Tag | | M | ein bis drei Tage | | L | länger oder abhängig von Dritten | **[EXTERN]** = liegt beim Betreiber, Anwalt, Steuerberater oder Partner, nicht im Code. **[LIVE]** = einmaliger Nachweis bzw. Handgriff auf dem Server. --- ## 0. Lage - **Seit Go-Live erledigt:** Roadmap Nutzergewinnung Block 0–2 und RSS (3.1), Audit 11.09. mit Blöcken 1–10 (live als v1.1.0), Bildrechte Deploy 1, 1b, 2, 2b (28.09.), Git-Deploy (v1.1.3), Volt entfernt (v1.2.0), Rechnungsversand, Betriebsüberwachung Phase 1 und externer Monitor, Sicherheitsaudit 07.10. S-01 bis S-06 (v1.4.0–v1.6.0), Spamschutz (v1.7.0). - **Was offen ist:** vor allem **Rechtstexte und Freigaben** (ein Anwaltspaket), einige **Nachweise auf Live**, zwei **Altlasten mit Personenbezug** (SQL-Dumps in der Git-Historie, nicht rotierte Schlüssel) und der **Wachstumsteil** (Block 3, Changelog, Monitoring Phase 2/3). - **Was fehlt, um Wachstum zu bewerten:** Die Abbruchbedingungen der Roadmap-Blöcke 1–3 tragen weiterhin Platzhalter für Zeitraum und Schwellwert (Punkt 6.1). ### Releases seit Go-Live | Release | Datum | Inhalt | |---|---|---| | v1.0.0 | 21.07. | Go-Live | | v1.1.0 | 05.10. | Audit-Blöcke 1–10, Betriebsüberwachung Phase 1 (letzter SFTP-Deploy) | | v1.1.1–v1.1.3 | 06.10. | GlitchTip-Fixes, Git-Deploy live | | v1.2.0 | 06.10. | Volt entfernt, Livewire-4-Single-File-Components | | v1.3.0–v1.3.2 | 06.10. | Rechnungsversand, fehlgeschlagene Anmeldungen, Worker-Prüfung im Deploy | | v1.4.0/v1.4.1 | 07.10. | Sicherheitsaudit S-01–S-06, Passkeys, Zweitfaktor-Pflicht für Admins | | v1.5.0 | 08.10. | Proxy-Vertrauen, HSTS, API-Zugang endet mit der Buchung | | v1.6.0/v1.6.1 | 08.10. | Andere Geräte abmelden, IP-Login-Limit, Passwortregeln, CSP im Melde-Modus, Imagick | | v1.7.0 | 09.10. | Spamschutz mit Cloudflare Turnstile | --- ## 1. Sofort — Altlasten mit Personenbezug und Zugangsdaten | # | Punkt | Quelle | Aufwand | |---|---|---|---| | ~~1.1~~ | ~~**Produktiv-SQL-Dumps in der Git-Historie.**~~ **Erledigt 09.10.2026:** aus allen Branches und Tags entfernt (Inhalt unverändert, Hashes neu, Zuordnung in [`commit-map-2026-10-09.txt`](archive/commit-map-2026-10-09.txt)), Force-Push auf `origin` und `NAS`, Server abgeglichen, Speicherbereinigung in Forgejo und auf dem NAS, keine weiteren Klone. Vorgehen für künftige Fälle: [git-deploy.md, Abschnitt G](betrieb/git-deploy.md). | [Release-Plan R6.2](archive/release/entwicklungsplan-release.md) | — | | ~~1.2~~ | ~~**Schlüssel rotieren**~~ — **Live-Schlüssel bereits rotiert** (OpenAI, Google OAuth, Mail-Zugang, Connektar; Betreiber, bestätigt 09.10.2026). Offen bleiben nur die Entwicklungsschlüssel unter 1.3: Context7 (stand in `.mcp.json`, Git-Historie) und das lokale MySQL-Root-Passwort (Git-Historie). | [optimize 14.07. K2](archive/optimize/optimize-14-07-2026.md), [Sicherheitsplan](sicherheit/ENTWICKLUNGSPLAN-SICHERHEIT-2026-10-07.md) | — | | 1.3 | **Dev-Container neu erstellen.** `docker-compose.yml` ist bereinigt, im laufenden Container sind `DB_CONNECTION` … `DB_PASSWORD` aber weiter als Umgebungsvariablen gesetzt — genau die Ursache des Datenverlusts vom 07.10. Danach lokalen `APP_KEY` reparieren (33 statt 44 Zeichen, ungültig) und Cloudflare-Testkeys in die lokale `.env`. Context7-Schlüssel und lokales MySQL-Root-Passwort rotieren (beide in der Git-Historie). | [Sicherheitsplan](sicherheit/ENTWICKLUNGSPLAN-SICHERHEIT-2026-10-07.md), [Spamschutz](sicherheit/ENTWICKLUNGSPLAN-SPAMSCHUTZ-2026-10-09.md) | S | | ~~1.4~~ | ~~**Lokale Dateien mit Personenbezug**~~ — **gelöscht 09.10.2026:** `dev/migration/` (7,4 GB), `dev/archive/migration-2026/sql/` (905 MB), `dev/api/`, `dev/newsletter/`, `dev/2026-10/`, `storage/app/private/restore-company-user-auto-2026-10-07.sql`. | [dev/README](README.md) | — | | 1.5 | **Alte Backups auf dem Server löschen:** `~/deploy-v1.1.0.tgz`, `~/backup-vor-v1.1.0.tgz`, `~/backup-vor-git.tgz`, `~/vor-git/`. | [git-deploy.md](betrieb/git-deploy.md) | S [LIVE] | --- ## 2. Termine und Wiedervorlagen | Fällig | Punkt | Quelle | |---|---|---| | **ab 15.10.2026** | CSP-Meldungen aus `storage/logs/csp-*.log` auswerten, dann scharf schalten (Report-Only seit v1.6.0). Nonce statt `unsafe-inline`/`unsafe-eval` später (L). | [Sicherheitsplan](sicherheit/ENTWICKLUNGSPLAN-SICHERHEIT-2026-10-07.md) | | **ab 16.10.2026** | Spamschutz auswerten: Spam-Filter der Kontakt-Queue, `storage/logs/spam-*.log`, Missbrauch des Fail-open-Wegs → ggf. `TURNSTILE_FAIL_OPEN=false`. Die rund 130 nicht erkannten Altanliegen per Sammelaktion in die Quarantäne. | [Spamschutz](sicherheit/ENTWICKLUNGSPLAN-SPAMSCHUTZ-2026-10-09.md) | | nächstes Release | `SessionRevocation::legacyCachedMark()` samt Test entfernen; Liste „Aktive Sessions“ reparieren (liest `sessions`-Tabelle, Live speichert in Redis → immer leer). | [Sicherheitsplan](sicherheit/ENTWICKLUNGSPLAN-SICHERHEIT-2026-10-07.md) | | Oktober 2026 | connektar: `ai_declaration` wird Pflicht — Stand bei connektar erfragen, Auswirkung auf den Alt-Vertrag prüfen (heute setzt der Legacy-Controller die Bestätigung selbst). | [Roadmap Nutzergewinnung](archive/2026-09-nutzergewinnung/roadmap-2026.md) | | Ende Oktober | Google News / Publisher Center (2.2): Ergebnis in der Search Console prüfen (4–6 Wochen nach Einrichtung). | [Protokoll Teil 7](archive/2026-09-nutzergewinnung/umsetzung-protokoll.md) | | frühestens 26.10.2026 | Bildrechte Block I (C2PA) möglich — Bedingung: vier Wochen Deploy 1b ohne Auffälligkeiten **und** Testkorpus echter KI-Dateien. | [Bildrechte-Plan](bildrechte/bildkennzeichnung-entwicklungsplan-2026-09-21.md) | | offen | IMKIS: Pilot nach dem Treffen am 01.10. — Ergebnis nachtragen (3.6). | [Roadmap Nutzergewinnung](archive/2026-09-nutzergewinnung/roadmap-2026.md) | | laufend | 1c.5/E8: Kundenansicht des Google-Index (`GSC_CUSTOMER_VISIBLE`) — tägliche Prüfung seit 17.09.; entscheiden, sobald die Verteilung direkt/API belastbar ist. | [Anhang 1](archive/2026-09-nutzergewinnung/roadmap-anhang1-2026.md) | | Frühjahr 2027 | Basiswert 0.1 neu erheben (Kohorte 28–55 Tage, Vergleich 122 / 314). | [Basiswerte](archive/2026-09-nutzergewinnung/basiswerte-block0.md) | --- ## 3. Rechtstexte und Freigaben — ein Anwaltspaket [EXTERN] Mehrere Datenverarbeitungen laufen bereits, ohne dass die Datenschutzerklärung sie nennt. Das ist der größte offene Block und am besten **ein** Paket an den Anwalt. **Entwurf liegt vor:** [`rechtliches/anwaltspaket-datenschutz-2026-10.md`](rechtliches/anwaltspaket-datenschutz-2026-10.md) (Sachverhalt D1–D10, Textentwürfe DSE 0.4, Fragen F1–F11; vor dem Versand Abschnitt 7 des Pakets erledigen). | # | Punkt | Quelle | Aufwand | |---|---|---|---| | 3.1 | **DSE-Lücken, Verarbeitung läuft bereits:** Bild-Originale, Bestätigungsprotokoll und IP-HMAC (seit Deploy 1b, 28.09.; laut Decision-Update sollte der Minimalabsatz mitgehen), GlitchTip (Server und Browser), fehlgeschlagene Anmeldungen (90 Tage), Rückläufer-Protokoll `email_bounces` (395 Tage, E27), `activity_events`/`api_usage_logs`. | [Decision-Update Bildrechte](bildrechte/Decision-Update_Bildrechte_Beweisarchiv_2026-09-22.md), [Monitoring-Plan](betrieb/monitoring-plan.md), [Entwicklungsplan Audit, Block 9 E](archive/2026-09-audit/ENTWICKLUNGSPLAN.md) | S + Freigabe | | 3.2 | DSE 6a (Turnstile) ist als Vorschlag live — juristisch freigeben. | [Spamschutz](sicherheit/ENTWICKLUNGSPLAN-SPAMSCHUTZ-2026-10-09.md) | S | | 3.3 | **Deploy 3 Bildrechte:** AGB v0.7 (§ 8a, § 9), DSE v0.4 (9a, 9b, 13, Template-Variablen), `img-confirm-v3`, `LEGAL_ACCEPTANCE_GATE=true`. Vorher: Interessenabwägung (DU 4.4) als Dokument ablegen, Restore-Übung (5.1) als Beleg für 9b. | [Bildrechte-Plan](bildrechte/bildkennzeichnung-entwicklungsplan-2026-09-21.md) | S (2 Tage nach Antwort) | | 3.4 | Anwaltsagenda A1–A7 (Screenshots Formular und Nachweiszeile), Art. 50 KI-VO, Syndikationsvertrag als Standarddokument (3.5), Boost-Slot-Note. | [Decision-Update Bildrechte](bildrechte/Decision-Update_Bildrechte_Beweisarchiv_2026-09-22.md), [Changelog O8](changelog/Decision-Update_Changelog_Automatisierung_2026-10-04.md) | [EXTERN] | | 3.5 | AVV mit OpenAI → danach KI-Vorab-Check für Bilder einschalten (`IMAGE_PRECHECK`, Stufe 1, nach einer Woche Stufe 2), Schwellen nachjustieren. | [Bildrechte-Plan K.6](bildrechte/bildkennzeichnung-entwicklungsplan-2026-09-21.md) | S | | 3.6 | Nach DSE-Freigabe: `UMAMI_PORTAL_ENABLED`, `UMAMI_IDENTIFY_USERS` einschalten. | [Monitoring-Plan](betrieb/monitoring-plan.md) | S | | ~~3.7~~ | ~~Wortwahl „automatisierte Prüfung“~~ — **erledigt für v1.8 (09.10.2026):** „Qualitätsgeprüft“/„quality-checked“ entfernt (Startseiten-Meta, CTA, Veröffentlichen-Seite DE/EN), Preisseite „Automatisierte Prüfung jeder Mitteilung vor der Veröffentlichung“, Dashboard „Freigegebene Mitteilungen“. Dabei behoben: „Qualitätsgeprüft seit 2012“ war sachlich falsch → „Im Archiv seit :year“. Wächtertest `AutomatedCheckWordingTest`. Die AGB-Stellen folgen mit v0.7 (3.3). | [Bildrechte-Plan](bildrechte/bildkennzeichnung-entwicklungsplan-2026-09-21.md) | — | | 3.8 | Geschäftliche Entscheidungen festschreiben: Refund-Policy (heute faktisch Stripe-Dashboard), Steuerberater-Abnahme Rechnungs-PDF/USt, Pro-Tarif nach Streichung des Prüfversprechens, Preisfreigabe R1.4 formal abhaken. | [Release-Plan](archive/release/entwicklungsplan-release.md) | S [EXTERN] | --- ## 4. Nächstes Release (v1.8) — kleine technische Punkte | # | Punkt | Quelle | Aufwand | |---|---|---|---| | ~~4.1~~ | ~~Sessions~~ — **erledigt für v1.8:** `legacyCachedMark()` entfernt (Test umgedreht: alte Cache-Marke wirkt nicht mehr); Sicherheitsseite zeigt statt der leeren Redis-Liste „Dieses Gerät“ und die letzten fünf Anmeldungen mit Anmeldeweg aus dem Aktivitätsverlauf (ohne IP), Kachel „Anmeldungen in 30 Tagen“. | Sicherheitsplan | — | | ~~4.2~~ | ~~Löschfristen~~ — **erledigt für v1.8:** `activity_events` 395 Tage, `api_usage_logs` 90 Tage (`config/monitoring.php` → `retention`, `MONITORING_ACTIVITY_RETENTION_DAYS`/`MONITORING_API_USAGE_RETENTION_DAYS`), täglich 04:05 per `model:prune`. Beim ersten Lauf auf Live fällt bei `api_usage_logs` alles vor Mitte Juli weg. | [Monitoring-Plan Phase 3](betrieb/monitoring-plan.md) | — | | ~~4.3~~ | ~~Newsletter-Abo über die API~~ — **abgeschaltet für v1.8:** `POST api/v1/newsletter/subscribe` antwortet mit 410 (seit Go-Live kein Aufruf, kein Abo); die Spezifikation versprach ein Double-Opt-in, das es nicht gab. Ability nicht mehr für neue Tokens wählbar. Anmeldung mit Double-Opt-in kommt mit 6.4. | [QA-Checkliste](archive/release/qa-checkliste.md) | — | | 4.4 | Turnstile in die übrigen öffentlichen Formulare: Widerruf, Kündigung, Meldeformular, PM-Meldung, Rechtsanfrage, „Newsroom verwalten“ (B5). | [Spamschutz](sicherheit/ENTWICKLUNGSPLAN-SPAMSCHUTZ-2026-10-09.md) | M | | 4.5 | Login-Härtung entscheiden: `POST /login` nur auf dem Hub oder Turnstile im Login (IP-Limit seit v1.6.0). | [Monitoring-Plan](betrieb/monitoring-plan.md) | S–M | | 4.6 | Referer-Redirect ohne Whitelist im Portal- und Firmen-Switcher (N2); `url:http,https` für Backlink- und Pressefach-URLs (N3); CORS explizit (N9). | [optimize 14.07.](archive/optimize/optimize-14-07-2026.md) | S | | 4.7 | Bildrechte aufräumen: Flag `IMAGE_RIGHTS_V2`, alte `press-release-images-manager`-Komponente und Alt-Tests entfernen. | [Bildrechte-Plan B.3](bildrechte/bildkennzeichnung-entwicklungsplan-2026-09-21.md) | S | | 4.8 | Strukturierte Daten `ImageObject` mit `creditText`/`copyrightNotice` für Pressebilder (nie eingeplant oder verworfen). | [Bildkennzeichnung 6.3](archive/2026-09-audit/bildkennzeichnung-2026-09-15.md) | S–M | | ~~4.9~~ | ~~GlitchTip-Breadcrumbs mit Formulardaten~~ — **behoben für v1.8:** Das Sentry-SDK hängt bei Livewire-Anfragen die übertragenen Formularwerte und alle Properties an (auch Passwortfelder), der Scrubber prüfte Breadcrumbs nicht. Jetzt: Livewire-Breadcrumbs aus, `ErrorReportScrubber` entfernt die Daten aller Breadcrumbs und bereinigt die Nachrichten. Bestandsprüfung in GlitchTip (lesend, 09.10.): 96 von 176 Ereignissen mit Livewire-Daten, nur in den Scanner-Einträgen 38/39 und nur `language`, `paginators`, `portal`, `timeframe` — keine Formular- oder Passwortdaten. | Faktenblatt DSE | — | | 4.10 | **IP-Adressen im Klartext ohne Löschfrist:** `users.last_login_ip`, `contact_messages.requester_ip` (auch Nicht-Spam), `legal_requests.requester_ip`, `withdrawal_requests.requester_ip`, `termination_requests.requester_ip`, `booking_confirmations.ip`, `newsletter_subscriptions.ip_address`. Frist je Tabelle festlegen (z. B. IP nach 90 Tagen leeren, Vorgang bleibt) oder als HMAC speichern wie bei Bildbestätigungen; Kontaktanfragen außerhalb der Quarantäne ebenfalls ohne Frist. Außerdem `email_suppressions` bewusst ohne Frist und IMAP-Ordner `Processed`/`Ignored`/`Unparsed` des Bounce-Postfachs ohne Bereinigung. | Faktenblatt DSE | M | --- ## 5. Betriebsnachweise auf Live [LIVE] Einmalig abnehmen und hier abhaken. Vieles davon ist vermutlich erledigt, aber nirgends belegt. | # | Punkt | Quelle | |---|---|---| | 5.1 | **Restore-Übung** in isolierter Umgebung (DB alt/Disk neu, Disk alt/DB neu, beide alt), danach Entscheidung über ein externes Ziel für den Tombstone-Export (E16, Storage Box/S3). Voraussetzung für DSE 9b. | [Runbook §9](betrieb/deploy-runbook.md), [Audit 02.10. §5](archive/2026-09-audit/UMSETZUNGSAUDIT-2026-10-02.md) | | 5.2 | Upload 13–15 MiB über das Formular, PHP- und nginx-Grenzen ≥ 16 MiB, Laufzeit der Bildprüfung mit großem Bild. | [Bildrechte-Plan E.7](bildrechte/bildkennzeichnung-entwicklungsplan-2026-09-21.md) | | 5.3 | Passkey im echten Browser, Smoke-Test der Admin-Bestätigung; `PASSKEYS_USER_HANDLE_SECRET` in der Live-`.env` (fehlt auch in `.env.example`). | [Sicherheitsplan](sicherheit/ENTWICKLUNGSPLAN-SICHERHEIT-2026-10-07.md) | | 5.4 | Tastatur/Screenreader: Fokusführung Login-Modal (7.6), Bild-Overlay (D.2). | Entwicklungsplan Audit, Bildrechte-Plan | | 5.5 | Uptime Kuma: Alarmtest mit falschem Token; zweite Ebene (z. B. UptimeRobot auf `/up`). | [Monitoring-Plan](betrieb/monitoring-plan.md) | | 5.6 | Bounce-Postfach, `MAIL_RETURN_PATH`, `BOUNCE_IMAP_*` bestätigen; optional DMARC-Report-Postfach. | [Bounce-Konzept](archive/2026-09-nutzergewinnung/bounce-mails-2026-09-15.md) | | 5.7 | Prod-DB-Benutzer mit minimalen Rechten (N10), offene Punkte aus dem Sicherheitsaudit (Firewall, DB/Redis-Erreichbarkeit, Betriebssystem, Backups). | [Sicherheitsaudit](sicherheit/SICHERHEITSAUDIT-2026-10-07.md) | | 5.8 | Go-Live-Nachlauf vom 20.07., Stand unbekannt: Go-Live-Mails, API-Kunden-Mailing (`/docs/api/v1`, Token-Migration), Stripe-Test-Artefakte bereinigen, `MONITORING_ALERT_EMAIL`, Permission `api:immediate-publication` für connektar. | [Go-Live-Roadmap](archive/release/roadmap-go-live-2026-07-20.md), [API-Parität](betrieb/api-legacy-paritaet.md) | | 5.9 | MAN-Rechnungen: blockierte Vereinbarungen ohne Rechnungsadresse sichten, ersetzende MAN-Rechnung aus dem Protokoll vom 21.09. auf „offen“ prüfen, Rechnungsadressen von Bestandskunden nachpflegen. | [Legacy-Rechnungen](archive/legacy-rechnungen/entwicklungsplan-2026-09-16.md) | | 5.10 | Die 6 Slug-Kollisionen aus der Newsroom-Zusammenführung einzeln ansehen. | [Protokoll Teil 3](archive/2026-09-nutzergewinnung/umsetzung-protokoll.md) | | 5.11 | GlitchTip: behandelte Einträge auflösen (nur Betreiber), Eintrag 10 „[object Object]“ beobachten. | [GlitchTip](glitch-tip/README.md) | | 5.12 | Slow-Request-Auswertung mit Live-Daten (Command und Report-Seite existieren). | [Migration 11](archive/migration-2026/11-NOCH-ZU-TUN-OPTIMIERUNGEN.md) | --- ## 6. Produkt und Wachstum | # | Punkt | Quelle | Aufwand | |---|---|---|---| | 6.1 | **Abbruchbedingungen festlegen** (Zeitraum, Schwellwert) für Block 1 bis 3 — ohne sie ist keine Wachstumsmaßnahme bewertbar. Block 1 läuft seit 17.09. ohne Vergleichspunkt. | [Roadmap Nutzergewinnung](archive/2026-09-nutzergewinnung/roadmap-2026.md), [Basiswerte](archive/2026-09-nutzergewinnung/basiswerte-block0.md) | S (Entscheidung) | | 6.2 | 2.6 Zuschriften an Portalübersichten (PR-Gateway-Korrektur, höchstens acht Kontakte). | [Anhang 1 §5](archive/2026-09-nutzergewinnung/roadmap-anhang1-2026.md) | [EXTERN], in Arbeit | | 6.3 | **3.3 Agenturmodell:** mehrere Firmen unter einem Konto, abgeleitet aus den 1.102 Sammeladressen. Danach 3.4 gezielte Ansprache kleiner Agenturen. | Roadmap Nutzergewinnung | L | | 6.4 | **3.2 Branchen-Digest** mit Double-Opt-in (löst auch 4.3). | Roadmap Nutzergewinnung | M | | 6.5 | Newsletter-Kampagnenmodul: U05–U07 umsetzen, bevor `NEWSLETTER_SENDING_ENABLED` eingeschaltet wird. | [Entwicklungsplan Audit E9/E23](archive/2026-09-audit/ENTWICKLUNGSPLAN.md) | M | | 6.6 | **Changelog-Pipeline** (Stufen 1–5, nicht begonnen). Offene Entscheidungen: O3 Schwelle Monatsrückblick, O5 englische Fassung, O6 Bild-Template, O7 Backfill aus den Tags, O9 Social-Accounts, O10 n8n/Buffer, O11 Opt-in, O12 wer beantwortet Rückfragen, O13 Impressum in Profilen. Andocken in `deploy.sh`, nicht als Ploi-Hook. | [Decision-Update Changelog](changelog/Decision-Update_Changelog_Automatisierung_2026-10-04.md) | L | | 6.7 | Betriebsüberwachung **Phase 2** (Validierungsfehler, Schritt-Tracking, Umami-Events, „Problem melden“, Geschäftstrichter) und **Phase 3** (Kennzahlen, Alarme bei ausbleibender Aktivität, Seite „Betrieb & Nutzung“, Morgenmail). Entscheidungen M4–M9 bestätigen. | [Monitoring-Plan](betrieb/monitoring-plan.md) | L | | 6.8 | Bildrechte: Block I C2PA (ab 26.10.), I.5 XMP in Varianten, Block J Bilder im Newsroom (Kontingent-Entscheidung), I.6 Re-Sync-Sperre erst wenn ein API-Partner Bilder liefert. | [Bildrechte-Plan](bildrechte/bildkennzeichnung-entwicklungsplan-2026-09-21.md) | L | | 6.9 | API v1: Rückkanal bei Ablehnung (Status-Feld oder Webhook, S6). | [API-Parität](betrieb/api-legacy-paritaet.md) | M–L | | 6.10 | Legacy-Rechnungen Phase 4: `--send`, Erinnerungs-Task, tägliche Überfällig-Notiz (nach einigen Wochen Handbetrieb). | [Legacy-Rechnungen](archive/legacy-rechnungen/entwicklungsplan-2026-09-16.md) | S | | 6.11 | Kontakterreichbarkeit Stufe 3 (Veröffentlichungssperre ohne zustellbare Adresse) — bewusst zurückgestellt, nach Beobachtung entscheiden. | [Kontakterreichbarkeit](archive/2026-09-audit/kontakterreichbarkeit-mx-bounces-2026-09-15.md) | M–L | | 6.12 | Spamschutz-Ideen: Limit je /24-Netz, tägliche Sammelmail, Wegwerf-Domains, KI-Klassifizierung. | [Spamschutz §5](sicherheit/ENTWICKLUNGSPLAN-SPAMSCHUTZ-2026-10-09.md) | je S–M | | 6.13 | Ausbau aus dem Release-Plan, bewusst vertagt: EN-Übersetzung der Langseiten (FAQ, Hilfe, API, Veröffentlichen), EN-Rechtstexte und öffentliche Versionshistorie, DSA-Queue, Coupons, Regionen-Seiten, Blacklist-Admin, Bulk-Publish/-Reject, In-App-Benachrichtigungen, Hero-Slider, Boost als Zeitraum. | [Release-Plan](archive/release/entwicklungsplan-release.md), [Boost](archive/release/boost-platzierung-offen.md) | je M | --- ## 7. Technische Schuld (bei Gelegenheit) | # | Punkt | Quelle | Aufwand | |---|---|---|---| | 7.1 | Sitemap ohne Index/Chunking lädt das Archiv mit `->get()` — noch unter 50k, wächst. | [optimize N7](archive/optimize/optimize-14-07-2026.md) | M | | 7.2 | `orderByDesc('hits')` ohne Index (durch Cache abgemildert; Online-DDL auf `press_releases`). | optimize N8 | S–M | | 7.3 | Landingpages `web/presseecho` und `web/businessportal24` zusammenführen (M15), toter Code (`test.css`, kaputtes `@source`, leere Domain-Gruppen, N6). | optimize | S | | 7.4 | `CompanyType` und `companies.type` entfernen (A6, jetzt machbar). | [Agentur-Attribution](archive/agentur-attribution/entwicklungsplan.md) | M | | 7.5 | Große Komponenten zerlegen: `admin.users.edit` (1.242 Zeilen), Kontakte-Tab in `companies.show`; `UserManagementTest` (1.312 Zeilen) aufteilen. Larastan erfasst Single-File-Components nicht — große Komponenten ggf. per `livewire:convert` in Klassen. | [Migration 11](archive/migration-2026/11-NOCH-ZU-TUN-OPTIMIERUNGEN.md), [Go-Live-Roadmap](archive/release/roadmap-go-live-2026-07-20.md) | M | | 7.6 | MySQL-/Worker-Integrationstests als zweite CI-Stufe (6.6), `arch()`-Tests, PHPStan-Baseline (143 Einträge). | [Entwicklungsplan Audit](archive/2026-09-audit/ENTWICKLUNGSPLAN.md) | L | | 7.7 | API-Autorisierung über Policies (M14), Checkout-Guard (N11), Form Requests (N12), Kleinkram (`session()->flash`, `CurrentPortalContext`, E-Mail-Normalisierung). | optimize, [Migration 12](archive/migration-2026/12-NAECHSTE-SCHRITTE.md) | M | | 7.8 | Mobil-Feinschliff: Pagination- und Modal-Close-Buttons ~36 px (< 44 px), Stat-Strips, Hero 21/9. | [Frontend-Protokoll](archive/frontend-audits/frontend-optimize-protokoll.md) | S | | 7.9 | Redis als Cache/Queue erst bei Last — **Achtung E18:** die Idempotenz der Ablaufmail setzt die DB-Queue voraus. Cache-Warmer nur bei Bedarf. `ReleaseDetailPageData` cachen, wenn Newsroom-Traffic steigt. | Go-Live-Roadmap, Entwicklungsplan Audit E18 | M | | 7.10 | `CLASSIFICATION_GREEN_DELAY` (Wartezeit vor KI-Auto-Publish, Default 0) prüfen — deckt die Score-Logik das inzwischen ab? | Release-Plan | S | --- ## 8. Doku-Pflege | # | Punkt | Aufwand | |---|---|---| | 8.1 | **`betrieb/deploy-runbook.md` überarbeiten** (Stand 09.07.): SFTP-Checkliste, „npm auf dem Server“ und FULLTEXT auf `press_releases` (§3a) sind überholt; `pressekonto.de` statt `.com` (auch Stripe-Webhook-URL); Scheduler-Tabelle ohne `users:prune-bot-registrations`, `monitoring:heartbeat`, `queue:prune-failed`, `model:prune`, `sanctum:prune-expired`; systemd statt Supervisor/Ploi; Chat-Reste und KAS-rsync in §7. Deploy-Ablauf nur noch in `git-deploy.md`. | M | | 8.2 | `CLAUDE.md` nennt `pressekonto.de` als Live-Domain — live ist `pressekonto.com`. | S | | 8.3 | Kopfzeilen nachziehen: `monitoring-plan.md` (SFTP, externer Monitor offen), `git-deploy.md`, `glitch-tip/README.md` (Protokoll ohne Einträge 18, 23, 38, 39), Bildrechte-Plan („Deploy offen“, Deploy 1–2b und 1b sind live), Sicherheitsaudit Z. 276. | S | | 8.4 | `api-legacy-paritaet.md`: S5/S7/Abschnitt 5 schließen, Umami-Snippets am Ende entfernen. | S | | 8.5 | Changelog-Decision-Update: Antworten aus den rohen `#…`-Zeilen in eine Spalte „Entscheidung“ übertragen. | S | | 8.6 | `git-deploy-monitoring/` ist ein projektunabhängiger Baukasten und liegt mit jedem Checkout auch auf dem Server — in ein eigenes Repository auslagern. | S | | 8.7 | Im Archiv liegen ~78 MB getrackte Mockups und Prototypen (`frontend/claude-design/` 57 MB, `frontend/tailwind_v3/` 15 MB, `_old/` 4 MB) — löschen, wenn sie nicht mehr gebraucht werden (verkleinert das Repo erst zusammen mit 1.1). | S |