ci: route deleted WSL paths and record immutable run evidence

This commit is contained in:
Neil
2026-09-06 05:11:18 -07:00
parent 868b1533e7
commit a6db980862
3 changed files with 27 additions and 36 deletions
+2 -1
View File
@@ -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)"
+16 -35
View File
@@ -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,
@@ -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 }}')