Serviciul ANAF intoarce HTTP 404 cu corp complet pentru codurile inexistente
({"found":[],"notFound":[...]}), iar wrapper-ul citea corpul doar pe 200 - deci
verdictul "cod inexistent" nu aparea niciodata. Corpul se citeste acum la orice
status, iar verdictul se da doar cand notFound contine chiar codul interogat;
orice alt corp neinteles inseamna "nu a raspuns", nu acuzatie.
Timeout-uri reale pe apelurile web (2/2/3/3): garda Pemstatus din jurul lui
SetTimeouts intoarce .F. pe obiectul COM legat tarziu, deci timeout-urile nu se
aplicau, iar o gazda care inghite pachetele bloca interfata ~21 s per rand.
Aceleasi timeout-uri si pe drumul batch. Fallback-ul Microsoft.XMLHTTP, fara
timeout, a fost scos de pe calea single.
Cand serviciul nu raspunde, verificarile se opresc 10 minute si banda arata ca
au fost sarite, in loc sa taca. La deschiderea formularului pleaca o sonda
asincrona de disponibilitate, cu termen de viata, guard de reintrare si Abort()
la inchidere; randul care asteapta verdictul nu face apel propriu. Cache doar pe
rezultate pozitive. Codul fiscal nenumeric primeste mesaj propriu, in banda si
in detaliile F4.
ParseJsonANAFv8 restaureaza formatul datei si pe calea de eroare (o exceptie
lasa toata sesiunea pe YMD).
Teste: suita headless 70/70, cu sonda si clasele de esec mock-uite (fara retea)
si fixture peste corpurile 404 masurate pe serviciul real.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DhJwsrFFe1ZNAAtS8Twuti
52 lines
4.2 KiB
Markdown
52 lines
4.2 KiB
Markdown
# 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: NU se pun comentarii in corpul codului (nici la functionalitati noi).
|
|
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).
|