{ "projectName": "autopass-5.9-ux-corectie-modal-mobil", "branchName": "ralph/5.9-ux-corectie-modal-mobil", "description": "Curatenie UX pe ecranul Trimiteri, fara schimbare a fluxului de trimitere catre RAR: detaliul+corectia trec intr-un MODAL global (in afara zonei de poll de 15s), editare in-place fara dublarea valorilor, butoane consolidate, fara chevron, eticheta umana scurta sub pill + cod brut in modal, cod RAR simplu. Plus design responsive/mobil (<768px) pentru toate paginile dashboard. Backend (worker, masina de stari, contract RAR, idempotenta, mapare) NEATINS logic; rutele isi pastreaza semnatura, se schimba doar hx-target si prezentarea. APLICA REVIZIILE OBLIGATORII R1-R12 din raportul AUTOPLAN (au prioritate unde difera de AC original). Sursa: docs/prd/prd-5.9-ux-corectie-modal-mobil.md.", "techStack": { "type": "python", "commands": { "start": "uvicorn app.main:app --reload --port 8010", "build": "", "lint": "", "typecheck": "", "test": "python3 -m pytest -q -m 'not live'" }, "port": 8010 }, "userStories": [ { "id": "US-001", "title": "Eticheta umana scurta pe randul de afisare + cod brut disponibil pentru modal (R1)", "description": "Ca dezvoltator vreau ca randul tabelului sa expuna o eticheta umana scurta a problemei (NU codul brut de catalog) pentru ca sub pill sa apara un text prietenos, consistent cu investitia 5.4 in erori umane.", "priority": 10, "acceptanceCriteria": [ "R1 OVERRIDE: NU se adauga helper nou `cod_eroare_din` care re-parseaza acelasi JSON (DRY). Se reutilizeaza `motiv_uman`/`eticheta_scurta` din `app/web/labels.py` deja existente.", "`_submission_row_view` (`app/web/routes.py`) expune o eticheta umana scurta pe rand reutilizand `motiv` (deja intors nerandat) / `eticheta_scurta` — fara al 3-lea decoder al `rar_error`.", "Eticheta este sir gol pe stari fara problema (`queued/sending/sent`) si ne-goala pe `error`/`needs_data`/`needs_mapping`.", "Codul BRUT de catalog (ex. `RAR_EROARE_SERVER`, `COD_NEMAPAT`) ramane disponibil DOAR pentru modal, derivat din `parse_erori(...)[0]['cod']` (app/errors.py) — nu se pune pe rand.", "Helperele sunt defensive la `rar_error` lipsa/JSON invalid (intorc sir gol, nu ridica).", "`prez`, `motiv`, `stare_*` raman neschimbate (aditiv/non-regresie).", "Teste in `tests/test_web_submissions.py`: `test_eticheta_umana_sub_pill` (R1 rename), eticheta prezenta pe error/needs_mapping, goala pe rand ok.", "`python3 -m pytest tests/test_web_submissions.py -q` trece." ], "tags": [ "backend" ], "dependsOn": [], "requiresBrowserCheck": false, "requiresDesignReview": false, "passes": true, "failed": false, "blocked": false, "retries": 0, "failureReason": "", "notes": "Atins: app/web/routes.py (_eticheta_problema + _STARI_CU_PROBLEMA, camp eticheta_problema in _submission_row_view, motiv hoisted), app/web/labels.py (parse_erori expune `cod` brut aditiv pe ramurile imbogatite), tests/test_web_submissions.py (5 teste US-001). gates: tests PASS (819 suite, 22 fisier), /review (backend) PASS (no issues — DRY respectat, defensiv, aditiv non-regresie)." }, { "id": "US-003", "title": "Component modal reutilizabil (overlay, focus-trap, a11y, inchidere pe succes)", "description": "Ca operator vreau ca detaliul sa apara intr-o fereastra modala clar delimitata, in afara zonei de poll, pentru ca sa nu mai confund marginea cu tabelul si sa nu mi se mai inchida formularul la refresh.", "priority": 15, "acceptanceCriteria": [ "Container modal global `