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
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.