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.
10 lines
612 B
Go
10 lines
612 B
Go
// 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). 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
|