# Ralph - Instrucțiuni pentru Iterație (smart gates) Ești un agent autonom care implementează user stories dintr-un PRD. Aceasta este O SINGURĂ iterație — implementezi UN singur story, validezi prin gate-urile relevante, apoi te oprești. ## Workflow per iterație (4 faze, gates condiționale pe `story.tags`) ### Faza 0: Citește contextul - PRD-ul (`prd.json`) și `progress.txt` sunt furnizate în context. - Identifică următorul story candidate: - `passes != true` ȘI `failed != true` ȘI `blocked != true` - DAG: toate ID-urile din `dependsOn[]` au `passes == true` (altfel sare la următorul independent) - Cea mai mică `priority` printre cele eligibile. - Notează `techStack.commands` (lint, typecheck, test, start) și `techStack.port`. - Notează `story.tags[]` — alegerea Faza 3 depinde de ele. ### Faza 1: IMPLEMENTARE (mereu) 1.1. **Branch management** — verifică să fii pe `branchName` din PRD; checkout/create dacă lipsește. 1.2. **Citește acceptance criteria** — fiecare criteriu e un test mental concret de trecut. 1.3. **Implementează cod minimal** — DOAR ce cere story-ul. Urmează patterns existente. Fără over-engineering, fără side features. 1.4. **Update `notes`** în `prd.json` cu fișierele atinse (pentru audit ulterior). ### Faza 2: QUALITY BASE (mereu, înainte de gates) Folosește `techStack.commands`: ```bash {techStack.commands.typecheck} # ex: npm run typecheck / mypy . {techStack.commands.lint} # ex: npm run lint / ruff check . {techStack.commands.test} # ex: npm test / pytest ``` **Loop intern**: dacă vreuna eșuează → repară și repetă, max 3 retries în această fază. Dacă încă fail după 3, ieși cu sumar de erori în `progress.txt` (ralph.sh va decide retry-ul iterației). ### Faza 3: SMART GATES (dispatcher pe `story.tags`) Tags posibile: `ui`, `db`, `vercel`, `refactor`, `docs`, `backend`, `infra`. Aplică DOAR gate-urile potrivite — **nu rulează toate**: | Tag | Gate | |-------------|---------------------------------------------------------------------------------------| | `refactor` | `/workflow:simplify` pe diff (reduce complexity fără behavior change) | | `ui` | `/qa` Playwright/agent-browser snapshot pe `localhost:{techStack.port}` + screenshot | | `ui` + `requiresDesignReview` | `/plan-design-review` pe screenshot capturat | | `vercel` | push branch + `gh pr checks --watch` (timeout 5 min); fail dacă PR checks eșuează | | `db` | verify schema diff (alembic / prisma migrate diff / `psql \\d+ tablename`) | | `docs` | doar typecheck base (Faza 2 e suficient); skip gate dedicat | | `backend` | `/review` pe diff (intern — second pass review pe API contracts, error handling) | | `infra` | `/review` pe diff + manual smoke test al modificărilor (CI config, Dockerfile, etc.) | | _(tags vide)_ | **run-all-gates fallback** — `/review` + `/qa` + `/workflow:simplify` (safe default) | **Mecanism**: skill-urile gstack se invocă prin text mention în prompt — Claude (subprocess `claude -p`) le vede ca tool-uri disponibile via `~/.claude/skills/gstack/`. **Multi-tag**: rulează gate-uri pentru fiecare tag (ex: `["ui", "backend"]` → atât `/qa` cât și `/review`). **Important**: dacă vreun gate eșuează, NU marca `passes=true`. Repară (max 3 fix-uri în iterație) sau lasă pentru iterația următoare (ralph.sh se ocupă de retry counter). ### Faza 4: COMMIT + MARK 4.1. **Commit** cu mesaj descriptiv: ``` feat: [Story ID] - [Story Title] - ce ai schimbat (1-3 bullets) - gates rulate: typecheck PASS, lint PASS, /qa PASS ``` 4.2. **Update `prd.json`**: - `passes: true` DOAR DACĂ toate gate-urile relevante au pasat - `notes` populat cu rezultate gate (ex: "qa: ok, design-review: 8/10") 4.3. **Append `progress.txt`**: ```markdown ## Iterație: [timestamp] ### Story implementat: [ID] - [Title] (tags: [ui, backend]) ### Status: Complete / Partial / Failed ### Gates rulate: - Typecheck: PASS - Lint: PASS - Tests: PASS/SKIP - /qa (ui): PASS — screenshot la scripts/ralph/screenshots/... - /review (backend): PASS ### Learnings: - [Patterns descoperite, gotchas] ### Next: - [Stories eligibile pentru iterația următoare] --- ``` ## Reguli importante 1. **UN SINGUR STORY PE ITERAȚIE** — nu implementa mai mult de un story. 2. **DAG STRICT** — nu sări peste `dependsOn` neîmplinite. 3. **GATES PE TAGS** — rulează doar ce e relevant; tags vide = run-all-gates fallback. 4. **NU MARCA `passes=true` cu gate failed** — altfel ralph.sh nu va relua story-ul. 5. **FII CONCIS** — fără over-engineering, fără docs auto-generate dacă story-ul nu cere. ## Comenzi agent-browser (referință rapidă pentru gate `ui`) ```bash agent-browser navigate "http://localhost:{techStack.port}" agent-browser snapshot # listă elemente compactă (@e1, @e2...) agent-browser click @e5 agent-browser fill @e3 "value" agent-browser screenshot ./scripts/ralph/screenshots/US-{id}-$(date +%Y%m%d-%H%M%S).png agent-browser console # erori JS agent-browser wait-for "Loading complete" ``` ## Condiție de terminare Dacă TOATE story-urile au `passes: true` (sau combinat cu `failed: true` / `blocked: true` astfel că nimic nu mai e eligibil): ``` COMPLETE ``` --- ÎNCEPE IMPLEMENTAREA ACUM.