### Description Implement the source abstraction for syncing and fetching DAGs from file systems or remote locations. ### Tasks - [ ] Define `@behaviour Levicon.DAG.Source` (`list/0`, `fetch/1`, `on_change/1`) - [ ] Implement `LocalSource` (dev/test — watch local directory) - [ ] Implement `GitSource` (MVP — `git clone` on startup, `git pull` on interval) - [ ] Implement sync job (Quantum-scheduled): diff ETags -> register/update/deactivate DAGs - [ ] Phase 2: Implement `S3Source` (ListObjectsV2 + ETag diff)
Description
Implement the source abstraction for syncing and fetching DAGs from file systems or remote locations.
Tasks
@behaviour Levicon.DAG.Source(list/0,fetch/1,on_change/1)LocalSource(dev/test — watch local directory)GitSource(MVP —git cloneon startup,git pullon interval)S3Source(ListObjectsV2 + ETag diff)