Files
brahman/renaser/CLAUDE.md
T
sergio 900cd19e49 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>
2026-05-22 18:43:58 +00:00

4.2 KiB

renaser — guía operativa

renaser es un kernel asíncrono de Espacio de Direccionamiento Único (SASOS) en Rust #![no_std], bare-metal x86_64. Rompe con POSIX: interfaz visual nativa desde el arranque, aislamiento por software (no por MMU), el texto como caso particular del dibujo.

Documentos hermanos: ARCHITECTURE.md (arquitectura), ROADMAP.md (fases y plan), CHANGELOG.md (registro técnico de cambios), DIARIO.md (crónica en lenguaje llano), README.md (presentación).

Construir y ejecutar

Desde la raíz del repositorio:

Comando Efecto
cargo run compila el kernel, forja la imagen UEFI y abre QEMU
cargo build compila el kernel + la imagen, sin lanzar QEMU
cargo kernel alias: compila solo el kernel para x86_64-unknown-none

Verificación headless (sin ventana): añadir -- -display none -monitor unix:/tmp/q.sock,server,nowait y capturar con screendump por el socket del monitor.

Reconstruir una app WASM del userspace tras tocarla. Los .wasm viven en kernel/assets/ —de ahí los lee boot al sembrar la imagen (Fase 7b)—; el modulo hello_wasm se copia como app.wasm, el resto conserva su nombre:

cd apps/<app>            # hello_wasm, discola, glotona, cronista, memoriosa
cargo build --target wasm32-unknown-unknown --release
cp target/wasm32-unknown-unknown/release/<app>.wasm ../../kernel/assets/<app>.wasm
# (hello_wasm es la excepcion: su destino es kernel/assets/app.wasm)

Estructura del espacio de trabajo

  • boot/ — orquestador de anfitrión: construye la imagen de disco UEFI con la crate bootloader 0.11 y lanza QEMU. Es el único miembro del workspace.
  • kernel/ — el kernel bare-metal. Está excluido del workspace y se compila solo como dependencia de artefacto de boot (target x86_64-unknown-none). NUNCA debe ser miembro del workspace ni compilarse para el anfitrión: lo haría fallar por un _start duplicado.
  • apps/ — aplicaciones del userspace, módulos .wasm (target wasm32-unknown-unknown). Workspaces propios, excluidos.

Módulos del kernel (kernel/src/): main, grafico, consola, baliza, sync, gdt, interrupts, pic, drivers/, almacen, memory/, async_system/, texto, wasm/. El detalle de cada uno está en ARCHITECTURE.md.

Toolchain

Nightly, fijado en rust-toolchain.toml. Targets x86_64-unknown-none y wasm32-unknown-unknown. Componentes rust-src y llvm-tools (los exige el build script de la crate bootloader). Entorno verificado: Artix Linux, QEMU 11, OVMF en /usr/share/edk2/x64/OVMF.4m.fd (sin módulo KVM → TCG).

Convenciones

  • Idioma: comentarios E identificadores en español.
  • unsafe: confinado en células mínimas, envuelto de inmediato en una abstracción segura. #![deny(unsafe_op_in_unsafe_fn)]. Cada bloque unsafe lleva un comentario SEGURIDAD: que justifica su corrección.
  • Framebuffer / MMIO: siempre core::ptr::write_volatile; jamás asignación indexada directa (el optimizador la elidiría).
  • no_std estricto: solo core::* y alloc::* (heap vivo desde la Fase 3). Prohibido cualquier ruta de std::*.
  • Alineación: 16 bytes para estructuras genéricas; 4096 bytes (página) para buffers de memoria y regiones de asignador.
  • Código densamente comentado; se cuida la coherencia de estilo entre módulos.

Estado

Fases 1 a 5, 6.0, 6.1, 6.2 y la Fase 7 COMPLETA —el userspace nace del grafo de objetos: Manifiesto de Génesis (7a), imagen sembrada por boot (7b) y persistencia inter-sesión por-app (7c)—. Todo verificado en QEMU. Ver ROADMAP.md.

Flujo de trabajo

En cada iteración de trabajo, sin excepción:

  1. Actualizar CHANGELOG.md — la entrada técnica detallada del cambio.
  2. Actualizar DIARIO.md — la misma jornada contada en lenguaje llano y elegante, sin carga técnica (es una crónica humana, no un registro técnico).
  3. Verificar en QEMU si el cambio es observable (con captura de pantalla).
  4. git commit (mensaje en español, descriptivo) y git push origin main.

renaser vive ahora dentro del monorepo brahman; los commits van al remoto de brahman (gitea.gioser.net/sergio/brahman). Mensajes de commit en español. Verifica una fase en QEMU antes de darla por cerrada.