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:
@@ -587,3 +587,46 @@ poblado. El binario del kernel ya no carga ni un solo `.wasm`.
|
||||
por `boot`.
|
||||
- `cargo build -p boot` y `cargo kernel` compilan limpios; `cargo test` de
|
||||
`formato` — 5/5 en verde.
|
||||
|
||||
## Fase 7c — Persistencia inter-sesión: cada app recuerda lo suyo — 2026-05-22
|
||||
|
||||
La cronista dejaba huella, pero en la RAÍZ del grafo — un ancla única que sólo
|
||||
una app puede usar. La 7c estrena la persistencia POR-APP: cada `EntradaApp`
|
||||
del Manifiesto de Génesis tiene su propia ranura `estado`, y una app guarda y
|
||||
recobra lo suyo sin pisar a nadie. El estado de cada aplicación sobrevive, por
|
||||
separado, a un reinicio.
|
||||
|
||||
### Añadido
|
||||
- **`apps/memoriosa`** — nueva app WASM interactiva. Cuenta las teclas pulsadas
|
||||
en toda su historia y persiste el recuento; al reiniciar, despierta con su
|
||||
cuenta intacta. Una celda violeta por pulsación; el testigo de la esquina es
|
||||
verde si nació limpia, ámbar si despertó con memoria de una vida anterior.
|
||||
- `kernel` — dos capacidades del host nuevas:
|
||||
- `sys_estado_cargar(salida, capacidad)` — copia el estado persistido de la
|
||||
app que llama en su memoria lineal; 0 si aún no tiene estado previo.
|
||||
- `sys_estado_guardar(datos, datos_len)` — graba `datos` como objeto del
|
||||
grafo y ancla su hash en la `EntradaApp` de la app, re-grabando y
|
||||
re-anclando el manifiesto.
|
||||
- `manifiesto.rs` — el manifiesto VIVO: `VIVO`, un `Mutex<Manifiesto>` que el
|
||||
kernel custodia. `instalar` (en el arranque), `estado_de` (lee la ranura de
|
||||
una app) y `fijar_estado` (la muta, re-graba el manifiesto y lo re-ancla).
|
||||
- `ContextoCapacidades` gana `indice_app`: la identidad de cada app en el
|
||||
manifiesto, con la que las capacidades de estado hallan SU ranura — jamás la
|
||||
de otra.
|
||||
|
||||
### Cambiado
|
||||
- `AplicacionWasm::cargar` y `encender_app` reciben el `indice_app` de la app.
|
||||
- `cargar_userspace` instala el manifiesto VIVO ANTES de instanciar las apps:
|
||||
el `init` de una app ya consulta su estado persistido al despertar.
|
||||
- `almacen::fijar_manifiesto` deja de ser `dead_code` — lo invoca `fijar_estado`.
|
||||
- La génesis (`boot`) sustituye la segunda instancia de `hola` por `memoriosa`
|
||||
(región 700,120 de 360×80).
|
||||
|
||||
### Verificado
|
||||
- QEMU (captura headless + `sendkey` por el monitor):
|
||||
- **Disco virgen** — memoriosa arranca con 0 celdas y el testigo verde.
|
||||
- **Cinco pulsaciones** (`sendkey`) — memoriosa pinta 5 celdas violetas y
|
||||
persiste el recuento; `sys_estado_guardar` re-ancla el manifiesto.
|
||||
- **Reinicio** — `boot` respeta el disco; memoriosa despierta con las 5
|
||||
celdas intactas y el testigo en ámbar: su `init` releyó el estado del
|
||||
grafo. El estado por-app sobrevivió al apagón.
|
||||
|
||||
Reference in New Issue
Block a user