# provision-orchestrator

**Familia**: C · Operación
**Spec**: [`/.claude/agents/provision-orchestrator.md`](../../.claude/agents/provision-orchestrator.md)

## Cuándo invocarlo

- Provisionar un tenant nuevo (desde shop slug o core slug)
- Un provisioning falló y hay que diagnosticar en qué step + recuperar
- Smoke test de un core antes de aprobarlo para producción
- Validar que un tenant vivo pasa los quality gates
- Correr `bewpro:validate-market-products` y limpiar bp-validate-* después

## Cuándo NO invocarlo

- Para ops periódicas sobre tenants ya provisionados (refresh, sync) → `tenant-operator`
- Para recomendar qué producto provisionar → `sales-advisor` → luego éste
- Para crear el core preset si no existe → `core-architect` → `product-packager` → luego éste

## Inputs típicos

```
"Provisioná `bp-juanlaw` para juanlaw.com, law-firm-digital, admin@juanlaw.com"

"El provisioning de `bp-radocbikes` falló en step 7 (assets). Diagnosticá y recuperá"

"Corré smoke test de los 8 productos market-ready y cleanup al terminar"

"Validá que `bp-bewpro` pase los quality gates actuales"
```

## Output esperado

1. **Pre-flight check** — comando exacto, flags, duración estimada, advertencias
2. **Confirmación obligatoria** antes de ejecutar
3. **Ejecución monitoreada** — progreso por step
4. **QA post-provisión** — validate --fix, ensure-super-admin-role, verificaciones rápidas
5. **Reporte final** — estado por step (✅/⚠️/❌), URL admin, issues

## Archivos que lee

- `app/Console/Commands/{ProvisionProject,ProvisionNew,ValidateProject,ValidateMarketProducts,EnsureSuperAdminRole,CleanupValidationDbs}.php`
- `database/seeders/project-data/*.json`
- `database/seeders/products/{catalog.json, core/*.json}`
- `docs/bewpro2.0/guia-provisionado.md`
- `docs/bewpro2.0/provision/checklist-production-ready.md`
- `docs/backend3.0/reseller/README.md`

## Comandos que ejecuta

```bash
# Provisión principal
php artisan bewpro:new <email> "<title>" <slug> \
  --db=<bp-name> --url=<url> --colors="<hex>,..." [--fresh] [--clean]

# QA post-provisión
DB_DATABASE=<bp-name> php artisan bewpro:validate --fix
DB_DATABASE=<bp-name> php artisan bewpro:ensure-super-admin-role --email=<admin>

# Market validation
php artisan bewpro:validate-market-products
php artisan bewpro:cleanup-validation-dbs
```

## Los 12 pasos del pipeline

1. stepSwitchDatabase
2. stepMigrate[Fresh]
3. stepWriteCdSystemConfig
4. stepSeedBaseData + WriteBrandDefaults + MergePresetConfig
5. stepWriteSiteData
6. stepWriteAnalytics
7. stepProcessAssets + ResolveAssetUrlsInSettings
8. stepInstallContentDefaults + SeedModuleContent
9. stepInstallCdBaseDefault
10. stepSeedCdBase
11. stepClearCache
12. Restore JSONs

## Checklist de validación del output

- [ ] DB existe y tiene las 30+ tablas esperadas
- [ ] Módulos activos coinciden con el core
- [ ] Content seeded (no hay 0 posts si core incluye blog)
- [ ] Assets resueltos a Cloudinary URLs (no local paths)
- [ ] SEO fields (title, description, OG image) poblados
- [ ] GA tracking ID presente si venía en input
- [ ] Super Admin role asignado al email indicado
- [ ] URL de admin responde 200/302

## Relacionado

- Recibe input de `sales-advisor` (comando `bewpro:new` pre-armado) o del usuario directo
- Delega a `tenant-operator` para health checks recurrentes post-provisión
- Si el core no existe → escalar a `core-architect` antes de provisionar
