ADR 0011: Block distribution

Status: accepted, 2026-10-06

Context

The site says: package steps as a typed, versioned block; each repo pins a version and upgrades on its own schedule. The example is acme/web-service@v3, defined in acme/blocks, and it appears in a workflow file in the step-kind position, the same place a built-in kind like oci.image appears. That surface is already fixed — it is a golden fixture, crates/lang/tests/fixtures/site-block.ks, and ADR 0003 makes the site's examples the syntax's tests.

What is not fixed is where a block's bytes come from and what a workflow file pins. Two requirements pull against each other. A block is reused across repositories, so it has to be fetchable from somewhere a repository we have never seen can reach. And check must type-check a use of a block offline and in under a second — the cold 1 s / warm p95 100 ms budget pinned in crates/cli/benches/check.rs, and the offline CI job that runs check in a network namespace with no interfaces, which says in so many words to keep check free of network access and store reads. Nothing the checker needs may depend on a round trip.

Three options:

Decision

Option B for distribution, A as the authoring source, C only ever as metadata. Git stays where git is good — history, review, branching a block — and the OCI artifact is what a workflow file consumes.

Why not the other two

Consequences