用途
Design Ship 面向这样的场景:你手上有一个 Claude Design 的交接 URL(或本地交接文件),希望直接在当前分支上打开一个 PR,而不需要中间的手动步骤、手动生成测试或手动起草 PR 描述。
如果只需要导入、不需要测试和 PR,应改用 design-import。
主要能力
它把多个技能组合成一条流水线:
- design-import:搭建组件、写入来源信息、协调 token,组件可能被写入或复用。
- cover:为每个新组件生成 Storybook 故事;如果注册了新路由/视图,则生成 Playwright E2E;对包含非平凡逻辑的组件生成单元测试(纯展示型组件跳过)。
- expect:做差异感知的浏览器验证,并保存截图供 PR 正文使用。
- create-pr:打开 PR,正文包含 Claude Design URL 链接、前后对比截图、组件搭建清单、覆盖率变化,并打上 claude-design 标签。
- 更新来源信息:把打开的 PR 编号和 URL 写回
.claude/design-handoffs/<id>.json。
使用方式
命令形式:
design-ship https://claude.ai/design/abc123 # 从交接 URL
design-ship /tmp/handoff-bundle.json # 从本地文件
预检
流水线开始前会检查工作区是否足够干净:
- 若
git status --porcelain有未提交改动,会询问如何处理:先提交、暂存并在 PR 打开后恢复、包含进本次 PR(有风险,仅当改动相关时)、或取消。 - 若当前分支是 main、master 或 dev,会询问是否创建特性分支(推荐
feat/design-ship-<bundle-id>),或取消并自行切换分支。
各阶段
阶段 1 — 导入:把 bundle 参数委托给 design-import,捕获其输出(导入清单),其中包含 bundle_id、写入的组件列表和来源文件路径。如果导入失败则停止,不会针对部分导入的组件继续生成测试。
阶段 2 — 覆盖:把 cover 限定在阶段 1 写入的组件上运行,通过 ork:test-generator 子代理执行。要求:每个组件必须有 Storybook 故事;若注册了新路由则生成 Playwright E2E(检查 src/app 或 src/pages);若组件包含非平凡逻辑则生成单元测试。
阶段 3 — 验证:通过 ork:expect-agent 子代理运行 expect,对当前 diff 做差异感知验证,并为每个新组件捕获前后截图,保存到 .claude/design-handoffs/{bundle_id}/screenshots/。验证失败不会阻塞,只报告发现并继续,失败会在 PR 评审中暴露。
阶段 4 — 创建 PR:使用 create-pr,正文由 bundle 和验证结果模板化生成,包含摘要、组件表(决策/组件/路径)、token 变化(新增/修改/已解决冲突数量)、验证摘要、覆盖率变化和截图表。通过 gh pr create 打开,并打上 claude-design 标签。
阶段 5 — 更新来源信息:读取来源文件,写入 pr 字段(编号、URL、打开时间),再写回。
失败模式
- 预检:工作区脏或在 main 上 → 询问用户,不静默继续。
- 阶段 1 导入:schema 偏差、token 冲突 → design-import 本身会提示;用户取消则中止。
- 阶段 2 覆盖:测试生成失败 → 继续到 expect,测试可在 PR 评审中补救。
- 阶段 3 验证:浏览器验证失败 → 继续到 PR,失败记录在 PR 正文中。
- 阶段 4 创建 PR:gh 未认证 → 停止并暴露认证错误。
- 阶段 5 来源信息:文件不可写 → 警告但不失败(PR 已打开)。
适用场景
- 有 Claude Design 交接 URL 或文件,想直接得到可评审 PR。
- 希望自动生成 Storybook 故事、Playwright E2E 和浏览器验证截图。
- 希望 PR 正文自动包含组件清单、token 变化和覆盖率变化。
限制
- 不自动合并:本技能只打开 PR,由人工评审和合并。
- 无迭代循环:如果 PR 评审暴露出设计变更,目前需要从 Claude Design 重新导出并重新运行 design-ship。反向路径(实时 UI 漂移 → 为 claude.ai/design 生成精炼提示)在 M124 — Claude Design Drift Sync (Bet B) 中跟踪:#1391(PR hook)、#1393(design-iterate)、#1395(design-drift-detector agent)。
- 单 bundle 范围:一次调用、一个 bundle、一个 PR,不支持多 bundle 批量。
不属于本技能职责的部分
- 解析 bundle:由 claude-design-orchestrator 代理负责(由 design-import 调用)。
- 组件去重:由 orchestrator 代理负责(由 design-import 调用)。
- 测试执行(CI):由 GitHub Actions 负责,本技能只生成测试。
- 合并 PR:由人工评审者负责,绝不自动合并。