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.