From 5e01cc8b22c6fbdd94841bef61e4e983fc09f095 Mon Sep 17 00:00:00 2001 From: Marcin Wojas Date: Sun, 22 Mar 2026 21:12:12 +0100 Subject: [PATCH] Aktualizacja readme --- README.md | 174 +-- .../iteration-1/benchmark.json | 187 --- .../pageform-z-gridem/eval_metadata.json | 15 - .../pageform-z-gridem/with_skill/grading.json | 50 - .../outputs/Zamowienie.Szczegoly.pageform.xml | 45 - .../with_skill/outputs/metrics.json | 4 - .../pageform-z-gridem/with_skill/timing.json | 5 - .../without_skill/grading.json | 50 - .../outputs/Zamowienie.Szczegoly.pageform.xml | 41 - .../without_skill/outputs/metrics.json | 4 - .../without_skill/timing.json | 5 - .../iteration-1/review.html | 1325 ----------------- .../viewform-lista/eval_metadata.json | 14 - .../viewform-lista/with_skill/grading.json | 45 - .../outputs/Pracownicy.viewform.xml | 21 - .../with_skill/outputs/metrics.json | 4 - .../viewform-lista/with_skill/timing.json | 5 - .../viewform-lista/without_skill/grading.json | 45 - .../outputs/Pracownicy.viewform.xml | 13 - .../without_skill/outputs/metrics.json | 4 - .../viewform-lista/without_skill/timing.json | 5 - .../warunkowa-widocznosc/eval_metadata.json | 12 - .../with_skill/grading.json | 35 - .../outputs/Kontrahent.Kredyt.pageform.xml | 128 -- .../with_skill/outputs/metrics.json | 4 - .../with_skill/timing.json | 5 - .../without_skill/grading.json | 35 - .../outputs/Kontrahent.Kredyt.pageform.xml | 167 --- .../without_skill/outputs/metrics.json | 4 - .../without_skill/timing.json | 5 - soneta-form-xml-workspace/run_loop.log | 57 - .../skill-snapshot/SKILL.md | 734 --------- .../skill-snapshot/assets/Adres.form.xml | 40 - .../Kontrahent.WarunkiHandlowe.pageform.xml | 62 - .../assets/MojObiekt.Ogolne.pageform.xml | 58 - .../skill-snapshot/evals/evals.json | 49 - .../skill-snapshot/references/ELEMENTS.md | 864 ----------- .../skill-snapshot/references/Form.xsd | 1060 ------------- .../trigger-eval-approved.json | 78 - soneta-form-xml-workspace/trigger-eval.json | 82 - 40 files changed, 58 insertions(+), 5482 deletions(-) delete mode 100644 soneta-form-xml-workspace/iteration-1/benchmark.json delete mode 100644 soneta-form-xml-workspace/iteration-1/pageform-z-gridem/eval_metadata.json delete mode 100644 soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/grading.json delete mode 100644 soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/outputs/Zamowienie.Szczegoly.pageform.xml delete mode 100644 soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/outputs/metrics.json delete mode 100644 soneta-form-xml-workspace/iteration-1/pageform-z-gridem/with_skill/timing.json delete mode 100644 soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/grading.json delete mode 100644 soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/outputs/Zamowienie.Szczegoly.pageform.xml delete mode 100644 soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/outputs/metrics.json delete mode 100644 soneta-form-xml-workspace/iteration-1/pageform-z-gridem/without_skill/timing.json delete mode 100644 soneta-form-xml-workspace/iteration-1/review.html delete mode 100644 soneta-form-xml-workspace/iteration-1/viewform-lista/eval_metadata.json delete mode 100644 soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/grading.json delete mode 100644 soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/outputs/Pracownicy.viewform.xml delete mode 100644 soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/outputs/metrics.json delete mode 100644 soneta-form-xml-workspace/iteration-1/viewform-lista/with_skill/timing.json delete mode 100644 soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/grading.json delete mode 100644 soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/outputs/Pracownicy.viewform.xml delete mode 100644 soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/outputs/metrics.json delete mode 100644 soneta-form-xml-workspace/iteration-1/viewform-lista/without_skill/timing.json delete mode 100644 soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/eval_metadata.json delete mode 100644 soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/grading.json delete mode 100644 soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/outputs/Kontrahent.Kredyt.pageform.xml delete mode 100644 soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/outputs/metrics.json delete mode 100644 soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/with_skill/timing.json delete mode 100644 soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/grading.json delete mode 100644 soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/outputs/Kontrahent.Kredyt.pageform.xml delete mode 100644 soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/outputs/metrics.json delete mode 100644 soneta-form-xml-workspace/iteration-1/warunkowa-widocznosc/without_skill/timing.json delete mode 100644 soneta-form-xml-workspace/run_loop.log delete mode 100644 soneta-form-xml-workspace/skill-snapshot/SKILL.md delete mode 100644 soneta-form-xml-workspace/skill-snapshot/assets/Adres.form.xml delete mode 100644 soneta-form-xml-workspace/skill-snapshot/assets/Kontrahent.WarunkiHandlowe.pageform.xml delete mode 100644 soneta-form-xml-workspace/skill-snapshot/assets/MojObiekt.Ogolne.pageform.xml delete mode 100644 soneta-form-xml-workspace/skill-snapshot/evals/evals.json delete mode 100644 soneta-form-xml-workspace/skill-snapshot/references/ELEMENTS.md delete mode 100644 soneta-form-xml-workspace/skill-snapshot/references/Form.xsd delete mode 100644 soneta-form-xml-workspace/trigger-eval-approved.json delete mode 100644 soneta-form-xml-workspace/trigger-eval.json 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 - - - - - - - -
-
-
-

Eval Review:

-
Review each output and leave feedback below. Navigate with arrow keys or buttons. When done, copy feedback and paste into Claude Code.
-
-
-
- - - - - -
-
- -
-
Prompt
-
-
-
-
- - -
-
Output
-
-
No output files found
-
-
- - - - - - - - -
-
Your Feedback
-
- - - -
-
-
- - -
- - -
-
-
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 -