---
description: Convertește un PRD markdown în format prd.json pentru loop-ul autonom Ralph. Folosește acest skill când utilizatorul are un PRD generat și vrea să-l convertească pentru execuție autonomă cu Ralph.
---

# Skill: Ralph PRD Converter

Convertește un PRD markdown existent în format `prd.json` pentru sistemul Ralph de execuție autonomă.

## Când să folosești acest skill

- Utilizatorul are deja un PRD markdown generat (în `/tasks/prd-*.md`)
- Vrea să pregătească task-urile pentru execuție autonomă cu Ralph
- Sau vrea să inițializeze structura Ralph într-un proiect

## Workflow

### Pas 1: Verifică PRD-ul existent

```bash
ls tasks/prd-*.md
```

Dacă nu există un PRD, sugerează să folosească skill-ul `/ralph:prd` mai întâi.

### Pas 2: Citește PRD-ul și extrage user stories

Citește fișierul PRD și identifică:
- Numele proiectului
- User stories cu acceptance criteria
- Dependențe între stories

### Pas 3: Detectează Tech Stack

**Verifică fișierele de config pentru a determina stack-ul:**

```
package.json       → Node.js/JavaScript
pyproject.toml     → Python
go.mod             → Go
Cargo.toml         → Rust
pom.xml            → Java
```

**Extrage comenzi din config:**

Pentru `package.json`:
```javascript
// Citește scripts section:
{
  "scripts": {
    "dev": "next dev",           // → START_COMMAND
    "build": "next build",       // → BUILD_COMMAND
    "lint": "eslint .",          // → LINT_COMMAND
    "typecheck": "tsc --noEmit"  // → TYPECHECK_COMMAND
  }
}
```

**Mapare comenzi standard:**

| Stack | Start | Build | Lint | Typecheck |
|-------|-------|-------|------|-----------|
| Next.js | npm run dev | npm run build | npm run lint | npm run typecheck |
| Node/Express | npm start | npm run build | npm run lint | npm run typecheck |
| Python/FastAPI | uvicorn main:app --reload | - | ruff check . | mypy . |
| Go | go run . | go build | golangci-lint run | - |
| Rust | cargo run | cargo build | cargo clippy | - |

### Pas 4: Creează structura Ralph

```bash
mkdir -p scripts/ralph/logs scripts/ralph/archive scripts/ralph/screenshots
```

### Pas 5: Generează .claude/settings.json

**IMPORTANT**: Generează configurația pentru permissions allow-list bazat pe tech stack detectat.

```bash
mkdir -p .claude
```

**Template settings.json per stack:**

#### Next.js / TypeScript:
```json
{
  "permissions": {
    "allow": [
      "Bash(npm run dev)",
      "Bash(npm run build)",
      "Bash(npm run lint)",
      "Bash(npm run typecheck)",
      "Bash(npx prisma:*)",
      "Bash(npm test)",
      "Bash(npm run test:*)"
    ]
  }
}
```

#### Node.js / Express:
```json
{
  "permissions": {
    "allow": [
      "Bash(npm start)",
      "Bash(npm run dev)",
      "Bash(npm run build)",
      "Bash(npm run lint)",
      "Bash(npm test)",
      "Bash(npm run test:*)"
    ]
  }
}
```

#### Python / FastAPI:
```json
{
  "permissions": {
    "allow": [
      "Bash(uvicorn:*)",
      "Bash(python -m pytest:*)",
      "Bash(pytest:*)",
      "Bash(ruff check:*)",
      "Bash(ruff format:*)",
      "Bash(mypy:*)",
      "Bash(pip install:*)",
      "Bash(alembic:*)"
    ]
  }
}
```

#### Go:
```json
{
  "permissions": {
    "allow": [
      "Bash(go run:*)",
      "Bash(go build:*)",
      "Bash(go test:*)",
      "Bash(golangci-lint:*)",
      "Bash(go mod:*)"
    ]
  }
}
```

#### Generic (fără config detectat):
```json
{
  "permissions": {
    "allow": [
      "Bash(npm run:*)",
      "Bash(npm test)",
      "Bash(npm start)"
    ]
  }
}
```

**Verifică și merging:**
- Dacă `.claude/settings.json` există deja, citește-l și merge permissions
- Nu suprascrie setări existente, doar adaugă cele lipsă

### Pas 6: Generează prd.json

Convertește user stories în format JSON cu următoarea structură:

```json
{
  "projectName": "feature-name",
  "branchName": "ralph/feature-name",
  "description": "Descriere din PRD",
  "techStack": {
    "type": "nextjs",
    "commands": {
      "start": "npm run dev",
      "build": "npm run build",
      "lint": "npm run lint",
      "typecheck": "npm run typecheck",
      "test": "npm test"
    },
    "port": 3000
  },
  "userStories": [
    {
      "id": "US-001",
      "title": "Titlu story",
      "description": "As a [user], I want [feature] so that [benefit]",
      "priority": 1,
      "acceptanceCriteria": [
        "Criteriu specific și verificabil",
        "npm run typecheck passes"
      ],
      "requiresBrowserCheck": true,
      "passes": false,
      "notes": ""
    }
  ]
}
```

**Câmpuri noi:**
- `techStack` - informații despre stack-ul detectat
- `techStack.commands` - comenzile reale din proiect
- `techStack.port` - portul pentru dev server
- `requiresBrowserCheck` - true dacă story-ul are UI

### Pas 7: Validează mărimea stories

**CRITIC**: Fiecare story trebuie să fie completabil într-un singur context window.

#### Story de mărime corectă:
- Adaugă un câmp în baza de date
- Creează un component UI simplu
- Adaugă un endpoint API
- Scrie tests pentru o funcție specifică

#### Story prea mare (trebuie spart):
- "Implementează autentificarea completă"
- "Creează dashboard-ul admin"
- "Adaugă sistem de notificări end-to-end"

Dacă găsești stories prea mari, sparge-le în sub-stories mai mici.

### Pas 8: Setează prioritățile

Ordinea recomandată:
1. Schema/Database changes (priority: 1-10)
2. Backend logic (priority: 11-20)
3. API endpoints (priority: 21-30)
4. UI components (priority: 31-40)
5. Integration/polish (priority: 41-50)

Stories care depind de altele trebuie să aibă prioritate mai mare (număr mai mare).

### Pas 9: Verifică acceptance criteria

Fiecare story TREBUIE să aibă:
- Criterii specifice și verificabile (NU vagi ca "funcționează bine")
- Comanda reală de typecheck: `{TYPECHECK_COMMAND} passes`
- Pentru UI: `Verificare vizuală browser: [specific behavior]`

### Pas 10: Copiază template-urile Ralph din plugin

**IMPORTANT**: Copiază fișierele template direct din plugin pentru a asigura consistența.

**Execută următoarele comenzi:**

```bash
# Găsește locația plugin-ului Ralph
RALPH_PLUGIN=$(find /workspace -type f -name "ralph.sh" -path "*/plugins/ralph/templates/*" 2>/dev/null | head -1 | xargs dirname 2>/dev/null)

# Verifică că plugin-ul a fost găsit
if [ -z "$RALPH_PLUGIN" ]; then
    echo "EROARE: Nu am găsit plugin-ul Ralph în /workspace"
    echo "Asigură-te că claude-plugins este clonat în /workspace"
    exit 1
fi

echo "Plugin Ralph găsit în: $RALPH_PLUGIN"

# Copiază template-urile
cp "$RALPH_PLUGIN/prompt.md" scripts/ralph/
cp "$RALPH_PLUGIN/ralph.sh" scripts/ralph/
chmod +x scripts/ralph/ralph.sh

echo "Template-uri copiate din plugin"
```

**Dacă plugin-ul NU este găsit:**
- Informează utilizatorul că trebuie să cloneze `claude-plugins` în `/workspace`
- Sau să specifice manual locația plugin-ului

**NU genera fișierele manual** - copiază-le întotdeauna din plugin pentru a păstra consistența și a beneficia de actualizări.

### Pas 11: Inițializează progress.txt

```bash
echo "# Ralph Progress Log" > scripts/ralph/progress.txt
echo "Started: $(date)" >> scripts/ralph/progress.txt
echo "Project: [project-name]" >> scripts/ralph/progress.txt
echo "Stack: [detected-stack]" >> scripts/ralph/progress.txt
echo "---" >> scripts/ralph/progress.txt
```

### Pas 12: Verificare finală

**Verifică că toate fișierele sunt create:**

```
scripts/ralph/
├── ralph.sh          # Script principal
├── prompt.md         # Instrucțiuni (cu comenzi reale)
├── prd.json          # Task-uri și status
├── progress.txt      # Log inițializat
├── logs/             # Director pentru logs
├── archive/          # Director pentru arhivare
└── screenshots/      # Director pentru verificări vizuale

.claude/
└── settings.json     # Permissions allow-list
```

### Pas 13: Instrucțiuni finale

După completare, informează utilizatorul:

```
PRD convertit în scripts/ralph/prd.json

Structură creată:
  scripts/ralph/        - Fișiere Ralph
  scripts/ralph/screenshots/  - Pentru verificări vizuale
  .claude/settings.json - Permissions pentru comenzi

Tech stack detectat: {stack}
Comenzi configurate:
  Start:     {START_COMMAND}
  Build:     {BUILD_COMMAND}
  Typecheck: {TYPECHECK_COMMAND}
  Lint:      {LINT_COMMAND}
  Test:      {TEST_COMMAND}

Pentru a rula Ralph:
  cd [project-directory]
  ./scripts/ralph/ralph.sh [max_iterations]

Monitorizare:
  cat scripts/ralph/prd.json | jq '.userStories[] | {id, title, passes}'
  cat scripts/ralph/progress.txt

IMPORTANT:
  - Ralph va folosi agent-browser pentru verificări vizuale UI
  - Screenshots se salvează în scripts/ralph/screenshots/
  - Asigură-te că ai agent-browser instalat: npm install -g agent-browser && agent-browser install
```

## Output așteptat

- `scripts/ralph/prd.json` - task-urile în format JSON cu tech stack info
- `scripts/ralph/progress.txt` - log inițializat
- `scripts/ralph/prompt.md` - copiat din plugin (single source of truth)
- `scripts/ralph/ralph.sh` - copiat din plugin (single source of truth)
- `scripts/ralph/screenshots/` - director pentru verificări vizuale
- `.claude/settings.json` - permissions allow-list pentru tech stack
- Structura de directoare completă

## Reguli importante

1. **NU începe implementarea** - acest skill doar convertește PRD-ul
2. **Detectează tech stack** - pentru comenzi și settings.json
3. **Validează mărimea stories** - sparge-le dacă sunt prea mari
4. **Prioritizează corect** - dependențele trebuie respectate
5. **Criterii verificabile** - nu vagi, ci specifice
6. **Inițializează `passes: false`** pentru toate stories
7. **Generează settings.json** - pentru allow-list permissions
8. **COPIAZĂ template-urile din plugin** - NU le genera manual, folosește `find` pentru a localiza plugin-ul și copiază `prompt.md` și `ralph.sh` din templates/
