feat(mirada): mirada-greeter — greeter de login del escritorio carmen

App GPUI con app_id carmen.greeter: formulario usuario+contraseña que
autentica con brahman-auth en un hilo de fondo y, en éxito, emite un
SessionTicket por stdout para que el compositor haga el traspaso a modo
sesión. Backend mock (MIRADA_GREETER_MOCK) o PAM.

Incluye brahman-auth::SessionTicket (contrato de tiquet greeter→compositor,
serializado a una línea con prefijo versionado) y el modo enmascarado de
nahual-widget-text-input (TextInput::with_mask para contraseñas).

18 tests nuevos; greeter verificado por compilación + clippy.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-21 17:59:12 +00:00
parent 8a15b812f9
commit bb21c28eb1
11 changed files with 536 additions and 11 deletions
+19
View File
@@ -5,6 +5,25 @@ Cerebro (GPUI) ↔ Cuerpo (smithay) en dos procesos. El historial previo
vive en `git log` (`feat(mirada): …`); este archivo arranca con el
trabajo de escritorio (tema, DM).
### feat(mirada-greeter): greeter de carmen — login GPUI
App nueva `crates/apps/mirada-greeter`: la pantalla de login del
escritorio. Ventana GPUI con `app_id = "carmen.greeter"` para que el
compositor la reconozca y la componga a pantalla completa.
- Formulario usuario + contraseña (campo enmascarado). `Enter` encadena
los campos y dispara la autenticación.
- Autentica con `brahman-auth` en un hilo de fondo (PAM demora ~2 s ante
un fallo — la UI no se congela). Backend por entorno:
`MIRADA_GREETER_MOCK=usuario:secreto` (dev) o PAM (`MIRADA_GREETER_PAM`,
por defecto `carmen`).
- En éxito imprime un `SessionTicket` a stdout y termina; el compositor
lo leerá para el traspaso a modo sesión (siguiente slice).
Para el contrato del tiquet (`brahman-auth::SessionTicket`) y el modo
enmascarado de `nahual-widget-text-input`, ver los changelogs de
`protocol/` y `nahual`.
### feat(mirada): inyección de entorno de tema a los hijos del compositor
`spawn_command` del compositor inyecta `THEME_ENV` a cada proceso hijo: