# Inrolarea unui proiect ROA (Visual FoxPro) in fluxul git-text FoxBin2Prg Instructiuni pas cu pas pentru o sesiune Claude Code care inroleaza un proiect ROA in fluxul in care git urmareste DOAR versiunile text FoxBin2Prg (.vc2/.sc2/.fr2/.mn2/ .lb2/.pj2/.dc2/.db2) generate in arbore, langa binarele VFP. SVN ramane sursa de adevar si nu se atinge (niciun svn commit fara acordul explicit al utilizatorului). Proiecte deja inrolate (16.07.2026): ROACONT, ROAGEST, ROAAUTO, ROAIMOB, ROAACNPRO, ROAFACTURARE + COMUN (romfast/comun.git). Modelul de referinta este ROACONT. ## Reguli pentru sesiunea care executa - Foloseste EXCLUSIV PowerShell pentru comenzi (NU tool-ul Bash — bash.exe crapa pe aceste masini si lasa stackdump-uri). - NU face niciun `svn commit`. NU modifica binarele VFP. La final binarele trebuie sa fie byte-identice (verificabil cu `svn status`: niciun binar M). - Rularile de conversie dureaza zeci de minute pe proiecte mari: sunt incrementale, daca expira timeout-ul tool-ului se reiau pana la capat. - Nu rula doua conversii git_sync in paralel pe acelasi arbore. ## Preconditii 1. Tooling-ul partajat exista in `D:\ROA\UTIL\foxbin2prg\`: `git_sync.ps1`, `vfp_filemap.ps1`, `txt2vcx.ps1`, `roa_sync.ps1`, `test_git_sync.ps1`, `test_roundtrip.ps1`. Citeste-le inainte (macar help-ul din git_sync.ps1). 2. Proiectul e working copy SVN valid (`svn info D:\ROA\`), cu `COMUN\` inauntru (external SVN). 3. Repo-ul gitea exista: `git ls-remote git@gitea.romfast.ro:romfast/.git`. Daca nu exista, cere utilizatorului sa-l creeze din interfata gitea (NU crea repo-uri prin API din proprie initiativa). 4. SVN global-ignores pe masina contine `*.vc2 *.sc2 *.fr2 *.mn2 *.lb2 *.pj2 *.dc2 *.db2 *.dbf.cfg` (in `%APPDATA%\Subversion\config`, sectiunea [miscellany]). Fara asta, textele apar ca `?` in svn status si risca svn add accidental. 5. Daca proiectul ARE deja git cu istoric si urmeaza reset: confirmarea utilizatorului ca nu exista clone active pe alte masini (force-push rescrie istoria). ## Pasi ### 1. Inventar prealabil (inainte de orice stergere) - Exista `.git`? Noteaza `git remote -v` si branch-ul. Exista `COMUN\.git`? - `git ls-files *.dbf` (daca exista repo vechi): tabelele urmarite azi ca binare sunt candidate la conversie .db2 (cerinta: tot ce e convertibil trece pe text). ### 2. Conversia completa ```powershell & D:\ROA\UTIL\foxbin2prg\git_sync.ps1 -ProjectRoot D:\ROA\ ``` - DbfList implicit acopera `Locale\locale*.dbf`, `Help\*.dbf`, `DATE\Optiuni_*.dbf` si toate dbf-urile COMUN. Tabele de configurare specifice proiectului se adauga cu `-DbfList` explicit (ATENTIE: parametrii array NU se pot pasa prin `powershell -File` — invoca scriptul in-process cu `&`, altfel array-ul se colapseaza). Tabele operationale mari nu se adauga; un .db2 peste 5 MB ramane binar. - Esecuri de conversie — se investigheaza fiecare: - meniuri pre-VFP9 ("NOT in VFP 9 Format"): raman binare, cu exceptii negate `!` in .gitignore; intra in flux doar dupa re-salvare in VFP9 (MODIFY MENU -> save); - clase FFC/third-party cu roundtrip fals-negativ (#INCLUDE lipsa in staging izolat, ex. cele 6 din COMUN deja scutite implicit): se adauga la `-RoundtripExempt`; - alte esecuri reale: fisierul ramane binar urmarit (exceptie `!`) si se raporteaza. - Regula: nu se trece mai departe cu esecuri neexplicate (exit code nenul). ### 3. .gitignore si .gitattributes - Copiaza `D:\ROA\ROACONT\.gitignore` ca model si adapteaza: sectiunea machine-local (exe-ul proiectului, _ref.DBF/FPT/CDX, FOXUSER, .ini/.ARM, log-uri) si sectiunea dbf: fiecare .dbf care are .db2 se ignora INDIVIDUAL (plus .fpt-ul lui). NU ignora: `*.??2`, `*.dbf.cfg`, grafica (bmp/ico/jpg/png), ocx, tmpl. - `.gitattributes` cu `* -text` (SVN ramane autoritatea EOL; git nu normalizeaza). ### 4. Init/reset repo proiect ```powershell # doar la reset: Remove-Item -Recurse -Force D:\ROA\\.git git -C D:\ROA\ init -b main git -C D:\ROA\ remote add origin git@gitea.romfast.ro:romfast/.git git -C D:\ROA\ add -A ``` VERIFICARE OBLIGATORIE inainte de commit (`git ls-files` pe staged): - 0 binare convertibile urmarite (vcx/vct/scx/sct/frx/frt/mnx/mnt/lbx/lbt/pjx/pjt/ dbc/dct/cdx/dcx), cu exceptia celor cu `!` justificate; - textele .??2 prezente; 0 fisiere din COMUN/ (are repo-ul lui). Commit: `Initial: flux text FoxBin2Prg (git urmareste .??2 in-arbore, binarele VFP git-ignored)` + linia Co-Authored-By a sesiunii. Push: `git push -u origin main` (`--force` doar la reset). ### 5. Clona COMUN a proiectului ```powershell # daca exista .git vechi: Remove-Item -Recurse -Force D:\ROA\\COMUN\.git git -C D:\ROA\\COMUN init -b main git -C D:\ROA\\COMUN remote add origin git@gitea.romfast.ro:romfast/comun.git git -C D:\ROA\\COMUN fetch origin git -C D:\ROA\\COMUN reset origin/main # mixed: pastreaza discul git -C D:\ROA\\COMUN checkout origin/main -- .gitignore ``` Diferentele ramase in `git status` = revizii SVN diferite ale clonei (normal). NU comite nimic in comun.git dintr-o clona decalata — comun se comite doar din clona in care s-a lucrat efectiv, dupa svn update. ### 6. roa_sync.bat Copiaza `D:\ROA\ROACONT\roa_sync.bat` in radacina proiectului (e generic, foloseste `%~dp0`) si include-l in commit. Utilizatorul il ruleaza la inceput de sesiune: svn update -> git_sync -> commit "sync SVN rN" pe main (proiect + COMUN) -> inchide branch-urile claude/* cu diff gol. ### 7. Verificari finale - Acoperire: fiecare binar convertibil din arbore (inclusiv COMUN) are text .??2 langa el (exceptiile `!` enumerate si justificate). - `svn status`: niciun binar modificat, niciun .??2 adaugat in SVN. - `git ls-remote origin main` = HEAD-ul local. - Raport final: numar texte per tip, esecuri/scutiri, commit hash, push status. ## Note operationale - Dialogurile modale FoxBin2Prg sunt suprimate de scripturi printr-un `foxbin2prg.cfg` cu `DontShowErrors: 1` scris per-director de staging (cfg-ul global de langa exe NU e fiabil). Daca utilizatorul vede totusi un MessageBox, e un dialog nativ VFP — watchdog-ul din Invoke-FoxBin2PrgSafe il omoara la timeout. - Tabelele legate de un DBC au nevoie de .dbc/.dct/.dcx si .cdx langa ele la conversie (git_sync face asta automat in staging). - `DBF_Conversion_Support: 4` (scris de git_sync in cfg-ul de staging) exporta DATELE in .db2, nu doar structura. - Fisierele doar-git (docs, .bat, .gitignore) se comit separat, inainte de sync-ul "sync SVN rN", altfel nimeresc in commit-ul de sincronizare.