# Modus Update — bestehende Präsentation ändern

Du änderst eine bestehende Präsentation. Greift bei zwei Auslösern: explizite Stefan-Befehle und manuelle Edits via Linting.

## Auslöser 1 — Explizite Update-Befehle

**Trigger-Phrasen** (Intent erkennen, nicht Wortlaut):

- „pass die Präsentation X an", „ergänze Slide Y in X"
- „füge ein Slide ein zwischen 4 und 5 in der Mustermann-GmbH-Präsentation"
- „aktualisiere Slide 7 in der MUST-1-Präsentation, Bullet zur Migration ergänzen"
- „ändere die Headline auf Slide 3"
- „ersetze auf Slide 5 das Bild durch …"

**Nicht-Trigger:** Hinweise ohne Bezug zu einem konkreten Slide-Bundle, generelle Designsystem-Diskussion, neue Präsentation, Wunsch nach einem PDF.

## Ablauf

1. **Pflicht-Reads** wie in Modus Neu (Branding, Designsystem-Einstieg, Tokens, Hauptkarte). Nicht verhandelbar.
2. **Ziel-Bundle identifizieren** — Glob über
   - `02 Projekte/*/Termine/*/Praesentation/`
   - `02 Projekte/*/Praesentationen/*/`
   - `03 Bereiche/*/Termine/*/Praesentation/`
   - `03 Bereiche/*/Praesentationen/*/`
   - `04 Ressourcen/*/Praesentationen/*/`
   
   Fuzzy-Match gegen Prompt-Tokens. Bei Mehrdeutigkeit: einmalige Klärungs-Zeile mit Top-3-Treffern. Kein Frage-Stack.

3. **Backup anlegen** (gleiche Mechanik wie Modus Echo, siehe dort): Bundle-Verzeichnis als ZIP nach `<Bundle>/_echo-backups/update-backup-<YYYY-MM-DD-HHMM>.zip`. Rolling, max. 5 Backups.

4. **Edit ausführen** an der spezifizierten Stelle. Halte Dich an:
   - Tokens aus `tokens.json` (keine fremden Hex-Werte)
   - Layout-Klassen aus dem Designsystem-Template
   - Whitelist-Tags (siehe `whitelist-und-konfidenz.md`) — `locked` ist immun, auch bei expliziter Anweisung **innerhalb von Modus Update** (Sicherheits-Anker).

5. **Linting** (siehe Auslöser 2 für Details).

6. **Build ausführen:** `_runtime/build.cmd` (Windows) oder `_runtime/build.sh` (Bash). Bei Linting-Verstößen: Build trotzdem ausführen, aber Verstöße im Output deutlich melden, damit Stefan weiß was korrigiert werden sollte.

7. **Erfolgs-Meldung**: Pfad zum Bundle, kurze Beschreibung der Änderung, Backup-Pfad.

## Auslöser 2 — Manueller Edit, Linting beim Build

Stefan editiert selbst in `_runtime/src/slides-*.jsx` (oder `app.jsx → TEMPLATES`). Beim Aufruf von `_runtime/build.cmd` wird ein Lint-Wrapper vorgeschaltet:

```
python "<SKILL_ROOT>/scripts/update_lint.py" \
  --bundle "<Bundle-Ordner>"
```

**Lint-Regeln:**

- **Tokens:** Keine fremden Hex-Farben in Slide-Files. Erlaubt sind nur CSS-Variablen aus `tokens.json` und im Designsystem definierte Klassen.
- **Layout-Pflichten:** Gold-Dot vorhanden auf Cover, SigLine auf Abschluss, Top-Anchoring der Headlines.
- **Slide-Klassen:** Nur Layout-Klassen aus dem Designsystem-Template.
- **Schriften:** Keine fremden Font-Imports (z.B. neue Google Fonts, neue `@font-face` außerhalb der Template-Defaults).
- **Branding-Bezüge:** Logo-Pfad zeigt auf `_runtime/assets/`, nicht auf externes URL.

**Verhalten bei Verstößen:**

- Verstöße werden als nummerierte Liste ausgegeben, mit Datei und Zeile.
- Build wird **nicht abgebrochen** (Stefan entscheidet selbst, ob er korrigiert).
- Bei Echo-internen Verstößen (Modus Echo, eigene Edits) wird strenger reagiert: Rollback aus dem Backup, Echo-Lauf gilt als gescheitert.

**Empfehlung:** Lint-Wrapper als Pre-Build-Hook in `_runtime/build.cmd` einbauen, damit das Linting **immer** läuft. Das Setup macht der Helper `update-praesentation-lint.py --install-hook --bundle <Pfad>` einmalig pro Bundle.

## Whitelist-Tags im Update-Modus

Die Whitelist-Tags aus Modus Echo (`echo: erweiterbar` / `ersetzbar` / `locked`, plus `echo-anchor`) gelten im Update-Modus als **weiche Hinweise**:

- `locked` wird respektiert auch in Update — Stefan muss bewusst überschreiben („überschreibe trotzdem auf Slide 5, das ist locked, ich will das so").
- `erweiterbar` und `ersetzbar` haben keine Sperrwirkung im Update — Stefan ist Boss.
- `echo-anchor` ignoriert der Update-Modus — der ist nur für Echo relevant.

Detail zur Whitelist: [whitelist-und-konfidenz.md](whitelist-und-konfidenz.md).

## Fertig-Kriterium Modus Update

- Edit ist im Bundle umgesetzt
- Build ist gelaufen, HTML startet wieder per Doppelklick
- Backup liegt im `_echo-backups/`-Ordner
- Stefan hat eine knappe Erfolgs-Meldung mit Pfad bekommen
- Linting-Verstöße (falls vorhanden) sind als Liste benannt
