fix(hw-gate): import the runner user's login toolchain before building - #699
Conversation
Second live run on #686 (33849478193): Sol authorized hardware, both lanes started, both failed inside 40 s with "[Errno 2] No such file or directory: 'cargo'". No GPU was ever touched. Both runners are systemd services. `actions-runner/.path` was written at install (2026-07-11) and is the distro default PATH; the service environment has no ~/.cargo/bin, no /opt/rocm/core/bin, no ROCM_PATH. The #679 evidence runs were driven by hand from a login shell, which is why this never surfaced. Nothing on either host changed. hw-run and fable-decide now import the runner user's login PATH and the ROCm variables (ROCM_PATH, HIP_PATH, HSA_PATH, HIP_PLATFORM, LD_LIBRARY_PATH) via GITHUB_PATH / GITHUB_ENV before the build steps. Verified under a bare service environment on hiptrx: the step yields ROCM_PATH=/opt/rocm/core, HIP_PATH, LD_LIBRARY_PATH, and cargo/hipcc/omp resolve. hipx's login shell carries the same variables.
hw-gate sol prelimsummary: The workflow imports the self-hosted runner user's login-shell PATH and selected ROCm environment variables into GitHub Actions before hardware-route execution and Fable's head/base builds, fixing service jobs that could not resolve cargo or hipcc. The commands only read the trusted runner user's login environment and append recognized values to GitHub-managed environment files; they do not alter repository code, runner configuration, or external state. run_hardware: true routes:
unavailable_routes: (none) claim_assessment: The author claims both self-hosted service lanes lacked cargo/ROCm paths and that importing the login environment fixes hardware-route and Fable builds. This is proven only if a dispatch reaches and completes the build portions on both hiptrx and hipx without the prior cargo-not-found error; no model fixture route is needed because the diff changes CI environment setup rather than model behavior. |
hw-gate evidence — 2 lane(s) — verdict faillane hiptrx (unknown)hw-gate evidence
fixturesno fixtures kernelnot run lane hipx (gfx1100)hw-gate evidence
fixturesno fixtures kernelnot run |
hw-gate sol verdict{
"claim_verdict": "disproven",
"confidence": 0.99,
"coverage": {
"gaps": [
"The policy-file change still requires human review.",
"Neither lane reached a successful build or any hardware route."
],
"surfaces_evidenced": [
"ci",
"build",
"environment"
],
"surfaces_touched": [
"policy",
"ci",
"build",
"environment"
]
},
"decision": "block",
"eyeball": [
"Both lane reports show build_error \"[Errno 2] No such file or directory: 'cargo'\", null binary MD5s, and build durations below one millisecond."
],
"phase": "verdict",
"rationale": "The added login-shell import at .github/workflows/hw-gate.yml:227-228 was exercised but did not make cargo available to the following route step. Both hiptrx and hipx failed at subprocess creation with the same cargo-not-found error this PR claims to fix; no binaries or fixture evidence were produced. The claim is therefore disproven and the failed hardware evidence requires block.",
"regressions": []
}Floor: hard=['hw_run_result=failure', "evidence verdict='fail'", 'policy_paths: .github/workflows/hw-gate.yml'] soft=["coverage_gaps: ['The policy-file change still requires human review.', 'Neither lane reached a successful build or any hardware route.']"] model_decision=block final=block |
There was a problem hiding this comment.
hw-gate sol verdict block: The added login-shell import at .github/workflows/hw-gate.yml:227-228 was exercised but did not make cargo available to the following route step. Both hiptrx and hipx failed at subprocess creation with the same cargo-not-found error this PR claims to fix; no binaries or fixture evidence were produced. The claim is therefore disproven and the failed hardware evidence requires block.
Summary
Second live run on #686 (33849478193): Sol read the diff and authorized hardware, both lanes started, both failed inside 40 s — no GPU was ever touched:
Both runners are systemd services.
actions-runner/.pathwas written at install (2026-07-11) and is the distro default; the service environment has no~/.cargo/bin, no/opt/rocm/core/bin, noROCM_PATH. The #679 evidence runs were driven by hand from a login shell, which is why this never surfaced. Nothing on either host changed.Changes
hw-runandfable-decidegain one step before their build: import the runner user's loginPATH(→GITHUB_PATH) and the ROCm variablesROCM_PATH,HIP_PATH,HSA_PATH,HIP_PLATFORM,LD_LIBRARY_PATH(→GITHUB_ENV) viabash -lc. Host-agnostic; no runner reconfiguration.Which surface(s) does this touch?
hw-gate.yml(hard floor: a human merges this)Evidence
Step body executed under a bare service environment on hiptrx (
env -i PATH=<distro default>): yieldsROCM_PATH=/opt/rocm/core,HIP_PATH=/opt/rocm/core,LD_LIBRARY_PATH=/opt/rocm/core/lib, andcargo/hipcc/ompresolve on the resulting PATH. hipx's login shell carries the same variables (/opt/rocm/core/bin,~/.cargo/bin). Workflow YAML parses.After merge
Re-dispatch on #686:
gh workflow run hw-gate.yml -f pr=686(gate workflow comes from base).