From c5f06c2927198b5c6e378f5da4cf55fee8c12378 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Wed, 8 Jul 2026 20:11:25 +0300 Subject: [PATCH] prompts --- docs/PROMPT_cautare_vfp.md | 83 +++++++++++++++++++++++++++ docs/git_svn_parallel_init_prompt.md | 86 ++++++++++++++++++++++++++++ 2 files changed, 169 insertions(+) create mode 100644 docs/PROMPT_cautare_vfp.md create mode 100644 docs/git_svn_parallel_init_prompt.md diff --git a/docs/PROMPT_cautare_vfp.md b/docs/PROMPT_cautare_vfp.md new file mode 100644 index 0000000..2cf8740 --- /dev/null +++ b/docs/PROMPT_cautare_vfp.md @@ -0,0 +1,83 @@ +# Prompt: căutare î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 +fișierelor binare VFP** (`.vcx/.vct`, `.scx/.sct`, `.frx/.frt`, `.mnx/.mnt`, `.dbc/.dct`) într-un +proiect nou. + +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`). + +--- + +## Cum se folosește + +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: + - `<>` = folderul rădăcină al proiectului (ex. `D:\ROA\ROAGEST`) + - `<>` = calea către `.pjx` (ex. `D:\ROA\ROAGEST\roagest.pjx`) + +--- + +## ▼▼▼ PROMPT DE COPIAT ▼▼▼ + +``` +Acest proiect este o aplicație Visual FoxPro 9. O mare parte din cod (proceduri, metode, +parametri) NU stă în fișiere .prg, ci în interiorul fișierelor binare VFP: librării de clase +(.vcx+.vct), forme (.scx+.sct), rapoarte (.frx+.frt), meniuri (.mnx+.mnt). Un grep direct pe +acestea nu e lizibil (sunt tabele DBF cu memo binar). + +Ca să poți căuta în acel cod, folosește unealta partajată foxbin2prg, care convertește binarele +în reprezentarea lor TEXT (.vc2/.sc2/.fr2/.mn2/.dc2) într-un cache, și apoi caută în cache. + +PARAMETRII PROIECTULUI CURENT: +- Rădăcină proiect: <> +- Fișier proiect (.pjx): <> + +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. + +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): + + & 'D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1' -Project '<>' -ProjectRoot '<>' -CacheRoot 'D:\ROA\UTIL\foxbin2prg\_textcache_<>' + + (Folosește un -CacheRoot distinct per proiect ca să nu amesteci cache-urile. Implicit scriptul + convertește doar .vcx și .scx; pentru a include și rapoarte/meniuri adaugă: -Types vcx,scx,frx,mnx) + +Dacă scriptul se plânge că lipsește FoxBin2Prg.EXE, trebuie compilat o singură dată: deschide +'D:\ROA\UTIL\foxbin2prg\foxbin2prg.pj2' în VFP 9 și Build > Build Executable. Anunță-mă să fac asta. + +PAS 2 — caută în cache cu unealta Grep (NU în binarele originale): + + Grep pe folderul '_textcache_<>' pentru numele de metodă/procedură/variabilă căutat. + Ex.: caută "PROCEDURE do_salvare" sau numele tabelei/cursorului implicat. + +CONVERSIE PUNCTUALĂ (un fișier sau folder care NU e în proiect, ex. o librărie din COMUN): + + & 'D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1' -Source 'CALE\catre\librarie.vcx' -CacheRoot 'D:\ROA\UTIL\foxbin2prg\_textcache_<>' + +ALTE OPȚIUNI: -Force (reconvertește tot), -Clean (șterge cache-ul întâi). + +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. +``` + +## ▲▲▲ SFÂRȘIT PROMPT ▲▲▲ + +--- + +## Note pentru adaptare + +- `<>` îl poți pune orice etichetă scurtă (ex. `roagest`), doar ca numele + folderului de cache să fie unic per proiect. +- Scriptul citește lista de fișiere direct din `.pjx`, deci convertește **doar** ce folosește + efectiv proiectul (rapid), nu tot `COMUN\`. +- Cache-ul (`_textcache_*`) e regenerabil și e în afara arborelui de versionare al proiectului — + 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`. +- Tabel corespondență binar → text: `.vcx`→`.vc2`, `.scx`→`.sc2`, `.frx`→`.fr2`, `.mnx`→`.mn2`, + `.dbc`→`.dc2`, `.lbx`→`.lb2`. diff --git a/docs/git_svn_parallel_init_prompt.md b/docs/git_svn_parallel_init_prompt.md new file mode 100644 index 0000000..e0fb5cd --- /dev/null +++ b/docs/git_svn_parallel_init_prompt.md @@ -0,0 +1,86 @@ +# Prompt: init git in paralel cu SVN pentru un proiect ROA + +Foloseste acest prompt intr-o sesiune Claude Code noua, deschisa in radacina proiectului +tinta (ex. `D:\ROA\ROAIMOB`). Functioneaza generic pentru orice proiect VFP din `D:\ROA\` +care are structura ROAACNPRO (proiect + subfolder COMUN\ partajat, ambele in SVN). + +--- + +``` +Vreau sa initializezi git pentru proiectul VFP din directorul curent, in paralel cu SVN-ul +existent (nu atinge SVN, nu rula comenzi svn, doar adauga .svn/ in .gitignore). + +Structura e identica cu D:\ROA\ROAACNPRO: acest folder e propriul proiect VFP (are un .PJX +al lui), si contine un subfolder COMUN\ care e framework-ul PARTAJAT intre toate aplicatiile +ROA, versionat separat prin SVN (are propriul .svn\). + +Fa exact ce s-a facut deja pentru ROAACNPRO (poti citi acolo ca referinta/sablon): +- D:\ROA\ROAACNPRO\.gitignore (sablon pentru .gitignore-ul proiectului principal) +- D:\ROA\ROAACNPRO\COMUN\.gitignore (sablon pentru .gitignore-ul din COMUN) +- D:\ROA\ROAACNPRO\CLAUDE.md (conventii proiect) si docs\cautare_vcx_vct.md (cum se cauta + cod in interiorul .vcx/.scx binare, via D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1) + +Pasi: + +1. Verifica intai ce exista deja: `git status`/`.git` in radacina si in COMUN\, si + `git remote -v` daca exista deja vreun remote configurat gresit (asa cum a fost cazul la + ROAACNPRO, unde originul proiectului principal pointa gresit catre repo-ul comun.git). + +2. REPO PRINCIPAL (radacina acestui folder): + - Daca nu exista .git, `git init -b main`. + - Creeaza/adapteaza .gitignore dupa modelul ROAACNPRO/.gitignore (artefacte VFP compilate: + *.fxp, *.mpx, *.bak, *.mpr, *.err, log.txt, *.tmp, *.dct, *.exe, cruft Windows), plus + obligatoriu `COMUN/` (COMUN e gestionat de git-ul lui separat, nu de-al acestui repo) + si `.svn/`. + - Deduce numele repo-ului gitea dupa conventia romfast/.git + (ex. romfast/roaimob.git). INAINTE sa creezi/pushezi orice, verifica cu + `git ls-remote git@gitea.romfast.ro:romfast/.git` daca exista deja si ce contine + (clone --depth 1 intr-un folder temporar din scratchpad daca ai dubii). Daca exista deja + cu istoric care nu se potriveste cu ce ai local, OPRESTE-TE si intreaba-ma inainte sa + faci push sau orice suprascriere. + - Daca remote-ul e gol/nou: add -A, commit "Initial commit — sursa ", adauga + origin, push normal (fara --force). + +3. COMUN\ (subfolder-ul partajat): + - Initializeaza un git SEPARAT, propriu, in interiorul COMUN\ (COMUN are propriul .git, + nu e tracked de repo-ul principal — de-asta l-am exclus mai sus). + - .gitignore propriu in COMUN\ dupa modelul ROAACNPRO/COMUN/.gitignore (artefacte VFP + + `.svn/` + `bash.exe.stackdump`). + - Origin-ul din COMUN\ trebuie sa fie EXACT acelasi repo pentru toate proiectele ROA: + git@gitea.romfast.ro:romfast/comun.git — repo-ul asta e deja populat (din COMUN-ul lui + ROAACNPRO). NU face commit+push orbeste peste el. + - Fa intai `git fetch origin`, compara continutul de pe origin/main cu fisierele locale + din acest COMUN\ (diff pe folder, nu doar pe nume). Daca sunt identice sau diferentele + sunt neglijabile, seteaza pur si simplu branch-ul local sa urmareasca origin/main (fara + sa strici fisierele din working copy SVN). Daca sunt diferente reale intre COMUN-ul + acestui proiect si cel deja impins pe gitea, arata-mi un rezumat al diferentelor si + intreaba-ma explicit cum procedez (nu face force-push fara aprobarea mea explicita — + ar sterge ireversibil istoricul comun tuturor proiectelor ROA). + +4. Cautare in cod VFP binar (.vcx/.scx) pentru acest proiect: + - Foloseste acelasi vcx2txt.ps1, dar parametrizat pentru proiectul curent (nu ROAACNPRO): + powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 ` + -Project D:\ROA\\.PJX -ProjectRoot D:\ROA\ ` + -CacheRoot D:\ROA\UTIL\foxbin2prg\_textcache_ + - Cache separat per proiect (nu-l amesteca cu _textcache al ROAACNPRO). Grep in cache-ul + respectiv, la fel ca in docs\cautare_vcx_vct.md. + +5. La final, adauga/actualizeaza CLAUDE.md al acestui proiect cu o sectiune scurta: git ruleaza + in paralel cu SVN legacy (SVN ramane sursa "vie" pentru COMUN, sincronizat manual catre git); + COMUN e partajat intre toate aplicatiile ROA prin acelasi git@gitea.romfast.ro:romfast/comun.git; + cautarile in .vcx/.scx se fac cu vcx2txt.ps1 parametrizat pentru acest proiect (vezi mai sus). + +Inainte de orice `push --force` sau orice operatie care ar suprascrie istoric remote deja +existent (mai ales pe romfast/comun.git, care e comun mai multor proiecte), opreste-te si +intreaba-ma explicit — nu decide singur. +``` + +--- + +## Note + +- Cel mai sensibil pas e COMUN\: daca versiunea de COMUN a noului proiect difera de cea deja + impinsa pe `comun.git` (din ROAACNPRO), Claude trebuie sa se opreasca si sa intrebe cum se + reconciliaza, nu sa faca force-push automat. +- Daca `romfast/.git` nu exista inca pe gitea, trebuie creat gol acolo inainte de push + (manual sau prin API) — altfel push-ul esueaza cu "repository not found".