feat(renaser): Fase 7a — el userspace nace del Grafo de Objetos

El kernel deja de empotrar las apps. Las cinco aplicaciones ya no
llegan por include_bytes! en main.rs: nacen del grafo, gobernadas por
un Manifiesto de Génesis que también vive en el grafo.

- almacen: el SuperBloque gana el ancla `manifiesto: Option<Hash>`
  (gemela de `raiz`, del lado del kernel) + accesores. VERSION 1→2 —
  un disco v1 se reformatea.
- manifiesto.rs: implementados `cargar` (lee el manifiesto del grafo)
  y `sembrar_genesis` (puebla un disco virgen con las 5 apps de
  génesis). El bytecode viaja empotrado AÚN, sólo como semilla
  transitoria (la Fase 7b lo mueve al constructor de imagen `boot`).
- kernel_main: `cargar_userspace` reemplaza las 5 `encender_app`
  escritas a mano; `encender_app` recupera el bytecode del grafo —
  `recuperar` verifica el hash, un módulo corrupto se niega y el
  arranque sigue.
- wasm: el techo de memoria pasa a ser por-app (del manifiesto).

Compila limpio. Verificación en QEMU pendiente (la corre el operador):
la pantalla debe verse idéntica a la Fase 6.2 + la línea «manifiesto».

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-22 15:11:47 +00:00
parent 4f31146533
commit bce4abd8cc
6 changed files with 302 additions and 100 deletions
+39
View File
@@ -480,3 +480,42 @@ con qué cuota y en qué región.
(`#![allow(dead_code)]` temporal, hasta que la 7a le dé un llamador). El
kernel compila y se comporta idéntico a la Fase 6.2 — nada observable que
verificar en QEMU en esta apertura.
## Fase 7a — Apps que nacen del Grafo: el Manifiesto — 2026-05-22
El kernel deja de empotrar el userspace. Las cinco aplicaciones ya no llegan
por `include_bytes!` en `main.rs`: nacen del grafo de objetos, gobernadas por
un Manifiesto de Génesis que también vive en el grafo.
### Añadido
- `kernel/src/manifiesto.rs` — el Manifiesto de Génesis implementado: tipos
`Manifiesto` / `EntradaApp`, (de)serialización `postcard`, `cargar` (lee el
manifiesto del grafo vía el ancla del superbloque) y `sembrar_genesis`
(puebla un disco virgen con las cinco apps de génesis).
- `almacen`: el `SuperBloque` gana el ancla `manifiesto: Option<Hash>` —
gemela de `raiz`, pero del lado del kernel. Accesores `manifiesto()` y
`fijar_manifiesto()`.
### Cambiado
- `almacen::VERSION` 1 → 2: el superbloque cambia de forma. Un disco v1 se
reformatea al arrancar, como cualquier disco ajeno — la cuenta de la
cronista reinicia una vez.
- `kernel_main`: las cinco llamadas `encender_app` escritas a mano se
sustituyen por `cargar_userspace`, que carga el manifiesto —o lo siembra si
el disco está virgen— e itera sus `EntradaApp`.
- `encender_app` recibe una `EntradaApp` y recupera el bytecode del grafo.
`recuperar` ya recomputa y verifica el hash: un bytecode corrupto se niega,
se pinta la baliza de desalojo en su región y el arranque continúa.
- `wasm::AplicacionWasm::cargar` recibe el techo de memoria por-app (del
manifiesto) en vez de la constante global `TECHO_MEMORIA`.
### Notas
- La siembra es TRANSITORIA: el bytecode aún viaja empotrado en
`manifiesto.rs` (`include_bytes!`) como semilla. La Fase 7b lo moverá al
constructor de imagen `boot` y el `include_bytes!` morirá del todo.
### Pendiente de verificación
- QEMU (la corre el operador): la pantalla debe verse idéntica a la Fase 6.2
—cinco apps en sus regiones—, más una línea de consola «manifiesto :: …».
El primer arranque reformatea el disco v1→v2 y siembra la génesis; los
siguientes cargan el manifiesto ya grabado en el grafo.