Trei lucruri observate in logurile de productie dupa restartul precedent.
1. Ecoul propriilor mesaje umplea bot.log cu WARNING. Propriile mesaje au si
ele `author.bot == True`, iar verificarea generica de bot venea INAINTEA
celei pe `self_id` — deci raspunsurile botului se jurnalizau ca "bot
strain", la fiecare mesaj. Verificarea pe `self_id` trece prima (motivul e
acum precis), iar refuzurile de rutina — propriile mesaje si ceilalti boti —
merg la DEBUG. Guild / canal / utilizator strain si webhook raman WARNING:
alea chiar sunt semnal de securitate si erau inecate in zgomot.
2. `tool_progress` (heartbeat la 30s cat timp o unealta ruleaza) devine
eveniment `ToolProgress`. Mesajul live arata acum "⏳ ruleaza de 2m30s" sub
unealta curenta — singurul semn ca un tur lung lucreaza si nu a inghetat.
3. `rate_limit_event` devine eveniment `RateLimit` si apare in `/status` la
randul `utilizare`. Cum nu exista plafon de cost (abonament, nu API),
fereastra de utilizare e singura limita reala; se avertizeaza in log o data
per schimbare de stare, nu la fiecare eveniment.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B29CApsP1JkSdjYaGaHpE7
Implementeaza planul claude-master-plan-discord-bridge-20260830 (15 taskuri,
3 lane-uri paralele) — un bot subtire discord.py peste CLI-ul `claude`, cu
proces persistent per fir alimentat pe stdin cu --input-format stream-json.
Nucleu: runner (proces persistent + reaper 20min + respawn --resume), stream
(parser tolerant), session_store (scriere atomica, lock per fir, detectare PID
reuse, recovery), limits (max 4 procese, timeout tur, rate per user, plafon cost
pe zi), render (un loop de editare per canal, interval adaptiv).
Adaptor: allowlist guild/canal/user fail-closed cu respingerea webhook-urilor,
comenzi !new/!cd/!model/!status/!stop/!cleanup, cost si model in subsolul
fiecarui raspuns. Mesajul sosit in timpul unui tur devine steering, nu tur nou.
Securitate: hook PreToolUse fail-closed care cere confirmare in Discord pentru
operatiuni ireversibile, wrapper `infra` cu lista explicita de hosturi. Deny
rules raman strat cosmetic, nu bariera (verificat: /usr/bin/ssh trece pe langa).
Ops: alerte email pe conventia repo-ului, !cleanup pentru orfani, unit systemd
user cu KillMode=control-group si limite de memorie, install.sh idempotent.
Verificat: 275 teste fara retea/Discord/API (10.8s), identic cu si fara
discord.py instalat; e2e pe CLI real confirma steering-ul mid-tur (mesaj la 6s
intr-un tool call de 25s schimba raspunsul final).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B29CApsP1JkSdjYaGaHpE7