Historia zmian
v0.2.0
Przeprojektowana lista DAG-ów, metadane i wyszukiwarka.
Lista DAG-ów
- Przeglądarka plików to teraz pełnoszerokościowa lista DAG-ów pokazująca ID DAGa, ścieżkę, opis, tagi i twórcę — nie tylko ścieżkę pliku.
- Wyszukiwarka filtruje po ID DAGa, ścieżce, opisie, tagach, ownerze lub twórcy.
- Przełączanie między widokiem kafelek a zwartą tabelą (wybór jest zapamiętywany).
- GET /files wzbogacone o sparsowane metadane DAGa (dag_id, opis, tagi, owner) oraz autora draftu, z cache per plik, żeby listowanie było szybkie.
Poprawki
- Nowy DAG zapisany jako draft, ale nigdy nie wdrożony, już nie znika z przeglądarki plików — pokazuje się z badgem „not deployed”, więc można go otworzyć i dokończyć.
v0.1.0
Pierwsze publiczne wydanie.
Edytor wizualny
- Canvas React Flow: przeszukiwalna, pogrupowana kategoriami paleta operatorów z przeciąganiem (drag-and-drop).
- Krawędzie zależności między zadaniami i TaskGroupami, włącznie z połączeniami grupa-grupa.
- Grupowanie wizualne: zaznaczanie ramką, Ctrl+G, przeciąganie do ramki, zmiana nazwy/usuwanie z potwierdzeniem, zagnieżdżone grupy.
- Edycja krawędzi: Label i trigger_rule dla poszczególnych zadań.
- Typowane edytory parametrów: edytor klucz:wartość dla słowników, pola rich-text (WYSIWYG), wybór połączeń dla parametrów conn_id, rozwijane pola z surowym Pythonem.
- Modal ustawień DAGa z kreatorem crona opartym na "chipach"; default_args (owner, email, retries, retry_delay).
Edytor kodu i round-trip
- Edytor CodeMirror 6 z trybem Split (canvas + kod).
- Round-trip identyczny co do bajtu dzięki libcst: niezmieniony graf generuje plik źródłowy identyczny jak przed edycją.
- Chirurgiczne edycje na poziomie pojedynczego argumentu dla zmienionych instrukcji — ręczne formatowanie w reszcie pliku pozostaje nietknięte.
- Trzypoziomowy parser: DAGi tworzone w DagSmith, typowe ręcznie pisane DAGi (@dag, with DAG, >>, chain(), zagnieżdżone TaskGroupy) oraz dynamiczne konstrukcje (pętle, .partial().expand()) pokazywane jako bloki tylko-do-odczytu.
- Przycisk "Load from bundle" do wczytania aktualnie wdrożonego pliku z powrotem do draftu.
Katalog providerów
- Automatyczna introspekcja operatorów/sensorów wśród zainstalowanych providerów Airflow — bez ręcznie utrzymywanej listy bloków.
- Odkrywanie parametrów świadome hierarchii klas (MRO) dla operatorów przekazujących **kwargs do klasy rodzica (rodzina operatorów SQL).
- Katalog trzymany w cache z warunkowymi zapytaniami opartymi na ETagu.
Draft → Deploy
- Wersjonowane drafty we własnej bazie metadanych Airflow, z autosave, historią i przywracaniem.
- Walidacja przed deployem: szybkie sprawdzenie składni plus pełny import DagBag w izolowanym podprocesie.
- Atomowe, zabezpieczone backupem zapisy z wykrywaniem konfliktów (optimistic locking) i widokiem diff przy konflikcie.
Zespoły i git
- Zespoły przypisane do katalogów: edycja tylko dla członków, DAGi tagowane zespołem, admini omijający ograniczenia.
- Zmiana przypisania pojedynczego pliku do zespołu przez admina, niezależnie od katalogu.
- Commit do gita przy deployu dla bundle’ów będących repozytoriami git.
- Opcjonalny, osobny zdalny git dla zespołu z przyciskiem Commit & Push (GitHub i GitLab) oraz automatycznym pushem przy deployu.
- Log audytowy JSONL dla deployów, git pushy i zmian zespołów.
Bezpieczeństwo
- Deploy domyślnie wyłączony; wymaga świadomego włączenia.
- Każdy endpoint autoryzowany przez Airflow Auth Manager.
- Kod DAGów nigdy nie wykonywany w procesie api-servera — tylko w izolowanym, ograniczonym czasowo podprocesie.
- Ograniczenie ścieżek do katalogu bundle’a z odrzucaniem uciekających symlinków.
Jakość
- Zestaw testów backendu (pytest), w tym korpus testów round-trip identycznych co do bajtu; lintowanie ruff.
- Testy jednostkowe frontendu (vitest) i sprawdzanie typów (tsc).
- GitHub Actions CI przy każdym push/PR; workflow release na PyPI przez trusted publishing (bez przechowywanych tokenów).
- Licencja Apache-2.0.
Dag