feat(queue): Rate-Limit und Ruhezeiten als Gesetz im Worker-Loop

Das Anti-Spam-Gesetz wird an den Loop verwired (die Rate-Limiter-Struktur
aus Task 04): Jede gestartete Ansage bucht das Fenster — low über dem
Budget verfällt (beim Eintritt, Admission nennt den Grund für die
202-Antwort), normal parkt bis zum Slot (Slot-Wecker broadcastet die
Cond, geparkte bleiben in der Queue und in /status sichtbar), high darf
mit Burst-Recht verstoßen, now bricht bewusst aus Rate-Limit UND
Ruhezeit aus und bucht trotzdem ein neues Fenster. Ruhezeiten
(quiet.go: lokales Fenster HH:MM-HH:MM über Mitternacht) verwerfen still
oder ersetzen durch Toast — gilt auch für high. Rangordnung: mute (API)
> now > Ruhezeit > Rate-Limit. Enqueue liefert Admission statt nur ID;
LawState für /status. Lock-Ordnung Queue → RateLimiter bleibt gewahrt.
This commit is contained in:
m3ta-chiron committed 2026-10-18 17:40:41 +02:00
1 parent b20e6dd319
commit 5385a4b87d
6 files changed
+785 -81

No files matched your search

+5 -3
View File
@@ -1,7 +1,9 @@
// Package queue implementiert die Ansage-Queue des Daemons: serialisierte
// Abarbeitung (eine Ansage gleichzeitig), Prioritäten (high > normal > low,
// FIFO je Level), now-Items springen vor, dazu den persistenten Mute-State
// (Datei mute im Config-Dir) und die Rate-Limit-Struktur. Das Rate-Limit
// ist als Struktur vorhanden, aber noch nicht angebunden — Wiring und
// Ruhezeiten folgen in Task 05.
// (Datei mute im Config-Dir). Seit Task 05 unter dem Anti-Spam-Gesetz
// (rate.go/quiet.go): Rate-Limit — jede gestartete Ansage bucht das Fenster;
// low über dem Budget verfällt, normal parkt bis zum Slot, high darf mit
// Burst-Recht verstoßen — und Ruhezeiten, die still verwerfen oder durch
// einen Toast ersetzen. now:true bricht bewusst aus beiden aus.
package queue