关于 sc-pr-fix
用于创建拉取请求并监控 CI 检查的技能,可交互式引导修复失败项。它通过重试上限和确认提示控制操作,也支持预览以及对低风险问题进行可选自动修复。
主要功能
- 01创建分支、提交和拉取请求
- 02通过 `gh` 监控 CI 检查
- 03解析常见 CI 失败日志
- 04应用修复前征求确认
- 05限制重试并检测重复失败
适用场景
- 01创建拉取请求并跟踪 CI 检查
- 02诊断并修复 lint 或测试失败
- 03通过试运行预览 Git 和拉取请求操作
MCP 相关
该技能使用 PAL MCP 调试复杂的 CI 失败,并在应用前审查拟议的修复。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ tony363/ superclaude --skill sc-pr-fix安装后在 Claude Code 中输入/sc-pr-fix确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
scripts/check_pr_status.pyfix_orchestrator.pyparse_check_failures.py详细介绍
PR 修复技能
创建拉取请求,并交互式修复 CI 检查失败,直到所有检查通过。
快速开始
# Create PR from current changes
/sc:pr-fix "fix: resolve test failures" --branch fix/tests
# Dry run to preview
/sc:pr-fix "feat: new feature" --dry-run
# With custom PR details
/sc:pr-fix "chore: update deps" --title "Update dependencies" --body "Monthly update"
# Auto-fix low-risk issues
/sc:pr-fix "fix: lint errors" --auto-fix
行为流程
- 验证 - 检查 git 状态,确保存在更改
- 分支 - 创建并切换到新分支
- 提交 - 暂存所有更改,并使用提供的消息提交
- 推送 - 将分支推送到 origin
- 创建 PR - 通过
ghCLI 创建拉取请求 - 监控 - 按配置的间隔轮询 CI 状态
- 修复循环 - 对每项失败的检查:
- 解析失败日志
- 提出修复方案(复杂问题借助 PAL MCP)
- 提示用户确认(交互模式)
- 应用修复并推送
- 重新监控检查
- 完成 - 所有检查通过或达到最大尝试次数
标志
| 标志 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--branch | string | auto | 新分支名称(auto:pr-fix/<timestamp>) |
--base | string | main | PR 的目标分支 |
--title | string | commit msg | PR 标题 |
--body | string | auto | PR 描述正文 |
--dry-run | bool | false | 预览操作,不实际执行 |
--auto-fix | bool | false | 自动应用低风险修复,仅对高风险修复进行提示 |
--max-fix-attempts | int | 5 | CI 修复迭代的最大次数(硬性上限:5) |
--poll-interval | int | 30 | CI 状态检查之间的秒数 |
--no-push | bool | false | 创建分支并提交,但不推送或创建 PR |
交互模式
默认情况下,该技能会在每次修复前提示:
================================================================================
CI Check Failed: build (lint) Attempt 2 of 5
================================================================================
Error Summary:
- src/component.ts:42:15 - Missing semicolon (semi)
- src/utils.ts:18:1 - Unexpected console statement (no-console)
Proposed Fix:
1. Add semicolon at src/component.ts:42
2. Remove console.log at src/utils.ts:18
Risk Level: LOW (auto-fixable lint errors)
--------------------------------------------------------------------------------
[A]pply fix [S]kip this check [V]iew full log [Q]uit
>
使用 --auto-fix 跳过低风险修复(lint、格式调整)的提示。
高风险修复(测试更改、安全性、核心逻辑)始终会提示。
风险分类
| 级别 | 示例 | 行为 |
|---|---|---|
| 低 | Lint 错误、格式调整、空白字符 | 若启用 --auto-fix,则自动修复 |
| 中 | 测试更新、文档 | 始终提示 |
| 高 | 核心逻辑、安全性、API 更改 | 始终提示,并进行 PAL 审查 |
证据要求
此技能要求提供操作成功的证据:
- Git 操作必须成功(已创建并推送分支)
- PR 创建必须返回有效的 PR URL
- 必须能够通过
ghCLI 获取 CI 状态 - 修复尝试必须显示文件差异
工具协调
- Bash - 执行 Git 和
ghCLI - Read - 分析失败日志和源代码
- Edit - 应用对源文件的修复
- AskUserQuestion - 交互式提示用户确认修复
- PAL MCP debug - 诊断复杂的 CI 失败
- PAL MCP codereview - 在应用修复前验证修复质量
MCP 集成
- PAL MCP debug - 分析 CI 失败的根本原因
- PAL MCP codereview - 在应用前审查提议的修复
安全机制
- 硬性上限:最多进行 5 次修复迭代(不可覆盖)
- 停滞检测:同一错误连续出现 3 次即中止
- 振荡检测:出现“修复-回退-修复”模式即中止
- 交互式确认:所有结构性更改都必须获得批准
- 绝不跳过检查:必须修复或明确中止,不得跳过
- 备份分支:开始前创建
backup/<branch>-<timestamp>
CI 状态轮询
该技能使用以下方式轮询 GitHub Actions 检查状态:
gh pr checks <pr_number> --json name,state,conclusion,url
轮询行为:
- 初始等待:推送后等待 10 秒(留出 CI 启动时间)
- 轮询间隔:
--poll-interval秒(默认:30) - 超时:检查完成等待 10 分钟
- 处理 pending、queued、in_progress 和 completed 状态
失败日志解析
支持的 CI 输出格式:
- ESLint/TSLint JSON 格式
- 带回溯信息的 pytest 输出
- ruff/flake8 格式
- Jest/Vitest 输出格式
- 通用错误模式(
error:、ERROR、failed) - GitHub Actions 注释
示例
创建基本 PR 并进入修复循环
/sc:pr-fix "fix: resolve ESLint errors"
输出:
Creating branch: pr-fix/20240115-143022
Committing: fix: resolve ESLint errors
Pushing to origin...
Creating PR #42: fix: resolve ESLint errors
Monitoring CI checks...
- lint: pending
- test: pending
[30s later]
- lint: failed
- test: passed
Parsing lint failures...
Found 2 errors in 1 file.
================================================================================
CI Check Failed: lint Attempt 1 of 5
================================================================================
...
[A]pply fix [S]kip [V]iew log [Q]uit
> a
Applying fix...
Pushing fix commit...
Monitoring CI checks...
- lint: passed
- test: passed
All checks passed! PR #42 is ready for review.
PR URL: https://github.com/owner/repo/pull/42
创建包含详细信息的功能 PR
/sc:pr-fix "feat: add user dashboard" \
--branch feat/user-dashboard \
--title "Add User Dashboard Component" \
--body "Implements user dashboard as per spec #42"
预览模式
/sc:pr-fix "refactor: cleanup utils" --dry-run
输出:
[DRY RUN] Would execute:
1. git checkout -b pr-fix/20240115-143022
2. git add -A
3. git commit -m "refactor: cleanup utils"
4. git push -u origin pr-fix/20240115-143022
5. gh pr create --base main --title "refactor: cleanup utils"
6. Monitor CI and fix failures interactively
No changes made.
自动修复低风险问题
/sc:pr-fix "fix: formatting" --auto-fix
使用 --auto-fix 时,会自动应用低风险修复(lint、格式化)。
中风险和高风险修复仍会提示确认。
终止条件
满足以下条件时,修复循环将终止:
| 条件 | 退出状态 | 消息 |
|---|---|---|
| 所有检查均通过 | SUCCESS | "所有检查均已通过!PR 已准备好供审查。" |
| 达到最大尝试次数(5 次) | FAILED | "已达到最大修复尝试次数。需要人工干预。" |
| 停滞不前(3 次出现相同错误) | FAILED | "尝试 3 次后仍存在相同错误。正在中止。" |
| 用户退出 | ABORTED | "用户已中止修复循环。" |
| CI 超时 | TIMEOUT | "CI 检查未能在超时时间内完成。" |
提交消息格式
修复提交遵循 Conventional Commits:
fix(ci): resolve <check_name> failures
- <description of fix 1>
- <description of fix 2>
Automated fix by sc-pr-fix skill
脚本
此技能使用 scripts/ 中的 Python 辅助脚本:
check_pr_status.py- 通过gh pr checks轮询 PR 检查状态parse_check_failures.py- 解析 CI 失败日志以提取错误fix_orchestrator.py- 使用安全机制协调修复循环
错误处理
| 场景 | 行为 |
|---|---|
| 没有 git 仓库 | 退出并显示错误消息 |
| 工作树不干净 | 提示:暂存、提交或中止 |
| 分支已存在 | 提示输入其他名称 |
| 推送失败 | 检查权限,并提供重试选项 |
| 创建 PR 失败 | 显示 gh CLI 错误,并建议手动操作 |
| CI 超时 | 报告状态,并提供继续监控选项 |
| 解析失败 | 回退为显示原始日志 |
| 应用修复失败 | 增加尝试计数器,并继续循环 |
| 用户中止 | 正常退出并显示状态摘要 |
评论
支持 Markdown