fix-ci-failures
Skill12 starsChanged 6 months agoMITView on GitHub
Investigate and fix CI failures on a pull request. Use when CI checks fail on a PR branch — covers finding the PR, identifying failed checks, downloading logs and artifacts, extracting the failure cause, and iterating on a fix. Requires the `gh` CLI.
- Commits and pushes
8 other projects use a version of this, 3 of them edited.
Adopted by
Most recently taken up by
- leek/agent-skillstheir own version, first seen Nov 2, 2026
- microsoft/vscodeedited, first seen Nov 2, 2026
- tstapler/dotfilestheir own version, first seen Oct 10, 2026
- NeuralInverse/neuralinverseedited, first seen Oct 8, 2026
- OpenCortexIDE/cortexideword for word, first seen Oct 8, 2026
- posit-dev/positronedited, first seen Oct 8, 2026
Other versions8 projects use a version of this.
Word for word · 3
- OpenCortexIDE/cortexide★ 175100% same
- cpkt9762/opencode-vscode-ide★ 17100% same
- 0-draft/zeus★ 1100% same
Edited · 3
- microsoft/vscode★ 195k94% same
- posit-dev/positron★ 4.3k100% same
- NeuralInverse/neuralinverse★ 221100% same
Wrote their own version · 2
- tstapler/dotfiles★ 8same name
- leek/agent-skills★ 5same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository24 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .github/copilot-instructions.mdCopilot instructions
- launchSkill
- accessibilitySkill
- add-policySkill
- author-contributionsSkill
- auto-perf-optimizeSkill
- azure-pipelinesSkill
- chat-customizations-editorSkill
- chat-perfSkill
- component-fixturesSkill
- cpu-profile-analysisSkill
- fix-errorsSkill
- heap-snapshot-analysisSkill
- hygieneSkill
- integration-testsSkill
- memory-leak-auditSkill
- omnicode-logsSkill
- otelSkill
- sessionsSkill
- tool-rename-deprecationSkill
- unit-testsSkill
- update-screenshotsSkill
- vscode-dev-workbenchSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
17 rules. 8 are common, 0 are distinctive, and 9 are very specific to this project.
8
Common
Most of the 5 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Common: line 13
Check CI status and find failed checks
- Common: line 30
If no PR is found, the user may need to specify the PR number.
- Very specific: line 49
If checks are still IN_PROGRESS, wait for them to complete before downloading logs:
- Common: line 112
When the run is still in progress but the failed job has completed, use the GitHub API to download that job's step logs directly:
- Very specific: line 129
If ##[error] doesn't reveal enough, use broader patterns:
- Very specific: line 151
Test assertion failures: Check exthost.log for the extension host output and stack traces
- Very specific: line 152
Terminal/sandbox issues: Check terminal.log for rewriter pipeline, shell integration, and strategy logs
- Very specific: line 153
Crash/hang: Check main.log and look for crash dumps artifacts
- Common: line 161
Look for the test runner output in the failed step log:
- Very specific: line 168
AssertionError [ERR_ASSERTION]: Test assertion failed — check expected vs actual values - Very specific: line 171
Error: Timeout: Test timed out — could be a hang or slow CI machine - Common: line 187
Before fixing, determine if the failure is caused by the PR changes or is a pre-existing/infrastructure issue:
- Common: line 202
Not all CI failures are caused by code changes.
- Common: line 229
If failures persist across re-runs, check if main is also broken:
- Common: line 233
If main is broken too, wait for it to be fixed — your PR is not the cause
- Very specific: line 240
Verify compilation: check the VS Code - Build task or run npm run compile-check-ts-native
- Very specific: line 241
Run relevant unit tests locally: ./scripts/test.sh --grep "<pattern>"
“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Investigating and Fixing CI Failures
This skill guides you through diagnosing and fixing CI failures on a PR using the gh CLI. The user has the PR branch checked out locally.
Workflow Overview
- Identify the current branch and its PR
- Check CI status and find failed checks
- Download logs for failed jobs
- Extract and understand the failure
- Fix the issue and push
Step 1: Identify the Branch and PR
# Get the current branch name
git branch --show-current
# Find the PR for this branch
gh pr view --json number,title,url,statusCheckRollupIf no PR is found, the user may need to specify the PR number.
Step 2: Check CI Status
# List all checks and their status (pass/fail/pending)
gh pr checks --json name,state,link,bucket
# Filter to only failed checks
gh pr checks --json name,state,link,bucket --jq '.[] | select(.bucket == "fail")'The link field contains the URL to the GitHub Actions job. Extract the run ID from the URL — it's the number after /runs/:
https://github.com/microsoft/vscode/actions/runs/<RUN_ID>/job/<JOB_ID>If checks are still IN_PROGRESS, wait for them to complete before downloading logs:
gh pr checks --watch --fail-fastStep 3: Get Failed Job Details
# List failed jobs in a run (use the run ID from the check link)
gh run view <RUN_ID> --json jobs --jq '.jobs[] | select(.conclusion == "failure") | {name: .name, id: .databaseId}'Step 4: Download Failure Logs
There are two approaches depending on the type of failure.
Option A: View Failed Step Logs Directly
Best for build/compile/lint failures where the error is in the step output:
# View only the failed step logs (most useful — shows just the errors)
gh run view <RUN_ID> --job <JOB_ID> --log-failedImportant:
--log-failedrequires the entire run to complete, not just the failed job. If other jobs are still running, this command will block or error. Use Option C below to get logs for a completed job while the run is still in progress.
The output can be large. Pipe through tail or grep to focus:
# Last 100 lines of failed output
gh run view <RUN_ID> --job <JOB_ID> --log-failed | tail -100
# Search for common error patterns
gh run view <RUN_ID> --job <JOB_ID> --log-failed | grep -E "Error|FAIL|error TS|AssertionError|failing"Option B: Download Artifacts
Best for integration test failures where detailed logs (terminal logs, ext host logs, crash dumps) are uploaded as artifacts:
# List available artifacts for a run
gh run download <RUN_ID> --pattern '*' --dir /dev/null 2>&1 || gh run view <RUN_ID> --json jobs --jq '.jobs[].name'
# Download log artifacts for a specific failed job
# Artifact naming convention: logs-<platform>-<arch>-<test-type>-<attempt>
# Examples: logs-linux-x64-electron-1, logs-linux-x64-remote-1
gh run download <RUN_ID> -n "logs-linux-x64-electron-1" -D /tmp/ci-logs
# Download crash dumps if available
gh run download <RUN_ID> -n "crash-dump-linux-x64-electron-1" -D /tmp/ci-crashesTip: Use the test runner name from the failed check (e.g., "Linux / Electron" →
electron, "Linux / Remote" →remote) and platform map ("Windows" →windows-x64, "Linux" →linux-x64, "macOS" →macos-arm64) to construct the artifact name.
Warning: Log artifacts may be empty if the test runner crashed before producing output (e.g., Electron download failure). In that case, fall back to Option C.
Option C: Download Per-Job Logs via API (works while run is in progress)
When the run is still in progress but the failed job has completed, use the GitHub API to download that job's step logs directly:
# Save the full job log to a temp file (can be very large — 30k+ lines)
gh api repos/microsoft/vscode/actions/jobs/<JOB_ID>/logs > "$TMPDIR/ci-job-log.txt"Then search the saved file. Start with ##[error] — this is the GitHub Actions error annotation that marks the exact line where the step failed:
# Step 1: Find the error annotation (fastest path to the failure)
grep -n '##\[error\]' "$TMPDIR/ci-job-log.txt"
# Step 2: Read context around the error (e.g., if error is on line 34371, read 200 lines before it)
sed -n '34171,34371p' "$TMPDIR/ci-job-log.txt"If ##[error] doesn't reveal enough, use broader patterns:
# Find test failures, exceptions, and crash indicators
grep -n -E 'HTTPError|ECONNRESET|ETIMEDOUT|502|exit code|Process completed|node:internal|triggerUncaughtException' "$TMPDIR/ci-job-log.txt" | head -20Why save to a file? The API response for a full job log can be 30k+ lines. Tool output gets truncated, so always redirect to a file first, then search.
VS Code Log Artifacts Structure
Downloaded log artifacts typically contain:
logs-linux-x64-electron-1/
main.log # Main process log
terminal.log # Terminal/pty host log (key for run_in_terminal issues)
window1/
renderer.log # Renderer process log
exthost/
exthost.log # Extension host log (key for extension test failures)Key files to examine first:
- Test assertion failures: Check
exthost.logfor the extension host output and stack traces - Terminal/sandbox issues: Check
terminal.logfor rewriter pipeline, shell integration, and strategy logs - Crash/hang: Check
main.logand look for crash dumps artifacts
Step 5: Extract the Failure
For Test Failures
Look for the test runner output in the failed step log:
# Find failing test names and assertion messages
gh run view <RUN_ID> --job <JOB_ID> --log-failed | grep -A 5 "failing\|AssertionError\|Expected\|Unexpected"Common patterns in VS Code CI:
AssertionError [ERR_ASSERTION]: Test assertion failed — check expected vs actual valuesExtension host test runner exit code: 1: Integration test suite had failuresCommand produced no output: Shell integration may not have captured command output (see terminal.log)Error: Timeout: Test timed out — could be a hang or slow CI machine
For Build Failures
# Find TypeScript compilation errors
gh run view <RUN_ID> --job <JOB_ID> --log-failed | grep "error TS"
# Find hygiene/lint errors
gh run view <RUN_ID> --job <JOB_ID> --log-failed | grep -E "eslint|stylelint|hygiene"Step 6: Determine if Failures are Related to the PR
Before fixing, determine if the failure is caused by the PR changes or is a pre-existing/infrastructure issue:
- Check if the failing test is in code you changed — if the test is in a completely unrelated area, it may be a flake
- Check the test name — does it relate to the feature area you modified?
- Look at the failure output — does it reference code paths your PR touches?
- Check if the same tests fail on main — if identical failures exist on recent main commits, it's a pre-existing issue
- Look for infrastructure failures — network timeouts, npm registry errors, and machine-level issues are not caused by code changes
# Check recent runs on main for the same workflow
gh run list --branch main --workflow pr-linux-test.yml --limit 5 --json databaseId,conclusion,displayTitleRecognizing Infrastructure / Flaky Failures
Not all CI failures are caused by code changes. Common infrastructure failures:
Network / Registry issues:
npm ERR! network,ETIMEDOUT,ECONNRESET,EAI_AGAIN— npm registry unreachableerror: RPC failed; curl 56,fetch-pack: unexpected disconnect— git network failureError: unable to get local issuer certificate— TLS/certificate issuesrate limit exceeded— GitHub API rate limitingHTTPError: Request failed with status code 502onelectron/electron/releases— Electron CDN download failure (common in thenode.js integration testsstep, which downloads Electron at runtime)
Machine / Environment issues:
No space left on device— CI disk fullENOMEM,JavaScript heap out of memory— CI machine ran out of memoryThe runner has received a shutdown signal— CI preemption / timeoutError: The operation was canceled— GitHub Actions cancelled the jobXvfb failed to start— display server for headless Linux tests failed
Test flakes (not infrastructure, but not your fault either):
- Timeouts on tests that normally pass — slow CI machine
- Race conditions in async tests
- Shell integration not reporting exit codes (see terminal.log for
exitCode: undefined)
What to do with infrastructure failures:
- Don't change code — the failure isn't caused by your PR
- Re-run the failed jobs via the GitHub UI or:
gh run rerun <RUN_ID> --failed - If failures persist across re-runs, check if main is also broken:
gh run list --branch main --limit 10 --json databaseId,conclusion,displayTitle - If main is broken too, wait for it to be fixed — your PR is not the cause
Step 7: Fix and Iterate
- Make the fix locally
- Verify compilation: check the
VS Code - Buildtask or runnpm run compile-check-ts-native - Run relevant unit tests locally:
./scripts/test.sh --grep "<pattern>" - Commit and push:
git add -A git commit -m "fix: <description>" git push - Watch CI again:
gh pr checks --watch --fail-fast
Quick Reference
| Task | Command |
| Find PR for branch | gh pr view --json number,url |
| List all checks | gh pr checks --json name,state,bucket |
| List failed checks only | gh pr checks --json name,state,link,bucket --jq '.[] | select(.bucket == "fail")' |
| Watch checks until done | gh pr checks --watch --fail-fast |
| Failed jobs in a run | gh run view <RUN_ID> --json jobs --jq '.jobs[] | select(.conclusion == "failure") | {name, id: .databaseId}' |
| View failed step logs | gh run view <RUN_ID> --job <JOB_ID> --log-failed (requires full run to complete) |
| Download job log via API | gh api repos/microsoft/vscode/actions/jobs/<JOB_ID>/logs > "$TMPDIR/ci-job-log.txt" (works while run is in progress) |
| Find error line in log | grep -n '##\[error\]' "$TMPDIR/ci-job-log.txt" |
| Download log artifacts | gh run download <RUN_ID> -n "<artifact-name>" -D /tmp/ci-logs |
| Re-run failed jobs | gh run rerun <RUN_ID> --failed |
| Recent main runs | gh run list --branch main --workflow <workflow>.yml --limit 5 |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

