---
name: license-check
description: "Prüft und aktualisiert THIRD_PARTY_LICENSES.txt bei Dependency-Änderungen. Verwende diesen Skill IMMER zusammen mit dem version-bump Skill wenn der Benutzer einen Git-Commit erstellen möchte, 'commit' erwähnt, oder nach /commit fragt. Der Skill erkennt automatisch ob sich Dependencies in pyproject.toml geändert haben und aktualisiert die Lizenzdatei entsprechend."
---

# License Check Skill

Dieser Skill stellt sicher, dass die Datei `THIRD_PARTY_LICENSES.txt` immer synchron mit den tatsächlichen Dependencies in `pyproject.toml` bleibt. Er wird automatisch als Teil des Commit-Workflows ausgeführt, parallel zum version-bump Skill.

## Warum das wichtig ist

DocuMentor listet alle verwendeten Drittanbieter-Bibliotheken mit Lizenzinformationen in `THIRD_PARTY_LICENSES.txt` auf. Wenn Dependencies hinzugefügt oder entfernt werden, muss diese Datei aktualisiert werden — sonst sind die Lizenzangaben unvollständig oder veraltet, was rechtliche Konsequenzen haben kann.

## Ablauf

### Schritt 1: Prüfskript ausführen

Führe das gebündelte Prüfskript aus:

```bash
uv run python .claude/skills/license-check/scripts/check_licenses.py
```

Das Skript gibt JSON aus mit:
- `missing`: Dependencies in pyproject.toml die in THIRD_PARTY_LICENSES.txt fehlen
- `removed`: Einträge in THIRD_PARTY_LICENSES.txt die nicht mehr in pyproject.toml stehen
- `info`: Automatisch ermittelte Lizenz-Metadaten für fehlende Pakete

### Schritt 2: Ergebnis auswerten

- Wenn `missing` und `removed` beide leer sind: **Keine Aktion nötig.** Fahre direkt mit dem Commit fort.
- Wenn es Änderungen gibt: Zeige dem Benutzer eine Zusammenfassung und frage ob die Lizenzdatei aktualisiert werden soll.

Beispiel-Zusammenfassung:
```
Lizenzdatei-Prüfung:
  + lxml (BSD License) — neu hinzuzufügen
  - some-old-lib — aus Lizenzdatei zu entfernen
```

### Schritt 3: THIRD_PARTY_LICENSES.txt aktualisieren

#### Neue Dependencies hinzufügen

Füge neue Einträge in die passende Sektion ein (Python-Abhängigkeiten oder Eingebettete Bibliotheken). Verwende das bestehende Format:

```
N. PaketName
   Version: >=X.Y.Z
   Lizenz: Lizenzname
   Webseite: https://...
   GitHub: https://github.com/...
   Beschreibung: Kurzbeschreibung auf Englisch
   Copyright: Copyright (c) Jahr Autor
```

Dabei gilt:
- Die Nummerierung fortlaufend innerhalb der Sektion
- Dev-Dependencies bekommen den Suffix `(Development)` im Namen
- Transitive Dependencies bekommen den Suffix `(via HauptPaket)` im Namen
- Die Lizenzinfos aus dem `info`-Feld des Skripts verwenden
- Wenn das Skript keine Info liefert (Paket nicht installiert), recherchiere via Web

#### Sortierung

Die Reihenfolge der Einträge folgt der logischen Gruppierung:
1. Haupt-Dependencies (Runtime)
2. Transitive Dependencies direkt nach ihrem Eltern-Paket (z.B. ConnectorX nach Polars)
3. Dev-Dependencies am Ende der Python-Sektion

#### Entfernte Dependencies löschen

Entferne den kompletten Block (Name, Version, Lizenz, etc.) des entfernten Pakets und nummeriere die verbleibenden Einträge neu.

#### Neue Lizenztypen

Wenn eine neue Dependency eine Lizenz verwendet, die noch nicht im Abschnitt "Lizenztexte" am Ende der Datei aufgeführt ist, füge den Lizenztext dort hinzu. Gängige Lizenztexte (MIT, Apache 2.0, BSD-3-Clause) sind bereits vorhanden.

### Schritt 4: KNOWN_ALIASES aktualisieren

Wenn neue Dependencies hinzugefügt werden, prüfe ob das `KNOWN_ALIASES`-Dict in `.claude/skills/license-check/scripts/check_licenses.py` aktualisiert werden muss:

- Wenn der Paketname in pyproject.toml anders ist als in THIRD_PARTY_LICENSES.txt (z.B. durch Suffixe wie "(Development)" oder "(via X)")
- Wenn eine Dependency transitive Dependencies hat, die separat gelistet werden

### Schritt 5: Commit fortsetzen

Füge die geänderte `THIRD_PARTY_LICENSES.txt` (und ggf. `check_licenses.py`) zum Staging-Bereich hinzu und fahre mit dem normalen Commit-Workflow fort.

## Wichtige Hinweise

- Das Skript prüft nur **Python-Abhängigkeiten** und **eingebettete Bibliotheken** — externe Tools (Saxon, FOP, diff-pdf) werden ignoriert
- Die Lizenzdatei enthält auch den Abschnitt "Stand: Monat Jahr" am Ende — diesen bei Änderungen auf den aktuellen Monat aktualisieren
- `uv.lock` nicht manuell ändern — wird durch `uv sync` automatisch aktualisiert
