# 🔄 Flujo Bidireccional Completo: Proyectos ↔ cd-system

## 🎯 Resumen Ejecutivo

Este documento explica el flujo completo de cambios bidireccional entre proyectos y cd-system, asegurando que:
- ✅ Los proyectos puedan propagar mejoras al core
- ✅ El core pueda propagar mejoras a los proyectos
- ✅ Los proyectos se mantengan actualizados con el core

---

## 📤 Flujo 1: Proyecto → cd-system (Propagación de Mejoras)

### ¿Cuándo usar?

Cuando un proyecto desarrolla mejoras **reutilizables** que deben estar disponibles para todos los proyectos.

### ¿Qué se propaga?

✅ **Demos completos:**
- Assets del demo (`public/cd-project/img/demos/{demo-name}/**`)
- Vistas del demo (headers, footers)
- CSS/JS del demo

✅ **Core y Helpers:**
- Nuevos helpers (`app/Helpers/**`)
- Mejoras en código reutilizable
- Actualizaciones de `composer.json` (solo autoload)

✅ **Documentación:**
- Guías y metodologías
- Documentación del sistema

❌ **NO se propaga:**
- Assets del proyecto (logos, favicons)
- `config/site.php` (datos específicos)
- `config/cd-system.php` (configuración del proyecto)

### Cómo hacerlo

#### Opción 1: Script Automatizado (Recomendado)

```bash
# Desde cualquier proyecto
cd /Applications/XAMPP/xamppfiles/htdocs/catalogue
./scripts/send-to-cd-system.sh
```

El script:
1. ✅ Identifica automáticamente demos y archivos reutilizables
2. ✅ Excluye automáticamente assets y configuraciones del proyecto
3. ✅ Muestra preview de cambios
4. ✅ Permite revisar y confirmar
5. ✅ Copia archivos a cd-system
6. ✅ Permite commitear y pushear

#### Opción 2: Manual

Ver `docs/bewpro/system/ENVIAR-CAMBIOS-A-CD-SYSTEM.md`

---

## 📥 Flujo 2: cd-system → Proyectos (Propagación de Mejoras del Core)

### ¿Cuándo usar?

Cuando el core tiene mejoras que deben estar disponibles en todos los proyectos.

### ¿Qué se propaga?

✅ **Mejoras 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
- Nuevos demos completos

### 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

### Cómo hacerlo

Usar el script `propagate-core-improvements.sh` desde cd-system:

```bash
# Desde cd-system
cd /Applications/XAMPP/xamppfiles/htdocs/cd-system
./scripts/propagate-core-improvements.sh https://github.com/LACOMPANIADIGITAL/catalogue.git
```

---

## 🔄 Flujo 3: Mantener Proyecto Actualizado con cd-system

### ¿Cuándo usar?

Después de propagar cambios desde el proyecto a cd-system, o cuando cd-system tiene nuevas mejoras.

### ¿Por qué es importante?

Después de propagar cambios desde `catalogue` a `cd-system`, el proyecto `catalogue` debe actualizarse para:
- ✅ Tener las últimas mejoras del core
- ✅ Mantener sincronización con el core
- ✅ Evitar divergencias

### Cómo hacerlo

#### Opción 1: Pull desde cd-system (Recomendado)

```bash
# Desde catalogue (o cualquier proyecto)
cd /Applications/XAMPP/xamppfiles/htdocs/catalogue

# Agregar cd-system como upstream (si no existe)
git remote add upstream https://github.com/LACOMPANIADIGITAL/cd-system.git || true

# Obtener cambios del core
git fetch upstream cd-system

# Ver qué cambios hay
git log HEAD..upstream/cd-system --oneline

# Hacer merge de los cambios del core
git merge upstream/cd-system --no-edit

# O usar rebase (si prefieres)
# git rebase upstream/cd-system
```

#### Opción 2: Script de Actualización

```bash
# Desde cd-system
cd /Applications/XAMPP/xamppfiles/htdocs/cd-system
./scripts/propagate-core-improvements.sh https://github.com/LACOMPANIADIGITAL/catalogue.git
```

---

## 🔄 Flujo Completo: Ejemplo Real (Catalogue)

### Escenario: Desarrollo de MetaTagsHelper en Catalogue

#### 1. Desarrollo en Catalogue:
```bash
cd /Applications/XAMPP/xamppfiles/htdocs/catalogue
# Desarrollar MetaTagsHelper, mejorar master.blade.php, etc.
git add -A
git commit -m "feat: Sistema de MetaTagsHelper"
git push origin cd-system
```

#### 2. Propagación a cd-system:
```bash
cd /Applications/XAMPP/xamppfiles/htdocs/catalogue
./scripts/send-to-cd-system.sh
# El script copia, commitea y pushea al core
```

#### 3. Actualizar Catalogue desde cd-system:
```bash
cd /Applications/XAMPP/xamppfiles/htdocs/catalogue
git fetch upstream cd-system
git merge upstream/cd-system --no-edit
# O usar el script de propagación desde cd-system
```

#### 4. Propagación a Otros Proyectos:
```bash
cd /Applications/XAMPP/xamppfiles/htdocs/cd-system
./scripts/propagate-core-improvements.sh https://github.com/LACOMPANIADIGITAL/terashe.git
./scripts/propagate-core-improvements.sh https://github.com/LACOMPANIADIGITAL/constructoragama.git
# ... otros proyectos
```

---

## ✅ Validación del Flujo

### Checklist Pre-Propagación (Proyecto → cd-system):

- [ ] ¿La mejora es reutilizable para otros proyectos?
- [ ] ¿No contiene configuraciones específicas del proyecto?
- [ ] ¿No contiene assets personalizados?
- [ ] ¿Está probada y funcionando?
- [ ] ¿Está documentada?

### Checklist Post-Propagación:

- [ ] ¿Los cambios están commiteados en cd-system?
- [ ] ¿El proyecto se actualizó desde cd-system?
- [ ] ¿Se probó en al menos un proyecto?
- [ ] ¿Los archivos protegidos están correctamente configurados?

---

## 🎯 Flujo Recomendado para Nuevos Proyectos

### Al Crear un Nuevo Proyecto:

1. **Crear proyecto desde cd-system:**
   ```bash
   cd /Applications/XAMPP/xamppfiles/htdocs/cd-system
   ./scripts/create-complete-project.sh
   ```

2. **El proyecto ya incluye:**
   - ✅ Script `send-to-cd-system.sh` (para propagar mejoras)
   - ✅ Documentación en `docs/bewpro/system/`
   - ✅ `.gitattributes` con protecciones
   - ✅ Configuración base

3. **Configurar upstream:**
   ```bash
   cd /Applications/XAMPP/xamppfiles/htdocs/nuevo-proyecto
   git remote add upstream https://github.com/LACOMPANIADIGITAL/cd-system.git
   ```

### Mantenimiento Continuo:

1. **Desarrollar mejoras en el proyecto**
2. **Propagar mejoras reutilizables:**
   ```bash
   ./scripts/send-to-cd-system.sh
   ```
3. **Actualizar desde core:**
   ```bash
   git fetch upstream cd-system
   git merge upstream/cd-system --no-edit
   ```

---

## 📋 Scripts Disponibles

### Desde Proyectos:

- **`scripts/send-to-cd-system.sh`** - Integrar mejoras del proyecto al core
  - Uso: `./scripts/send-to-cd-system.sh`
  - Identifica automáticamente qué propagar
  - Excluye automáticamente archivos específicos

### Desde cd-system:

- **`scripts/propagate-core-improvements.sh`** - Propagar mejoras del core a proyectos
  - Uso: `./scripts/propagate-core-improvements.sh <URL_REPO>`
  - Respeta archivos protegidos

---

## ⚠️ Reglas de Oro

1. **Siempre revisar antes de commitear** - Los scripts muestran cambios antes de aplicar
2. **Probar en un proyecto antes de propagar** - Validar que funciona
3. **Documentar cambios importantes** - Ayuda a otros desarrolladores
4. **No integrar configuraciones específicas** - Solo código reutilizable
5. **Usar commits descriptivos** - Incluir proyecto origen y descripción clara
6. **Actualizar proyecto después de propagar** - Mantener sincronización con core

---

## 🔍 Validación del Sistema

### ¿El script propaga correctamente?

✅ **SÍ** - El script `send-to-cd-system.sh`:
- Identifica automáticamente demos completos
- Identifica archivos core y helpers
- Excluye automáticamente assets del proyecto
- Excluye configuraciones específicas
- Muestra preview antes de aplicar
- Permite revisión y confirmación

### ¿Los futuros proyectos tendrán el script?

✅ **SÍ** - Cuando se crea un nuevo proyecto desde cd-system:
- El script `send-to-cd-system.sh` se copia automáticamente
- La documentación en `docs/bewpro/system/` se copia
- Los proyectos nacen con todo configurado

### ¿Catalogue debería actualizarse después de propagar?

✅ **SÍ** - Después de propagar cambios a cd-system, catalogue debería:
1. Hacer pull desde cd-system para obtener las mejoras propagadas
2. Mantener sincronización con el core
3. Evitar divergencias

---

## 📚 Documentación Relacionada

- `docs/bewpro/system/METODOLOGIA-PROPAGACION-DEMOS.md` - Metodología completa
- `docs/bewpro/system/VALIDACION-PROPAGACION.md` - Checklist de validación
- `docs/bewpro/system/ENVIAR-CAMBIOS-A-CD-SYSTEM.md` - Guía paso a paso
- `docs/FLUJO-CAMBIOS-BIDIRECCIONAL.md` - Flujo general

---

**Última actualización:** Noviembre 2024  
**Versión:** 1.0 - Flujo Bidireccional Completo

