diff --git a/CLAUDE.md b/CLAUDE.md index 2b8baae..2e0d3d0 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -33,19 +33,42 @@ ROA applications (ROAACNPRO, ROAGEST, etc.). ## Searching code inside `.vcx`/`.scx` (binary) libraries -Most class/form code lives **inside binaries** (`.vcx`+`.vct`, `.scx`+`.sct`, …), not in `.prg`, -so plain grep can't read it cleanly. Convert to TEXT form first and grep the text: +Git tracks the **FoxBin2Prg text versions** of the VFP binaries (`.vc2/.sc2/.fr2/.mn2/.lb2/.pj2/.dc2/.db2`), +generated in-tree next to each binary — not the binaries themselves, which are git-ignored. Refresh +with `git_sync.ps1` (folder-mode, recursive, incremental): ```powershell -powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 ` - -Project D:\ROA\ROAAUTO\roaauto.pjx -ProjectRoot D:\ROA\ROAAUTO ` - -CacheRoot D:\ROA\UTIL\foxbin2prg\_textcache_roaauto +powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\git_sync.ps1 -ProjectRoot D:\ROA\ROAAUTO ``` -This is project-driven (reads `roaauto.pjx`, converts only the `.vcx`/`.scx` the project -actually uses) and writes to a **cache dedicated to this project** -(`D:\ROA\UTIL\foxbin2prg\_textcache_roaauto\`) — don't mix it with other ROA projects' caches -(e.g. `_textcache_roaacnpro`). Then `Grep` in that cache. Full guide: `docs/cautare_vcx_vct.md`. +Run it **at the start of every session and before any `git commit`** so the text matches the +binaries. It converts in a temp staging area and copies back only the text, continues past +per-file failures, and exits nonzero on any failure: **do not commit while `git_sync` reports +unexplained failures.** Then search the `.??2` files in-tree with Grep (e.g. `PROCEDURE do_salvare`), +citing `file:line`. + +Editing: write-back text→binary via `txt2vcx.ps1` is supported **only for `.vc2/.sc2`** (vcx/scx); +`.frx/.mnx/.lbx/.pjx/.dbc/.dbf` are editable **only in the VFP IDE** (no write-back). See +`D:\ROA\UTIL\foxbin2prg\CLAUDE.md` and `COMUN\docs\flux-editare-vfp-text.md`. + +Grep can't tell **which class/method** a hit inside a `.vc2` belongs to (the class header may be +thousands of lines above it, and ~2/3 of the file is properties/metadata). `vfp_symbols.ps1` +indexes the line range of every class/method/procedure and labels hits with their owner — use it +before any `txt2vcx.ps1` edit to get the exact line range of the method you are changing. Its +built-in defaults target ROAACNPRO, so always pass this project's paths: + +```powershell +$s = 'D:\ROA\UTIL\foxbin2prg\vfp_symbols.ps1' +$c = @('-CacheRoot', 'D:\ROA\ROAAUTO', '-ProjectRoot', 'D:\ROA\ROAAUTO', '-IndexFile', 'D:\ROA\_vfp_textcache\roaauto\_symbols.tsv') + +powershell -ExecutionPolicy Bypass -File $s @c -Grep '' -CodeOnly # hits labeled class.method, code only +powershell -ExecutionPolicy Bypass -File $s @c -Where '.vc2:' # who owns this line +powershell -ExecutionPolicy Bypass -File $s @c -Find '' # where it is DEFINED +powershell -ExecutionPolicy Bypass -File $s @c -Class '' # inheritance chain + methods +``` + +The index (`_symbols.tsv`) rebuilds itself when the text is newer, so refresh the text first — it +can't see IDE edits that were never converted. Full search guide: `COMUN\docs\cautare_vcx_vct.md`. ## The COMUN shared framework @@ -60,7 +83,7 @@ every other ROA app). Preferințele lui Marius pentru sesiunile pe acest proiect: - **Delegare**: modificările de cod de volum/rutină (aplicarea unei propuneri din `docs/propuneri_*.md`, editări pe cache-ul text + write-back, actualizări de documentație, rulări de teste) se deleagă către **subagenți Sonnet care lucrează în background** (team agents — Agent tool cu `model: sonnet`, lane-uri paralele unde e posibil), iar sesiunea principală doar orchestrează și monitorizează: împarte planul pe lane-uri, transmite constatările între agenți, verifică rezultatele (diff, teste, fidelity) și intervine direct doar la deblocări (procese agățate), decizii și verificări. -- **Fără commit fără review**: nu da commit din proprie inițiativă pe modificări de cod — Marius vrea întâi să **vadă diff-ul**. Pentru binarele VFP (`.vcx`/`.scx`), diff-ul lizibil se face pe forma text: regenerează textul din binarul vechi (HEAD din git) cu `vcx2txt.ps1 -Source` și compară-l cu textul editat din cache (`git diff --no-index`). Commit doar după ce Marius confirmă pe diff. +- **Fără commit fără review**: nu da commit din proprie inițiativă pe modificări de cod — Marius vrea întâi să **vadă diff-ul**. Pentru binarele VFP (`.vcx`/`.scx`), diff-ul lizibil se vede direct cu `git diff` pe textul `.vc2`/`.sc2` din arbore (rulează întâi `git_sync.ps1`, ca textul să corespundă binarelor). Commit doar după ce Marius confirmă pe diff. - **Arată diff-ul complet după orice modificare**: după ce agenții (proprii sau subagenți) termină o rundă de editări — inclusiv la asamblarea rezultatelor din lane-uri paralele — afișează-i lui Marius diff-ul complet (`git diff`, nu doar rezumat/`--stat`) înainte de a continua la pasul următor sau de a cere aprobare, nu doar un sumar descriptiv al schimbărilor. ## Project insights (docs/)