Protokoll #14613

ID14613
Zeitstempel2025-12-25 11:06:33.965400
Clientroot
IP
Warning: Undefined array key "request_ip" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13

Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens2,708 (Input: 0, Output: 0)
Dauer94 ms
Request-Zeit
Warning: Undefined array key "request_timestamp" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 18
Response-Zeit-

Warning: Undefined array key "error_message" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 22

Request

{
    "event": "PreToolUse",
    "tool_name": "Read",
    "tool_input": {
        "file_path": "\/var\/www\/scripts\/contract-check.sh"
    }
}

Response

{
    "tool_response": {
        "type": "text",
        "file": {
            "filePath": "\/var\/www\/scripts\/contract-check.sh",
            "content": "#!\/bin\/bash\n# =============================================================================\n# CONTRACT VALIDATION - Pre-Sync Hook\n# =============================================================================\n# Validiert alle aktiven Contracts vor dem Sync zu Produktion\n# Verwendung: \/var\/www\/scripts\/contract-check.sh [path]\n# Exit-Codes: 0 = OK, 1 = Critical Violations, 2 = Major Violations\n# =============================================================================\n\nset -e\n\n# Konfiguration\nTARGET=\"${1:-\/var\/www\/dev.campus.systemische-tools.de}\"\nCONTRACTS_DIR=\"\/var\/www\/docs\/contracts\"\n\n# Farben\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nBLUE='\\033[0;34m'\nNC='\\033[0m'\n\n# Zähler\nCRITICAL_COUNT=0\nMAJOR_COUNT=0\nMINOR_COUNT=0\n\necho -e \"${BLUE}=== Contract Validation ===${NC}\"\necho \"Target: $TARGET\"\necho \"Contracts: $CONTRACTS_DIR\"\necho \"\"\n\n# =============================================================================\n# 1. VIEW STRUCTURE CONTRACT v1.0\n# =============================================================================\necho -e \"${BLUE}[1\/6] View Structure Contract v1.0${NC}\"\n\ncheck_view_structure() {\n    local resource=$1\n    local view_dir=\"$TARGET\/src\/View\/$resource\"\n    local errors=0\n\n    # Prüfe ob alle 4 Views existieren\n    for view in index.php show.php new.php edit.php; do\n        if [[ ! -f \"$view_dir\/$view\" ]]; then\n            echo -e \"  ${RED}CRITICAL:${NC} $resource\/$view fehlt\"\n            ((CRITICAL_COUNT++))\n            ((errors++))\n        fi\n    done\n\n    # Prüfe verbotene Elemente\n    if [[ -f \"$view_dir\/index.php\" ]]; then\n        if grep -q 'class=\"page-container\"' \"$view_dir\/index.php\" 2>\/dev\/null; then\n            echo -e \"  ${RED}CRITICAL:${NC} $resource\/index.php enthält page-container (FRB-001)\"\n            ((CRITICAL_COUNT++))\n            ((errors++))\n        fi\n        if grep -q 'class=\"page-header\"' \"$view_dir\/index.php\" 2>\/dev\/null; then\n            echo -e \"  ${RED}CRITICAL:${NC} $resource\/index.php enthält page-header (FRB-002)\"\n            ((CRITICAL_COUNT++))\n            ((errors++))\n        fi\n    fi\n\n    # Prüfe show.php auf Breadcrumb\n    if [[ -f \"$view_dir\/show.php\" ]]; then\n        if ! grep -q 'class=\"breadcrumb\"' \"$view_dir\/show.php\" 2>\/dev\/null; then\n            echo -e \"  ${RED}CRITICAL:${NC} $resource\/show.php fehlt Breadcrumb (SHW-001)\"\n            ((CRITICAL_COUNT++))\n            ((errors++))\n        fi\n    fi\n\n    # Prüfe new.php auf Formular-Struktur\n    if [[ -f \"$view_dir\/new.php\" ]]; then\n        if ! grep -q 'class=\"form\"' \"$view_dir\/new.php\" 2>\/dev\/null; then\n            echo -e \"  ${RED}CRITICAL:${NC} $resource\/new.php fehlt class=\\\"form\\\" (NEW-001)\"\n            ((CRITICAL_COUNT++))\n            ((errors++))\n        fi\n        if grep -q 'class=\"form-section\"' \"$view_dir\/new.php\" 2>\/dev\/null; then\n            echo -e \"  ${RED}CRITICAL:${NC} $resource\/new.php enthält form-section (NEW-002)\"\n            ((CRITICAL_COUNT++))\n            ((errors++))\n        fi\n    fi\n\n    # Prüfe edit.php auf Breadcrumb mit Link\n    if [[ -f \"$view_dir\/edit.php\" ]]; then\n        if ! grep -q 'class=\"breadcrumb\"' \"$view_dir\/edit.php\" 2>\/dev\/null; then\n            echo -e \"  ${RED}CRITICAL:${NC} $resource\/edit.php fehlt Breadcrumb (EDT-001)\"\n            ((CRITICAL_COUNT++))\n            ((errors++))\n        fi\n    fi\n\n    if [[ $errors -eq 0 ]]; then\n        echo -e \"  ${GREEN}OK${NC} $resource\/*\"\n    fi\n}\n\n# Prüfe alle CRUD-Ressourcen aus dem Contract\nfor resource in tasks content; do\n    check_view_structure \"$resource\"\ndone\n\necho \"\"\n\n# =============================================================================\n# 2. HTML TABLES CONTRACT v1.0\n# =============================================================================\necho -e \"${BLUE}[2\/6] HTML Tables Contract v1.0${NC}\"\n\ncheck_html_tables() {\n    local file=$1\n    local name=$(basename \"$file\")\n    local errors=0\n\n    # NAV-001: Keine Aktionen-Spalte mit Details-Button\n    if grep -qE '<th[^>]*>Aktionen<\/th>' \"$file\" 2>\/dev\/null; then\n        echo -e \"  ${RED}CRITICAL:${NC} $name enthält Aktionen-Spalte (NAV-001)\"\n        ((CRITICAL_COUNT++))\n        ((errors++))\n    fi\n\n    # NAV-002: Keine Modals\n    if grep -qE 'id=\"modal\"|class=\"modal\"' \"$file\" 2>\/dev\/null; then\n        echo -e \"  ${RED}CRITICAL:${NC} $name enthält Modal (NAV-002)\"\n        ((CRITICAL_COUNT++))\n        ((errors++))\n    fi\n\n    # COL-001: Tabellen sollten data-sortable haben\n    if grep -q '<table' \"$file\" 2>\/dev\/null; then\n        if ! grep -q 'data-sortable' \"$file\" 2>\/dev\/null; then\n            # Nur warnen wenn es keine einfache Metadaten-Tabelle ist\n            if grep -qE '<th[^>]*>ID<\/th>' \"$file\" 2>\/dev\/null; then\n                echo -e \"  ${YELLOW}MAJOR:${NC} $name Tabelle fehlt data-sortable (COL-001)\"\n                ((MAJOR_COUNT++))\n                ((errors++))\n            fi\n        fi\n    fi\n\n    return $errors\n}\n\n# Prüfe CRUD Views\nfor resource in tasks content; do\n    for view in \"$TARGET\/src\/View\/$resource\"\/*.php; do\n        if [[ -f \"$view\" ]]; then\n            check_html_tables \"$view\"\n        fi\n    done\ndone\n\necho -e \"  ${GREEN}OK${NC} HTML Tables geprüft\"\necho \"\"\n\n# =============================================================================\n# 3. CSS CONTRACT v1.0 (via css-check.sh)\n# =============================================================================\necho -e \"${BLUE}[3\/6] CSS Contract v1.0${NC}\"\n\nif [[ -x \/var\/www\/scripts\/css-check.sh ]]; then\n    if \/var\/www\/scripts\/css-check.sh \"$TARGET\" > \/dev\/null 2>&1; then\n        echo -e \"  ${GREEN}OK${NC} Stylelint passed\"\n    else\n        echo -e \"  ${YELLOW}MAJOR:${NC} CSS-Fehler gefunden (siehe css-check.sh)\"\n        ((MAJOR_COUNT++))\n    fi\nelse\n    echo -e \"  ${YELLOW}SKIP${NC} css-check.sh nicht verfügbar\"\nfi\n\necho \"\"\n\n# =============================================================================\n# 4. PYTHON PIPELINE CONTRACT v1.0 (via python-check.sh)\n# =============================================================================\necho -e \"${BLUE}[4\/6] Python Pipeline Contract v1.0${NC}\"\n\nif [[ -x \/var\/www\/scripts\/python-check.sh ]]; then\n    if \/var\/www\/scripts\/python-check.sh > \/dev\/null 2>&1; then\n        echo -e \"  ${GREEN}OK${NC} Ruff + mypy passed\"\n    else\n        echo -e \"  ${YELLOW}MAJOR:${NC} Python-Fehler gefunden (siehe python-check.sh)\"\n        ((MAJOR_COUNT++))\n    fi\nelse\n    echo -e \"  ${YELLOW}SKIP${NC} python-check.sh nicht verfügbar\"\nfi\n\necho \"\"\n\n# =============================================================================\n# 5. LAYERED ARCHITECTURE CONTRACT v1.0\n# =============================================================================\necho -e \"${BLUE}[5\/6] Layered Architecture Contract v1.0${NC}\"\n\ncheck_layer_violations() {\n    local errors=0\n\n    # Prüfe: Domain darf nicht Infrastructure importieren\n    if grep -rq 'use Infrastructure\\\\' \"$TARGET\/src\/Domain\/\" 2>\/dev\/null; then\n        echo -e \"  ${RED}CRITICAL:${NC} Domain importiert Infrastructure\"\n        ((CRITICAL_COUNT++))\n        ((errors++))\n    fi\n\n    # Prüfe: src darf nicht app importieren\n    if grep -rq 'use App\\\\' \"$TARGET\/src\/\" 2>\/dev\/null; then\n        echo -e \"  ${RED}CRITICAL:${NC} src importiert App\"\n        ((CRITICAL_COUNT++))\n        ((errors++))\n    fi\n\n    # Prüfe: Presenter nicht in src\n    if find \"$TARGET\/src\" -name \"*Presenter*.php\" 2>\/dev\/null | grep -q .; then\n        echo -e \"  ${RED}CRITICAL:${NC} Presenter in \/src gefunden (gehört nach \/app)\"\n        ((CRITICAL_COUNT++))\n        ((errors++))\n    fi\n\n    # Prüfe: Controller nicht in app\n    if find \"$TARGET\/app\" -name \"*Controller*.php\" 2>\/dev\/null | grep -q .; then\n        echo -e \"  ${RED}CRITICAL:${NC} Controller in \/app gefunden (gehört nach \/src)\"\n        ((CRITICAL_COUNT++))\n        ((errors++))\n    fi\n\n    if [[ $errors -eq 0 ]]; then\n        echo -e \"  ${GREEN}OK${NC} Layer-Grenzen eingehalten\"\n    fi\n}\n\ncheck_layer_violations\n\necho \"\"\n\n# =============================================================================\n# 6. BETRIEBSDOKUMENTATION CONTRACT v1.1\n# =============================================================================\necho -e \"${BLUE}[6\/6] Betriebsdokumentation Contract v1.1${NC}\"\n\ncheck_docs_structure() {\n    local docs_dir=\"$TARGET\/src\/View\/docs\"\n    local errors=0\n\n    # Prüfe: Alle Docs haben Breadcrumb\n    for doc in \"$docs_dir\"\/**\/*.php; do\n        if [[ -f \"$doc\" && \"$doc\" != *\"layout.php\" && \"$doc\" != *\"index.php\" ]]; then\n            if ! grep -q 'class=\"breadcrumb\"' \"$doc\" 2>\/dev\/null; then\n                local name=$(echo \"$doc\" | sed \"s|$docs_dir\/||\")\n                echo -e \"  ${YELLOW}MAJOR:${NC} $name fehlt Breadcrumb\"\n                ((MAJOR_COUNT++))\n                ((errors++))\n            fi\n        fi\n    done\n\n    # Prüfe: Alle Docs haben h1\n    for doc in \"$docs_dir\"\/**\/*.php; do\n        if [[ -f \"$doc\" && \"$doc\" != *\"layout.php\" ]]; then\n            if ! grep -q '<h1>' \"$doc\" 2>\/dev\/null; then\n                local name=$(echo \"$doc\" | sed \"s|$docs_dir\/||\")\n                echo -e \"  ${YELLOW}MAJOR:${NC} $name fehlt h1\"\n                ((MAJOR_COUNT++))\n                ((errors++))\n            fi\n        fi\n    done\n\n    if [[ $errors -eq 0 ]]; then\n        echo -e \"  ${GREEN}OK${NC} Dokumentation strukturell korrekt\"\n    fi\n}\n\ncheck_docs_structure\n\necho \"\"\n\n# =============================================================================\n# ERGEBNIS\n# =============================================================================\necho -e \"${BLUE}=== Ergebnis ===${NC}\"\necho \"Critical: $CRITICAL_COUNT\"\necho \"Major: $MAJOR_COUNT\"\necho \"Minor: $MINOR_COUNT\"\necho \"\"\n\n# Pass-Threshold aus Contracts\n# critical_violations_max: 0\n# major_violations_max: 2\n\nif [[ $CRITICAL_COUNT -gt 0 ]]; then\n    echo -e \"${RED}FAILED: $CRITICAL_COUNT kritische Violations${NC}\"\n    echo \"Sync zu Produktion BLOCKIERT.\"\n    exit 1\nelif [[ $MAJOR_COUNT -gt 2 ]]; then\n    echo -e \"${YELLOW}WARNING: $MAJOR_COUNT major Violations (max 2 erlaubt)${NC}\"\n    echo \"Sync zu Produ... [TRUNCATED-b7d909d2fa693a5e]",
            "numLines": 309,
            "startLine": 1,
            "totalLines": 309
        }
    }
}
← Vorheriger Zur Liste Nächster →