# 03 — `source_class` (Rechtsnatur / Autorität) **Zweck:** Die Autoritäts-Achse, die den **Rang** bestimmt (siehe [02](02-authority.md)). Deterministisch abgeleitet — der noch nicht re-ingestierte (ungetaggte) Korpus wird trotzdem klassifiziert, ohne Re-Tagging des Bestands. ## Mechanik `classifyAuthority()` (`authority.go`) entscheidet in dieser Reihenfolge: 1. **Standard-NAME-Override** — erkannter Standard-Name (NIST/OWASP/ISO 27001/CIS/CSA CCM/Grundschutz) erzwingt `technical_standard` (Gewicht 80), **auch wenn die Payload `supervisory_guidance` sagt**. Grund: der Korpus taggt viele Standards mit generischem guidance-`source_class`; der Name ist autoritativer. `binding_law` bleibt unangetastet. 2. **Explizite Payload-Werte** — gesetztes `source_class` / `authority_weight` gewinnen. 3. **Marker-Fallback** — foreign → standard → guidance → regulation → unknown. `inferJurisdiction()`: Fremd-Marker → `CH`; enthält `§` oder DE-Marker → `DE`; sonst → `EU`. ## Konstanten + Warum **Gewichte je Klasse** (`sourceClassFromWeight()`): | `source_class` | Gewicht | Schwelle | Bedeutung | |----------------|---------|----------|-----------| | `binding_law` | `100` | w ≥ 100 | bindendes Recht (Gesetz/VO) | | `technical_standard` | `80` | 80 ≤ w < 100 | Best-Practice-Control-Katalog (NIST/OWASP/ISO) | | `supervisory_guidance` | `70` | 70 ≤ w < 80 | Aufsichts-/Auslegungs-Guidance (ENISA/BSI/EDPB) | | `unknown` | `50` | default | unklassifiziert | | `foreign_law` | `0` | w ≤ 0 | Fremdrecht (CH) | **Marker-Listen** (Substring-Match): | Liste | Einträge (Auszug) | Wirkung | |-------|-------------------|---------| | `standardMarkers` *(vor guidance geprüft)* | NIST, OWASP, Grundschutz, ISO 27001, ISO/IEC 27001, CSA CCM, Cloud Controls Matrix, CIS Benchmark, CIS Control | → `technical_standard` (80) | | `guidanceMarkers` | DSK, EDPB, BfDI, ENISA, BSI, EUCC, Standards Mapping, Orientierungshilfe, Handreichung, Leitlinie, Empfehlung, OECD, CISA, Blue Guide, … | → `supervisory_guidance` (70) | | `foreignMarkers` | RevDSG, fedlex, (CH) | → `foreign_law` (0) | | `deMarkers` | BDSG, DSK, BfDI, BayLfD, BSI | Signal **DE**-Jurisdiktion | ## Der Standard-Name-Override (Fix 2026-06-25) **Problem:** Der CE-Korpus taggt z.B. `NIST SP 800-82r3` als `source_class=supervisory_guidance` (Gewicht 70), **nicht** technical_standard. `classifyAuthority` vertraute dem Payload-Tag → NIST landete als guidance, **kein `control_standard`** im Pool → die Diversity-Regel ([05](05-control-intent.md)) konnte nichts injizieren. **Fix:** Erkannter Standard-Name überschreibt ein fehl-getaggtes guidance/unknown-`source_class` → `technical_standard`. Code-Fix, **kein Re-Ingest** nötig. Bindendes Recht bleibt unangetastet (Sanity geprüft: Rechtsfrage liefert weiterhin binding Top-1). ## Code - `authority.go` → `classifyAuthority()`, `sourceClassFromWeight()`, `inferJurisdiction()` ## Adressierte Fehlerklassen - **„Standard als guidance mistagged → kein control_standard"** → Standard-Name-Override. - **„Fremdrecht falsch eingeordnet"** → `foreignMarkers` + `foreign_law`-Gewicht 0.