Entorno local
Todo el desarrollo y el QA E2E corren contra el suite de emuladores de Firebase (Auth, Functions, Firestore, Storage, Hosting). Nunca contra prod.
Levantar el stack
Emuladores
pnpm emulators # buildea functions + arranca el suiteEspera a ver “All emulators ready”. UI en http://127.0.0.1:4000.
Sembrar datos
pnpm seed:emulator # admin@demo.test / password123 + org-demo
pnpm seed:ontology # ontología de ejemplo (opcional)
pnpm seed:objects # objetos de ejemplo (opcional)La app
pnpm --filter @mentat/web dev # con NEXT_PUBLIC_USE_FIREBASE_EMULATORS=trueLogin: admin@demo.test / password123.
Cargar el piloto de referencia
node scripts/pilot/load-config.mjs # Ontología + Actions + DataSources del piloto
node scripts/pilot/e2e-pilot.mjs # E2E con asserts (ingesta CSV + acciones)Tests
pnpm -r typecheck # los 4 proyectos
pnpm --filter @mentat/functions test # unit (sin emulador)
# integration + rules tests requieren el emulador corriendoGestión de procesos entre sesiones
⚠️
Antes de levantar emuladores o el dev server, verificá puertos ocupados por sesiones
anteriores (4000/5001/8080/9099/9199/3000). Los procesos huérfanos y un .next/
corrupto son la causa #1 de falsos fallos. Matá los PIDs de esos puertos antes de
relanzar.
# Windows: liberar un puerto
Get-NetTCPConnection -LocalPort 8080 -State Listen | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }El Functions emulator es inestable en Windows al recargar el bundle. Si una callable deja de responder (“Failed to load function”), reiniciá el emulador y re-sembrá. No rebuildees el bundle con el emulador corriendo.