Repository navigation
Architecture
Thomas Maerz edited this page Oct 4, 2026
·
1 revision
flowchart TB
subgraph Secrets[Secret boundary]
W[Workspace credential blocks]
end
subgraph Raw[Raw archive boundary]
SD[Slackdump]
SQL[(Workspace SQLite archives)]
FILES[(Attachment tree)]
end
subgraph Canonical[Canonical boundary]
SNAP[Coherent SQLite snapshot]
TX[Validation + transaction]
DB[(Canonical DuckDB)]
end
subgraph Control[Control plane]
DG[Dagster]
PG[Pushgateway]
end
subgraph Search[Independent search boundary]
SQ[Slackquery]
end
W --> SD --> SQL
SD --> FILES
SQL --> SNAP --> TX --> DB
DG --> SD
DG --> TX
TX --> PG
DB -->|read-only| SQ
FILES -->|read-only| SQ
Slackpipe owns credentials, extraction, raw persistence, canonicalization, lineage, and validation. Dagster owns orchestration state, not source truth. Slackquery is independently deployable and never writes Slackpipe data.
- Parse and validate workspace blocks.
- Select initial
archiveor incrementalresumebehavior. - Execute Slackdump under a global advisory lock.
- Reconcile attachment metadata and local object paths.
- Create a coherent SQLite backup snapshot.
- Validate source schema, continuity, and completeness.
- Upsert canonical tables inside one DuckDB transaction.
- Prove source/canonical invariants.
- Commit checkpoints and publish latest-run metrics.
- one global Slackdump mutation lock;
- one canonical DuckDB writer lock;
- Dagster pool and run concurrency limits;
- serialized rollout stages where source dependencies require ordering;
- immutable or read-only access for downstream consumers.
The raw archive remains the rebuildable source. A failed canonical transform rolls back its transaction. A failed check prevents operators from treating the new state as complete. Existing canonical rows remain available for readers.