diff --git a/README.md b/README.md
index 69c7fbf..af7b59c 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,8 @@
-# Soneta ORM AI Skills
+# Soneta / enova365 AI Skills
-Zestaw skills dla asystentów AI (Claude, Cursor, Windsurf, itp.) wspierających programowanie z ORM platformy **enova365/Soneta Enterprise**.
+Zestaw skills dla asystentów AI (Claude, Cursor, Windsurf, itp.) wspierających programowanie i projektowanie z platformą **enova365/Soneta Enterprise**.
-## 🎯 Cel projektu
-
-Skille zawierają dokumentację i wzorce programistyczne, które pozwalają asystentom AI efektywnie pomagać w tworzeniu dodatków dla systemu enova365. Dzięki nim AI rozumie specyfikę platformy Soneta: mapowanie obiektowo-relacyjne, strukturę modułów, zarządzanie sesjami i transakcjami.
-
-## 📦 Dostępne skille
+## Dostępne skille
### 1. soneta-programming-basics
@@ -19,13 +15,9 @@ Fundamentalne klasy ORM platformy enova365/Soneta Enterprise.
- Paczki danych (`Datapack`, `GuidedRow`) i synchronizacja
- Kontekst aplikacji (`Context`)
-**Kiedy używać:**
-- Pytania o podstawowe klasy logiki biznesowej
-- Praca z sesjami i transakcjami
-- Tworzenie, modyfikacja i usuwanie obiektów
-- Zrozumienie hierarchii `Row` → `Table` → `Module`
+**Kiedy używać:** pytania o klasy logiki biznesowej, sesje, transakcje, hierarchię `Row` → `Table` → `Module`.
-### 2. enova365-business-xml
+### 2. soneta-business-xml
Generator plików `business.xml` definiujących strukturę obiektów biznesowych.
@@ -36,116 +28,66 @@ Generator plików `business.xml` definiujących strukturę obiektów biznesowych
- Klucze i indeksy
- Wzorce: słowniki, dokumenty z pozycjami, historia zmian
-**Kiedy używać:**
-- Tworzenie nowego modułu biznesowego
-- Definiowanie encji do przechowywania w bazie
-- Tworzenie relacji między obiektami
-- Generowanie plików `*.business.xml`
+**Kiedy używać:** tworzenie nowego modułu biznesowego, definiowanie encji, generowanie plików `*.business.xml`.
-## 🚀 Instalacja
+### 3. soneta-form-xml
-### Claude Desktop / Claude.ai
+Tworzenie plików `form.xml` opisujących formularze i widoki UI platformy enova365.
-Skopiuj folder ze skillem do katalogu skills w konfiguracji Claude.
+**Zakres:**
+- Formularze stron (`pageform.xml`), widoki list (`viewform.xml`), lookupy (`lookupform.xml`), gridy (`gridform.xml`)
+- Elementy: `DataForm`, `Page`, `Group`, `Grid`, `Field`, `Row`, `Stack`, `Flow`, `Command`
+- Atrybuty: `EditValue`, `DataContext`, `Visibility`, `RowCondition`, `Renderable`, `CaptionHtml`
+- Warunkowe formatowanie, wiązanie danych, wzorce UI
+
+**Kiedy używać:** tworzenie zakładek, widoków list, formularzy i lookupów dla enova365.
+
+### 4. soneta-addon-planning
+
+Planowanie projektów dodatków dla platformy enova365/Soneta Enterprise.
+
+**Zakres:**
+- Interaktywny proces planowania w 3 etapach (wizja, architektura, specyfikacja szczegółowa)
+- Struktura danych (tabele, relacje)
+- Elementy konfigurowalne, definicje list i menu
+- Formularze, workery i raporty
+- Dokumentacja implementacyjna z TODO
+
+**Kiedy używać:** planowanie nowego modułu/dodatku, przygotowanie założeń projektu, specyfikacja funkcjonalna.
+
+### 5. soneta-ui-style
+
+System projektowy (design system) Soneta / enova365 do budowania aplikacji webowych.
+
+**Zakres:**
+- Palety kolorów (motywy jasny/ciemny) — szmaragdowy `#016E46` jako kolor główny
+- Typografia (Roboto), layout, system odstępów (skala 4px)
+- Komponenty UI: przyciski, formularze, tabele, sidebar, header, kafelki, modale
+- Cienie, ikony SVG (~370 ikon liniowych), animacje, responsywność
+- Enterprise minimalism, flat design z subtelnymi cieniami
+
+**Kiedy używać:** projektowanie stron/aplikacji w stylu enova365, dashboardy, formularze, strony logowania, panele administracyjne.
+
+## Powiązania między skillami
+
+Skille są zaprojektowane do współpracy:
+
+1. **soneta-addon-planning** → planuje strukturę nowego dodatku
+2. **soneta-business-xml** → definiuje obiekty biznesowe w XML
+3. **soneta-programming-basics** → pokazuje jak pracować z wygenerowanymi klasami C#
+4. **soneta-form-xml** → tworzy formularze UI dla obiektów
+5. **soneta-ui-style** → styluje interfejs webowy zgodnie z design systemem enova365
+
+## Instalacja
+
+### Claude Code
+
+Skopiuj folder ze skillem do `~/.claude/skills/`.
### Cursor / Windsurf / inne IDE
Dodaj zawartość skilli do kontekstu projektu lub rules.
-## 📁 Struktura repozytorium
-
-```
-soneta-ai-skills/
-├── README.md
-├── soneta-programming-basics/
-│ ├── SKILL.md # Główna dokumentacja
-│ └── references/
-│ ├── session-login.md # BusApplication, Database, Login, Session
-│ ├── datapack-guidedrow.md # Paczki danych, GuidedRow, synchronizacja
-│ ├── context.md # Klasa Context, komunikacja UI ↔ logika
-│ └── examples.md # Przykłady kodu i wzorce użycia
-│
-└── enova365-business-xml/
- ├── SKILL.md # Główna dokumentacja
- ├── assets/
- │ └── business_struct.xsd # Schemat XSD dla walidacji
- └── references/
- ├── modules-catalog.md # Katalog modułów enova365
- ├── table-reference.md # Dokumentacja atrybutów table i col
- ├── relations-guide.md # Tworzenie relacji między obiektami
- └── examples.md # Przykłady z rzeczywistych modułów
-```
-
-## 💡 Przykłady użycia
-
-### Tworzenie nowego obiektu
-
-```csharp
-using (var session = login.CreateSession(false, false, "Dodawanie"))
-{
- var tm = session.GetTowary();
-
- using (var transaction = session.Logout(editMode: true))
- {
- var towar = new Towar();
- tm.Towary.AddRow(towar);
- towar.Kod = "NOWY001";
- towar.Nazwa = "Nowy towar";
- transaction.Commit();
- }
-
- session.Save();
-}
-```
-
-### Definicja obiektu w business.xml
-
-```xml
-
-```
-
-## 🔗 Powiązania między skillami
-
-Skille są zaprojektowane do współpracy:
-
-1. **enova365-business-xml** → definiuje strukturę obiektów
-2. **soneta-programming-basics** → pokazuje jak pracować z wygenerowanymi klasami
-
-Generator `BusinessGenerator` automatycznie tworzy klasy C# z plików `*.business.xml` podczas kompilacji projektu.
-
-## 📝 Konwencje nazewnicze
-
-| Element | Konwencja | Przykład |
-|---------|-----------|----------|
-| Klasa wiersza | PascalCase, l.poj. | `Towar`, `Kontrahent` |
-| Klasa tabeli | PascalCase, l.mn. | `Towary`, `Kontrahenci` |
-| Klasa modułu | Nazwa + Module | `TowaryModule` |
-| Klucz | Wg + nazwa kolumny | `WgKodu`, `WgNazwy` |
-| Namespace | Soneta.NazwaModułu | `Soneta.Towary` |
-
-Obiekty biznesowe (domenowe) nazywane są po polsku: `Towar`, `Faktura`, `Kontrahent`.
-Obiekty systemowe (techniczne) po angielsku: `Session`, `Context`, `Row`.
-
-## 🤝 Współpraca
-
-Zapraszamy do zgłaszania issues i pull requestów. Szczególnie cenne są:
-- Nowe przykłady kodu
-- Poprawki w dokumentacji
-- Dodatkowe wzorce programistyczne
-
-## 📄 Licencja
+## Licencja
MIT
-
-## 🔗 Linki
-
-- [Dokumentacja enova365](https://www.enova.pl/)
-- [Soneta Developer Portal](https://developer.enova365.pl/)
diff --git a/soneta-form-xml-workspace/iteration-1/benchmark.json b/soneta-form-xml-workspace/iteration-1/benchmark.json
deleted file mode 100644
index a4aeab6..0000000
--- a/soneta-form-xml-workspace/iteration-1/benchmark.json
+++ /dev/null
@@ -1,187 +0,0 @@
-{
- "metadata": {
- "skill_name": "soneta-form-xml",
- "skill_path": "/Users/marcin/d/Skills/soneta-form-xml",
- "executor_model": "claude-sonnet-4-6",
- "timestamp": "2026-03-05T12:00:00Z",
- "evals_run": ["pageform-z-gridem", "viewform-lista", "warunkowa-widocznosc"],
- "runs_per_configuration": 1
- },
-
- "runs": [
- {
- "eval_id": 1,
- "eval_name": "pageform-z-gridem",
- "configuration": "with_skill",
- "run_number": 1,
- "result": {
- "pass_rate": 1.0,
- "passed": 8,
- "failed": 0,
- "total": 8,
- "time_seconds": 37.8,
- "tokens": 32707,
- "tool_calls": 9,
- "errors": 0
- },
- "expectations": [
- {"text": "Plik zaczyna się od ", "passed": true, "evidence": "Poprawna deklaracja XML"},
- {"text": "DataForm ma Priority=\"10\"", "passed": true, "evidence": "Atrybut w elemencie root"},
- {"text": "Page ma DataContext=\"{DataSource}\"", "passed": true, "evidence": "Linia 8"},
- {"text": "Trzy grupy: Dane podstawowe, Warunki, Pozycje", "passed": true, "evidence": "Linie 10,17,30"},
- {"text": "Układ Row>Stack w grupie Warunki", "passed": true, "evidence": "Linie 18-28"},
- {"text": "Grid: IsToolbarVisible, EditInPlace, NewInPlace", "passed": true, "evidence": "Linie 31-35"},
- {"text": "Footer=Sum na Ilosc i Wartosc", "passed": true, "evidence": "Linie 38,40"},
- {"text": "Binding {NazwaPola}", "passed": true, "evidence": "EditValue we wszystkich polach"}
- ]
- },
- {
- "eval_id": 1,
- "eval_name": "pageform-z-gridem",
- "configuration": "without_skill",
- "run_number": 1,
- "result": {
- "pass_rate": 0.5,
- "passed": 4,
- "failed": 4,
- "total": 8,
- "time_seconds": 17.7,
- "tokens": 4263,
- "tool_calls": 3,
- "errors": 0
- },
- "expectations": [
- {"text": "Plik zaczyna się od ", "passed": true, "evidence": "Poprawna deklaracja"},
- {"text": "DataForm ma Priority=\"10\"", "passed": false, "evidence": "Używa zamiast atrybutu"},
- {"text": "Page ma DataContext=\"{DataSource}\"", "passed": false, "evidence": "Brak Page i DataContext"},
- {"text": "Trzy grupy: Dane podstawowe, Warunki, Pozycje", "passed": false, "evidence": "Grupy z Name= zamiast CaptionHtml="},
- {"text": "Układ Row>Stack w grupie Warunki", "passed": true, "evidence": "Row>Stack obecne"},
- {"text": "Grid: IsToolbarVisible, EditInPlace, NewInPlace", "passed": true, "evidence": "Atrybuty obecne"},
- {"text": "Footer=Sum na Ilosc i Wartosc", "passed": true, "evidence": "Footer=Sum na Column"},
- {"text": "Binding {NazwaPola}", "passed": false, "evidence": "Brak EditValue — używa Name= na Control"}
- ]
- },
- {
- "eval_id": 2,
- "eval_name": "viewform-lista",
- "configuration": "with_skill",
- "run_number": 1,
- "result": {
- "pass_rate": 1.0,
- "passed": 7,
- "failed": 0,
- "total": 7,
- "time_seconds": 38.4,
- "tokens": 34304,
- "tool_calls": 10,
- "errors": 0
- },
- "expectations": [
- {"text": "Poprawna deklaracja XML", "passed": true, "evidence": "Linia 1"},
- {"text": "xmlns='http://www.enova.pl/schema/form.xsd'", "passed": true, "evidence": "Poprawny namespace"},
- {"text": "Element Grid", "passed": true, "evidence": "Grid z ViewType=Folder"},
- {"text": "OrderBy='NazwiskoImie'", "passed": true, "evidence": "Linia 12"},
- {"text": "IsToolbarVisible i IsFilterRowVisible", "passed": true, "evidence": "Linie 10-11"},
- {"text": "6 pól: Kod, NazwiskoImie, NumerPracownika, Dzial, Stanowisko, DataZatrudnienia", "passed": true, "evidence": "Linie 13-18"},
- {"text": "Dzial ma Width='*'", "passed": true, "evidence": "Linia 16"}
- ]
- },
- {
- "eval_id": 2,
- "eval_name": "viewform-lista",
- "configuration": "without_skill",
- "run_number": 1,
- "result": {
- "pass_rate": 0.43,
- "passed": 3,
- "failed": 4,
- "total": 7,
- "time_seconds": 13.9,
- "tokens": 3821,
- "tool_calls": 3,
- "errors": 0
- },
- "expectations": [
- {"text": "Poprawna deklaracja XML", "passed": true, "evidence": "Linia 1"},
- {"text": "xmlns='http://www.enova.pl/schema/form.xsd'", "passed": false, "evidence": "Błędny namespace: http://www.soneta.pl/viewform"},
- {"text": "Element Grid", "passed": false, "evidence": " lowercase — błędna nazwa elementu"},
- {"text": "OrderBy='NazwiskoImie'", "passed": false, "evidence": "defaultsort= zamiast OrderBy="},
- {"text": "IsToolbarVisible i IsFilterRowVisible", "passed": false, "evidence": "Atrybuty lowercase — błędna składnia"},
- {"text": "6 pól: Kod, NazwiskoImie, NumerPracownika, Dzial, Stanowisko, DataZatrudnienia", "passed": true, "evidence": " z właściwymi nazwami"},
- {"text": "Dzial ma Width='*'", "passed": true, "evidence": "width='*' na Dzial"}
- ]
- },
- {
- "eval_id": 3,
- "eval_name": "warunkowa-widocznosc",
- "configuration": "with_skill",
- "run_number": 1,
- "result": {
- "pass_rate": 1.0,
- "passed": 5,
- "failed": 0,
- "total": 5,
- "time_seconds": 72.7,
- "tokens": 37262,
- "tool_calls": 10,
- "errors": 0
- },
- "expectations": [
- {"text": "Visibility='{?Pole=Wartość}'", "passed": true, "evidence": "Linia 30: {?TypKlienta=Korporacyjny}"},
- {"text": "OR: {?Status=Premium or Status=VIP}", "passed": true, "evidence": "Linia 48"},
- {"text": "Negacja: {?!Status=Aktywny}", "passed": true, "evidence": "Linia 65"},
- {"text": "Class='Collapsable' na Group", "passed": true, "evidence": "Linia 109"},
- {"text": "Renderable dla licencji", "passed": true, "evidence": "Linia 110: Renderable='{Licence.HAN}'"}
- ]
- },
- {
- "eval_id": 3,
- "eval_name": "warunkowa-widocznosc",
- "configuration": "without_skill",
- "run_number": 1,
- "result": {
- "pass_rate": 0.0,
- "passed": 0,
- "failed": 5,
- "total": 5,
- "time_seconds": 50.3,
- "tokens": 5896,
- "tool_calls": 3,
- "errors": 0
- },
- "expectations": [
- {"text": "Visibility='{?Pole=Wartość}'", "passed": false, "evidence": "RowCondition= (nie istnieje) zamiast Visibility"},
- {"text": "OR: {?Status=Premium or Status=VIP}", "passed": false, "evidence": "SQL-like OR syntax zamiast {?... or ...}"},
- {"text": "Negacja: {?!Status=Aktywny}", "passed": false, "evidence": "NOT (...) zamiast {?!...}"},
- {"text": "Class='Collapsable' na Group", "passed": false, "evidence": "Collapsable='True' atrybut zamiast Class="},
- {"text": "Renderable dla licencji", "passed": false, "evidence": "Session.Features.IsAvailable() — błędna składnia"}
- ]
- }
- ],
-
- "run_summary": {
- "with_skill": {
- "pass_rate": {"mean": 1.0, "stddev": 0.0, "min": 1.0, "max": 1.0},
- "time_seconds": {"mean": 49.6, "stddev": 18.1, "min": 37.8, "max": 72.7},
- "tokens": {"mean": 34758, "stddev": 2284, "min": 32707, "max": 37262}
- },
- "without_skill": {
- "pass_rate": {"mean": 0.31, "stddev": 0.22, "min": 0.0, "max": 0.5},
- "time_seconds": {"mean": 27.3, "stddev": 19.1, "min": 13.9, "max": 50.3},
- "tokens": {"mean": 4660, "stddev": 1080, "min": 3821, "max": 5896}
- },
- "delta": {
- "pass_rate": "+0.69",
- "time_seconds": "+22.3",
- "tokens": "+30098"
- }
- },
-
- "notes": [
- "Skill daje 100% pass rate we wszystkich 3 ewalach vs 31% bez skilla — poprawa o 69 punktów procentowych",
- "Bez skilla model halucynuje nieistniejące elementy XML: , , , , RowCondition=",
- "Najsłabszy wynik bez skilla: warunkowa-widocznosc (0%) — model zna pojęcia ale ma zupełnie błędną składnię",
- "Skill kosztuje więcej tokenów (30k vs 4.7k) i czasu (50s vs 27s) — uzasadnione biorąc pod uwagę czytanie SKILL.md i ELEMENTS.md",
- "Asercja 'Poprawna deklaracja XML' zawsze przechodzi — mało dyskryminująca, ale utrzymana dla kompletności"
- ]
-}
diff --git a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/eval_metadata.json b/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/eval_metadata.json
deleted file mode 100644
index f17b477..0000000
--- a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/eval_metadata.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "eval_id": 1,
- "eval_name": "pageform-z-gridem",
- "prompt": "Utwórz plik Zamowienie.Szczegoly.pageform.xml dla platformy enova365. Zakładka powinna zawierać:\n- Grupę 'Dane podstawowe' z polami: Numer (szerokość 20), DataZlozenia (szerokość 15), Kontrahent (szerokość *), Status (szerokość 15)\n- Grupę 'Warunki' z układem dwukolumnowym (Row > Stack): lewa kolumna ma SposobDostawy (20) i TerminDostawy (15), prawa kolumna ma SposobZaplaty (20) i TerminZaplaty (15)\n- Grupę 'Pozycje' z Grid (IsToolbarVisible, EditInPlace, NewInPlace) i kolumnami: Lp (5), Towar (*), Ilosc (10) z Footer=Sum, CenaJednostkowa (18), Wartosc (15) z Footer=Sum\nPriority zakładki: 10.",
- "assertions": [
- "Plik zaczyna się od ",
- "Element DataForm ma atrybut Priority=\"10\"",
- "Element Page ma atrybut DataContext=\"{DataSource}\"",
- "Są trzy elementy Group: 'Dane podstawowe', 'Warunki', 'Pozycje'",
- "Układ dwukolumnowy w grupie Warunki używa Row zawierającego Stack",
- "Element Grid ma atrybuty IsToolbarVisible=\"true\", EditInPlace=\"true\", NewInPlace=\"true\"",
- "Pola Ilosc i Wartosc w Grid mają atrybut Footer=\"Sum\"",
- "Binding pól używa składni {NazwaPola} w cudzysłowie"
- ]
-}
diff --git a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/grading.json b/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/grading.json
deleted file mode 100644
index 2db2980..0000000
--- a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/grading.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "expectations": [
- {
- "text": "Plik zaczyna się od ",
- "passed": true,
- "evidence": "Linia 1: "
- },
- {
- "text": "Element DataForm ma atrybut Priority=\"10\"",
- "passed": true,
- "evidence": "Linia 6: Priority=\"10\" w elemencie DataForm"
- },
- {
- "text": "Element Page ma atrybut DataContext=\"{DataSource}\"",
- "passed": true,
- "evidence": "Linia 8: "
- },
- {
- "text": "Są trzy elementy Group: 'Dane podstawowe', 'Warunki', 'Pozycje'",
- "passed": true,
- "evidence": "Linie 10, 17, 30: Group CaptionHtml=\"Dane podstawowe\", \"Warunki\", \"Pozycje\""
- },
- {
- "text": "Układ dwukolumnowy w grupie Warunki używa Row zawierającego Stack",
- "passed": true,
- "evidence": "Linie 18-28: SposobDostawy, TerminDostawySposobZaplaty, TerminZaplaty
"
- },
- {
- "text": "Element Grid ma atrybuty IsToolbarVisible=\"true\", EditInPlace=\"true\", NewInPlace=\"true\"",
- "passed": true,
- "evidence": "Linie 31-35: Grid z IsToolbarVisible=\"true\" EditInPlace=\"true\" NewInPlace=\"true\""
- },
- {
- "text": "Pola Ilosc i Wartosc w Grid mają atrybut Footer=\"Sum\"",
- "passed": true,
- "evidence": "Linia 38: Footer=\"Sum\" na Ilosc; Linia 40: Footer=\"Sum\" na Wartosc"
- },
- {
- "text": "Binding pól używa składni {NazwaPola} w cudzysłowie",
- "passed": true,
- "evidence": "EditValue=\"{Numer}\", EditValue=\"{DataZlozenia}\" itp. — poprawna składnia"
- }
- ],
- "summary": {
- "passed": 8,
- "failed": 0,
- "total": 8,
- "pass_rate": 1.0
- }
-}
diff --git a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/outputs/Zamowienie.Szczegoly.pageform.xml b/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/outputs/Zamowienie.Szczegoly.pageform.xml
deleted file mode 100644
index 5a41ddd..0000000
--- a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/outputs/Zamowienie.Szczegoly.pageform.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/outputs/metrics.json b/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/outputs/metrics.json
deleted file mode 100644
index 201d1fb..0000000
--- a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/outputs/metrics.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "files_created": ["Zamowienie.Szczegoly.pageform.xml"],
- "errors_encountered": 0
-}
diff --git a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/timing.json b/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/timing.json
deleted file mode 100644
index 3813cb3..0000000
--- a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/timing.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "total_tokens": 32707,
- "duration_ms": 37772,
- "total_duration_seconds": 37.8
-}
diff --git a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/grading.json b/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/grading.json
deleted file mode 100644
index e8c67a5..0000000
--- a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/grading.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "expectations": [
- {
- "text": "Plik zaczyna się od ",
- "passed": true,
- "evidence": "Linia 1: "
- },
- {
- "text": "Element DataForm ma atrybut Priority=\"10\"",
- "passed": false,
- "evidence": "Użyto zamiast , a Priority jako child element 10 zamiast atrybutu"
- },
- {
- "text": "Element Page ma atrybut DataContext=\"{DataSource}\"",
- "passed": false,
- "evidence": "Brak elementu Page i DataContext. Użyto zamiast "
- },
- {
- "text": "Są trzy elementy Group: 'Dane podstawowe', 'Warunki', 'Pozycje'",
- "passed": false,
- "evidence": "Grupy istnieją ale z atrybutem Name zamiast CaptionHtml i wewnątrz błędnej struktury "
- },
- {
- "text": "Układ dwukolumnowy w grupie Warunki używa Row zawierającego Stack",
- "passed": true,
- "evidence": "Linie 15-25: ......
— poprawny layout"
- },
- {
- "text": "Element Grid ma atrybuty IsToolbarVisible=\"true\", EditInPlace=\"true\", NewInPlace=\"true\"",
- "passed": true,
- "evidence": "Linia 29: Grid z IsToolbarVisible=\"true\" EditInPlace=\"true\" NewInPlace=\"true\""
- },
- {
- "text": "Pola Ilosc i Wartosc w Grid mają atrybut Footer=\"Sum\"",
- "passed": true,
- "evidence": "Linie 33, 35: Footer=\"Sum\" na Column Ilosc i Wartosc"
- },
- {
- "text": "Binding pól używa składni {NazwaPola} w cudzysłowie",
- "passed": false,
- "evidence": "Brak atrybutu EditValue. Używa bez bindowania danych"
- }
- ],
- "summary": {
- "passed": 4,
- "failed": 4,
- "total": 8,
- "pass_rate": 0.5
- }
-}
diff --git a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/outputs/Zamowienie.Szczegoly.pageform.xml b/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/outputs/Zamowienie.Szczegoly.pageform.xml
deleted file mode 100644
index 739df34..0000000
--- a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/outputs/Zamowienie.Szczegoly.pageform.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
- 10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/outputs/metrics.json b/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/outputs/metrics.json
deleted file mode 100644
index 201d1fb..0000000
--- a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/outputs/metrics.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "files_created": ["Zamowienie.Szczegoly.pageform.xml"],
- "errors_encountered": 0
-}
diff --git a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/timing.json b/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/timing.json
deleted file mode 100644
index 9736636..0000000
--- a/soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/timing.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "total_tokens": 4263,
- "duration_ms": 17660,
- "total_duration_seconds": 17.7
-}
diff --git a/soneta-form-xml-workspace/iteration-1/review.html b/soneta-form-xml-workspace/iteration-1/review.html
deleted file mode 100644
index d245599..0000000
--- a/soneta-form-xml-workspace/iteration-1/review.html
+++ /dev/null
@@ -1,1325 +0,0 @@
-
-
-
-
-
- Eval Review
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
No output files found
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
No benchmark data available. Run a benchmark to see quantitative results here.
-
-
-
-
-
-
-
-
Review Complete
-
Your feedback has been saved. Go back to your Claude Code session and tell Claude you're done reviewing.
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soneta-form-xml-workspace/iteration-1/viewform-lista/eval_metadata.json b/soneta-form-xml-workspace/iteration-1/viewform-lista/eval_metadata.json
deleted file mode 100644
index 086a91d..0000000
--- a/soneta-form-xml-workspace/iteration-1/viewform-lista/eval_metadata.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "eval_id": 2,
- "eval_name": "viewform-lista",
- "prompt": "Stwórz plik Pracownicy.viewform.xml dla widoku listy pracowników w enova365. Widok listy powinien zawierać kolumny: Kod (8), NazwiskoImie (30), NumerPracownika (20), Dzial (*), Stanowisko (20), DataZatrudnienia (15). Domyślne sortowanie po NazwiskoImie. Dodaj IsToolbarVisible i IsFilterRowVisible. Zachowaj właściwą strukturę pliku viewform.xml.",
- "assertions": [
- "Plik ma poprawną deklarację XML",
- "Element DataForm ma xmlns=\"http://www.enova.pl/schema/form.xsd\"",
- "Jest element Grid z EditValue lub bez (dla widoku listy)",
- "Grid ma atrybut OrderBy=\"NazwiskoImie\"",
- "Grid ma IsToolbarVisible=\"true\" i IsFilterRowVisible=\"true\"",
- "Są kolumny Field dla: Kod, NazwiskoImie, NumerPracownika, Dzial, Stanowisko, DataZatrudnienia",
- "Pole Dzial ma Width=\"*\""
- ]
-}
diff --git a/soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/grading.json b/soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/grading.json
deleted file mode 100644
index 538ca6a..0000000
--- a/soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/grading.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "expectations": [
- {
- "text": "Plik ma poprawną deklarację XML",
- "passed": true,
- "evidence": "Linia 1: "
- },
- {
- "text": "Element DataForm ma xmlns=\"http://www.enova.pl/schema/form.xsd\"",
- "passed": true,
- "evidence": "Linia 5: xmlns=\"http://www.enova.pl/schema/form.xsd\" — poprawny namespace"
- },
- {
- "text": "Jest element Grid z EditValue lub bez (dla widoku listy)",
- "passed": true,
- "evidence": "Linia 9: "
- },
- {
- "text": "Grid ma atrybut OrderBy=\"NazwiskoImie\"",
- "passed": true,
- "evidence": "Linia 12: OrderBy=\"NazwiskoImie\""
- },
- {
- "text": "Grid ma IsToolbarVisible=\"true\" i IsFilterRowVisible=\"true\"",
- "passed": true,
- "evidence": "Linie 10-11: IsToolbarVisible=\"true\" IsFilterRowVisible=\"true\""
- },
- {
- "text": "Są kolumny Field dla: Kod, NazwiskoImie, NumerPracownika, Dzial, Stanowisko, DataZatrudnienia",
- "passed": true,
- "evidence": "Linie 13-18: 6 elementów Field z EditValue dla każdego z wymienionych pól"
- },
- {
- "text": "Pole Dzial ma Width=\"*\"",
- "passed": true,
- "evidence": "Linia 16: "
- }
- ],
- "summary": {
- "passed": 7,
- "failed": 0,
- "total": 7,
- "pass_rate": 1.0
- }
-}
diff --git a/soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/outputs/Pracownicy.viewform.xml b/soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/outputs/Pracownicy.viewform.xml
deleted file mode 100644
index 73afadc..0000000
--- a/soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/outputs/Pracownicy.viewform.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/outputs/metrics.json b/soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/outputs/metrics.json
deleted file mode 100644
index 4e6e383..0000000
--- a/soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/outputs/metrics.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "files_created": ["Pracownicy.viewform.xml"],
- "errors_encountered": 0
-}
diff --git a/soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/timing.json b/soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/timing.json
deleted file mode 100644
index bf1ef87..0000000
--- a/soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/timing.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "total_tokens": 34304,
- "duration_ms": 38406,
- "total_duration_seconds": 38.4
-}
diff --git a/soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/grading.json b/soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/grading.json
deleted file mode 100644
index 5c18713..0000000
--- a/soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/grading.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "expectations": [
- {
- "text": "Plik ma poprawną deklarację XML",
- "passed": true,
- "evidence": "Linia 1: "
- },
- {
- "text": "Element DataForm ma xmlns=\"http://www.enova.pl/schema/form.xsd\"",
- "passed": false,
- "evidence": "Użyto zamiast "
- },
- {
- "text": "Jest element Grid z EditValue lub bez (dla widoku listy)",
- "passed": false,
- "evidence": "Użyto (lowercase) zamiast . Elementy XML są case-sensitive — to błąd."
- },
- {
- "text": "Grid ma atrybut OrderBy=\"NazwiskoImie\"",
- "passed": false,
- "evidence": "Użyto defaultsort=\"NazwiskoImie\" zamiast OrderBy=\"NazwiskoImie\""
- },
- {
- "text": "Grid ma IsToolbarVisible=\"true\" i IsFilterRowVisible=\"true\"",
- "passed": false,
- "evidence": "Użyto istoolbarvisible=\"true\" isfilterrowvisible=\"true\" (lowercase) zamiast PascalCase"
- },
- {
- "text": "Są kolumny Field dla: Kod, NazwiskoImie, NumerPracownika, Dzial, Stanowisko, DataZatrudnienia",
- "passed": true,
- "evidence": "6 elementów z właściwymi nazwami — poprawne pola, choć element to nie "
- },
- {
- "text": "Pole Dzial ma Width=\"*\"",
- "passed": true,
- "evidence": "Linia 8: — prawidłowe *"
- }
- ],
- "summary": {
- "passed": 3,
- "failed": 4,
- "total": 7,
- "pass_rate": 0.43
- }
-}
diff --git a/soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/outputs/Pracownicy.viewform.xml b/soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/outputs/Pracownicy.viewform.xml
deleted file mode 100644
index f3bcbc4..0000000
--- a/soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/outputs/Pracownicy.viewform.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/outputs/metrics.json b/soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/outputs/metrics.json
deleted file mode 100644
index 4e6e383..0000000
--- a/soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/outputs/metrics.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "files_created": ["Pracownicy.viewform.xml"],
- "errors_encountered": 0
-}
diff --git a/soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/timing.json b/soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/timing.json
deleted file mode 100644
index a141e4c..0000000
--- a/soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/timing.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "total_tokens": 3821,
- "duration_ms": 13888,
- "total_duration_seconds": 13.9
-}
diff --git a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/eval_metadata.json b/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/eval_metadata.json
deleted file mode 100644
index 6453235..0000000
--- a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/eval_metadata.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "eval_id": 3,
- "eval_name": "warunkowa-widocznosc",
- "prompt": "Pokaż jak w pageform.xml enova365 zastosować warunkową widoczność pól używając wyrażeń RowCondition. Stwórz przykładowy plik Kontrahent.Kredyt.pageform.xml z następującymi wzorcami:\n1. Pole 'LimitKredytu' widoczne tylko gdy TypKlienta='Korporacyjny'\n2. Pole 'WarunkiSpecjalne' widoczne gdy Status='Premium' LUB Status='VIP'\n3. Pole 'OstrzezenieBranze' widoczne gdy NIE Status='Aktywny'\n4. Przycisk Command widoczny gdy ObrotyRoczne > 0 (użyj WorkCondition lub własność bool)\n5. Cała Grupa 'Dane zaawansowane' zwijalna (Collapsable) z Renderable uzależnionym od licencji",
- "assertions": [
- "Użyto składni Visibility=\"{?Pole=Wartość}\" dla warunku równości",
- "Użyto składni OR dla wielu wartości: {?Status=Premium or Status=VIP}",
- "Użyto negacji: {?!Status=Aktywny}",
- "Klasa Collapsable jest zastosowana do grupy",
- "Atrybut Renderable jest użyty dla warunku licencji"
- ]
-}
diff --git a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/grading.json b/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/grading.json
deleted file mode 100644
index f73b269..0000000
--- a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/grading.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "expectations": [
- {
- "text": "Użyto składni Visibility=\"{?Pole=Wartość}\" dla warunku równości",
- "passed": true,
- "evidence": "Linia 30: Visibility=\"{?TypKlienta=Korporacyjny}\" — poprawna składnia RowCondition"
- },
- {
- "text": "Użyto składni OR dla wielu wartości: {?Status=Premium or Status=VIP}",
- "passed": true,
- "evidence": "Linia 48: Visibility=\"{?Status=Premium or Status=VIP}\" — poprawny operator or"
- },
- {
- "text": "Użyto negacji: {?!Status=Aktywny}",
- "passed": true,
- "evidence": "Linia 65: Visibility=\"{?!Status=Aktywny}\" — poprawna negacja z !"
- },
- {
- "text": "Klasa Collapsable jest zastosowana do grupy",
- "passed": true,
- "evidence": "Linia 109: "
- },
- {
- "text": "Atrybut Renderable jest użyty dla warunku licencji",
- "passed": true,
- "evidence": "Linia 110: Renderable=\"{Licence.HAN}\" — licencja HAN jako warunek renderowania"
- }
- ],
- "summary": {
- "passed": 5,
- "failed": 0,
- "total": 5,
- "pass_rate": 1.0
- }
-}
diff --git a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/outputs/Kontrahent.Kredyt.pageform.xml b/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/outputs/Kontrahent.Kredyt.pageform.xml
deleted file mode 100644
index 28799bf..0000000
--- a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/outputs/Kontrahent.Kredyt.pageform.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/outputs/metrics.json b/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/outputs/metrics.json
deleted file mode 100644
index a6b3d43..0000000
--- a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/outputs/metrics.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "files_created": ["Kontrahent.Kredyt.pageform.xml"],
- "errors_encountered": 0
-}
diff --git a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/timing.json b/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/timing.json
deleted file mode 100644
index cdebad0..0000000
--- a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/timing.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "total_tokens": 37262,
- "duration_ms": 72689,
- "total_duration_seconds": 72.7
-}
diff --git a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/grading.json b/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/grading.json
deleted file mode 100644
index 2ce6a9e..0000000
--- a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/grading.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "expectations": [
- {
- "text": "Użyto składni Visibility=\"{?Pole=Wartość}\" dla warunku równości",
- "passed": false,
- "evidence": "Użyto RowCondition=\"Kontrahent.TypKlienta = 'Korporacyjny'\" (nie istniejący atrybut) zamiast Visibility=\"{?...}\""
- },
- {
- "text": "Użyto składni OR dla wielu wartości: {?Status=Premium or Status=VIP}",
- "passed": false,
- "evidence": "Użyto RowCondition=\"... OR ...\" (SQL-like syntax) zamiast Visibility=\"{?... or ...}\""
- },
- {
- "text": "Użyto negacji: {?!Status=Aktywny}",
- "passed": false,
- "evidence": "Użyto RowCondition=\"NOT (...)\" zamiast Visibility=\"{?!...}\""
- },
- {
- "text": "Klasa Collapsable jest zastosowana do grupy",
- "passed": false,
- "evidence": "Użyto Collapsable=\"True\" jako atrybut zamiast Class=\"Collapsable\""
- },
- {
- "text": "Atrybut Renderable jest użyty dla warunku licencji",
- "passed": false,
- "evidence": "Użyto Renderable=\"Session.Features.IsAvailable(...)\" — błędna składnia wyrażenia, nie jest to format {Licence.X}"
- }
- ],
- "summary": {
- "passed": 0,
- "failed": 5,
- "total": 5,
- "pass_rate": 0.0
- }
-}
diff --git a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/outputs/Kontrahent.Kredyt.pageform.xml b/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/outputs/Kontrahent.Kredyt.pageform.xml
deleted file mode 100644
index ffc1f16..0000000
--- a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/outputs/Kontrahent.Kredyt.pageform.xml
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
-
diff --git a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/outputs/metrics.json b/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/outputs/metrics.json
deleted file mode 100644
index a6b3d43..0000000
--- a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/outputs/metrics.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "files_created": ["Kontrahent.Kredyt.pageform.xml"],
- "errors_encountered": 0
-}
diff --git a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/timing.json b/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/timing.json
deleted file mode 100644
index bc75e84..0000000
--- a/soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/timing.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "total_tokens": 5896,
- "duration_ms": 50293,
- "total_duration_seconds": 50.3
-}
diff --git a/soneta-form-xml-workspace/run_loop.log b/soneta-form-xml-workspace/run_loop.log
deleted file mode 100644
index 2c7e8ef..0000000
--- a/soneta-form-xml-workspace/run_loop.log
+++ /dev/null
@@ -1,57 +0,0 @@
-Split: 13 train, 6 test (holdout=0.4)
-
-============================================================
-Iteration 1/5
-Description: Tworzenie plików form.xml opisujących formularze, zakładki i widoki UI dla platformy enova365/Soneta Enterprise. Używaj gdy użytkownik prosi o utworzenie zakładki formularza (pageform.xml), widoku listy (viewform.xml), gridform.xml, lookupform.xml lub form.xml — albo gdy pyta o składnię, elementy, bindowanie, warunkową widoczność, Appearance lub układ UI enova365. Trigger także gdy użytkownik pokazuje lub pyta o pliki XML z elementami DataForm, Page, Group, Grid, Field, Row, Stack, Flow, Command, Include dla enova365.
-============================================================
-Train: 15/39 correct, precision=100% recall=0% accuracy=38% (38.7s)
- [FAIL] rate=0/3 expected=True: chcę zrobić Appearance warunkowe formatowanie wierszy w Grid
- [FAIL] rate=0/3 expected=True: potrzebuję lookupform.xml dla wyboru Towaru z kolumnami Kod
- [FAIL] rate=0/3 expected=True: jak używać DataContext i EditValue żeby wyświetlić pola zagn
- [FAIL] rate=0/3 expected=True: jak ukryć pole w form.xml enova365 gdy Status nie jest równy
- [FAIL] rate=0/3 expected=True: zrób mi zakładkę Towar.Ogolne.pageform.xml z grupą 'Dane pod
- [FAIL] rate=0/3 expected=True: utwórz zakładkę pageform.xml dla obiektu Dokument z polami N
- [FAIL] rate=0/3 expected=True: jak zrobić widok listy viewform.xml dla Kontrahentów z kolum
- [FAIL] rate=0/3 expected=True: jak zmodyfikować istniejący pageform.xml — chcę dodać nowe p
- [PASS] rate=0/3 expected=False: jak skonfigurować business.xml dla nowego modułu? potrzebuję
- [PASS] rate=0/3 expected=False: zrób mi worker C# który liczy saldo kontrahenta i eksponuje
- [PASS] rate=0/3 expected=False: jak skonfigurować uprawnienia RightName i RightContext dla m
- [PASS] rate=0/3 expected=False: napisz mi metodę w C# która oblicza VAT dla pozycji faktury
- [PASS] rate=0/3 expected=False: jak zbudować API REST w ASP.NET Core do pobierania danych ko
-Test : 6/18 correct, precision=100% recall=0% accuracy=33% (0.0s)
- [FAIL] rate=0/3 expected=True: co to Class Collapsable w enova365? chcę zwinąć grupę filtró
- [FAIL] rate=0/3 expected=True: jak dodać Grid z IsToolbarVisible EditInPlace NewInPlace i F
- [FAIL] rate=0/3 expected=True: potrzebuję plik Adres.form.xml jako współdzielony fragment z
- [FAIL] rate=0/3 expected=True: jak w viewform.xml dodać Flow jako panel filtrów nad gridem?
- [PASS] rate=0/3 expected=False: jak zarejestrować FolderViewAttribute i WorkerAttribute w en
- [PASS] rate=0/3 expected=False: zrób raport RDLC pokazujący listę faktur z podsumowaniem
-
-Improving description...
-Traceback (most recent call last):
- File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/runpy.py", line 196, in _run_module_as_main
- return _run_code(code, main_globals, None,
- File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/runpy.py", line 86, in _run_code
- exec(code, run_globals)
- File "/Users/marcin/.claude/skills/skill-creator/scripts/run_loop.py", line 332, in
- main()
- File "/Users/marcin/.claude/skills/skill-creator/scripts/run_loop.py", line 297, in main
- output = run_loop(
- File "/Users/marcin/.claude/skills/skill-creator/scripts/run_loop.py", line 202, in run_loop
- new_description = improve_description(
- File "/Users/marcin/.claude/skills/skill-creator/scripts/improve_description.py", line 114, in improve_description
- response = client.messages.create(
- File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/anthropic/_utils/_utils.py", line 282, in wrapper
- return func(*args, **kwargs)
- File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/anthropic/resources/messages/messages.py", line 996, in create
- return self._post(
- File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/anthropic/_base_client.py", line 1364, in post
- return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
- File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/anthropic/_base_client.py", line 1058, in request
- request = self._build_request(options, retries_taken=retries_taken)
- File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/anthropic/_base_client.py", line 521, in _build_request
- headers = self._build_headers(options, retries_taken=retries_taken)
- File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/anthropic/_base_client.py", line 451, in _build_headers
- self._validate_headers(headers_dict, custom_headers)
- File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/anthropic/_client.py", line 196, in _validate_headers
- raise TypeError(
-TypeError: "Could not resolve authentication method. Expected either api_key or auth_token to be set. Or for one of the `X-Api-Key` or `Authorization` headers to be explicitly omitted"
diff --git a/soneta-form-xml-workspace/skill-snapshot/SKILL.md b/soneta-form-xml-workspace/skill-snapshot/SKILL.md
deleted file mode 100644
index f783f30..0000000
--- a/soneta-form-xml-workspace/skill-snapshot/SKILL.md
+++ /dev/null
@@ -1,734 +0,0 @@
----
-name: soneta-form-xml
-description: Tworzenie plików form.xml opisujących formularze, zakładki i widoki UI dla platformy enova365/Soneta Enterprise. Używaj gdy użytkownik prosi o utworzenie zakładki formularza (pageform.xml), widoku listy (viewform.xml), formularza (form.xml), lookupu (lookupform.xml), lub gdy pyta o strukturę i składnię plików form.xml dla enova365.
----
-
-# Soneta Form XML - Formularze UI
-
-Skill do tworzenia plików XML definiujących interfejs użytkownika w systemie enova365/Soneta Enterprise.
-
-## Typy plików formularzy
-
-| Typ pliku | Wzorzec nazwy | Przeznaczenie |
-|-----------|---------------|---------------|
-| **pageform.xml** | `{DataType}.{PageName}.pageform.xml` | Zakładka formularza edycji obiektu |
-| **viewform.xml** | `{NazwaWidoku}.viewform.xml` | Widok listy zarejestrowanej jako folder (listy główne) |
-| **gridform.xml** | `{IdentyfikatorListy}.gridform.xml` | Indywidualne ustawienia listy na formularzu |
-| **lookupform.xml** | `{NazwaPodpowiedzi}.lookupform.xml` | Lista wyboru (lookup) |
-| **form.xml** | `{Nazwa}.form.xml` | Współdzielony fragment UI (include) |
-
-### Format nazwy pageform.xml
-
-Nazwa pliku składa się z 4 części rozdzielonych kropkami:
-
-```
-{DataType}.{PageName}.pageform.xml
-```
-
-- **DataType** - typ danych, dla którego definiowana jest zakładka (np. `Towar`, `Kontrahent`, `DokumentHandlowy`)
-- **PageName** - nazwa zakładki (np. `Ogolne`, `Dodatkowe`, `Adresy`)
-- **pageform.xml** - stały sufiks
-
-**Przykłady:**
-- `Towar.Ogolne.pageform.xml`
-- `Towar.Dodatkowe.pageform.xml`
-- `Kontrahent.Adresy.pageform.xml`
-- `DokumentHandlowy.Pozycje.pageform.xml`
-
-### Format nazwy viewform.xml
-
-Nazwa pliku składa się z 3 części rozdzielonych kropkami:
-
-```
-{NazwaWidoku}.viewform.xml
-```
-
-**Przykłady:**
-- `Towary.viewform.xml`
-- `Kontrahenci.viewform.xml`
-- `DokumentyHandlowe.viewform.xml`
-
-### Format nazwy gridform.xml
-
-Nazwa pliku składa się z 3 części rozdzielonych kropkami:
-
-```
-{IdentyfikatorListy}.gridform.xml
-```
-
-**Przykłady:**
-- `PozycjeDokumentu.gridform.xml`
-- `RachunkiBankowe.gridform.xml`
-
-### Format nazwy lookupform.xml
-
-Nazwa pliku składa się z 3 części rozdzielonych kropkami:
-
-```
-{NazwaPodpowiedzi}.lookupform.xml
-```
-
-**Przykłady:**
-- `Towary.lookupform.xml`
-- `Kontrahenci.lookupform.xml`
-
-## Hierarchia elementów XML
-
-Elementy XML dzielą się na trzy grupy dziedziczące po `uiElement`:
-
-1. **Elementy proste** - Field, Label, Command, Gap, Html, GroupBy, Axis
-2. **Kontenery elementów** - Group, Stack, Row, Flow, Bar, Dashboard, Include, Page (dziedziczą po `ContainerElement`)
-3. **Kolekcje** - Grid, Cards, Scheduler, Chart, Diagram, Pivot (dziedziczą po `CollectionElement`)
-
-## Struktura dokumentu
-
-Każdy plik formularza zaczyna się od deklaracji XML i elementu głównego `DataForm`:
-
-```xml
-
-
-
-
-```
-
-### Atrybuty DataForm
-
-| Atrybut | Opis |
-|---------|------|
-| `Priority` | Kolejność zakładek (domyślnie 100, niższa = wcześniej) |
-| `RightName` | Opcjonalny. Nazwa uprawnienia do zakładki (tylko gdy inna niż standardowa) |
-| `Contexts` | Warunki licencyjne, np. `"Licence.HAN \| Licence.FA"` (nie bindowane) |
-| `ViewType` | Typ widoku: `None`, `Dialog`, `Form`, `Folder` |
-| `Mode` | Tryb: `None`, `Form`, `Folder`, `Wizard`, `Modal`, `Popup`, `Frame` |
-| `DataType` | Opcjonalny. Pełne określenie typu danych (wymagany tylko gdy nazwa pliku nie określa jednoznacznie typu), np. `"Soneta.Handel.DokumentHandlowy,Soneta.Handel"` |
-
-## Wspólne atrybuty elementów
-
-Następujące atrybuty mogą być użyte w **dowolnym** elemencie form.xml:
-
-| Atrybut | Opis |
-|---------|------|
-| `Name` | Identyfikator elementu, który można wykorzystać w kodzie C# |
-| `Class` | Klasy stylów (lista wartości oddzielonych spacją) |
-| `DataContext` | Zmienia kontekst danych dla elementu i wszystkich jego elementów podrzędnych |
-| `Visibility` | Warunek widoczności (bindowalne z logiką biznesową) |
-| `Renderable` | Czy element ma być dostępny. Wyrażenie liczone **raz** przy logowaniu operatora - optymalne dla warunków zależnych od środowiska, licencji i innych parametrów niezmiennych w trakcie sesji |
-
-### Atrybut CaptionHtml
-
-Atrybut `CaptionHtml` występuje w elementach: `Label`, `Field`, `Group`, `Page`, `Command` i innych.
-
-Może zawierać:
-- Tekst etykiety (w formacie HTML)
-- Wyrażenia bindowane w klamrach: `{wyrażenie}` - wartość tekstowa jest automatycznie kodowana do HTML
-- Wyrażenia zwracające kod HTML: `{WłaściwośćHtml}` - nazwa musi mieć sufiks `Html`, wtedy wartość nie jest kodowana
-- Podwójne klamry dla literalnych znaków: `{{` → `{`, `}}` → `}`
-
-**Specjalne przypadki w `Field`:**
-- Brak atrybutu → automatyczna etykieta wyliczana na podstawie danych
-- `CaptionHtml=" "` (spacja) → pusta etykieta (miejsce na etykietę zostaje zachowane)
-- `CaptionHtml=""` (pusty) → brak etykiety (pole bez miejsca na etykietę)
-
-**Alternatywa:** Zamiast `CaptionHtml` można użyć `CaptionMarkdown` dla etykiet w formacie Markdown.
-
-## Elementy kontenerowe
-
-### Page - Zakładka
-
-Główny kontener dla zawartości zakładki:
-
-```xml
-
-
-
-```
-
-| Atrybut | Opis |
-|---------|------|
-| `Name` | Opcjonalny. Unikalny identyfikator zakładki |
-| `CaptionHtml` | Tytuł zakładki. Może zawierać `/` do grupowania zakładek (np. `"Dokumenty/Faktury"`) |
-| `DataContext` | Źródło danych. `{DataSource}` oznacza obiekt edytowany na zakładce, ale można wskazać inne dane |
-| `Visibility` | Wyrażenie warunkowe widoczności (bindowalne) |
-| `Renderable` | Czy zakładka ma być dostępna. Wyrażenie liczone raz przy logowaniu - optymalne dla warunków zależnych od środowiska, licencji itp. |
-| `Key` | Skrót klawiaturowy wywołujący zakładkę formularza |
-| `GroupIcon` | Ikona grupy zakładek |
-
-### Zasada budowania zakładki formularza
-
-Zakładka składa się z elementów ``. Każda grupa może zawierać:
-
-1. **Listę pól w kolumnie** - pola ułożone pionowo jedno pod drugim
-2. **Układ wielokolumnowy** - `` zawierający kilka `` z polami
-3. **Listę elementów podrzędnych** - np. Grid, ewentualnie poprzedzony polami filtrującymi
-
-```xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-### Group - Grupa pól
-
-Wizualna ramka grupująca powiązane pola:
-
-```xml
-
-
-
-
-```
-
-| Atrybut | Opis |
-|---------|------|
-| `CaptionHtml` | Tytuł grupy |
-| `LabelWidth` | Opcjonalny. Szerokość etykiet dla wszystkich pól w kontenerze |
-| `Visibility` | Warunek widoczności (bindowalne z logiką biznesową) |
-| `Renderable` | Czy grupa ma być dostępna (liczone raz przy logowaniu) |
-
-### Stack - Układ pionowy
-
-Układa elementy jeden pod drugim:
-
-```xml
-
-
-
-
-```
-
-### Row - Układ poziomy
-
-Układa elementy obok siebie w wierszu:
-
-```xml
-
-
-
-
-```
-
-**Pole na całą szerokość:** użyj `Width="*"`
-
-**Pola dosunięte do prawej:** umieść `` na początku:
-
-```xml
-
-
-
-
-
-```
-
-### Flow - Układ płynny
-
-Elementy umieszczane są od lewej do prawej. Gdy nie mieszczą się na formularzu, przenoszone są do nowego wiersza:
-
-```xml
-
-
-
-
-
-```
-
-## Elementy pól i kontrolek
-
-### Field - Pole edycyjne
-
-Podstawowy element do wyświetlania i edycji danych. Jest generowany **dynamicznie** - w zależności od typu właściwości wyświetla odpowiednią kontrolkę (int → pole numeryczne, bool → checkbox, double → pole z kalkulatorem, typ Sonety → lookup z listą wyboru).
-
-Minimalny `` powinien zawierać:
-- `EditValue` - **wymagany**, binding do właściwości
-- `CaptionHtml` - etykieta pola
-- `Width` - szerokość pola
-
-```xml
-
-```
-
-| Atrybut | Opis |
-|---------|------|
-| `EditValue` | **Wymagany**. Binding do właściwości: `{Właściwość}` lub `{new Extender.Właściwość}` |
-| `CaptionHtml` | Etykieta pola (patrz sekcja "Atrybut CaptionHtml") |
-| `Width` | Szerokość pola w znakach lub px (`*` = wypełnij) |
-| `OuterWidth` | Całkowita szerokość z etykietą (do wyrównywania w pionie) |
-| `LabelWidth` | Szerokość etykiety |
-| `Height` | Wysokość w wierszach lub px (dla pól wieloliniowych) |
-| `IsReadOnly` | Warunek tylko do odczytu (bindowalne z logiką biznesową). Logika biznesowa ma wyższy priorytet |
-| `Visibility` | Warunek widoczności (bindowalne z logiką biznesową): `true`/`false`/`Visible`/`Hidden`/`Collapsed` |
-| `Renderable` | Czy pole ma być dostępne (liczone raz przy logowaniu) |
-| `Format` | Formatowanie wartości w standardzie .NET `string.Format`. Pole `{0}` to wartość edytowana |
-| `Footer` | Agregacja w stopce **tylko na listach**: `Sum`, `Count`, `Average`, `Min`, `Max` |
-| `CheckedValue` | Wartość dla **RadioButton** |
-| `Class` | Klasy stylów (patrz sekcja Class) |
-| `DataContext` | Zmienia kontekst danych dla tego pola i elementów podrzędnych |
-
-#### RadioButton
-
-Aby utworzyć RadioButton, dodaj parametr `CheckedValue`:
-
-```xml
-
-
-
-```
-
-Pola z tym samym `EditValue` i różnymi `CheckedValue` tworzą grupę RadioButton.
-
-### Label - Etykieta
-
-Tekst bez możliwości edycji:
-
-```xml
-
-```
-
-### Gap - Odstęp
-
-Wypełniacz przestrzeni. Użyteczny do dosunięcia elementów do prawej strony (gdy `` jest na początku wiersza).
-
-```xml
-
-
-
-
-```
-
-**Uwaga:** `` jako ostatni element w wierszu nie jest potrzebny - nic nie zmienia.
-
-### Command - Przycisk/Polecenie
-
-```xml
-
-```
-
-| Atrybut | Opis |
-|---------|------|
-| `MethodName` | Nazwa metody do wywołania (szukana w klasie z kontekstu formularza) |
-| `MoreMethodName` | Dodatkowa metoda (dla przycisków dzielonych - wersja przeglądowa) |
-| `Key` | Skrót klawiszowy |
-| `CommandStyle` | Styl: `Default`, `Important`, `Red`, `Green`, `Blue` |
-| `Icon` | Nazwa ikony (nie działa w enova365 desktop) |
-| `Class` | Klasy stylów |
-| `DataContext` | Zmienia kontekst danych (np. `{new MojExtender}` - patrz sekcja Bindowanie danych) |
-| `Renderable` | Czy przycisk ma być dostępny (liczone raz przy logowaniu) |
-
-### Include - Dołączenie fragmentu
-
-Wstawia zawartość innego pliku form.xml lub dynamicznie generowany element UI:
-
-```xml
-
-
-
-
-
-
-
-
-```
-
-| Atrybut | Opis |
-|---------|------|
-| `Source` | Nazwa pliku form.xml **lub** wyrażenie bindujące zwracające element DOM (`UIElement`) z kodu. Wyrażenie bindujące jest wywoływane po każdej zmianie danych, co pozwala budować dynamiczne formularze |
-| `DataContext` | Opcjonalny. Kontekst danych dla dołączanego fragmentu |
-| `Path` | Opcjonalny. Określa element pliku form.xml, który zostanie wstawiony (gdy Source jest nazwą pliku) |
-| `Suffix` | Opcjonalny. Napis dodawany do każdej nazwy (`Name`) elementów dołączonych przez Include |
-
-## Kolekcje i listy
-
-### Grid / List - Tabela danych
-
-```xml
-
-
-
-
-
-
-```
-
-| Atrybut | Opis | Default |
-|---------|------|---------|
-| `EditValue` | Źródło danych kolekcji | - |
-| `SelectedValue` | Binding do zaznaczonych wierszy - typ `DataType[]` (tablica) | - |
-| `FocusedValue` | Binding do podświetlonego wiersza - typ `DataType` (obiekt) | - |
-| `IsToolbarVisible` | Pokazuj pasek narzędzi | `false` |
-| `IsFilterRowVisible` | Pokazuj wiersz filtrujący | `false` |
-| `IsHeaderVisible` | Widoczność nagłówków z tytułami kolumn | `true` |
-| `EditInPlace` | Edycja bezpośrednio w komórkach | `false` |
-| `NewInPlace` | Dodawanie przez kliknięcie pustego wiersza | `false` |
-| `AlwaysAddNewRow` | Nowy wiersz od razu dodawany (Esc nie usuwa) | `false` |
-| `PreventNewRowOnFocus` | Zapobiegaj nowemu wierszowi przy fokusie | `false` |
-| `KeepsSequence` | Czy po edycji in-place zachować kolejność wierszy (`true`) czy ponownie sortować (`false`) | `false` |
-| `OpenMethodName` | Metoda wywoływana po Enter/double-click (domyślnie otwarcie formularza) | - |
-| `IsSmartOpen` | Kolumna ze strzałką do otwarcia formularza | - |
-| `NewButton` | Stan przycisku Nowy: `Auto`, `None`, `Visible` | auto |
-| `EditButton` | Stan przycisku Otwórz | auto |
-| `UpdateButton` | Stan przycisku Aktualizuj | auto |
-| `RemoveButton` | Stan przycisku Usuń | auto |
-| `SearchButton` | Stan przycisku Szukaj | auto |
-| `MoreButton` | Przycisk więcej: `None`, `Visible`, `Actions` | auto |
-| `OrderBy` | Domyślne sortowanie (np. `"Kolumna desc"`) | - |
-| `Filter` | Filtr danych | - |
-| `ResourceName` | Nazwa pliku grid.xml z indywidualnymi ustawieniami | - |
-| `SumType` | Typ sum: `None`, `Selected`, `All`, `Groups`, `GroupsNewLine` | `None` |
-| `ActionsMode` | Czy workery przypięte do listy mają być w menu Czynności formularza: `FormAndControl`, `Control`, `Form` | - |
-
-#### Atrybuty dla drzewa (Tree)
-
-| Atrybut | Opis | Default |
-|---------|------|---------|
-| `TreeNodesValue` | Binding do węzłów | - |
-| `TreeHasNodesValue` | Binding sprawdzający czy ma węzły | - |
-| `TreeParentValue` | Binding do rodzica | - |
-| `TreeExpandingLevel` | Poziom rozwinięcia: `Collapsed`, `ExpandRoot`, `ExpandRootFix`, `ExpandAll` | `Collapsed` |
-
-### GroupBy - Grupowanie w Grid
-
-```xml
-
-
-
-
-```
-
-## Elementy specjalne
-
-### Chart - Wykres
-
-```xml
-
-
-
-
-
-
-```
-
-Typy wykresów: `Line`, `Bar`, `Pie`, `Donut`, `Spider`, `Polar`, `Area`, `Pyramid`, `Funnel`, `Bubble`, `Scatter`
-
-### Scheduler - Kalendarz
-
-```xml
-
-
-
-
-
-```
-
-### Gantt / GanttDiagram - Harmonogram
-
-```xml
-
-
-
-
-
-```
-
-### Html / Markdown - Treść formatowana
-
-```xml
-
-
-```
-
-### Indicator - Wskaźnik
-
-```xml
-
-```
-
-### Dashboard - Panel kafelkowy
-
-```xml
-
-
-
-
-
-```
-
-## Bindowanie danych
-
-Każdy element form.xml znajduje się w odpowiednim kontekście powiązanego obiektu C#. Powiązany typ danych zależy od typu danych dla którego zdefiniowany jest pageform.xml.
-
-### Powiązanie typu z formularzem
-
-Powiązanie z typem w elemencie root odbywa się przez:
-
-1. **Przez nazwę pliku pageform.xml** - pierwszy człon nazwy pliku (DataType) określa typ obiektu. Np. dla pliku `Towar.Ogolne.pageform.xml` kontekstem jest klasa `Towar`.
-
-2. **Przez atrybut DataType w DataForm** - jawne określenie typu:
- ```xml
-
- ```
-
-3. **Przez rejestrację FolderViewAttribute** - wiążącą folder programu z obiektem biznesowym i formularzem prezentującym ten folder.
-
-### Zmiana kontekstu danych
-
-- **DataContext** - zmienia kontekst **aktualnego elementu i wszystkich elementów podrzędnych**:
- ```xml
-
-
-
-
- ```
-
-- **EditValue** - zmienia kontekst **tylko elementów podrzędnych** (bez aktualnego kontenera):
- ```xml
-
-
-
-
- ```
-
-### Składnia wyrażeń w klamrach
-
-W wyrażeniach `{...}` można odwoływać się do:
-
-| Składnia | Opis |
-|----------|------|
-| `{Właściwość}` | Publiczna właściwość obiektu w kontekście |
-| `{Metoda()}` | Wartość zwracana przez publiczną metodę. Parametry metody są uzupełniane automatycznie na podstawie aktualnego kontekstu UI (`Soneta.Business.Context`) |
-| `{Obiekt.Właściwość}` | Właściwość zagnieżdżona |
-| `{Context.TypDanych.Pole}` | Wartość z aktualnego kontekstu UI (`Soneta.Business.Context`) |
-| `{Features.NazwaCechy}` | Cechy powiązane z obiektem biznesowym `Row` |
-| `{Workers.NazwaWorkera.Pole}` | Właściwość workera powiązanego z obiektem (`WorkerAttribute`) |
-| `{new NazwaExtender.Pole}` | Właściwość extendera (worker niepowiązany z konkretnymi danymi) |
-| `{Tablica[indeks]}` | Element tablicy pod wskazanym indeksem |
-| `{.}` | Aktualna wartość w kontekście elementu |
-
-### Wyrażenia porównań
-
-| Składnia | Opis |
-|----------|------|
-| `{Pole=wartość}` | Porównanie równości |
-| `{Pole!=wartość}` | Porównanie nierówności |
-| `{!PoleLogiczne}` | Negacja wartości logicznej |
-| `{?warunek}` | Warunek oparty o klasę `RowCondition` |
-
-### Przykłady bindingów
-
-```xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-### Wyrażenia warunkowe (RowCondition)
-
-```xml
-Visibility="{?State=Added}"
-Visibility="{?!State=Added}"
-Visibility="{?Typ=Towar or Typ=Usługa}"
-Visibility="{?Aktywny and Widoczny}"
-```
-
-## Atrybut Class - Style i zachowania
-
-Atrybut `Class` może zawierać wiele wartości oddzielonych spacją:
-
-```xml
-
-```
-
-### Style etykiet
-- `BoldLabel` - pogrubiona etykieta
-- `CenterLabel` - wycentrowana
-- `RightLabel` - wyrównana do prawej
-- `MultilineLabel` - wieloliniowa
-- `NoColonLabel` - bez dwukropka
-- `WarningLabel` - ostrzeżenie
-- `InfoLabel` - informacja
-- `TipLabel` - podpowiedź
-
-### Style czcionek
-- `LargeFont` - duża czcionka
-- `BoldFont` - pogrubiona
-- `GreenFont` - zielona
-- `RedFont` - czerwona
-- `WarningFont` - ostrzegawcza
-- `FixedWidthFont` - stała szerokość
-
-### Wyrównanie
-- `LeftAlign`, `RightAlign`, `TextRight`
-
-### Typy edytorów
-- `PasswordEdit` - hasło
-- `ColorEdit` - wybór koloru
-- `RichEdit` - edytor HTML
-- `ImageEdit` - obraz
-- `FileEdit` - wybór pliku
-- `FolderEdit` - wybór folderu
-- `PathPropertyEdit` - ścieżka
-- `HyperlinkEdit` - hiperłącze
-- `EmailEdit` - email
-- `PhoneEdit` - telefon
-- `RatingEdit` - ocena gwiazdkowa
-- `ProgressEdit` - pasek postępu
-- `IconEdit` - ikona
-- `CheckButtonEdit` - checkbox jako przycisk
-- `XmlEdit` - edytor XML
-- `DataTextEdit` - tekst danych
-
-### Zachowania
-- `Collapsable` - zwijalna grupa
-- `Expandable` - rozwijalna
-- `Expanded` - domyślnie rozwinięta
-- `Hidden` - ukryty
-- `FirstResponder` - pole z fokusem zaraz po otwarciu formularza
-- `Scrollable` - przewijalna
-- `ImageCircle` - okrągły obraz
-- `Tree` - drzewo
-
-### Układy i pozycjonowanie
-- `GroupItem` - element umieszczony na wysokości nagłówka `` (zwykle po prawej stronie), służy do sterowania zawartością pozostałych elementów grupy
-- `Reverse` - układa elementy w odwrotnej kolejności (od prawej do lewej lub od dołu do góry)
-- `SmartOpen` - kolumna w `Grid` wyróżniona do szybkiego otwierania formularza (ze strzałką)
-
-### Przyciski
-- `MainCommand` - główny przycisk
-- `SplitCommand` - przycisk z menu
-- `CommandNoText` - tylko ikona
-- `CommandIcoText` - ikona i tekst
-- `WorkerCommand` - przycisk workera
-- `WizardCommand` - przycisk kreatora
-- `PrintButton` - przycisk drukowania
-
-## Appearance - Warunkowe formatowanie
-
-```xml
-
-
-
-
-```
-
-## Przykłady
-
-### Prosta zakładka (pageform.xml)
-
-Plik: `MojObiekt.Ogolne.pageform.xml`
-
-```xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-### Współdzielony fragment (form.xml)
-
-Plik: `Adres.form.xml`
-
-```xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-## Referencje
-
-- Pełna specyfikacja elementów: [references/ELEMENTS.md](references/ELEMENTS.md)
-- Schemat XSD: [references/Form.xsd](references/Form.xsd)
diff --git a/soneta-form-xml-workspace/skill-snapshot/assets/Adres.form.xml b/soneta-form-xml-workspace/skill-snapshot/assets/Adres.form.xml
deleted file mode 100644
index 96bcde2..0000000
--- a/soneta-form-xml-workspace/skill-snapshot/assets/Adres.form.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soneta-form-xml-workspace/skill-snapshot/assets/Kontrahent.WarunkiHandlowe.pageform.xml b/soneta-form-xml-workspace/skill-snapshot/assets/Kontrahent.WarunkiHandlowe.pageform.xml
deleted file mode 100644
index 5d2db11..0000000
--- a/soneta-form-xml-workspace/skill-snapshot/assets/Kontrahent.WarunkiHandlowe.pageform.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soneta-form-xml-workspace/skill-snapshot/assets/MojObiekt.Ogolne.pageform.xml b/soneta-form-xml-workspace/skill-snapshot/assets/MojObiekt.Ogolne.pageform.xml
deleted file mode 100644
index ab46827..0000000
--- a/soneta-form-xml-workspace/skill-snapshot/assets/MojObiekt.Ogolne.pageform.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soneta-form-xml-workspace/skill-snapshot/evals/evals.json b/soneta-form-xml-workspace/skill-snapshot/evals/evals.json
deleted file mode 100644
index 9671071..0000000
--- a/soneta-form-xml-workspace/skill-snapshot/evals/evals.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
- "skill_name": "soneta-form-xml",
- "evals": [
- {
- "id": 1,
- "prompt": "Utwórz plik Zamowienie.Szczegoly.pageform.xml dla platformy enova365. Zakładka powinna zawierać:\n- Grupę 'Dane podstawowe' z polami: Numer (szerokość 20), DataZlozenia (szerokość 15), Kontrahent (szerokość *), Status (szerokość 15)\n- Grupę 'Warunki' z układem dwukolumnowym (Row > Stack): lewa kolumna ma SposobDostawy (20) i TerminDostawy (15), prawa kolumna ma SposobZaplaty (20) i TerminZaplaty (15)\n- Grupę 'Pozycje' z Grid (IsToolbarVisible, EditInPlace, NewInPlace) i kolumnami: Lp (5), Towar (*), Ilosc (10) z Footer=Sum, CenaJednostkowa (18), Wartosc (15) z Footer=Sum\nPriority zakładki: 10.",
- "expected_output": "Poprawny plik XML pageform.xml z deklaracją XML, elementem DataForm z atrybutami xmlns i Priority=10, elementem Page z DataContext={DataSource}, trzema grupami z odpowiednimi polami i gridem. Plik powinien być gotowy do użycia w projekcie enova365.",
- "files": [],
- "assertions": [
- "Plik zaczyna się od ",
- "Element DataForm ma atrybut Priority=\"10\"",
- "Element Page ma atrybut DataContext=\"{DataSource}\"",
- "Są trzy elementy Group: 'Dane podstawowe', 'Warunki', 'Pozycje'",
- "Układ dwukolumnowy w grupie Warunki używa Row zawierającego Stack",
- "Element Grid ma atrybuty IsToolbarVisible=\"true\", EditInPlace=\"true\", NewInPlace=\"true\"",
- "Pola Ilosc i Wartosc w Grid mają atrybut Footer=\"Sum\"",
- "Binding pól używa składni {NazwaPola} w cudzysłowie"
- ]
- },
- {
- "id": 2,
- "prompt": "Stwórz plik Pracownicy.viewform.xml dla widoku listy pracowników w enova365. Widok listy powinien zawierać kolumny: Kod (8), NazwiskoImie (30), NumerPracownika (20), Dzial (*), Stanowisko (20), DataZatrudnienia (15). Domyślne sortowanie po NazwiskoImie. Dodaj IsToolbarVisible i IsFilterRowVisible. Zachowaj właściwą strukturę pliku viewform.xml.",
- "expected_output": "Poprawny plik viewform.xml z elementem DataForm (bez Page), elementem Grid z kolumnami i sortowaniem OrderBy=\"NazwiskoImie\". Plik zgodny ze standardem enova365.",
- "files": [],
- "assertions": [
- "Plik ma poprawną deklarację XML",
- "Element DataForm ma xmlns=\"http://www.enova.pl/schema/form.xsd\"",
- "Jest element Grid z EditValue lub bez (dla widoku listy)",
- "Grid ma atrybut OrderBy=\"NazwiskoImie\"",
- "Grid ma IsToolbarVisible=\"true\" i IsFilterRowVisible=\"true\"",
- "Są kolumny Field dla: Kod, NazwiskoImie, NumerPracownika, Dzial, Stanowisko, DataZatrudnienia",
- "Pole Dzial ma Width=\"*\""
- ]
- },
- {
- "id": 3,
- "prompt": "Pokaż jak w pageform.xml enova365 zastosować warunkową widoczność pól używając wyrażeń RowCondition. Stwórz przykładowy plik Kontrahent.Kredyt.pageform.xml z następującymi wzorcami:\n1. Pole 'LimitKredytu' widoczne tylko gdy TypKlienta='Korporacyjny'\n2. Pole 'WarunkiSpecjalne' widoczne gdy Status='Premium' LUB Status='VIP'\n3. Pole 'OstrzezenieBranze' widoczne gdy NIE Status='Aktywny'\n4. Przycisk Command widoczny gdy ObrotyRoczne > 0 (użyj WorkCondition lub własność bool)\n5. Cała Grupa 'Dane zaawansowane' zwijalna (Collapsable) z Renderable uzależnionym od licencji",
- "expected_output": "Plik pageform.xml demonstrujący różne wzorce warunkowej widoczności: Visibility=\"{?TypKlienta=Korporacyjny}\", Visibility=\"{?Status=Premium or Status=VIP}\", Visibility=\"{?!Status=Aktywny}\", użycie klasy Collapsable dla grupy.",
- "files": [],
- "assertions": [
- "Użyto składni Visibility=\"{?Pole=Wartość}\" dla warunku równości",
- "Użyto składni OR dla wielu wartości: {?Status=Premium or Status=VIP}",
- "Użyto negacji: {?!Status=Aktywny}",
- "Klasa Collapsable jest zastosowana do grupy",
- "Atrybut Renderable jest użyty dla warunku licencji"
- ]
- }
- ]
-}
diff --git a/soneta-form-xml-workspace/skill-snapshot/references/ELEMENTS.md b/soneta-form-xml-workspace/skill-snapshot/references/ELEMENTS.md
deleted file mode 100644
index 810aee5..0000000
--- a/soneta-form-xml-workspace/skill-snapshot/references/ELEMENTS.md
+++ /dev/null
@@ -1,864 +0,0 @@
-# Pełna specyfikacja elementów Form XML
-
-Kompletna lista elementów XML dostępnych w plikach form.xml platformy enova365.
-
-## Spis treści
-
-1. [Elementy kontenerowe](#elementy-kontenerowe)
-2. [Elementy pól](#elementy-pól)
-3. [Elementy kolekcji](#elementy-kolekcji)
-4. [Elementy wykresów i wizualizacji](#elementy-wykresów-i-wizualizacji)
-5. [Elementy specjalne](#elementy-specjalne)
-6. [Typy wyliczeniowe (Enum)](#typy-wyliczeniowe)
-7. [Wspólne atrybuty (uiElement)](#wspólne-atrybuty)
-
----
-
-## Elementy kontenerowe
-
-### Stack
-Układ pionowy - elementy jeden pod drugim.
-
-```xml
-
-
-
-```
-
-Dziedziczy atrybuty z `containerElement`.
-
-### Row
-Układ poziomy - elementy obok siebie.
-
-```xml
-
-
-
-```
-
-### Flow
-Układ płynny z automatycznym zawijaniem.
-
-```xml
-
-
-
-```
-
-| Atrybut | Typ | Opis |
-|---------|-----|------|
-| `Align` | boolean | Wyrównanie elementów |
-| `Arrange` | enum | `Horizontally` lub `Vertically` |
-
-### Group
-Wizualna ramka grupująca elementy.
-
-```xml
-
-
-
-```
-
-### Page
-Zakładka formularza.
-
-```xml
-
-
-
-```
-
-| Atrybut | Typ | Opis |
-|---------|-----|------|
-| `Name` | string | Unikalny identyfikator |
-| `CaptionHtml` | string | Tytuł zakładki |
-| `Key` | string | Klucz zakładki |
-| `MultiDataSource` | string | Wielokrotne źródło danych |
-| `GroupIcon` | string | Ikona grupy |
-| `DefaultVisible` | boolean | Domyślna widoczność |
-| `FirstAction` | string | Pierwsza akcja |
-
-### Bar
-Pasek narzędzi.
-
-```xml
-
-
-
-```
-
-### Dashboard
-Panel kafelkowy/kokpit.
-
-```xml
-
-
-
-
-
-```
-
-| Atrybut | Typ | Wartości |
-|---------|-----|----------|
-| `ArrangeMode` | enum | `Default`, `Canvas`, `Size`, `Visibility` |
-
-### Include
-Dołączenie zewnętrznego fragmentu lub dynamicznie generowanego elementu UI.
-
-```xml
-
-
-
-
-
-
-
-
-```
-
-| Atrybut | Wymagany | Opis |
-|---------|----------|------|
-| `Source` | **Tak** | Nazwa pliku form.xml **lub** wyrażenie bindujące zwracające element DOM (`UIElement`). Wyrażenie jest wywoływane po każdej zmianie danych - umożliwia dynamiczne formularze |
-| `DataContext` | Nie | Kontekst danych dla dołączanego fragmentu |
-| `Path` | Nie | Określa element pliku form.xml do wstawienia (gdy Source jest nazwą pliku) |
-| `Suffix` | Nie | Napis dodawany do każdej nazwy (`Name`) elementów dołączonych przez Include |
-
----
-
-## Elementy pól
-
-### Field
-Podstawowe pole edycyjne.
-
-```xml
-
-```
-
-| Atrybut | Typ | Opis |
-|---------|-----|------|
-| `Format` | string | Format wyświetlania (np. `N2`, `d`, `C`) |
-| `CheckedValue` | string | Wartość dla RadioButton |
-| `Footer` | enum | Agregacja w stopce |
-| `Aggregate` | enum | Typ agregacji |
-| `Important` | boolean | Oznaczenie jako ważne |
-
-### Label
-Etykieta tekstowa (tylko do odczytu).
-
-```xml
-
-```
-
-### Gap
-Odstęp/wypełniacz.
-
-```xml
-
-```
-
-### Splitter
-Rozdzielacz paneli.
-
-```xml
-
-```
-
-### Data
-Element danych (niewidoczny).
-
-```xml
-
-```
-
----
-
-## Elementy poleceń
-
-### Command
-Przycisk/polecenie.
-
-```xml
-
-
-
-
-
-
-
-```
-
-| Atrybut | Typ | Wartości/Opis |
-|---------|-----|---------------|
-| `CommandStyle` | enum | `Default`, `Important`, `Red`, `Green`, `Blue` |
-| `Key` | string | Skrót klawiszowy |
-
----
-
-## Elementy kolekcji
-
-### Grid / List
-Tabela danych.
-
-```xml
-
-
-
-
-
-
-
-```
-
-#### Atrybuty przyciski (enumCollectionButtonState)
-- `Auto` - automatycznie
-- `None` - ukryty
-- `Visible` - widoczny
-
-#### TreeExpandingLevel
-- `Collapsed` - zwinięte
-- `ExpandRoot` - rozwiń korzeń
-- `ExpandRootFix` - rozwiń korzeń (stałe)
-- `ExpandAll` - rozwiń wszystko
-
-#### SumType (enumCollectionSumType)
-- `None` - brak
-- `Selected` - zaznaczone
-- `All` - wszystkie
-- `Groups` - grupy
-- `GroupsNewLine` - grupy w nowej linii
-
-#### ActionsMode
-- `FormAndControl` - formularz i kontrolka
-- `Control` - tylko kontrolka
-- `Form` - tylko formularz
-
-### Cards
-Widok kart (kafelków). Dziedziczy z Grid, ale **nie obsługuje**: układu kolumnowego, nagłówka, sortowania przez kliknięcie, edit-in-place, struktury drzewiastej.
-
-```xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-Elementy `Field` domyślnie układają się jeden pod drugim. Można grupować je za pomocą `Row` i `Stack`.
-
-**Układ szeroki:** Dodanie `Width="*"` do najbardziej zewnętrznego kontenera rozciąga element na całą szerokość (elementy listy jeden pod drugim).
-
-#### Pasek narzędziowy Cards
-- Umiejscowiony powyżej listy z prawej strony
-- Posiada tylko przyciski Dodaj i Usuń (brak Otwórz)
-- Ikony zaznaczania, otwierania i menu widoczne po najechaniu myszą na kafelek
-
-#### Atrybuty kontrolujące ikony:
-- `Class="DisableSelection"` - wyłącza ikonę zaznaczania
-- `IsSmartOpen="true"` - włącza przycisk otwierania formularza
-- `MoreButton="Visible"` - włącza przycisk "więcej" z dodatkowymi akcjami
-
-### CardTemplate
-Szablon karty (dziedziczy z Stack).
-
----
-
-## Elementy wykresów i wizualizacji
-
-### Chart
-Wykres. Element służący do prezentacji danych w postaci wykresów.
-
-```xml
-
-
-
-
-
-```
-
-| Atrybut | Typ | Opis |
-|---------|-----|------|
-| `Type` | enum | Typ wykresu (patrz poniżej) |
-| `ChartColor` | enum | Kolor wykresu: `None` (wielokolorowy), `Green`, `Blue`, `Grey`, `Red`, `Orange`, `Yellow` |
-| `IsLegendVisible` | boolean | Widoczność legendy |
-| `LabelFormat` | string | Format etykiety. Zmienne: `{value}`, `{percent}`, `{label}` |
-| `XAxisTitle` | string | Podpis osi X |
-| `YAxisTitle` | string | Podpis osi Y |
-| `XAxisLabelFormat` | string | Format wartości na osi X (zmienne: `{value}`, `{label}`) |
-| `YAxisLabelFormat` | string | Format wartości na osi Y |
-| `IsDateNavigatorVisible` | boolean | Nawigator daty dla WeekByDays/MonthByDays |
-| `OpenMethodName` | string | Metoda wywoływana po kliknięciu na wykres |
-| `FocusedValue` | string | Property do którego zostanie podstawiony wiersz po kliknięciu |
-| `FocusedColumnValue` | string | Property z nazwą kolumny po kliknięciu (dla wielu Field) |
-
-#### Typy wykresów (enumChartType)
-- `Line` - liniowy (zmiany wartości między kategoriami)
-- `Bar` - słupkowy/kolumnowy (porównanie kategorii)
-- `Area` - warstwowy (suma serii i udział każdej)
-- `Pie` - kołowy (proporcje części całości)
-- `Donut` - pierścieniowy (jak kołowy, ale z dziurą)
-- `Spider` - radarowy (porównanie wielu zmiennych)
-- `Polar` - radarowy z wypełnieniem
-- `Pyramid` - piramida (kategorie od największej do najmniejszej)
-- `Funnel` - lejek (malejące proporcje)
-- `Bubble` - bąbelkowy (3 wymiary: X, Y, rozmiar)
-- `Scatter` - punktowy (zbiór punktów X/Y)
-
-#### Axis - Oś wykresu
-
-```xml
-
-```
-
-| Atrybut | Opis |
-|---------|------|
-| `Direction` | Kierunek dla Pivot: `X` (kolumny), `Y` (wiersze) |
-| `Dimension` | Sposób grupowania miar |
-| `Grouping` | Czy grupować dane (tworzy tabelę przestawną) |
-| `FirstDayOfWeek` | Pierwszy dzień tygodnia |
-
-#### Dimension (PivotDimension)
-- `Enum` - wartości dyskretne, tekstowe (Bar, Pie, Donut)
-- `AZ` - grupowanie po pierwszej literze
-- `WeekByDays` - zawężenie do tygodnia + przyciski Następny/Poprzedni
-- `MonthByDays` - zawężenie do miesiąca + przyciski Następny/Poprzedni
-- `ByNumbers` - miara liczbowa, proporcjonalne rozmieszczenie
-- `ByDays` - daty bez grupowania, wszystkie dni z zakresu
-- `ByWeeks` - grupowanie wg tygodni
-- `ByMonths` - grupowanie wg miesięcy
-- `ByYears` - grupowanie wg lat
-
-#### Field w Chart - seria danych
-
-```xml
-
-```
-
-| Atrybut | Wartości |
-|---------|----------|
-| `Aggregate` | `None`, `Sum`, `Count`, `Average`, `Min`, `Max` |
-
-#### Zasady tworzenia różnych typów wykresów
-
-**Line/Area (liniowy/warstwowy):**
-- 1 Axis + wiele Field → wiele serii danych
-- 2 Axis (jeden z `Grouping="true"`) + 1 Field → serie wg grupowania
-
-**Bar (słupkowy):**
-- 1 Axis + 1 Field → wykres zwykły
-- 1 Axis + wiele Field → wykres skumulowany (stacked)
-- 2 Axis + 1 Field → wykres grupowany (slide)
-- 2 Axis + wiele Field → stacked-slide
-
-**Pie/Donut (kołowy/pierścieniowy):**
-- Zawsze 1 Axis + 1 Field
-
-**Scatter (punktowy):**
-- 1 Axis + 2 Field (pierwszy Field = X, drugi Field = Y)
-
-**Bubble (bąbelkowy):**
-- 1 Axis + 3 Field (X, Y, rozmiar bąbelka)
-
-### Scheduler
-Kalendarz/harmonogram.
-
-```xml
-
-
-
-```
-
-**UWAGA:** Niepoprawne wiązanie danych skutkuje błędem krytycznym (brak wyświetlenia pageform'a lub brak możliwości logowania).
-
-| Atrybut | Typ | Opis |
-|---------|-----|------|
-| `View` | enum | Domyślny widok kalendarza |
-| `AllowViewChanging` | boolean | Czy operator może zmieniać widok (domyślnie tak) |
-| `SelectedInterval` | string | Okres zaznaczony przez użytkownika |
-| `VisibleInterval` | string | Okres widoczny |
-| `WorkInterval` | string | Roboczy czas dnia (domyślnie `"9:00..18:00"`). Można podać bezpośrednio lub bindować do `Soneta.Types.Interval` |
-| `Resources` | string | Zasoby |
-| `SelectedResource` | string | Wybrany zasób |
-| `HideDateField` | boolean | Ukryj pole daty |
-
-#### Widoki Scheduler (enumSchedulerViews)
-- `Daily` - widok jednego dnia
-- `WorkWeek` - widok tygodnia roboczego
-- `Weekly` - widok tygodniowy
-- `Monthly` - widok miesięczny
-- `HoursTimeLine` - widok godzinowy na osi poziomej
-- `DaysTimeLine` - widok dzienny na osi poziomej
-- `SimpleMonthly` - uproszczony widok miesięczny
-
-### Gantt
-Wykres Gantta.
-
-```xml
-
-
-
-
-
-```
-
-#### GanttViews
-- `HourMinute`, `DayHour`, `WeekDay`, `MonthDay`
-
-#### GanttViewMode
-- `Standard`, `ResourceView`
-
-### GanttDiagram
-Diagram Gantta z dodatkowymi opcjami.
-
-```xml
-
-```
-
-### Diagram
-Diagram ogólny.
-
-```xml
-
-```
-
-### CustomDiagram
-Diagram niestandardowy.
-
-### TreeDiagram
-Diagram drzewa.
-
-```xml
-
-```
-
-#### TreeDiagramLayoutType
-- `OrganizationalChart` - schemat organizacyjny
-- `ComplexHierarchicalTree` - złożone drzewo hierarchiczne
-
-### KanbanDiagram
-Tablica Kanban.
-
-```xml
-
-```
-
-### Pivot
-Tabela przestawna.
-
-```xml
-
-
-
-
-```
-
-### PivotGrid
-Siatka przestawna.
-
----
-
-## Elementy specjalne
-
-### Indicator
-Wskaźnik liczbowy.
-
-```xml
-
-```
-
-### PercentIndicator
-Wskaźnik procentowy.
-
-```xml
-
-```
-
-### CircularIndicator
-Wskaźnik kołowy.
-
-```xml
-
-```
-
-#### UIAlignment
-- `None`, `Left`, `Right`, `Bottom`
-
-### RangeSlider
-Suwak zakresu.
-
-```xml
-
-```
-
-### TimelineClock
-Oś czasu z zegarem.
-
-```xml
-
-```
-
-### DateNavigator
-Navigator dat.
-
-```xml
-
-```
-
-### Chips
-Etykiety/tagi.
-
-```xml
-
-```
-
-#### ChipsColorPalette
-- `None`, `Black`, `White`
-- `GrayPastel`, `GreenPastel`, `OrangePastel`, `RedPastel`
-
-### Html
-Treść HTML.
-
-```xml
-
-```
-
-### Markdown
-Treść Markdown.
-
-```xml
-
-```
-
-### ThreadComments
-Komentarze wątkowe.
-
-```xml
-
-```
-
-### UserControl
-Kontrolka użytkownika.
-
-```xml
-
-
-
-```
-
-### Template
-Szablon warunkowy.
-
-```xml
-
-
-
-```
-
----
-
-## Typy wyliczeniowe
-
-### enumAggregationType (Footer/Aggregate)
-- `Auto` - automatycznie
-- `None` - brak
-- `Sum` - suma
-- `Count` - liczba
-- `Average` - średnia
-- `Min` - minimum
-- `Max` - maksimum
-- `Concat` - konkatenacja
-- `UniqueConcat` - unikalna konkatenacja
-- `Same` - ta sama wartość
-
-### enumDataFormView (ViewType)
-- `None`, `Dialog`, `Form`, `Folder`
-
-### enumDataFormMode (Mode)
-- `None`, `Form`, `Folder`, `Wizard`, `Modal`, `Popup`, `Frame`
-
-### enumLayoutMode
-- `Default`, `Canvas`, `Size`, `Visibility`
-
-### enumMoreButtonState
-- `None`, `Visible`, `Actions`
-
----
-
-## Wspólne atrybuty (uiElement)
-
-Wszystkie elementy UI dziedziczą następujące atrybuty z `uiElement`:
-
-| Atrybut | Typ | Opis |
-|---------|-----|------|
-| `Name` | string | Identyfikator elementu (musi być unikalny na poziomie strony). Automatycznie generowany jeśli nie podano. |
-| `DataContext` | string (bindowalne) | Kontekst danych. `{DataSource}` = otwarty obiekt. Można wskazać podrzędną właściwość. |
-| `EditValue` | string (bindowalne) | Binding do wartości |
-| `CaptionHtml` | string (bindowalne) | Etykieta kontrolki (tekst lub `{Właściwość}`) |
-| `CaptionMarkdown` | string | Etykieta Markdown |
-| `DescriptionHtml` | string | Dodatkowy opis |
-| `LangContext` | string | Kontekst językowy |
-| `Icon` | string | Ikona |
-| `Class` | string | Klasy stylów (lista wartości oddzielonych spacją) |
-| `Width` | string | Szerokość w znakach lub px (np. `"50px"`). `"*"` = dopasuj do dostępnej przestrzeni |
-| `Height` | string | Wysokość w wierszach lub px. `"*"` = dopasuj automatycznie |
-| `OuterWidth` | string | Całkowita szerokość z etykietą (do wyrównywania kontrolek) |
-| `OuterHeight` | string | Całkowita wysokość (może dodawać puste miejsce pod kontrolką) |
-| `LabelWidth` | string | Szerokość etykiety |
-| `LabelHeight` | string | Wysokość etykiety |
-| `Column` | integer | Kolumna (w siatce) |
-| `Row` | integer | Wiersz (w siatce) |
-| `Visibility` | string (bindowalne) | Widoczność: `Visible`, `Hidden`, `Collapsed`, `true`, `false` |
-| `LayoutMode` | enum | Tryb układu: `Default`, `Canvas`, `Size`, `Visibility` |
-| `IsReadOnly` | string (bindowalne) | Tylko do odczytu (`true`/`false`). **Uwaga:** tryb z logiki biznesowej ma wyższy priorytet |
-| `Tag` | string | Dodatkowa wartość do wykorzystania w skryptach |
-| `TagInfo` | string | Informacja tagu |
-| `Priority` | integer | Priorytet |
-| `RenderMethodName` | string | Metoda renderowania |
-| `Renderable` | string | Czy renderowalne |
-| `RenderKey` | string | Klucz renderowania |
-
-### Appearance (formatowanie warunkowe)
-
-```xml
-
-
-
-```
-
-| Atrybut | Typ | Opis |
-|---------|-----|------|
-| `Condition` | string | Warunek (wyrażenie) |
-| `BackColor` | string | Kolor tła |
-| `ForeColor` | string | Kolor tekstu |
-| `FontBold` | boolean | Pogrubienie |
-| `FontItalic` | boolean | Kursywa |
-
----
-
-## Wartości Class (enumSingleClass)
-
-### Zachowania kontenerów
-- `Collapsable` - zwijalna
-- `Expandable` - rozwijalna
-- `Expanded` - rozwinięta
-- `Dialog` - okno dialogowe
-- `NoSave` - bez zapisu
-- `MainPage` - strona główna
-- `Menu` - menu
-- `Panel`, `PanelItem`, `PanelWinItem`
-- `NoLayout` - bez układu
-- `RemoveEmpty` - usuń puste
-- `GroupItem` - element grupy
-- `Reverse` - odwrócony
-- `MainGroup`, `MenuGroup`
-- `NoClose` - bez zamykania
-- `CascadeMenu`, `CascadeMenuGroup`, `CascadeSubmenuGroup`
-- `FilterGroup` - grupa filtrów
-- `Scrollable` - przewijalna
-
-### Style przycisków
-- `PrintButton` - drukowanie
-- `MainCommand` - główne polecenie
-- `SplitCommand` - polecenie dzielone
-- `CommandNoText` - bez tekstu
-- `CommandIcoText` - ikona i tekst
-- `WorkerCommand` - polecenie workera
-- `WizardCommand` - polecenie kreatora
-- `SchedulerCommand` - polecenie harmonogramu
-- `FormNavigationCommand` - nawigacja formularza
-
-### Style pól
-- `PasswordEdit`, `PathPropertyEdit`, `PropertyGridEdit`
-- `CheckButtonEdit`, `ColorEdit`, `HistoryEdit`
-- `RichEdit`, `AspxEdit`, `FolderEdit`, `FileEdit`
-- `SaveFileEdit`, `ImageEdit`, `XmlEdit`
-- `AlgorithmEdit`, `DataTextEdit`, `ConditionEdit`
-- `RatingEdit`, `SignatureEdit`, `OneTimePasswordEdit`
-- `HyperlinkEdit`, `EmailEdit`, `PhoneEdit`
-- `SkypeEdit`, `GpsEdit`, `IconEdit`
-- `ProgressEdit`, `TrafficLightEdit`
-
-### Style etykiet
-- `NoColonLabel` - bez dwukropka
-- `BoldLabel` - pogrubiona
-- `CenterLabel` - wyśrodkowana
-- `RightLabel` - wyrównana w prawo
-- `WarningLabel` - ostrzeżenie
-- `MultilineLabel` - wieloliniowa
-- `InfoLabel` - informacja
-- `TipLabel` - podpowiedź
-- `SchedulerLabel` - etykieta harmonogramu
-
-### Style czcionek
-- `LargeFont` - duża
-- `GreenFont` - zielona
-- `RedFont` - czerwona
-- `FixedWidthFont` - stała szerokość
-- `BoldFont` - pogrubiona
-- `WarningFont` - ostrzegawcza
-
-### Wyrównanie
-- `RightAlign` - do prawej
-- `LeftAlign` - do lewej
-- `TextRight` - tekst do prawej
-
-### Inne
-- `Information`, `Question` - typy komunikatów
-- `DataBar`, `PreviewLine`, `Header`
-- `FirstResponder` - pierwszy fokus
-- `SmartOpen` - inteligentne otwieranie
-- `Tight`, `Special`, `Important`
-- `LateCalculate` - późne obliczanie
-- `AllowDragging`, `AllowEditing`
-- `DisableSelection` - wyłącz zaznaczanie
-- `HorizontalSplitter` - poziomy rozdzielacz
-- `Info`, `Tree`
-- `ImageCircle` - okrągły obraz
-- `DashboardItem`, `LocatorItem`
-- `SmallSize`, `NormalSize`, `LargeSize`
-- `AutoUpdate` - automatyczna aktualizacja
-- `ArrowsSelectNext` - strzałki wybierają następny
-- `Hidden` - ukryty
-- `NonClickable` - nieklikowalny
-- `LabelTop`, `LebelLeft` - pozycja etykiety
-- `FilesDropTarget` - cel upuszczania plików
-- `Rss` - kanał RSS
-- `PreventOrderBy` - zapobiegaj sortowaniu
diff --git a/soneta-form-xml-workspace/skill-snapshot/references/Form.xsd b/soneta-form-xml-workspace/skill-snapshot/references/Form.xsd
deleted file mode 100644
index faaa4f6..0000000
--- a/soneta-form-xml-workspace/skill-snapshot/references/Form.xsd
+++ /dev/null
@@ -1,1060 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/soneta-form-xml-workspace/trigger-eval-approved.json b/soneta-form-xml-workspace/trigger-eval-approved.json
deleted file mode 100644
index 56bb5e2..0000000
--- a/soneta-form-xml-workspace/trigger-eval-approved.json
+++ /dev/null
@@ -1,78 +0,0 @@
-[
- {
- "query": "utwórz zakładkę pageform.xml dla obiektu Dokument z polami Numer, Data, Kontrahent i listą pozycji",
- "should_trigger": true
- },
- {
- "query": "jak zrobić widok listy viewform.xml dla Kontrahentów z kolumnami Kod, Nazwa, NIP, Miasto?",
- "should_trigger": true
- },
- {
- "query": "potrzebuję plik Adres.form.xml jako współdzielony fragment z polami adresowymi do użycia przez Include",
- "should_trigger": true
- },
- {
- "query": "jak ukryć pole w form.xml enova365 gdy Status nie jest równy 'Aktywny'? co to Visibility i RowCondition?",
- "should_trigger": true
- },
- {
- "query": "zrób mi zakładkę Towar.Ogolne.pageform.xml z grupą 'Dane podstawowe' i grupą z dwukolumnowym układem Row Stack",
- "should_trigger": true
- },
- {
- "query": "jak dodać Grid z IsToolbarVisible EditInPlace NewInPlace i Footer Sum do pageform.xml?",
- "should_trigger": true
- },
- {
- "query": "potrzebuję lookupform.xml dla wyboru Towaru z kolumnami Kod Nazwa Cena",
- "should_trigger": true
- },
- {
- "query": "co to Class Collapsable w enova365? chcę zwinąć grupę filtrów we ViewInfo i uzależnić Renderable od licencji HAN",
- "should_trigger": true
- },
- {
- "query": "jak w viewform.xml dodać Flow jako panel filtrów nad gridem? chcę użyć FilterPanelWidth i operatora + w EditValue",
- "should_trigger": true
- },
- {
- "query": "chcę zrobić Appearance warunkowe formatowanie wierszy w Grid — jak ustawić ForeColor gdy Typ='usługa'?",
- "should_trigger": true
- },
- {
- "query": "napisz mi metodę w C# która oblicza VAT dla pozycji faktury w enova365",
- "should_trigger": false
- },
- {
- "query": "jak skonfigurować business.xml dla nowego modułu? potrzebuję definicję tabeli z relacją do Kontrahenta",
- "should_trigger": false
- },
- {
- "query": "zrób raport RDLC pokazujący listę faktur z podsumowaniem",
- "should_trigger": false
- },
- {
- "query": "jak zarejestrować FolderViewAttribute i WorkerAttribute w enova365?",
- "should_trigger": false
- },
- {
- "query": "jak zbudować API REST w ASP.NET Core do pobierania danych kontrahentów?",
- "should_trigger": false
- },
- {
- "query": "zrób mi worker C# który liczy saldo kontrahenta i eksponuje je jako właściwość w enova365",
- "should_trigger": false
- },
- {
- "query": "jak skonfigurować uprawnienia RightName i RightContext dla modułu enova365?",
- "should_trigger": false
- },
- {
- "query": "jak zmodyfikować istniejący pageform.xml — chcę dodać nowe pole do już istniejącej zakładki Ogólne Towaru",
- "should_trigger": true
- },
- {
- "query": "jak używać DataContext i EditValue żeby wyświetlić pola zagnieżdżonego obiektu np. Adres.Miasto w formularzu enova365?",
- "should_trigger": true
- }
-]
\ No newline at end of file
diff --git a/soneta-form-xml-workspace/trigger-eval.json b/soneta-form-xml-workspace/trigger-eval.json
deleted file mode 100644
index 0cf23a7..0000000
--- a/soneta-form-xml-workspace/trigger-eval.json
+++ /dev/null
@@ -1,82 +0,0 @@
-[
- {
- "query": "utwórz zakładkę pageform.xml dla obiektu Dokument z polami Numer, Data, Kontrahent i listą pozycji",
- "should_trigger": true
- },
- {
- "query": "jak zrobić widok listy viewform.xml dla Kontrahentów z kolumnami Kod, Nazwa, NIP, Miasto?",
- "should_trigger": true
- },
- {
- "query": "potrzebuję plik Adres.form.xml jako współdzielony fragment z polami adresowymi do użycia przez Include",
- "should_trigger": true
- },
- {
- "query": "jak ukryć pole w form.xml enova365 gdy Status nie jest równy 'Aktywny'? co to Visibility i RowCondition?",
- "should_trigger": true
- },
- {
- "query": "zrób mi zakładkę Towar.Ogolne.pageform.xml z grupą 'Dane podstawowe' i grupą z dwukolumnowym układem Row Stack",
- "should_trigger": true
- },
- {
- "query": "jak dodać Grid z IsToolbarVisible EditInPlace NewInPlace i Footer Sum do pageform.xml?",
- "should_trigger": true
- },
- {
- "query": "potrzebuję lookupform.xml dla wyboru Towaru z kolumnami Kod Nazwa Cena",
- "should_trigger": true
- },
- {
- "query": "co to Class Collapsable w enova365? chcę zwinąć grupę pól w formularzu i uzależnić Renderable od licencji HAN",
- "should_trigger": true
- },
- {
- "query": "jak w viewform.xml dodać Flow jako panel filtrów nad gridem? chcę użyć FilterPanelWidth i operatora + w EditValue",
- "should_trigger": true
- },
- {
- "query": "chcę zrobić Appearance warunkowe formatowanie wierszy w Grid — jak ustawić ForeColor gdy Typ='usługa'?",
- "should_trigger": true
- },
- {
- "query": "napisz mi metodę w C# która oblicza VAT dla pozycji faktury w enova365",
- "should_trigger": false
- },
- {
- "query": "jak skonfigurować business.xml dla nowego modułu? potrzebuję definicję tabeli z relacją do Kontrahenta",
- "should_trigger": false
- },
- {
- "query": "zrób raport RDLC pokazujący listę faktur z podsumowaniem",
- "should_trigger": false
- },
- {
- "query": "jak zarejestrować FolderViewAttribute i WorkerAttribute w enova365?",
- "should_trigger": false
- },
- {
- "query": "jak zrobić formularz HTML w React z polami adresowymi? potrzebuję Formik i yup validation",
- "should_trigger": false
- },
- {
- "query": "jak zbudować API REST w ASP.NET Core do pobierania danych kontrahentów?",
- "should_trigger": false
- },
- {
- "query": "zrób mi worker C# który liczy saldo kontrahenta i eksponuje je jako właściwość w enova365",
- "should_trigger": false
- },
- {
- "query": "jak skonfigurować uprawnienia RightName i RightContext dla modułu enova365?",
- "should_trigger": false
- },
- {
- "query": "jak zmodyfikować istniejący pageform.xml — chcę dodać nowe pole do już istniejącej zakładki Ogólne Towaru",
- "should_trigger": true
- },
- {
- "query": "jak używać DataContext i EditValue żeby wyświetlić pola zagnieżdżonego obiektu np. Adres.Miasto w formularzu enova365?",
- "should_trigger": true
- }
-]