- K-01: publish-scheduled filtert manual_review_required_at; publish() prüft für ki/scheduler unter der Sperre (ManualReviewRequiredException) - K-02: Kontingent- und Bildsperre sind fachliche Ausgänge (Exit 0, einmaliger Verlaufseintrag); KI-Job ohne Retry bei Bildsperre - O06: Kandidaten per Cursor (scheduled_at, id), Limit zählt bearbeitete Meldungen, Blockaden nur ein Scan-Budget - K-05: KI-Job lädt vor dem Routing neu, überholter Status ohne Retry; backoff - K-06: Admin-Aktionen mit Permission-Prüfung und Fehlermeldung statt 500 - K-09: withoutOverlapping() mit kurzer Sperrdauer, purge-events 03:50, neuer Wochenlauf press-release-images:sweep-orphan-originals (So 04:45) - E9: NEWSLETTER_SENDING_ENABLED (Standard aus) sperrt Start, Resume und Job - OPT-9: ExpireGrandfathering prüft die Queue-Voraussetzung aus E18 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
19 lines
667 B
PHP
19 lines
667 B
PHP
<?php
|
|
|
|
namespace App\Services\PressRelease;
|
|
|
|
use RuntimeException;
|
|
|
|
/**
|
|
* Automatische Veröffentlichung (`ki`, `scheduler`) einer Meldung, die auf
|
|
* eine menschliche Entscheidung wartet (E3, `manual_review_required_at`) —
|
|
* Umsetzungsaudit 29.09.2026, K-01. Fachlicher Ausgang, kein Fehler: Die
|
|
* Meldung bleibt unverändert in `review`, nur ein Admin gibt sie frei.
|
|
*/
|
|
class ManualReviewRequiredException extends RuntimeException
|
|
{
|
|
public function __construct(public readonly int $pressReleaseId)
|
|
{
|
|
parent::__construct(sprintf('PM #%d wartet auf eine manuelle Prüfung und wird nicht automatisch veröffentlicht.', $pressReleaseId));
|
|
}
|
|
}
|