From 9e42e7ed6f1b465a5338aaf6957d1854fb5fa033 Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Sun, 28 Jun 2026 14:34:01 +0000 Subject: [PATCH] docs(5.15): criterii design din mockup-uri + revizie eng-review Criterii noi (din docs/mockups/prd-5.15-mockups.html), facute AC testabile: - antet: referinta vizuala obligatorie la mockup-uri - US-002: doar tokeni CSS, fara hex hardcodat (AA pe teme luminoase) - US-003: layout exact strip D6 (glife/copy/last-auth) + stari goale + ierarhie all-time - US-004: 'Eroare VIN' ilustrativ; pills din labels.py - US-007: referinta picker op<->cod (2 stari) + reveal odometru Include si revizia /plan-eng-review care era in working tree necomisa (E1-E8, US-011 authz, US-012 analytics, Val 0, raport eng CLEARED). Co-Authored-By: Claude Opus 4.8 (1M context) --- ...5.15-propagare-design-dashboard-editare.md | 185 ++++++++++++++++-- 1 file changed, 173 insertions(+), 12 deletions(-) diff --git a/docs/prd/prd-5.15-propagare-design-dashboard-editare.md b/docs/prd/prd-5.15-propagare-design-dashboard-editare.md index 0f2a76b..91b59aa 100644 --- a/docs/prd/prd-5.15-propagare-design-dashboard-editare.md +++ b/docs/prd/prd-5.15-propagare-design-dashboard-editare.md @@ -4,6 +4,10 @@ > Proces complet: `docs/ROADMAP.md` §5. Contract RAR (sursa de adevar): `docs/api-rar-contract.md`. > Sistemul de design al landing-ului: `app/web/templates/landing.html` (commit 41aa385), `DESIGN.md`. +> Mockup-uri piese fara design (REFERINTA VIZUALA OBLIGATORIE): `docs/mockups/prd-5.15-mockups.html` +> — strip sanatate D6 (stari rosu/verde), picker prestatii E4 (op<->cod), reveal odometru initial. +> Acopera exact piesele pe care mockup-urile landing nu le aratau si corecteaza contradictiile +> mockup<->PRD (VIN unic, contor all-time, culori prin tokeni). > Starea trece: `draft -> aprobat -> in-executie -> verify-pass -> inchis`. ## 1. Obiectiv @@ -49,6 +53,43 @@ Decizii din /plan-ceo-review (2026-06-28, mod SELECTIVE EXPANSION): din chip (US-009), (b) bulk-fix din lista (US-010), (c) require dinamic odometruInitial la chip R-ODO/I-ODO (US-007), (d) editare keyboard-first in form slim (US-007). +Decizii din /plan-eng-review (2026-06-28, model claude/opus; outside-voice = Claude subagent, +Codex a atins usage-limit). Fiecare confirmata cu userul: +- **E1** (ARCH, /repune nu mai sterge operatia): `/repune` face azi `p0.pop("cod_op_service")` + la `routes.py:1326` — sterge operatia cand se seteaza un cod direct, rupand D7 si US-009. + US-006 ELIMINA acel `pop` si pastreaza `cod_op_service`; test de regresie obligatoriu + (op_service supravietuieste unui /repune cu cod). (Rafineaza US-006.) +- **E2** (DRY teme, fisier fierbinte): config-ul de teme e duplicat in ~7 locuri in base.html + (anti-FOUC `VALID` la :22 + cinci literali paraleli `CYCLE`/`VALID`/`ICONS`/`LABELS`/`NEXT` + la :758-765). US-001 CONSOLIDEAZA intr-o singura structura sursa-de-adevar (`THEMES` + ordonata) din care se DERIVA ciclul/etichetele/iconitele + setul anti-FOUC. Adaugarea unei + teme = o intrare. (Rafineaza US-001.) +- **E3** (obs concat idempotent): la import, copierea denumirii operatiei in `obs` se face + DERIVE-ON-EMPTY (doar cand `obs` e gol) ca sa fie idempotenta la re-import/re-editare. Test + dedicat anti-dublu-concat ("Schimb ulei; Schimb ulei"). (Rafineaza US-005.) +- **E4** (binding operatie<->cod in chips — HIGH): chip-urile NU sunt o lista plata de coduri. + Cand exista operatii (`cod_op_service`), UI-ul randeaza UN picker PE operatie (eticheta op + + chip-ul ei de cod), pastrand perechea per-item pe care modelul o are deja; lista plata de + coduri libere DOAR pentru cazul fara operatie (corectie pura). Astfel US-009 citeste perechea + direct, iar deduparea e PER-ITEM (nu "dupa cod" — doua operatii distincte pot mapa legitim la + acelasi cod RAR). (Rafineaza US-006 AC2 + US-007 AC3 + US-009.) +- **E5** (serializare Val 3 pe routes.py): US-005 si US-006 rescriu ACEEASI functie + `post_corecteaza` (`routes.py:1120-1262`). Regula "un singur autor pe fisier fierbinte" se + EXTINDE la routes.py in Val 3: US-005 INAINTE de US-006 (secvential, nu paralel). (Rafineaza §6.) +- **E6** (US-007 HTMX server-driven PRIMARY): inversam abordarea — chips add/remove via `hx-post` + care re-randeaza partial-ul chips+form; reveal-ul conditional `odometruInitial` rezulta GRATIS + din re-randarea server; navigare tastatura = `` simplu (server valideaza R-ODO->odo, - deci no-JS da `needs_data` corect, nu date gresite) — multi-select se degradeaza la un cod/submit. + - [ ] **HTMX server-driven PRIMARY (E6)**: chips add/remove via `hx-post` care re-randeaza + partial-ul chips+form; reveal-ul conditional `odometruInitial` rezulta GRATIS din re-randarea + server (server computeaza din lista de chips, fara ramura JS); navigare tastatura = + `