Files
comun/skills/roa-onboarding/SKILL.md
2026-09-16 14:33:43 +03:00

8.2 KiB

name, description
name description
roa-onboarding Inroleaza un calculator nou sau un proiect nou ROA in fluxul SVN + git-text FoxBin2Prg - cheie SSH Gitea (+ host/port 222), global-ignores SVN, clone foxbin2prg, clone git per proiect si COMUN, conversie initiala, roa_sync.bat, expunerea skill-urilor (leaga_skills.ps1) si backstop-ul de rutare (scrie_backstop_skills.ps1). Foloseste-l cand utilizatorul spune "inroleaza proiectul", "adauga proiectul in fluxul git-text", "pregateste un calculator nou", "cloneaza proiectul pe masina asta", "expune skill-urile", "aplica backstop-ul", sau cand un proiect nu are inca .git / COMUN.git / roa_sync.bat. Nu acopera editarea de text VFP (skill roa-vfp-text-edit) si nu face commit-uri SVN.

Inrolarea unui calculator nou sau a unui proiect nou ROA (SVN + git-text FoxBin2Prg)

Doar PowerShell (NU Bash - bash.exe crapa pe aceste masini si lasa stackdump-uri). Niciun svn commit, nicio modificare de binare VFP in acest flux. Nu forta (--force, reset --hard) fara sa arati intai utilizatorului ce s-ar pierde.

Cand se foloseste

  • Calculator nou: nu are cheie SSH la Gitea, nu are D:\ROA\UTIL\foxbin2prg, nu are clonele git ale proiectelor (repo-urile Gitea EXISTA deja si doar se cloneaza).
  • Proiect nou in fluxul git-text: repo-ul Gitea inca nu exista sau proiectul nu are .git, COMUN\.git, roa_sync.bat (nu are inca fluxul in care git urmareste textele .??2).
  • "expune skill-urile pe masina asta" (leaga_skills.ps1), "aplica backstop-ul de rutare" (scrie_backstop_skills.ps1).

Nu acopera: editarea .vc2/.sc2 (skill roa-vfp-text-edit), commit/sync curent (skill roa-git-svn-commit).

Pasi

A. Preconditii pe masina

  1. VFP9 IDE instalat (pentru .frx/.mnx/.lbx/.pjx/.dbc, care nu au write-back text).
  2. Client SVN spre http://svnroa:3001/svn/ROA; Git for Windows (aduce git, ssh, ssh-keygen); PowerShell 5.1+.
  3. Cheie SSH + host Gitea:
    • ssh-keygen -t ed25519 -C "<user>@<masina>"; porneste agentul (Start-Service ssh-agent), ssh-add cheia; adauga cheia .pub in Gitea (profil -> Settings -> SSH Keys).
    • %USERPROFILE%\.ssh\config: Gitea raspunde pe portul 222, iar DNS-ul gitea.romfast.ro poate lipsi, deci adauga explicit:
      Host gitea.romfast.ro
        HostName 10.0.20.165
        User git
        Port 222
      
    • Verificare: ssh -T git@gitea.romfast.ro reuseste (nu "Permission denied").
  4. %APPDATA%\Subversion\config, [miscellany]: adauga la global-ignores *.vc2 *.sc2 *.fr2 *.mn2 *.lb2 *.pj2 *.dc2 *.db2 *.dbf.cfg (altfel textele FoxBin2Prg apar ca ? in svn status si risca svn add accidental).
  5. Utilitarul: git clone git@gitea.romfast.ro:romfast/foxbin2prg.git D:\ROA\UTIL\foxbin2prg (branch romfast; git remote -v sa arate fork-ul romfast, nu upstream-ul github).

B. Proiect nou in fluxul git-text

  1. Inventar INAINTE de orice stergere: exista .git? (git remote -v, branch). Exista COMUN\.git? Pe un repo vechi, git ls-files *.dbf arata tabelele urmarite ca binare - candidate la .db2.
  2. Conversie completa: & D:\ROA\UTIL\foxbin2prg\git_sync.ps1 -ProjectRoot D:\ROA\<PROIECT>. Esecurile se investigheaza fiecare: meniuri pre-VFP9 raman binare (exceptie ! in .gitignore); clase FFC/third-party cu roundtrip fals-negativ -> -RoundtripExempt; un binar care nu poate fi nici macar CITIT (memo invalid) se repara (perechea .vcx+.vct valida dintr-o alta clona COMUN). Nu se trece mai departe cu esecuri neexplicate (exit nenul).
  3. .gitignore (model D:\ROA\ROACONT\.gitignore: fiecare .dbf care are .db2 se ignora INDIVIDUAL; nu se ignora *.??2) + .gitattributes cu * -text (SVN ramane autoritatea EOL).
  4. Repo proiect: git init -b main; git remote add origin git@gitea.romfast.ro:romfast/<proiect-lowercase>.git; git add -A. VERIFICARE obligatorie inainte de commit: 0 binare convertibile urmarite (cu exceptiile ! justificate), textele .??2 prezente, 0 fisiere din COMUN/. Commit Initial: flux text FoxBin2Prg ...; apoi git push -u origin main.
  5. COMUN: git init -b main in <PROIECT>\COMUN; git remote add origin git@gitea.romfast.ro:romfast/comun.git; git fetch origin; git reset origin/main (mixed, pastreaza discul); git checkout origin/main -- .gitignore. Diferentele ramase in git status = revizii SVN diferite (normal). Nu comite in comun.git dintr-o clona decalata.
  6. roa_sync.bat: copiaza D:\ROA\ROAFACTURARE\roa_sync.bat in radacina proiectului (generic, foloseste %~dp0 si cheama COMUN\scripts\roa_sync.ps1) si include-l in commit.
  7. Verificari finale: acoperire (fiecare binar convertibil din arbore, inclusiv COMUN, are text .??2 langa el, mai putin exceptiile !); svn status fara binare M si fara .??2 adaugat; git ls-remote origin main = HEAD-ul local. Raport: numar texte per tip, esecuri/scutiri, commit hash, push status.

C. Skill-uri de agent pe masina

  1. Expune (o singura data per masina): powershell -ExecutionPolicy Bypass -File D:\ROA\<PROIECT>\COMUN\utile\leaga_skills.ps1 (intai -DryRun). Creeaza symlink-uri in %USERPROFILE%\.claude\skills\ catre COMUN\skills\<nume> - fara copiere, deci aceleasi fisiere sunt vazute si de Claude Code, si de opencode. Idempotent; nu sterge un director real cu acelasi nume.
  2. Backstop per proiect: COMUN\utile\scrie_backstop_skills.ps1 -Root D:\ROA -Proiecte <proiecte> (intai -DryRun; fara -Proiecte = toate proiectele detectate - NU rula asa fara acord). Scrie AGENTS.md si un bloc marcat intre <!-- roa-skills:start --> si <!-- roa-skills:end --> in CLAUDE.md. Idempotent.
  3. Dupa orice git pull/roa_sync in COMUN\ sau dupa modificarea skill-urilor, re-ruleaza pasii 13+14 (sunt idempotenti). NU copia manual fisiere de skill - se pierde legatura cu sursa.

Capcane

  • bash.exe crapa pe aceste masini si lasa stackdump-uri - foloseste EXCLUSIV PowerShell.
  • Parametrii array (ex. -DbfList, -RoundtripExempt) NU se pot pasa prin powershell -File: invoca scriptul in-process cu &, altfel array-ul se colapseaza.
  • Gitea raspunde pe portul 222, nu 22; fara blocul Host din ssh\config -> "Connection refused" sau "Could not resolve hostname", chiar daca cheia e corecta.
  • Intr-o clona COMUN decalata NU se comite: comun.git se comite doar din clona in care s-a lucrat efectiv, dupa svn update.
  • Conversia git_sync dureaza zeci de minute pe proiecte mari si e incrementala: la expirarea timeout-ului tool-ului se reia pana la capat; NU rula doua conversii in paralel pe acelasi arbore (FoxBin2Prg foloseste artefacte partajate in %TEMP%).
  • Fisierele doar-git (docs, .bat, .gitignore) se comit INAINTE de sync-ul sync SVN rN, altfel nimeresc in commit-ul de sincronizare.

Criterii de acceptare si dovada

Fara dovada da/nu de mai jos, inrolarea NU se raporteaza ca terminata:

  1. ssh -T git@gitea.romfast.ro reuseste.
  2. svn status D:\ROA\<PROIECT>: niciun binar convertibil modificat si niciun text .??2 adaugat in SVN.
  3. git -C <PROIECT> ls-remote origin main = HEAD-ul local; la fel pentru <PROIECT>\COMUN; git status curat sau doar diferente de revizie SVN.
  4. Acoperire: fiecare binar convertibil din arbore (inclusiv COMUN) are text .??2 langa el, mai putin exceptiile ! enumerate si justificate.
  5. leaga_skills.ps1 -DryRun raporteaza 0 de refacut; scrie_backstop_skills.ps1 -DryRun idempotent (0 modificari) dupa prima aplicare.
  6. Niciun svn commit facut in acest flux (commit-ul il face utilizatorul, prin skill roa-git-svn-commit).

Scripturi

  • D:\ROA\UTIL\foxbin2prg\git_sync.ps1, vfp_filemap.ps1, txt2vcx.ps1, test_git_sync.ps1, test_roundtrip.ps1.
  • <PROJ>\COMUN\scripts\roa_sync.ps1 (+ roa_sync.bat in radacina proiectului).
  • <PROJ>\COMUN\utile\leaga_skills.ps1, scrie_backstop_skills.ps1 (+ backstop_skills.txt).

Referinta (doar la nevoie)

  • COMUN\docs\onboarding\ - inrolare-calculator-nou.md (masina noua) si inrolare-proiect-git-text.md (proiect nou): pasii detaliati, verificari complete si note operationale FoxBin2Prg.