feat(renaser): Fase 7b — boot siembra la imagen, muere el include_bytes!
El kernel deja de empotrar el userspace por completo. Ya no carga ni un
solo .wasm: es boot quien siembra el disco con el grafo poblado.
- kernel/almacen.rs y manifiesto.rs migran al nucleo compartido `formato`
(tipos, postcard, BLAKE3, trazado de registros). El kernel pierde los
include_bytes!, genesis() y sembrar_genesis().
- boot::sembrar_grafo siembra un disco virgen con el bytecode de las apps
(deduplicado) y el Manifiesto de Genesis anclado en el superbloque.
- cargar_userspace sin rama de siembra; wasm/mod.rs sin TECHO_MEMORIA.
- alias `cargo kernel` -> --manifest-path (esquiva un ICE de cargo con
formato compartido entre el kernel y boot via artifact-dep).
Verificado en QEMU (screendump): disco virgen -> boot siembra 5 objetos,
el kernel monta su grafo; segundo arranque -> boot respeta el disco, la
cronista persiste. formato: 5/5 pruebas.
Nota: el crate `formato` y los 3 Cargo.toml entraron antes en 43e6b32 por
un `git add -A` de un trabajo concurrente; este commit cierra el resto.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -528,3 +528,62 @@ un Manifiesto de Génesis que también vive en el grafo.
|
||||
nacidas del grafo», y la cronista pinta su segunda celda — la cuenta de
|
||||
arranques sobrevivió al apagón. El userspace nace del grafo en ambos
|
||||
casos.
|
||||
|
||||
## Fase 7b — La imagen sembrada por `boot`; muere el `include_bytes!` — 2026-05-22
|
||||
|
||||
El kernel deja de empotrar el userspace POR COMPLETO. Hasta la 7a, el bytecode
|
||||
de las cinco apps de génesis aún viajaba dentro del binario del kernel
|
||||
(`include_bytes!`), como semilla transitoria. La 7b lo mata: es el constructor
|
||||
de imagen `boot` —en el anfitrión— quien siembra el disco con el grafo ya
|
||||
poblado. El binario del kernel ya no carga ni un solo `.wasm`.
|
||||
|
||||
### Añadido
|
||||
- **`formato`** — nueva crate: un núcleo `#![no_std]` COMPARTIDO que define el
|
||||
formato del grafo de objetos en disco. Tipos (`Objeto`, `SuperBloque`,
|
||||
`Manifiesto`, `EntradaApp`), su (de)serialización `postcard`, la función hash
|
||||
BLAKE3 (escalar pura) y el trazado de un registro del log
|
||||
(`componer_registro` / `longitud_registro`). Lo enlazan el kernel bare-metal
|
||||
Y el anfitrión `boot`: una sola verdad del formato, imposible de divergir
|
||||
entre los dos lados. 5 pruebas de ida y vuelta. Excluida del workspace, como
|
||||
el kernel.
|
||||
- `boot`: `sembrar_grafo` — siembra un disco virgen con el grafo ya poblado.
|
||||
Graba el bytecode de cada app de génesis como un objeto (deduplicado:
|
||||
`app.wasm`, usado dos veces, se guarda una sola), compone el Manifiesto de
|
||||
Génesis con sus regiones y cuotas, lo graba con las aristas hacia los objetos
|
||||
de bytecode, y forja el superbloque que lo ancla. El `.wasm` se lee de
|
||||
`kernel/assets/` en tiempo de ejecución.
|
||||
|
||||
### Cambiado
|
||||
- `kernel/manifiesto.rs`: pierde los cuatro `include_bytes!`, el descriptor
|
||||
`AppGenesis`, `genesis()` y `sembrar_genesis()`. Se reduce a `cargar()` —leer
|
||||
el manifiesto del grafo— y `region()` —traducir la región en disco a la del
|
||||
kernel—. Los tipos `Manifiesto` / `EntradaApp` migran a `formato`.
|
||||
- `kernel/almacen.rs`: los tipos `Objeto` / `SuperBloque`, las constantes del
|
||||
formato, el hash y el trazado de registros migran a `formato`. El módulo
|
||||
queda como el almacén VIVO: cursor, índice y E/S contra virtio-blk.
|
||||
- `kernel_main` / `cargar_userspace`: sin la rama de siembra. Un disco sin
|
||||
manifiesto anclado ya no se siembra desde el kernel —`boot` lo hace siempre
|
||||
al forjar la imagen—; el kernel se levanta sin userspace y lo reporta.
|
||||
- `kernel/Cargo.toml`: deja de declarar `serde` / `postcard` / `blake3` por su
|
||||
cuenta; los hereda —mismas features, BLAKE3 escalar puro— a través de
|
||||
`formato`.
|
||||
- `wasm/mod.rs`: se retira la constante `TECHO_MEMORIA`, ya sin uso (el techo
|
||||
por-app lo dicta el manifiesto; el valor de génesis vive ahora en `boot`).
|
||||
- `.cargo/config.toml`: el alias `cargo kernel` pasa de `-p kernel` a
|
||||
`--manifest-path kernel/Cargo.toml`. Con `formato` compartido entre el kernel
|
||||
y `boot`, pedir `-p kernel` dentro del workspace —con el kernel a la vez como
|
||||
dependencia de artefacto— hace caer al resolvedor de features de cargo;
|
||||
apuntar al manifiesto del kernel lo compila como raíz y esquiva el grafo.
|
||||
|
||||
### Verificado
|
||||
- QEMU (captura headless por el monitor, `screendump`), los dos caminos:
|
||||
- **Disco virgen** — `boot` imprime «disco de objetos sembrado :: 5 objetos,
|
||||
manifiesto anclado»; el kernel monta el grafo de `boot` —«grafo montado ::
|
||||
5 objetos :: raíz ausente», SIN «disco formateado» ni «génesis sembrada»—
|
||||
e instancia las cinco apps. Pantalla idéntica a la Fase 6.2.
|
||||
- **Segundo arranque** — `boot` respeta el disco existente («el grafo
|
||||
perdura»); el kernel carga «6 objetos :: raíz presente» y la cronista pinta
|
||||
su segunda celda: la persistencia sobrevive a través de un disco sembrado
|
||||
por `boot`.
|
||||
- `cargo build -p boot` y `cargo kernel` compilan limpios; `cargo test` de
|
||||
`formato` — 5/5 en verde.
|
||||
|
||||
Reference in New Issue
Block a user