# renaser — Fase 8 :: El compositor teselante Plan de ataque. Para el estado general ver `ROADMAP.md`; para la arquitectura, `ARCHITECTURE.md`. ## El objetivo Hasta la Fase 7, cada aplicación llevaba su región escrita a mano en el Manifiesto de Génesis: cuatro coordenadas fijas (`region_x`, `region_y`, `region_ancho`, `region_alto`). El kernel las leía y componía cada app en su rectángulo, inmóvil — una disposición rígida, decidida en la siembra. La Fase 8 entrega esa decisión a un COMPOSITOR. El kernel deja de colocar las ventanas a mano: las **tesela**. El motor del teselado es `mirada-layout` — el mismo núcleo `no_std` que ordena las ventanas del compositor Wayland de brahman, enlazado por `path` cruzando la frontera de workspace. Una sola lógica de teselado sirve a dos mundos: el escritorio sobre Linux y el kernel bare-metal. ## Sub-fases ### 8a — El compositor tesela — ✅ HECHA - **`compositor.rs`** — enlaza `mirada-layout` y calcula un marco por app con el algoritmo `MasterStack`, dentro del área de pantalla (todo menos la franja superior reservada a la consola). - El kernel **centra** el fotograma natural de cada app dentro de su marco teselado; las apps conservan su tamaño natural y no cambian una instrucción. - `EntradaApp.region_ancho/alto` pasa a significar el tamaño NATURAL del lienzo de la app; `region_x/y` quedan vestigiales — el compositor decide la posición. ### 8b — Teselado interactivo — ✅ HECHA - `Alt+Espacio` cicla en caliente los siete modos de teselado de `mirada-layout` (`MasterStack`, `CenteredMaster`, `Spiral`, …). - Re-teselar exige re-componer. La solución: el kernel guarda una CACHÉ del último fotograma de cada app —acotada al lienzo natural, reservada una sola vez— y recompone desde ella. Una app que sólo pintó en su `init` conserva su imagen a través de cualquier reordenación, sin enterarse del cambio. ### 8c — Foco y enrutamiento selectivo — ✅ HECHA - Una ventana ENFOCADA, con borde índigo brillante; las demás, borde gris mate. `Alt+J` / `Alt+K` pasean el foco entre las ventanas vivas. - El teclado deja de difundir a ciegas: una tecla ordinaria se entrega sólo a la app enfocada; los mandos `Alt+…` se consumen en la IRQ. - El registro `ESCRITORIO` del compositor cumple el papel del `Workspace` de `mirada-layout` —ventanas, marcos, foco— sin adoptar su tipo: el kernel necesita además la caché de respaldo, que el `Workspace` no contempla. ### 8d — Manipulación de ventanas — ✅ HECHA - `Escritorio` separa el ORDEN de teselado de la IDENTIDAD de las ventanas (`orden: Vec`): una ventana puede cambiar de celda sin perder su canal de teclado ni su ranura de estado. - `Alt+Enter` promueve la ventana enfocada a la celda maestra; `Alt+H` / `Alt+L` la mueven atrás / adelante en el orden. El foco viaja con la ventana. ### Pendiente - Orden-Z y solapamiento (ventanas flotantes); alta y baja de apps en vivo. ## Estructura de archivos | archivo | estado | rol en la Fase 8 | | --- | --- | --- | | `kernel/src/compositor.rs` | **nuevo (8a)** | teselado con `mirada-layout` | | `kernel/src/consola.rs` | a modificar (8a) | composición centrada en el marco | | `kernel/src/wasm/mod.rs` | a modificar (8a) | `marco` + tamaño natural | | `kernel/src/wasm/env.rs` | a modificar (8a) | validación contra el natural | | `kernel/src/main.rs` | a modificar (8a) | el compositor en el arranque |