dev: Nachweise gesichtet, Vertragsübersicht BN-06, Deploy-Notiz v1.9.1

Screenshots und Verträge geprüft und in nachweise/ zusammengeführt;
Binärdateien per .gitignore ausgeschlossen (vertraulich, Kunden- und
Organisationsnummern, Größe). Vertragsübersicht mit Fassungen, Daten und
Drittlandgrundlagen. Versandfassung: DPF-Status Cloudflare vom 13.10.2026,
OpenAI-DPA unterzeichnet am 13.10.2026. Juli-Zahlen auf Live bestätigt.
Protokollzeile v1.9.0 im Git-Deploy-Dokument.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-10-13 11:22:15 +00:00
parent 6647e420c8
commit 6c6015f960
7 changed files with 75 additions and 25 deletions

5
.gitignore vendored
View file

@ -83,3 +83,8 @@ config/files/
# Produktions-Logs zur Auswertung (können personenbezogene Daten enthalten)
/dev/**/*.log
# Nachweise zum Anwaltspaket: Screenshots und Verträge nicht versionieren
# (Vertraulich, Kunden- und Organisationsnummern, Größe). Ablage lokal und im Paket.
/dev/rechtliches/nachweise/*.png
/dev/rechtliches/nachweise/*.pdf

View file

@ -0,0 +1,24 @@
# Deploy v1.9.1 — Bildnachweis und Erklärung am Boost-Label auf Mobil
**Stand:** 13.10.2026 · **Live bisher:** `v1.9.0` · Ablauf nach [git-deploy.md](../../betrieb/git-deploy.md), Abschnitte C und D.
**Anlass:** Die Screenshots `boost-03` und `boost-04` aus dem Nachweisordner zeigten auf 390 px Breite zwei Fehler. Das Label „Gebuchte Platzierung“ verdeckte den Bildnachweis („Foto: …“) oben rechts am Aufmacher, und die Erklärung stieß rechts an den Bildrand.
**Inhalt:**
- Bildnachweis am Aufmacher (Start- und Branchenseite) auf Mobil unten rechts im freien Rand unter der Meta-Zeile, ab `sm` unverändert oben rechts.
- Erklärung am Schild „Gebuchte Platzierung“ rechtsbündig unter dem Label.
- `audit:admins`: „Gelistet ist 1 Konto“ statt „Gelistet sind 1 Konten“.
**Umfang:** keine Migration, keine neuen `.env`-Werte, neue Assets (mitcommittet).
## Deploy und Prüfungen
```bash
cd ~/pressekonto.com
bash dev/betrieb/deploy.sh v1.9.1
```
- `/health` meldet `v1.9.1`.
- presseecho.de auf 390 px mit laufendem Test-Boost: Bildnachweis unten rechts sichtbar, Label oben links, Tipp auf das Label zeigt die Erklärung vollständig.
- Danach `boost-03` und `boost-04` neu aufnehmen und den Test-Boost unter Admin ▸ Pressemitteilung beenden.

View file

@ -320,3 +320,4 @@ Ausfall des Anbieters keinen Deploy abbricht.
| 09.10.2026 | `v1.7.0` | Spamschutz für Kontakt-Widget und Registrierung (Cloudflare Turnstile, Inhaltsfilter mit Spam-Quarantäne, Namensregel bei der Registrierung). Bei nicht erreichbarem Cloudflare wird durchgelassen und markiert. Keine Migration. Vorher: Turnstile-Keys in der `.env`, Widget im Cloudflare-Dashboard mit allen drei Live-Hostnamen. Nach dem Deploy: Kontakt-Widget im Browser getestet, Betriebsüberwachung „Spamschutz (Cloudflare Turnstile)“ grün. `contact-messages:quarantine-spam`: 152 Anliegen in die Quarantäne, 130 offen (Rest per Sammelaktion), echte Korrekturanfragen blieben offen. `users:prune-bot-registrations` nach freigegebenem Probelauf ausgeführt, danach `USERS_PRUNE_BOT_REGISTRATIONS=true` und `config:cache`. |
| 09.10.2026 | Historie bereinigt | Die Produktiv-SQL-Dumps vom 23.04. (`dev/migration 2026/sql`, ~290 MB, Kundendaten) lagen seit `5b8bdf4` in der Historie und auf beiden Remotes. Mit `git filter-branch` aus allen Branches und Tags entfernt; Dateibäume und Commitzahlen aller 21 Refs unverändert, **alle Hashes neu** (Zuordnung alt → neu: [`commit-map-2026-10-09.txt`](../archive/commit-map-2026-10-09.txt)). Tags `v1.0.0`–`v1.7.0` neu gesetzt, gleicher Inhalt. Force-Push auf `origin` und `NAS`, Server-Abgleich nach G.7 (Server `size-pack` 33,4 MiB), Speicherbereinigung in Forgejo und auf dem NAS, keine weiteren Klone. Lokal zusätzlich drei Codex-Checkpoint-Refs entfernt, die noch auf die alte Historie zeigten; danach 33,5 MiB, beide Dump-Blobs nicht mehr vorhanden. Die betroffenen Live-Schlüssel waren bereits rotiert (Betreiber). Vorgehen allgemein in Abschnitt G. |
| 12.10.2026 | `v1.8.0` | Von `v1.7.0`, keine Migration, kein Asset-Diff. Sicherheitsseite mit „Geräte und Anmeldungen“, Breadcrumbs ohne Daten an GlitchTip (Livewire-Breadcrumbs aus), Löschfristen `activity_events` 395 / `api_usage_logs` 90 Tage (erster Lauf 04:05), Newsletter-API 410, Wortwahl „automatisiert geprüft“. Prüfung von außen: alle drei Domains melden Release `v1.8.0` (Meta-Tag der Fehlererfassung), robots.txt und Sitemaps hostkorrekt, Veröffentlichen-Seite mit neuem Text, GlitchTip ohne Einträge unter `v1.8.0`. `/health` mit Token nicht geprüft (lokales Token ≠ Live). Befund: „Qualitätsgeprüft“ stand noch in `config/domains.php` (Meta und Taglines) und im Tarifvorteil „Starter“ (Datenbank) → Hotfix `v1.8.1`. |
| 13.10.2026 | `v1.9.0` | Von `v1.8.1`, keine Migration, mit Asset-Diff. Boost-Label „Gebuchte Platzierung“ mit Erklärung, „Aktuell“ statt „Top-Auswahl“, Admin-Aktion „Boost beenden“, `audit:admins`. Deploy durch den Betreiber; danach auf Live Rollenprüfung BN-02 mit `audit:admins` (ein Admin-Konto mit Passkey und TOTP) und Test-Boost für die Screenshots des Anwaltspakets. Befund aus den Screenshots: auf Mobil verdeckt das Label den Bildnachweis → `v1.9.1`. |

View file

@ -100,7 +100,7 @@ Tritt im Server oder im Browser ein technischer Fehler auf, geht ein Fehlerberic
### D6 — Cloudflare Turnstile
Im Kontaktformular und bei der Registrierung; Ausweitung auf Melde-, Widerrufs- und Kündigungsformular geplant. Ergänzend zum Live-Text 6a: Unser Server übermittelt bei der Prüfung die IP-Adresse des Nutzers an Cloudflare (`remoteip`). Ist Cloudflare nicht erreichbar, wird die Eingabe angenommen und intern markiert. Cloudflare-DPA über die Standardbedingungen; DPF-Zertifizierung von Cloudflare, Inc. [Prüfdatum eintragen].
Im Kontaktformular und bei der Registrierung; Ausweitung auf Melde-, Widerrufs- und Kündigungsformular geplant. Ergänzend zum Live-Text 6a: Unser Server übermittelt bei der Prüfung die IP-Adresse des Nutzers an Cloudflare (`remoteip`). Ist Cloudflare nicht erreichbar, wird die Eingabe angenommen und intern markiert. Cloudflare-DPA über die Standardbedingungen (mit SCCs); DPF-Zertifizierung von Cloudflare, Inc. am 13.10.2026 geprüft: „Active – Re-certification under Review“, nächste Rezertifizierung fällig 15.09.2027 (Anlage 7).
### D9 — IP-Adressen in Vorgangsdaten
@ -114,7 +114,7 @@ Bei Kontaktanfragen, Meldungen, Widerrufen, Kündigungen und Buchungsbestätigun
### Automatisierte Inhaltsprüfung (bestehender Abschnitt 10/8, Korrektur)
Die DSE nennt OpenAI, Google Gemini und Anthropic Claude. Angebunden ist nur OpenAI; Gemini und Anthropic werden nicht genutzt. Fassung 0.4 nennt nur OpenAI. Der Betreiber gibt OpenAI Ireland Ltd. als Vertragspartner und eingerichtete Zero Data Retention an. Ein fehlender `store`-Parameter belegt das nicht; Geltungsbereich (Endpunkte, Modelle, Ausnahmen) und Datenresidenz werden vor Übernahme einer Speicherzusage in die DSE durch Organisations- und Projekteinstellungen sowie das DPA belegt (Betriebsnachweis).
Die DSE nennt OpenAI, Google Gemini und Anthropic Claude. Angebunden ist nur OpenAI; Gemini und Anthropic werden nicht genutzt. Fassung 0.4 nennt nur OpenAI. Das Data Processing Addendum mit OpenAI Ireland Ltd. ist am 13.10.2026 unterzeichnet (Anlage 7); die Textprüfung über OpenAI läuft seit Juli 2026 [Betreiber: früheres DPA vorhanden?]. Zero Data Retention gibt der Betreiber als eingerichtet an. Ein fehlender `store`-Parameter belegt das nicht; Geltungsbereich (Endpunkte, Modelle, Ausnahmen) und Datenresidenz werden vor Übernahme einer Speicherzusage in die DSE durch Organisations- und Projekteinstellungen sowie das DPA belegt (Betriebsnachweis).
---

View file

@ -4,37 +4,40 @@
Regel: keine vollständigen E-Mail-Adressen, Tokens oder Schlüssel in diesem Ordner. Konten nur mit ID und Domain.
Status: ✅ liegt vor · ◐ aus Code/Daten vorbelegt, auf Live bestätigen · ☐ offen (Betreiber)
Status: ✅ liegt vor · ◐ aus Code/Daten vorbelegt, auf Live bestätigen · ↻ neu aufnehmen · ☐ offen (Betreiber)
Screenshots und Verträge (`*.png`, `*.pdf`) sind von Git ausgeschlossen und liegen nur lokal; sie gehen als Dateien mit dem Paket raus.
## Vor dem Versand
| Datei | Status | Hinweis |
|---|---|---|
| [`bn-02-berechtigungen-2026-10-13.md`](bn-02-berechtigungen-2026-10-13.md) | ✅ | 1 Admin-Konto mit Passkey und TOTP, keine Editoren; Ablauf in [`bn-02-ablauf.md`](bn-02-ablauf.md) |
| `boost-01-startseite-desktop.png` | ☐ | U10 ist im Code; erst nach dem Deploy aufnehmen. Boost danach unter Admin ▸ Pressemitteilung ▸ „Boost beenden“ beenden |
| `boost-02-branchenseite-desktop.png` | ☐ | dito |
| `boost-03-startseite-mobil.png` | ☐ | 390 px |
| `boost-04-tooltip.png` | ☐ | Maus über dem Label; auf Mobil erscheint dieselbe Erklärung per Tipp |
| `ui-01-upload-rechtebestaetigung.png` | ☐ | Hub ▸ Mitteilung bearbeiten ▸ Titelbild hochladen, Abschnitt „3 · Bestätigung“. Der Aufklapper heißt „Vollständiger Wortlaut“, nicht „Details“. |
| `ui-02-upload-ki-angabe.png` | ☐ | Radiogruppe „KI-Kennzeichnung“. **Eine gesperrte Vorbelegung gibt es noch nicht** (C2PA-Prüfung ist Phase 2); höchstens „Angaben aus den Metadaten der Datei vorbelegt“ mit einem Bild mit IPTC-Quelle. |
| `ui-03-bild-nachweiszeile.png` | ☐ | Unter dem Bild steht nur „Foto: … · KI-…“. „Bild und Angaben: [Firma], eingereicht am …“ steht nur im Overlay (→ ui-04). |
| `ui-04-bild-detailfenster.png` | ☐ | „i“-Knopf links unten am Bild. Die Zeile heißt „Kennzeichnung: …“, nicht „Quelle der Kennzeichnung“. |
| `ui-05-konto-sicherheit.png` | ☐ | `/admin/me/security` |
| `ui-06-zustimmungsgate-dev.png` | ☐ | lokal mit `LEGAL_ACCEPTANCE_GATE=true` und aktiver Buchung. Der Dialog zeigt nur die Versionsnummer, kein Datum, und keine Schaltfläche „Später entscheiden“. |
| `ui-07-ki-hinweis-text.png` | ☐ | z. B. `presseecho.de/de/press-release/online-fachkurs-unterstutzt-gefahrdungsbeurteilungen-nach-biostoffv`. Die Admin-Liste hat keinen Filter nach KI-Angabe; die 9 Mitteilungen kommen aus der Datenbank. |
| `avv-hetzner.pdf` | ☐ | |
| `avv-all-inkl.pdf` | ☐ | |
| `cloudflare-dpf-2026-10-XX.png` | ☐ | füllt „[Prüfdatum eintragen]“ in D6 |
| `cloudflare-dpa.png` | ☐ | |
| `openai-dpa.pdf` | ☐ | |
| `boost-01-startseite-desktop.png` | ✅ | Aufmacher mit Label. Nur ein Boost aktiv, daher kein Rahmen-Label in der Liste |
| `boost-02-branchenseite-desktop.png` | ✅ | Aufmacher mit Label |
| `boost-03-startseite-mobil.png` | ↻ | neu aufnehmen nach v1.9.1: Label verdeckte den Bildnachweis |
| `boost-04-tooltip.png` | ↻ | neu aufnehmen nach v1.9.1: Erklärung stieß rechts an den Rand; gern zusätzlich Desktop mit Maus |
| `ui-01-upload-rechtebestaetigung.png` | ✅ | Schalter, Kurztext, vollständiger Wortlaut mit AGB-Fassung |
| `ui-02-upload-ki-angabe.png` | ✅ | KI-Kennzeichnung, „Keine Herkunftsdaten in der Datei gefunden“ |
| `ui-03-bild-nachweiszeile.png` | ✅ | Hub-Ansicht mit Bestätigungsprotokoll („Rechte bestätigt am …, img-confirm-v2, AGB 0.6, form“) |
| `ui-04-bild-detailfenster.png` | ✅ | Portal: Detailfenster und Zeile „Foto: … · KI-generiert“ unter dem Bild |
| `ui-05-konto-sicherheit.png` | ✅ | enthält die eigene IP des Betreibers |
| `ui-06-zustimmungsgate-dev.png` | ☐ | fehlt noch: Dialog „Neue Fassung unserer Bedingungen“ beim Einreichen. Lokal: `LEGAL_ACCEPTANCE_GATE=true` (steht in der lokalen `.env`), Testkonto mit aktiver Buchung, dessen Zeilen in `legal_document_acceptances` entfernen, dann Mitteilung ▸ „Zur Prüfung einreichen“. `ui-06b-buchung-agb-annahme.png` (✅) zeigt die AGB-Annahme beim Kauf, passend zu Frage 2 |
| `ui-07-ki-hinweis-text.png` | ✅ | Hinweiskasten über dem Text |
| `avv-hetzner.pdf` | ✅ | Auswertung in [`bn-06-vertraege.md`](bn-06-vertraege.md) |
| `avv-all-inkl.pdf` | ✅ | dito |
| `cloudflare-dpf-2026-10-13-1.png`, `-2.png` | ✅ | Active – Re-certification under Review |
| `cloudflare-dpa.pdf` | ✅ | |
| `openai-dpa.pdf` | ✅ | unterzeichnet 13.10.2026 |
| `openai-zdr.png` | ☐ | |
| `openai-residency.png` | ☐ | Live nutzt laut Code `api.openai.com`, nicht den EU-Endpunkt |
| [`bn-06-vertraege.md`](bn-06-vertraege.md) | ◐ | Vertragsübersicht; Abschlussdaten Hetzner/ALL-INKL offen |
| `openai-endpoints.md` | ◐ | aus dem Code; Live-Werte über BN-01 |
| `stripe-dpa.png` | ☐ | |
| `avv-fehlt.md` | ☐ | nur falls ein Vertrag fehlt |
| `juli-mail-abonnenten.md` | ◐ | Kampagne #1, 21.07.2026 |
| `juli-mail-aktive-konten.md` | ◐ | Kampagne #2, 22.07.2026 |
| `juli-mail-versand.md` | ◐ | Regel und Zahlen; Live-Abgleich per Befehl in der Datei |
| `stripe-dpa.pdf` | ✅ | |
| `avv-fehlt.md` | – | nicht nötig, alle Verträge liegen vor |
| `juli-mail-abonnenten.md` | ✅ | Kampagne #1, 21.07.2026 |
| `juli-mail-aktive-konten.md` | ✅ | Kampagne #2, 22.07.2026 |
| `juli-mail-versand.md` | ✅ | auf Live bestätigt |
## Vor Deploy 3 (parallel zur Anwaltsprüfung)

View file

@ -0,0 +1,17 @@
# BN-06: Dienstleisterverträge und Übermittlungsgrundlagen
**Stand:** 13.10.2026 · Belege liegen als PDF/PNG in diesem Ordner (nicht im Repository, siehe `.gitignore`).
| Dienst | Vertragspartner | Dokument | Fassung / Datum im Beleg | Übermittlung in Drittland | Anmerkung |
|---|---|---|---|---|---|
| Hosting, GlitchTip, Umami (Server) | Hetzner Online GmbH, Gunzenhausen | `avv-hetzner.pdf`, AV-Vertrag nach Art. 28 DSGVO, Kundennummer im Beleg | Fassung 1.2 vom 16.02.2026; von Hetzner gezeichnet „Gunzenhausen, den 13.10.2026“ | keine; Verarbeitung nur in EU/EWR (§ 3), Unterauftragnehmer außerhalb der EU nur für Standorte USA/Singapur | Unterschriftsfeld des Auftraggebers leer (Online-Abschluss). **Anlage 1** nennt nur „Personenstammdaten, Vertragsstammdaten“ und „Kunden und Interessenten“; deckt Website-Besucher (IP), Pressekontakte und Bilddaten nicht ausdrücklich ab. |
| E-Mail (Versand, Rückläufer-Postfach) | ALL-INKL.COM – Neue Medien Münnich, Friedersdorf | `avv-all-inkl.pdf`, Standardvertragsklauseln nach Durchführungsbeschluss (EU) 2021/915 | Stand 25.08.2026; Datum im Beleg 13.10.2026; Kundennummer im Beleg | keine genannt | Unterauftragnehmer Neue Medien Münnich GmbH. |
| Turnstile | Cloudflare, Inc. | `cloudflare-dpa.pdf` (DPA als Teil der Nutzungsbedingungen, Annahme per Klick) | ohne Datum im Beleg | USA: EU-US Data Privacy Framework, Status am 13.10.2026 „Active – Re-certification under Review“, nächste Rezertifizierung fällig 15.09.2027 (`cloudflare-dpf-2026-10-13-1.png`, `-2.png`); zusätzlich SCCs im DPA | — |
| Textprüfung (KI) | OpenAI Ireland Ltd. (Kunde mit Sitz im EWR) | `openai-dpa.pdf`, OpenAI Data Processing Addendum, DocuSign | beidseitig unterzeichnet am 13.10.2026; Organisations-ID im Beleg | Weitergabe an OpenAI-Gesellschaften außerhalb des EWR auf Basis von SCCs oder Angemessenheitsbeschluss (Ziff. 4) | Feld „Title“ beim Kunden mit „Herr“ ausgefüllt statt Funktion. ZDR und Datenresidenz sind im DPA nicht geregelt; Nachweis offen (`openai-zdr.png`, `openai-residency.png`). |
| Zahlungen | Stripe | `stripe-dpa.pdf`, Data Processing Agreement als Teil des Stripe-Vertrags | „Last updated: September 28, 2026“ | Regelungen im DPA | Stripe ist je nach Verarbeitung Auftragsverarbeiter oder selbst Verantwortlicher; die DSE beschreibt Stripe als eigenständig verantwortlich. |
## Offen
- **Abschlussdatum:** Alle Belege tragen das Datum 13.10.2026. Bei OpenAI ist das das Unterschriftsdatum. Bei Hetzner und ALL-INKL kann es das Abrufdatum oder das Abschlussdatum sein. Das tatsächliche Abschlussdatum steht im Hetzner-Konto (Robot/Konsole, Bereich Datenschutz) und im KAS. [Betreiber eintragen]
- **Hetzner Anlage 1** im Konto um die tatsächlichen Datenarten und Betroffenen ergänzen, soweit das Formular es zulässt.
- **OpenAI:** Nachweis zu Zero Data Retention und Datenresidenz.

View file

@ -1,6 +1,6 @@
# Juli-Mails: Empfängerregel und Versandzahlen (BN-08)
**Stand:** 13.10.2026, vorbelegt aus der lokalen Kopie der Live-Datenbank (letzter Eintrag 07.10.2026). Die Zahlen werden vor dem Versand des Pakets auf Live bestätigt (Befehl unten).
**Stand:** 13.10.2026. Vorbelegt aus der lokalen Kopie der Live-Datenbank und am 13.10.2026 auf Live bestätigt (Befehl unten): Kampagne #1 sent, 10/10/0/0; Kampagne #2 sent, 970/954/5/11, Protokollzeilen 497 versendet und 3 fehlgeschlagen; Kampagne #3 Entwurf ohne Empfänger.
## Empfängerregel