03 — Mod-Ladepipeline und Manifest #4

Closed
opened 2026-08-11 13:13:23 +00:00 by RDietermann · 1 comment
Owner

Teil der Map #1 · Type: wayfinder:grilling · Blocked by: #3

Wie findet, ordnet und laedt das Spiel Mods — inklusive sich selbst? Ordnerlayout, Manifest-Schema, Ladereihenfolge, Ueberschreiben.

Volle Fragestellung (kanonisch): .scratch/rustkeep-1.0/issues/03-mod-ladepipeline.md

Teil der Map #1 · **Type: `wayfinder:grilling`** · **Blocked by: #3** Wie findet, ordnet und laedt das Spiel Mods — inklusive sich selbst? Ordnerlayout, Manifest-Schema, Ladereihenfolge, Ueberschreiben. Volle Fragestellung (kanonisch): `.scratch/rustkeep-1.0/issues/03-mod-ladepipeline.md`
RDietermann added the wayfinder:grilling label 2026-08-11 13:13:23 +00:00
Author
Owner

Aufgeloest in d2d5ae6. Kanonische Fassung: .scratch/rustkeep-1.0/issues/03-mod-ladepipeline.md

Ordnerlayout

Zwei Suchpfade: mods/ neben der Binary (enthaelt core/) und data_dir()/rustkeep/mods im Benutzerprofil, ermittelt ueber die Crate directories 6.0.0 (nimmt macOS mit). Bei gleicher Mod-ID gewinnt das Profil, mit Warnzeile — auch gegenueber core.

core liegt als echter Mod-Ordner auf der Platte, kein Sonderfall. include_str! entfaellt. Was nur fuer Fremdmods gilt, ist nie getestet.

Manifest — manifest.toml, Pflicht

id (Namensraum-Praefix und Mod-ID, unabhaengig vom Ordnernamen), name, version, depends (nur Namen, keine Versionsbereiche). Ordner ohne Manifest ist kein Mod: Warnzeile, uebersprungen.

TOML statt YAML: serde_yaml ist seit 25.03.2024 archiviert, der Fork serde_yml ebenfalls (Unsoundness, RUSTSEC-2025-0068). Fuer den Parser, der bei jedem Mod als erstes laeuft, ist das eine schlechtere Basis als das ohnehin vorhandene toml.

Ladereihenfolge

Spielerliste load_order.toml mit Manifest-IDs, selbstheilend: fehlt sie, wird sie erzeugt (core zuerst, Rest alphabetisch); unbekannter Ordner wird angehaengt und zurueckgeschrieben; Eintrag ohne Ordner ist Warnzeile.

depends sortiert nicht, es prueft. Fehlende Abhaengigkeit oder falsche Position sind harte Startfehler im Klartext. Das ist der Preis dafuer, dass ein Mensch die Reihenfolge pflegt.

Dateien im Mod

Jede *.toml ausser dem Manifest wird eingelesen, jede darf jede Registry-Tabelle enthalten. Keine festen Dateinamen — das ist weniger Code, nicht mehr.

IDs und Ueberschreiben

Auto-Praefix aus manifest.id: id = "schwert" wird zu meinmod:schwert. Ueberschrieben wird ueber overrides = "core:iron_sword" am Eintrag; der landet nur unter der ueberschriebenen ID, damit bestehende Verweise (Loottabellen, on_create, Questbelohnungen) weiterfunktionieren ohne Dublette. Zeigt overrides ins Leere: Warnzeile, Eintrag verworfen.

Drei Phasen

  1. Manifeste lesen, Reihenfolge bestimmen, depends pruefen
  2. Dateien in Ladereihenfolge einlesen, Eintraege nach ID in die Registries — hier wird nichts aufgeloest, dadurch keine Vorwaertsreferenzen
  3. Referenzen aufloesen und pruefen

Fehlereinheit ist der einzelne Eintrag, nicht der Mod und nicht das Spiel. Kein Nachladen zur Laufzeit.

Folgen

  • #5 (04 Fehlerstrategie) und #11 (10 Raum-Prefabs) sind entblockt; beide haben eine Vorgabe im Ticketkoerper bekommen
  • #10 (09 Save-Schema) ist der einzige Leser von manifest.version — faellt der Mod-Header, faellt das Feld
  • Code: include_str! und load_items() entfallen, mods/core/ entsteht, directories kommt in Cargo.toml
**Aufgeloest** in d2d5ae6. Kanonische Fassung: `.scratch/rustkeep-1.0/issues/03-mod-ladepipeline.md` ### Ordnerlayout Zwei Suchpfade: `mods/` neben der Binary (enthaelt `core/`) und `data_dir()/rustkeep/mods` im Benutzerprofil, ermittelt ueber die Crate `directories` 6.0.0 (nimmt macOS mit). Bei gleicher Mod-ID gewinnt das Profil, mit Warnzeile — auch gegenueber `core`. **`core` liegt als echter Mod-Ordner auf der Platte**, kein Sonderfall. `include_str!` entfaellt. Was nur fuer Fremdmods gilt, ist nie getestet. ### Manifest — `manifest.toml`, Pflicht `id` (Namensraum-Praefix und Mod-ID, unabhaengig vom Ordnernamen), `name`, `version`, `depends` (nur Namen, keine Versionsbereiche). Ordner ohne Manifest ist kein Mod: Warnzeile, uebersprungen. TOML statt YAML: `serde_yaml` ist seit 25.03.2024 archiviert, der Fork `serde_yml` ebenfalls (Unsoundness, RUSTSEC-2025-0068). Fuer den Parser, der bei jedem Mod als erstes laeuft, ist das eine schlechtere Basis als das ohnehin vorhandene `toml`. ### Ladereihenfolge Spielerliste `load_order.toml` mit Manifest-IDs, selbstheilend: fehlt sie, wird sie erzeugt (`core` zuerst, Rest alphabetisch); unbekannter Ordner wird angehaengt und zurueckgeschrieben; Eintrag ohne Ordner ist Warnzeile. **`depends` sortiert nicht, es prueft.** Fehlende Abhaengigkeit oder falsche Position sind harte Startfehler im Klartext. Das ist der Preis dafuer, dass ein Mensch die Reihenfolge pflegt. ### Dateien im Mod Jede `*.toml` ausser dem Manifest wird eingelesen, jede darf jede Registry-Tabelle enthalten. Keine festen Dateinamen — das ist weniger Code, nicht mehr. ### IDs und Ueberschreiben Auto-Praefix aus `manifest.id`: `id = "schwert"` wird zu `meinmod:schwert`. Ueberschrieben wird ueber `overrides = "core:iron_sword"` am Eintrag; der landet **nur** unter der ueberschriebenen ID, damit bestehende Verweise (Loottabellen, `on_create`, Questbelohnungen) weiterfunktionieren ohne Dublette. Zeigt `overrides` ins Leere: Warnzeile, Eintrag verworfen. ### Drei Phasen 1. Manifeste lesen, Reihenfolge bestimmen, `depends` pruefen 2. Dateien in Ladereihenfolge einlesen, Eintraege nach ID in die Registries — hier wird nichts aufgeloest, dadurch keine Vorwaertsreferenzen 3. Referenzen aufloesen und pruefen **Fehlereinheit ist der einzelne Eintrag**, nicht der Mod und nicht das Spiel. Kein Nachladen zur Laufzeit. ### Folgen - #5 (04 Fehlerstrategie) und #11 (10 Raum-Prefabs) sind entblockt; beide haben eine Vorgabe im Ticketkoerper bekommen - #10 (09 Save-Schema) ist der einzige Leser von `manifest.version` — faellt der Mod-Header, faellt das Feld - Code: `include_str!` und `load_items()` entfallen, `mods/core/` entsteht, `directories` kommt in `Cargo.toml`
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RDietermann/rustkeep#4