feat: Control Library UI, dedup migration, QA tooling, docs
Some checks failed
CI/CD / go-lint (push) Has been skipped
CI/CD / python-lint (push) Has been skipped
CI/CD / nodejs-lint (push) Has been skipped
CI/CD / test-go-ai-compliance (push) Failing after 31s
CI/CD / test-python-backend-compliance (push) Successful in 1m35s
CI/CD / test-python-document-crawler (push) Successful in 20s
CI/CD / test-python-dsms-gateway (push) Successful in 17s
CI/CD / validate-canonical-controls (push) Successful in 10s
CI/CD / Deploy (push) Has been skipped
Some checks failed
CI/CD / go-lint (push) Has been skipped
CI/CD / python-lint (push) Has been skipped
CI/CD / nodejs-lint (push) Has been skipped
CI/CD / test-go-ai-compliance (push) Failing after 31s
CI/CD / test-python-backend-compliance (push) Successful in 1m35s
CI/CD / test-python-document-crawler (push) Successful in 20s
CI/CD / test-python-dsms-gateway (push) Successful in 17s
CI/CD / validate-canonical-controls (push) Successful in 10s
CI/CD / Deploy (push) Has been skipped
- Control Library: parent control display, ObligationTypeBadge, GenerationStrategyBadge variants, evidence string fallback - API: expose parent_control_uuid/id/title in canonical controls - Fix: DSFA SQLAlchemy 2.0 Row._mapping compatibility - Migration 074: control_parent_links + control_dedup_reviews tables - QA scripts: benchmark, gap analysis, OSCAL import, OWASP cleanup, phase5 normalize, phase74 gap fill, sync_db, run_job - Docs: dedup engine, RAG benchmark, lessons learned, pipeline docs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -96,6 +96,7 @@ erDiagram
|
||||
varchar verification_method
|
||||
varchar target_audience
|
||||
varchar generation_strategy
|
||||
varchar obligation_type
|
||||
smallint pipeline_version
|
||||
integer license_rule
|
||||
jsonb source_citation
|
||||
@@ -936,9 +937,11 @@ Drei Kompositions-Modi:
|
||||
|
||||
Zerlegt Rich Controls in atomare Controls. Laeuft VOR den Migration Passes 1-5.
|
||||
|
||||
#### Pass 0a — Obligation Extraction
|
||||
#### Pass 0a — Obligation Extraction + 3-Tier-Klassifizierung
|
||||
|
||||
Extrahiert einzelne normative Pflichten aus einem Rich Control per LLM.
|
||||
Extrahiert einzelne normative Pflichten aus einem Rich Control per LLM (Claude Sonnet 4.6).
|
||||
Jede Obligation wird als **pflicht**, **empfehlung** oder **kann** klassifiziert — nichts wird
|
||||
wegen fehlendem normativem Signal abgelehnt.
|
||||
|
||||
**6 Guardrails:**
|
||||
|
||||
@@ -949,23 +952,37 @@ Extrahiert einzelne normative Pflichten aus einem Rich Control per LLM.
|
||||
5. Nicht auf Evidence-Ebene zerlegen
|
||||
6. Parent-Link immer erhalten
|
||||
|
||||
**Quality Gate:** Jeder Kandidat wird gegen 6 Kriterien geprueft:
|
||||
**3-Tier Obligation Classification:**
|
||||
|
||||
- `has_normative_signal` — Normatives Sprachsignal erkannt
|
||||
- `single_action` — Nur eine Handlung
|
||||
- `not_rationale` — Keine blosse Begruendung
|
||||
- `not_evidence_only` — Kein reines Evidence-Fragment
|
||||
- `min_length` — Mindestlaenge erreicht
|
||||
- `has_parent_link` — Referenz zum Rich Control
|
||||
| obligation_type | Signal-Beispiele | Bedeutung |
|
||||
|---|---|---|
|
||||
| `pflicht` | müssen, ist zu, shall, must, required | Gesetzliche/regulatorische Pflicht |
|
||||
| `empfehlung` | soll, should, sicherstellen, dokumentieren | Best Practice, freiwillig |
|
||||
| `kann` | kann, darf, may, optional | Optionale Massnahme |
|
||||
|
||||
Kritische Checks: `has_normative_signal`, `not_evidence_only`, `min_length`, `has_parent_link`
|
||||
Obligations ohne erkennbares Signal werden als `empfehlung` klassifiziert (nicht rejected).
|
||||
Empfehlungen helfen Firmen, Systeme ueber das Pflichtprogramm hinaus zu sichern.
|
||||
|
||||
**Quality Gate — Kritische Checks:**
|
||||
|
||||
| Flag | Kritisch? | Beschreibung |
|
||||
|---|---|---|
|
||||
| `obligation_type` | — | Klassifizierung (pflicht/empfehlung/kann) |
|
||||
| `not_evidence_only` | **Ja** | Kein reines Evidence-Fragment |
|
||||
| `min_length` | **Ja** | Mindestlaenge (20 Zeichen) |
|
||||
| `has_parent_link` | **Ja** | Referenz zum Rich Control |
|
||||
| `has_normative_signal` | Nein | Informativer Check (nicht mehr Ablehnungsgrund) |
|
||||
| `single_action` | Nein | Nur eine Handlung (heuristisch) |
|
||||
| `not_rationale` | Nein | Keine blosse Begruendung |
|
||||
|
||||
#### Pass 0b — Atomic Control Composition
|
||||
|
||||
Erstellt aus jedem validierten Obligation Candidate ein atomares Control
|
||||
(LLM-gestuetzt mit Template-Fallback).
|
||||
(LLM-gestuetzt mit Template-Fallback). Das `obligation_type` Feld wird
|
||||
vom Parent-Obligation uebernommen.
|
||||
|
||||
**Datei:** `compliance/services/decomposition_pass.py`
|
||||
**Test-Script:** `scripts/qa/test_pass0a.py` (standalone, speichert JSON)
|
||||
|
||||
---
|
||||
|
||||
@@ -1012,11 +1029,13 @@ Die Crosswalk-Matrix bildet diese N:M-Beziehung ab.
|
||||
|
||||
**Migration 061:** Decomposition-Tabellen
|
||||
|
||||
| Tabelle | Beschreibung |
|
||||
| Tabelle / Feld | Beschreibung |
|
||||
|---------|-------------|
|
||||
| `obligation_candidates` | Extrahierte atomare Pflichten aus Rich Controls |
|
||||
| `obligation_candidates.obligation_type` | `pflicht` / `empfehlung` / `kann` (3-Tier-Klassifizierung) |
|
||||
| `canonical_controls.parent_control_uuid` | Self-Referenz zum Rich Control (neues Feld) |
|
||||
| `canonical_controls.decomposition_method` | Zerlegungsmethode (neues Feld) |
|
||||
| `canonical_controls.obligation_type` | Uebernommen von Obligation: pflicht/empfehlung/kann |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user