gitlink-cli/skills/gitlink-gatekeeper/examples/scorecard-sample.md

4.0 KiB
Raw Blame History

评分卡样例scorecard-sample

这是 gitlink-gatekeeper 渲染到 PR 评论的 评分卡 的样例输出,严格套用 REFERENCE.md 第 6 节模板。 本样例对应一个 REQUEST_CHANGES含硬门禁失败案例用于展示模板的全部分区硬门禁、Must fix、Should fix、Nits、Strengths、Next steps 同时出现)。 数值来自默认策略 gatekeeper.yaml(权重 40/20/15/15/10blocker=100/major=25/minor=5/nit=1pass=85、request_changes=60可按第 35 节算法逐项复算。


输入快照(用于复算)

信号
变更文件总数 changed_files 6
匹配 source_globs 的源码文件 changed_src 4
匹配 test_globs 的测试文件 changed_tests 0
AI 审查发现 0 blocker / 1 major / 2 minor / 1 nit
PR 描述 非空,长度 64 字符≥30
关联 Issue body 无 #<n>
commits 共 4 条,符合 Conventional Commits 的 3 条
CI 状态 passing

逐维复算

  • review_findings权重 40penalty = 25(major) + 2×5(minor) + 1(nit) = 36 score = 40 × max(0, 1 36/40) = 40 × 0.1 = 4
  • test_coverage权重 20changed_src=4 > 0changed_tests=0score = 0
  • pr_hygiene权重 15描述≥30 ✓(+1/3);关联 Issue ✗(0);体量 changed_files=6 ≤ max_changed_files/2 = 40 ✓(+1/3) → 命中比例 2/3 score = round(15 × 2/3) = round(10.0) = 10
  • commit_quality权重 15conforming/total = 3/4score = round(15 × 3/4) = round(11.25) = 11
  • ci_status权重 10passing → score = 10
  • 总分4 + 0 + 10 + 11 + 10 = 35

硬门禁判定

门禁 配置 命中?
forbid_blocker_findings true 否(无 blocker
require_ci_pass true CI passing
require_tests_for_src_changes true changed_src=4>0 且 changed_tests=0
require_linked_issue false —(未启用)
max_changed_files 80 6 ≤ 80

hard_gate_failed = true → 裁决直接 REQUEST_CHANGES(无视总分;本例总分 35 < 60 亦指向 REQUEST_CHANGES结论一致


渲染的评分卡(回写到 PR 的正文)

## 🛡️ Gatekeeper Report — PR #128 feat(auth): add refresh-token rotation

**Verdict: ❌ REQUEST_CHANGES**  ·  Score: 35/100  ·  policy: gatekeeper.yaml@v1

| Dimension | Weight | Score | Notes |
|-----------|:------:|:-----:|-------|
| Review findings | 40 | 4/40 | 0 blocker / 1 major / 2 minor / 1 nit |
| Test coverage   | 20 | 0/20 | 4 src / 0 test files |
| PR hygiene      | 15 | 10/15 | desc ✓ / linked issue ✗ / size ✓ |
| Commit quality  | 15 | 11/15 | 3/4 conventional |
| CI status       | 10 | 10/10 | passing |

### ⛔ Hard gate failures (1)
- `require_tests_for_src_changes`: 改动了 4 个源码文件,但本 PR 未包含任何测试文件

### 🔴 Must fix (1)
- [major] 刷新令牌轮换未对旧令牌做失效处理,存在重放风险 — internal/auth/refresh.go:88

### 🟡 Should fix (2)
- [minor] `rotateToken` 缺少超时上下文,可能阻塞请求 — internal/auth/refresh.go:54
- [minor] 错误信息直接回显内部字段名,建议脱敏 — internal/auth/handler.go:131

### 🔵 Nits (1)
- [nit] 导出函数 `NewRotator` 缺少 doc 注释 — internal/auth/refresh.go:22

### ✅ Strengths
- commit 历史清晰3/4 符合 Conventional Commits
- CI 全绿PR 描述完整

### Next steps
1. **补测试**:为改动的 4 个源码文件添加单元测试,解除 `require_tests_for_src_changes` 硬门禁
2. 修复 major 重放风险后重新触发 gatekeeper
---
*Generated by gitlink-gatekeeper · policy-as-code PR gate · re-run after changes*

复算提示:把上表「输入快照」的数值代入 REFERENCE.md 第 3 节公式即可重现每一维得分;硬门禁按第 4 节逐项比对;最终裁决按第 5 节判定树得出。同策略 + 同输入 → 同评分卡(确定性)。