feat(renaser): Fase 8a — el compositor teselante

El kernel deja de colocar las ventanas a mano: las tesela. El motor es
mirada-layout — el mismo nucleo no_std que ordena el compositor Wayland
de brahman, enlazado por path cruzando la frontera de workspace. Es el
primer consumo REAL del nucleo compartido brahman <-> renaser.

- kernel/compositor.rs: enlaza mirada-layout y calcula un marco por app
  con el algoritmo MasterStack, dentro del area de pantalla.
- consola::volcar_marco centra el fotograma natural de la app dentro de
  su marco teselado (antes lo depositaba en region.x/y fijos).
- ContextoCapacidades lleva marco + natural_ancho/alto; sys_render_frame
  valida el fotograma contra el tamaño natural.
- cargar_userspace tesela con el compositor y pinta el escenario antes
  de encender las apps. Las apps NO cambian: el compositor reordena la
  pantalla sin que ninguna toque una instruccion.

Verificado en QEMU (screendump): las cinco apps de genesis teseladas en
MasterStack — hola como ventana maestra, el resto apiladas a la derecha,
cada lienzo centrado en su panel.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-22 18:56:40 +00:00
parent 8fc26b0c0c
commit 65c88ccf25
11 changed files with 393 additions and 77 deletions
+56
View File
@@ -0,0 +1,56 @@
# 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
- El teclado cicla en caliente los siete modos de `mirada-layout`
(`MasterStack`, `CenteredMaster`, `Spiral`, `Grid`, `Columns`, `Rows`,
`Monocle`).
- Re-teselar exige re-componer: las apps que sólo pintan en `init` necesitan
una señal de redibujado, o el kernel debe conservar su último fotograma para
recomponerlo en el marco nuevo.
### 8c — Foco y `Workspace`
- Adoptar el `Workspace` de `mirada-layout`: foco, orden-Z, alta y baja de
ventanas en vivo.
- Una ventana enfocada, resaltada; el teclado mueve el foco y promueve apps al
área maestra.
## 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 |