# GUÍA — Primeros pasos con Claude Code

> Cómo arrancar la Etapa 1 con Claude Code siguiendo el método. Tu rol acá es **director**: decidís
> qué se hace, validás el output, no traducís entre el agente y el código.

---

## 0. Antes de tocar Claude Code

1. Creá el repo y copiá estos archivos respetando la estructura:
   ```
   encuestas-soberanas/
   ├── CLAUDE.md
   ├── ARCHITECTURE.md
   ├── DATA_MODEL.md
   ├── .claude/
   │   ├── settings.json          ← este (commiteable: deny compartido)
   │   └── settings.local.json    ← lo creás vos (gitignored: tus allow personales)
   ├── docs/adr/
   │   ├── ADR-001-privacidad-y-gobierno-de-datos.md
   │   ├── ADR-002-stack-tecnologico.md
   │   └── ADR-003-consentimiento-versionado.md
   └── sprints/sprint-1/
       ├── BRIEF.md
       └── ETAPA_1_PROMPT.md
   ```
2. `git init`, primer commit con estos archivos **antes** de generar código. Así cada cambio del
   agente es auditable contra un punto de partida limpio.
3. Agregá un `.gitignore` con `.env`, `.env.*`, `.claude/settings.local.json`. **El `.gitignore` es la
   protección real de los secretos**; las reglas `Read(...)` de `settings.json` son defensa adicional
   pero han tenido fallas conocidas — no dependas solo de ellas.

## 1. Instalar Claude Code

Se distribuye como paquete npm: `@anthropic-ai/claude-code`. La forma recomendada de instalar cambia
seguido (npm global, instalador nativo, etc.), así que seguí la oficial actual:
**https://docs.claude.com/en/docs/claude-code/overview**. Necesita Node.js; verificá la versión
mínima en esa misma página. Lo abrís desde la carpeta del repo para que cargue tu `.claude/`.

## 2. Entender los permisos versionados (`.claude/settings.json`)

El método separa **protecciones (deny, compartidas)** de **preferencias (allow, personales)**:

- `settings.json` (commiteable) → reglas **deny** críticas que hereda todo el equipo: bloquea
  `rm -rf` peligrosos, `git push --force`, `git reset --hard`, y lectura de secretos. Incluye
  `"disableBypassPermissionsMode": "disable"`, que impide usar `--dangerously-skip-permissions` — es
  la barrera de equipo contra el anti-patrón AP.7.
- `settings.local.json` (gitignored) → tus **allow** personales para que los comandos rutinarios
  (`npm run`, `supabase migration`, etc.) no te pidan aprobación a cada paso. Ejemplo:
  ```json
  {
    "permissions": {
      "allow": [
        "Bash(npm run:*)",
        "Bash(npm install)",
        "Bash(supabase migration new:*)",
        "Bash(supabase db reset)",
        "Bash(git add:*)",
        "Bash(git commit:*)"
      ]
    }
  }
  ```
- Las reglas se evalúan **deny → ask → allow**; deny siempre gana. Aceptá la fricción ocasional de un
  `ask` como precio de la gobernanza; no skipees permisos de rutina.

## 3. Arrancar la Etapa 1 — mensaje inicial corto

No pegues el prompt entero en el chat (anti-patrón AP.6). El prompt ya vive en el repo. Tu mensaje
inicial es corto y referencia paths (Patrón B.2). Algo así:

```
Vamos con la Etapa 1 del Sprint 1.

Leé en este orden antes de tocar nada:
1. CLAUDE.md (reglas no negociables — especialmente privacidad y la política de niveles)
2. ARCHITECTURE.md y docs/adr/ADR-001-privacidad-y-gobierno-de-datos.md
3. DATA_MODEL.md (el contrato de esquema que vas a implementar)
4. sprints/sprint-1/BRIEF.md y sprints/sprint-1/ETAPA_1_PROMPT.md

Ejecutá la Etapa 1 según ETAPA_1_PROMPT.md. Respetá el alcance: solo esquema + RLS +
constraints + función de k-anonimato + tablas de consentimiento + seed. Nada de frontend.

Cuando termines, reportá en el formato de la sección 7 del prompt, con la salida de
git diff --name-only HEAD. No declares la etapa lista solo por tests verdes.
```

## 4. Tu loop de validación (cuando el agente reporta)

No confíes en "todo OK". Aplicá las 3 preguntas (auditoría adversarial, Principio 3):

1. **¿Los números cuadran?** Pedí la salida concreta de `agg_segment` para n=3 y n=5, el conteo de
   preguntas del seed, el nº de tablas. Si el reporte describe en vez de mostrar, pedí los datos.
2. **¿Es el artefacto que pedí?** Abrí el esquema generado (Supabase Studio o el SQL de las
   migraciones) **con tus ojos**. ¿Están las 7 tablas? ¿`responses.respondent_id` es nullable y va
   NULL? ¿Existe el constraint anti-`respondent_id`?
3. **¿Qué NO menciona el reporte?** Si el reporte está más limpio de lo esperado, sospechá. Revisá
   `git diff --name-only HEAD`: ¿tocó algún archivo fuera de scope?

Checklist mínima específica de esta etapa:
- [ ] Probá vos mismo: como rol de organización, ¿podés leer una fila cruda? (debe dar 0)
- [ ] Probá: `INSERT` con `respondent_id` en encuesta anónima → debe fallar.
- [ ] Probá: `UPDATE` sobre `consent_records` → debe fallar.
- [ ] Mirá el seed: ¿B1/C1/D1 despliegan sus sub-preguntas según las reglas condicionales?

## 5. Qué NO hacer (anti-patrones)

- **No** declares la etapa lista por "tests verdes" sin abrir el esquema (AP.1).
- **No** pegues briefs gigantes en el chat; viven en el repo (AP.6).
- **No** uses `--dangerously-skip-permissions` de rutina (AP.7) — ya está bloqueado en settings.json.
- **No** dejes que el agente "arregle de paso" algo de privacidad/consentimiento: es Nivel 3, consulta antes (AP.8).
- Si una convención (formato de cifras, idioma) aparece 2 veces como pregunta → documentala en
  `CONVENTIONS.md` (AP.4).

## 6. Antes de cargar datos reales (no en v1 interno)

- Resolver la **residencia de datos** (ADR-002 abierto): self-host vs Cloud.
- Validar el flujo de consentimiento y el lenguaje legal con un **asesor paraguayo** (Ley 7593/2025).
- Hasta entonces, v1 corre con **datos de prueba/simulados**, no con respuestas reales de ciudadanos.

---

### Qué sigue después de la Etapa 1
Validada la fundación de datos, las próximas etapas (a especificar en sus prompts) son: el formulario
funcional sobre este esquema, y luego el dashboard con los reportes cruzados. El wizard de creación
de encuestas viene después de validar el caso fijo. Cada una arranca con su prompt versionado.
