# Semantic Release 版本迁移追踪

## 2026-04-26

### 阶段：方案落地准备（SEMREL-RP-001）

- 读取当前 `auto-tag.yml` 与 `publish.yml`，确认最小侵入改法应只替换版本判断与打 tag，保留 tag 触发发布链
- 核对最近 tag 与提交历史：
  - 最新 tag 为 `v0.0.222`
  - `v0.0.222..HEAD` 含多条 `feat(...)`，按目标规则首次 dry-run 预期结果为 `v0.1.0`
- 补建本主题的 active tracking / trace 入口，并在 `ai-plan/public/README.md` 中为
  `feat/semantic-release-versioning` 建立 worktree 映射

### 阶段：配置落地与验证（SEMREL-RP-001）

- 新增 `.releaserc.json`，显式固定：
  - `feat -> minor`
  - `fix/perf/refactor -> patch`
  - `docs/test/chore/build/ci/style -> no release`
  - `BREAKING CHANGE` / `BREAKING CHANGES` 作为 major 信号
- 重写 `auto-tag.yml`：
  - 改为纯 `workflow_dispatch` 手动入口
  - 增加 `release_mode=preview|release` 输入
  - `preview` 只跑 dry-run 并输出 `last_tag`、`next_version`、`next_tag`
  - `release` 由维护者手动触发真实打 tag，并要求 `PAT_TOKEN`
- 收紧 `AGENTS.md` 的提交信息约束，明确提交类型必须反映 release semantics，纯文档变更禁止写成 `feat(...)`
- 按用户反馈继续调整发版入口：
  - 删除基于 `workflow_run` 的自动发版路径
  - 统一改为 `workflow_dispatch` 手动触发
  - 先在同一次 run 中执行 `preview`
  - 再通过 `release-approval` environment 做人工确认
  - 审批通过后继续同一 SHA 的真实 `release`
- 复验最小构建命令：
  - `dotnet build GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj -c Release -p:RestoreFallbackFolders=`
  - 结果：通过，`0 warning / 0 error`
- 完成最小构建验证：
  - `dotnet build GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj -c Release -p:RestoreFallbackFolders=`
  - 结果：通过，`0 warning / 0 error`
- 直接在当前工作树执行 `semantic-release --dry-run` 时命中本地 tag 抓取冲突：
  - `git fetch --tags ... would clobber existing tag`
  - 结论：当前工作树不适合作为 dry-run 验证环境
- 改用干净临时克隆 `/tmp/gframework-semrel-dryrun` 再跑 dry-run：
  - 成功识别 `v0.0.222` 为最新 release
  - 成功分析 `269` 个提交
  - 按当前规则得出下一次应为 `minor` 发布，预期版本窗口从 `0.0.222` 提升到 `0.1.0`

### 下一步

1. 复核变更 diff 并创建提交
2. 向用户说明新的发版链路与可优化点
