gitlink-cli/EXPERIMENT_LOG.md

154 lines
6.8 KiB
Markdown
Raw Permalink 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 Skills
> 记录时间2026-06-09 ~
> 截止日期2026-06-18
---
## 一、开发环境信息
| 项目 | 信息 |
|------|------|
| OS | Windows 11 Home China 10.0.26200 |
| Go | 1.26.1 |
| gitlink-cli | dev 版(本地构建) |
| Git 安装路径 | `D:/自用/奇奇怪怪的软件/Git/` |
| 认证方式 | cookie (auth login) |
| 测试项目 | chroe/gitlink-cli |
---
## 二、踩坑记录
### ✅ 坑 1`api` 子命令 URL 污染(已修复)
**发现时间**2026-06-09**修复时间**2026-06-13
**影响范围**:所有使用 `gitlink-cli api GET/POST` 的 Skill
**现象**
```bash
gitlink-cli --debug api GET /v1/chroe/gitlink-cli/issues/1 --format json
# 实际请求 URL
# https://www.gitlink.org.cn/api/D:/自用/奇奇怪怪的软件/Git/v1/chroe/gitlink-cli/issues/1.json
# ^^^^^^^^^^^^^^^^^^^^^^^^
# git exec-path 被注入!
```
**根因**CLI 的 `api` 子命令在构建 URL 时,错误地把 `git --exec-path` 的输出拼入了 API 路径。Shortcut 命令(如 `issue +list`)内部自行构建路径所以不受影响。
**根因**Windows Git Bash (MSYS2) 的路径自动转换。用户输入 `/v1/owner/repo`MSYS2 把以 `/` 开头的参数当成 Unix 绝对路径,自动转换成 git 安装目录 `D:/自用/奇奇怪怪的软件/Git/v1/owner/repo`
**修复**:在 `cmd/api/api.go``runAPI` 中加 MSYS2 路径检测——如果 path 以 Windows 盘符开头(如 `D:/`),则查找 `/v1/`、`/api/` 等常见 API 前缀并截断还原。已修复,`api` 命令现在正常工作。
**额外发现**Issue 更新接口要用 **PATCH** 方法POST 返回 404。
---
### ✅ 坑 2`issue +update` 不支持标签/责任人/优先级(已有替代方案)
**发现时间**2026-06-09**修复时间**2026-06-13
**发现时间**2026-06-09
**现象**`issue +update` 只有 `--title`、`--body`、`--state` 三个参数,不支持 `--tags`、`--assignee`、`--priority`
**影响**triage Skill 的核心写入操作(打标签、分配责任人)无法通过 shortcut 执行
**替代方案**(已验证可用):用 `api PATCH /v1/<owner>/<repo>/issues/<num>` 配合 `--body` 传递 JSON可同时打标签/分配责任人/设置优先级。坑 1 修复后此方案完全可用。
**实测**:对 chroe/gitlink-cli Issue #7 执行 `api PATCH` 成功打标签「缺陷」+ 分配 chroe + 优先级「高」。
**永久修复(可选)**:扩展 `issue +update` 命令添加 `--tags`、`--assignee`、`--priority-id` 参数更易用。
---
### ✅ 坑 2.5:责任人字段名是 `assigner_ids` 不是 `assigned_to_id`(关键发现)
**发现时间**2026-06-14
**现象**:项目记录里写"GitLink API 不支持 assign",实测发现是**字段名错了**
-`assigned_to_id`(单个数字)→ PATCH 返回 ok=true 但 assigners 仍为空
-`assigner_ids`(数组)→ PATCH 后 assigners 立即生效
**教训**:之前因为旧记录说"不支持"就放弃了没深入测试。GitLink 其实完全支持分配责任人,只是字段名跟常见 REST API 不同。
**修复**triage Skill 中所有 `assigned_to_id` 改为 `assigner_ids`
---
### 🟡 坑 3`issue +list --state open` 过滤不生效
**发现时间**2026-06-09
**现象**`--state open` 返回的 `issues` 列表包含已关闭的 Issuestatus_id=5`opened_count` 字段是准确的
**影响**AI 执行 triage 时可能处理已关闭的 Issue
**解决方案**:客户端过滤 `status.id !== 5`status_id=5 是关闭状态)
---
### 🟡 坑 4compare API 全面返回 HTML
**发现时间**2026-06-09
**现象**:不仅是部分项目,所有项目的 compare API 都返回 HTML 而非 JSON
**影响**changelog Skill 无法使用 compare API 对比版本差异
**解决方案**:改用 `commit +list` 按时间戳筛选版本区间内的提交
---
### 🟡 坑 5journals API 全面返回 HTML
**发现时间**2026-06-09之前以为是"部分项目"
**现象**:所有项目的 journals API`/v1/:owner/:repo/issues/:number/journals`)都返回 HTML
**影响**:无法获取 Issue 评论的详细内容和时间
**解决方案**:统一使用 `comment_journals_count` 字段判断是否有响应(>0 表示有人响应)
---
### 🟢 坑 6changelog 样式分类与输出格式不一致
**发现时间**2026-06-09
**现象**SKILL.md 分类规则表有"💄 样式"类,但 Release Notes 输出模板没有样式节
**解决方案**:标注样式类 commit 归入"改进优化"分类
---
## 三、验证记录
### gitlink-changelog 验证2026-06-09 二次复测)
| # | 命令 | 结果 | 备注 |
|---|------|------|------|
| 1 | `release +list --format json` | ✅ | 1 个版本 v0.1.13-freebsd |
| 2 | `commit +list --format json` | ✅ | 20 条,基线后 20 条 |
| 3 | `pr +list --state merged` | ✅ | 0 个Fork 仓库) |
| 4 | `issue +list --state closed` | ✅ | 6 个已关闭 |
| 5 | `release +view --id 1986` | ✅ | 正常返回 |
| 6 | `release +create --help` | ✅ | 参数完整可用 |
| 7 | ~~`api GET /compare/...`~~ | ❌ 返回 HTML | 已在 SKILL.md 标注不可用 |
| 8 | Commit 分类 20 条 | ✅ 20/20 正确 | 含 4 条正确跳过 |
| 9 | Release Notes 生成 | ✅ | 格式完整,含真实数据 |
### gitlink-triage 验证2026-06-09 二次复测,上游仓库)
| # | 命令 | 结果 | 备注 |
|---|------|------|------|
| 1 | `issue +list --state open`(上游 gitlink/gitlink-cli | ⚠️ | 列表 18 条含已关闭,需客户端过滤 |
| 2 | `issue +view --number N`6 个 Issue | ✅ | 全部返回详情 |
| 3 | `label +list`(上游) | ✅ | 10 个中文标签 |
| 4 | `member +list`(上游) | ✅ | 46 个成员 |
| 5 | `label +create --help` | ✅ | 可用 |
| 6 | `label +update --help` | ✅ | 可用 |
| 7 | `issue +comment --help` | ✅ | 可用 |
| 8 | `issue +update --state` | ✅ | 仅 title/body/state |
| 9 | ~~`api GET /journals`~~ | ❌ 返回 HTML | 已在 SKILL.md 标注 |
| 10 | ~~`api POST /issues/N`~~ | ❌ 404 | URL 污染 bug已标注 |
| 11 | Issue 分类 6 条 | ✅ 6/6 正确 | 上游真实 Issue |
| 12 | Good First Issue 评估 | ✅ | 识别出 2 个 GFI#14, #18 |
---
## 四、开发 Skill 的正确流程(血的教训)
```
1. 确定 Skill 场景
2. 写 SKILL.md
3. ⚠️ 在终端中逐条执行 SKILL.md 中的每一条命令
- 确认返回 JSON 而非 HTML
- 确认写入操作 API 路径正确
- 确认 Raw API URL 不被 git 路径污染
4. 修复发现的问题
5. 写 REFERENCE.md
6. 写 examples用真实数据
7. 在 Claude Code 中运行验证
8. 写 VERIFICATION.md
```
> **核心原则**「AI 看着合理」≠「实际能跑」。必须真机验证。