Contract-Enforcement-System

Erstellt: 2025-12-22 | Aktualisiert: 2025-12-27

Das Enforcement-System stellt sicher, dass alle Code-Qualitätsstandards und Architektur-Regeln automatisch durchgesetzt werden.

Architektur-Übersicht


┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   Contracts     │────▶│    Validator    │────▶│     Hooks       │
│  (YAML in DB)   │     │ (contract-check)│     │ (Python Scripts)│
└─────────────────┘     └─────────────────┘     └─────────────────┘
        │                       │                       │
        ▼                       ▼                       ▼
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│  MCP-Contracts  │     │  sync-dev-prod  │     │   Claude Code   │
│    (API)        │     │    (Workflow)   │     │  (PreToolUse)   │
└─────────────────┘     └─────────────────┘     └─────────────────┘

Komponenten

1. Contracts (Datenbank)

Contracts sind in ki_protokoll.contracts gespeichert und definieren Regeln im YAML-Format.

ContractZweckSeverity
code-quality-standardsLOC-Limits, PDO-Verbot in Controllerncritical/major
layered-architectureSchichtenarchitektur (MVC/MVP)critical
db-access-securityKeine direkten DB-Befehlecritical
python-pipelinePython-Qualitätsstandardscritical/major
view-structureCRUD-View-Standardscritical/major
css-standardsAccessibility (WCAG 2.1)critical/major
critic-workflowReview-Prozess Definitioncritical

2. Validator (contract-check.sh)

Führt Contract-Validierungen aus:

/opt/scripts/contract-check.sh /var/www/dev.campus.systemische-tools.de

3. Hooks (PreToolUse)

Blockieren Architektur-Verletzungen BEVOR Code geschrieben wird:

HookTriggerPrüfung
block_direct_db.pyBashmysql/mariadb-Befehle
architecture_guard.pyWrite/EditController LOC > 500, PDO in Controller

Workflow

Pre-Sync Validierung

  1. Contract-Check: Alle Contracts werden validiert
  2. PHP Quality: PHPStan, PHP-CS-Fixer, Semgrep
  3. Unit Tests: PHPUnit ausführen
  4. Entscheidung: Critical=Block, Major=Warn, Minor=Log

PreToolUse Hooks

  1. Claude Code ruft Write/Edit/Bash auf
  2. Hook prüft Content/Command
  3. Bei Violation: Exit 2 → Block + Fehlermeldung
  4. Bei OK: Exit 0 → Durchlassen

MCP-Tools

contracts_list

contracts_list(compact=True)

Listet alle Contracts auf.

contracts_validate

contracts_validate(name="code-quality-standards")

Validiert einen Contract gegen die Codebase.

contracts_create/update

contracts_create(name="...", yaml_content="...", version="1.0")

Erstellt oder aktualisiert einen Contract.

Troubleshooting

"Mein Code wird blockiert"

  1. Prüfe welcher Hook blockiert (Fehlermeldung)
  2. Prüfe welche Regel verletzt wird
  3. Behebe das Problem (z.B. Service extrahieren statt PDO in Controller)

"Contract-Validierung findet nichts"

  1. Prüfe ob Contract aktiv ist: contracts_get(name="...")
  2. Prüfe Scope-Pfade im Contract
  3. Prüfe ob Dateien existieren

"Sync wird blockiert"

  1. Führe /opt/scripts/contract-check.sh aus
  2. Prüfe Critical/Major Violations
  3. Behebe alle Critical-Violations
  4. Major-Violations können als Baseline akzeptiert werden

Baseline für Legacy-Code

Aktuell akzeptierte Legacy-Violations (nicht für neue Code):

Neue Violations in diesen Dateien werden trotzdem blockiert.