# Whitelist und Konfidenz-Schwellen

Echo darf Slides nicht beliebig anfassen. Zwei Mechanismen kontrollieren, was erlaubt ist: **Whitelist-Tags pro Slide** und **Konfidenz-Schwellen pro Aktion**.

## Marker pro Slide

Pro Slide gibt es zwei unabhängige Marker.

### Marker 1 — `echo` (Whitelist-Tag, Pflicht-Default je Layout)

Vier Werte:

- **`erweiterbar`** (Default für Content-Slides): Echo darf Bullets/Beispiele ergänzen, Sätze schärfen. Keine kompletten Inhalts-Ersetzungen.
- **`ersetzbar`**: Echo darf Slide-Inhalte komplett austauschen, Layout bleibt gleich.
- **`locked`**: Echo rührt das Slide nicht an. Auch nicht bei expliziter Stefan-Anweisung im Transkript. `locked` ist immun.
- **`agenda-sync`** (Default für `agenda`-Layout, falls Bundle Echo-fähig sein soll): Echo darf **ausschließlich** die Agenda-Liste (`<ol>`/`<ul>`) automatisch synchronisieren, wenn durch eine Insertion ein neues Inhalts-Slide hinzugekommen ist. Keine Inhaltsänderungen am Slide-Text außerhalb der Agenda-Liste, keine Layout-Änderungen. Wenn dieser Tag fehlt, bleibt das Default `locked` für Agenda-Layouts — Echo ergänzt dann nur einen Hinweis im Diff-Report, dass die Agenda manuell nachgezogen werden sollte.

### Marker 2 — `echo-anchor` (optional, nur Insertion-Hinweis)

Markiert eine Position, an der Echo **bevorzugt** neue Slides einfügt.

- **`echo-anchor: vor`** — neues Slide kommt vor diesem
- **`echo-anchor: nach`** — neues Slide kommt nach diesem

Ohne jeden `echo-anchor` im Bundle darf Echo trotzdem inserten, muss die Position selbst herleiten — meist nach dem thematisch nächsten `erweiterbar`-Slide.

Beide Marker sind orthogonal: ein Slide kann gleichzeitig `echo: erweiterbar` und `echo-anchor: nach` haben.

## Layout-basierte Defaults

Wenn Stefan beim Erstellen keinen Tag setzt, gelten Defaults pro Slide-Layout:

| Layout-Klasse | Default-Tag |
|---|---|
| `cover` | `locked` |
| `agenda` | `locked` (oder optional `agenda-sync`, wenn Stefan automatische Sync wünscht) |
| `divider` | `locked` |
| `abschluss` / `closing` / `kontakt` | `locked` |
| `content` (Bullet, Zwei-Spalten, Kernzahl, Beispiel) | `erweiterbar` |
| `pricing`, `harte-zahlen` (falls eigene Klasse vorhanden) | `locked` |

Stefan kann pro Slide aktiv übersteuern.

## Wo Tags hinterlegt werden

**Primär** als Kommentar im JSX-Slide-File:

```jsx
// echo: erweiterbar
// echo-anchor: nach
// id: lieferanten-engpaesse

export default function Slide03() {
  …
}
```

**Sekundär** zentral in `_runtime/echo-config.json`, falls Stefan das lieber an einer Stelle hat:

```json
{
  "slides": {
    "lieferanten-engpaesse": { "tag": "erweiterbar", "anchor": "nach" },
    "pricing-overview": { "tag": "locked" }
  }
}
```

Beim Echo-Lauf werden beide Quellen gemerged: Config überschreibt Kommentar.

## Slide-IDs

Damit Tags und Config stabil bleiben, bekommt jedes Slide eine ID, die nicht von der Reihenfolge abhängt:

```jsx
// id: lieferanten-engpaesse
```

Wenn keine ID vorhanden, fällt Echo auf den Datei-Namen zurück (`slide-03.jsx` → ID `slide-03`). Bei Insertion eines neuen Slides wird die ID aus dem Thema generiert (slugifiziert), Datei-Name folgt.

## Konfidenz-Schwellen

Pro Aktion eine Mindestschwelle. Konfidenz wird vom Echo-Agenten geschätzt anhand: wie oft taucht das Thema im Transkript auf, wie klar ist der Bezug zum bestehenden Slide, wie eindeutig ist der Geschäfts-Kontext.

| Aktion | Schwelle | Begründung |
|---|---|---|
| **Insertion** (neues Slide) | **≥ 0.8** | Hohe Hürde — Stefan kann beim Kunden nur 1–2 neue Slides verarbeiten. Zwei Stück Maximum pro Lauf. |
| **In-Place-Erweiterung** (Bullet ergänzen, Beispiel austauschen) | ≥ 0.6 | Mittlere Hürde — Stefan sieht es beim Durchblättern, wenig Risiko. |
| **Ersetzung** (kompletter Slide-Inhalt) | ≥ 0.7 | Hohe Hürde, aber niedriger als Insertion — der Slot existiert ja schon. |

**Faustregel für Konfidenz-Schätzung:**

- **Hohe Konfidenz (≥ 0.8):** Transkript nennt das Thema mehrfach, hat klaren Bezug zu vorhandenem Slide-Inhalt, ist nicht privater Natur, und der Slot passt thematisch eng.
- **Mittlere Konfidenz (0.6–0.79):** Thema ist klar im Transkript, Bezug zum Slide ist gegeben, aber nicht eng. Erweitert sinnvoll, würde aber Stefan ohne Echo auch nicht verändert haben.
- **Niedrige Konfidenz (< 0.6):** Thema ist beiläufig, mehrdeutig, oder berührt mehrere Slides ohne klaren Anker. Echo verzichtet.

## Sonderfall: Explizite Stefan-Anweisungen

Wenn Stefan im Transkript (Form 3) eine direkte Anweisung gibt („bitte ergänze in Slide 3 …"), gilt:

- Konfidenz-Schwellen werden ignoriert. Stefan hat entschieden.
- `locked` wird **trotzdem** respektiert. Sicherheits-Anker. Falls Stefan ein `locked`-Slide ändern will, muss er das im Transkript explizit benennen mit dem Wort „trotzdem" oder „override" (z.B. „override Slide 5, ersetz die Headline").
- `echo-anchor` wird respektiert, falls die Anweisung eine Insertion ist und keine konkrete Position nennt.

## Wenn keine Edits möglich

Wenn nach Themen-Filter und Schwellen-Bewertung **kein Edit** durchgeht:

- **Gar nichts ändern.** Bundle bleibt unverändert.
- Erfolgs-Meldung: „Echo-Lauf abgeschlossen, keine Edits durchgeführt — Themen aus Transkript haben Schwelle nicht erreicht oder waren off-topic."
- Liste der gefilterten Themen im Output, damit Stefan kontrollieren kann, ob Echo zu streng war.

Das ist explizit erwünschtes Verhalten: lieber nichts machen als unsicher etwas einfügen.
