forge-ship
发布上线:PR only(建 PR 即停)或 Full ship(合并 PR + 同步本地基础分支);测试失败不发布、不 force push,状态汇报严格区分提交/推送/合并/部署。 触发方式:用户说"ship"、"发布"、"合并上线"、"发 PR"。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
发布上线:PR only(建 PR 即停)或 Full ship(合并 PR + 同步本地基础分支);测试失败不发布、不 force push,状态汇报严格区分提交/推送/合并/部署。 触发方式:用户说"ship"、"发布"、"合并上线"、"发 PR"。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Forge 工作流总入口。只读检测项目状态,推荐下一步该用哪个 skill,自己不干活。触发方式:用户说"forge"、"下一步"、"接下来做什么"。
复盘 v3(Workbench 门禁型):启动本地 Workbench,用户在独立会话页确认想学的知识点和深度,按选择调研产出复盘文档; 同时落 2-3 条账本条目(记录/复盘/learnings.jsonl)供 bugfix/eng 开工回放与复发检测。 触发方式:用户说"总结知识"、"学习总结"、"复盘"、"可视化复盘"、"/forge-fupan"。
通用头脑风暴:4 种模式(产品/内容/构建/探索)× 6 阶段,强制前提挑战和 2-3 方案,产出可跨会话续聊的思考文档;支持 Mermaid/图辅助判断。 触发方式:用户说"头脑风暴"、"brainstorm"、"讨论一下"、"我有个想法"、"帮我想想"、"画图梳理想法"。
设计实现:把 DESIGN.md 转成代码,只改样式不改逻辑;CSS 优先、Token 驱动、反 AI 模板、原子提交,以真实截图和 CSS 断言验证。 触发方式:用户说"实现设计"、"forge-design-impl"、设计文档确认后需要写代码时。
全栈设计规划:分级门控管理 DESIGN.md 与 DESIGN-CHANGELOG,内置可检索设计规则库(UX 规则/配色/字体),三层 Token、Image 2 视觉稿门禁、反 AI 模板检测。 触发方式:用户说"设计"、"forge-design"、"先看效果图",或 forge-dev 调度、需要创建/更新设计文档时。
文档落地治理规范。统一管理 docs/ 目录下文档的写时约束、读时索引、生命周期标记。提供当前真相源白名单(doc-paths.md)+ frontmatter schema + 新项目一键脚手架(init-project.sh,已就绪)。所有 forge-* skill 的文档落地路径以本 skill 的 doc-paths.md 为准。触发方式:用户说"文档治理"、"文档放哪"、"docs 目录乱了"、"forge-doc-policy"、AI 准备创建任意 .md 或新目录前的自查。
| name | forge-ship |
| description | 发布上线:PR only(建 PR 即停)或 Full ship(合并 PR + 同步本地基础分支);测试失败不发布、不 force push,状态汇报严格区分提交/推送/合并/部署。 触发方式:用户说"ship"、"发布"、"合并上线"、"发 PR"。 |
| allowed-tools | ["Bash","Read","Write","Edit","Grep","Glob","AskUserQuestion"] |
文档落地路径:遵循 forge-doc-policy 规范。完整白名单 + frontmatter schema 见
~/.claude/skills/forge-doc-policy/doc-paths.md。 当前文档加载顺序:涉及文档更新时,先读项目CLAUDE.md、docs/README.md、docs/INDEX.md和相关根级当前真相源;archive/raw只作历史证据。 详细规则见~/.claude/skills/_shared/current-doc-loading.md。
ship 不是“创建 PR 就结束”。它有两个模式:
origin/<基础分支>。当用户明确说“ship / 发布 / 合并 / 通过 PR / 更新远程和本地 main”时,默认使用 Full ship。当用户只说“创建 PR / 提交 PR / 先发 PR”时,使用 PR only。
永远区分这些状态:代码已提交、分支已推送、PR 已创建、PR 已合并、远程 main 已更新、本地 main 已同步、ECS 已部署。除非真的执行部署并验证运行态,否则不要说线上已更新。
每次先运行:
_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
echo "当前分支: $_BRANCH"
git status --short
git remote -v
如果当前分支就是基础分支(通常是 main),不要直接 ship。先询问用户是要:
提问格式与批量策略见 ~/.claude/skills/_shared/interaction-protocol.md。
先根据用户措辞判断模式(PR only / Full ship),不确定时询问。
确定基础分支:
gh pr view --json baseRefName -q .baseRefName 2>/dev/null # 1. 已有 PR 则读 PR base
gh repo view --json defaultBranchRef -q .defaultBranchRef.name 2>/dev/null # 2. 否则读仓库默认分支;都失败回退 main
记录:当前分支、基础分支、ship 模式、当前 HEAD、origin/<基础分支> HEAD。
账本"权限.生产操作点名授权清单"复发 5 次后的固化(2026-07-17)。
开工前枚举本轮全部仓库外写面。判断标准:动作对象不在本仓库工作区内,就是写面。常见:
把清单一次性列给用户请求点名授权,不要逐次撞权限门。同时给出用户可预置进 .claude/settings.local.json 的 allow 规则(如 Bash(ssh root@HOST *)、Bash(./scripts/deploy.sh*)),并说明:AI 代改 settings 会被反自授权设计拦截,这几条只能用户亲手加。
本轮没有仓库外写面就记录"无写面"跳过。中途被拦时按账本"被拦即换路勿重试"处理,禁止原样重试同一命令。
检查当前 worktree:
git status --short --branch
git fetch origin <基础分支> --quiet
git diff origin/<基础分支> --stat
git log origin/<基础分支>..HEAD --oneline
如果有未提交更改,询问:
不要自动加入无关文件。特别注意构建产物和缓存文件(如 tsbuildinfo、__pycache__)。
如果是 Full ship,提前定位本地基础分支 worktree(定位命令见 references/merge-and-sync.md 第11步),但此时不要修改它。找不到就记录“未找到”,不要自动创建,除非用户明确要求。
git fetch origin <基础分支> --quiet
git merge origin/<基础分支> --no-edit
如果项目约定使用 rebase,需先确认,不要擅自 rebase 已共享分支。
如果有冲突:
不要使用 npm test || yarn test || ... || echo "未找到测试命令" 这种链式命令,它会吞掉真实失败。
优先运行项目 CLAUDE.md 或项目验证脚本中已记录的测试命令;没有记录时按项目类型探测(npm test / pytest / go test 等),优先运行与本次改动相关的测试。
如果测试失败:
如果没有可用测试,询问:
git diff origin/<基础分支> --stat
git diff origin/<基础分支>
检查:
console.log、debugger、临时 printTODO: 上线前删除发现问题先修复或询问,不要带病 push。
如果仓库存在 CHANGELOG.md,且本次变更值得未来追溯,则更新。CHANGELOG 只记录发布事实和历史账本;不要把它当作 PRD/DESIGN/ENGINEERING 的当前事实源。
git log origin/<基础分支>..HEAD --oneline --no-merges
如果只是纯机械变更,或用户明确不需要文档,允许跳过,但发布总结要写明“CHANGELOG 未更新”。
如果存在 VERSION 文件,询问是否升级版本:
git add <本次相关文件>
git status --short # 确认无关文件未暂存
git commit -m "<type>: <summary>"
如果已经有提交且只有 CHANGELOG/VERSION 变更,可单独提交一条 chore: update changelog。提交后记录 commit SHA。
git push -u origin <当前分支>
如果推送被拒绝,不要直接 git pull --rebase。先查看远端差异:
git fetch origin <当前分支> --quiet
git log --left-right --graph --oneline HEAD...origin/<当前分支>
询问:
不要 force push,除非用户明确要求且确认影响范围。
先检查是否已有 PR:
gh pr view --json number,url,state,baseRefName,headRefName 2>/dev/null
如果没有 PR,创建:
gh pr create --title "<PR标题>" --body "<PR描述>" --base <基础分支> --head <当前分支>
PR 描述必须包含:
PR 创建后记录 PR URL。
如果模式是 PR only,到这里停止,并输出当前状态。
目的:Full ship 合并前确认 PR 状态可合并(OPEN、非 draft、无冲突、checks 通过、review 满足)。
红线:
statusCheckRollup 为空时只能说“无远程 checks”,不能说“CI 已通过”。执行细节必读 references/merge-and-sync.md。
目的:按仓库约定的 merge 方式合并 PR,更新远程基础分支并记录新 SHA。
红线:
执行细节必读 references/merge-and-sync.md。
目的:把本地基础分支 worktree 快进到 origin/<基础分支>。
红线:
origin/<基础分支> 同步,不要用功能分支直接覆盖本地 main。git reset --hard、git checkout --、静默覆盖用户未提交文件;脏工作区或分叉时停止询问。origin/<基础分支> 一致后,才能说“本地基础分支已同步”。执行细节必读 references/merge-and-sync.md。
总结必须拆状态:
+====================================================+
| Ship Summary |
+====================================================+
| 模式:PR only / Full ship |
| 功能分支:<branch> |
| 基础分支:<base> |
| 提交:<commit sha> |
| PR:<url> |
| PR 状态:已创建 / 已合并 / 未合并 |
| 远程基础分支:<origin/base sha> |
| 本地基础分支 worktree:<路径 / 未找到> |
| 本地基础分支状态:已同步 / 未同步 / 因脏工作区暂停 |
| 测试:通过 / 跳过 / 失败 |
| CHANGELOG:已更新 / 未更新 |
| 部署:未执行 / 已执行并验证 |
+====================================================+
如果没有执行 ECS 部署,必须写:
ECS/线上部署未执行。本次 ship 只表示代码进入远程基础分支,并同步了本地基础分支。
forge-ship 默认用于 review 后的发布,不替代完整 code review。