diff --git a/openspec/changes/season-quoted-dates/.openspec.yaml b/openspec/changes/archive/2026-09-29-season-quoted-dates/.openspec.yaml similarity index 100% rename from openspec/changes/season-quoted-dates/.openspec.yaml rename to openspec/changes/archive/2026-09-29-season-quoted-dates/.openspec.yaml diff --git a/openspec/changes/season-quoted-dates/design.md b/openspec/changes/archive/2026-09-29-season-quoted-dates/design.md similarity index 100% rename from openspec/changes/season-quoted-dates/design.md rename to openspec/changes/archive/2026-09-29-season-quoted-dates/design.md diff --git a/openspec/changes/season-quoted-dates/proposal.md b/openspec/changes/archive/2026-09-29-season-quoted-dates/proposal.md similarity index 100% rename from openspec/changes/season-quoted-dates/proposal.md rename to openspec/changes/archive/2026-09-29-season-quoted-dates/proposal.md diff --git a/openspec/changes/season-quoted-dates/specs/lobby-seasons/spec.md b/openspec/changes/archive/2026-09-29-season-quoted-dates/specs/lobby-seasons/spec.md similarity index 100% rename from openspec/changes/season-quoted-dates/specs/lobby-seasons/spec.md rename to openspec/changes/archive/2026-09-29-season-quoted-dates/specs/lobby-seasons/spec.md diff --git a/openspec/changes/season-quoted-dates/tasks.md b/openspec/changes/archive/2026-09-29-season-quoted-dates/tasks.md similarity index 97% rename from openspec/changes/season-quoted-dates/tasks.md rename to openspec/changes/archive/2026-09-29-season-quoted-dates/tasks.md index de1b8069..fa5ab38b 100644 --- a/openspec/changes/season-quoted-dates/tasks.md +++ b/openspec/changes/archive/2026-09-29-season-quoted-dates/tasks.md @@ -32,4 +32,4 @@ ## 5. Pull Request -- [ ] 5.1 Pull Request mit dem Titel `fix(season): explain that season date-times must be quoted` eröffnen (Titel und Beschreibung Englisch); Archiv-Commit `docs(openspec): archive season-quoted-dates`, falls das Archiv nicht mitgeliefert wird +- [x] 5.1 Pull Request mit dem Titel `fix(season): explain that season date-times must be quoted` eröffnen (Titel und Beschreibung Englisch); Archiv-Commit `docs(openspec): archive season-quoted-dates`, falls das Archiv nicht mitgeliefert wird diff --git a/openspec/specs/lobby-seasons/spec.md b/openspec/specs/lobby-seasons/spec.md index f864cff4..e5314973 100644 --- a/openspec/specs/lobby-seasons/spec.md +++ b/openspec/specs/lobby-seasons/spec.md @@ -96,7 +96,7 @@ Ist ein Neustart vorgemerkt und sind keine Spieler online, MUSS die Lobby sauber - **THEN** ist `autumn` die gewünschte Saison, und beim Start steht eine Warnung mit `autumn` und `halloween` im Log ### Requirement: Ungültige Saison-Konfiguration verhindert den Start -Ist eine aktivierte Saison ungültig, MUSS die Lobby den Start abbrechen, und die Fehlermeldung MUSS den vollständigen Schlüssel (`seasons..`) und den Grund nennen. Ungültig sind ein fehlender `world`-, `from`- oder `to`-Wert, ein Datum, das sich nicht lesen lässt, `from` nicht vor `to`, ein Weltverzeichnis, das unter `worlds/` fehlt, und ein Weltverzeichnis ohne Map-Datei. Auch eine ungültige `seasons.zone` MUSS den Start abbrechen. Eine abgeschaltete Saison DARF den Start nicht verhindern. Ein zur Laufzeit ungültig gewordener Wert DARF weder einen Neustart auslösen noch die Lobby stoppen; er MUSS als Warnung geloggt werden, und die Lobby behält bis zur Korrektur ihren Zustand: kein Neustart wird vorgemerkt, und es gibt keinen Stopp. +Ist eine aktivierte Saison ungültig, MUSS die Lobby den Start abbrechen, und die Fehlermeldung MUSS den vollständigen Schlüssel (`seasons..`) und den Grund nennen. Ungültig sind ein fehlender `world`-, `from`- oder `to`-Wert, ein Datum, das sich nicht lesen lässt, `from` nicht vor `to`, ein Weltverzeichnis, das unter `worlds/` fehlt, und ein Weltverzeichnis ohne Map-Datei. Datum-Zeit-Werte MÜSSEN in der YAML-Datei in Anführungszeichen stehen, weil ein unquotierter Wert vom Konfigurationslader nicht als Text geliefert wird und wie ein fehlender gilt. Fehlt `from` oder `to` einer Saison, die sonst Schlüssel hat, MUSS die Meldung (beim Start wie als Warnung zur Laufzeit) den Schlüssel nennen und darauf hinweisen, dass Datum-Zeit-Werte in Anführungszeichen stehen müssen. Auch eine ungültige `seasons.zone` MUSS den Start abbrechen. Eine abgeschaltete Saison DARF den Start nicht verhindern. Ein zur Laufzeit ungültig gewordener Wert DARF weder einen Neustart auslösen noch die Lobby stoppen; er MUSS als Warnung geloggt werden, und die Lobby behält bis zur Korrektur ihren Zustand: kein Neustart wird vorgemerkt, und es gibt keinen Stopp. #### Scenario: Welt existiert nicht - **WHEN** `seasons.winter.world` auf `winter` zeigt und `worlds/winter` fehlt @@ -121,3 +121,15 @@ Ist eine aktivierte Saison ungültig, MUSS die Lobby den Start abbrechen, und di #### Scenario: Live aktivierte Saison ohne Welt - **WHEN** die Lobby läuft und `seasons.winter.enabled` im aktiven Fenster auf `true` gesetzt wird, obwohl `worlds/winter` fehlt - **THEN** merkt die Lobby keinen Neustart vor, loggt eine Warnung mit `seasons.winter.world` und läuft weiter + +#### Scenario: Quotiertes Datum wird gelesen +- **WHEN** die YAML-Datei `from: "2026-12-01T00:00:00"` enthält +- **THEN** liest die Lobby den Wert als lokales Datum mit Uhrzeit und startet + +#### Scenario: Unquotiertes Datum +- **WHEN** die YAML-Datei `from: 2026-12-01T00:00:00` ohne Anführungszeichen enthält +- **THEN** startet die Lobby nicht, und die Meldung nennt `seasons.winter.from` sowie den Hinweis, Datum-Zeit-Werte in Anführungszeichen zu setzen + +#### Scenario: Unquotiertes Datum zur Laufzeit +- **WHEN** die Lobby läuft und ein unquotierter Wert eine aktivierte Saison ungültig macht +- **THEN** merkt die Lobby keinen Neustart vor, und die Warnung nennt den Schlüssel und den Hinweis auf Anführungszeichen