# 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\\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\\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).