sync SVN r18140
This commit is contained in:
133
skills/roa-onboarding/SKILL.md
Normal file
133
skills/roa-onboarding/SKILL.md
Normal file
@@ -0,0 +1,133 @@
|
||||
---
|
||||
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.
|
||||
Reference in New Issue
Block a user