go-ci-workflow Skill 评估报告¶
评估日期: 2026-03-12 评估对象:
go-ci-workflow评估方法: skill-creator 框架 (3 场景 × 2 配置 = 6 次运行)
参考基准: issue2md 项目(https://github.com/johnqtcg/issue2md) 真实 CI 工作流 (.github/workflows/ci.yml)
go-ci-workflow 是一个面向 Go 仓库的 GitHub Actions CI 设计与重构 skill,用于根据仓库结构、Makefile 入口和测试类型生成诚实、可维护、与本地执行方式一致的 CI 工作流。它最突出的三个亮点是:先做 repository shape 检测,再决定 workflow 架构,避免把不适合的 CI 模板硬套到仓库上;强强调 Make-driven delegation,并在缺少稳定入口时提供显式 fallback,保证“本地怎么跑,CI 就尽量怎么跑”;同时对工具版本锁定、输出合约和本地等价标记有统一规范,便于长期维护和排障。
一、评估概览¶
本次评估从实际任务表现和 Token 效费比两个维度对 go-ci-workflow skill 进行全面评审。利用 issue2md 项目的真实 Makefile 和 CI 工作流作为参考基准,设计 3 个递进场景,共 35 条 assertion 进行评分。
| 维度 | With Skill | Without Skill | 差异 |
|---|---|---|---|
| Assertion 通过率 | 35/35 (100%) | 23.5/35 (67%) | +33 百分点 |
| Make-driven 委托 | 3/3 场景完全 | 2/3(场景 3 无 Makefile 不适用,场景 1 baseline docker 用 inline) | Skill 确保一致委托 |
| Output Contract | 3/3 | 0/3 | Skill 独有 |
| 本地等价标记 | 3/3 | 0/3 | Skill 独有 |
| 工具版本锁定 | 3/3 | 2/3(场景 3 baseline 用 @latest) | Skill 一致 |
| Skill Token 开销 (SKILL.md) | ~1,500 tokens | 0 | — |
| Skill Token 开销(典型加载) | ~4,500 tokens | 0 | — |
| 每 1% 通过率提升的 Token 成本 | ~45 (SKILL.md) / ~136 (typical) | — | — |
二、测试方法¶
2.1 场景设计¶
| 场景 | 仓库 | 核心考察点 | Assertions |
|---|---|---|---|
| Eval 1: 从零创建 CI | issue2md 完整仓库(删除 ci.yml) | 仓库形状检测、Make 委托、Job 分离、触发策略、输出合约 | 15 |
| Eval 2: 重构劣质 CI | issue2md + 10 处反模式的 ci.yml | 反模式识别与修复、Make 委托、条件化昂贵 Job | 12 |
| Eval 3: 无 Makefile 库 | 极简 Go 库(无 cmd/、无 Makefile) | 降级输出、Inline Fallback 标记、本地等价标记 | 8 |
2.2 参考基准¶
issue2md 项目真实 CI 工作流特征: - 6 个独立 Job: ci, docker-build, api-integration, e2e-web, govulncheck, fieldalignment - 核心 Gate 通过 make ci COVER_MIN=80 委托 - E2E 仅在 push/schedule 触发 - 工具版本与 Makefile 精确对齐 - 无 concurrency(可改进点)
三、Assertion 通过率¶
3.1 场景 1:从零创建 CI (15 项)¶
| ID | 断言 | With-Skill | Without-Skill |
|---|---|---|---|
| A1 | 检测仓库形状为 single-module service | PASS | FAIL |
| A2 | 核心 Gate 使用 make ci COVER_MIN=80 | PASS | PASS |
| A3 | Docker 使用 make docker-build | PASS | FAIL |
| A4 | Integration 使用 make ci-api-integration | PASS | PASS |
| A5 | E2E 条件化 (push/schedule) | PASS | PASS |
| A6 | go-version-file: go.mod | PASS | PASS |
| A7 | cache: true | PASS | PASS |
| A8 | 工具版本精确锁定 | PASS | PASS |
| A9 | Job 分离(非单一 Job) | PASS | PASS |
| A10 | Concurrency 控制 | PASS | PASS |
| A11 | 触发策略完整 (push main + PR + schedule) | PASS | PASS |
| A12 | permissions: contents: read | PASS | PASS |
| A13 | E2E 不在 PR 触发 | PASS | PASS |
| A14 | Output Contract 完整 | PASS | FAIL |
| A15 | 工具版本与 Makefile 对齐 | PASS | PASS |
| 合计 | 15/15 (100%) | 12/15 (80%) |
3.2 场景 2:重构劣质 CI (12 项)¶
| ID | 断言 | With-Skill | Without-Skill |
|---|---|---|---|
| B1 | Inline go test → make ci | PASS | PASS |
| B2 | 硬编码 go-version: '1.22' → go-version-file: go.mod | PASS | PASS |
| B3 | @latest → 锁定版本 | PASS | PASS |
| B4 | 单 Job → 多 Job 分离 | PASS | PASS |
| B5 | 添加 Concurrency | PASS | PASS |
| B6 | 添加 permissions: contents: read | PASS | PASS |
| B7 | E2E 条件化 (push/schedule) | PASS | PASS |
| B8 | Docker Build Job 使用 make target | PASS | PASS |
| B9 | cache: true | PASS | PASS |
| B10 | timeout-minutes | PASS | PASS |
| B11 | 核心 Gate 使用 Make target | PASS | PASS |
| B12 | Output Contract 完整 | PASS | FAIL |
| 合计 | 12/12 (100%) | 11/12 (92%) |
3.3 场景 3:无 Makefile Go 库 (8 项)¶
| ID | 断言 | With-Skill | Without-Skill |
|---|---|---|---|
| C1 | 检测为 library(非 application) | PASS | PARTIAL |
| C2 | 使用 inline fallback 并明确标记 | PASS | FAIL |
| C3 | 标记 local parity 为 PARTIAL | PASS | FAIL |
| C4 | 推荐添加 Makefile | PASS | FAIL |
| C5 | 工具版本锁定(非 @latest) | PASS | FAIL |
| C6 | Concurrency 控制 | PASS | FAIL |
| C7 | go-version-file: go.mod | PASS | FAIL |
| C8 | Output Contract 完整 | PASS | FAIL |
| 合计 | 8/8 (100%) | 0.5/8 (6%) |
3.4 总览¶
| 场景 | Assertions | With Skill | Without Skill | 差值 |
|---|---|---|---|---|
| Eval 1: 从零创建 | 15 | 15/15 (100%) | 12/15 (80%) | +20pp |
| Eval 2: 重构劣质 CI | 12 | 12/12 (100%) | 11/12 (92%) | +8pp |
| Eval 3: 无 Makefile 库 | 8 | 8/8 (100%) | 0.5/8 (6%) | +94pp |
| 总计 | 35 | 35/35 (100%) | 23.5/35 (67%) | +33pp |
3.5 趋势分析:Skill 优势随提示信息量反向变化¶
| 场景 | 提示中的结构信息量 | Without-Skill 通过率 | Delta |
|---|---|---|---|
| Eval 2(重构) | 高 — 明确列出 10 处问题 | 92% | +8pp |
| Eval 1(创建) | 中 — 列出 Makefile targets | 80% | +20pp |
| Eval 3(降级) | 低 — 仅描述结构 | 6% | +94pp |
结论: 当提示本身包含足够多的结构信息时,Baseline 能达到接近 Skill 的水平。但当提示信息量低(如场景 3),Baseline 完全缺乏 Skill 提供的降级处理、等价标记等概念。Skill 的核心价值在于结构化的知识补全,尤其是提示中未提及的最佳实践。
四、与真实 CI 的对比分析¶
issue2md 项目有一个人工编写的高质量 CI 工作流。将 With-Skill 输出与真实 CI 对比:
| 特征 | 真实 CI | With-Skill | Without-Skill |
|---|---|---|---|
| Job 数量 | 6 | 5 | 4 |
| 核心 Gate | make ci COVER_MIN=80 | make ci COVER_MIN=80 ✅ | make ci(无 COVER_MIN) |
| Docker | make docker-build | make docker-build ✅ | docker build -f ...(inline) |
| API Integration | make ci-api-integration | make ci-api-integration ✅ | make ci-api-integration ✅ |
| E2E | make ci-e2e-web (push/schedule) | make ci-e2e-web (push/schedule) ✅ | make ci-e2e-web + 多余的 server startup |
| govulncheck | 独立 Job | 独立 Job ✅ | 无 |
| fieldalignment | 独立 Job | 无 | 无 |
| Concurrency | 无 | 有 ✅(改进了真实 CI) | 有 |
| Permissions | 无 | permissions: {} + job-level ✅ | contents: read |
| timeout-minutes | 无 | 无(场景 1) | 无 |
关键发现: - With-Skill 输出在 Job 架构和 Make 委托上与真实 CI 高度一致 - With-Skill 甚至改进了真实 CI(添加了 concurrency 和 permissions,真实 CI 缺少这两项) - Without-Skill 的 Docker 构建使用 inline 命令而非 make docker-build,违反本地等价原则 - Without-Skill 的 E2E Job 添加了不必要的 server startup 逻辑(curl 轮询等),增加了复杂性
五、逐维度对比分析¶
5.1 Make-driven 委托(核心差异)¶
| 维度 | With Skill | Without Skill |
|---|---|---|
| 场景 1 Core Gate | make ci COVER_MIN=80 | make ci(缺少 COVER_MIN) |
| 场景 1 Docker | make docker-build | docker build -f Dockerfile ...(inline) |
| 场景 1 E2E | make ci-e2e-web | make ci-e2e-web + 冗余 server startup |
| 场景 2 Core Gate | make ci COVER_MIN=80 | make ci COVER_MIN=80 |
| 场景 2 Docker | make docker-build | make docker-build |
Skill 的 "Execution Priority" 规则确保了一致的 Make 委托。Baseline 在场景 2(有明确提示)中做到了一致委托,但在场景 1(无提示)中 Docker 构建回退为 inline。
5.2 Output Contract(Skill 独有)¶
With-Skill 在每个场景均产出结构化报告:
| 报告项 | 场景 1 | 场景 2 | 场景 3 |
|---|---|---|---|
| 仓库形状分类 | single-module service | single-module service | single-module library |
| Job 列表 + 执行路径 | 5 jobs, all paths | 4 jobs, before/after | 2 jobs, all inline |
| 触发策略 | PR/push/schedule | PR/push/schedule | PR/push |
| Permissions | permissions: {} + job-level | contents: read | contents: read |
| 工具版本对齐 | ✅ 与 Makefile 匹配 | ✅ 与 Makefile 匹配 | ✅ pinned |
| 缺失 targets | install-tools, govulncheck | 无 | 全部 — Makefile 不存在 |
| 验证结果 | YAML + make dry-run | YAML + make verify | YAML syntax |
| 后续建议 | 3 项 | 3 项 | 4 项 |
Without-Skill 均无此类结构化输出。
5.3 降级处理(场景 3 关键差异)¶
| 维度 | With-Skill | Without-Skill |
|---|---|---|
| Inline 标记 | 每步标记 (inline fallback) | 无标记,直接使用 inline |
| Local Parity 标记 | 文件头注释 + Output Contract 均标注 PARTIAL | 无提及 |
| 推荐后续 | "Add Makefile with go-makefile-writer skill" | 无 |
| 工具版本 | golangci-lint v1.62.2 pinned | version: latest ❌ |
| Go 版本 | go-version-file: go.mod | 硬编码 "1.23" + matrix ["1.23","1.24"] |
| Concurrency | 有 | 无 |
| Format check | gofmt -l . + error annotation | 无 |
| Coverage check | 有(含阈值检查) | go tool cover -func 仅打印(无阈值) |
场景 3 暴露了 Baseline 在 无结构化指导 下的最大弱点: - 使用 @latest(非确定性构建) - 硬编码 Go 版本 - 无 concurrency - 无降级意识(不知道自己缺少 Makefile 应该标注)
5.4 安全与权限¶
| 维度 | With-Skill | Without-Skill |
|---|---|---|
| 场景 1 权限 | permissions: {} workflow + job-level contents: read | contents: read workflow-level |
| 场景 2 权限 | contents: read | contents: read |
| 场景 3 权限 | contents: read | contents: read |
| Fork PR 安全 | 明确分析无 secret 暴露 | 无提及 |
两者都设置了 permissions,但 With-Skill 在场景 1 使用了更严格的 deny-all default (permissions: {}) + job-level escalation 模式,并在 Output Contract 中显式分析了 Fork PR 安全性。
六、Token 效费比分析¶
6.1 Skill 体积¶
| 文件 | 行数 | 估算 Token | 加载时机 |
|---|---|---|---|
| SKILL.md | 236 | ~1,500 | 始终加载 |
| references/workflow-quality-guide.md | 445 | ~3,000 | 标准场景加载 |
| references/golden-examples.md | 385 | ~2,600 | 需要 YAML 模板时加载 |
| references/repository-shapes.md | 199 | ~1,300 | monorepo/复杂场景加载 |
| references/github-actions-advanced-patterns.md | 307 | ~2,000 | 安全/高级功能时加载 |
| references/fallback-and-scaffolding.md | 49 | ~300 | 无 Makefile 时加载 |
| references/pr-checklist.md | 66 | ~400 | PR review 时加载 |
| scripts/discover_ci_needs.sh | 77 | ~500 | 仓库检测时加载 |
| 全部参考资料 | 1,528 | ~10,100 | — |
6.2 典型加载场景¶
| 场景 | 读取文件 | 总 Token |
|---|---|---|
| 标准服务仓库(Eval 1) | SKILL.md + quality-guide + golden-examples | ~7,100 |
| 重构工作流(Eval 2) | SKILL.md + quality-guide | ~4,500 |
| 无 Makefile 降级(Eval 3) | SKILL.md + fallback | ~1,800 |
| 仅 SKILL.md(最小加载) | SKILL.md | ~1,500 |
| 全量加载 | 全部 | ~11,600 |
6.3 效费比计算¶
| 指标 | 数值 |
|---|---|
| With-skill 通过率 | 100% (35/35) |
| Without-skill 通过率 | 67% (23.5/35) |
| 通过率提升 | +33 百分点 |
| 每 1% 提升的 Token 成本(SKILL.md only) | ~45 tok |
| 每 1% 提升的 Token 成本(典型加载 ~4,500) | ~136 tok |
| 每 1% 提升的 Token 成本(全量加载 ~11,600) | ~352 tok |
6.4 与其他 Skill 效费比对比¶
| Skill | SKILL.md Token | 通过率 delta | Tokens/1% (SKILL.md) | Tokens/1% (typical) |
|---|---|---|---|---|
create-pr | ~2,500 | +71pp | ~35 | ~48 |
git-commit | ~1,150 | +22pp | ~51 | ~51 |
go-makefile-writer | ~1,960 | +31pp | ~63 | ~149 |
go-ci-workflow | ~1,500 | +33pp | ~45 | ~136 |
go-ci-workflow 的 SKILL.md 效费比最优(~45 tok/1%),但参考资料体量大(~10,100 tokens),导致典型加载的效费比较差(~136 tok/1%)。这与 go-makefile-writer 的模式类似。
6.5 Token 分段效费比¶
| 模块 | Token 估算 | 关联差异 | 效费比 |
|---|---|---|---|
| Execution Priority(Make 委托规则) | ~80 | 2 条(场景 1 docker, COVER_MIN) | 极高 |
| Output Contract 定义 | ~150 | 3 条(3 场景结构化报告) | 极高 |
| Mandatory Gates(含 Local Parity) | ~300 | 3 条(场景 3 parity + fallback) | 高 |
| Job Architecture Rules | ~100 | 间接(Job 分离一致性) | 高 |
| Degraded Output Gate | ~80 | 3 条(场景 3 全部降级行为) | 极高 |
| Go Setup/Tooling Rules | ~80 | 1 条(场景 3 go-version-file) | 高 |
| Trigger Rules | ~60 | 间接(E2E 条件化) | 中 |
| workflow-quality-guide.md | ~3,000 | 间接(Job 设计质量) | 中 — 最大单文件 |
| golden-examples.md | ~2,600 | 间接(YAML 结构模板) | 中 |
| repository-shapes.md | ~1,300 | 0 条直接(未测试 monorepo) | 低 — 未测试场景 |
| advanced-patterns.md | ~2,000 | 0 条直接(未测试安全场景) | 低 — 未测试场景 |
高杠杆指令(~610 tokens SKILL.md → 11.5 条 assertion 差值)占 SKILL.md 的 ~41%,贡献了全部直接差异。
七、综合评分¶
7.1 分维度评分¶
| 维度 | With Skill | Without Skill | 差值 |
|---|---|---|---|
| Make-driven 委托一致性 | 5.0/5 | 3.5/5 | +1.5 |
| Job 架构与触发策略 | 5.0/5 | 4.0/5 | +1.0 |
| 工具版本锁定与对齐 | 5.0/5 | 3.5/5 | +1.5 |
| 降级处理与等价标记 | 5.0/5 | 0.5/5 | +4.5 |
| 结构化报告(Output Contract) | 5.0/5 | 1.0/5 | +4.0 |
| 安全与权限 | 4.5/5 | 3.5/5 | +1.0 |
| 综合均值 | 4.92/5 | 2.67/5 | +2.25 |
7.2 加权总分¶
| 维度 | 权重 | 得分 | 理由 | 加权 |
|---|---|---|---|---|
| Assertion 通过率 delta | 25% | 9.0/10 | +33pp,受场景 2 高 baseline 拉低整体 delta | 2.25 |
| Make-driven 委托一致性 | 20% | 9.5/10 | 3/3 场景全 Make 委托;场景 1 COVER_MIN 对齐 | 1.90 |
| 降级处理(Local Parity + Fallback 标记) | 15% | 10.0/10 | 场景 3 完美降级:inline 标记 + parity PARTIAL + 推荐 Makefile | 1.50 |
| 结构化报告(Output Contract) | 15% | 10.0/10 | 3/3 场景完整合约 | 1.50 |
| Token 效费比 | 15% | 5.5/10 | SKILL.md 高效 (~45),但参考资料体量大 (~10,100 tok 全量) | 0.83 |
| 安全与权限 | 10% | 8.5/10 | deny-all default + job-level 提升优秀;fork PR 分析 | 0.85 |
| 加权总分 | 100% | 8.83/10 |
7.3 与其他 Skill 综合评分对比¶
| Skill | 加权总分 | 通过率 delta | Tokens/1% (typical) | 最大优势维度 |
|---|---|---|---|---|
| create-pr | 9.55/10 | +71pp | ~48 | Gate 流程 (+3.5)、Output Contract (+4.0) |
| go-makefile-writer | 9.16/10 | +31pp | ~149 | CI 可复现性 (+3.0)、Output Contract (+4.0) |
| go-ci-workflow | 8.83/10 | +33pp | ~136 | 降级处理 (+4.5)、Output Contract (+4.0) |
go-ci-workflow 综合评分略低于前两个 skill,主要受限于 Token 效费比维度(5.5/10)。参考资料总量 ~10,100 tokens 是所有已评估 skill 中最大的,而典型加载 ~4,500 tokens 的效费比(~136 tok/1%)也偏高。
失分分析: - Token 效费比 (5.5/10): 参考资料过于庞大。workflow-quality-guide.md(445 行)和 golden-examples.md(385 行)合计占 ~5,600 tokens,但在评估中只提供间接贡献 - Assertion delta (9.0/10): 场景 2 的 delta 仅 +8pp(baseline 已达 92%),拉低了整体 delta
亮点: - 降级处理 (10.0/10): 场景 3 的 +94pp delta 是所有已评估 skill 中单场景最大差异,证明了 Degraded Output Gate 的独特价值 - SKILL.md 效费比: ~45 tok/1% 是所有 skill 中最优的,说明核心规则本身非常紧凑高效
八、结论¶
go-ci-workflow skill 在三个核心领域提供了显著价值:
-
降级处理(+94pp 单场景 delta): 这是所有已评估 skill 中单场景最大差异,证明了 Degraded Output Gate 和 Local Parity 标记的独特价值。Baseline 模型在无 Makefile 环境下完全缺乏降级意识。
-
Make-driven 委托一致性: 确保所有 Job 通过 Makefile targets 执行,与本地开发行为一致。Baseline 在无明确提示时会退化为 inline 命令(如场景 1 的 Docker 构建)。
-
Output Contract: 结构化报告使 CI 工作流变更可审计、可追溯,包括仓库形状、执行路径分类、缺失 targets 等关键信息。
主要风险: 参考资料总量 ~10,100 tokens 是所有已评估 skill 中最大的,典型加载 ~4,500 tokens。通过精简 workflow-quality-guide.md 和 golden-examples.md,可减少 ~24% 的 token 开销,将 tokens/1% 从 ~136 降至 ~103。
与真实 CI 的对比验证了 skill 的实用性: With-Skill 输出不仅匹配了 issue2md 项目手工编写的 CI 质量,还在 concurrency 和 permissions 两个维度上改进了真实 CI。