2026-06-16 14:47:57 +00:00

lib-management.launcher

Master-detail Launcher-UI und Modul-Einstieg. Listet die installierten Module aus dem modules-dir auf und zeigt sie in einem geteilten Layout: links (1/3) die Modul-Liste mit Genre-Tags, rechts (2/3) ein Detail-Panel mit Hero-Carousel, gerenderter Markdown-Beschreibung und Dependency-Status. Pro Modul wird manifest.launcher.md für Präsentation (Summary, Tags, Teaser) geladen. Beim Launch eines Moduls prüft der Launcher dessen Dependencies (via lib-management.dep-fetcher) und Update-Stand (via lib-core.git); ein Konflikt öffnet ein Modal statt direkt zu wechseln. Typischer Einstieg: --module=lib-management.launcher bootet in den Launcher-Screen statt direkt in ein Spiel.

Version: 0.3.3
Module-ID: lib-management.launcher
Requires: lib-core.input v0.4.0, lib-core.git v0.2.0, lib-management.dep-fetcher v0.1.2
Tags: launcher, menu, system, navigation

Topology

graph LR
  this["lib-management.launcher"]
  lib_core_input["lib-core.input"]
  this --> lib_core_input
  lib_core_git["lib-core.git"]
  this --> lib_core_git
  lib_management_dep_fetcher["lib-management.dep-fetcher"]
  this --> lib_management_dep_fetcher
  engine["engine.*"]
  this --> engine

Controls

  • Mouse-Left: Select a module-row in the left list to show its detail; click Launch in the detail panel to launch it; carousel arrows; confirm/cancel in the modals.
  • Mouse-Wheel: Scroll the panel under the cursor — the module list (left) or the detail content (right). Detail content (description + dependencies) scrolls between the fixed hero strip and the fixed launch button.
  • Enter: Confirm quit when the quit-modal is open.
  • Escape: Open the quit-modal from the chooser; cancel the conflict/quit-modal when open.

Demonstrates

  • Master-detail Layout (1/3 Liste, 2/3 Detail): linke Liste zeigt je Modul Name + Genre-Tags-Subline (aus manifest.launcher.md); rechtes Detail-Panel zeigt Hero-Carousel, gerenderte Markdown-Beschreibung und eine Dependency-Status-Liste.
  • Pro-Modul-Präsentation aus manifest.launcher.md: Summary/Tags für die Liste, teaser_images + carousel_interval_seconds für das Hero-Carousel (Panel-State je Modul-ID, nur das selektierte Modul wird gepumpt).
  • Dependency-Status via lib-management.dep-fetcher (ensure_for_module): die manifest.module::deps[] werden in Load-Order zu einer Status-Liste komponiert (ok / warn / error) und mit Glyphen je Dep gerendert; ein Konflikt-Roll-up tönt die Liste ein und öffnet beim Launch das Konflikt-Modal statt engine.switch_module direkt aufzurufen.
  • Update-Check via lib-core.git (start_ls_remote_tags / take_result): asynchrones ls-remote pro Modul gegen die Gitea-Repo-URL, Vergleich des höchsten vX.Y.Z-Tags gegen die lokale Version → Badge available / no-update / local-only / fail (Fehler-Kind für Tooltips erhalten). In CI (SPOREL_CI=1) deaktiviert, damit der Milestone-Check offline bleibt.
  • engine.module.list Discovery der installierten Module aus dem modules-dir; engine.switch_module für den Laufzeit-Wechsel vom Launcher ins selektierte Modul.
  • Scrollbare Panels via engine.render.begin_view/end_view (scissor-clipped), getrieben durch engine.input.get_mouse_wheel, mit Inline-Scrollbars (Liste links, Detail-Content rechts zwischen fixiertem Hero-Strip und Launch-Button).
  • Markdown-/News-Rendering via sibling markdown.lua + frontmatter.lua; launcher-eigene Brand-Assets via engine.asset.load_texture (assets/launcher/).
  • Input-Action-Binding über lib-core.input (ui_click, ui_back, ui_confirm).
  • Modal-State-FSM (Liste <-> Quit-/Konflikt-Modal) in ein sibling fsm.lua ausgelagert, geladen via engine.module.dir_of.

References

  • meta/docs/architecture/module-lifecycle.md
  • meta/docs/architecture/host-app.md
  • meta/docs/superpowers/specs/2026-05-14-launcher-design.md
Description
P.3.4 UI launcher module � module picker + quit-confirm dialog
Readme 185 KiB
Languages
Lua 99.2%
Shell 0.8%