Files
brahman/renaser/FASE8.md
T
sergio 5c462e6d30 feat(renaser): Fases 8b y 8c — el escritorio interactivo
El compositor de la 8a teselaba, pero era inmovil. Las 8b/8c lo hacen
vivo: el teclado reordena el escritorio y mueve el foco en caliente.

- Cache de fotogramas: cada ventana guarda en RAM del kernel su ultimo
  fotograma —reservada una vez, acotada al lienzo natural—. Al re-teselar
  o mover el foco, el kernel recompone desde la cache: las apps que solo
  pintan en init (cronista) conservan su imagen sin enterarse del cambio.
- compositor: el registro ESCRITORIO (ventanas, marcos, caches, modo);
  presentar_fotograma, desalojar, atender_mandos, ciclar_layout,
  mover_foco. Foco en un AtomicUsize, mandos en una cola lock-free.
- teclado: la IRQ1 deja de difundir. Alt es el modificador del sistema —
  Alt+Espacio cicla el teselado, Alt+J/K mueven el foco—; una tecla
  ordinaria va SOLO a la app enfocada (CANALES reindexado por indice_app).
- consola: borde de foco (indigo / gris) en cada marco.

Guardarrail anti-interbloqueo: la IRQ1 jamas bloquea ESCRITORIO; se
comunica por dos atomicos y una cola lock-free. Las caches se reservan
una sola vez, al tamaño natural — sin asignacion en el bucle del reactor.

Verificado en QEMU (screendump + sendkey): arranque teselado con hola
enfocada; Alt+Espacio cicla a CenteredMaster y las apps estaticas
conservan su contenido; Alt+J mueve el foco; las teclas llegan solo a la
app enfocada. Cierra la Fase 8 — el compositor teselante e interactivo.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 19:19:21 +00:00

65 lines
3.1 KiB
Markdown

# 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.
### Pendiente
- Orden-Z y solapamiento (ventanas flotantes); alta y baja de apps en vivo.
- Promover la app enfocada al área maestra (`Alt+Enter`).
## 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 |