一键导入
lime-release-workflow
准备并执行 Lime 发版;覆盖版本号、发布说明、产物清理、验证门禁、commit、tag 和推送。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
准备并执行 Lime 发版;覆盖版本号、发布说明、产物清理、验证门禁、commit、tag 和推送。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Govern Lime legacy cleanup, fact-source convergence, current/compat/deprecated/dead classification, and guardrails.
Choose Lime validation commands for GUI, command/bridge, config, version, and PR-readiness changes.
仅在用户显式使用 @配图/@修图/@重绘/@image,或已明确确认调用画图功能后,根据文本描述生成配图素材(非封面场景)。
内容工厂专用写作 Skill,生成批量文案、短视频脚本和图片提示词,并输出可回写的 contentFactoryWorkspacePatch。
生成可直接发布的内容主稿(默认公众号长文风格)并自动生成 1 张头图,最终以 write_file 落盘。
联网检索并产出结构化研究报告,强调结论、证据、风险与建议。
| name | lime-release-workflow |
| description | 准备并执行 Lime 发版;覆盖版本号、发布说明、产物清理、验证门禁、commit、tag 和推送。 |
AGENTS.md、internal/aiprompts/quality-workflow.md 和当前 git status --short,再修改版本或发版文件。git commit、git tag、git push、覆盖已有 tag、终止用户进程前,必须按仓库危险操作格式向用户确认。package.json、forge.config.mjs、App Server manifest 与 lime-rs/Cargo.toml 的 workspace version 为准,完成后必须跑 npm run verify:app-version。forge.config.mjs、electron-forge package、electron-forge make 与 Forge 官方 maker;旧 builder 配置 / CLI、自定义 Windows installer maker 与旧 YAML / blockmap updater metadata 按 dead 处理,不得写回 release workflow、docs、quality guard 或 i18n evidence。运行时更新以 electron/updateHost.ts + Electron 内置 autoUpdater 为 current;Windows installer 必须走 Forge Squirrel。npm run typecheck。这是发布硬门禁,必须在收尾和任何 commit / tag / push 确认前明确执行并记录结果;不能用 npm run typecheck:electron、npm run lint、局部单测、Rust 测试或 verify:app-version 替代。若用户明确要求“马上递交”或“立即递交”,可以把 typecheck 降级为非阻断项,直接进入发布收口,但最终汇报必须明确注明 typecheck 未执行或未通过。npm run lint、裸 npm test 或全量 cargo test --manifest-path "lime-rs/Cargo.toml"。这些命令在当前仓库经常耗时长、续跑差或被大写集噪音阻断;只有用户明确要求“完整矩阵 / 全量门禁 / CI 同款验证”,或当前改动风险确实需要时才执行,并优先使用下方的定向 / 续跑入口。npm run verify:gui-smoke,跑不了要说明环境限制。git commit / git tag / git push 仍必须按危险操作格式请求一次明确确认;拿到确认后必须继续执行到底,并做 tag / 远端状态复核,不能把“是否提交 / 是否打 tag / 是否推送”留给用户自己处理。vX.Y.Z 或 X.Y.Z 时,规范化为 X.Y.Z 与 tag vX.Y.Z。node scripts/app-version.mjs,默认建议 patch bump;不能擅自发版。git status --shortgit log --oneline --decorate --max-count=20git tag --list "vX.Y.Z"rg -n '旧版本|目标版本' 覆盖 package.json、存在的 npm/pnpm lockfile、packages/lime-cli-npm/package.json、forge.config.mjs、App Server manifest、lime-rs/Cargo.toml、lime-rs/Cargo.lock、RELEASE_NOTES*.md发版前必须先回答“这次发布到底包含哪些改动”。不要把 dirty worktree 当成噪音,也不要默认只提交版本文件。
git status --short、git diff --stat、git diff --name-only 和 git ls-files --others --exclude-standard 盘点当前未提交 / 未跟踪文件。release metadata:版本号、release notes、manifest、lockfile 版本行。candidate changes:本次要发布的代码、文档、测试、schema、生成物、脚本。excluded changes:明确不进入本次发布的本地实验、临时文件、个人环境改动。git add 应覆盖 tracked 和 untracked candidate files,例如 git add -A 或显式文件清单;提交前用 git diff --cached --stat 复核 staged 内容。必须同步这些事实源;仓库不存在或不包含显式版本的文件不要强行创建或改写:
package.jsonpackages/lime-cli-npm/package.jsonforge.config.mjs(仅当存在显式版本;当前通常从 package.json 读取)lime-rs/Cargo.tomllime-rs/Cargo.lock更新方式优先使用结构化解析;锁文件和 Cargo lock 的 workspace 版本可做机械替换,但替换前后要用 rg 复核旧版本残留。
改完立即执行:
npm run verify:app-version
事实源是根目录:
RELEASE_NOTES.md:中文 primaryRELEASE_NOTES.en.md:英文 companionRELEASE_NOTES*.md,只保留目标版本内容;不得把旧版本历史继续追加或保留在文件里。历史版本只从 git history / tag / GitHub Release 查。生成内容时同时参考:
git log <last-tag>..HEAD --pretty=format:"%s (%h)" --no-mergesgit diff --stat、git diff --name-only、关键文件 diff、未跟踪文件清单整文件格式保持:
## Lime vX.Y.Z
### 新功能
### 修复
### 优化与重构
### 测试与质量
### 文档
### 其他
**完整变更**: `vA.B.C` -> `vX.Y.Z`
英文 companion 使用对应英文标题,保留 “Simplified Chinese release notes are the primary version” 说明。不要把内部 commit message 逐条照搬成 release note;要合并成面向发布的可读条目。写完后用 sed -n '1,120p' RELEASE_NOTES*.md 或等价方式确认文件内没有旧版本标题。
RELEASE_NOTES*.md 并移除旧版本 release note 历史是发版默认行为,不需要额外确认;删除文件、删除本地/远端 tag、移除 release asset 必须确认。git status --short 与 git diff -- <path> 确认目标不是用户未说明的新改动。默认发版验证按“稳定必要门禁优先,重型矩阵按需扩展”执行。版本改动后必须先跑:
npm run verify:app-version
npm run typecheck
然后按改动风险补充:
npm run test:contracts # 协议 / Bridge / command catalog / mock / governance 变更
npm run verify:gui-smoke # GUI 壳、Workspace、主路径或正式发布尽量执行;跑不了要说明环境限制
不要把下面这些命令作为默认发版阻断项:
npm run lintnpm testcargo test --manifest-path "lime-rs/Cargo.toml"cargo clippy --manifest-path "lime-rs/Cargo.toml"只有用户明确要求“完整矩阵 / 全量门禁 / CI 同款验证”,或当前改动直接需要它们时才执行。需要验证时优先使用更稳定的定向入口:
npx eslint "<changed-path>" --max-warnings 0
npm run test:related -- <files>
npm run test:changed -- <ref>
npm run test:resume
npm run test:rust:changed
npm run test:rust:related -- <paths...>
npm run test:rust:unit -- -p <crate> <filter>
cargo test --manifest-path "lime-rs/Cargo.toml" -p <crate> <filter>
前端全量 Vitest 通过 scripts/run-vitest-smart.mjs 分批执行并写入 .lime/test/vitest-smart-last-run.json。如果 npm test 已经失败或被用户中断,继续发版验证时默认先执行 npm run test:resume,也可以用 npm test -- --from-batch <N>、npm test -- --only-batch <N> 精确补批次。只有测试收集规则、批次大小、依赖图或目标分支已经改变,才从头执行裸 npm test,并在汇报中说明原因。
如果只做 release note 或文档更新,可按 internal/aiprompts/quality-workflow.md 降级;正式发版默认仍保留 npm run typecheck,但用户明确要求“马上递交”或“立即递交”时可跳过该项,最终汇报必须说明门禁降级理由。
完整发版默认必须包含 commit / tag / push。不要在验证通过后只汇报“可以提交了”就结束;应主动给出危险操作确认请求。只有用户明确说“只准备、不提交 / 不打 tag / 不推送”时,才允许停在准备态,并在最终汇报中标明不是完整发布。
拿到 git 写操作确认后,必须把 git add、git commit、git tag、git push origin main、git push origin <tag> 与远端 tag 复核连续执行到底;不能在 commit 后停下让用户自己打 tag,也不能在 tag 后停下让用户自己 push。若中间失败,先修复或明确阻塞,不要把剩余步骤转交给用户。
执行任何 git 写操作前,先汇总:
release metadata 与 candidate changesgit diff --cached --stat 的 staged 摘要npm run typecheck 默认必须已通过;若用户明确要求“马上递交”或“立即递交”,可在未执行或未通过时继续请求 commit / tag / push 确认,但必须在汇报中明确说明这一降级然后按危险操作格式请求确认。确认后再执行:
git add <release-candidate-files>
git commit -m "Release vX.Y.Z"
git tag vX.Y.Z
git push origin main
git push origin vX.Y.Z
确认后不要只执行其中一部分。不要依赖 git push origin main --follow-tags 作为唯一 tag 推送方式:轻量 tag 不会被 --follow-tags 推送,容易造成 main 已发布但远端 release tag 缺失。若 main 已推送但 git ls-remote --tags origin "refs/tags/vX.Y.Z" 为空,必须继续执行 git push origin vX.Y.Z 并再次复核。若 git add、git commit、git tag 或任一 git push 失败,必须修复或明确说明阻塞点;成功后立即复核:
git status --short
git log --oneline --decorate --max-count=3
git tag --list "vX.Y.Z"
git ls-remote --tags origin "refs/tags/vX.Y.Z"
如果 tag 已存在或已推送,不要覆盖;先说明本地与远端 tag 状态,并单独确认删除或重建策略。重打已推送 tag 时,必须明确说明会改写远端发布引用,并优先建议补丁版,除非用户明确要求保留同一版本号。
最终汇报必须包含: