# 0027 — Limpiar config schema: eliminar codigo muerto

## Objetivo

Eliminar las secciones del config schema (`internal/config/schema.go`) que no estan implementadas ni referenciadas en el codebase. Reducir de 560 lineas / 61 structs a solo lo que realmente se usa.

## Contexto

- `internal/config/schema.go` tiene 560 lineas y 61 tipos struct
- Secciones **nunca referenciadas** en ningun archivo `.go`:
  - `ObservabilityCfg` (metrics, tracing, health) — 0 usos
  - `ResilienceCfg` (circuit breaker, retry, queue) — 0 usos
  - `AgentsCfg` (peers, delegation, protocol) — 0 usos
  - `PersonalityCfg.Communication` (18 campos: humor, quirks, catchphrases) — 0 usos
- El template `_template/config.yaml` tiene 414 lineas cuando un agente real necesita ~40
- Esto complica el onboarding y crea confusion sobre que es funcional vs especulativo

## Arquitectura

```
internal/config/schema.go     → eliminar structs muertos (~180 lineas)
agents/_template/config.yaml  → reducir a lo esencial (~60 lineas)
```

### Patron pure core / impure shell

- `pkg/` — sin cambios
- `shell/` — sin cambios
- `agents/` — template simplificado
- `internal/config/` — poda de tipos

## Tareas

### Fase 1: Auditar uso real

- [ ] **1.1** Grep cada struct/campo del schema contra todo el codebase para confirmar cuales tienen 0 referencias
- [ ] **1.2** Documentar en este issue la lista final de tipos a eliminar

### Fase 2: Podar schema.go

- [ ] **2.1** Eliminar `ObservabilityCfg` y todos sus sub-structs (LoggingCfg, MetricsCfg, HealthCfg, TracingCfg)
- [ ] **2.2** Eliminar `ResilienceCfg` y sub-structs (CircuitBreakerCfg, RetryCfg, ShutdownCfg, QueueCfg)
- [ ] **2.3** Eliminar `AgentsCfg` y sub-structs (PeerCfg, DelegationCfg)
- [ ] **2.4** Eliminar campos no usados de `PersonalityCfg` (Communication, Humor, Quirks, etc.)
- [ ] **2.5** Verificar que los campos eliminados no rompen el parsing YAML (yaml.v3 ignora campos extra por defecto)

### Fase 3: Simplificar template

- [ ] **3.1** Reescribir `agents/_template/config.yaml` con solo los campos funcionales (~60 lineas)
- [ ] **3.2** Añadir comentarios explicativos en el template para cada seccion

### Fase 4: Tests

- [ ] **4.1** Verificar que los configs existentes (`assistant-bot`, `asistente-2`, `meteorologo`) siguen parseando correctamente
- [ ] **4.2** `go build -tags goolm ./...` compila
- [ ] **4.3** `go test -tags goolm ./...` pasa

### Fase 5: Cleanup

- [ ] **5.1** Actualizar `CLAUDE.md` si se mencionan secciones eliminadas
- [ ] **5.2** Si algun config YAML existente usa campos eliminados, limpiar esas lineas

---

## Ejemplo de uso

Antes (template 414 lineas):
```yaml
personality:
  tone: friendly
  communication:
    formality: informal      # nunca se usa
    humor: light             # nunca se usa
    quirks: ["dice 'vale'"]  # nunca se usa
observability:               # nunca se usa
  logging: ...
  metrics: ...
resilience:                  # nunca se usa
  circuit_breaker: ...
```

Despues (template ~60 lineas):
```yaml
agent:
  id: mi-agente
  description: "Descripcion"
personality:
  tone: friendly
  language: es
llm:
  primary:
    provider: openai
    model: gpt-4o
matrix:
  threads:
    enabled: true
```

## Decisiones de diseno

- **Eliminar, no comentar**: codigo muerto se borra, no se comenta con "// TODO: implement"
- **Si se necesita en el futuro, se re-añade**: Git tiene historial. No mantener especulacion.
- **yaml.v3 es tolerante**: campos extra en YAML no causan error, asi que eliminar structs no rompe configs existentes que tengan esos campos

## Prerequisitos

- Ninguno

## Riesgos

- **Falso negativo en grep**: algun campo podria usarse via reflection o string matching. Mitigacion: buscar tambien por nombre de campo en strings
- **Configs de usuarios existentes**: si alguien tiene un config con `observability:`, no rompera (yaml.v3 ignora), pero el campo sera silenciosamente ignorado. Esto ya era el caso.
