# Release Publisher

发布并验收 TrailSnap 新版本：汇总提交、同步全项目版本号、更新官网日志与客户端更新清单、执行发布前测试、创建 GitHub Release、监控标签 CI、核验...

- Repository: https://github.com/LC044/TrailSnap (860 stars)
- Category: Git and review
- License: AGPL-3.0
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add LC044/TrailSnap --skill release-publisher -g -a claude-code -y`
Codex: `npx skills add LC044/TrailSnap --skill release-publisher -g -a codex -y`
Cursor: `npx skills add LC044/TrailSnap --skill release-publisher -g -a cursor -y`
Gemini CLI: `npx skills add LC044/TrailSnap --skill release-publisher -g -a gemini-cli -y`

## Description

发布并验收 TrailSnap 新版本：汇总提交、同步全项目版本号、更新官网日志与客户端更新清单、执行发布前测试、创建 GitHub Release、监控标签 CI、核验 Release 附件，并生成小红书和公众号文案。Use when the user asks to 发布新版本、发版、创建或检查 GitHub Release、总结版本变更、监控发布 CI、检查发布产物，或撰写版本更新帖子。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# TrailSnap 版本发布与验收

严格按顺序执行。完整性优先于打标签；未经用户确认，不得创建 GitHub Release。

## 1. 发布前检查

1. 确认位于 TrailSnap 仓库根目录。
2. 运行 gh auth status，确认 GitHub CLI 已登录。
3. 运行 git status --short --branch。保护用户已有改动；工作区不干净时先判断归属，不得覆盖。
4. 获取远程标签，并只选择严格语义化标签：
   - 接受正则 ^v[0-9]+\.[0-9]+\.[0-9]+$
   - 排除 pr-preview、app-v*、预发布标签等
   - 不要直接信任 git describe --tags；它可能选中非版本标签
5. 确认目标标签和 Release 均不存在：
   - 检查本地标签、git ls-remote --tags origin 和 gh release view
6. 获取上个正式版本到 HEAD 的提交。若为空，停止并提示先提交代码。
7. 运行 git grep 搜索上个版本的带 v 和不带 v 形式，建立版本影响清单。

PowerShell 可按版本对象排序标签：

    $lastTag = git tag --list |
      Where-Object { $_ -match '^v\d+\.\d+\.\d+$' } |
      Sort-Object { [version]($_ -replace '^v', '') } -Descending |
      Select-Object -First 1

## 2. 确定版本号

- 用户已指定版本时直接采用。
- 未指定时根据提交建议 patch、minor 或 major。
- patch：修复和小优化。
- minor：向后兼容的新功能。
- major：不兼容变更；必须向用户确认影响与迁移方式。
- 标签始终使用 v 前缀，项目文件使用不带 v 的版本号。

## 3. 同步版本号

以下是当前基线清单，不是完整清单。先更新这些位置，再用 git grep 发现新增位置。

### AI 服务

- package/ai/pyproject.toml
- package/ai/uv.lock
- package/ai/desktop_app.py
- package/ai/app/services/photo_model_repository.py 中的 User-Agent

### Server

- package/server/pyproject.toml
- package/server/uv.lock
- package/server/app/core/config_manager.py 中的全部版本常量和默认值

### Website 与 CLI

- package/website/package.json
- package/trailsnap-cli/package.json
- package/trailsnap-cli/pyproject.toml
- package/trailsnap-cli/trailsnap/cli.py
- 仅在测试夹具表达“当前产品版本”时同步测试版本；不要误改依赖版本，例如 ts-node@10.9.2

### Desktop 完整应用

- package/desktop/package.json
- package/desktop/src-tauri/Cargo.toml
- package/desktop/src-tauri/Cargo.lock
- package/desktop/src-tauri/tauri.conf.json
- Server 与 AI 分别构建但随桌面应用一起发布，两个 `runtime-version.json` 必须与桌面版本一致。
- 完整运行时暂存后运行 `python package/desktop/scripts/validate_components.py`；缺少组件或混合版本时停止发布。
- Windows 安装版、便携版和完整更新 ZIP 都必须包含 Server 与 AI。新清单使用 `bundledAI: true`。
- 不再发布独立 AI 扩展清单或压缩包，不维护最低扩展版本；历史 Release 附件保持原样供旧版回滚。

完成后再次搜索旧版本：

- 历史 changelog 和 version.json 中的旧版本应保留。
- 第三方依赖版本不得误改。
- 所有当前产品版本、锁文件本地包版本和发布工作流版本必须一致。

The rest: https://github.com/LC044/TrailSnap/blob/HEAD/.agents/skills/release-publisher/SKILL.md
