# 真实平台验证记录

> 全部针对 **GitLink 线上真实平台** 运行（`gitlink-cli` + Token 认证），非 mock。
> 他人仓库一律 dry-run（只读零写入）；写操作只在自有 fork 演练。
> 运行环境：macOS（Apple Silicon）· Python 3.9 · `@gitlink-ai/cli` 0.2.0（npm 官方发布版，零本地构建）。

## A. dry-run：真实 PR → PASS 90/100

对本仓库真实 PR（`pull_request_id 15222`，feat/org-team-projects，8 个变更文件）：

- 路由正确分流：README/docs/skill → doc-maintainer；`org.go` → go-reviewer；`org_test.go` → qa-reviewer
- 评分（确定性，可手算复现）：review 40/40 · test 20/20（1 src/1 test）· hygiene 10/15（desc✓/issue✗/size✓）· commit 15/15 · ci 5/10（unknown）= **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/40（1 major + 2 minor），总分 90 → 55，**裁决翻转为 REQUEST_CHANGES**。

**发现是真的，不是编的**——三条均来自对该 PR 真实 diff（head `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. 评分卡评论回写到 PR（comment id `472741`）
  2. 自动创建 tracking issue（id `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 upload，10 个变更文件）跑 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 tests（8 评分案例 + 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 起官方发布版自带，整条闭环零本地构建跑通。
