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
+42
View File
@@ -630,3 +630,45 @@ separado, a un reinicio.
- **Reinicio** — `boot` respeta el disco; memoriosa despierta con las 5
celdas intactas y el testigo en ámbar: su `init` releyó el estado del
grafo. El estado por-app sobrevivió al apagón.
## Fase 8a — El compositor teselante — 2026-05-22
Hasta la Fase 7, cada app llevaba su región escrita a mano en el manifiesto —
coordenadas fijas, una composición rígida. La Fase 8 entrega esa decisión a un
COMPOSITOR: el kernel ya no coloca las ventanas a mano, las TESELA con
`mirada-layout`.
### Añadido
- **`kernel/compositor.rs`** — el compositor teselante. Enlaza `mirada-layout`
—el mismo núcleo `no_std` que ordena las ventanas del compositor Wayland de
brahman, ya enlazado por `path` cruzando la frontera de workspace— y, con su
algoritmo `MasterStack`, calcula un marco para cada app. `disponer(n, …)`
devuelve un marco por ventana; `area_apps`, la zona teselable (la pantalla
menos la franja superior de la consola).
- `consola`: `pintar_escenario` —inunda el área de apps y tiñe cada marco con
el color de panel, de modo que el teselado se vea como una rejilla— y el
color `Color::PANEL`.
### Cambiado
- `consola::volcar_marco` ya no deposita el fotograma en `(region.x, region.y)`:
CENTRA el fotograma natural de la app dentro de su marco teselado y lo
recorta a sus bordes.
- `ContextoCapacidades` lleva ahora `marco` (el rectángulo teselado) y
`natural_ancho`/`natural_alto` (el tamaño del lienzo de la app);
`sys_render_frame` valida el fotograma contra el tamaño natural.
- `AplicacionWasm` / `encender_app` / `cargar_userspace` cablean el marco
teselado. `cargar_userspace` recibe las dimensiones de pantalla, tesela con
el compositor y pinta el escenario antes de encender las apps.
- `RegionPantalla::pixeles` se retira — sin uso desde que `sys_render_frame`
mide contra el tamaño natural.
- **Las apps NO cambian.** Renderizan su lienzo natural, fijo; el kernel lo
compone centrado en el marco. El compositor reordena la pantalla sin que
ninguna app toque una sola instrucción.
### Verificado
- QEMU (captura headless): las cinco apps de génesis aparecen teseladas en
`MasterStack` — `hola` como ventana maestra (izquierda, 60% del ancho) y
memoriosa, discola, glotona y cronista apiladas a la derecha. Cada lienzo,
centrado en su panel; las apps desalojadas (discola, glotona) tiñen su marco
entero con la baliza. El registro de arranque permanece legible en la franja
superior de la consola.