@gordon.gan/specflow 1.4.0-beta → 1.4.2-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 +1 -1
- package/package.json +1 -1
- package/prompts/approval/database-guidance.md +79 -0
- package/prompts/approval/generate.md +600 -290
- package/skills/database/LICENSE +405 -0
- package/skills/database/ORIGIN.md +6 -0
- package/skills/database/README.md +30 -0
- package/skills/database/elasticsearch/LICENSE.txt +202 -0
- package/skills/database/elasticsearch/SKILL.md +199 -0
- package/skills/database/elasticsearch/examples/01-fulltext-search.md +215 -0
- package/skills/database/elasticsearch/examples/02-aggregation-report.md +206 -0
- package/skills/database/elasticsearch/examples/03-reindex-zero-downtime.md +200 -0
- package/skills/database/elasticsearch/examples/04-cluster-monitoring.md +204 -0
- package/skills/database/elasticsearch/references/01-query-dsl-fulltext.md +162 -0
- package/skills/database/elasticsearch/references/02-query-dsl-term.md +210 -0
- package/skills/database/elasticsearch/references/03-aggregations-metric.md +161 -0
- package/skills/database/elasticsearch/references/04-aggregations-bucket.md +236 -0
- package/skills/database/elasticsearch/references/05-mapping-types.md +134 -0
- package/skills/database/elasticsearch/references/06-analyzers.md +187 -0
- package/skills/database/elasticsearch/references/07-cluster-ops.md +225 -0
- package/skills/database/elasticsearch/references/08-elk-integration.md +170 -0
- package/skills/database/mysql/SKILL.md +195 -0
- package/skills/database/mysql/examples/01-connection-pool.md +75 -0
- package/skills/database/mysql/examples/02-slow-query-optimization.md +98 -0
- package/skills/database/mysql/examples/03-master-slave-setup.md +144 -0
- package/skills/database/mysql/examples/04-backup-strategy.md +212 -0
- package/skills/database/mysql/references/01-functions-string.md +103 -0
- package/skills/database/mysql/references/02-functions-date.md +152 -0
- package/skills/database/mysql/references/03-functions-aggregate-window.md +167 -0
- package/skills/database/mysql/references/04-functions-json.md +129 -0
- package/skills/database/mysql/references/05-sql-ddl-types.md +235 -0
- package/skills/database/mysql/references/06-index-optimization.md +232 -0
- package/skills/database/mysql/references/07-replication-ha.md +213 -0
- package/skills/database/mysql/references/08-backup-restore.md +207 -0
- package/skills/database/mysql/references/09-advanced-features.md +345 -0
- package/skills/database/oracle/LICENSE.txt +202 -0
- package/skills/database/oracle/SKILL.md +238 -0
- package/skills/database/oracle/examples/01-plsql-procedure.md +90 -0
- package/skills/database/oracle/examples/02-awr-analysis.md +99 -0
- package/skills/database/oracle/examples/03-rman-backup.md +108 -0
- package/skills/database/oracle/examples/04-dataguard-setup.md +146 -0
- package/skills/database/oracle/references/01-functions-string.md +91 -0
- package/skills/database/oracle/references/02-functions-date.md +71 -0
- package/skills/database/oracle/references/03-analytic-functions.md +103 -0
- package/skills/database/oracle/references/04-plsql-guide.md +303 -0
- package/skills/database/oracle/references/05-performance-tuning.md +164 -0
- package/skills/database/oracle/references/06-backup-recovery.md +115 -0
- package/skills/database/oracle/references/07-dataguard-rac.md +76 -0
- package/skills/database/oracle/references/08-security.md +170 -0
- package/skills/database/oracle/references/09-sql-syntax.md +152 -0
- package/skills/database/oracle/references/10-features.md +174 -0
- package/skills/database/postgresql/LICENSE.txt +202 -0
- package/skills/database/postgresql/SKILL.md +182 -0
- package/skills/database/postgresql/examples/.gitkeep +0 -0
- package/skills/database/postgresql/examples/01-jsonb-query.md +72 -0
- package/skills/database/postgresql/examples/02-cte-recursive.md +110 -0
- package/skills/database/postgresql/examples/03-performance-tuning.md +114 -0
- package/skills/database/postgresql/examples/04-streaming-replication.md +113 -0
- package/skills/database/postgresql/references/.gitkeep +0 -0
- package/skills/database/postgresql/references/01-functions-string.md +174 -0
- package/skills/database/postgresql/references/02-functions-datetime.md +54 -0
- package/skills/database/postgresql/references/03-functions-aggregate-window.md +142 -0
- package/skills/database/postgresql/references/04-functions-jsonb.md +117 -0
- package/skills/database/postgresql/references/05-fulltext-search.md +109 -0
- package/skills/database/postgresql/references/06-index-types.md +95 -0
- package/skills/database/postgresql/references/07-partition-fdw.md +133 -0
- package/skills/database/postgresql/references/08-replication-backup.md +215 -0
- package/skills/database/redis/LICENSE.txt +202 -0
- package/skills/database/redis/SKILL.md +922 -0
- package/skills/database/redis/examples/01-cache-usage.md +104 -0
- package/skills/database/redis/examples/02-session-storage.md +72 -0
- package/skills/database/redis/examples/03-leaderboard.md +63 -0
- package/skills/database/redis/examples/04-redis-cluster-setup.md +70 -0
- package/skills/database/redis/examples/05-stream-queue.md +65 -0
- package/skills/database/redis/references/command-quick-ref.md +180 -0
- package/skills/database/redis/references/commands-admin-key.md +413 -0
- package/skills/database/redis/references/commands-set-sorted-advanced.md +539 -0
- package/skills/database/redis/references/commands-string-hash-list.md +458 -0
- package/skills/database/redis/references/memory-optimization.md +150 -0
- package/skills/database/redis/references/redis-conf-production.md +139 -0
- package/skills/specflow-approval/SKILL.md +102 -181
- package/templates/approval.md +321 -221
|
@@ -38,12 +38,15 @@ SKILL.md caller which are missing.
|
|
|
38
38
|
## Part A: Closed-Loop Verification (7 Passes)
|
|
39
39
|
|
|
40
40
|
Each Pass examines cross-artifact or artifact-to-reality coherence from one angle.
|
|
41
|
-
Every Pass MUST produce:
|
|
41
|
+
Every Pass MUST produce (for analysis / conversation):
|
|
42
42
|
|
|
43
43
|
1. A **Verdict**: `PASS` | `WARNING` | `FAIL` | `SKIPPED`
|
|
44
|
-
2. **Evidence**: concrete citations (
|
|
44
|
+
2. **Evidence**: concrete citations (keep brief; full matrices only when WARNING/FAIL)
|
|
45
45
|
3. A brief **rationale** linking evidence to verdict
|
|
46
46
|
|
|
47
|
+
**Document output (§8)**: collapse all 7 Passes into **one table** — see Part E §8.
|
|
48
|
+
Do not paste per-Pass essays into `approval.md`.
|
|
49
|
+
|
|
47
50
|
Verdict calibration:
|
|
48
51
|
|
|
49
52
|
- `PASS` — no gaps found in this dimension.
|
|
@@ -99,7 +102,7 @@ testable? Are delta operations structurally complete?"
|
|
|
99
102
|
5. RENAMED Requirements have `FROM:` and `TO:`. Missing is a `FAIL`.
|
|
100
103
|
6. MODIFIED Requirements reference names that exist in the main specs baseline (if baseline exists). Mismatched name is a `FAIL`.
|
|
101
104
|
7. Run `specflow validate` on each delta spec file. Any validation error is a `FAIL`.
|
|
102
|
-
8. **Detailed-design coverage** (cross-check with §
|
|
105
|
+
8. **Detailed-design coverage** (cross-check with §4 方案详细设计): every spec Requirement
|
|
103
106
|
that involves data/interface/flow changes must have a corresponding detailed-design
|
|
104
107
|
element. A Requirement whose implementation needs a data structure, interface, or state
|
|
105
108
|
flow but has NO detailed-design element (or an element marked "待 refine 澄清") is a
|
|
@@ -331,6 +334,31 @@ The recommendation must include a 1-2 sentence rationale citing the specific ver
|
|
|
331
334
|
Generate `approval.md` following this exact structure. Adapt narrative language to
|
|
332
335
|
`artifacts.language`; keep protocol markers, IDs, paths, commands, and code in English.
|
|
333
336
|
|
|
337
|
+
**Chapter order (implementer-first, aligned with scenario-job-compile readability)**:
|
|
338
|
+
|
|
339
|
+
1. 绪论与边界 — proposal + optional explore + AI; absorbs What/Impact; **no 变更摘要 chapter**
|
|
340
|
+
2. 技术方案评估 — decisions / risks / design quality
|
|
341
|
+
3. 架构整体设计 — diagrams + **图要点说明** + components (before acceptance)
|
|
342
|
+
4. 方案详细设计 — 设计要点 + Happy Path + 业务场景(+说明) + data/API/…
|
|
343
|
+
5. 验收标准 — **after** architecture & detailed design
|
|
344
|
+
6. 测试策略 → 7. 部署 → 8. 闭环 → 9. 可实施性 → 10. 审批
|
|
345
|
+
|
|
346
|
+
### ⚠️ 质量红线 (Quality Gates) — 必须严格执行
|
|
347
|
+
|
|
348
|
+
生成 `approval.md` 全文时下列红线**缺一不可**;违反则详细设计/接口/数据章节视为不合格,确认前必须补全。
|
|
349
|
+
|
|
350
|
+
| # | 红线 | 要求 |
|
|
351
|
+
|---|------|------|
|
|
352
|
+
| G1 | 一图胜千言 | 任何超过 **5 行**的文字流程描述,**必须**改为 Mermaid 代码块(`sequenceDiagram` / `flowchart` / `stateDiagram-v2`),禁止长段落散文流程 |
|
|
353
|
+
| G2 | 必须有「失败」示例 | §4.5 每个「新增/修改/行为扩展」接口:除成功请求/响应示例外,**必须**另附 ≥1 组**报错**请求或响应示例(如参数校验失败、租约过期、未认证);仅有错误码表、无 HTTP/正文示例 → 不合格 |
|
|
354
|
+
| G3 | 必须有「数据迁移方案」 | 凡涉及 **JSON 字段形状变更**或**新增列**:必须写明**存量数据的默认值填充策略**(回填脚本 / 读时默认 / 禁止空读等);零 DDL 但改 JSON 语义同样适用 |
|
|
355
|
+
| G4 | 必须有「回滚兼容」说明 | 若发布失败回滚:新代码已写入的数据,旧版代码是否能**安全跳过/忽略**?必须给出明确方案(如 `omitempty`、忽略未知字段、`schema_version` 分派、双写兼容窗口);禁止只写「回滚镜像」而无数据兼容结论 |
|
|
356
|
+
|
|
357
|
+
### Style & Tone (文风要求) — 全文适用
|
|
358
|
+
|
|
359
|
+
1. **通俗易懂**:面向要动手的开发同学;避免生僻英文缩写,**首次出现必须注解**(例:`DDL`(数据定义语言)、`RPC`(远程过程调用));协议字段名/路径/代码标识符保持原文。
|
|
360
|
+
2. **逻辑严密**:拒绝模棱两可词 —— **禁止**使用「尽量」「大概」「一般情况下」「可能需要」「酌情」「视情况」等;应使用「**必须**」「**禁止**」「**采用 XX 方案**」「固定为…」。若确有分支,写成显式条件表(若 A → 做 X;若 B → 做 Y),不得用含糊副词搪塞。
|
|
361
|
+
|
|
334
362
|
```markdown
|
|
335
363
|
# 技术方案审批文档: <change-name>
|
|
336
364
|
|
|
@@ -340,79 +368,99 @@ Generate `approval.md` following this exact structure. Adapt narrative language
|
|
|
340
368
|
|
|
341
369
|
---
|
|
342
370
|
|
|
343
|
-
## 1.
|
|
344
|
-
|
|
345
|
-
| 维度 | 值 |
|
|
346
|
-
|------|-----|
|
|
347
|
-
| Change 名称 | <change-name> |
|
|
348
|
-
| 创建日期 | <from .specflow.yaml created> |
|
|
349
|
-
| 当前 phase | refined |
|
|
350
|
-
| 技术栈 | <Node/TypeScript / Go / Python / Rust / unknown> |
|
|
351
|
-
| Capability 数 | N (新增 X / 修改 Y) |
|
|
352
|
-
| Requirement 数 | N |
|
|
353
|
-
| Scenario 数 | N (功能可测试 A / 文档可测试 B / 不可测试 C) |
|
|
354
|
-
| 任务总数 | N (已完成 X / 待实施 Y) |
|
|
355
|
-
| Design 决策数 | N |
|
|
356
|
-
| 识别风险数 | N |
|
|
357
|
-
| 代码锚点文件数 | N (存在 M / 不存在 K / 新建 L) |
|
|
358
|
-
| 基线 spec 数 | N (或 "无基线 — greenfield") |
|
|
359
|
-
| 过度设计信号数 | N (0 = PASS / 1-2 = WARNING / 3+ = FAIL) |
|
|
360
|
-
| 扩展性信号数 | N (4-5 = PASS / 0-3 = WARNING) |
|
|
361
|
-
|
|
362
|
-
> 上述计数基于四件套文件 + 项目代码 + 主 specs 精确统计,非 AI 估算。
|
|
371
|
+
## 1. 绪论与边界 (Introduction & Boundaries)
|
|
363
372
|
|
|
364
|
-
|
|
373
|
+
> 本章以**业务叙事**说明"为什么做、做什么、影响面、做完后如何闭环、坚决不做什么"。
|
|
374
|
+
> **数据来源**:`proposal.md`(必选)+ `explore.md`(若存在且可用则吸收)+ **AI 提炼**。
|
|
375
|
+
> **不再单列「变更摘要」章**:原 Why / What Changes / Impact 并入本章 1.1–1.2。
|
|
365
376
|
|
|
366
|
-
|
|
377
|
+
### 1.1 背景与痛点 (Background & Pain Points)
|
|
367
378
|
|
|
368
|
-
|
|
369
|
-
[2-3 句话提炼 proposal.md 的 Why]
|
|
379
|
+
用一段话说明当前现状,并用 **Mermaid 现状流程图** 直观呈现,痛点节点**用红色标注**。
|
|
370
380
|
|
|
371
|
-
|
|
372
|
-
[按 新增/修改/移除/重命名 分类,标注 BREAKING]
|
|
381
|
+
**要求**:
|
|
373
382
|
|
|
374
|
-
|
|
375
|
-
|
|
383
|
+
1. 描述当前业务/系统的实际流程(用户如何完成目标、经过了哪些步骤)
|
|
384
|
+
2. 用 Mermaid `flowchart` 绘制现状流程
|
|
385
|
+
3. **痛点节点用红色标注**:`classDef pain fill:#ffcccc,stroke:#cc0000,color:#000` + `:::pain` 或 `class X pain`
|
|
386
|
+
4. 每个痛点一句话说明**它造成的代价**(返工/延迟/错误/成本)
|
|
387
|
+
5. 痛点应可追溯到 proposal.md 的 `## Why`;若有 `explore.md`,吸收其中已确认的痛点/约束洞察(勿编造)
|
|
376
388
|
|
|
377
|
-
|
|
389
|
+
**痛点清单**(对应图中红色节点):
|
|
378
390
|
|
|
379
|
-
|
|
391
|
+
| 痛点 | 代价 |
|
|
392
|
+
|------|------|
|
|
393
|
+
| <痛点> | <代价> |
|
|
380
394
|
|
|
381
|
-
|
|
395
|
+
### 1.2 做什么与影响面 (What & Impact)
|
|
382
396
|
|
|
383
|
-
|
|
384
|
-
[Delta 操作类型: ADDED / MODIFIED / REMOVED / RENAMED]
|
|
397
|
+
AI 从 proposal `## What Changes` / `## Impact`(及 explore 相关结论)提炼,替代原「变更摘要」章。
|
|
385
398
|
|
|
386
|
-
|
|
387
|
-
<描述>
|
|
399
|
+
**做什么**(按 新增/修改/移除/重命名;BREAKING 显式标注):
|
|
388
400
|
|
|
389
|
-
|
|
|
390
|
-
|
|
391
|
-
|
|
|
401
|
+
| 类别 | 内容 | BREAKING? |
|
|
402
|
+
|------|------|-----------|
|
|
403
|
+
| 新增 | | |
|
|
404
|
+
| 修改 | | |
|
|
405
|
+
| 移除 / 重命名 | | |
|
|
406
|
+
|
|
407
|
+
**影响面**:
|
|
408
|
+
|
|
409
|
+
| 影响区域 | 影响等级 | 说明 |
|
|
410
|
+
|---------|---------|------|
|
|
411
|
+
| | 高/中/低 | |
|
|
412
|
+
|
|
413
|
+
### 1.3 业务闭环与目标 (Business Loop & Goals)
|
|
414
|
+
|
|
415
|
+
说明"本次变更完成后,业务如何形成闭环",并给出 **用户操作路径(User Journey)**。
|
|
416
|
+
|
|
417
|
+
**要求**:
|
|
418
|
+
|
|
419
|
+
1. 描述完成本次变更后,用户完成目标的完整路径
|
|
420
|
+
2. 用 Mermaid `sequenceDiagram` 或 `flowchart` 绘制 User Journey
|
|
421
|
+
3. 标注每一步的价值/产出
|
|
422
|
+
4. Goals 应可验证,引用 **§5 验收标准**
|
|
423
|
+
|
|
424
|
+
**业务目标**(可验证):
|
|
425
|
+
|
|
426
|
+
| 目标 | 可验证方式(引用 §5) |
|
|
427
|
+
|------|---------------------|
|
|
428
|
+
| <目标> | §5 <Scenario 名> |
|
|
429
|
+
|
|
430
|
+
### 1.4 非目标 (Non-Goals)
|
|
431
|
+
|
|
432
|
+
**必须明确列出本次迭代坚决不做的事项,并说明不做理由**(防止需求蔓延)。
|
|
433
|
+
|
|
434
|
+
1. 从 proposal.md / design.md / explore.md 的 Non-Goals 提炼,必须补充"不做理由"
|
|
435
|
+
2. 若确实没有,写明 `proposal/design 未声明 Non-Goals,建议在 refine 补充边界`
|
|
436
|
+
|
|
437
|
+
| 非目标 | 不做理由 |
|
|
438
|
+
|--------|---------|
|
|
439
|
+
| <非目标> | <理由> |
|
|
392
440
|
|
|
393
441
|
---
|
|
394
442
|
|
|
395
|
-
##
|
|
443
|
+
## 2. 技术方案评估 (Technical Design Review)
|
|
396
444
|
|
|
397
|
-
###
|
|
445
|
+
### 2.1 现状与约束 (Context & Constraints)
|
|
398
446
|
[整合 design.md Context + AI 补充的隐含约束]
|
|
399
447
|
|
|
400
|
-
###
|
|
448
|
+
### 2.2 目标与非目标 (Goals & Non-Goals)
|
|
401
449
|
[整合 design.md Goals/Non-Goals]
|
|
402
450
|
|
|
403
|
-
###
|
|
451
|
+
### 2.3 决策评审表 (Decision Review)
|
|
404
452
|
|
|
405
453
|
| 决策 | 选定方案 | 备选方案 | 理由 | 影响评估 | 状态 |
|
|
406
454
|
|------|---------|---------|------|---------|------|
|
|
407
455
|
| D1: <name> | <方案> | <A/B> | <理由> | <评估> | Proposed |
|
|
408
456
|
|
|
409
|
-
###
|
|
457
|
+
### 2.4 风险与权衡 (Risks & Trade-offs)
|
|
410
458
|
|
|
411
459
|
| 风险 | 严重等级 | 缓解措施 | 就绪度 |
|
|
412
460
|
|------|---------|---------|--------|
|
|
413
461
|
| <name> | 高/中/低 | <措施> | ✅/⚠️/❌ |
|
|
414
462
|
|
|
415
|
-
###
|
|
463
|
+
### 2.5 设计质量评估 (Design Quality)
|
|
416
464
|
|
|
417
465
|
#### 过度设计检查
|
|
418
466
|
| # | 信号 | 检测到? | 证据(design/tasks 位置) |
|
|
@@ -438,192 +486,396 @@ Generate `approval.md` following this exact structure. Adapt narrative language
|
|
|
438
486
|
|
|
439
487
|
---
|
|
440
488
|
|
|
441
|
-
|
|
489
|
+
|
|
490
|
+
## 3. 架构整体设计 (Architecture Design)
|
|
442
491
|
|
|
443
492
|
> 本章回答"系统由哪些模块组成、模块间如何依赖与交互、每个模块的职责与边界是什么"。
|
|
444
|
-
>
|
|
445
|
-
>
|
|
493
|
+
> 聚焦**宏观结构**;与 §4 方案详细设计(模块内部实现 / 时序)互补。
|
|
494
|
+
> 质量标杆:`scenario-job-compile` §3 —— **图 + 图要点说明 + 核心组件表**。
|
|
446
495
|
|
|
447
|
-
###
|
|
496
|
+
### 3.1 总体架构 (Architecture Overview)
|
|
448
497
|
|
|
449
|
-
用 Mermaid
|
|
498
|
+
用 Mermaid 绘制 **模块依赖/分层图**(推荐),并可附加 **系统交互总览**。
|
|
450
499
|
|
|
451
|
-
|
|
500
|
+
**绘制要求**:
|
|
452
501
|
|
|
453
|
-
|
|
454
|
-
|
|
502
|
+
1. 标注变更模块(`[新增]` / `[修改]`),影响面一眼可见
|
|
503
|
+
2. 边标注依赖方向或交互消息
|
|
504
|
+
3. CLI/库 → `src/core/*`、`src/cli/*`;Web → 服务/组件;多仓 → 仓库/服务
|
|
505
|
+
4. 图与 **§2 决策**一致
|
|
455
506
|
|
|
456
|
-
|
|
507
|
+
**设计说明 / 图要点**(强制,紧跟每张架构图之后):
|
|
457
508
|
|
|
458
|
-
|
|
459
|
-
2. 边标注**依赖方向**(谁依赖谁)或**交互消息**(谁调用谁,传递什么)
|
|
460
|
-
3. 对纯 CLI/库项目,模块 = 源码模块(`src/core/*`、`src/cli/*`);对 Web 项目,模块 = 服务/组件;对多仓,模块 = 仓库/服务
|
|
461
|
-
4. 图应**与 §4 决策一致** —— 图上体现的结构必须能追溯到某个决策
|
|
509
|
+
用编号列表解释图中**读图关键点**(不是复述节点名),对齐标杆「设计说明(总体架构)」:
|
|
462
510
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
511
|
+
1. 分层/边界怎么划、谁不直连谁
|
|
512
|
+
2. 本迭代不变式(如零 DDL、双通道、一场景一作业)
|
|
513
|
+
3. 复用 vs 新增的落点
|
|
514
|
+
4. 与 §2 决策的对应关系
|
|
515
|
+
|
|
516
|
+
若有第二张交互图,另写 **交互要点**(一段或短列表):谁感知、谁禁止直连 DB/绕过网关等。
|
|
517
|
+
|
|
518
|
+
### 3.2 核心组件说明 (Core Components)
|
|
519
|
+
|
|
520
|
+
| 组件 | 职责 | 边界(做什么 / 不做什么) | 依赖 | 变更类型 |
|
|
521
|
+
|------|------|-------------------------|------|---------|
|
|
522
|
+
| `<组件名>` | 一句话职责 | 做什么;不做什么 | 依赖的组件 | 新增/修改/不变 |
|
|
523
|
+
|
|
524
|
+
**填写要求**:列出新增+修改组件;边界写「不做什么」;与 §3.1 图一一对应;边界可追溯到 §2 决策。
|
|
525
|
+
|
|
526
|
+
可附 **组件边界总原则**(短列表:平台/Worker/控制台各做什么、禁止什么)。
|
|
527
|
+
|
|
528
|
+
**不涉及架构变更时写**:`不涉及架构变更(单模块/单文件调整,模块边界无变化)`。
|
|
529
|
+
|
|
530
|
+
### 3.3 架构一致性自检(生成后检查)
|
|
531
|
+
|
|
532
|
+
- [ ] §3.1 图标注了新增/修改模块
|
|
533
|
+
- [ ] **每张架构图后有「设计说明 / 图要点」**(非空编号列表)
|
|
534
|
+
- [ ] §3.2 每个组件有「不做什么」边界
|
|
535
|
+
- [ ] 图与表一一对应
|
|
536
|
+
- [ ] 组件边界可追溯到 §2 决策
|
|
537
|
+
- [ ] 未涉及时显式标注「不涉及架构变更」
|
|
538
|
+
|
|
539
|
+
---
|
|
540
|
+
|
|
541
|
+
## 4. 方案详细设计 (Detailed Design)
|
|
542
|
+
|
|
543
|
+
> 将方案从宏观决策落到实现者可照写的细节。
|
|
544
|
+
> **只呈现本变更涉及的部分**;不涉及显式写「不涉及 X」。
|
|
545
|
+
> 每个元素可追溯到 **§5 验收标准**与 **§2 决策**。
|
|
546
|
+
> 质量标杆:`scenario-job-compile` §4 —— **设计要点一览 → 业务时序(含设计要点说明) → 表/接口**。
|
|
547
|
+
|
|
548
|
+
### 4.1 设计要点一览(强制)
|
|
549
|
+
|
|
550
|
+
从 design 决策提炼实现**不可随便推翻**的要点(P1…Pn):
|
|
551
|
+
|
|
552
|
+
| 编号 | 要点 | 说明 |
|
|
553
|
+
|------|------|------|
|
|
554
|
+
| P1 | <短名> | <一句话不变量/策略> |
|
|
555
|
+
|
|
556
|
+
### 4.2 核心业务时序 · Happy Path(强制)
|
|
557
|
+
|
|
558
|
+
**必须**给出主成功路径的**完整** Mermaid `sequenceDiagram`(建议 `autonumber`),覆盖主角色从发起到成功终态的端到端调用;不得用一句话替代。
|
|
559
|
+
|
|
560
|
+
**结构**:
|
|
561
|
+
|
|
562
|
+
1. **目的**:一句话
|
|
563
|
+
2. **时序图**:Happy Path 全链路
|
|
564
|
+
3. **设计要点**:图后强制说明(不变式、与 P1…Pn 对应、本图不展开的失败边界)
|
|
483
565
|
|
|
484
|
-
**示例(系统交互图)**:
|
|
485
566
|
```mermaid
|
|
486
567
|
sequenceDiagram
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
participant F as Filesystem
|
|
490
|
-
participant P as Parity check
|
|
491
|
-
U->>C: specflow init --artifact-language zh-CN
|
|
492
|
-
C->>F: 创建 specflow/{changes,specs}
|
|
493
|
-
C->>F: 写入 config.yaml (artifacts.language)
|
|
494
|
-
C->>F: 复制 IDE 资产
|
|
495
|
-
C->>P: parity 严格校验
|
|
496
|
-
P-->>C: ok / fail
|
|
497
|
-
C-->>U: status + message
|
|
568
|
+
autonumber
|
|
569
|
+
%% Happy Path — 成功路径完整时序
|
|
498
570
|
```
|
|
499
571
|
|
|
500
|
-
|
|
572
|
+
**设计要点**:
|
|
501
573
|
|
|
502
|
-
|
|
574
|
+
- …
|
|
503
575
|
|
|
504
|
-
|
|
505
|
-
|------|------|-------------------------|------|---------|
|
|
506
|
-
| `<组件名>` | 一句话职责 | 做什么;不做什么(明确边界) | 依赖的组件 | 新增/修改/不变 |
|
|
576
|
+
### 4.3 业务场景时序(强制有说明)
|
|
507
577
|
|
|
508
|
-
|
|
578
|
+
对每个关键业务场景输出同构小节(对齐标杆「业务流程 A/B/C…」):
|
|
509
579
|
|
|
510
|
-
|
|
511
|
-
2. 边界要写"不做什么" —— 明确职责归属,防止实现时逻辑放错模块(如:CLI 不解析斜杠参数、核心层不做 AI 推理)
|
|
512
|
-
3. 依赖方向要明确(谁依赖谁),避免循环依赖
|
|
513
|
-
4. **与 §5.1 图一致**:每个表格组件应在图中出现
|
|
514
|
-
5. 每个组件边界可追溯到 §4 决策(如 D1 选择"在 skill 层解释 --yes" → 边界"CLI 不解析斜杠参数")
|
|
580
|
+
#### 场景 X · `<名称>`
|
|
515
581
|
|
|
516
|
-
|
|
582
|
+
1. **目的**
|
|
583
|
+
2. **时序/状态/流程开**(Mermaid `sequenceDiagram` / `flowchart` / `stateDiagram-v2`)
|
|
584
|
+
3. **设计要点**(强制 — 禁止有图无说明;可用列表或小表)
|
|
517
585
|
|
|
518
|
-
|
|
519
|
-
|------|------|------|------|------|
|
|
520
|
-
| `src/core/artifact-language.ts` | 定义语言类型、别名规范化、指导渲染 | 只定义策略,不写文件;不做自然语言检测 | 无 | 新增 |
|
|
521
|
-
| `src/cli/commands/init.ts` | 初始化项目、写入 config、调用资产生成 | 只写新配置;不覆盖已有 config;不做 AI 推理 | project-config, artifact-language | 修改 |
|
|
522
|
-
| `src/core/project-config.ts` | 解析 config.yaml,产出诊断 | 只解析,不校验 IDE 资产;错误恢复为默认值 | artifact-language | 修改 |
|
|
586
|
+
至少覆盖本变更的核心分支(如失败策略、幂等、兼容缺省、计划 vs 调试等)。纯单步无分支时可写:`不涉及多业务场景(主路径已由 §4.2 Happy Path 覆盖)`——但仍须保留 §4.2。
|
|
523
587
|
|
|
524
|
-
|
|
588
|
+
### 4.4 数据结构 / 数据模型变更 (Data Structures)
|
|
525
589
|
|
|
526
|
-
|
|
590
|
+
**适用范围**:涉及持久化、状态存储、数据模型的变更。纯 CLI/库项目若无数据库,覆盖配置结构 / 状态文件 / 缓存结构 / YAML schema 等"数据模型"(走下方「非库表路径」)。
|
|
527
591
|
|
|
528
|
-
|
|
529
|
-
-
|
|
530
|
-
|
|
531
|
-
-
|
|
532
|
-
-
|
|
592
|
+
> **DB 技能路由(先于起草)**:执行 `prompts/approval/database-guidance.md`。
|
|
593
|
+
> - **命中** `mysql` / `postgresql` / `oracle`(及确需时的 redis/es):`Read`
|
|
594
|
+
> `skills/database/<stack>/SKILL.md` 与路由表中的 DDL/索引/JSON 参考,用其惯例补强类型、引擎、字符集、索引与 Gotchas。
|
|
595
|
+
> - **未命中**(`dbStack=none`):不硬套某厂商 skill,**交给大模型**按下方 SpecFlow 硬门槛生成。
|
|
596
|
+
> - 技能是 **Read 知识包**,不是 MCP tool;不得用「调 tool」替代读文件。
|
|
597
|
+
> - 在总则「DDL 来源」旁注明:`skills/database/<stack>`(本地) 或 `LLM-fallback`。
|
|
533
598
|
|
|
534
|
-
|
|
599
|
+
> **质量硬门槛(库表路径)**:只要本变更读写/依赖任何数据库表(含"零 DDL、只改读写语义"),§4.4 **必须**按下列结构输出,不得用一句话带过、不得省略 ER / DDL / 字段说明表。参考质量标杆:`scenario-job-compile` 类审批文档的「表与数据设计」章(总则结论表 → ER → 表一览 → 逐表 DDL+字段表 → 非表字段与回滚)。
|
|
535
600
|
|
|
536
|
-
|
|
601
|
+
> **大纲 / 标题层级(硬门槛 — 防 TOC 爆炸)**:Markdown 预览大纲**只允许**下列标题进入目录;「DDL」「字段说明」「JSON 形状」等**禁止**写成 `####`/`#####`/`######`,一律用 **加粗标签** + 正文/代码块/表格。
|
|
537
602
|
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
603
|
+
```text
|
|
604
|
+
### 4.4 数据结构 / 数据模型变更
|
|
605
|
+
├── #### 4.4.1 总则与本迭代结构变更结论
|
|
606
|
+
├── #### 4.4.2 ER 图(核心实体关系)
|
|
607
|
+
├── #### 4.4.3 逐表详设
|
|
608
|
+
│ ├── ##### `table_a`(中文名) ← 每张表仅此一级标题
|
|
609
|
+
│ └── ##### `table_b`(中文名)
|
|
610
|
+
└── #### 4.4.4 非表字段、数据迁移与回滚兼容
|
|
611
|
+
```
|
|
541
612
|
|
|
542
|
-
|
|
613
|
+
表内固定顺序用加粗标签(不是标题):`**本迭代动作**` → `**本迭代变更语句**` → `**DDL(现网/目标)**` → `**字段说明**` →(可选)`**JSON 形状 · <字段名>**`。
|
|
543
614
|
|
|
544
|
-
|
|
615
|
+
#### A. 库表路径(MySQL / PostgreSQL / SQLite 等关系库)——强制结构
|
|
545
616
|
|
|
546
|
-
|
|
547
|
-
|------|------|
|
|
548
|
-
| 新增/修改的表结构或数据模型 | 名称、字段、类型、长度、约束(主键/外键/唯一/非空/默认值) |
|
|
549
|
-
| 索引建议 | 由查询模式驱动的索引(覆盖查询/联合/唯一),不盲目加索引;说明每条索引支撑的查询 |
|
|
550
|
-
| 数据迁移 | 存量数据转换方式、迁移脚本、回滚方案 |
|
|
551
|
-
| 配置结构 | 新增/修改的配置键、类型、默认值、生效时机 |
|
|
617
|
+
按以下小节**顺序**生成。缺任一强制项 → 视为详细设计质量不合格,在确认摘要中报告用户并标记 `[待 refine 澄清]` 或补全后再写入。
|
|
552
618
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
619
|
+
##### 4.4.1 总则与本迭代结构变更结论
|
|
620
|
+
|
|
621
|
+
用结论表一眼说清本迭代对库结构做什么(即使结论是「零迁移」也要写明):
|
|
622
|
+
|
|
623
|
+
| 项 | 结论 |
|
|
624
|
+
|----|------|
|
|
625
|
+
| 数据库迁移(脚本/工具名) | 有 / **本迭代零迁移** |
|
|
626
|
+
| 新建表 | 表名列表 / **无** |
|
|
627
|
+
| 新增 / 修改 / 删除列 | 列清单 / **无** |
|
|
628
|
+
| 新增索引 | 索引清单 / **无** |
|
|
629
|
+
| DDL 来源 | 仓库基线路径 或 本迭代新增 |
|
|
630
|
+
| DB 技能 | `skills/database/<stack>`(本地) / `LLM-fallback` |
|
|
631
|
+
|
|
632
|
+
紧接一段 **本迭代变更语句** 代码块:
|
|
633
|
+
|
|
634
|
+
- 有变更:给出可执行的 `CREATE` / `ALTER` / `DROP`(与下方逐表 DDL 一致)。
|
|
635
|
+
- **零变更**:显式写「无(明确不执行)」,并可用注释列出**禁止合入**的反例 `ALTER`/`CREATE`(防止实现时偷偷加列)。
|
|
636
|
+
|
|
637
|
+
##### 4.4.2 ER 图(核心实体关系)——强制
|
|
638
|
+
|
|
639
|
+
用 Mermaid `erDiagram` 画出**本变更涉及的核心实体**(新增 + 修改 + 本迭代强依赖的既有表),标注:
|
|
640
|
+
|
|
641
|
+
1. 实体名(= 表名)与**中文表意**(可用实体注释或紧随其后的说明)。
|
|
642
|
+
2. 关系基数(`||--o{` / `}o--||` 等)与关联键语义(如「作业 1 — N 逐步结果」)。
|
|
643
|
+
3. 每个实体列出 **3–8 个关键属性**(主键、业务主键、外键、本迭代读写的关键列);勿堆砌全量字段(全量在字段说明表)。
|
|
644
|
+
4. 与 §2 决策、§3 组件一致:图中实体必须在表一览与逐表章节出现。
|
|
645
|
+
|
|
646
|
+
```mermaid
|
|
647
|
+
erDiagram
|
|
648
|
+
PARENT_TABLE ||--o{ CHILD_TABLE : "1:N 业务关系说明"
|
|
649
|
+
PARENT_TABLE {
|
|
650
|
+
char uid PK "业务主键"
|
|
651
|
+
varchar name "名称"
|
|
652
|
+
}
|
|
653
|
+
CHILD_TABLE {
|
|
654
|
+
char uid PK
|
|
655
|
+
char parent_uid FK
|
|
656
|
+
int step_order "本迭代幂等键之一"
|
|
657
|
+
}
|
|
564
658
|
```
|
|
565
659
|
|
|
566
|
-
|
|
660
|
+
**图说明(强制,紧跟 ER 图)**:用表格描述图中每张表,提升可读性 —— 不是重复 ER 属性列表,而是回答「这张表是干什么的、本迭代怎么动」:
|
|
661
|
+
|
|
662
|
+
| 表名 | 中文名 | 职责(一句话) | 结构 | 本迭代动作 |
|
|
663
|
+
|------|--------|--------------|------|------------|
|
|
664
|
+
| `parent_table` | … | … | 不变 / 新增 / 改列 | 只读 / 写入 / 新建 |
|
|
665
|
+
|
|
666
|
+
##### 4.4.3 逐表详设(强制骨架)
|
|
667
|
+
|
|
668
|
+
对表一览中的**每一张表**输出同构小节 `##### \`table_name\`(中文名)`(**仅此一级**进大纲;其下**禁止**再开标题)。顺序固定,标签一律 `**加粗**`:
|
|
669
|
+
|
|
670
|
+
1. **本迭代动作**:只读 / 写入(既有路径) / 新建 / 改结构(列清单) —— 一句话 + 关键不变量(如幂等键)。
|
|
671
|
+
2. **本迭代变更语句**:`无` 或完整 `ALTER`/`CREATE` 片段(可执行)。
|
|
672
|
+
3. **DDL(现网/目标)**:完整 `CREATE TABLE ...`(即使本迭代零 DDL 也给出对照用完整表定义)。
|
|
673
|
+
- **必须含存储引擎与字符集**(MySQL:`ENGINE=InnoDB DEFAULT CHARSET=utf8mb4` …;PostgreSQL 写明 schema;SQLite 可省略 ENGINE)。
|
|
674
|
+
- 含 PRIMARY KEY、UNIQUE、KEY/INDEX、必要时列/表 `COMMENT`;首行注释标明 DDL 来源。
|
|
675
|
+
4. **字段说明**:紧跟一张表(强制列):
|
|
676
|
+
|
|
677
|
+
| 字段名称 | 字段类型 | 是否有默认值 | 字段说明 | 本迭代用法 |
|
|
678
|
+
|----------|----------|--------------|----------|------------|
|
|
679
|
+
|
|
680
|
+
- 「本迭代用法」写清:读 / 写 / 不涉及 / **固定赋值**等;索引已在 DDL 声明即可。
|
|
681
|
+
5. 若含 JSON / 大字段契约:用 `**JSON 形状 · <列名或逻辑名>**` 加粗标签 + 形状表/代码块,**不要**再开 `##### 字段说明` / `##### runtime_payload…` 标题。
|
|
682
|
+
|
|
683
|
+
##### 4.4.4 非表字段、数据迁移与回滚兼容
|
|
684
|
+
|
|
685
|
+
| 项 | 说明 |
|
|
686
|
+
|----|------|
|
|
687
|
+
| 协议/计算字段(不落库) | 如列表聚合计数;说明计算方式 |
|
|
688
|
+
| **存量数据默认值填充策略**(G3) | JSON 形状变更或新增列时**必须**填写:回填 SQL/脚本、读路径默认值、是否允许空、上线顺序(先兼容读再写新形状等) |
|
|
689
|
+
| 结构回滚 | 有 DDL → 回滚脚本要点;无 DDL →「无结构可回滚,回滚应用即可」 |
|
|
690
|
+
| **回滚数据兼容**(G4) | 新版本已写入行/JSON,旧版本代码能否安全忽略未知字段或旧 `schema_version`?写明机制(`omitempty` / 忽略未知键 / version 分派等) |
|
|
691
|
+
| 数据保留 | 已写入行是否保留、是否需清洗 |
|
|
692
|
+
|
|
693
|
+
**零结构变更且不改 JSON 语义时**:在上表写明「无存量填充;无新形状回滚兼容问题」,不得整节留空。
|
|
694
|
+
|
|
695
|
+
#### B. 库表路径 —— 质量自检(生成后必过)
|
|
696
|
+
|
|
697
|
+
- [ ] 有总则结论表 + 本迭代变更语句(零变更也显式写「无」)
|
|
698
|
+
- [ ] 有 Mermaid `erDiagram`,且图后有「表名/中文名/职责/结构/本迭代动作」说明表
|
|
699
|
+
- [ ] 每张涉及表均有:动作、变更语句、**完整 CREATE TABLE(含引擎与字符集)**、字段说明表
|
|
700
|
+
- [ ] 字段说明表含「本迭代用法」列;幂等键 / 外键 / 枚举合法值写清
|
|
701
|
+
- [ ] **G3**:JSON 变更或新增列时有存量默认值填充策略;否则显式写「无存量填充」
|
|
702
|
+
- [ ] **G4**:回滚数据兼容有明确方案或显式「无新旧互读问题」
|
|
703
|
+
- [ ] 无「仅文字描述表结构、无 DDL」或「DDL 缺 ENGINE/CHARSET」的偷懒写法
|
|
704
|
+
- [ ] 零 DDL 迭代禁止假装「不涉及数据库」—— 只要读写表,仍走库表路径并展示现网 DDL
|
|
705
|
+
- [ ] **大纲干净**:§4.4 目录仅为 `4.4.1–4.4.4` + 各表 `##### \`name\``;**无**「DDL / 字段说明 / JSON 形状」标题节点
|
|
706
|
+
|
|
707
|
+
#### C. 非库表路径(CLI / 库 / 配置 / 状态文件)
|
|
708
|
+
|
|
709
|
+
无关系库表时,覆盖配置结构 / 状态文件 / YAML schema / 缓存键:
|
|
710
|
+
|
|
711
|
+
| 元素 | 内容 |
|
|
712
|
+
|------|------|
|
|
713
|
+
| 配置或状态结构 | 键路径、类型、默认值、生效时机 |
|
|
714
|
+
| 约束 | 合法值、校验失败行为 |
|
|
715
|
+
| 迁移 | 缺省兼容、是否改写存量文件 |
|
|
716
|
+
|
|
717
|
+
示例:
|
|
567
718
|
```yaml
|
|
568
719
|
# specflow/config.yaml 新增
|
|
569
720
|
artifacts:
|
|
570
721
|
language: zh-CN # en | zh-CN,缺省 en
|
|
571
722
|
```
|
|
572
723
|
|
|
573
|
-
|
|
724
|
+
**完全不涉及任何持久化/配置结构时写**:`不涉及数据库变更(纯逻辑/CLI 变更,无持久化数据模型)`。
|
|
574
725
|
|
|
575
|
-
|
|
726
|
+
#### D. 库表 DDL 示例(完整度标杆)
|
|
576
727
|
|
|
577
|
-
|
|
578
|
-
|
|
728
|
+
```sql
|
|
729
|
+
-- 来源:migrations/example/ddl/orders.sql(或:本迭代新增)
|
|
730
|
+
CREATE TABLE `orders` (
|
|
731
|
+
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '内部自增主键',
|
|
732
|
+
`uid` CHAR(36) NOT NULL COMMENT '业务主键',
|
|
733
|
+
`project_id` VARCHAR(64) NOT NULL,
|
|
734
|
+
`status` VARCHAR(32) NOT NULL DEFAULT 'pending',
|
|
735
|
+
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
736
|
+
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
737
|
+
PRIMARY KEY (`id`),
|
|
738
|
+
UNIQUE KEY `uk_uid` (`uid`),
|
|
739
|
+
KEY `idx_project_status` (`project_id`, `status`)
|
|
740
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
|
741
|
+
COMMENT='订单';
|
|
742
|
+
```
|
|
579
743
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
744
|
+
### 4.5 接口设计 (Interface Design)
|
|
745
|
+
|
|
746
|
+
**适用范围**:暴露 API / RPC / CLI 命令 / 跨模块函数接口的变更(含「协议不变但本迭代新消费」)。
|
|
747
|
+
**项目类型适配**:Web/服务 → HTTP(+RPC);CLI → commander 等命令参数;库 → 导出函数签名。
|
|
748
|
+
|
|
749
|
+
> **质量硬门槛(对外/跨端接口路径)**:只要本变更新增、修改、行为扩展或**新消费**对外接口,§4.5 **必须**按下列结构输出。参考质量标杆:`scenario-job-compile`「接口设计」章(总览与约定 → 接口清单 → 通用错误码 → 逐接口字段表+HTTP 示例 → 调用关系)。禁止只有路径名、无字段表、无错误约定、无请求/响应示例。
|
|
750
|
+
|
|
751
|
+
> **大纲 / 标题层级(硬门槛 — 防 TOC 爆炸)**:大纲**只允许**下列标题;「请求体字段」「请求示例」「响应示例」「错误」等**禁止**写成标题,一律 `**加粗**`。
|
|
586
752
|
|
|
587
|
-
示例(CLI):
|
|
588
753
|
```text
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
754
|
+
### 4.5 接口设计
|
|
755
|
+
├── #### 4.5.1 总览与约定 ← 通道 / 清单 / 通用错误码 均用加粗小标题,不进更深目录
|
|
756
|
+
├── #### 4.5.2 逐接口详设
|
|
757
|
+
│ ├── ##### I1 · <短名>(变更类型) ← 每个接口仅此一级标题
|
|
758
|
+
│ └── ##### I2 · …
|
|
759
|
+
└── #### 4.5.3 调用关系
|
|
595
760
|
```
|
|
596
761
|
|
|
597
|
-
|
|
762
|
+
接口内固定顺序用加粗标签:`**元信息**` → `**请求体字段**`(或路径/Query/CLI flags) → `**请求示例**` → `**成功响应字段**` → `**响应示例(成功)**` → `**响应示例(失败)**`(G2) → `**错误**` →(可选)`**处理顺序**`。
|
|
598
763
|
|
|
599
|
-
|
|
764
|
+
#### A. 对外/跨端接口路径——强制结构
|
|
600
765
|
|
|
601
|
-
|
|
766
|
+
##### 4.5.1 总览与约定
|
|
602
767
|
|
|
603
|
-
|
|
604
|
-
|------|------|
|
|
605
|
-
| 时序说明 | 谁调用谁、顺序、分支、异常路径(可用 Mermaid `sequenceDiagram`) |
|
|
606
|
-
| 状态机流转 | 状态集合、迁移事件、迁移条件、终态(可用 Mermaid `stateDiagram-v2`) |
|
|
768
|
+
**1) 调用方与通道**(多通道时必填;单通道也建议写明鉴权):
|
|
607
769
|
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
770
|
+
| 通道 | 路径前缀 / 入口 | 调用方 | 鉴权 |
|
|
771
|
+
|------|-----------------|--------|------|
|
|
772
|
+
| 例:控制台 API | `/api/v1/...` | 前端经网关 | 用户/项目身份 |
|
|
773
|
+
| 例:内部 API | `/internal/v1/...` | Worker/服务 | 租约/服务身份 |
|
|
774
|
+
|
|
775
|
+
**2) 本迭代接口清单**(强制总表,编号稳定便于交叉引用):
|
|
776
|
+
|
|
777
|
+
| 编号 | 接口 | 变更类型 | 应用场景 |
|
|
778
|
+
|------|------|----------|----------|
|
|
779
|
+
| I1 | <短名> | **新增** / **修改** / **行为扩展**(请求体不变) / **不变**(本迭代消费) | 谁在什么时候用 |
|
|
780
|
+
|
|
781
|
+
变更类型约定(优化自标杆文档,强制统一用语):
|
|
782
|
+
|
|
783
|
+
| 类型 | 含义 | §4.5 展开深度 |
|
|
784
|
+
|------|------|---------------|
|
|
785
|
+
| 新增 | 新路径或新 RPC | 完整展开(字段+示例+错误) |
|
|
786
|
+
| 修改 | 请求/响应形状变化(加字段、改语义) | 完整展开,并标明**本迭代变更点** |
|
|
787
|
+
| 行为扩展 | 消息形状不变,服务端认新取值/新分支 | 完整展开侧重点:行为差异与错误;可注明「请求/响应消息不变」 |
|
|
788
|
+
| 不变(本迭代消费) | 协议不动,本迭代开始依赖 | 可精简:场景+协议+关键字段/查询约定+为何本迭代需要;仍建议有成功响应要点 |
|
|
789
|
+
| 不变(不展开) | 已落地且本迭代不改、不新消费 | **清单可一句带过或不列入**,勿重复粘贴既有文档 |
|
|
790
|
+
|
|
791
|
+
**3) 通用错误码约定**(强制;按项目现网风格映射):
|
|
792
|
+
|
|
793
|
+
| 错误类别 / 状态 | 典型 HTTP 或退出码 | 含义(本迭代) |
|
|
794
|
+
|-----------------|-------------------|--------------|
|
|
795
|
+
| 参数非法 | 400 / 退出码 1 | … |
|
|
796
|
+
| 未找到 | 404 | … |
|
|
797
|
+
| 无权限 / 未认证 | 403 / 401 | … |
|
|
798
|
+
| 冲突 / 前置失败 | 409 / 412 | … |
|
|
799
|
+
| 内部错误 | 500 | … |
|
|
800
|
+
|
|
801
|
+
**约定**(按项目裁剪,至少覆盖命名与错误风格):
|
|
802
|
+
|
|
803
|
+
1. **字段命名**:与现网一致(如 JSON 蛇形 `project_id`;proto `json_name`;CLI kebab-case 等)。
|
|
804
|
+
2. **错误风格**:业务错误进 `message` / 状态详情;**禁止**「HTTP 200 + 业务错误码」混用(除非项目现网已是该风格且 design 显式沿用)。
|
|
805
|
+
3. **幂等 / 终态语义**:若存在上报类接口,写清「成功 ≠ 资源终态」等不变量(对齐 §2 决策)。
|
|
806
|
+
4. **兼容缺省**:可选字段缺省时的兼容行为写进字段表「默认」列。
|
|
807
|
+
5. **与流程对齐**:接口编号可被 §4.2/§4.3 时序与 §6 测试引用。
|
|
808
|
+
|
|
809
|
+
##### 4.5.2 逐接口详设(强制骨架)
|
|
810
|
+
|
|
811
|
+
对清单中每个需展开的编号 `In`,输出同构小节 `##### In · <短名>(<变更类型>)`(**仅此一级**进大纲;其下**禁止**再开 `####`/`#####`/`######`)。顺序固定,标签一律 `**加粗**`:
|
|
812
|
+
|
|
813
|
+
1. **元信息**(强制表):
|
|
814
|
+
|
|
815
|
+
| 项 | 内容 |
|
|
816
|
+
|----|------|
|
|
817
|
+
| 应用场景 | 谁、在什么用户动作/系统时机下调用 |
|
|
818
|
+
| 协议 | 方法 + 路径(或 CLI 命令 / 导出函数签名) |
|
|
819
|
+
| Content-Type / 编码 | 如 `application/json`(若适用) |
|
|
820
|
+
| 对应 RPC / 内部名 | 若有(可写暂定名 +「实现时与 OpenAPI/proto 对齐」) |
|
|
821
|
+
| 鉴权 | 本接口鉴权要点(可引用通道表) |
|
|
822
|
+
| 本迭代变更 | 一句话(新增字段 / 行为扩展 / 不变仅消费 …) |
|
|
823
|
+
|
|
824
|
+
2. **请求体字段**(有则写;路径参数 / Query / CLI flags 用同级加粗标签分块,如 `**Query 参数**`,仍**不要**升为标题):
|
|
825
|
+
|
|
826
|
+
| 字段 | 类型 | 必填 | 默认 | 说明 |
|
|
827
|
+
|------|------|------|------|------|
|
|
828
|
+
|
|
829
|
+
- 合法值枚举、别名归一、与表字段差异写在「说明」;互斥参数用引用块。
|
|
830
|
+
|
|
831
|
+
3. **请求示例**(强制 ≥1 主路径成功请求):Web 用完整 `http` 块;CLI/库用等价示例。多场景时用加粗副标区分,例:`**请求示例(场景)**` / `**请求示例(接口用例 · 兼容旧客户端)**` —— **不是**标题。
|
|
832
|
+
|
|
833
|
+
4. **成功响应字段** + **响应示例(成功)**(强制)。
|
|
834
|
+
|
|
835
|
+
5. **响应示例(失败)**(质量红线 G2 — 强制):每个「新增/修改/行为扩展」接口 **≥1** 组报错示例(完整 HTTP 或等价);副标可写失败原因,例:`**响应示例(失败 · 无启用步)**`,仍**不是**标题。
|
|
836
|
+
|
|
837
|
+
6. **错误**(强制表:条件 → 状态/退出码 → 说明):
|
|
838
|
+
|
|
839
|
+
| 条件 | 状态 / 退出码 | 说明 |
|
|
840
|
+
|------|---------------|------|
|
|
841
|
+
|
|
842
|
+
7. **处理顺序**(可选):多步服务端合同用编号列表;与 §4.2/§4.3、§4.4 对齐。
|
|
843
|
+
|
|
844
|
+
##### 4.5.3 调用关系(推荐)
|
|
845
|
+
|
|
846
|
+
用短文本或 Mermaid 概括调用方如何串起 `I1…In`(主路径一条线即可),便于实现与联调对照。
|
|
847
|
+
|
|
848
|
+
```text
|
|
849
|
+
调用方A: I3 → I1 → I4 → I7
|
|
850
|
+
调用方B: … → I5 → I6
|
|
622
851
|
```
|
|
623
852
|
|
|
624
|
-
|
|
853
|
+
#### B. 接口路径 —— 质量自检(生成后必过)
|
|
854
|
+
|
|
855
|
+
- [ ] 有通道/鉴权表(或多通道说明)+ 本迭代接口清单(编号+变更类型+场景)
|
|
856
|
+
- [ ] 有通用错误码约定 + 命名/错误风格约定
|
|
857
|
+
- [ ] 每个「新增/修改/行为扩展」接口具备:元信息、字段表、成功请求/响应示例、**失败示例(G2)**、错误表
|
|
858
|
+
- [ ] 「不变·本迭代消费」接口至少有场景+协议+关键消费约定,不假装不存在
|
|
859
|
+
- [ ] 无「只有路径、无字段/无示例/无错误」的偷懒写法;示例与字段表一致
|
|
860
|
+
- [ ] 接口编号可被 §4.2/§4.3 流程、§6 测试引用
|
|
861
|
+
- [ ] **大纲干净**:§4.5 目录仅为 `4.5.1–4.5.3` + 各 `##### In · …`;**无**「请求体字段 / 请求示例 / 响应示例 / 错误」标题节点
|
|
862
|
+
|
|
863
|
+
#### C. CLI / 库项目路径(无 HTTP 时)
|
|
625
864
|
|
|
626
|
-
|
|
865
|
+
无 HTTP 时仍用「清单 + 逐接口」骨架,将「协议」换为命令/导出签名;错误码换为退出码或抛错类型。示例:
|
|
866
|
+
|
|
867
|
+
```text
|
|
868
|
+
specflow init --artifact-language <language>
|
|
869
|
+
入参: language?: string 可选,默认 'en';合法值 en | zh-CN | zh(zh 别名→zh-CN)
|
|
870
|
+
出参: { status: 'initialized' | 'already_initialized' | 'updated_assets', message: string }
|
|
871
|
+
错误码:
|
|
872
|
+
E_INVALID_LANGUAGE 退出码 1 — 不支持的 language 值
|
|
873
|
+
E_PARITY_STRICT 退出码 1 — 资产生成后 parity 校验失败
|
|
874
|
+
```
|
|
875
|
+
|
|
876
|
+
**完全不涉及接口变更时写**:`不涉及接口变更(内部实现调整,无对外/跨模块接口变化)`。
|
|
877
|
+
|
|
878
|
+
### 4.6 核心算法 / 逻辑说明 (Core Logic)
|
|
627
879
|
|
|
628
880
|
**适用范围**:有非平凡算法或数据处理逻辑的变更。
|
|
629
881
|
| 元素 | 内容 |
|
|
@@ -634,7 +886,7 @@ sequenceDiagram
|
|
|
634
886
|
|
|
635
887
|
**不涉及非平凡算法时写**:`不涉及非平凡算法(逻辑简单,无复杂数据处理)`。
|
|
636
888
|
|
|
637
|
-
###
|
|
889
|
+
### 4.7 配置与运行环境 (Configuration & Runtime)
|
|
638
890
|
|
|
639
891
|
**适用范围**:新增配置项、环境变量、运行时依赖的变更。
|
|
640
892
|
| 元素 | 内容 |
|
|
@@ -645,48 +897,74 @@ sequenceDiagram
|
|
|
645
897
|
|
|
646
898
|
**不涉及配置变更时写**:`不涉及配置或运行环境变更`。
|
|
647
899
|
|
|
648
|
-
###
|
|
900
|
+
### 4.8 兼容性与迁移 (Compatibility & Migration)
|
|
901
|
+
|
|
902
|
+
**适用范围**:破坏性变更、JSON/列变更、或任何「新版本写入、旧版本仍可能读」的发布窗口。
|
|
649
903
|
|
|
650
|
-
**适用范围**:有破坏性变更。
|
|
651
904
|
| 元素 | 内容 |
|
|
652
905
|
|------|------|
|
|
653
|
-
| 旧行为 → 新行为 | 映射表 |
|
|
654
|
-
| 迁移路径 |
|
|
655
|
-
|
|
|
906
|
+
| 旧行为 → 新行为 | 映射表(禁止含糊「基本兼容」) |
|
|
907
|
+
| 迁移路径 | 存量用户如何升级、步骤顺序 |
|
|
908
|
+
| **存量默认值填充**(G3) | 与 §4.4.4 一致;JSON/新列必须写明填充策略 |
|
|
909
|
+
| **回滚数据兼容**(G4) | 发布失败回滚后:新代码已写数据,旧代码是否安全忽略/跳过?必须给出方案(`omitempty` / 忽略未知字段 / `schema_version` 等) |
|
|
910
|
+
| 应用回滚 | 镜像/包回退步骤 |
|
|
656
911
|
|
|
657
|
-
|
|
912
|
+
**完全无兼容风险时写**:`不涉及破坏性变更(向后兼容);无新形状写入,回滚仅回退应用即可` —— 仍须一句话点明「无新旧数据互读问题」。
|
|
658
913
|
|
|
659
914
|
### 详细设计质量自检(生成后检查)
|
|
660
915
|
|
|
661
|
-
- [ ]
|
|
662
|
-
- [ ]
|
|
663
|
-
- [ ]
|
|
664
|
-
- [ ]
|
|
665
|
-
- [ ]
|
|
916
|
+
- [ ] 有 §4.1 设计要点一览(P1…Pn)
|
|
917
|
+
- [ ] 有 §4.2 Happy Path **完整**时序图 + 设计要点说明
|
|
918
|
+
- [ ] 每个 §4.3 业务场景均有图 + **设计要点说明**(无裸图)
|
|
919
|
+
- [ ] **G1**:超过 5 行的文字流程已改为 Mermaid,无长散文流程
|
|
920
|
+
- [ ] 每个详细设计元素可追溯到 §5 Requirement/Scenario 与 §2 决策
|
|
921
|
+
- [ ] 涉及数据/接口的均非留空;不涉及类别显式标注
|
|
922
|
+
- [ ] **§4.4**:ER + DDL + 字段说明;若 JSON/新列变更则有**存量填充策略(G3)**与回滚数据兼容(G4)
|
|
923
|
+
- [ ] **§4.5**:通道/清单/错误码 + 字段/成功示例 + **失败示例(G2)** + 错误表
|
|
924
|
+
- [ ] **§4.4/§4.5 大纲**:目录仅含 `4.4.x`/`4.5.x` + 表名/`In` 小节;字段/示例/DDL/错误均为加粗标签,无标题节点
|
|
925
|
+
- [ ] **§4.8**:回滚兼容结论明确(或显式声明无新旧数据互读问题)
|
|
926
|
+
- [ ] **文风**:无「尽量/大概/一般情况下」等含糊词;生僻缩写首次已注解
|
|
927
|
+
- [ ] 若无法写出实现级细节,标记 `[待 refine 澄清: <元素>]`
|
|
928
|
+
|
|
929
|
+
---
|
|
930
|
+
|
|
931
|
+
## 5. 验收标准 (Acceptance Criteria)
|
|
932
|
+
|
|
933
|
+
[按 capability 分组,完整列出所有 Requirement + Scenario,每个 Scenario 3 级可测试性标注]
|
|
934
|
+
|
|
935
|
+
### 5.1 Capability: <name>
|
|
936
|
+
[Delta 操作类型: ADDED / MODIFIED / REMOVED / RENAMED]
|
|
937
|
+
|
|
938
|
+
#### Requirement: <name>
|
|
939
|
+
<描述>
|
|
940
|
+
|
|
941
|
+
| Scenario | WHEN | THEN | 可测试性 | 说明 |
|
|
942
|
+
|----------|------|------|---------|------|
|
|
943
|
+
| <name> | <条件> | <期望> | ✅ 功能可测试 / ⚠️ 文档可测试 / ❌ 不可测试 | <原因 if ⚠️/❌> |
|
|
666
944
|
|
|
667
945
|
---
|
|
668
946
|
|
|
669
|
-
##
|
|
947
|
+
## 6. 测试策略 (Test Strategy)
|
|
670
948
|
|
|
671
|
-
> 本章从"§
|
|
949
|
+
> 本章从"§5 验收标准可不可测"升级为"**用分层测试证明方案正确**"。它回答:
|
|
672
950
|
> 每个验收标准(WHEN/THEN)由哪一层测试覆盖、用什么工具、目标是证明什么。
|
|
673
951
|
> **选择性呈现**:只列出本变更实际需要的测试层级;不涉及的层级显式标注"不涉及"。
|
|
674
952
|
|
|
675
|
-
###
|
|
953
|
+
### 6.1 分层测试矩阵
|
|
676
954
|
|
|
677
955
|
| 测试层级 | 覆盖对象 | 工具/框架 | 目标(证明什么) | 覆盖的验收标准 |
|
|
678
956
|
|---------|---------|----------|---------------|---------------|
|
|
679
|
-
| 单元测试 | 核心函数/类/模块内部逻辑 | <框架,如 vitest/jest/pytest> | 逻辑正确、边界处理 | 引用 §
|
|
680
|
-
| 集成测试 | 模块间交互、接口契约、外部依赖 | <框架> | 模块协作正确、契约一致 | 引用 §
|
|
681
|
-
| 验收测试 | spec 的 WHEN/THEN 行为 | <E2E/CLI 测试> | 逐 Scenario 验证用户可见行为 | §
|
|
682
|
-
| 回归测试 | 主 specs 基线 + 既有行为 | <框架> | 不破坏已有功能 | 主 specs(§
|
|
957
|
+
| 单元测试 | 核心函数/类/模块内部逻辑 | <框架,如 vitest/jest/pytest> | 逻辑正确、边界处理 | 引用 §5 的 Scenario |
|
|
958
|
+
| 集成测试 | 模块间交互、接口契约、外部依赖 | <框架> | 模块协作正确、契约一致 | 引用 §5 的 Scenario |
|
|
959
|
+
| 验收测试 | spec 的 WHEN/THEN 行为 | <E2E/CLI 测试> | 逐 Scenario 验证用户可见行为 | §5 全部核心 Scenario |
|
|
960
|
+
| 回归测试 | 主 specs 基线 + 既有行为 | <框架> | 不破坏已有功能 | 主 specs(§5 基线对照) |
|
|
683
961
|
| 性能测试 | 关键路径/高并发 | <如 k6/jmeter/bench> | NFR 性能目标达成 | NFR 章节 |
|
|
684
962
|
| 安全测试 | 认证/授权/输入边界 | <SAST/渗透> | 无已知漏洞 | NFR 安全目标 |
|
|
685
963
|
| 兼容性测试 | 多平台/多版本/多浏览器 | <如 playwright> | 跨环境一致 | 兼容性 Requirement |
|
|
686
964
|
|
|
687
965
|
**填写要求**:
|
|
688
966
|
|
|
689
|
-
1. 每个测试层级**映射到 §
|
|
967
|
+
1. 每个测试层级**映射到 §5 验收标准**(引用具体 Scenario 名)—— 这是"测试策略与验收标准闭环"的关键
|
|
690
968
|
2. 每个层级标注**工具/框架**(呼应 full-stack-skills 的"阶段→技能映射":测试阶段→test-writer/playwright/pytest)
|
|
691
969
|
3. **目标要可验证**("证明 P95 < 200ms" 而非 "测性能")
|
|
692
970
|
4. 新增测试 vs 修改既有测试要区分
|
|
@@ -700,7 +978,7 @@ sequenceDiagram
|
|
|
700
978
|
| 验收测试 | `specflow init --artifact-language zh-CN` 全流程 | CLI 测试 | 端到端产物符合预期 | "Reject an unsupported language" 等 |
|
|
701
979
|
| 回归测试 | 既有 init 行为(无语言参数) | vitest | 缺省仍为 en,不破坏既有 | "Initialize without an explicit language" |
|
|
702
980
|
|
|
703
|
-
###
|
|
981
|
+
### 6.2 测试环境与数据
|
|
704
982
|
|
|
705
983
|
| 项 | 说明 |
|
|
706
984
|
|----|------|
|
|
@@ -709,9 +987,9 @@ sequenceDiagram
|
|
|
709
987
|
| 并行/隔离 | 测试间是否可并行、是否需要隔离(文件锁/独立目录) |
|
|
710
988
|
| 覆盖率目标 | 核心模块目标覆盖率(如 ≥80%) |
|
|
711
989
|
|
|
712
|
-
###
|
|
990
|
+
### 6.3 测试策略自检
|
|
713
991
|
|
|
714
|
-
- [ ] 每个 §
|
|
992
|
+
- [ ] 每个 §5 验收标准至少被一个测试层级覆盖(闭环)
|
|
715
993
|
- [ ] 每个测试层级有工具、有可验证目标
|
|
716
994
|
- [ ] 既有行为有回归测试保护(对应 Pass 7 基线)
|
|
717
995
|
- [ ] 新增测试与修改既有测试已区分
|
|
@@ -720,12 +998,12 @@ sequenceDiagram
|
|
|
720
998
|
|
|
721
999
|
---
|
|
722
1000
|
|
|
723
|
-
##
|
|
1001
|
+
## 7. 部署/发布/回滚方案 (Deployment & Release)
|
|
724
1002
|
|
|
725
1003
|
> 本章回答"方案实现后如何上线、如何发布、出问题如何回滚、上线后如何监控"。
|
|
726
1004
|
> **选择性呈现**:对有运行系统的项目必须;对纯库/CLI/文档项目可显式标注"不涉及运行时部署"。
|
|
727
1005
|
|
|
728
|
-
###
|
|
1006
|
+
### 7.1 部署方案 (Deployment)
|
|
729
1007
|
|
|
730
1008
|
| 项 | 方案 |
|
|
731
1009
|
|----|------|
|
|
@@ -735,7 +1013,7 @@ sequenceDiagram
|
|
|
735
1013
|
| 配置管理 | 新配置项如何在各环境生效、密钥管理 |
|
|
736
1014
|
| 环境差异 | dev/staging/prod 的环境差异与处理 |
|
|
737
1015
|
|
|
738
|
-
###
|
|
1016
|
+
### 7.2 发布策略 (Release Strategy)
|
|
739
1017
|
|
|
740
1018
|
| 项 | 方案 |
|
|
741
1019
|
|----|------|
|
|
@@ -743,7 +1021,7 @@ sequenceDiagram
|
|
|
743
1021
|
| 发布窗口 | 是否需停机窗口、灰度比例 |
|
|
744
1022
|
| 兼容性 | 新旧版本共存期间的兼容(如 API 版本化、DB 兼容) |
|
|
745
1023
|
|
|
746
|
-
###
|
|
1024
|
+
### 7.3 回滚方案 (Rollback)
|
|
747
1025
|
|
|
748
1026
|
| 项 | 方案 |
|
|
749
1027
|
|----|------|
|
|
@@ -752,7 +1030,7 @@ sequenceDiagram
|
|
|
752
1030
|
| 回滚的数据一致性 | 数据迁移的回滚(若有)、缓存/队列的清理 |
|
|
753
1031
|
| 回滚验证 | 回滚后如何确认恢复正常 |
|
|
754
1032
|
|
|
755
|
-
###
|
|
1033
|
+
### 7.4 监控与可观测性 (Monitoring & Observability)
|
|
756
1034
|
|
|
757
1035
|
| 项 | 方案 |
|
|
758
1036
|
|----|------|
|
|
@@ -760,7 +1038,7 @@ sequenceDiagram
|
|
|
760
1038
|
| 日志/追踪 | 日志规范、链路追踪 |
|
|
761
1039
|
| 告警 | 告警阈值与负责人 |
|
|
762
1040
|
|
|
763
|
-
###
|
|
1041
|
+
### 7.5 部署方案自检
|
|
764
1042
|
|
|
765
1043
|
- [ ] 部署目标/方式/顺序明确
|
|
766
1044
|
- [ ] 发布策略与兼容性说明
|
|
@@ -771,63 +1049,30 @@ sequenceDiagram
|
|
|
771
1049
|
|
|
772
1050
|
---
|
|
773
1051
|
|
|
774
|
-
##
|
|
775
|
-
|
|
776
|
-
### Pass 1: 需求闭环 (Requirement Closure)
|
|
777
|
-
**Verdict:** PASS / WARNING / FAIL
|
|
778
|
-
**证据:** <proposal→spec 覆盖表>
|
|
779
|
-
|
|
780
|
-
### Pass 2: 方案闭环 (Design Closure)
|
|
781
|
-
**Verdict:** PASS / WARNING / FAIL
|
|
782
|
-
**证据:** <decision↔requirement 双向表>
|
|
783
|
-
|
|
784
|
-
### Pass 3: 规格闭环 (Spec Closure)
|
|
785
|
-
**Verdict:** PASS / WARNING / FAIL
|
|
786
|
-
**证据:** <Scenario 可测试性表 + delta 结构检查>
|
|
1052
|
+
## 8. 闭环性检查 (Closed-Loop Verification)
|
|
787
1053
|
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
1054
|
+
> **写法要简练**:内部仍跑完 Pass 1–7,但写入本文只保留下表。
|
|
1055
|
+
> - `PASS` / `SKIPPED`:「关键证据」一句话即可(不必贴大表)。
|
|
1056
|
+
> - `WARNING` / `FAIL`:「关键证据」写清缺口(文件/Requirement/Scenario/任务 ID),最多 2–3 条要点。
|
|
1057
|
+
> - **禁止**为每个 Pass 再开长小节、禁止重复贴总评表。
|
|
791
1058
|
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
|
801
|
-
|---------|------|---------|-----------|
|
|
802
|
-
| <path> | ✅/❌ | extend/create/modify | <评估> |
|
|
803
|
-
|
|
804
|
-
**技术栈一致性:** <一行结论 + 理由>
|
|
805
|
-
|
|
806
|
-
### Pass 7: 基线对照 (Baseline Cross-Check)
|
|
807
|
-
**Verdict:** PASS / WARNING / FAIL / SKIPPED (no baseline)
|
|
808
|
-
**证据:**
|
|
809
|
-
|
|
810
|
-
| Capability | Requirement | 操作 | 基线状态 | 结论 |
|
|
811
|
-
|-----------|-------------|------|---------|------|
|
|
812
|
-
| <name> | <name> | ADDED/MODIFIED/... | exists/duplicate/not-found | ✅/⚠️/❌ |
|
|
813
|
-
|
|
814
|
-
### 闭环性总评
|
|
815
|
-
|
|
816
|
-
| 维度 | 结论 |
|
|
817
|
-
|------|------|
|
|
818
|
-
| Pass 1 需求闭环 | ✅/⚠️/❌/⊘(skipped) |
|
|
819
|
-
| Pass 2 方案闭环 | |
|
|
820
|
-
| Pass 3 规格闭环 | |
|
|
821
|
-
| Pass 4 实施闭环 | |
|
|
822
|
-
| Pass 5 风险闭环 | |
|
|
823
|
-
| Pass 6 代码落地性 | |
|
|
824
|
-
| Pass 7 基线对照 | |
|
|
1059
|
+
| Pass | 检查项 | 结论 | 关键证据(一句话;⚠️/❌ 可列 2–3 条要点) |
|
|
1060
|
+
|------|--------|------|--------------------------------------|
|
|
1061
|
+
| 1 | 需求闭环 proposal↔specs | ✅/⚠️/❌ | |
|
|
1062
|
+
| 2 | 方案闭环 design↔specs | ✅/⚠️/❌ | |
|
|
1063
|
+
| 3 | 规格闭环 场景/可测试性/delta | ✅/⚠️/❌ | |
|
|
1064
|
+
| 4 | 实施闭环 tasks↔specs | ✅/⚠️/❌ | |
|
|
1065
|
+
| 5 | 风险闭环 缓解/BREAKING | ✅/⚠️/❌ | |
|
|
1066
|
+
| 6 | 代码落地性 锚点/结构/栈 | ✅/⚠️/❌/⊘ | |
|
|
1067
|
+
| 7 | 基线对照 主 specs | ✅/⚠️/❌/⊘ | |
|
|
825
1068
|
|
|
826
1069
|
**整体闭环性:** PASS / PASS WITH WARNINGS / FAIL
|
|
827
1070
|
|
|
1071
|
+
判定:任一 ❌ → FAIL;无 ❌ 但有 ⚠️ → PASS WITH WARNINGS;全 ✅(⊘ 不计)→ PASS。
|
|
1072
|
+
|
|
828
1073
|
---
|
|
829
1074
|
|
|
830
|
-
##
|
|
1075
|
+
## 9. 可实施性评估 (Implementability Assessment)
|
|
831
1076
|
|
|
832
1077
|
| 评估维度 | 结论 | 说明 |
|
|
833
1078
|
|---------|------|------|
|
|
@@ -843,14 +1088,14 @@ sequenceDiagram
|
|
|
843
1088
|
|
|
844
1089
|
---
|
|
845
1090
|
|
|
846
|
-
##
|
|
1091
|
+
## 10. 审批意见 (Approval Decision)
|
|
847
1092
|
|
|
848
|
-
###
|
|
1093
|
+
### 10.1 AI 预审建议
|
|
849
1094
|
|
|
850
1095
|
**建议:** 建议批准 / 有条件批准 / 退回 refine / 拒绝
|
|
851
1096
|
**理由:** <1-2 句话,引用具体 verdict>
|
|
852
1097
|
|
|
853
|
-
###
|
|
1098
|
+
### 10.2 人工审批签字栏
|
|
854
1099
|
|
|
855
1100
|
| 角色 | 姓名 | 审批结论 | 日期 | 意见 |
|
|
856
1101
|
|------|------|---------|------|------|
|
|
@@ -866,47 +1111,112 @@ sequenceDiagram
|
|
|
866
1111
|
|
|
867
1112
|
| 章节 | 数据来源 | 处理方式 |
|
|
868
1113
|
|------|---------|---------|
|
|
869
|
-
|
|
|
870
|
-
|
|
|
871
|
-
|
|
|
872
|
-
|
|
|
873
|
-
|
|
|
874
|
-
|
|
|
875
|
-
|
|
|
876
|
-
|
|
|
877
|
-
|
|
|
878
|
-
|
|
|
879
|
-
| 闭环性检查 Pass 7 | specflow/specs/ 主基线 | AI 交叉对照 |
|
|
880
|
-
| 可实施性评估 | tasks + design + specs + 项目代码 | AI 推理 |
|
|
881
|
-
| 审批意见 | 闭环性 + 设计质量 + 可实施性三重 verdict | AI 预审 + 人工签字栏 |
|
|
1114
|
+
| 绪论与边界 | proposal.md + explore.md(可选) + design Non-Goals | AI 提炼;痛点图 + What/Impact + User Journey + 非目标;**无变更摘要章** |
|
|
1115
|
+
| 技术方案评估 | design.md | 决策表 + 风险表 + 设计质量 |
|
|
1116
|
+
| 架构整体设计 | design + 锚点代码 + specs | Mermaid 图 + **图要点说明** + 组件边界表;追溯 §2 |
|
|
1117
|
+
| 方案详细设计 | design + specs + 锚点 + 现网 DDL/API | 设计要点 + Happy Path + 业务场景(+说明) + 数据/接口等;追溯 §5+§2 |
|
|
1118
|
+
| 验收标准 | specs/**/*.md | **置于设计之后**;3 级可测试性 |
|
|
1119
|
+
| 测试策略 | §5 验收标准 + 项目测试栈 | 分层矩阵映射验收标准 |
|
|
1120
|
+
| 部署/发布/回滚 | §2 决策 + 运行环境 | 部署/发布/回滚/监控 |
|
|
1121
|
+
| 闭环性检查 | 四件套 + 锚点 + 主 specs | 内部跑 Pass 1–7;**正文只输出一张结论表**(PASS 一句话;⚠️/❌ 要点化) |
|
|
1122
|
+
| 可实施性评估 | tasks + design + specs + 代码 | AI 推理 |
|
|
1123
|
+
| 审批意见 | 三重 verdict | AI 预审 + 人工签字栏 |
|
|
882
1124
|
```
|
|
883
1125
|
|
|
884
1126
|
### Generation Rules
|
|
885
1127
|
|
|
886
|
-
1.
|
|
887
|
-
|
|
888
|
-
|
|
1128
|
+
1. **§1 绪论 must be truthful and precise**: every pain point in the current-flow diagram
|
|
1129
|
+
must be grounded in proposal.md `## Why` / design.md Context / confirmed explore.md
|
|
1130
|
+
(do not invent pains). Absorb What Changes + Impact into §1.2 (no separate 变更摘要
|
|
1131
|
+
chapter). Every User Journey step must trace to a §5 acceptance criterion. Every
|
|
1132
|
+
Non-Goal must state its "不做理由".
|
|
889
1133
|
|
|
890
|
-
2. **Acceptance Criteria is exhaustive
|
|
891
|
-
delta spec. Do not summarize or omit.
|
|
1134
|
+
2. **Acceptance Criteria (§5) is exhaustive and placed after design**: include every
|
|
1135
|
+
Requirement and Scenario from every delta spec. Do not summarize or omit. Do NOT place
|
|
1136
|
+
acceptance before architecture/detailed design.
|
|
892
1137
|
|
|
893
|
-
3. **Pass 6 evidence must cite real code**:
|
|
894
|
-
|
|
895
|
-
(
|
|
896
|
-
either read it or mark it `SKIPPED (greenfield)`.
|
|
1138
|
+
3. **Pass 6 evidence must cite real code**: when Pass 6 is ⚠️/❌, §8「关键证据」must cite
|
|
1139
|
+
actual anchor paths and concrete findings. PASS may be one line
|
|
1140
|
+
(e.g. `锚点 N 个均存在,结构可扩展`). Greenfield → `⊘` with the SKIPPED reason.
|
|
897
1141
|
|
|
898
|
-
4. **Pass 7 evidence must cite baseline specs**:
|
|
899
|
-
|
|
900
|
-
verbatim `SKIPPED (no baseline — greenfield or no archived changes yet)` line.
|
|
1142
|
+
4. **Pass 7 evidence must cite baseline specs**: when ⚠️/❌, cite capability/requirement
|
|
1143
|
+
names compared. PASS → one line; no baseline → `⊘`.
|
|
901
1144
|
|
|
902
1145
|
5. **Over-engineering evidence must cite design/tasks location**: "Signal 2 detected in
|
|
903
1146
|
`design.md` § D3, which defines a `ReviewerFactory` for a single reviewer type" — not
|
|
904
1147
|
just "over-engineered".
|
|
905
1148
|
|
|
906
|
-
6. **Language policy**: narrative follows `artifacts.language`; protocol
|
|
907
|
-
paths, commands, code stay in original form.
|
|
1149
|
+
6. **Language policy + Style & Tone**: narrative follows `artifacts.language`; protocol
|
|
1150
|
+
markers, IDs, paths, commands, code stay in original form. Apply Style & Tone hard
|
|
1151
|
+
rule (通俗 + 首次注解缩写 + 禁止含糊词) to all human-readable narrative.
|
|
908
1152
|
|
|
909
1153
|
7. **No file modification**: this prompt only generates `approval.md`. Do not modify the
|
|
910
1154
|
four artifacts, project code, or main specs.
|
|
911
1155
|
|
|
912
1156
|
8. **Sign-off table is empty**: human sign-off fields must be blank.
|
|
1157
|
+
|
|
1158
|
+
9. **§4.4 database section quality (hard rule)**: if the change reads/writes any
|
|
1159
|
+
relational table (including zero-DDL semantic-only changes), §4.4 MUST include:
|
|
1160
|
+
(a) structure-change conclusion table + explicit change SQL (or explicit「无」),
|
|
1161
|
+
(b) Mermaid `erDiagram` of core entities + a table-description legend
|
|
1162
|
+
(表名/中文名/职责/结构/本迭代动作),
|
|
1163
|
+
(c) per-table complete `CREATE TABLE` with storage engine + charset (MySQL:
|
|
1164
|
+
`ENGINE=InnoDB DEFAULT CHARSET=utf8mb4` …), and
|
|
1165
|
+
(d) per-table field description table with「本迭代用法」.
|
|
1166
|
+
Do NOT substitute prose-only schema descriptions. Do NOT omit ENGINE/CHARSET on
|
|
1167
|
+
MySQL DDL. Zero-DDL iterations still show current-baseline DDL — never claim
|
|
1168
|
+
「不涉及数据库」when tables are in the read/write path.
|
|
1169
|
+
|
|
1170
|
+
10. **§4.5 interface section quality (hard rule)**: if the change adds, modifies,
|
|
1171
|
+
behavior-extends, or newly consumes external/cross-service interfaces, §4.5 MUST
|
|
1172
|
+
include: (a) caller/channel + auth overview, (b) numbered interface inventory with
|
|
1173
|
+
change type (新增/修改/行为扩展/不变·本迭代消费), (c) common error-code mapping and
|
|
1174
|
+
naming/error-style conventions, (d) per-interface meta table, field tables
|
|
1175
|
+
(name/type/required/default/description), at least one success request example and
|
|
1176
|
+
success response example, **(e) ≥1 failure request/response example (G2)**, and an
|
|
1177
|
+
error-condition table. Do NOT ship path-only stubs without fields/examples/errors.
|
|
1178
|
+
Unchanged APIs that this iteration does not consume need not be fully re-documented.
|
|
1179
|
+
|
|
1180
|
+
11. **§3 architecture diagram key points (hard rule)**: every architecture Mermaid diagram
|
|
1181
|
+
MUST be followed by a numbered「设计说明 / 图要点」list (boundary/invariants/reuse) —
|
|
1182
|
+
not a mere restatement of node names. Component table alone is not enough.
|
|
1183
|
+
|
|
1184
|
+
12. **§4 Happy Path + scenario design notes (hard rule)**: §4.1 design-points table, §4.2
|
|
1185
|
+
complete Happy Path `sequenceDiagram`, and each §4.3 business scenario MUST include
|
|
1186
|
+
post-diagram「设计要点」explanations. Bare diagrams without notes are a quality failure.
|
|
1187
|
+
|
|
1188
|
+
13. **Quality Gates G1–G4 (hard rule)**:
|
|
1189
|
+
- **G1**: any process description longer than 5 prose lines MUST be a Mermaid
|
|
1190
|
+
`sequenceDiagram` / `flowchart` / `stateDiagram-v2` (no long prose flows).
|
|
1191
|
+
- **G2**: every added/modified/behavior-extended interface in §4.5 MUST include ≥1
|
|
1192
|
+
failure request/response example (validation failure, lease expiry, etc.), not only
|
|
1193
|
+
an error-code table.
|
|
1194
|
+
- **G3**: JSON shape changes or new columns MUST document存量数据默认值填充策略 in
|
|
1195
|
+
§4.4.4 / §4.8.
|
|
1196
|
+
- **G4**: MUST state rollback data compatibility — whether old code can safely
|
|
1197
|
+
ignore/skip data written by new code (`omitempty`, unknown-field ignore,
|
|
1198
|
+
`schema_version`, etc.). "Rollback the image" alone is insufficient.
|
|
1199
|
+
|
|
1200
|
+
14. **Style & Tone (hard rule)**: plain language for implementers; obscure English
|
|
1201
|
+
abbreviations MUST be glossed on first use. Ban weasel words「尽量」「大概」
|
|
1202
|
+
「一般情况下」「可能需要」「酌情」「视情况」; use「必须」「禁止」「采用 XX 方案」
|
|
1203
|
+
or explicit if/then tables instead.
|
|
1204
|
+
|
|
1205
|
+
15. **§8 closed-loop must be concise (hard rule)**: write exactly one summary table
|
|
1206
|
+
(Pass | 检查项 | 结论 | 关键证据). Do NOT open seven Pass subsections or a second
|
|
1207
|
+
summary table. PASS/SKIPPED → one short phrase; WARNING/FAIL → ≤3 concrete bullets.
|
|
1208
|
+
|
|
1209
|
+
16. **§4.4 database skill routing**: before drafting relational DDL, run
|
|
1210
|
+
`prompts/approval/database-guidance.md`. On stack hit, Read local
|
|
1211
|
+
`skills/database/<stack>/…` (in-repo, no remote fetch) and apply idioms; on miss,
|
|
1212
|
+
LLM-only SpecFlow §4.4 rules. Do not invent MCP tools; do not `npx skills add`.
|
|
1213
|
+
Record `skills/database/<stack>` or `LLM-fallback` in the §4.4.1 总则 table.
|
|
1214
|
+
|
|
1215
|
+
17. **§4.4 / §4.5 outline hygiene (hard rule)**: Markdown TOC must stay shallow.
|
|
1216
|
+
- §4.4 headings only: `#### 4.4.1–4.4.4` + per-table `##### \`table\`(中文名)`.
|
|
1217
|
+
- §4.5 headings only: `#### 4.5.1–4.5.3` + per-interface `##### In · <短名>(类型)`.
|
|
1218
|
+
- Labels such as「请求体字段」「请求示例」「响应示例」「错误」「DDL」「字段说明」
|
|
1219
|
+
「JSON 形状」「通用错误码约定」MUST be `**bold**` body labels — **never**
|
|
1220
|
+
`####` / `#####` / `######` headings. Multiple examples use bold sub-labels
|
|
1221
|
+
(e.g. `**响应示例(失败 · 无启用步)**`), not extra heading nodes.
|
|
1222
|
+
|