# 🔄 Flujo de Cambios: Core ↔ Proyectos

## 🎯 Principio Fundamental

**El flujo de cambios es UNIDIRECCIONAL:**
- ✅ **Core → Proyectos**: Las mejoras del core se propagan a los proyectos
- ❌ **Proyectos → Core**: Los cambios específicos de proyectos NO van al core

---

## 📤 Core → Proyectos (Propagación)

### ¿Qué se Propaga?

Solo mejoras **reutilizables** y **neutrales** del core:

- ✅ Nuevos módulos y funcionalidades
- ✅ Mejoras en código reutilizable
- ✅ Correcciones de bugs del sistema
- ✅ Actualizaciones de dependencias
- ✅ Nuevas migraciones y seeders
- ✅ Mejoras en helpers y utilidades
- ✅ Actualizaciones de documentación

### ¿Cómo se Propaga?

Usando el script `propagate-core-improvements.sh`:

```bash
# Desde el repositorio cd-system
./scripts/propagate-core-improvements.sh https://github.com/LACOMPANIADIGITAL/proyecto.git
```

### Archivos Protegidos

Los siguientes archivos **NO se sobrescriben** durante la propagación (gracias a `.gitattributes`):

- `config/cd-system.php` - Mantiene la versión del proyecto
- `config/site.php` - Mantiene la identidad del proyecto
- `public/cd-project/assets/*` - Mantiene los assets del proyecto

---

## 📥 Proyectos → Core (Integración)

### ¿Qué se Integra al Core?

Solo mejoras que sean **reutilizables** y **neutrales**:

- ✅ Nuevos módulos genéricos
- ✅ Mejoras en funcionalidades base
- ✅ Correcciones de bugs generales
- ✅ Nuevas utilidades reutilizables

### ¿Qué NO se Integra?

- ❌ Configuraciones específicas del proyecto
- ❌ Assets personalizados (logos, imágenes)
- ❌ Contenido específico del proyecto
- ❌ Cambios en `config/site.php` con datos del proyecto
- ❌ Vistas específicas del demo/proyecto

### ¿Cómo se Integra?

1. **Crear rama temporal** desde el proyecto:
   ```bash
   # En el repositorio del proyecto
   git checkout -b proyecto-x-sync
   ```

2. **Normalizar y limpiar**:
   - Remover referencias específicas del proyecto
   - Neutralizar configuraciones
   - Eliminar assets personalizados

3. **Merge al core**:
   ```bash
   # En el repositorio cd-system
   git checkout cd-system
   git merge --no-ff proyecto-x-sync
   ```

4. **Los archivos protegidos se mantienen** automáticamente gracias a `.gitattributes`

---

## 🔒 Protección Automática

### Archivos Protegidos en el Core

En el repositorio `cd-system`, estos archivos están protegidos:

- `config/cd-system.php` - Configuración base del sistema
- `config/site.php` - Identidad del sistema base
- `public/cd-project/assets/*` - Assets del sistema base

### Archivos Protegidos en los Proyectos

En cada proyecto, estos archivos están protegidos:

- `config/cd-system.php` - Configuración del proyecto
- `config/site.php` - Identidad del proyecto
- `public/cd-project/assets/*` - Assets del proyecto

**Resultado**: Cada proyecto mantiene su identidad, pero recibe mejoras del core.

---

## 📋 Ejemplo Práctico

### Escenario: Mejora en el Core

1. **Desarrollo en cd-system**:
   ```bash
   cd cd-system
   git checkout cd-system
   # ... hacer mejoras ...
   git commit -m "feat: Nueva funcionalidad X"
   git push origin cd-system
   ```

2. **Propagación a proyectos**:
   ```bash
   ./scripts/propagate-core-improvements.sh https://github.com/LACOMPANIADIGITAL/proyecto1.git
   ./scripts/propagate-core-improvements.sh https://github.com/LACOMPANIADIGITAL/proyecto2.git
   ```

3. **Resultado**: Todos los proyectos reciben la mejora, pero mantienen su identidad.

### Escenario: Mejora en un Proyecto

1. **Desarrollo en proyecto**:
   ```bash
   cd proyecto
   git checkout cd-system
   # ... hacer mejoras reutilizables ...
   git commit -m "feat: Mejora en módulo Y"
   ```

2. **Integración al core**:
   ```bash
   # En cd-system
   git remote add proyecto https://github.com/LACOMPANIADIGITAL/proyecto.git
   git fetch proyecto cd-system
   git checkout -b proyecto-sync proyecto/cd-system
   # Normalizar y limpiar cambios específicos
   git checkout cd-system
   git merge --no-ff proyecto-sync
   ```

3. **Resultado**: La mejora reutilizable está en el core y puede propagarse a otros proyectos.

---

## ⚠️ Reglas Importantes

### ❌ NO Hacer

1. **NO** hacer push de cambios específicos del proyecto al core
2. **NO** sobrescribir archivos protegidos durante merges
3. **NO** integrar configuraciones específicas de proyectos
4. **NO** propagar assets personalizados

### ✅ SÍ Hacer

1. **SÍ** normalizar cambios antes de integrarlos al core
2. **SÍ** usar `.gitattributes` para protección automática
3. **SÍ** probar propagaciones con `--dry-run` primero
4. **SÍ** documentar cambios importantes

---

## 🔍 Verificación

### Verificar Protección

```bash
# Verificar que .gitattributes tenga merge=ours
grep "merge=ours" .gitattributes

# Verificar archivos protegidos
grep "config/cd-system.php merge=ours" .gitattributes
grep "config/site.php merge=ours" .gitattributes
```

### Verificar Flujo

```bash
# En proyecto: verificar que los archivos protegidos no cambien durante merge
git merge core/cd-system
git diff HEAD config/site.php
# No debería mostrar cambios si la protección funciona
```

---

## 📚 Referencias

- [Protección de Archivos del Sistema](./proteccion-archivos-sistema.md)
- [Propagación de Mejoras del Core](./propagacion-mejoras-core.md)
- [Crear Nuevo Proyecto](./crear-nuevo-proyecto.md)

---

## 💡 Resumen

```
┌─────────────────┐
│   CD-System     │
│    (Core)       │
└────────┬────────┘
         │
         │ Propagación (mejoras reutilizables)
         │
         ▼
┌─────────────────┐      ┌─────────────────┐      ┌─────────────────┐
│   Proyecto 1    │      │   Proyecto 2    │      │   Proyecto 3    │
│                 │      │                 │      │                 │
│ - Mantiene      │      │ - Mantiene      │      │ - Mantiene      │
│   identidad     │      │   identidad     │      │   identidad     │
│ - Recibe        │      │ - Recibe        │      │ - Recibe        │
│   mejoras       │      │   mejoras       │      │   mejoras       │
└─────────────────┘      └─────────────────┘      └─────────────────┘
         │                       │                       │
         │                       │                       │
         └───────────────────────┴───────────────────────┘
                    │
                    │ Integración (solo mejoras reutilizables)
                    │
                    ▼
         ┌─────────────────┐
         │   CD-System     │
         │    (Core)       │
         └─────────────────┘
```

