dev: Doku aufgeräumt, neue Roadmap als einzige Liste offener Punkte

- dev/roadmap.md neu: alle offenen Punkte aus Plänen, Audits und Protokollen,
  gegen Code und Git abgeglichen (Stand v1.7.0)
- Abgeschlossenes ins Archiv: 2026-09-01 → archive/2026-09-nutzergewinnung,
  2026-09-11-audit → archive/2026-09-audit, lagacy-rechnungen →
  archive/legacy-rechnungen, Deploy-Protokoll v1.1.0, Umami-Snippets,
  Go-Live-Roadmap vom 20.07.
- Aktiv bleiben eigene Ordner bildrechte/ (Plan Fassung 2, Decision-Update)
  und changelog/ (Decision-Update Changelog)
- dev/README.md als Ordnerkarte neu, Verweise und zwei Code-Kommentare auf
  die neuen Pfade

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-10-09 11:25:09 +00:00
parent 35fd2f6e55
commit 8e3554bf91
32 changed files with 312 additions and 116 deletions

View file

@ -20,7 +20,7 @@ use Illuminate\Support\Facades\Storage;
/**
* Bereinigt die Altlast aus unbezahlten Legacy-Rechnungen (Einordnung
* 16.09.2026, dev/lagacy-rechnungen/entwicklungsplan-2026-09-16.md, Phase B).
* 16.09.2026, dev/archive/legacy-rechnungen/entwicklungsplan-2026-09-16.md, Phase B).
*
* `legacy:grandfather-subscriptions` hat Bestandsschutz-Posten auch aus
* Rechnungen abgeleitet, die nie bezahlt wurden. Dieser Befehl löst das

View file

@ -19,7 +19,7 @@ use Illuminate\Support\Facades\Mail;
/**
* Bearbeitungsweg einer MAN-Rechnung nach der Ausstellung (Legacy-
* Überweisungskunden, dev/lagacy-rechnungen/entwicklungsplan-2026-09-16.md):
* Überweisungskunden, dev/archive/legacy-rechnungen/entwicklungsplan-2026-09-16.md):
*
* senden → (erinnern) → als bezahlt markieren
* → Bestandsschutz beenden (Rechnung storniert, Bündel gekündigt)

View file

@ -1,40 +1,51 @@
# dev/ — Projekt- und Betriebsdokumentation
Stand: 29.09.2026 — **das System ist live** (pressekonto.com, presseecho.de,
businessportal24.com). Die Struktur trennt aktive Betriebs-/Planungsdoku von
abgeschlossenen Phasen (Archiv).
Stand: 09.10.2026 · Release v1.7.0 · live seit 20.07.2026 (pressekonto.com,
presseecho.de, businessportal24.com).
**Einstieg: [`roadmap.md`](roadmap.md)** — die einzige laufende Liste offener
Punkte, mit Verweisen auf die Einzeldokumente. Oben in `dev/` liegt nur, was
im Betrieb oder in laufender Planung gebraucht wird; abgeschlossene Phasen
liegen in `archive/`.
## Aktiv
| Pfad | Inhalt |
| --- | --- |
| `betrieb/deploy-runbook.md` | Deploy- und Betriebs-Runbook (SFTP-Deploy-Checkliste, Worker, Scheduler, Stripe-Webhook, Rollback) — **erste Anlaufstelle für alles Operative** |
| `betrieb/api-legacy-paritaet.md` | Verhaltens-Referenz der Legacy-API-Kompatibilitätsschicht (`/service/…`) — lebendes Dokument, solange Alt-Integrationen (Connektar) die Pfade nutzen |
| `betrieb/umami.md` | Umami-Analytics-Snippets je Domain |
| `2026-09-01/` | **Aktuelle Roadmap** (`roadmap-2026.md` + Anhänge 1 und 2), Basiswerte Block 0, Umsetzungsprotokoll Teil 1–11 |
| `2026-09-11-audit/` | **Audits und Entwicklungsplan** (`ENTWICKLUNGSPLAN.md`, Blöcke 1–9), Umsetzungsaudits 18.09./25.09./29.09., Bildkennzeichnung (Plan Fassung 2, Decision-Update) — der jüngste Umsetzungsaudit ist der Einstieg in den aktuellen Stand |
| `roadmap.md` | Nachlauf Go-Live (Stand 20.07.) und Ideen-Backlog — die laufende Planung steht in `2026-09-01/` |
## Lokal / gitignored (bleiben liegen, nicht committen)
| Pfad | Inhalt |
| --- | --- |
| `migration/` | Medien-Staging der Legacy-Migration (~7 GB Uploads beider Altportale) — Quelle für `legacy:migrate-media`; behalten, bis das Alt-System endgültig abgeschaltet und ein Server-Backup gezogen ist |
| `api/` | Postman-Collection (enthält API-Keys!) und Activity-Log-Auswertungen der Alt-APIs |
| `archive/migration-2026/sql/` | Legacy-DB-Dumps (Snapshots vom 23.04.2026) |
| `roadmap.md` | Aktuelle Roadmap: Sofortmaßnahmen, Termine, Rechtstexte, nächstes Release, Live-Nachweise, Wachstum, technische Schuld |
| `betrieb/git-deploy.md` + `betrieb/deploy.sh` | Deploy per Git-Tag (seit v1.1.3) mit Deploy-Protokoll je Release — **erste Anlaufstelle für Deploys** |
| `betrieb/deploy-runbook.md` | Betriebs-Runbook: Voraussetzungen, `.env`, Worker, Scheduler, Stripe-Webhook, Restore/Archiv (in Teilen veraltet, siehe Roadmap 8.1) |
| `betrieb/monitoring-plan.md` | Betriebsüberwachung Phase 1 (live), Phase 2/3 geplant, externer Monitor |
| `betrieb/api-legacy-paritaet.md` | Verhaltens-Referenz der Legacy-API (`/service/…`), solange connektar die Alt-Pfade nutzt |
| `sicherheit/` | Sicherheitsaudit 07.10., Entwicklungsplan Sicherheit (Wiedervorlage-Tabelle oben), Entwicklungsplan Spamschutz |
| `bildrechte/` | Bildnachweis, KI-Kennzeichnung, Beweisarchiv: Entwicklungsplan Fassung 2 und Decision-Update 22.09. — maßgeblich bis Deploy 3 (Rechtstexte) und Blöcke I/J |
| `changelog/` | Decision-Update Changelog-Automatisierung (04.10., noch nicht begonnen) |
| `glitch-tip/` | Fehlerprotokoll: API-Abruf, Triage-Ablauf, Regeln, Protokoll der Einträge |
| `git-deploy-monitoring/` | Projektunabhängiger Baukasten (Git-Deploy, GlitchTip, Monitoring) für andere Laravel-Projekte |
## Archiv (`archive/`)
Abgeschlossene Phasen, als Historie/Referenz erhalten:
| Pfad | Inhalt |
| --- | --- |
| `2026-09-nutzergewinnung/` | Roadmap Nutzergewinnung 01.09. mit Anhängen 1 und 2 (Block 0–2 und 3.1 erledigt, Rest in `roadmap.md`), Basiswerte Block 0 (Vergleichspunkt für 2027), Umsetzungsprotokoll Teil 1–11, Bestandsaufnahme Code, Bounce-Konzept |
| `2026-09-audit/` | Audit 11.09., Entwicklungsplan Blöcke 1–10 (live als v1.1.0), Umsetzungsaudits 18.09./25.09./29.09./02.10., Bildkennzeichnung Vorschlag und Feedback-Audit (ersetzt durch `bildrechte/`), Kontakterreichbarkeit |
| `legacy-rechnungen/` | Entwicklungsplan Legacy-Rechnungen (Phasen B, 0–3 live; Phase 4 in der Roadmap) |
| `betrieb/` | Deploy-Protokoll v1.1.0 (letzter SFTP-Deploy), Umami-Snippets |
| `release/` | Release-Plan, QA-Checkliste, Boost-Platzierung, Go-Live-Roadmap vom 20.07. |
| `optimize/` | System-Optimierungen 0–6 und Cutover-Runbook der Legacy-Migration (mit Anleitung für `--since`-Delta-Läufe) |
| `migration-2026/` | Analyse und Planung der Legacy-Migration (Datenmodell, Merge, API-Kunden, Fortschritt) |
| `frontend/`, `frontend-audits/` | Frontend-Konzepte, Mockups, Responsive-Audits vom 16.07. |
| `agentur-attribution/`, `legacy_logging/`, `legacy_performance/`, `_old/` | Ältere Einzelthemen und Altsystem-Reste |
- `optimize/` — System-Optimierungsphasen 0–6 **und das Cutover-Runbook der
Legacy-Migration** (erledigt 20.07.2026; enthält weiterhin die Anleitung für
`--since`-Delta-Läufe, falls das Alt-System noch einmal Daten liefert)
- `release/` — Release-Entwicklungsplan, manuelle QA-Checkliste,
Boost-Platzierungs-Entscheidung
- `migration-2026/` — Analyse- und Planungsdoku der Legacy-Migration
(Datenmodell, Merge-Strategie, API-Kunden, Fortschritt)
- `frontend/` + `frontend-audits/` — Frontend-Konzepte und die
Responsive-/Mobile-Audits vom 16.07.
- `agentur-attribution/`, `legacy_logging/`, `legacy_performance/`, `_old/` —
ältere Einzelthemen bzw. Altsystem-Reste
## Lokal / gitignored (nicht committen)
Enthalten personenbezogene Daten oder Schlüssel. Was damit passiert, steht in
der Roadmap unter 1.4.
| Pfad | Inhalt |
| --- | --- |
| `migration/` | Medien-Staging der Legacy-Migration (~7 GB), Quelle für `legacy:migrate-media` |
| `archive/migration-2026/sql/` | Legacy-DB-Dumps vom 23.04.2026 |
| `api/` | Postman-Collection (enthält API-Keys) und Activity-Logs der Alt-APIs |
| `newsletter/` | Bounce-Adressliste für `newsletter:import-bounces` |
| `2026-10/laravel.log` | Produktions-Log vom 08.10.2026 (Fehler in v1.6.1 behoben) |

View file

@ -6,7 +6,7 @@
**Vergleich:** `fb03fb166d08fe891ae5ab3a221c8a232b7c8366..d99f55e5556d601373a1bd251051c015cc9eda91` — 28 Commits, 271 geänderte Dateien, 16.950 hinzugefügte und 644 entfernte Zeilen einschließlich Dokumentation und weiterer Assets.
**Grundlagen:** [letzter Umsetzungs-Audit](UMSETZUNGSAUDIT-2026-09-18.md), [Entwicklungsplan mit Block 7 und Entscheidungen E7–E9](ENTWICKLUNGSPLAN.md), [Bildkennzeichnungsplan, Fassung 2 einschließlich Fortschreibung vom 25.09.](bildkennzeichnung-entwicklungsplan-2026-09-21.md), [Decision-Update vom 22.09.](Decision-Update_Bildrechte_Beweisarchiv_2026-09-22.md), [ursprünglicher Audit](AUDIT.md).
**Grundlagen:** [letzter Umsetzungs-Audit](UMSETZUNGSAUDIT-2026-09-18.md), [Entwicklungsplan mit Block 7 und Entscheidungen E7–E9](ENTWICKLUNGSPLAN.md), [Bildkennzeichnungsplan, Fassung 2 einschließlich Fortschreibung vom 25.09.](../../bildrechte/bildkennzeichnung-entwicklungsplan-2026-09-21.md), [Decision-Update vom 22.09.](../../bildrechte/Decision-Update_Bildrechte_Beweisarchiv_2026-09-22.md), [ursprünglicher Audit](AUDIT.md).
**Auftrag:** Änderungen seit dem letzten Audit, deren dokumentierte Umsetzung und die aktuelle Entwicklung prüfen. Ausschließlich diesen neuen Audit erstellen. Keine Änderungen an Anwendung, Tests, Konfiguration, Datenbestand oder vorhandenen Dokumenten.
@ -316,7 +316,7 @@ Die ursprünglichen F01–F28 sind im Audit vom 18.09. vollständig zugeordnet.
### N15 — P2: Alterskohorten lassen zwischen ihren Intervallen ganze Tage aus
**Belege:** `app/Services/PressRelease/ViewDistributionReport.php:123`; [gespeicherte Kohortenauswertung](../2026-09-01/basiswert-0.1-kohorten.json).
**Belege:** `app/Services/PressRelease/ViewDistributionReport.php:123`; [gespeicherte Kohortenauswertung](../2026-09-nutzergewinnung/basiswert-0.1-kohorten.json).
**Befund:** Die untere Datumsgrenze einer Kohorte wird mit `reference - (upperDays - 1)` gebildet, während die nächste Kohorte erst bei `reference - upperDays` anschließt. Beispielsweise gehört eine 6,5 Tage alte Meldung weder zu „0–6“ noch zu „7–13“. Dasselbe gilt an den weiteren Übergängen 13/14, 20/21, 27/28, 55/56 und 90/91.

View file

@ -3,7 +3,7 @@
**Prüfdatum:** 29.09.2026
**Geprüfter Code:** `98c465b` auf `technik/betriebsfixes-2026-09` (entspricht dem Live-Stand nach Deploy 1/1b/2/2b vom 28.09.2026)
**Vergleich:** Schwerpunkt `d99f55e..98c465b` (Nacharbeit Block 8: `4e34c3d`, `48129e9`), dazu ein neuer Durchgang über die seit 01.09. gebauten Roadmap- und Bildfunktionen
**Grundlagen:** [Entwicklungsplan Blöcke 1–8](ENTWICKLUNGSPLAN.md), [Umsetzungsaudit 25.09.](UMSETZUNGSAUDIT-2026-09-25.md), [Bildkennzeichnungsplan Fassung 2](bildkennzeichnung-entwicklungsplan-2026-09-21.md), [Decision-Update 22.09.](Decision-Update_Bildrechte_Beweisarchiv_2026-09-22.md), [Roadmap](../2026-09-01/roadmap-2026.md) mit Anhängen 1 und 2, [Umsetzungsprotokoll](../2026-09-01/umsetzung-protokoll.md)
**Grundlagen:** [Entwicklungsplan Blöcke 1–8](ENTWICKLUNGSPLAN.md), [Umsetzungsaudit 25.09.](UMSETZUNGSAUDIT-2026-09-25.md), [Bildkennzeichnungsplan Fassung 2](../../bildrechte/bildkennzeichnung-entwicklungsplan-2026-09-21.md), [Decision-Update 22.09.](../../bildrechte/Decision-Update_Bildrechte_Beweisarchiv_2026-09-22.md), [Roadmap](../2026-09-nutzergewinnung/roadmap-2026.md) mit Anhängen 1 und 2, [Umsetzungsprotokoll](../2026-09-nutzergewinnung/umsetzung-protokoll.md)
**Umsetzung:** Am selben Tag als Block 9 umgesetzt — Stand, Entscheidungen E19–E34 und Live-Schritte im [Entwicklungsplan](ENTWICKLUNGSPLAN.md#block-9--umsetzung-des-umsetzungsaudits-vom-29092026). Der Bericht selbst bleibt als Befundstand erhalten; Korrektur: Q-07 war ein Fehlalarm.
**Zweck:** Stand der Dinge nach dem Live-Gang aufnehmen, die Block-8-Nacharbeit gegenprüfen, neue Fehler und Optimierungen belegen und alles Offene an einer Stelle sammeln, damit die Entwicklung hier weitergehen kann.

View file

@ -181,6 +181,6 @@ Diese Betriebsdetails sind noch keine implementierten oder abschließend festgel
- [SMTP: DNS-Auflösung und impliziter MX, RFC 5321 § 5.1](https://datatracker.ietf.org/doc/html/rfc5321#section-5.1)
- [Null MX: Domain nimmt keine E-Mails an, RFC 7505](https://www.rfc-editor.org/rfc/rfc7505.html)
- [Postmark: Einordnung von Bounces und Spam-Beschwerden](https://postmarkapp.com/support/article/what-are-bounces-and-spam-complaints)
- [Bisheriges Bounce-Konzept vom 15.09.2026](../2026-09-01/bounce-mails-2026-09-15.md)
- [Bisheriges Bounce-Konzept vom 15.09.2026](../2026-09-nutzergewinnung/bounce-mails-2026-09-15.md)
Dieses Dokument ergänzt das bisherige Bounce-Konzept um die Prüfung beim Einreichen und deren Auswirkungen auf die Veröffentlichung. Aussagen zum vorhandenen Verhalten beruhen auf dem oben verlinkten Code, nicht auf einer bestätigten produktiven Ausführung.

View file

@ -4,8 +4,8 @@
**Stand:** 05.10.2026 · **Live bisher:** Stand `98c465b` (Deploy 28.09.2026, ca. 14:34)
**Inhalt:** alles danach — Blöcke 9 und 10 aus dem Audit
([`ENTWICKLUNGSPLAN.md`](../2026-09-11-audit/ENTWICKLUNGSPLAN.md), Deploy-Plan
dort), Betriebsüberwachung Phase 1 ([`monitoring-plan.md`](monitoring-plan.md)),
([`ENTWICKLUNGSPLAN.md`](../2026-09-audit/ENTWICKLUNGSPLAN.md), Deploy-Plan
dort), Betriebsüberwachung Phase 1 ([`monitoring-plan.md`](../../betrieb/monitoring-plan.md)),
Composer-Update, Versionsnummer.
Umfang gegenüber Live: 8 additive Migrationen, 2 neue Composer-Pakete

View file

@ -0,0 +1,81 @@
# Roadmap / Offene Punkte
Stand: 20.07.2026 (Go-Live-Tag). Kurzfristiges zuerst; Details zu erledigten
Phasen im Archiv (`dev/archive/`).
> **Hinweis 29.09.2026:** Die laufende Planung steht in
> `dev/2026-09-01/roadmap-2026.md`, der Entwicklungsstand in
> `dev/2026-09-11-audit/ENTWICKLUNGSPLAN.md` und im jüngsten Umsetzungsaudit.
> Die Punkte unten stammen vom Go-Live-Tag; ihr Stand ist dort nicht
> nachgeführt und wird im Umsetzungsaudit vom 29.09. (Abschnitt 6.4) als „auf
> Live zu bestätigen" geführt.
## Nachlauf Go-Live (kurzfristig)
- [ ] **Go-Live-Mails** an Bestandskunden: erst `php artisan
auth:send-go-live-mails --dry-run` (Anzahl prüfen), dann scharf.
Massenversand läuft über die Queue → Worker-Status vorher grün,
Betriebsüberwachung während des Versands im Blick.
- [ ] **API-Kunden-Mailing** (Connektar & Co.) mit Hinweis auf neue Doku
(`/docs/api/v1`) und Token-Migration — Texte [EXTERN].
- [x] **Git-Hygiene (R6.5):** erledigt 20.07. — `fix/zeitzone-europe-berlin`
nach `main` gemerged (`7b27ec5`), Release-Tag **v1.0.0**, beides auf
origin. Künftig Feature-Branches von `main`.
- [ ] **Stripe-Test-Artefakte bereinigen:** Test-`stripe_id` am Testuser,
Test-Subscription-Zeilen, STR-Testrechnungen — damit die
Rechnungsnummern-Sequenz sauber ist.
- [ ] **Monitoring scharf:** `MONITORING_ALERT_EMAIL` gesetzt? Cron/Scheduler
+ Queue-Worker in Ploi überwacht?
- [ ] **Umami-Snippets** je Domain einbinden (`dev/betrieb/umami.md`).
- [ ] **Connektar-API-Keys rotieren** (mittelfristig — die Legacy-Keys sind
über diverse Test-Kanäle gelaufen; Rotation über `/customer/tokens`).
- [ ] **Alt-System endgültig abschalten**, sobald ein paar Tage stabil:
Webspace und Alt-DBs auf dem KAS stilllegen; vorher letztes Backup der
Alt-DBs und Alt-Uploads sichern. Danach kann auch `dev/migration/` (7 GB
lokales Medien-Staging) auf ein Backup-Medium und vom Arbeitsrechner
runter. **Das KAS-Hosting selbst bleibt** (E-Mail-Postfächer, Stand
06.10.2026); der SSH-Zugang des Altsystems ist geändert und deaktiviert.
## Beobachten (erste Wochen)
- [ ] Betriebsüberwachung täglich: failed_jobs, Worker, Medien-Privatisierung.
- [ ] `storage/logs/laravel.log` auf neue Fehlermuster.
- [ ] Search Console: Indexierung der neuen Domains + 301-Ketten der
Legacy-URLs (www-Redirects, .html-Redirects, presskit→Newsroom).
- [ ] MySQL-Auslastung (die Filesort-Spirale ist behoben; bei neuen
Slow-Queries → Slow-Query-Log).
## Nächste Entwicklungen / Optimierungen (Ideen-Backlog)
- [x] **Volt entfernen, auf Livewire-4-Single-File-Components umstellen**
— **erledigt 06.10.2026** (Branch `technik/volt-entfernen`). 83
Komponenten auf `Livewire\Component`, 73 Routen auf
`Route::livewire()`, 88 Testdateien auf `Livewire::test()`/
`Livewire::actingAs()`; `VoltServiceProvider` gelöscht,
`livewire/volt` entfernt (sonst keine Paketänderung).
`config/livewire.php` auf v4-Schlüssel: `component_layout`,
`component_placeholder`, `component_locations`, `make_command` (SFC
ohne ⚡). Befund dabei: Der alte Schlüssel `layout` war wirkungslos,
Livewire 4 legte seinen Standard `layouts::app` darüber; alle 73
gerouteten Komponenten setzen ihr Layout aber selbst. CLAUDE.md,
AGENTS.md, `boost.json`, `.cursorrules` und der Skill
`volt-development` angepasst bzw. entfernt (von Hand —
`boost:update` hätte nebenbei alle Skills auf eine neue
Boost-Fassung gehoben, das ist ein eigener Schritt). Suite 2.325
grün, einer übersprungen; Larastan und Pint ohne Meldung.
**Larastan erfasst die Komponenten weiterhin nicht**: Es analysiert
nur `.php`-Dateien, Single-File-Komponenten sind Blade-Dateien.
Abhilfe wäre die Umwandlung einzelner großer Komponenten in
Klassen-Komponenten (`php artisan livewire:convert`), kein Muss.
- [ ] Frontend-Audit-Reste aus `dev/archive/frontend-audits/
frontend-optimize-protokoll.md` sichten — P2/P3-Punkte, die bewusst
liegen geblieben sind.
- [ ] Offene [EXTERN]-Entscheidungen aus dem Release-Plan prüfen
(`dev/archive/release/entwicklungsplan-release.md`): Preisfreigabe,
Refund-Policy.
- [ ] Cache-Warmer im Scheduler (Startseite + Top-Kategorien alle 5 Min
vorbauen), falls Kaltaufbauten nach Deploys stören — Option B aus der
Performance-Session vom 20.07.; aktuell nicht nötig.
- [ ] Redis als Cache-/Queue-Store erwägen, wenn die Last wächst
(aktuell `database`-Store, läuft stabil).

View file

@ -388,7 +388,7 @@ Doku archiviert unter `dev/archive/optimize/cutover-runbook.md`.
mittlere Stelle, Hotfix letzte). Lokal `git describe --tags --always --dirty > RELEASE`
und die Datei `RELEASE` mit hochladen — daraus lesen `config('app.version')`,
GlitchTip, `/health` und der Systemstatus die Version. Ablauf eines Deploys mit
Paket statt Einzeldateien: `dev/betrieb/deploy-v1.1.0.md`.
Paket statt Einzeldateien: `dev/archive/betrieb/deploy-v1.1.0.md`.
1. Geänderte Dateien hochladen. Bei geändertem `composer.lock`:
`composer install --no-dev --optimize-autoloader`, danach — falls
`public/vendor/livewire/` existiert — `php artisan vendor:publish --tag=livewire:assets --force`.

View file

@ -5,7 +5,7 @@
**Stand:** 06.10.2026 · **Status:** umgestellt am 06.10.2026, erster Git-Deploy `v1.1.3` (Protokoll unten)
Bis `v1.1.0` gingen Deploys als Paket per SFTP auf den Server
([`deploy-v1.1.0.md`](deploy-v1.1.0.md)). Künftig ist `~/pressekonto.com` ein
([`deploy-v1.1.0.md`](../archive/betrieb/deploy-v1.1.0.md)). Künftig ist `~/pressekonto.com` ein
Git-Checkout, und ausgeliefert wird ein Tag aus `origin`.
## Grundsätze
@ -241,7 +241,7 @@ von genau `/api/` bekommt 403). Ein Zugriffsprotokoll für die Site führt Ploi
## Später: Changelog
Der Changelog-Entwurf
([Decision-Update](../2026-10/Decision-Update_Changelog_Automatisierung_2026-10-04.md),
([Decision-Update](../changelog/Decision-Update_Changelog_Automatisierung_2026-10-04.md),
Stufe 2) dockt in `deploy.sh` nach `up` an. Ein Artisan-Befehl liest die Commits
zwischen dem vorherigen und dem neuen Tag. Die liegen jetzt auf dem Server vor.
Daraus legt er die Entwürfe an. Der LLM-Schritt läuft als Queue-Job, damit ein

View file

@ -77,7 +77,7 @@ sieht: fehlgeschlagene Livewire-Requests mit 5xx (Exception in GlitchTip) und
## Live-Schritte Phase 1
Ausgeführt mit Deploy v1.1.0 — vollständiger Ablauf in [`deploy-v1.1.0.md`](deploy-v1.1.0.md).
Ausgeführt mit Deploy v1.1.0 — vollständiger Ablauf in [`deploy-v1.1.0.md`](../archive/betrieb/deploy-v1.1.0.md).
**Infrastruktur (einmalig)**
@ -191,7 +191,7 @@ Grundlage für die spätere Changelog-Seite.
### 05.10.2026 — Phase 1 live (v1.1.0)
Mit Deploy v1.1.0 ausgeliefert ([`deploy-v1.1.0.md`](deploy-v1.1.0.md)).
Mit Deploy v1.1.0 ausgeliefert ([`deploy-v1.1.0.md`](../archive/betrieb/deploy-v1.1.0.md)).
GlitchTip (`production`), ntfy und Scheduler-Herzschlag auf Live aktiv.
Offen aus Phase 1: externer Monitor auf `/health`; DSE-Absätze, danach
`UMAMI_PORTAL_ENABLED`/`UMAMI_IDENTIFY_USERS`.
@ -288,7 +288,7 @@ wie Uptime Kuma; fällt dieser aus, kommt kein Push (siehe Schritt 6).
und Mail-Benachrichtigung. Er meldet, wenn der Monitoring-Server selbst
ausfällt oder beide Server gemeinsam nicht erreichbar sind.
Nach der Einrichtung: Punkt 29 in `deploy-v1.1.0.md` und Phase 1 hier als erledigt eintragen.
Nach der Einrichtung: Punkt 29 in `../archive/betrieb/deploy-v1.1.0.md` und Phase 1 hier als erledigt eintragen.
### 06.10.2026 — Worker-Ausfall und Folgen (v1.3.2)

View file

@ -1,7 +1,7 @@
# Entwicklungsplan: Bildnachweis, KI-Kennzeichnung, Rechtebestätigung, Beweisarchiv
**Stand:** 22.09.2026, Fassung 2 (Entscheidungen getroffen; Blöcke A bis H und K umgesetzt und committet, Deploy offen; Blöcke I und J stehen aus)
**Grundlage:** [Umsetzungsvorschlag 15.09.](bildkennzeichnung-2026-09-15.md), [Feedback-Audit 15.09.](bildkennzeichnung-feedback-audit-2026-09-15.md), [Decision-Update 22.09.](Decision-Update_Bildrechte_Beweisarchiv_2026-09-22.md) und die Antworten des Betreibers vom 21.09. auf die Entscheidungsfragen der Fassung 1. Bei Widerspruch gilt das Decision-Update (im Folgenden „DU"). Code-Abgleich an HEAD `e620ef3` auf `technik/betriebsfixes-2026-09`.
**Grundlage:** [Umsetzungsvorschlag 15.09.](../archive/2026-09-audit/bildkennzeichnung-2026-09-15.md), [Feedback-Audit 15.09.](../archive/2026-09-audit/bildkennzeichnung-feedback-audit-2026-09-15.md), [Decision-Update 22.09.](Decision-Update_Bildrechte_Beweisarchiv_2026-09-22.md) und die Antworten des Betreibers vom 21.09. auf die Entscheidungsfragen der Fassung 1. Bei Widerspruch gilt das Decision-Update (im Folgenden „DU"). Code-Abgleich an HEAD `e620ef3` auf `technik/betriebsfixes-2026-09`.
**Zweck:** Alle Punkte aus den vier Quellen, die am heutigen Code umsetzbar sind, in einer abarbeitbaren Reihenfolge mit Fix, Test und Aufwand. Gilt zuerst für das Titelbild einer Pressemitteilung; Newsroom-Bilder (Roadmap 1b.3) nutzen denselben Unterbau.
Die Fassung 1 vom 21.09. enthielt eine Fragenliste und vier Textanlagen für den Anwalt. Beides ersetzt das Decision-Update (Abschnitte 3 und 7) und ist hier gestrichen.

View file

@ -1,81 +1,185 @@
# Roadmap / Offene Punkte
# Roadmap
Stand: 20.07.2026 (Go-Live-Tag). Kurzfristiges zuerst; Details zu erledigten
Phasen im Archiv (`dev/archive/`).
**Stand:** 09.10.2026 · Release **v1.7.0** · Live seit 20.07.2026 (pressekonto.com, presseecho.de, businessportal24.com)
> **Hinweis 29.09.2026:** Die laufende Planung steht in
> `dev/2026-09-01/roadmap-2026.md`, der Entwicklungsstand in
> `dev/2026-09-11-audit/ENTWICKLUNGSPLAN.md` und im jüngsten Umsetzungsaudit.
> Die Punkte unten stammen vom Go-Live-Tag; ihr Stand ist dort nicht
> nachgeführt und wird im Umsetzungsaudit vom 29.09. (Abschnitt 6.4) als „auf
> Live zu bestätigen" geführt.
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.
## Nachlauf Go-Live (kurzfristig)
| Aufwand | Bedeutung |
|---|---|
| S | eine Stunde bis ein halber Tag |
| M | ein bis drei Tage |
| L | länger oder abhängig von Dritten |
- [ ] **Go-Live-Mails** an Bestandskunden: erst `php artisan
auth:send-go-live-mails --dry-run` (Anzahl prüfen), dann scharf.
Massenversand läuft über die Queue → Worker-Status vorher grün,
Betriebsüberwachung während des Versands im Blick.
- [ ] **API-Kunden-Mailing** (Connektar & Co.) mit Hinweis auf neue Doku
(`/docs/api/v1`) und Token-Migration — Texte [EXTERN].
- [x] **Git-Hygiene (R6.5):** erledigt 20.07. — `fix/zeitzone-europe-berlin`
nach `main` gemerged (`7b27ec5`), Release-Tag **v1.0.0**, beides auf
origin. Künftig Feature-Branches von `main`.
- [ ] **Stripe-Test-Artefakte bereinigen:** Test-`stripe_id` am Testuser,
Test-Subscription-Zeilen, STR-Testrechnungen — damit die
Rechnungsnummern-Sequenz sauber ist.
- [ ] **Monitoring scharf:** `MONITORING_ALERT_EMAIL` gesetzt? Cron/Scheduler
+ Queue-Worker in Ploi überwacht?
- [ ] **Umami-Snippets** je Domain einbinden (`dev/betrieb/umami.md`).
- [ ] **Connektar-API-Keys rotieren** (mittelfristig — die Legacy-Keys sind
über diverse Test-Kanäle gelaufen; Rotation über `/customer/tokens`).
- [ ] **Alt-System endgültig abschalten**, sobald ein paar Tage stabil:
Webspace und Alt-DBs auf dem KAS stilllegen; vorher letztes Backup der
Alt-DBs und Alt-Uploads sichern. Danach kann auch `dev/migration/` (7 GB
lokales Medien-Staging) auf ein Backup-Medium und vom Arbeitsrechner
runter. **Das KAS-Hosting selbst bleibt** (E-Mail-Postfächer, Stand
06.10.2026); der SSH-Zugang des Altsystems ist geändert und deaktiviert.
**[EXTERN]** = liegt beim Betreiber, Anwalt, Steuerberater oder Partner, nicht im Code.
**[LIVE]** = einmaliger Nachweis bzw. Handgriff auf dem Server.
## Beobachten (erste Wochen)
---
- [ ] Betriebsüberwachung täglich: failed_jobs, Worker, Medien-Privatisierung.
- [ ] `storage/logs/laravel.log` auf neue Fehlermuster.
- [ ] Search Console: Indexierung der neuen Domains + 301-Ketten der
Legacy-URLs (www-Redirects, .html-Redirects, presskit→Newsroom).
- [ ] MySQL-Auslastung (die Filesort-Spirale ist behoben; bei neuen
Slow-Queries → Slow-Query-Log).
## 0. Lage
## Nächste Entwicklungen / Optimierungen (Ideen-Backlog)
- **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).
- [x] **Volt entfernen, auf Livewire-4-Single-File-Components umstellen**
— **erledigt 06.10.2026** (Branch `technik/volt-entfernen`). 83
Komponenten auf `Livewire\Component`, 73 Routen auf
`Route::livewire()`, 88 Testdateien auf `Livewire::test()`/
`Livewire::actingAs()`; `VoltServiceProvider` gelöscht,
`livewire/volt` entfernt (sonst keine Paketänderung).
`config/livewire.php` auf v4-Schlüssel: `component_layout`,
`component_placeholder`, `component_locations`, `make_command` (SFC
ohne ⚡). Befund dabei: Der alte Schlüssel `layout` war wirkungslos,
Livewire 4 legte seinen Standard `layouts::app` darüber; alle 73
gerouteten Komponenten setzen ihr Layout aber selbst. CLAUDE.md,
AGENTS.md, `boost.json`, `.cursorrules` und der Skill
`volt-development` angepasst bzw. entfernt (von Hand —
`boost:update` hätte nebenbei alle Skills auf eine neue
Boost-Fassung gehoben, das ist ein eigener Schritt). Suite 2.325
grün, einer übersprungen; Larastan und Pint ohne Meldung.
**Larastan erfasst die Komponenten weiterhin nicht**: Es analysiert
nur `.php`-Dateien, Single-File-Komponenten sind Blade-Dateien.
Abhilfe wäre die Umwandlung einzelner großer Komponenten in
Klassen-Komponenten (`php artisan livewire:convert`), kein Muss.
### Releases seit Go-Live
- [ ] Frontend-Audit-Reste aus `dev/archive/frontend-audits/
frontend-optimize-protokoll.md` sichten — P2/P3-Punkte, die bewusst
liegen geblieben sind.
- [ ] Offene [EXTERN]-Entscheidungen aus dem Release-Plan prüfen
(`dev/archive/release/entwicklungsplan-release.md`): Preisfreigabe,
Refund-Policy.
- [ ] Cache-Warmer im Scheduler (Startseite + Top-Kategorien alle 5 Min
vorbauen), falls Kaltaufbauten nach Deploys stören — Option B aus der
Performance-Session vom 20.07.; aktuell nicht nötig.
- [ ] Redis als Cache-/Queue-Store erwägen, wenn die Last wächst
(aktuell `database`-Store, läuft stabil).
| 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.** `dev/migration 2026/sql/*.sql` (Snapshot 23.04., ~290 MB, Kundendaten) wurde am 12.05. committet (`5b8bdf4`) und am 06.07. nur enttrackt (`b53af92`). Die Blobs sind von `main` erreichbar und liegen auf **beiden Remotes** (origin, NAS) und in jedem Klon, also vermutlich auch im Git-Deploy-Checkout auf dem Server. Entscheidung: Historie mit `git filter-repo` bereinigen und force-pushen (alle Klone neu, Server-Checkout neu) oder bewusst belassen und dokumentieren. | [Release-Plan R6.2](archive/release/entwicklungsplan-release.md) | M |
| 1.2 | **Schlüssel rotieren**, deren Rotation nirgends belegt ist: OpenAI, Google OAuth, Mail-Zugang (K2 vom 14.07.), Context7 (stand in `.mcp.json`, Git-Historie), Connektar-API-Keys (Legacy-Keys liefen über Test-Kanäle), MySQL-Root lokal (Git-Historie). | [optimize 14.07. K2](archive/optimize/optimize-14-07-2026.md), [Deploy v1.1.0 F](archive/betrieb/deploy-v1.1.0.md), [Sicherheitsplan](sicherheit/ENTWICKLUNGSPLAN-SICHERHEIT-2026-10-07.md) | S [EXTERN] |
| 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`. | [Sicherheitsplan](sicherheit/ENTWICKLUNGSPLAN-SICHERHEIT-2026-10-07.md), [Spamschutz](sicherheit/ENTWICKLUNGSPLAN-SPAMSCHUTZ-2026-10-09.md) | S |
| 1.4 | **Lokale Dateien mit Personenbezug** sichern bzw. löschen (alle gitignored): `dev/archive/migration-2026/sql/` (905 MB Dumps), `dev/migration/` (7,4 GB Medien-Staging; nach Backup), `dev/2026-10/laravel.log` (Produktions-Log 08.10., Fehler in v1.6.1 behoben), `dev/newsletter/mail-address.md` (47 Bounce-Adressen; nach bestätigtem Import), `dev/api/` (Postman mit API-Keys, Activity-Logs der Alt-APIs bis 10.07.), `storage/app/private/restore-company-user-auto-2026-10-07.sql`. | [dev/README](README.md) | S |
| 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.
| # | 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“ (D.6/S10) ist nur teilweise umgesetzt: „Qualitätsgeprüft“ steht noch in `lang/de/web.php` (Meta-Beschreibung beider Startseiten), `lang/de/static.php`, Kunden-Dashboard und EN-Pendants; Preisseite sagt „Inhaltsprüfung“. | [Bildrechte-Plan](bildrechte/bildkennzeichnung-entwicklungsplan-2026-09-21.md) | S |
| 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: `legacyCachedMark()` entfernen, „Aktive Sessions“ für Redis (siehe Abschnitt 2). | Sicherheitsplan | S–M |
| 4.2 | Löschfristen für `activity_events` und `api_usage_logs` (heute keine; `model:prune` nur für Anmeldezähler und Kontaktanliegen). | [Monitoring-Plan Phase 3](betrieb/monitoring-plan.md) | S |
| 4.3 | `POST api/v1/newsletter/subscribe` legt Abos ohne Double-Opt-in an (kein Bestätigungsweg) — abschalten oder mit dem Branchen-Digest (6.4) koppeln. | [QA-Checkliste](archive/release/qa-checkliste.md) | S |
| 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 |
---
## 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 |