verificare partener: garda pe cont NULL, hook-uri de disciplina, docs compactate
- ooperatii_comune: verific_partener nu mai construieste SQL NULL cand contul primit e NULL (EMPTY(.NULL.) e .F. in VFP) - utile\context_watch.ps1 si utile\docs_revizie_check.ps1: masurarea contextului sesiunii si cadenta reviziei de documentatie, prin hook-uri Claude Code (instalare in docs\monitorizare-context.md) - reguli_lucru: delegare la subagenti, modificari minime si scoped, scrierea si revizuirea documentatiei, changelog strictul necesar (regulile 3, 6, 9, 11, 12) - scripturi-migrare-db: continutul unui script (scoped, fara select, idempotent) - teste noi pentru cele doua erori din achizitia de import - restul documentatiei compactata, fara pierdere de reguli Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RYbiinqXxdEqXi53x4Ro7K
This commit is contained in:
@@ -1,48 +1,46 @@
|
||||
# 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).
|
||||
Pasi 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.
|
||||
Proiecte deja inrolate: ROACONT, ROAGEST, ROAAUTO, ROAIMOB, ROAACNPRO, ROAFACTURARE + COMUN
|
||||
(romfast/comun.git). Modelul de referinta e 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.
|
||||
- Foloseste EXCLUSIV PowerShell (NU 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 (`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`, `test_git_sync.ps1`,
|
||||
`test_roundtrip.ps1`. Citeste-le inainte (macar help-ul din git_sync.ps1).
|
||||
`roa_sync.ps1` (+ `test_roa_sync.ps1`) traieste in `COMUN\scripts\` si vine
|
||||
singur cu svn update; in foxbin2prg a ramas doar un stub de compatibilitate.
|
||||
2. Proiectul e working copy SVN valid (`svn info D:\ROA\<PROIECT>`), cu `COMUN\`
|
||||
inauntru (external SVN).
|
||||
3. Repo-ul gitea exista: `git ls-remote git@gitea.romfast.ro:romfast/<proiect>.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).
|
||||
1. Tooling partajat in `D:\ROA\UTIL\foxbin2prg\`: `git_sync.ps1`, `vfp_filemap.ps1`,
|
||||
`txt2vcx.ps1`, `test_git_sync.ps1`, `test_roundtrip.ps1`. Citeste-le inainte (macar help-ul
|
||||
din git_sync.ps1). `roa_sync.ps1` (+ `test_roa_sync.ps1`) traieste in `COMUN\scripts\` si
|
||||
vine singur cu svn update; in foxbin2prg a ramas doar un stub de compatibilitate.
|
||||
2. Proiectul e working copy SVN valid (`svn info D:\ROA\<PROIECT>`), cu `COMUN\` inauntru
|
||||
(external SVN).
|
||||
3. Repo-ul gitea exista: `git ls-remote git@gitea.romfast.ro:romfast/<proiect>.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).
|
||||
- `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
|
||||
|
||||
@@ -50,25 +48,25 @@ ROAFACTURARE + COMUN (romfast/comun.git). Modelul de referinta este ROACONT.
|
||||
& D:\ROA\UTIL\foxbin2prg\git_sync.ps1 -ProjectRoot D:\ROA\<PROIECT>
|
||||
```
|
||||
|
||||
- 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.
|
||||
- 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`;
|
||||
- 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, <proiect>_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.
|
||||
- Copiaza `D:\ROA\ROACONT\.gitignore` ca model si adapteaza: sectiunea machine-local (exe-ul
|
||||
proiectului, <proiect>_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
|
||||
@@ -81,13 +79,12 @@ git -C D:\ROA\<PROIECT> 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;
|
||||
- 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).
|
||||
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
|
||||
|
||||
@@ -100,35 +97,34 @@ git -C D:\ROA\<PROIECT>\COMUN reset origin/main # mixed: pastreaza disc
|
||||
git -C D:\ROA\<PROIECT>\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.
|
||||
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\ROAFACTURARE\roa_sync.bat` in radacina proiectului (e generic,
|
||||
foloseste `%~dp0` si cheama `COMUN\scripts\roa_sync.ps1`) si include-l in commit.
|
||||
Utilizatorul il ruleaza la inceput de sesiune: svn update -> git_sync -> commit
|
||||
"sync SVN rN" pe main (proiect + COMUN) -> reconciliere cu origin + push (doar
|
||||
commit-uri de sync) -> inchide branch-urile claude/* cu diff gol.
|
||||
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. Utilizatorul il ruleaza la inceput de
|
||||
sesiune: svn update -> git_sync -> commit "sync SVN rN" pe main (proiect + COMUN) -> reconciliere
|
||||
cu origin + push (doar commit-uri de sync) -> 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).
|
||||
- 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.
|
||||
- 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.
|
||||
- `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.
|
||||
|
||||
Reference in New Issue
Block a user