@guanlin4924/devflow-pi 0.1.85 → 0.1.88

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 (46) hide show
  1. package/README.md +4 -0
  2. package/package.json +1 -1
  3. package/plugins/devflow-core/extensions/devflow-core.ts +211 -19
  4. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/acceptance_test_runner.py +15 -0
  5. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/advance_state.rb +49 -3
  6. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/checker_adapter.rb +83 -0
  7. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/checker_registry.rb +19 -0
  8. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/checkpoint_meta.rb +46 -0
  9. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/execution_contract.rb +10 -1
  10. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/gate_runtime.rb +32 -0
  11. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/init_state.rb +44 -41
  12. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/init_workflow.rb +5 -4
  13. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/inspect_state.rb +15 -4
  14. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/machine_evidence.rb +15 -9
  15. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/review_preflight.py +238 -0
  16. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/review_run.py +234 -32
  17. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/validate_state.rb +63 -11
  18. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/workflow_gate_contract.rb +5 -1
  19. package/plugins/devflow-core/skills/workflow-orchestrator/templates/feature-development.yaml +40 -31
  20. package/plugins/devflow-core/skills/workflow-pipeline/SKILL.md +11 -5
  21. package/plugins/devflow-core/skills/workflow-pipeline/references/pipeline-flow.md +6 -6
  22. package/plugins/devflow-implementation/skills/workflow-change-plan/SKILL.md +16 -1
  23. package/plugins/devflow-implementation/skills/workflow-change-plan/references/output-template.md +3 -1
  24. package/plugins/devflow-quality/agents/code-reviewer.md +7 -1
  25. package/plugins/devflow-quality/skills/code-review/SKILL.md +10 -0
  26. package/plugins/devflow-quality/skills/workflow-gen-test-guide/SKILL.md +37 -0
  27. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/SKILL.md +327 -0
  28. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/assets/output-template.md +213 -0
  29. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/bug-rules.md +9 -0
  30. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/coverage-checklist.md +63 -0
  31. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/exception-checklist.md +37 -0
  32. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/test-type-slots/api-test.md +58 -0
  33. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/test-type-slots/boundary-test.md +151 -0
  34. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/test-type-slots/common-test.md +49 -0
  35. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/test-type-slots/compatibility-test.md +105 -0
  36. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/test-type-slots/data-test.md +67 -0
  37. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/test-type-slots/exception-test.md +109 -0
  38. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/test-type-slots/function-test.md +65 -0
  39. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/test-type-slots/integration-test.md +36 -0
  40. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/test-type-slots/performance-test.md +100 -0
  41. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/test-type-slots/scenario-test.md +63 -0
  42. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/test-type-slots/security-test.md +55 -0
  43. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/test-type-slots/ui-test.md +49 -0
  44. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/test-type-slots/usability-test.md +46 -0
  45. package/plugins/devflow-quality/skills/workflow-gen-test-guide/legacy/references/writing-guide.md +111 -0
  46. package/src/constants.ts +1 -1
@@ -0,0 +1,327 @@
1
+ ---
2
+ name: workflow-gen-test-guide
3
+ description: "从需求(PRD/baseline/功能点梳理)生成检查点树形态的测试指导书——每个可测点展平成树的叶子检查点(一句话,不埋进用例字段块),按【测试视角分层】(前台/后台/服务与数据/边界场景/风险覆盖/待确认/埋点/缺少内容)组织,组件按状态/维度深拆(目标5-7层),PRD全覆盖(漏的进待确认分支),站高级测试工程师视角。产出的测试指导书.md是检查点树形态,供change-xmind转成xmind思维导图。"
4
+ argument-hint: "<功能名> [@PRD文档.md 或 语雀URL] [--auto]"
5
+ user-invocable: true
6
+ pattern: generator
7
+ inputs:
8
+ - ".planning/features/{feature}/功能点梳理.md"
9
+ - ".planning/requirements/baseline.md"
10
+ - ".planning/PROJECT.md"
11
+ - "可选 PRD 原文(仅在当前步骤明确提供时读取)"
12
+ output: ".planning/features/{feature}/测试指导书.md"
13
+ allowed-tools:
14
+ - Read
15
+ - Write
16
+ - Bash
17
+ - Grep
18
+ - Glob
19
+ ---
20
+
21
+ # 检查点树生成 Skill
22
+
23
+ > Devflow 适配说明:本文件随插件分发,由上层适配器调用。项目事实统一位于 `.planning/`;执行时以本文件的 Devflow 路径和适配器传入的输入为准,不解析旧版的 `_shared/` 或机器本地路径。
24
+
25
+ This skill consumes 需求(PRD/baseline/功能点梳理) and creates a **检查点树**(checkpoint tree)——每个可测点展平成树的叶子检查点(一句话,可勾可数),**不是**用例字段块形态。Do not re-discuss requirements or generate technical plans.
26
+
27
+ 产出形态参考(用户要的):叶子是一句话检查点(如"点击气泡不进行签到时星辉余额未变化"),按 **测试视角分层** 组织:`测试视角层(前台/后台/服务与数据/边界场景/风险覆盖/待确认/埋点/缺少内容) → 功能模块 → 子模块/组件 → 状态/维度分叉 → 条件 → 叶子`。**标题纯语义名,不带 FP 编号、不带章节号**(FP 仅留文末覆盖核对表)。组件有多个状态/维度时**先拆分叉再挂叶**(宁可深不要扁,目标 5-7 层)。change-xmind 读这个 md 的缩进结构转成 xmind。
28
+
29
+ <workspace_config>
30
+ ## Workspace Root 解析
31
+
32
+ Devflow 由 Runtime 传入当前项目根目录和 feature,不再解析旧版 `WORKSPACE_ROOT` 参数。
33
+
34
+ 路径约定:
35
+ - **共享文件**: `.planning/` — PROJECT.md, STATE.md, navigation/
36
+ - **功能文件**: `.planning/features/{feature}/` — baseline.md, 功能点梳理.md, 测试指导书.md, etc.
37
+ </workspace_config>
38
+
39
+ ## Outputs
40
+
41
+ Always create or update:
42
+
43
+ - `.planning/features/{feature}/测试指导书.md`(**检查点树形态**,非用例字段块形态。供 change-xmind 转 xmind)
44
+
45
+ > 本 skill 产出**检查点树**:每个可测点是树的一句话叶子,按 `测试视角层→功能模块→子模块/组件→状态/维度分叉→条件→叶子` 组织,**标题纯语义名(无 FP/章节号)**。**不产**用例字段块形态(无 优先级/关联/前置/步骤/预期 块)。
46
+
47
+ ## Argument Handling
48
+
49
+ - `<功能名>`: 由 Devflow 当前 feature 提供,用于定位 `.planning/features/{feature}/` 和输出路径。
50
+ - `@PRD文档.md` 或 `语雀URL`: 可选,PRD 原文(feature-breakdown 缺失时作为可测点源头,有则始终读作覆盖核对基准)。
51
+ - `--auto`: do not ask for supplementary information; mark gaps as `待确认` 进 PT-xxx 分支。
52
+
53
+ ## 输出形态全局声明(重要,覆盖所有 slot 的历史措辞)
54
+
55
+ 本 skill 产出**检查点树叶子**(一句话,动词起头,不带字段块,不带"测试"后缀)。`test-type-slots/` 下的 slot 文件是历史用例形态,其中的 `Test case / xxx测试 / Required Fields(前置/步骤/预期)` 是**历史措辞,已废弃**——以 `common-test.md` 和 `writing-guide.md` 的叶子规范为准。
56
+
57
+ slot 的**展开规则逻辑**(界内/界上/界外、正常/异常、状态流转、必填/可编辑/枚举等)原样复用,只是产出形态从"用例"变"叶子"。例如 boundary-test 的"→ 界外: 0 — '分成比例0阻断提交测试'" 实际产出叶子 `- 分成比例输入0时阻断提交`(去掉"测试"后缀,动词起头)。
58
+
59
+ ## Resource Loading
60
+
61
+ Load bundled resources only when needed:
62
+
63
+ - Read `references/writing-guide.md` before writing any checkpoint leaf.
64
+ - Read `references/bug-rules.md` before expanding permissions, read-only fields, calculations, or enum values.
65
+ - Read `references/exception-checklist.md` when the feature involves user flows, payment, third-party callbacks, retries, async status, or data consistency.
66
+ - Read `references/coverage-checklist.md` before Phase 6 coverage check.
67
+ - Read `references/test-type-slots/common-test.md` always — it applies to all checkpoint types.
68
+ - Read `references/test-type-slots/ui-test.md` when expanding `- 样式` / `- 样式验证` nodes.
69
+ - Read `references/test-type-slots/function-test.md` when expanding `- 功能` / `- 功能验证` nodes.
70
+ - Read `references/test-type-slots/scenario-test.md` when expanding normal end-to-end flows.
71
+ - Read `references/test-type-slots/exception-test.md` when expanding exception/error/failure/concurrency nodes. Use `references/exception-checklist.md` to identify exception scenarios.
72
+ - Read `references/test-type-slots/boundary-test.md` when expanding numeric/time/state/capacity boundary nodes.
73
+ - Read `references/test-type-slots/compatibility-test.md` when expanding old/new migration, data initialization, cutover, or legacy compatibility nodes.
74
+ - Read `references/test-type-slots/performance-test.md` when expanding time-bound tasks, large data exports, batch jobs, or concurrency load nodes.
75
+ - Read `references/test-type-slots/data-test.md` when expanding `- 逻辑` / `- 逻辑验证` nodes or calculation rules.
76
+ - Read `references/test-type-slots/api-test.md` when expanding `API/服务` nodes.
77
+ - Read `references/test-type-slots/security-test.md` when expanding `权限` / `审计` nodes.
78
+ - Read `references/test-type-slots/integration-test.md` when expanding cross-module nodes.
79
+ - Read `references/test-type-slots/usability-test.md` when expanding `防重复` / `提示` / `埋点` nodes.
80
+ - Read `assets/output-template.md` before writing the final document.
81
+
82
+ ## Phase 1 — Load Input Documents
83
+
84
+ 源头优先级(feature-breakdown > baseline > PRD 原文),按可用性读:
85
+
86
+ 1. Read `.planning/features/{feature}/功能点梳理.md` — 首选(字段级三维叶子,可测点素材)。
87
+ 2. Read `.planning/requirements/baseline.md` — FP/BR/BC/CR 清单 + 澄清过的规则。
88
+ 3. Read `.planning/PROJECT.md` — 项目上下文 + 代码路径(Phase 1.5 用)。
89
+ 4. **Read PRD 原文**(语雀 URL 或 `@文件.md`)— 始终读,作为覆盖核对的基准。feature-breakdown/baseline 缺失时,PRD 是可测点的唯一源头。
90
+ 5. 若 feature-breakdown 和 baseline 都缺失且无 PRD → 报错,要求用户提供需求来源。
91
+
92
+ ## Phase 1.5 — Code Context Enrichment (Conditional)
93
+
94
+ This phase runs ONLY when PROJECT.md "Project Locations" table contains at least one local path that is not `待确认`, `pending`, `无`, or `none`. If no code paths are available, skip this phase entirely and continue to Phase 2.
95
+
96
+ ### 1.5.1 Load Navigation Files
97
+
98
+ If code paths exist:
99
+ 1. Read `.planning/navigation/INDEX.md`.
100
+ 2. Follow only navigation documents linked from INDEX.md; do not require fixed FRONTEND.md, ADMIN.md, or BACKEND.md filenames.
101
+ 3. Extract concrete directory paths for components, pages, routes, controllers, services, models/entities, and enums/constants from the available navigation documents.
102
+ 4. If a category is absent, record it as unavailable rather than inventing a path.
103
+
104
+ ### 1.5.2 Enum & Status Probe
105
+
106
+ For each place where `bug-rules.md` demands concrete enum values (dropdowns, status fields, type fields):
107
+
108
+ 1. Use `Grep` to search backend source for enum definitions matching status/type fields in the current feature:
109
+ - Search patterns: `enum`, `const.*STATUS`, `statusMap`, `STATUS_MAP`, `status_map`, `Map<String`
110
+ - Limit: `--max-count 10` per pattern
111
+ 2. Use `Grep` to search frontend/admin source for status display mappings:
112
+ - Search patterns: `statusText`, `statusLabel`, `statusMap`, `getText`, `map[`
113
+ - Limit: `--max-count 10` per pattern
114
+ 3. Build concrete enum map: `{ enum_name: [value1, value2, ...] }` with source file + line for traceability.
115
+
116
+ ### 1.5.3 Validation Rules Probe
117
+
118
+ For each form field or input mentioned in feature-breakdown/PRD:
119
+
120
+ 1. Use `Grep` to search frontend/admin source for validation rules:
121
+ - Search patterns: `required`, `maxLength`, `minLength`, `pattern`, `validator`, `rules`
122
+ - Target: form/rule/validate directories identified in navigation files
123
+ - Limit: `--max-count 5` per field
124
+ 2. Extract concrete rules: `{ field_name: { required: true, maxLength: 20, ... } }`
125
+
126
+ ### 1.5.4 API Shape Probe
127
+
128
+ For each API/service node in feature-breakdown/PRD (when `api-test.md` slot applies):
129
+
130
+ 1. Read controller/handler files identified in BACKEND.md.
131
+ 2. Extract: endpoint path, HTTP method, request DTO fields, response DTO fields.
132
+ 3. Build API fact sheet: `{ endpoint: { method, request_fields, response_fields } }`
133
+
134
+ ### 1.5.5 Route & Page Existence Probe
135
+
136
+ For each page/route mentioned in feature-breakdown/PRD:
137
+
138
+ 1. Use `Glob` to verify page component files exist.
139
+ 2. Use `Grep` to check route definitions in router files.
140
+ 3. Record: `{ page_name: { exists: true, path: "..." } | { exists: false } }`
141
+
142
+ ### 1.5.6 Build Code Context Summary
143
+
144
+ Consolidate findings into an internal "Code Context Summary" (NOT written to disk, used internally in Phase 4 to make checkpoint leaves concrete — enum values, validation rules, API shapes all flow into leaf descriptions):
145
+
146
+ ```markdown
147
+ ## Code Context Summary
148
+
149
+ ### Enums Resolved
150
+ | Enum Name | Values | Source File |
151
+ |-----------|--------|-------------|
152
+
153
+ ### Validation Rules Found
154
+ | Field | Rules | Source File |
155
+ |-------|-------|-------------|
156
+
157
+ ### API Endpoints
158
+ | Endpoint | Method | Request Fields | Response Fields |
159
+ |----------|--------|---------------|-----------------|
160
+
161
+ ### Pages Verified
162
+ | Page | Exists | Path |
163
+ |------|--------|------|
164
+
165
+ ### Unresolved (still 待确认)
166
+ | Item | Reason |
167
+ |------|--------|
168
+ ```
169
+
170
+ ## Phase 2 — 提取 PRD 可测点
171
+
172
+ 目标:把 PRD 的每个可测点提取出来,作为检查点树叶子的源头。**不丢弃任何 PRD 提到的项。**
173
+
174
+ ### 2.1 确定源头
175
+
176
+ 按 Phase 1 读取的可用性,feature-breakdown 产出(字段级三维叶子)是首选素材,baseline 补充规则,PRD 原文始终作为覆盖核对基准。真实场景常是用户直接给 PRD(没跑 feature-breakdown),此时 PRD 是唯一源头。
177
+
178
+ ### 2.2 提取可测点清单
179
+
180
+ 从源头逐项提取,每项标注来源章节(用于 Phase 6 反向核对):
181
+
182
+ - **字段**(从字段表):每个字段记录 {字段名, 类型, 是否必填, 是否可编辑, 限制(长度/精度/范围), 枚举值}
183
+ - **规则**(从业务规则/校验段):每条规则(如"概率总和必须100%""兑奖码只能增加不能减少")
184
+ - **流程**(从业务流程图):主流程 + 异常分支,记录每个状态流转
185
+ - **异常**(从异常处理表):每行一个异常场景(如"支付成功但兑奖码分配失败")
186
+ - **配置项**(从配置段):每个可配置项及其约束
187
+ - **非功能**(性能/安全/合规要求)
188
+
189
+ 输出内部 **可测点清单**(不落盘),每项带 PRD 章节号或 FP 编号。
190
+
191
+ ## Phase 3 — 按测试视角分层 + 状态/维度深拆(核心,决定树拓扑)
192
+
193
+ 把可测点组织成检查点树层级(对齐 output-template)。**一级是测试视角分层(非 PRD 模块集合),组件按状态/维度深拆(非直接挂叶),标题纯语义名(无 FP/章节号)。**
194
+
195
+ ### 3.1 一级:测试视角分层(canonical 8 分支,固定顺序,空则省略)
196
+
197
+ 按**测试角度**切一级(不按 PRD 章节号、不按"端"打包所有可测点)。固定 8 分支,**按此顺序**,没内容的省略:
198
+
199
+ 1. **前台** — C 端用户可见页面/交互/状态展示(签到入口、日历页展示、签到执行、连签·断签·预估、账号合并、会员预留等用户视角的功能验证)。
200
+ 2. **后台** — 运营配置/管理页/规则生效/统计/权限矩阵。
201
+ 3. **服务与数据** — 接口与幂等、计算规则、断签判定、奖励计算、数据迁移、账号合并(数据层)、安全(未登录/越权)、性能(响应目标/并发/高峰)。
202
+ 4. **边界场景** — 跨层边界值:时间边界(自然日/0 点切换)、数据边界(封顶/极值)、异常场景(接口超时)、历史兼容(旧数据/旧版用户)。
203
+ 5. **风险覆盖** — 风险点 → 覆盖它的检查点(按名引用)索引 + 完整性结论。**不复制别处叶子原文**(见 3.6 归位规则)。
204
+ 6. **待确认** — PT-xxx(PRD 未明说但该测/依赖外部确认)。
205
+ 7. **埋点** — 曝光/点击等埋点检查(无内容则省略)。
206
+ 8. **缺少内容** — PRD 缺失、需补充的明确占位(无内容则省略)。
207
+
208
+ > **PRD 章节号不再是主键**。PRD 章节号只作 Phase 6 反向核对来源标记,记进覆盖核对表(不进树标题)。
209
+
210
+ ### 3.2 二级:功能模块
211
+
212
+ 每个测试视角层下,按 PRD 章节的**语义名**挂功能模块节点(**不带章节号、不带 FP**):如前台下的 `签到入口 / 日历页展示 / 签到执行 / 连签·断签·预估 / 账号合并 / 会员预留`;后台下的 `配置页 / 规则生效 / 统计 / 权限矩阵`。从 PRD 章节标题提炼语义,去掉编号。
213
+
214
+ ### 3.3 三级:子模块/组件
215
+
216
+ 功能模块下挂子模块或组件节点:如 `签到入口 → 储蓄罐气泡 / 首页个人信息入口`;`日历页展示 → 连签信息区 / 激励提示 / 签到按钮 / 规则 / 日历面板 / 日期状态 / 月份切换 / 加载失败`。
217
+
218
+ ### 3.4 四级:状态/维度分叉(深度主驱动,有自然轴必须拆)
219
+
220
+ 组件下**先按状态或维度拆分叉节点,再挂叶**(宁可深不要扁)。**禁止组件下直接平铺叶子**——只要有 ≥2 个状态/维度就必须建分叉层。
221
+
222
+ - **状态轴**:未签/已签;今日未签/今日已签/历史已签/历史未签/未来日期;新增/编辑/查看;开关开/关;成功/失败。
223
+ - **维度轴**:交互/逻辑调整/展示;数值核算/展示内容;入口/权限;正常场景/异常场景;配置/校验/保存。
224
+
225
+ 例:`储蓄罐气泡 → 交互 / 逻辑调整`;`逻辑调整 → 点击气泡不进行签到`;`签到按钮 → 未签 / 已签`;`日期状态 → 今日未签 / 今日已签 / 历史已签 / 历史未签 / 未来日期`。
226
+
227
+ ### 3.5 五级+:条件 → 叶子
228
+
229
+ 分叉节点下挂条件节点(如 `点击气泡不进行签到`)或直接挂一句话叶子。条件节点下再挂叶子(如 `点击气泡不进行签到 → 星辉余额未变化 / 未产生星辉流水 / 不产生签到记录 / 不出现签到成功提示 / 返回首页气泡仍展示未签到状态`)。**目标 5-7 层、平均 6+。**
230
+
231
+ ### 3.6 跨切层归位规则(检查点放"主要测试角度",不重复)
232
+
233
+ 同一检查点可能既属 UI 层又属边界,按**主要测试角度**归位、**不重复**:
234
+
235
+ - **UI 交互/状态展示验证** → 前台(如"点击今日日期完成签到")。
236
+ - **时间/数据边界值**(自然日切换、封顶、极值) → 边界场景(如"23:59 签到记为当天")。
237
+ - **接口幂等/计算/迁移/安全/性能** → 服务与数据(如"同用户同日并发只发一次奖励")。
238
+ - **风险覆盖层** 只放 `风险 → 覆盖:[检查点名1/检查点名2] + 完整性结论` 的**索引叶子**,引用别处已存在的检查点名,**不复制叶子原文**。例:`奖励重复发放 → 覆盖:重复签到/防重复提交/幂等接口/并发;C 端和接口均覆盖`。
239
+
240
+ > 归位有歧义时,默认归到"最贴近用户可感知行为"的层(UI 感知→前台,纯数据→服务与数据,边界值→边界场景)。
241
+
242
+
243
+ ## Phase 4 — 按 slot 展开叶子
244
+
245
+ 加载相关 `references/test-type-slots/*.md` + `references/bug-rules.md` + `references/exception-checklist.md`。对 Phase 2 的每个可测点,按 slot 规则展开成**一句话叶子检查点**(不是用例)。
246
+
247
+ 展开规则(按可测点类型):
248
+
249
+ - **字段** → boundary-test + function-test slot:必填校验叶 + 可编辑性叶 + 类型校验叶 + 边界值叶(0/负数/极值/精度,**每个独立**) + 枚举值叶(列具体值)
250
+ - **规则** → 校验叶子(把规则转成"X 时阻断/通过"叶)
251
+ - **流程** → scenario-test slot:拆成状态流转节点 + 每状态/关键动作一叶(**不整条一个叶**)
252
+ - **异常** → exception-test slot:每条异常一个叶("X 异常时 Y")
253
+ - **配置项** → 字段验证叶子
254
+ - **权限** → security-test slot + bug-rules 第1条(无权限=**不显示**,不是置灰)
255
+ - **数据/计算** → data-test slot:每个计算规则一叶
256
+
257
+ 应用 bug-rules(7 条)作叶子质量约束:权限不显示、只读默认、计算引原文、枚举具体、同名字段独立、按前后台分模块。
258
+
259
+ **不合并**(writing-guide):边界值/相近操作每个独立成叶。
260
+
261
+ **Code Context 集成**(Phase 1.5 有产出时):用具体枚举值/校验规则/API 形状让叶子具体(不写"枚举待确认",写"枚举值为[现金支付模式,闲鱼模式]")。
262
+
263
+ **FP 编号不进任何节点标题**(`参与模式配置` 而非 `参与模式配置(FP-001)`)。FP 仅在 Phase 6 覆盖核对表里做追溯映射。标题一律纯语义名,同样不带章节号(1.1/2.1)。
264
+
265
+ ## Phase 5 — 输出检查点树
266
+
267
+ 加载 `assets/output-template.md`。按其层级约定写 `.planning/features/{feature}/测试指导书.md`(文件名保留,内容是检查点树形态):
268
+
269
+ 1. 来源信息
270
+ 2. 检查点树(Phase 3-4 组织的 **测试视角层→功能模块→子模块/组件→状态/维度分叉→条件→叶子** 缩进结构,标题纯语义名)
271
+ 3. 覆盖核对表(Phase 6 产出;FP 编号/PRD 章节号**仅存活于此**)
272
+ 4. 待确认测试项(PT-xxx):PRD 未明说但该测的、依赖外部确认的,单列**不丢**
273
+ 5. 末尾 `<!-- gate-review -->` 块
274
+
275
+ change-xmind 读这个 md 的缩进结构转成 xmind。
276
+
277
+ ## Phase 6 — Quality Check (MANDATORY — do not skip)
278
+
279
+ 加载 `references/coverage-checklist.md` + `references/writing-guide.md`。
280
+
281
+ ### 6.1 形态检查
282
+
283
+ - [ ] 所有叶子是一句话,无字段块残留(无 优先级/关联/前置/测试步骤/预期结果)
284
+ - [ ] 边界值未合并(每个边界独立成叶)
285
+ - [ ] 流程已拆成状态流转节点,不是整条一个叶
286
+ - [ ] **顶层是测试视角分层**(前台/后台/服务与数据/边界场景/风险覆盖/待确认/埋点/缺少内容),非 PRD 模块集合、非按"端"打包
287
+ - [ ] **组件下有 ≥2 状态/维度时已建四级分叉层**,未直接平铺叶子(状态/维度深拆)
288
+ - [ ] **标题纯语义名,无 FP 编号、无章节号(1.1/2.1)残留**(FP/章节号只在覆盖核对表)
289
+ - [ ] **深度达标**:平均 ≥6 层、最大 ≥7 层(宁可深不要扁)
290
+ - [ ] 叶子无模糊词("大概"/"可能"/"或"/"应该")
291
+
292
+ ### 6.2 覆盖核对 (MANDATORY — 用户的硬要求)
293
+
294
+ 按 coverage-checklist:
295
+
296
+ - [ ] **PRD 章节覆盖率 100%**(每个 PRD 章节都有对应分支)
297
+ - [ ] FP 覆盖率 ≥95%(P0 FP 100%)
298
+ - [ ] **无静默丢弃**:漏项都进了 PT-xxx 分支或有明确说明
299
+
300
+ ### 6.3 内容检查
301
+
302
+ - [ ] 权限叶子用"不显示"不用"置灰"(bug-rules)
303
+ - [ ] 枚举叶子列了具体值(不写"系统枚举")
304
+ - [ ] 计算叶子引了 baseline/PRD 原文依据
305
+ - [ ] 同名字段不同页面独立检查
306
+
307
+ 不通过 → 补全后重跑,不标"通过"。
308
+
309
+ ## Phase 7 — Review Gate
310
+
311
+ ### 7.1 覆盖审查
312
+
313
+ - PRD 每个章节都有对应分支?
314
+ - 每个 FP 有对应节点?
315
+ - 漏项都进了 PT-xxx(没静默丢)?
316
+
317
+ ### 7.2 形态审查
318
+
319
+ - 抽查 5 个叶子,确认是一句话、无字段块、可观察可验证
320
+ - 抽查 3 个组件,确认按状态/维度拆了四级分叉(非直接平铺叶子)
321
+ - 抽查全树,确认顶层是测试视角分层、标题无 FP/章节号、平均深度 ≥6
322
+
323
+ ### 7.3 Review Conclusion
324
+
325
+ 在 `测试指导书.md` 末尾写 `<!-- gate-review -->` 块,check-items 含:PRD章节覆盖率100% / FP覆盖率≥95% / 无静默丢弃 / 叶子无字段块残留 / 边界未合并 / **顶层测试视角分层** / **组件状态/维度深拆** / **标题无FP/章节号** / **平均深度≥6**。
326
+
327
+ **Do not report completion until Phase 6 覆盖核对通过 且 gate-review check-items 全通过。**
@@ -0,0 +1,213 @@
1
+ # 检查点树:{{功能名称}}
2
+
3
+ > 本文档是**检查点树**(不是测试用例文档)。每个可测点展平成树的叶子,一眼可见、可勾、可数。change-xmind 会把本文档的缩进结构转成 xmind 思维导图。
4
+
5
+ ## 一、来源信息
6
+
7
+ - **需求来源**:`{PRD路径 / baseline路径 / 功能点梳理路径}`
8
+ - **功能名称**:{{功能名称}}
9
+ - **生成时间**:{{日期}}
10
+ - **代码上下文**:{{已使用(枚举/校验/API 来自源码)/ 无本地代码(纯文档模式)}}
11
+
12
+ ## 二、检查点树
13
+
14
+ **层级约定**(change-xmind 按此解析,**目标 5-7 层、平均 6+,宁可深不要扁**):
15
+ - `### 测试视角层`(前台/后台/服务与数据/边界场景/风险覆盖/待确认/埋点/缺少内容) → 一级(空的省略,固定顺序)
16
+ - ` - 功能模块` → 二级(纯语义名,不带章节号)
17
+ - ` - 子模块/组件` → 三级
18
+ - ` - 状态/维度分叉`(未签/已签、今日/历史/未来、交互/逻辑调整、正常/异常...) → 四级(**有 ≥2 个状态/维度必须拆,禁止直接平铺叶子**)
19
+ - ` - 条件` → 五级(可选,如"点击气泡不进行签到")
20
+ - ` - 一句话检查点叶子` → 六级+(最末端)
21
+
22
+ > **标题纯语义名**:不带 FP 编号、不带章节号(1.1/2.1)。FP/章节号只在「三、覆盖核对」表里做追溯。
23
+ > **跨切层归位不重复**:UI 交互验证归前台;时间/数据边界值归边界场景;接口幂等/计算/迁移/安全/性能归服务与数据;风险覆盖层只放「风险→覆盖检查点名索引」,不复制叶子原文。
24
+
25
+ ### 前台
26
+
27
+ - 签到入口
28
+ - 储蓄罐气泡
29
+ - 交互
30
+ - 气泡正常展示
31
+ - 点击气泡拉起签到日历
32
+ - 逻辑调整
33
+ - 点击气泡不进行签到
34
+ - 星辉余额未变化
35
+ - 未产生星辉流水
36
+ - 不产生签到记录
37
+ - 不出现签到成功提示
38
+ - 返回首页气泡仍展示未签到状态
39
+ - 首页个人信息入口
40
+ - 入口
41
+ - N天入口和箭头可见
42
+ - 点击进入签到日历页
43
+ - 签到/未签到
44
+ - 日历页签到后返回首页查看数值变化
45
+ - 天数正常+1
46
+ - 日历页不签到返回首页查看数值变化
47
+ - 天数不变(当前为未签到状态)
48
+ - 日历页展示
49
+ - 连签信息区
50
+ - 展示内容
51
+ - 当日未签到
52
+ - 当天前有连续签到时正常展示连签天数数值
53
+ - 当天前无连续签到时展示0
54
+ - 进行签到后连签天数数值正常+1
55
+ - 当日已签到
56
+ - 同上(已签状态展示连签天数)
57
+ - 数值核算
58
+ - 核算用户连签天数正确性
59
+ - 日历展示对应连签天数状态正常
60
+ - 激励提示
61
+ - 未签
62
+ - 显示"今日签到可得X星辉"
63
+ - X与当前连签对应奖励一致
64
+ - 已签
65
+ - 切换为"明日继续签到可得X星辉"
66
+ - X与明日连签对应奖励一致
67
+ - 签到按钮
68
+ - 未签
69
+ - 按钮高亮
70
+ - 展示"立即签到"
71
+ - 已签
72
+ - 按钮置灰
73
+ - 展示"今日已签到"
74
+ - 日期状态
75
+ - 今日未签
76
+ - 今日日期高亮
77
+ - 展示+X星辉预估
78
+ - 点击今日日期可完成签到
79
+ - 今日已签
80
+ - 显示打勾图标
81
+ - 展示已获得星辉数
82
+ - 点击提示"今日已签到"
83
+ - 历史已签
84
+ - 显示打勾+获得星辉数
85
+ - 点击无反应
86
+ - 历史未签
87
+ - 置灰+打叉标记"未签"
88
+ - 点击无反应
89
+ - 未来日期
90
+ - 浅灰空状态
91
+ - 展示预估星辉数
92
+ - 不可点击
93
+ - 签到执行
94
+ - 正常签到
95
+ - 点击"立即签到"弹窗显示"签到成功+X星辉"
96
+ - 今日日期格变为已签打勾
97
+ - 连签天数+1
98
+ - 星辉余额增加X
99
+ - 重复签到
100
+ - 提示"今日已签到"
101
+ - 星辉余额不增加
102
+ - 今日只有一条有效记录
103
+ - 异常场景
104
+ - 网络异常
105
+ - 展示"请稍后再试"
106
+ - 按钮恢复可点击
107
+ - 账户异常/风控限制
108
+ - 展示可理解失败提示
109
+ - 不新增有效记录
110
+
111
+ ### 后台
112
+
113
+ - 配置页
114
+ - 奖励表编辑
115
+ - 新增行
116
+ - 支持天数+星辉数值
117
+ - 星辉数值校验
118
+ - 须为正整数
119
+ - 输入≤0时校验拦截并提示
120
+ - 保存与校验
121
+ - 点击保存弹出二次确认
122
+ - 弹窗文案"是否保存及次日生效"
123
+ - 校验拦截
124
+ - 签到天数重复时阻止保存并提示
125
+ - 规则文案为空时阻止保存且字段标红
126
+ - 保存中按钮置灰防重复提交
127
+ - 权限矩阵
128
+ - 有配置权限运营
129
+ - 菜单可见
130
+ - 编辑/保存允许
131
+ - 只读运营
132
+ - 菜单可见
133
+ - 编辑/保存不显示按钮
134
+ - 无权限账号
135
+ - 菜单不显示
136
+
137
+ ### 服务与数据
138
+
139
+ - 签到接口与幂等
140
+ - 签到提交接口
141
+ - 成功时新增一条有效记录
142
+ - 成功时新增一笔星辉流水
143
+ - 并发重复请求幂等只发一次
144
+ - 奖励计算
145
+ - 按连签天数匹配后台配置的奖励阶梯
146
+ - 超过封顶天数固定封顶值
147
+ - 同用户同日只一条记录+一笔流水
148
+ - 安全
149
+ - 未登录态
150
+ - 调用签到接口被拒绝
151
+ - 不写记录
152
+ - 越权访问
153
+ - 用A登录态请求B数据被拒绝
154
+
155
+ ### 边界场景
156
+
157
+ - 时间边界
158
+ - 23:59签到记为当天(北京时间自然日)
159
+ - 0:01后显示昨日已签、今日可签
160
+ - 数据边界
161
+ - 超过封顶天数奖励不变
162
+ - 连签天数继续累加
163
+
164
+ ### 风险覆盖
165
+
166
+ - 奖励重复发放
167
+ - 覆盖:重复签到/防重复提交/幂等接口/并发
168
+ - C端和接口均覆盖
169
+ - 规则变更追溯错误
170
+ - 覆盖:当天旧规则/次日新规则/历史不追溯
171
+ - 完整覆盖
172
+
173
+ ### 待确认
174
+
175
+ - {{如"统计维度和导出字段范围——PRD未细化"}}
176
+ - {{如"压测并发量标准——PRD只说需评估未给数值"}}
177
+
178
+ ## 三、覆盖核对
179
+
180
+ > FP 编号 / PRD 章节号**仅存活于此表**,做追溯映射(不进树标题)。
181
+
182
+ | PRD章节 / FP | 是否有对应分支 | 落点(测试视角层/功能模块) |
183
+ |-------------|--------------|--------------------------|
184
+ | 3.1 签到入口 / FP-001 | 是 | 前台/签到入口 |
185
+ | 3.2 日历结构 / FP-002 | 是 | 前台/日历页展示 |
186
+ | 3.4 签到逻辑 / FP-004 | 是 | 前台/签到执行 + 服务与数据/奖励计算 |
187
+ | 5.1 后台配置 / FP-012 | 是 | 后台/配置页 |
188
+
189
+ PRD章节覆盖率: X / Y (Z%)
190
+ FP覆盖率: X / Y (Z%)
191
+
192
+ ## 四、待确认测试项(PT-xxx)
193
+
194
+ PRD 未明说但测试建议覆盖、或依赖外部确认的项——**不丢弃,单列此处**(也对应树上 `### 待确认` 分支):
195
+
196
+ - PT-001 {{如"并发签到的具体并发量级——PRD只说同用户并发只发一次"}}
197
+ - PT-002 {{如"后台配置是否按平台/组织灰度——PRD 4.2与5.2表述冲突"}}
198
+
199
+ <!-- gate-review
200
+ review-status: 通过 / 不通过
201
+ unresolved-items: {{未通过的检查项,无则写"无"}}
202
+ reviewer: workflow-gen-test-guide
203
+ check-items:
204
+ - PRD章节覆盖率100%: 通过/不通过
205
+ - FP覆盖率≥95%: 通过/不通过
206
+ - 无静默丢弃项(漏项都进了PT-xxx): 通过/不通过
207
+ - 叶子无字段块残留(无优先级/关联/步骤/预期): 通过/不通过
208
+ - 边界值未合并(每个边界独立成叶): 通过/不通过
209
+ - 顶层测试视角分层(非PRD模块集合): 通过/不通过
210
+ - 组件状态/维度深拆(四级分叉非平铺叶子): 通过/不通过
211
+ - 标题无FP/章节号(纯语义名): 通过/不通过
212
+ - 平均深度≥6: 通过/不通过
213
+ -->
@@ -0,0 +1,9 @@
1
+ # 核心规避规则(来自真实 Bug)
2
+
3
+ 1. **权限控制统一为"不显示"** — 无权限时操作按钮不显示,而非置灰或不可点击。测试用例必须验证按钮"不显示",不能写成"不可点击"或"置灰"
4
+ 2. **只读字段不可推断为可编辑** — 功能点梳理中未明确说明可编辑的字段,测试用例中默认为"只读展示,不可编辑"
5
+ 3. **计算规则必须有原文依据** — 金额正负、余额计算、统计口径等规则必须来自 baseline 或功能点梳理,不能推断。测试用例中的计算公式必须标注来源(BR-xxx 或 Q-xxx)
6
+ 4. **同名字段在不同页面定义可能不同** — 同一字段名在不同页面可能有不同逻辑,测试用例不能跨页面复用字段定义
7
+ 5. **评审纪要的结论必须严格遵循** — 评审纪要中的规则优先级最高,测试用例必须完整体现
8
+ 6. **下拉选项必须列出具体枚举值** — 测试用例中下拉框的可选项必须列出具体值,不能写"系统枚举"或"待确认枚举"
9
+ 7. **功能模块按前后台分类组织** — C 端归 C 端,后台归后台,API/服务归 API/服务
@@ -0,0 +1,63 @@
1
+ # 覆盖率检查清单(PRD章节 / FP 分支覆盖核对)
2
+
3
+ ## 目标
4
+
5
+ 保证 PRD 的每个章节、每个功能点(FP)、每个可测点都在检查点树中有对应分支或叶子——**不因"PRD没明说"就丢弃**。漏的项必须进"待确认测试项(PT-xxx)"分支,不允许静默消失。
6
+
7
+ ## 步骤 1:提取核对源清单
8
+
9
+ 从输入(PRD 原文 优先 / baseline.md / 功能点梳理.md)提取三份清单:
10
+
11
+ 1. **PRD 章节清单**:所有章节号 + 标题(如 `5.1 后台计划配置`、`5.1.2 计划类型`、`5.2.3 异常处理`)
12
+ 2. **FP 清单**:baseline 的所有 `FP-xxx` + 标题(若有 baseline)
13
+ 3. **可测点清单**:每个章节下的 字段/规则/流程/异常/配置项(从 PRD 的字段表、业务流程、异常处理表、配置项表逐项提取)
14
+
15
+ ## 步骤 2:反向核对
16
+
17
+ 对步骤 1 的每一项,核对是否在检查点树中有对应分支/叶子:
18
+
19
+ - **PRD 章节核对**:每个章节(如 `5.1.2 计划类型字段表`)→ 树中是否有对应模块/文件夹
20
+ - **FP 核对**:每个 `FP-xxx` → 树中是否有 `(FP-xxx)` 节点
21
+ - **可测点核对**:
22
+ - 字段 → 是否有 必填校验/可编辑性/类型/边界/枚举 叶子
23
+ - 规则 → 是否有 校验叶子(如"概率总和100%")
24
+ - 流程 → 是否有 正常场景 + 异常场景 叶子
25
+ - 异常 → 是否有 异常场景叶子(每条异常一行)
26
+
27
+ ## 步骤 3:漏项处理(不丢弃,这是硬要求)
28
+
29
+ 漏的项**不删除**,按类型处理:
30
+
31
+ | 漏项类型 | 处理 |
32
+ |---------|------|
33
+ | PRD 明确提到但展开不全 | 补叶子 |
34
+ | PRD 没明说但测试该覆盖(并发/越权/时区/幂等) | 进"待确认测试项(PT-xxx)"分支,标注"PRD未明说,建议补充" |
35
+ | 明确不在范围(预留功能) | 进"待确认"分支,标注"仅验证展示" |
36
+ | 依赖外部确认(视觉稿/协议文案) | 进"待确认"分支,标注依赖项 |
37
+
38
+ **绝不允许:静默丢弃 PRD 的任何一项。**
39
+
40
+ ## 步骤 4:输出覆盖核对表
41
+
42
+ 写入检查点树末尾(在"待确认测试项"分支之前):
43
+
44
+ ```markdown
45
+ ## 覆盖核对
46
+
47
+ | PRD章节 / FP | 是否有对应分支 | 落点(测试视角层/功能模块,纯语义名) |
48
+ |-------------|--------------|------|
49
+ | 5.1 后台计划配置 | 是 | 后台/配置页 |
50
+ | 5.2.3 库存校验 | 是 | 前台/购买限制 或 服务与数据/库存扣减 |
51
+ | FP-009 库存扣减 | 是 | 服务与数据/库存扣减 |
52
+ | 5.3.4 盲盒抽取-单次 | 是 | 前台/支付抽取 |
53
+
54
+ PRD章节覆盖率: X / Y (Z%)
55
+ FP覆盖率: X / Y (Z%)
56
+ ```
57
+
58
+ ## 覆盖率阈值
59
+
60
+ - **PRD 章节覆盖率:必须 100%**(每个 PRD 章节都有对应分支——这是用户的硬要求)
61
+ - FP 覆盖率:≥ 95%(P0 FP 必须 100%)
62
+ - 漏项必须有去向(补叶子 或 进 PT-xxx),不允许"未覆盖且无说明"
63
+ - 低于阈值 → gate-review 标"不通过",补全后重跑
@@ -0,0 +1,37 @@
1
+ # 异常场景检查清单
2
+
3
+ 当功能涉及用户流程、支付、第三方回调、重试、异步状态或数据一致性时,必须检查以下场景。
4
+
5
+ ## 用户主动操作类
6
+ - [ ] 用户取消操作如何处理
7
+ - [ ] 用户退出页面如何处理
8
+ - [ ] 用户重复操作如何处理
9
+ - [ ] 用户快速连续点击如何处理
10
+
11
+ ## 系统超时类
12
+ - [ ] 支付超时如何处理
13
+ - [ ] 接口超时如何处理
14
+ - [ ] 回调超时如何处理
15
+ - [ ] 任务执行超时如何处理
16
+
17
+ ## 数据异常类
18
+ - [ ] 余额不足如何处理
19
+ - [ ] 参数错误如何处理
20
+ - [ ] 数据不一致如何处理
21
+ - [ ] 数据为空时展示什么
22
+ - [ ] 订单量为 0 时展示什么
23
+
24
+ ## 第三方异常类
25
+ - [ ] 回调失败如何重试
26
+ - [ ] 状态不一致如何同步
27
+ - [ ] 主动查询机制
28
+
29
+ ## 绕过场景类
30
+ - [ ] 站外支付如何识别
31
+ - [ ] 跳过中间环节如何处理
32
+ - [ ] 直接 URL 访问被拦截
33
+
34
+ ## 并发场景类
35
+ - [ ] 同一资源被两人同时操作
36
+ - [ ] 回刷任务重复执行(幂等)
37
+ - [ ] 配置修改与任务执行并发