# Phase 1: Level-Up (PF2e regelkonform) - Discussion Log

> **Audit trail only.** Do not use as input to planning, research, or execution agents.
> Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.

**Date:** 2026-04-27
**Phase:** 01-level-up-pf2e-regelkonform
**Areas discussed:** Prereq-DSL-Scope, Free-Archetype-Regel, Wizard-Flow + DRAFT, Klassen+Spellcaster-Daten

---

## Prereq-DSL-Scope

### Frage: Welche Prereq-Patterns soll der DSL-Evaluator automatisch prüfen?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Empfohlener Scope | Skill-Rang, Feat-Besitz, Level, Klasse, Ancestry, Heritage evaluierbar; Deity, Spellcasting-Tradition, Multi-Class, Free-Text → Warnung. ~80%+ Coverage | ✓ |
| Minimal-Scope | Nur Skill-Rang + Level + Klasse | |
| Maximal-Scope | Plus Attribut-Score, Spellcasting-Tradition, Deity-Kategorien | |

**Notes:** Empfehlung aus `.planning/research/SUMMARY.md` direkt akzeptiert.

### Frage: Wie soll die UI mit nicht-evaluierbaren Prereqs umgehen?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Inline-Warning + Confirm | Warn-Icon + Tooltip + Confirm-Dialog beim Wählen | ✓ |
| Nur Inline-Warning | Warn-Icon ohne Confirm — Risiko Flüchtigkeitsfehler | |
| Separater Tab "Manuell prüfen" | Eigene Liste, mehr Klicks | |

### Frage: Woher kommen die Prereq-Strings, die der DSL-Evaluator parst?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Bestehende Feat-Tabelle | `Feat.prerequisites: String?` existiert bereits in schema.prisma | ✓ |
| Neue strukturierte Prereq-AST-Tabelle | Vor-geparstes AST-JSON pro Feat | |
| Hybrid: Lazy Parse + Cache | In-Memory-Cache nach erstem Lookup | |

**Notes:** Bestehendes Feld macht Migration unnötig.

### Frage: Soll der Evaluator auch beim Pathbuilder-Import laufen?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Nein, nur im Wizard | Pathbuilder-Import bleibt unverändert | |
| Ja, auch beim Import | Existierende Talente werden validiert | ✓ |

**Notes:** Abweichung vom Default-Vorschlag — User wollte explizit Import-Validation. Folge-Frage zur Behandlung der Verletzung.

### Frage: Was passiert beim Pathbuilder-Import bei Prereq-Verletzung?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Import + Warn-Liste | Charakter-Header zeigt Banner mit Liste | ✓ |
| Import + Inline-Markierung | Pro Talent ein Icon, keine zentrale Liste | |
| Block Import | Strikt — bricht bei jeder Inkonsistenz | |
| Keine Anzeige (lautlos) | Nur intern geloggt | |

---

## Free-Archetype-Regel

### Frage: Wie soll der Free-Archetype-Slot nach gewählter Dedication funktionieren?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Pathbuilder-Verhalten | Nach Dedication beliebige Archetyp-Talente (Multi-Archetype) | ✓ |
| Strikt nur gewählter Archetyp | RAW-strikt, bricht Multi-Archetype | |
| Hybrid mit GM-Override | Default strikt, Toggle erlaubt mehr | |

**Notes:** Spike-flagged in ROADMAP — direkt entschieden zugunsten Pathbuilder, weil Gruppe das gewohnt ist.

### Frage: Wo wird der Free-Archetype-Toggle pro Charakter eingestellt?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Char-Settings + Wizard-Schritt 0 | Settings + Lese-Anzeige im Wizard | ✓ |
| Nur Char-Settings | Schlanker, weniger transparent | |
| Pro Level-Up neu wählbar | Inkonsistent mit RAW (FA ist Kampagnen-Variant) | |

### Frage: Wie soll mit Free-Archetype umgegangen werden bei Pathbuilder-Import?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Auto-detect aus Pathbuilder | Toggle automatisch basiert auf Pathbuilder-JSON | ✓ |
| Manuell setzen nach Import | Toggle bleibt inaktiv, Spieler aktiviert | |
| Wizard fragt beim ersten Level-Up | Einmalige Wizard-Frage | |

---

## Wizard-Flow + DRAFT

### Frage: Wie soll der Wizard-Flow strukturiert sein?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Step-by-Step Modal | Sequenzielle Schritte, mobile-friendly | ✓ |
| Single-Page mit Akkordeons | Alles auf einer Seite, Mobile-Scroll | |
| Tab-basiert | Frei wechseln, kein klarer Fortschritt | |

### Frage: Wo wird der DRAFT-State persistiert?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Server-DRAFT-Session | Neue Prisma-Tabelle `LevelUpSession`, Cross-Device | ✓ |
| Client-State (Zustand) | Reload → alles weg | |
| LocalStorage | Resume nach Reload, kein Cross-Device | |

### Frage: Soll der Wizard eine Live-Vorschau der neuen Werte anzeigen?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Live-Vorschau im Review-Schritt | Vorher/Nachher gegenübergestellt am Ende | ✓ |
| Live-Vorschau in jedem Schritt | Per-PATCH-Recompute, Performance-Cost | |
| Nur nach Commit sichtbar | Schlankste Implementierung | |

### Frage: Wer darf den Level-Up-Wizard für einen Charakter öffnen?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Spieler (Owner) + GM | Konsistent mit checkCharacterAccess | ✓ |
| Nur Spieler (Owner) | GM kann nicht für abwesende Spieler leveln | |
| Nur GM | Kein selbstständiges Spieler-Leveln | |

### Frage: Was passiert mit einer offenen DRAFT-Session ohne Commit?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Bleibt unbegrenzt offen | UI bietet "fortsetzen oder verwerfen?" | ✓ |
| TTL 24h, dann auto-löschen | Aufgeräumte DB, Risiko Datenverlust | |
| TTL 7 Tage | Mittelweg | |

---

## Klassen+Spellcaster-Daten

### Frage: Woher kommen die Per-Class-Progression-Tabellen?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Neue ClassProgression-Tabelle + JSON-Seed | Konsistent mit "alle PF2e-Daten in DB" | ✓ |
| Hardcoded TS-Konstanten | Widerspricht Projekt-Regel | |
| Lazy aus Pathbuilder ableiten | Nicht regelkonform für neue Stufen | |

### Frage: Welche PF2e-Klassen werden in v1 unterstützt?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Alle Core- + APG-Klassen | 16 Klassen, ~95% Coverage | ✓ |
| Nur die Klassen, die eure Gruppe spielt | Schmaler Scope | |
| Alle Klassen aus PC1 + PC2 (Remaster) | Mehr Klassen, mehr Seed-Aufwand | |

### Frage: Welche PF2e-Datenquelle für den Class-Progression-Seed?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Foundry PF2e-System Open Data | Aktiv gepflegt, ORC-lizenziert | ✓ |
| Manuell aus Archives of Nethys | Volle Kontrolle, sehr aufwendig | |
| Open5e / pf2e-data NPM-Paket | Oft unvollständig | |

### Frage: Wie wird der Spellcaster-Repertoire-Increment-Schritt präsentiert?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Eigener Wizard-Schritt | Klar separiert von Slot-Increment | ✓ |
| Inline in Spellcaster-Schritt | Kompakter, weniger klar | |
| Später im Charakterbogen | Charakter nach Commit nicht "fertig" | |

### Frage: Wie sollen Wahl-Klassenmerkmale (Doctrine, Schule, Weapon Mastery) gehandhabt werden?

| Option | Beschreibung | Selected |
|--------|--------------|----------|
| Wizard erkennt + zeigt Sub-Schritt | Volle Regelkonformität, Charakter "fertig" | ✓ |
| Erst nach Commit füllen | Spieler vergisst es vielleicht | |
| Nur Anzeige + manuelle Notiz | Kein strukturiertes Datenmodell | |

---

## Claude's Discretion

- UI-Layout-Details des Step-by-Step-Modals (Header, Footer, Progress-Indicator)
- Spaltenstruktur des Review-Schritts (Tabelle vs. zwei Spalten)
- DRAFT-API-Endpoint-Naming
- JSON-Format des Snapshot-Vorher
- Genaue deutsche Error-Messages
- Test-Granularität jenseits der Kern-Funktionen

## Deferred Ideas

- Level-up-Historie-Ansicht (LVL-V2-01)
- Reverse-Level-Up (LVL-V2-02)
- Variant-Class-Features (Rogue Eldritch Trickster etc.)
- Multi-Classing (out of scope)
- Live-Recompute pro Schritt (verworfen)
- Remaster-Klassen (PC1+PC2)
