CI迭代Skill ci-iteration

这个技能用于自动化持续集成(CI)流程中的迭代检查和修复失败,包括执行 make 目标、处理代码质量检查(如 lint、格式、类型)和测试错误,利用 devrun 代理模式安全执行命令,提高开发效率和代码质量。关键词:CI、迭代、自动化、修复、make、pytest、ruff、prettier、devrun、持续集成、DevOps。

CI/CD 0 次安装 0 次浏览 更新于 3/18/2026

name: ci-iteration description: > 这个技能应用于迭代运行 CI 检查并修复失败。当执行 make 目标(fast-ci、all-ci、ci)、迭代处理 lint/format/type/test 错误,或需要 devrun 代理模式来运行 pytest/ty/ruff/prettier/make/gt 命令时使用。

CI 迭代

概述

运行指定的 CI 目标并自动修复任何失败。持续迭代,直到所有检查通过或遇到需要人工干预的问题。

重要:所有 make 命令必须从仓库根目录运行。Makefile 位于仓库根目录,而非子目录中。

子代理策略

关键:当生成子代理来运行 makepytesttyruffprettiergt 命令时,必须使用 devrun

Task tool with:
- subagent_type: devrun  <- 必须是 devrun,绝不能是通用代理

原因:devrun 具有硬工具约束(无编辑/写入),防止破坏性更改。父代理(你)处理报告并应用修复——子代理仅报告。

禁止

  • 为 make/pytest/ty/ruff/prettier/gt 生成通用或其他子代理
  • 给子代理提示如“修复问题”或“迭代直到通过”

要求

  • 子代理运行一条命令并报告结果
  • 父代理根据报告决定修复内容

核心工作流

1. 初始运行

使用 devrun 代理从仓库根目录运行指定的 make 目标:

Task tool with:
- subagent_type: devrun
- description: "从仓库根目录运行 [make 目标]"
- prompt: "切换到仓库根目录并执行: [make 目标]"

2. 解析失败

分析输出以识别哪些检查失败:

  • Ruff lint 失败:“ruff check” 错误
  • 格式失败:“ruff format --check” 或需要重新格式化的文件
  • Prettier 失败:需要格式化的 Markdown 文件
  • MD-check 失败:未正确引用 AGENTS.mdCLAUDE.md 文件
  • ty 失败:带有文件路径和行号的类型错误
  • 测试失败:pytest 失败,包括测试名称和断言错误

3. 应用针对性修复

根据失败类型应用适当的修复:

失败类型 修复命令
Ruff lint 通过 devrun 运行 make fix
Ruff format 通过 devrun 运行 make format
Prettier 通过 devrun 运行 make prettier
Sync-Kit 直接运行 erk sync
MD-check 编辑 CLAUDE.md 以仅包含 @AGENTS.md
ty 编辑文件以修复类型注解
测试 读取并编辑源代码/测试文件

4. 验证和重复

应用修复后,通过 devrun 再次运行 make 目标。继续循环:运行 -> 识别失败 -> 修复 -> 验证。

迭代控制

安全限制

  • 最大迭代次数:10 次尝试
  • 卡住检测:如果相同错误连续出现 3 次,停止
  • 进度跟踪:使用 TodoWrite 显示迭代进度

进度报告

使用 TodoWrite 跟踪进度:

迭代 1:修复 lint 错误
迭代 2:修复格式错误
迭代 3:修复 src/erk/cli/commands/switch.py 中的类型错误
迭代 4:所有检查通过

何时停止

成功:当 make 目标退出代码为 0(所有检查通过)时停止

卡住:停止并向用户报告,如果:

  1. 已完成 10 次迭代但未成功
  2. 相同错误在 3 次修复尝试后仍然存在
  3. 遇到无法自动修复的错误

报告格式

成功格式

## 最终状态:成功

所有 CI 检查在 N 次迭代后通过:

(勾选) **Lint (ruff check)**:通过

(勾选) **Format (ruff format --check)**:通过

(勾选) **Prettier**:通过

(勾选) **AGENTS.md 标准 (md-check)**:通过

(勾选) **ty**:通过

(勾选) **测试**:通过

(勾选) **Sync-Kit (erk check)**:通过

代码已准备好提交/PR。

重要:在 Markdown 输出中,每个检查行必须用空行分隔,以便在 CLI 中正确渲染。

卡住格式

## 最终状态:卡住

我在 N 次尝试后无法解决以下问题:

**检查**:[lint/format/prettier/md-check/ty/test]

**错误**:
[确切错误消息]

**文件**:[文件路径,如果适用]

**尝试的修复**:

1. [首先尝试的内容]
2. [其次尝试的内容]
3. [第三尝试的内容]

**后续步骤**:
[建议需要手动完成的操作]

指南

  1. 系统化:一次修复一种类型的错误
  2. 运行完整 CI:始终运行完整的 make 目标,而非单个检查
  3. 使用 devrun 代理:始终使用 Task tool 和 devrun 代理执行所有 make 命令
  4. 从仓库根目录运行:始终确保 make 命令从仓库根目录执行
  5. 跟踪进度:每次迭代使用 TodoWrite
  6. 不要猜测:在更改前读取文件
  7. 遵循标准:遵守 AGENTS.md 编码标准
  8. 优雅失败:卡住时清晰报告
  9. 高效:使用针对性修复(不要为单个 lint 错误重新格式化所有内容)

示例流程

迭代 1:
- 使用 Task tool 和 devrun 代理从仓库根目录运行 make 目标
- 发现:5 个 lint 错误,2 个文件需要格式化
- 修复:使用 Task tool 和 devrun 代理从仓库根目录运行 make fix,然后 make format
- 结果:3 个 lint 错误剩余

迭代 2:
- 使用 Task tool 和 devrun 代理从仓库根目录运行 make 目标
- 发现:3 个 lint 错误(导入问题)
- 修复:编辑文件以修复导入问题
- 结果:所有 lint/format 通过,2 个类型错误

迭代 3:
- 使用 Task tool 和 devrun 代理从仓库根目录运行 make 目标
- 发现:2 个 ty 错误在 switch.py:45 和 switch.py:67
- 修复:添加类型注解
- 结果:所有检查通过

成功

重要提醒

  • 切勿直接通过 Bash 运行 pytest/ty/ruff/prettier/make/gt
  • 始终使用 Task tool 和 subagent_type: devrun
  • 覆盖的工具:pytest、ty、ruff、prettier、make、gt
  • 始终确保 make 命令从仓库根目录执行