Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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_secondsfü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): diemanifest.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 stattengine.switch_moduledirekt aufzurufen. - Update-Check via
lib-core.git(start_ls_remote_tags/take_result): asynchronesls-remotepro Modul gegen die Gitea-Repo-URL, Vergleich des höchstenvX.Y.Z-Tags gegen die lokale Version → Badgeavailable/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.listDiscovery der installierten Module aus dem modules-dir;engine.switch_modulefür den Laufzeit-Wechsel vom Launcher ins selektierte Modul.- Scrollbare Panels via
engine.render.begin_view/end_view(scissor-clipped), getrieben durchengine.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 viaengine.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.luaausgelagert, geladen viaengine.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