mcpField
E
eval-creator-ci

eval-creator-ci

github.com/pskoett测试与质量32752 次安装1 天前更新
代码仓库

关于 eval-creator-ci

用于 CI 的技能,可运行 `.evals/` 中的评测用例、报告验证结果,并按配置在出现回归时阻断检查。它还可根据 `learning-aggregator-ci` 提供的晋升候选创建评测用例。

主要功能

  1. 01运行索引中的评测用例
  2. 02执行文件和命令检查
  3. 03报告通过、失败或跳过
  4. 04配置回归阻断策略
  5. 05根据候选创建评测

适用场景

  1. 01在拉取请求中检查评测用例
  2. 02在配置的评测失败时阻断运行
  3. 03将已晋升模式转为评测用例

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/pskoett/pskoett-ai-skills --skill eval-creator-ci

安装后在 Claude Code 中输入/eval-creator-ci确认已加载。

附带文件references/workflow-example.md

详细介绍

Eval Creator CI

安装

gh skill install pskoett/pskoett-skills eval-creator-ci

对于交互式会话,请使用:

gh skill install pskoett/pskoett-skills eval-creator

备用方案:使用 Agent Skills CLI:

npx skills add pskoett/pskoett-skills/skills/eval-creator-ci
npx skills add pskoett/pskoett-skills/skills/eval-creator

用途

在 CI 中运行外层循环的 回归测试 步骤。执行 .evals/ 中的所有评估用例,报告通过/失败结果,并可选择在出现回归时阻止合并。还可以根据 learning-aggregator-ci 标记的候选晋级项创建新的评估用例。

交互式 eval-creator 技能专为会话内使用而设计,用户可在其中创建评估并立即运行以获取反馈。此 CI 版本按计划或针对每个 PR 运行,并以检查注释的形式发布结果。

上下文限制(重要)

CI Agent 不具备实现上下文。它们会执行评估用例文件中定义的机械验证方法(grep 检查、命令检查、文件检查、规则检查)。它们不会对结果进行通过/失败之外的解读;细致判断留给人工审核已发布的报告。

前提条件

  • 仓库已启用 GitHub Actions
  • gh CLI 已通过身份验证并拥有仓库访问权限
  • 已安装 gh-aw 扩展(gh extension install github/gh-aw,v0.40.1+)
  • .evals/ 目录中包含评估用例(由 eval-creator 或 eval-creator-ci 创建)
  • .evals/EVAL_INDEX.md 包含评估用例索引

CI 约定

无头执行的硬性规则:

  1. 评估执行对代码只读 — 评估用例会读取文件并运行检查命令,但不会修改源代码
  2. 评估用例创建仅写入 .evals/ — 根据候选晋级项创建新评估时
  3. 无头运行 — 不使用交互式提示,不设置审批关卡
  4. 结构化输出 — 在 eval_creator_ci 键下以 YAML 格式输出结果
  5. 门禁策略 — 可在评估出现回归时使检查运行失败(可配置)
  6. 单条评论 — 每次运行只发布一条汇总结果评论

编写工作流(gh-aw)

  1. 将 references/workflow-example.md 复制到 .github/workflows/eval-creator-ci.md
  2. 自定义触发条件和门禁策略
  3. 验证:gh aw compile(添加 --actionlint --zizmor 进行安全扫描)
  4. 推送以启用
持久化与串联
  • cache-memory: 跨运行存储评估运行历史(上次运行日期、结果趋势),避免重新运行没有变化的评估。
  • workflow_call: 在创建模式下,由 learning-aggregator-ci 通过 call-workflow 触发。通过工作流输入接收候选晋级项。
  • upload-artifact: 持久化评估结果 YAML,供下游使用。

工作流规则

CI Agent 按顺序遵循以下规则:

模式:运行评估(默认)
  1. 读取 .evals/EVAL_INDEX.md,获取所有评估用例列表
  2. 对 .evals/cases/ 中的每个评估用例文件: a. 读取评估用例元数据和验证方法 b. 检查前置条件 — 如果不满足,则标记为 skip c. 执行验证方法:
    • grep-check:在目标文件中搜索模式,并与预期结果进行比较(found/not_found)
    • command-check:运行命令,检查退出代码和/或输出
    • file-check:验证文件或章节是否存在
    • rule-check:读取目标文件,搜索预期内容 d. 将结果与预期结果进行比较 e. 记录通过/失败/跳过
  3. 使用每个用例的 last-run 日期和 last-result 更新 .evals/EVAL_INDEX.md
  4. 在 eval_creator_ci 键下输出结构化 YAML
  5. 将结果摘要作为 PR 评论或检查注释发布
  6. 如果启用了门禁策略且有任何评估失败,则使检查运行失败
模式:创建评估(来自候选晋级项)
  1. 读取最近一次 learning-aggregator-ci 运行的 learning_aggregator_ci 制品或差距报告
  2. 对每个包含 eval_candidate: true 的可晋级模式: a. 根据模式类型确定适当的验证方法 b. 使用正确的 frontmatter 在 .evals/cases/ 中创建评估用例文件 c. 将条目添加到 .evals/EVAL_INDEX.md
  3. 提交新评估用例(如果运行时具有写入权限)
  4. 在输出中报告已创建的评估

输出架构

eval_creator_ci:
  version: "0.1.0"
  source:
    run_id: "<workflow run ID>"
    trigger: "pull_request | schedule | workflow_dispatch"
    run_date: "YYYY-MM-DD"
  mode: "run | create | both"
  run_results:
    total: 12
    passed: 10
    failed: 1
    skipped: 1
    failures:
      - id: "eval-20260301-001"
        pattern_key: "harden.input_validation"
        rule_summary: "Always validate external inputs"
        expected: "not_found"
        actual: "found"
        target: "src/api/handler.ts"
        recovery_action: "Add input validation to new handler endpoint"
    skips:
      - id: "eval-20260315-003"
        reason: "Precondition not met: project does not use TypeScript"
  create_results:
    created: 2
    cases:
      - id: "eval-20260411-001"
        pattern_key: "simplify.dead_code"
        verification_method: "grep-check"
        source_learning: "LRN-20260301-001"
      - id: "eval-20260411-002"
        pattern_key: "harden.authorization"
        verification_method: "rule-check"
        source_learning: "LRN-20260315-003"
  summary:
    regressions: 1
    new_evals_created: 2
    gate_result: "fail"
    followup_required: true

推荐的输出

输出目标位置内容
Eval 结果PR 评论或检查注释包含失败详情的通过/失败摘要
YAML 工件工作流工件机器可读的 eval_creator_ci 载荷
检查状态检查运行根据门禁策略判定通过或失败
新建的 eval 文件.evals/cases/(如果处于创建模式)Eval 案例 Markdown 文件

门禁策略

配置阻止行为:

策略行为
strict任何 eval 失败都会阻止检查运行
advisory报告失败,但不阻止
critical-only只有来自严重程度为 critical 或 high 的模式的 eval 才会阻止

默认值:advisory(报告但不阻止)。团队应在 eval 覆盖率稳定后升级为 strict。

触发器配置

推荐:每个 PR 触发 + 每周定时运行

on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]
  schedule:
    - cron: '0 10 * * 1'  # Monday 10am UTC (after learning-aggregator-ci)
  workflow_dispatch:

每个 PR 运行可在合并前发现回归问题。每周运行可发现测试框架本身的偏移。请安排在 learning-aggregator-ci 之后运行,以便获取晋升产生的新 eval。

与其他技能的集成

上游(输入来源)
  • eval-creator(交互式)— 手动创建 eval 案例
  • learning-aggregator-ci — 生成带有 eval_candidate: true 的晋升候选项
  • self-improvement(交互式)— 在经人工批准的晋升后标记 eval 候选项
下游(输出去向)
  • self-improvement / self-improvement-ci — 回归失败会成为 .learnings/ 中的新错误条目
  • 人工审核 — 发布失败报告,供团队分类处理
  • PR 合并门禁 — 可因回归问题阻止合并(可配置)
数据流
learning-aggregator-ci → promotion candidates (eval_candidate: true)
                              ↓
                    eval-creator-ci (create mode)
                              ↓
                         .evals/cases/
                              ↓
                    eval-creator-ci (run mode, per-PR)
                              ↓
                    pass/fail report → PR comment + check annotation
                              ↓
                    regression failures → self-improvement-ci → .learnings/

与交互式版本的区别

方面交互式(eval-creator)CI(eval-creator-ci)
触发方式手动调用PR 事件、cron 定时计划、workflow_dispatch
Eval 创建用户驱动,可立即获得反馈根据 learning-aggregator-ci 候选项自动创建
Eval 执行在会话中执行并显示行内结果无界面运行,输出 PR 评论
人工交互用户在行内查看结果通过 GitHub 异步审核
门禁行为不阻止,仅提供信息可配置:advisory、critical-only、strict
文件修改更新 eval 案例元数据更新 eval 索引 + 创建新案例(处于创建模式时)

评论

支持 Markdown