futuremls-lab/oscar/sglang-bisect-ci-regression
Claude Code and agent skill by futuremls-lab/oscar
- community
Checking that the SKILL.md file is still in the repository.
Install
npx vskill@latest install futuremls-lab/oscar/sglang-bisect-ci-regressionSKILL.md
SGLang Bisect CI Regression
Investigate a consistently failing CI test to find the root cause - whether it's a code regression from a specific PR, a hardware/runner-specific issue, or an environment change. Optionally reproduce the failure on a remote GPU server.
Slash Command
/sglang-bisect-ci-regression <test_name_or_ci_url> [ssh_target] [docker_container]
When to Use This Skill
- A CI test is failing consistently on main (scheduled runs)
- You need to find which PR introduced a regression
- You suspect a runner-specific or GPU-specific issue
- You want to reproduce a CI failure on a remote server
Arguments
- First argument (required): Test file name (e.g.
test_lora_tp.py) or a GitHub Actions job URL - Second argument (optional): SSH target for remote reproduction (e.g.
user@host) - Third argument (optional): Docker container name on the SSH target (e.g.
sglang_dev)
If SSH target and docker container are not provided, the skill will only perform the CI log analysis and bisection, without remote reproduction. Ask the user for these if reproduction is needed and they weren't provided.
Background: Scheduled CI Runs
SGLang uses the pr-test.yml workflow with scheduled runs (cron-triggered) to periodically test the main branch. These runs are the primary data source for detecting regressions:
- Workflow:
pr-test.ymlwithevent: schedule - Branch:
main - Dashboard: https://github.com/sgl-project/sglang/actions/workflows/pr-test.yml?query=event%3Aschedule
- Frequency: Runs multiple times daily, each pinned to the HEAD of
mainat trigger time - Purpose: Catches regressions that slip through PR-level CI (e.g., interaction bugs between merged PRs, hardware-specific issues)
Always use these scheduled runs (not PR-triggered runs) when bisecting regressions on main. The --event schedule filter in gh run list ensures you only see these periodic main-branch runs.
Workflow
Phase 1: Extract the Failure Signature
- Get the failing test details from CI logs. If given a URL, fetch logs directly. If given a test name, find recent scheduled runs of
pr-test.ymlonmainthat failed:
- Record the failure signature:
- Exact error message and assertion
- Affected test method name
- Model/config involved
- Numeric values (e.g., tolerance diffs, scores)
- Whether the failure is deterministic (same values across runs)
Phase 2: Temporal Bisection
- Find the boundary between passing and failing runs. Walk through the scheduled run history (from the
pr-test.ymlschedule runs onmain) to identify:
- Last known PASSING run (sha + date)
- First known FAILING run (sha + date)
- List commits between the boundary:
- Filter for relevant commits that touch files related to the failing test (model layers, kernels, test utilities, etc.):
Phase 3: Runner/Hardware Analysis
- Check if the failure is runner-specific. Extract the runner identity from each failing and passing run:
- Correlate runners with pass/fail outcomes. Build a table:
| Run ID | Date | Runner | GPU Type | Driver | Result |
|---|
If all failures map to a specific runner type/GPU and all passes map to another, the issue is hardware-specific, not a code regression.
Phase 4: Code Analysis
- If a code regression is suspected (failures not runner-specific), examine the candidate commits:
- Read the changed files
- Understand how the changes could affect the failing test
- Look for prefill-vs-decode differences, TP-specific paths, kernel changes
- If a hardware issue is suspected, analyze:
- Kernel compatibility (CUDA compute capability)
- Driver version differences
- All-reduce / NCCL behavior differences
- CUDA graph capture differences across GPU architectures
Phase 5: Remote Reproduction (Optional)
Only if SSH target and docker container were provided.
- Verify the remote environment:
- Ensure latest code is installed. If the container is stale, update:
- Create a minimal reproduction script that:
- Uses
if __name__ == '__main__'withmp.set_start_method("spawn") - Runs the specific failing test configuration
- Prints key metrics (diffs, scores, outputs)
- Exits with code 1 on failure
- Copy and run the reproduction script:
- Run control experiments to isolate the variable:
- If suspecting TP issue: run with TP=1 as control
- If suspecting GPU issue: compare same code on different GPU
- If suspecting a specific commit: test before/after that commit
Phase 6: Report
- Produce a structured report:
Key Patterns to Recognize
| Pattern | Diagnosis | |
|---|---|---|
| Same SHA passes on runner A, fails on runner B | Hardware/runner-specific | |
| All runners fail after commit X | Code regression from commit X | |
| Intermittent - same runner sometimes passes/fails | Flaky test or race condition | |
| Prefill OK but decode fails | TP/all-reduce issue in decode path | |
| Works with TP=1, fails with TP>1 | Tensor parallelism bug | |
| Exact same numeric diff every time | Deterministic bug, not flakiness |
Important Notes
- Always check runner identity before concluding it's a code regression. Many "consistent" failures are actually runner-specific.
- Test partition assignments change over time as tests are added/removed. A test may move between partitions, landing on different runner types.
- H200 runners use
/root/actions-runner/path and machine names likegpu-h200-worker-*. Non-H200 runners use/public_sglang_ci/runner-*paths. - When running remote reproduction, use
run_in_backgroundfor long-running tests and check output withTaskOutput. - Container environments may be stale - always verify package versions match CI before drawing conclusions.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingsglang-research/.claude/skills/sglang-bisect-ci-regression/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/futuremls-lab/oscar/sglang-bisect-ci-regression)