From 558973f0c66b4c6f8fa0a2a59134a099c6e1d72c Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Thu, 16 Jul 2026 11:22:36 +0300 Subject: [PATCH] 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 --- Fb2P_Diff/fb2p_diff.pj2 | 6 +-- Fb2P_Diff/fb2p_diff.pjt | Bin 3712 -> 5056 bytes Fb2P_Diff/fb2p_diff.pjx | Bin 1973 -> 1973 bytes Fb2P_Diff/fb2p_diff.sc2 | 1 - PROMPT_cautare_vfp.md | 82 ++++++++++++++++++++++++---------------- 5 files changed, 52 insertions(+), 37 deletions(-) diff --git a/Fb2P_Diff/fb2p_diff.pj2 b/Fb2P_Diff/fb2p_diff.pj2 index e13e649..ebc2c25 100644 --- a/Fb2P_Diff/fb2p_diff.pj2 +++ b/Fb2P_Diff/fb2p_diff.pj2 @@ -32,7 +32,7 @@ _AutoIncrement = "0" * -*<.HomeDir = 'e:\se\vfpx\foxbin2prg\fb2p_diff' /> +*<.HomeDir = 'd:\roa\util\foxbin2prg\fb2p_diff' /> FOR EACH loProject IN _VFP.Projects FOXOBJECT loProject.Close() @@ -70,9 +70,9 @@ ENDWITH WITH loProject * - .SetMain(lcCurdir + 'main_fb2p_diff.prg') + .SetMain("main_fb2p_diff.prg") - .Icon = lcCurdir + 'fb2p_diff.ico' + .Icon = "fb2p_diff.ico" .Debug = .T. .Encrypted = .F. *<.CmntStyle = 1 /> diff --git a/Fb2P_Diff/fb2p_diff.pjt b/Fb2P_Diff/fb2p_diff.pjt index f2d7fb41e7ca7a4790202d8fe9c39a36b3e6753c..04543d895ac48468f0f11b77abe260182dcbb8db 100644 GIT binary patch delta 134 zcmZpWJ)q9Pz`)=S#15M$a{Xo$U<5MtU94h){2gOLLp*&Z3o$7%Moczi3gl5tv5G0m zPmC!o$;_ENiOFE|VI~)L3{e~=Y%b&CVwrq^iH)6Ah8buFBhb1{Oq&;QH8KGJCQTy~ delta 111 zcmX@0-XP1tz`$Sy#15M$a{XrHX9P0!T&-e)U1P%B0wN|0Gbu3{F-$gN3glKuwTdZD fjVVhjsF*yN$zby#CRcWJK>-Hr25c_l;$i^+2|FA7 diff --git a/Fb2P_Diff/fb2p_diff.pjx b/Fb2P_Diff/fb2p_diff.pjx index 534c871e66d64e6dfa1390d4f984a073c10d7f29..5409fce3b69cc1d51a65212bec8e2edc7d44ea60 100644 GIT binary patch delta 24 fcmdnWzm=cGK#HAnBg (Solo para binarios VFP 9 / Only for VFP 9 binaries) * - * \ No newline at end of file diff --git a/PROMPT_cautare_vfp.md b/PROMPT_cautare_vfp.md index e283024..7d34c49 100644 --- a/PROMPT_cautare_vfp.md +++ b/PROMPT_cautare_vfp.md @@ -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 -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 -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 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. 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: - `<>` = folderul rădăcină al proiectului (ex. `D:\ROA\ROAGEST`) - `<>` = calea către `.pjx` (ex. `D:\ROA\ROAGEST\roagest.pjx`) + - `<>` = 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: - Rădăcină proiect: <> - Fișier proiect (.pjx): <> +- Cache text: D:\ROA\_vfp_textcache\<> -REGULA DE AUR: textul generat e DOAR pentru citire/căutare. Orice modificare de cod se face în -IDE-ul VFP, în fișierul binar (.vcx/.scx/...), niciodată în text. +REGULA DE AUR: cache-ul text e sursa pentru CĂUTARE (toate tipurile de binar) și, DOAR pentru +.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). 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). +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\<>\Clase\lib.vc2' -ProjectRoot '<>' -CacheRoot 'D:\ROA\_vfp_textcache\<>' + + 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_.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 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 ▲▲▲ --- -## 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\<>\Clase\lib.vc2' -ProjectRoot '<>' -CacheRoot 'D:\ROA\_vfp_textcache\<>' -``` - -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 - `<>` î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\`) e regenerabil și e în afara arborelui de versionare al proiectului (și în afara clonei foxbin2prg) — poate fi șters oricând. - 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`, `.dbc`→`.dc2`, `.lbx`→`.lb2`.