- leaga_skills.ps1: expune skill-urile in ~/.claude/skills prin symlink (citit si de Claude Code, si de opencode), fara copiere - rutare zona->skill in reguli_lucru pct. 7, README, AGENTS.md; skill-ul devine proprietarul procedurii, docurile raman referinta conditionata - rec_skills.md: decizia, inventarul si cum se adauga un skill nou
5.5 KiB
5.5 KiB
name: roa-vfp-text-edit
description: Editeaza cod si proprietati din binarele VFP (.vcx/.scx) prin versiunile lor text FoxBin2Prg (.vc2/.sc2) - localizeaza metoda, editeaza byte-safe, face write-back pe binar si ruleaza verificarile obligatorii. Foloseste-l OBLIGATORIU cand utilizatorul spune "editeaza metoda X din clasa Y", "adauga o proprietate in clasa Z", "modifica procedura din formularul W", "cauta in .vcx/.scx", "unde e definit ", "write-back pe binar", "txt2vcx" sau cere orice schimbare de cod care nu sta in .prg. Fluxul e cel mai predispus la coruperea ireversibila a intregului fisier: o editare gresita (diacritice rescrise, LF izolat, membru lipsa din *) strica tot binarul si trece tacit de fidelity-check. Nu improviza cu Edit/Write si nu sari peste verificarile de dovezi.
Editare cod VFP via text (.vc2/.sc2) cu write-back pe binar
Textul .vc2/.sc2 e sursa de editare; binarul .vcx/.scx (+ .vct/.sct) se regenereaza
punctual, fara VFP IDE. O singura greseala corupe ireversibil tot fisierul.
Cand se foloseste
Orice cerere care atinge cod/proprietati din binare VFP:
- "editeaza metoda X din clasa Y", "adauga proprietatea P in clasa Z", "modifica
do_salvare"; - "cauta in .vcx/.scx", "unde se defineste
<nume>", "cine mosteneste clasa W"; - "write-back pe binar", "txt2vcx", "converteste .vc2 in .vcx";
- orice schimbare de cod care nu sta in
.prg(metode de clasa / forma).
Doar .vcx si .scx au write-back. .frx/.mnx/.lbx/.pjx/.dbc/.dbf raman read-only - doar in IDE.
Pasi
- Refresh text, obligatoriu la inceput de sesiune si dupa orice sesiune IDE (staleness pe mtime):
git_sync.ps1 -ProjectRoot <root>(proiecte nemigrate:vcx2txt.ps1cu-CacheRootseparat). - Localizeaza intervalul EXACT al metodei inainte de a edita ceva:
vfp_symbols.ps1 ... -Where '<fisier>.vc2:<linie>'sau-Class '<nume>'. Fara ele nimerestiInit-ul altei clase. - Baseline:
Copy-Item <f>.vc2 <f>.vc2.pre_runda<N>.bak(langa binar, in arbore). - Cens de octeti >= 0x80 INAINTE de editare (vezi Criterii). Retine secventa exacta.
- Editeaza byte-safe: PowerShell
[IO.File]::ReadAllText/WriteAllText(..., GetEncoding(1250)). NU folosiEdit/Write(rescriu UTF-8 si distrug diacriticele). Continut nou strict ASCII, TAB-uri ca in jur, fara reflow. - Membru NOU (proprietate/metoda): adauga
*p: nume/*m: numein*<DefinedPropArrayMethod>, la pozitia alfabetica. Override de metoda mostenita NU cere*m:. - Patch review:
git diff --no-index <bak> <editat> > docs/diff_runda<N>_<subiect>.patch(exit 1 = normal). Utilizatorul aproba patch-ul; aprobarea conditioneaza COMMIT-ul, nu write-back-ul. - Write-back:
txt2vcx.ps1 -TextFile <vc2> -ProjectRoot <root>(+-AllowComunpentru tinte COMUN). Daca binarul e lockat, cere utilizatorului sa inchida sesiunea - nu omori procese. - Verificarile obligatorii de dupa write-back (vezi Criterii) - sunt separate de fidelity-check.
- Teste e2e pe cerinta initiala, cu valorile ei asteptate, pe fluxul real al utilizatorului.
- Curatenie dupa commit:
powershell -File COMUN\utile\curatenie.ps1.
Capcane
- Membru lipsa din
*<DefinedPropArrayMethod>:txt2vcxtrece fidelity-check-ul, binarul primeste valoarea, dar VFP nu materializeaza membrul; prima salvare din IDE il sterge tacit. - Ordinea alfabetica FoxBin2Prg:
_vine DUPA litere (ASCII). Ordinea canonica se citeste din<staging>\verify\*.vc2, nu se deduce. - LF izolat: here-string-urile PowerShell insereaza LF pe liniile noi -> capete de linie
amestecate.
-DryRunNU prinde asta (compara doar textul, nu CRLF vs LF). - Encoding: antetul zice
CPID="1252", dar octetii diacriticelor sunt cp1250;EF BF BDe semnatura coruperii de catre un tool UTF-8. .??2poate fi mai vechi decat binarul (snapshot): faragit_syncinainte, editezi text depasit, iar write-back-ul pierde ce s-a schimbat in IDE.Columnnu areWhen/Valid/Click- se scriu pe<grid>.<coloana>.<control>; altfel prima salvare din IDE le sterge tacit.- Nu rula Project > Build ca sa recompilezi binarul vizat: rescrie antetul tuturor librariilor.
txt2vcx.ps1/vfp_symbols.ps1fara-ProjectRootcad peROAACNPRO. Paseaza-le mereu explicit.
Criterii de acceptare si dovada
Fara dovada da/nu de mai jos, editarea NU se raporteaza ca terminata. "Arata bine" nu e dovada.
- Cens octeti >= 0x80 identic inainte/dupa (secventa, nu doar totalul):
od -An -tx1 <fisier> | tr ' ' '\n' | grep -v '^$' | awk '$1>"7f"' | sort | uniq -c-> secventa identica; cauta explicitEF BF BD(trebuie absent). - Zero LF izolat:
perl -e 'local $/; open F,"<:raw",$ARGV[0]; $d=<F>; $crlf=()=$d=~/\r\n/g; $lf=()=$d=~/\n/g; print $lf-$crlf' <fisier>-> 0. - Fidelity-check al write-back-ului:
txt2vcx.ps1a reusit, mtime nou pe.vcx+.vct. - Membrul nou prezent:
grep -n '\*[pm]: <nume>' <f>.vc2-> o linie, la pozitia alfabetica. - Round-trip binar:
vcx2txt.ps1ulterior vede binarul la zi (text regenerat identic). - Dupa orice sesiune IDE:
git_sync+ compara lista*p:/*m:cu starea de dinainte.
Scripturi
D:\ROA\UTIL\foxbin2prg\git_sync.ps1D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1D:\ROA\UTIL\foxbin2prg\txt2vcx.ps1D:\ROA\UTIL\foxbin2prg\vfp_symbols.ps1
Referinta (doar la nevoie)
- Doar daca ai nevoie de detaliile adanci (tabel de octeti, exemple de capcane), citeste
COMUN\docs\flux-editare-vfp-text.mdsiCOMUN\docs\conventie_encoding_cp1252.md.