Transactional pipelines
In Bauplan, every pipeline run behaves like a database transaction. That means:
- If the run succeeds, Bauplan commits all outputs.
- If the run fails, the data on your current branch remains untouched.
This behavior applies automatically - whether you're developing locally or running production jobs on a schedule.
Bauplan enforces transactionality with temporary execution branches:
- When you trigger a run, the platform forks your current branch to create an isolated branch: Bauplan materializes intermediate outputs in this temporary branch.
- If the run succeeds, Bauplan merges the outputs into your working branch, making it point to the latest commit - your branch now reflects the results of that pipeline run.
- If the run fails, your working branch remains unchanged. Bauplan preserves intermediate artifacts for inspection.
This guarantees that every change to your lakehouse is atomic, isolated, and versioned.
┌────────────┐
│ main/ │
│ active │
│ branch │
└─────┬──────┘
│
(run triggered from this branch)
│
▼
┌────────────────────┐
│ temporary branch │
│ (isolated run) │
└─────────┬──────────┘
│
▼
┌─────────────────────────────┐
│ pipeline succeeds? │-─────────────────┐
└─────────────┬───────────────┘ │
│ yes │ no
▼ ▼
┌────────────────────────┐ ┌───────────────────────────┐
│ Merge into working │ │ Keep active branch clean │
│ branch as new Ref │ │ Keep temp branch for logs │
└───────────┬────────────┘ └─────────┬─────────────────┘
│ │
▼ ▼
┌──────────────────────┐ ┌─────────────────────────────┐
│ Active branch now │ │ Inspect failed run metadata │
│ points to new Ref │ │ Re-run or debug as needed │
└──────────────────────┘ └─────────────────────────────┘