POST /speak antwortet bei Verwurf dokumentiert mit 202 {id:"",
discarded:"rate_limit"|"quiet_hours"} (+ toast:true im Toast-Modus)
— analog zum Mute-Muster, kein Fehler. GET /status ergänzt additiv
rate_limit {interval, allow_high_burst, next_slot} und quiet_hours
{window, active, mode, until} (RFC3339 bzw. null). talkd verwired die
Gesetze aus der Config und loggt sie beim Start. Die CLI meldet
'discarded: <grund>' plain (wie muted) und zeigt in talk status die
Zeilen rate-limit/ruhezeit mit Slot bzw. Fenster-Ende.
- HTTP-Server nur auf 127.0.0.1 (Port aus config server.port/TALK_PORT),
klarer Fehler wenn der Port belegt ist
- Ansagen laufen über die unveränderte Provider-Kette (pro Item gebaut,
Pin/Voice je Anfrage); /status meldet den aktiven Provider
- SIGINT/SIGTERM: erst HTTP dicht, dann Queue schließen (laufende Ansage
wird abgebrochen, Worker-Exit wird abgewartet)
- Mute ohne Config-Dir: dokumentierte Warnung statt Absturz