Fallback-Logik und Prioritätsmodifikatoren

Die Fallback- und Prioritätslogik bestimmt, welche Modifikatoren (KURZ, BALD, FAST) in der Zeitanzeige verwendet werden, wenn mehrere Optionen vorhanden sind.

Kapitel 19: Fallback-Logik und Prioritätsmodifikatoren

Übersicht

Die Fallback- und Prioritätslogik bestimmt, welche Modifikatoren (KURZ, BALD, FAST) in der Zeitanzeige verwendet werden, wenn mehrere Optionen vorhanden sind.

Wichtig: Handler wählen basierend auf Verfügbarkeit/Priorität, NICHT auf Validierung. Die Validierung kommt später im Fallback-Prozess!


Die 3 Modifikatoren und ihre Gültigkeitsbereiche

FAST (Schnell/Fast)

  • Bedeutung: Der nächste Punkt kommt schnell (noch sehr kurz davor)
  • Gültig bei: :29, :59 (nur diese 2 Minuten!)
  • Nicht gültig bei: :27, :28, :57, :58 (wird in diesen Minuten ignoriert!)

KURZ (Gerade kurz davor)

  • Bedeutung: Der Punkt ist noch kurz weg (näher als BALD)
  • Gültig bei: :01-:02, :28, :31-:32, :58, :29, :59
  • Spezial: Bei :29, :59 nur wenn FAST nicht vorhanden

BALD (Bald/Gleich)

  • Bedeutung: Der Punkt ist bald da (weiter weg als KURZ)
  • Gültig bei: :27, :28, :29, :57, :58, :59 (überall in den kritischen Minuten)
  • Spezial: Fallback wenn FAST und KURZ nicht vorhanden

Prioritäts-Matrix (nach Minute)

MinutePriorität 1Priorität 2Priorität 3Fallback
:01-:02KURZ NACHNACHNACH
:27BALD HALBFÜNF VOR HALB
:28KURZ VOR HALBBALD HALBFÜNF VOR HALB
:29FAST HALBKURZ VOR HALBBALD HALBFÜNF VOR HALB
:31-:32KURZ NACH HALBNACH HALBNACH HALB
:57BALD [HOUR]FÜNF VOR [HOUR]
:58KURZ VOR [HOUR]BALD [HOUR]FÜNF VOR [HOUR]
:59FAST [HOUR]KURZ VOR [HOUR]BALD [HOUR]FÜNF VOR [HOUR]

Algorithmus (Handler-Logik)

Die MINUTE_RULES Handler verwenden diese Logik (OHNE Validierung im Handler!):

// Beispiel für :59
if(ctx.hasFast) {
    return ["FAST", ctx.hourWord];
}
if(ctx.hasKurz) {
    return ["KURZ", "VOR", ctx.hourWord];
}
if(ctx.hasBald) {
    return ["BALD", ctx.hourWord];
}
return ["FÜNF", "VOR", ctx.hourWord];

Fallback-Prozess (NACH Handler)

Wenn der Handler eine Wortfolge zurückgibt, wird diese später validiert:

  1. Validiere die Wortfolge im Pattern Grid
    • Müssen sequenziell im selben 11-Zeichen-Block liegen
  2. Wenn gültig: Verwende diese Wortfolge
  3. Wenn ungültig: Entferne optionale Modifikatoren (KURZ, FAST, BALD) und versuche erneut
  4. Wenn immer noch ungültig: Verwende Fallback-Wortfolge

Praktische Beispiele

Beispiel 1: 12:59 mit Pattern (hat FAST aber nicht KURZ, BALD)

Pattern: "ES_IST_FAST...UHR_"
Modifikatoren vorhanden: FAST ✓, KURZ ✗, BALD ✗

Handler-Auswahl (Priorität):
1. Prüfe FAST → ✓ vorhanden
   → Rückgabe: ["FAST", "EINS"]

Validierung:
   → "FAST EINS" validiert sich erfolgreich

Ergebnis: "ES IST FAST EINS" ✓

Beispiel 2: 12:59 mit Pattern (FAST NICHT vorhanden, aber KURZ)

Pattern: "ES_IST_KURZ...UHR_"
Modifikatoren vorhanden: FAST ✗, KURZ ✓, BALD ✗

Handler-Auswahl (Priorität):
1. Prüfe FAST → ✗ nicht vorhanden
2. Prüfe KURZ → ✓ vorhanden
   → Rückgabe: ["KURZ", "VOR", "EINS"]

Validierung:
   → "KURZ VOR EINS" validiert sich erfolgreich

Ergebnis: "ES IST KURZ VOR EINS" ✓

Beispiel 3: 12:59 mit Pattern (nur BALD vorhanden)

Pattern: "ES_IST_BALD...UHR_"
Modifikatoren vorhanden: FAST ✗, KURZ ✗, BALD ✓

Handler-Auswahl (Priorität):
1. Prüfe FAST → ✗ nicht vorhanden
2. Prüfe KURZ → ✗ nicht vorhanden
3. Prüfe BALD → ✓ vorhanden
   → Rückgabe: ["BALD", "EINS"]

Validierung:
   → "BALD EINS" validiert sich erfolgreich

Ergebnis: "ES IST BALD EINS" ✓

Beispiel 4: 12:59 mit Pattern (FAST vorhanden, aber "FAST EINS" validiert NICHT)

Pattern: "ES_IST_FASTX...UHR_"  (FAST ist nicht korrekt positioniert)
Modifikatoren vorhanden: FAST ✓, KURZ ✓, BALD ✓

Handler-Auswahl (Priorität):
   → Rückgabe: ["FAST", "EINS"]

Validierung (1. Versuch):
   → "FAST EINS" validiert NICHT ✗

Fallback-Validierung (2. Versuch - ohne FAST):
   Handler wird mit forceNoOptional=true neu aufgerufen
   → Rückgabe: ["KURZ", "VOR", "EINS"]
   → "KURZ VOR EINS" validiert erfolgreich ✓

Ergebnis: "ES IST KURZ VOR EINS" ✓

Wichtige Regeln (TLDR)

  1. Handler wählen NICHT validieren: Handlers geben Wortfolgen basierend auf Priorität zurück, OHNE zu prüfen ob sie im Pattern vorkommen
  2. Validierung kommt später: Nach Handler kommt Validierung + Fallback-Prozess
  3. Priorität ist fix pro Minute: Welche Priorität höher ist, hängt von der Minute ab, nicht vom Pattern
  4. Fallback entfernt Modifikatoren: Wenn Validierung fehlschlägt, werden optionale Wörter entfernt und es wird erneut versucht
  5. Keine doppelte Validierung: Im Handler NICHT validieren, sonst wird Logik verwirrt

LED-Berechnung nach Modifikator

ModifikatorFormelRichtungBeispiel
KURZ NACH (:01-:02)getTargetMinute - mmLINKS:01 → 1 LED
KURZ NACH HALB (:31-:32)mm % 5LINKS:31 → 1 LED
KURZ VOR (:58)60 - mmRECHTS:58 → 2 LEDs
FAST / BALD (:57-:59)60 - mmRECHTS:57 → 3 LEDs

Häufige Fehler

❌ Fehler 1: Im Handler validieren

Falsch:
if(ctx.hasFast) {
    if(validateWordSequence(...)) {  // ← FALSCH!
        return ["FAST", ...];
    }
}

Richtig:
if(ctx.hasFast) {
    return ["FAST", ...];  // Handler gibt nur Priorität zurück
}

❌ Fehler 2: FAST bei :28 verwenden

:28 hat FAST im Pattern? Spielt keine Rolle!
Handler ignoriert FAST bei :28 weil es nur bei :29, :59 gültig ist.

❌ Fehler 3: KURZ bei :27 verwenden

:27 hat KURZ im Pattern? Spielt keine Rolle!
Handler ignoriert KURZ bei :27 weil es nur bei :28, :58, :29, :59 und :01-02, :31-32 gültig ist.

Code-Implementierung (V0.3)

Handler für :59 (TypeScript)

handler: (ctx) => {
    // Priorität 1: FAST
    if(ctx.hasFast) {
        return ["FAST", ctx.hourWord];
    }
    // Priorität 2: KURZ (wenn FAST nicht vorhanden)
    if(ctx.hasKurz) {
        return ["KURZ", "VOR", ctx.hourWord];
    }
    // Priorität 3: BALD (wenn FAST und KURZ nicht vorhanden)
    if(ctx.hasBald) {
        return ["BALD", ctx.hourWord];
    }
    // Fallback: FÜNF VOR
    return ["FÜNF", "VOR", ctx.hourWord];
}

Zusammenfassung

Die Fallback- und Prioritätslogik ist einfach aber wichtig:

  1. Handler wählen basierend auf Priorität, nicht Validierung
  2. Validierung kommt später im Fallback-Prozess
  3. Modifikatoren haben feste Gültigkeitsbereiche pro Minute
  4. Priorität ist deterministisch: Bei mehreren gültigen Modifikatoren ist immer klar, welcher gewählt wird
  5. Fallback ist robust: Wenn gewählte Wortfolge im Pattern nicht validiert, wird automatisch vereinfacht

Dies gewährleistet, dass die Zeitanzeige immer korrekt, vorhersehbar und robust ist.


Status: ✅ Korrekt implementiert in V0.3 (charMatrixV03.html)