dev: Umsetzungsaudits 29.09. und 02.10., Entwicklungsplan Blöcke 9 und 10 mit bestätigten Entscheidungen E19–E34 und Deploy-Plan, Runbook ergänzt

- UMSETZUNGSAUDIT-2026-09-29.md (Bestandsaufnahme) und -2026-10-02.md
- ENTWICKLUNGSPLAN.md: Block 9 und 10, Entscheidungen E19–E34 vom Betreiber
  am 02.10.2026 bestätigt (E25 revidiert), Deploy-Plan A–E, Protokoll
- deploy-runbook.md: vollständige Scheduler-Tabelle, Restore-Schritte mit
  --accept-unsigned/--without-export, Zugangsdaten aus Abschnitt 7 entfernt
  (stehen weiter in der Historie — Passwort wird rotiert)
- Bildplan-Protokoll mit Korrektur zu „Altbestand geschützt" (A-05)
- dev/README.md und dev/roadmap.md verweisen auf den aktuellen Stand
- .env.example: neue Schlüssel aus Block 9/10

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-10-02 13:09:01 +00:00
parent f1c0e2766b
commit 4a7e496d1b
8 changed files with 787 additions and 21 deletions

View file

@ -83,6 +83,9 @@ PRESS_RELEASE_EVENTS_RETENTION_DAYS=395
# Aufbewahrung der Konversions-Ereignisse in Tagen (siehe config/conversion.php).
# Bewusst derselbe Horizont wie oben. 395 = 13 Monate.
CONVERSION_EVENTS_RETENTION_DAYS=395
# Mail-Link-Klick (Stufe 1): derselbe Klick je IP und Meldung zählt höchstens
# einmal in diesem Fenster (Minuten). Audit 29.09.2026, R-08.
CONVERSION_MAIL_CLICK_THROTTLE_MINUTES=30
# ---------------------------------------------------------------------------
# Legacy-Datenbanken (Alt-Systeme, read-only für Migration/Abgleich).
@ -140,6 +143,16 @@ BOUNCE_IMAP_PORT=993
BOUNCE_IMAP_ENCRYPTION=ssl
BOUNCE_IMAP_USERNAME=
BOUNCE_IMAP_PASSWORD=
# Signatur der Bounce-Referenz X-Pk-Ref (Audit 29.09.2026, R-04). Leer = aus
# APP_KEY abgeleitet. Ein Wechsel entwertet nur Signaturen bereits versendeter
# Mails (deren Rückläufer zählen dann weich).
BOUNCE_SIGNING_KEY=
# Bounce OHNE Signatur (hart wie weich): policy = nur protokollieren (sicher,
# Standard); soft = zählt auf den Schwellwert und ist damit fälschbar.
BOUNCE_UNSIGNED_KIND=policy
# Aufbewahrung der Rückläufer-Ereignisse (email_bounces) in Tagen; gelöscht von
# conversion:purge-events. Die Sperrliste bleibt.
BOUNCE_RETENTION_DAYS=395
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
@ -212,6 +225,11 @@ NEWSLETTER_SYNC_API_KEY=
# NEWSLETTER_CAMPAIGN_BATCH_SIZE=50
# NEWSLETTER_CAMPAIGN_BATCH_INTERVAL_MINUTES=15
# Kampagnen-Versand freischalten (E9-Schalter, Audit 29.09.2026). Standard
# aus, bis U05–U07 umgesetzt sind; Entwürfe, Test-Mails und Abmeldung gehen
# immer.
NEWSLETTER_SENDING_ENABLED=false
# Google-Login (Laravel Socialite). Die Redirect-URI muss in der Google Cloud
# Console EXAKT der Callback-URL der Portal-Domain entsprechen (Login läuft auf
# dem Portal-Host, nicht zwingend APP_URL). Prod: https://pressekonto.com/...
@ -275,6 +293,14 @@ TRANSPARENCY_FREE_PORTALS_CHECKED_AT=
# press-releases:hash-content → press-releases:assign-canonicals.
CANONICAL_ASSIGNMENT_ENABLED=true
CANONICAL_FALLBACK=first
# Anmeldelinks „Diesen Newsroom verwalten" je Newsroom und Tag (nur versendete
# zählen). Audit 29.09.2026, R-09: 3 → 5.
NEWSROOM_CLAIM_LINKS_PER_DAY=5
# API-Zuordnung neuer Firmen zu einem bestehenden Newsroom (Roadmap 1a.4,
# Audit 29.09.2026, R-01): nur für diese User-IDs (kommagetrennt, z. B. das
# connektar-Konto) — sonst nur, wenn der Nutzer der Firma schon angehört.
# Leer = keine Freischaltung.
NEWSROOM_API_ASSIGNMENT_USER_IDS=
# --- Bildkennzeichnung (Formular v2) und Beweisarchiv (Block F) ---
# IMAGE_RIGHTS_V2: Formular v2 im Bildmanager und in der API; false = Verhalten wie vor der Umstellung.
@ -283,7 +309,10 @@ IMAGE_RIGHTS_V2=false
CONFIRMATION_IP_KEY=
# Beweisarchiv: eigener Schlüssel (php artisan archive:key), getrennt sichern — ohne ihn ist das Archiv unlesbar.
ARCHIVE_KEY=
ARCHIVE_PREVIOUS_KEYS=
ARCHIVE_RETENTION_YEARS=3
ARCHIVE_QUARANTINE_DAYS=30
ARCHIVE_SWEEP_PAUSED=false
# Zustimmungsgate vor jeder Einreichung (Block G) — erst mit AGB v0.7 einschalten.
LEGAL_ACCEPTANCE_GATE=false