diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index ca21cf3..5872ed5 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -48,7 +48,7 @@ Reguli de contract (detalii in `docs/api-rar-contract.md`): `FINALIZATA` e termi > PRD-uri (`docs/prd/prd-X.Y-*.md`), linkate in coloana Detalii. La fiecare livrabila terminata: > schimba statusul + data + linkul PRD si actualizeaza "Ultima actualizare". -**Ultima actualizare**: 2026-06-29 — 5.19 PLAN (bifa "Trimite automat la RAR" + coada tinuta/eliberare manuala). PRD prin `/prd` + `/autoplan` (CEO/Design/Eng/DX, voce unica — Codex la plafon pana 2026-07-18). Poarta premise: scop AMBELE (operational + testare), default OFF pastrat "pana devine stabil" (decizie user peste avertismentul de conformitate L.142 -> atenuari OBLIGATORII). Design: per-cont `accounts.auto_send_enabled` (default 0) + per-rand `submissions.held`; snapshot la ingestie la TOATE ~8 situri `status='queued'` printr-un `held_for_account()` (Eng a prins bug real: reactivarea `router.py:237` ocolea Auto OFF); `claim_one AND held=0`; rute web `/auto-send` (toggle, OFF->ON elibereaza in bloc cu confirmare tipata), `/trimite-toate`, `/trimitere/{id}/trimite-acum`. Crescut 6->10 stories: US-007 banner+`/metrics` coada imbatranita, US-008 retentie/purge held (gaura GDPR/L.142), US-009 fixturi teste (id=1 e schema-seeded) + audit, US-010 onestitate API (camp `held` pe `SubmissionResult`+GET, invariant 5.7). 26 taskuri (14 P1). Taste rezolvate cu user: eticheta "Trimite automat la RAR" (coliziune cu "Trimitere automata" worker); testarea sigura (rar_env/`/valideaza`) NEangajata ("doar tinut") -> TODOS. PRD: [prd-5.19](prd/prd-5.19-auto-send-manual-coada.md). NEIMPLEMENTAT. | ISTORIC: 2026-06-29 — 5.18 LIVRAT + VERIFY PASS + CLOSE (corpus k-NN exemple etichetate, pe `feat/5.18-corpus-knn-exemple-etichetate`). Cele 7 stories (US-001..007, inclusiv badge sursa) implementate TDD; seed real **17181 operatii** produs cu subagenti Haiku (blocantul GPU LM Studio rezolvat fara GPU — abatere documentata de la D4, validare Haiku>>Groq la dezacorduri); SILVER populat in productie (era gol); embeddings k-NN pe corpusul etichetat (nu pe cele 18 categorii generice); pre-filtru NUL + precedenta NUL>GOLD>exact>k-NN; badge `confirmat`/`similar`/`non-operatie` pe sugestia fuzzy in editor. VERIFY context curat **1392 passed, 1 deselected (live)** + smoke seeder (17181/NUL=2200/idempotent) + E2E render live badge-uri. `/code-review high` (3 finder x 8 unghiuri): runtime curat, invariant #13 intact, 3 findings cosmetice REPARATE+lock-uite. Commit-uri `756f777`+`308fee6`. PRD: [prd-5.18](prd/prd-5.18-corpus-knn-exemple-etichetate.md). | ISTORIC: 2026-06-29 — 5.16 + 5.17 LIVRAT + VERIFY PASS + COMMIT (`c9f9a1c` pe `feat/5.16-5.17-design-tiers`, nepush-uit). Doua PRD-uri in paralel printr-un agent team (lead orchestreaza, NU scrie cod; teammates Sonnet pe valuri cu fisiere disjuncte; `base.html`/`routes.py`/`_status.html`/`landing.html` serializate ca fisiere fierbinti), 5 valuri / 8 lane-uri: W1-A model 5.17 ∥ W1-B bug-fix chips 5.16 → W2 base.html (fonturi system-stack + scala `--fs-*` + dot RAR + antet ROMFAST + /login brandeit + selector tema + fix Renunta) → W3 enforcement 5.17 ∥ W4-B landing copy ∥ W4-C wizard import → W4-A UI plan → W5 verify. **5.16**: system font stack (zero `@font-face`/`/static/fonts/`, IBM Plex scos — decizie user), scala uniforma in tokeni, contoare separate desktop + bara compacta mobil, antet branded + nume service + badge plan, cele 4 bug-uri chips reparate (picker cod+denumire, add_extra mod operatii, cod ales salvat fara „+", Renunta inchide via `closest`), wizard colapsat + landing Autentificare->/login. **5.17**: `accounts.tier`+`trial_until` (migrare aditiva defensiva) + `app/plans.py` sursa unica (`FREE_MONTHLY_LIMIT=60`, `effective_tier` cu `now` injectabil, `monthly_usage`, `CONSUMED_STATUSES`), trial Pro 30z la creare, CLI `set-tier`, enforcement DUR INAINTE de `build_key` (volum 60 + gate API Pro+, erori 3-niveluri `PLAN_LIMITA_LUNARA`/`PLAN_FARA_API` + `log_event`; `valideaza`/`nomenclator` permise; downgrade lazy; flag `AUTOPASS_ENFORCE_PLANS` kill-switch), UI plan (badge antet + linie burger + consum N/60 + warn>=80% + 6 stari + banner one-time trial->Gratuit + pagina Cont). Regresie autoritara **1380 passed, 0 failed, 1 deselected (live)**; E2E browser real (Playwright 390/1280, logat): /login brandeit, dashboard antet+contoare+dot RAR, burger cu separatoare + RAR + plan. **1 defect prins DOAR de E2E** (invizibil la TestClient): contoare duplicate pe 390px — inline `style="display:flex"` pe `.contoare-desktop` batea `@media` -> mutat in CSS + test-lock. Backend trimitere (worker/masina stari/idempotenta/contract RAR) + `mapping`/`validation` NEATINS. **Igiena commit (decizie user): doar 5.16/5.17** — lucrul paralel 5.18 (corpus kNN: `mapping.py`/`embeddings.py`/`operatii_seed.py`/`tools/mapare-llm/*`/`prd-5.18` + teste corpus, plus `config.py`/`db.py` partial si `conftest.py`/`test_mapare_integrare_l14.py` cuplate) lasat NECOMIS; separare verificata prin worktree izolat la HEAD (booteaza + 69 teste verzi fara niciun fisier 5.18). PRD: [prd-5.16](prd/prd-5.16-tipografie-uniforma-bugfix-editare.md), [prd-5.17](prd/prd-5.17-tipuri-cont-planuri-trial.md). | ISTORIC: 2026-06-28 — 5.16 + 5.17 PLAN: autoplan review rulat in paralel pe ambele PRD-uri (2 agenti Opus; faze CEO/Design/Eng pe 5.16, CEO/Design/Eng/DX pe 5.17), single-voice (Codex la plafon de utilizare pana 2026-07-18, fara consens cross-model). Portile umane inchise cu user: **5.16** User Challenge -> system-ui (scoate IBM Plex self-hostat; risc per-OS + design slop acceptat constient), pre-ship teste Eng E1/E3; **5.17** User Challenge -> enforcement DUR direct de la deploy (CRITICAL GAP migrare legacy = MOOT, pre-productie/fara conturi legacy) + flag `AUTOPASS_ENFORCE_PLANS` optional + 3 taste decisions rezolvate (limita 60 = constanta config; banner one-time trial->Gratuit; `valideaza` dry-run permis pe orice plan). Ambele: 0 decizii deschise, gata de implementare; audit trail + GSTACK REVIEW REPORT scrise in fisierele PRD; niciun commit/push. | ISTORIC: 2026-06-28 — 5.15 + 5.14 IMPLEMENTATE + VERIFY PASS + CLOSE (asteapta confirmare commit). Doua PRD-uri in paralel pe `feat/5.15-propagare-design` (5.15 = propagare design + dashboard editare, 12 stories; 5.14 = mapare LLM distilata, 6 stories). `/code-review high` -> 8 buguri reale reparate TDD (modal rand slim, `/repune` trunchia prestatii, picker chips gol pe re-render, obs re-derivat dupa stergere, GOLD poluat cu cod_op_service, typo `nume_prestatie`, bucketare timp `+3h` gresita iarna -> `localtime`+TZ). Decizie user la CLOSE: **embeddings wire-uit functional** (corpus din nomenclator, gated `AUTOPASS_EMBEDDINGS_ENABLED` default off; era „mort dar scump") + corectie marime model ~50MB->~230MB (estimare PRD gresita). Regresie **1256 passed, 1 deselected (live)**. Backend trimitere (worker/masina stari/idempotenta/contract RAR) NEATINS; embeddings/shared store = suggestion-only (nu intra in enqueue). PRD: [prd-5.15](prd/prd-5.15-propagare-design-dashboard-editare.md), [prd-5.14](prd/prd-5.14-mapare-llm-distilata.md). | ISTORIC: 2026-06-27 — 5.13 IMPLEMENTAT + VERIFY PASS (asteapta confirmare commit). Responsive compact (mobil/tableta) + sistem de butoane + design.md, prin agent team (lead orchestreaza, NU scrie cod; teammates Sonnet pe valuri cu fisiere disjuncte; `base.html` serializat ca fisier fierbinte). Wave 0 BLOCANT (cauza probabila a revert-ului anterior, prinsa de eng review): cele 2 teste responsive feliau ferestre fixe `[idx:idx+5000]` de la PRIMUL `@media (max-width:767px)` -> rescrierea cardului impingea regulile (`min-height:0`/`100vw`) peste fereastra si pica fals; refacut sa ancoreze pe un SENTINEL CSS (`SENTINEL-TESTE-MOBIL`) + slice pana la sfarsitul `` (ar fi terminat elementul `` (ar fi terminat elementul `