Code Intelligence Actions
CRUD-Operationen für Code mit automatischen Subtasks
Grammatik
Syntax
<verb> <domain>:<komponente> in <projekt> <sprache> [optionen] "<beschreibung>"
Bestandteile
Beispiele
create code:controller in masterdev php "UserController"
read code:service in masterdev php "PaymentService verstehen"
update doku:page in masterdev markdown "/codeintelligence/hooks"
delete content:page in karlkratz html "alte Landingpage"
create config:file in freund json "neue Hook-Config"
update data:table in masterdev sql "users um role erweitern"
CRUD-Operationen (Verben)
Vier grundlegende Aktionen für alle Code-Operationen. Jede Aktion generiert automatisch die passenden Subtasks mit Projekt- und Sprach-spezifischen Prüfungen.
Die vier Verben
| Verb |
CRUD |
Zweck |
Output |
create |
Create |
Neuen Code erstellen |
Code + Tests |
read |
Read |
Code verstehen |
Bericht |
update |
Update |
Code ändern (refactor, fix, migrate) |
Code |
delete |
Delete |
Code entfernen |
- |
Beispiele
create code:service in masterdev php "UserService"
read code:controller in masterdev php "AuthController verstehen"
update code:service in masterdev php "UserService um Rollen erweitern"
delete code:helper in masterdev php "LegacyHelper entfernen"
Scope
Zuordnung dynamischer Elemente zu Kontext.
Prinzip
Jedes dynamische Element hat Scope-Attribute. * = gilt für alle.
Scope-Attribute
| Attribut |
Typ |
Beschreibung |
| project |
string[] |
* |
| domain |
string[] |
* |
| component |
string[] |
* |
| language |
string[] |
* |
Auflösung
create code:service in masterdev php "UserService"
↓
Filter 1: project = * OR contains "masterdev"
Filter 2: domain = * OR contains "code"
Filter 3: component = * OR contains "service"
Filter 4: language = * OR contains "php"
↓
Alle passenden Elemente werden angewendet.
Scope pro Element-Typ
| Element |
Typische Scopes |
| Sprache |
project, domain |
| Gate |
project, domain, language |
| Contract |
project, domain, component, language |
| Template |
project, domain, component, language |
| Subtask |
verb (implizit durch Template) |
Domain
Bereich, in dem die Aktion ausgeführt wird.
Typ
Dynamisch. Wird aus Projekt-Konfiguration geladen.
Quelle
config/{projekt}/domains.json
Bekannte Domains
| Domain |
Beschreibung |
| code |
Quellcode |
| doku |
Dokumentation |
| content |
Inhalte |
| config |
Konfiguration |
| data |
Datenbank |
Komponente
Typ des Objekts innerhalb einer Domain.
Typ
Dynamisch. Abhängig von Domain und Projekt.
Quelle
code_intelligence.code_entities → type
config/{projekt}/komponenten.json
Bekannte Komponenten
| Domain |
Komponenten |
| code |
controller, service, repository, model, helper, middleware, command, test, trait, interface, enum, checker, scanner, event, exception, validator |
| doku |
page, schema, api |
| content |
page, template, section, block, email-template, css |
| config |
file, env, rule, vhost, cert |
| data |
table, column, index, migration, seed, fk, view |
Projekt
Codebase, in der die Aktion ausgeführt wird.
Typ
Dynamisch. Registrierte Projekte im System.
Quelle
code_intelligence.code_projects → project_key
Bekannte Projekte
| Projekt |
Pfad |
| masterdev |
/var/www/dev.karlkratz.de |
| karlkratz |
/var/www/karlkratz.de |
| freund |
/var/www/tools/freund |
| tools |
/var/www/tools |
| ki-protokoll |
/var/www/tools/ki-protokoll |
| code-intelligence |
/var/www/tools/code-intelligence |
Sprache
Programmiersprache für code-Domain Aktionen.
Typ
Dynamisch. Abhängig von Projekt und Domain.
Quelle
code_intelligence.code_files → file_path extension
config/{projekt}/sprachen.json
Bekannte Sprachen
| Sprache |
Extension |
Syntax-Check |
project |
domain |
| php |
.php |
php -l |
* |
code |
| python |
.py |
python -m py_compile |
freund, tools |
code |
| javascript |
.js |
eslint |
* |
code |
| typescript |
.ts |
tsc --noEmit |
* |
code |
| css |
.css |
stylelint |
* |
code, content |
| html |
.html, .php |
- |
* |
content |
| sql |
.sql |
sqlfluff |
* |
data |
| json |
.json |
jq |
* |
config |
| yaml |
.yaml, .yml |
yamllint |
* |
config |
| markdown |
.md |
- |
* |
doku |
Optionen
Optionale Flags zur Steuerung der Ausführung.
Typ
Statisch. Gelten für alle Aktionen.
Bekannte Optionen
| Option |
Beschreibung |
Default |
| --dry-run |
Simulation ohne Änderungen |
false |
| --verbose |
Ausführliche Ausgabe |
false |
| --force |
Warnungen ignorieren, Aktion erzwingen |
false |
Beispiele
create code:service in freund python --dry-run "CacheService"
delete code:helper in masterdev php --force "LegacyHelper"
update data:table in masterdev sql --verbose "users erweitern"
Subtasks
Automatisch generierte Teilaufgaben basierend auf Verb, Domain und Template.
Typ
Dynamisch. Generiert aus Template bei Task-Erstellung.
Quelle
templates/{verb}/{domain}/{komponente}.json → subtasks[]
masterdev.tasks → parent_task_id
Status
| Status |
Beschreibung |
| pending |
Noch nicht gestartet |
| in_progress |
In Bearbeitung |
| completed |
Erfolgreich abgeschlossen |
| blocked |
Durch Gate oder Abhängigkeit blockiert |
Standard-Subtasks pro Verb
| Verb |
Subtasks |
Gates |
| create |
analyse, implementierung, validierung, abschluss |
syntax_check, cqs_clean, contract_check |
| read |
recherche, dokumentation |
- |
| update |
analyse, baseline, implementierung, validierung, abschluss |
syntax_check, cqs_clean, contract_check, impact_check |
| delete |
analyse, impact, entfernung, validierung |
impact_check, unit_test |
Subtask-Phasen
| Phase |
Beschreibung |
Output |
| analyse |
Anforderungen verstehen, Kontext sammeln |
Konzept, Abhängigkeiten |
| baseline |
Backup, aktuellen Stand dokumentieren |
Backup-ID, Diff-Base |
| implementierung |
Code schreiben, ändern, löschen |
Code-Änderungen |
| validierung |
Gates durchlaufen, Tests |
Gate-Results |
| abschluss |
Dokumentation, Cleanup |
Doku-Update |
| recherche |
Code lesen, analysieren |
Findings |
| dokumentation |
Ergebnisse festhalten |
Doku-Eintrag |
| impact |
Auswirkungen prüfen |
Impact-Report |
| entfernung |
Code/Ressourcen löschen |
Lösch-Log |
Gates
Qualitätsprüfungen, die vor Abschluss eines Subtasks bestanden werden müssen.
Typ
Dynamisch. Abhängig von Projekt, Domain und Sprache.
Quelle
config/{projekt}/gates.json
config/gates/{sprache}.json
Bekannte Gates
| Gate |
Command |
Blocking |
project |
domain |
language |
| syntax_check |
php -l / py_compile / eslint |
ja |
* |
code |
* |
| cqs_clean |
cqs {projekt} |
ja |
* |
code |
php |
| import_test |
python -c "import {module}" |
ja |
freund, tools |
code |
python |
| type_check |
phpstan / mypy / tsc |
nein |
* |
code |
php, python, typescript |
| unit_test |
phpunit / pytest |
nein |
* |
code |
php, python |
| contract_check |
freund code contracts |
ja |
* |
* |
* |
| impact_check |
freund code impact |
nein |
* |
code |
* |
Contracts
Regeln und Einschränkungen, die während der Ausführung gelten.
Typ
Dynamisch. Abhängig von Projekt und Domain.
Quelle
masterdev.contracts → project_key, domain
freund code contracts {file}
Severity
| Level |
Blocking |
Beschreibung |
| critical |
ja |
Muss behoben werden, blockiert Abschluss |
| major |
nein |
Sollte behoben werden, Warnung |
| minor |
nein |
Kann behoben werden, Info |
Contract-Typen
| Typ |
Beschreibung |
| forbidden |
Pattern darf nicht vorkommen |
| required |
Pattern muss vorkommen |
| warning |
Pattern wird gemeldet, nicht blockiert |
Bekannte Contracts
| Contract |
Typ |
Severity |
project |
domain |
language |
| no_hardcoded_paths |
forbidden |
critical |
* |
code, config |
* |
| no_inline_css |
forbidden |
major |
* |
code, content |
php, html |
| parameter_binding |
required |
critical |
* |
code, data |
php, python, sql |
| backup_before_edit |
required |
critical |
masterdev, karlkratz |
code |
php |
| no_curl_wget |
forbidden |
major |
* |
code |
* |
| no_direct_mysql |
forbidden |
major |
* |
code |
* |
| class_documentation |
required |
minor |
* |
code |
php, python |
Templates
Vorlagen für die Generierung von Subtasks und Code-Strukturen.
Typ
Dynamisch. Abhängig von Verb, Domain, Komponente und Sprache.
Quelle
config/templates/{verb}/{domain}/{komponente}.json
config/templates/{sprache}/{komponente}.json
Hierarchie
| Priorität |
Pfad |
Beispiel |
| 1 (höchste) |
config/{projekt}/templates/ |
config/masterdev/templates/service.json |
| 2 |
config/templates/{sprache}/ |
config/templates/php/service.json |
| 3 (fallback) |
config/templates/default/ |
config/templates/default/service.json |
Placeholders
| Placeholder |
Beschreibung |
Beispiel |
| {projekt} |
Projekt-Key |
masterdev |
| {name} |
Komponenten-Name |
UserService |
| {namespace} |
PHP/Python Namespace |
App\Services |
| {pfad} |
Dateipfad |
src/Services/UserService.php |
| {datum} |
Erstellungsdatum |
2026-01-14 |
| {autor} |
Ersteller |
claude-code |
Bekannte Templates
| Domain |
Komponente |
Sprachen |
project |
| code |
service |
php, python |
* |
| code |
repository |
php |
masterdev, karlkratz |
| code |
test |
php, python |
* |
| code |
interface |
php |
* |
| code |
controller |
php |
masterdev, karlkratz |
| code |
middleware |
php |
masterdev, karlkratz |
| code |
model |
php, python |
* |
| code |
command |
php, python |
* |
| code |
checker |
php, python |
* |
| code |
event |
php |
masterdev, karlkratz |
| code |
exception |
php |
* |
| config |
rule |
yaml |
* |
| config |
vhost |
- |
* |
| content |
email-template |
html |
masterdev, karlkratz |
| content |
css |
css |
* |
| doku |
page |
markdown |
* |
| doku |
schema |
markdown |
* |
| data |
migration |
sql |
* |
| data |
fk |
sql |
* |
Prozess
Beispiel: Python-Service im Projekt freund erstellen.
Eingabe
create code:service in freund python "CacheService"
1. Parsing
| Element |
Wert |
Typ |
| verb |
create |
statisch |
| domain |
code |
dynamisch |
| komponente |
service |
dynamisch |
| projekt |
freund |
dynamisch |
| sprache |
python |
dynamisch |
| beschreibung |
CacheService |
input |
2. Scope-Auflösung
Filter: project=freund, domain=code, component=service, language=python
Sprache
| Sprache |
project |
domain |
Match |
| php |
* |
code |
- |
| python |
freund, tools |
code |
✓ |
Template
| Domain |
Komponente |
Sprachen |
project |
Match |
| code |
controller |
php |
masterdev, karlkratz |
- |
| code |
service |
php, python |
* |
✓ |
Gates
| Gate |
project |
domain |
language |
Match |
| syntax_check |
* |
code |
* |
✓ |
| cqs_clean |
* |
code |
php |
- |
| import_test |
freund, tools |
code |
python |
✓ |
| type_check |
* |
code |
php, python, typescript |
✓ |
| unit_test |
* |
code |
php, python |
✓ |
| contract_check |
* |
* |
* |
✓ |
| impact_check |
* |
code |
* |
✓ |
Contracts
| Contract |
project |
domain |
language |
Match |
| no_hardcoded_paths |
* |
code, config |
* |
✓ |
| no_inline_css |
* |
code, content |
php, html |
- |
| parameter_binding |
* |
code, data |
php, python, sql |
✓ |
| backup_before_edit |
masterdev, karlkratz |
code |
php |
- |
| no_curl_wget |
* |
code |
* |
✓ |
| no_direct_mysql |
* |
code |
* |
✓ |
| class_documentation |
* |
code |
php, python |
✓ |
3. Subtask-Generierung
Verb create → Template-Subtasks:
| # |
Subtask |
Gates |
Status |
| 1 |
analyse |
- |
pending |
| 2 |
implementierung |
syntax_check, import_test |
pending |
| 3 |
validierung |
type_check, unit_test, contract_check |
pending |
| 4 |
abschluss |
impact_check |
pending |
4. Task erstellt
Task #3400: create code:service in freund python "CacheService"
├── Subtask #3401: analyse
├── Subtask #3402: implementierung
│ └── Gates: syntax_check, import_test
├── Subtask #3403: validierung
│ └── Gates: type_check, unit_test, contract_check
└── Subtask #3404: abschluss
└── Gates: impact_check
Aktive Contracts:
- no_hardcoded_paths (critical)
- parameter_binding (critical)
- no_curl_wget (major)
- no_direct_mysql (major)
- class_documentation (minor)
Template: config/templates/python/service.json
Ziel: /var/www/tools/freund/src/services/cache_service.py
Simulation
Vollständiger Prozess: PaymentService in masterdev refactoren.
Eingabe
update code:service in masterdev php "PaymentService auf neue API umstellen"
Phase 0: Parsing
| Element |
Wert |
Validierung |
| verb |
update |
statisch → OK |
| domain |
code |
config/masterdev/domains.json → OK |
| komponente |
service |
config/masterdev/komponenten.json → OK |
| projekt |
masterdev |
code_intelligence.code_projects → OK |
| sprache |
php |
Scope-Match: project=*, domain=code → OK |
| optionen |
- |
- |
| beschreibung |
PaymentService auf neue API umstellen |
- |
Phase 1: Scope-Auflösung
Filter: project=masterdev, domain=code, component=service, language=php
1.1 Template laden
| Priorität |
Pfad |
Existiert |
| 1 |
config/masterdev/templates/update/code/service.json |
nein |
| 2 |
config/templates/php/service.json |
ja ✓ |
| 3 |
config/templates/default/service.json |
- |
→ Geladen: config/templates/php/service.json
1.2 Gates filtern
| Gate |
project |
domain |
language |
Match |
| syntax_check |
* |
code |
* |
✓ |
| cqs_clean |
* |
code |
php |
✓ |
| import_test |
freund, tools |
code |
python |
- |
| type_check |
* |
code |
php, python, ts |
✓ |
| unit_test |
* |
code |
php, python |
✓ |
| contract_check |
* |
* |
* |
✓ |
| impact_check |
* |
code |
* |
✓ |
→ Aktive Gates: syntax_check, cqs_clean, type_check, unit_test, contract_check, impact_check
1.3 Contracts filtern
| Contract |
project |
domain |
language |
Match |
| no_hardcoded_paths |
* |
code, config |
* |
✓ |
| no_inline_css |
* |
code, content |
php, html |
✓ |
| parameter_binding |
* |
code, data |
php, python, sql |
✓ |
| backup_before_edit |
masterdev, karlkratz |
code |
php |
✓ |
| no_curl_wget |
* |
code |
* |
✓ |
| no_direct_mysql |
* |
code |
* |
✓ |
| class_documentation |
* |
code |
php, python |
✓ |
→ Aktive Contracts: 7 (davon 2 critical, 3 major, 2 minor)
Phase 2: Task-Erstellung
INSERT INTO masterdev.tasks (title, type, status, project, domain, component, language)
VALUES ('update code:service in masterdev php "PaymentService..."', 'code_action', 'pending', 'masterdev', 'code', 'service', 'php')
→ Task #3500 erstellt
2.1 Subtasks generieren
Template für update definiert 5 Subtasks:
| # |
Subtask |
Gates |
parent_id |
| 1 |
analyse |
- |
3500 |
| 2 |
baseline |
- |
3500 |
| 3 |
implementierung |
syntax_check, cqs_clean |
3500 |
| 4 |
validierung |
type_check, unit_test, contract_check |
3500 |
| 5 |
abschluss |
impact_check |
3500 |
INSERT INTO masterdev.tasks (parent_task_id, title, order_num, gates, status)
VALUES
(3500, 'analyse', 1, NULL, 'pending'), → #3501
(3500, 'baseline', 2, NULL, 'pending'), → #3502
(3500, 'implementierung', 3, '["syntax_check","cqs_clean"]', 'pending'), → #3503
(3500, 'validierung', 4, '["type_check","unit_test","contract_check"]', 'pending'), → #3504
(3500, 'abschluss', 5, '["impact_check"]', 'pending') → #3505
Phase 3: Ausführung
Subtask #3501: analyse
| Schritt |
Aktion |
Quelle |
| 1 |
Entity finden |
db_code search "PaymentService" |
| 2 |
Abhängigkeiten laden |
code_intelligence.code_dependencies |
| 3 |
Contracts anzeigen |
freund code contracts src/Services/PaymentService.php |
| 4 |
Impact vorberechnen |
freund code impact PaymentService |
Output:
- Datei: /var/www/dev.karlkratz.de/src/Services/PaymentService.php
- Zeilen: 245
- Abhängigkeiten: 12 (OrderController, CheckoutService, ...)
- Aktive Contracts: 7
- Geschätzter Impact: MEDIUM (12 abhängige Dateien)
→ Status: completed
Subtask #3502: baseline
| Schritt |
Aktion |
Ergebnis |
| 1 |
Backup erstellen |
FileBackupService->backup() |
| 2 |
Backup-ID speichern |
backup_id = 4711 |
| 3 |
Diff-Base setzen |
git rev-parse HEAD |
INSERT INTO karlkratz_de.file_backup_history (file_path, reason, user_type)
VALUES ('/var/www/.../PaymentService.php', 'Baseline vor Refactoring: PaymentService auf neue API', 'claude-code')
→ backup_id: 4711
→ Status: completed
Subtask #3503: implementierung
| Schritt |
Aktion |
Gate |
| 1 |
Code ändern |
- |
| 2 |
Syntax prüfen |
php -l PaymentService.php |
| 3 |
CQS prüfen |
cqs masterdev |
→ Edit: PaymentService.php (87 Zeilen geändert)
Gate: syntax_check
$ php -l src/Services/PaymentService.php
No syntax errors detected
→ PASSED
Gate: cqs_clean
$ cqs masterdev
PaymentService.php: 0 issues
→ PASSED
→ Status: completed
Subtask #3504: validierung
| Gate |
Command |
Ergebnis |
Blocking |
| type_check |
phpstan analyse src/Services/PaymentService.php |
0 errors |
nein |
| unit_test |
phpunit tests/Services/PaymentServiceTest.php |
12/12 passed |
nein |
| contract_check |
freund code contracts src/Services/PaymentService.php |
0 violations |
ja |
Gate: type_check
$ phpstan analyse src/Services/PaymentService.php --level=6
[OK] No errors
→ PASSED
Gate: unit_test
$ phpunit tests/Services/PaymentServiceTest.php
OK (12 tests, 34 assertions)
→ PASSED
Gate: contract_check
$ freund code contracts src/Services/PaymentService.php
Checking 7 contracts...
✓ no_hardcoded_paths
✓ no_inline_css
✓ parameter_binding
✓ backup_before_edit (backup_id: 4711)
✓ no_curl_wget
✓ no_direct_mysql
✓ class_documentation
→ PASSED (0 violations)
→ Status: completed
Subtask #3505: abschluss
| Schritt |
Aktion |
Ergebnis |
| 1 |
Impact Check |
freund code impact PaymentService |
| 2 |
Code Intelligence updaten |
./change.sh |
| 3 |
Dokumentation |
doku update |
Gate: impact_check
$ freund code impact PaymentService --after
Analysing changes...
- Changed: 87 lines
- Affected files: 12
- Breaking changes: 0
- API compatibility: maintained
→ PASSED
$ ./change.sh src/Services/PaymentService.php "Refactoring: PaymentService auf neue API umgestellt"
→ Entity updated in code_intelligence
→ Embeddings regenerated
→ Graph updated
→ Status: completed
Phase 4: Task-Abschluss
UPDATE masterdev.tasks SET status = 'completed', completed_at = NOW()
WHERE id = 3500
Task #3500: update code:service in masterdev php "PaymentService auf neue API umstellen"
├── #3501 analyse [completed]
├── #3502 baseline [completed] backup_id=4711
├── #3503 implementierung [completed] gates: 2/2 passed
├── #3504 validierung [completed] gates: 3/3 passed
└── #3505 abschluss [completed] gates: 1/1 passed
Dauer: 12 min
Gates: 6/6 passed
Contracts: 7/7 satisfied
Backup: #4711 (restore verfügbar)
Architektur
Modulares Prozess-System mit Vererbung und Conditions.
Dateistruktur
config/prozesse/
├── _schema/ # JSON Schemas
├── _base/ # Verben, Domains, Gates, Contracts
├── _components/ # Sprach-spezifisch (php, python, sql)
├── _projects/ # Projekt-Overrides
└── prozesse/ # Konkrete Prozess-Definitionen
Vererbung
| Ebene |
Datei |
Inhalt |
| 1 |
_base/verbs.json |
Subtasks pro Verb |
| 2 |
_base/domains.json |
Contracts, Tools pro Domain |
| 3 |
_components/*.json |
Gates, Pfade pro Sprache |
| 4 |
_projects/*.json |
Projekt-spezifische Overrides |
| 5 |
prozesse/*.json |
Finale Definition |
Merge-Logik
extends[0] + extends[1] + extends[2]
+ _projects/{projekt}.json
+ prozess-overrides
= Finale Definition
Arrays: _add = anhängen, _remove = entfernen
Objects: Deep merge (später überschreibt)
Conditions
{
"contracts": ["no_hardcoded_paths"],
"contracts_if": [
{"when": {"project": ["masterdev"]}, "add": ["backup_before_edit"]},
{"when": {"component": "repository"}, "add": ["no_direct_sql"]},
{"when": {"verb": "delete"}, "add": ["require_impact_approval"]}
]
}
| Operator |
Beispiel |
Bedeutung |
| Array |
{"project": ["a", "b"]} |
project IN [a, b] |
| Wildcard |
{"project": "*"} |
immer |
| Negation |
{"project": "!freund"} |
project != freund |
| AND |
{"verb": "delete", "domain": "data"} |
beide müssen matchen |
Variablen
| Variable |
Transformation |
Beispiel |
| {name} |
wie eingegeben |
UserService |
| {name_snake} |
snake_case |
user_service |
| {name_pascal} |
PascalCase |
UserService |
| {name_kebab} |
kebab-case |
user-service |
| {path} |
computed |
src/Services/UserService.php |
| {namespace} |
computed |
App\Services |
| {date} |
$NOW |
2026-01-14 |
| {author} |
default |
claude-code |
Beispiel: Minimale Prozess-Definition
{
"id": "create-code-service-php",
"extends": ["verbs/create", "domains/code", "components/php"],
"component": "service",
"projects": "*",
"contracts_if": [
{"when": {"project": ["masterdev"]}, "add": ["backup_before_edit"]}
],
"template": {
"skeleton": "templates/php/service.tpl",
"path": "src/Services/{name}Service.php"
}
}
Validierung
prozess validate create-code-service-php
# Prüft:
# ✓ Schema-Konformität
# ✓ extends-Referenzen existieren
# ✓ Gates/Contracts existieren
# ✓ Variablen vollständig