This skill should be used when analyzing failed GitHub Actions CI/CD runs for Breenix kernel development. Use for diagnosing test failures, parsing QEMU logs, identifying kernel panics or faults, understanding timeout issues, and determining root causes of CI failures.
Systematically analyze and diagnose CI/CD test failures in Breenix kernel development.
This skill provides tools and workflows for analyzing failed CI runs, understanding kernel crashes, identifying environment issues, and determining root causes. It focuses on the unique challenges of kernel development CI: QEMU logs, kernel panics, double faults, page faults, and timeout analysis.
Use this skill when:
When a CI run fails:
ci-failure-analysis/scripts/analyze_ci_failure.py target/xtask_*_output.txt--context flag to see surrounding log linesThe skill provides analyze_ci_failure.py to automatically detect common failures:
# Analyze a CI log file
ci-failure-analysis/scripts/analyze_ci_failure.py target/xtask_ring3_smoke_output.txt
# Show context around failures
ci-failure-analysis/scripts/analyze_ci_failure.py --context target/xtask_ring3_smoke_output.txt
# Analyze multiple logs
ci-failure-analysis/scripts/analyze_ci_failure.py target/*.txt logs/breenix_*.log
The analyzer recognizes these failure patterns:
======================================================================
CI Failure Analysis: target/xtask_ring3_smoke_output.txt
======================================================================
Log size: 1523 lines
Patterns detected: 2
──────────────────────────────────────────────────────────────────────
[1] Page Fault
Line 1234: PAGE FAULT at 0x10001082 Error Code: 0x0
📊 Diagnosis:
Page fault accessing unmapped or incorrectly mapped memory
🔧 Fix:
Identify the faulting address and check:
1) Is it mapped in the active page table?
2) Are the flags correct (USER_ACCESSIBLE, WRITABLE)?
3) Was it recently unmapped?
📄 Context:
1230: [ INFO] Process created: PID 2
1231: [DEBUG] Switching to process page table
1232: [DEBUG] About to access userspace memory
1233: [DEBUG] Buffer pointer: 0x10001082
>>> 1234: PAGE FAULT at 0x10001082 Error Code: 0x0
1235: Stack trace:
1236: 0: copy_from_user
1237: 1: sys_write
1238: 2: syscall_handler
Symptoms:
DOUBLE FAULT - Error Code: 0x0
Instruction Pointer: 0x...
Code Segment: ... Ring3
Common Causes:
Diagnosis:
Fix Examples:
Symptoms:
PAGE FAULT at 0x... Error Code: 0x...
Error Code Decoding:
Common Causes:
Diagnosis:
Symptoms:
Timeout reached (60s)
... OR ...
Error: test exceeded time limit
Distinguishing Hang vs Slow:
Kernel hang: No new output for extended period
Legitimately slow: Continuous output, just takes longer
Diagnosis:
Fixes:
Symptoms:
❌ Ring-3 smoke test failed: no evidence of userspace execution
Common Causes:
Diagnosis:
Symptoms:
error[E0...]: ...
--> kernel/src/...
Common Causes:
Diagnosis:
Symptoms:
qemu-system-x86_64: command not found
... OR ...
error: target 'x86_64-unknown-none' may not be installed
Common Causes:
Diagnosis:
# Run the analyzer on downloaded logs
ci-failure-analysis/scripts/analyze_ci_failure.py \
--context \
target/xtask_*_output.txt
Review the output for:
If automated analysis doesn't find clear patterns:
# Search for specific error keywords
grep -i "error\|panic\|fault\|timeout" target/xtask_*_output.txt
# Find last successful operation
grep "SUCCESS\|✓\|✅" target/xtask_*_output.txt | tail -20
# Look for specific subsystem activity
grep "memory\|page table\|process\|syscall" target/xtask_*_output.txt
# Run exact same command as CI
cargo run -p xtask -- ring3-smoke
# Or use quick debug for faster iteration
kernel-debug-loop/scripts/quick_debug.py --signal "EXPECTED_SIGNAL" --timeout 30
| Aspect | Local | CI |
|--------|-------|-----|
| Rust version | Check with rustc --version | Check workflow YAML |
| QEMU version | qemu-system-x86_64 --version | ubuntu-latest package |
| Timeout | Usually 30s | Usually 60s |
| Build cache | Warm | Cold or partial |
| System load | Low | Variable |
Document findings using the systematic debugging pattern:
After identifying a failure, use kernel-debug-loop for rapid iteration:
# Test fix with quick feedback
kernel-debug-loop/scripts/quick_debug.py \
--signal "🎯 KERNEL_POST_TESTS_COMPLETE 🎯" \
--timeout 15
Fix workflow issues:
# If environment issue detected:
# 1. Identify missing dependency from analyzer output
# 2. Update workflow using github-workflow-authoring skill
# 3. Test change in PR
Document the failure:
# Problem
CI run #123 failed with page fault at 0x10001082
# Root Cause
[Fill in after analysis]
# Solution
[Fill in after fix]
# Evidence
[Fill in after verification]
Compare working vs broken runs:
# Download logs from last successful run and failed run
diff -u successful_run.txt failed_run.txt | less
Look for:
Find the last known-good state:
grep -n "SUCCESS\|COMPLETE\|initialized" target/xtask_*_output.txt | tail -20
This shows what completed before the failure.
If failure point unclear:
For intermittent failures:
# Run test 10 times, count failures
for i in {1..10}; do
cargo run -p xtask -- ring3-smoke && echo "PASS" || echo "FAIL"
done | sort | uniq -c
# 1. Download artifact from failed CI run
# Save to: target/xtask_ring3_smoke_output.txt
# 2. Run automated analysis
ci-failure-analysis/scripts/analyze_ci_failure.py \
--context target/xtask_ring3_smoke_output.txt
# Output shows: Page Fault at 0x10001082
# 3. Search for context
grep -B10 -A10 "0x10001082" target/xtask_ring3_smoke_output.txt
# 4. Identify: copy_from_user failing
# 5. Check if this address is mapped
grep "process page table\|mapping" target/xtask_ring3_smoke_output.txt
# 6. Hypothesis: User buffer not mapped in process page table
# 7. Review recent changes to process memory code
# 8. Identify fix needed
# 9. Test locally with quick iteration
kernel-debug-loop/scripts/quick_debug.py \
--signal "USERSPACE OUTPUT" \
--timeout 10
# 10. Verify fix works
# 11. Push to PR, monitor CI
CI failure analysis for Breenix requires:
The analyze_ci_failure.py script automates common pattern detection, but kernel debugging ultimately requires understanding the code, memory management, interrupt handling, and the specific feature being tested.
npx skills add ryanbreen/ci-failure-analysis下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer