go-hexagonal-multitenant-skillslisted
Install: claude install-skill JoseLuis21/claude-plugins
# Go hexagonal + conexiones multi-tenant por nodo
Patrón probado en producción en un servicio Lambda SQS → MySQL por nodo → PDF/XLSX → S3 +
Redis, heredando decisiones que un servicio de cierre mensual ya pagó antes.
Las plantillas en `templates/` se copian y se adaptan (son `.go.tmpl`: sustituir `<module>`
por la ruta del módulo y ajustar el nombre del paquete).
---
## 1. Layout hexagonal (el núcleo no importa adaptadores)
```
cmd/lambda binario real (SQS → servicio)
cmd/local misma lógica a disco: herramienta de paridad, NO escribe en Redis/S3
internal/core/domain entidades y reglas puras (acumuladores, filtros, errores de negocio)
internal/core/ports interfaces que el núcleo NECESITA del exterior (no "lo que el adapter ofrece")
internal/core/services casos de uso; reciben ports, nunca *sql.DB ni clientes AWS
internal/adapters/driving entrada: handler SQS/HTTP/cron
internal/adapters/driven salida: mysql, redis, s3, xlsx, pdf, localfs
internal/app wire.go: único lugar que conoce config + adapters + services
internal/config Load() lee env; Validate() falla al arrancar con lista de faltantes
internal/platform env, dates, metrics: utilidades sin dominio
```
Reglas que hacen que funcione:
- **`var _ ports.X = (*Impl)(nil)`** en cada adapter: el compilador verifica el contrato.
- **Los ports devuelven tipos del dominio** (`ValueMap`, `*domain.Company`), nunca `*sql.Rows`.
- **Streaming por