gitlink-cli/skills/gitlink-duplicate-detector/examples/duplicate-detection-workflo...

203 lines
10 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.

# 重复 Issue 检测 — 端到端工作流示例与验证记录
> 配套文档:[`../SKILL.md`](../SKILL.md)
> 本文记录一次**真实跑通**的完整工作流(只读分析 + 写动作计划),含真实命令输出,作为「使用示例 + Agent 平台验证结果」交付物。
## 验证环境
| 项 | 值 |
|----|----|
| Agent 平台 | Claude Code |
| gitlink-cli | `local-build`(本仓库源码编译产物,**非** npm 发布版 v0.1.13 |
| 登录用户 | `z2_cc``auth status` ✓) |
| 测试目标 | `Gitlink/gitlink-cli`19 条开放 Issue |
| 验证日期 | 2026-06-17 |
> 选 `Gitlink/gitlink-cli` 是因其开放 Issue 较多、含真实重复/测试 Issue**写动作未在该他人仓库执行**,仅做只读分析 + 命令语法已 `--help` 验证。
## 步骤 1拉取全部开放 Issue
```bash
gitlink-cli issue +list --owner Gitlink --repo gitlink-cli --state open --limit 50 --format json
```
解析 `data.issues[]`,取 `number`(Web编号) / `subject` / `comment_journals_count` / `tags` / `created_at`
```
all_count: 19
#21 [3评论] 2026-06-14 dataset 快捷命令需要的后端 API 支持
#20 [1评论] 2026-06-12 bug: api 命令单次调用不替换 :owner/:repo 占位符0.2.0
#6 [3评论] 2026-04-25 只要创建Iusse就让Agent开始干活
#1 [1评论] 2026-04-01 CLI测试Issue - 已更新标题
#18 [0评论] 2026-05-22 giklink-cli issue +update后issue状态框变红色
#17 [0评论] 2026-05-21 API是否支持自动读取仓库内文件README等
#16 [5评论] 2026-05-19 [Bug] Windows 平台完全不可用Release 缺少 Windows 二进制…
#14 [1评论] 2026-05-16 pr +view 的返回中缺少PR关闭时间
#4 [4评论] 2026-04-18 PR使用gd login无法自动完成
#5 [1评论] 2026-04-24 通过这个skill认领任务描述信息消失
#7 [1评论] 2026-04-25 目前看Gitlink-skill返回的PR ID和实际的不符
#15 [1评论] 2026-05-19 issue +view 返回的数据与网页显示不一致
#11 [0评论] 2026-05-13 [test] batch-close 测试 issue 1
#12 [0评论] 2026-05-13 [test] batch-close 测试 issue 2
#9 [2评论] 2026-05-12 feat(api): 希望 Issue API 支持按项目内序号查询
#8 [1评论] 2026-05-12 Test: PR#7 标题已修改
#10 [1评论] 2026-05-12 [test] PR#11 v1 API 测试 - 已更新
#2 [4评论] 2026-04-03 gitlink-cli 使用讨论与反馈收集
#3 [1评论] 2026-04-04 Skill测试Issue-0404 (已更新)
```
## 步骤 2粗筛候选对
标题信号已显出两个簇:
- **簇 A**`#11` / `#12` —— `[test] batch-close 测试 issue 1/2`,同作者同时间,强重复嫌疑。
- **簇 B**(主题「`+view`/`+update` 返回数据异常」):`#5` / `#14` / `#15` / `#18` —— 需看正文区分「重复」还是「相关」。
## 步骤 3取正文做相似度比对
```bash
gitlink-cli issue +view --owner Gitlink --repo gitlink-cli --number 11 --format json
gitlink-cli issue +view --owner Gitlink --repo gitlink-cli --number 12 --format json
```
| 编号 | 作者 | 创建时间 | 正文(节选) |
|------|------|----------|--------------|
| #11 | wbtiger | 2026-05-13 19:06 | `PR #12 测试用,验证后关闭` |
| #12 | wbtiger | 2026-05-13 19:06 | `PR #12 测试用,验证后关闭` |
**正文逐字相同、同作者、同一分钟提交**,相似度 **0.98**,判为**高度疑似重复**。
簇 B 正文各异(#5「描述丢失」、#14「关闭时间缺失」、#15「返回旧数据」、#18「状态框变红」相似度 0.400.55 → **相关但非重复**,不合并。
## 步骤 4幂等检查写动作前
```bash
gitlink-cli issue +comments --owner Gitlink --repo gitlink-cli --number 12 --format json
```
实测输出(节选)—— 注意 `+comments` 返回的是**活动日志**,需区分:
```json
[
{ "is_journal_detail": true, "operate_content": "创建了<b>疑修</b>", "notes": "", "user": {"login":"wbtiger"} },
{ "is_journal_detail": true, "operate_content": "…", "notes": "" },
{ "is_journal_detail": true, "operate_content": "…", "notes": "" }
]
```
**判定规则**:仅当某条 `notes` **非空且含标记串**`duplicate-of` / `重复,指向 #`)才视为已处理。此处 3 条均为系统日志(`notes` 空)→ **未处理,可执行写动作**
> 真实文字评论才会带 `notes`(如 #21 的「新建声明: 我来解决」)。`comment_journals_count` 与 `+comments` 条数口径不同(后者含系统日志),幂等一律以 `notes` 内容为准。
另查 `issue +list``tags`#12 为空 → 未打「重复」标签 → 双重确认未处理。
## 步骤 5输出报告dry-run默认产物
````markdown
# 重复 Issue 收敛报告 — Gitlink/gitlink-cli
扫描:开放 Issue 19 条 | 模式dry-run只读 | 2026-06-17
## 🔴 重复簇 1高度疑似
- 主 Issue#11 `[test] batch-close 测试 issue 1`wbtiger2026-05-13正文"PR #12 测试用,验证后关闭"
- 重复项:
- #12 `[test] batch-close 测试 issue 2` — 相似度 0.98(正文逐字一致、同作者同时间)
- 幂等:#12 无 duplicate 标记评论、无「重复」标签 → 待处理
- 建议动作:评论关联 #11 → 打「重复」标签 → 关闭 #12
## 🟡 相关但非重复(仅提示,不合并)
主题「+view/+update 返回数据异常」:#5 / #14 / #15 / #18,症状各异(相似度 0.400.55),分别处理。
## ✅ 待确认写动作
| 重复项 | 动作 | 命令 |
|--------|------|------|
| #12 | 评论+打标+关闭 | 见步骤 6 |
````
## 步骤 6写动作计划需用户逐条确认未在他人仓库执行
```bash
# 6.1 取「重复」标签 ID已确认存在id=298661描述"表示已存在类似的疑修"
gitlink-cli label +list --owner Gitlink --repo gitlink-cli --format json
# 6.2 关联评论
gitlink-cli issue +comment --owner Gitlink --repo gitlink-cli --number 12 \
--body "🔁 疑似重复 Issue本 Issue 与 #11 高度相似(正文逐字一致,相似度 0.98)。主 Issue → https://www.gitlink.org.cn/Gitlink/gitlink-cli/issues/11"
# 6.3 打「重复」标签做幂等标记
gitlink-cli issue +update --owner Gitlink --repo gitlink-cli --number 12 --label 298661
# 6.4 关闭重复项
gitlink-cli issue +close --owner Gitlink --repo gitlink-cli --number 12 \
--comment "关闭:与 #11 重复,后续讨论请移步主 Issue。"
```
> 以上命令语法均经 `--help` 验证可用;因 `Gitlink/gitlink-cli` 非登录用户所有,**未实际执行写动作**。如需完整写链路验证,请在 `z2_cc` 自有仓库上重跑(可先 `issue +create` 造两条重复 Issue
## 关键验证结论
| 能力 | 命令 | 状态 |
|------|------|------|
| 批量拉取(含 Web 编号/标签/评论数/时间) | `issue +list --state --limit --format json` | ✅ 真实返回 |
| 关键词预筛 | `issue +list --keyword Windows` → 命中 1 条 | ✅ |
| 取正文 | `issue +view --number 11/12``description` | ✅ |
| 读评论(幂等) | `issue +comments --number 12` → 含 `notes`/`is_journal_detail` | ✅ |
| 标签管理 | `label +list` → 「重复」标签 id=298661 | ✅ |
| 评论/关闭 | `issue +comment` / `+close --number` | ✅ **实际执行成功**(见附录) |
| 打标签 | `issue +update --label` | ⚠️ 返回 ok 但未生效(见附录) |
> ⚠️ 版本前提:以上能力依赖含 `+comments`/`label`/`--keyword` 的 gitlink-cli本仓库源码已具备npm 发布版 v0.1.13 不具备)。参赛验证基于本地源码编译产物。
---
## 附写链路实测验证z2_cc/gitlink_help_center
为验证写动作,在 z2_cc 拥有 Owner 权限的复刻仓 `z2_cc/gitlink_help_center` 实跑全链路(该仓已自带「重复」标签 id=315565、「测试」标签 id=315564
### A. 造两条高度相似的测试 Issue
```bash
gitlink-cli issue +create --owner z2_cc --repo gitlink_help_center -t "【dup-test】登录按钮点击无反应" -b "## 复现步骤 ..." # → id=144589, Web #22
gitlink-cli issue +create --owner z2_cc --repo gitlink_help_center -t "【dup-test】登录按钮点了没反应" -b "## 复现步骤 ..." # → id=144590, Web #23
```
(正文几乎逐字一致、标题同义 → 相似度 ~0.95,构造为重复对)
### B. 幂等检查(只读)
```bash
gitlink-cli issue +comments --owner z2_cc --repo gitlink_help_center --number 23 --format json
```
`data.journals[]` 仅 1 条系统动态(`is_journal_detail=true``notes` 空),无 duplicate 标记 → **可执行写动作**
### C. 写动作执行结果
| 动作 | 命令 | 结果 |
|------|------|------|
| 关联评论 | `issue +comment --number 23 --body "🔁 疑似重复…指向 #22"` | ✅ 发布成功journal id=476901 |
| 打「重复」标签 | `issue +update --number 23 --label 315565` | ⚠️ 返回 ok`+list`/`+view` 的 `tags=[]`**未生效** |
| 关闭重复项 | `issue +close --number 23 --comment "关闭:与 #22 重复…"` | ✅ 关闭成功 |
### D. 验证写动作落地
```bash
gitlink-cli issue +comments --owner z2_cc --repo gitlink_help_center --number 23 --format json
```
实测 `data.journals[]`5 条):
```
[0] is_journal_detail=true operate_content="创建了<b>疑修</b>" notes=""
[1] is_journal_detail=false operate_content="" notes="🔁 疑似重复 Issue本 Issue 与 #22 高度相似…"
[2] is_journal_detail=true operate_content="将状态由<b>新增</b>更改为<b>关闭</b>" notes=""
[3] is_journal_detail=true operate_content="将结束日期设置为<b>2026-06-17</b>" notes=""
[4] is_journal_detail=false operate_content="" notes="关闭:与 #22 重复,后续讨论请移步主 Issue #22。"
```
```bash
gitlink-cli issue +list --owner z2_cc --repo gitlink_help_center --state closed --format json
```
`#23 status=关闭``#22 status=新增`(主 Issue 保持开放)。✅
### E. 结论
- **评论 + 关闭链路完全可用**,且 `+comments` 能可靠回读评论(`is_journal_detail=false` 的 `notes`)→ **评论幂等成立**
- **`+update --label` 不可靠**(返回 ok 但标签未生效)→ 幂等**不依赖标签**,仅用评论标记。
- 验证后已清理测试 Issue`issue +delete` / 关闭清理),不在帮助中心仓留痕。