gitlink-cli/竞赛提交文档以及演示视频相关图片/子赛题三——工作流说明文档.md

13 KiB
Raw Permalink Blame History

子赛题三 · 端到端自动化工作流说明(详版)

交付要求:工作流串联 ≥3 个 CLI 命令或 Skill · 可复现执行脚本 · 真实 GitLink 项目运行 · 说明文档 + 架构图 · Agent 兼容。 架构图见 工作流架构图.png / 工作流架构图.drawiodrawio 可自行调整)。

本项目交付 三个端到端自动化工作流全部满足「≥3 步串联」,分别覆盖代码质量门禁 / 策略化裁决 / 社区运营三类场景,底层 Skill 可相互复用。

一、三个工作流总览

工作流 场景 串联步骤 涉及命令域/Skill 可复现脚本 Agent 形态
A · pr-guard 代码质量看门人采集→审查→CI→评论→判定/合并) 5 步 pr / code-review / ci / api demo/pr-guard-workflow.sh Claude Code 读 SKILL.md
B · pr-quality-gatekeeper Policy-as-Code 评分卡多路信号→0-100 分→三态裁决) 9 步 pr / ci / api / label + code-review examples/pr-quality-gatekeeper Claude Code 读 SKILL.md
C · community-ops-sweep 社区运营增量对账5 项事件一次处理) 5 项事件 issue / pr / wiki / release + Raw API workflows/community-ops-sweep/(含 18 单测) 原生 Claude Code Workflow.wf.js

二、工作流 A · pr-guard 代码质量看门人

A.1 背景与目标

PR 合并前要做的事——审查代码、查 CI、给反馈、决定合不合——本可自动化却常靠人工东拼西凑。pr-guard 把它做成一条端到端流水线PR 一进来,自动采集、审查、查 CI、发评审、给出可解释的「通过/拒绝」判定。区别于 code-review Skill 只产出主观评论pr-guard 是会下结论、可执行合并的完整闭环

A.2 适用场景

  • 团队想给 PR 加一道最低质量门槛0 Critical + CI 通过才放行)。
  • 希望 AI 把分散的 pr/ci/api 命令自动串起来,而非人工逐条跑。

A.3 架构5 步流水线,串联 4 个命令域)

PR 提交
  │
  ▼
①采集        pr +diff / +files         pr 域)
  │
  ▼
②AI Review   code-review Skill          (分级 Critical/Warning/Suggestion
  │
  ▼
③CI 检查     ci +builds                 ci 域)
  │
  ▼
④汇总评论    api POST /reviews          api 域)
  │
  ▼
⑤质量判定/合并  pr +merge仅满足门禁时 pr 域)

A.4 详细步骤

动作 命令 / Skill 输入 输出
采集 PR 变更 pr +diff -i <PR> / pr +files -i <PR> PR 编号 文件清单 + diff 内容
AI 审查分级 code-review Skill diff Critical/Warning/Suggestion 发现列表
查 CI 状态 ci +builds 仓库 构建结果(通过/失败/未知)
汇总评审评论 api POST /:o/:r/pulls/<id>/reviews 发现 + CI 结构化 Review 评论
质量判定 门禁规则 + pr +merge -i <PR> --method squash Critical 数 + CI 通过→合并 / 拒绝→附问题清单

A.5 门禁规则(硬性、可解释)

0 Critical + CI success  →  ✅ 建议合并pr +merge
否则                       →  🔴 拒绝,附 Critical/Warning 问题清单

A.6 触发方式

脚本(可复现)demo/pr-guard-workflow.sh <owner> <repo> <pr_id>——把 5 步采集命令串起来自动跑AI 审查/判定在 Claude Code 里做。 Agent 提示词Claude Code 直接粘)

读 skills/gitlink-pr-guard/SKILL.md把关 <owner>/<repo> 的 PR # 采集 diff/files → 按 code-review 分级找 Critical/Warning → 查 ci +builds → 汇总成评审评论回写 → 按「0 Critical + CI 通过 → 合并」门禁给判定。 合并/评论等写操作前先向我确认。

A.7 真实运行效果

目标 whale_hihihi/gitlink-cli:脚本采集真实 PR 列表与 CI 状态;现场可在 http://121.41.222.73:8000 的 pr-guard 区点「用真实 PR 跑」看真实数据流入 5 步气泡。

A.8 与 code-review 的区别

code-review 只产出 Review 评论(找问题、无结论);pr-guard 在其之上加了 CI 检查 + 门禁判定 + 可选合并是完整闭环。两者共享审查逻辑pr-guard 复用 code-review 的分级输出。


三、工作流 B · pr-quality-gatekeeperPolicy-as-Code 评分卡)

B.1 背景与目标

pr-guard 的门禁是「0 Critical + CI 通过」二元的;真实团队往往要多维度量化测试覆盖率、提交规范、PR 卫生…),且标准要随仓库演进、可审计。gatekeeper 把合并标准写进版本化的 gatekeeper.yaml,对 PR 算出透明的 0-100 评分卡三态裁决——同一策略 + 同一 PR → 同一裁决(可裁决、可审计、可复现)。

B.2 五维加权评分(满分 100确定性计算

维度 权重 算法要点 信号来源
review_findings 40 权重 × max(0, 1 - Σ扣分/40)blocker 单条清零本维 code-review 的 Critical/Warning 数
test_coverage 20 改源码无测试→0有测试按 0.5+0.5×ratio 变更文件中的 source/test 文件比
pr_hygiene 15 描述≥30字 / 关联 Issue / 体量适中,各 1/3 PR 元信息
commit_quality 15 符合 Conventional Commits 的比例 commit 列表
ci_status 10 通过=10 / 失败=0 / 未知=5 ci +builds

扣分表blocker 100、major 25、minor 5、nit 1累计达本维权重即扣到 0

B.3 五项硬门禁命中任一即拦截→REQUEST_CHANGES

门禁 命中条件
forbid_blocker_findings 存在 blocker 级发现(如硬编码密钥、注入、路径遍历)
require_ci_pass CI 明确失败(未知/无记录不触发)
require_tests_for_src_changes 改了源码却没加测试
require_linked_issue 未关联 Issue可选
max_changed_files 改动文件数超上限(默认 80

B.4 三态裁决逻辑

命中硬门禁                        → ❌ REQUEST_CHANGES打 gatekeeper:needs-changes
total ≥ pass默认 85           → ✅ PASS打 gatekeeper:pass
total < request_changes默认 60→ ❌ REQUEST_CHANGES
其余                              → 💬 COMMENT打 gatekeeper:review人工定

裁决common 评论回写(评分卡标题标注三态),强语义的 approved/rejected 留给人工——避免 AI 越权批准。状态由标签承载。

B.5 九步工作流

①加载策略gatekeeper.yaml校验权重和=100、阈值合法→ ②采集 PR 上下文(pr +view/+files/+diff + api GET .../commits + ci +builds)→ ③AI 按 severity 分级产出发现 → ④逐维确定性评分 → ⑤硬门禁评估 → ⑥裁决 → ⑦渲染 Markdown 评分卡 → ⑧回写(受 --apply)→ ⑨安全规则(默认 dry-run、绝不默认合并

B.6 评分卡输出样例(回写到 PR

## 🛡️ Gatekeeper Report — PR #42 feat: add rate limiter
Verdict: ❌ REQUEST_CHANGES · Score: 58/100 · policy: gatekeeper.yaml@v1
| Dimension | W | Score | Notes |
| Review findings | 40 | 20/40 | 0 blocker / 2 major / 3 minor |
| Test coverage   | 20 | 0/20  | 3 src / 0 test → 触发硬门禁 |
| PR hygiene      | 15 | 10/15 | 描述OK / 无关联Issue |
| Commit quality  | 15 | 15/15 | 4/4 conventional |
| CI status       | 10 | 10/10 | passing |
⛔ Hard gate failures (1): require_tests_for_src_changes
🔴 Must fix (2): …   🟡 Should fix (3): …   ✅ Strengths: …

B.7 触发方式

默认 dry-run安全:不传 --apply 只打印评分卡;--apply 才回写评论 + 打标签;合并需「裁决=PASS + 策略 auto_merge=true + 显式 --apply」三条件齐备且二次确认。 Agent 提示词

读 skills/gitlink-gatekeeper/SKILL.md按 gatekeeper.yaml 对 <owner>/<repo> PR # 出评分卡:采集→分级→五维评分→硬门禁→裁决→渲染评分卡。先 dry-run 给我看,确认后再 --apply 回写。

B.8 真实验证

对仓库 113 个历史 PR 全仓批扫均分 88.5——验证评分卡对真实 PR 有良好区分度(低分 PR 普遍缺测试或 CI 失败)。

B.9 策略预设examples/

预设 阈值 适用
gatekeeper.yaml pass 85 / rc 60 默认平衡,大多数仓库
gatekeeper.strict.yaml 高阈值 + require_linked_issue 核心库 / 发布分支
gatekeeper.lenient.yaml 低阈值 + 关部分门禁 早期项目 / 文档仓库

四、工作流 C · community-ops-sweep 社区运营增量对账

C.1 背景与目标

维护一个开源仓库的社区运营,散落在一堆动作里:新 Issue 要分诊、要找人负责、定期出周报、发版要写 Release Notes、PR 还得关联到对应 Issue。community-ops-sweep 把这些做成一次调用、增量对账:给定时间窗(since 或读 checkpoint处理该窗口内所有新 Issue + 合并 PR5 项事件一网打尽。Claude Code Workflow 实现workflows/community-ops-sweep/)。

C.2 五项事件(一次调用)

R1 新 Issue triage分类/打标)→ R2 建议 owner路由规则→ R3 生成社区周报
   → R4 发布 Release Notes → R5 PR→Issue 关联闭环

C.3 三层架构判断与计算分离JSON 文件交接)

职责 实现
CC Workflow (JS) 编排:按 phase 调度 community-ops-sweep.wf.js
LLM agent 层 只做判断Issue 分类、PR 关联、owner 建议、散文增强) Claude Code agent
Python 引擎 只做计算(采集/归一化/id 解析/合并/守卫/渲染/写回) scripts/community_ops_sweep.py

这种分离让确定性引擎可单独跑、可单测18 个单测LLM 只负责需要语义判断的部分——可复现、可回归。

C.4 子命令(确定性引擎)

python scripts/community_ops_sweep.py collect  --owner <o> --repo <r> --since 2026-06-01T00:00:00Z  # 采集窗口内新 issue + 合并 PR
python scripts/community_ops_sweep.py plan     --candidates c.json --triage t.json --owners o.json --links l.json  # 读 LLM 决策 → 写计划
python scripts/community_ops_sweep.py apply    --plan plan.json --owner <o> --repo <r> [--apply]      # dry-run 预览,--apply 才真写
python scripts/community_ops_sweep.py checkpoint --owner <o> --repo <r>                              # 推进 .last-sweep + 追加 triage-log

C.5 触发方式

原生 Claude Code Workflow/community-ops-sweep owner=<o> repo=<r>(若放入 .claude/workflows/),或经 Workflow 工具带入 since(可选,留空读 .last-sweep)、apply(默认 false路由规则routing-rules.example.yaml 配置 R2 的 owner 建议opt-in auto_assign)。

C.6 真实运行 + 测试

字段名实测自真实 APIbaoerjun/gitlink-cli 等);18 个确定性逻辑回归测试tests/test_sweep.py)保证引擎可复现。

C.7 安全

默认 dry-run--apply 才写)· 标签整体替换(发期望全集,不丢标签)· 关 Issue 前守卫(已关跳过)· 绝不自动合并 PR · 写操作可逆(关可 reopen、release 可 edit


五、三个工作流的对比与协同

维度 pr-guard gatekeeper community-ops-sweep
解决问题 PR 合不合(二元门禁) PR 合不合(多维量化裁决) 社区运营批量自动化
裁决粒度 0 Critical + CI 通过 0-100 分 + 三态 5 项事件分别处理
策略化 固定门禁 可版本化 gatekeeper.yaml 路由规则 yaml
触发 PR 事件 PR 事件 时间窗增量
可复现 脚本 脚本 + 确定性评分 CC Workflow + 18 单测

三者可叠加community-ops-sweep 处理出的代码类 Issue → 贡献者提 PR → gatekeeper 出评分卡 → 满足 pr-guard 门禁 → 合并。

六、可复现性与 Agent 兼容

  • 可复现pr-guard/gatekeeper 提供 shell 脚本与确定性算法同输入同输出community-ops-sweep 提供 CC Workflow + 18 单测 + checkpoint 增量机制。
  • Agent 兼容pr-guard / gatekeeper 兼容 Claude Code读 SKILL.md 编排community-ops-sweep 为原生 Claude Code Workflow.wf.js)。

七、与子赛题二的区别

子赛题二交付独立可复用的单 SkillSKILL.md + examples子赛题三交付串联多步的完整解决方案pr-guard 串 4 域、gatekeeper 9 步聚合 5 维、community-ops-sweep 串 5 项事件。三者的底层 Skillcode-review / ci / issue / pr 等)即子赛题二的产物,复用于本工作流。