---
name: phase-prerequisites-check
description: "Pre-Flight-Skill für TUV-Phase-Start (ADR 0028). Triggert vor Phase KONZEPT/SEQUENZ/STUNDE/ARTEFAKT-*/FINALISIERT um External-Dependencies (MCPs, CLI-Tools, Python-Packages) zu validieren. Bei PFLICHT-FAIL: Phase BLOCKIERT mit Install-Anweisungen. Bei EMPFOHLEN-WARN: DEGRADED-DATA-Modus aktiviert + WebFetch-Fallback-Hinweis. Override via _meta.mcp_override_reason."
domain_scope: universal
schema_pin: tuv_v1
phase: phase_1_mvp
mode: cowork-first
skill_typ: atomar
adr_refs: [ADR_0023, ADR_0025, ADR_0028, ADR_0032]
---

# Skill `phase-prerequisites-check` (Phase-1 MVP / Phase-3-Cowork, ADR 0028)

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

Deterministisch via Helper-Tool — Claude ruft direkt + reagiert auf Exit-Code.

**Eingabe:** TUV-Phase (KONZEPT/SEQUENZ/STUNDE/ARTEFAKT-AB/ARTEFAKT-PPT/FINALISIERT).

**Reasoning-Schritte:**
1. Helper-Tool: `.venv/bin/python core/tools/check_mcp_availability.py --phase <phase>` via Bash
2. Exit-Code parsen:
   - 0 PASS: Phase darf starten
   - 2 WARN: DEGRADED-DATA-Modus mit Fallback-Hinweis
   - 1 FAIL: Phase BLOCKIERT, Install-Anweisungen ausgeben
3. Override-Check: `tuv_meta._meta.mcp_override_reason` (audit-protokolliert)
4. Cowork-Mode: Claude reagiert auf Exit-Code + meldet Lehrkraft strukturiert

**Output:** `PASS|WARN|FAIL` + Install-Anweisungen + Override-Hinweis

**Anti-Pattern:**
- Phase-Start ohne Pre-Flight-Check
- Override ohne Begründung im Audit-Trail
- Stale Phase-Mapping in plugin.json

Aufgabe: Pre-Flight-Validation der External-Dependencies vor jedem Phase-Start.

## Eingaben

- `phase`: TUV-Phase-Identifier (`KONZEPT` | `SEQUENZ` | `STUNDE` | `ARTEFAKT-AB` | `ARTEFAKT-Karten` | `ARTEFAKT-Stationen` | `ARTEFAKT-PPT` | `ARTEFAKT-Tafelbild` | `FINALISIERT`)
- `tuv_path` (optional): Pfad zum TUV mit `_meta.mcp_override_reason`-Check
- `force` (optional): Skip-Pre-Flight-Override (NUR Power-User)

## Ablauf

### Schritt 1: TUV-Override-Check

Wenn TUV-Frontmatter `_meta.mcp_override_reason` enthält:
- Pre-Flight WARN-protokollieren in Q-GATE-LOG
- Phase startet ohne Pre-Flight-Block
- Output: `OVERRIDE_ACTIVE` mit Reason

### Schritt 2: Pre-Flight-Tool aufrufen

```bash
python3 ${CLAUDE_PLUGIN_ROOT}/core/tools/check_mcp_availability.py --phase <phase> --json
```

Exit-Code-Auswertung:

| Exit | Status | Phase-Aktion |
|------|--------|--------------|
| 0 | PASS | Phase darf starten, alle Capabilities verfügbar |
| 1 | FAIL (PFLICHT-MCP fehlt) | **STOP** + Install + Register-Commands an User |
| 2 | WARN (EMPFOHLEN-MCP fehlt) | Phase startet im DEGRADED-DATA-Modus |
| 3 | Tool-Error | STOP + Tool-Diagnose anzeigen |

### Schritt 3: Bei FAIL — User-Output mit konkreten Befehlen

```
[ ✗ ] Phase '<phase>' BLOCKIERT — PFLICHT-Dependency fehlt: <name>

   Install:  <install-cmd>
   Register: <register-cmd>

   Override (Notfall): TUV-Frontmatter um folgendes ergänzen:
       _meta:
         mcp_override_reason: "<Begründung für Audit-Trail>"

   Pre-Flight wiederholen:
       python3 ${CLAUDE_PLUGIN_ROOT}/core/tools/check_mcp_availability.py --phase <phase>
```

### Schritt 4: Bei WARN — DEGRADED-DATA-Modus aktivieren

- Subagent-Prompt-Erweiterung: `WICHTIG: <mcp> fehlt → DEGRADED-DATA-Modus. Nutze WebFetch-Fallback zu <fallback-url>. Markiere generierte Inhalte mit DEGRADED-DATA-Marker im _meta-Feld.`
- Q-GATE-LOG-Eintrag: `phase=<phase>, degraded=[<missing-mcps>], fallback=<fallback-source>`

### Schritt 5: PASS — Phase darf normal starten

Output: `PRE_FLIGHT_PASS phase=<phase> verfügbare_mcps=[...]`

## Phase-MCP-Pflicht-Matrix (Quick-Reference)

| TUV-Phase | PFLICHT | EMPFOHLEN | WebFetch-Fallback |
|---|---|---|---|
| KONZEPT | (keine) | — | (lokal) |
| SEQUENZ | (keine) | wikipedia | bpb, LeMO |
| STUNDE | (keine) | wikimedia-commons | DDB, Europeana |
| ARTEFAKT-AB | (keine) | wikipedia | bpb |
| ARTEFAKT-Karten | (keine) | wikimedia-commons | DDB |
| ARTEFAKT-Stationen | (keine) | wikipedia + wikimedia-commons | bpb + DDB |
| ARTEFAKT-PPT | wikimedia-commons | wikipedia | bpb |
| ARTEFAKT-Tafelbild | (keine) | — | — |
| FINALISIERT | (keine) | — | — |

(Siehe `core/.claude-plugin/plugin.json` `dependencies` für Live-Source.)

## Use-Case-Theme-Triggers

Für Theme-getriggerte Optional-MCPs:

- `LB5 / Recht / Jugendarbeitsschutz / Verbraucherrecht` → `deutsche-gesetze` empfohlen
- `EU / Europa / Politik` → `european-parliament` empfohlen

Skill liest TUV `lehrplan.lernbereich` + `thema` + matched gegen `useCaseMcpServers.<name>.trigger_themen`.

## Output-Format

```yaml
status: PASS | WARN | FAIL | OVERRIDE_ACTIVE
phase: <phase>
exit_code: 0|1|2|3
hard_fail: [...]      # leer bei PASS/WARN
warn: [...]           # leer bei PASS
info: [...]
override_reason: ...  # bei OVERRIDE_ACTIVE
q_gate_log_entry: ... # für Audit-Trail (RA5)
```

## Cross-Refs

- ADR 0023 Hook-Coverage (Pre-Flight-Skill ergänzt 4 MVP-Hooks)
- ADR 0025 MCP-Connector-Setup (durch ADR 0028 strukturell verankert)
- ADR 0028 External-Dependencies-Architektur (Quelle der Konvention)
- `core/tools/check_mcp_availability.py` (Validator-Implementation)
- `core/tools/setup-mcp.sh` (Setup-Wrapper bei FAIL)
- `core/.claude-plugin/plugin.json` `dependencies` (Live-Source der Phase-Matrix)
