# Progres QA factura/aviz Plan: `docs/plan_qa_factura_aviz.md` (aprobat 17.09.2026, mandat de executie continua). Acest fisier spune **unde s-a ajuns**, nu ce e de facut. Se actualizeaza dupa FIECARE story. Harti de pornire (read-only, nu se refac): `docs/qa_factura_harta.md` - harta de cod a formularului `docs/qa_factura_unelte.md` - harness UI, headless, Oracle, hook-uri existente `docs/qa_factura_hooks_ref.md` - referinta oficiala de hook-uri ## Stare pe story | Story | Stare | Unde | |---|---|---| | S0 prototip context/handoff | **TERMINAT** 17.09.2026 | `docs/s0_context_hook.md` | | S1 baseline QA cu capturi | de facut, **pe VM 304** | - | | S2 cautare articole | de facut | - | | S3 selector lista de preturi | blocat pana se citeste `pack_facturare.cursor_preturi` | - | | S4 zona totaluri+discount | de facut, mockup inainte | - | | S5 regresie | de facut | - | ## S0 - terminat (doua runde) **Runda 2 (dupa ce prima s-a dovedit nedovedita).** Prima varianta a lui S0 a fost probata doar cu stdin sintetic; in ciclul real bucla a continuat. Am instalat logare temporara pe hook si am capturat inputul real al lui `SubagentStop`. Ce a iesit: - `stop_hook_active` EXISTA in input si trece pe `true` la a doua declansare - garda e corecta. Bucla observata venea de la agenti porniti inainte de fix. - Mecanismul buclei: mesajul injectat trezeste agentul idle, el raspunde, redevine idle, hook-ul se declanseaza iar. - **Inputul contine `agent_transcript_path`** - transcriptul separat al subagentului oprit. Deci un hook POATE masura contextul fiecarui subagent, nu doar al sesiunii. Consecinta: `context_watch.ps1` are acum `-Subagent` (citeste `agent_transcript_path`, praguri 150k/200k, mai joase decat la sesiunea principala) si `-Json` (ambaleaza in `hookSpecificOutput`). Garda `stop_hook_active` a intrat in script, deci comanda hook-ului e o singura linie. Logarea temporara e scoasa. Probe pe input real capturat: subagent peste prag -> mesaj cu numele agentului si 40k; sub prag -> tacere; `stop_hook_active=true` -> tacere. Comis: `9823f1e` pe `qa-factura-s0`. Compromis acceptat: mesajul vechi "verifica daca subagentul si-a scris starea pe disc" nu mai apare la fiecare oprire, ci doar in avertismentul de context. **Corectie de fond**, dupa ce Marius a contestat afirmatia: e fals ca "niciun hook nu poate afla contextul". Niciun hook nu primeste tokenii de-a gata (nici `command`, nici function hook din SDK), dar orice hook primeste `transcript_path` si poate citi singur `usage` din JSONL. Doar `statusLine` primeste `context_window.used_percentage` gata calculat, si nu e hook. Detalii: `docs/hooks_functii_context.md`. ## S0 - runda 1 Trei modificari, toate probate (detalii si rezultatele probelor in `docs/s0_context_hook.md`): 1. `C:\Users\mmari\.claude\settings.json`, hook `SubagentStop`: garda `stop_hook_active`. Era un `echo` static care reinjecta acelasi `additionalContext` la fiecare oprire de subagent - de aici bucla observata azi (patru agenti invartindu-se in gol). Backup: `settings.json.bak_20260917`. 2. `D:\ROA\ROAGEST\COMUN\utile\context_watch.ps1`: parametru nou `-StareFile`. La atingerea pragului scrie/inlocuieste un singur antet pe primul rand al fisierului de stare (``), fara sa atinga restul continutului. Fara `-StareFile` comportamentul e neschimbat. 3. `settings.json`, `env`: `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=70`, ca auto-compactarea sa cada dupa avertismentul lui `context_watch`, nu inaintea lui. Ce s-a stabilit si nu se mai rediscuta: - Compactarea **nu** poate fi declansata programatic dintr-un hook. Mecanismul ramas: hook avertizeaza -> modelul scrie handoff-ul -> compactarea vine singura la pragul coborat. - Niciun hook nu primeste numarul de tokeni. Singura sursa e transcriptul JSONL (`transcript_path`), pe care `context_watch.ps1` il citea deja. - `D:\ROA\ROAGEST\COMUN` si `D:\ROA\ROAFACTURARE\COMUN` sunt checkout-uri separate ale aceluiasi repo `comun.git`. Scriptul e deci deja in biblioteca partajata; nu trebuie mutat. Ramas deschis din S0: - Proba pe un ciclu real cu subagent viu (garda a fost probata in izolare, cu stdin sintetic). Se confirma implicit la prima rulare de subagent din sesiunea urmatoare. - `settings.json` trimite la `context_watch.ps1` prin calea din checkout-ul ROAGEST. Pe VM 304 trebuie verificat ca `D:\ROA\ROAGEST\COMUN\utile\context_watch.ps1` exista acolo, altfel hook-ul tace fara sa dea eroare. ## VM 304 - ce s-a aflat Din `docs/vm304_acces.md`: Proxmox VM ID 304 "Win11-Marius", nod `pvemini`, clona lui VM 303. Acces probat si functional: `ssh root@10.0.20.201 'qm agent 304 ping'` -> raspunde; comenzi in VM prin `qm guest exec 304 -- `. **Nu exista share UNC** catre discul ei. Documentatia NU mentioneaza VFP sau client Oracle instalat - de verificat pe teren, planul le presupune. Credentialele sunt documentate in `E:\proiecte\ROMFASTSQL\docs\` (nu se copiaza). Marius a cerut explicit copierea directa si `roa_sync` rulat pe VM. Pachetul de pornire e pregatit in scratchpad (`pachet_vm304\` cu `PORNIRE.md` + cele 8 documente + `context_watch.ps1`); rezultatul copierii si al lui `roa_sync` ajunge in `docs/vm304_deploy.md`. ## Urmatorul pas S1, **pe VM 304**: sesiune noua care porneste din `docs/plan_qa_factura_aviz.md` + acest fisier. Baseline vizual pentru FACTURA si AVIZ, capturi la 1366x768 si maximizat, dovada pentru constatarile C2, C4, C6 si C8 din plan. Nicio modificare de cod in S1.