@gordon.gan/specflow 1.8.3-beta → 1.8.5-beta
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.
- package/dist/cli/commands/document-run.js +6 -3
- package/dist/core/document/engine.js +46 -24
- package/dist/core/document/gates.js +33 -7
- package/dist/core/document/lint.d.ts +37 -1
- package/dist/core/document/lint.js +201 -6
- package/dist/core/document/render.d.ts +7 -4
- package/dist/core/document/render.js +100 -53
- package/dist/core/document/schemas.d.ts +100 -0
- package/dist/core/document/schemas.js +12 -1
- package/package.json +1 -1
- package/prompts/document/map/api-design.md +11 -3
- package/prompts/document/map/architecture.md +1 -1
- package/prompts/document/map/component-design.md +2 -0
- package/prompts/document/map/core-flow.md +4 -1
- package/prompts/document/map/core-logic.md +10 -3
- package/prompts/document/map/data-model.md +5 -2
- package/prompts/document/map/requirement.md +6 -1
- package/prompts/document/map/test-strategy.md +1 -1
- package/prompts/document/outline/general.md +9 -0
- package/prompts/document/shared/grounding.md +7 -0
- package/prompts/shared/artifact-language.md +9 -0
- package/skills/specflow-techdoc-synth/SKILL.md +12 -9
- package/templates/document/chapters/api-design.yaml +14 -5
- package/templates/document/chapters/architecture.yaml +1 -2
- package/templates/document/chapters/core-flow.yaml +2 -0
- package/templates/document/chapters/core-logic.yaml +8 -6
- package/templates/document/chapters/data-model.yaml +9 -5
- package/templates/document/chapters/mvp-boundary.yaml +0 -3
- package/templates/document/chapters/requirement.yaml +5 -7
- package/templates/document/chapters/tech-selection.yaml +0 -3
- package/templates/document/chapters/test-strategy.yaml +2 -5
- package/templates/document/chapters/ui-design.yaml +0 -3
- package/templates/document/profiles/approve.yaml +3 -2
- package/templates/document/profiles/feature.yaml +1 -1
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
你是方案文档撰写员。按大纲要点"填空题"式展开本章,逐要点填充,不自由发挥。
|
|
4
4
|
- kind=entity|mixed 的要点 → 产出结构化契约实体(JSON 块 ```json {"interfaces": [...], "tables": [...], "decisions": [...]} ```)
|
|
5
5
|
- kind=narrative|mixed 的要点 → 产出叙述 Markdown
|
|
6
|
-
- 遵循 prompts/shared/artifact-language.md 的中文叙述规范(简要;怎么做用 1. 2. 3
|
|
6
|
+
- 遵循 prompts/shared/artifact-language.md 的中文叙述规范(简要;怎么做用 1. 2. 3.;**正文中文化**)
|
|
7
7
|
- 禁止 stub(TODO/待补充/此处省略);禁止含糊词
|
|
8
8
|
- **事实从工程数据源提取,意图向用户询问,推理由你完成**(见 `prompts/document/shared/grounding.md`):本章涉及的接口字段/表列/组件名/依赖版本必须来自工程,缺失的关键信息列入缺口清单一次性询问用户,禁止编造
|
|
9
|
+
|
|
10
|
+
## 需求章节硬规则
|
|
11
|
+
|
|
12
|
+
1. **不写 Given-When-Then 验收小节**:验收标准已从方案文档移除(可读性整改);验收断言由「测试策略」章承接。本章只写功能需求描述、目标与边界(MVP 范围、跨仓依赖、约束)。
|
|
13
|
+
2. **目标可验证**:每个目标一句"做成什么状态",但验证落在测试策略章,不在本章列验收表。
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
2. **测试环境与数据(T2)**:测试环境地址、测试数据准备(fixture/seed/工厂)、Mock 说明(接口 Mock/第三方 Mock)。
|
|
15
15
|
|
|
16
|
-
3.
|
|
16
|
+
3. **验收断言承接(T3,可读性整改)**:验收标准不再单独成章——把 Given-When-Then 断言**折叠进本表**,每行测试加「验收依据」列(如「运行 → 恰一个作业(job_count=1)」「非法引用类型 → 报错且不入队」),确保需求章的目标可验证且可追溯。
|
|
17
17
|
|
|
18
18
|
4. **前端测试金字塔(T4)**:单元 60% / 组件 30% / E2E 10% 的投入比例;组件测试方式写明——Snapshot + 交互(render + fireEvent/userEvent 断言行为),关键组件/页面覆盖率目标。
|
|
19
19
|
|
|
@@ -44,3 +44,12 @@
|
|
|
44
44
|
5. **source_segments**:要点尽量标注来源段 id(来自全局摘要的段 id)。
|
|
45
45
|
6. **每要点引用 ≤3 个实体**。
|
|
46
46
|
7. **要点数量**:每章 2-5 个要点,覆盖该章必须覆盖的维度。
|
|
47
|
+
8. **接口与数据分工(P11/P13)**:`api-design` 与 `data-model` 同时被选中时按「接口与数据设计 → 数据模型」顺序并列两章,**不合并**:
|
|
48
|
+
- 接口契约(请求/响应字段表、示例、错误表)内联进「接口与数据设计」章(渲染为「接口明细」);
|
|
49
|
+
- **数据库表必须由「数据模型」章节组件承载**(表结构与 DDL、字段说明、存量填充 G3、回滚 G4、契约-表映射)——涉及持久化时必须选入 `data-model` 章,禁止把表塞进接口章或忽略;
|
|
50
|
+
- 契约-表映射(每接口 ↔ 读写表/列)写在「数据模型」章,接口约定与数据库通过映射表对齐。
|
|
51
|
+
9. **完整性骨架(P7)**:涉及 ≥2 仓的合成文档必须含 `术语与约定`、`非目标汇总`、`风险与开放问题` 章节位。**不设决策记录(ADR)章节**——决策理由沉淀在技术选型(否决/备选列)与风险章即可,正文不得使用 `[D#]` 引用。
|
|
52
|
+
10. **实体注册表增强**:接口实体注册时记录 `side`(console/worker/internal)、`consumers`、`producers`(仓名);同一 method+path 只注册一个实体,`<repo>_<id>` 前缀仅作追溯别名(防 `duplicate_contract`)。
|
|
53
|
+
11. **主流程含图(P12)**:`core-flow` 章必须输出整体流程图(含失败分支)+ 时序图 + 失败路径决策图,图必须有文字说明。
|
|
54
|
+
12. **文档头与目录**:最终文档由引擎确定性渲染元信息头(标题/参与仓/生成时间)与目录;大纲只决定章节序与要点,不写文档头。
|
|
55
|
+
13. **契约质量**:接口要点要求示例带真实 JSON body(`request_example`/`success_response_example`/`failure_response_example`)、请求/响应字段分列、错误表按 backend/guard/internal 分类。
|
|
@@ -82,3 +82,10 @@ OpenAPI(`openapi.yaml`/`swagger.json` 等)、proto3(`*.proto`)、SQL DDL
|
|
|
82
82
|
- 组件/页面:组件名、路由路径、状态 store 名应来自工程;页面清单可与用户核对。
|
|
83
83
|
- 性能:基准数值必须来自实测(或标注"待实测"),禁止编造 LCP/包体数字。
|
|
84
84
|
- 依赖升级:当前版本/目标版本来自 package.json;升级理由与收益向用户确认。
|
|
85
|
+
|
|
86
|
+
## 七、整体性文档写作约定(P9/P11,所有章节通用)
|
|
87
|
+
|
|
88
|
+
1. **首次定义、后续引用**:术语、关键事实(幂等键、零 DDL、禁直连等)只在首次出现处定义,后续一律引用,禁止跨章重复整段(防 P9 重复)。**不设决策记录(ADR)章、不使用 `[D#]` 引用**——决策理由沉淀在技术选型(否决/备选列)与风险章。
|
|
89
|
+
2. **接口与数据同源**:接口字段与表列来自同一工程数据源;写契约-表映射时,字段↔列必须一一对齐,禁止接口讲接口、表讲表(P11)。
|
|
90
|
+
3. **主流程必有图**:涉及多步流程的章节(core-flow 等)必须给出 mermaid 图(整体流程图/时序图),图必须有文字说明(P12)。
|
|
91
|
+
4. **某仓无内容则不出现**:跨仓写作时,某仓在某维度无内容(如后端无 UI 组件)就**不写该仓的占位小节**,只写真实存在的内容(防"无 X"占位)。
|
|
@@ -45,5 +45,14 @@ When `artifacts.language` is `zh-CN`:
|
|
|
45
45
|
1. **简要** — 一句一事;禁止套话与大段散文。
|
|
46
46
|
2. **有条理** — 「怎么做 / 怎么走 / 怎么处理」写成 **1. 2. 3.**,每步一句。
|
|
47
47
|
3. **不改结构** — 表格、Mermaid、DDL、HTTP 示例、协议标记保持原样。
|
|
48
|
+
4. **正文中文化(可读性整改)** — 正文叙述必须用**中文业务术语**替代代码标识符:
|
|
49
|
+
- 接口/表用中文名(如「调试执行接口」「逐步结果上报接口」「场景资产表」「作业表」),编号(I1/T3)只出现在接口总览表与字段表。
|
|
50
|
+
- 字段/配置用中文(`ref_type`→引用类型、`step_count`→步骤数、`job_type`→作业类型、`runtime_payload`→运行时信封、`param_overrides`→参数覆盖、`lease_epoch`→租约世代、`step_uid`→步骤标识、`step_order`→步骤序号)。
|
|
51
|
+
- 代码标识符只允许出现在:术语与约定表、接口字段表、JSON/HTTP 示例、代码块内。
|
|
52
|
+
- 首次出现确需给出原名时用括号注(如「运行时信封(runtime_payload)」)。
|
|
53
|
+
5. **有条理 + 图文结合(可读性整改)**:
|
|
54
|
+
- 叙述内容多的章节**分条输出**:涉及步骤/规则/流程用 **1. 2. 3.** 编号,一句一条,禁止大段散文堆砌。
|
|
55
|
+
- 流程 / 状态流转 / 结构 / 决策分支类内容**必须配 Mermaid 图**(flowchart / sequenceDiagram / stateDiagram-v2),图紧跟一段文字说明——**图文成对**,禁止只有图没有文字、也禁止长叙述没有任何图。
|
|
56
|
+
- 图粒度:一图一事,多流程拆多图。
|
|
48
57
|
|
|
49
58
|
`en`: keep prose brief; numbered steps for how-to. Same table/diagram exception.
|
|
@@ -47,18 +47,18 @@ Cursor: `specflow:techdoc-synth run ...`; Codex: `$specflow-techdoc-synth run ..
|
|
|
47
47
|
- 无 `--text` → **回退 `approve`**(原合成默认,不打断流程,保持向后兼容)。
|
|
48
48
|
5. 可选:`specflow techdoc detect --text "..."` 查看确定性关键词识别的结果作为参考。
|
|
49
49
|
|
|
50
|
-
> 场景识别决定合成文档的**章节结构**(如 bugfix → reproduce/root-cause/fix;feature → requirement/test-strategy;poc → research/poc-demo/benchmark/tech-selection;migration → compat-migration/migration-guide
|
|
50
|
+
> 场景识别决定合成文档的**章节结构**(如 bugfix → reproduce/root-cause/fix;feature → requirement/test-strategy;poc → research/poc-demo/benchmark/tech-selection;migration → compat-migration/migration-guide)。跨仓合成规则(统一大纲/契约单一定义/整体性组织/全局视角/跨仓依赖)对任何 profile 都适用。
|
|
51
51
|
|
|
52
52
|
## 与 `techdoc approve --bundle` 的区别(为什么用 synth)
|
|
53
53
|
|
|
54
54
|
| 维度 | `approve --bundle`(拼接) | `techdoc-synth`(合成) |
|
|
55
55
|
|---|---|---|
|
|
56
56
|
| 大纲 | 每仓独立 | **一次统一大纲**,章节覆盖所有仓 |
|
|
57
|
-
| 契约实体 | 每仓独立 I1/T1,跨仓冲突 |
|
|
58
|
-
| 章节内容 | 各仓各写各的 |
|
|
57
|
+
| 契约实体 | 每仓独立 I1/T1,跨仓冲突 | **单一定义 + 追溯别名**(`<repo>_<id>`),同一端点不重复 |
|
|
58
|
+
| 章节内容 | 各仓各写各的 | **整体性叙述**(仓归属用 `[repo]` 标注),某仓无内容则不出现 |
|
|
59
59
|
| 全局视角 | 无 | goal 写多仓总目标;closed-loop/implementability 跨仓统一结论 |
|
|
60
60
|
| 跨仓依赖 | 不识别 | 显式标注「跨仓依赖」(接口调用/数据共享/发布顺序) |
|
|
61
|
-
| 质量门禁 | 无 |
|
|
61
|
+
| 质量门禁 | 无 | **整体性门禁**(validate 强制:全文仓覆盖 `repo_coverage_missing` + 空壳小节 `repo_section_stub` + 契约质量 lint) |
|
|
62
62
|
|
|
63
63
|
> 原有多仓多产物(`techdoc approve --workspace-root ... --bundle` 各仓独立文档 + 主仓合订)**保持不变**;`techdoc-synth` 是新增的"真正合成"路径,两者并存。
|
|
64
64
|
|
|
@@ -96,17 +96,20 @@ run [--workspace-root <root>]
|
|
|
96
96
|
## 跨仓合成规则(必须遵守,validate 强制)
|
|
97
97
|
|
|
98
98
|
1. **统一大纲**:一次生成一份 outline,章节覆盖所有仓,**不按仓分章**(跨仓对比/汇总放进对应章节)。
|
|
99
|
-
2.
|
|
100
|
-
3.
|
|
101
|
-
4. **全局视角**(若所选 profile 包含对应章节):goal 写多仓总目标与边界;tech-selection
|
|
99
|
+
2. **契约单一定义**:同一物理端点(method+path)只定义一个实体,用 `side`(console/worker/internal)与 `consumers`/`producers`(仓名)标注面与消费方/生产方;`<repo>_<id>` 前缀仅作**追溯别名**,禁止不同仓重复定义同一接口(validate 以 `duplicate_contract` 拦截)。
|
|
100
|
+
3. **整体性组织(替代按仓分节)**:每章按主题写成一段整体叙述,仓归属用内联 `[repo]` 标注或表格「归属」列;**禁止**为无内容的仓写占位小节(如「某仓无 UI」,validate 以 `repo_section_stub` 拦截);validate 以全文级 `repo_coverage_missing` 防某仓被概括掉。
|
|
101
|
+
4. **全局视角**(若所选 profile 包含对应章节):goal 写多仓总目标与边界;tech-selection 对比各仓技术方案;**接口与数据分工**——接口契约内联进「接口与数据设计」章(接口明细),**数据库表必须由「数据模型」章组件承载**(DDL/存量 G3/回滚 G4),契约-表映射写数据模型章;closed-loop 跨仓统一闭环检查;implementability 跨仓统一可实施性评估。其他场景章节(如 reproduce/root-cause/fix、requirement/test-strategy、research/poc-demo/benchmark)同样给出跨仓结论。
|
|
102
102
|
5. **跨仓依赖/风险**:涉及仓间依赖(接口调用/数据共享/发布顺序)时显式标注「跨仓依赖」。
|
|
103
|
+
6. **完整性骨架**:合成文档必须含术语与约定表、非目标汇总、风险与开放问题。**不设决策记录(ADR)章节、不用 `[D#]` 引用**——决策理由沉淀在技术选型(否决/备选列)与风险章。
|
|
104
|
+
7. **契约质量**:接口示例带真实 JSON body(空壳示例拦截)、请求/响应字段分列、错误表按 backend/guard/internal 分类。
|
|
105
|
+
8. **主流程必须含图**:主业务流程章输出整体流程图(含失败分支)+ 时序图 + 失败路径决策图。
|
|
103
106
|
|
|
104
|
-
> 门禁是确定性的:`synthesize` 在 workRoot 写入 `repos.json`,`document validate`
|
|
107
|
+
> 门禁是确定性的:`synthesize` 在 workRoot 写入 `repos.json`,`document validate` 读取后执行**整体性组织门禁**(全文级仓覆盖 `repo_coverage_missing` + 空壳小节 `repo_section_stub`)与契约质量 lint(`duplicate_contract`/`request_example_missing`/`response_example_missing`/`data_contract_mapping_missing`/`forward_decision_ref`)。非 synthesize 工作目录(`document run` / `approve --bundle`)不写 repos.json,跨仓门禁不触发。
|
|
105
108
|
|
|
106
109
|
## 产物
|
|
107
110
|
|
|
108
111
|
- `<workspaceRoot>/.specflow/document-synthesized/document.md`(可用 `--work-root` 指定输出目录)
|
|
109
|
-
- `repos.json
|
|
112
|
+
- `repos.json`:参与合成的仓清单(整体性门禁依据,自动写入)
|
|
110
113
|
|
|
111
114
|
## 说明
|
|
112
115
|
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 接口与数据设计(候选;依赖架构)
|
|
2
|
+
# 接口契约(分层契约 + 前端对接)在本章内联呈现(渲染为「接口明细」);数据库表由「数据模型」章组件承载,
|
|
3
|
+
# 契约-表映射写「数据模型」章。跨仓合成遵循 buildSynthRules:接口单一定义(side/consumers/producers)、
|
|
4
|
+
# 字段表请求/响应分列、示例带真实 JSON body、错误表按 backend/guard/internal 分类。
|
|
2
5
|
id: api-design
|
|
3
|
-
title:
|
|
6
|
+
title: 接口与数据设计
|
|
4
7
|
when: input.containsApiChange
|
|
5
8
|
depends_on: [architecture]
|
|
6
9
|
outline_points:
|
|
7
|
-
- { id: O1, text:
|
|
8
|
-
- { id: O2, text:
|
|
10
|
+
- { id: O1, text: 接口总览与调用方/鉴权(含面/消费方/生产方), required: true, kind: narrative }
|
|
11
|
+
- { id: O2, text: 逐接口请求/响应字段表分列 + 请求/成功响应示例(真实 JSON body), required: true, kind: mixed }
|
|
9
12
|
- { id: O3, text: 每个接口 ≥1 失败示例(G2), required: true, kind: entity }
|
|
10
|
-
- { id: O4, text:
|
|
13
|
+
- { id: O4, text: 错误码映射(backend/guard/internal 分类), required: true, kind: entity }
|
|
11
14
|
- { id: O5, text: 前端请求封装(拦截器/重试/缓存/DTO→VO), required: false, kind: narrative }
|
|
12
15
|
- { id: O6, text: 前端错误处理(错误码统一/Loading-Empty-Error 状态), required: false, kind: narrative }
|
|
13
16
|
- { id: O7, text: 接口 Mock 与联调(Mock 策略/契约先行,前端可并行开发), required: false, kind: narrative }
|
|
@@ -17,13 +20,19 @@ entities:
|
|
|
17
20
|
each:
|
|
18
21
|
failure_example: required
|
|
19
22
|
errors_table: required
|
|
23
|
+
request_example: required
|
|
24
|
+
success_response_example: required
|
|
20
25
|
narratives:
|
|
21
26
|
design_notes: required
|
|
22
27
|
gates:
|
|
23
28
|
- 禁止「暂定/如/实现时」接口名
|
|
24
29
|
- 每个接口必须 ≥1 失败示例
|
|
25
30
|
- 接口编号稳定可交叉引用
|
|
31
|
+
- 请求字段与响应字段分列(禁止混成一张表)
|
|
32
|
+
- POST/PUT/PATCH 必须给真实 JSON 请求示例(无请求体显式标注「无请求体」);有响应字段必须有成功响应示例
|
|
33
|
+
- 错误表按 backend(gRPC→HTTP 映射)/ guard(前端守卫行为)/ internal(Worker 内部语义)分类
|
|
26
34
|
- 涉及前端对接时,请求封装与错误码统一方案必须与契约对齐(R5,字段名/错误码禁各写各的)
|
|
27
35
|
- 前端接口 Mock 必须与契约一致(禁 Mock 一套、真实接口另一套)
|
|
36
|
+
- 涉及表实体时,契约-表映射由「数据模型」章给出(本处指引引用,不在本章写表 DDL)
|
|
28
37
|
map_prompt: prompts/document/map/api-design.md
|
|
29
38
|
output_budget_tokens: 8000
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# 架构设计(0→1 候选;依赖技术选型;扩展:C4
|
|
1
|
+
# 架构设计(0→1 候选;依赖技术选型;扩展:C4 分层)
|
|
2
2
|
id: architecture
|
|
3
3
|
title: 架构设计
|
|
4
4
|
when: input.hasLogic && input.hasBackend
|
|
@@ -8,7 +8,6 @@ outline_points:
|
|
|
8
8
|
- { id: AR2, text: 核心组件与职责边界, required: true, kind: narrative }
|
|
9
9
|
- { id: AR3, text: 架构一致性自检, required: false, kind: narrative }
|
|
10
10
|
- { id: AR4, text: C4 分层(Context 系统上下文 / Container 容器 / Component 组件),标注层级与依赖方向, required: false, kind: narrative }
|
|
11
|
-
- { id: AR5, text: 关键架构决策记录(ADR:背景/决策/后果/备选,沉淀 tech-selection 的 decisions), required: false, kind: narrative }
|
|
12
11
|
entities: {}
|
|
13
12
|
narratives:
|
|
14
13
|
architecture_notes: required
|
|
@@ -18,6 +18,8 @@ narratives:
|
|
|
18
18
|
core_flow: required
|
|
19
19
|
gates:
|
|
20
20
|
- 主链路时序图必须 Mermaid 源码(```mermaid sequenceDiagram)+ 可渲染(diagram as code)
|
|
21
|
+
- 必须含整体流程图(```mermaid flowchart,覆盖编排→编译→入队→执行→上报→展示,含失败分支)
|
|
22
|
+
- 失败路径/决策部分必须单独成图(执行失败 vs 上报失败分支)
|
|
21
23
|
- 时序图必须有文字说明(逐消息/逐分支),禁止只有图无文字
|
|
22
24
|
- 每条主链路必须画异常/失败分支(禁只画 happy path)
|
|
23
25
|
- 有写操作的链路必须给幂等/并发结论(禁「前端按钮防抖」当幂等方案)
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 关键实现规则(候选;依赖主业务流程——渲染紧随其后的"下一环节";可读性整改:承接上下文、只写图中未覆盖规则)
|
|
2
2
|
id: core-logic
|
|
3
|
-
title:
|
|
3
|
+
title: 关键实现规则
|
|
4
4
|
when: input.hasLogic
|
|
5
|
-
depends_on: [
|
|
5
|
+
depends_on: [core-flow]
|
|
6
6
|
outline_points:
|
|
7
|
-
- { id: LOG1, text:
|
|
8
|
-
- { id: LOG2, text:
|
|
7
|
+
- { id: LOG1, text: 编译规则(排序/展开/校验/信封冻结), required: true, kind: narrative }
|
|
8
|
+
- { id: LOG2, text: 执行与上报规则(信封校验/共享变量/失败策略细节/写入顺序/幂等键/abort), required: true, kind: narrative }
|
|
9
9
|
entities: {}
|
|
10
10
|
narratives:
|
|
11
11
|
core_logic: required
|
|
12
12
|
gates:
|
|
13
|
+
- 开头必须承接主业务流程上下文(一句话说明本规则回答"每一步实现怎么落地"),禁止孤立开头
|
|
14
|
+
- 只写主流程图未覆盖的细节;与主流程/接口章重复的内容必须用交叉引用
|
|
13
15
|
- 超 5 行流程必须 Mermaid(G1)
|
|
14
|
-
-
|
|
16
|
+
- 正文中文化(代码标识符只允许在术语表/字段表/示例)
|
|
15
17
|
map_prompt: prompts/document/map/core-logic.md
|
|
16
18
|
output_budget_tokens: 3000
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 数据模型(候选;依赖接口设计)——数据库表的唯一承载章节组件
|
|
2
|
+
# 涉及数据库的表时本组件必选(when hasPersistence):表结构与 DDL、字段说明、存量填充 G3、回滚 G4、
|
|
3
|
+
# 契约-表映射。接口契约本体在「接口与数据设计」章(接口明细),本章通过映射表与接口对齐。
|
|
2
4
|
id: data-model
|
|
3
5
|
title: 数据模型
|
|
4
6
|
when: input.hasPersistence
|
|
5
7
|
depends_on: [api-design]
|
|
6
8
|
outline_points:
|
|
7
|
-
- { id: DM1, text:
|
|
8
|
-
- { id: DM2, text:
|
|
9
|
-
- { id: DM3, text:
|
|
10
|
-
- { id: DM4, text:
|
|
9
|
+
- { id: DM1, text: 数据流总览 + 契约-表映射(每接口 ↔ 读写表/列), required: true, kind: mixed }
|
|
10
|
+
- { id: DM2, text: 表结构与 DDL, required: true, kind: entity }
|
|
11
|
+
- { id: DM3, text: 字段说明 + 本迭代用法, required: true, kind: entity }
|
|
12
|
+
- { id: DM4, text: 存量填充策略(G3), required: true, kind: narrative }
|
|
13
|
+
- { id: DM5, text: 回滚数据兼容(G4), required: true, kind: narrative }
|
|
11
14
|
entities:
|
|
12
15
|
tables:
|
|
13
16
|
required: [id, name, ddl]
|
|
@@ -18,6 +21,7 @@ narratives:
|
|
|
18
21
|
data_notes: required
|
|
19
22
|
gates:
|
|
20
23
|
- 每张表必须有完整 CREATE TABLE(含 ENGINE/CHARSET)
|
|
24
|
+
- 有接口实体时必须给出「契约-表映射」(每接口 ↔ 读写表/列),禁止接口讲接口、表讲表
|
|
21
25
|
- JSON/新列必须有存量填充策略(G3)
|
|
22
26
|
- 必须有回滚数据兼容说明(G4)
|
|
23
27
|
- 零 DDL 迭代仍须展示现网 DDL(禁止假装不涉及数据库)
|
|
@@ -7,9 +7,6 @@ outline_points:
|
|
|
7
7
|
- { id: MVP1, text: MVP 核心功能清单, required: true, kind: entity }
|
|
8
8
|
- { id: MVP2, text: 后续版本功能, required: true, kind: narrative }
|
|
9
9
|
- { id: MVP3, text: 预估复杂度与开发阶段, required: true, kind: narrative }
|
|
10
|
-
entities:
|
|
11
|
-
decisions:
|
|
12
|
-
required: [id, text]
|
|
13
10
|
narratives:
|
|
14
11
|
mvp_notes: required
|
|
15
12
|
gates:
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
# 需求(feature
|
|
1
|
+
# 需求(feature 必选;可读性整改:不写验收小节,验证由测试策略承接)
|
|
2
2
|
id: requirement
|
|
3
3
|
title: 需求
|
|
4
4
|
when: null
|
|
5
5
|
depends_on: []
|
|
6
6
|
outline_points:
|
|
7
7
|
- { id: REQ1, text: 功能需求描述, required: true, kind: narrative }
|
|
8
|
-
- { id: REQ2, text:
|
|
9
|
-
entities:
|
|
10
|
-
decisions:
|
|
11
|
-
required: [id, text]
|
|
8
|
+
- { id: REQ2, text: 目标与边界(MVP 范围/跨仓依赖/约束;不写 Given-When-Then 验收), required: true, kind: narrative }
|
|
9
|
+
entities: {}
|
|
12
10
|
narratives:
|
|
13
11
|
requirement_notes: required
|
|
14
12
|
gates:
|
|
15
|
-
-
|
|
16
|
-
-
|
|
13
|
+
- 需求聚焦目标与边界,禁止含糊需求(如「更好的体验」)
|
|
14
|
+
- 不写 Given-When-Then 验收小节(验收断言由测试策略章承接)
|
|
17
15
|
map_prompt: prompts/document/map/requirement.md
|
|
18
16
|
output_budget_tokens: 3000
|
|
@@ -8,9 +8,6 @@ outline_points:
|
|
|
8
8
|
- { id: TS2, text: 后端/数据库/基础设施选型与理由, required: true, kind: mixed }
|
|
9
9
|
- { id: TS3, text: 选型理由(为何不用备选), required: true, kind: narrative }
|
|
10
10
|
- { id: TS4, text: 综合评估矩阵(候选方案 × 评估维度 × 得分 × 权重;F5 预研/选型用), required: false, kind: mixed }
|
|
11
|
-
entities:
|
|
12
|
-
decisions:
|
|
13
|
-
required: [id, text]
|
|
14
11
|
narratives:
|
|
15
12
|
selection_reason: required
|
|
16
13
|
gates:
|
|
@@ -6,16 +6,13 @@ depends_on: [api-design, data-model]
|
|
|
6
6
|
outline_points:
|
|
7
7
|
- { id: T1, text: 分层测试矩阵, required: true, kind: entity }
|
|
8
8
|
- { id: T2, text: 测试环境与数据, required: true, kind: narrative }
|
|
9
|
-
- { id: T3, text:
|
|
9
|
+
- { id: T3, text: 验收断言承接(Given-When-Then 折叠进本表,每行加「验收依据」列), required: true, kind: narrative }
|
|
10
10
|
- { id: T4, text: 前端测试金字塔(单元 60% / 组件 30% / E2E 10%,含组件测试 Snapshot+交互), required: false, kind: narrative }
|
|
11
11
|
- { id: T5, text: 回归测试范围(对应影响面,覆盖受影响功能), required: false, kind: narrative }
|
|
12
|
-
entities:
|
|
13
|
-
decisions:
|
|
14
|
-
required: [id, text]
|
|
15
12
|
narratives:
|
|
16
13
|
test_notes: required
|
|
17
14
|
gates:
|
|
18
|
-
-
|
|
15
|
+
- 每个测试层级必须给出验收依据(承接需求章目标;验收不再单独成章)
|
|
19
16
|
- 每个层级有工具/框架 + 可验证目标
|
|
20
17
|
- 不涉及测试变更时显式标注
|
|
21
18
|
- 涉及前端时,测试金字塔比例与组件测试方式必须写明(禁「跑单测」空话)
|
|
@@ -12,9 +12,6 @@ outline_points:
|
|
|
12
12
|
- { id: UI6, text: 路由守卫/懒加载(权限/登录态/动态 import), required: false, kind: narrative }
|
|
13
13
|
- { id: UI7, text: 埋点(页面曝光/点击事件 + 参数), required: false, kind: narrative }
|
|
14
14
|
- { id: UI8, text: 浏览器兼容策略(版本 + 降级手段,README §1.4), required: false, kind: narrative }
|
|
15
|
-
entities:
|
|
16
|
-
decisions:
|
|
17
|
-
required: [id, text]
|
|
18
15
|
narratives:
|
|
19
16
|
ui_notes: required
|
|
20
17
|
gates:
|
|
@@ -12,11 +12,12 @@ required:
|
|
|
12
12
|
- implementability # 可实施性评估(7 维)
|
|
13
13
|
optional_candidates:
|
|
14
14
|
- ui-design # 前端/UI(条件: uiInScope)
|
|
15
|
-
- core-logic #
|
|
15
|
+
- core-logic # 关键实现规则(依赖闭合用 core-flow)
|
|
16
16
|
- config-runtime # 配置与运行环境
|
|
17
17
|
- compat-migration # 兼容性与迁移
|
|
18
18
|
- acceptance # 验收标准
|
|
19
19
|
- deploy # 部署/发布/回滚
|
|
20
20
|
- signoff # 审批意见(签字栏)
|
|
21
21
|
forbidden: [reproduce, root-cause, impact, fix, regression]
|
|
22
|
-
shared:
|
|
22
|
+
shared:
|
|
23
|
+
- core-flow # 仅依赖闭合:core-logic 依赖 core-flow,approve 不渲染主流程章
|
|
@@ -20,4 +20,4 @@ optional_candidates:
|
|
|
20
20
|
shared: # 仅闭合允许、不渲染:impact 依赖 root-cause;前端链依赖 frontend-architecture
|
|
21
21
|
- root-cause
|
|
22
22
|
- frontend-architecture
|
|
23
|
-
forbidden: [reproduce, root-cause, fix, regression, goal, mvp-boundary,
|
|
23
|
+
forbidden: [reproduce, root-cause, fix, regression, goal, mvp-boundary, research, poc-demo, benchmark, migration-guide, deploy, ops, closed-loop, implementability, config-runtime, acceptance]
|