skills: 9 skill-uri de agent ROA (COMUN\skills) + legare si rutare
- 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
This commit is contained in:
@@ -14,30 +14,30 @@ atingi zona X, citeste fisierul Y"). Restul se deschid doar la declansator.
|
||||
| `reguli_lucru.md` | intotdeauna, la inceput de sesiune |
|
||||
| `orchestrare-subagenti.md` | cand delegi, cand verifici ce intoarce un subagent, la predarea contextului |
|
||||
| `monitorizare-context.md` | instalarea hook-urilor de prag de context si de revizie a docs |
|
||||
| `fluxul_svn_git.md` | orice commit / `svn update` / `roa_sync`; ce e interzis pe `main` in COMUN |
|
||||
| `fluxul_svn_git.md` | orice commit / `svn update` / `roa_sync` -> skill `roa-git-svn-commit` |
|
||||
| `scripturi-uzuale.md` | exista deja un script pentru sarcina asta? (roa_sync, curatenie, livrare, diagnostice) |
|
||||
| **VFP** | |
|
||||
| `cautare_vcx_vct.md` | cauti cod in `.vcx`/`.scx`/`.frx`/`.mnx` |
|
||||
| `flux-editare-vfp-text.md` | editezi `.vc2`/`.sc2` + write-back; **invariantele si `*p:`/`*m:`** |
|
||||
| `conventie_encoding_cp1252.md` | fisierul editat are diacritice (cp1250, nu cp1252) |
|
||||
| `cautare_vcx_vct.md` | cauti cod in `.vcx`/`.scx`/`.frx`/`.mnx` -> skill `roa-vfp-text-edit` |
|
||||
| `flux-editare-vfp-text.md` | editezi `.vc2`/`.sc2` + write-back; invariantele si `*p:`/`*m:` -> skill `roa-vfp-text-edit` |
|
||||
| `conventie_encoding_cp1252.md` | fisierul editat are diacritice (cp1250, nu cp1252) -> skill `roa-vfp-text-edit` |
|
||||
| `inventar-comun.md` | inainte de cod nou: exista deja o functie/clasa comuna? |
|
||||
| `conventie_ux_formulare.md` | adaugi/rearanjezi controale pe formular |
|
||||
| `capcana_grid_controlsource.md` | grid needitabil pe formular cu 2+ grid-uri |
|
||||
| `capcana_grid_preferinte_utilizator.md` | adaugi o coloana intr-un grid deja livrat |
|
||||
| `conventie_go_recno.md` | `GO` pe un `Recno()` capturat |
|
||||
| `conventie_null_vfp.md` | garzi pe valori NULL din Oracle |
|
||||
| `conventie_go_recno.md` | `GO` pe un `Recno()` capturat -> skill `roa-vfp-go-recno` |
|
||||
| `conventie_null_vfp.md` | garzi pe valori NULL din Oracle -> skill `roa-vfp-null-guards` |
|
||||
| `conventie_goexecutor_alter_table.md` | `ALTER TABLE` pe cursorul de la `oExecute()` |
|
||||
| **Testare** | |
|
||||
| `depanare_testare_vfp.md` | rulare headless, depanare bug runtime, capcane VFP |
|
||||
| `testare-ui-vfp.md` | test cu formular real + screenshots (harness UI) |
|
||||
| `depanare_testare_vfp.md` | rulare headless, depanare bug runtime, capcane VFP -> skill `roa-vfp-headless-test` |
|
||||
| `testare-ui-vfp.md` | test cu formular real + screenshots (harness UI) -> skill `roa-vfp-headless-test` |
|
||||
| **Oracle** | |
|
||||
| `conventie_mediu_oracle.md` | te conectezi la dev/test, alegi schema, rulezi un script de pachet |
|
||||
| `conexiuni-tunel-ssh-odbc.md` | ajungi la un Oracle de PRODUCTIE prin tunel SSH (Bitvise) + alias TNS + DSN ODBC |
|
||||
| `scripturi-migrare-db.md` | modifici schema (tabele/view-uri/pachete); compatibilitate 10.2 |
|
||||
| `publicare-scripturi-db.md` | publici scripturile catre clienti |
|
||||
| `oracle_export.md` | reexporti sursa unui pachet PL/SQL |
|
||||
| `depanare-pack-update.md` | actualizarea ROA nu se finalizeaza la un client |
|
||||
| `depanare-spatiu-oracle.md` | spatiu plin la un client |
|
||||
| `conexiuni-tunel-ssh-odbc.md` | ajungi la un Oracle de PRODUCTIE prin tunel SSH (Bitvise) + alias TNS + DSN ODBC -> skill `roa-oracle-production-access` |
|
||||
| `scripturi-migrare-db.md` | modifici schema (tabele/view-uri/pachete); compatibilitate 10.2 -> skill `roa-oracle-migration` |
|
||||
| `publicare-scripturi-db.md` | publici scripturile catre clienti -> skill `roa-oracle-migration` |
|
||||
| `oracle_export.md` | reexporti sursa unui pachet PL/SQL -> skill `roa-oracle-migration` |
|
||||
| `depanare-pack-update.md` | actualizarea ROA nu se finalizeaza la un client -> skill `roa-oracle-diagnostic` |
|
||||
| `depanare-spatiu-oracle.md` | spatiu plin la un client -> skill `roa-oracle-diagnostic` |
|
||||
| **Domeniu** | |
|
||||
| `flux-modificare-stergere-nota-jurnal.md` | modificare/stergere nota; ce face `PACK_CONTAFIN` |
|
||||
| `tipuri_documente_facturare.md` | `VANZARI.TIP` si seturile de contare `ID_SET` |
|
||||
|
||||
59
docs/cercetare/rec_skills.md
Normal file
59
docs/cercetare/rec_skills.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# rec_skills - skill-uri de agent pentru suita ROA
|
||||
|
||||
Data: 2026-09-16. Status: aplicat (9 skill-uri create, rutare + backstop puse in docs).
|
||||
|
||||
## Decizie
|
||||
|
||||
- Skill-ul este **proprietarul procedurii**; docurile din `COMUN\docs` raman **referinta
|
||||
conditionata**, deschisa doar cand o ramura cere detaliu. Motiv: sa nu se incarce contextul de
|
||||
doua ori si sa nu existe doi proprietari pentru aceeasi regula. (Suprapunerea masurata inainte
|
||||
de unificare: 18-42% din liniile corpului unui skill erau identice cu linii din docuri.)
|
||||
- Fiecare SKILL.md: frontmatter doar `name` + `description` (comun ambelor host-uri), corp
|
||||
auto-suficient cu secventele `Cand se foloseste / Pasi (sau Regula) / Capcane / Criterii de
|
||||
acceptare si dovada / Scripturi / Referinta (doar la nevoie)`, cel mult 1 pointer conditio nat la
|
||||
un doc.
|
||||
- Skill-urile traiesc in `COMUN\skills\<nume>\SKILL.md`, versionate in `comun.git`.
|
||||
- Sunt expuse host-urilor prin symlink in `%USERPROFILE%\.claude\skills\` - director citit si de
|
||||
Claude Code, si de opencode - fara copiere: `COMUN\utile\leaga_skills.ps1` (idempotent, `-DryRun`).
|
||||
- Declansarea automata vine din `description` (ambele host-uri); "de fiecare data" vine din
|
||||
**backstop-ul always-on**: `reguli_lucru.md` pct. 7 (citit la fiecare sesiune) + `AGENTS.md`
|
||||
(pentru opencode, care nu citeste `CLAUDE.md`) + ancora in `CLAUDE.md`.
|
||||
|
||||
## Inventar
|
||||
|
||||
| Skill | Deschide cand (zonele) |
|
||||
|---|---|
|
||||
| `roa-vfp-text-edit` | editare `.vcx/.scx` pe text (`.vc2/.sc2`), cautare in binare, encoding cp1250, write-back |
|
||||
| `roa-vfp-headless-test` | rulare/depanare teste VFP headless, harness UI + screenshots |
|
||||
| `roa-git-svn-commit` | commit / `svn update` / `roa_sync` in COMUN |
|
||||
| `roa-oracle-migration` | scriere + publicare scripturi de migrare, re-export pachet PL/SQL |
|
||||
| `roa-oracle-diagnostic` | update ROA blocat la client, tablespace/disc plin |
|
||||
| `roa-oracle-production-access` | acces Oracle de productie (tunel SSH + TNS + DSN ODBC) |
|
||||
| `roa-vfp-null-guards` | garzi pe valori NULL din Oracle in VFP |
|
||||
| `roa-vfp-go-recno` | `GO` pe un `Recno()` capturat sau primit ca parametru |
|
||||
| `roa-oracle-sqlexec-no-data` | procedura PL/SQL cu `SELECT ... INTO` apelata din VFP (randuri pierdute tacut) |
|
||||
|
||||
## Cum se adauga un skill nou
|
||||
|
||||
1. Creezi `COMUN\skills\<nume>\SKILL.md` (contractul de mai sus; `name` = numele folderului,
|
||||
lowercase-cu-cratima).
|
||||
2. Rulezi `COMUN\utile\leaga_skills.ps1` (creeaza symlink-ul in `%USERPROFILE%\.claude\skills\`).
|
||||
3. Adaugi o linie de rutare in `reguli_lucru.md` pct. 7 si in `AGENTS.md` (`README.md` pentru
|
||||
index). Nu duplici regula din docs: skill-ul o detine.
|
||||
4. Verifici cu cele doua asertiuni: (a) nicio linie din `CLAUDE.md`/`AGENTS.md`/`reguli_lucru.md`/
|
||||
`README.md` nu ruteaza o zona acoperita catre un doc; (b) fiecare skill are cel mult 1 pointer
|
||||
conditio nat la un doc.
|
||||
|
||||
## Verificari la data aplicarii
|
||||
|
||||
- 9/9 skill-uri: ASCII pur, fara BOM, `name` = folder, descriere <= 1024, exact 1 bullet sub
|
||||
`## Referinta (doar la nevoie)`.
|
||||
- 0 rute reziduale zona -> doc in `CLAUDE.md`, `AGENTS.md`, `reguli_lucru.md`, `README.md`.
|
||||
- `leaga_skills.ps1`: 4 create apoi idempotent (0 create, 9 ok); director real cu acelasi nume
|
||||
niciodata sters (nici cu `-Force`).
|
||||
|
||||
## Neaplicat / de facut manual
|
||||
|
||||
- Commit: git pe branch (`claude/...`), fara push; `svn commit` + `roa_sync` + merge raman la
|
||||
Marius (fluxul SVN+git din `fluxul_svn_git.md`).
|
||||
- Pe celelalte calculatoare: `git pull` in `COMUN\` + `leaga_skills.ps1` (o data).
|
||||
@@ -96,7 +96,7 @@
|
||||
garda fara caz in datele de test nu e garda moarta (regula 6); `/ponytail-audit` pe tot
|
||||
arborele nu se ruleaza aici.
|
||||
4. Testare headless (fara IDE): `vfp9.exe -A -T "<script.prg>" <param>` din PowerShell.
|
||||
Mediu, sabloane, capcane, depanare: `depanare_testare_vfp.md`.
|
||||
Mediu, sabloane, capcane, depanare: skill roa-vfp-headless-test (headless si UI; criteriile lui blocheaza "gata").
|
||||
Rularile intermediare acopera doar familiile de teste atinse de modificarea curenta; suita
|
||||
completa, inclusiv testele de garda pe zonele vecine, se ruleaza doar la rularea finala —
|
||||
garzile exista fiindca schimbarile cad de regula in cod partajat (`COMUN`), vizibil in toate
|
||||
@@ -107,41 +107,32 @@
|
||||
**0,5s** intre teste, nu implicitul de 12 minute / 3s, rezervat rularii finale unde chiar
|
||||
conteaza sa distingi "atarnat" de "lent". Tinta: o rulare intermediara sta in secunde-minute,
|
||||
nu ore — daca depaseste, lista e prea larga sau timeout-ul prea mare.
|
||||
5. Editare .vcx/.scx pe text (cache, cp1250 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`.
|
||||
5. Editare `.vcx`/`.scx` pe text, cautare in binare: skill roa-vfp-text-edit (cache, cp1250
|
||||
byte-safe, fidelity-check si membrii noi sunt in procedura lui). 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. Verificarea a
|
||||
ce se intoarce si modelul de lucru (backlog de story-uri mici): `orchestrare-subagenti.md`.
|
||||
7. Conventii obligatorii, de citit cand atingi zona respectiva:
|
||||
- editezi `.vc2`/`.sc2` sau `.prg` cu diacritice (ex. `programe\ocautare.prg`, unde `s`-urile cu
|
||||
virgula din `masina`/`si contul`/`transa` sunt octetul `0xBA`) -> fisierele sunt **cp1250**
|
||||
desi antetul FoxBin2Prg declara `CPID="1252"`; Edit/Write corup TOT fisierul (nu doar linia
|
||||
atinsa), ireversibil, la fiecare scriere - scrie continut nou strict ASCII. Cens obligatoriu
|
||||
**inainte SI dupa** fiecare editare (la stricare CRESTE, nu scade):
|
||||
`od -An -tx1 <fisier> | tr ' ' '\n' | grep -v '^$' | awk '$1>"7f"' | sort | uniq -c`. Tabelul
|
||||
complet de octeti, sensul censului la stricare si procedura de recuperare din git/svn ->
|
||||
`conventie_encoding_cp1252.md`;
|
||||
- adaugi o PROPRIETATE sau o METODA noua intr-o clasa `.vc2`/`.sc2` -> `flux-editare-vfp-text.md`,
|
||||
sectiunea "Membri noi de clasa": fara intrarea `*p:`/`*m:` in `*<DefinedPropArrayMethod>`
|
||||
membrul trece fidelity-check-ul, dar VFP nu-l vede si prima salvare din IDE il sterge tacut;
|
||||
- editezi `.vc2`/`.sc2` sau `.prg` cu diacritice -> skill roa-vfp-text-edit (el detine procedura; criteriile lui blocheaza "gata");
|
||||
- adaugi o PROPRIETATE sau o METODA noua intr-o clasa `.vc2`/`.sc2` -> skill roa-vfp-text-edit (membrul nou si `*p:`/`*m:` sunt in procedura lui; criteriile lui blocheaza "gata");
|
||||
- adaugi/rearanjezi controale pe formulare sau coloane in grid -> `conventie_ux_formulare.md`;
|
||||
- grid needitabil pe formular cu 2+ grid-uri -> `capcana_grid_controlsource.md`;
|
||||
- adaugi o coloana intr-un grid deja livrat (ordinea din clasa e neutralizata de
|
||||
preferintele salvate per utilizator) -> `capcana_grid_preferinte_utilizator.md`;
|
||||
- `GO` pe un `Recno()` capturat/primit ca parametru -> `conventie_go_recno.md`;
|
||||
- `GO` pe un `Recno()` capturat/primit ca parametru -> skill roa-vfp-go-recno (el detine procedura; criteriile lui blocheaza "gata");
|
||||
- `ALTER TABLE` pe cursorul intors de `goExecutor.oExecute()` -> `conventie_goexecutor_alter_table.md`;
|
||||
- testare UI -> `testare-ui-vfp.md`;
|
||||
- testare UI -> skill roa-vfp-headless-test (acopera si testul headless; criteriile lui blocheaza "gata");
|
||||
- te conectezi la Oracle pe dev/test, alegi schema sau rulezi un script de pachet ->
|
||||
`conventie_mediu_oracle.md`;
|
||||
- garzi pe valori NULL din Oracle -> `conventie_null_vfp.md`;
|
||||
- procedura PL/SQL cu `SELECT ... INTO` chemata din VFP (linii pierdute tacut) ->
|
||||
`capcana_sqlexec_no_data_found.md`;
|
||||
- export date din Oracle -> `oracle_export.md`;
|
||||
- actualizarea ROA nu se finalizeaza (job update, PACK_UPDATE) -> `depanare-pack-update.md`;
|
||||
- modifici schema Oracle (tabele/view-uri/pachete) -> `scripturi-migrare-db.md`.
|
||||
- garzi pe valori NULL din Oracle -> skill roa-vfp-null-guards (el detine procedura; criteriile lui blocheaza "gata");
|
||||
- procedura PL/SQL cu `SELECT ... INTO` chemata din VFP (linii pierdute tacut) -> skill roa-oracle-sqlexec-no-data (el detine procedura; criteriile lui blocheaza "gata");
|
||||
- export date din Oracle -> skill roa-oracle-migration (reexportul sursei de pachet e in procedura lui; criteriile lui blocheaza "gata");
|
||||
- actualizarea ROA nu se finalizeaza (job update, PACK_UPDATE) -> skill roa-oracle-diagnostic (acopera si spatiul plin; criteriile lui blocheaza "gata");
|
||||
- modifici schema Oracle (tabele/view-uri/pachete) -> skill roa-oracle-migration (scriere + publicare scripturi; criteriile lui blocheaza "gata").
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user