ci(behavior-e2e): run steps in PowerShell on the Windows strix-halo runner#1535
Conversation
…unner
The Agent Behavior E2E workflow was authored for a Linux runner, but the
strix-halo runner (sjlab-stx-halo-18, label stx-test) is Windows and defaults
run steps to PowerShell 5.1. Every run died at "Setup Python" on
`uv venv && uv pip install` — `&&` is not a valid statement separator there.
Rewrite the three run steps in PowerShell, matching the lab-runner convention
in build_cpp.yml (`if ($LASTEXITCODE -ne 0) { throw }`). Also fix the
failure-artifact upload, whose `/tmp/...` glob can never match on Windows, by
pinning pytest's --basetemp to ${{ runner.temp }} and uploading from there.
SummaryCorrect, well-scoped fix — the PowerShell conversion is necessary for this workflow to run at all on the Windows strix-halo runner, and it faithfully follows the Issues Found🟡 Runner label may not match the actual runner ( This PR's goal is "so the harness can finally execute," but that hinges on
If the runner isn't actually tagged 🟢 Mixed path separators in the upload glob ( Minor consistency nit, not a bug: Strengths
VerdictApprove with suggestions — the change is correct and ready. Just confirm the |
Inline `uv venv` assumed uv was already on the runner's PATH; the proven lab-runner convention (build_cpp.yml) installs uv via the setup-venv composite action, which also creates .venv and puts it on PATH so gaia/pytest are directly callable. Switch to it and drop the now-unneeded inline uv steps.
Why this matters
The Agent Behavior E2E workflow was authored for a Linux runner, but the
strix-haloself-hosted runner it targets (sjlab-stx-halo-18, labelstx-test) is Windows and defaultsrun:steps to PowerShell 5.1. Every triggered run died immediately at Setup Python onuv venv && uv pip install -e ".[dev]"— PowerShell 5.1 rejects&&as a statement separator. The workflow could never run, so the #1428 false-success guarantee it exists to protect was never actually enforced in CI.This change makes the job match the proven lab-runner convention (
build_cpp.yml): Python/uv setup goes through the./.github/actions/setup-venvcomposite action (installs uv, creates.venv, puts it on PATH), and the remaining inline steps run in PowerShell.Threads:
uv venv && uv pip install(which assumed uv was on the runner's PATH and used bash&&) with the composite action every other GAIA lab-runner job uses.shell: powershellwithif ($LASTEXITCODE -ne 0) { throw };setup-venvputs.venv\Scriptson PATH sogaia/pytestare called directly./tmp/pytest-*/..., which can never match on Windows. Pins pytest's--basetempto${{ runner.temp }}\pytest-behaviorand uploads from there, so post-mortemtranscripts.jsonis actually captured on failure.Known limitation (not addressed here)
The Ensure Lemonade step runs
gaia init --skip-lemonade, which does not start a Lemonade server. The harness auto-skips whenLEMONADE_BASE_URLis unreachable, so unless this runner already has Lemonade serving on:13305, the job will pass vacuously (everything skipped).build_cpp.yml's STX job starts Lemonade explicitly viainstall-lemonade+start-lemonade.ps1. Left out of this PR because the right model/ctx and whether the runner pre-runs Lemonade are maintainer decisions — flagging for a follow-up.Test plan
workflow_dispatchon the strix-halo runner; confirm Setup Python environment and Ensure Lemonade complete (no&&parser error, no "uv not found").:13305. If it skips, the Lemonade-start follow-up above is required.behavior-e2e-artifactsupload containstranscripts.json.