newsroom: Beschreibung pflegen, durch die Rot-Ebene geprüft (Roadmap 1b.3)

Die Firmenseite im Kundenbereich bekommt den Beschreibungstext (max.
2 000 Zeichen, reiner Text). Er läuft durch dieselbe Klassifikation wie
eine Meldung (CompanyProfileCheck, KI mit deterministischem Fallback);
Rot wird abgewiesen. Links im Profiltext gibt es nicht — die Website ist
das eine Link-Feld. Bilder zurückgestellt (BALD-Platzhalter), bis die
Bild-Kennzeichnung angepasst ist.

Stufe 3 der Konversionsleiter (newsroom_edited) wird hier geschrieben,
einmal je Firma, mit der Herkunft des zuletzt eingelösten Magic Links.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-09-15 13:04:12 +00:00
parent 079477a423
commit 87f95fb7a7
6 changed files with 253 additions and 2 deletions

View file

@ -120,7 +120,7 @@ Für selbst angelegte Firmendaten trägt der Nutzer die Verantwortung. Für die
|---|---|---|---|
| ~~1b.1~~ | Sichtbarkeitsregel: Newsroom öffentlich erst ab der ersten veröffentlichten Meldung, sonst nur Datensatz — **bestand; 15.09.2026 Rückbau im Cache vervollständigt** | S | keine |
| ~~1b.2~~ | Verwaltungszugang über Magic Link, unabhängig von der öffentlichen Sichtbarkeit — **gebaut 15.09.2026**: `/newsroom/{slug}/verwalten`, Link an die hinterlegte Firmen-E-Mail (maskiert), Herkunft `profile_claim`, Landung auf der Firmenseite; noch unverlinkt (→ 1b.4) | M | 1a.4 |
| 1b.3 | Kostenlose Profilpflege: Beschreibung, Logo, Bilder, Pressekontakte | M | 1b.2 |
| ~~1b.3~~ | Kostenlose Profilpflege: Beschreibung, Logo, Bilder, Pressekontakte — **15.09.2026**: Beschreibung durch die Rot-Ebene, reiner Text ohne Links, Stufe 3 der Leiter wird hier geschrieben; **Bilder zurückgestellt** (BALD-Platzhalter) bis die Bild-Kennzeichnung angepasst ist | M | 1b.2 |
| ~~1b.4~~ | Hinweis "Diesen Newsroom verwalten" auf der Profilseite und in der Veröffentlichungsmail — **gebaut 15.09.2026** (E4: Hinweis unten in der Mail; Herkunft `mail_publish` läuft bis auf das Token durch) | S | 1b.2 |
| ~~1b.5~~ | Rückbau: fällt ein Newsroom durch Löschung oder Depublizierung auf null Meldungen, verschwindet die öffentliche Seite mit — **15.09.2026**: alle Admin-Wege (archivieren, Status ändern, löschen) leeren jetzt den Seiten-Cache | S | 1b.1 |
| 1b.6 | Nicht erreichbare Newsrooms aus der Bounce-Suppression im Admin markieren, nicht beanspruchbar, aus allen Mailstrecken ausgenommen | S | Bounce-Suppression live |

View file

@ -977,3 +977,30 @@ keinen Platz in dieser Mail (ein Element pro Mail).
Mail beansprucht" von „auf der Seite entdeckt".
Tests: drei weitere in `NewsroomClaimTest` (Seite, Mail, Herkunft).
## 1b.3 — Kostenlose Profilpflege (Entscheidung 15.09.2026: Bilder zurückgestellt)
Die Firmenseite im Kundenbereich konnte Name, Adresse, Kontakt, Website,
Land, Logo und Pressekontakte. Neu:
- **Beschreibung** (`companies.boilerplate`, max. 2 000 Zeichen) als
Textarea. Erscheint im Newsroom und unter jeder Meldung als „Über das
Unternehmen". Beim Speichern wird der Seiten-Cache geleert.
- **Rot-Ebene:** Der Text läuft durch dieselbe Klassifikation wie eine
Meldung (`CompanyProfileCheck`: KI-Treiber, bei Ausfall deterministische
Blacklist — das Muster der Spur-D-Vorprüfung). Rot → Validierungsfehler,
nichts wird gespeichert. Gelb ist für ein Firmenprofil kein Grund.
- **Leitplanke Links:** Reiner Text. `strip_tags` beim Speichern, escaped
beim Rendern — es gibt im Profiltext keine Links, die man auszeichnen
müsste. Die Website ist das eine Link-Feld und trägt bereits `nofollow`.
Damit ist die Leitplanke durch Weglassen erfüllt statt durch eine Policy.
- **Bilder:** zurückgestellt, bis die Bild-Kennzeichnung angepasst ist.
Im Formular als „Bilder im Newsroom — BALD — Funktion folgt" sichtbar,
nicht weggelassen (Roadmap-Leitplanke).
- **Stufe 3 der Konversionsleiter** (`newsroom_edited`) wird hier
geschrieben — die letzte offene Schreibstelle aus Block 0. Einmal je
Firma; Herkunft ist die des zuletzt eingelösten Magic Links des Kontos
(so zählt „aus der Mail beansprucht, dann Beschreibung geschrieben" für
die Mail), sonst `organic`.
Tests: `tests/Feature/NewsroomProfileTest.php` (4).