Structure: - control-plane/: Registries, SIMCO directives, CI/CD templates - projects/: Gamilit, ERP-Suite, Trading-Platform, Betting-Analytics - shared/: Libs catalog, knowledge-base Key features: - Centralized port, domain, database, and service registries - 23 SIMCO directives + 6 fundamental principles - NEXUS agent profiles with delegation rules - Validation scripts for workspace integrity - Dockerfiles for all services - Path aliases for quick reference 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
7.4 KiB
7.4 KiB
PROMPT: MIGRATION AGENT - GAMILIT
Proyecto: Gamilit Platform Fase: 4.1 - Migracion de Gamilit Version: 1.0.0
PROMPT DE INICIALIZACION
Seras un agente de migracion trabajando en la migracion de Gamilit
al nuevo modelo de repositorio independiente.
## CONTEXTO
El proyecto Gamilit es una plataforma SaaS de gamificacion educativa.
Es el proyecto mas avanzado (60% MVP) y servira como MODELO para migrar
los demas proyectos.
### Ubicacion actual
/home/adrian/Documentos/workspace/projects/gamilit/
### Destino
/home/adrian/Documentos/workspace-v1/repos/gamilit-platform/
### Control Plane
/home/adrian/Documentos/workspace-v1/control-plane/
## TUS TAREAS
### 1. Crear Estructura Base
```bash
# Crear directorios
mkdir -p gamilit-platform/{apps/{backend,frontend,database/{ddl,seeds,migrations}},docker,orchestration,docs,.github/workflows}
# Crear package.json root con workspaces
# Crear README.md
# Crear .gitignore
2. Crear Service Descriptors
Crear service.descriptor.yml en:
- apps/backend/service.descriptor.yml
- apps/frontend/service.descriptor.yml
IMPORTANTE: Los descriptors DEBEN referenciar los registries correctos:
- ports.registry_ref: "projects.gamilit.api" (para backend)
- ports.registry_ref: "projects.gamilit.web" (para frontend)
- database.registry_ref: "gamilit"
Usar el standard definido en: /home/adrian/Documentos/workspace-v1/02-fase-core-orchestration/ARTEFACTOS/SERVICE-DESCRIPTOR-STANDARD.md
3. Migrar Codigo
# Backend
cp -r workspace/projects/gamilit/backend/* gamilit-platform/apps/backend/
# Frontend
cp -r workspace/projects/gamilit/frontend/* gamilit-platform/apps/frontend/
# Database
cp -r workspace/projects/gamilit/database/* gamilit-platform/apps/database/
Despues de copiar:
- Actualizar imports si es necesario
- Actualizar paths en tsconfig.json
- Verificar que no hay referencias hardcodeadas
4. Crear Docker Compose
Crear en docker/:
- docker-compose.yml (principal)
- docker-compose.dev.yml (overrides para dev)
- .env.example
REGLAS IMPORTANTES:
- NO usar "ports:", usar "expose:"
- Conectar a redes: gamilit_${ENV:-local} e infra_shared
- Las redes deben ser external: true
- Usar labels de Traefik para routing
5. Migrar Orchestration
cp -r workspace/projects/gamilit/orchestration/* gamilit-platform/orchestration/
Actualizar paths en los archivos migrados.
6. Validacion
# 1. Validar service descriptors
python3 -c "import yaml; yaml.safe_load(open('apps/backend/service.descriptor.yml'))"
# 2. Validar build
cd apps/backend && npm install && npm run build
cd apps/frontend && npm install && npm run build
# 3. Validar docker
cd docker && docker-compose config
# 4. Probar localmente
docker-compose up -d
curl http://api.gamilit.localhost/health
REGISTRIES DE REFERENCIA
ports.registry.yml (extracto)
projects:
gamilit:
services:
api:
internal: 3000
protocol: "http"
healthcheck: "/health"
web:
internal: 3001
protocol: "http"
websocket:
internal: 3002
protocol: "ws"
domains.registry.yml (extracto)
gamilit:
local:
api: "api.gamilit.localhost"
web: "gamilit.localhost"
development:
api: "api.gamilit.dev.example.com"
web: "gamilit.dev.example.com"
databases.registry.yml (extracto)
gamilit:
database: "gamilit_db"
port: 5432
roles:
owner: "gamilit_owner"
runtime: "gamilit_app"
migrator: "gamilit_migrator"
schemas:
- "public"
- "auth"
- "gamification"
RESTRICCIONES
- NO modificar el workspace actual
- NO exponer puertos directamente (solo via Traefik)
- Service descriptors DEBEN referenciar registries existentes
- Docker networks DEBEN ser external
- Variables sensibles en .env, NO en compose
ENTREGABLES
- Estructura de carpetas completa
- service.descriptor.yml para backend y frontend
- Codigo migrado y funcional
- docker-compose.yml con redes aisladas
- .env.example documentado
- orchestration/ migrado
- Build exitoso
- Docker compose levanta sin errores
PROTOCOLO
- Leer analisis en ANALISIS/
- Ejecutar tareas de PLANEACION/00-TAREAS.md
- Documentar progreso en IMPLEMENTACION/00-EJECUCION.md
- Validar contra VALIDACION/CHECKLIST.md
- Reportar issues encontrados
---
## TEMPLATE: docker-compose.yml
```yaml
# ==============================================================================
# docker-compose.yml - Gamilit Platform
# ==============================================================================
# Uso: docker-compose up -d
# Prerequisitos:
# - Redes creadas (gamilit_local, infra_shared)
# - Traefik corriendo
# - .env configurado
# ==============================================================================
version: "3.8"
x-logging: &default-logging
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
services:
# ==========================================================================
# BACKEND - gamilit-api
# ==========================================================================
gamilit-api:
build:
context: ../apps/backend
dockerfile: Dockerfile
container_name: gamilit-api
restart: unless-stopped
# IMPORTANTE: usar expose, NO ports
expose:
- "3000"
environment:
- NODE_ENV=${NODE_ENV:-development}
- PORT=3000
- DATABASE_URL=${DATABASE_URL}
- REDIS_URL=${REDIS_URL:-redis://redis:6379}
- JWT_SECRET=${JWT_SECRET}
- JWT_EXPIRES_IN=${JWT_EXPIRES_IN:-1d}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
# Labels para Traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.gamilit-api.rule=Host(`api.gamilit.localhost`)"
- "traefik.http.routers.gamilit-api.entrypoints=web"
- "traefik.http.services.gamilit-api.loadbalancer.server.port=3000"
networks:
- gamilit_${ENV:-local}
- infra_shared
logging:
<<: *default-logging
# ==========================================================================
# FRONTEND - gamilit-web
# ==========================================================================
gamilit-web:
build:
context: ../apps/frontend
dockerfile: Dockerfile
container_name: gamilit-web
restart: unless-stopped
expose:
- "3001"
environment:
- NODE_ENV=${NODE_ENV:-development}
- REACT_APP_API_URL=${REACT_APP_API_URL:-http://api.gamilit.localhost}
labels:
- "traefik.enable=true"
- "traefik.http.routers.gamilit-web.rule=Host(`gamilit.localhost`)"
- "traefik.http.routers.gamilit-web.entrypoints=web"
- "traefik.http.services.gamilit-web.loadbalancer.server.port=3001"
networks:
- gamilit_${ENV:-local}
- infra_shared
depends_on:
- gamilit-api
logging:
<<: *default-logging
# ==============================================================================
# NETWORKS
# ==============================================================================
networks:
gamilit_${ENV:-local}:
external: true
infra_shared:
external: true
NOTAS
- Gamilit es el proyecto MODELO - lo que se defina aqui se replicara
- Tomarse el tiempo para hacerlo bien
- Documentar cualquier decision de diseno
- Cualquier issue encontrado debe documentarse para evitarlo en otros proyectos
Documento generado por: Tech-Leader