# Gap-Cluster-Bericht: Placeholder-Audit

**Audit-Datum:** 29. März 2026
**Basis:** 111 Platzhalter, 4-Agent-Analyse
**Normative Referenz:** PLACEHOLDER_METADATA_REQUIREMENTS_V2_NORMATIVE.md v1.0.0

---

## Übersicht

Dieser Bericht gruppiert die identifizierten Gaps nach **systemischen Clustern**, um gezielte Remediation-Strategien zu ermöglichen.

**Gesamtzahl Gaps:** 481 einzelne Gap-Instanzen über alle 111 Platzhalter

**Gap-Verteilung:**
```
Non-Compliant (81):      324 Gaps (durchschnittlich 4.0 pro Placeholder)
Partially Compliant (22): 88 Gaps (durchschnittlich 4.0 pro Placeholder)
Compliant (8):            0 Gaps
```

---

## GAP-CLUSTER

### CLUSTER 1: Missing Semantic Contract

**Anzahl betroffene Platzhalter:** 49 (44%)
**Severity:** 🔴 CRITICAL
**Norm-Verstoß:** §7.1 Pflichtfelder (description, semantic_contract)

**Sub-Kategorien:**

#### 1.1 No Description Available (49)
Alle 49 haben `description: "No description available"`

**Betroffene Kategorien:**
- **Unknown (49):** Alle 49 Non-Compliant sind in "Unknown"-Kategorie
  - Ability Balance (5): coordination, endurance, mental, mobility, strength
  - Correlations (5): energy_weight_lag, load_hrv, load_rhr, protein_lbm, sleep_recovery
  - Body Deltas (5): arm_28d_delta, chest_28d_delta, hip_28d_delta, thigh_28d_delta, waist_28d_delta (doppelt)
  - Goals (16): active_goals_json/md, focus_areas, top_goal_*, top_3_goals_*, goal_weight, goal_bf_pct
  - Nutrition (6): energy_deficit_surplus, intake_volatility, nutrition_days, protein_days_in_target, protein_ziel_*
  - Training (3): activity_detail, monotony_score, strain_score
  - Summaries (3): caliper_summary, circ_summary, weight_90d_slope
  - Meta (2): zeitraum_90d, recent_load_balance_3d
  - Plateau (1): plateau_detected
  - Top Drivers (1): top_drivers

**Remediation:**
- **Bulk-Update möglich:** Semantic-Contract-Agent-Report hat Target-Descriptions für alle 49
- **Aufwand:** 4-6 Stunden (Copy-Paste aus Agent-Report)
- **Priority:** P0 (blocking für Production)

---

#### 1.2 Weak Semantic Contract (25)
Haben Beschreibung, aber schwachen/unvollständigen Semantic Contract

**Beispiele:**
- `bmi`: Description OK, aber Semantic Contract = Description (sollte Formel enthalten)
- `rest_days_count`: Description OK, aber Aggregationslogik fehlt
- `vitals_vo2_max`: Description OK, aber Quelle/Berechnungsmethode fehlt

**Remediation:**
- **Individuelle Überarbeitung:** Semantic Contract mit Formeln/Quellen/Aggregationen anreichern
- **Aufwand:** 3-4 Stunden
- **Priority:** P1

---

### CLUSTER 2: Missing Data Layer Module

**Anzahl betroffene Platzhalter:** 100 (90%)
**Severity:** 🔴 CRITICAL
**Norm-Verstoß:** §7 Source vollständig (data_layer_module erforderlich)

**Analyse:**
- Nur 11 Platzhalter haben `data_layer_module` gesetzt
- 100 haben `data_layer_module: null`

**Root Cause:**
- Export-System extrahiert `data_layer_module` nur, wenn explizit in Code-Kommentaren
- Resolver nutzen oft Helper-Funktionen (`_safe_int`, `_safe_float`) statt direkter Data-Layer-Calls
  - `_safe_int` ruft intern Data-Layer auf, aber Mapping ist nicht dokumentiert

**Code-Evidence-Agent Findings:**
- **81 nutzen Helper** (`_safe_int`, `_safe_float`, `_safe_str`, `_safe_json`)
  - Diese HABEN Data-Layer-Module, sind aber nicht dokumentiert
  - Beispiel: `_safe_int('nutrition_score', pid)` → ruft `data_layer.nutrition_metrics.calculate_nutrition_score()`
- **19 haben direkte Data-Layer-Calls** (z.B. nutrition_avg, weight_aktuell)
- **0 echte Fälle ohne Data-Layer** (alle 111 haben technische Herkunft)

**Remediation:**
- **Code-Trace von Resolvern:** Für jede `_safe_*`-Funktion die gerufene Data-Layer-Funktion identifizieren
- **Bulk-Update:** Mapping aus Code-Evidence-Agent-Report übernehmen
- **Aufwand:** 6-8 Stunden
- **Priority:** P1

---

### CLUSTER 3: Missing Source Tables

**Anzahl betroffene Platzhalter:** 90 (81%)
**Severity:** 🔴 CRITICAL
**Norm-Verstoß:** §7 Source vollständig (source_tables erforderlich)

**Analyse:**
- Nur 21 Platzhalter haben `source_tables` gesetzt
- 90 haben `source_tables: []`

**Root Cause:**
- Identisch zu CLUSTER 2: Export-System extrahiert nicht aus Code
- Source-Tables sind in Data-Layer-SQL-Queries definiert, aber nicht in Resolver-Metadaten

**Code-Evidence-Agent Findings:**
- **Alle 111** haben identifizierbare Source-Tables im Code
- **9 Core-Tables:**
  1. `profiles` (4 Platzhalter)
  2. `weight_log` (11)
  3. `nutrition_log` (12)
  4. `activity_log` (14)
  5. `sleep_log` (6)
  6. `vitals_baseline` (8)
  7. `circumference_log` (5)
  8. `caliper_log` (5)
  9. `goals`, `focus_areas`, `rest_days` (11)

**Remediation:**
- **Automatische Extraktion:** SQL-Query-Parsing in Data-Layer-Modulen
- **Bulk-Update:** Mapping aus Code-Evidence-Agent-Report übernehmen
- **Aufwand:** 6-8 Stunden
- **Priority:** P1

---

### CLUSTER 4: Unknown Time Window

**Anzahl betroffene Platzhalter:** 74 (67%)
**Severity:** 🔴 CRITICAL
**Norm-Verstoß:** §3.4 "Zeitfenster explizit"

**Analyse:**
- 74 haben `time_window: unknown`
- 37 haben definiertes Zeitfenster (latest, 7d, 28d, 30d, 90d, mixed)

**Sub-Kategorien:**

#### 4.1 Name enthält Zeitfenster, aber Metadaten unknown (15)
**KRITISCHER MISMATCH:**

| Placeholder | Name-Hint | Code | Metadaten | Fix |
|-------------|-----------|------|-----------|-----|
| `zeitraum_7d` | 7d | Hardcoded "letzte 7 Tage" | unknown | → 7d |
| `zeitraum_30d` | 30d | Hardcoded "letzte 30 Tage" | unknown | → 30d |
| `zeitraum_90d` | 90d | Hardcoded "letzte 90 Tage" | unknown | → 90d |
| `sleep_avg_duration_7d` | 7d | 7 days | unknown | → 7d |
| `sleep_quality_7d` | 7d | 7 days | unknown | → 7d |
| `training_frequency_7d` | 7d | 7 days (inferred) | unknown | → 7d |
| `proxy_internal_load_7d` | 7d | 7 days | unknown | → 7d |
| `energy_balance_7d` | 7d | 7 days | unknown | → 7d |
| `protein_adequacy_28d` | 28d | 28 days | unknown | → 28d |
| `weight_28d_slope` | 28d | 28 days | 28d | ✓ OK |
| `weight_90d_slope` | 90d | 90 days | 90d | ✓ OK |
| `fm_28d_change` | 28d | 28 days | 28d | ✓ OK |
| `lbm_28d_change` | 28d | 28 days | 28d | ✓ OK |
| `vo2max_trend_28d` | 28d | 28 days | 28d | ✓ OK |
| ... | | | | |

**Remediation:**
- **Automatische Regelextraktion:** Name-Pattern (`*_7d`, `*_28d`, etc.) → time_window
- **Aufwand:** 1 Stunde (automatisch)
- **Priority:** P0

---

#### 4.2 Code enthält Default-Zeitfenster (20)
Code nutzt `days=X` Parameter, aber Metadaten unknown

**Beispiele:**
- `activity_summary`: Code `days=14` (default), Metadaten unknown
- `sleep_avg_duration`: Code `days=7`, Metadaten unknown
- `rest_days_count`: Code `days=30`, Metadaten unknown

**Remediation:**
- **Code-Parameter-Extraktion:** Default-Werte aus Funktionssignaturen lesen
- **Aufwand:** 2-3 Stunden (semi-automatisch)
- **Priority:** P0

---

#### 4.3 Fach-Entscheidung erforderlich (39)
Zeitfenster nicht aus Name/Code ableitbar, fachliche Klassifizierung nötig

**Kategorien:**

**A. Scores (6):**
- `activity_score`, `nutrition_score`, `recovery_score`, `body_progress_score`, `goal_progress_score`, `data_quality_score`
- **Vorschlag:** `custom` oder `mixed` (kombinieren verschiedene Zeitfenster)

**B. Ability Balance (5):**
- `ability_balance_coordination`, `ability_balance_endurance`, `ability_balance_mental`, `ability_balance_mobility`, `ability_balance_strength`
- **Vorschlag:** `28d` (Rolling-Window-Balance über 28 Tage)

**C. Correlations (5):**
- `correlation_energy_weight_lag`, `correlation_load_hrv`, `correlation_load_rhr`, `correlation_protein_lbm`, `correlation_sleep_recovery`
- **Vorschlag:** `28d` (Min-Daten für reliable Korrelationen)

**D. Goals & Focus (16):**
- `active_goals_json`, `focus_areas_weighted_json`, `top_goal_*`, `top_3_goals_*`, `focus_cat_*`
- **Vorschlag:** `latest` (Snapshot) oder `custom` (je nach Progress-Berechnung)

**E. Snapshots (7):**
- `bmi`, `goal_weight`, `goal_bf_pct`, `waist_hip_ratio`, `recomposition_quadrant`, `plateau_detected`, `top_drivers`
- **Vorschlag:** `latest` (Momentaufnahme) oder `custom` (bei berechneten Werten)

**Remediation:**
- **Fach-Review mit Product:** Kategorisierungs-Entscheidungen abstimmen
- **Aufwand:** 4-6 Stunden (Meeting + Dokumentation)
- **Priority:** P0

---

### CLUSTER 5: Missing Confidence Logic

**Anzahl betroffene Platzhalter:** 103 (93%)
**Severity:** 🟡 HIGH
**Norm-Verstoß:** §5 "Qualitäts-/Confidence-Logik"

**Analyse:**
- Nur 8 Platzhalter haben `confidence_logic` implementiert
- 103 haben `confidence_logic: null`

**Implementierte Confidence (8):**
1. `protein_avg`, `kcal_avg`, `fat_avg`, `carb_avg` (nutrition_metrics)
2. `weight_aktuell`, `weight_trend` (body_metrics)
3. `caliper_summary`, `circ_summary` (body_metrics)

**Pattern:**
```python
confidence = calculate_confidence(data_points, time_window_days, metric_type)

Thresholds:
- high:         >= 60% data coverage (e.g., >= 18/30 days)
- medium:       >= 40% data coverage (e.g., >= 12/30 days)
- low:          >= 26% data coverage (e.g., >= 8/30 days)
- insufficient: < 26% data coverage
```

**Fehlende Confidence-Logik besonders kritisch für:**

#### 5.1 Trend-Platzhalter (11)
**Warum kritisch:** Slopes/Trends mit nur 2-3 Datenpunkten sind unreliabel

| Placeholder | Time-Window | Min-Data empfohlen | Confidence-Logik |
|-------------|-------------|-------|------------------|
| `weight_28d_slope` | 28d | 18+ | ❌ Fehlt |
| `weight_90d_slope` | 90d | 60+ | ❌ Fehlt |
| `weight_7d_median` | 7d | 5+ | ❌ Fehlt |
| `fm_28d_change` | 28d | 2 (min), 18+ (ideal) | ❌ Fehlt |
| `lbm_28d_change` | 28d | 2 (min), 18+ (ideal) | ❌ Fehlt |
| `waist_28d_delta` | 28d | 2 (min) | ❌ Fehlt |
| `hip_28d_delta` | 28d | 2 (min) | ❌ Fehlt |
| `chest_28d_delta` | 28d | 2 (min) | ❌ Fehlt |
| `arm_28d_delta` | 28d | 2 (min) | ❌ Fehlt |
| `thigh_28d_delta` | 28d | 2 (min) | ❌ Fehlt |
| `vo2max_trend_28d` | 28d | 4+ | ❌ Fehlt |

**Remediation:**
- **Pattern-Anwendung:** `calculate_confidence()` in alle Delta/Slope-Funktionen einbauen
- **Aufwand:** 12-16 Stunden
- **Priority:** P1

---

#### 5.2 Score-Platzhalter (6)
**Warum kritisch:** Composite Scores sollten Confidence der Subkomponenten reflektieren

| Placeholder | Sub-Components | Confidence-Logik |
|-------------|----------------|------------------|
| `activity_score` | training_volume, frequency, quality | ❌ Fehlt |
| `nutrition_score` | energy_balance, protein_adequacy, macro_consistency | ❌ Fehlt |
| `recovery_score` | sleep_duration, sleep_quality, hrv, rhr | ❌ Fehlt |
| `body_progress_score` | weight_trend, bf_change, lbm_change | ❌ Fehlt |
| `goal_progress_score` | weighted goals progress | ❌ Fehlt |
| `data_quality_score` | data availability per domain | ❌ Fehlt |

**Remediation:**
- **Composite-Confidence:** Min(subcomponent_confidences)
- **Aufwand:** 8-10 Stunden
- **Priority:** P1

---

#### 5.3 Korrelations-Platzhalter (5)
**Warum kritisch:** Korrelationen mit <14 Paaren sind statistisch unreliabel

| Placeholder | Min-Pairs empfohlen | Confidence-Logik |
|-------------|---------------------|------------------|
| `correlation_energy_weight_lag` | 21+ | ❌ Fehlt |
| `correlation_load_hrv` | 21+ | ❌ Fehlt |
| `correlation_load_rhr` | 21+ | ❌ Fehlt |
| `correlation_protein_lbm` | 28+ (mit Training moderiert) | ❌ Fehlt |
| `correlation_sleep_recovery` | 21+ | ❌ Fehlt |

**Remediation:**
- **Correlation-Confidence:** Based on n_pairs (high >= 28, medium >= 21, low >= 14)
- **Aufwand:** 4-6 Stunden
- **Priority:** P1

---

### CLUSTER 6: Unstrukturierte Missing-Value-Policy

**Anzahl betroffene Platzhalter:** 110 (99%)
**Severity:** 🟡 MEDIUM
**Norm-Verstoß:** §3.5 "Fehlwerte explizit"

**Analyse:**
- 110 haben nur `missing_value_policy.legacy_display: "nicht verfügbar"`
- Nur 1 hat strukturierte Policy (weight_aktuell mit available=false, reason='no_data')

**Problem:**
- Legacy-String ist nicht maschinenlesbar
- Keine Unterscheidung zwischen Fehlertypen:
  - `no_data`: Keine Daten in Datenbank
  - `insufficient_data`: Zu wenig Daten für Berechnung
  - `resolver_error`: Technischer Fehler
  - `calculation_error`: Mathematischer Fehler (z.B. Division by zero)

**Norm-konformes Format (§3.5):**
```json
{
  "available": false,
  "value_raw": null,
  "missing_reason": "insufficient_data",
  "missing_value_policy": {
    "legacy_display": "nicht verfügbar",
    "structured_null": true,
    "reason_codes": ["no_data", "insufficient_data", "resolver_error"]
  }
}
```

**Remediation:**
- **Dual-Mode-Ansatz:**
  - Legacy-String beibehalten (Backward-Compatibility)
  - Zusätzlich strukturierte Felder (`available`, `missing_reason`, `value_raw`)
- **Aufwand:** 8-10 Stunden (Pattern-Anwendung auf alle Resolver)
- **Priority:** P1

---

### CLUSTER 7: Metadata Completeness Score 0

**Anzahl betroffene Platzhalter:** 111 (100%)
**Severity:** 🟡 MEDIUM
**Norm-Verstoß:** Kein direkter Verstoß, aber Indikator für fehlende Pflichtfelder

**Analyse:**
- Alle 111 haben `metadata_completeness_score: 0`
- Score-Berechnung (vermutlich):
  ```
  score = (filled_fields / total_required_fields) * 100
  ```
- Da Score 0 → vermutlich wurden Pflichtfelder nicht als "gefüllt" erkannt

**Pflichtfelder (aus Norm §7.1):**
1. `key` ✅ (alle gefüllt)
2. `placeholder` ✅ (alle gefüllt)
3. `category` ❌ (49 Unknown)
4. `type` ✅ (alle gefüllt)
5. `description` ❌ (49 "No description")
6. `semantic_contract` ❌ (49 "No description")
7. `unit` ✅ (alle gefüllt)
8. `time_window` ❌ (74 unknown)
9. `output_type` ✅ (alle gefüllt)
10. `value_display` ❌ (111 null)
11. `available` ✅ (alle true)
12. `missing_value_policy` ✅ (alle gefüllt, aber schwach)
13. `source` ❌ (100 data_layer_module null, 90 source_tables [])
14. `version` ✅ (alle 1.0.0)
15. `deprecated` ✅ (alle false)

**Score 0 Root Cause:**
- Vermutlich zählen `null`/`unknown`/`[]`/`"No description"` als "nicht gefüllt"
- → 7 von 15 Pflichtfeldern nicht korrekt gefüllt = 0% Score

**Remediation:**
- **Nach P0+P1 Fixes:** Score sollte automatisch auf 40-60% steigen
- **Zusätzlich:** value_display für alle Platzhalter füllen (aus Beispieldaten)
- **Aufwand:** Inkludiert in anderen Clustern
- **Priority:** P2 (Indikator-Fix, nicht eigenständig)

---

### CLUSTER 8: Schema Status "draft"

**Anzahl betroffene Platzhalter:** 111 (100%)
**Severity:** 🟡 MEDIUM
**Norm-Verstoß:** §13 Akzeptanzkriterien (production-ready Platzhalter fehlen)

**Analyse:**
- Alle 111 haben `schema_status: draft`
- Keine Platzhalter im Status `production`, `beta`, oder `stable`

**Erlaubte Werte (vermutlich):**
- `draft`: Work in Progress
- `beta`: In Testing
- `stable`: Production-Ready, aber noch nicht finalisiert
- `production`: Voll produktionsreif, Breaking Changes verboten

**Kriterien für `production` (vorgeschlagen):**
1. `metadata_completeness_score >= 80`
2. `used_by.prompts.length >= 1 OR used_by.pipelines.length >= 1`
3. `time_window != 'unknown'`
4. `category != 'Unknown'`
5. `description != 'No description available'`
6. `confidence_logic != null OR type == 'atomic' with time_window == 'latest'`
7. `known_issues.length == 0`

**Kandidaten für `production` nach P0+P1 Fixes:**
- Nutrition Averages (4): protein_avg, kcal_avg, fat_avg, carb_avg
- Body Metrics (2): weight_aktuell, weight_trend
- Profil (4): name, age, height, geschlecht
- Summaries (2): caliper_summary, circ_summary
- **Total: 12-15 Kandidaten**

**Remediation:**
- **Automatische Bewertung:** Script zur Berechnung von Production-Eligibility
- **Manuelle Review:** Product/Tech Lead bestätigt Production-Status
- **Aufwand:** 4-6 Stunden
- **Priority:** P2

---

### CLUSTER 9: Ungenutzte Platzhalter (Orphans)

**Anzahl betroffene Platzhalter:** 67 (60%)
**Severity:** 🟢 LOW (aber Technical Debt)
**Norm-Verstoß:** Kein direkter Verstoß, aber Governance-Issue

**Analyse:**
- 67 Platzhalter haben `used_by.prompts: []`, `used_by.pipelines: []`, `used_by.charts: []`
- 0 Verwendungen = potentielle Deprecation-Kandidaten

**Kategorisierung:**

#### 9.1 Geplante Features (Phase 1b/1c) - behalten (30)
- Correlations (5): energy_weight_lag, load_hrv, load_rhr, protein_lbm, sleep_recovery
- Goals Details (11): active_goals_json/md, focus_areas, top_goals
- Ability Balance (5): coordination, endurance, mental, mobility, strength
- Scores (6): activity_score, nutrition_score, recovery_score, body_progress_score, goal_progress_score, data_quality_score
- Plateau (1): plateau_detected
- Top Drivers (1): top_drivers
- Sleep Debt (1): sleep_debt_hours

#### 9.2 Redundant/Obsolet - Deprecation prüfen (15)
- Body Deltas (4): arm_28d_delta, chest_28d_delta, hip_28d_delta, thigh_28d_delta (redundant zu waist_28d_delta Pattern)
- Training Load (3): monotony_score, strain_score, recent_load_balance_3d (noch nicht genutzt)
- Meta (3): zeitraum_90d, datum_heute (System-Platzhalter, wenig Wert)
- Vitals Trends (2): hrv_vs_baseline_pct, rhr_vs_baseline_pct (noch nicht genutzt)
- Sleep Regularity (1): sleep_regularity_proxy (experimentell)
- BMI (1): bmi (berechenbar, redundant)
- Waist-Hip-Ratio (1): waist_hip_ratio (berechenbar, redundant)

#### 9.3 Unklar - Product-Review (22)
- Rest: Weitere Ability Balance, Focus Cat Weights, etc.

**Remediation:**
- **Product-Review:** Welche für Phase 1b/1c/2 geplant? Welche streichen?
- **Deprecation-Strategie:** `deprecated: true`, `replacement: "new_placeholder"`, Sunset-Datum
- **Aufwand:** 4-6 Stunden (Meeting + Dokumentation)
- **Priority:** P2

---

### CLUSTER 10: Export-Inkonsistenzen

**Anzahl betroffene Platzhalter:** 5 (Meta-Gap)
**Severity:** 🟢 INFO
**Norm-Verstoß:** Kein direkter Verstoß, aber Governance-Issue

**Problem:**
- Export Spec sagt: "116 Platzhalter"
- Extended Catalog + Gap Report: "111 Platzhalter"
- Differenz: 5 Platzhalter

**Analyse:**
- Die 5 zusätzlichen sind vermutlich **Metafelder** im Export:
  1. `schema_version`
  2. `generated_at`
  3. `normative_standard`
  4. `total_placeholders`
  5. `metadata.summary` (oder ähnlich)

**Remediation:**
- **Dokumentation:** Export-Spec klarstellen (111 User-Placeholders + 5 Metafelder)
- **Aufwand:** 30 Minuten
- **Priority:** P3

---

### CLUSTER 11: Code-Dokumentations-Konflikte

**Anzahl betroffene Platzhalter:** 3 (kritische Konflikte)
**Severity:** 🔴 CRITICAL
**Norm-Verstoß:** §2 "Vorrang" (Code > Docs bei Konflikt)

**Konflikte:**

#### 11.1 weight_trend
- **Description:** "Gewichtstrend (7d/30d)"
- **Code:** `get_weight_trend_data(profile_id, days=28)`
- **Metadaten:** `time_window: unknown`
- **Used-By:** 10 Prompts/Pipelines
- **Impact:** 🔴 HIGH (Prompts gehen von 7d/30d aus, erhalten aber 28d)

**Fix:**
```
description: "Gewichtstrend 28d (lineare Regression)"
semantic_contract: "Lineare Regression über 28 Tage, Richtung + Delta"
time_window: "28d"
```

---

#### 11.2 activity_summary
- **Description:** "Aktivitäts-Zusammenfassung (7d)"
- **Code:** `get_activity_summary_data(profile_id, days=14)`
- **Metadaten:** `time_window: unknown`
- **Used-By:** 2 Prompts
- **Impact:** 🟡 MEDIUM (weniger Verwendungen, aber Inkonsistenz)

**Fix:**
```
description: "Aktivitäts-Zusammenfassung 14d"
semantic_contract: "Aggregierte Aktivitäts-Metriken über 14 Tage"
time_window: "14d"
```

---

#### 11.3 activity_detail
- **Description:** "Keine explizite Zeitangabe"
- **Code:** `get_activity_detail_data(profile_id, days=14, limit=20)`
- **Metadaten:** `time_window: unknown`
- **Used-By:** 4 Prompts
- **Impact:** 🟡 MEDIUM

**Fix:**
```
description: "Detaillierte Aktivitäts-Liste 14d (max 20 Einträge)"
semantic_contract: "Sortierte Liste letzter 20 Aktivitäten aus 14-Tage-Fenster"
time_window: "14d"
```

---

**Remediation:**
- **Sofortige Korrektur:** Description, semantic_contract, time_window auf Code-Wahrheit setzen
- **Aufwand:** 1 Stunde
- **Priority:** P0

---

## GAP-CLUSTER ZUSAMMENFASSUNG

| Cluster | Platzhalter | Severity | Priority | Aufwand | Abhängigkeiten |
|---------|-------------|----------|----------|---------|----------------|
| **1. Semantic Contract** | 49 | 🔴 CRITICAL | P0 | 4-6h | Keine |
| **2. Data Layer Module** | 100 | 🔴 CRITICAL | P1 | 6-8h | Cluster 1 |
| **3. Source Tables** | 90 | 🔴 CRITICAL | P1 | 6-8h | Cluster 1 |
| **4. Time Window** | 74 | 🔴 CRITICAL | P0 | 6-10h | Keine |
| **5. Confidence Logic** | 103 | 🟡 HIGH | P1 | 24-32h | Cluster 4 |
| **6. Missing-Value-Policy** | 110 | 🟡 MEDIUM | P1 | 8-10h | Cluster 5 |
| **7. Completeness Score 0** | 111 | 🟡 MEDIUM | P2 | Inkludiert | Nach P0+P1 |
| **8. Schema Status draft** | 111 | 🟡 MEDIUM | P2 | 4-6h | Nach P0+P1 |
| **9. Ungenutzte Platzhalter** | 67 | 🟢 LOW | P2 | 4-6h | Product-Review |
| **10. Export-Inkonsistenzen** | 5 | 🟢 INFO | P3 | 0.5h | Keine |
| **11. Code-Docs-Konflikte** | 3 | 🔴 CRITICAL | P0 | 1h | Keine |

**Gesamt-Remediationsaufwand:** 64-87 Stunden (gestaffelt über P0-P3)

---

## REMEDIATION-PRIORISIERUNG

### P0 (BLOCKING - Week 1)
1. **Cluster 11:** Code-Docs-Konflikte (1h)
2. **Cluster 1:** Semantic Contract (4-6h)
3. **Cluster 4:** Time Window (6-10h)
   - **Sub:** Name-Pattern (1h, automatisch)
   - **Sub:** Code-Parameter (2-3h, semi-automatisch)
   - **Sub:** Fach-Entscheidung (4-6h, manuell mit Product)

**Total P0:** 11-17 Stunden

---

### P1 (HIGH - Week 2-3)
1. **Cluster 2:** Data Layer Module (6-8h)
2. **Cluster 3:** Source Tables (6-8h)
3. **Cluster 5:** Confidence Logic (24-32h)
   - **Sub:** Trend-Platzhalter (12-16h)
   - **Sub:** Score-Platzhalter (8-10h)
   - **Sub:** Korrelations-Platzhalter (4-6h)
4. **Cluster 6:** Missing-Value-Policy (8-10h)

**Total P1:** 44-58 Stunden

---

### P2 (MEDIUM - Week 4-5)
1. **Cluster 7:** Completeness Score (inkludiert in P0+P1)
2. **Cluster 8:** Schema Status Production (4-6h)
3. **Cluster 9:** Ungenutzte Platzhalter Review (4-6h)

**Total P2:** 8-12 Stunden

---

### P3 (LOW - Later)
1. **Cluster 10:** Export-Inkonsistenzen Doku (0.5h)

**Total P3:** 0.5 Stunden

---

**GESAMT:** 63.5-87.5 Stunden über 4-6 Wochen

---

## NÄCHSTE SCHRITTE

1. **Review dieses Gap-Reports** mit Tech Lead
2. **Priorisierungs-Bestätigung:** P0-Liste final absegnen
3. **Kickoff P0-Sprint:**
   - Code-Docs-Konflikte sofort fixen (1h)
   - Semantic Contract Bulk-Update (4-6h)
   - Zeitfenster-Klassifizierung (6-10h)
4. **Nach P0:** P1-Sprint planen (Confidence + Data Layer + Missing-Value)

**Zie

l nach P0+P1:** 60-70% Normkonformität erreicht

---

**Audit-Report erstellt von:** Claude Code (Lead Audit Agent)
**Basis:** 4-Agent-Analyse (Code-Evidence, Semantic-Contract, Time-Window-Confidence, Prompt-Usage)
