# PR 深度审查 — 端到端工作流示例与验证记录

> 配套文档：[`../SKILL.md`](../SKILL.md)
> 本文记录一次**真实跑通**的完整工作流（只读分析 + 写动作），含真实命令输出，作为「使用示例 + Agent 平台验证结果」交付物。

## 验证环境

| 项 | 值 |
|----|----|
| Agent 平台 | Claude Code |
| gitlink-cli | `local-build`（本仓库源码编译产物，**非** npm 发布版 v0.1.13） |
| 登录用户 | `z2_cc`（`auth status` ✓） |
| 测试目标 | `z2_cc/gitlink-cli`（z2_cc 有写权限，Owner） |
| 测试 PR | #1（`feat(auth): 登录态过期自动跳转登录页`，body 引用 `#17`） |
| 验证日期 | 2026-06-17 |

## 测试数据构造（造一个"PR + 关联 Issue"的真实样本）

为覆盖「关联 Issue 锚点」+「写链路」，先造测试数据（验证后已清理）：

```bash
# 1) 造需求锚点 Issue（→ Web #17）
gitlink-cli issue +create --owner z2_cc --repo gitlink-cli \
  -t "[deep-review-test] 登录态过期未自动跳转" -b "## 需求 ..."   # → id=144670, #17

# 2) 造带 diff 的分支并 push（提交署名 z2_cc）
git checkout -b test/pr-deep-review-probe
#   <新增 _deep_review_probe.md>
git commit -m "test(pr-deep-review): ...（关联 #17）"
git push -u origin test/pr-deep-review-probe

# 3) 建 PR，body 引用 #17（→ Web #1）
gitlink-cli pr +create --owner z2_cc --repo gitlink-cli \
  --head test/pr-deep-review-probe --base master \
  --title "feat(auth): 登录态过期自动跳转登录页（含回跳）" \
  --body "## 关联需求\n修复 #17 ：登录态过期未自动跳转。..."   # → id=144671, #1
```

## 步骤 1：取 PR 上下文（实测输出）

```bash
N=1
gitlink-cli pr +view --owner z2_cc --repo gitlink-cli --id $N --format json
```
→ 标题在 `data.issue.subject`、**正文在 `data.issue.description`**（嵌套，非顶层）：
```
PR 标题: feat(auth): 登录态过期自动跳转登录页（含回跳）
body 长度: 153   ← data.issue.description
```

```bash
gitlink-cli pr +files --id 1 --format json          # → 变更文件: 1 (_deep_review_probe.md)
VID=$(gitlink-cli pr +versions --id 1 --format json | ...)   # → version_id=17388
gitlink-cli pr +version-diff --id 1 --version-id 17388       # → diff 条目: 1
```

## 步骤 2：锚点获取（实测：从 body 提取 #N → 取需求）

```bash
# 从 PR body 提取关联 Issue 编号
BODY=$(gitlink-cli pr +view --id 1 --format json | ... data.issue.description)
ISSUE_N=$(echo "$BODY" | ... match /#(\d+)/)     # → 17
```
实测：从 153 字 body 提取到 **`#17`** ✓

```bash
gitlink-cli issue +view --number 17 --format json   # 取需求锚点
```
→ 锚点 Issue：`[deep-review-test] 登录态过期未自动跳转`，需求正文 120 字（含验收标准）✓

> （若使用者还提供了设计文档路径，则 `git show <path>` 读取后与 Issue 合并为锚点；本次测试仅 Issue 锚点。）

## 步骤 3：跨模块直接调用方（实测机制）

```bash
git grep -n "<改动符号>" -- '*.go'
```
→ `git grep` 机制可用（本仓库实测命中准确）。本测试 PR 仅改文档无代码符号，故无调用方受影响。

## 步骤 4：编排实现层 + 推理层 → 综合裁决（示例输出）

```markdown
## 🔍 PR 深度审查 — #1 feat(auth): 登录态过期自动跳转登录页

**关联锚点**：#17（从 PR body 自动识别）

### 📎 实现层（编排 gitlink-code-review）
- Critical: 0 | Warning: 0 | Suggestion: 0（本 PR 仅新增说明文档，无逻辑代码）

### 🧩 跨模块影响
- 改动符号：无（仅文档）
- 直接调用方受影响：无

### 🎯 需求/设计一致性
- 需求达成：❌ #17 要求 401→自动跳转，本 PR 尚无实际拦截/跳转代码（仅文档占位）

### 🏁 综合裁决
| 维度 | 结果 |
|---|---|
| 实现质量 | ✅ |
| 跨模块影响 | ✅ |
| 一致性 | ❌ 未实现 |
**综合风险：🟡中 → 建议：谨慎，补全实现后再合入。**
```

## 步骤 5：写动作（实测：真实回贴 + 验证落地）

```bash
# 回贴综合评审（--status common = 评论，不替人 approve/reject）
gitlink-cli pr +review --owner z2_cc --repo gitlink-cli --id 1 \
  --status common --content "## 🔍 PR 深度审查 ..." --format json
```
→ `评审已回贴 ✓`

```bash
# 验证评审落地
gitlink-cli pr +reviews --id 1 --format json     # → 已有 reviews: 1，含「深度审查」 ✓
```

```bash
# 补充普通评论
gitlink-cli pr +comment --owner z2_cc --repo gitlink-cli --id 1 \
  --body "💡 提示：补全 401 拦截逻辑后可重新触发深度审查。" --format json
```
→ `评论已发布 ✓`；落地验证用 `pr +view` 的 `comments_count`（=1）。
> ⚠️ `pr +comments` 只列**评审行内评论**，不含普通评论——普通评论落地看 `pr +view` 的 `comments_count`。

## 关键验证结论

| 能力 | 命令 | 状态 |
|------|------|------|
| 取 PR 标题/正文 | `pr +view`（`data.issue.subject`/`data.issue.description`） | ✅ 真实返回 |
| 变更文件 | `pr +files` | ✅ |
| 真实 diff | `pr +version-diff --version-id` | ✅（`pr +diff` 不存在） |
| patchset | `pr +versions` | ✅ |
| **关联 Issue 锚点** | `pr +view` body→`#N`→`issue +view` | ✅ 端到端跑通 |
| 跨模块直接调用方 | `git grep` | ✅ 机制可用 |
| **回贴综合评审** | `pr +review --status common` | ✅ 实际回贴 + `pr +reviews` 验证 |
| 普通评论 | `pr +comment` | ✅（落地看 `pr +view` `comments_count`） |

## 清理

测试产物已全部清理，`z2_cc/gitlink-cli` 无残留：
- `pr +close --id 1`（关闭测试 PR）
- `git push origin --delete test/pr-deep-review-probe`（删远端分支）
- `issue +delete --number 17`（删测试 Issue）
- 本地切回 `master`、删本地分支（工作树干净，`master == origin/master`）

> ⚠️ 版本前提：以上能力依赖含 `pr +versions/+version-diff/+review` 的 gitlink-cli（本仓库源码已具备；npm 发布版 v0.1.13 不具备）。参赛验证基于本地源码编译产物。
