Skip to content

I2670 — A build-cache offer is a typed model and its selection is a pure, explained function

Model an offer (protocol, provider, scope, non-secret endpoint, bucket, priority, capacity, health) and select among offers deterministically with the reason.

READY wave 0 · p1 · implementation profile · runs alone

Part of development-runtime — The runtime has a development surface.

Ready. Every dependency is done, so majordomus plan start I2670 will be accepted.

Objective

Model an offer (protocol, provider, scope, non-secret endpoint, bucket, priority, capacity, health) and select among offers deterministically with the reason.

Why

The owner, 2026-10-13, with full clearance: set up MinIO, an sccache server and every mesh node, verified and validated. The cluster compiles the same Rust on every machine from a cold cache; two declared offload hosts were under their disk minimum that day. See ADR 0157.

Current state

Measured on master b29cf4e487 on 2026-10-13: no build-cache, S3 or minio concept exists in source, schema or docs; sccache appears only in the container build (deploy/render.rs) and ADRs 0055 and 0139.

Desired state

A typed Offer and a select() that ranks healthy, scope, priority, headroom, round-trip time and node id, and returns the choice with the passed-over candidates; no offer is a normal answer; no secret field exists in the type.

Scope

  • apps/majordomus-cli/src/mesh/build_cache/
  • share/schemas/majordomus/mesh-declaration/

Out of scope

  • Discovery transport: I2671
  • Any command or endpoint: I2672

Dependencies

None. This issue is a root of the graph.

What waits on this

Acceptance criteria

  • Selection is deterministic for any ordering of the same offers
  • A stale or unhealthy offer is never chosen over a healthy one and is listed as passed over
  • No offers selects none and says so
  • The serialized form cannot carry a credential

Validation

  • bin/majordomus plan validate
  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib mesh::build_cache

Evidence required

  • build_cache_model_unit_tests

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Timeline

started
—
verified
—
completed
—

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I2670.yaml. Read it back with majordomus plan show I2670.

Searches the titles and descriptions of every page this site publishes.