diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index c50d6350381..1fd141ee4a0 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -93,7 +93,8 @@ jobs: # trigger on IME source rather than on a spec name in some route's list. NATIVE_IME_SOURCE_CHANGED="$(printf '%s\n' "$CHANGED" | node config/scripts/pr-e2e-source-routing.mjs --native-ime-source)" echo "native_ime_source_changed=$NATIVE_IME_SOURCE_CHANGED" >> "$GITHUB_OUTPUT" - WSL_SOURCE_CHANGED="$(printf '%s\n' "$CHANGED" | node config/scripts/pr-e2e-source-routing.mjs --wsl-source)" + WSL_CHANGED="$(git diff --name-only --no-renames --diff-filter=ACDMR --merge-base "$BASE" "$HEAD")" + WSL_SOURCE_CHANGED="$(printf '%s\n' "$WSL_CHANGED" | node config/scripts/pr-e2e-source-routing.mjs --wsl-source)" echo "wsl_source_changed=$WSL_SOURCE_CHANGED" >> "$GITHUB_OUTPUT" echo "Native IME source changed: $NATIVE_IME_SOURCE_CHANGED" SHOULD_RUN="$(printf '%s\n' "$CHANGED" | node config/scripts/pr-e2e-source-routing.mjs --reusable-workflow)" diff --git a/config/reliability-gates.jsonc b/config/reliability-gates.jsonc index 14605e55717..1153293f77c 100644 --- a/config/reliability-gates.jsonc +++ b/config/reliability-gates.jsonc @@ -18159,35 +18159,20 @@ "protection": "partial", "owner": "terminal-runtime", "layer": "electron-windows-wsl", - "surfaces": [ - "agent tab launch", - "keyboard paste", - "terminal runtime retention" - ], - "platforms": [ - "windows" - ], - "providers": [ - "wsl1", - "wsl2" - ], - "coveredPlatforms": [ - "windows" - ], - "coveredProviders": [ - "wsl1" - ], - "coverageNotes": "Two Windows CI runs each passed the three WSL1 cases three times. The final per-scenario participation verifier and PR routing still await CI validation. WSL2 remains untested.", - "motivatingLinks": [ - "https://github.com/stablyai/orca/actions/runs/34030832614" - ], + "surfaces": ["agent tab launch", "keyboard paste", "terminal runtime retention"], + "platforms": ["windows"], + "providers": ["wsl1", "wsl2"], + "coveredPlatforms": ["windows"], + "coveredProviders": ["wsl1"], + "coverageNotes": "Real WSL1 coverage: three scenarios each passed three times with no skips or retries; exact JSON report verified. Latest PR routing and installer-checksum follow-ups await CI. WSL2 remains untested.", + "motivatingLinks": ["https://github.com/stablyai/orca/actions/runs/34030832614"], "invariant": "An agent launched into WSL runs in the guest; keyboard paste reaches exactly one owning PTY and preserves Linux content even after the default shell changes.", "oracle": "Run the existing real WSL launch and two paste cases three times; require nine passes and zero skipped, unexpected, or flaky results in the Playwright JSON report.", "commands": [ - "gh workflow run windows-terminal-restart-e2e.yml --ref nwparker/validate-reusable-wsl-lane", "gh workflow run windows-wsl-e2e.yml", "pnpm exec playwright test tests/e2e/golden-tab-bar-agent-launch.spec.ts tests/e2e/terminal-windows-shell-paste-ownership.spec.ts --config tests/playwright.config.ts --project=electron-headless --workers=1", - "node_modules/.bin/vitest run --config config/vitest.config.ts config/scripts/wsl-e2e-lane-contract.test.mjs config/scripts/verify-wsl-e2e-participation.test.mjs" + "node_modules/.bin/vitest run --config config/vitest.config.ts config/scripts/wsl-e2e-lane-contract.test.mjs config/scripts/verify-wsl-e2e-participation.test.mjs", + "gh run view 34031806291 --log" ], "testFiles": [ "tests/e2e/golden-tab-bar-agent-launch.spec.ts", @@ -18198,9 +18183,7 @@ "assertionRefs": [ { "file": "tests/e2e/golden-tab-bar-agent-launch.spec.ts", - "assertions": [ - "requires a distro-only marker from the launched agent" - ] + "assertions": ["requires a distro-only marker from the launched agent"] }, { "file": "tests/e2e/terminal-windows-shell-paste-ownership.spec.ts", @@ -18211,9 +18194,7 @@ }, { "file": "config/scripts/verify-wsl-e2e-participation.test.mjs", - "assertions": [ - "rejects skipped, missing, substituted and retried scenarios" - ] + "assertions": ["rejects skipped, missing, substituted and retried scenarios"] } ], "evidenceRuns": [ @@ -18222,9 +18203,9 @@ "runner": "ci", "platform": "windows", "result": "passed", - "command": "gh workflow run windows-terminal-restart-e2e.yml --ref nwparker/validate-reusable-wsl-lane", - "durationSeconds": 234, - "summary": "Run34030832614 at4de05e5: real WSL1 launch3 and paste6 passed; aggregate receipt required9 expected and0 skipped/unexpected/flaky. Final per-scenario verifier is newer and pending." + "command": "gh run view 34031806291 --log", + "durationSeconds": 210, + "summary": "Immutable run34031806291 at92fc5152: WSL1 launch3 and paste6 passed after reader-readiness correction; named-scenario verifier accepted actual JSON report with0skips0retries. Command retrieves recorded evidence; workflow_dispatch command above reruns current coverage." } ], "runtimeBudget": { @@ -18233,11 +18214,11 @@ }, "flakeHistory": { "status": "soaking", - "evidence": "Pinned-image run34030695826 and reusable-action run34030832614 each passed9/9 with no skips; final verifier head pending." + "evidence": "Initial permanent-lane diagnostic8passed1failed on missing PTY before changing settings. After requiring guest-reader readiness before mutation, run34031806291 passed9/9. Two earlier setup validations also passed9/9. Long-term CI history remains missing." }, "redGreenEvidence": { "status": "partial", - "evidence": "Verifier tests reject absent or skipped scenarios, substituted titles, and passes after retries. Actual nine-pass report verification on the final verifier head is pending." + "evidence": "Verifier rejects actual8pass1fail CI report and accepts actual9pass report. Unit contracts reject skips, missing or substituted scenarios and retried passes. No full application fault-mutation proof." }, "performanceBudget": { "required": false, diff --git a/config/scripts/wsl-e2e-lane-contract.test.mjs b/config/scripts/wsl-e2e-lane-contract.test.mjs index aaf40e16b18..9882f0ad747 100644 --- a/config/scripts/wsl-e2e-lane-contract.test.mjs +++ b/config/scripts/wsl-e2e-lane-contract.test.mjs @@ -40,6 +40,15 @@ describe('real WSL terminal lane', () => { const pr = parse(read('.github/workflows/pr.yml')) expect(pr.jobs.windows_wsl.if).toBe("needs.code_paths.outputs.wsl_source_changed == 'true'") expect(pr.jobs.windows_wsl.with.ref).toBe('${{ github.event.pull_request.head.sha }}') + const detector = pr.jobs['code_paths'].steps.find( + (step) => step.name === 'Filter changed E2E specs' + ) + expect(detector.run).toContain( + 'WSL_CHANGED="$(git diff --name-only --no-renames --diff-filter=ACDMR' + ) + expect(detector.run).toContain( + '"$WSL_CHANGED" | node config/scripts/pr-e2e-source-routing.mjs --wsl-source' + ) const workflow = parse(read('.github/workflows/windows-wsl-e2e.yml')) const steps = workflow.jobs['wsl-terminal'].steps expect(steps[0].with.ref).toBe('${{ inputs.ref || github.sha }}')