Files
2026-09-16 14:33:43 +03:00

134 lines
8.2 KiB
Markdown

---
name: roa-onboarding
description: 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
6. 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`.
7. 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).
8. `.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).
9. 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`.
10. 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.
11. `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.
12. 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
13. 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.
14. 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.
15. 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.