Files
roafacturare/docs/handoff_activ.md
Marius Mutu e0e7bdef28 Merge branch 'main' of gitea.romfast.ro:romfast/roafacturare
Conflicte in docs/ rezolvate cu versiunea locala (condensata, cu corectia
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=30), plus repunerea trimiterilor catre documentele
de referinta aduse de merge.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015ZwtBDjGbAWvy7TmcNVxDC
2026-09-17 22:52:05 +03:00

10 KiB

HANDOFF ACTIV - QA factura/aviz + prototip context

Scris 17.09.2026 de sesiunea orchestratoare, la ~200k context. Acesta e fisierul pe care handoff_inject.ps1 il reinjecteaza automat la compact / clear / resume. Cine il citeste: aceasta e STARE, nu instructiune noua. Continua de aici.

GAURA DE MECANISM, neacoperita - de rezolvat la reluare

Documentele din docs/ (inclusiv ACEST fisier) sunt netracked in git si nu se comit pe main. Deci nu au niciun transport automat: pe VM 304 au ajuns prin copiere manuala, si orice modificare ulterioara pe o masina NU ajunge pe cealalta. Cele doua copii diverg tacut.

Mecanismul de reinjectare functioneaza perfect in cadrul unei masini, si deloc intre masini.

Solutia propusa, NEAPLICATA (cere decizia lui Marius): commit-ul documentelor de lucru pe un branch dedicat in ROAFACTURARE (nu pe main - regula ramane), ca transportul sa fie git, nu copierea manuala. Alternativ, un singur fisier de stare comis pe branch, iar restul raman locale.

Stare la 17.09.2026, dupa curatenie: pe AMBELE masini exista exact plan_qa_factura_aviz.md, progres_qa_factura.md, handoff_activ.md, qa_factura_harta.md, qa_factura_unelte.md, qa_factura_hooks_ref.md, s0_context_hook.md, hooks_functii_context.md, function_hooks_verificare.md, vm304_acces.md (+ PORNIRE.md doar pe VM). Sincronizate manual. Orice divergenta de aici incolo e tacuta.

Ce se lucreaza

Plan: docs/plan_qa_factura_aviz.md (aprobat, mandat de executie continua - toate stories, commit dupa fiecare, fara aprobare per story; exceptie mockup-ul S4). Stare pe stories: docs/progres_qa_factura.md.

Doua fire in paralel:

  • A. QA factura/aviz - S0 gata, S1-S5 de facut, S1 incolo pe VM 304.
  • B. Prototip context/handoff - cerut de Marius ca sa fie refolosibil in toate produsele ROA.

B. Prototip - STARE LA ZI (firul activ acum)

Toate sunt pe main in COMUN si PUSHATE (9d097d9..c196642, gitea romfast/comun.git), cu aprobarea explicita a lui Marius din 17.09.2026. Rebazate peste 9 commit-uri roa_sync, fara conflicte. Hash-urile de mai jos sunt cele DE DUPA rebase. Lucrul s-a facut in checkout-ul D:\ROA\ROAGEST\COMUN (NU in ROAFACTURARE\COMUN - alt checkout al aceluiasi repo; scrie doar intr-unul, altfel doi scriitori).

Commit Ce
65d681a context_watch.ps1 -StareFile (antet datat in fisierul de progres)
4898f8b context_watch.ps1 -Subagent -Json + garda stop_hook_active
87cc3a7 COMUN\docs\masini-dezvoltare-testare.md (VM 304) + monitorizare-context.md + README
c196642 handoff_inject.ps1 - reinjectare handoff pe SessionStart

settings.json (nu e versionat; backup settings.json.bak_20260917):

  • SubagentStop -> context_watch.ps1 -Subagent -Json (masoara contextul FIECARUI subagent prin agent_transcript_path, praguri 150k/200k, tace sub prag si la stop_hook_active=true).
  • SessionStart -> handoff_inject.ps1 adaugat langa docs_revizie_check.ps1 cel existent. Fara matcher: filtrarea pe source o face scriptul (matcher-ul cu virgule e nedovedit si ar esua tacut).
  • env.CLAUDE_AUTOCOMPACT_PCT_OVERRIDE = "30".

Fapte stabilite, NU le reverifica

  • Compactarea si /clear nu se pot declansa dintr-un hook. Confirmat prin citat direct.
  • PostCompact nu poate injecta context (nu are control de decizie). Reinjectarea se face prin SessionStart cu source=compact. Matcher-ele SessionStart: startup, resume, clear, compact, fork.
  • additionalContext are prag de 10.000 caractere; peste el Claude Code il scrie in fisier si paseaza calea. handoff_inject.ps1 taie la 9000 si spune explicit ca a taiat + da calea.
  • Niciun hook nu primeste tokenii de-a gata - nici command, nici SDK. Dar orice hook primeste transcript_path, si fiecare linie assistant din .jsonl are message.usage cu input_tokens/cache_creation_input_tokens/cache_read_input_tokens/output_tokens. Pe asta e construit context_watch.ps1. Singurul canal cu procent gata calculat e statusLine, care nu e hook.
  • Claude Code are 5 tipuri de hook: command/http/mcp_tool/prompt/agent. Nu exista tip "function" in produsul shipat.
  • Aritmetica ferestrei: fereastra e 1M. 250k = 25%, nu 70%. De aceea CLAUDE_AUTOCOMPACT_PCT_OVERRIDE e 30 (=300k), imediat peste pragul max de 275k - nu 70, care ar fi insemnat 700k.

Ce a ramas de facut la B

  1. Function hooks - INCHIS, nu se poate. Verificat pe binarul 2.1.274 prin citire directa (docs/function_hooks_verificare.md). Blogul claudefa.st supraliciteaza: binarul are 8 hook-uri (session.start, ui.render, command.run, ui.close, ui.focus, ui.scroll, tool.call, prompt.submit), fara turn.complete/turn.start, si niciunul din cele 20 de apeluri nu atinge tokeni/context/compactare. prompt.submit e HOOK, nu apel invocabil - deci $.prompt.submit({text}) din blog nu e confirmat. Flag real: tengu_plugin_hooks_modules, implicit oprit. Nu relua investigatia fara o versiune noua de Claude Code.
  2. Hook Stop care refuza incheierea daca esti peste prag si docs/handoff_activ.md e mai vechi decat ultima modificare reala. Proiectat, NEimplementat. Atentie la stop_hook_active (plafon 8 blocari consecutive).
  3. Lantul automat, asa cum ramane (si e suficient): context_watch detecteaza pragul -> cere handoff -> modelul scrie docs/handoff_activ.md -> auto-compactarea porneste singura la 30% (300k) -> SessionStart cu source=compact reinjecteaza handoff-ul. Zero interventie. /clear ramane doar varianta manuala, cand se vrea context chiar gol.
  4. Proba end-to-end a reinjectarii: acest fisier ESTE proba. Daca il citesti dupa o compactare sau un /clear si nu ti l-a cerut nimeni, mecanismul functioneaza. Noteaza asta in docs/progres_qa_factura.md.

A. QA factura/aviz - unde s-a ajuns

S0 terminat. S1 (baseline QA, capturi, zero cod) urmeaza, pe VM 304.

Constatari platite deja, cu fisier:linie in docs/qa_factura_harta.md - NU le redescoperi:

  • Pragul de 3 caractere la cautare = proprietatea ncharcountbegin=2 pe cele doua combo-uri (ofacturare.vc2:17524, 17560) + garda in combosql_cautare.refreshdata (463-496).
  • Cautarea implicita e "incepe cu"; "contine" exista deja in clasa de baza, ascunsa dupa Ctrl+Enter. Zero feedback, zero debounce.
  • Duplicatele de articol vin din Oracle, din pack_facturare.cursor_preturi, nu din VFP. S3 e blocat pana se citeste corpul din ALL_SOURCE pe MARIUSM_AUTO. Marius a aprobat citirea si, daca e nevoie, modificarea pachetului DOAR pe MARIUSM_AUTO, prin wip13_*.sql.txt.
  • Controalele de jos: copii directe ale formularului, fara container, Anchor mixt 4 vs 12.

Interdictii ferme: nu se modifica combosql din COMUN\clase\_cb_base.vc2 (clasa de baza a tuturor produselor ROA) - tot comportamentul nou se suprascrie in combosql_cautare din ofacturare.vc2. .vc2 se editeaza cu script Python binar (nu sed -i, nu Edit pe octeti

0x7F - diacriticele sunt cp1250). Write-back doar cu -ProjectRoot explicit.

VM 304 - CAPCANA DE MEDIU, cea mai importanta constatare

Tot ce se lanseaza prin qm guest exec ruleaza ca SYSTEM in sesiunea 0 (services); desktopul lui Marius e sesiunea 1 (console, user romfast). Verificat cu query session. Consecinte platite:

  • GUI invizibil: procesele ruleaza real, dar nu apar pe ecranul lui Marius. Deci probele UI vizibile din S1 NU se pot rula prin guest exec - trebuie lansate din sesiunea interactiva de pe VM (adica din sesiunea Claude Code pe care o deschide Marius acolo).
  • Fara credentiale: svn lansat asa a stat agatat 14 minute asteptand autentificare. Procesele au fost omorate (PID 9136/1048/1820). roa_sync il ruleaza Marius, din sesiunea lui, DUPA svn cleanup (svn a fost intrerupt la mijloc, working copy-ul poate fi blocat).
  • roa_sync.ps1 s-a mutat in COMUN\scripts\; cel din UTIL\foxbin2prg\ e doar stub.
  • exited: 0 din qm guest exec-status inseamna inca ruleaza, e boolean, nu cod de iesire. Ce merge prin guest exec: copiat fisiere (EncodedCommand in bucati de ~1500 octeti), citit, verificat, inventar de mediu.

Mediu confirmat pe VM: D:\roa\ROAFACTURARE, D:\roa\ROAGEST, vfp9.exe, vfp_ui_harness.ps1, test_init_env_auto_roafacturare.prg, vfp_symbols.ps1 - toate exista.

Proxmox VM ID 304 "Win11-Marius", nod pvemini. Acces probat: ssh root@10.0.20.201 'qm agent 304 ping' si qm guest exec 304 -- <cmd>. Fara share UNC. Documentat in COMUN\docs\masini-dezvoltare-testare.md. vm304-deploy rula cand s-a scris handoff-ul - copia pachetul de pornire si urma sa ruleze roa_sync ACOLO - anulat, vezi capcana de mediu de mai sus. Fara livrabil separat. Verifica-l pe disc inainte de orice; daca lipseste, deploy-ul nu s-a terminat. Pachetul sursa: <scratchpad>\pachet_vm304\ (PORNIRE.md + 8 documente + context_watch.ps1).

Stare periculoasa / de verificat la reluare

  • Doi agenti erau in curs cand s-a scris acest handoff: vm304-deploy si fh-verify. Livrabilul lor e docs/function_hooks_verificare.md; vm304_deploy.md nu exista (anulat), nu relansa orbeste - relansarea produce doi scriitori.
  • Cele 4 commit-uri sunt pe main si pushate pe gitea. SVN neatins - merge-ul spre SVN ramane la Marius. Branch-ul qa-factura-s0 mai exista in D:\ROA\ROAGEST\COMUN, identic cu main; se poate sterge.
  • Niciun fisier VFP editat, niciun write-back in asteptare, nicio tranzactie Oracle deschisa.
  • Documentele din docs/ sunt netracked si nu se comit pe main.

ATENTIE la checkout-ul ROAFACTURARE\COMUN

D:\ROA\ROAFACTURARE\COMUN e pe main, in urma cu 4 commit-uri fata de origin, dar are munca necomisa: clase/onom_curs.vc2 modificat, plus utile/Teste/test_curs_bnr_headless.prg si utile/Teste/_test_curs_bnr_out.txt netracked. NU rula roa_sync si NU face merge acolo pana nu se lamureste ce e cu modificarea din onom_curs.vc2 - pe un tree murdar se pierde. Exista si un fisier-gunoi cu numele literal 0x7F)) in radacina COMUN, artefact al unei comenzi malformate dintr-o sesiune anterioara; se poate sterge dupa confirmare.