Files
agents_and_robots/dev/issues/completed/0027-prune-config-schema.md
T
egutierrez 37384af2a0 docs: cerrar issue 0027
Mover issue 0027-prune-config-schema a completed/ y actualizar indice.
Todas las tareas implementadas: schema podado, template simplificado,
configs de agentes limpiados, tests de parsing agregados.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 00:21:15 +00:00

3.9 KiB

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):

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):

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.