deployment-designer
暂无简介
- License 许可
- Apache-2.0
- 最近更新
- 2026-10-18
- Stars
- ★ 581
- Forks
- 9
03 SKILL.md 正文
Skill: Deployment Designer
在代码实现前输出完整部署方案:部署拓扑、环境配置、发布命令、数据迁移、回滚策略和部署后冒烟测试方案。该 Skill 是 Phase 3 Step 3 的执行入口。
触发条件
- 用户要求设计部署方案、发布方案或上线方案
- 用户提到 “Phase 3 Step 3”、“部署方案”、“deployment plan”
- API / DB 设计完成后,需要进入部署方案设计
- Initial 阶段准备进入测试设计前,
3-technical-plan/3-deployment/仍为空
前置依赖
logos/resources/prd/3-technical-plan/1-architecture/中存在架构概要logos/resources/prd/3-technical-plan/2-scenario-implementation/中存在场景实现文档- API / DB 设计已完成,或对应模块在
skip_phases中明确跳过 logos/logos-project.yaml可读
核心能力
- 从架构、API、DB 和技术栈中推导部署目标
- 设计本地 / 测试 / 预发 / 生产环境部署拓扑
- 明确环境变量、密钥来源、构建命令和发布命令
- 定义数据迁移、初始化数据和回滚策略
- 设计部署后检查清单
- 设计 smoke 测试方案输入,供
test-writer生成SMOKE-*用例 - 更新
logos-project.yaml的部署门禁信息
执行步骤
Step 1: 读取上下文
必须读取:
logos/logos-project.yaml- 架构概要文档
- 场景实现文档
- API 规格(如存在)
- DB DDL(如存在)
- 现有部署方案(如存在)
重点确认:
- 项目是否需要部署
- 目标环境有哪些
- 是否存在远程服务、生产环境、密钥、域名、证书或数据迁移
- smoke 需要覆盖哪些最小链路
Step 2: 判断部署门禁
默认规则:
- 软件项目默认需要部署方案
- 有运行环境的项目默认需要部署执行和 smoke
- 纯文档、纯规范、无需运行环境的库项目可声明
deployment_required: false
若用户选择无需部署,部署方案仍需写明原因和跳过条件。
Step 3: 输出部署方案
默认文件:
logos/resources/prd/3-technical-plan/3-deployment/core-01-deployment-plan.md
⚠️ Mermaid 部署拓扑图语法安全(强制):
- 部署拓扑通常使用 Mermaid
graph/flowchart,节点标签默认写成ID["标签文本"]。 - 含域名、URL、API 路径、端口、环境名、云服务名、中文、空格或
<br/>的标签必须加双引号:Pages["Cloudflare Pages"]、API["API :8787"]、Proxy["/voice/api 代理"]。 - 错误:
Proxy[/voice/api 代理],因为[/会触发 Mermaid 平行四边形形状语法,容易导致部署图渲染失败。 - 多行标签使用
<br/>,整段文本仍放在同一对双引号内:Worker["Cloudflare Worker<br/>staging"]。 - 子图名称含空格、中文或特殊字符时必须加引号:
subgraph "Staging Environment"。 - 只有明确要表达特定形状时才使用 Mermaid 形状语法;普通部署组件一律使用带引号的文本节点。
文档结构:
# core-01-deployment-plan
## 一、部署目标
## 二、部署拓扑
## 三、环境变量与密钥
## 四、构建与发布命令
## 五、数据迁移策略
## 六、回滚策略
## 七、部署后检查清单
## 八、冒烟测试方案
## 九、门禁结论
Step 4: 设计 smoke 输入
在部署方案的“冒烟测试方案”中列出必须覆盖的 smoke 检查项:
- 健康检查
- 核心入口
- 数据库迁移
- 静态资源
- 配置与密钥
- 关键链路
- 日志与监控
具体 SMOKE-* 用例由 test-writer 输出到 logos/resources/test/smoke/。
Step 5: 更新 logos-project.yaml
如模块需要部署,建议写入:
deployment_gates:
core:
deployment_required: true
smoke_required: true
environments:
- staging
并将部署方案加入 resource_index。
Step 5.1: 产出环境登记表 logos/environments.yaml(environment-registry)
部署方案涉及具体环境(测试、预发、生产等)时,按方案「一、部署目标」「三、环境变量与密钥」「四、构建与发布命令」产出或更新 logos/environments.yaml(格式权威:spec/environments.md §2、§11.2),并为可由 OpenLogos 执行部署的环境写出 deploy 条目与部署脚本(来源变更 environment-deploy):
schema_version: 1
environments:
- id: staging
name: 预发环境
tier: staging
aliases: [预发]
health: https://staging.example.com/healthz
version: https://staging.example.com/version
secrets: [STAGING_DEPLOY_TOKEN]
deploy:
mode: script
script: deploy/staging.sh
args: ["{env}", "{ref}"]
timeout_sec: 1800
- id: prod
name: 生产环境
tier: prod
aliases: [生产]
deploy:
mode: ci
provider: github-actions
workflow: deploy.yml
inputs: { environment: "{env}" }
规则:
id用小写字母、数字与连字符;tier取dev | test | staging | prod;id 与 alias 不区分大小写全局唯一。secrets只写环境变量名,不得写值;方案中出现的真实密钥一律不进登记表。deployment_gates.<module>.environments中的每一项必须能按 id 或别名解析到登记表中的环境。- 只登记部署方案确实涉及的环境,不臆造;部署方案没有环境划分时不产出登记表(登记表是 opt-in)。
- 登记表属于
guard.exempt内置默认,修改不需立案;但只要任一环境配置了promote_from或require_approval,它就成为门禁策略来源,AI 对它的修改须经宿主弹窗由用户批准,无人值守模式下被阻断(来源变更 environment-promotion-approval,决策 C11)。
选择执行方式:
- 仓库已有可用的 GitHub Actions 部署工作流 → 优先
mode: ci、provider: github-actions;GitLab 等其他 CI →mode: ci、provider: script,编写仓库内的trigger_script与status_script(JSON 协议见spec/environments.md§11.3)。 - 没有流水线、部署步骤可脚本化 →
mode: script,编写部署脚本。 - 部署步骤暂时无法脚本化(需要人工或 AI 判断的操作) →
mode: agent,plan_section写部署方案中对应章节标题;后续应尽量改为 script 或 ci。
登记表不承载可执行命令(决策 D13):deploy 只写脚本路径、工作流名、参数、超时等配置,不得写 run、command、shell 等命令字段——登记表免立案可改,命令写在这里会让部署行为绕过 guard。改变部署行为必须改受保护的脚本或工作流。
部署脚本编写要求(script 方式):
- 放在仓库内被 git 跟踪的路径(默认
deploy/<env>.sh),提交可执行位;CLI 以参数数组直接执行、不经 shell,参数用args的占位符{env}、{ref}、{ref_short}、{deploy_id}传入。 - 脚本在目标版本的隔离工作树中运行(
workdir: worktree默认):工作树里没有node_modules、构建产物等未跟踪文件,脚本必须自行安装依赖与构建,不得依赖当前工作区状态。 - 失败时以非零退出码退出;不打印密钥值(CLI 只能遮盖已声明的密钥);幂等,可重复执行。
- 可读取
OPENLOGOS_DEPLOY_ENV、OPENLOGOS_DEPLOY_REF、OPENLOGOS_DEPLOY_ID、OPENLOGOS_DEPLOY_CHANNEL。
CI 工作流要求(ci 方式):工作流部署的必须是自身检出的提交,并以固定名称上传 artifact openlogos-deploy-result,其中 result.json 为 {"deployed_ref": "<40 位 commit>"},值取自部署所用 actions/checkout 步骤的 commit 输出(provider: script 由 status_script 在 completed 时输出 deployed_ref)。没有回报时 OpenLogos 记录部署版本为未知,该次部署不能作为回滚目标、smoke 不能得到已验证事实。
晋级与审批门(可选,来源变更 environment-promotion-approval,见 spec/environments.md §12):
promote_from: <上游环境 id>:部署某个 commit 到该环境前,要求上游环境已对该 commit 以 smoke 验证通过(verified=true)。只填登记表中已有环境的id(不填别名),不得指向自身或成环;只在配置了deploy的环境上合法。require_approval: true:部署前必须有人执行openlogos approve --env <id> --ref <版本>,一次审批只放行该版本的一次成功部署。- 对
tier: prod的环境,在部署方案的「九、门禁结论」中提示用户可选配置这两个字段,并说明其效果(--auto全自动运行遇到它们会停下等人);不自动开启,由用户决定是否写入登记表。门禁一旦写入,之后对登记表的修改须经用户确认,建议在用户确认方案后一次性写好。 - 设计阶段不得执行
openlogos approve或带--force-promote的部署;这两类动作只能由人执行。
提案默认部署环境(可选,来源变更 proposal-default-environment,见 spec/environments.md §13):
- 登记表顶层
proposal_default_env: <环境 id>表示「需要部署的提案未另行指定目标环境时,默认部署到这个环境」。配置后,change-writer 写提案时不再逐案询问目标环境;部署方式、回滚与 smoke 证据仍按已合并部署方案与配置逐项核对,缺项照常询问。它不决定提案是否需要部署,也不构成部署执行或发布授权。 - 值只填登记表中已有环境的
id(不填别名)。所指环境可以配置promote_from/require_approval,部署时照常受门;为让默认环境的提案少问问题,建议在部署方案中为它写明部署步骤、回滚或首次部署失败处置,并配置 smoke 命令。 - 只在用户明确指定时写入:产出或更新登记表时,向用户说明该字段的作用,由用户明确指定一个环境或选择不设;用户未明确指定时不写。已存在的值不得自行修改或删除。该字段不受 guard 保护,修改不需立案——正因如此,是否设置、设为哪个环境必须由用户决定。
自验证(设计阶段,不做真实部署):对每个配置了 deploy 的环境依次运行 openlogos env check 与 openlogos deploy --env <id> --ref <当前提交> --dry-run(只读;配置了门禁的环境 dry-run 会如实报告 DEPLOY_PROMOTION_UNVERIFIED / DEPLOY_APPROVAL_REQUIRED,这是预期结果,记入方案而不是去满足它;校验脚本在目标版本中存在且可执行、参数占位符合法、声明的密钥齐全、gh 可用且已登录),shell 脚本另做 bash -n 语法检查;任一失败先修正再交付。设计阶段不得执行真实部署。
输出规范
- 部署方案:
logos/resources/prd/3-technical-plan/3-deployment/core-01-deployment-plan.md;配置了deploy的环境须在方案中新增「部署脚本审阅摘要」一节:每个脚本或工作流的路径、做什么、动哪些外部资源(服务、数据库、存储、域名)、需要哪些密钥变量名、失败与回滚方式。该节供愿意审阅的人阅读,不写任何确认标记、不阻断流程(来源变更 environment-deploy,决策 C03) - 环境登记表(部署方案涉及具体环境时):
logos/environments.yaml,格式见spec/environments.md - 部署脚本(script 方式):仓库内受保护路径,默认
deploy/<env>.sh;CI 适配脚本(provider: script)同样放在仓库内 - 文档语言遵循项目 locale
- Mermaid 可用于部署拓扑图,且必须遵循上述节点标签与子图命名安全规则
- 不执行任何真实部署命令;只运行只读的
openlogos env check、openlogos deploy --dry-run与脚本语法检查
人类确认点
本 Skill 只设计部署方案,不执行部署。部署执行必须等到:
- 代码实现完成
openlogos verify通过- 用户明确授权部署
推荐提示词
帮我设计部署方案按 Phase 3 Step 3 输出部署方案基于当前架构设计 staging 部署和 smoke 方案
Authority writer cutover 与 projection 重建
部署设计前读取 spec/authority-closure.md 和 Authority Registry,并逐个稳定 fact_id 引用 owner/writer/mutation entry、projection、recovery 与 cutover;不得另建 owner 表或用路径生成事实身份。只要本次改变 owner/writer/mutation entry、projection schema 或 recovery source,部署方案必须包含有限 cutover;不得把长期双写当兼容策略。
强制顺序
- 冻结 authority identity、before facts、当前入口和回滚制品。
- 停止/隔离旧 writer,并证明旧入口不能成功写入。
- 启用唯一新 mutation entry;不可逆写入前明确 rollback boundary。
- 从 authority 重建 projections,以 generation/version/hash/receipt 做 freshness probe。
- 执行 stale/conflict/response-lost/restart/legacy-writer 负向 smoke。
- 记录 exit evidence,结束迁移窗口;失败时恢复冻结版本且不留下混合 writer。
部署完成与 cutover 完成是两个事实,不能由“进程已启动”反推 writer 已唯一。新 authority 已产生不可逆写入后禁止重新开启旧 writer;只能前滚或启用兼容 reader。部署任务与 smoke 仍分别等待用户明确授权。
04 同仓库更多 Skills
ui-ux-pro-max
UI/UX design intelligence. 67 styles, 96 palettes, 57 font pairings, 25 charts, 13 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient. Integrations: shadcn/ui MCP for component search and examples.
test-writer
暂无简介
test-orchestrator
暂无简介
slice-planner
暂无简介
scenario-architect
暂无简介
project-init
暂无简介