- import_nota / import_adauga_factura: flux unificat note contabile + articole, sincronizare automata, total factura automat, TVA impartit pe conturile creditoare ale notelor (rundele 1-31) - runda 32: totalurile import_nota pe _label/_textbox din _baza.vcx (Arial 10), fara containerele clb_tx_simplu si fara bifa "Recalculeaza TVA" (recalcul mereu automat); "Sincronizeaza facturile secundare" mutata sub butoane - utile/Teste: harness UI VFP headless (vfp_ui_harness.ps1, ui_harness.prg, precompilare, mock-uri) in radacina; suitele e2e pentru achizitia din import grupate in utile/Teste/achizitie_import/ - docs: flux editare text vcx/scx, testare-ui-vfp si testare-vfp-mcp (mutate din ROAGEST, general valabile), inventar comun, orchestrare subagenti, conventie GO recno, depanare testare VFP Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019DGibQKa5uK4P2TNSFFQNh
5.0 KiB
5.0 KiB
Flux editare .vcx/.scx pe text (comun proiectelor VFP)
Textul .vc2/.sc2 e sursa de editare; write-back in binar cu txt2vcx.ps1, fara VFP IDE.
Detalii complete: D:\ROA\UTIL\foxbin2prg\CLAUDE.md. Parametrii per proiect: sectiunea de mai jos.
Proiecte migrate (ROACONT, COMUN, …): flux in-arbore. Textul .??2 sta langa binare, il
improspateaza git_sync.ps1 -ProjectRoot <root> (nu cache extern) — la inceput de sesiune si
inainte de orice git commit. Write-back doar pentru vcx/scx; frx/mnx/lbx/pjx/dbc/dbf doar
in IDE. txt2vcx.ps1 cu -CacheRoot = -ProjectRoot (implicit). Pasul 0 de mai jos devine
rularea git_sync.ps1; restul pasilor raman la fel. Fluxul cu cache extern (vcx2txt.ps1 +
-CacheRoot separat) ramane doar pentru proiectele nemigrate.
Parametri per proiect (nemigrate, cache extern)
- ROAGEST:
-Project 'D:\ROA\ROAGEST\roagest.pjx' -ProjectRoot 'D:\ROA\ROAGEST' -CacheRoot 'D:\ROA\_vfp_textcache\roagest'; procese de verificat inainte de write-back:vfp9,roagest; patch-uri de review indocs/diff_runda<N>_<subiect>.patch.
Pasii unei runde
- Refresh cache (obligatoriu dupa orice sesiune IDE — staleness pe mtime):
vcx2txt.ps1 -Project <pjx> -ProjectRoot <root> -CacheRoot <cache> -Types vcx,scx - Baseline:
Copy-Item <f>.vc2 <f>.vc2.pre_runda<N>.bak(in cache; la runde succesive necomise, diff-ul fata de HEAD ar amesteca rundele). - Editare byte-safe: PowerShell
[IO.File]::ReadAllText/WriteAllText(..., GetEncoding(1252)); NU tool-ul Edit/Write (UTF-8 strica diacriticele). Continut nou ASCII, TAB-uri ca in jur, fara reflow (format position-sensitive, proprietati alfabetizate). Valabil si pentru.prg. - Patch review:
git diff --no-index <bak> <editat> > docs/diff_runda<N>_<subiect>.patch(exit 1 = normal). Utilizatorul revizuieste FISIERUL de patch si aproba; write-back-ul (pasul 5) se face DOAR dupa aprobare. Commit doar dupa confirmare pe patch + test in IDE. Comentariile in cod: maxim o linie (*!* DD.MM.YYYY autor - motiv scurt), fara explicatii lungi. Obligatoriu inainte de a preda patch-ul la review: skill-ul de code-review rulat pe bucatile de cod din diff (nu doar citire manuala) - prinde defecte gen IIF cu numar gresit de argumente, deduplicari care nu se declanseaza niciodata, interogari mai largi decat e nevoie. Review-ul verifica si compactitatea/reutilizarea: cod care refoloseste functiile si clasele comune existente in loc sa le reinventeze (ex. cursor2lista()/cursor2listac() pentru liste dintr-un cursor in loc de Scan manual; butoane din cmd_butoane.vcx in loc de butoane ad-hoc). Inventarul comunelor: COMUN\docs\inventar-comun.md - se consulta si la pasul de plan/arhitectura, inainte de a scrie cod nou. - Preconditie write-back: niciun proces vfp9/ (tin lock pe binar); nu se omoara.
- Write-back:
txt2vcx.ps1 -TextFile <vc2> -ProjectRoot <root> -CacheRoot <cache>(+-AllowComuncu aprobare explicita pentru tinte COMUN — afecteaza toate aplicatiile ROA). Succes = fidelity-check trecut: binar cu mtime nou;vcx2txt.ps1ulterior il vede la zi. - Teste finale pe cerinta initiala (cerinta Marius, valabila in toate proiectele VFP): dupa ultima runda, teste e2e (harness UI, pe fluxul real al utilizatorului) care verifica ca rezultatul construit arata si se comporta conform cerintei initiale — scenariul concret dat de Marius, cu valorile lui asteptate — nu doar teste per-fix. Assert-uri pe continutul rezultatului (sume, campuri, randuri), nu pe efecte de suprafata ("a aparut un rand" nu e suficient).
- Backup-urile
.pre_runda*.baksi patch-urile se sterg la curatenia de dupa commit.
Capcane
.mnx/.frxraman read-only (GENMENU in IDE / round-trip fragil).- Linii complet goale in metode pica fidelity doar pe whitespace; fix: preia
verify\*.vc2din staging peste cache si reia write-back-ul. - Metoda noua de clasa cere
*m: numein*<DefinedPropArrayMethod>; fara ea, prima salvare din IDE o arunca tacut, iar refresh-ul urmator absoarbe pierderea in cache (si in .bak-uri). Override-urile de metode de baza (Init, Show, hook-uri) nu au nevoie de*m:. - Salvarea din VFP IDE peste un binar scris de txt2vcx poate PIERDE si definitii
*m:deja existente, desi corpurile PROCEDURE raman (patit pe ROAGEST:import_adauga_factura.recalc_tva,import_nota.do_adauga/do_copie/do_reface, 07.2026); simptom: crash la Createobject cu "Data type mismatch" raportat la linia apelanta. Dupa orice sesiune IDE pe clasa: refresh cache + compara lista*m:cu starea de dinainte. - Nu folosi Project > Build ca sa recompilezi un binar vizat: rebuild-ul recompileaza toate
.vcx/.vctdin proiect si le rescrie antetul (timestamp compilare) si posibil p-code-ul intern si la librarii neatinse efectiv, aparand fals ca "modificate" in diff — de aici fluxul text->bin punctual pe binarul vizat. - Subagentii delegati primesc regulile 2-5 in prompt si raporteaza unicitatea sirurilor inlocuite + rezultatul fidelity-check-ului.