[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MXWSAMN9AD3T8F6N099ZGY":3,"skill-same:01M6MXWSAMN9AD3T8F6N099ZGY":57},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":28,"frontMatter":29,"refName":30,"commitSha":31,"skillDirectory":32,"forksCount":33,"repositoryHtmlUrl":34,"repositoryHomepageUrl":6,"ownerHtmlUrl":35,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":36,"install":37,"resources":50},"01M6MXWSAMN9AD3T8F6N099ZGY","test-orchestrator",null,"miniidealab\u002Fopenlogos","miniidealab","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F4251156?v=4","01M6MX6BM454XESZCRPBQQHKRT","FredHuang","01M6MX6BR4417H4QA658D4GW9X",581,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Ftest-orchestrator\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[23,24,25],"test","orchestrator","test orchestrator","2026-11-10 10:12:30",false,"# Skill: Test Orchestrator\n\n> 基于业务场景和时序图设计 **API 编排测试**用例（Phase 3 Step 4b），覆盖正常\u002F异常\u002F边界场景，自动识别外部依赖并应用测试策略，作为端到端 API 验收标准。**仅适用于涉及 API 的项目。**\n\n## 与 test-writer 的关系\n\n本 Skill 负责测试金字塔的**顶层**——API 编排测试（HTTP 请求级别），执行于 Phase 3 Step 4b。\n\n底层的单元测试和场景测试（函数调用级别）由 `test-writer` Skill 在 Step 4a 完成。Step 4a 是所有项目的必选步骤，Step 4b（本 Skill）仅在项目涉及 API 时执行。\n\n## 触发条件\n\n- 用户要求设计 API 编排测试\n- 用户提到 \"Phase 3 Step 4b\"、\"API 编排\"、\"编排测试\"\n- Step 4a（test-writer）完成后，AI 引导用户继续进入 Step 4b\n- 用户需要验收已部署的 API 代码\n\n## 前置依赖\n\n- `logos\u002Fresources\u002Ftest\u002F` 中包含测试用例规格文档（Step 4a 已完成）\n- `logos\u002Fresources\u002Fprd\u002F3-technical-plan\u002F2-scenario-implementation\u002F` 中包含场景时序图\n- `logos\u002Fresources\u002Fapi\u002F` 中包含 API 规格（OpenAPI YAML）\n- `logos-project.yaml` 中包含 `external_dependencies`（如有）\n\n如果项目不涉及 API（纯 CLI 工具、纯前端等），跳过此 Skill。\n\n## 核心能力\n\n1. 从时序图和 API YAML 设计正常流程编排\n2. 基于异常用例（EX-N.M）设计异常流程编排\n3. 设计边界用例（合法但非主路径的变体）\n4. 定义变量提取和传递机制\n5. **识别外部依赖并应用测试策略**：读取 `logos-project.yaml` 的 `external_dependencies`，在涉及外部服务的步骤中自动插入 `mock` 字段\n6. 执行编排并验证结果\n\n## 执行步骤\n\n### Step 1: 读取场景上下文\n\n读取以下文件建立完整上下文：\n\n- 场景时序图（`logos\u002Fresources\u002Fprd\u002F3-technical-plan\u002F2-scenario-implementation\u002F`）\n- API YAML（`logos\u002Fresources\u002Fapi\u002F`）\n- `logos-project.yaml` —— 重点读取 `external_dependencies` 字段\n\n### Step 2: 识别外部依赖\n\n将 `external_dependencies` 中的 `used_in` 与当前场景编号匹配。如果当前场景涉及外部依赖：\n\n- 记录该依赖的 `test_strategy` 和 `test_config`\n- 如果某个依赖声明了 `used_in` 但缺少 `test_strategy`，**主动询问用户**测试策略\n\n如果 `logos-project.yaml` 中没有 `external_dependencies` 字段，但时序图中存在对外部服务的调用（如发送邮件、请求支付等），也应主动提醒用户补充。\n\n### Step 3: 设计正常流程编排\n\n按时序图的 Step 编号，逐步设计 API 调用链：\n\n- 每步包含 method、url、headers、body、expected_status\n- 涉及外部依赖的步骤，插入 `mock` 字段（见输出规范）\n- 上一步响应中需要传递的变量，使用 `extract` 定义提取规则\n\n### Step 4: 设计异常流程编排\n\n为每个 EX 异常用例设计独立的编排，确保：\n\n- 异常场景也能覆盖外部依赖的失败情况\n- 使用 `mock` 字段模拟外部服务异常（如超时、返回错误等）\n\n### Step 5: 设计边界用例编排\n\n识别合法但非主路径的变体（如密码长度刚好在边界值、空字段等），补充编排。\n\n### Step 6: 输出编排 JSON\n\n按场景输出可执行的编排 JSON 文件。\n\n## 输出规范\n\n- 文件格式：JSON\n- 存放位置：`logos\u002Fresources\u002Fscenario\u002F`\n- 按场景分文件：`user-auth.json`、`payment-flow.json`\n- 编排中的每一步对应时序图的 Step 编号\n\n### mock 字段结构\n\n当某一步涉及外部依赖时，在该 step 中添加 `mock` 字段：\n\n```json\n{\n  \"step\": \"Step 2: 获取邮件验证码\",\n  \"mock\": {\n    \"dependency\": \"邮件服务\",\n    \"strategy\": \"test-api\",\n    \"config\": \"GET \u002Fapi\u002Ftest\u002Flatest-email?to={email}\",\n    \"extract\": { \"code\": \"response.body.code\" }\n  },\n  \"method\": \"GET\",\n  \"url\": \"\u002Fapi\u002Ftest\u002Flatest-email?to={{email}}\",\n  \"expected_status\": 200,\n  \"extract\": {\n    \"verification_code\": \"body.code\"\n  }\n}\n```\n\n`mock` 字段说明：\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `dependency` | string | 对应 `external_dependencies` 中的 `name` |\n| `strategy` | string | 测试策略（`test-api` \u002F `fixed-value` \u002F `env-disable` \u002F `mock-callback` \u002F `mock-service`） |\n| `config` | string | 测试策略的具体配置，来自 `test_config` |\n| `extract` | object | 从 mock 响应中提取变量（可选） |\n\n不同策略的编排表现：\n\n- **`test-api`**：该步骤的 url 替换为后门 API 地址\n- **`fixed-value`**：该步骤不发起实际请求，直接在 `extract` 中注入固定值\n- **`env-disable`**：该步骤标记为跳过，附带注释说明前提条件\n- **`mock-callback`**：在前一步完成后插入一个额外的 mock 回调请求\n- **`mock-service`**：该步骤的 url 替换为本地 mock 服务地址\n\n## 实践经验\n\n- **正常编排是骨架**：先完成正常流程编排，确保主路径可以跑通\n- **异常编排是保障**：每个外部调用至少 1 个异常编排\n- **变量传递**：前一步的响应中提取变量（如 token、user_id），传给后续步骤\n- **测试数据**：编排开始前准备测试数据，结束后清理，保证幂等性\n- **并发测试**：关键场景需要考虑并发情况（如：两人同时注册同一邮箱）\n- **外部依赖先查清单**：开始设计编排前先读 `logos-project.yaml` 的 `external_dependencies`，没有声明的外部调用要主动提醒用户补充\n- **mock 策略不要自行决定**：测试策略由 S12 技术架构设计（Phase 3 Step 0, architecture-designer）确定，编排测试阶段只负责消费，不要擅自更改\n- **与 `openlogos verify` 的关系**：API 编排测试也可产出与 `logos\u002Fspec\u002Ftest-results.md` 相同格式的 JSONL 结果。编排测试运行后，结果同样写入 `logos\u002Fresources\u002Fverify\u002Ftest-results.jsonl`，`openlogos verify` 统一读取并判定验收\n\n## 推荐提示词\n\n以下提示词可以直接复制给 AI 使用：\n\n- `帮我设计编排测试`\n- `基于 API 规格帮我生成 S01 的编排测试`\n- `帮我把所有场景的正常路径编排出来`\n- `帮我给 S02 补充异常路径的编排测试`\n\n## S39 delta 模式：API 场景的完整编排闭包\n\n### 适用性\n\non-touch-v1 闭包中 API\u002Finterface 非 SKIP 时，本 Skill 强制适用；API 明确 SKIP 时，编排同样 SKIP，并把同一时序证据写回 proposal 闭包矩阵。不得出现 API 适用但编排测试未规划。\n\n### 输入\n\n- effective scenario sequence（唯一编排起点）；\n- effective OpenAPI\u002F消息协议；\n- effective DB\u002F状态约束；\n- UT\u002FST 验收与环境\u002F鉴权要求。\n\n不得读取旧 API 绕过当前 scenario delta，不采信 seed staging。\n\n### MODIFY\n\n- 编排目标存在时，把新增请求链、断言与既有流程修改聚合进同一 delta；\n- 保留未变更的稳定编排 ID\u002F场景，遵守 S37；\n- 多 API 场景共享目标时 canonical path 去重，不拆基线\u002F增量。\n\n### CREATE\n\n目标缺失时返回完整可执行编排规格，至少包含：\n\n- 真实场景\u002F编排测试 ID；\n- 前置环境、认证、fixture 与初始数据；\n- 按 sequenceDiagram 顺序的请求\u002F消息链；\n- 每步状态码、schema、业务状态与持久化副作用断言；\n- 异常、重试、幂等、权限、并发中适用分支；\n- cleanup\u002F隔离与重复执行幂等；\n- 失败诊断与 OpenLogos reporter 输出到 `test-results.jsonl`；\n- API operationId\u002Fscenario step 追溯。\n\n禁止只有 happy path、只有 curl 示例、无断言\u002Fcleanup\u002Freporter 的骨架。\n\n### 输出所有权与下游\n\n把编排内容、真实 ID、runner\u002Ffixture 实现影响交回 change-writer，由其写唯一 target delta。新增编排 ID 必须进入 merge 后 slice-planner 的实现证据集。\n\n### SKIP 输出\n\n非 API 项目不得创建空 `deltas\u002Fscenario\u002F`。返回：category=orchestration、mode=SKIP、关联 scenario、证据“effective sequence 无外部接口边界”。\n\n### 完成检查\n\n- 每个 API operation\u002Fmessage 至少有主路径和适用异常断言；\n- 编排顺序与 effective sequence 一致；\n- target mode\u002F路径\u002Fcardinality 合法；\n- 无 JIT baseline 确认或 verified 条件。\n",{},"master","abf55fdedadaeb660f928aa7258b9ec35d4ab003","skills\u002Ftest-orchestrator",10,"https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos","https:\u002F\u002Fgithub.com\u002Fminiidealab","2026-10-18 11:36:11",{"source":7,"skillName":5,"commands":38,"prompt":48,"zipAvailable":49},[39,42,45],{"tool":40,"command":41},"npx","npx skills add miniidealab\u002Fopenlogos --skill test-orchestrator",{"tool":43,"command":44},"bunx","bunx skills add miniidealab\u002Fopenlogos --skill test-orchestrator",{"tool":46,"command":47},"pnpm","pnpm dlx skills add miniidealab\u002Fopenlogos --skill test-orchestrator","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Ftest-orchestrator\u002FSKILL.md",true,[51],{"path":52,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":55,"sourceHtmlUrl":56},"SKILL.en.md","REFERENCE","参考文档",7359,"https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Ftest-orchestrator\u002FSKILL.en.md",[58,102,111,119,128,137],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":81,"publishedAt":26},"01M6MXX45142DGRFD9ZYPT5YC9","ui-ux-pro-max","UI\u002FUX design intelligence. 67 styles, 96 palettes, 57 font pairings, 25 charts, 13 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind, shadcn\u002Fui). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI\u002FUX 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\u002Fui MCP for component search and examples.","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Fui-ux-pro-max\u002FSKILL.md",[64,67,70,73,78],{"categoryNo":65,"categoryName":66,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":68,"categoryName":69,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":71,"categoryName":72,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":74,"categoryName":75,"taxonomyType":76,"taxonomyTypeDesc":77},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",{"categoryNo":79,"categoryName":80,"taxonomyType":76,"taxonomyTypeDesc":77},"01JBSEEDCAT000000000000033","数据分析师",[82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101],"ui ux","pro","max","ui ux pro max","ui","ux","projects","mode","card","app","tsx","fix","improve","Tailwind","Charts","Animation","design","actions","MCP","search",{"skillNo":103,"name":104,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":108,"publishedAt":26},"01M6MXWY8HJV93BBR8FPNJXAMV","test-writer","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Ftest-writer\u002FSKILL.md",[107],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[109,110,23],"writer","test writer",{"skillNo":112,"name":113,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":26},"01M6MXWN29FY7K9ASMFRSPWQCN","slice-planner","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Fslice-planner\u002FSKILL.md",[],[117,118],"planner","slice planner",{"skillNo":120,"name":121,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":26},"01M6MXWFR1C1V66NSRTAM1FZPR","scenario-architect","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Fscenario-architect\u002FSKILL.md",[],[125,126,127],"scenario architect","scenario","architect",{"skillNo":129,"name":130,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":26},"01M6MXWD6ZCGPT4FDT580S8K96","project-init","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Fproject-init\u002FSKILL.md",[],[134,135,136],"init","project init","project",{"skillNo":138,"name":139,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":145,"publishedAt":26},"01M6MXW7Z69B2DRT7BB6S3K16W","product-designer","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Fproduct-designer\u002FSKILL.md",[142],{"categoryNo":143,"categoryName":144,"taxonomyType":76,"taxonomyTypeDesc":77},"01JBSEEDCAT000000000000031","产品经理",[146,147,148],"designer","product","product designer"]