gitlink-cli/examples/workflows/pr-quality-gatekeeper/docs/verification.md

65 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 真实平台验证记录
> 全部针对 **GitLink 线上真实平台** 运行(`gitlink-cli` + Token 认证),非 mock。
> 他人仓库一律 dry-run只读零写入写操作只在自有 fork 演练。
> 运行环境macOSApple Silicon· Python 3.9 · `@gitlink-ai/cli` 0.2.0npm 官方发布版,零本地构建)。
## A. dry-run真实 PR → PASS 90/100
对本仓库真实 PR`pull_request_id 15222`feat/org-team-projects8 个变更文件):
- 路由正确分流README/docs/skill → doc-maintainer`org.go` → go-reviewer`org_test.go` → qa-reviewer
- 评分确定性可手算复现review 40/40 · test 20/201 src/1 test· hygiene 10/15desc✓/issue✗/size✓· commit 15/15 · ci 5/10unknown= **90 → PASS**
- CI 取不到构建记录 → `unknown`:按策略**不触发**硬门禁(仅显式 `failing` 触发),只在 CI 维记半分
- 产物:[`../examples/demo-outputs/scorecard-pass-90.md`](../examples/demo-outputs/scorecard-pass-90.md)
## B. 注入真实审查发现 → REQUEST_CHANGES 55/100
同一 PR注入 [`../findings.example.json`](../findings.example.json) 重跑review_findings 40/40 → 5/401 major + 2 minor总分 90 → 55**裁决翻转为 REQUEST_CHANGES**。
**发现是真的,不是编的**——三条均来自对该 PR 真实 diffhead `bcc27bf`)的代码审查,标注 `shortcuts/org/org.go` 真实行号,任何人拉取该分支可逐条复核。其中 major新增的 `parseBool` 只认字面 `"true"``--dry-run=1` 会被静默当 false而该 flag 守护的是「批量移除团队全部项目」这一破坏性操作。
产物:[`../examples/demo-outputs/scorecard-findings-55.md`](../examples/demo-outputs/scorecard-findings-55.md)
## C. `--apply` 真实回写(自有 fork 演练)
在自有 fork 的演练 PR故意「改源码不带测试」上执行 `--apply`
- 触发硬门禁 `require_tests_for_src_changes` → REQUEST_CHANGES 40/100
- GitLink API 回执确认三件写操作全部落地:
1. 评分卡评论回写到 PRcomment id `472741`
2. 自动创建 tracking issueid `143217`),汇总硬门禁 + 必修项 + 建议 reviewer与 PR 双向回链
3. 裁决标签挂载到 PR 背后 issue`label +list` 查 id → Raw API `POST /:owner/:repo/issues/<issue_id>`)——依赖本仓库的 `label` 命令0.2.0 起官方发布版自带)
## D. 全仓批量体检113 个 open PR
`gatekeeper_sweep.py` 对本仓库**全部 113 个 open PR** 逐个 dry-run只读、零写入、零 AI 成本113/113 成功:
- 裁决分布:**PASS 105 · COMMENT 6 · REQUEST_CHANGES 2**;分数 min 70 / 中位 90 / 均值 88.5 / max 95
- 治理洞察:**96% 的 open PR 未关联 issue**2 个 PR 触发 `require_tests_for_src_changes`(改源码不带测试)
- 完整报告(含全量明细表):[`../examples/demo-outputs/sweep-report-2026-06-10.md`](../examples/demo-outputs/sweep-report-2026-06-10.md)
- 诚实口径批扫不注入审查发现review_findings 维未评、按满分计CI 统一 `--skip-ci`unknown 半分)——总分代表「除人工/AI 审查外的工程卫生分」,偏乐观
## E. 咨询标记advisory→ 真实 PR 触发但不改裁决
开启 `advisory_flags``enabled: true, large_pr_files: 10`)对本仓库真实 open PR `#275`feat(shortcut): add repo upload10 个变更文件)跑 dry-run
- `large_pr_files` 标记**触发**10 ≥ 阈值 10评分卡新增 `### 💡 Advisory` 节提示「建议拆分」
- **裁决不变**:仍为 **PASS 87/100**——咨询标记不参与评分、不改变裁决(与 `test_scoring.py``test_advisory_does_not_change_verdict` 不变量一致)
- 这是与硬门禁互补的「软」一层:硬门禁命中即拦截(真牙齿),咨询标记只提示、把判断留给人——正回应 D 节里 166-PR 积压仓库「超体量 PR 该提示拆分但不该阻断」的真实场景
- 产物:[`../examples/demo-outputs/scorecard-advisory.md`](../examples/demo-outputs/scorecard-advisory.md)
## F. 单元测试(确定性回归护栏)
```bash
$ python3 tests/test_scoring.py
OK # 15 tests8 评分案例 + 7 advisory
```
锁定四个权威裁决案例PASS / REQUEST_CHANGES / COMMENT / 硬门禁直拒)的**总分与裁决**与 Skill 文档逐位一致advisory 测试另锁「默认关闭向后兼容」与「开启触发也不改总分/裁决」两条不变量。任何改动若破坏「同输入 → 同分 → 同裁决」,测试立即变红。
## 真实运行当场暴露过的问题(透明记录)
- GitLink 的 PR 标题/描述在 `pr +view` 返回的 `issue.subject/description`,而非 `pull_request` 子对象——离线 mock 测不到,真实平台运行才暴露并修复。
- npm 0.1.18 时代 `--apply` 的打标签步骤会报 `unknown command "label"`(彼时 `label` 命令尚未发布0.2.0 起官方发布版自带,整条闭环零本地构建跑通。