From a606d603e2f764755e2aab16765ed7cd66ea3483 Mon Sep 17 00:00:00 2001 From: Jacek Date: Fri, 13 Mar 2026 00:54:48 +0100 Subject: [PATCH] update --- .claude/commands/koniec-pracy.md | 24 +++++ .scannerwork/.sonar_lock | 0 .scannerwork/report-task.txt | 6 ++ docs/CARL_WORKFLOW.md | 147 +++++++++++++++++++++++++++++++ sonar-project.properties | 16 ++++ 5 files changed, 193 insertions(+) create mode 100644 .scannerwork/.sonar_lock create mode 100644 .scannerwork/report-task.txt create mode 100644 docs/CARL_WORKFLOW.md create mode 100644 sonar-project.properties diff --git a/.claude/commands/koniec-pracy.md b/.claude/commands/koniec-pracy.md index 395f22e..ecf8a80 100644 --- a/.claude/commands/koniec-pracy.md +++ b/.claude/commands/koniec-pracy.md @@ -10,6 +10,30 @@ php phpunit.phar ``` All tests must pass. If any test fails, stop here — do not proceed to commit. Report the failures and wait for instructions. +## Step 1b: SonarQube scan + +Run the SonarQube scanner: +```bash +sonar-scanner +``` + +After the scan completes, query the SonarQube issues via MCP tool `mcp__sonarqube__issues` with `project_key: "shopPRO"` and `resolved: false`. Fetch all open issues (bugs, vulnerabilities, code smells). + +Then open `docs/TODO.md` and append the found issues at the bottom under a new section: + +```markdown +## SonarQube — {VERSION} ({DATE}) + +- [ ] [SEVERITY] FILENAME:LINE — description (rule) +- [ ] ... +``` + +Rules: +- Only add issues that are NOT already present in `docs/TODO.md` +- Group by type: first Bugs/Vulnerabilities, then Code Smells +- Skip INFO severity Code Smells — only include MINOR and above +- If there are no new issues, write: `## SonarQube — {VERSION} — brak nowych issues` + ## Step 2: Determine version Read the latest git tag to determine the current version number: diff --git a/.scannerwork/.sonar_lock b/.scannerwork/.sonar_lock new file mode 100644 index 0000000..e69de29 diff --git a/.scannerwork/report-task.txt b/.scannerwork/report-task.txt new file mode 100644 index 0000000..b538b8e --- /dev/null +++ b/.scannerwork/report-task.txt @@ -0,0 +1,6 @@ +projectKey=shopPRO +serverUrl=https://sonar.project-pro.pl +serverVersion=26.3.0.120487 +dashboardUrl=https://sonar.project-pro.pl/dashboard?id=shopPRO +ceTaskId=cbc52152-10fc-43df-9790-ce3d6ed1729f +ceTaskUrl=https://sonar.project-pro.pl/api/ce/task?id=cbc52152-10fc-43df-9790-ce3d6ed1729f diff --git a/docs/CARL_WORKFLOW.md b/docs/CARL_WORKFLOW.md new file mode 100644 index 0000000..7609690 --- /dev/null +++ b/docs/CARL_WORKFLOW.md @@ -0,0 +1,147 @@ +# CARL — Dynamiczne reguły dla Claude Code + +[CARL](https://github.com/ChristopherKahler/carl) (Context Augmentation & Reinforcement Layer) to system wstrzykiwania reguł do Claude Code — reguły ładują się **tylko gdy są potrzebne**, zamiast zapychać kontekst sesji regułami, których akurat nie używasz. + +Zainstalowany globalnie w `~/.carl/`. + +--- + +## Jak to działa + +Claude Code ma ograniczony kontekst sesji. CARL rozwiązuje problem "zbyt wielu reguł na raz": + +- **Domeny** — zestawy reguł uruchamiane automatycznie przez słowa kluczowe w prompcie +- **Star-commands** (`*dev`, `*review`, itp.) — tryby uruchamiane ręcznie przez wpisanie `*nazwatrybe` +- **Global** — reguły zawsze aktywne (minimalne, uniwersalne) + +Efekt: zamiast 50 reguł na każdą sesję, Claude dostaje 5–10 tych, które są relevantne teraz. + +--- + +## Struktura plików + +``` +~/.carl/ # Globalna konfiguracja (wszystkie projekty) +├── manifest # Rejestr domen (stany + słowa kluczowe) +├── global # Reguły zawsze aktywne +├── commands # Definicje star-commands +├── context # Reguły kontekstowe (rozmiar okna kontekstu) +└── {nazwa-domeny} # Twoja domena (bez rozszerzenia!) + +.carl/ # Konfiguracja lokalna (tylko ten projekt) +└── {nazwa-domeny} # Reguły specyficzne dla shopPRO +``` + +**Ważne:** Nazwy plików domen — **małe litery, bez rozszerzenia** (`phpdev`, nie `phpdev.carl`). + +--- + +## Dostępne star-commands + +Wpisz `*nazwa` na początku wiadomości lub w środku promptu, żeby przełączyć tryb: + +| Komenda | Tryb | Kiedy używać | +|---------|------|-------------| +| `*dev` | Development | Implementacja, szybkie zmiany bez tłumaczeń | +| `*review` | Code review | Przegląd kodu, bezpieczeństwo, edge cases | +| `*brief` | Zwięzłe odpowiedzi | Tylko bullet points, bez elaboracji | +| `*plan` | Planowanie | Eksploracja przed implementacją, opcje + tradeoffs | +| `*discuss` | Dyskusja | Burza mózgów, wiele podejść, bez skakania do kodu | +| `*debug` | Debugowanie | Systematyczna diagnoza, root cause analysis | +| `*explain` | Wyjaśnianie | Nauka, koncepty, stopniowe budowanie wiedzy | +| `*carl` | Pomoc CARL | Zarządzanie domenami, konfiguracja, pytania o CARL | + +### Przykłady + +``` +*dev Napraw błąd w summaryView() gdzie duplikuje zamówienia + +*review Przejrzyj OrderRepository::createFromBasket pod kątem bezpieczeństwa + +*brief Co robi CacheHandler::deletePattern() + +*plan Chcę dodać system rabatów do koszyka + +*discuss Czy lepiej rozdzielić ApiloRepository na sync i admin? +``` + +--- + +## Tworzenie własnej domeny (projekt) + +Kiedy masz zestaw reguł specyficznych dla shopPRO, utwórz lokalną domenę w `.carl/`. + +### Krok 1 — Plik domeny + +Utwórz `.carl/shoppro` (bez rozszerzenia): + +``` +# shopPRO Domain Rules +SHOPPRO_RULE_0=PHP < 8.0 — nie używaj match, named args, union types, str_contains +SHOPPRO_RULE_1=ORM: Medoo ($mdb), zawsze prepared statements, nigdy string concatenation +SHOPPRO_RULE_2=Namespace \Domain\ mapuje do autoload/Domain/ (D uppercase, a lowercase) +SHOPPRO_RULE_3=Testy: PHPUnit 9.6, pattern AAA, mock Medoo przez createMock(\medoo::class) +SHOPPRO_RULE_4=Cache: CacheHandler::deletePattern() do kasowania, TTL 86400, dane serialized +``` + +### Krok 2 — Wpis w manifeście + +Dodaj do `.carl/manifest` (lub `~/.carl/manifest` jeśli globalna): + +``` +SHOPPRO_STATE=active +SHOPPRO_RECALL=shopPRO, medoo, zamówienie, koszyk, OrderRepository, Domain +SHOPPRO_EXCLUDE= +SHOPPRO_ALWAYS_ON=false +``` + +- `RECALL` — słowa kluczowe które triggerują domenę (przecinek = OR) +- `ALWAYS_ON=true` — ładuj przy każdym prompcie (tylko dla naprawdę universalnych reguł) +- `EXCLUDE` — słowa które blokują domenę mimo dopasowania RECALL + +### Krok 3 — Weryfikacja + +Wpisz `*carl` w czacie i zapytaj: _"Pokaż mi aktywne domeny"_. + +--- + +## Zarządzanie przez Claude + +Zamiast ręcznie edytować pliki, możesz zarządzać CARL przez Claude: + +``` +*carl Dodaj domenę dla testów PHPUnit w shopPRO + +*carl Pokaż moją aktualną konfigurację + +*carl Wyłącz domenę SHOPPRO tymczasowo + +*carl Dodaj regułę do domeny dev: zawsze uruchamiaj ./test.ps1 po zmianach +``` + +Claude użyje skills `carl:manager` / `carl:tasks:*` do operacji na plikach. + +--- + +## Integracja z PAUL + +CARL i [PAUL](./PAUL_WORKFLOW.md) działają uzupełniająco: + +- **PAUL** strukturyzuje *proces* (plan → apply → unify) +- **CARL** dostarcza *reguły domenowe* wtedy gdy są potrzebne + +Praktycznie: podczas `/paul:apply` możesz prefixować `*dev` żeby Claude skupił się na kodzie bez elaboracji. Podczas `/paul:discuss` — `*discuss` żeby dostać pełną analizę opcji. + +--- + +## Dobre praktyki + +- **RECALL słowa** — używaj konkretnych, rzadkich słów żeby unikać false triggers. `medoo` lepsze niż `php`. +- **Mało reguł per domena** — 5–8 reguł to optymalnie. Więcej = wolniejsze matching, więcej tokenów. +- **ALWAYS_ON=false** domyślnie — ALWAYS_ON=true tylko dla reguł naprawdę universalnych (jak GLOBAL). +- **Star-commands przy dużych taskach** — na początku sesji wpisz `*dev` lub `*plan` żeby ustawić tryb. +- **Nie duplikuj CLAUDE.md** — CARL nie zastępuje CLAUDE.md. CLAUDE.md to architektura projektu. CARL to reguły zachowania Claude. + +--- + +*Docs: 2026-03-12* diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..fa8982b --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,16 @@ +sonar.projectKey=shopPRO +sonar.projectName=shopPRO +sonar.projectVersion=1.0 + +sonar.host.url=https://sonar.project-pro.pl/ +sonar.token=squ_93e67b49c4297694fbd9014ebcb53a37f5882f59 + +sonar.sources=autoload,admin,index.php,ajax.php,api.php,cron.php +sonar.tests=tests +sonar.exclusions=libraries/**,updates/**,temp/**,admin/layout/**,*.min.js,*.min.css + +sonar.language=php +sonar.sourceEncoding=UTF-8 + +sonar.php.coverage.reportPaths=coverage.xml +sonar.php.tests.reportPath=test-results.xml