@miniidealab/openlogos 0.9.22 → 0.9.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/claude-plugin-template/.claude-plugin/plugin.json +1 -1
  2. package/dist/commands/init.d.ts +2 -1
  3. package/dist/commands/init.d.ts.map +1 -1
  4. package/dist/commands/init.js +70 -37
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/launch.d.ts.map +1 -1
  7. package/dist/commands/launch.js +54 -0
  8. package/dist/commands/launch.js.map +1 -1
  9. package/dist/commands/merge.d.ts.map +1 -1
  10. package/dist/commands/merge.js +3 -1
  11. package/dist/commands/merge.js.map +1 -1
  12. package/dist/commands/next.d.ts.map +1 -1
  13. package/dist/commands/next.js +37 -63
  14. package/dist/commands/next.js.map +1 -1
  15. package/dist/commands/smoke.d.ts +30 -0
  16. package/dist/commands/smoke.d.ts.map +1 -0
  17. package/dist/commands/smoke.js +237 -0
  18. package/dist/commands/smoke.js.map +1 -0
  19. package/dist/commands/status.d.ts +20 -1
  20. package/dist/commands/status.d.ts.map +1 -1
  21. package/dist/commands/status.js +148 -25
  22. package/dist/commands/status.js.map +1 -1
  23. package/dist/commands/verify.d.ts.map +1 -1
  24. package/dist/commands/verify.js +32 -1
  25. package/dist/commands/verify.js.map +1 -1
  26. package/dist/i18n.d.ts +1 -1
  27. package/dist/i18n.d.ts.map +1 -1
  28. package/dist/i18n.js +85 -33
  29. package/dist/i18n.js.map +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +9 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/lib/sync-resource-index.d.ts.map +1 -1
  34. package/dist/lib/sync-resource-index.js +21 -2
  35. package/dist/lib/sync-resource-index.js.map +1 -1
  36. package/package.json +1 -1
  37. package/skills/architecture-designer/SKILL.md +27 -5
  38. package/skills/change-writer/SKILL.md +61 -11
  39. package/skills/code-implementor/SKILL.md +5 -5
  40. package/skills/code-reviewer/SKILL.md +1 -1
  41. package/skills/deployment-designer/SKILL.md +137 -0
  42. package/skills/deployment-executor/SKILL.md +133 -0
  43. package/skills/merge-executor/SKILL.md +17 -4
  44. package/skills/project-init/SKILL.md +42 -2
  45. package/skills/test-orchestrator/SKILL.md +6 -6
  46. package/skills/test-writer/SKILL.md +67 -8
  47. package/spec/agents-md.md +21 -9
  48. package/spec/change-management.md +60 -20
  49. package/spec/cli-json-output.md +95 -16
  50. package/spec/directory-convention.md +28 -6
  51. package/spec/logos-project.md +44 -1
  52. package/spec/logos.config.schema.json +32 -2
  53. package/spec/tasks-spec.md +47 -11
  54. package/spec/test-results.md +2 -2
  55. package/spec/workflow.md +115 -33
@@ -5,18 +5,19 @@
5
5
  ## 触发条件
6
6
 
7
7
  - 用户要求设计测试用例或测试方案
8
- - 用户提到 "Phase 3 Step 3"、"Step 3a"、"测试先行"、"测试设计"
8
+ - 用户提到 "Phase 3 Step 4a"、"Step 4a"、"测试先行"、"测试设计"
9
9
  - 已有场景时序图,需要在写代码前设计测试
10
10
  - 用户指定某个场景编号(如 S01)需要设计测试
11
11
 
12
12
  ## 前置依赖
13
13
 
14
14
  - `logos/resources/prd/3-technical-plan/2-scenario-implementation/` 中包含场景时序图(**必需**)
15
+ - `logos/resources/prd/3-technical-plan/3-deployment/` 中包含部署方案(如项目需要部署则必需)
15
16
  - `logos/resources/api/` 中包含 API 规格(有则读取,无则跳过——非 API 项目可能没有)
16
17
  - `logos/resources/database/` 中包含 DB DDL(有则读取,无则跳过)
17
18
  - `logos/resources/prd/1-product-requirements/` 中包含需求文档(用于追溯验收条件)
18
19
 
19
- **不可跳过**:无论项目类型如何,Step 3a(本 Skill)都必须执行。
20
+ **不可跳过**:无论项目类型如何,Step 4a(本 Skill)都必须执行。若部署方案声明需要部署,本 Skill 必须一并设计部署后冒烟测试。
20
21
 
21
22
  ## 核心能力
22
23
 
@@ -25,7 +26,8 @@
25
26
  3. 从业务规则和 EX 异常用例中的单点错误处理提取单元测试用例
26
27
  4. 从时序图 Step 序列提取场景测试用例(主路径)
27
28
  5. 从 EX 异常用例提取场景测试用例(异常路径)
28
- 6. Phase 1/2 验收条件反向校验测试覆盖完整性
29
+ 6. 从部署方案提取 smoke 测试用例(仅需要部署的项目)
30
+ 7. 从 Phase 1/2 验收条件反向校验测试覆盖完整性
29
31
 
30
32
  ## 执行步骤
31
33
 
@@ -34,6 +36,7 @@
34
36
  读取以下文件建立完整上下文:
35
37
 
36
38
  - 场景时序图(`logos/resources/prd/3-technical-plan/2-scenario-implementation/`)
39
+ - 部署方案(`logos/resources/prd/3-technical-plan/3-deployment/`)—— 如果项目需要部署
37
40
  - API YAML(`logos/resources/api/`)—— 如果存在
38
41
  - DB DDL(`logos/resources/database/`)—— 如果存在
39
42
  - Phase 1 需求文档(验收条件)
@@ -132,6 +135,32 @@
132
135
 
133
136
  **判断标准**:如果该用例在 CI 无头环境中无法稳定运行并自动断言结果,就应加 `[manual]`。
134
137
 
138
+ #### 3d: 部署后冒烟测试(需要部署时)
139
+
140
+ 当部署方案存在且声明需要部署时,必须设计 smoke 测试用例。冒烟测试验证“部署后的环境是否可用”,不替代 UT/ST/API 编排测试。
141
+
142
+ 从部署方案中提取以下用例:
143
+
144
+ - 健康检查:服务进程、HTTP health endpoint、CLI version 或桌面应用启动检查
145
+ - 核心入口:主页、登录页、主 API、主命令
146
+ - 数据库迁移:关键表/字段存在、迁移版本正确、初始化数据可读
147
+ - 静态资源:前端 bundle、图片、CSS、字体或下载资源可访问
148
+ - 配置与密钥:必要环境变量存在且没有使用测试占位值
149
+ - 关键链路:最小可用用户路径,例如登录、创建一条核心记录、读取结果
150
+ - 日志与监控:部署后没有阻断性错误
151
+
152
+ **每个 smoke 用例格式**:
153
+
154
+ | 字段 | 说明 |
155
+ |------|------|
156
+ | ID | `SMOKE-{模块}-{序号}`,如 `SMOKE-core-01` |
157
+ | 描述 | 验证什么部署后行为 |
158
+ | 来源 | 部署方案章节或检查项 |
159
+ | 目标环境 | local / staging / production |
160
+ | 前置条件 | 部署完成、迁移完成、必要配置存在 |
161
+ | 操作 | 执行的命令、请求或访问动作 |
162
+ | 预期结果 | 返回码、页面状态、日志、数据库状态 |
163
+
135
164
  ### Step 4: 覆盖度校验
136
165
 
137
166
  反向校验测试用例是否覆盖了所有关键约束:
@@ -141,6 +170,7 @@
141
170
  - [ ] 每个 EX 异常用例至少对应 1 个 ST 用例
142
171
  - [ ] API 每个 `required` 字段至少 1 个 UT 用例
143
172
  - [ ] DB 每个 `UNIQUE` / `CHECK` 约束至少 1 个 UT 用例
173
+ - [ ] 如需要部署,部署方案中的每个部署后检查项至少对应 1 个 SMOKE 用例
144
174
 
145
175
  如有未覆盖项,补充用例或向用户说明理由。
146
176
 
@@ -165,13 +195,13 @@
165
195
 
166
196
  ### Step 6: 输出测试用例规格文档
167
197
 
168
- 按场景输出 Markdown 格式的测试用例规格文档。
198
+ 按场景输出 Markdown 格式的测试用例规格文档。若需要部署,同时输出 smoke 测试用例规格文档。
169
199
 
170
200
  ### Step 7: 引导后续操作
171
201
 
172
202
  根据项目类型引导用户进入下一步:
173
203
 
174
- - **涉及 API** → 「继续进入 Step 3b 设计 API 编排测试?」
204
+ - **涉及 API** → 「继续进入 Step 4b 设计 API 编排测试?」
175
205
  - **不涉及 API** → 「测试设计已完成,建议进入代码生成:对我说『按 S01 的规格帮我实现』」
176
206
 
177
207
  ## 输出规范
@@ -180,7 +210,9 @@
180
210
  - **存放位置**:`logos/resources/test/`
181
211
  - **命名规则**:`<module>-{场景编号}-test-cases.md`(如 `core-S01-test-cases.md`;从 `logos-project.yaml` 的 `modules[]` 读取当前模块,默认为 `core`)
182
212
  - 每个文件包含:单元测试用例(按来源分组)+ 场景测试用例(主路径 + 异常路径)
183
- - 用例 ID 全局唯一:`UT-{场景编号}-{序号}` / `ST-{场景编号}-{序号}`
213
+ - **Smoke 存放位置**:`logos/resources/test/smoke/`
214
+ - **Smoke 命名规则**:`<module>-smoke-test-cases.md`
215
+ - 用例 ID 全局唯一:`UT-{场景编号}-{序号}` / `ST-{场景编号}-{序号}` / `SMOKE-{module}-{序号}`
184
216
 
185
217
  ### 文档结构模板
186
218
 
@@ -235,6 +267,32 @@
235
267
  | S01-AC-03 | 异常:项目已初始化 — 显示错误提示 | ST-S01-03, UT-S01-05 |
236
268
  ```
237
269
 
270
+ ### Smoke 文档结构模板
271
+
272
+ ```markdown
273
+ # {module}: 部署后冒烟测试用例
274
+
275
+ ## 一、冒烟测试范围
276
+
277
+ | 环境 | 覆盖范围 | 说明 |
278
+ |------|----------|------|
279
+ | staging | 健康检查、核心 API、迁移检查 | launch 前必跑 |
280
+
281
+ ## 二、冒烟测试用例
282
+
283
+ | ID | 描述 | 来源 | 目标环境 | 前置条件 | 操作 | 预期结果 |
284
+ |----|------|------|----------|----------|------|----------|
285
+ | SMOKE-core-01 | 健康检查接口可访问 | 部署方案:部署后检查 | staging | 服务已部署 | GET /health | 200 OK |
286
+
287
+ ## 三、覆盖度校验
288
+
289
+ - [x] 健康检查:已覆盖
290
+ - [x] 核心入口:已覆盖
291
+ - [x] 数据库迁移:已覆盖
292
+ - [x] 静态资源:已覆盖
293
+ - [x] 关键链路:已覆盖
294
+ ```
295
+
238
296
  ## 用例 ID 合约
239
297
 
240
298
  用例 ID(`UT-S01-01`、`ST-S01-01`)是设计文档与运行时的**绑定合约**:
@@ -242,13 +300,14 @@
242
300
  - 在 test-cases.md 中定义的 ID,必须在生成的测试代码中被原样使用
243
301
  - 测试代码的 reporter 会把每个用例的 ID 和运行结果写入 JSONL 文件
244
302
  - `openlogos verify` 通过 ID 将运行结果映射回测试用例规格,自动判定验收
245
- - 修改用例 ID 时必须同步修改测试代码中的 ID
303
+ - `SMOKE-*` smoke 测试脚本写入 `smoke-results.jsonl`,供 `openlogos smoke` 判定
304
+ - 修改用例 ID 时必须同步修改对应测试代码或 smoke 脚本中的 ID
246
305
 
247
306
  详细的 JSONL 格式定义和各语言 reporter 代码模板见 `logos/spec/test-results.md`。
248
307
 
249
308
  ## 实践经验
250
309
 
251
- - **测试用例是设计文档,不是代码**:本 Skill 产出的是 Markdown 格式的测试用例规格,具体的测试代码在 Step 4 代码生成阶段由 AI 基于此规格实现
310
+ - **测试用例是设计文档,不是代码**:本 Skill 产出的是 Markdown 格式的测试用例规格,具体的测试代码在 Step 5 代码生成阶段由 AI 基于此规格实现
252
311
  - **先单元后场景**:单元测试用例覆盖单个函数的正确性,场景测试覆盖跨模块串联——先确保积木正确,再验证积木拼接
253
312
  - **不要遗漏 DB 约束**:很多 Bug 来自数据库层面的约束违反,DB 约束是单元测试用例的重要来源
254
313
  - **场景测试关注数据传递**:Step 间的数据传递(前一步输出 → 后一步输入)是最容易出错的地方
package/spec/agents-md.md CHANGED
@@ -27,6 +27,9 @@ Read `logos/logos-project.yaml` first to understand the project resource index.
27
27
  3. All API designs must originate from scenario sequence diagrams
28
28
  4. All code changes must have corresponding API orchestration tests
29
29
  5. Use the Delta change workflow for iterations (see logos/changes/ directory)
30
+ 6. All generated test code must include an OpenLogos reporter
31
+ 7. Deployment is a human confirmation point; AI must not deploy without explicit authorization
32
+ 8. If deployment is required, smoke tests must be designed with the test plan and run via `openlogos smoke` after deployment
30
33
 
31
34
  ## Document Edit Verification
32
35
  [Fixed locale-specific paragraph — re-read from disk after Markdown/text spec edits]
@@ -44,19 +47,26 @@ Phase detection logic:
44
47
  - design exists but `3-technical-plan/1-architecture/` is empty → suggest Phase 3 Step 0 (architecture-designer)
45
48
  - architecture exists but `3-technical-plan/2-scenario-implementation/` is empty → suggest Phase 3 Step 1 (scenario-architect)
46
49
  - scenarios exist but `logos/resources/api/` is empty → suggest Phase 3 Step 2 (api-designer + db-designer)
47
- - API exists but `logos/resources/test/` is empty → suggest Phase 3 Step 3a (test-writer)
48
- - test cases exist but `logos/resources/scenario/` is empty → suggest Phase 3 Step 3b (test-orchestrator, API projects only)
49
- - All above exist → suggest Phase 3 Step 4 (code generation)
50
- - code generated but `logos/resources/verify/` is empty → suggest Phase 3 Step 5 (run tests then `openlogos verify`)
51
-
52
- Step 4 execution rules (large tasks):
50
+ - API/DB exists but `3-technical-plan/3-deployment/` is empty → suggest Phase 3 Step 3 (deployment-designer)
51
+ - deployment plan exists but `logos/resources/test/` is empty → suggest Phase 3 Step 4a (test-writer)
52
+ - test cases exist but `logos/resources/scenario/` is empty → suggest Phase 3 Step 4b (test-orchestrator, API projects only)
53
+ - orchestration tests exist but `logos/resources/implementation/` is empty → suggest Phase 3 Step 5 (code-implementor)
54
+ - code generated but `logos/resources/verify/acceptance-report.md` is missing or verify has not passed → suggest Phase 3 Step 6 (`openlogos verify`)
55
+ - verify passed but deployment is required and `deployment-report.md` is missing → suggest Phase 3 Step 7 (deployment-executor, human confirmation required)
56
+ - deployment done but `smoke-report.md` / `SMOKE_PASS` is missing → suggest Phase 3 Step 8 (`openlogos smoke`)
57
+ - smoke passed → suggest `openlogos launch`
58
+
59
+ Step 5 execution rules (large tasks):
53
60
  1. Large implementation can be split by scenario/module, but each batch must be closed-loop
54
61
  2. Each batch must include business code + UT/ST test code + OpenLogos reporter
55
62
  3. Before generating code, list the UT/ST case IDs covered in this batch and keep IDs aligned with `logos/resources/test/*.md`
56
63
  4. Do not postpone all tests to the final batch
57
64
 
58
- Ready-to-use prompt for Step 4 batch execution:
59
- `Please execute Phase 3 Step 4 for this scope. If the task is large, split into batches, but each batch must deliver: (1) business code, (2) matching UT/ST test code, (3) OpenLogos reporter writing to logos/resources/verify/test-results.jsonl. Before outputting code, list the UT/ST IDs covered in this batch.`
65
+ Deployment rules:
66
+ 1. AI must not run deployment commands unless the user explicitly authorizes deployment
67
+ 2. AI must read `logos/resources/prd/3-technical-plan/3-deployment/` before deployment
68
+ 3. Deployment completion must be followed by `openlogos smoke`
69
+ 4. Initial modules can be launched only after verify, deployment, and smoke gates pass, unless explicitly marked as not requiring deployment
60
70
 
61
71
  ## Active Skills
62
72
  [根据 `logos.config.json` 的 `aiTool` 字段动态生成]
@@ -105,7 +115,9 @@ AGENTS.md 的内容从以下文件中自动提取:
105
115
  4. All code changes must have corresponding API orchestration tests
106
116
  5. Use the Delta change workflow for iterations
107
117
  6. All generated test code must include an OpenLogos reporter (see spec/test-results.md)
108
- 7. After editing Markdown / text specs, re-read from disk and show excerpts to the user (see 「文档修改后的验证」生成段)
118
+ 7. Deployment is a human confirmation point; AI must not deploy without explicit authorization
119
+ 8. If deployment is required, smoke tests must be designed and run via `openlogos smoke` after deployment
120
+ 9. After editing Markdown / text specs, re-read from disk and show excerpts to the user (see 「文档修改后的验证」生成段)
109
121
 
110
122
  ### 生成时机
111
123
 
@@ -7,10 +7,11 @@
7
7
  ## 核心原则
8
8
 
9
9
  1. **不直接修改主文档**:每次变更先在 `logos/changes/` 中创建提案
10
- 2. **影响分析先行**:在 `proposal.md` 中明确变更范围
10
+ 2. **影响分析先行**:在 `proposal.md` 中明确变更范围和部署影响
11
11
  3. **按需传播**:不是每次都全链路更新,只更新受影响的环节
12
- 4. **归档留痕**:变更完成后归档,保留完整历史
13
- 5. **guard 互斥**:同一时间只允许一个活动提案;存在活动 guard 时,必须阻止新的 `openlogos change`
12
+ 4. **部署可追溯**:需要部署的提案必须产出部署 delta、部署任务和冒烟测试方案
13
+ 5. **归档留痕**:变更完成后归档,保留完整历史
14
+ 6. **guard 互斥**:同一时间只允许一个活动提案;存在活动 guard 时,必须阻止新的 `openlogos change`
14
15
 
15
16
  ## 目录结构
16
17
 
@@ -47,17 +48,30 @@ project-root/
47
48
  ## 变更原因
48
49
  [为什么要做这个变更?来源于哪个需求/反馈/Bug?]
49
50
 
51
+ ## 变更类型
52
+ [需求级 / 设计级 / 接口级 / 代码级]
53
+
50
54
  ## 变更范围
51
55
  - 影响的需求文档:[列表]
52
56
  - 影响的功能规格:[列表]
53
57
  - 影响的业务场景:[列表]
54
58
  - 影响的 API:[列表]
55
59
  - 影响的 DB 表:[列表]
60
+ - 影响的编排测试:[列表]
61
+
62
+ ## 部署影响
63
+ - 是否需要部署:是 / 否
64
+ - 部署原因:[说明为什么需要或不需要部署]
65
+ - 影响环境:[本地 / 测试 / 预发 / 生产 / 无]
66
+ - 是否涉及数据迁移:是 / 否
67
+ - 是否需要回滚预案:是 / 否
56
68
 
57
69
  ## 变更概述
58
70
  [用 1-3 段话概述具体改什么]
59
71
  ```
60
72
 
73
+ `## 部署影响` 是人工审核依据。CLI 的部署状态判断以 `tasks.md` 的 `[deploy]` section 和提案目录标记文件为准,不解析自由文本作为唯一依据。
74
+
61
75
  ### tasks.md
62
76
 
63
77
  实现任务清单,使用结构化 section 格式,每个 section 对应提案流程中的一个阶段。完整格式规范见 `spec/tasks-spec.md`。
@@ -72,15 +86,21 @@ project-root/
72
86
  ## [code] 代码实现
73
87
  - [ ] 实现 src/xxx 中的业务逻辑
74
88
  - [ ] 编写对应测试
89
+
90
+ ## [deploy] 部署任务
91
+ - [ ] 按部署方案部署到 staging
92
+ - [ ] 确认迁移、配置、服务启动和回滚预案
75
93
  ```
76
94
 
77
95
  Section 标记规则:
78
96
  - `## [delta]` — delta 文档产出任务,该 section 全部勾选后可进入 `ready-to-merge`
79
97
  - `## [code]` — 代码实现任务,直接修改源文件,不产出 delta
98
+ - `## [deploy]` — 部署执行任务,只能在 verify PASS 后、人类明确确认后执行
80
99
  - 纯代码提案可只有 `[code]` section(无 `[delta]`),CLI 会直接跳过 delta-writing 阶段
100
+ - 不需要部署的提案不得创建 `[deploy]` section
81
101
  - 旧格式(无 section 标记)向后兼容,降级为全局勾选判断
82
102
 
83
- > **注意**:`openlogos verify` 是独立的 CLI 操作节点,不应写入 tasks.md 作为可勾选任务。verify 由面板的 verify 步骤触发,tasks.md 只追踪实现任务。
103
+ > **注意**:`openlogos verify` `openlogos smoke` 是独立 CLI 操作节点,不应写入 tasks.md 作为可勾选任务。tasks.md 只追踪 delta、代码和部署执行任务。
84
104
 
85
105
  ### deltas/ 目录
86
106
 
@@ -103,14 +123,18 @@ Delta 文件的目录结构映射主文档目录:
103
123
  - `deltas/database/` → 对应 `logos/resources/database/` 的变更
104
124
  - `deltas/scenario/` → 对应 `logos/resources/scenario/` 的变更
105
125
  - `deltas/test/` → 对应 `logos/resources/test/` 的变更
126
+ - `deltas/spec/` → 对应项目根目录 `spec/` 的方法论规范变更
127
+ - `deltas/skills/` → 对应 `logos/skills/` 的 Skill 文档变更
128
+
129
+ 部署方案 delta 使用 `deltas/prd/3-technical-plan/3-deployment/`,合并目标为 `logos/resources/prd/3-technical-plan/3-deployment/`。
106
130
 
107
- `openlogos merge` 会递归扫描上述目录,保留子目录映射。例如 `deltas/prd/2-product-design/1-feature-specs/foo.md` 会合并到 `logos/resources/prd/2-product-design/1-feature-specs/foo.md`。
131
+ `openlogos merge` 会递归扫描上述目录,保留子目录映射。例如 `deltas/prd/3-technical-plan/3-deployment/core-01-deployment-plan.md` 会合并到 `logos/resources/prd/3-technical-plan/3-deployment/core-01-deployment-plan.md`。
108
132
 
109
133
  ## 变更工作流
110
134
 
111
- > **核心原则**:`openlogos merge`、`openlogos verify`、`openlogos archive` 和 `git push` 是人类确认点。AI 可提醒、解释、准备命令;未经用户明确授权不得执行。用户以明确请求或 slash command 授权时,AI 可以代为执行。不得在"顺手完成流程"、"按流程走完"等隐式场景中自动触发。
135
+ > **核心原则**:`openlogos merge`、`openlogos verify`、部署执行、`openlogos smoke`、`openlogos archive` 和 `git push` 是人类确认点。AI 可提醒、解释、准备命令;未经用户明确授权不得执行。用户以明确请求或 slash command 授权时,AI 可以代为执行。不得在“顺手完成流程”“按流程走完”等隐式场景中自动触发。
112
136
  >
113
- > **规格驱动代码**:代码实现必须在规格合并进主文档(Step 6)之后才能开始,不允许基于 delta 草稿直接写代码。
137
+ > **规格驱动代码**:代码实现必须在规格合并进主文档之后才能开始,不允许基于 delta 草稿直接写代码。
114
138
 
115
139
  ```
116
140
  1. 创建变更提案(CLI)
@@ -152,14 +176,29 @@ Delta 文件的目录结构映射主文档目录:
152
176
  └── 验收通过(PASS)→ 继续步骤 9
153
177
  └── 验收失败(FAIL)→ 修复代码后重新运行,不需要重走 merge 流程
154
178
 
155
- 9. 归档变更(CLI)【人类确认点】
179
+ 9. 部署执行(如需要)【人类确认点】
180
+ └── 仅当 VERIFY_PASS 存在且 tasks.md 有 [deploy] section 时进入
181
+ └── 用户必须明确授权 AI 执行部署
182
+ └── AI 必须读取合并后的部署方案文档和 [deploy] section
183
+ └── 部署完成后生成 logos/resources/verify/deployment-report.md
184
+ └── 部署完成后写入 logos/changes/{slug}/DEPLOY_DONE
185
+ └── 部署失败时不得写入 DEPLOY_DONE,应输出失败点和回滚建议
186
+
187
+ 10. 运行部署后冒烟测试(CLI)【人类确认点】
188
+ └── 部署完成后运行 openlogos smoke
189
+ └── openlogos smoke 读取 smoke 结果并生成 logos/resources/verify/smoke-report.md
190
+ └── 冒烟通过写入 SMOKE_PASS
191
+ └── 冒烟失败写入 SMOKE_FAIL
192
+ └── SMOKE_PASS 后才能归档提案;Initial 阶段还必须通过该门禁后才能 openlogos launch
193
+
194
+ 11. 归档变更(CLI)【人类确认点】
156
195
  └── openlogos archive {slug}
157
196
  └── 将 logos/changes/{slug}/ 移入 logos/changes/archive/
158
197
  └── 若当前 guard 指向该提案,则删除 logos/.openlogos-guard
159
198
  └── 归档完成后,AI 自动 commit 归档变更(告知用户,无需确认)
160
199
  └── commit message 格式:chore({slug}): archive change proposal
161
200
 
162
- 10. 推送到远端(Git)【人类确认点】
201
+ 12. 推送到远端(Git)【人类确认点】
163
202
  └── AI 提示用户确认是否执行 git push
164
203
  └── 用户明确授权后,AI 执行 git push
165
204
  └── 未获授权不得自动推送
@@ -169,9 +208,9 @@ Delta 文件的目录结构映射主文档目录:
169
208
 
170
209
  | 变更类型 | commit 策略 |
171
210
  |---------|------------|
172
- | 需求级 / 设计级变更 | 至少 3 个 commit:规格(Step 6)+ 代码(Step 7)+ 归档(Step 9) |
173
- | 接口级变更 | 至少 2 个 commit:规格+代码合并(Step 6-7)+ 归档(Step 9) |
174
- | 代码级修复 | 至少 2 个 commit:代码(Step 7)+ 归档(Step 9) |
211
+ | 需求级 / 设计级变更 | 至少 3 个 commit:规格(Step 6)+ 代码(Step 7)+ 归档(Step 11) |
212
+ | 接口级变更 | 至少 2 个 commit:规格+代码合并(Step 6-7)+ 归档(Step 11) |
213
+ | 代码级修复 | 至少 2 个 commit:代码(Step 7)+ 归档(Step 11) |
175
214
 
176
215
  ## 变更传播规则
177
216
 
@@ -179,10 +218,11 @@ Delta 文件的目录结构映射主文档目录:
179
218
 
180
219
  | 变更类型 | 最少需要更新 | 说明 |
181
220
  |---------|------------|------|
182
- | 需求级变更 | 全链路 | 需求变了,所有下游都可能受影响 |
183
- | 设计级变更 | 原型 + 场景 + API/DB + 编排 + 代码 | 需求不变,实现方案调整 |
184
- | 接口级变更 | API/DB + 编排 + 代码 | 设计不变,接口细节调整 |
185
- | 代码级修复 | 代码 + 重新验收 | Bug 修复,不涉及设计变更 |
221
+ | 需求级变更 | 全链路 + 部署影响分析 | 需求变了,所有下游都可能受影响 |
222
+ | 设计级变更 | 原型 + 场景 + API/DB + 编排 + 代码 + 部署影响分析 | 需求不变,实现方案调整 |
223
+ | 接口级变更 | API/DB + 编排 + 代码 + 部署影响分析 | 设计不变,接口细节调整 |
224
+ | 部署级变更 | 部署方案 + smoke 用例 + `[deploy]` 任务 | 发布平台、环境变量、迁移、回滚、健康检查变化 |
225
+ | 代码级修复 | 代码 + 重新验收 + 部署影响分析 | Bug 修复,不涉及设计变更时仍需判断是否需要重新部署 |
186
226
 
187
227
  ## Git 集成
188
228
 
@@ -199,9 +239,9 @@ AI 在以下三个节点自动提交(告知用户,无需确认):
199
239
  |------|-------------------|---------|
200
240
  | merge 完成后(Step 6) | `docs({slug}): merge spec deltas` | logos/resources/ 下的规格文档变更 |
201
241
  | 代码实现完成后(Step 7) | `feat/fix({slug}): implement changes` | 业务代码 + 测试代码 |
202
- | archive 完成后(Step 9) | `chore({slug}): archive change proposal` | logos/changes/archive/ 归档文件 |
242
+ | archive 完成后(Step 11) | `chore({slug}): archive change proposal` | logos/changes/archive/ 归档文件 |
203
243
 
204
- push 是独立的人类确认点(Step 10),AI 必须等待用户明确授权后才执行。
244
+ push 是独立的人类确认点(Step 12),AI 必须等待用户明确授权后才执行。
205
245
 
206
246
  ## MERGE_PROMPT.md 文件规范
207
247
 
@@ -221,7 +261,7 @@ push 是独立的人类确认点(Step 10),AI 必须等待用户明确授
221
261
 
222
262
  ### 1. {delta-relative-path}
223
263
  - Delta 文件:`logos/changes/{slug}/deltas/{category}/{relative-file}`
224
- - 目标目录:`logos/resources/{category}/{relative-dir}/`
264
+ - 目标目录:`{target-dir}/`
225
265
  - 操作:读取 delta 中的 ADDED / MODIFIED / REMOVED 标记,合并到目标目录中对应的主文档
226
266
 
227
267
  ## 执行要求
@@ -235,7 +275,7 @@ push 是独立的人类确认点(Step 10),AI 必须等待用户明确授
235
275
  8. 所有变更合并完成后,自动执行 git commit(告知用户,无需确认):
236
276
  `git add -A && git commit -m "docs({slug}): merge spec deltas"`
237
277
  9. 写入 `logos/changes/{slug}/SPEC_MERGED`
238
- 然后提示用户:按更新后的规格实现代码,代码完成后运行 `openlogos verify` 验收,验收通过后明确授权执行 `openlogos archive {slug}`。
278
+ 然后提示用户:按更新后的规格实现代码;代码完成后运行 `openlogos verify`;如有 `[deploy]` section,验收通过后由用户明确授权部署,再运行 `openlogos smoke`;最后明确授权执行 `openlogos archive {slug}`。
239
279
  ```
240
280
 
241
281
  ## CLI 命令
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 1. 概述
6
6
 
7
- OpenLogos CLI 的 `status`、`next`、`verify`、`detect` 四个命令支持 `--format json` 参数,输出结构化 JSON 供外部工具(如 RunLogos)以编程方式消费。
7
+ OpenLogos CLI 的 `status`、`next`、`verify`、`smoke`、`detect` 五类命令支持 `--format json` 参数,输出结构化 JSON 供外部工具(如 RunLogos)以编程方式消费。
8
8
 
9
9
  ### 1.1 通用约定
10
10
 
@@ -21,10 +21,10 @@ OpenLogos CLI 的 `status`、`next`、`verify`、`detect` 四个命令支持 `--
21
21
 
22
22
  ```jsonc
23
23
  {
24
- "command": "<command-name>", // "status" | "next" | "verify" | "detect" | "module list"
25
- "version": "<cli-version>", // CLI 版本号,如 "0.5.9"
26
- "timestamp": "<ISO-8601>", // 输出时间戳
27
- "data": { ... } // 命令特定的数据负载
24
+ "command": "<command-name>", // "status" | "next" | "verify" | "smoke" | "detect" | "module list"
25
+ "version": "<cli-version>",
26
+ "timestamp": "<ISO-8601>",
27
+ "data": { ... }
28
28
  }
29
29
  ```
30
30
 
@@ -106,8 +106,29 @@ openlogos status --format json # JSON 格式
106
106
  "done": false,
107
107
  "skipped": false,
108
108
  "files": []
109
+ },
110
+ {
111
+ "key": "phase.3-3-deployment",
112
+ "label": "Phase 3-3 · 部署方案",
113
+ "done": true,
114
+ "skipped": false,
115
+ "files": ["core-01-deployment-plan.md"]
116
+ },
117
+ {
118
+ "key": "phase.3-7-deploy",
119
+ "label": "Phase 3-7 · 部署执行",
120
+ "done": false,
121
+ "skipped": false,
122
+ "files": []
123
+ },
124
+ {
125
+ "key": "phase.3-8-smoke",
126
+ "label": "Phase 3-8 · 部署冒烟测试(smoke)",
127
+ "done": false,
128
+ "skipped": false,
129
+ "files": []
109
130
  }
110
- // ... 所有 10 个 phase
131
+ // ... 所有 phase
111
132
  ],
112
133
  "modules": [ // 模块注册表(来自 logos-project.yaml)
113
134
  {
@@ -135,7 +156,7 @@ openlogos status --format json # JSON 格式
135
156
  "phase_progress": null,
136
157
  "active_change": { // 当前活跃变更提案
137
158
  "slug": "add-refund",
138
- "proposal_step": "delta-writing", // "writing"|"delta-writing"|"ready-to-merge"|"merge-generated"|"coding"
159
+ "proposal_step": "delta-writing", // 见 proposal_step 枚举
139
160
  "proposal_step_label": "撰写 Delta",
140
161
  "has_proposal": true,
141
162
  "has_tasks": true,
@@ -184,10 +205,10 @@ openlogos status --format json # JSON 格式
184
205
  | `modules[].phase_progress` | object \| null | 是 | 各阶段进度 map(key = phase key);`launched` 模块为 null |
185
206
  | `modules[].phase_progress[key].done` | boolean | 是 | 该阶段是否已完成 |
186
207
  | `modules[].phase_progress[key].skipped` | boolean | 是 | 该阶段是否被跳过 |
187
- | `modules[].phase_progress[key].scenario_coverage` | object \| undefined | 否 | 仅场景类阶段(`phase.3-1`、`phase.3-3a`)存在 |
208
+ | `modules[].phase_progress[key].scenario_coverage` | object \| undefined | 否 | 仅场景类阶段(`phase.3-1`、`phase.3-4a`)存在 |
188
209
  | `modules[].active_change` | object \| null | 是 | 当前活跃变更提案;`initial` 模块或无活跃提案时为 null |
189
210
  | `modules[].active_change.slug` | string | 是 | 提案 slug |
190
- | `modules[].active_change.proposal_step` | string | 是 | 提案阶段:`"writing"` \| `"delta-writing"` \| `"ready-to-merge"` \| `"merge-generated"` \| `"coding"`;`"implementing"` / `"in-progress"` 为旧版本兼容值 |
211
+ | `modules[].active_change.proposal_step` | string | 是 | 提案阶段:`"writing"` \| `"delta-writing"` \| `"ready-to-merge"` \| `"merge-generated"` \| `"coding"` \| `"ready-to-verify"` \| `"verify-passed"` \| `"verify-failed"` \| `"ready-to-deploy"` \| `"deploy-done"` \| `"ready-to-smoke"` \| `"smoke-passed"` \| `"smoke-failed"`;`"implementing"` / `"in-progress"` 为旧版本兼容值 |
191
212
  | `modules[].active_change.proposal_step_label` | string | 是 | 提案阶段本地化标签 |
192
213
  | `modules[].active_change.has_proposal` | boolean | 是 | 是否存在 proposal.md |
193
214
  | `modules[].active_change.has_tasks` | boolean | 是 | 是否存在 tasks.md |
@@ -306,7 +327,65 @@ openlogos verify --format json # JSON 格式
306
327
 
307
328
  ---
308
329
 
309
- ## 5. 错误处理
330
+ ## 5. `openlogos smoke --format json`
331
+
332
+ 冒烟测试用于验收部署后的目标环境是否可用,不并入 `openlogos verify`。
333
+
334
+ ### 5.1 用法
335
+
336
+ ```bash
337
+ openlogos smoke # 人类可读格式
338
+ openlogos smoke --format json # JSON 格式
339
+ openlogos smoke --env staging
340
+ openlogos smoke --env production --format json
341
+ ```
342
+
343
+ ### 5.2 JSON Schema(data 部分)
344
+
345
+ ```jsonc
346
+ {
347
+ "environment": "staging", // smoke 目标环境;未指定时为 null
348
+ "summary": {
349
+ "defined_count": 5, // 定义的 smoke 用例数
350
+ "executed_count": 5, // 已执行 smoke 用例数
351
+ "passed_count": 5,
352
+ "failed_count": 0,
353
+ "skipped_count": 0,
354
+ "uncovered_count": 0,
355
+ "coverage_pct": 100,
356
+ "pass_rate_pct": 100
357
+ },
358
+ "gate": {
359
+ "result": "PASS", // "PASS" | "FAIL"
360
+ "reason": null // 失败原因分类
361
+ },
362
+ "failed_cases": [],
363
+ "uncovered_cases": [],
364
+ "skipped_cases": [],
365
+ "report_path": "logos/resources/verify/smoke-report.md",
366
+ "result_path": "logos/resources/verify/smoke-results.jsonl"
367
+ }
368
+ ```
369
+
370
+ ### 5.3 字段说明
371
+
372
+ | 字段 | 类型 | 必填 | 说明 |
373
+ |------|------|------|------|
374
+ | `environment` | string \| null | 是 | 目标环境,由 `--env` 指定 |
375
+ | `summary.defined_count` | number | 是 | smoke 用例规格中定义的用例数 |
376
+ | `summary.executed_count` | number | 是 | smoke 结果中实际执行的用例数 |
377
+ | `gate.result` | string | 是 | `PASS` 或 `FAIL` |
378
+ | `gate.reason` | string \| null | 是 | 失败原因,如 `failed_cases` / `incomplete_coverage` |
379
+ | `failed_cases` | array | 是 | 失败 smoke 用例 |
380
+ | `uncovered_cases` | array | 是 | 未覆盖 smoke 用例 ID |
381
+ | `report_path` | string | 是 | smoke 报告路径 |
382
+ | `result_path` | string | 是 | smoke 结果路径 |
383
+
384
+ `openlogos smoke` 与 `openlogos verify` 共享 JSONL 结果思想,但读取的是 `smoke.result_path`,默认 `logos/resources/verify/smoke-results.jsonl`。冒烟测试用例建议存放在 `logos/resources/test/smoke/`。
385
+
386
+ ---
387
+
388
+ ## 6. 错误处理
310
389
 
311
390
  当命令因错误退出时(如项目未初始化、找不到文件等),JSON 模式下输出错误 JSON 到 **stderr** 并以非零退出码退出:
312
391
 
@@ -322,7 +401,7 @@ openlogos verify --format json # JSON 格式
322
401
  }
323
402
  ```
324
403
 
325
- ### 5.1 错误码
404
+ ### 6.1 错误码
326
405
 
327
406
  | 错误码 | 说明 |
328
407
  |--------|------|
@@ -332,18 +411,18 @@ openlogos verify --format json # JSON 格式
332
411
 
333
412
  ---
334
413
 
335
- ## 6. `openlogos module list --format json`
414
+ ## 7. `openlogos module list --format json`
336
415
 
337
416
  列出项目中注册的所有模块及其生命周期状态。
338
417
 
339
- ### 6.1 用法
418
+ ### 7.1 用法
340
419
 
341
420
  ```bash
342
421
  openlogos module list # 人类可读格式
343
422
  openlogos module list --format json # JSON 格式
344
423
  ```
345
424
 
346
- ### 6.2 JSON Schema(data 部分)
425
+ ### 7.2 JSON Schema(data 部分)
347
426
 
348
427
  ```jsonc
349
428
  {
@@ -362,7 +441,7 @@ openlogos module list --format json # JSON 格式
362
441
  }
363
442
  ```
364
443
 
365
- ### 6.3 字段说明
444
+ ### 7.3 字段说明
366
445
 
367
446
  | 字段 | 类型 | 必填 | 说明 |
368
447
  |------|------|------|------|
@@ -375,7 +454,7 @@ openlogos module list --format json # JSON 格式
375
454
 
376
455
  ---
377
456
 
378
- ## 7. 完整用法示例
457
+ ## 8. 完整用法示例
379
458
 
380
459
  ```bash
381
460
  # 获取项目状态(机器可读)
@@ -22,13 +22,15 @@ project-root/
22
22
  │ │ │ │ └── 2-page-design/ # Phase 2: 页面设计 + HTML 原型
23
23
  │ │ │ └── 3-technical-plan/
24
24
  │ │ │ ├── 1-architecture/ # Phase 3: 架构与技术选型
25
- │ │ │ └── 2-scenario-implementation/ # Phase 3: 场景实现文档
25
+ │ │ │ ├── 2-scenario-implementation/ # Phase 3: 场景实现文档
26
+ │ │ │ └── 3-deployment/ # Phase 3: 部署方案 + 冒烟测试方案
26
27
  │ │ ├── api/ # Phase 3: OpenAPI YAML
27
28
  │ │ ├── database/ # Phase 3: SQL DDL
28
29
  │ │ ├── test/ # Phase 3: 测试用例规格(Markdown)
30
+ │ │ │ └── smoke/ # Phase 3: 部署后冒烟测试用例(Markdown,可选)
29
31
  │ │ ├── scenario/ # Phase 3: API 编排测试(JSON)
30
- │ │ ├── implementation/ # Phase 3-4: 代码实现清单(Markdown)
31
- │ │ └── verify/ # Phase 3: 测试验收结果(JSONL + 报告)
32
+ │ │ ├── implementation/ # Phase 3: 代码实现清单(Markdown)
33
+ │ │ └── verify/ # Phase 3: 验收、部署、冒烟结果(JSONL + 报告)
32
34
  │ │
33
35
  │ └── changes/ # 变更提案工作区
34
36
  │ ├── {change-name}/ # 进行中的变更提案
@@ -57,14 +59,16 @@ OpenLogos 方法论的统一入口。包含配置文件、研发资源文档和
57
59
  | `prd/1-product-requirements/` | Phase 1: WHY | 需求文档、用户故事、竞品分析 |
58
60
  | `prd/2-product-design/1-feature-specs/` | Phase 2: WHAT | 功能规格、信息架构、设计规范 |
59
61
  | `prd/2-product-design/2-page-design/` | Phase 2: WHAT | 页面设计文档 + HTML 原型 |
60
- | `prd/3-technical-plan/1-architecture/` | Phase 3: HOW | 整体架构、技术选型 |
62
+ | `prd/3-technical-plan/1-architecture/` | Phase 3: HOW | 整体架构、技术选型、部署约束 |
61
63
  | `prd/3-technical-plan/2-scenario-implementation/` | Phase 3: HOW | 业务场景文档(时序图 + 步骤说明) |
64
+ | `prd/3-technical-plan/3-deployment/` | Phase 3: HOW | 部署方案、环境配置、回滚策略、冒烟测试方案 |
62
65
  | `api/` | Phase 3: HOW | OpenAPI YAML 规格文件 |
63
66
  | `database/` | Phase 3: HOW | SQL DDL 设计文件 |
64
67
  | `test/` | Phase 3: HOW | 单元测试 + 场景测试用例规格(Markdown) |
68
+ | `test/smoke/` | Phase 3: HOW | 部署后冒烟测试用例规格(Markdown,仅需部署的项目) |
65
69
  | `scenario/` | Phase 3: HOW | API 编排测试用例(JSON,仅 API 项目) |
66
- | `implementation/` | Phase 3-4: HOW | 代码实现清单(Markdown),标记代码实现阶段完成 |
67
- | `verify/` | Phase 3: HOW | 测试运行结果(JSONL)+ 验收报告(Markdown) |
70
+ | `implementation/` | Phase 3: HOW | 代码实现清单(Markdown),标记代码实现阶段完成 |
71
+ | `verify/` | Phase 3: HOW | 测试验收、部署执行、冒烟测试结果(JSONL + 报告) |
68
72
 
69
73
  ### logos/changes/
70
74
 
@@ -104,6 +108,21 @@ OpenLogos 方法论的统一入口。包含配置文件、研发资源文档和
104
108
  - 使用 Markdown 格式,包含单元测试和场景测试的用例设计
105
109
  - 每个文件对应一个场景编号,覆盖该场景的所有测试层级
106
110
 
111
+ ### 部署方案文件
112
+
113
+ - 部署方案默认文件名:`core-01-deployment-plan.md`
114
+ - 命名格式:`<module>-{序号}-deployment-plan.md`
115
+ - 存放位置:`logos/resources/prd/3-technical-plan/3-deployment/`
116
+ - 内容至少包含:目标环境、部署拓扑、环境变量、构建命令、发布命令、数据迁移、回滚策略、部署后检查、冒烟测试方案
117
+
118
+ ### 冒烟测试用例文件
119
+
120
+ - 冒烟测试用例默认文件名:`core-smoke-test-cases.md`
121
+ - 命名格式:`<module>-smoke-test-cases.md`
122
+ - 存放位置:`logos/resources/test/smoke/`
123
+ - 用例 ID 建议使用 `SMOKE-{module}-{序号}`,例如 `SMOKE-core-01`
124
+ - 冒烟测试只验证部署后的环境可用性,不替代 `UT-*` / `ST-*` 用例
125
+
107
126
  ### 场景文件
108
127
 
109
128
  - 按场景分文件:`user-auth.json`、`payment-flow.json`
@@ -113,6 +132,9 @@ OpenLogos 方法论的统一入口。包含配置文件、研发资源文档和
113
132
 
114
133
  - 测试结果:`test-results.jsonl`(JSONL 格式,每行一个用例结果)
115
134
  - 验收报告:`acceptance-report.md`(由 `openlogos verify` 自动生成)
135
+ - 部署报告:`deployment-report.md`(部署执行完成后生成)
136
+ - 冒烟结果:`smoke-results.jsonl`(JSONL 格式,每行一个冒烟用例结果)
137
+ - 冒烟报告:`smoke-report.md`(由 `openlogos smoke` 自动生成)
116
138
  - 详细格式定义见 [test-results.md](./test-results.md)
117
139
 
118
140
  ## 可选目录