# Dimensión 8 — Detección de duplicación de reglas globales

## Por qué existe

Las reglas en `~/.claude/rules/` se cargan automáticamente en cada
sesión SWL. Si un proyecto duplica inline el contenido de esas reglas
en su `CLAUDE.md`, ocurren tres patologías:

1. **Bloat acumulativo**: 7-15 líneas por regla duplicada × N proyectos
   = inflación silenciosa que rompe el umbral de 200 LOC.
2. **Drift al actualizar la global**: si la regla global cambia, las
   copias en cada CLAUDE.md quedan obsoletas sin alerta.
3. **Erosión del contrato canónico**: cada CLAUDE.md re-deriva el
   principio con palabras propias, generando 4 paráfrasis distintas
   del mismo contenido.

La regla `reglas/sin-duplicacion-reglas-globales.md` (v1.7.0) prohíbe
esta duplicación. Esta dimensión del auditor la detecta.

## Catálogo declarativo

`scripts/lib/reglas-globales-conocidas.json` lista las reglas globales
conocidas con sus patrones de detección. Estructura por entrada:

```json
{
  "id": "idioma-espanol-mexico",
  "regla_global": "brevedad-output.md",
  "seccion_canonica": "Idioma obligatorio: español de México",
  "referencia_canonica": "@~/.claude/rules/brevedad-output.md § Idioma obligatorio",
  "patrones": ["\\bespañol\\s+de\\s+M[ée]xico\\b", "..."],
  "min_matches": 2,
  "remediacion_sugerida": "Eliminar el bloque local..."
}
```

Reglas incluidas en v1.7.0:

- `idioma-espanol-mexico` (brevedad-output.md § Idioma)
- `brevedad-sin-aiisms` (brevedad-output.md § Brevedad)
- `git-sin-coautores` (git-coauthor.md)
- `arreglar-al-detectar` (arreglar-al-detectar.md)
- `debatir-antes-de-aceptar` (debatir-antes-de-aceptar.md)
- `usar-context7` (usar-context7.md)

## Cuándo NO se evalúa

- **User-level** (`~/.claude/CLAUDE.md`): ahí sí pueden declararse
  preferencias personales que parafrasean reglas globales. La opción
  `esUserLevel: true` skipea la evaluación.
- **Archivos < 20 LOC**: CLAUDE.md mínimos no acumulan duplicaciones
  con suficiente densidad para evaluar.

## Capa async — hook

`hooks/claudemd-duplicacion-detector.js` (PostToolUse, no bloquea)
ejecuta el detector tras cualquier Write/Edit a CLAUDE.md y emite
nudge a `.planning/evolution/nudges.jsonl` con `kind:
claudemd-duplicacion-reglas`. Opt-out: `SWL_CLAUDEMD_DUPLICACION=0`.

## Cómo refactorizar duplicaciones detectadas

Tres opciones para cada hallazgo:

1. **Eliminar** (default recomendado): el bloque solo repite la regla
   global, eliminarlo no pierde información.
2. **Convertir a matiz local** (≤3 líneas): si el bloque agrega valor
   local genuino, reescribirlo corto referenciando la regla global:
   ```markdown
   Convenciones locales: identificadores técnicos en inglés (rutas,
   comandos). Ver @~/.claude/rules/brevedad-output.md.
   ```
3. **Documentar override explícito** (raro): si el proyecto contradice
   la regla global por requerimiento documentable:
   ```markdown
   Override de @~/.claude/rules/brevedad-output.md § Brevedad: este
   proyecto exige docstrings extendidos por compliance regulatorio.
   ```

## Anti-patrón: "lo dejo por claridad"

La regla global YA es visible — se carga automáticamente. Duplicarla
no aumenta su prioridad ni su claridad; solo crea deuda. Si el WARN
del auditor incomoda, la respuesta correcta es **resolver la
duplicación**, no aceptar el WARN.
