Inlocuieste cele 3 controale de asociere cod RAR cu un singur rand de chips + un singur select care adauga instant la change. Stare = un hidden chips_state JSON versionat; post_form_chips redus la 2 actiuni (add/remove). Optgroup Sugestii (fuzzy/k-NN) + optiune "Nu se declara la RAR" in select, cu tinta implicita evidentiata si placeholder care o numeste. exclus persistat prin payload_json (treapta noua de precedenta in resolve_prestatii, round-trip complet). Siguranta: itemii exclusi sunt scosi din payload la momentul trimiterii (worker split_prestatii_excluse inainte de build_rar_payload + filtru defensiv), ca sa nu ajunga NICIODATA la RAR ca codPrestatie:null. Suita: 1680 passed, 1 skipped. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
141 lines
9.8 KiB
Markdown
141 lines
9.8 KiB
Markdown
# TODOS
|
||
|
||
Elemente deferate din review-uri. Negrupte de un PRD curent; de promovat cand devin prioritare.
|
||
|
||
## Din /autoplan PRD 5.23 (2026-07-07)
|
||
|
||
- [ ] **Bulk in preview: "aplica maparea la toate cele N randuri identice"** — o decizie de mapare
|
||
repetata per rand e adevaratul consumator de timp; editorul unificat nu o rezolva. Ce: dupa o
|
||
mapare in preview/modal, ofera aplicarea la toate randurile din batch cu aceeasi operatie
|
||
nemapata. De ce: reduce deschiderile de modal (drumul 10x — vocea externa CEO). Pro: taie direct
|
||
timpul de corectie pe importuri mari. Contra: atinge panoul de preview (non-goal in 5.23).
|
||
Context: `reresolve_account` exista deja pentru re-rezolvare dupa `save_mapping` — de verificat
|
||
daca nu acopera deja cazul la nivel de cont; daca da, TODO-ul devine doar UI de confirmare.
|
||
Effort: M→S (CC). Prioritate: P2. Depinde de: 5.23 livrat.
|
||
- [ ] **Metrici de baza pentru bucla de mapare** — cate deschideri de modal per import, % randuri
|
||
auto-rezolvate, % sugestii acceptate. De ce: fara ele nu stim daca editorul (5.23) sau motorul
|
||
(5.14/5.18) merita urmatoarea investitie. Pro: decizie de produs pe date. Contra: telemetrie
|
||
noua. Context: contorizare in `/form-chips` + import commit; expunere in /metrics existent.
|
||
Effort: S. Prioritate: P3.
|
||
- [ ] **A11y touch targets pe chips (× sub 44px)** — UI-ul compact 11-12px face tintele de atins
|
||
mici pe mobil. De ce: operare de pe telefon in service. Pro: mai putine mis-tap-uri. Contra:
|
||
chips mai inalti = mai putine pe rand. Context: decizie 5.23 = consecventa cu designul compact
|
||
existent; de revizitat la un audit a11y global. Effort: S. Prioritate: P3.
|
||
|
||
## Din executie + code-review 5.23 (2026-07-08)
|
||
|
||
- [ ] **Curata calea legacy `/trimitere/{id}/mapeaza`** — formular per-operatie separat, cu propriile
|
||
"Sugestii:", care coexista cu editorul unificat de chips. Nu interfereaza (dispare cand tinta e
|
||
setata), dar e cod mort de UX vechi. Context: semnalat de worker la fix-ul de randare initiala.
|
||
Effort: S. Prioritate: P3.
|
||
- [ ] **Autocomplete/cautare in selectul de coduri RAR** — non-goal explicit in 5.23 (select nativ
|
||
pastrat). De reevaluat daca nomenclatorul creste peste ~18 coduri fixe. Effort: M. Prioritate: P3.
|
||
- [ ] **Race buton Salveaza in timpul unui `/form-chips` in zbor** — sectiunea chips e inerta pe
|
||
`.htmx-request`, dar butonul Salveaza al formularului parinte nu e blocat; un submit foarte rapid
|
||
ar putea trimite un `chips_state` neactualizat. Improbabil (dedup + fereastra mica). Context:
|
||
finding PLAUSIBLE din code-review. Effort: S. Prioritate: P3.
|
||
- [ ] **Conflict mapare din tab Mapari vs item marcat `exclus` din chips** — un item marcat exclus
|
||
explicit din editor domina o mapare salvata ulterior din tab-ul Mapari (`resolve_prestatii`
|
||
precedenta item-exclus > mapare cont); utilizatorul poate sa nu inteleaga de ce maparea "nu tine".
|
||
De clarificat semantica sau de adaugat un semnal in UI. Context: finding PLAUSIBLE din code-review.
|
||
Effort: S. Prioritate: P3.
|
||
|
||
## Din /autoplan PRD 5.21 (2026-07-06)
|
||
|
||
- [ ] **CLI administrare cache embeddings (`python3 -m tools.embcache stats|clear|rebuild`)** — v1 foloseste
|
||
`DELETE FROM embedding_cache` manual (decizie Open Q1). De construit cand operarea manuala devine
|
||
frecventa sau cand apare al doilea operator. Effort: S. (CEO, low.)
|
||
- [ ] **Precompute vectori la build (artefact in imaginea Docker)** — modelul e pinned si corpusul seed e
|
||
comis, deci vectorii pot fi precalculati la build; ar face si PRIMUL start pe volum proaspat ieftin
|
||
(azi doar al doilea beneficiaza). Effort: M (pipeline build + fallback la runtime). (Outside voice CEO, medium.)
|
||
- [ ] **Graceful reload / zero-downtime restart** — procesul vechi serveste pana cel nou e cald; ar elimina
|
||
COMPLET fereastra post-restart, inclusiv incarcarea modelului (~10-20s) pe care cache-ul n-o poate evita.
|
||
Infra (Dokploy/compose), nu app. Effort: M. (Outside voice CEO, medium.)
|
||
- [ ] **Latenta per-query `suggest_nearest` (cosine pur Python)** — bucla Python peste 17k x 384 la fiecare
|
||
cautare; de MASURAT intai; daca >100ms, matrice numpy + dot product (efort mic). Designul curent e validat
|
||
pana la ~50k randuri de corpus (prag documentat in PRD 5.21 A12). (Eng F5, medium.)
|
||
|
||
## Din hardening 80/20 (/autoplan, 2026-07-03)
|
||
|
||
- [ ] **Traefik IP-allowlist pe /v1 + /metrics in fereastra de lansare** (T4) — cu zero clienti API,
|
||
suprafata anonima de ingestie n-are apelant legitim extern (ROAAUTO propriu vine de la IP cunoscut).
|
||
O regula Traefik declarativa (allowlist IP ROAAUTO + admin) elimina complet ingestia anonima in
|
||
perioada cea mai riscanta. Deferat: P0-1 (auth obligatoriu pe /v1) + T3 (startup guard) acopera deja
|
||
gaura principala. De activat cand: primesc trafic de scanare pe /v1 SAU inainte de expunere cu presa.
|
||
Effort: S (config Traefik). Depinde de: acces la config Traefik in Dokploy.
|
||
|
||
## Din PRD 5.12 (2026-06-26)
|
||
|
||
- [ ] **Mai multi utilizatori per firma (flux de invitatie / alaturare la cont)** — azi CUI e unic, deci
|
||
al doilea email care vrea pe aceeasi firma e respins la signup (nu exista flux de „alatura-te firmei").
|
||
`users` permite tehnic mai multe loginuri per `account_id`, dar nu exista UI. Daca apare nevoia reala
|
||
(mai multe persoane dintr-o firma), construieste: admin-ul firmei invita un email SAU al doilea cere
|
||
acces si admin-ul aproba; membership pe `account_id`. Decizie user (2026-06-26): in 5.12 ramane
|
||
**1 firma = 1 cont = 1 login** + mesaj prietenos la CUI duplicat (US-001); acest flux = livrabila separata.
|
||
|
||
## Din /autoplan PRD 5.11 (2026-06-26)
|
||
|
||
- [ ] **E2E smoke de first-run ca poarta de release** — codifica scriptul de dogfooding
|
||
(import -> mapcoloane -> preview -> commit -> lista apare + contoare) ca test E2E care
|
||
trebuie sa treaca inainte de orice release. Motiv: cele 8 bug-uri din 5.11 sunt toate
|
||
first-run friction nedogfooded end-to-end; fara o poarta, reapar ca 8 tichete noi.
|
||
(CEO F2, severitate high.)
|
||
|
||
- [ ] **Control compensator optional pe auto-trimitere unattended** — utilizatorul a ales
|
||
(2026-06-26) scoaterea completa a hold-ului auto_send. Risc rezidual acceptat: o regula
|
||
text gresita poate auto-trimite FINALIZATA (terminal, fara undo) pe randuri pe canalul API /
|
||
remapare inline (fara gate de preview). Daca apar integratori reali, evalueaza un throttle
|
||
„primele N auto-trimiteri pe o regula text noua cer confirmare" sau un kill-switch per cont.
|
||
(CEO F5/F6, severitate critical ca risc, dar pre-launch exposure ~zero acum.)
|
||
|
||
## Din /autoplan PRD 5.13 (2026-06-27)
|
||
|
||
- [ ] **Filtre de data 2x2 pe mobil** — Azi/7zile/30zile/Custom stivuiesc full-width (4 randuri)
|
||
pe mobil; grid 2x2 ar fi mai compact. Imbunatatire viitoare. (Design, low.)
|
||
- [ ] **Sprite `<use href="#...">` pentru iconitele Lucide** — `act_btn` randeaza SVG inline pe
|
||
fiecare rand (bloat DOM pe toate viewporturile, ascuns pe desktop). Optimizare deferata; inline
|
||
acum (P5 simplu > optim prematur). (Eng §1, medium.)
|
||
- [ ] **"Eroare/Eroare" la nivel routes.py/labels.py** — guard-ul de template (pill-only cand
|
||
eticheta==stare) acopera cazul vizibil; curatarea logicii de continut ramane debt. (Design §2.)
|
||
- [ ] **Validare premisa "utilizare mobil reala"** — inainte de orice extindere responsive viitoare,
|
||
confirma device-mix-ul (analytics/cerere user). Daca ~95% desktop, nu mai investi in cardificare
|
||
mobil. (CEO F1, high — premisa nedovedita acum.)
|
||
|
||
## Din /plan-ceo-review PRD 5.15 (2026-06-28)
|
||
|
||
- [ ] **Validare premisa "utilizare mobil reala" (reluare F1 din 5.13)** — partea slim/compact a lui
|
||
5.15 presupune utilizare reala pe mobil. Inainte de orice rafinare responsive viitoare, confirma
|
||
device-mix-ul (analytics / cerere user). Daca ~95% desktop, nu mai investi in cardificare mobil.
|
||
(CEO, high — premisa nedovedita.)
|
||
|
||
- [ ] **Deduparea/etichetarea temelor grafit~dark si hartie~light** — 5.15 adauga 4 teme peste cele 3
|
||
existente (7 + Auto). grafit e ~ identic cu dark, hartie ~ identic cu light. Daca selectorul devine
|
||
confuz sau matricea de test apasa, dedupica sau eticheteaza-le clar. (CEO, low — simplificare optionala.)
|
||
|
||
- [ ] **US-009/US-010 ca PRD separat daca propagarea design e urgenta** — salvarea mapare-din-chip si
|
||
bulk-fix sunt adiacente FUNCTIONALE (acceptate via SELECTIVE EXPANSION), dincolo de obiectivul pur de
|
||
propagare design. Daca vrei sa livrezi designul rapid, pot fi scoase intr-un PRD propriu. (CEO, low.)
|
||
|
||
## Din raport comparatie mockup 5.16 (2026-06-29)
|
||
|
||
> Restul task-urilor din `docs/raport-comparatie-mockup-5.16.md` au fost livrate (T-1..T-9).
|
||
> Cele de mai jos raman explicit in coada la cererea userului.
|
||
|
||
- [ ] **Stare de eroare HTMX la incarcarea listei (D-4)** — cand `/_fragments/submissions`
|
||
da 500 sau pica reteaua, `#submissions-wrap` ramane blocat pe spinner ("se incarca…") fara
|
||
mesaj. De adaugat un partial de eroare / `hx-on::response-error` cu "nu s-a putut incarca,
|
||
reincearca". Robustete pre-existenta (nu introdusa de 5.16), impact functional real —
|
||
**candidatul cu cea mai mare valoare** din lista. (Design D-4, medium.)
|
||
|
||
- [ ] **Retokenizare px completa in template-uri** — `_submissions.html` / `_preview_*` folosesc
|
||
literali `font-size:13px/12px/11px` in loc de token-urile `--fs-*`. 5.16 a corectat doar
|
||
instanta sub-12px (incalca pragul PRD). Restul ramane debt: schimbarea in masa (13px→`--fs-sm`
|
||
=13.5px) misca layout-ul, deci necesita o baza de regresie vizuala inainte. (Eng, bounded —
|
||
amanat ca scope creep fara baza AC.)
|
||
|
||
- [ ] **Diacritice in textul vizibil pentru user** — mockup-urile folosesc diacritice complete
|
||
("Observații", "Salvează", "Adaugă"); aplicatia le omite in majoritatea label-urilor. Fontul
|
||
le randeaza corect (US-001 confirmat). De aplicat pe label-uri/butoane/titluri, pastrand
|
||
cod/comentariile fara diacritice. Decizie initiala (poarta de gust T3): nu se aplica acum —
|
||
reintrodus in coada la cererea userului (2026-06-29) ca finisaj viitor. (Transversal, low.)
|