Add Cooldown Planner concept and roadmap to CLAUDE.md

Documents data model, import flow with merge logic, feature roadmap,
job-to-ability mapping, recast times, and technical decisions for the
upcoming third tab (Planer).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
xziino 2026-05-21 15:26:49 +02:00
parent 6897db0fe6
commit d6dedd1a2e

104
CLAUDE.md
View File

@ -4,9 +4,10 @@
PHP/HTML/JS-Tool zum Analysieren von FFXIV-Raidlogs via FFLogs OAuth2 PKCE + GraphQL API. PHP/HTML/JS-Tool zum Analysieren von FFXIV-Raidlogs via FFLogs OAuth2 PKCE + GraphQL API.
Kein Framework, kein Composer, kein npm — Plain PHP für Shared Hosting. Kein Framework, kein Composer, kein npm — Plain PHP für Shared Hosting.
Zwei Tabs: Drei Tabs:
- **Report-Tab**: Report-Code eingeben, Fight auswählen → Fight-JSON-Ausgabe + Event Explorer - **Report-Tab**: Report-Code eingeben, Fight auswählen → Fight-JSON-Ausgabe + Event Explorer
- **Analyse-Tab**: Spielerübersicht + AoE-Timeline mit Mitigation-Tracking, Pull-Vergleich, Phase-Filter - **Analyse-Tab**: Spielerübersicht + AoE-Timeline mit Mitigation-Tracking, Pull-Vergleich, Phase-Filter
- **Planer-Tab** *(in Entwicklung)*: Cooldown-Planer für Raid-Mitigation — Log-Import, manuelle Bearbeitung, Job-basierte Spell-Verfügbarkeit, DR-Simulation
## Architektur & Konventionen ## Architektur & Konventionen
@ -213,3 +214,104 @@ Vollständiges Schema: siehe `debug/schema.php` oder `fflogs-schema.json`
- `REDIRECT_URI` auf produktive HTTPS-URL anpassen - `REDIRECT_URI` auf produktive HTTPS-URL anpassen
- `debug/` Ordner nicht deployen - `debug/` Ordner nicht deployen
- `assets/` Ordner deployen (enthält lokale Icons) - `assets/` Ordner deployen (enthält lokale Icons)
---
## Planer-Tab — Konzept & Roadmap
### Ziel
Raid-Cooldown-Planer: Welche Mitigation-Ability wird für welche Mechanik eingesetzt? Basierend auf Log-Daten oder manuell aufgebaut. Überlebt Browser-Neustarts via localStorage.
### Datenmodell (Plan)
```json
{
"id": "uuid",
"name": "M8S Prog Week 1",
"createdAt": 1234567890,
"updatedAt": 1234567890,
"source": { "reportCode": "abc123", "fightId": 6 },
"jobComposition": ["PLD", "WAR", "WHM", "SCH", "MNK", "DRG", "BRD", "SMN"],
"mechanics": [
{
"id": "uuid",
"name": "Fourth-Wall Fusion",
"timestamp": 83000,
"unmitigatedDamage": 280000,
"assignments": [
{ "ability": "Reprisal", "job": "PLD" },
{ "ability": "Shield Samba", "job": "BRD" }
]
}
]
}
```
Mehrere Pläne gespeichert in `localStorage` unter `ff14-planner-plans` als Array.
### Import-Flow (erster Meilenstein)
**Ziel:** Einen bestehenden Log als saubere Mechanik-Vorlage laden — ohne vorhandene Mechaniken zu überschreiben.
1. Benutzer wählt Report-Code + Kampf (gleicher Flow wie im Report-Tab, eigenes Mini-Formular im Planer)
2. `api/analysis.php` wird aufgerufen → liefert `aoe_events` mit Name, Timestamp, `unmitigatedAmount`
3. Jedes AoE-Event wird als Mechanik-Kandidat angezeigt (Name + Timestamp + Rohschaden)
4. Benutzer kann einzelne Events auswählen oder alle übernehmen
5. **Merge-Logik:** Beim Import in einen bestehenden Plan werden nur Mechaniken hinzugefügt die noch nicht vorhanden sind — Matching per `abilityName` + Timestamp-Nähe (± 5s). Bestehende Assignments bleiben erhalten.
6. Neue Mechaniken werden an der richtigen Timestamp-Position eingefügt (Timeline bleibt sortiert)
**Warum Merge statt Überschreiben:** Progress-Szenario — erster Import enthält Phase 1, späterer Import (weiter im Fight) fügt Phase 2 hinzu ohne Phase-1-Planung zu verlieren.
### Geplante Features (Übersicht)
| Prio | Feature | Beschreibung |
|---|---|---|
| 1 | **Import-Flow** | Log → Mechanik-Timeline, Merge bei Teilimporten |
| 2 | **Jobaufstellung** | 8 Slots (2 Tank, 2 Healer, 4 DPS), Auswahl bestimmt verfügbare Spells |
| 3 | **Cooldown-Zuweisung** | Pro Mechanik Abilities zuweisen/entfernen per Klick |
| 4 | **DR-Simulation** | `simuliert = unmitigated × ∏(1 dr_i)` live berechnet beim Toggle |
| 5 | **Recast-Tracking** | Recast-Datenbank pro Ability; Konflikt-Warnung wenn CD noch läuft |
| 6 | **Coverage-Ansicht** | Gantt-Chart: Mechaniken auf X-Achse, Buff-Dauer als Balken |
| 7 | **Analyse-Overlay** | Planer-Tab: Vergleich geplanter vs. tatsächlich genutzter CDs (Job-basiertes Matching, nicht Spielername) |
| 8 | **Shield-Schätzung** | Empirisch aus Log-Durchschnitt (`absorbed`-Werte), nicht exakt |
| 9 | **JSON-Export/Import** | Plan als Datei teilen mit Raidkollegen |
### Spell-Verfügbarkeit nach Job
Jobaufstellung → verfügbare Abilities (Subset von `MITIGATION_ABILITIES`):
| Job | Abilities |
|---|---|
| PLD | Passage of Arms, Divine Veil, Guardian, Reprisal |
| WAR | Shake It Off, Bloodwhetting, Reprisal |
| DRK | Dark Missionary, Reprisal |
| GNB | Heart of Stone *(noch nicht getrackt)*, Reprisal |
| WHM | Temperance, Divine Benison, Divine Caress |
| SCH | Sacred Soil, Expedient, Fey Illumination, Galvanize, Seraphic Veil, Catalyze, Addle |
| AST | Collective Unconscious, Neutral Sect, Intersection, the Spire |
| SGE | Kerachole, Holos, Holosakos, Panhaima, Eukrasian Prognosis, Eukrasian Diagnosis, Haima, Addle |
| BRD | Troubadour |
| MCH | Tactician |
| DNC | Shield Samba, Improvised Finish |
| MNK | Feint |
| DRG | Feint |
| NIN | Feint |
| SAM | Feint |
| RPR | Feint |
| VPR | Feint |
| BLM | Addle |
| SMN | Addle, Radiant Aegis |
| RDM | Addle, Magick Barrier |
| PCT | Addle, Tempera Coat, Tempera Grassa |
### Recast-Zeiten (geplante Datenbank)
Wird benötigt für Konflikt-Erkennung. Beispiele:
- Reprisal: 60s
- Feint / Addle: 90s
- Troubadour / Tactician / Shield Samba: 120s
- Temperance: 120s
- Dark Missionary / Heart of Light: 90s
### Technische Entscheidungen
- **Persistenz:** `localStorage` — kein Backend nötig, mehrere Pläne möglich
- **IDs:** `crypto.randomUUID()` für Plan- und Mechanik-IDs
- **Merge-Matching:** Mechaniken gelten als identisch wenn `abilityName` gleich und `|timestamp_a - timestamp_b| < 5000ms`
- **Keine Spielernamen im Planer:** Assignments sind Job-basiert (`{ ability, job }`), damit Pläne übertragbar sind
- **Analyse-Tab Overlay (Prio 7):** Job aus tatsächlichem Pull → lookup welche Ability dieser Job im Plan hatte → Soll/Ist-Vergleich