[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MX8B39MZ2P9BYF7DHCNBZH":3,"skill-same:01M6MX8B39MZ2P9BYF7DHCNBZH":46},{"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":17,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":23,"frontMatter":24,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":28,"repositoryHtmlUrl":29,"repositoryHomepageUrl":6,"ownerHtmlUrl":30,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":31,"install":32,"resources":45},"01M6MX8B39MZ2P9BYF7DHCNBZH","scenario-architect",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\u002Fexamples\u002Fflowtask\u002Flogos\u002Fskills\u002Fscenario-architect\u002FSKILL.md",[],[18,19,20],"architect","scenario","scenario architect","2026-11-10 10:12:30",false,"# Skill: Scenario Architect\n\n> 将 Phase 1\u002F2 已定义的业务场景展开为技术时序图，让 API 设计自然浮现，并设计完整的异常用例。场景编号沿用 Phase 1 定义。\n\n## 触发条件\n\n- 用户要求画时序图、设计业务场景或进行场景建模\n- 用户提到 \"Phase 3 Step 1\"、\"场景驱动\"、\"技术方案设计\"\n- 已有需求文档和产品设计文档（含场景定义），需要开始技术实现\n- 用户指定某个场景编号（如 S01）需要展开为时序图\n\n## 核心能力\n\n1. 读取 Phase 1\u002F2 的场景定义和验收条件，作为时序图的输入\n2. 为每个场景绘制 Mermaid 时序图（严格遵循编号规范）\n3. 为关键步骤撰写说明文字（解释\"为什么\"而非\"做什么\"）\n4. 识别每个步骤的异常情况，设计结构化的异常用例\n5. 生成场景概览文档（场景地图 + 场景索引）\n\n## 与 Phase 1\u002F2 的衔接\n\n**Phase 3 不再从零识别场景。** 场景在 Phase 1 已定义（`S01`, `S02`...），Phase 2 已细化交互流程，Step 0 已确定技术架构和选型。Phase 3 Step 1 的工作是将同一个场景从\"交互视角\"展开为\"技术视角\"，时序图的参与方应与架构图中的系统组件一致：\n\n| 输入（来自 Phase 1\u002F2） | 输出（Phase 3） |\n|------------------------|----------------|\n| 场景编号和名称 | 时序图标题保留编号 |\n| 触发条件 | 时序图的起始箭头 |\n| 主路径描述 | 时序图的 Step 序列 |\n| GIVEN\u002FWHEN\u002FTHEN（业务级） | 时序图步骤的行为描述 |\n| 异常验收条件 | EX 异常用例（技术级） |\n| 涉及的页面和交互（Phase 2） | 参与方识别 |\n\n## 执行步骤\n\n### Step 1: 加载场景上下文\n\n读取 Phase 1 需求文档、Phase 2 产品设计文档和 Phase 3 Step 0 技术架构概要中的场景定义。**不要重新发明场景**——直接沿用已有编号和描述。参与方命名应与架构图中的系统组件保持一致。\n\n**场景粒度前置检查（绘制时序图之前必须执行）：**\n\n在继续之前，先验证 Phase 1 中的场景定义是否粒度合理。检查以下反模式：\n\n- **单 API 场景**：如果一个场景的主路径只有 1-2 个步骤（如\"创建任务\"= 仅 `POST \u002Fapi\u002Ftasks`），粒度过细\n- **CRUD 碎片化**：如果场景列表中对同一实体出现了独立的\"创建X\"、\"查询X\"、\"更新X\"、\"删除X\"场景，应合并为目标导向的场景\n- **缺少业务目标**：如果场景的结果只是\"数据被写入\u002F读取了\"，说明缺少真正的用户目标\n\n**如果检测到以上任何反模式**：停止绘制时序图，建议回到 Phase 1 按业务目标重新组织场景。为粒度过细的场景绘制时序图会将问题传导到 API 设计、测试用例和代码实现。\n\n确认每个场景的：\n- **场景编号**：沿用 Phase 1 的 `S01`, `S02`...（或 Phase 2 的子场景 `S01.1`）\n- **参与方**：从 Phase 2 的交互流程中识别涉及哪些系统组件\n- **主路径**：从 Phase 1\u002F2 的验收条件中提取正常流程\n- **已知异常**：从 Phase 1\u002F2 的异常验收条件中提取\n\n### Step 2: 绘制时序图\n\n为每个场景绘制 Mermaid 时序图，**严格遵循以下规范**：\n\n**编号规范**：\n- 每个箭头必须带 `Step N:` 编号前缀\n- 编号从 1 开始连续递增\n- 每个箭头附一行行为描述：`HTTP方法 \u002Fapi\u002F路径 — 一句话说明`\n\n**参与方规范**：\n- 使用短别名：`U`（User\u002FBrowser）、`W`（Web\u002FFrontend）、`SB`（Supabase）、`DB`（Database）\n- 每个参与方的全名在 `participant` 声明中注明\n\n**场景编号规范**：\n- 文档标题格式：`S01: 邮箱注册 — 时序图`\n- 一个场景一个文件，编号对应 Phase 1\n\n**格式示例**：\n\n```mermaid\nsequenceDiagram\n    participant U as User\u002FBrowser\n    participant W as Web (Astro)\n    participant SB as Supabase Auth\n    participant DB as Supabase DB\n\n    U->>W: Step 1: POST \u002Fapi\u002Fauth\u002Fregister — 提交 {email, password, referral_code?}\n    W->>SB: Step 2: supabase.auth.signUp(email, password, metadata) — 发起用户创建\n    SB-->>W: Step 3: 返回 {user, session} 或 error\n    W->>DB: Step 4: INSERT INTO profiles — 写入用户扩展信息\n    DB-->>W: Step 5: 返回写入结果\n    W-->>U: Step 6: 返回注册结果 + 提示验证邮件\n```\n\n### Step 3: 撰写步骤叙事\n\n在时序图之后，用**连续编号列表**将所有步骤逐一写出来，形成人类可以从头到尾流畅阅读的线性叙事。\n\n**格式规范**：\n\n1. **每一步都必须写出来**——不跳步，不省略。简单步骤一行带过，复杂步骤在下方用 `>` blockquote 补充说明\n2. **每一步必须有明确的主语**——读者不需要猜\"这是谁做的\"。主语使用参与方表中的别名或全名\n3. **编号与时序图的 Step N 严格对应**\n4. **正常流程和异常用例分开写**——正常流程在前，异常用例在后。正常流程中只在触发异常的步骤后标注 `→ 见 EX-N.M` 引用，不展开异常内容\n\n**正常流程格式示例**：\n\n````markdown\n## 步骤说明\n\n1. **开发者**在终端输入 `openlogos init my-project`。\n2. **CLI** 检查 `logos\u002Flogos.config.json` 是否已存在。如果已存在 → 见 EX-2.1。\n3. **CLI** 在终端显示语言选择菜单（1. English \u002F 2. 中文）。如果终端为非 TTY → 见 EX-3.1。\n\n> 语言选择放在 `init` 阶段（而非全局配置），因为这是用户与 OpenLogos 的第一次接触，此时确认语言最自然。\n\n4. **开发者**选择语言（输入 1 或 2）。\n5. **CLI** 从 `package.json` \u002F `Cargo.toml` \u002F `pyproject.toml` \u002F 目录名中探测项目名。如果用户传入的 name 与配置文件名不一致 → 见 EX-5.1。\n\n> 优先级链：命令行参数 > package.json > Cargo.toml > pyproject.toml > 目录名。scoped name 自动去掉 `@org\u002F` 前缀。\n\n6. **CLI** 依次创建 11 个目录（`logos\u002Fresources\u002Fprd\u002F...` 等），每个目录写入 `.gitkeep`。\n7. **CLI** 写入 `logos\u002Flogos.config.json`（含 locale + 5 个文档模块定义）。\n8. **CLI** 写入 `logos\u002Flogos-project.yaml`（含空 tech_stack + conventions）。\n9. **CLI** 写入 `AGENTS.md` 和 `CLAUDE.md`（含 Phase detection logic）。\n10. **CLI** 在终端输出创建的文件清单和下一步建议。\n````\n\n**异常用例格式示例**：\n\n````markdown\n## 异常用例\n\n### EX-2.1: 项目已初始化\n\n- **触发条件**：Step 2 检测到 `logos\u002Flogos.config.json` 已存在\n- **期望响应**：stderr 输出 `Error: logos\u002Flogos.config.json already exists in current directory.`，exit(1)\n- **副作用**：不创建任何文件，不覆盖已有配置\n\n### EX-3.1: 非 TTY 环境\n\n- **触发条件**：Step 3 检测到 `process.stdin.isTTY` 为 false（CI 管道 \u002F 管道输入）\n- **期望响应**：跳过语言选择交互，默认 `locale = 'en'`\n- **副作用**：无，流程直接进入 Step 5\n\n### EX-5.1: 项目名冲突\n\n- **触发条件**：Step 5 中用户传入的 `name` 与 `package.json`（或其他配置文件）中的名称不一致\n- **期望响应**：显示两个选项让用户选择，非 TTY 环境自动使用用户传入的名称\n- **副作用**：无，选择后继续 Step 6\n````\n\n**叙事原则**：\n- **不跳步**：哪怕一个步骤只值一行（如\"CLI 写入文件\"），也要写出来，保持编号连续\n- **主语先行**：每一步以粗体主语开头，让读者一眼看到\"谁在做\"\n- **补充说明用 blockquote**：需要解释\"为什么\"或设计决策时，在步骤下方用 `>` blockquote 展开，不打断阅读节奏\n- **异常用例独立成段**：正常流程中只放 `→ 见 EX-N.M` 引用，异常的触发条件、期望响应、副作用在文档下方的「异常用例」章节展开\n\n### Step 4: 设计异常用例\n\n将 Phase 1\u002F2 中已识别的异常验收条件展开为技术级异常用例，并补充 Phase 1\u002F2 未覆盖的技术异常（如服务不可用、数据库写入失败等）：\n\n```markdown\n#### 异常用例\n\n##### EX-2.1: 邮箱已注册（← Phase 1 S01 异常验收条件）\n- **触发条件**：提交的 email 已存在于 auth.users 表\n- **期望响应**：HTTP 409 `{ code: \"EMAIL_EXISTS\", message: \"邮箱已注册\" }`\n- **副作用**：不创建任何记录，不发送邮件\n\n##### EX-2.2: Supabase Auth 服务不可用（技术异常，Phase 1 未覆盖）\n- **触发条件**：Supabase Auth 服务超时或返回 5xx\n- **期望响应**：HTTP 503 `{ code: \"AUTH_SERVICE_UNAVAILABLE\", message: \"认证服务暂时不可用\" }`\n- **副作用**：记录错误日志，触发告警\n\n##### EX-4.1: profiles 写入失败（技术异常，Phase 1 未覆盖）\n- **触发条件**：INSERT INTO profiles 违反唯一约束或 RLS 拒绝\n- **期望响应**：HTTP 500 `{ code: \"PROFILE_CREATE_FAILED\", message: \"用户配置创建失败\" }`\n- **副作用**：auth.users 中的记录已创建但 profiles 未创建（需要补偿机制）\n```\n\n**异常用例编号规则**：`EX-{步骤编号}.{序号}`\n\n### Step 5: 生成场景概览文档\n\n汇总所有场景的技术实现状态：\n\n```markdown\n# 业务场景概览（技术实现）\n\n## 场景地图\n| 编号 | 场景名称 | Phase 1 | Phase 2 | Phase 3 时序图 | API | 编排 | 状态 |\n|------|---------|---------|---------|--------------|-----|------|------|\n| S01  | 邮箱注册 | ✅ | ✅ | ✅ | ✅ | ? | 进行中 |\n| S02  | 密码登录 | ✅ | ✅ | ? | ? | ? | 待开始 |\n\n## 场景依赖关系\n[说明场景之间的前置\u002F后置关系]\n\n## 场景索引\n[每个场景的文件链接，贯穿三个 Phase]\n```\n\n## 输出规范\n\n- **场景概览**：`logos\u002Fresources\u002Fprd\u002F3-technical-plan\u002F2-scenario-implementation\u002F00-scenario-overview.md`\n- **场景文档**：`logos\u002Fresources\u002Fprd\u002F3-technical-plan\u002F2-scenario-implementation\u002F{场景编号}-{场景名}.md`\n- 时序图使用 Mermaid 格式（可在 Markdown 中直接渲染）\n- 异常用例使用 `EX-N.M` 编号，全局唯一\n- 每个场景文档包含：时序图 + 步骤说明 + 异常用例\n- **场景编号必须与 Phase 1\u002F2 一致**\n\n## 实践经验\n\n- **不要从零识别场景**：Phase 3 的场景来自 Phase 1 的需求文档。如果发现了 Phase 1 没有的场景，应该回到 Phase 1 补充\n- **Phase 1\u002F2 的异常是输入**：Phase 1 写的\"异常：邮箱已注册\"，在 Phase 3 要展开为带 HTTP 状态码和响应体的技术规格\n- **先画主路径再补异常**：不要试图在第一遍就画出所有分支，先把主路径画清楚\n- **异常用例的覆盖策略**：每个涉及外部调用（数据库、第三方服务）的步骤至少 1 个异常用例\n- **步骤编号维护**：当需要在中间插入步骤时，重新编号所有后续步骤，并同步更新所有 EX 引用\n- **参与方粒度**：在微服务架构中，每个服务是一个参与方；在单体应用中，按逻辑层划分（Web、Auth、DB）\n- **时序图是 API 的来源**：时序图中跨系统边界的箭头就是需要设计的 API——如果一个 API 在时序图中找不到出处，它很可能不应该存在\n\n## 推荐提示词\n\n以下提示词可以直接复制给 AI 使用：\n\n- `帮我画 S01 的时序图`\n- `帮我对所有 P0 场景做场景建模`\n- `帮我给 S03 补充异常用例的时序图`\n- `基于产品设计，帮我做技术场景建模`\n",{},"master","abf55fdedadaeb660f928aa7258b9ec35d4ab003","examples\u002Fflowtask\u002Flogos\u002Fskills\u002Fscenario-architect",9,"https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos","https:\u002F\u002Fgithub.com\u002Fminiidealab","2026-10-18 11:36:11",{"source":7,"skillName":5,"commands":33,"prompt":43,"zipAvailable":44},[34,37,40],{"tool":35,"command":36},"npx","npx skills add miniidealab\u002Fopenlogos --skill scenario-architect",{"tool":38,"command":39},"bunx","bunx skills add miniidealab\u002Fopenlogos --skill scenario-architect",{"tool":41,"command":42},"pnpm","pnpm dlx skills add miniidealab\u002Fopenlogos --skill scenario-architect","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fexamples\u002Fflowtask\u002Flogos\u002Fskills\u002Fscenario-architect\u002FSKILL.md",true,[],[47,93,105,114,122,127],{"skillNo":48,"name":49,"nameZh":6,"description":50,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":51,"categories":52,"keywords":72,"publishedAt":21},"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",[53,58,61,64,69],{"categoryNo":54,"categoryName":55,"taxonomyType":56,"taxonomyTypeDesc":57},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":59,"categoryName":60,"taxonomyType":56,"taxonomyTypeDesc":57},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":62,"categoryName":63,"taxonomyType":56,"taxonomyTypeDesc":57},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":65,"categoryName":66,"taxonomyType":67,"taxonomyTypeDesc":68},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",{"categoryNo":70,"categoryName":71,"taxonomyType":67,"taxonomyTypeDesc":68},"01JBSEEDCAT000000000000033","数据分析师",[73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92],"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":94,"name":95,"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":96,"categories":97,"keywords":101,"publishedAt":21},"01M6MXWY8HJV93BBR8FPNJXAMV","test-writer","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Ftest-writer\u002FSKILL.md",[98],{"categoryNo":99,"categoryName":100,"taxonomyType":56,"taxonomyTypeDesc":57},"01JBSEEDCAT000000000000008","测试与质量",[102,103,104],"writer","test writer","test",{"skillNo":106,"name":107,"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":108,"categories":109,"keywords":111,"publishedAt":21},"01M6MXWSAMN9AD3T8F6N099ZGY","test-orchestrator","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Ftest-orchestrator\u002FSKILL.md",[110],{"categoryNo":99,"categoryName":100,"taxonomyType":56,"taxonomyTypeDesc":57},[112,113,104],"orchestrator","test orchestrator",{"skillNo":115,"name":116,"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":117,"categories":118,"keywords":119,"publishedAt":21},"01M6MXWN29FY7K9ASMFRSPWQCN","slice-planner","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Fslice-planner\u002FSKILL.md",[],[120,121],"slice planner","planner",{"skillNo":123,"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":124,"categories":125,"keywords":126,"publishedAt":21},"01M6MXWFR1C1V66NSRTAM1FZPR","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Fscenario-architect\u002FSKILL.md",[],[18,19,20],{"skillNo":128,"name":129,"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":130,"categories":131,"keywords":132,"publishedAt":21},"01M6MXWD6ZCGPT4FDT580S8K96","project-init","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Fproject-init\u002FSKILL.md",[],[133,134,135],"project init","init","project"]