[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MXWFR1C1V66NSRTAM1FZPR":3,"skill-same:01M6MXWFR1C1V66NSRTAM1FZPR":52},{"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},"01M6MXWFR1C1V66NSRTAM1FZPR","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\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 0: 确认场景清单（强制，建模前必须执行）\n\n在开始任何场景时序图绘制之前，**必须**先完成场景清单的确认：\n\n1. 读取 `logos\u002Flogos-project.yaml`，检查是否已有 `scenarios` 字段。\n\n   **情况 A：`scenarios` 字段不存在**\n\n   停止建模，要求用户先确认完整的场景清单。结合需求文档（Phase 1）、产品设计文档（Phase 2）和架构概要（Phase 3 Step 0），整理出候选清单，向用户逐一确认：\n\n   - 每个场景的编号（`S01`、`S02`...）和名称\n   - 是否有遗漏的核心用户旅程？\n   - 是否有遗漏的管理后台或系统级场景？\n\n   确认后，将清单写入 `logos\u002Flogos-project.yaml`：\n\n   ```yaml\n   scenarios:\n     - id: S01\n       name: \u003C场景名称>\n     - id: S02\n       name: \u003C场景名称>\n     # ...\n   ```\n\n   **情况 B：`scenarios` 字段已存在**\n\n   展示当前清单，并询问用户是否有遗漏或调整：\n\n   > 当前场景清单共 N 个：S01（xxx）、S02（xxx）...\n   > 请确认是否完整，或告知需要新增\u002F调整的场景。\n\n   只有用户明确确认清单无误后，才进入 Step 1 开始建模。\n\n2. 确认清单后，告知用户当前已完成哪些场景（`\u003Cmodule>-SXX-*.md` 文件存在），还剩哪些场景待建模，然后按用户指示开始目标场景的建模。\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- 每条箭头（`->>` 或 `-->>`）的全部内容**必须写在同一行**，禁止在描述文字中插入换行\n- 若描述文字过长，优先**精简措辞**，而不是拆行\n- 需要补充的细节（如 UI 按钮、副作用说明等）应写在时序图**下方的\"步骤说明\"列表**中，不得折入箭头行内\n- 违反此规则会导致 mermaid 引擎解析失败、markdown 渲染出错\n\n**⚠️ Mermaid sequenceDiagram 语法安全（强制）**：\n- 参与方别名必须使用短 ASCII 标识，如 `U`、`W`、`API`、`DB`，避免在别名中放 `\u002F`、空格、括号或中文。\n- `participant \u003C别名> as \u003C显示名>` 的显示名保持简短；复杂技术栈、端口、API 路径和补充说明放到时序图下方的\"步骤说明\"。\n- 箭头消息保持单行，可写 `POST \u002Fapi\u002Fpath`，但不要在消息中塞入多行 JSON、长错误体、HTML、Markdown 表格或大量括号嵌套。\n- JSON 示例、错误码列表、字段解释和副作用说明必须下沉到\"步骤说明\"或\"异常用例\"，不要放进 Mermaid 消息行。\n- 拿不准时优先精简图中消息，让图表达调用顺序，让正文承载细节。\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\u002Fcore-00-scenario-overview.md`\n- **场景文档**：`logos\u002Fresources\u002Fprd\u002F3-technical-plan\u002F2-scenario-implementation\u002F\u003Cmodule>-{场景编号}-{场景名}.md`（从 `logos-project.yaml` 的 `modules[]` 读取当前模块，默认为 `core`；生成前必须读取 `scenario_counter.next_id` 取号，生成后立即将 `next_id` 加 1 写回）\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\n## ⚠️ 收尾步骤（强制）：更新 resource_index\n\n完成本 Skill 的所有场景时序图产出后，**必须**将新生成的文档追加写入 `logos\u002Flogos-project.yaml` 的 `resource_index` 字段：\n\n```yaml\nresource_index:\n  # ...已有条目...\n  - path: logos\u002Fresources\u002Fprd\u002F3-technical-plan\u002F2-scenario-implementation\u002Fcore-00-scenario-overview.md\n    desc: 场景实现概览索引。涉及全量场景分类、参与方、实现文档映射关系时必读。\n  - path: logos\u002Fresources\u002Fprd\u002F3-technical-plan\u002F2-scenario-implementation\u002Fcore-S01-\u003Cslug>.md\n    desc: S01 \u003C场景名称>场景时序图。涉及 S01 实现细节、API 设计、异常分支时必读。\n  # 每个场景文件均需单独一条\n```\n\n**不执行此步骤将导致 api-designer\u002Fdb-designer 等后续 Skill 无法感知时序图的存在，AI 将无法从正确的源头推导 API 设计。**\n\n## Step 补充：为场景分配 feature 分组（add-feature-model）\n\n在 module 与 scenario 之间存在**可选的 feature（功能）分组层**。生成新场景时，scenario-architect 应顺手维护 feature 归属（与维护 `scenario_counter` 同为 AI 职责，CLI 不代劳）。\n\n### 生成场景时分配 feature\n\n1. **取 scenario 号**（既有流程）：读 `logos-project.yaml` 的 `scenario_counter.next_id` → 用作 `SXX` → `+1` 写回。\n2. **判断 feature 归属**：新场景属于哪个功能域（能力域）？\n   - 命中已有 feature → 在 `scenarios[]` 该场景条目写 `feature: F0X`。\n   - 需要新建 feature → 读 `feature_counter.next_id` 取号 `F0X`（缺失时 `configured_next_id = feature_counter?.next_id ?? 1`，从 `F01` 起）、`+1` 写回，向 `features[]` 追加 `{id, name, module, spec?}`（`module` 必为该场景所属 module；`spec` 可选链接 feature-specs 文档序号，如 `core-01`），再给场景写 `feature: F0X`。\n   - 暂不确定 → **可不写 `feature`**（合法：该场景落入所属 module 的\"未分组\"桶，不阻断）。\n\n### feature 编号约束（务必遵守）\n\n- feature ID 项目全局唯一、格式 `F0X`，**严禁不同 module 从 F01 重号**（与 scenario 同策）。\n- 计数器冲突恢复（防 off-by-one 重号）：`configured_next_id = feature_counter?.next_id ?? 1`，`allocated = max(configured_next_id, max(existing)+1)`，用 `allocated` 创建、持久化 `feature_counter.next_id = allocated + 1`。\n  - **工作示例**：已有最大 `F05`、`feature_counter.next_id=3`（异常态）→ `configured_next_id=3`，`allocated=max(3, 5+1)=6` → 分配 `F06`、持久化 `next_id=7`、下次分配 `F07`；**绝不复用已存在 ID**。\n- 详见 `spec\u002Fmodule-naming-convention.md` 的「feature 功能分组编号规范」。\n\n### 存量项目回填引导\n\n存量项目场景已平铺、无 feature 归属时，引导用户运行 `openlogos feature-backfill`：CLI 生成 `logos\u002Ffeature-backfill-prompt.md`（打包场景清单 + 现有 feature-specs 文档 + 当前 yaml），AI 据此语义聚类回写 `features[]` \u002F `scenario.feature` \u002F `feature_counter`（幂等、只补未分组、非强制）。\n\n## S39 delta 模式：目标存在则修改，缺失则全量创建\n\n### 触发\n\nchange-writer 的 on-touch-v1 闭包判定把某 scenario target 标为 MODIFY\u002FCREATE，并咨询本 Skill 生成内容时启用。当前 change-writer 保持最终 delta 文件所有权；本 Skill 返回内容与校验结果，不得另写第二份同目标 delta。\n\n### 输入\n\n- proposal 中本次 Why\u002F验收；\n- 已合并需求\u002Ffeature\u002Farchitecture；\n- 当前 change 的 effective view；\n- 可重算代码\u002F测试\u002F配置现状证据；\n- 拟定 feature\u002Fscenario 身份与模式。\n\n不得从代码推断历史 Why，不读取其它 change\u002Farchive\u002Fpartial seed staging。\n\n### MODIFY\n\n目标存在时读取完整被触及章节：\n\n- 已有锚用 MODIFIED，并携整节全量内容遵守 S37；\n- 需要新章节时可在同一 delta 用 ADDED；\n- 多场景共享 overview\u002Ftraceability 时把所有变更交回同一 target delta。\n\n### CREATE\n\n目标缺失时返回可独立成立的完整场景文档，至少包含：\n\n1. 标题、SXX、feature、来源；\n2. 场景目标与用户价值；\n3. 参与者及职责；\n4. 前置\u002F成功后置条件；\n5. 完整 Mermaid `sequenceDiagram` 主路径；\n6. 步骤说明；\n7. alt\u002F异常\u002F边界用例；\n8. 与 requirement\u002FAPI\u002FDB\u002Ftest\u002Fdecision 的追溯；\n9. 明确非目标与安全边界。\n\n禁止只给 skeleton\u002FTODO。CREATE 仍由 change-writer 写 `## ADDED — ...（全新场景文档）`，不使用 CREATE marker。\n\n### API\u002FDB 派生接口\n\n输出必须明确：\n\n- 哪些交互是 HTTP\u002FRPC\u002F消息边界，供 api-designer 判定；\n- 哪些步骤读写持久化，供 db-designer 判定；\n- 主\u002F异常路径与验收点，供 test-writer\u002Ftest-orchestrator 生成真实用例。\n\n若无法判断，把具体缺口返回 change-writer 标 AMBIGUOUS；不在 delta-writing 启动 JIT 人工确认。\n\n### 完成检查\n\n- 时序参与者与步骤说明一一对应；\n- API 先有时序来源；异常至少覆盖输入、依赖、并发\u002F幂等或权限中适用项；\n- 无 verified\u002Fconfirmed\u002Fbaseline warning 写入；\n- 返回的目标路径与 change-writer 提供的 canonical target 一致。\n\n## 场景 CREATE canonical 结构与兼容校验\n\n### 适用与输出所有权\n\n当 change-writer 依据 on-touch-v1 把场景目标标为 CREATE 并咨询本 Skill 时，返回的完整文档必须遵循 `spec\u002Fbaseline-closure.md` §17。change-writer 仍是目标唯一 Delta writer；本 Skill 不另写第二份文件。\n\n### canonical 章节与内容门\n\n新场景固定使用：`场景目标`、`参与者`、`前置条件`、`成功后置条件`、`时序图`、`步骤说明`、`异常与边界`、`追溯`。其中步骤标题只能写 `## 步骤说明`，不得为新文档选择同义标题。\n\n步骤说明必须满足：\n\n1. 唯一一个步骤章节；\n2. 至少 3 个非空有序列表项；\n3. 每项有明确主语；\n4. 与 Mermaid `Step N` 主路径一一对应；\n5. 异常只在正常步骤中引用，详细内容放 `异常与边界`。\n\n时序图必须位于合法 `mermaid` fence，声明 `sequenceDiagram`、至少两个适用参与者和至少一条消息；每条消息保持单行并带 `Step N:`。异常\u002F边界与追溯章节都必须包含非空权威正文，不得用注释、代码样例或占位文本满足完整度。\n\n### 兼容读取说明\n\nCLI 为读取存量文档兼容 `步骤说明`、`主路径步骤`、`主路径`、`主流程`、`正常流程`、`main path` 的精确标题。该集合不改变本 Skill 的 canonical 输出，也不允许用“标题或散文包含步骤二字”代替真实有序列表。\n\n### 返回前检查\n\n- 从磁盘或待返回最终文本重读：标题唯一、至少 3 步、列表非空、Mermaid 参与者\u002F消息齐备、异常\u002F追溯非空。\n- 明确 API\u002FRPC\u002F消息与持久化派生结论，供 api-designer\u002Fdb-designer 判定适用或 SKIP。\n- 给出需求 AC、EX 与真实 UT\u002FST ID 追溯；不使用通配或占位 ID。\n- 将检查结论交回 change-writer；最终由 change-writer 运行 `openlogos change-lint` 到 exit 0。\n\n## Authority Closure 时序建模\n\n\n### 输入与引用\n\n读取 `spec\u002Fauthority-closure.md` 和项目 Authority Registry。只使用稳定 `fact_id`；不从代码、路径或参与者名称自造 owner。\n\n### 时序要求\n\n显式画出 command、mutation entry、authority read\u002Fwrite、projection refresh、consumer decision 和 recovery。projection 消息必须携带 generation\u002Fversion\u002Fhash\u002Freceipt 等 freshness identity。两个参与者均能直接写 canonical state 或给出最终决定时，停止产出并回退 architecture-designer。\n\n### 异常要求\n\n至少建模 stale projection、conflicting old copy、response lost + restart、legacy\u002Fconcurrent writer。恢复只读 authority\u002Freceipt；目录扫描、mtime、marker 存在性和 stale cache 不得作为 fallback authority。\n\n追溯连接 `fact_id`、AC-01～AC-08 与真实 UT\u002FST；场景只消费 Registry，不复制 owner 表。\n",{},"master","abf55fdedadaeb660f928aa7258b9ec35d4ab003","skills\u002Fscenario-architect",10,"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\u002Fskills\u002Fscenario-architect\u002FSKILL.md",true,[46],{"path":47,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":50,"sourceHtmlUrl":51},"SKILL.en.md","REFERENCE","参考文档",15881,"https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Fscenario-architect\u002FSKILL.en.md",[53,99,111,120,128,137],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":78,"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",[59,64,67,70,75],{"categoryNo":60,"categoryName":61,"taxonomyType":62,"taxonomyTypeDesc":63},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":65,"categoryName":66,"taxonomyType":62,"taxonomyTypeDesc":63},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":68,"categoryName":69,"taxonomyType":62,"taxonomyTypeDesc":63},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":71,"categoryName":72,"taxonomyType":73,"taxonomyTypeDesc":74},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",{"categoryNo":76,"categoryName":77,"taxonomyType":73,"taxonomyTypeDesc":74},"01JBSEEDCAT000000000000033","数据分析师",[79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98],"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":100,"name":101,"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":102,"categories":103,"keywords":107,"publishedAt":21},"01M6MXWY8HJV93BBR8FPNJXAMV","test-writer","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Ftest-writer\u002FSKILL.md",[104],{"categoryNo":105,"categoryName":106,"taxonomyType":62,"taxonomyTypeDesc":63},"01JBSEEDCAT000000000000008","测试与质量",[108,109,110],"writer","test writer","test",{"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":117,"publishedAt":21},"01M6MXWSAMN9AD3T8F6N099ZGY","test-orchestrator","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Ftest-orchestrator\u002FSKILL.md",[116],{"categoryNo":105,"categoryName":106,"taxonomyType":62,"taxonomyTypeDesc":63},[118,119,110],"orchestrator","test orchestrator",{"skillNo":121,"name":122,"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":123,"categories":124,"keywords":125,"publishedAt":21},"01M6MXWN29FY7K9ASMFRSPWQCN","slice-planner","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Fslice-planner\u002FSKILL.md",[],[126,127],"slice planner","planner",{"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":21},"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":21},"01M6MXW7Z69B2DRT7BB6S3K16W","product-designer","https:\u002F\u002Fgithub.com\u002Fminiidealab\u002Fopenlogos\u002Fblob\u002Fmaster\u002Fskills\u002Fproduct-designer\u002FSKILL.md",[142],{"categoryNo":143,"categoryName":144,"taxonomyType":73,"taxonomyTypeDesc":74},"01JBSEEDCAT000000000000031","产品经理",[146,147,148],"designer","product","product designer"]