Skip to content

I3239 — One job builds a run's executable and every other job of that run uses it

Build the debug executable once per validate run, upload it, and have suite-shard, evidence, ui, mesh-lab and the site jobs download it as MAJORDOMUS_BIN instead of running cargo build each. macOS keeps its own build.

BLOCKED wave 6 · p1 · implementation profile · parallel safe

Part of a-change-is-judged-in-minutes — A change is derived in under a second and judged in minutes, and nothing that could have changed is skipped.

Blocked. This issue cannot start until I3242 is done. The status is derived from that, not declared.

Objective

Build the debug executable once per validate run, upload it, and have suite-shard, evidence, ui, mesh-lab and the site jobs download it as MAJORDOMUS_BIN instead of running cargo build each. macOS keeps its own build.

Why

c228#3 and c195#2: build once and let consumers download products; every job otherwise pays restore, compile and link. It extends milestone ci-critical-path. Sources: chatgpt-majordomus:c195#2, chatgpt-majordomus:c228#3, chatgpt-majordomus:c019#0, chatgpt-majordomus:c019#4.

Current state

Measured on master 707a04c, 2026-10-18: validate.yml has five `cargo build --quiet --locked` steps, in the suite-shard, evidence, ui, mesh-lab and macos jobs (grep -c), and 18 suite cases call cargo build, run or test directly (grep -l over test/cases/*.sh). Only the plan artifact is shared.

Desired state

One Linux build per run; the artifact carries its generation, and a consumer refuses a mismatched one.

Scope

  • .github/workflows/validate.yml
  • test/lib.sh
  • test/cases/3019_a_failed_branch_run_cancels_itself.sh
  • lib/rust_bin.sh
  • scripts/ci-plan
  • .ai/repo/ci/plan.yaml
  • scripts/ci/run-plan
  • scripts/ci/evidence-collect
  • scripts/ci/mesh-lab-evidence

Out of scope

  • Uploading the whole target directory
  • Release builds (I2353, rescue)

Dependencies

Acceptance criteria

  • Exactly one Linux cargo build step per validate run (a case reads the workflow)
  • Each consumer's job time falls by its former build time, measured on GitHub
  • A consumer given an executable of another generation fails
  • Validation runs bash test/run.sh 3019_a_failed_branch_run_cancels_itself (the case on disk) and the one-build case this issue adds
  • test/lib.sh and the 18 suite cases that call cargo build/run/test directly use the downloaded MAJORDOMUS_BIN, or are listed as exempt with their measured compile cost
  • Per-job time is compared with I3242's committed GitHub baseline, suite shards included

Validation

  • scripts/ci-plan --check
  • bash test/run.sh 3019_a_failed_branch_run_cancels_itself

Evidence required

  • one_build_per_run_case
  • per_job_time_before_after

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

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