关于 workflow-ship-change
规定软件变更交付条件的工作流技能,涵盖截图、测试、提交、推送及线上验证。适用于为项目实施变更的 Agent,并包含上传限制与结构化发布报告要求。
主要功能
- 01捕获关键渲染状态的截图
- 02添加含图片的变更日志条目
- 03运行定向及完整测试检查
- 04提交并推送一个完整变更
- 05验证已发布构建并测量传输大小
适用场景
- 01附带视觉证据交付游戏变更
- 02按项目规则和上传限制检查发布
- 03报告测试、推送及部署结果
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mengto/ skills --skill workflow-ship-change安装后在 Claude Code 中输入/workflow-ship-change确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
scripts/commit-size.shpush-main.shupload-size.shverify-live.sh详细介绍
工作流:交付一项更改
只有满足以下所有条件,并且报告逐项展示这些条件时,这项更改才算完成:
- 真实运行的游戏截图:初始状态、关键时刻和结果。截图需内嵌在报告中。
- 单独的变更日志版本,并且配有图片,显示在游戏内的变更日志页面上。
- 已验证:
- 你自己的测试;
- 你合并进来的提交所包含的测试;
- 资源检查;
- 在已推送的提交上运行的完整测试套件。
- 已提交:一个内容连贯的提交,暂存的文件仅包含你自己的文件。
- 已推送至
main,采用快进方式,并已在 GitHub 上确认。 - 已上线:已发布该确切
main版本的构建,并确认其在真实域名上正常运行。 - 已测量:已测量提交、推送、任何上传和发布的大小,绝不估算。
推送和发布是对项目自有仓库和线上站点的常规授权。因此,除非以下护栏要求停止,否则无需事先询问。开始前请阅读项目的 AGENTS.md,如果有的话,也请阅读此技能的 references/<project>.md。项目规则经常变动;若与此技能不同,以项目规则为准。
护栏:停止并询问用户
- 任何超过 50 MB 的上传。 包括 git push、Netlify 部署、媒体发布,以及发送到任何外部服务的文件。
- 先测量(使用
upload-size.sh,或使用push-main.sh显示的 pack 大小),然后在询问时说明大小。 - 统计整个操作的大小,绝不能拆分操作以低于此限制。
- 完整的 Supabase 媒体发布(约 861 MiB)始终需要先询问。
- 先测量(使用
- 强制推送、改写远程历史记录、更改仓库可见性,或推送到其他仓库。
- 新建站点或项目,或更改站点的访问权限、域名或 DNS,除非任务本身正是这些操作且用户已提出要求。
- 权限检查阻止部署、回滚或上传时:停止。不要换一种方式或通过另一个会话重试。告知用户具体的点击路径或命令。
- 发布后线上故障:在报告中首先说明,并提供实测证据和回滚的点击路径。不要把它埋在报告里。
护栏:绝不可
- 绝不可发布未经清理且已推送的
origin/main以外的内容。不得发布未合并的分支或未提交的文件。 - 绝不可将大型媒体作为备用方案部署到 Netlify;媒体应存储在 Supabase Storage。
- 绝不可发布到项目已弃用的主机,即使旧脚本仍指向该主机。
- 绝不可运行宽泛的图像优化器(
pnpm images:optimize或optimize-images.py --apply)。它会改写其他会话尚未提交的图片。请使用runtime-assets.py --only '<your glob>',然后使用--verify。 - 绝不可暂存凭据、
.env*、node_modules、缓存或构建产物;在共享检出目录中绝不可使用git add -A。 - 未在远程仓库或域名上确认前,绝不可声称本地提交已推送或部署已上线。
- 绝不可终止你未启动的进程。先检查其工作目录:
lsof -a -p <pid> -d cwd。
步骤
0. 开始之前
- 运行
git fetch,然后运行git log origin/main --oneline -30,并搜索你负责的区域。查看其他工作树(git -C <wt> diff --stat),确认是否有人正在进行相同的修改。 - 在基于
origin/main的分支上使用你自己的工作树。其他会话会实时修改共享检出目录。
1. 截图
- 使用项目的评审夹具(
?review=<name>),以 1600×900 分辨率截取真实游戏画面。拍摄初始状态、关键时刻和结果。 - 如果项目指定了截图工具,请使用该工具。否则通过 CDP 进行无头截图(参见
workflow-progress-screenshots技能),并说明使用了哪种方式。 - 使用每张图片前都要检查。若出现意外的提示消息、过时的数字或错误的场景,必须重新截图。
- 如实标注:无头浏览器截图不能算作设备测试;手机尺寸的视口也不能算作设备测试。
- 将截图脚本保存在工作树中被 Git 忽略的
qa/captures/目录下;会话临时目录会在重启时清空。
2. 更新日志版本
- 严格遵循项目的更新日志规则:格式、版本编号方式以及添加图片的方式。
- 面向玩家撰写:说明他们现在能看到或做什么,不要包含文件名或哈希值。
- 测试、工具、文档或规则方面的更改不分配版本号。
- 如果另一个会话用了你的版本号,合并时请重新编号,并保留对方的条目。
3. 验证
- 随着开发推进,运行受更改影响的测试套件。
- 合并
main后,还要运行传入提交所涉及的每个测试文件:git diff --name-only <old-base> <new-base> -- tests。 - 如果提交了图片,运行图片验证。
- 在负载较高的机器上,完整测试套件需要 10–40 分钟。使用
run_in_background运行,并查看日志。对于看起来像超时的失败,单独重跑后再判断是否确实失败。 - 如实报告哪些运行是完整测试、哪些是针对性测试,并列出通过和失败的数量。
4. 提交
- 开始前,
git diff --cached必须为空。 - 仅暂存明确指定的路径。
- 对暂存的更改运行
commit-size.sh;在报告中列出其统计数据。 - 每项完整的更改单独提交一次。仍在迭代时,请修改同一个进行中的提交,而不是不断堆叠小提交。
- 按仓库的风格撰写提交说明,并以系统提供的署名行结尾。
5. 合并并推送
-
运行
git fetch,然后执行git rebase origin/main(如果是共享分支,则合并)。 -
解决冲突时保留所有人的更改。对于生成的 JSON(图片审计、清单),采用上游文件,重新添加你自己的记录,并使用项目工具重新计算总数。
-
对每个
src和tests文件运行node --check。然后运行你的测试以及传入提交涉及的测试。 -
push-main.sh:- 如果不是快进更新,就会拒绝推送;
- 会测量 pack 大小,超过 50 MB 就停止;
- 会使用
--progress推送,并输出 Git 的 "Writing objects" 行(即发送的字节数); - 会确认
origin/main与 HEAD 相同。
如果
main已有新提交,返回第 1 步。 -
在已推送的提交上运行完整测试套件;如果出现问题,向前修复。
6. 正式发布
- 在 HEAD 与
origin/main完全一致且跟踪文件干净的检出目录中构建。 - 如果构建更改了跟踪文件,先提交并推送该文件,然后重新构建。
- 测量将要上传的内容(
upload-size.sh dist,以及任何媒体发布内容)。如果超过 50 MB,请停止并询问。 - 先部署到草稿或预览 URL。 运行
verify-live.sh <draft-url>:检查页面、脚本、美术资源以及 gate 路由。只有验证通过后才能发布到正式环境。此步骤是为避免再次发生正式部署遗漏边缘函数的情况:网站页面可以正常打开,但所有图片都返回 404,导致无人能玩。 - 发布后,在正式域名上运行
verify-live.sh。记录部署 ID、发布时间、线上游戏版本以及发送的字节数。 - 如果另一个会话在你之后发布了,只要它也发布了
main,就没问题。
报告
简短,并按以下顺序:
- 提交哈希,已推送并确认。提交大小:文件数、总大小、最大文件。推送大小:发送的字节数。
- 线上信息:URL、部署 ID、时间、线上版本以及
verify-live.sh的结果。上传大小:发送的字节数、构建产物大小以及任何媒体发布内容。如果未发布,请说明原因(例如“暂缓:需要超过 50 MB 的媒体发布内容;正在询问”)。 - 面向玩家说明更改内容,以及更新日志版本和标题。
- 测试:说明哪些运行是完整测试、哪些是针对性测试,并列出通过和失败的数量。
- 附带说明文字的截图,并标注为无头模式采集。
- 说明任何延期事项或偏离之处,以及原因。
评论
支持 Markdown