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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user