---
name: text_niveau_check
description: "Skill-Modul für 5-Achsen-Heuristik-Check (read-only, kein Text-Edit). Eingabe: Text + Ziel-Niveau; Ausgabe: Score je Achse + Pass/Fail-Ampel. Aufruf aus Hook post_render_niveau_check oder Audit-Subagent. NICHT inline in Hook (ADR 0023): Skill-Modul-Trennung erlaubt eigene Tests + Re-Use."
domain_scope: universal
schema_pin: tuv_v1
phase: phase_1_mvp
mode: cowork-first
skill_typ: atomar
adr_refs: [ADR_0023, ADR_0026, ADR_0032]
---

# Skill `text_niveau_check` (Phase-1 MVP / Phase-3-Cowork)

## Reasoning-Anleitung (Cowork-Mode, ADR 0032 Phase-3)

Skill ist read-only-Validator (kein Text-Edit). Im Cowork-Mode ruft Claude die Helper-Logik direkt auf.

**Eingabe:** Text + Ziel-Niveau.

**Reasoning-Schritte:**
1. Lade Niveau-Limits aus `core/config/niveaustufen.json[niveau]`
2. Pro Achse Score berechnen:
   - Achse 1 Wortlänge: durchschn. Wortlänge in Zeichen
   - Achse 2 Satzlänge: durchschn. Wortzahl pro Satz
   - Achse 3 Fachbegriff-Dichte: % Wörter ≥ 8 Zeichen
   - Achse 4 Subordinations-Tiefe: max. Schachtel-Level
   - Achse 5 Operator-Klarheit: durchschn. Operatoren pro Satz
3. Pass/Fail-Ampel pro Achse (grün/gelb/rot)

**Output:** `{"achsen": [{"name": ..., "ist": ..., "soll": ..., "ampel": "..."}], "gesamt_status": "PASS|WARN|FAIL"}`

**Anti-Pattern:**
- Score ohne Niveau-Anker (alle Niveaus gleich messen)
- Pass-Ampel bei tatsächlichem Drift (Score-Drift > 20% → FAIL nicht WARN)
- Inline in Hook statt Skill-Modul (ADR 0023-Verstoß)

Aufgabe: Read-only Check der 5-Achsen-Niveau-Heuristik. Nutzt selbe Achsen-Logik wie `text.niveau_anpassen`, aber editiert nicht.

## Eingaben
- `text` (Pflicht): zu prüfender Text
- `ziel_niveau`: `n1` | `n2` | `n3`

## Ablauf
1. Tokenize (Stdlib: re-split auf Whitespace + Satzzeichen)
2. Score je Achse: wortlaenge_avg, satzlaenge_avg, fachbegriff_dichte, subordinations_tiefe_max, operator_afb_match
3. Vergleich gegen Ziel-Niveau-Schwellwert
4. Ampel: GREEN (alle Achsen ≤ Ziel) / YELLOW (1–2 Abweichungen) / RED (≥3 Abweichungen)

## Output
```yaml
ampel: GREEN | YELLOW | RED
score_pro_achse:
  wortlaenge: {ist: 7.1, ziel: ≤8, status: ok}
  satzlaenge: {ist: 11.5, ziel: ≤14, status: ok}
  fachbegriff_dichte: {ist: 0.10, ziel: ≤0.12, status: ok}
  subordinations_tiefe: {ist: 1, ziel: ≤1, status: ok}
  operator_afb_match: {ist: I+II, ziel: I+II, status: ok}
abweichungen: []
```

## Verwendung als Skill-Modul (statt Hook-inline, ADR 0023)
- Hook `post_render_niveau_check` ruft diesen Skill auf, statt 5-Achsen-Code zu inlineen.
- Vorteile: eigener Test, Re-Use durch Audit-Subagent (RA2-Worker), Skill-Pin bleibt stabil bei Hook-Refactor.

## Cross-Refs
- Skill `text.niveau_anpassen` (Edit-Variante)
- Hook `post_render_niveau_check` (Auto-Trigger)
- ADR 0023 Hook-Coverage-MVP
- ADR 0024 RA2-Audit-Dimension (didaktische Niveau-Treue)
