# Runbook — Rollback sigur al feature-ului "Auto send / coada tinuta" (PRD 5.19) Procedura operationala pentru cazul in care trebuie sa dai **revert pe cod** care atinge `claim_one` / logica `held` din PRD 5.19. ## De ce e periculos revertul (Riscul R4) Feature-ul 5.19 tine randuri manual: un rand `queued AND held=1` NU pleaca la RAR pentru ca `claim_one` (worker) filtreaza cu `AND held=0`. Daca dai revert pe codul worker-ului **DUPA** ce baza contine deja randuri cu `held=1`, worker-ul revenit **pierde filtrul** `AND held=0` -> ar prelua si trimite la RAR TOATE randurile tinute. **RAR FINALIZATA e IREVERSIBILA** (fara anulare prin API) — declari real, definitiv, randuri care fusesera puse deoparte intentionat. ## Procedura (copy-paste, in ordine) ### 1. INAINTE de orice revert — carantineaza randurile tinute Pe masina gateway, cu acelasi mediu ca aplicatia (acelasi `AUTOPASS_DB_PATH`): ```bash # Verifica intai cate randuri sunt tinute (nu scrie nimic): python3 -m tools.carantina_held --dry-run # Apoi carantineaza efectiv: python3 -m tools.carantina_held ``` Optional, opreste worker-ul in timp ce faci operatia, ca sa nu concureze: ```bash ./start.sh stop ``` ### 2. Ce face carantina `tools/carantina_held.py` ruleaza, atomic: ```sql UPDATE submissions SET status='error', rar_error='ROLLBACK_QUARANTINE', updated_at=datetime('now') WHERE held=1 AND status='queued'; ``` Adica scoate randurile tinute din coada (`queued` -> `error`) cu mesajul `ROLLBACK_QUARANTINE`. Un worker fara filtrul `held` **nu mai poate prelua** un rand `error` -> randurile NU pleaca la RAR pe timpul revertului. `sending` / `sent` NU se ating (FINALIZATA e terminal la RAR). Tool-ul afiseaza cate randuri a carantinat. ### 3. DUPA revert (sau dupa ce revii pe codul 5.19) — reactiveaza randurile Randurile carantinate sunt acum `error` / `ROLLBACK_QUARANTINE`. Ele NU sunt trimise si NU se re-incearca automat. Cand vrei sa le declari la RAR, **repune-le manual din dashboard** (butonul de repunere pe rand -> revine `queued`) si trimite-le controlat (per rand sau "Trimite toate"), dupa ce te-ai asigurat ca filtrul `held` este din nou in cod (revenire pe 5.19) sau ca trimiterea lor e intentionata. > Nu exista un "un-quarantine" automat: reactivarea e deliberat manuala, ca sa nu > repui accidental in coada exact randurile pe care le protejai.