@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.
Files changed (82) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/prompts/approval/database-guidance.md +79 -0
  4. package/prompts/approval/generate.md +569 -290
  5. package/skills/database/LICENSE +405 -0
  6. package/skills/database/ORIGIN.md +6 -0
  7. package/skills/database/README.md +30 -0
  8. package/skills/database/elasticsearch/LICENSE.txt +202 -0
  9. package/skills/database/elasticsearch/SKILL.md +199 -0
  10. package/skills/database/elasticsearch/examples/01-fulltext-search.md +215 -0
  11. package/skills/database/elasticsearch/examples/02-aggregation-report.md +206 -0
  12. package/skills/database/elasticsearch/examples/03-reindex-zero-downtime.md +200 -0
  13. package/skills/database/elasticsearch/examples/04-cluster-monitoring.md +204 -0
  14. package/skills/database/elasticsearch/references/01-query-dsl-fulltext.md +162 -0
  15. package/skills/database/elasticsearch/references/02-query-dsl-term.md +210 -0
  16. package/skills/database/elasticsearch/references/03-aggregations-metric.md +161 -0
  17. package/skills/database/elasticsearch/references/04-aggregations-bucket.md +236 -0
  18. package/skills/database/elasticsearch/references/05-mapping-types.md +134 -0
  19. package/skills/database/elasticsearch/references/06-analyzers.md +187 -0
  20. package/skills/database/elasticsearch/references/07-cluster-ops.md +225 -0
  21. package/skills/database/elasticsearch/references/08-elk-integration.md +170 -0
  22. package/skills/database/mysql/SKILL.md +195 -0
  23. package/skills/database/mysql/examples/01-connection-pool.md +75 -0
  24. package/skills/database/mysql/examples/02-slow-query-optimization.md +98 -0
  25. package/skills/database/mysql/examples/03-master-slave-setup.md +144 -0
  26. package/skills/database/mysql/examples/04-backup-strategy.md +212 -0
  27. package/skills/database/mysql/references/01-functions-string.md +103 -0
  28. package/skills/database/mysql/references/02-functions-date.md +152 -0
  29. package/skills/database/mysql/references/03-functions-aggregate-window.md +167 -0
  30. package/skills/database/mysql/references/04-functions-json.md +129 -0
  31. package/skills/database/mysql/references/05-sql-ddl-types.md +235 -0
  32. package/skills/database/mysql/references/06-index-optimization.md +232 -0
  33. package/skills/database/mysql/references/07-replication-ha.md +213 -0
  34. package/skills/database/mysql/references/08-backup-restore.md +207 -0
  35. package/skills/database/mysql/references/09-advanced-features.md +345 -0
  36. package/skills/database/oracle/LICENSE.txt +202 -0
  37. package/skills/database/oracle/SKILL.md +238 -0
  38. package/skills/database/oracle/examples/01-plsql-procedure.md +90 -0
  39. package/skills/database/oracle/examples/02-awr-analysis.md +99 -0
  40. package/skills/database/oracle/examples/03-rman-backup.md +108 -0
  41. package/skills/database/oracle/examples/04-dataguard-setup.md +146 -0
  42. package/skills/database/oracle/references/01-functions-string.md +91 -0
  43. package/skills/database/oracle/references/02-functions-date.md +71 -0
  44. package/skills/database/oracle/references/03-analytic-functions.md +103 -0
  45. package/skills/database/oracle/references/04-plsql-guide.md +303 -0
  46. package/skills/database/oracle/references/05-performance-tuning.md +164 -0
  47. package/skills/database/oracle/references/06-backup-recovery.md +115 -0
  48. package/skills/database/oracle/references/07-dataguard-rac.md +76 -0
  49. package/skills/database/oracle/references/08-security.md +170 -0
  50. package/skills/database/oracle/references/09-sql-syntax.md +152 -0
  51. package/skills/database/oracle/references/10-features.md +174 -0
  52. package/skills/database/postgresql/LICENSE.txt +202 -0
  53. package/skills/database/postgresql/SKILL.md +182 -0
  54. package/skills/database/postgresql/examples/.gitkeep +0 -0
  55. package/skills/database/postgresql/examples/01-jsonb-query.md +72 -0
  56. package/skills/database/postgresql/examples/02-cte-recursive.md +110 -0
  57. package/skills/database/postgresql/examples/03-performance-tuning.md +114 -0
  58. package/skills/database/postgresql/examples/04-streaming-replication.md +113 -0
  59. package/skills/database/postgresql/references/.gitkeep +0 -0
  60. package/skills/database/postgresql/references/01-functions-string.md +174 -0
  61. package/skills/database/postgresql/references/02-functions-datetime.md +54 -0
  62. package/skills/database/postgresql/references/03-functions-aggregate-window.md +142 -0
  63. package/skills/database/postgresql/references/04-functions-jsonb.md +117 -0
  64. package/skills/database/postgresql/references/05-fulltext-search.md +109 -0
  65. package/skills/database/postgresql/references/06-index-types.md +95 -0
  66. package/skills/database/postgresql/references/07-partition-fdw.md +133 -0
  67. package/skills/database/postgresql/references/08-replication-backup.md +215 -0
  68. package/skills/database/redis/LICENSE.txt +202 -0
  69. package/skills/database/redis/SKILL.md +922 -0
  70. package/skills/database/redis/examples/01-cache-usage.md +104 -0
  71. package/skills/database/redis/examples/02-session-storage.md +72 -0
  72. package/skills/database/redis/examples/03-leaderboard.md +63 -0
  73. package/skills/database/redis/examples/04-redis-cluster-setup.md +70 -0
  74. package/skills/database/redis/examples/05-stream-queue.md +65 -0
  75. package/skills/database/redis/references/command-quick-ref.md +180 -0
  76. package/skills/database/redis/references/commands-admin-key.md +413 -0
  77. package/skills/database/redis/references/commands-set-sorted-advanced.md +539 -0
  78. package/skills/database/redis/references/commands-string-hash-list.md +458 -0
  79. package/skills/database/redis/references/memory-optimization.md +150 -0
  80. package/skills/database/redis/references/redis-conf-production.md +139 -0
  81. package/skills/specflow-approval/SKILL.md +100 -181
  82. 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 (file path, section heading, requirement/scenario name, task ID, or for Pass 6/7: actual code file + function/section)
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 §6 方案详细设计): every spec Requirement
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. 变更概览 (Dashboard)
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
- ## 2. 变更摘要 (Executive Summary)
377
+ ### 1.1 背景与痛点 (Background & Pain Points)
367
378
 
368
- ### 2.1 为什么做 (Why)
369
- [2-3 句话提炼 proposal.md 的 Why]
379
+ 用一段话说明当前现状,并用 **Mermaid 现状流程图** 直观呈现,痛点节点**用红色标注**。
370
380
 
371
- ### 2.2 做什么 (What Changes)
372
- [按 新增/修改/移除/重命名 分类,标注 BREAKING]
381
+ **要求**:
373
382
 
374
- ### 2.3 影响面 (Impact)
375
- [整合 proposal.md Impact,AI 评估影响等级]
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
- ## 3. 验收标准 (Acceptance Criteria)
395
+ ### 1.2 做什么与影响面 (What & Impact)
380
396
 
381
- [按 capability 分组,完整列出所有 Requirement + Scenario,每个 Scenario 3 级可测试性标注]
397
+ AI proposal `## What Changes` / `## Impact`(及 explore 相关结论)提炼,替代原「变更摘要」章。
382
398
 
383
- ### 3.1 Capability: <name>
384
- [Delta 操作类型: ADDED / MODIFIED / REMOVED / RENAMED]
399
+ **做什么**(按 新增/修改/移除/重命名;BREAKING 显式标注):
385
400
 
386
- #### Requirement: <name>
387
- <描述>
401
+ | 类别 | 内容 | BREAKING? |
402
+ |------|------|-----------|
403
+ | 新增 | | |
404
+ | 修改 | | |
405
+ | 移除 / 重命名 | | |
388
406
 
389
- | Scenario | WHEN | THEN | 可测试性 | 说明 |
390
- |----------|------|------|---------|------|
391
- | <name> | <条件> | <期望> | ✅ 功能可测试 / ⚠️ 文档可测试 / ❌ 不可测试 | <原因 if ⚠️/❌> |
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
- ## 4. 技术方案评估 (Technical Design Review)
443
+ ## 2. 技术方案评估 (Technical Design Review)
396
444
 
397
- ### 4.1 现状与约束 (Context & Constraints)
445
+ ### 2.1 现状与约束 (Context & Constraints)
398
446
  [整合 design.md Context + AI 补充的隐含约束]
399
447
 
400
- ### 4.2 目标与非目标 (Goals & Non-Goals)
448
+ ### 2.2 目标与非目标 (Goals & Non-Goals)
401
449
  [整合 design.md Goals/Non-Goals]
402
450
 
403
- ### 4.3 决策评审表 (Decision Review)
451
+ ### 2.3 决策评审表 (Decision Review)
404
452
 
405
453
  | 决策 | 选定方案 | 备选方案 | 理由 | 影响评估 | 状态 |
406
454
  |------|---------|---------|------|---------|------|
407
455
  | D1: <name> | <方案> | <A/B> | <理由> | <评估> | Proposed |
408
456
 
409
- ### 4.4 风险与权衡 (Risks & Trade-offs)
457
+ ### 2.4 风险与权衡 (Risks & Trade-offs)
410
458
 
411
459
  | 风险 | 严重等级 | 缓解措施 | 就绪度 |
412
460
  |------|---------|---------|--------|
413
461
  | <name> | 高/中/低 | <措施> | ✅/⚠️/❌ |
414
462
 
415
- ### 4.5 设计质量评估 (Design Quality)
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
- ## 5. 架构整体设计 (Architecture Design)
489
+
490
+ ## 3. 架构整体设计 (Architecture Design)
442
491
 
443
492
  > 本章回答"系统由哪些模块组成、模块间如何依赖与交互、每个模块的职责与边界是什么"。
444
- > 它聚焦**宏观结构**(模块图 + 交互图),与 §6 方案详细设计(模块内部实现)互补:
445
- > 架构讲"模块之间的关系",详细设计讲"模块内部怎么做"。
493
+ > 聚焦**宏观结构**;与 §4 方案详细设计(模块内部实现 / 时序)互补。
494
+ > 质量标杆:`scenario-job-compile` §3 —— **图 + 图要点说明 + 核心组件表**。
446
495
 
447
- ### 5.1 总体架构 (Architecture Overview)
496
+ ### 3.1 总体架构 (Architecture Overview)
448
497
 
449
- 用 Mermaid 图绘制 **系统交互图 或 模块依赖图**,直观呈现变更后的系统结构。
498
+ 用 Mermaid 绘制 **模块依赖/分层图**(推荐),并可附加 **系统交互总览**。
450
499
 
451
- **图型选择**:
500
+ **绘制要求**:
452
501
 
453
- - **模块依赖图 / 分层架构图** — `mermaid flowchart LR`(模块为节点,依赖为边),展示新增/修改模块在整体中的位置
454
- - **系统交互图** — `mermaid sequenceDiagram`(参与者为模块/角色),展示变更涉及的模块间调用时序
502
+ 1. 标注变更模块(`[新增]` / `[修改]`),影响面一眼可见
503
+ 2. 边标注依赖方向或交互消息
504
+ 3. CLI/库 → `src/core/*`、`src/cli/*`;Web → 服务/组件;多仓 → 仓库/服务
505
+ 4. 图与 **§2 决策**一致
455
506
 
456
- **绘制要求**:
507
+ **设计说明 / 图要点**(强制,紧跟每张架构图之后):
457
508
 
458
- 1. 标注**变更涉及的模块**(用颜色/形状/标注 `[新增]` `[修改]` 区分),让评审者一眼看出本次变更影响面
459
- 2. 边标注**依赖方向**(谁依赖谁)或**交互消息**(谁调用谁,传递什么)
460
- 3. 对纯 CLI/库项目,模块 = 源码模块(`src/core/*`、`src/cli/*`);对 Web 项目,模块 = 服务/组件;对多仓,模块 = 仓库/服务
461
- 4. 图应**与 §4 决策一致** —— 图上体现的结构必须能追溯到某个决策
509
+ 用编号列表解释图中**读图关键点**(不是复述节点名),对齐标杆「设计说明(总体架构)」:
462
510
 
463
- **示例(模块依赖图)**:
464
- ```mermaid
465
- flowchart LR
466
- subgraph CLI["CLI (src/cli/)"]
467
- INIT["init 命令 [修改]"]
468
- CHANGE["change 命令"]
469
- STORE["store 命令 [新增]"]
470
- end
471
- subgraph CORE["核心层 (src/core/)"]
472
- CONFIG["project-config [修改]"]
473
- ART["artifact-language [新增]"]
474
- STORECORE["store/ [新增]"]
475
- ROOT["root-selection [新增]"]
476
- end
477
- INIT --> CONFIG
478
- INIT --> ART
479
- STORE --> STORECORE
480
- CHANGE --> ROOT
481
- CONFIG --> ART
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
- participant U as User
488
- participant C as CLI (init)
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
- ### 5.2 核心组件说明 (Core Components)
572
+ **设计要点**:
501
573
 
502
- 用表格定义**每个模块/组件的职责与边界**。这是实现者判断"某逻辑该放哪个模块"的依据,也是评审者验证"模块边界是否清晰"的依据。
574
+ - …
503
575
 
504
- | 组件 | 职责 | 边界(做什么 / 不做什么) | 依赖 | 变更类型 |
505
- |------|------|-------------------------|------|---------|
506
- | `<组件名>` | 一句话职责 | 做什么;不做什么(明确边界) | 依赖的组件 | 新增/修改/不变 |
576
+ ### 4.3 业务场景时序(强制有说明)
507
577
 
508
- **填写要求**:
578
+ 对每个关键业务场景输出同构小节(对齐标杆「业务流程 A/B/C…」):
509
579
 
510
- 1. **列出变更涉及的所有组件**(新增 + 修改),并为每个标注职责、边界、依赖
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
- ### 5.3 架构一致性自检(生成后检查)
590
+ **适用范围**:涉及持久化、状态存储、数据模型的变更。纯 CLI/库项目若无数据库,覆盖配置结构 / 状态文件 / 缓存结构 / YAML schema 等"数据模型"(走下方「非库表路径」)
527
591
 
528
- - [ ] §5.1 图标注了新增/修改模块,评审者一眼看出影响面
529
- - [ ] §5.2 每个组件有"不做什么"的边界,避免逻辑放错模块
530
- - [ ] §5.1 与 §5.2 一一对应(图中有,表中有;表中依赖与图边一致)
531
- - [ ] 组件边界可追溯到 §4 决策
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
- ## 6. 方案详细设计 (Detailed Design)
601
+ #### A. 库表路径(MySQL / PostgreSQL / SQLite 等关系库)——强制结构
537
602
 
538
- > 本章节将方案从"宏观决策"落到"实现者可直接照写的细节"。它回答:具体怎么实现每个部分?
539
- > **只呈现本变更涉及的部分**,不涉及的类型显式标注 "本变更不涉及 X" 而非留空。
540
- > 每个详细设计元素必须**可追溯到 §3 验收标准**(Requirement/Scenario)和 §4 决策(design.md 的 D1-Dn)。
603
+ 按以下小节**顺序**生成。缺任一强制项 → 视为详细设计质量不合格,在确认摘要中报告用户并标记 `[待 refine 澄清]` 或补全后再写入。
541
604
 
542
- ### 6.1 数据结构 / 数据模型变更 (Data Structures)
605
+ ##### 4.4.1 总则与本迭代结构变更结论
543
606
 
544
- **适用范围**:涉及持久化、状态存储、数据模型的变更。纯 CLI/库项目若无数据库,覆盖配置结构 / 状态文件 / 缓存结构 / YAML schema 等"数据模型"。
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
- ```sql
555
- CREATE TABLE artifact_language (
556
- id INTEGER PRIMARY KEY AUTOINCREMENT,
557
- project_id INTEGER NOT NULL REFERENCES project(id),
558
- language TEXT NOT NULL DEFAULT 'en' CHECK (language IN ('en','zh-CN')),
559
- updated_at TEXT NOT NULL,
560
- UNIQUE (project_id)
561
- );
562
- -- 索引 idx_project_language:支撑 "按 project_id 查语言" 高频查询
563
- CREATE INDEX idx_artifact_language_project ON artifact_language(project_id);
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
- 示例(CLI/库项目的配置结构):
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
- **不涉及数据库变更时写**:`不涉及数据库变更(纯逻辑/CLI 变更,无持久化数据模型)`。
712
+ **完全不涉及任何持久化/配置结构时写**:`不涉及数据库变更(纯逻辑/CLI 变更,无持久化数据模型)`。
574
713
 
575
- ### 6.2 接口设计 (Interface Design)
714
+ #### D. 库表 DDL 示例(完整度标杆)
576
715
 
577
- **适用范围**:暴露 API/RPC/CLI 命令/函数间接口的变更。
578
- **项目类型适配**:CLI 项目 → commander 命令参数;库项目 → 导出函数签名;Web 项目 → HTTP API。
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
- | 接口签名 | 方法名/路径/CLI 命令;参数名、类型、必选/可选、校验规则 |
583
- | 入参说明 | 每个参数的语义、合法值、默认值 |
584
- | 出参说明 | 返回类型、成功/失败结构 |
585
- | 错误码定义 | 错误码枚举、含义、HTTP 状态码 / CLI 退出码映射 |
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
- specflow init --artifact-language <language>
590
- 入参: language?: string 可选,默认 'en';合法值 en | zh-CN | zh(zh 别名→zh-CN)
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
- ### 6.3 业务流程 (Business Flow)
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
- ```mermaid
610
- sequenceDiagram
611
- participant U as User
612
- participant I as init CLI
613
- participant FS as Filesystem
614
- participant P as Parity check
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.4 核心算法 / 逻辑说明 (Core Logic)
856
+ ### 4.6 核心算法 / 逻辑说明 (Core Logic)
627
857
 
628
858
  **适用范围**:有非平凡算法或数据处理逻辑的变更。
629
859
  | 元素 | 内容 |
@@ -634,7 +864,7 @@ sequenceDiagram
634
864
 
635
865
  **不涉及非平凡算法时写**:`不涉及非平凡算法(逻辑简单,无复杂数据处理)`。
636
866
 
637
- ### 6.5 配置与运行环境 (Configuration & Runtime)
867
+ ### 4.7 配置与运行环境 (Configuration & Runtime)
638
868
 
639
869
  **适用范围**:新增配置项、环境变量、运行时依赖的变更。
640
870
  | 元素 | 内容 |
@@ -645,48 +875,73 @@ sequenceDiagram
645
875
 
646
876
  **不涉及配置变更时写**:`不涉及配置或运行环境变更`。
647
877
 
648
- ### 6.6 兼容性与迁移 (Compatibility & Migration)
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
- - [ ] 每个详细设计元素可追溯到 §3 验收标准的某个 Requirement/Scenario
662
- - [ ] 每个详细设计选择引用了 §4 的某个决策(不另起炉灶)
663
- - [ ] 涉及数据/接口/流程的,均非留空(写了真实签名/字段/状态)
664
- - [ ] 不涉及的类别显式标注 "不涉及",而非留空
665
- - [ ] 若某个元素无法写出实现级细节,标记 `[待 refine 澄清: <元素>]` — 这是方案未想透的质量信号,应报告给用户
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
- ## 7. 测试策略 (Test Strategy)
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
- > 本章从"§3 验收标准可不可测"升级为"**用分层测试证明方案正确**"。它回答:
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
- ### 7.1 分层测试矩阵
930
+ ### 6.1 分层测试矩阵
676
931
 
677
932
  | 测试层级 | 覆盖对象 | 工具/框架 | 目标(证明什么) | 覆盖的验收标准 |
678
933
  |---------|---------|----------|---------------|---------------|
679
- | 单元测试 | 核心函数/类/模块内部逻辑 | <框架,如 vitest/jest/pytest> | 逻辑正确、边界处理 | 引用 §3 的 Scenario |
680
- | 集成测试 | 模块间交互、接口契约、外部依赖 | <框架> | 模块协作正确、契约一致 | 引用 §3 的 Scenario |
681
- | 验收测试 | spec 的 WHEN/THEN 行为 | <E2E/CLI 测试> | 逐 Scenario 验证用户可见行为 | §3 全部核心 Scenario |
682
- | 回归测试 | 主 specs 基线 + 既有行为 | <框架> | 不破坏已有功能 | 主 specs(§3 基线对照) |
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. 每个测试层级**映射到 §3 验收标准**(引用具体 Scenario 名)—— 这是"测试策略与验收标准闭环"的关键
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
- ### 7.2 测试环境与数据
958
+ ### 6.2 测试环境与数据
704
959
 
705
960
  | 项 | 说明 |
706
961
  |----|------|
@@ -709,9 +964,9 @@ sequenceDiagram
709
964
  | 并行/隔离 | 测试间是否可并行、是否需要隔离(文件锁/独立目录) |
710
965
  | 覆盖率目标 | 核心模块目标覆盖率(如 ≥80%) |
711
966
 
712
- ### 7.3 测试策略自检
967
+ ### 6.3 测试策略自检
713
968
 
714
- - [ ] 每个 §3 验收标准至少被一个测试层级覆盖(闭环)
969
+ - [ ] 每个 §5 验收标准至少被一个测试层级覆盖(闭环)
715
970
  - [ ] 每个测试层级有工具、有可验证目标
716
971
  - [ ] 既有行为有回归测试保护(对应 Pass 7 基线)
717
972
  - [ ] 新增测试与修改既有测试已区分
@@ -720,12 +975,12 @@ sequenceDiagram
720
975
 
721
976
  ---
722
977
 
723
- ## 8. 部署/发布/回滚方案 (Deployment & Release)
978
+ ## 7. 部署/发布/回滚方案 (Deployment & Release)
724
979
 
725
980
  > 本章回答"方案实现后如何上线、如何发布、出问题如何回滚、上线后如何监控"。
726
981
  > **选择性呈现**:对有运行系统的项目必须;对纯库/CLI/文档项目可显式标注"不涉及运行时部署"。
727
982
 
728
- ### 8.1 部署方案 (Deployment)
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
- ### 8.2 发布策略 (Release Strategy)
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
- ### 8.3 回滚方案 (Rollback)
1001
+ ### 7.3 回滚方案 (Rollback)
747
1002
 
748
1003
  | 项 | 方案 |
749
1004
  |----|------|
@@ -752,7 +1007,7 @@ sequenceDiagram
752
1007
  | 回滚的数据一致性 | 数据迁移的回滚(若有)、缓存/队列的清理 |
753
1008
  | 回滚验证 | 回滚后如何确认恢复正常 |
754
1009
 
755
- ### 8.4 监控与可观测性 (Monitoring & Observability)
1010
+ ### 7.4 监控与可观测性 (Monitoring & Observability)
756
1011
 
757
1012
  | 项 | 方案 |
758
1013
  |----|------|
@@ -760,7 +1015,7 @@ sequenceDiagram
760
1015
  | 日志/追踪 | 日志规范、链路追踪 |
761
1016
  | 告警 | 告警阈值与负责人 |
762
1017
 
763
- ### 8.5 部署方案自检
1018
+ ### 7.5 部署方案自检
764
1019
 
765
1020
  - [ ] 部署目标/方式/顺序明确
766
1021
  - [ ] 发布策略与兼容性说明
@@ -771,63 +1026,30 @@ sequenceDiagram
771
1026
 
772
1027
  ---
773
1028
 
774
- ## 9. 闭环性检查 (Closed-Loop Verification)
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
- ### Pass 5: 风险闭环 (Risk Closure)
793
- **Verdict:** PASS / WARNING / FAIL
794
- **证据:** <风险表 + 未识别风险>
1031
+ > **写法要简练**:内部仍跑完 Pass 1–7,但写入本文只保留下表。
1032
+ > - `PASS` / `SKIPPED`:「关键证据」一句话即可(不必贴大表)。
1033
+ > - `WARNING` / `FAIL`:「关键证据」写清缺口(文件/Requirement/Scenario/任务 ID),最多 2–3 条要点。
1034
+ > - **禁止**为每个 Pass 再开长小节、禁止重复贴总评表。
795
1035
 
796
- ### Pass 6: 代码落地性 (Code Grounding)
797
- **Verdict:** PASS / WARNING / FAIL / SKIPPED (greenfield)
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 基线对照 | |
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
- ## 10. 可实施性评估 (Implementability Assessment)
1052
+ ## 9. 可实施性评估 (Implementability Assessment)
831
1053
 
832
1054
  | 评估维度 | 结论 | 说明 |
833
1055
  |---------|------|------|
@@ -843,14 +1065,14 @@ sequenceDiagram
843
1065
 
844
1066
  ---
845
1067
 
846
- ## 11. 审批意见 (Approval Decision)
1068
+ ## 10. 审批意见 (Approval Decision)
847
1069
 
848
- ### 7.1 AI 预审建议
1070
+ ### 10.1 AI 预审建议
849
1071
 
850
1072
  **建议:** 建议批准 / 有条件批准 / 退回 refine / 拒绝
851
1073
  **理由:** <1-2 句话,引用具体 verdict>
852
1074
 
853
- ### 7.2 人工审批签字栏
1075
+ ### 10.2 人工审批签字栏
854
1076
 
855
1077
  | 角色 | 姓名 | 审批结论 | 日期 | 意见 |
856
1078
  |------|------|---------|------|------|
@@ -866,47 +1088,104 @@ sequenceDiagram
866
1088
 
867
1089
  | 章节 | 数据来源 | 处理方式 |
868
1090
  |------|---------|---------|
869
- | 变更概览 | .specflow.yaml + specs/ + tasks.md + design.md + 项目代码 + specs | 精确统计 |
870
- | 变更摘要 | proposal.md (+ explore.md) | AI 提炼 |
871
- | 验收标准 | specs/**/*.md | AI 整合 + 3 级可测试性评估 |
872
- | 技术方案评估 | design.md | AI arc42 重组 + 决策表 + 风险表 + 设计质量评估 |
873
- | 架构整体设计 | design.md 决策 + 项目代码(锚点)+ specs 契约 | AI 绘制 Mermaid 模块依赖/系统交互图 + 组件职责边界表;每组件追溯到 §4 |
874
- | 方案详细设计 | design.md 决策 + specs 契约 + 项目代码(锚点) | AI 落地为数据/接口/流程/算法/配置/兼容性;每元素追溯到 §3+§4 |
875
- | 测试策略 | §3 验收标准 + 项目测试栈 | AI 分层测试矩阵(单元/集成/验收/回归/性能/安全),每层映射到验收标准 |
876
- | 部署/发布/回滚 | §4 决策 + 项目运行环境 | AI 部署方式/发布策略/回滚/监控方案;纯库项目标注"不涉及运行时部署" |
877
- | 闭环性检查 Pass 1-5 | 四件套交叉验证 | AI 推理 |
878
- | 闭环性检查 Pass 6 | 项目锚点文件(只读文件本身) | AI 代码结构分析 |
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. **Dashboard counts are precise**: read every delta spec file, count headers. Read anchor
887
- files, count exists/missing/new. Read `specflow/specs/`, count baseline specs. If a count
888
- cannot be determined, state "无法精确统计" rather than guess.
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**: include every Requirement and Scenario from every
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**: every anchor file in the evidence table must be
894
- a file you actually read. "Structure compatibility" must reference concrete findings
895
- (function name, module pattern, export shape). "I didn't read the file" is not acceptable —
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**: every row must reference the actual main
899
- spec file and requirement name you compared against. If baseline is absent, use the
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 markers, IDs,
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
+