# WU Framework 4.0 y CLI 1.2: actualizar y migrar

Novedades, cambios incompatibles, validación y soporte para migrar a Framework 4.0.0 y CLI 1.2.0.

Esta guía cubre WU Framework **4.0.0** y WU CLI **1.2.0**. Framework 4 es una versión mayor porque ahora rechaza operaciones que antes aceptaba. Actualizar la CLI no migra por sí solo el código de tus aplicaciones.

<span class="section-anchor" id="section-1"></span>

## Qué cambia

- **Framework:** hooks con identidad y permisos de la app, SSR con datos privados por petición, cancelación y límites de concurrencia; sincronización de rutas anidadas; supervisión y replay cooperativo. Consulta [fiabilidad del runtime](/es/docs/framework/runtime-reliability/) y [adapters](/es/docs/framework/api-adapters/).

- **Seguridad:** origen remoto explícito, autenticación mutua del relay MCP, propiedad de contratos, validación de paquetes `.wuapp`, permisos de workflows IA y nonces CSP por respuesta. Consulta [seguridad](/es/docs/framework/security/).

- **CLI:** dependencias y catálogos, resolución por aplicación, compilación paralela y caché invalidada por configuración; servidor de desarrollo restringido a hosts autorizados; builds con hashes y publicación consistente de assets. Consulta [dependencias](/es/docs/cli/dependencies/), [desarrollo](/es/docs/cli/development/) y [build](/es/docs/cli/build/).

CLI 1.2 alinea `WU_D003` con la versión de Framework del catálogo. El diagnóstico distingue dependencias incompatibles de un proyecto válido con Framework 4. También corrige la ejecución de comandos de build con rutas entre comillas en Windows.

<span class="section-anchor" id="section-2"></span>

## 1. Preparar una actualización reversible

Guarda el código, los manifests y los lockfiles en un commit y conserva el artefacto de producción anterior. Actualiza primero en una rama y un entorno de prueba. Instala las versiones exactas y comprueba qué ejecutable estás usando.

```sh
npm view wu-framework@4.0.0 version
npm view @wu-framework/cli@1.2.0 version
npm install --global @wu-framework/cli@1.2.0 --include=optional
wu --version
```

En un workspace existente, revisa `wu upgrade --help`, ejecuta `wu upgrade` y revisa el diff. La herramienta actualiza dependencias y archivos de integración; no reescribe tus grants, hooks ni contratos de negocio. Después ejecuta `wu install`. En proyectos sin CLI, actualiza `wu-framework` a `4.0.0` en los paquetes que lo declaren y usa su gestor de dependencias.

<span class="section-anchor" id="section-3"></span>

## 2. Corregir los cambios incompatibles

**Hooks y store.** Los hooks dentro de una microapp ya no heredan autoridad del host. Declara permisos en `manifest.wu.permissions` y concédelos en `grants` del shell. Solo su intersección es efectiva. Un emit denegado devuelve `false`; suscripciones o acceso al store pueden lanzar `WU_EVENT_SUBSCRIBE_DENIED` o `WU_CAPABILITY_DENIED`. No lo soluciones con permisos globales indiscriminados: concede los canales y rutas que la app usa.

```js
const permissions = [
  "store.read:cart.*", "store.write:cart.*",
  "events.emit:cart:changed", "events.subscribe:cart:changed",
];
await wu.registerApp({
  name: "cart", url: "/apps/cart/", sandbox: "module",
  manifest: { name: "cart", entry: "index.js", wu: { permissions } },
  grants: permissions,
});
```

**Apps remotas.** `connect` y `waitForPort` requieren `hostOrigin`. Usa el origen exacto del shell; `"*"` acepta cualquier origen deliberadamente. La entrada debe tener el origen de la URL registrada (`WU_REMOTE_ORIGIN_MISMATCH`). Una app remota del mismo origen necesita `iframe.allowSameOrigin: true`; `wu.detach()` rechaza apps remotas con `WU_WINDOW_REMOTE_UNSUPPORTED`. Consulta [apps remotas](/es/docs/framework/remote-apps/).

**MCP y CSP.** Actualiza el relay junto con el runtime: el bridge 4.0 usa autenticación mutua HMAC v2 y necesita un token. No admite `ws://` fuera de loopback. El modo inseguro es explícito y solo local. En middleware SSR sustituye un nonce fijo por `nonce: () => createNonce()` para generar uno por respuesta. Consulta [MCP](/es/docs/framework/api-mcp/) y [streaming y seguridad](/es/docs/framework/streaming-security/).

**Contratos y paquetes.** No reemplaces una capability de otro propietario (`WU_CAPABILITY_OWNED`); revócala o desmonta al proveedor antes del relevo. Instalar un `.wuapp` sobre una app registrada por el host requiere `{ replace: true }`. `restore()` valida las entradas guardadas. Maneja errores por `error.code`, no por el texto del mensaje. Espera los lifecycles asíncronos con `await`.

**CLI y despliegue.** Añade los hosts de tus túneles a `dev.allowedHosts`; solo `VITE_*` y `WU_*` de `.env` se exponen al cliente. Esos prefijos no son adecuados para secretos. Revisa `shared` si varias apps necesitan una sola instancia. Publica el `dist/` completo; conserva los assets con hash de la versión anterior mientras queden páginas abiertas y revalida HTML/manifests. Consulta [configuración](/es/docs/cli/configuration/) y [despliegue](/es/docs/cli/serve/).

<span class="section-anchor" id="section-4"></span>

## 3. Validar y volver atrás si es necesario

```sh
wu doctor --json
wu contracts check
wu test
wu build
wu serve 4100 --mode static
```

Comprueba montaje, actualización y desmontaje, permisos denegados, recarga directa, SSR/hidratación, CSP, RPC y reconexión remota según las funciones que uses. Si usas `wu build --native`, pruébalo por separado. Revisa también una pestaña abierta antes del despliegue. Ante un fallo, restaura el commit, lockfile y artefacto anteriores juntos; no mezcles un runtime nuevo con un relay o assets incompatibles.

<span class="section-anchor" id="section-5"></span>

## ¿Se rompió algo? Te ayudamos

El equipo de WU ofrece apoyo para diagnosticar problemas de actualización. [Solicita ayuda de migración](/es/support/#migration-help) o abre un issue en el repositorio del producto. Incluye versión anterior y nueva, `wu --version`, `npm ls wu-framework`, sistema/navegador, código de error y una reproducción mínima sin secretos. Explica qué funcionaba antes y qué esperabas. El soporte comunitario no implica un plazo garantizado de respuesta.