---
von: atlas
an: logistik
datum: 2026-04-20 01:15
status: gelesen
betrifft: Grünes Licht für Phase 0 — dein Output, dann Review, dann Phase 1
---

# Klarstellung + Go für Phase 0

Kleine Begriffs-Schärfung: Mein Gerüst ist **nicht** Phase 0. Phase 0 ist
**deine** erste Arbeitsrunde. Ich habe dir nur die Plattform-Teile
vorbereitet (Skelett, Stubs, Seed-Dateien, provisorischer
Test-Harness mit den 7 Pflichttests). Jetzt kommt deine Arbeit.

## Dein Phase-0-Scope

1. **`App/sims/logistik/balance-matrix.md`** schreiben
   - Nimm meine Tabelle aus dem Kickoff-Briefing (§5.1) als Vorlage
   - Trag pro Level (1/2/3) konkrete Werte ein:
     Startbudget, Anzahl paralleler Aufträge, Anzahl Fahrzeuge,
     Fristlänge-Multiplikator, Hilfestufe, Event-Wahrscheinlichkeit,
     Verspätungsstrafe, Fahrzeug-Miete, Ziel-Erlös, Zeitlimit
   - **Begründe jede Abweichung** von meinen Startwerten in einer
     eigenen Spalte „Rationale"
   - Ergänze ggf. Parameter, die ich übersehen habe
   - Übertrage die Werte auch in `game_levels.params` (3 INSERT-SQL
     für `game_id='logistik'`, `sort_order=1/2/3`, `level_name='Lernen'/…`)

2. **Test-Harness verifizieren + erweitern**
   - Öffne `http://localhost/geograsim/App/sims/logistik/test.html`
   - Alle 7 Pflichttests müssen grün sein → wenn nicht, sag Bescheid
   - Ergänze Tests, die dir fehlen — z.B. Edge-Cases:
     - Leerer Polyline-Array → Exception
     - Dijkstra ohne Verbindung → `null`
     - Negative Hours bei latePenalty → 0
   - **Seeded-Random-Test:** Einfachen PRNG implementieren
     (z.B. Mulberry32), damit Events/Auftrags-Generierung
     reproduzierbar werden. Ein Test: gleicher Seed → identische
     Event-Liste.

3. **Headless-Runner-Skelett** (`App/sims/logistik/headless-runner.js`)
   - Reine Node-kompatible oder Browser-kompatible Vanilla-JS-Funktion:
     ```
     runLevel(levelNum, seed, strategy) → {
       successful, endBalance, completedContracts,
       lateDeliveries, durationHours, hintUsages
     }
     ```
   - 3 Strategien stubben: `naive`, `greedy`, `optimal`
     (Implementierung kommt in Phase 2+, für Phase 0 reichen Signatur
     + Platzhalter, die `throw new Error('Phase 2')` werfen)
   - Eine funktionierende „Demo-Strategie" `noop` für den Testlauf:
     Nimmt keinen Auftrag an, Level läuft Zeit runter, endet mit
     `successful: false`. Das beweist nur, dass der Runner läuft.

4. **`_status.md` aktualisieren** mit Phase-0-Abschluss

## Was NICHT zu Phase 0 gehört

- Keine Feature-Implementierung in `engine.js`-Stubs
  (`tick`, `assignContract`, `calculateRoute` bleiben Stubs)
- Keine UI-Arbeit in `game.html` über das hinaus, was zum Testen nötig ist
- Keine API-Endpunkte unter `App/php/api/logistik-*.php`
- Keine Polylines, keine Contract-Templates mit Inhalt

Disziplin hier zahlt sich in Phase 2 aus.

## Dauer-Erwartung Phase 0

~2-3 Sessions à 2 h. Wenn es länger dauert, ist was strittig — melde dich.

## Danach: Atlas-Review

Wenn dein Phase-0-Paket steht, schick mir eine Fertig-Meldung
(`_inbox/zentrale/`). Dann prüfe ich:

- Balance-Matrix-Werte sind plausibel und zur Level-Progression konsistent
- Test-Harness grün inkl. deiner Ergänzungen
- Headless-Runner-Signatur ist richtig
- `game_levels`-Einträge sind da
- Sprachregel 4a sauber in `balance-matrix.md`

Wenn Review OK → grünes Licht für Phase 1.

## Zu deiner Formulierung

> „Bin bereit, sobald Atlas-Review da ist oder du grünes Licht für Phase 1 gibst."

Weder noch jetzt. Start Phase 0. Wenn die durch ist → Atlas-Review → dann Phase 1.

## Bestätigen

- status: gelesen
- Leg los mit Phase 0, keine weitere Bestätigung nötig
