@gordon.gan/specflow 1.4.0-beta → 1.4.1
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 +569 -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 +100 -181
- package/templates/approval.md +295 -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
|
+
**痛点清单**(对应图中红色节点):
|
|
390
|
+
|
|
391
|
+
| 痛点 | 代价 |
|
|
392
|
+
|------|------|
|
|
393
|
+
| <痛点> | <代价> |
|
|
378
394
|
|
|
379
|
-
|
|
395
|
+
### 1.2 做什么与影响面 (What & Impact)
|
|
380
396
|
|
|
381
|
-
|
|
397
|
+
AI 从 proposal `## What Changes` / `## Impact`(及 explore 相关结论)提炼,替代原「变更摘要」章。
|
|
382
398
|
|
|
383
|
-
|
|
384
|
-
[Delta 操作类型: ADDED / MODIFIED / REMOVED / RENAMED]
|
|
399
|
+
**做什么**(按 新增/修改/移除/重命名;BREAKING 显式标注):
|
|
385
400
|
|
|
386
|
-
|
|
387
|
-
|
|
401
|
+
| 类别 | 内容 | BREAKING? |
|
|
402
|
+
|------|------|-----------|
|
|
403
|
+
| 新增 | | |
|
|
404
|
+
| 修改 | | |
|
|
405
|
+
| 移除 / 重命名 | | |
|
|
388
406
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
|
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,374 @@ 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
|
+
#### A. 库表路径(MySQL / PostgreSQL / SQLite 等关系库)——强制结构
|
|
537
602
|
|
|
538
|
-
|
|
539
|
-
> **只呈现本变更涉及的部分**,不涉及的类型显式标注 "本变更不涉及 X" 而非留空。
|
|
540
|
-
> 每个详细设计元素必须**可追溯到 §3 验收标准**(Requirement/Scenario)和 §4 决策(design.md 的 D1-Dn)。
|
|
603
|
+
按以下小节**顺序**生成。缺任一强制项 → 视为详细设计质量不合格,在确认摘要中报告用户并标记 `[待 refine 澄清]` 或补全后再写入。
|
|
541
604
|
|
|
542
|
-
|
|
605
|
+
##### 4.4.1 总则与本迭代结构变更结论
|
|
543
606
|
|
|
544
|
-
|
|
607
|
+
用结论表一眼说清本迭代对库结构做什么(即使结论是「零迁移」也要写明):
|
|
545
608
|
|
|
546
|
-
|
|
|
547
|
-
|
|
548
|
-
|
|
|
549
|
-
|
|
|
550
|
-
|
|
|
551
|
-
|
|
|
609
|
+
| 项 | 结论 |
|
|
610
|
+
|----|------|
|
|
611
|
+
| 数据库迁移(脚本/工具名) | 有 / **本迭代零迁移** |
|
|
612
|
+
| 新建表 | 表名列表 / **无** |
|
|
613
|
+
| 新增 / 修改 / 删除列 | 列清单 / **无** |
|
|
614
|
+
| 新增索引 | 索引清单 / **无** |
|
|
615
|
+
| DDL 来源 | 仓库基线路径 或 本迭代新增 |
|
|
616
|
+
| DB 技能 | `skills/database/<stack>`(本地) / `LLM-fallback` |
|
|
552
617
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
CREATE
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
618
|
+
紧接一段 **本迭代变更语句** 代码块:
|
|
619
|
+
|
|
620
|
+
- 有变更:给出可执行的 `CREATE` / `ALTER` / `DROP`(与下方逐表 DDL 一致)。
|
|
621
|
+
- **零变更**:显式写「无(明确不执行)」,并可用注释列出**禁止合入**的反例 `ALTER`/`CREATE`(防止实现时偷偷加列)。
|
|
622
|
+
|
|
623
|
+
##### 4.4.2 ER 图(核心实体关系)——强制
|
|
624
|
+
|
|
625
|
+
用 Mermaid `erDiagram` 画出**本变更涉及的核心实体**(新增 + 修改 + 本迭代强依赖的既有表),标注:
|
|
626
|
+
|
|
627
|
+
1. 实体名(= 表名)与**中文表意**(可用实体注释或紧随其后的说明)。
|
|
628
|
+
2. 关系基数(`||--o{` / `}o--||` 等)与关联键语义(如「作业 1 — N 逐步结果」)。
|
|
629
|
+
3. 每个实体列出 **3–8 个关键属性**(主键、业务主键、外键、本迭代读写的关键列);勿堆砌全量字段(全量在字段说明表)。
|
|
630
|
+
4. 与 §2 决策、§3 组件一致:图中实体必须在表一览与逐表章节出现。
|
|
631
|
+
|
|
632
|
+
```mermaid
|
|
633
|
+
erDiagram
|
|
634
|
+
PARENT_TABLE ||--o{ CHILD_TABLE : "1:N 业务关系说明"
|
|
635
|
+
PARENT_TABLE {
|
|
636
|
+
char uid PK "业务主键"
|
|
637
|
+
varchar name "名称"
|
|
638
|
+
}
|
|
639
|
+
CHILD_TABLE {
|
|
640
|
+
char uid PK
|
|
641
|
+
char parent_uid FK
|
|
642
|
+
int step_order "本迭代幂等键之一"
|
|
643
|
+
}
|
|
564
644
|
```
|
|
565
645
|
|
|
566
|
-
|
|
646
|
+
**图说明(强制,紧跟 ER 图)**:用表格描述图中每张表,提升可读性 —— 不是重复 ER 属性列表,而是回答「这张表是干什么的、本迭代怎么动」:
|
|
647
|
+
|
|
648
|
+
| 表名 | 中文名 | 职责(一句话) | 结构 | 本迭代动作 |
|
|
649
|
+
|------|--------|--------------|------|------------|
|
|
650
|
+
| `parent_table` | … | … | 不变 / 新增 / 改列 | 只读 / 写入 / 新建 |
|
|
651
|
+
|
|
652
|
+
##### 4.4.3 逐表详设(强制骨架)
|
|
653
|
+
|
|
654
|
+
对表一览中的**每一张表**输出同构小节 `#### \`table_name\`(中文名)`,顺序固定:
|
|
655
|
+
|
|
656
|
+
1. **本迭代动作**:只读 / 写入(既有路径) / 新建 / 改结构(列清单) —— 一句话 + 关键不变量(如幂等键)。
|
|
657
|
+
2. **本迭代变更语句**:`无` 或完整 `ALTER`/`CREATE` 片段(可执行)。
|
|
658
|
+
3. **DDL(完整建表语句)** —— **硬门槛**:
|
|
659
|
+
- 必须是完整 `CREATE TABLE ...`(即使本迭代零 DDL,也给出**现网/目标**完整表定义,便于实现者对照)。
|
|
660
|
+
- **必须含存储引擎与字符集**(MySQL 示例:`ENGINE=InnoDB DEFAULT CHARSET=utf8mb4` [`COLLATE=...` 若项目有约定则写出];PostgreSQL 写明 schema / 关键扩展约定;SQLite 可省略 ENGINE,但须完整列定义与约束)。
|
|
661
|
+
- 含 PRIMARY KEY、UNIQUE、KEY/INDEX、必要时列 `COMMENT` / 表级 `COMMENT`。
|
|
662
|
+
- 首行注释标明 DDL 来源(迁移文件路径或「本迭代新增」)。
|
|
663
|
+
4. **字段说明表** —— 强制列:
|
|
664
|
+
|
|
665
|
+
| 字段名称 | 字段类型 | 是否有默认值 | 字段说明 | 本迭代用法 |
|
|
666
|
+
|----------|----------|--------------|----------|------------|
|
|
667
|
+
|
|
668
|
+
- 「本迭代用法」写清:读 / 写 / 不涉及 / **固定赋值**(`job_type=scenario`)等;本迭代相关列可加粗语义说明。
|
|
669
|
+
- 索引在 DDL 中已声明即可;若新增索引,在变更语句与字段表或表下短注中说明**支撑的查询**。
|
|
670
|
+
5. 若表含 JSON / 大字段契约:另开子节给出**非表列的 JSON 形状**(字段/类型/必填/说明),与参考文档 `runtime_payload` 写法一致。
|
|
671
|
+
|
|
672
|
+
##### 4.4.4 非表字段、数据迁移与回滚兼容
|
|
673
|
+
|
|
674
|
+
| 项 | 说明 |
|
|
675
|
+
|----|------|
|
|
676
|
+
| 协议/计算字段(不落库) | 如列表聚合计数;说明计算方式 |
|
|
677
|
+
| **存量数据默认值填充策略**(G3) | JSON 形状变更或新增列时**必须**填写:回填 SQL/脚本、读路径默认值、是否允许空、上线顺序(先兼容读再写新形状等) |
|
|
678
|
+
| 结构回滚 | 有 DDL → 回滚脚本要点;无 DDL →「无结构可回滚,回滚应用即可」 |
|
|
679
|
+
| **回滚数据兼容**(G4) | 新版本已写入行/JSON,旧版本代码能否安全忽略未知字段或旧 `schema_version`?写明机制(`omitempty` / 忽略未知键 / version 分派等) |
|
|
680
|
+
| 数据保留 | 已写入行是否保留、是否需清洗 |
|
|
681
|
+
|
|
682
|
+
**零结构变更且不改 JSON 语义时**:在上表写明「无存量填充;无新形状回滚兼容问题」,不得整节留空。
|
|
683
|
+
|
|
684
|
+
#### B. 库表路径 —— 质量自检(生成后必过)
|
|
685
|
+
|
|
686
|
+
- [ ] 有总则结论表 + 本迭代变更语句(零变更也显式写「无」)
|
|
687
|
+
- [ ] 有 Mermaid `erDiagram`,且图后有「表名/中文名/职责/结构/本迭代动作」说明表
|
|
688
|
+
- [ ] 每张涉及表均有:动作、变更语句、**完整 CREATE TABLE(含引擎与字符集)**、字段说明表
|
|
689
|
+
- [ ] 字段说明表含「本迭代用法」列;幂等键 / 外键 / 枚举合法值写清
|
|
690
|
+
- [ ] **G3**:JSON 变更或新增列时有存量默认值填充策略;否则显式写「无存量填充」
|
|
691
|
+
- [ ] **G4**:回滚数据兼容有明确方案或显式「无新旧互读问题」
|
|
692
|
+
- [ ] 无「仅文字描述表结构、无 DDL」或「DDL 缺 ENGINE/CHARSET」的偷懒写法
|
|
693
|
+
- [ ] 零 DDL 迭代禁止假装「不涉及数据库」—— 只要读写表,仍走库表路径并展示现网 DDL
|
|
694
|
+
|
|
695
|
+
#### C. 非库表路径(CLI / 库 / 配置 / 状态文件)
|
|
696
|
+
|
|
697
|
+
无关系库表时,覆盖配置结构 / 状态文件 / YAML schema / 缓存键:
|
|
698
|
+
|
|
699
|
+
| 元素 | 内容 |
|
|
700
|
+
|------|------|
|
|
701
|
+
| 配置或状态结构 | 键路径、类型、默认值、生效时机 |
|
|
702
|
+
| 约束 | 合法值、校验失败行为 |
|
|
703
|
+
| 迁移 | 缺省兼容、是否改写存量文件 |
|
|
704
|
+
|
|
705
|
+
示例:
|
|
567
706
|
```yaml
|
|
568
707
|
# specflow/config.yaml 新增
|
|
569
708
|
artifacts:
|
|
570
709
|
language: zh-CN # en | zh-CN,缺省 en
|
|
571
710
|
```
|
|
572
711
|
|
|
573
|
-
|
|
712
|
+
**完全不涉及任何持久化/配置结构时写**:`不涉及数据库变更(纯逻辑/CLI 变更,无持久化数据模型)`。
|
|
574
713
|
|
|
575
|
-
|
|
714
|
+
#### D. 库表 DDL 示例(完整度标杆)
|
|
576
715
|
|
|
577
|
-
|
|
578
|
-
|
|
716
|
+
```sql
|
|
717
|
+
-- 来源:migrations/example/ddl/orders.sql(或:本迭代新增)
|
|
718
|
+
CREATE TABLE `orders` (
|
|
719
|
+
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '内部自增主键',
|
|
720
|
+
`uid` CHAR(36) NOT NULL COMMENT '业务主键',
|
|
721
|
+
`project_id` VARCHAR(64) NOT NULL,
|
|
722
|
+
`status` VARCHAR(32) NOT NULL DEFAULT 'pending',
|
|
723
|
+
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
724
|
+
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
725
|
+
PRIMARY KEY (`id`),
|
|
726
|
+
UNIQUE KEY `uk_uid` (`uid`),
|
|
727
|
+
KEY `idx_project_status` (`project_id`, `status`)
|
|
728
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
|
729
|
+
COMMENT='订单';
|
|
730
|
+
```
|
|
579
731
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
732
|
+
### 4.5 接口设计 (Interface Design)
|
|
733
|
+
|
|
734
|
+
**适用范围**:暴露 API / RPC / CLI 命令 / 跨模块函数接口的变更(含「协议不变但本迭代新消费」)。
|
|
735
|
+
**项目类型适配**:Web/服务 → HTTP(+RPC);CLI → commander 等命令参数;库 → 导出函数签名。
|
|
736
|
+
|
|
737
|
+
> **质量硬门槛(对外/跨端接口路径)**:只要本变更新增、修改、行为扩展或**新消费**对外接口,§4.5 **必须**按下列结构输出。参考质量标杆:`scenario-job-compile`「接口设计」章(总览与约定 → 接口清单 → 通用错误码 → 逐接口字段表+HTTP 示例 → 调用关系)。禁止只有路径名、无字段表、无错误约定、无请求/响应示例。
|
|
738
|
+
|
|
739
|
+
#### A. 对外/跨端接口路径——强制结构
|
|
740
|
+
|
|
741
|
+
##### 4.5.1 总览与约定
|
|
742
|
+
|
|
743
|
+
**1) 调用方与通道**(多通道时必填;单通道也建议写明鉴权):
|
|
744
|
+
|
|
745
|
+
| 通道 | 路径前缀 / 入口 | 调用方 | 鉴权 |
|
|
746
|
+
|------|-----------------|--------|------|
|
|
747
|
+
| 例:控制台 API | `/api/v1/...` | 前端经网关 | 用户/项目身份 |
|
|
748
|
+
| 例:内部 API | `/internal/v1/...` | Worker/服务 | 租约/服务身份 |
|
|
749
|
+
|
|
750
|
+
**2) 本迭代接口清单**(强制总表,编号稳定便于交叉引用):
|
|
751
|
+
|
|
752
|
+
| 编号 | 接口 | 变更类型 | 应用场景 |
|
|
753
|
+
|------|------|----------|----------|
|
|
754
|
+
| I1 | <短名> | **新增** / **修改** / **行为扩展**(请求体不变) / **不变**(本迭代消费) | 谁在什么时候用 |
|
|
755
|
+
|
|
756
|
+
变更类型约定(优化自标杆文档,强制统一用语):
|
|
757
|
+
|
|
758
|
+
| 类型 | 含义 | §4.5 展开深度 |
|
|
759
|
+
|------|------|---------------|
|
|
760
|
+
| 新增 | 新路径或新 RPC | 完整展开(字段+示例+错误) |
|
|
761
|
+
| 修改 | 请求/响应形状变化(加字段、改语义) | 完整展开,并标明**本迭代变更点** |
|
|
762
|
+
| 行为扩展 | 消息形状不变,服务端认新取值/新分支 | 完整展开侧重点:行为差异与错误;可注明「请求/响应消息不变」 |
|
|
763
|
+
| 不变(本迭代消费) | 协议不动,本迭代开始依赖 | 可精简:场景+协议+关键字段/查询约定+为何本迭代需要;仍建议有成功响应要点 |
|
|
764
|
+
| 不变(不展开) | 已落地且本迭代不改、不新消费 | **清单可一句带过或不列入**,勿重复粘贴既有文档 |
|
|
765
|
+
|
|
766
|
+
**3) 通用错误码约定**(强制;按项目现网风格映射):
|
|
767
|
+
|
|
768
|
+
| 错误类别 / 状态 | 典型 HTTP 或退出码 | 含义(本迭代) |
|
|
769
|
+
|-----------------|-------------------|--------------|
|
|
770
|
+
| 参数非法 | 400 / 退出码 1 | … |
|
|
771
|
+
| 未找到 | 404 | … |
|
|
772
|
+
| 无权限 / 未认证 | 403 / 401 | … |
|
|
773
|
+
| 冲突 / 前置失败 | 409 / 412 | … |
|
|
774
|
+
| 内部错误 | 500 | … |
|
|
775
|
+
|
|
776
|
+
**约定**(按项目裁剪,至少覆盖命名与错误风格):
|
|
777
|
+
|
|
778
|
+
1. **字段命名**:与现网一致(如 JSON 蛇形 `project_id`;proto `json_name`;CLI kebab-case 等)。
|
|
779
|
+
2. **错误风格**:业务错误进 `message` / 状态详情;**禁止**「HTTP 200 + 业务错误码」混用(除非项目现网已是该风格且 design 显式沿用)。
|
|
780
|
+
3. **幂等 / 终态语义**:若存在上报类接口,写清「成功 ≠ 资源终态」等不变量(对齐 §2 决策)。
|
|
781
|
+
4. **兼容缺省**:可选字段缺省时的兼容行为写进字段表「默认」列。
|
|
782
|
+
5. **与流程对齐**:接口编号可被 §4.2/§4.3 时序与 §6 测试引用。
|
|
783
|
+
|
|
784
|
+
##### 4.5.2 逐接口详设(强制骨架)
|
|
785
|
+
|
|
786
|
+
对清单中每个需展开的编号 `In`,输出同构小节 `#### In · <短名>(<变更类型>)`:
|
|
787
|
+
|
|
788
|
+
1. **元信息表**(强制):
|
|
789
|
+
|
|
790
|
+
| 项 | 内容 |
|
|
791
|
+
|----|------|
|
|
792
|
+
| 应用场景 | 谁、在什么用户动作/系统时机下调用 |
|
|
793
|
+
| 协议 | 方法 + 路径(或 CLI 命令 / 导出函数签名) |
|
|
794
|
+
| Content-Type / 编码 | 如 `application/json`(若适用) |
|
|
795
|
+
| 对应 RPC / 内部名 | 若有(可写暂定名 +「实现时与 OpenAPI/proto 对齐」) |
|
|
796
|
+
| 鉴权 | 本接口鉴权要点(可引用通道表) |
|
|
797
|
+
| 本迭代变更 | 一句话(新增字段 / 行为扩展 / 不变仅消费 …) |
|
|
798
|
+
|
|
799
|
+
2. **参数表**(有则分节:路径参数 / Query / 请求体 / CLI flags):
|
|
800
|
+
|
|
801
|
+
| 字段 | 类型 | 必填 | 默认 | 说明 |
|
|
802
|
+
|------|------|------|------|------|
|
|
803
|
+
|
|
804
|
+
- 合法值枚举、别名归一、与表字段差异(如「API 有 `step_uid`,表无此列」)写在「说明」。
|
|
805
|
+
- 互斥参数(二选一)在说明或表下用引用块写清。
|
|
806
|
+
|
|
807
|
+
3. **请求示例**(强制至少 1 个主路径成功请求):
|
|
808
|
+
- Web:` ```http ` 完整请求行 + 头 + JSON 正文
|
|
809
|
+
- CLI:` ```text ` 或 shell 调用示例
|
|
810
|
+
- 库:调用伪代码 / TypeScript 签名调用示例
|
|
811
|
+
|
|
812
|
+
4. **成功响应字段表** + **成功响应示例**(强制)
|
|
813
|
+
|
|
814
|
+
5. **失败示例**(质量红线 G2 — 强制):每个「新增/修改/行为扩展」接口**必须**另附 ≥1 组报错示例(完整 HTTP 或等价),覆盖典型失败之一:参数校验失败、鉴权/租约失败、资源不存在、前置条件不满足等。示例正文须与错误表一致。
|
|
815
|
+
|
|
816
|
+
6. **错误表**(强制;条件 → 状态/退出码 → 说明):
|
|
817
|
+
|
|
818
|
+
| 条件 | 状态 / 退出码 | 说明 |
|
|
819
|
+
|------|---------------|------|
|
|
820
|
+
|
|
821
|
+
7. **处理顺序 / 合同**(可选但推荐):多步服务端合同用编号列表;与 §4.2/§4.3 流程、§4.4 落库对齐。
|
|
822
|
+
|
|
823
|
+
##### 4.5.3 调用关系(推荐)
|
|
824
|
+
|
|
825
|
+
用短文本或 Mermaid 概括调用方如何串起 `I1…In`(主路径一条线即可),便于实现与联调对照。
|
|
586
826
|
|
|
587
|
-
示例(CLI):
|
|
588
827
|
```text
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
出参: { status: 'initialized' | 'already_initialized' | 'updated_assets', message: string }
|
|
592
|
-
错误码:
|
|
593
|
-
E_INVALID_LANGUAGE 退出码 1 — 不支持的 language 值
|
|
594
|
-
E_PARITY_STRICT 退出码 1 — 资产生成后 parity 校验失败
|
|
828
|
+
调用方A: I3 → I1 → I4 → I7
|
|
829
|
+
调用方B: … → I5 → I6
|
|
595
830
|
```
|
|
596
831
|
|
|
597
|
-
|
|
832
|
+
#### B. 接口路径 —— 质量自检(生成后必过)
|
|
598
833
|
|
|
599
|
-
|
|
834
|
+
- [ ] 有通道/鉴权表(或多通道说明)+ 本迭代接口清单(编号+变更类型+场景)
|
|
835
|
+
- [ ] 有通用错误码约定 + 命名/错误风格约定
|
|
836
|
+
- [ ] 每个「新增/修改/行为扩展」接口具备:元信息、字段表、成功请求/响应示例、**失败示例(G2)**、错误表
|
|
837
|
+
- [ ] 「不变·本迭代消费」接口至少有场景+协议+关键消费约定,不假装不存在
|
|
838
|
+
- [ ] 无「只有路径、无字段/无示例/无错误」的偷懒写法;示例与字段表一致
|
|
839
|
+
- [ ] 接口编号可被 §4.2/§4.3 流程、§6 测试引用
|
|
600
840
|
|
|
601
|
-
|
|
841
|
+
#### C. CLI / 库项目路径(无 HTTP 时)
|
|
602
842
|
|
|
603
|
-
|
|
604
|
-
|------|------|
|
|
605
|
-
| 时序说明 | 谁调用谁、顺序、分支、异常路径(可用 Mermaid `sequenceDiagram`) |
|
|
606
|
-
| 状态机流转 | 状态集合、迁移事件、迁移条件、终态(可用 Mermaid `stateDiagram-v2`) |
|
|
843
|
+
无 HTTP 时仍用「清单 + 逐接口」骨架,将「协议」换为命令/导出签名;错误码换为退出码或抛错类型。示例:
|
|
607
844
|
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
U->>I: specflow init --artifact-language zh-CN
|
|
616
|
-
I->>FS: 创建 specflow/{changes,specs}
|
|
617
|
-
I->>FS: 写入 config.yaml (artifacts.language: zh-CN)
|
|
618
|
-
I->>FS: 复制 IDE 资产 (skills/commands/prompts)
|
|
619
|
-
I->>P: parity 严格校验
|
|
620
|
-
P-->>I: ok / fail
|
|
621
|
-
I-->>U: status + message
|
|
845
|
+
```text
|
|
846
|
+
specflow init --artifact-language <language>
|
|
847
|
+
入参: language?: string 可选,默认 'en';合法值 en | zh-CN | zh(zh 别名→zh-CN)
|
|
848
|
+
出参: { status: 'initialized' | 'already_initialized' | 'updated_assets', message: string }
|
|
849
|
+
错误码:
|
|
850
|
+
E_INVALID_LANGUAGE 退出码 1 — 不支持的 language 值
|
|
851
|
+
E_PARITY_STRICT 退出码 1 — 资产生成后 parity 校验失败
|
|
622
852
|
```
|
|
623
853
|
|
|
624
|
-
|
|
854
|
+
**完全不涉及接口变更时写**:`不涉及接口变更(内部实现调整,无对外/跨模块接口变化)`。
|
|
625
855
|
|
|
626
|
-
### 6
|
|
856
|
+
### 4.6 核心算法 / 逻辑说明 (Core Logic)
|
|
627
857
|
|
|
628
858
|
**适用范围**:有非平凡算法或数据处理逻辑的变更。
|
|
629
859
|
| 元素 | 内容 |
|
|
@@ -634,7 +864,7 @@ sequenceDiagram
|
|
|
634
864
|
|
|
635
865
|
**不涉及非平凡算法时写**:`不涉及非平凡算法(逻辑简单,无复杂数据处理)`。
|
|
636
866
|
|
|
637
|
-
###
|
|
867
|
+
### 4.7 配置与运行环境 (Configuration & Runtime)
|
|
638
868
|
|
|
639
869
|
**适用范围**:新增配置项、环境变量、运行时依赖的变更。
|
|
640
870
|
| 元素 | 内容 |
|
|
@@ -645,48 +875,73 @@ sequenceDiagram
|
|
|
645
875
|
|
|
646
876
|
**不涉及配置变更时写**:`不涉及配置或运行环境变更`。
|
|
647
877
|
|
|
648
|
-
###
|
|
878
|
+
### 4.8 兼容性与迁移 (Compatibility & Migration)
|
|
879
|
+
|
|
880
|
+
**适用范围**:破坏性变更、JSON/列变更、或任何「新版本写入、旧版本仍可能读」的发布窗口。
|
|
649
881
|
|
|
650
|
-
**适用范围**:有破坏性变更。
|
|
651
882
|
| 元素 | 内容 |
|
|
652
883
|
|------|------|
|
|
653
|
-
| 旧行为 → 新行为 | 映射表 |
|
|
654
|
-
| 迁移路径 |
|
|
655
|
-
|
|
|
884
|
+
| 旧行为 → 新行为 | 映射表(禁止含糊「基本兼容」) |
|
|
885
|
+
| 迁移路径 | 存量用户如何升级、步骤顺序 |
|
|
886
|
+
| **存量默认值填充**(G3) | 与 §4.4.4 一致;JSON/新列必须写明填充策略 |
|
|
887
|
+
| **回滚数据兼容**(G4) | 发布失败回滚后:新代码已写数据,旧代码是否安全忽略/跳过?必须给出方案(`omitempty` / 忽略未知字段 / `schema_version` 等) |
|
|
888
|
+
| 应用回滚 | 镜像/包回退步骤 |
|
|
656
889
|
|
|
657
|
-
|
|
890
|
+
**完全无兼容风险时写**:`不涉及破坏性变更(向后兼容);无新形状写入,回滚仅回退应用即可` —— 仍须一句话点明「无新旧数据互读问题」。
|
|
658
891
|
|
|
659
892
|
### 详细设计质量自检(生成后检查)
|
|
660
893
|
|
|
661
|
-
- [ ]
|
|
662
|
-
- [ ]
|
|
663
|
-
- [ ]
|
|
664
|
-
- [ ]
|
|
665
|
-
- [ ]
|
|
894
|
+
- [ ] 有 §4.1 设计要点一览(P1…Pn)
|
|
895
|
+
- [ ] 有 §4.2 Happy Path **完整**时序图 + 设计要点说明
|
|
896
|
+
- [ ] 每个 §4.3 业务场景均有图 + **设计要点说明**(无裸图)
|
|
897
|
+
- [ ] **G1**:超过 5 行的文字流程已改为 Mermaid,无长散文流程
|
|
898
|
+
- [ ] 每个详细设计元素可追溯到 §5 Requirement/Scenario 与 §2 决策
|
|
899
|
+
- [ ] 涉及数据/接口的均非留空;不涉及类别显式标注
|
|
900
|
+
- [ ] **§4.4**:ER + DDL + 字段说明;若 JSON/新列变更则有**存量填充策略(G3)**与回滚数据兼容(G4)
|
|
901
|
+
- [ ] **§4.5**:通道/清单/错误码 + 字段/成功示例 + **失败示例(G2)** + 错误表
|
|
902
|
+
- [ ] **§4.8**:回滚兼容结论明确(或显式声明无新旧数据互读问题)
|
|
903
|
+
- [ ] **文风**:无「尽量/大概/一般情况下」等含糊词;生僻缩写首次已注解
|
|
904
|
+
- [ ] 若无法写出实现级细节,标记 `[待 refine 澄清: <元素>]`
|
|
666
905
|
|
|
667
906
|
---
|
|
668
907
|
|
|
669
|
-
##
|
|
908
|
+
## 5. 验收标准 (Acceptance Criteria)
|
|
909
|
+
|
|
910
|
+
[按 capability 分组,完整列出所有 Requirement + Scenario,每个 Scenario 3 级可测试性标注]
|
|
911
|
+
|
|
912
|
+
### 5.1 Capability: <name>
|
|
913
|
+
[Delta 操作类型: ADDED / MODIFIED / REMOVED / RENAMED]
|
|
914
|
+
|
|
915
|
+
#### Requirement: <name>
|
|
916
|
+
<描述>
|
|
670
917
|
|
|
671
|
-
|
|
918
|
+
| Scenario | WHEN | THEN | 可测试性 | 说明 |
|
|
919
|
+
|----------|------|------|---------|------|
|
|
920
|
+
| <name> | <条件> | <期望> | ✅ 功能可测试 / ⚠️ 文档可测试 / ❌ 不可测试 | <原因 if ⚠️/❌> |
|
|
921
|
+
|
|
922
|
+
---
|
|
923
|
+
|
|
924
|
+
## 6. 测试策略 (Test Strategy)
|
|
925
|
+
|
|
926
|
+
> 本章从"§5 验收标准可不可测"升级为"**用分层测试证明方案正确**"。它回答:
|
|
672
927
|
> 每个验收标准(WHEN/THEN)由哪一层测试覆盖、用什么工具、目标是证明什么。
|
|
673
928
|
> **选择性呈现**:只列出本变更实际需要的测试层级;不涉及的层级显式标注"不涉及"。
|
|
674
929
|
|
|
675
|
-
###
|
|
930
|
+
### 6.1 分层测试矩阵
|
|
676
931
|
|
|
677
932
|
| 测试层级 | 覆盖对象 | 工具/框架 | 目标(证明什么) | 覆盖的验收标准 |
|
|
678
933
|
|---------|---------|----------|---------------|---------------|
|
|
679
|
-
| 单元测试 | 核心函数/类/模块内部逻辑 | <框架,如 vitest/jest/pytest> | 逻辑正确、边界处理 | 引用 §
|
|
680
|
-
| 集成测试 | 模块间交互、接口契约、外部依赖 | <框架> | 模块协作正确、契约一致 | 引用 §
|
|
681
|
-
| 验收测试 | spec 的 WHEN/THEN 行为 | <E2E/CLI 测试> | 逐 Scenario 验证用户可见行为 | §
|
|
682
|
-
| 回归测试 | 主 specs 基线 + 既有行为 | <框架> | 不破坏已有功能 | 主 specs(§
|
|
934
|
+
| 单元测试 | 核心函数/类/模块内部逻辑 | <框架,如 vitest/jest/pytest> | 逻辑正确、边界处理 | 引用 §5 的 Scenario |
|
|
935
|
+
| 集成测试 | 模块间交互、接口契约、外部依赖 | <框架> | 模块协作正确、契约一致 | 引用 §5 的 Scenario |
|
|
936
|
+
| 验收测试 | spec 的 WHEN/THEN 行为 | <E2E/CLI 测试> | 逐 Scenario 验证用户可见行为 | §5 全部核心 Scenario |
|
|
937
|
+
| 回归测试 | 主 specs 基线 + 既有行为 | <框架> | 不破坏已有功能 | 主 specs(§5 基线对照) |
|
|
683
938
|
| 性能测试 | 关键路径/高并发 | <如 k6/jmeter/bench> | NFR 性能目标达成 | NFR 章节 |
|
|
684
939
|
| 安全测试 | 认证/授权/输入边界 | <SAST/渗透> | 无已知漏洞 | NFR 安全目标 |
|
|
685
940
|
| 兼容性测试 | 多平台/多版本/多浏览器 | <如 playwright> | 跨环境一致 | 兼容性 Requirement |
|
|
686
941
|
|
|
687
942
|
**填写要求**:
|
|
688
943
|
|
|
689
|
-
1. 每个测试层级**映射到 §
|
|
944
|
+
1. 每个测试层级**映射到 §5 验收标准**(引用具体 Scenario 名)—— 这是"测试策略与验收标准闭环"的关键
|
|
690
945
|
2. 每个层级标注**工具/框架**(呼应 full-stack-skills 的"阶段→技能映射":测试阶段→test-writer/playwright/pytest)
|
|
691
946
|
3. **目标要可验证**("证明 P95 < 200ms" 而非 "测性能")
|
|
692
947
|
4. 新增测试 vs 修改既有测试要区分
|
|
@@ -700,7 +955,7 @@ sequenceDiagram
|
|
|
700
955
|
| 验收测试 | `specflow init --artifact-language zh-CN` 全流程 | CLI 测试 | 端到端产物符合预期 | "Reject an unsupported language" 等 |
|
|
701
956
|
| 回归测试 | 既有 init 行为(无语言参数) | vitest | 缺省仍为 en,不破坏既有 | "Initialize without an explicit language" |
|
|
702
957
|
|
|
703
|
-
###
|
|
958
|
+
### 6.2 测试环境与数据
|
|
704
959
|
|
|
705
960
|
| 项 | 说明 |
|
|
706
961
|
|----|------|
|
|
@@ -709,9 +964,9 @@ sequenceDiagram
|
|
|
709
964
|
| 并行/隔离 | 测试间是否可并行、是否需要隔离(文件锁/独立目录) |
|
|
710
965
|
| 覆盖率目标 | 核心模块目标覆盖率(如 ≥80%) |
|
|
711
966
|
|
|
712
|
-
###
|
|
967
|
+
### 6.3 测试策略自检
|
|
713
968
|
|
|
714
|
-
- [ ] 每个 §
|
|
969
|
+
- [ ] 每个 §5 验收标准至少被一个测试层级覆盖(闭环)
|
|
715
970
|
- [ ] 每个测试层级有工具、有可验证目标
|
|
716
971
|
- [ ] 既有行为有回归测试保护(对应 Pass 7 基线)
|
|
717
972
|
- [ ] 新增测试与修改既有测试已区分
|
|
@@ -720,12 +975,12 @@ sequenceDiagram
|
|
|
720
975
|
|
|
721
976
|
---
|
|
722
977
|
|
|
723
|
-
##
|
|
978
|
+
## 7. 部署/发布/回滚方案 (Deployment & Release)
|
|
724
979
|
|
|
725
980
|
> 本章回答"方案实现后如何上线、如何发布、出问题如何回滚、上线后如何监控"。
|
|
726
981
|
> **选择性呈现**:对有运行系统的项目必须;对纯库/CLI/文档项目可显式标注"不涉及运行时部署"。
|
|
727
982
|
|
|
728
|
-
###
|
|
983
|
+
### 7.1 部署方案 (Deployment)
|
|
729
984
|
|
|
730
985
|
| 项 | 方案 |
|
|
731
986
|
|----|------|
|
|
@@ -735,7 +990,7 @@ sequenceDiagram
|
|
|
735
990
|
| 配置管理 | 新配置项如何在各环境生效、密钥管理 |
|
|
736
991
|
| 环境差异 | dev/staging/prod 的环境差异与处理 |
|
|
737
992
|
|
|
738
|
-
###
|
|
993
|
+
### 7.2 发布策略 (Release Strategy)
|
|
739
994
|
|
|
740
995
|
| 项 | 方案 |
|
|
741
996
|
|----|------|
|
|
@@ -743,7 +998,7 @@ sequenceDiagram
|
|
|
743
998
|
| 发布窗口 | 是否需停机窗口、灰度比例 |
|
|
744
999
|
| 兼容性 | 新旧版本共存期间的兼容(如 API 版本化、DB 兼容) |
|
|
745
1000
|
|
|
746
|
-
###
|
|
1001
|
+
### 7.3 回滚方案 (Rollback)
|
|
747
1002
|
|
|
748
1003
|
| 项 | 方案 |
|
|
749
1004
|
|----|------|
|
|
@@ -752,7 +1007,7 @@ sequenceDiagram
|
|
|
752
1007
|
| 回滚的数据一致性 | 数据迁移的回滚(若有)、缓存/队列的清理 |
|
|
753
1008
|
| 回滚验证 | 回滚后如何确认恢复正常 |
|
|
754
1009
|
|
|
755
|
-
###
|
|
1010
|
+
### 7.4 监控与可观测性 (Monitoring & Observability)
|
|
756
1011
|
|
|
757
1012
|
| 项 | 方案 |
|
|
758
1013
|
|----|------|
|
|
@@ -760,7 +1015,7 @@ sequenceDiagram
|
|
|
760
1015
|
| 日志/追踪 | 日志规范、链路追踪 |
|
|
761
1016
|
| 告警 | 告警阈值与负责人 |
|
|
762
1017
|
|
|
763
|
-
###
|
|
1018
|
+
### 7.5 部署方案自检
|
|
764
1019
|
|
|
765
1020
|
- [ ] 部署目标/方式/顺序明确
|
|
766
1021
|
- [ ] 发布策略与兼容性说明
|
|
@@ -771,63 +1026,30 @@ sequenceDiagram
|
|
|
771
1026
|
|
|
772
1027
|
---
|
|
773
1028
|
|
|
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 结构检查>
|
|
787
|
-
|
|
788
|
-
### Pass 4: 实施闭环 (Implementation Closure)
|
|
789
|
-
**Verdict:** PASS / WARNING / FAIL
|
|
790
|
-
**证据:** <requirement×task 覆盖矩阵 + 范围蔓延检查>
|
|
1029
|
+
## 8. 闭环性检查 (Closed-Loop Verification)
|
|
791
1030
|
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
1031
|
+
> **写法要简练**:内部仍跑完 Pass 1–7,但写入本文只保留下表。
|
|
1032
|
+
> - `PASS` / `SKIPPED`:「关键证据」一句话即可(不必贴大表)。
|
|
1033
|
+
> - `WARNING` / `FAIL`:「关键证据」写清缺口(文件/Requirement/Scenario/任务 ID),最多 2–3 条要点。
|
|
1034
|
+
> - **禁止**为每个 Pass 再开长小节、禁止重复贴总评表。
|
|
795
1035
|
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
|
801
|
-
|
|
802
|
-
|
|
|
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 基线对照 | |
|
|
1036
|
+
| Pass | 检查项 | 结论 | 关键证据(一句话;⚠️/❌ 可列 2–3 条要点) |
|
|
1037
|
+
|------|--------|------|--------------------------------------|
|
|
1038
|
+
| 1 | 需求闭环 proposal↔specs | ✅/⚠️/❌ | |
|
|
1039
|
+
| 2 | 方案闭环 design↔specs | ✅/⚠️/❌ | |
|
|
1040
|
+
| 3 | 规格闭环 场景/可测试性/delta | ✅/⚠️/❌ | |
|
|
1041
|
+
| 4 | 实施闭环 tasks↔specs | ✅/⚠️/❌ | |
|
|
1042
|
+
| 5 | 风险闭环 缓解/BREAKING | ✅/⚠️/❌ | |
|
|
1043
|
+
| 6 | 代码落地性 锚点/结构/栈 | ✅/⚠️/❌/⊘ | |
|
|
1044
|
+
| 7 | 基线对照 主 specs | ✅/⚠️/❌/⊘ | |
|
|
825
1045
|
|
|
826
1046
|
**整体闭环性:** PASS / PASS WITH WARNINGS / FAIL
|
|
827
1047
|
|
|
1048
|
+
判定:任一 ❌ → FAIL;无 ❌ 但有 ⚠️ → PASS WITH WARNINGS;全 ✅(⊘ 不计)→ PASS。
|
|
1049
|
+
|
|
828
1050
|
---
|
|
829
1051
|
|
|
830
|
-
##
|
|
1052
|
+
## 9. 可实施性评估 (Implementability Assessment)
|
|
831
1053
|
|
|
832
1054
|
| 评估维度 | 结论 | 说明 |
|
|
833
1055
|
|---------|------|------|
|
|
@@ -843,14 +1065,14 @@ sequenceDiagram
|
|
|
843
1065
|
|
|
844
1066
|
---
|
|
845
1067
|
|
|
846
|
-
##
|
|
1068
|
+
## 10. 审批意见 (Approval Decision)
|
|
847
1069
|
|
|
848
|
-
###
|
|
1070
|
+
### 10.1 AI 预审建议
|
|
849
1071
|
|
|
850
1072
|
**建议:** 建议批准 / 有条件批准 / 退回 refine / 拒绝
|
|
851
1073
|
**理由:** <1-2 句话,引用具体 verdict>
|
|
852
1074
|
|
|
853
|
-
###
|
|
1075
|
+
### 10.2 人工审批签字栏
|
|
854
1076
|
|
|
855
1077
|
| 角色 | 姓名 | 审批结论 | 日期 | 意见 |
|
|
856
1078
|
|------|------|---------|------|------|
|
|
@@ -866,47 +1088,104 @@ sequenceDiagram
|
|
|
866
1088
|
|
|
867
1089
|
| 章节 | 数据来源 | 处理方式 |
|
|
868
1090
|
|------|---------|---------|
|
|
869
|
-
|
|
|
870
|
-
|
|
|
871
|
-
|
|
|
872
|
-
|
|
|
873
|
-
|
|
|
874
|
-
|
|
|
875
|
-
|
|
|
876
|
-
|
|
|
877
|
-
|
|
|
878
|
-
|
|
|
879
|
-
| 闭环性检查 Pass 7 | specflow/specs/ 主基线 | AI 交叉对照 |
|
|
880
|
-
| 可实施性评估 | tasks + design + specs + 项目代码 | AI 推理 |
|
|
881
|
-
| 审批意见 | 闭环性 + 设计质量 + 可实施性三重 verdict | AI 预审 + 人工签字栏 |
|
|
1091
|
+
| 绪论与边界 | proposal.md + explore.md(可选) + design Non-Goals | AI 提炼;痛点图 + What/Impact + User Journey + 非目标;**无变更摘要章** |
|
|
1092
|
+
| 技术方案评估 | design.md | 决策表 + 风险表 + 设计质量 |
|
|
1093
|
+
| 架构整体设计 | design + 锚点代码 + specs | Mermaid 图 + **图要点说明** + 组件边界表;追溯 §2 |
|
|
1094
|
+
| 方案详细设计 | design + specs + 锚点 + 现网 DDL/API | 设计要点 + Happy Path + 业务场景(+说明) + 数据/接口等;追溯 §5+§2 |
|
|
1095
|
+
| 验收标准 | specs/**/*.md | **置于设计之后**;3 级可测试性 |
|
|
1096
|
+
| 测试策略 | §5 验收标准 + 项目测试栈 | 分层矩阵映射验收标准 |
|
|
1097
|
+
| 部署/发布/回滚 | §2 决策 + 运行环境 | 部署/发布/回滚/监控 |
|
|
1098
|
+
| 闭环性检查 | 四件套 + 锚点 + 主 specs | 内部跑 Pass 1–7;**正文只输出一张结论表**(PASS 一句话;⚠️/❌ 要点化) |
|
|
1099
|
+
| 可实施性评估 | tasks + design + specs + 代码 | AI 推理 |
|
|
1100
|
+
| 审批意见 | 三重 verdict | AI 预审 + 人工签字栏 |
|
|
882
1101
|
```
|
|
883
1102
|
|
|
884
1103
|
### Generation Rules
|
|
885
1104
|
|
|
886
|
-
1.
|
|
887
|
-
|
|
888
|
-
|
|
1105
|
+
1. **§1 绪论 must be truthful and precise**: every pain point in the current-flow diagram
|
|
1106
|
+
must be grounded in proposal.md `## Why` / design.md Context / confirmed explore.md
|
|
1107
|
+
(do not invent pains). Absorb What Changes + Impact into §1.2 (no separate 变更摘要
|
|
1108
|
+
chapter). Every User Journey step must trace to a §5 acceptance criterion. Every
|
|
1109
|
+
Non-Goal must state its "不做理由".
|
|
889
1110
|
|
|
890
|
-
2. **Acceptance Criteria is exhaustive
|
|
891
|
-
delta spec. Do not summarize or omit.
|
|
1111
|
+
2. **Acceptance Criteria (§5) is exhaustive and placed after design**: include every
|
|
1112
|
+
Requirement and Scenario from every delta spec. Do not summarize or omit. Do NOT place
|
|
1113
|
+
acceptance before architecture/detailed design.
|
|
892
1114
|
|
|
893
|
-
3. **Pass 6 evidence must cite real code**:
|
|
894
|
-
|
|
895
|
-
(
|
|
896
|
-
either read it or mark it `SKIPPED (greenfield)`.
|
|
1115
|
+
3. **Pass 6 evidence must cite real code**: when Pass 6 is ⚠️/❌, §8「关键证据」must cite
|
|
1116
|
+
actual anchor paths and concrete findings. PASS may be one line
|
|
1117
|
+
(e.g. `锚点 N 个均存在,结构可扩展`). Greenfield → `⊘` with the SKIPPED reason.
|
|
897
1118
|
|
|
898
|
-
4. **Pass 7 evidence must cite baseline specs**:
|
|
899
|
-
|
|
900
|
-
verbatim `SKIPPED (no baseline — greenfield or no archived changes yet)` line.
|
|
1119
|
+
4. **Pass 7 evidence must cite baseline specs**: when ⚠️/❌, cite capability/requirement
|
|
1120
|
+
names compared. PASS → one line; no baseline → `⊘`.
|
|
901
1121
|
|
|
902
1122
|
5. **Over-engineering evidence must cite design/tasks location**: "Signal 2 detected in
|
|
903
1123
|
`design.md` § D3, which defines a `ReviewerFactory` for a single reviewer type" — not
|
|
904
1124
|
just "over-engineered".
|
|
905
1125
|
|
|
906
|
-
6. **Language policy**: narrative follows `artifacts.language`; protocol
|
|
907
|
-
paths, commands, code stay in original form.
|
|
1126
|
+
6. **Language policy + Style & Tone**: narrative follows `artifacts.language`; protocol
|
|
1127
|
+
markers, IDs, paths, commands, code stay in original form. Apply Style & Tone hard
|
|
1128
|
+
rule (通俗 + 首次注解缩写 + 禁止含糊词) to all human-readable narrative.
|
|
908
1129
|
|
|
909
1130
|
7. **No file modification**: this prompt only generates `approval.md`. Do not modify the
|
|
910
1131
|
four artifacts, project code, or main specs.
|
|
911
1132
|
|
|
912
1133
|
8. **Sign-off table is empty**: human sign-off fields must be blank.
|
|
1134
|
+
|
|
1135
|
+
9. **§4.4 database section quality (hard rule)**: if the change reads/writes any
|
|
1136
|
+
relational table (including zero-DDL semantic-only changes), §4.4 MUST include:
|
|
1137
|
+
(a) structure-change conclusion table + explicit change SQL (or explicit「无」),
|
|
1138
|
+
(b) Mermaid `erDiagram` of core entities + a table-description legend
|
|
1139
|
+
(表名/中文名/职责/结构/本迭代动作),
|
|
1140
|
+
(c) per-table complete `CREATE TABLE` with storage engine + charset (MySQL:
|
|
1141
|
+
`ENGINE=InnoDB DEFAULT CHARSET=utf8mb4` …), and
|
|
1142
|
+
(d) per-table field description table with「本迭代用法」.
|
|
1143
|
+
Do NOT substitute prose-only schema descriptions. Do NOT omit ENGINE/CHARSET on
|
|
1144
|
+
MySQL DDL. Zero-DDL iterations still show current-baseline DDL — never claim
|
|
1145
|
+
「不涉及数据库」when tables are in the read/write path.
|
|
1146
|
+
|
|
1147
|
+
10. **§4.5 interface section quality (hard rule)**: if the change adds, modifies,
|
|
1148
|
+
behavior-extends, or newly consumes external/cross-service interfaces, §4.5 MUST
|
|
1149
|
+
include: (a) caller/channel + auth overview, (b) numbered interface inventory with
|
|
1150
|
+
change type (新增/修改/行为扩展/不变·本迭代消费), (c) common error-code mapping and
|
|
1151
|
+
naming/error-style conventions, (d) per-interface meta table, field tables
|
|
1152
|
+
(name/type/required/default/description), at least one success request example and
|
|
1153
|
+
success response example, **(e) ≥1 failure request/response example (G2)**, and an
|
|
1154
|
+
error-condition table. Do NOT ship path-only stubs without fields/examples/errors.
|
|
1155
|
+
Unchanged APIs that this iteration does not consume need not be fully re-documented.
|
|
1156
|
+
|
|
1157
|
+
11. **§3 architecture diagram key points (hard rule)**: every architecture Mermaid diagram
|
|
1158
|
+
MUST be followed by a numbered「设计说明 / 图要点」list (boundary/invariants/reuse) —
|
|
1159
|
+
not a mere restatement of node names. Component table alone is not enough.
|
|
1160
|
+
|
|
1161
|
+
12. **§4 Happy Path + scenario design notes (hard rule)**: §4.1 design-points table, §4.2
|
|
1162
|
+
complete Happy Path `sequenceDiagram`, and each §4.3 business scenario MUST include
|
|
1163
|
+
post-diagram「设计要点」explanations. Bare diagrams without notes are a quality failure.
|
|
1164
|
+
|
|
1165
|
+
13. **Quality Gates G1–G4 (hard rule)**:
|
|
1166
|
+
- **G1**: any process description longer than 5 prose lines MUST be a Mermaid
|
|
1167
|
+
`sequenceDiagram` / `flowchart` / `stateDiagram-v2` (no long prose flows).
|
|
1168
|
+
- **G2**: every added/modified/behavior-extended interface in §4.5 MUST include ≥1
|
|
1169
|
+
failure request/response example (validation failure, lease expiry, etc.), not only
|
|
1170
|
+
an error-code table.
|
|
1171
|
+
- **G3**: JSON shape changes or new columns MUST document存量数据默认值填充策略 in
|
|
1172
|
+
§4.4.4 / §4.8.
|
|
1173
|
+
- **G4**: MUST state rollback data compatibility — whether old code can safely
|
|
1174
|
+
ignore/skip data written by new code (`omitempty`, unknown-field ignore,
|
|
1175
|
+
`schema_version`, etc.). "Rollback the image" alone is insufficient.
|
|
1176
|
+
|
|
1177
|
+
14. **Style & Tone (hard rule)**: plain language for implementers; obscure English
|
|
1178
|
+
abbreviations MUST be glossed on first use. Ban weasel words「尽量」「大概」
|
|
1179
|
+
「一般情况下」「可能需要」「酌情」「视情况」; use「必须」「禁止」「采用 XX 方案」
|
|
1180
|
+
or explicit if/then tables instead.
|
|
1181
|
+
|
|
1182
|
+
15. **§8 closed-loop must be concise (hard rule)**: write exactly one summary table
|
|
1183
|
+
(Pass | 检查项 | 结论 | 关键证据). Do NOT open seven Pass subsections or a second
|
|
1184
|
+
summary table. PASS/SKIPPED → one short phrase; WARNING/FAIL → ≤3 concrete bullets.
|
|
1185
|
+
|
|
1186
|
+
16. **§4.4 database skill routing**: before drafting relational DDL, run
|
|
1187
|
+
`prompts/approval/database-guidance.md`. On stack hit, Read local
|
|
1188
|
+
`skills/database/<stack>/…` (in-repo, no remote fetch) and apply idioms; on miss,
|
|
1189
|
+
LLM-only SpecFlow §4.4 rules. Do not invent MCP tools; do not `npx skills add`.
|
|
1190
|
+
Record `skills/database/<stack>` or `LLM-fallback` in the §4.4.1 总则 table.
|
|
1191
|
+
|