@gordon.gan/specflow 1.4.3-beta → 1.4.6-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/README.md +2 -2
- package/dist/cli/commands/approval-assemble.d.ts +21 -0
- package/dist/cli/commands/approval-assemble.js +95 -0
- package/dist/cli/index.js +2 -0
- package/dist/core/approval/assemble.d.ts +10 -0
- package/dist/core/approval/assemble.js +337 -0
- package/dist/core/approval/index-schema.d.ts +244 -0
- package/dist/core/approval/index-schema.js +90 -0
- package/dist/core/approval/index.d.ts +4 -0
- package/dist/core/approval/index.js +3 -0
- package/dist/core/approval/paths.d.ts +8 -0
- package/dist/core/approval/paths.js +28 -0
- package/dist/core/approval/types.d.ts +92 -0
- package/dist/core/approval/types.js +1 -0
- package/dist/core/project-config.d.ts +4 -0
- package/dist/core/project-config.js +49 -0
- package/dist/core/project-conventions.d.ts +15 -0
- package/dist/core/project-conventions.js +66 -0
- package/package.json +1 -1
- package/prompts/approval/database-guidance.md +10 -8
- package/prompts/approval/frontend-guidance.md +249 -0
- package/prompts/approval/generate.md +368 -160
- package/prompts/approval/project-conventions-guidance.md +171 -0
- package/prompts/approval/segmented-generation.md +145 -0
- package/skills/GUIDANCE_PACKS.md +47 -24
- package/skills/database/README.md +11 -10
- package/skills/specflow-approval/SKILL.md +254 -87
- package/templates/approval-index.yaml +52 -0
- package/templates/approval-part.md +15 -0
- package/templates/approval.md +81 -310
|
@@ -16,6 +16,10 @@ Before running this flow, the SKILL.md has confirmed:
|
|
|
16
16
|
- All four artifacts exist: `proposal.md`, `specs/**/*.md`, `design.md`, `tasks.md`
|
|
17
17
|
- `artifacts.language` resolved (default `en`)
|
|
18
18
|
- Tech stack detected (Node/Go/Python/Rust/unknown)
|
|
19
|
+
- `projectMode` (`greenfield` | `brownfield`) and `stackCoverage` (`complete` | `partial` | `missing`)
|
|
20
|
+
- Tech Stack Intake gate completed when greenfield or stack dimensions are missing
|
|
21
|
+
(user confirmed 前端 / 后端 / 数据库与缓存 / 基础设施, or marked「不涉及」)
|
|
22
|
+
- `uiInScope` resolved; when yes, FE 五元组 confirmed (or marked pending refine)
|
|
19
23
|
- Anchor files extracted from `design.md` + `tasks.md`
|
|
20
24
|
- Optional: `specflow/specs/` baseline exists (for Pass 7)
|
|
21
25
|
|
|
@@ -338,32 +342,57 @@ Generate `approval.md` following this exact structure. Adapt narrative language
|
|
|
338
342
|
|
|
339
343
|
1. 绪论与边界 — proposal + optional explore + AI; absorbs What/Impact; **no 变更摘要 chapter**
|
|
340
344
|
2. 技术方案评估 — decisions / risks / design quality
|
|
341
|
-
3. 架构整体设计 —
|
|
342
|
-
4. 方案详细设计 — 设计要点 + Happy Path + 业务场景(+说明) +
|
|
343
|
-
5. 验收标准 —
|
|
344
|
-
6. 测试策略
|
|
345
|
+
3. 架构整体设计 — 架构图 + **图要点说明** + 组件(置于验收之前)
|
|
346
|
+
4. 方案详细设计 — 设计要点 + Happy Path + 业务场景(+说明) + 数据/接口/**前端(若有 UI)**…
|
|
347
|
+
5. 验收标准 — **可选**(须先询问用户;选「要」则放在设计之后;选「不要」则整章省略)
|
|
348
|
+
6. 测试策略 — 默认输出(若无 §5,矩阵改为映射 delta specs 的 Requirement/Scenario)
|
|
349
|
+
7. 部署/发布/回滚 — **可选**(须先询问用户)
|
|
350
|
+
8. 闭环性检查 — **可选**(须先询问用户;内部仍跑 Pass 1–7,仅「要」时写入正文表)
|
|
351
|
+
9. 可实施性评估 → 10. 审批意见(**仅人工签字栏**;AI 预审只在对话中反馈,不写入文档)
|
|
345
352
|
|
|
346
|
-
###
|
|
353
|
+
### 可选章节门禁(写入前必须询问)
|
|
347
354
|
|
|
348
|
-
|
|
355
|
+
在写入 `approval.md` 之前,向用户明确询问(可合并进确认摘要):
|
|
349
356
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
357
|
+
```text
|
|
358
|
+
以下章节是否写入审批文档?(默认均可选「不要」以保持精简)
|
|
359
|
+
- [ ] §5 验收标准(从 specs 展开全部 Requirement/Scenario)
|
|
360
|
+
- [ ] §7 部署/发布/回滚方案
|
|
361
|
+
- [ ] §8 闭环性检查表(Pass 1–7 结论表)
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
- 用户选「要」→ 按下方骨架生成该章。
|
|
365
|
+
- 用户选「不要」→ **整章省略**(不要写「不涉及…」占位段)。
|
|
366
|
+
- 未得到明确答复前,**不要**写入文件。
|
|
367
|
+
|
|
368
|
+
### ⚠️ 质量红线 — 必须严格执行
|
|
369
|
+
|
|
370
|
+
生成 `approval.md` 时,下列红线**缺一不可**;违反则详细设计/接口/数据相关章节视为不合格,确认写入前必须补全。
|
|
371
|
+
|
|
372
|
+
| 编号 | 红线名称 | 要求 |
|
|
373
|
+
|------|----------|------|
|
|
374
|
+
| G1 | 一图胜千言 | 任何超过 **5 行**的文字流程描述,**必须**改为 Mermaid 图(`sequenceDiagram` / `flowchart` / `stateDiagram-v2`),禁止用长段落散文写流程 |
|
|
375
|
+
| G2 | 必须有失败示例 | §4.5 清单中**每个**接口(含**不变**):除成功请求与成功响应示例外,**还必须**附 ≥1 组**失败**请求或响应示例(如参数校验失败、租约过期、未认证)。只有错误码表、没有具体 HTTP/正文示例 → 不合格 |
|
|
376
|
+
| G3 | 必须有数据迁移/填充方案 | 凡涉及 **JSON 字段形状变更**或**新增列**:必须写明**存量数据的默认值填充策略**(回填脚本 / 读时默认值 / 禁止空读等)。即使本迭代不做表结构变更、只改 JSON 语义,同样适用 |
|
|
377
|
+
| G4 | 必须有回滚数据兼容说明 | 若发布失败需要回滚:新版本已经写入的数据,旧版本代码能否**安全跳过或忽略**?必须给出明确方案(例如忽略未知字段、按数据版本分派、兼容窗口双写等)。禁止只写「回滚镜像/回滚应用」却不说明数据兼容结论 |
|
|
378
|
+
| G5 | 前端须有页面/路由清单 | 当 `uiInScope=yes`:§4.6 **必须**给出本迭代页面/路由清单与栈五元组(Framework/Styling/State/UI kit/FE testing)。禁止只写「用 React」 |
|
|
379
|
+
| G6 | 关键页须有空/加载/错态 | 当 `uiInScope=yes`:每个关键 `Page · …` **至少**覆盖空态 / 加载 / 错误之一,并标明依赖的 §4.5 接口编号 |
|
|
356
380
|
|
|
357
|
-
###
|
|
381
|
+
### 文风要求 — 全文适用
|
|
358
382
|
|
|
359
|
-
1.
|
|
360
|
-
2.
|
|
383
|
+
1. **通俗易懂**:面向要动手实现的开发同学;避免生僻英文缩写,**首次出现必须中文注解**(例:DDL(数据定义语言)、RPC(远程过程调用))。
|
|
384
|
+
2. **叙述用可读中文,禁止「代码腔」堆砌**:
|
|
385
|
+
- §2.1 现状与约束、§3 架构说明、§4 设计要点等**正文/列表**,用业务与模块语言书写(例:「调度侧编译目前只认接口用例类型,运行时打成扁平的 HTTP 请求规格」)。
|
|
386
|
+
- **禁止**把路径、函数名、类型名、结构体字段当作句子主干连写(反例:`compileOne` in `internal/scheduler/...` only accepts `ref_type=api_case`…)。
|
|
387
|
+
- 若确需锚定实现位置:同一条约束最多用括号**点名一次**可读定位(模块中文名 + 必要时一个路径或符号),或把路径/符号放到表格「证据」列;细节接口形状仍放在 §4.5 的字段表与示例中。
|
|
388
|
+
- Mermaid、DDL、HTTP 示例、字段表中的协议名/列名保持技术原文(不受本条限制)。
|
|
389
|
+
3. **逻辑严密**:拒绝模棱两可 —— **禁止**「尽量」「大概」「一般情况下」「可能需要」「酌情」「视情况」;应使用「**必须**」「**禁止**」「**采用 XX 方案**」「固定为…」。若有分支,写成显式条件表(若 A → 做 X;若 B → 做 Y)。
|
|
361
390
|
|
|
362
391
|
```markdown
|
|
363
392
|
# 技术方案审批文档: <change-name>
|
|
364
393
|
|
|
365
394
|
> 本文档由 `/specflow:approval` 基于 refine 收敛后的四件套 + 现有代码与 spec 基线生成,
|
|
366
|
-
> 经 AI
|
|
395
|
+
> 经 AI 闭环检查与设计质量/可实施性评估(结论在对话中反馈),并含架构与详细设计等章节,供人工审批使用。
|
|
367
396
|
> 生成时间: YYYY-MM-DD HH:MM | phase: refined | 产物语言: <lang> | 技术栈: <stack>
|
|
368
397
|
|
|
369
398
|
---
|
|
@@ -443,24 +472,51 @@ AI 从 proposal `## What Changes` / `## Impact`(及 explore 相关结论)提炼,
|
|
|
443
472
|
## 2. 技术方案评估 (Technical Design Review)
|
|
444
473
|
|
|
445
474
|
### 2.1 现状与约束 (Context & Constraints)
|
|
446
|
-
[整合 design.md Context + AI 补充的隐含约束]
|
|
447
475
|
|
|
448
|
-
|
|
476
|
+
> 用**可读中文**归纳现状与硬约束(含「本迭代禁止…」类红线)。禁止代码腔堆砌;需要锚点时见上文「文风要求」第 2 条。
|
|
477
|
+
> **0→1 绿场**:可写「尚无存量业务代码;约束来自用户确认的技术选型与组织规范」。
|
|
478
|
+
|
|
479
|
+
[整合 design.md Context + AI 从锚点代码提炼的隐含约束 — 写成中文要点列表]
|
|
480
|
+
|
|
481
|
+
### 2.2 技术选型 (Tech Stack Selection)
|
|
482
|
+
|
|
483
|
+
> **何时必须有本章节**:
|
|
484
|
+
> - `projectMode=greenfield`(从 0 到 1),或
|
|
485
|
+
> - 四件套未写清且本变更需要的维度缺失(前端 / 后端 / 数据库与缓存 / 基础设施)。
|
|
486
|
+
> **来源优先级**:用户在 Tech Stack Intake 门禁中的确认 **>** design 决策表 **>** 仓库信号。
|
|
487
|
+
> **禁止**在未提问、未确认时由模型臆造全栈。
|
|
488
|
+
> 若本变更为棕地小改且选型沿用现网 → 可写一行「沿用现网栈:<摘要>」并跳过详表。
|
|
489
|
+
|
|
490
|
+
**选型总表**(绿场或补选型时强制):
|
|
491
|
+
|
|
492
|
+
| 方向 | 选定方案 | 备选(若有) | 选择理由 | 来源 |
|
|
493
|
+
|------|----------|------------|----------|------|
|
|
494
|
+
| 前端 | Framework / Styling / State / UI kit / FE testing | | | 用户确认 / design / 沿用现网 / 不涉及 |
|
|
495
|
+
| 后端 | | | | |
|
|
496
|
+
| 数据库与缓存 | | | | |
|
|
497
|
+
| 基础设施 | | | | |
|
|
498
|
+
| 其它(消息/搜索/… ) | | | | |
|
|
499
|
+
|
|
500
|
+
> 前端行在 `uiInScope=yes` 时**必须**写成五元组(见 `frontend-guidance.md`);禁止只填「React」。
|
|
501
|
+
|
|
502
|
+
将关键选型同步写入下方 **§2.4 决策评审表**(如 D-FE / D-BE / D-DB / D-Infra)。
|
|
503
|
+
|
|
504
|
+
### 2.3 目标与非目标 (Goals & Non-Goals)
|
|
449
505
|
[整合 design.md Goals/Non-Goals]
|
|
450
506
|
|
|
451
|
-
### 2.
|
|
507
|
+
### 2.4 决策评审表 (Decision Review)
|
|
452
508
|
|
|
453
509
|
| 决策 | 选定方案 | 备选方案 | 理由 | 影响评估 | 状态 |
|
|
454
510
|
|------|---------|---------|------|---------|------|
|
|
455
511
|
| D1: <name> | <方案> | <A/B> | <理由> | <评估> | Proposed |
|
|
456
512
|
|
|
457
|
-
### 2.
|
|
513
|
+
### 2.5 风险与权衡 (Risks & Trade-offs)
|
|
458
514
|
|
|
459
515
|
| 风险 | 严重等级 | 缓解措施 | 就绪度 |
|
|
460
516
|
|------|---------|---------|--------|
|
|
461
517
|
| <name> | 高/中/低 | <措施> | ✅/⚠️/❌ |
|
|
462
518
|
|
|
463
|
-
### 2.
|
|
519
|
+
### 2.6 设计质量评估 (Design Quality)
|
|
464
520
|
|
|
465
521
|
#### 过度设计检查
|
|
466
522
|
| # | 信号 | 检测到? | 证据(design/tasks 位置) |
|
|
@@ -493,6 +549,11 @@ AI 从 proposal `## What Changes` / `## Impact`(及 explore 相关结论)提炼,
|
|
|
493
549
|
> 聚焦**宏观结构**;与 §4 方案详细设计(模块内部实现 / 时序)互补。
|
|
494
550
|
> 质量标杆:`scenario-job-compile` §3 —— **图 + 图要点说明 + 核心组件表**。
|
|
495
551
|
|
|
552
|
+
> **项目约定(先于起草)**:执行 `prompts/approval/project-conventions-guidance.md`,`topic=architecture`。
|
|
553
|
+
> 懒加载 Read 项目 architecture skill/rule/docs(跨 IDE 路径见该路由)。
|
|
554
|
+
> **优先级**:项目约定 + 锚点代码 **>** 通用架构常识。将硬边界/禁令写入图要点(可读中文)。
|
|
555
|
+
> 总则式标注:在图要点第 1 条或组件表注记「项目约定: <path|未发现>」。
|
|
556
|
+
|
|
496
557
|
### 3.1 总体架构 (Architecture Overview)
|
|
497
558
|
|
|
498
559
|
用 Mermaid 绘制 **模块依赖/分层图**(推荐),并可附加 **系统交互总览**。
|
|
@@ -589,13 +650,12 @@ sequenceDiagram
|
|
|
589
650
|
|
|
590
651
|
**适用范围**:涉及持久化、状态存储、数据模型的变更。纯 CLI/库项目若无数据库,覆盖配置结构 / 状态文件 / 缓存结构 / YAML schema 等"数据模型"(走下方「非库表路径」)。
|
|
591
652
|
|
|
592
|
-
>
|
|
593
|
-
>
|
|
594
|
-
>
|
|
595
|
-
>
|
|
596
|
-
>
|
|
597
|
-
>
|
|
598
|
-
> - 在总则「DB 技能」列注明**实际路径**(如 `.cursor/specflow/guidance/database/mysql`)或 `LLM-fallback`。
|
|
653
|
+
> **项目约定 + DB 技能(先于起草,固定顺序)**:
|
|
654
|
+
> 1. 执行 `prompts/approval/project-conventions-guidance.md`,`topic=database` — Read 项目 DB 约定(若有)。
|
|
655
|
+
> 2. 执行 `prompts/approval/database-guidance.md` — 探测 `dbStack` 并 Read SpecFlow `{ide}/specflow/guidance/database/<stack>/`(或包内回退)。
|
|
656
|
+
> 3. Read 现网 DDL/迁移/锚点(Pass 6)。
|
|
657
|
+
> **优先级**:项目约定 + 现网 DDL **>** SpecFlow DB guidance **>** LLM。
|
|
658
|
+
> 不得「invoke `/mysql`」;总则须同时填写「项目约定」「DB 技能」「DDL 来源」。
|
|
599
659
|
|
|
600
660
|
> **质量硬门槛(库表路径)**:只要本变更读写/依赖任何数据库表(含"零 DDL、只改读写语义"),§4.4 **必须**按下列结构输出,不得用一句话带过、不得省略 ER / DDL / 字段说明表。参考质量标杆:`scenario-job-compile` 类审批文档的「表与数据设计」章(总则结论表 → ER → 表一览 → 逐表 DDL+字段表 → 非表字段与回滚)。
|
|
601
661
|
|
|
@@ -628,6 +688,7 @@ sequenceDiagram
|
|
|
628
688
|
| 新增 / 修改 / 删除列 | 列清单 / **无** |
|
|
629
689
|
| 新增索引 | 索引清单 / **无** |
|
|
630
690
|
| DDL 来源 | 仓库基线路径 或 本迭代新增 |
|
|
691
|
+
| 项目约定 | 实际 Read 路径(可多个用 `; `) / **未发现** |
|
|
631
692
|
| DB 技能 | `{ide}/specflow/guidance/database/<stack>` / `skills/database/<stack>`(fallback) / `LLM-fallback` |
|
|
632
693
|
|
|
633
694
|
紧接一段 **本迭代变更语句** 代码块:
|
|
@@ -703,7 +764,8 @@ erDiagram
|
|
|
703
764
|
- [ ] **G4**:回滚数据兼容有明确方案或显式「无新旧互读问题」
|
|
704
765
|
- [ ] 无「仅文字描述表结构、无 DDL」或「DDL 缺 ENGINE/CHARSET」的偷懒写法
|
|
705
766
|
- [ ] 零 DDL 迭代禁止假装「不涉及数据库」—— 只要读写表,仍走库表路径并展示现网 DDL
|
|
706
|
-
- [ ]
|
|
767
|
+
- [ ] 总则含「项目约定」列(路径或「未发现」)+「DB 技能」列+「DDL 来源」
|
|
768
|
+
- [ ] 若探测到项目 DB 约定,正文已体现其硬禁令;否则确认摘要 WARNING
|
|
707
769
|
|
|
708
770
|
#### C. 非库表路径(CLI / 库 / 配置 / 状态文件)
|
|
709
771
|
|
|
@@ -747,7 +809,13 @@ CREATE TABLE `orders` (
|
|
|
747
809
|
**适用范围**:暴露 API / RPC / CLI 命令 / 跨模块函数接口的变更(含「协议不变但本迭代新消费」)。
|
|
748
810
|
**项目类型适配**:Web/服务 → HTTP(+RPC);CLI → commander 等命令参数;库 → 导出函数签名。
|
|
749
811
|
|
|
750
|
-
>
|
|
812
|
+
> **项目约定(先于起草)**:执行 `prompts/approval/project-conventions-guidance.md`,`topic=api`。
|
|
813
|
+
> 懒加载项目 API/错误码/鉴权/契约约定。有 UI 时 **§4.6** 另跑 `topic=frontend` + `frontend-guidance.md`
|
|
814
|
+
> (勿把页面树塞进 §4.5)。
|
|
815
|
+
> **优先级**:项目约定 + 现网 OpenAPI/proto **>** SpecFlow §4.5 骨架 **>** LLM。
|
|
816
|
+
> 在 §4.5.1 总览用一行注明「项目约定: <path|未发现>」。
|
|
817
|
+
|
|
818
|
+
> **质量硬门槛(对外/跨端接口路径)**:本迭代**列入 §4.5 清单**的每个接口(含**协议不变**、**本迭代消费**、**行为扩展**等),§4.5 **必须**按下列完整结构输出,**禁止**因「无协议变更」而精简、省略字段表/示例/错误约定。参考质量标杆:`scenario-job-compile`「接口设计」章(总览与约定 → 接口清单 → 通用错误码 → 逐接口字段表+HTTP 示例 → 调用关系)。禁止只有路径名、无字段表、无错误约定、无请求/响应示例。
|
|
751
819
|
|
|
752
820
|
> **大纲 / 标题层级(硬门槛 — 防 TOC 爆炸)**:大纲**只允许**下列标题;「请求体字段」「请求示例」「响应示例」「错误」等**禁止**写成标题,一律 `**加粗**`。
|
|
753
821
|
|
|
@@ -785,9 +853,11 @@ CREATE TABLE `orders` (
|
|
|
785
853
|
|------|------|---------------|
|
|
786
854
|
| 新增 | 新路径或新 RPC | 完整展开(字段+示例+错误) |
|
|
787
855
|
| 修改 | 请求/响应形状变化(加字段、改语义) | 完整展开,并标明**本迭代变更点** |
|
|
788
|
-
| 行为扩展 | 消息形状不变,服务端认新取值/新分支 |
|
|
789
|
-
| 不变(本迭代消费) |
|
|
790
|
-
| 不变(
|
|
856
|
+
| 行为扩展 | 消息形状不变,服务端认新取值/新分支 | 完整展开;在「本迭代变更」写明行为差异;可注明「请求/响应消息不变」 |
|
|
857
|
+
| 不变(本迭代消费) | 协议/消息形状不动,本迭代开始依赖或调用 | **完整展开**(与新增/修改同骨架);「本迭代变更」写「协议不变,本迭代消费」;禁止「详见 OpenAPI/既有文档」代替字段表与示例 |
|
|
858
|
+
| 不变(协议不变) | 本迭代仍调用,协议与现网一致 | **完整展开**(同上);字段/示例须与现网 OpenAPI/proto/锚点对齐,可标注「与现网一致」 |
|
|
859
|
+
|
|
860
|
+
> **清单规则(硬)**:本迭代**不调用、不消费**的接口 **不列入** §4.5 清单。**一旦列入清单,无论变更类型是否为「不变」,均须按 §4.5.2 完整骨架输出**,不得精简、不得只写路径、不得跳过示例。
|
|
791
861
|
|
|
792
862
|
**3) 通用错误码约定**(强制;按项目现网风格映射):
|
|
793
863
|
|
|
@@ -809,7 +879,7 @@ CREATE TABLE `orders` (
|
|
|
809
879
|
|
|
810
880
|
##### 4.5.2 逐接口详设(强制骨架)
|
|
811
881
|
|
|
812
|
-
|
|
882
|
+
对清单中**每个**编号 `In`(含**不变**类型),输出同构小节 `##### In · <短名>(<变更类型>)`(**仅此一级**进大纲;其下**禁止**再开 `####`/`#####`/`######`)。顺序固定,标签一律 `**加粗**`:
|
|
813
883
|
|
|
814
884
|
1. **元信息**(强制表):
|
|
815
885
|
|
|
@@ -833,7 +903,7 @@ CREATE TABLE `orders` (
|
|
|
833
903
|
|
|
834
904
|
4. **成功响应字段** + **响应示例(成功)**(强制)。
|
|
835
905
|
|
|
836
|
-
5. **响应示例(失败)**(质量红线 G2 — 强制)
|
|
906
|
+
5. **响应示例(失败)**(质量红线 G2 — 强制):清单中**每个**接口 **≥1** 组报错示例(完整 HTTP 或等价);「不变」接口亦须给出典型失败场景(如参数非法、未认证、资源不存在);副标可写失败原因,例:`**响应示例(失败 · 无启用步)**`,仍**不是**标题。
|
|
837
907
|
|
|
838
908
|
6. **错误**(强制表:条件 → 状态/退出码 → 说明):
|
|
839
909
|
|
|
@@ -855,8 +925,8 @@ CREATE TABLE `orders` (
|
|
|
855
925
|
|
|
856
926
|
- [ ] 有通道/鉴权表(或多通道说明)+ 本迭代接口清单(编号+变更类型+场景)
|
|
857
927
|
- [ ] 有通用错误码约定 + 命名/错误风格约定
|
|
858
|
-
- [ ]
|
|
859
|
-
- [ ]
|
|
928
|
+
- [ ] 清单中**每个**接口(含**不变**)具备:元信息、字段表、成功请求/响应示例、**失败示例(G2)**、错误表
|
|
929
|
+
- [ ] **不变**接口未因「无协议变更」而省略字段表/示例;内容与现网契约或锚点一致
|
|
860
930
|
- [ ] 无「只有路径、无字段/无示例/无错误」的偷懒写法;示例与字段表一致
|
|
861
931
|
- [ ] 接口编号可被 §4.2/§4.3 流程、§6 测试引用
|
|
862
932
|
- [ ] **大纲干净**:§4.5 目录仅为 `4.5.1–4.5.3` + 各 `##### In · …`;**无**「请求体字段 / 请求示例 / 响应示例 / 错误」标题节点
|
|
@@ -876,7 +946,95 @@ specflow init --artifact-language <language>
|
|
|
876
946
|
|
|
877
947
|
**完全不涉及接口变更时写**:`不涉及接口变更(内部实现调整,无对外/跨模块接口变化)`。
|
|
878
948
|
|
|
879
|
-
### 4.6
|
|
949
|
+
### 4.6 前端 / UI 设计 (Frontend / UI Design)
|
|
950
|
+
|
|
951
|
+
**适用范围**:本变更含控制台 / Web / App UI / 页面 / 路由 / 组件(见 `frontend-guidance.md` → `uiInScope`)。
|
|
952
|
+
**不涉及时**:整章省略,或在详细设计自检处写一行 `不涉及前端/UI 变更` —— **禁止**臆造页面树。
|
|
953
|
+
|
|
954
|
+
> **项目约定 + IDE 落地规约 + FE 路由(先于起草)**:
|
|
955
|
+
> 1. 执行 `project-conventions-guidance.md`,`topic=frontend`。
|
|
956
|
+
> 2. 执行 `prompts/approval/frontend-guidance.md` §3 — **强制**扫描 IDE skills/rules
|
|
957
|
+
> (`.cursor` / `.claude` / `.agents`)与落地文档(组件/路由/状态/表单/样式/a11y/测试/lint);
|
|
958
|
+
> 合计 ≤5 文件;`Read` 路径,禁止 `invoke`。
|
|
959
|
+
> 3. Read 现网路由/布局/API client 锚点(Pass 6 深度:仅文件)。
|
|
960
|
+
> **优先级**:项目约定 + IDE skills/rules + 现网 UI **>** §4.6 骨架 **>** LLM。
|
|
961
|
+
|
|
962
|
+
> **质量硬门槛**:`uiInScope=yes` 时必须输出下列结构。禁止只有「用 React/Vue」一句话;禁止把完整目录树堆进 §2.1。
|
|
963
|
+
> **大纲 / 标题层级**:只允许 `#### 4.6.1–4.6.5` + `##### Page · <短名>`;「空态/加载/错误/依赖接口」等用 `**加粗**`。
|
|
964
|
+
|
|
965
|
+
```text
|
|
966
|
+
### 4.6 前端 / UI 设计
|
|
967
|
+
├── #### 4.6.1 总则与本迭代结论
|
|
968
|
+
├── #### 4.6.2 信息架构与路由
|
|
969
|
+
├── #### 4.6.3 关键页面 / 组件详设
|
|
970
|
+
│ └── ##### Page · <短名>
|
|
971
|
+
├── #### 4.6.4 状态与数据获取
|
|
972
|
+
└── #### 4.6.5 视觉与验证回路
|
|
973
|
+
```
|
|
974
|
+
|
|
975
|
+
#### 4.6.1 总则与本迭代结论
|
|
976
|
+
|
|
977
|
+
| 项 | 结论 |
|
|
978
|
+
|----|------|
|
|
979
|
+
| Surface | Web / Mobile / Desktop / 混合 |
|
|
980
|
+
| Framework | |
|
|
981
|
+
| Styling / 设计系统 | |
|
|
982
|
+
| State | |
|
|
983
|
+
| UI kit | |
|
|
984
|
+
| FE testing | |
|
|
985
|
+
| 本迭代页面 | 列表 / **无新增页(仅改组件)** |
|
|
986
|
+
| 项目约定 | config + 中立 docs 路径 / **未发现** |
|
|
987
|
+
| IDE skills/rules | `.cursor`/`.claude`/`.agents` 下实际 Read 路径 / **未发现** |
|
|
988
|
+
| 本迭代不涉及 | 例:无设计系统重建 / 无 RN |
|
|
989
|
+
|
|
990
|
+
栈五元组须与 §2.2 前端行、Intake 确认一致。
|
|
991
|
+
落地禁令(组件库、禁止全局 CSS、表单校验库等)用可读中文写入本节与 §2.1;路径放本表。
|
|
992
|
+
|
|
993
|
+
#### 4.6.2 信息架构与路由
|
|
994
|
+
|
|
995
|
+
| 路由 / 入口 | 页面短名 | 对应 Journey / Scenario | 本迭代动作 |
|
|
996
|
+
|-------------|----------|-------------------------|------------|
|
|
997
|
+
| | | | 新增 / 修改 / 不动 |
|
|
998
|
+
|
|
999
|
+
可用简短 Mermaid `flowchart` 画页面关系(G1:超 5 行散文改图)。
|
|
1000
|
+
|
|
1001
|
+
#### 4.6.3 关键页面 / 组件详设
|
|
1002
|
+
|
|
1003
|
+
对清单中每个需展开的页面输出 `##### Page · <短名>`(**仅此一级**进大纲):
|
|
1004
|
+
|
|
1005
|
+
1. **目的**:一句话用户目标
|
|
1006
|
+
2. **关键组件**:布局 / 列表 / 表单 / 抽屉…(中文名;边界「不做什么」)
|
|
1007
|
+
3. **依赖接口**:§4.5 `In` 编号(无接口则写「无」并说明纯本地态)
|
|
1008
|
+
4. **状态要点**:进入页需要的数据;提交后的成功态
|
|
1009
|
+
5. **空态 / 加载 / 错误**(G6 — 至少一项写清文案或行为;推荐三项都写)
|
|
1010
|
+
6. **权限 / 可见性**(若有)
|
|
1011
|
+
|
|
1012
|
+
#### 4.6.4 状态与数据获取
|
|
1013
|
+
|
|
1014
|
+
| 类别 | 方案 | 说明 |
|
|
1015
|
+
|------|------|------|
|
|
1016
|
+
| Server state | 例:React Query / SWR / 仅页面内 fetch | |
|
|
1017
|
+
| Client state | 例:Zustand / 组件本地 | |
|
|
1018
|
+
| 表单与校验 | 例:Zod + RHF / 现网表单库 | |
|
|
1019
|
+
| 错误呈现 | Toast / 页内 Alert / 错误边界 | 须用户可理解 |
|
|
1020
|
+
|
|
1021
|
+
#### 4.6.5 视觉与验证回路
|
|
1022
|
+
|
|
1023
|
+
- **响应式 / a11y**:本迭代必须覆盖的断点与可达性抽查(有则写;无则「沿用现网,本迭代不改视觉体系」)。
|
|
1024
|
+
- **Visual Loop**:Generate → Render → Inspect → Refine(写清本项目的 preview / 截图 / 浏览器检查方式)。
|
|
1025
|
+
- **命令**:`dev` / `test` / `e2e` / `browser check`(来自约定或 Intake;未知则 `[待 refine 澄清: FE 验证命令]`)。
|
|
1026
|
+
- **AI builder**(若用):导出、本地可构建、密钥、退出计划 — 一小节即可。
|
|
1027
|
+
|
|
1028
|
+
#### 前端路径 —— 质量自检
|
|
1029
|
+
|
|
1030
|
+
- [ ] `uiInScope=yes` 时有 §4.6.1 五元组 + 页面清单(**G5**) + **项目约定/IDE skills/rules** 列
|
|
1031
|
+
- [ ] 每个关键 Page 有依赖接口与空/加载/错态(**G6**)
|
|
1032
|
+
- [ ] 页面可被 §4.2/§1.3 引用;接口编号对齐 §4.5
|
|
1033
|
+
- [ ] 状态/表单/测试命令与已 Read 的 IDE/仓规约一致(有则引用路径)
|
|
1034
|
+
- [ ] 大纲仅为 `4.6.1–4.6.5` + `Page · …`;无「空态」等标题节点
|
|
1035
|
+
- [ ] 正文可读中文,无代码腔目录树堆砌,无整段粘贴 skill 原文
|
|
1036
|
+
|
|
1037
|
+
### 4.7 核心算法 / 逻辑说明 (Core Logic)
|
|
880
1038
|
|
|
881
1039
|
**适用范围**:有非平凡算法或数据处理逻辑的变更。
|
|
882
1040
|
| 元素 | 内容 |
|
|
@@ -887,7 +1045,7 @@ specflow init --artifact-language <language>
|
|
|
887
1045
|
|
|
888
1046
|
**不涉及非平凡算法时写**:`不涉及非平凡算法(逻辑简单,无复杂数据处理)`。
|
|
889
1047
|
|
|
890
|
-
### 4.
|
|
1048
|
+
### 4.8 配置与运行环境 (Configuration & Runtime)
|
|
891
1049
|
|
|
892
1050
|
**适用范围**:新增配置项、环境变量、运行时依赖的变更。
|
|
893
1051
|
| 元素 | 内容 |
|
|
@@ -898,7 +1056,7 @@ specflow init --artifact-language <language>
|
|
|
898
1056
|
|
|
899
1057
|
**不涉及配置变更时写**:`不涉及配置或运行环境变更`。
|
|
900
1058
|
|
|
901
|
-
### 4.
|
|
1059
|
+
### 4.9 兼容性与迁移 (Compatibility & Migration)
|
|
902
1060
|
|
|
903
1061
|
**适用范围**:破坏性变更、JSON/列变更、或任何「新版本写入、旧版本仍可能读」的发布窗口。
|
|
904
1062
|
|
|
@@ -918,12 +1076,13 @@ specflow init --artifact-language <language>
|
|
|
918
1076
|
- [ ] 有 §4.2 Happy Path **完整**时序图 + 设计要点说明
|
|
919
1077
|
- [ ] 每个 §4.3 业务场景均有图 + **设计要点说明**(无裸图)
|
|
920
1078
|
- [ ] **G1**:超过 5 行的文字流程已改为 Mermaid,无长散文流程
|
|
921
|
-
- [ ] 每个详细设计元素可追溯到 §5 Requirement/Scenario
|
|
1079
|
+
- [ ] 每个详细设计元素可追溯到 §5 Requirement/Scenario(若有 §5)或 delta specs 中的同名条目,以及 §2 决策
|
|
922
1080
|
- [ ] 涉及数据/接口的均非留空;不涉及类别显式标注
|
|
923
1081
|
- [ ] **§4.4**:ER + DDL + 字段说明;若 JSON/新列变更则有**存量填充策略(G3)**与回滚数据兼容(G4)
|
|
924
1082
|
- [ ] **§4.5**:通道/清单/错误码 + 字段/成功示例 + **失败示例(G2)** + 错误表
|
|
925
|
-
- [ ] **§4.
|
|
926
|
-
- [ ] **§4.
|
|
1083
|
+
- [ ] **§4.6**(若 `uiInScope`):五元组 + 页面清单(**G5**) + 空/加载/错态(**G6**) + Visual Loop
|
|
1084
|
+
- [ ] **§4.4/§4.5/§4.6 大纲**:目录仅含规定小节 + 表名/`In`/`Page`;字段/示例/DDL/空态等均为加粗标签
|
|
1085
|
+
- [ ] **§4.9**:回滚兼容结论明确(或显式声明无新旧数据互读问题)
|
|
927
1086
|
- [ ] **文风**:无「尽量/大概/一般情况下」等含糊词;生僻缩写首次已注解
|
|
928
1087
|
- [ ] 若无法写出实现级细节,标记 `[待 refine 澄清: <元素>]`
|
|
929
1088
|
|
|
@@ -931,7 +1090,10 @@ specflow init --artifact-language <language>
|
|
|
931
1090
|
|
|
932
1091
|
## 5. 验收标准 (Acceptance Criteria)
|
|
933
1092
|
|
|
934
|
-
|
|
1093
|
+
> **可选章**:仅当用户在写入前确认「要 §5」时输出;否则整章省略。
|
|
1094
|
+
> 若输出:放在架构与详细设计之后;按 capability 完整列出 Requirement + Scenario,并做 3 级可测试性标注。
|
|
1095
|
+
|
|
1096
|
+
[仅在用户确认需要时展开]
|
|
935
1097
|
|
|
936
1098
|
### 5.1 Capability: <name>
|
|
937
1099
|
[Delta 操作类型: ADDED / MODIFIED / REMOVED / RENAMED]
|
|
@@ -947,8 +1109,8 @@ specflow init --artifact-language <language>
|
|
|
947
1109
|
|
|
948
1110
|
## 6. 测试策略 (Test Strategy)
|
|
949
1111
|
|
|
950
|
-
>
|
|
951
|
-
>
|
|
1112
|
+
> 本章回答:用分层测试证明方案正确。
|
|
1113
|
+
> **与 §5 的关系**:若文档含 §5,矩阵必须映射到具体 Scenario;若用户未要 §5,则映射到 delta specs 中的 Requirement/Scenario **名称**(仍须可追溯,不得空泛)。
|
|
952
1114
|
> **选择性呈现**:只列出本变更实际需要的测试层级;不涉及的层级显式标注"不涉及"。
|
|
953
1115
|
|
|
954
1116
|
### 6.1 分层测试矩阵
|
|
@@ -969,6 +1131,8 @@ specflow init --artifact-language <language>
|
|
|
969
1131
|
2. 每个层级标注**工具/框架**(呼应 full-stack-skills 的"阶段→技能映射":测试阶段→test-writer/playwright/pytest)
|
|
970
1132
|
3. **目标要可验证**("证明 P95 < 200ms" 而非 "测性能")
|
|
971
1133
|
4. 新增测试 vs 修改既有测试要区分
|
|
1134
|
+
5. 若 `uiInScope=yes`:矩阵须覆盖组件/E2E 或 browser 检查,并与 §4.6.5 Visual Loop
|
|
1135
|
+
(Generate→Render→Inspect→Refine)命令一致
|
|
972
1136
|
|
|
973
1137
|
**示例**:
|
|
974
1138
|
|
|
@@ -1001,8 +1165,8 @@ specflow init --artifact-language <language>
|
|
|
1001
1165
|
|
|
1002
1166
|
## 7. 部署/发布/回滚方案 (Deployment & Release)
|
|
1003
1167
|
|
|
1004
|
-
>
|
|
1005
|
-
>
|
|
1168
|
+
> **可选章**:仅当用户确认「要 §7」时输出;否则整章省略。
|
|
1169
|
+
> 若输出:回答如何上线、如何发布、出问题如何回滚、上线后如何监控。纯库/CLI/文档项目若用户仍要本章,可写精简的「包发布/版本发布」方案,勿用空话充数。
|
|
1006
1170
|
|
|
1007
1171
|
### 7.1 部署方案 (Deployment)
|
|
1008
1172
|
|
|
@@ -1052,10 +1216,9 @@ specflow init --artifact-language <language>
|
|
|
1052
1216
|
|
|
1053
1217
|
## 8. 闭环性检查 (Closed-Loop Verification)
|
|
1054
1218
|
|
|
1055
|
-
>
|
|
1056
|
-
>
|
|
1057
|
-
>
|
|
1058
|
-
> - **禁止**为每个 Pass 再开长小节、禁止重复贴总评表。
|
|
1219
|
+
> **可选章**:仅当用户确认「要 §8」时输出;否则整章省略。
|
|
1220
|
+
> 无论是否写入文档,**内部分析仍必须跑完 Pass 1–7**,并在对话确认摘要中给出整体闭环结论。
|
|
1221
|
+
> 若写入本文:只保留下表 —— `PASS`/`SKIPPED` 一句话;`WARNING`/`FAIL` 最多 2–3 条要点;禁止每 Pass 长小节。
|
|
1059
1222
|
|
|
1060
1223
|
| Pass | 检查项 | 结论 | 关键证据(一句话;⚠️/❌ 可列 2–3 条要点) |
|
|
1061
1224
|
|------|--------|------|--------------------------------------|
|
|
@@ -1091,12 +1254,10 @@ specflow init --artifact-language <language>
|
|
|
1091
1254
|
|
|
1092
1255
|
## 10. 审批意见 (Approval Decision)
|
|
1093
1256
|
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
**建议:** 建议批准 / 有条件批准 / 退回 refine / 拒绝
|
|
1097
|
-
**理由:** <1-2 句话,引用具体 verdict>
|
|
1257
|
+
> **禁止**在本文写入「AI 预审建议」小节。AI 预审结论(建议批准 / 有条件批准 / 退回 refine / 拒绝 + 理由)只在**对话中**向用户反馈。
|
|
1258
|
+
> 本文仅保留人工签字栏。
|
|
1098
1259
|
|
|
1099
|
-
### 10.
|
|
1260
|
+
### 10.1 人工审批签字栏
|
|
1100
1261
|
|
|
1101
1262
|
| 角色 | 姓名 | 审批结论 | 日期 | 意见 |
|
|
1102
1263
|
|------|------|---------|------|------|
|
|
@@ -1116,109 +1277,156 @@ specflow init --artifact-language <language>
|
|
|
1116
1277
|
| 技术方案评估 | design.md | 决策表 + 风险表 + 设计质量 |
|
|
1117
1278
|
| 架构整体设计 | design + 锚点代码 + specs | Mermaid 图 + **图要点说明** + 组件边界表;追溯 §2 |
|
|
1118
1279
|
| 方案详细设计 | design + specs + 锚点 + 现网 DDL/API | 设计要点 + Happy Path + 业务场景(+说明) + 数据/接口等;追溯 §5+§2 |
|
|
1119
|
-
| 验收标准 | specs/**/*.md |
|
|
1120
|
-
| 测试策略 | §5
|
|
1121
|
-
| 部署/发布/回滚 | §2 决策 + 运行环境 |
|
|
1122
|
-
| 闭环性检查 | 四件套 + 锚点 + 主 specs |
|
|
1123
|
-
| 可实施性评估 | tasks + design + specs + 代码 | AI
|
|
1124
|
-
| 审批意见 |
|
|
1280
|
+
| 验收标准 | specs/**/*.md | **可选**;用户确认后置于设计之后;3 级可测试性 |
|
|
1281
|
+
| 测试策略 | §5(若有)或 delta specs + 项目测试栈 | 分层矩阵可追溯 |
|
|
1282
|
+
| 部署/发布/回滚 | §2 决策 + 运行环境 | **可选**;用户确认后输出 |
|
|
1283
|
+
| 闭环性检查 | 四件套 + 锚点 + 主 specs | 内部必跑 Pass 1–7;正文表**可选** |
|
|
1284
|
+
| 可实施性评估 | tasks + design + specs + 代码 | AI 推理写入文档 |
|
|
1285
|
+
| 审批意见 | 人工签字 | **仅签字栏**;AI 预审只在对话反馈 |
|
|
1125
1286
|
```
|
|
1126
1287
|
|
|
1127
|
-
### Generation Rules
|
|
1128
|
-
|
|
1129
|
-
1. **§1
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1288
|
+
### 生成规则 (Generation Rules)
|
|
1289
|
+
|
|
1290
|
+
1. **§1 绪论须真实准确**:现状流程图中的每个痛点必须有据于 `proposal.md` 的 `## Why`、`design.md` Context 或已确认的 `explore.md`(禁止臆造痛点)。将 What Changes + Impact 吸收进 §1.2(不设单独的「变更摘要」章)。每条 User Journey 步骤须能追溯到 §5 验收标准(**当 §5 纳入时**),否则追溯到具名 delta-spec 的 Requirement/Scenario。每条 Non-Goal 须写明「不做理由」。
|
|
1291
|
+
|
|
1292
|
+
2. **§5 / §7 / §8 为可选章节(硬规则)**:写入 `approval.md` 前,须询问用户是否纳入验收标准、部署/发布/回滚、闭环性检查表。仅当用户明确选择「要」时才写入对应章节;选择「不要/省略」时整章删除(禁止用「不涉及」占位填充)。§5 纳入时须穷尽(覆盖每个 Requirement/Scenario),且放在 §3/§4 之后。
|
|
1293
|
+
|
|
1294
|
+
3. **Pass 6 证据须引用真实代码**:当 Pass 6 为 ⚠️/❌ 时,若 §8 纳入,其「关键证据」须引用实际锚点路径与具体发现;**对话**确认摘要中亦须呈现相同证据。PASS 可一行带过(例:`锚点 N 个均存在,结构可扩展`)。绿场 → `⊘` 并注明 SKIPPED 原因。
|
|
1295
|
+
|
|
1296
|
+
4. **Pass 7 证据须引用基线 specs**:当 ⚠️/❌ 时,须引用所比对的能力/requirement 名称(§8 纳入时写入正文,**对话中始终呈现**)。PASS → 一行带过;无基线 → `⊘`。
|
|
1297
|
+
|
|
1298
|
+
5. **过度设计证据须引用 design/tasks 位置**:例:「Signal 2 见于 `design.md` § D3,为单一 reviewer 类型定义了 `ReviewerFactory`」——禁止只写「过度设计」。叙述优先可读中文;路径/符号放证据列。
|
|
1299
|
+
|
|
1300
|
+
6. **语言策略与文风**:叙述遵循 `artifacts.language`。须遵守文风硬规则:通俗、缩写首次注解、禁止含糊词、**禁止正文代码腔**(路径/函数名堆砌 → 可读中文;协议字段/DDL/HTTP 示例除外)。协议标记(`Requirement:` / `WHEN` / `THEN`)保持原文形式。
|
|
1301
|
+
|
|
1302
|
+
7. **禁止修改其他文件**:本 prompt 仅生成 `approval.md`。不得修改四件套、项目代码或主 specs。
|
|
1303
|
+
|
|
1304
|
+
8. **签字栏须留空**:人工签字字段必须空白。
|
|
1305
|
+
|
|
1306
|
+
8b. **AI 预审不入库(硬规则)**:禁止将「AI 预审建议」/§10.1 建议写入 `approval.md`。建议批准/有条件批准/退回 refine/拒绝 + 理由**仅在对话**确认摘要中交付。文档 §10 **仅**含人工签字表。
|
|
1307
|
+
|
|
1308
|
+
9. **§4.4 数据库章节质量(硬规则)**:若变更读/写任何关系表(含零 DDL、仅语义变更),§4.4 **必须**包含:
|
|
1309
|
+
(a) 结构变更结论表 + 明确变更 SQL(或明确写「无」),
|
|
1310
|
+
(b) 核心实体的 Mermaid `erDiagram` + 表说明图例(表名/中文名/职责/结构/本迭代动作),
|
|
1311
|
+
(c) 每张表完整 `CREATE TABLE`(含存储引擎与字符集;MySQL 须 `ENGINE=InnoDB DEFAULT CHARSET=utf8mb4` …),
|
|
1312
|
+
(d) 每张表字段说明表(含「本迭代用法」)。
|
|
1313
|
+
禁止仅用散文描述 schema。MySQL DDL 禁止省略 ENGINE/CHARSET。零 DDL 迭代仍须展示当前基线 DDL —— 当表处于读/写路径时,禁止声称「不涉及数据库」。
|
|
1314
|
+
|
|
1315
|
+
10. **§4.5 接口章节质量(硬规则)**:若变更涉及对外/跨服务/跨模块接口(含新增、修改、行为扩展、**协议不变但本迭代消费或调用**),§4.5 **必须**包含:
|
|
1316
|
+
(a) 调用方/通道 + 鉴权总览,
|
|
1317
|
+
(b) 编号稳定的接口清单(变更类型含 新增/修改/行为扩展/不变·本迭代消费/不变·协议不变),
|
|
1318
|
+
(c) 通用错误码映射与命名/错误风格约定,
|
|
1319
|
+
(d) 清单中**每个**接口的元信息表、字段表(名/型/必填/默认/说明)、≥1 组成功请求示例与成功响应示例,
|
|
1320
|
+
**(e) 每个接口 ≥1 组失败请求/响应示例(G2)**(「不变」接口亦须典型失败场景),
|
|
1321
|
+
(f) 错误条件表。
|
|
1322
|
+
禁止只写路径名的 stub。**一旦列入 §4.5 清单,无论协议是否变更,均须完整格式输出**;禁止因「与现网一致」而省略字段表/示例/错误约定(可标注「与现网一致」并仍给出完整骨架)。
|
|
1323
|
+
|
|
1324
|
+
11. **§3 架构图须附设计要点(硬规则)**:每个架构 Mermaid 图后**必须**跟编号「设计说明 / 图要点」列表(边界/不变式/复用) —— 禁止仅复述节点名。仅有组件表不够。
|
|
1325
|
+
|
|
1326
|
+
12. **§4 Happy Path 与场景设计要点(硬规则)**:§4.1 设计要点表、§4.2 完整 Happy Path `sequenceDiagram`、§4.3 每个业务场景**必须**在图后附「设计要点」说明。仅有图无说明视为质量不合格。
|
|
1327
|
+
|
|
1328
|
+
13. **质量红线 G1–G6(硬规则)**:
|
|
1329
|
+
- **G1**:超过 5 行散文的流程描述**必须**改为 Mermaid `sequenceDiagram` / `flowchart` / `stateDiagram-v2`(禁止长散文流程)。
|
|
1330
|
+
- **G2**:§4.5 清单中**每个**接口(含**不变**)**必须**含 ≥1 组失败请求/响应示例(参数校验失败、租约过期等),禁止仅有错误码表。
|
|
1331
|
+
- **G3**:JSON 形状变更或新增列**必须**在 §4.4.4 / §4.9 记录存量数据默认值填充策略。
|
|
1332
|
+
- **G4**:**必须**说明回滚数据兼容性 —— 旧代码能否安全忽略/跳过新代码写入的数据(`omitempty`、未知字段忽略、`schema_version` 等)。仅写「回滚镜像」不够。
|
|
1333
|
+
- **G5**:当 `uiInScope=yes` 时,§4.6 **必须**含页面/路由清单 + 前端栈五元组(Framework / Styling / State / UI kit / FE testing)。仅写「用 React」不合格。
|
|
1334
|
+
- **G6**:当 `uiInScope=yes` 时,每个关键 `Page · …` **必须**覆盖空态/加载/错误至少一项,调用 API 时引用 §4.5 `In` 编号。
|
|
1335
|
+
|
|
1336
|
+
14. **文风(硬规则)**:面向实现者的通俗语言;生僻英文缩写首次使用须注解。禁止含糊词「尽量」「大概」「一般情况下」「可能需要」「酌情」「视情况」;改用「必须」「禁止」「采用 XX 方案」或显式 if/then 表。**禁止** §2.1/§3/§4 正文代码腔:改写为可读中文;每条 bullet 括号内定位至多一次;协议名仅出现在表/DDL/HTTP 示例中。
|
|
1337
|
+
|
|
1338
|
+
15. **§8 闭环正文可选但分析不可省(硬规则)**:对话摘要**始终**跑 Pass 1–7。用户选择纳入 §8 时,正文**仅**写一张汇总表(Pass | 检查项 | 结论 | 关键证据)。禁止展开七个 Pass 子节。用户选择省略时,`approval.md` 中**完全**不含 §8。
|
|
1339
|
+
|
|
1340
|
+
16. **§4.4 数据库取证(硬规则)**:起草关系型 DDL 前:
|
|
1341
|
+
(a) 执行 `project-conventions-guidance.md`,`topic=database`,Read 最多 3 份项目约定;
|
|
1342
|
+
(b) 执行 `database-guidance.md` 取 SpecFlow pack / `dbStack`;
|
|
1343
|
+
(c) Read 现网 DDL/迁移/锚点。优先级:**项目约定 + 现网 DDL > SpecFlow guidance > LLM**。§4.4.1 须记录 `项目约定` 与 `DB 技能`(或 未发现 / LLM-fallback)。禁止臆造 MCP 工具;禁止 `npx skills add`。
|
|
1344
|
+
|
|
1345
|
+
17. **§4.4 / §4.5 / §4.6 大纲层级(硬规则)**:Markdown 目录须保持浅层。
|
|
1346
|
+
- §4.4 标题仅:`#### 4.4.1–4.4.4` + 每表 `##### \`table\`(中文名)`。
|
|
1347
|
+
- §4.5 标题仅:`#### 4.5.1–4.5.3` + 每接口 `##### In · <短名>(类型)`。
|
|
1348
|
+
- §4.6 标题仅:`#### 4.6.1–4.6.5` + 每页 `##### Page · <短名>`。
|
|
1349
|
+
- 「请求体字段」「请求示例」「响应示例」「错误」「DDL」「字段说明」「JSON 形状」「通用错误码约定」「空态」「加载」「错误」「依赖接口」等**必须**为 `**加粗**` 正文标签 —— **禁止** `####` / `#####` / `######` 标题。多组示例用加粗副标,禁止额外标题节点。
|
|
1350
|
+
|
|
1351
|
+
18. **项目约定懒加载(硬规则)**:写 §3 / §4.4 / §4.5 / §4.6 前,执行 `project-conventions-guidance.md` 对应主题(`architecture` / `database` / `api` / `frontend`)。优先 `specflow/config.yaml` 的 `conventions.<topic>`;否则 activeIde → 其他 IDE → 仓根中立文档。每主题最多 3 文件。若约定文件存在但草稿违反硬禁令,在对话摘要(及 §8 若纳入)中发出 WARNING。
|
|
1352
|
+
|
|
1353
|
+
19. **绿场/缺选型 Tech Stack Intake(硬规则)**:若 `projectMode=greenfield` 或四件套缺少所需栈维度(前端/后端/数据库与缓存/基础设施),**须在对话中询问用户**后再写架构或 DDL。答案写入 §2.2 技术选型与 §2.4 决策。禁止臆造全栈。标「不涉及」的维度可跳过。必选维度用户拒绝选择 → `[待 refine 澄清: 技术选型]` 并阻止猜测栈。`uiInScope=yes` 时前端答案须覆盖五元组(见 `frontend-guidance.md`);不接受仅「React」。
|
|
1354
|
+
|
|
1355
|
+
20. **§4.6 前端章节质量(硬规则)**:若 `uiInScope=yes`,起草 §4.6 前:
|
|
1356
|
+
(a) 执行 `topic=frontend` 约定;
|
|
1357
|
+
(b) 执行 `frontend-guidance.md` §3 并 **Read** 匹配的 IDE skills/rules + 实现文档(组件/路由/状态/表单/API client/样式/a11y/测试命令/lint 禁令) —— 最多 5 文件,禁止 `invoke`;
|
|
1358
|
+
(c) Read 现网 UI 锚点。§4.6.1 **必须**引用 `项目约定` 与 `IDE skills/rules`(或 未发现)。§4.6 **必须**含 4.6.1–4.6.5(页面/状态明确后,未知命令方可标 `[待 refine 澄清]`)。页面交叉引用 §4.5 `In` 与 §4.2 旅程。UI 不在范围时整章省略 —— 禁止臆造页面树。禁止将 skill 正文原文粘贴进 `approval.md`。
|
|
1359
|
+
|
|
1360
|
+
---
|
|
1361
|
+
|
|
1362
|
+
## Part F: Segmented Generation (Map → CLI Reduce)
|
|
1363
|
+
|
|
1364
|
+
> Router detail: `prompts/approval/segmented-generation.md`
|
|
1365
|
+
> Index template: `templates/approval-index.yaml` · Part fragment: `templates/approval-part.md`
|
|
1366
|
+
|
|
1367
|
+
When `approval/index.yaml` has `mode: segmented` (default for non-trivial §4), follow
|
|
1368
|
+
**12a → Gate → 12b → 12c → 12d**. The external artifact remains `approval.md`; the
|
|
1369
|
+
`approval/` directory is agent workspace only.
|
|
1370
|
+
|
|
1371
|
+
### F.1 When to segment
|
|
1372
|
+
|
|
1373
|
+
| Condition | Mode |
|
|
1374
|
+
|-----------|------|
|
|
1375
|
+
| `tables > 2` OR `interfaces > 3` OR `pages > 2` OR `optional.s5=true` | **segmented** (mandatory) |
|
|
1376
|
+
| Else | ask user: segmented (recommended) or monolithic |
|
|
1377
|
+
|
|
1378
|
+
### F.2 Pipeline (hard order)
|
|
1379
|
+
|
|
1380
|
+
1. **12a Index + Skeleton** — write `index.yaml` + `analysis.json` + parts 01–03, 04-detail-core, 06/09/10
|
|
1381
|
+
2. **Gate** — user confirms index inventory + optional chapters + mode
|
|
1382
|
+
3. **12b Map Append** — batched `04.4*` / `04.5*` / `04.6*` / `04.7–04.9`
|
|
1383
|
+
4. **12c Optional** — `05*` / `07` / `08` only when opted in
|
|
1384
|
+
5. **12d CLI Reduce** — `specflow approval check` then `specflow approval assemble --force`
|
|
1385
|
+
|
|
1386
|
+
**Reduce 禁止 LLM** — never stitch parts in chat or paste from memory.
|
|
1387
|
+
|
|
1388
|
+
### F.3 Anti-lazy rules (Map — hard)
|
|
1389
|
+
|
|
1390
|
+
| # | Forbidden | Required |
|
|
1391
|
+
|---|-----------|----------|
|
|
1392
|
+
| L1 | One-shot full `approval.md` when `mode=segmented` | Write parts; CLI assemble |
|
|
1393
|
+
| L2 | Empty part, `< 20` chars, placeholder-only | Full section per Part E |
|
|
1394
|
+
| L3 | `TODO` / `待补充` / `此处省略` / bare `TBD` | Concrete text or `[待 refine 澄清: <元素>]` |
|
|
1395
|
+
| L4 | `详见 design/tasks` without §/In/Page id | Cross-ref `§4.5 I2` / `Page·列表` / `P1` |
|
|
1396
|
+
| L5 | New table/interface/page ids not in index | Update `index.yaml` first |
|
|
1397
|
+
| L6 | Skip DDL/字段表/失败示例 because "same as design" or "unchanged API" | G2–G6 minimum per entity; **不变**接口仍须完整 §4.5 骨架 |
|
|
1398
|
+
| L7 | Skip IDE skills/rules scan for §4.6 | `frontend-guidance.md` §3 before Map |
|
|
1399
|
+
| L8 | Paste skill/rule bodies verbatim | Readable Chinese + path in §4.6.1 |
|
|
1400
|
+
| L9 | Foreign `## N.` headings in parts | `###`/`####` only; CLI injects chapter headers |
|
|
1401
|
+
| L10 | Mark done without `specflow approval check` passing | Fix diagnostics; then assemble |
|
|
1402
|
+
|
|
1403
|
+
CLI lazy validation mirrors L2–L3 (`lazy_part_content` on assemble/check).
|
|
1404
|
+
|
|
1405
|
+
### F.4 Map context budget
|
|
1406
|
+
|
|
1407
|
+
Per batch Read only:
|
|
1408
|
+
|
|
1409
|
+
- `approval/index.yaml` + `approval/analysis.json` (verdicts, not full Pass essays)
|
|
1410
|
+
- design/tasks/spec **snippets** for batch ids
|
|
1411
|
+
- conventions (≤3 files/topic; frontend ≤5 total per frontend-guidance)
|
|
1412
|
+
- anchor files for batch entities
|
|
1413
|
+
|
|
1414
|
+
Do not reload entire four artifacts each batch.
|
|
1415
|
+
|
|
1416
|
+
### F.5 index.yaml contract
|
|
1417
|
+
|
|
1418
|
+
- `parts_order` is source of truth for assemble order
|
|
1419
|
+
- `tables[]` / `interfaces[]` / `pages[]` entries MUST include `part` matching `approval/parts/<part>.md`
|
|
1420
|
+
- `optional.s5/s7/s8` gates §5/§7/§8 parts even if files exist on disk
|
|
1421
|
+
|
|
1422
|
+
### F.6 Retry
|
|
1423
|
+
|
|
1424
|
+
| CLI diagnostic | Action |
|
|
1425
|
+
|----------------|--------|
|
|
1426
|
+
| `lazy_part_content` | Rewrite that part only; re-check |
|
|
1427
|
+
| `missing_part` | Write part or fix index |
|
|
1428
|
+
| `id_part_mismatch` | Align index `part` with filename |
|
|
1429
|
+
| `orphan_part` | Add to index or delete file |
|
|
1430
|
+
|
|
1431
|
+
Do not rerun Pass 1–7 unless analysis is stale.
|
|
1224
1432
|
|