{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": "\/var\/www\/scripts\/sync-dev-prod.sh",
"timeout": 120000,
"description": "Sync dev to production"
}
}
{
"tool_response": {
"stdout": "=== Sync Dev → Prod: Sat Dec 27 01:21:29 PM CET 2025 ===\n=== Quality Audit ===\n\n=== Contract Validation ===\n\u001b[0;34m=== Contract Validation ===\u001b[0m\nTarget: \/var\/www\/dev.campus.systemische-tools.de\nContracts: \/var\/www\/docs\/contracts\n\n\u001b[0;34m[1\/6] View Structure Contract v1.0\u001b[0m\n \u001b[0;32mOK\u001b[0m tasks\/*\n \u001b[0;32mOK\u001b[0m content\/*\n\n\u001b[0;34m[2\/6] HTML Tables Contract v1.0\u001b[0m\n \u001b[0;32mOK\u001b[0m HTML Tables geprüft\n\n\u001b[0;34m[3\/6] CSS Contract v1.0\u001b[0m\n \u001b[0;32mOK\u001b[0m Stylelint passed\n\n\u001b[0;34m[4\/6] Python Pipeline Contract v1.0\u001b[0m\n \u001b[1;33mMAJOR:\u001b[0m Python-Fehler gefunden (siehe python-check.sh)\n\n\u001b[0;34m[5\/6] Layered Architecture Contract v1.0\u001b[0m\n \u001b[0;32mOK\u001b[0m Layer-Grenzen eingehalten (H2-H5)\n\n\u001b[0;34m[6\/6] Betriebsdokumentation Contract v1.1\u001b[0m\n \u001b[0;32mOK\u001b[0m Dokumentation strukturell korrekt\n\n\u001b[0;34m=== Ergebnis ===\u001b[0m\nCritical: 0\nMajor: 1\nMinor: 0\n\n\u001b[0;32mPASSED: Alle Contracts erfüllt\u001b[0m\n\n=== PHP Quality Check ===\n=== PHP Quality & Security Check: Sat Dec 27 01:21:33 PM CET 2025 ===\nProject: \/var\/www\/dev.campus.systemische-tools.de\n\n\u001b[1;33m[1\/6] PHPStan - Static Analysis + Strict Rules\u001b[0m\n\n [OK] No errors \n\n\u001b[0;32m✓ PHPStan: OK\u001b[0m\n\n\u001b[1;33m[2\/6] PHP-CS-Fixer - Code Style (PSR-12)\u001b[0m\nPHP CS Fixer 3.92.3 Exceptional Exception by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.4.16\nLoaded config default from \"\/opt\/php-tools\/.php-cs-fixer.php\".\nRunning analysis on 1 core sequentially.\nYou can enable parallel runner and speed up the analysis! Please see https:\/\/cs.symfony.com\/doc\/usage.html for more information.\nUsing cache file \"\/tmp\/.php-cs-fixer.cache\".\n 0\/348 [░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0%\n 348\/348 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFound 0 of 348 files that can be fixed in 0.002 seconds, 20.00 MB memory used\n\u001b[0;32m✓ PHP-CS-Fixer: OK\u001b[0m\n\n\u001b[1;33m[3\/6] Composer Audit - Dependency Vulnerabilities\u001b[0m\n\u001b[0;32m✓ Composer Audit: No vulnerabilities\u001b[0m\n\n\u001b[1;33m[4\/6] Semgrep - OWASP Security Scan\u001b[0m\n\u001b[0;32m✓ Semgrep: No vulnerabilities\u001b[0m\n\n\u001b[1;33m[5\/6] DI Check - UseCase Dependencies\u001b[0m\n\n\u001b[0;32m✓ All UseCase dependencies are resolvable\u001b[0m\n\nRegistered services: 0\nUseCases checked: 52\n\u001b[0;32m✓ DI Check: All dependencies resolvable\u001b[0m\n\n\u001b[1;33m[6\/6] Interface Check - DI Container Bindings\u001b[0m\n[Interface Check] Validating DI container bindings...\nChecked 44 interface bindings\n\u001b[0;32m✓ All interface bindings are valid\u001b[0m\n\u001b[0;32m✓ Interface Check: All bindings valid\u001b[0m\n\n=== Summary ===\n\u001b[0;32mAll checks passed!\u001b[0m\n\n=== PHPUnit Tests ===\n=== PHP Unit Tests: Sat Dec 27 01:21:35 PM CET 2025 ===\nProject: \/var\/www\/dev.campus.systemische-tools.de\n\n\u001b[1;33mFound 2 test file(s)\u001b[0m\n\nPHPUnit 12.5.4 by Sebastian Bergmann and contributors.\n\nRuntime: PHP 8.4.16\nConfiguration: \/opt\/php-tools\/phpunit.xml\n\n............................................ 44 \/ 44 (100%)\n\nTime: 00:00.003, Memory: 14.00 MB\n\nTask Status (Tests\\Unit\\Domain\\ValueObject\\TaskStatus)\n ✔ Is terminal with data set \"pending is not terminal\"\n ✔ Is terminal with data set \"in_progress is not terminal\"\n ✔ Is terminal with data set \"completed is terminal\"\n ✔ Is terminal with data set \"failed is terminal\"\n ✔ Is terminal with data set \"cancelled is terminal\"\n ✔ Label with data set #0\n ✔ Label with data set #1\n ✔ Label with data set #2\n ✔ Label with data set #3\n ✔ Label with data set #4\n ✔ All status values exist\n ✔ Pending can transition to in progress\n ✔ Pending can transition to cancelled\n ✔ Pending cannot transition to completed\n ✔ In progress can transition to completed\n ✔ In progress can transition to failed\n ✔ Completed cannot transition\n\nTaxonomy Integration (Tests\\Integration\\Taxonomy\\TaxonomyIntegration)\n ✔ Chunk taxonomy mapping from array\n ✔ Chunk taxonomy mapping round trip\n ✔ Entity taxonomy mapping to array\n ✔ Confidence factory methods\n ✔ Chunk taxonomy mapping creation\n ✔ Chunk taxonomy mapping to array\n ✔ Chunk taxonomy mapping default values\n ✔ Entity taxonomy mapping creation\n ✔ Entity taxonomy mapping validation\n ✔ Entity taxonomy mapping from array\n ✔ Entity taxonomy mapping default relevance\n ✔ Confidence from float\n ✔ Confidence boundaries\n ✔ Confidence invalid value too low\n ✔ Mapping source values\n ✔ Mapping source try from\n ✔ Confidence invalid value too high\n ✔ Confidence is high medium low\n ✔ Confidence as percentage\n ✔ Mapping source from\n ✔ Mapping source is automatic\n ✔ Mapping source is manual\n ✔ Mapping source label\n ✔ Entity mapping updated at on validation\n ✔ Entity mapping updated at on relevance change\n ✔ Multiple mappings independence\n ✔ Entity taxonomy mapping round trip\n\nOK (44 tests, 109 assertions)\n\n\u001b[0;32m✓ All tests passed!\u001b[0m\n\nsending incremental file list\ncomposer.json\n\nsent 223 bytes received 35 bytes 516.00 bytes\/sec\ntotal size is 106 speedup is 0.41\nsending incremental file list\ncomposer.lock\n\nsent 19,910 bytes received 35 bytes 39,890.00 bytes\/sec\ntotal size is 19,792 speedup is 0.99\nsending incremental file list\n.\/\ncomposer\/\ncomposer\/autoload_namespaces.php\ncomposer\/autoload_static.php\ncomposer\/installed.json\ncomposer\/installed.php\n\nsent 30,584 bytes received 136 bytes 61,440.00 bytes\/sec\ntotal size is 477,561 speedup is 15.55\nsending incremental file list\n\nsent 62 bytes received 12 bytes 148.00 bytes\/sec\ntotal size is 268 speedup is 3.62\nsending incremental file list\nController\/\nController\/BackupRestoreController.php\nController\/ChatController.php\nController\/ConfigController.php\nController\/ContentController.php\nController\/ContentPipelineController.php\nController\/ContractController.php\nController\/CriticsController.php\nController\/EntityController.php\nController\/OntologyController.php\nController\/PromptsController.php\nController\/RelationController.php\nController\/SemanticExplorerController.php\nController\/StopwordController.php\nController\/TaxonomyController.php\nController\/Api\/\nController\/Api\/ConfigController.php\nController\/Api\/ContentController.php\nController\/Api\/TaskController.php\nDomain\/Repository\/\nDomain\/Repository\/ChatSessionRepositoryInterface.php\nDomain\/Repository\/ChunkRepositoryInterface.php\nDomain\/Repository\/ContentConfigRepositoryInterface.php\nDomain\/Repository\/StopwordRepositoryInterface.php\nDomain\/ValueObject\/\nDomain\/ValueObject\/SessionMetadata.php\nFramework\/\nFramework\/Controller.php\nInfrastructure\/AI\/\nInfrastructure\/AI\/ChatService.php\nInfrastructure\/AI\/SemanticEnrichmentService.php\nInfrastructure\/Formatting\/\nInfrastructure\/Formatting\/ChatMessageFormatter.php\nInfrastructure\/Persistence\/\nInfrastructure\/Persistence\/ChatSessionRepository.php\nInfrastructure\/Persistence\/ChunkRepository.php\nInfrastructure\/Persistence\/SemanticSearchRepository.php\nInfrastructure\/Persistence\/StopwordRepository.php\nServiceProvider\/\nServiceProvider\/ChatServiceProvider.php\nServiceProvider\/ContentServiceProvider.php\nUseCases\/Chat\/\nUseCases\/Chat\/DeleteChatSessionUseCase.php\nUseCases\/Chat\/DeleteChatSessionUseCaseInterface.php\nUseCases\/Chat\/SendChatMessageUseCase.php\nUseCases\/Chat\/StreamingChatMessageUseCase.php\nUseCases\/Pipeline\/\nUseCases\/Pipeline\/RunPipelineUseCase.php\nView\/\nView\/layout.php\nView\/.mypy_cache\/\nView\/.mypy_cache\/.gitignore\nView\/.mypy_cache\/CACHEDIR.TAG\nView\/.mypy_cache\/missing_stubs\nView\/.mypy_cache\/3.13\/\nView\/.mypy_cache\/3.13\/__future__.data.json\nView\/.mypy_cache\/3.13\/__future__.meta.json\nView\/.mypy_cache\/3.13\/_ast.data.json\nView\/.mypy_cache\/3.13\/_ast.meta.json\nView\/.mypy_cache\/3.13\/_bisect.data.json\nView\/.mypy_cache\/3.13\/_bisect.meta.json\nView\/.mypy_cache\/3.13\/_blake2.data.json\nView\/.mypy_cache\/3.13\/_blake2.meta.json\nView\/.mypy_cache\/3.13\/_bz2.data.json\nView\/.mypy_cache\/3.13\/_bz2.meta.json\nView\/.mypy_cache\/3.13\/_codecs.data.json\nView\/.mypy_cache\/3.13\/_codecs.meta.json\nView\/.mypy_cache\/3.13\/_collections_abc.data.json\nView\/.mypy_cache\/3.13\/_collections_abc.meta.json\nView\/.mypy_cache\/3.13\/_compression.data.json\nView\/.mypy_cache\/3.13\/_compression.meta.json\nView\/.mypy_cache\/3.13\/_contextvars.data.json\nView\/.mypy_cache\/3.13\/_contextvars.meta.json\nView\/.mypy_cache\/3.13\/_ctypes.data.json\nView\/.mypy_cache\/3.13\/_ctypes.meta.json\nView\/.mypy_cache\/3.13\/_decimal.data.json\nView\/.mypy_cache\/3.13\/_decimal.meta.json\nView\/.mypy_cache\/3.13\/_frozen_importlib.data.json\nView\/.mypy_cache\/3.13\/_frozen_importlib.meta.json\nView\/.mypy_cache\/3.13\/_frozen_importlib_external.data.json\nView\/.mypy_cache\/3.13\/_frozen_importlib_external.meta.json\nView\/.mypy_cache\/3.13\/_hashlib.data.json\nView\/.mypy_cache\/3.13\/_hashlib.meta.json\nView\/.mypy_cache\/3.13\/_io.data.json\nView\/.mypy_cache\/3.13\/_io.meta.json\nView\/.mypy_cache\/3.13\/_operator.data.json\nView\/.mypy_cache\/3.13\/_operator.meta.json\nView\/.mypy_cache\/3.13\/_pickle.data.json\nView\/.mypy_cache\/3.13\/_pickle.meta.json\nView\/.mypy_cache\/3.13\/_queue.data.json\nView\/.mypy_cache\/3.13\/_queue.meta.json\nView\/.mypy_cache\/3.13\/_random.data.json\nView\/.mypy_cache\/3.13\/_random.meta.json\nView\/.mypy_cache\/3.13\/_sitebuiltins.data.json\nView\/.mypy_cache\/3.13\/_sitebuiltins.meta.json\nView\/.mypy_cache\/3.13\/_socket.data.json\nView\/.mypy_cache\/3.13\/_socket.meta.json\nView\/.mypy_cache\/3.13\/_ssl.data.json\nView\/.mypy_cache\/3.13\/_ssl.meta.json\nView\/.mypy_cache\/3.13\/_stat.data.json\nView\/.mypy_cache\/3.13\/_stat.meta.json\nView\/.mypy_cache\/3.13\/_struct.data.json\nView\/.mypy_cache\/3.13\/_struct.meta.json\nView\/.mypy_cache\/3.13\/_thread.data.json\nView\/.mypy_cache\/3.13\/_thread.meta.json\nView\/.mypy_cache\/3.13\/_warnings.data.json\nView\/.mypy_cache\/3.13\/_warnings.meta.json\nView\/.mypy_cache\/3.13\/_weakref.data.json\nView\/.mypy_cache\/3.13\/_weakref.meta.json\nView\/.mypy_cache\/3.13\/_weakrefset.data.json\nView\/.mypy_cache\/3.13\/_weakrefset.meta.json\nView\/.mypy_cache\/3.13\/abc.data.json\nView\/.mypy_cache\/3.13\/abc.meta.json\nView\/.mypy_cache\/3.13\/argparse.data.json\nView\/.mypy_cache\/3.13\/argparse.meta.json\nView\/.mypy_cache\/3.13\/array.data.json\nView\/.mypy_cache\/3.13\/array.meta.json\nView\/.mypy_cache\/3.13\/ast.data.json\nView\/.mypy_cache\/3.13\/ast.meta.json\nView\/.mypy_cache\/3.13\/atexit.data.json\nView\/.mypy_cache\/3.13\/atexit.meta.json\nView\/.mypy_cache\/3.13\/ba... [TRUNCATED-994f223b103ce7d1]",
"stderr": "",
"interrupted": false,
"isImage": false
}
}