Fb2P_Diff: actualizare proiect + texte regenerate; PROMPT_cautare_vfp: flux editare/write-back

Modificari pre-existente (09.07) comise separat de fluxul git-text;
.pj2/.sc2 reimprospatate din binare cu git_sync.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-16 11:22:36 +03:00
parent 76ca98f0bf
commit 558973f0c6
5 changed files with 52 additions and 37 deletions

View File

@@ -32,7 +32,7 @@ _AutoIncrement = "0"
*<BuildProj> *<BuildProj>
*<.HomeDir = 'e:\se\vfpx\foxbin2prg\fb2p_diff' /> *<.HomeDir = 'd:\roa\util\foxbin2prg\fb2p_diff' />
FOR EACH loProject IN _VFP.Projects FOXOBJECT FOR EACH loProject IN _VFP.Projects FOXOBJECT
loProject.Close() loProject.Close()
@@ -70,9 +70,9 @@ ENDWITH
WITH loProject WITH loProject
*<ProjectProperties> *<ProjectProperties>
.SetMain(lcCurdir + 'main_fb2p_diff.prg') .SetMain("main_fb2p_diff.prg")
.Icon = lcCurdir + 'fb2p_diff.ico' .Icon = "fb2p_diff.ico"
.Debug = .T. .Debug = .T.
.Encrypted = .F. .Encrypted = .F.
*<.CmntStyle = 1 /> *<.CmntStyle = 1 />

Binary file not shown.

Binary file not shown.

View File

@@ -3,5 +3,4 @@
*-------------------------------------------------------------------------------------------------------------------------------------------------------- *--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.21" SourceFile="fb2p_diff.scx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) *< FOXBIN2PRG: Version="1.21" SourceFile="fb2p_diff.scx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
* *
* *

View File

@@ -1,9 +1,10 @@
# Prompt: căutare în cod VFP (foxbin2prg) — reutilizabil în orice proiect Visual FoxPro # Prompt: căutare și editare în cod VFP (foxbin2prg) — reutilizabil în orice proiect Visual FoxPro
Acest fișier conține un **prompt gata de copiat** pentru Claude Code (sau alt agent), care Acest fișier conține un **prompt gata de copiat** pentru Claude Code (sau alt agent), care
configurează și folosește sistemul `foxbin2prg` ca să poată căuta cod-sursă aflat **în interiorul configurează și folosește sistemul `foxbin2prg` ca să poată **căuta** cod-sursă aflat **în interiorul
fișierelor binare VFP** (`.vcx/.vct`, `.scx/.sct`, `.frx/.frt`, `.mnx/.mnt`, `.dbc/.dct`) într-un fișierelor binare VFP** (`.vcx/.vct`, `.scx/.sct`, `.frx/.frt`, `.mnx/.mnt`, `.dbc/.dct`) într-un
proiect nou. proiect nou — și, pentru `.vcx`/`.scx`, să poată și **modifica** acel cod direct pe text, cu
write-back în binar (`txt2vcx.ps1`), fără trecere prin IDE-ul VFP.
Unealta e partajată și stă la `D:\ROA\UTIL\foxbin2prg\` — nu trebuie copiată per proiect. Doar Unealta e partajată și stă la `D:\ROA\UTIL\foxbin2prg\` — nu trebuie copiată per proiect. Doar
spui agentului care e proiectul curent (folderul + fișierul `.pjx`). spui agentului care e proiectul curent (folderul + fișierul `.pjx`).
@@ -14,9 +15,10 @@ spui agentului care e proiectul curent (folderul + fișierul `.pjx`).
1. Deschide proiectul VFP în Claude Code. 1. Deschide proiectul VFP în Claude Code.
2. Copiază blocul de mai jos în prompt. 2. Copiază blocul de mai jos în prompt.
3. Înlocuiește cele **2 valori** marcate `<<...>>` cu datele proiectului tău: 3. Înlocuiește cele **3 valori** marcate `<<...>>` cu datele proiectului tău:
- `<<RADACINA_PROIECT>>` = folderul rădăcină al proiectului (ex. `D:\ROA\ROAGEST`) - `<<RADACINA_PROIECT>>` = folderul rădăcină al proiectului (ex. `D:\ROA\ROAGEST`)
- `<<FISIER_PJX>>` = calea către `.pjx` (ex. `D:\ROA\ROAGEST\roagest.pjx`) - `<<FISIER_PJX>>` = calea către `.pjx` (ex. `D:\ROA\ROAGEST\roagest.pjx`)
- `<<NUME_PROIECT>>` = etichetă scurtă pentru folderul de cache (ex. `roagest`)
--- ---
@@ -34,9 +36,11 @@ Ca să poți căuta în acel cod, folosește unealta partajată foxbin2prg, care
PARAMETRII PROIECTULUI CURENT: PARAMETRII PROIECTULUI CURENT:
- Rădăcină proiect: <<RADACINA_PROIECT>> - Rădăcină proiect: <<RADACINA_PROIECT>>
- Fișier proiect (.pjx): <<FISIER_PJX>> - Fișier proiect (.pjx): <<FISIER_PJX>>
- Cache text: D:\ROA\_vfp_textcache\<<NUME_PROIECT>>
REGULA DE AUR: textul generat e DOAR pentru citire/căutare. Orice modificare de cod se face în REGULA DE AUR: cache-ul text e sursa pentru CĂUTARE (toate tipurile de binar) și, DOAR pentru
IDE-ul VFP, în fișierul binar (.vcx/.scx/...), niciodată în text. .vcx/.scx, și pentru EDITARE cu write-back (txt2vcx.ps1, vezi PAS 3). Pentru .frx/.mnx/.dbc
textul rămâne doar pentru citire — modificările la ele se fac în IDE-ul VFP, pe binar.
PAS 1 — populează cache-ul text (la începutul sesiunii, sau după ce s-a modificat ceva în IDE). PAS 1 — populează cache-ul text (la începutul sesiunii, sau după ce s-a modificat ceva în IDE).
Rulează în PowerShell (e incremental — sare peste ce e deja la zi): Rulează în PowerShell (e incremental — sare peste ce e deja la zi):
@@ -60,40 +64,44 @@ CONVERSIE PUNCTUALĂ (un fișier sau folder care NU e în proiect, ex. o librăr
ALTE OPȚIUNI: -Force (reconvertește tot), -Clean (șterge cache-ul întâi). ALTE OPȚIUNI: -Force (reconvertește tot), -Clean (șterge cache-ul întâi).
PAS 3 — modificare de cod în .vcx/.scx (flux write-back pe text). Ordinea e obligatorie:
a. Investighează pe cache, propune modificarea și AȘTEAPTĂ ACORDUL pe abordare înainte să
editezi ceva.
b. Refresh cache (PAS 1) dacă a rulat vreo sesiune de IDE de la ultimul refresh (staleness-ul
se verifică pe mtime și txt2vcx refuză corect scrierea peste modificări nevăzute). Înainte
de write-back închide COMPLET VFP IDE și exe-ul aplicației — procesele reziduale țin lock
pe binare.
c. Editează .vc2/.sc2 BYTE-SAFE: formatul e position-sensitive (nu reformata/reflow linii),
proprietățile sunt alfabetizate (una nouă se inserează la locul ei alfabetic). Headerul
CPID="1252" poate minți despre codepage-ul real al diacriticelor — citește/scrie fișierul
ca bytes (PowerShell), conținutul NOU doar ASCII; nu folosi unelte care re-encodează.
d. Write-back:
& 'D:\ROA\UTIL\foxbin2prg\txt2vcx.ps1' -TextFile 'D:\ROA\_vfp_textcache\<<NUME_PROIECT>>\Clase\lib.vc2' -ProjectRoot '<<RADACINA_PROIECT>>' -CacheRoot 'D:\ROA\_vfp_textcache\<<NUME_PROIECT>>'
Regenerează + compilează binarul în staging, verifică fidelitatea (roundtrip byte-identic
față de textul editat) și abia apoi copiază binarul în proiect; la orice eșec proiectul
rămâne neatins. Ținte sub COMUN\ cer flag-ul -AllowComun ȘI aprobare explicită — o
modificare acolo afectează toate aplicațiile ROA.
e. Diff lizibil pentru review: extrage binarul vechi din git (git show HEAD:cale > temp, atât
.vcx cât și .vct), regenerează-i textul cu vcx2txt.ps1 -Source într-un folder temporar și
compară cu cache-ul editat: git diff --no-index. COMMIT DOAR după ce omul confirmă pe diff
și testează în IDE.
EXCEPȚII: pentru .mnx (GENMENU) și .frx (fragile la round-trip) nu există write-back — scrie
propunerea de modificare într-un fișier docs/propuneri_<subiect>.md (cod + unde se inserează),
iar aplicarea se face manual în IDE-ul VFP.
FLUX TIPIC: la prima sesiune rulează PAS 1 o dată, apoi caută cu Grep în cache (PAS 2). La FLUX TIPIC: la prima sesiune rulează PAS 1 o dată, apoi caută cu Grep în cache (PAS 2). La
sesiunile următoare rescrie doar ce s-a schimbat. Când citești codul unei metode, dă referințe sesiunile următoare rescrie doar ce s-a schimbat. Când citești codul unei metode, dă referințe
fișier:linie din cache, dar reține: editarea efectivă se face în IDE-ul VFP pe binar. fișier:linie din cache.
``` ```
## ▲▲▲ SFÂRȘIT PROMPT ▲▲▲ ## ▲▲▲ SFÂRȘIT PROMPT ▲▲▲
--- ---
## Write-back: editare directă pe text (`.vcx`/`.scx`)
Pe lângă căutare, cache-ul text poate fi acum și **sursă de editare** pentru `.vcx`/`.scx` (nu și
pentru `.mnx`/`.frx`, vezi mai jos), folosind scriptul frate `txt2vcx.ps1`:
```
& 'D:\ROA\UTIL\foxbin2prg\txt2vcx.ps1' -TextFile 'D:\ROA\_vfp_textcache\<<NUME_PROIECT>>\Clase\lib.vc2' -ProjectRoot '<<RADACINA_PROIECT>>' -CacheRoot 'D:\ROA\_vfp_textcache\<<NUME_PROIECT>>'
```
Fluxul complet: (1) refresh cache cu `vcx2txt.ps1` (obligatoriu după orice sesiune de IDE, altfel
verificarea de staleness refuză scrierea); (2) editează `.vc2`/`.sc2` direct — formatul e
**position-sensitive** (nu reformata/reflow) și proprietățile sunt **alfabetizate** (o proprietate
nouă se inserează la locul ei alfabetic); (3) revizuiește diff-ul pe text ca pe orice altă
modificare de cod; (4) rulează `txt2vcx.ps1` — regenerează și compilează binarul într-un folder de
staging, verifică fidelitatea față de textul editat, și abia apoi copiază binarul în proiect (dacă
verificarea eșuează, proiectul rămâne neatins).
Limite: `.mnx`/`.frx` rămân **doar pentru citire** (meniurile tot au nevoie de GENMENU în IDE;
formatul de raport e prea fragil pentru round-trip). Ținte sub `COMUN\` necesită flag-ul
`-AllowComun` **și** aprobare explicită — o modificare acolo afectează toate aplicațiile ROA.
Fără backup-uri `.bak` lângă binarele din proiect — git e mecanismul de restore. Detalii complete
(guard-uri, ordinea pașilor, teste): `D:\ROA\UTIL\foxbin2prg\CLAUDE.md`.
---
## Note pentru adaptare ## Note pentru adaptare
- `<<NUME_PROIECT>>` îl poți pune orice etichetă scurtă (ex. `roagest`), doar ca numele - `<<NUME_PROIECT>>` îl poți pune orice etichetă scurtă (ex. `roagest`), doar ca numele
@@ -106,6 +114,14 @@ Fără backup-uri `.bak` lângă binarele din proiect — git e mecanismul de re
- Cache-ul (`D:\ROA\_vfp_textcache\<proiect>`) e regenerabil și e în afara arborelui de versionare - Cache-ul (`D:\ROA\_vfp_textcache\<proiect>`) e regenerabil și e în afara arborelui de versionare
al proiectului (și în afara clonei foxbin2prg) — poate fi șters oricând. al proiectului (și în afara clonei foxbin2prg) — poate fi șters oricând.
- Conversia NU necesită IDE-ul VFP deschis (folosește `FoxBin2Prg.EXE` compilat). - Conversia NU necesită IDE-ul VFP deschis (folosește `FoxBin2Prg.EXE` compilat).
- Ghid complet (varianta ROAACNPRO, cu exemple): `D:\ROA\ROAACNPRO\docs\cautare_vcx_vct.md`. - Fără backup-uri `.bak` lângă binarele din proiect — git e mecanismul de restore; `txt2vcx.ps1`
ține o copie de siguranță doar în folderul temp al rulării.
- Editările de volum se pot delega la subagenți (Sonnet, în background) — sesiunea principală
orchestrează, verifică diff/fidelity și intervine doar la deblocări și decizii.
- Detalii complete despre write-back (guard-uri, encoding, dialoguri VFP modale la text corupt,
testul de regresie `test_roundtrip.ps1`): `D:\ROA\UTIL\foxbin2prg\CLAUDE.md`.
- Exemplu funcțional, rodat pe ROAGEST: `D:\ROA\ROAGEST\docs\flux-editare-vfp-text.md` și
`D:\ROA\ROAGEST\docs\CLAUDE.md` (modul de lucru complet, cu review pe diff înainte de commit).
- Ghid complet doar-căutare (varianta ROAACNPRO, cu exemple): `D:\ROA\ROAACNPRO\docs\cautare_vcx_vct.md`.
- Tabel corespondență binar → text: `.vcx``.vc2`, `.scx``.sc2`, `.frx``.fr2`, `.mnx``.mn2`, - Tabel corespondență binar → text: `.vcx``.vc2`, `.scx``.sc2`, `.frx``.fr2`, `.mnx``.mn2`,
`.dbc``.dc2`, `.lbx``.lb2`. `.dbc``.dc2`, `.lbx``.lb2`.