verificare partener: garda pe cont NULL, hook-uri de disciplina, docs compactate
- ooperatii_comune: verific_partener nu mai construieste SQL NULL cand contul primit e NULL (EMPTY(.NULL.) e .F. in VFP) - utile\context_watch.ps1 si utile\docs_revizie_check.ps1: masurarea contextului sesiunii si cadenta reviziei de documentatie, prin hook-uri Claude Code (instalare in docs\monitorizare-context.md) - reguli_lucru: delegare la subagenti, modificari minime si scoped, scrierea si revizuirea documentatiei, changelog strictul necesar (regulile 3, 6, 9, 11, 12) - scripturi-migrare-db: continutul unui script (scoped, fara select, idempotent) - teste noi pentru cele doua erori din achizitia de import - restul documentatiei compactata, fara pierdere de reguli Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RYbiinqXxdEqXi53x4Ro7K
This commit is contained in:
@@ -1,60 +1,81 @@
|
||||
# Reguli de lucru agent (comune proiectelor ROA VFP)
|
||||
|
||||
1. Modificari de cod: livreaza FISIER de diff `docs\diff_runda<N>_<subiect>.patch`
|
||||
(`git diff --no-index <baseline.bak> <editat>`), nu diff in terminal.
|
||||
Write-back in binar (txt2vcx) si commit DOAR dupa aprobarea patch-ului de catre utilizator.
|
||||
Patch-urile sunt intermediare de review: NU se comit NICIODATA in git (sunt in
|
||||
.gitignore ca `docs/diff_runda*.patch`); raman doar local, pe disc.
|
||||
Curatenie: dupa commit se sterg patch-urile de review si backup-urile de lucru
|
||||
(`*.pre_runda*.bak`).
|
||||
2. Comentarii in cod: minime si strict functionale - descriu comportamentul CURENT, ca si cum
|
||||
codul ar fi fost scris asa de la inceput. O linie de regula; 2-3 linii doar pentru o metoda
|
||||
cu contract nebanal (parametri, cursorul asteptat/lasat deschis, pozitionarea la iesire).
|
||||
Istoricul modificarilor sta DOAR in ANTETUL fisierului, niciodata inline; se aplica la fel
|
||||
in `.prg` si in package-urile/procedurile PL/SQL Oracle.
|
||||
INTERZIS in comentariu: nume de agent ("claude"), referinte la documente de propuneri sau la
|
||||
decizii/etape (`docs/propuneri_*.md`, "M2", "T3", "dec.6", "runda27", "E7", "D-H2"), istoricul
|
||||
modificarii ("inlocuieste ...", "nu mai depinde de ...", "mutat din ..."), date si autori pe
|
||||
cod nou. Comentariile vechi in stil jurnal nu se rescriu din oficiu - doar cand blocul e
|
||||
oricum atins, sau la cerere explicita.
|
||||
In ANTETUL fisierului se tine o singura intrare CUMULATIVA per functionalitate, in stilul
|
||||
existent (`*!* DD.MM.YYYY` / `*!* autor` / `*!* ce face, 1-2 fraze`): la revenirea pe aceeasi
|
||||
lucrare se rescrie intrarea, nu se adauga alta. Autorul e persoana care semneaza livrarea
|
||||
(ex. `marius.mutu`) - niciodata "claude" sau alt nume de agent.
|
||||
Se descrie doar comportamentul final, fara referinte la revizii, runde, patch-uri sau la
|
||||
corectii facute pe parcurs. La rezolvari de erori NU se adauga comentarii deloc.
|
||||
Explicatiile merg in docs/ sau in mesajul de commit, nu in cod.
|
||||
Changelog (`changelog_<aplicatie>.txt`): text minimal, pe limba utilizatorului, nu tehnic,
|
||||
o fraza scurta per intrare. Cat timp lucrarea nu a ajuns la utilizatori (fara deploy),
|
||||
erorile introduse si corectate in interiorul ei NU se pomenesc - intrarea descrie
|
||||
functionalitatea asa cum ajunge la utilizator, `:nou:`/`:modificare:`; `:eroare:` ramane
|
||||
doar pentru erori care au fost in productie.
|
||||
3. Modificari minime: doar ce s-a cerut; fara refactorizari sau curatenie din oficiu.
|
||||
4. Testare headless (fara IDE): `vfp9.exe -A -T "<script.prg>" <param>` din PowerShell.
|
||||
Mediu, sabloane, capcane si metoda de depanare: `depanare_testare_vfp.md`.
|
||||
5. Editare .vcx/.scx pe text (cache, cp1252 byte-safe, fidelity-check): `flux-editare-vfp-text.md`.
|
||||
Cautare in binare: `cautare_vcx_vct.md`.
|
||||
Versiunile `.??2` sunt instantanee si pot fi mai vechi decat binarul - verifica mtime-ul
|
||||
inainte de a trage concluzii din ele; continutul real al proiectului se citeste din `.PJX`.
|
||||
6. Misiuni lungi (teste, investigatii, sarcini inlantuite): NU un singur subagent cu context
|
||||
acumulat — orchestrator + subagenti proaspeti per sarcina (max ~200-250k tokens/subagent),
|
||||
handoff compact pe disc: `orchestrare-subagenti.md`.
|
||||
7. Conventii obligatorii, de citit cand atingi zona respectiva:
|
||||
- editezi orice fisier cu octeti cp1252 - `.vc2`/`.sc2`, dar si `.prg` (ex. `programe\ocautare.prg`,
|
||||
unde `s`-urile cu virgula din `masina`/`si contul`/`transa` sunt octetul `0xBA`) ->
|
||||
`conventie_encoding_cp1252.md`. Orice write cu un tool care nu scrie cp1252 nativ (Edit/Write)
|
||||
corupe caracterele >= 0x80 din TOT fisierul (`0xBA` -> `EF BF BD`), chiar daca schimbi o singura
|
||||
linie, si o face din nou la FIECARE scriere. Deci: editezi tot ce ai de editat, si abia DUPA ultima
|
||||
scriere verifici byte-level si repari o singura data; daca mai editezi dupa reparare, se strica iar.
|
||||
Verificare: `perl -ne 'print "$.\n" if /[\x80-\xFF]/' <fisier>`; reparare (aici pentru `0xBA`):
|
||||
`perl -e 'binmode(STDIN);binmode(STDOUT);local $/;$_=<STDIN>;s/\xEF\xBF\xBD/\xBA/g;print' < f > f.tmp`.
|
||||
ATENTIE: `EF BF BD` nu spune ce caracter s-a pierdut - toate diacriticele devin la fel. Ia octetul
|
||||
corect per pozitie din `svn cat <fisier>` (SVN are versiunea necorupta) si abia apoi inlocuieste;
|
||||
o inlocuire oarba cu `0xBA` strica `a`/`t` cu caciula (`0xE3`, `0xFE`) din alte fisiere;
|
||||
- adaugi/rearanjezi controale pe formulare sau coloane in grid -> `conventie_ux_formulare.md`;
|
||||
- scrii cod cu `GO` pe un `Recno()` capturat sau primit ca parametru -> `conventie_go_recno.md`;
|
||||
- `ALTER TABLE` pe cursorul intors de `goExecutor.oExecute()` -> `conventie_goexecutor_alter_table.md`;
|
||||
- testare UI / prin MCP -> `testare-ui-vfp.md`, `testare-vfp-mcp.md`;
|
||||
- export date din Oracle -> `oracle_export.md`;
|
||||
- modifici schema Oracle (tabele/view-uri/pachete) -> `scripturi-migrare-db.md`
|
||||
(unde stau scripturile de migrare si modelele pentru scripturi noi).
|
||||
# Reguli de lucru agent (comune proiectelor ROA VFP)
|
||||
|
||||
1. Modificari de cod: diff ca FISIER `docs\diff_runda<N>_<subiect>.patch`
|
||||
(`git diff --no-index <baseline.bak> <editat>`), nu in terminal. Write-back in binar (txt2vcx)
|
||||
si commit DOAR dupa aprobarea patch-ului. Patch-urile (in .gitignore, `docs/diff_runda*.patch`)
|
||||
nu se comit niciodata, raman local. Dupa commit: sterge patch-urile si backup-urile
|
||||
`*.pre_runda*.bak`.
|
||||
2. Comentarii in cod: minime, strict functionale, descriu comportamentul CURENT (ca si cum ar fi
|
||||
scris asa de la inceput) — o linie de regula, 2-3 doar pentru metode cu contract nebanal
|
||||
(parametri, cursor asteptat/lasat deschis, pozitionare la iesire). Istoricul modificarilor
|
||||
sta DOAR in ANTETUL fisierului (niciodata inline) — la fel in `.prg` si in PL/SQL Oracle.
|
||||
INTERZIS in comentariu: nume de agent ("claude"), referinte la propuneri/decizii/etape
|
||||
(`docs/propuneri_*.md`, "M2", "T3", "dec.6", "runda27", "E7", "D-H2"), istoricul modificarii
|
||||
("inlocuieste...", "nu mai depinde de...", "mutat din..."), date si autori pe cod nou.
|
||||
Comentarii vechi in stil jurnal nu se rescriu din oficiu — doar cand blocul e oricum atins
|
||||
sau la cerere explicita.
|
||||
Antet: o singura intrare CUMULATIVA per functionalitate (`*!* DD.MM.YYYY` / `*!* autor` /
|
||||
`*!* ce face, 1-2 fraze`) — la revenire se rescrie intrarea, nu se adauga alta; autorul e cine
|
||||
semneaza livrarea (ex. `marius.mutu`), niciodata agent. Doar comportamentul final — fara
|
||||
revizii/runde/patch-uri/corectii. La rezolvari de erori: fara comentarii.
|
||||
Explicatiile merg in docs/ sau in mesajul de commit, nu in cod.
|
||||
Changelog (`changelog_<aplicatie>.txt`): strictul necesar, pe limba utilizatorului, non-tehnic
|
||||
— 1-3 fraze/intrare, fara detalii de implementare, fara enumerarea locurilor atinse. Cat timp
|
||||
lucrarea n-a ajuns la utilizatori, erorile introduse si corectate in interior NU se mentioneaza
|
||||
— intrarea descrie functionalitatea finala, `:nou:`/`:modificare:`; `:eroare:` doar pentru erori
|
||||
care au fost in productie.
|
||||
3. Modificari minime si SCOPED: doar ce s-a cerut, doar pe cazul cu problema, fara refactorizari
|
||||
din oficiu. Cauta intai ce exista (`inventar-comun.md`) si refoloseste; daca lipseste ceva,
|
||||
propune COMPLETAREA unei functii/tabele/view comune, nu o varianta paralela. 80/20: solutia cea
|
||||
mai simpla care rezolva cazul real. Completeaza `inventar-comun.md` la orice descoperire/creare
|
||||
de element comun nedocumentat.
|
||||
4. Testare headless (fara IDE): `vfp9.exe -A -T "<script.prg>" <param>` din PowerShell.
|
||||
Mediu, sabloane, capcane, depanare: `depanare_testare_vfp.md`.
|
||||
5. Editare .vcx/.scx pe text (cache, cp1252 byte-safe, fidelity-check): `flux-editare-vfp-text.md`.
|
||||
Cautare in binare: `cautare_vcx_vct.md`. Versiunile `.??2` sunt instantanee, pot fi mai vechi
|
||||
decat binarul — verifica mtime inainte de concluzii; continutul real e in `.PJX`.
|
||||
6. Delegare: implementarile, testele, verificarile si cercetarile se dau unor subagenti Sonnet in
|
||||
background (lane-uri paralele); sesiunea principala doar orchestreaza si verifica, ca sa nu i
|
||||
se umple contextul. Misiuni lungi: subagenti proaspeti per sarcina (max ~200-250k
|
||||
tokens/subagent), nu unul singur cu context acumulat; handoff compact pe disc:
|
||||
`orchestrare-subagenti.md`.
|
||||
7. Conventii obligatorii, de citit cand atingi zona respectiva:
|
||||
- editezi fisiere cu octeti cp1252 - `.vc2`/`.sc2`, dar si `.prg` (ex. `programe\ocautare.prg`,
|
||||
unde `s`-urile cu virgula din `masina`/`si contul`/`transa` sunt octetul `0xBA`) ->
|
||||
`conventie_encoding_cp1252.md`. Orice write cu un tool ce nu scrie cp1252 nativ (Edit/Write)
|
||||
corupe caracterele >= 0x80 din TOT fisierul (`0xBA` -> `EF BF BD`), chiar la o singura linie
|
||||
schimbata, si o repeta la FIECARE scriere — editeaza tot ce ai de editat, verifica byte-level
|
||||
si repara o singura data DUPA ultima scriere. Verificare: `perl -ne 'print "$.\n" if
|
||||
/[\x80-\xFF]/' <fisier>`; reparare (pt. `0xBA`): `perl -e
|
||||
'binmode(STDIN);binmode(STDOUT);local $/;$_=<STDIN>;s/\xEF\xBF\xBD/\xBA/g;print' < f > f.tmp`.
|
||||
`EF BF BD` nu spune ce caracter s-a pierdut - toate diacriticele devin la fel; ia octetul corect
|
||||
per pozitie din `svn cat <fisier>` (necorupt) inainte sa inlocuiesti - o inlocuire oarba cu
|
||||
`0xBA` strica `a`/`t` cu caciula (`0xE3`, `0xFE`) din alte fisiere;
|
||||
- adaugi/rearanjezi controale pe formulare sau coloane in grid -> `conventie_ux_formulare.md`;
|
||||
- `GO` pe un `Recno()` capturat/primit ca parametru -> `conventie_go_recno.md`;
|
||||
- `ALTER TABLE` pe cursorul intors de `goExecutor.oExecute()` -> `conventie_goexecutor_alter_table.md`;
|
||||
- testare UI / prin MCP -> `testare-ui-vfp.md`, `testare-vfp-mcp.md`;
|
||||
- garzi pe valori NULL din Oracle -> `conventie_null_vfp.md`;
|
||||
- export date din Oracle -> `oracle_export.md`;
|
||||
- modifici schema Oracle (tabele/view-uri/pachete) -> `scripturi-migrare-db.md`.
|
||||
8. Eroare raportata de utilizator: nu analiza statica indelungata — scrie intai un test care o
|
||||
reproduce pe fluxul real; el da cauza si confirma remedierea. Analiza statica doar cat sa stii
|
||||
ce sa pui in test.
|
||||
9. Context sesiune principala: la peste **250k** salveaza contextul intr-un handoff pe disc, il
|
||||
predai unei sesiuni noi si te opresti. Limita maxima absoluta: **275k**. Nu estima - masoara:
|
||||
hook-ul din `monitorizare-context.md` anunta pragul la fiecare mesaj.
|
||||
10. Fisier de progres MASTER per proiect (`docs\progres.md`): la zi pe tot parcursul, nu doar la
|
||||
predare — stare curenta, facut/testat, ipoteze excluse (cu dovada), ce urmeaza, fisiere atinse,
|
||||
comenzi de rulat. O sesiune noua porneste de acolo, fara sa reia investigatia.
|
||||
11. La final de lucrare/cercetare: **propune** actualizarea documentatiei — `COMUN\docs\` daca e
|
||||
comun tuturor aplicatiilor, `docs\` al proiectului daca e specific (plus `inventar-comun.md`,
|
||||
regula 3). Doar relevant si reutilizabil (80/20): flux ascuns, capcana, procedura/tabela cheie
|
||||
— nu tot ce ai atins, nu verbose. Cateva randuri; propui, nu scrii din oficiu.
|
||||
O notita = regula + strictul de context ca sa fie aplicabila: fara cazul particular in care ai
|
||||
gasit-o, fara simptomele lantului de erori, fara ce se deduce din cod (cititorul stie deja).
|
||||
12. Revizuire periodica a documentatiei (`COMUN\docs\`, `docs\` al proiectului, inclusiv acest
|
||||
fisier): compacteaza pastrand semantica — taie ce se deduce din cod, exemplele repetate,
|
||||
istoricul, tot ce nu mai schimba o decizie. Scopul: docs + reguli sa ocupe cat mai putin context
|
||||
la incarcare. Propui rezultatul, nu rescrii din oficiu; nu pierzi nicio regula/capcana, doar
|
||||
cuvintele in plus. Fisierele de reguli/conventii se completeaza doar cu ce e super-util,
|
||||
simplu si concis. Cadenta o da hook-ul din `monitorizare-context.md` (marker la 30 de zile).
|
||||
|
||||
Reference in New Issue
Block a user