# DIRECTIVA: Referencias Entre Proyectos

**Versión:** 1.0.0
**Fecha:** 2025-12-12
**Tipo:** Directiva Operativa - CUMPLIMIENTO OBLIGATORIO
**Aplica a:** Todos los agentes, toda documentación de orchestration

---

## PROBLEMA QUE RESUELVE

```
╔══════════════════════════════════════════════════════════════════════╗
║                                                                       ║
║   CADA PROYECTO DEBE SER INDEPENDIENTE Y AUTO-CONTENIDO              ║
║                                                                       ║
║   "Un proyecto NO debe depender de otro proyecto para funcionar."    ║
║   "Las referencias cruzadas generan acoplamiento y confusión."       ║
║                                                                       ║
╚══════════════════════════════════════════════════════════════════════╝
```

**Síntomas del problema:**
- Documentación con "Proyecto de referencia: X"
- Rutas hardcodeadas a otros proyectos (`projects/gamilit/...`)
- Directivas genéricas con nombres de proyectos específicos
- Prompts que referencian código de otros proyectos

---

## REGLA FUNDAMENTAL

```
┌─────────────────────────────────────────────────────────────────────┐
│                                                                      │
│   NUNCA referenciar un proyecto desde otro proyecto.                │
│   SIEMPRE usar core/catalog/ o core/orchestration/ como fuente.     │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘
```

---

## CLASIFICACIÓN DE REFERENCIAS

### REFERENCIAS VÁLIDAS

| Tipo | Ejemplo | Uso Correcto |
|------|---------|--------------|
| **Core Catalog** | `core/catalog/auth/` | Componentes reutilizables |
| **Core Orchestration** | `core/orchestration/directivas/` | Directivas y templates |
| **Subproyecto Interno** | `erp-suite/apps/erp-core/` | Solo desde la misma suite |
| **Ejemplos Ilustrativos** | `ejemplos: "gamilit, trading"` | Solo como ilustración marcada |
| **Histórico/Migración** | "Se adaptaron patrones de X" | Documentación de decisiones |

### REFERENCIAS PROHIBIDAS

| Tipo | Ejemplo | Por Qué Es Problema |
|------|---------|---------------------|
| **"Proyecto de referencia"** | `Proyecto referencia: gamilit` | Crea dependencia falsa |
| **Rutas directas** | `projects/gamilit/apps/backend/` | Acoplamiento entre proyectos |
| **Headers específicos** | `**Proyecto:** GAMILIT` en directiva genérica | Limita aplicabilidad |
| **Importaciones** | "copiar de projects/X" | Rompe independencia |

---

## JERARQUÍA DE DEPENDENCIAS PERMITIDA

```yaml
JERARQUÍA_VÁLIDA:

  Nivel_0_Core:
    - core/catalog/           # Funcionalidades reutilizables
    - core/orchestration/     # Directivas y templates
    - core/devtools/          # Herramientas de desarrollo

  Nivel_1_Proyecto:
    puede_depender_de:
      - Nivel_0_Core          # ✓ SIEMPRE PERMITIDO
    NO_puede_depender_de:
      - Otros proyectos       # ✗ PROHIBIDO

  Nivel_2_Subproyecto:
    puede_depender_de:
      - Nivel_0_Core          # ✓ PERMITIDO
      - Suite padre           # ✓ PERMITIDO (ej: vertical → erp-core)
    NO_puede_depender_de:
      - Otros proyectos       # ✗ PROHIBIDO
      - Otras suites          # ✗ PROHIBIDO
```

---

## PROCEDIMIENTO DE VALIDACIÓN

### Al Crear Documentación

```yaml
CHECKLIST_CREACIÓN:
  - [ ] ¿La sección "Referencias" apunta solo a core/?
  - [ ] ¿NO existe línea "Proyecto de referencia"?
  - [ ] ¿Las rutas NO contienen "projects/{otro-proyecto}/"?
  - [ ] ¿Los ejemplos están claramente marcados como tales?
  - [ ] ¿El header NO tiene nombre de proyecto específico?
```

### Al Revisar Documentación Existente

```bash
# Buscar referencias problemáticas
grep -r "Proyecto referencia" orchestration/
grep -r "projects/gamilit" orchestration/
grep -r "projects/trading" orchestration/
grep -r "projects/erp-suite" orchestration/  # Excepto si estás EN erp-suite

# Buscar rutas obsoletas
grep -r "workspace-gamilit" .
```

---

## CÓMO CORREGIR REFERENCIAS PROBLEMÁTICAS

### Caso 1: "Proyecto de Referencia"

```yaml
ANTES:
  | Proyecto referencia | `/home/isem/workspace/projects/gamilit/` |

DESPUÉS:
  # ELIMINAR la línea completamente
  # O cambiar a:
  | Catálogo global | `/home/isem/workspace/core/catalog/` |
```

### Caso 2: Ruta a Otro Proyecto

```yaml
ANTES:
  - Patrones auth: `projects/gamilit/apps/backend/src/auth/`

DESPUÉS:
  - Patrones auth: `core/catalog/auth/`
```

### Caso 3: Lista de Proyectos de Referencia

```yaml
ANTES:
  ## Proyectos de Referencia
  | Proyecto | Path | Patrones |
  | Gamilit | projects/gamilit/ | Auth, RLS |

DESPUÉS:
  ## Patrones de Referencia (desde Catálogo)
  > **Nota:** Usar siempre core/catalog/ para componentes reutilizables.

  | Patrón | Catálogo |
  | Auth | core/catalog/auth/ |
  | RLS | core/catalog/multi-tenancy/ |
```

### Caso 4: Directiva con Header de Proyecto

```yaml
ANTES:
  **Proyecto:** GAMILIT - Sistema de Gamificación

DESPUÉS:
  # Si es directiva específica del proyecto:
  **Proyecto:** {nombre del proyecto actual}

  # Si es directiva genérica (en core/):
  # ELIMINAR el header de proyecto
```

---

## EXCEPCIONES PERMITIDAS

### 1. Documentación Histórica

```markdown
# Migración de Supabase a Express
**Contexto histórico:** Se adaptaron patrones del proyecto Gamilit...

# ✓ VÁLIDO: Explica decisiones pasadas, no crea dependencia
```

### 2. Inventario de Puertos

```yaml
# DEVENV-PORTS-INVENTORY.yml
projects:
  gamilit:
    range: "3000-3099"
  trading-platform:
    range: "3200-3299"

# ✓ VÁLIDO: Es inventario del workspace, no dependencia
```

### 3. Ejemplos Ilustrativos en SIMCO

```yaml
NIVEL_2A_STANDALONE:
  ejemplos: "gamilit, trading-platform, betting-analytics"

# ✓ VÁLIDO: Claramente marcado como ejemplo, no como dependencia
```

### 4. Origen de Funcionalidades en Catálogo

```markdown
| Funcionalidad | Origen |
| auth | Gamilit |

# ✓ VÁLIDO: Indica procedencia histórica en catálogo centralizado
```

---

## INTEGRACIÓN CON SISTEMA SIMCO

### Al Inicializar Proyecto (SIMCO-INICIALIZACION)

```yaml
PASO_ADICIONAL:
  verificar_referencias:
    - Revisar CONTEXTO-PROYECTO.md generado
    - Confirmar que NO tiene "Proyecto de referencia"
    - Confirmar referencias apuntan a core/
```

### Al Crear Documentación (SIMCO-DOCUMENTAR)

```yaml
VALIDACIÓN_ADICIONAL:
  antes_de_commit:
    - grep "Proyecto referencia" {archivo}
    - grep "projects/{otro}" {archivo}
    - Si encuentra → CORREGIR antes de continuar
```

### En Delegaciones (SIMCO-DELEGACION)

```yaml
CONTEXTO_A_PASAR:
  referencias_permitidas:
    - core/catalog/
    - core/orchestration/
    - {proyecto_actual}/  # Solo interno
  referencias_prohibidas:
    - projects/{otro}/
```

---

## CHECKLIST DE AUDITORÍA

Para validar un proyecto completo:

```bash
#!/bin/bash
# audit-references.sh

PROJECT=$1
echo "=== Auditoría de Referencias: $PROJECT ==="

echo ""
echo "1. Buscando 'Proyecto referencia'..."
grep -rn "Proyecto referencia" "$PROJECT/orchestration/" && echo "  ⚠️ ENCONTRADO" || echo "  ✓ OK"

echo ""
echo "2. Buscando referencias a otros proyectos..."
for other in gamilit trading-platform erp-suite betting-analytics inmobiliaria-analytics platform_marketing_content; do
  if [ "$other" != "$(basename $PROJECT)" ]; then
    count=$(grep -rn "projects/$other" "$PROJECT/orchestration/" 2>/dev/null | wc -l)
    if [ $count -gt 0 ]; then
      echo "  ⚠️ $count referencias a $other"
    fi
  fi
done

echo ""
echo "3. Buscando rutas obsoletas..."
grep -rn "workspace-gamilit" "$PROJECT/" && echo "  ⚠️ ENCONTRADO" || echo "  ✓ OK"

echo ""
echo "=== Fin de Auditoría ==="
```

---

## REFERENCIAS

- **Principio relacionado:** `PRINCIPIO-ANTI-DUPLICACION.md`
- **Catálogo global:** `core/catalog/`
- **Templates:** `core/orchestration/templates/`
- **Índice SIMCO:** `core/orchestration/directivas/simco/_INDEX.md`

---

**Versión:** 1.0.0 | **Sistema:** SIMCO v3.2 | **Mantenido por:** Workspace Manager
