{
"event": "PreToolUse",
"tool_name": "Edit",
"tool_input": {
"file_path": "\/var\/www\/CLAUDE.md",
"old_string": "## Regeln\n\n1. **Kein Git** - Verboten auf diesem Server\n2. **MCP nutzen** - Kein direkter DB-Zugriff\n3. **Dev first** - Entwicklung auf dev, dann sync zu prod\n4. **Quality vor Sync** - `\/var\/www\/scripts\/php-check.sh` muss bestehen\n5. **Task-Pflicht** - Für jede Anforderung `tasks_create()` nutzen\n6. **HTMX-Pflicht** - Kein fetch()\/XHR, nur HTMX mit CSRF",
"new_string": "## Constants (Pflicht)\n\n**Keine Magic Numbers! Immer benannte Konstanten verwenden.**\n\n### PHP\n```php\nuse Domain\\Constants;\n\n\/\/ RICHTIG:\n$limit = Constants::DEFAULT_LIMIT;\n$duration = $seconds * Constants::MS_PER_SECOND;\ntimeout: Constants::LLM_TIMEOUT\n\n\/\/ FALSCH (wird blockiert):\n$limit = 100;\n$duration = $seconds * 1000;\ntimeout: 60\n```\n\n### Python (Pipeline)\n```python\nfrom constants import DEFAULT_LIMIT, MS_PER_SECOND, OLLAMA_TIMEOUT\n\n# RICHTIG:\nlimit = DEFAULT_LIMIT\nduration_ms = seconds * MS_PER_SECOND\n\n# FALSCH:\nlimit = 100\nduration_ms = seconds * 1000\n```\n\n### Verfügbare Konstanten\n| Konstante | Wert | Verwendung |\n|-----------|------|------------|\n| `DEFAULT_LIMIT` | 100 | Standard DB-Limit |\n| `BATCH_LIMIT` | 1000 | Batch-Operationen |\n| `MS_PER_SECOND` | 1000 | Zeit-Konvertierung |\n| `SECONDS_PER_MINUTE` | 60 | Zeit-Berechnung |\n| `OLLAMA_TIMEOUT` | 60 | Ollama API Timeout |\n| `LLM_TIMEOUT` | 120 | LLM Request Timeout |\n\nDateien: `src\/Domain\/Constants.php`, `\/var\/www\/scripts\/pipeline\/constants.py`\n\n## Regeln\n\n1. **Kein Git** - Verboten auf diesem Server\n2. **MCP nutzen** - Kein direkter DB-Zugriff\n3. **Dev first** - Entwicklung auf dev, dann sync zu prod\n4. **Quality vor Sync** - `\/var\/www\/scripts\/php-check.sh` muss bestehen\n5. **Task-Pflicht** - Für jede Anforderung `tasks_create()` nutzen\n6. **HTMX-Pflicht** - Kein fetch()\/XHR, nur HTMX mit CSRF\n7. **Constants-Pflicht** - Keine Magic Numbers, immer `Constants::*` oder `constants.*`"
}
}
{
"tool_response": {
"filePath": "\/var\/www\/CLAUDE.md",
"oldString": "## Regeln\n\n1. **Kein Git** - Verboten auf diesem Server\n2. **MCP nutzen** - Kein direkter DB-Zugriff\n3. **Dev first** - Entwicklung auf dev, dann sync zu prod\n4. **Quality vor Sync** - `\/var\/www\/scripts\/php-check.sh` muss bestehen\n5. **Task-Pflicht** - Für jede Anforderung `tasks_create()` nutzen\n6. **HTMX-Pflicht** - Kein fetch()\/XHR, nur HTMX mit CSRF",
"newString": "## Constants (Pflicht)\n\n**Keine Magic Numbers! Immer benannte Konstanten verwenden.**\n\n### PHP\n```php\nuse Domain\\Constants;\n\n\/\/ RICHTIG:\n$limit = Constants::DEFAULT_LIMIT;\n$duration = $seconds * Constants::MS_PER_SECOND;\ntimeout: Constants::LLM_TIMEOUT\n\n\/\/ FALSCH (wird blockiert):\n$limit = 100;\n$duration = $seconds * 1000;\ntimeout: 60\n```\n\n### Python (Pipeline)\n```python\nfrom constants import DEFAULT_LIMIT, MS_PER_SECOND, OLLAMA_TIMEOUT\n\n# RICHTIG:\nlimit = DEFAULT_LIMIT\nduration_ms = seconds * MS_PER_SECOND\n\n# FALSCH:\nlimit = 100\nduration_ms = seconds * 1000\n```\n\n### Verfügbare Konstanten\n| Konstante | Wert | Verwendung |\n|-----------|------|------------|\n| `DEFAULT_LIMIT` | 100 | Standard DB-Limit |\n| `BATCH_LIMIT` | 1000 | Batch-Operationen |\n| `MS_PER_SECOND` | 1000 | Zeit-Konvertierung |\n| `SECONDS_PER_MINUTE` | 60 | Zeit-Berechnung |\n| `OLLAMA_TIMEOUT` | 60 | Ollama API Timeout |\n| `LLM_TIMEOUT` | 120 | LLM Request Timeout |\n\nDateien: `src\/Domain\/Constants.php`, `\/var\/www\/scripts\/pipeline\/constants.py`\n\n## Regeln\n\n1. **Kein Git** - Verboten auf diesem Server\n2. **MCP nutzen** - Kein direkter DB-Zugriff\n3. **Dev first** - Entwicklung auf dev, dann sync zu prod\n4. **Quality vor Sync** - `\/var\/www\/scripts\/php-check.sh` muss bestehen\n5. **Task-Pflicht** - Für jede Anforderung `tasks_create()` nutzen\n6. **HTMX-Pflicht** - Kein fetch()\/XHR, nur HTMX mit CSRF\n7. **Constants-Pflicht** - Keine Magic Numbers, immer `Constants::*` oder `constants.*`",
"originalFile": "# Server-Kontext\n\n## Projekt-Root\n`\/var\/www\/dev.campus.systemische-tools.de\/`\n\n## Architektur\n```\n\/src\/ # Backend (MVC)\n├── Framework\/ # App, Router, Controller-Base\n├── Controller\/ # HTTP Controller\n├── Domain\/ # Entity, Repository-Interfaces\n├── UseCases\/ # Anwendungsfälle\n├── Infrastructure\/ # DB, External Services\n└── View\/ # Server-Templates\n\n\/app\/ # Frontend (MVP)\n├── Presenter\/ # UI-Logik\n└── View\/ # Passive Views\n```\n\n## Datenbanken\n\n| DB | Zweck |\n|----|-------|\n| `ki_dev` | Infrastruktur: Tasks, Contracts, Docs, Pipeline, Logs |\n| `ki_content` | Content: Chat, Wissen, Entitäten, Taxonomie |\n\n## MCP-Server (Pflicht)\n\n### MCP-DB\nDatenbankzugriff. **Immer statt direkter SQL verwenden.**\n- `db_select(query, database)` - SELECT\n- `db_tables(database)` - Tabellen\n- `db_describe(table, database)` - Struktur\n- `db_insert\/update\/delete()` - Schreiboperationen\n- `db_execute()` - DDL (ALTER, CREATE, DROP)\n\n### MCP-Tasks\nTask-Management.\n- `tasks_list(compact=True)` - Auflisten\n- `tasks_create(title, type)` - Erstellen\n- `tasks_get(id)` - Details\n- `tasks_status(id, status)` - Status ändern\n- `quality_check(path)` - PHP-Prüfung\n\n### MCP-Contracts\nContract-Management.\n- `contracts_list(compact=True)` - Auflisten\n- `contracts_get(id|name)` - Details\n- `contracts_validate(id|name)` - Validieren\n- `contracts_create\/update()` - Ändern\n\n### MCP-Docs\nDokumentations-Management.\n- `docs_list(compact=True)` - Auflisten\n- `docs_get(id|path)` - Abrufen\n- `docs_search(query)` - Suchen\n- `docs_hierarchy()` - Baum\n- `docs_create\/update\/delete()` - Ändern\n\n### MCP-Code\nCode-Analyse. **Vor Refactoring\/Änderungen nutzen!**\n- `code_search(query)` - Klassen\/Interfaces\/Traits suchen\n- `code_class(fqcn)` - Klassen-Details inkl. Dependencies\n- `code_dependencies(fqcn)` - Was nutzt diese Klasse? (outgoing)\n- `code_dependents(fqcn)` - Wer nutzt diese Klasse? (incoming)\n- `code_impact(fqcn)` - Impact-Analyse vor Änderungen\n- `code_stats()` - Projekt-Statistiken\n\n## Scripts\n\n| Script | Zweck |\n|--------|-------|\n| `\/var\/www\/scripts\/php-check.sh` | PHPStan + CS-Fixer + Semgrep + Audit |\n| `\/var\/www\/scripts\/sync-dev-prod.sh` | Deploy dev → prod |\n| `\/var\/www\/scripts\/backup.sh` | Backup |\n\n## HTMX (Pflicht)\n\n**Alle interaktiven UI-Elemente müssen HTMX verwenden. Kein fetch(), kein XMLHttpRequest.**\n\n### Kritische Regeln (Pre-Hook blockiert)\n| Regel | Anforderung |\n|-------|-------------|\n| HTMX-C1 | `hx-post` MUSS `hx-headers` mit CSRF haben |\n| HTMX-C2 | `hx-delete` MUSS `hx-headers` mit CSRF haben |\n| HTMX-C3 | `hx-patch` MUSS `hx-headers` mit CSRF haben |\n| HTMX-C4 | `hx-delete` MUSS `hx-confirm` haben |\n| HTMX-C5 | `hx-put` MUSS `hx-headers` mit CSRF haben |\n\n### Standard-Pattern\n```php\n<button hx-post=\"\/api\/endpoint\"\n hx-headers='{\"X-CSRF-TOKEN\": \"<?= $csrfToken ?>\"}'\n hx-target=\"#result\"\n hx-swap=\"innerHTML\"\n hx-indicator=\"#spinner\"\n hx-disabled-elt=\"this\">\n Aktion\n<\/button>\n```\n\n### Controller-Methoden\n- `$this->htmxSuccess($msg)` - Erfolg-Alert\n- `$this->htmxError($msg)` - Fehler-Alert\n- `$this->htmxRedirect($url)` - Redirect via Header\n- `$this->requireCsrf()` - CSRF validieren\n\n### Dokumentation\nSiehe: `\/docs\/frontend\/htmx` (mcp-docs)\n\n## Regeln\n\n1. **Kein Git** - Verboten auf diesem Server\n2. **MCP nutzen** - Kein direkter DB-Zugriff\n3. **Dev first** - Entwicklung auf dev, dann sync zu prod\n4. **Quality vor Sync** - `\/var\/www\/scripts\/php-check.sh` muss bestehen\n5. **Task-Pflicht** - Für jede Anforderung `tasks_create()` nutzen\n6. **HTMX-Pflicht** - Kein fetch()\/XHR, nur HTMX mit CSRF\n",
"structuredPatch": [
{
"oldStart": 109,
"oldLines": 6,
"newStart": 109,
"newLines": 50,
"lines": [
" ### Dokumentation",
" Siehe: `\/docs\/frontend\/htmx` (mcp-docs)",
" ",
"+## Constants (Pflicht)",
"+",
"+**Keine Magic Numbers! Immer benannte Konstanten verwenden.**",
"+",
"+### PHP",
"+```php",
"+use Domain\\Constants;",
"+",
"+\/\/ RICHTIG:",
"+$limit = Constants::DEFAULT_LIMIT;",
"+$duration = $seconds * Constants::MS_PER_SECOND;",
"+timeout: Constants::LLM_TIMEOUT",
"+",
"+\/\/ FALSCH (wird blockiert):",
"+$limit = 100;",
"+$duration = $seconds * 1000;",
"+timeout: 60",
"+```",
"+",
"+### Python (Pipeline)",
"+```python",
"+from constants import DEFAULT_LIMIT, MS_PER_SECOND, OLLAMA_TIMEOUT",
"+",
"+# RICHTIG:",
"+limit = DEFAULT_LIMIT",
"+duration_ms = seconds * MS_PER_SECOND",
"+",
"+# FALSCH:",
"+limit = 100",
"+duration_ms = seconds * 1000",
"+```",
"+",
"+### Verfügbare Konstanten",
"+| Konstante | Wert | Verwendung |",
"+|-----------|------|------------|",
"+| `DEFAULT_LIMIT` | 100 | Standard DB-Limit |",
"+| `BATCH_LIMIT` | 1000 | Batch-Operationen |",
"+| `MS_PER_SECOND` | 1000 | Zeit-Konvertierung |",
"+| `SECONDS_PER_MINUTE` | 60 | Zeit-Berechnung |",
"+| `OLLAMA_TIMEOUT` | 60 | Ollama API Timeout |",
"+| `LLM_TIMEOUT` | 120 | LLM Request Timeout |",
"+",
"+Dateien: `src\/Domain\/Constants.php`, `\/var\/www\/scripts\/pipeline\/constants.py`",
"+",
" ## Regeln",
" ",
" 1. **Kein Git** - Verboten auf diesem Server"
]
},
{
"oldStart": 117,
"oldLines": 3,
"newStart": 161,
"newLines": 4,
"lines": [
" 4. **Quality vor Sync** - `\/var\/www\/scripts\/php-check.sh` muss bestehen",
" 5. **Task-Pflicht** - Für jede Anforderung `tasks_create()` nutzen",
" 6. **HTMX-Pflicht** - Kein fetch()\/XHR, nur HTMX mit CSRF",
"+7. **Constants-Pflicht** - Keine Magic Numbers, immer `Constants::*` oder `constants.*`"
]
}
],
"userModified": false,
"replaceAll": false
}
}