fix(discord-bridge): plafonul de cost e optional (COST_CAP_USD_DAY=off)

Costul raportat de CLI e pretul echivalent la API; pe abonament nu se
factureaza, deci plafonul zilnic oprea puntea fara motiv (5.71 / 5.00 USD).

- limits.parse_cap(): `off`/`none`/`nelimitat`/`0`/gol/gunoi => fara plafon
- stopped()/record_cost() nu mai opresc si nu mai alerteaza cand e dezactivat
- implicit devine `off`; /status arata „(fara plafon)"
- dashboard: /api/status si doctor nu mai crapa pe valoare ne-numerica
- README + ops/env.example explica de ce ramane off pe abonament

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B29CApsP1JkSdjYaGaHpE7
This commit is contained in:
Claude Agent
2026-08-30 21:02:43 +00:00
parent b14e7bc50a
commit feb31eaabe
7 changed files with 76 additions and 15 deletions

View File

@@ -78,6 +78,27 @@ def test_plafon_de_cost_opreste_botul(store):
lim.admit("u1")
def test_plafonul_off_nu_opreste_nimic(store, state_dir):
import config
(state_dir / "env").write_text("COST_CAP_USD_DAY=off\n")
config.reload(state_dir)
alerte = []
lim = L.Limits(store, alerter=lambda *a, **k: alerte.append(a))
assert lim.cost_cap == 0.0 and not lim.cap_enabled
lim.record_cost(99.0, "1")
assert not lim.stopped() and lim.cost_remaining() == float("inf")
lim.admit("u1") # nu ridica CostCapReached
assert alerte == []
@pytest.mark.parametrize("raw, asteptat", [
("off", 0.0), ("", 0.0), ("nelimitat", 0.0), ("0", 0.0), ("-3", 0.0),
("5.00", 5.0), (" 2.5 ", 2.5), ("gunoi", 0.0), (None, 0.0),
])
def test_parse_cap(raw, asteptat):
assert L.parse_cap(raw, 0.0) == pytest.approx(asteptat)
def test_plafon_alerteaza_o_singura_data(store):
alerte = []
lim = mkl(store, cost_cap=0.5, alerter=lambda *a, **k: alerte.append(a))