30 lines
2.9 KiB
Markdown
30 lines
2.9 KiB
Markdown
|
|
# Code style — reglas mínimas
|
||
|
|
|
||
|
|
Subset siempre cargado. Para detalle completo (ejemplos, casos borde, justificaciones) ver [`.agents/skills/sf-backend-architecture/references/CODE-STYLE.md`](../../.agents/skills/sf-backend-architecture/references/CODE-STYLE.md) — invoca la skill `sf-backend-architecture` para cargarlo bajo demanda.
|
||
|
|
|
||
|
|
## Reglas que aplican siempre
|
||
|
|
|
||
|
|
- **Comentarios en español.** Inline, JSDoc, TODO. Sin excepciones.
|
||
|
|
- **Identificadores:** español para dominio (`iccid`, `activarLinea`), inglés para infraestructura técnica (`httpClient`, `eventBus`).
|
||
|
|
- **Funciones y métodos:** `camelCase`, verbo en infinitivo (`getUsuario`, `activarLinea`, `publishEvent`).
|
||
|
|
- **Variables locales y parámetros:** `camelCase` (`activationDate`, `msgData`).
|
||
|
|
- **Constantes literales de módulo:** `UPPER_SNAKE_CASE` (`DEFAULT_LIMIT = 1000`). Instancias configuradas (aunque sean `const`) van en `camelCase` (`const eventBus = new RabbitMQEventBus(...)`).
|
||
|
|
- **Clases, interfaces y tipos:** `PascalCase`.
|
||
|
|
- **Sin prefijo `I`** en interfaces (`EventBus`, no `IEventBus`).
|
||
|
|
- **`type` por defecto, `interface` solo para ports** (contratos implementados por adapters).
|
||
|
|
- **Sin `enum`** — usar uniones de strings literales (`type X = 'a' | 'b'`).
|
||
|
|
- **Sin `any` en código nuevo** salvo en boundaries de I/O externo con comentario justificando. Preferencia: `unknown` + type guard.
|
||
|
|
- **`async/await` siempre.** Nada de `.then().catch()` salvo fire-and-forget consciente con comentario.
|
||
|
|
- **Tests en español:** `describe` e `it` ambos (`it('debería ...')`).
|
||
|
|
- **Política de tests (TDD por defecto):** todo código nuevo se escribe con TDD y el repo mantiene ≥70% de cobertura. Tests del nivel apropiado (domain puro / application con mocks de ports / infrastructure cuando añade adapter). Bugs corregidos requieren test de regresión que reproduzca el fallo. Estrategia detallada en `HOUSE-STYLE.md` § Tests.
|
||
|
|
- **Errores:** `Result<E, D>` para fallos esperables, `throw` solo para invariantes rotas.
|
||
|
|
- **Aplicación:** estricto en código nuevo, oportunista al tocar código existente. No PRs masivos de retrofit.
|
||
|
|
|
||
|
|
## Excepciones de este repo
|
||
|
|
|
||
|
|
> Estas excepciones son específicas de **sf-sim**. Al copiar este fichero a un repo nuevo, sustituye esta sección (o bórrala) — los defaults de arriba aplican sin estas relajaciones.
|
||
|
|
|
||
|
|
- **Política de tests:** sf-sim es legacy con cobertura ~12%. La regla TDD + 70% es **aspiracional, no bloqueante**. Estricta para código nuevo; al tocar legacy retrofittear tests es opcional pero valorado; nada de retrofits masivos. La excepción decae cuando alcancemos el 70% global.
|
||
|
|
- `sim-objenious-cron/` no sigue las convenciones arquitectónicas: sus desvíos son intencionales por la API que consume. No auditar contra este documento salvo petición explícita.
|
||
|
|
- Carpeta `aplication/` (con typo) se mantiene tal cual hasta refactor coordinado de los path aliases del monorepo.
|