build, without the pipeline

A push becomes a build. There is no pipeline.

A per-repo CI config is a hand-maintained description of a dependency graph you already have. fastverk reads the real graph instead: a push resolves to a target set, builds hermetically on your own remote execution, and reports back — with no YAML to write, drift from, or debug at 2am.

A push resolves against the module graph — no per-repo configHermetic execution on your own Buildbarn RBECache, workers, queue and latency, live from your PrometheusAn OCI image per commit, inspectable to the layer filesystemOne status contract over GitHub and self-hosted GitLab
the duplication

Your pipeline is a worse copy of your build graph.

Two descriptions of the same dependency structure, only one of which is checked by anything.

A Bazel build graph already states, precisely and mechanically, what depends on what. A CI config restates a fraction of that by hand — which jobs run, in what order, triggered by which path globs — and then drifts, because nothing verifies the restatement against the original.

The drift is what bites. A new dependency edge lands in BUILD.bazel and the pipeline doesn't learn about it, so a change ships without ever building the thing it broke. The fix isn't a better pipeline file. It's not having one.

0
pipeline files to maintain
the graph is the configuration
hermetic
every action
same inputs, same outputs, cached
your cloud
where execution happens
your Buildbarn cluster, your account
per commit
an inspectable OCI image
down to the layer filesystem
the substrate

What replaces it.

Four moving parts, none of which is a config file someone has to remember to update.

How a push becomes a build

  • The graph resolves the work: a push is matched against the Bazel module graph, and the target set falls out of reverse-dependencies rather than a path glob someone wrote last year.
  • Remote execution does the work: actions run hermetically on your own Buildbarn cluster, so a cache hit is a real cache hit and a green is reproducible tomorrow.
  • The metrics already exist: cache, workers, queue depth and latency come from the Prometheus your RBE exposes. No Prometheus means empty panels — never a fabricated number.
  • The forge gets one contract: status lands as native Check Runs, Deployments, and commit statuses across GitHub and self-hosted GitLab, written as the signed-in user.
the cluster

The four numbers you actually tune.

Read from the Prometheus your remote execution already exposes — nothing new to instrument. Values illustrative.

Builds live
Buildbarn RBE · PromQL, read-only
signalnowwhat it tells you
cache hit rate 91.4% how much work you're not redoing
worker saturation 0.62 headroom before queueing starts
queue depth 18 whether merges outpace capacity
p99 action latency 4.2s the tail that sets wall-clock
source: the Prometheus your RBE already exposesno Prometheus: panels go empty — never a fake number
vs a config-driven pipeline

Derived beats declared.

The alternative asks a human to keep a second description of the dependency graph accurate, forever.

fastverk
a config-driven pipeline
Source of truth
The Bazel graph itself
A YAML file beside it
Adding a dependency
The build learns immediately
Someone updates the config, or doesn't
Execution
Hermetic, remote, cached
A runner with ambient state
Observability
The RBE's own Prometheus
A dashboard stack to run
Two forges
One contract
Two configs

The pipeline file was always a second, unverified copy of the dependency graph. Delete the copy.

plugin-tbzl · a push → a graph-scoped build
what this rests on

Backed by shipping plugins.

Each claim on this page is anchored to a plugin that provides it. The site build resolves these cross-references against the live feature catalog and fails if one of them doesn't exist — so this list can't quietly outlive what the platform ships.

related

Adjacent problems.

Prove it's safe to merge.

Hosted, or launched into your own AWS account. Start free — no card required.