Skip to content

I3955 — Whether an archived cargo build directory is reused on a second node is measured before anything restores one

Build one commit cold on node A, archive its build directory without incremental state, restore it on node B with the same paths but its own checkout and registry, and record how many units B finds Fresh, the archive size and both build times; decide from that whether the cargo build directory becomes a kind of mesh build-cache ensure.

BLOCKED wave 0 · p1 · implementation profile · parallel safe

Part of builds-reuse-the-mesh-cache — Builds reuse the mesh cache: compiled Rust, the cargo build directory, mix deps and npm packages, keyed by platform, toolchain and inputs.

Blocked. This issue cannot start until milestone:builds-reuse-the-mesh-cache is done. The status is derived from that, not declared.

Objective

Build one commit cold on node A, archive its build directory without incremental state, restore it on node B with the same paths but its own checkout and registry, and record how many units B finds Fresh, the archive size and both build times; decide from that whether the cargo build directory becomes a kind of mesh build-cache ensure.

Why

The owner, 2026-10-22, after lundra (the build and deploy host) reached zero free bytes: the shared cache must be part of Majordomus — used when MinIO is available, enforced, dynamic, derived — for compiled Rust, the shared cargo build directory, mix deps.get and npm install, keyed by a triplet for the most reuse. Decided the same day after critique: the store is trusted only through a signed offer (I2671), the build directory archive is measured before it is built (I3955), and the dependency cache is generic and wired first into prismatic-platform. See ADR 0157 and intent a-build-reuses-what-the-mesh-already-built.

Current state

Not measured. ADR 0139 measured 0 sccache hits between two build directories; the build-script fingerprint carries each tree's absolute root on purpose (.cargo/config.toml, MAJORDOMUS_BUILD_TREE); build directories ran from 3.4 GB median to 25 GB (lib/rust_bin.sh).

Desired state

A recorded claim with the commit, the machines, the counts and the times, and the decision it supports written into ADR 0157. Measured 2026-10-22 on lundra in two containers of rust:1-bookworm with identical paths and separate checkouts and registries (3 cpus each): commit 2034d4a3f0b cold on A in 566 s (142 units compiled), build directory archived without incremental state at 2.9 GB, restored on B: 142 Fresh, 0 compiled. Decision 12 of ADR 0157 records it: the cargo build directory is a kind of I3952.

Scope

  • .ai/repo/adrs/0157-the-mesh-offers-a-shared-build-cache.md
  • .ai/repo/project/intents/a-build-reuses-what-the-mesh-already-built.yaml
  • docs/BUILD_CACHE.md

Out of scope

  • Building the restore itself

Dependencies

None. This issue is a root of the graph.

Acceptance criteria

  • Node B's checkout and registry are its own (new mtimes), and only the build directory travels
  • The result is recorded whichever way it falls; a reuse below the cost of the transfer decides against the kind

Validation

  • bin/majordomus plan validate

Evidence required

  • build_dir_reuse_measured

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/I3955.yaml. Read it back with majordomus plan show I3955.

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