presseportale/dev/2026-09-01/basiswerte-block0.md
Kevin Adametz 2a2215b3c3 audit: Nacharbeit Umsetzungsaudit 25.09.2026 — Bildfreigabe, Beweisarchiv, KI-Atomarität, Berichte (Block 8, N01–N05, N07, N08, N10–N21, 5.1, 5.2)
Bilder (N01, N05, N07, N08): gemeinsamer Freigabezustand
PressReleaseImage::isPubliclyDeliverable() für Seiten, OG und Medienroute
(Bestand bleibt sichtbar, v2 nur mit Bestätigung, Admin-Upload bis zum
Kundenklick nicht öffentlich); eigene Ability confirmImageRights nur für den
Kontoinhaber, ohne Super-Admin-Kurzschluss, Identität und ausstehende
Bestätigung auch im Service; Status-Regel unter der PM-Sperre; Cache-Flush
nach dem Commit außerhalb der Dateibereinigung; Snapshot nach Bestätigung an
veröffentlichter PM; Bestätigungstexte an die gezeigte Kennung gebunden.

Beweisarchiv (N02, N10, N11, N12, N13, 5.1): Tombstone unter Zeilensperre mit
erneuter Hold-/Fristprüfung; Dateioperationen ausgewertet, Commands mit
FAILURE; record() über .tmp + move; Marker archive_pending_at mit
archive:retry-pending und archive:sweep-orphans; Anonymisierung entfernt Bilder
über den Remover mit Antragsbezug; Draft-Purge räumt Medien nie
veröffentlichter abgelehnter Einreichungen; App-Kopien fallen mit dem
Archiv-Tombstone; label_corrected nur für veröffentlichte Bilder;
archive_entries.legal_request_id; FileDeletion-Helfer; Systemstatus-Checks.

KI und Hintergrund (N03, N04, N14, N20, N21): Ergebnis-UPDATE und Audit in
einer Transaktion; erwarteter Hash bis in reject()/holdForManualReview();
Ablaufmail per beanspruchtem Marker in einer Transaktion; strikte
Schemaprüfung der Vision-Antwort; Fortschrittsmarke ungecacht.

Berichte und Canonical (N15–N19, 5.2): lückenlose Alterskohorten;
Feed-Identität mit Portal und Sprache; Sitemap-Rolle in der Kundenansicht;
Indexverteilung auf einer Grundgesamtheit; Kopien nach Wegfall der
Erstquelle neu bewertet; Kategorie-Admin leert Seiten-Caches; Dry-Run
zählt alle Tabellen.

Gesamtsuite: 2.122 Tests grün, einer übersprungen; Larastan und Pint sauber.
Zwei Migrationen (nullable Spalten, INSTANT). N09 offen.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 14:26:49 +00:00

235 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Basiswerte Block 0
**Erhoben:** 01.09.2026 auf dem Live-System; Kohorten-Basiswert am 21.09.2026 (Abschnitt „✔ Basiswert 0.1")
**Fenster:** 01.06.2026 bis 01.09.2026 (Kohorten: bis 21.09.2026)
**Erhoben mit:** `press-releases:view-distribution`, `press-releases:rejection-rate`
Diese Werte sind der Vergleichspunkt für alles, was aus Block 1 folgt. Sie
stehen fest, bevor die erste Maßnahme live geht — genau dafür existiert
Block 0.
---
## 0.1 Aufrufzahlen
### Gesamtverteilung im Fenster
| Portal | PMs | Min | P10 | P25 | **Median** | P75 | P90 | Max | Mittelwert |
|---|---|---|---|---|---|---|---|---|---|
| Presseecho | 1436 | 1 | 43 | 72 | **98** | 164 | 212 | 412 | 118,6 |
| Businessportal24 | 1491 | 7 | 81 | 127 | **200** | 279 | 351 | 1376 | 214,4 |
Aufgeteilt nach Bestand:
| Portal | Bestand | PMs | Median |
|---|---|---|---|
| Presseecho | seit Relaunch | 1172 | 100 |
| Presseecho | Altbestand | 264 | 58 |
| Businessportal24 | seit Relaunch | 1210 | 202 |
| Businessportal24 | Altbestand | 281 | 189 |
Häufigkeitsverteilung:
| Klasse | Presseecho | Businessportal24 |
|---|---|---|
| 0–24 Aufrufe | 2 % | 0 % |
| 25–49 | 11 % | 4 % |
| 50–99 | 38 % | 11 % |
| 100–199 | 37 % | 35 % |
| 200–499 | 12 % | 48 % |
| 500–999 | 0 % | 2 % |
| 1000+ | 0 % | 0 % |
### ⚠ Der Gesamtmedian ist NICHT der Basiswert
`press_releases.hits` ist ein mitlaufender Gesamtzähler, und die Aufrufe wachsen
nach der Veröffentlichung über Wochen weiter. Gemessen auf der Dev-Kopie
(Stand 13.08.), nur Meldungen seit dem Relaunch:
| Alter der Meldung | Presseecho ⌀ | Businessportal24 ⌀ |
|---|---|---|
| 0–6 Tage | 76 | 81 |
| 7–13 Tage | 128 | 126 |
| 14–20 Tage | 169 | 179 |
| 21–27 Tage | 235 | 231 |
Nach drei Wochen ist **kein Plateau erreicht** — die Kurve steigt weiter. Damit
misst der Median über ein Drei-Monats-Fenster nicht, wie viele Aufrufe eine
Meldung bekommt, sondern wie viel eine zufällig alte Meldung bisher gesammelt
hat. Dieser Wert verschiebt sich mit der Altersmischung des Fensters; zwei
Messungen zu verschiedenen Zeitpunkten wären nicht vergleichbar.
**Vergleichbar ist nur die einzelne Alterskohorte.** Der Report gibt sie seit
dem 01.09. mit aus. Als Basiswert festzuhalten ist die Zeile
**„28–55 Tage"** je Portal — sie lässt sich in einem halben Jahr identisch
erheben.
> **Offen:** Die Kohortenwerte vom Live-System fehlen noch. Der Report ist
> nachgerüstet, aber die Zahlen oben stammen aus dem Lauf davor. Vor dem
> Livegang von Block 1 einmal nachziehen:
> `php artisan press-releases:view-distribution --json > basiswert-0.1.json`
>
> **21.09.2026:** Lauf mit `--from=2026-06-01 --to=2026-09-01 --json` auf
> dem Live-System, Datei `basiswert-0.1.json` liegt im Ordner. Auswertung
> im nächsten Abschnitt.
### Erhebung 21.09.2026 — dasselbe Fenster, drei Wochen später
Gleiches Fenster (01.06.–01.09.), gemessen am 21.09. statt am 01.09.
(`basiswert-0.1.json`):
| Portal | PMs | Median 01.09. | **Median 21.09.** | Mittelwert 21.09. | P10 / P90 |
|---|---|---|---|---|---|
| Presseecho | 1413 | 98 | **126** | 141,4 | 65 / 229 |
| Businessportal24 | 1466 | 200 | **303** | 303,5 | 149 / 409 |
Der Gesamtmedian ist in drei Wochen um 29 % (Presseecho) bzw. 52 %
(Businessportal24) gestiegen, ohne dass sich am Fenster etwas geändert hat
— genau der Effekt, vor dem der Abschnitt oben warnt. (Die PM-Zahl ist um
23 bzw. 25 gesunken: seither offline genommene Meldungen.)
Kohorten laut Datei (Alter gerechnet ab `--to` = 01.09., Zähler aber
Stand 21.09. — das **tatsächliche Alter liegt 20 Tage höher**):
| Zeile in der Datei | tatsächliches Alter | Presseecho PMs / Median | Businessportal24 PMs / Median |
|---|---|---|---|
| 0–6 Tage | 20–26 | 188 / 109 | 187 / 252 |
| 7–13 Tage | 27–33 | 146 / 108 | 154 / 294 |
| 14–20 Tage | 34–40 | 171 / 104 | 175 / 336 |
| 21–27 Tage | 41–47 | 136 / 128 | 142 / 319 |
| 28–55 Tage | 48–75 (nur ab Go-Live 20.07.) | 351 / 202 | 368 / 338 |
Lesbar ist daraus schon einiges: Businessportal24 erreicht ab etwa fünf
Wochen ein Plateau um 320–340 Aufrufe; Presseecho liegt bei rund 105–130
und springt nur in der Go-Live-Kohorte (Meldungen vom 20.07.–04.08.) auf
202 — vermutlich der Erstcrawl nach dem Umzug, kein Dauerzustand.
**Als Basiswert taugt diese Kohortenzeile trotzdem nicht:** Der Report
rechnete das Alter ab `--to`, die Zähler stehen aber immer auf heute. Mit
einem Enddatum in der Vergangenheit verschieben sich alle Kohorten um die
Verzögerung des Laufs. Seit dem 21.09.2026 zählt der Report das Alter ab
dem Stichtag der Erhebung (Feld `stichtag` in der JSON-Ausgabe); ein
`--to` in der Vergangenheit lässt die jungen Kohorten leer.
> ~~**Offen (letzter Schritt für 0.1):** einmal mit Stichtag = heute laufen lassen~~
> — erledigt, siehe nächster Abschnitt.
### ✔ Basiswert 0.1 — Kohorte „28–55 Tage", Stichtag 21.09.2026
Lauf `press-releases:view-distribution --from=2026-06-01 --json` auf dem
Live-System am 21.09.2026 (Enddatum = Stichtag, Alter und Zähler passen
zusammen; `basiswert-0.1-kohorten.json`). Nur Meldungen seit dem Relaunch.
| Portal | PMs in der Kohorte | **Median** | Mittelwert |
|---|---|---|---|
| **Presseecho** | 703 | **122** | 133,2 |
| **Businessportal24** | 727 | **314** | 318,0 |
**Das ist der Vergleichspunkt für Block 1–3.** Nächste Erhebung mit
demselben Befehl (ohne `--to`), Zeile „28–55 Tage", frühestens im
Frühjahr 2027; die Kohorte enthält dann ausschließlich Meldungen, die
unter den Maßnahmen von Block 1 veröffentlicht wurden.
Die ganze Kurve am Stichtag 21.09.2026:
| Alter | Presseecho PMs / Median | Businessportal24 PMs / Median |
|---|---|---|
| 0–6 Tage | 176 / 75 | 181 / 115 |
| 7–13 Tage | 177 / 98 | 179 / 171 |
| 14–20 Tage | 185 / 111 | 180 / 217 |
| 21–27 Tage | 191 / 109 | 190 / 253 |
| **28–55 Tage** | **703 / 122** | **727 / 314** |
| 56–90 Tage (= Go-Live-Wochen 20.07.–27.07.) | 184 / 230 | 194 / 346 |
> **Fußnote (25.09.2026, Umsetzungsaudit N15):** Die Kohorten dieser
> Erhebung waren je einen Tag schmaler als beschriftet — der Report bildete
> die Untergrenze mit `Stichtag − (Obergrenze − 1)` und ließ an jeder
> Kohortengrenze 24 Stunden aus. „28–55 Tage" umfasst hier also 27 statt
> 28 Tage, die Kohortensumme (1.616 / 1.651) liegt deshalb unter „seit
> Relaunch" (1.804 / 1.847). Der Report ist seit dem 25.09.2026 korrigiert
> (halboffene Intervalle, lückenlos). Die Werte 122 / 314 bleiben als
> Basiswert stehen — eine Neuerhebung heute träfe eine andere
> Meldungsmenge, nicht denselben Stichtag. Die nächste Erhebung läuft mit
> dem korrigierten Report; der Unterschied von einem Tag Breite ist für den
> Vergleich der Mediane unerheblich.
Lesart:
- **Businessportal24 sammelt stetig** bis etwa Woche 5 und liegt dann bei
gut 300; Meldungen bekommen dort im ersten Monat rund zweieinhalbmal so
viele Aufrufe wie auf Presseecho.
- **Presseecho ist nach zwei Wochen praktisch fertig** (111 → 109 → 122).
Die 230 der Go-Live-Kohorte sind der Erstcrawl nach dem Umzug, kein
Dauerzustand — der Ausreißer aus der ersten Datei ist damit erklärt.
- Die Fensterwerte der ersten Datei (Median 126 / 303 für 01.06.–01.09.)
lagen genau deshalb höher als der Kohortenwert: sie enthalten die
Go-Live-Wochen zu einem Drittel.
- Für E2 ändert sich nichts: keine Bodensatz-Klasse, Mittelwert nahe am
Median, Portale um den Faktor 2,5 auseinander — Rohzahlen, je Portal.
---
## 0.2 Ablehnungsquote je Quelle
| Quelle | Eingereicht | Veröffentlicht | Abgelehnt | **Quote** |
|---|---|---|---|---|
| API: connektar.de Presseverteiler (#13993) | 2428 | 2369 | 59 | **2,4 %** |
| direkt (Kundenbereich) | 13 | 13 | 0 | 0 % |
| **gesamt** | **2441** | **2382** | **59** | **2,4 %** |
### Nur eine API-Quelle
Die Roadmap nannte ursprünglich „connektar, openPR, direkt". Das war ein
Missverständnis: openPR ist kein zweiter Kanal, sondern der Presse-API-Verteiler
von connektar — also derselbe Zulauf. Bestätigt am 01.09.2026.
In den Daten: genau ein API-Token wurde je benutzt (User 13993). Der Report
gruppiert trotzdem generisch je API-Client, damit ein späterer zweiter Kunde
automatisch eine eigene Zeile bekommt.
### ⚠ Was diese Zahl für Block 1d bedeutet
59 Ablehnungen im Quartal sind eine schmale Grundlage. Grobe Abschätzung bei
n ≈ 2400 und p = 2,4 %: Der Standardfehler liegt bei rund 0,3 Prozentpunkten,
der eines Vorher-Nachher-Vergleichs bei rund 0,44.
| Angestrebte Wirkung von 1d | Erkennbar nach einem Quartal? |
|---|---|
| Quote halbiert (2,4 % → 1,2 %) | ja, rund 2,7 Standardfehler |
| Quote um 20 % gesenkt (2,4 % → 1,9 %) | nein, rund 1,1 Standardfehler |
**Folge für die Abbruchbedingung von Block 1:** „Wiedereinreichung nach
Ablehnung ist messbar" als Kriterium arbeitet mit rund 59 Fällen je Quartal.
Ein Schwellwert muss dazu passen, sonst wird Block 1 an einem Rauschen
gemessen.
---
## Was daraus für E2 folgt
**E2 — Zeigt die Absenderansicht Rohzahlen oder eine Einordnung gegen den
Portaldurchschnitt?**
**Empfehlung: Rohzahlen.** Begründung:
1. **Kein Bodensatz, den eine Einordnung kaschieren müsste.** Unter 25 Aufrufen
liegen 2 % (Presseecho) beziehungsweise 0 % (Businessportal24) der
Meldungen. Die Befürchtung aus der Roadmap — „fällt die Verteilung schwach
aus, werden Rohzahlen zum Nachteil" — tritt nicht ein.
2. **Die Verteilungen sind nahezu symmetrisch.** Mittelwert zu Median: 118,6 zu
98 und 214,4 zu 200. Es gibt keine Handvoll Ausreißer, die den Schnitt nach
oben zieht und die Mehrheit darunter zurücklässt.
3. **Eine Einordnung gegen den Portaldurchschnitt wäre sogar falsch.** Wegen
der Wachstumskurve oben vergleicht sie eine zwei Tage alte Meldung gegen
einen Schnitt, der drei Monate alte Meldungen enthält — jede frische
Veröffentlichung sähe wie ein Misserfolg aus. Eine Einordnung müsste
zwingend altersgleich sein, und dann ist sie deutlich aufwendiger als der
Nutzen rechtfertigt.
4. **Ein portalübergreifender Durchschnitt verbietet sich ohnehin.** Die
Mediane unterscheiden sich um den Faktor zwei (98 gegenüber 200). Jede
Einordnung müsste je Portal geführt werden.
Wenn später doch eine Einordnung gewünscht ist, dann als **Perzentil-Angabe
innerhalb der eigenen Alterskohorte** („liegt über 60 % der Meldungen
vergleichbaren Alters auf diesem Portal") — nicht als Vergleich gegen einen
Durchschnitt. Die Kohortenlogik dafür steht bereits im Report.