fix(5.19): corectii UX/retentie held (findings #2-#6 /code-review high)

#2 Filtrul "doar tinute" (held=1) devine persistent: hidden #f-held in
   #filtre-trimiteri sincronizat prin OOB din _submissions.html + paginare
   pastreaza held=1; chip "Doar tinute manual / Arata tot" ca off-switch.
   Param `held` schimbat la str (held= gol nu mai da 422 la coercion).
#3 Banner bulk "Trimite toate (N)" extras in _bulk_held_banner.html si
   re-randat prin OOB (#bulk-held-banner-wrap) la fiecare reincarcare a listei
   -> nu mai ramane stale dupa eliberari (count revine la 0).
#4 tools/carantina_held seteaza purge_after (blocked_retention_days) pe randurile
   carantinate -> PII nu mai sta la nesfarsit (purge_expired le poate sterge).
#5 Panoul de detaliu marcheaza randul tinut (eticheta amber) si ofera buton
   "Trimite acum la RAR" (paritate cu randul din lista).
#6 expire_held seteaza purge_after=now-1s -> randul expirat e purjabil in ACELASI
   ciclu (purge_expired foloseste comparatie stricta), nu la ciclul urmator.

Teste noi: stickiness held + banner OOB + detaliu buton (test_web_auto_send),
purge_after carantina, purge acelasi-ciclu (test_worker_held). 1541 passed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-07-06 11:19:00 +00:00
parent 789e3f54be
commit eade702a52
10 changed files with 242 additions and 51 deletions

View File

@@ -150,6 +150,29 @@
</div>
{% endif %}
{# === Rand tinut manual (queued AND held=1) — afordanta de eliberare (US-005/US-010, 5.19).
Buton dedicat „Trimite acum": elibereaza randul (held 1->0); worker-ul il preia la
urmatorul poll. Reincarca lista + inchide modalul. Confirmare 1-linie (ireversibil). === #}
{% if tinut %}
<div class="detaliu-actiuni-jos" style="margin-top:14px; padding-top:12px; border-top:1px solid var(--line);">
<p class="muted" style="margin:0 0 8px; font-size:12.5px;">
Prezentare tinuta manual — nu a plecat la RAR. Elibereaz-o pentru trimitere.
</p>
<form hx-post="/trimitere/{{ id }}/trimite-acum"
hx-target="#submissions-wrap" hx-swap="innerHTML"
hx-confirm="Trimit aceasta prezentare la RAR? Declararea este ireversibila (FINALIZATA)."
hx-on::after-request="document.getElementById('modal-detaliu').hidden=true"
hx-disabled-elt="find button" style="margin:0;">
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
<button type="submit"
style="border:1px solid var(--accent); background:var(--accent); color:#fff;
font-weight:600; padding:6px 16px; border-radius:6px; cursor:pointer;">
Trimite acum la RAR
</button>
</form>
</div>
{% endif %}
{# === Actiuni de jos — primar Re-pune (doar error) + Sterge pe RAND SEPARAT === #}
{% if status == 'error' or gestionabil %}
<div class="detaliu-actiuni-jos" style="margin-top:14px; padding-top:12px; border-top:1px solid var(--line);">