{
"event": "PreToolUse",
"tool_name": "mcp__mcp-tasks__tasks_create",
"tool_input": {
"title": "Phase 4.2: Audit-Logging systematisieren",
"description": "## Anweisungen für KI-System\n1. Lies `\/var\/www\/CLAUDE.md` für Projektkontext\n2. Prüfe bestehende Logs: `db_tables(\"ki_protokoll\")`, `db_describe(\"mcp_log\")`\n3. Analysiere Logging: `Grep(\"log|Log|LOG\", \"src\/**\/*.php\")`\n\n## Problem (Supervision #10)\n- Kein systematisches Audit-Logging\n- Keine Korrelation zwischen Requests\n- Debugging schwierig\n\n## Zielarchitektur\n```\nRequest → CorrelationId → alle Logs → Response\n```\n\n## Aufgabe\n\n### 1. AuditLogger Service\n```php\n\/\/ \/src\/Infrastructure\/Logging\/AuditLogger.php\nnamespace App\\Infrastructure\\Logging;\n\nfinal class AuditLogger\n{\n private string $correlationId;\n private \\PDO $db;\n \n public function __construct()\n {\n $this->correlationId = $_SERVER['HTTP_X_CORRELATION_ID'] \n ?? bin2hex(random_bytes(8));\n $this->db = DatabaseFactory::getConnection();\n }\n \n public function log(\n string $event,\n array $context = [],\n string $level = 'info'\n ): void {\n $stmt = $this->db->prepare(\"\n INSERT INTO audit_log \n (correlation_id, event, context, level, created_at)\n VALUES (?, ?, ?, ?, NOW())\n \");\n $stmt->execute([\n $this->correlationId,\n $event,\n json_encode($context),\n $level,\n ]);\n }\n \n public function logAction(\n string $action,\n string $entity,\n ?int $entityId = null,\n array $data = []\n ): void {\n $this->log(\"{$entity}.{$action}\", [\n 'entity' => $entity,\n 'entity_id' => $entityId,\n 'data' => $data,\n 'user' => $_SESSION['user_id'] ?? null,\n ]);\n }\n \n public function getCorrelationId(): string\n {\n return $this->correlationId;\n }\n}\n```\n\n### 2. DB-Tabelle erstellen\n```sql\nCREATE TABLE audit_log (\n id BIGINT AUTO_INCREMENT PRIMARY KEY,\n correlation_id VARCHAR(32) NOT NULL,\n event VARCHAR(100) NOT NULL,\n context JSON,\n level ENUM('debug', 'info', 'warning', 'error') DEFAULT 'info',\n created_at DATETIME NOT NULL,\n INDEX idx_correlation (correlation_id),\n INDEX idx_event (event),\n INDEX idx_created (created_at)\n) ENGINE=InnoDB;\n```\n\n### 3. Middleware für Correlation-ID\n```php\n\/\/ \/src\/Framework\/Middleware\/CorrelationMiddleware.php\nfinal class CorrelationMiddleware\n{\n public function handle(callable $next): void\n {\n $correlationId = $_SERVER['HTTP_X_CORRELATION_ID'] \n ?? bin2hex(random_bytes(8));\n \n \/\/ In Response-Header setzen\n header(\"X-Correlation-ID: {$correlationId}\");\n \n \/\/ Global verfügbar machen\n $_SERVER['CORRELATION_ID'] = $correlationId;\n \n $next();\n }\n}\n```\n\n### 4. Integration in Services\n```php\n\/\/ Beispiel: ChatSessionService\npublic function sendMessage(SendChatMessageCommand $cmd): Message\n{\n $this->logger->logAction('send', 'message', null, [\n 'session_id' => $cmd->sessionId,\n 'content_length' => strlen($cmd->content),\n ]);\n \n \/\/ ... Logik ...\n \n $this->logger->logAction('sent', 'message', $message->id, [\n 'tokens' => $response->tokenCount,\n ]);\n \n return $message;\n}\n```\n\n## Akzeptanzkriterien\n- [ ] audit_log Tabelle erstellt\n- [ ] Alle wichtigen Aktionen werden geloggt\n- [ ] Correlation-ID durchgängig vorhanden\n- [ ] Logs per Correlation-ID filterbar",
"type": "ai_task",
"parent_task_id": 221
}
}
{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"task\": {\n \"id\": 231,\n \"uuid\": \"793252b2-56b8-495a-9178-304356ef84a8\",\n \"title\": \"Phase 4.2: Audit-Logging systematisieren\",\n \"description\": \"## Anweisungen für KI-System\\n1. Lies `\/var\/www\/CLAUDE.md` für Projektkontext\\n2. Prüfe bestehende Logs: `db_tables(\\\"ki_protokoll\\\")`, `db_describe(\\\"mcp_log\\\")`\\n3. Analysiere Logging: `Grep(\\\"log|Log|LOG\\\", \\\"src\/**\/*.php\\\")`\\n\\n## Problem (Supervision #10)\\n- Kein systematisches Audit-Logging\\n- Keine Korrelation zwischen Requests\\n- Debugging schwierig\\n\\n## Zielarchitektur\\n```\\nRequest → CorrelationId → alle Logs → Response\\n```\\n\\n## Aufgabe\\n\\n### 1. AuditLogger Service\\n```php\\n\/\/ \/src\/Infrastructure\/Logging\/AuditLogger.php\\nnamespace App\\\\Infrastructure\\\\Logging;\\n\\nfinal class AuditLogger\\n{\\n private string $correlationId;\\n private \\\\PDO $db;\\n \\n public function __construct()\\n {\\n $this->correlationId = $_SERVER['HTTP_X_CORRELATION_ID'] \\n ?? bin2hex(random_bytes(8));\\n $this->db = DatabaseFactory::getConnection();\\n }\\n \\n public function log(\\n string $event,\\n array $context = [],\\n string $level = 'info'\\n ): void {\\n $stmt = $this->db->prepare(\\\"\\n INSERT INTO audit_log \\n (correlation_id, event, context, level, created_at)\\n VALUES (?, ?, ?, ?, NOW())\\n \\\");\\n $stmt->execute([\\n $this->correlationId,\\n $event,\\n json_encode($context),\\n $level,\\n ]);\\n }\\n \\n public function logAction(\\n string $action,\\n string $entity,\\n ?int $entityId = null,\\n array $data = []\\n ): void {\\n $this->log(\\\"{$entity}.{$action}\\\", [\\n 'entity' => $entity,\\n 'entity_id' => $entityId,\\n 'data' => $data,\\n 'user' => $_SESSION['user_id'] ?? null,\\n ]);\\n }\\n \\n public function getCorrelationId(): string\\n {\\n return $this->correlationId;\\n }\\n}\\n```\\n\\n### 2. DB-Tabelle erstellen\\n```sql\\nCREATE TABLE audit_log (\\n id BIGINT AUTO_INCREMENT PRIMARY KEY,\\n correlation_id VARCHAR(32) NOT NULL,\\n event VARCHAR(100) NOT NULL,\\n context JSON,\\n level ENUM('debug', 'info', 'warning', 'error') DEFAULT 'info',\\n created_at DATETIME NOT NULL,\\n INDEX idx_correlation (correlation_id),\\n INDEX idx_event (event),\\n INDEX idx_created (created_at)\\n) ENGINE=InnoDB;\\n```\\n\\n### 3. Middleware für Correlation-ID\\n```php\\n\/\/ \/src\/Framework\/Middleware\/CorrelationMiddleware.php\\nfinal class CorrelationMiddleware\\n{\\n public function handle(callable $next): void\\n {\\n $correlationId = $_SERVER['HTTP_X_CORRELATION_ID'] \\n ?? bin2hex(random_bytes(8));\\n \\n \/\/ In Response-Header setzen\\n header(\\\"X-Correlation-ID: {$correlationId}\\\");\\n \\n \/\/ Global verfügbar machen\\n $_SERVER['CORRELATION_ID'] = $correlationId;\\n \\n $next();\\n }\\n}\\n```\\n\\n### 4. Integration in Services\\n```php\\n\/\/ Beispiel: ChatSessionService\\npublic function sendMessage(SendChatMessageCommand $cmd): Message\\n{\\n $this->logger->logAction('send', 'message', null, [\\n 'session_id' => $cmd->sessionId,\\n 'content_length' => strlen($cmd->content),\\n ]);\\n \\n \/\/ ... Logik ...\\n \\n $this->logger->logAction('sent', 'message', $message->id, [\\n 'tokens' => $response->tokenCount,\\n ]);\\n \\n return $message;\\n}\\n```\\n\\n## Akzeptanzkriterien\\n- [ ] audit_log Tabelle erstellt\\n- [ ] Alle wichtigen Aktionen werden geloggt\\n- [ ] Correlation-ID durchgängig vorhanden\\n- [ ] Logs per Correlation-ID filterbar\",\n \"type\": \"ai_task\",\n \"status\": \"pending\",\n \"created_by\": \"mcp-tasks\",\n \"created_by_type\": \"ai\",\n \"parent_task_id\": 221,\n \"due_date\": null,\n \"created_at\": \"2025-12-22T09:58:44.726080\",\n \"updated_at\": \"2025-12-22T09:58:44.726082\",\n \"completed_at\": null,\n \"metadata\": {}\n },\n \"message\": \"Task #231 created\"\n}"
}
]
}