From 89757f051ff35a27952b11c1ab81991260b1e97e Mon Sep 17 00:00:00 2001 From: forge-admin Date: Fri, 9 Oct 2026 20:43:29 +0200 Subject: [PATCH 1/4] fix(ci): install Rust via rustup on the self-hosted ADF lane The nightly ADF Agent Validation workflow has failed on every scheduled run since 4 October. The job dies during "Prepare all required actions" with "Unable to resolve action dtolnay/rust-action, repository not found": the action does not exist. Install the toolchain through rustup instead, matching the pattern release-lsp.yml already uses on its self-hosted lane. The runners share a kache-backed CARGO_HOME whose build dir holds read-only hard-linked artefacts, so a third-party toolchain action that injects its own cache and rustc wrapper fights that setup. Pin 1.96 rather than stable: the repo root rust-toolchain.toml pins channel 1.96 (fleet standard, ADR-0006), and installing stable would drift from that pin and rewrite the shared stable toolchain on the host. The pin already selects the toolchain, so no rustup override is set. Verified the step's commands under the runner's real environment (RUSTUP_HOME=/home/alex/.rustup-runner-2a): the install is a no-op, exit 0, with rustfmt and clippy present, and rustc/cargo resolve to 1.96.1. --- .github/workflows/adf-agent-validation.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/adf-agent-validation.yml b/.github/workflows/adf-agent-validation.yml index 73d5dc76d..023a69aac 100644 --- a/.github/workflows/adf-agent-validation.yml +++ b/.github/workflows/adf-agent-validation.yml @@ -32,9 +32,17 @@ jobs: uses: actions/checkout@v4 - name: Install Rust - uses: dtolnay/rust-action@stable - with: - components: rustfmt, clippy + # Self-hosted bigbox runners already carry rustup and the pinned + # toolchain, and share a kache-backed CARGO_HOME whose build dir holds + # read-only hard-linked artefacts. Install through rustup, as + # release-lsp.yml does on its self-hosted lane. Installing 1.96 here + # keeps the host toolchain present; the repo root rust-toolchain.toml + # already selects it, so no override is set and the job neither drifts + # from the pin nor rewrites the shared stable toolchain on the host. + run: | + rustup toolchain install 1.96 --profile minimal --component rustfmt,clippy + rustc --version + cargo --version - name: Build adf binary run: | From 4daa4714f5f87ccca8b5afe5db8e17304b54f474 Mon Sep 17 00:00:00 2001 From: forge-admin Date: Fri, 9 Oct 2026 21:17:06 +0200 Subject: [PATCH 2/4] fix(ci): clear the kache rustc wrapper on the ADF lane The verification run on this branch (37978805868) proved the rustup install works: "Install Rust" now succeeds and the job advances past the action-resolution failure. It then died in "Build adf binary": error: could not execute process `kache .../bin/rustc -vV` (never executed) Caused by: No such file or directory (os error 2) The runner host sets rustc-wrapper = "kache" in ~/.cargo/config.toml, and kache is not on the runner PATH. release-lsp.yml clears RUSTC_WRAPPER and RUSTC_WORKSPACE_WRAPPER on its self-hosted lane for exactly this reason; do the same here, before the build step. --- .github/workflows/adf-agent-validation.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/adf-agent-validation.yml b/.github/workflows/adf-agent-validation.yml index 023a69aac..d6a232a53 100644 --- a/.github/workflows/adf-agent-validation.yml +++ b/.github/workflows/adf-agent-validation.yml @@ -44,6 +44,17 @@ jobs: rustc --version cargo --version + - name: Disable Rust wrappers for self-hosted builds + # The runner host sets rustc-wrapper = "kache" in ~/.cargo/config.toml, + # but kache is not on the runner PATH, so cargo dies with "could not + # execute process `kache ...` (never executed)". release-lsp.yml clears + # the wrapper on its self-hosted lane for the same reason. + run: | + { + echo "RUSTC_WRAPPER=" + echo "RUSTC_WORKSPACE_WRAPPER=" + } >> "$GITHUB_ENV" + - name: Build adf binary run: | cargo build --release -p terraphim_orchestrator --bin adf From 6aec6f6f8eef68ce111cf5448316ce387e2d4dd2 Mon Sep 17 00:00:00 2001 From: forge-admin Date: Fri, 9 Oct 2026 21:19:15 +0200 Subject: [PATCH 3/4] fix(ci): put kache on PATH instead of disabling the wrapper The prior commit cleared RUSTC_WRAPPER to get past the build failure. That is the wrong fix: it discards kache's content-addressed cache, which is the reason the wrapper is configured in the first place, and slows every self-hosted build. The real fault is PATH. kache lives in ~/.local/bin and works fine (v0.12.0, daemon active, wrapper executes), but the terraphim-ai runner .env sets a PATH without that directory: PATH=/home/alex/.cargo-runner-5/bin: /home/alex/.rustup-runner-5/toolchains/stable-.../bin: /usr/local/bin:/usr/bin:/bin Compare the zestic runner, which does include ~/.local/bin. Add ~/.local/bin via GITHUB_PATH so the existing rustc-wrapper resolves and the build keeps the cache. Drop the wrapper-clearing step. --- .github/workflows/adf-agent-validation.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/adf-agent-validation.yml b/.github/workflows/adf-agent-validation.yml index d6a232a53..0ad00f5d7 100644 --- a/.github/workflows/adf-agent-validation.yml +++ b/.github/workflows/adf-agent-validation.yml @@ -44,16 +44,16 @@ jobs: rustc --version cargo --version - - name: Disable Rust wrappers for self-hosted builds + - name: Put the kache build cache on PATH # The runner host sets rustc-wrapper = "kache" in ~/.cargo/config.toml, - # but kache is not on the runner PATH, so cargo dies with "could not - # execute process `kache ...` (never executed)". release-lsp.yml clears - # the wrapper on its self-hosted lane for the same reason. + # and the daemon runs, but kache lives in ~/.local/bin which the + # terraphim-ai runner .env does not include. Without it cargo dies with + # "could not execute process `kache ...` (never executed)". Add the + # directory rather than clearing RUSTC_WRAPPER, so the build keeps the + # content-addressed cache the wrapper exists to provide. run: | - { - echo "RUSTC_WRAPPER=" - echo "RUSTC_WORKSPACE_WRAPPER=" - } >> "$GITHUB_ENV" + echo "${HOME}/.local/bin" >> "$GITHUB_PATH" + kache --version - name: Build adf binary run: | From c88d630b74c6b078b75a05bf66db11a2b890f57f Mon Sep 17 00:00:00 2001 From: forge-admin Date: Fri, 9 Oct 2026 21:20:18 +0200 Subject: [PATCH 4/4] fix(ci): assert kache by absolute path; GITHUB_PATH applies next step The previous commit failed at run 37979446951 with "kache: command not found" (exit 127). The PATH write was correct; the verification line ran in the same step, and GITHUB_PATH only affects subsequent steps. Call the binary by absolute path for the assertion. --- .github/workflows/adf-agent-validation.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/adf-agent-validation.yml b/.github/workflows/adf-agent-validation.yml index 0ad00f5d7..bdc4edd9d 100644 --- a/.github/workflows/adf-agent-validation.yml +++ b/.github/workflows/adf-agent-validation.yml @@ -53,7 +53,9 @@ jobs: # content-addressed cache the wrapper exists to provide. run: | echo "${HOME}/.local/bin" >> "$GITHUB_PATH" - kache --version + # GITHUB_PATH applies from the next step, so assert the binary + # directly here rather than relying on PATH already being updated. + "${HOME}/.local/bin/kache" --version - name: Build adf binary run: |