feat(renaser): Fase 7c — persistencia inter-sesión por-app

Cada app tiene ahora su propia ranura de estado en el Manifiesto de
Génesis (EntradaApp.estado): guarda y recobra lo suyo, sobrevive al
reinicio, y no pisa a ninguna otra app.

- apps/memoriosa: app WASM interactiva nueva. Cuenta las teclas pulsadas
  y persiste el recuento; al reiniciar despierta con su cuenta intacta.
  Reemplaza la 2a instancia de hola en la genesis.
- kernel: capacidades sys_estado_cargar / sys_estado_guardar. El kernel
  custodia un manifiesto VIVO (Mutex<Manifiesto>); fijar_estado lo muta,
  lo re-graba en el grafo y lo re-ancla. ContextoCapacidades.indice_app
  da a cada app su identidad — su ranura, jamas la de otra.
- cargar_userspace instala el manifiesto vivo antes de instanciar las
  apps: el init de una app ya consulta su estado al despertar.

Verificado en QEMU (screendump + sendkey): disco virgen -> memoriosa con
0 celdas, testigo verde; 5 pulsaciones -> 5 celdas; reinicio -> 5 celdas
intactas, testigo ambar (init releyo el estado del grafo).

Cierra la Fase 7 — el userspace nace del grafo, completa.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-22 18:43:58 +00:00
parent 6a0781c0a8
commit 900cd19e49
15 changed files with 492 additions and 35 deletions
+5 -5
View File
@@ -108,12 +108,12 @@ struct AppGenesis {
}
/// El userspace de genesis — las cinco aplicaciones que pueblan un disco recien
/// forjado, con las regiones de la Fase 6.2. `app.wasm` aparece dos veces —dos
/// instancias del mismo bytecode—; el grafo, direccionado por contenido, guarda
/// su objeto una sola vez.
/// forjado. Un saludo (`hola`), la `memoriosa` interactiva que recuerda entre
/// sesiones (Fase 7c), y tres demos de los guardarrailes del kernel: `discola`
/// (combustible), `glotona` (memoria) y `cronista` (la cronica de los arranques).
const GENESIS: [AppGenesis; 5] = [
AppGenesis { nombre: "hola-izq", archivo: "app.wasm", region: (100, 120, 480, 560) },
AppGenesis { nombre: "hola-der", archivo: "app.wasm", region: (700, 120, 480, 560) },
AppGenesis { nombre: "hola", archivo: "app.wasm", region: (100, 120, 480, 560) },
AppGenesis { nombre: "memoriosa", archivo: "memoriosa.wasm", region: (700, 120, 360, 80) },
AppGenesis { nombre: "discola", archivo: "discola.wasm", region: (60, 700, 360, 80) },
AppGenesis { nombre: "glotona", archivo: "glotona.wasm", region: (460, 700, 360, 80) },
AppGenesis { nombre: "cronista", archivo: "cronista.wasm", region: (860, 700, 360, 80) },