gitlink-cli/EXPERIMENT_LOG.md

143 lines
5.6 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 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
**影响范围**:所有使用 `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`)内部自行构建路径所以不受影响。
**影响**
- 所有 `api GET` 返回 HTMLGitLink 首页)而非 JSON
- 所有 `api POST` 返回 404
- journals API、compare API、Issue 更新 API 全部不可用
**临时方案**:在 Skill 中标注 `api` 命令不可用,改用 shortcut 命令或引导用户网页操作
**永久修复**:需修复 CLI 的 api 子命令 URL 构建逻辑
---
### 🔴 坑 2`issue +update` 不支持标签/责任人/优先级(严重)
**发现时间**2026-06-09
**现象**`issue +update` 只有 `--title`、`--body`、`--state` 三个参数,不支持 `--tags`、`--assignee`、`--priority`
**影响**triage Skill 的核心写入操作(打标签、分配责任人)无法通过 CLI 执行
**临时方案**Skill 改为"AI 生成分拣建议 → 用户在网页手动操作"
**永久修复**:需扩展 `issue +update` 命令,添加 `--tags`、`--assignee`、`--priority-id` 参数
---
### 🟡 坑 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 看着合理」≠「实际能跑」。必须真机验证。