feat(yahweh-launcher): F3 — extracción del shell standard de explorers
Iter 19. Patrón con 4 consumers idénticos: cada main() repetía el mismo ~20 líneas de boot (Application::new + Theme::install_default + cx.open_window + WindowOptions + cx.activate). Sólo varían título, tamaño y root factory. crates/modules/ui_engine/libs/launcher/: - pub fn launch_app(title, size, root_factory) → 1-line boot. - pub fn launch_app_with(config, root_factory) → variante con config armado afuera (env-var driven, etc). - pub struct AppLaunchConfig::new(title, size). - 2 tests cubren normalización del config. Migración 4 consumers (nakui/nouser/minga/brahman-broker explorer): - main() pasa de ~20 líneas a 1: launch_app(...). - Imports gpui podados (no más App/Application/Bounds/WindowOpts/etc). - Cada uno agrega dep yahweh-launcher. Naming: yahweh-shell ya existe (bootstrap heavyweight con file/db/text viewers en crates/apps/). Helper liviano queda como yahweh-launcher. Ahorro ~75 líneas de boot hardcoded. Cambios de window/theme boot ahora en un solo lugar. 2/2 tests launcher; 4 consumer suites intactas, todo verde. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,44 @@ ratio/diff ver `git show <sha>`.
|
||||
|
||||
## 2026-05-10
|
||||
|
||||
### feat(yahweh-launcher): F3 — extracción del shell standard de explorers
|
||||
Iter 19. Patrón con 4 consumers idénticos (nakui-explorer,
|
||||
nouser-explorer, minga-explorer, brahman-broker-explorer) declaraban
|
||||
~20 líneas de boot:
|
||||
`Application::new + Theme::install_default + cx.open_window
|
||||
+ WindowOptions{ window_bounds, titlebar } + cx.activate(true)`.
|
||||
Todo idéntico salvo título, tamaño, y root entity factory.
|
||||
|
||||
Crate nuevo `crates/modules/ui_engine/libs/launcher/`
|
||||
(`yahweh-launcher`):
|
||||
- **Deps**: `gpui`, `yahweh-theme`. Sin más.
|
||||
- **`pub fn launch_app(title, size, root_factory)`**: 1-line boot.
|
||||
- **`pub fn launch_app_with(config, root_factory)`**: variante con
|
||||
`AppLaunchConfig` armado afuera, para casos donde título/tamaño se
|
||||
computan condicionalmente (env var, etc).
|
||||
- **`AppLaunchConfig::new(title, size)`**: builder normalizador.
|
||||
- 2 tests `#[test]` cubren la normalización de config (no se testea
|
||||
`launch_app` per se porque bloquea el thread main hasta que la
|
||||
ventana se cierra).
|
||||
|
||||
Migración 4 consumers:
|
||||
- `main()` pasa de 20 líneas a 1: `launch_app("Title", (W, H), Explorer::new)`.
|
||||
- Imports de gpui se podan: ya no necesitan `App, Application,
|
||||
Bounds, WindowBounds, WindowOptions` ni `SharedString` ni `prelude::*`.
|
||||
- Cada consumer agrega dep `yahweh-launcher` (path local).
|
||||
|
||||
Naming: el slot natural era `yahweh-shell`, pero ya existe un crate
|
||||
`yahweh-shell` en `crates/apps/` (bootstrap heavyweight con file
|
||||
explorer + DB explorer + viewers). El helper es liviano y específico
|
||||
al patrón de launch, así que `yahweh-launcher` evita confusión.
|
||||
|
||||
Total ahorro: ~75 líneas hardcoded de boilerplate UI a 4 líneas en
|
||||
total. Cambios de boot (window opts, theme, etc) ahora viven en un
|
||||
solo lugar.
|
||||
|
||||
Tests stack: 2 nuevos en launcher; suites de los 4 consumers
|
||||
intactas. Todo verde.
|
||||
|
||||
### chore(.gitignore): excluir .claude/ (state local de Claude Code)
|
||||
Iter 18. Side cleanup tras debugging: `.claude/` aparecía en
|
||||
`git status` cada sesión (contenía `scheduled_tasks.lock` y
|
||||
|
||||
Reference in New Issue
Block a user