pdd-skills 3.0.5 → 3.1.0

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 (40) hide show
  1. package/README.md +144 -26
  2. package/config/bug-patterns.yaml +293 -0
  3. package/config/gate-config.yaml +73 -0
  4. package/config/prd-rules.yaml +112 -0
  5. package/docs/i18n-spec.md +120 -0
  6. package/docs/lessons.md +201 -0
  7. package/docs/plans/00-beginner-guide.md +3164 -0
  8. package/docs/tasks.md +91 -0
  9. package/docs/token-checklist.md +72 -0
  10. package/docs/vm-tasks.md +497 -0
  11. package/package.json +2 -2
  12. package/scaffolds/python-fullstack/backend/app/api/v1/departments.py +90 -0
  13. package/scaffolds/python-fullstack/backend/app/api/v1/dict_items.py +72 -0
  14. package/scaffolds/python-fullstack/backend/app/api/v1/router.py +3 -1
  15. package/scaffolds/python-fullstack/backend/app/models/__init__.py +5 -1
  16. package/scaffolds/python-fullstack/backend/app/models/dict_item.py +45 -0
  17. package/scaffolds/python-fullstack/backend/app/schemas/common.py +38 -1
  18. package/scaffolds/python-fullstack/backend/app/schemas/department.py +32 -0
  19. package/scaffolds/python-fullstack/backend/app/schemas/dict_item.py +61 -0
  20. package/scaffolds/python-fullstack/backend/scripts/seed_base_data.py +173 -0
  21. package/scaffolds/python-fullstack/frontend/src/api/departments.ts +32 -0
  22. package/scaffolds/python-fullstack/frontend/src/api/dict_items.ts +31 -0
  23. package/scaffolds/python-fullstack/frontend/src/main.ts +3 -0
  24. package/scaffolds/python-fullstack/frontend/src/styles/global-reset.css +71 -0
  25. package/scaffolds/python-fullstack/frontend/src/utils/safeAlert.ts +36 -0
  26. package/scaffolds/ruoyi/README.md +32 -0
  27. package/scaffolds/ruoyi/sql/seed_base_data.sql +90 -0
  28. package/scripts/linter/gate-engine.js +292 -0
  29. package/scripts/linter/run-linters.js +10 -1
  30. package/scripts/openapi-contract-sync.js +270 -0
  31. package/skills/core/pdd-ba/SKILL.md +8 -4
  32. package/skills/core/pdd-code-reviewer/SKILL.md +108 -2
  33. package/skills/core/pdd-extract-features/SKILL.md +40 -10
  34. package/skills/core/pdd-generate-spec/SKILL.md +142 -4
  35. package/skills/core/pdd-implement-feature/SKILL.md +82 -10
  36. package/skills/core/pdd-main/SKILL.md +73 -1
  37. package/skills/core/pdd-verify-feature/SKILL.md +60 -0
  38. package/skills/expert/expert-ruoyi/SKILL.md +75 -0
  39. package/skills/pr/pdd-template-engine/SKILL.md +80 -0
  40. package/templates/prd-template.prdx +149 -10
package/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # PDD-Skills v3.0
2
2
 
3
- [![Version](https://img.shields.io/badge/version-3.0.1-blue.svg null)](https://github.com/pdd-skills/pdd-skills)
3
+ [![Version](https://img.shields.io/badge/version-3.1.0-blue.svg null)](https://github.com/pdd-skills/pdd-skills)
4
4
  [![Node](https://img.shields.io/badge/node-%3E%3D18.0.0-green.svg null)](https://nodejs.org/)
5
5
  [![License](https://img.shields.io/badge/license-MIT-orange.svg null)](LICENSE)
6
- [![Tasks](https://img.shields.io/badge/tasks-153%2F153-brightgreen.svg null)](docs/tasks.md)
7
- [![Milestones](https://img.shields.io/badge/milestones-29%2F29-success.svg null)](docs/tasks.md)
6
+ [![Patterns](https://img.shields.io/badge/bug_patterns-14-purple.svg null)](config/bug-patterns.yaml)
7
+ [![Gate](https://img.shields.io/badge/gate_rules-30-critical.svg null)](config/prd-rules.yaml)
8
8
 
9
9
  > **PRD 驱动的 AI 原生软件开发工作流框架**
10
10
  >
11
- > 从需求文档到代码交付的全链路自动化平台 — **7 大 Phase**、**29 个里程碑**、**153 项任务**、**100% 完成** 🎉
11
+ > 从需求文档到代码交付的全链路自动化平台 — **7 大 Phase**、**双脚手架**、**14 Bug 模式**、**30 条 PRD 规则**、**4 级质量门控**
12
12
 
13
13
  ***
14
14
 
@@ -27,6 +27,7 @@
27
27
  - [Phase 6: 生态建设](#phase-6-生态建设)
28
28
  - [📊 Phase 7: PDD Visual Manager](#-phase-7-pdd-visual-manager)
29
29
  - [技能系统](#技能系统)
30
+ - [配置中心](#配置中心)
30
31
  - [API 层](#api-层)
31
32
  - [MCP 协议集成](#mcp-协议集成)
32
33
  - [SDK 使用指南](#sdk-使用指南)
@@ -229,18 +230,16 @@ scaffolds/python-fullstack/
229
230
 
230
231
  | 指标 | 数值 |
231
232
  | ----------- | --------------------------------------------- |
232
- | **版本** | v3.0.2 |
233
- | **总任务数** | 153 (**100% 完成**) |
234
- | **里程碑数** | 29 (**100% 达成**) |
233
+ | **版本** | v3.1.0 |
235
234
  | **核心技能** | 11 个(全双语 🇨🇳🇺🇸) |
236
- | **专家技能** | 2 个(安全 + 性能) |
237
- | **代码文件** | \~80 `lib/*.js` 模块(含 Phase 7 新增 38 个) |
235
+ | **专家技能** | 4 个(安全 + 性能 + 若依 + Activiti) |
236
+ | **PR技能** | 5 个(模板引擎 + 多轮审查 + PR创建/审查/合并) |
237
+ | **Bug模式库** | 14 个(7通用 + 7若依专用),集中式管理 `config/bug-patterns.yaml` |
238
+ | **PRD规则** | 30 条(6大类),集中式管理 `config/prd-rules.yaml` |
239
+ | **质量门控** | 4级(Blocker/Critical/Warning/Info)+ 0-100评分 |
240
+ | **脚手架模板** | 2 个(Python Fullstack + 若依RuoYi) |
238
241
  | **协议支持** | RESTful + MCP + gRPC + SSE |
239
242
  | **SDK 语言** | JavaScript + Python |
240
- | **示例插件** | 3 个(hello-world / code-stats / custom-linter) |
241
- | **社区文档** | 5 套(\~10,700 行) |
242
- | **VM 新增代码** | \~6000 行(Phase 7) |
243
- | **脚手架模板** | 1 个(python-fullstack 全栈模板) |
244
243
 
245
244
  ***
246
245
 
@@ -445,6 +444,8 @@ pdd config --get key # 读取配置项
445
444
  | ---------------------- | --------------------------------------- | -------------------------------------- |
446
445
  | **expert-security** | SQL注入 / XSS / CSRF / 命令注入 / 路径遍历 / SSRF | OWASP Top 10 2021 完整覆盖,8 条安全铁律 |
447
446
  | **expert-performance** | CPU / 内存 / I/O / 网络 / 锁竞争诊断 | HikariCP / Redis多级缓存 / G1 GC调优 / P99指标 |
447
+ | **expert-ruoyi** | 若依框架全流程开发 / 代码生成 / 权限配置 / 菜单管理 | 7个若依Bug模式(PATTERN-R001~R007) + Spec模板参考 |
448
+ | **expert-activiti** | Activiti 7工作流引擎 / BPMN 2.0 / 流程部署管理 | 流程设计规范 + BPMN校验规则 |
448
449
 
449
450
  ### Phase 4: 平台化建设
450
451
 
@@ -1014,9 +1015,9 @@ skills/
1014
1015
  │ ├── pdd-ba/ # 业务分析
1015
1016
  │ ├── pdd-extract-features/
1016
1017
  │ ├── pdd-generate-spec/
1017
- │ ├── pdd-implement-feature/
1018
- │ ├── pdd-verify-feature/
1019
- │ ├── pdd-code-reviewer/
1018
+ │ ├── pdd-implement-feature/ # 含上下文注入 + 微验证
1019
+ │ ├── pdd-verify-feature/ # 含契约一致性验证
1020
+ │ ├── pdd-code-reviewer/ # 含Bug模式库匹配 + UX一致性
1020
1021
  │ ├── pdd-doc-change/
1021
1022
  │ ├── pdd-doc-gardener/
1022
1023
  │ ├── pdd-entropy-reduction/
@@ -1024,7 +1025,16 @@ skills/
1024
1025
 
1025
1026
  ├── expert/ # 专家技能 (按需加载)
1026
1027
  │ ├── expert-security/ # 安全审计专家
1027
- └── expert-performance/ # 性能优化专家
1028
+ ├── expert-performance/ # 性能优化专家
1029
+ │ ├── expert-ruoyi/ # 若依框架专家 (含Bug模式库R001~R007)
1030
+ │ └── expert-activiti/ # Activiti工作流专家
1031
+
1032
+ ├── pr/ # PR与交付技能
1033
+ │ ├── pdd-template-engine/ # PRD感知动态模板引擎
1034
+ │ ├── pdd-multi-review/ # 三轮代码审查
1035
+ │ ├── pdd-pr-create/ # PR创建
1036
+ │ ├── pdd-pr-review/ # PR审查
1037
+ │ └── pdd-pr-merge/ # PR合并
1028
1038
 
1029
1039
  ├── openspec/ # OpenSpec 协作技能
1030
1040
  │ ├── openspec-explore/
@@ -1040,6 +1050,99 @@ skills/
1040
1050
 
1041
1051
  ***
1042
1052
 
1053
+ ## 配置中心
1054
+
1055
+ > **Single Source of Truth 原则**:所有配置集中管理,技能和脚本通过引用获取,避免散落和不一致。
1056
+
1057
+ ### 配置文件一览
1058
+
1059
+ | 配置文件 | 用途 | 消费方 |
1060
+ |---------|------|--------|
1061
+ | `config/bug-patterns.yaml` | Bug模式库(14个模式) | pdd-code-reviewer, pdd-verify-feature, pdd-implement-feature, pdd-template-engine, expert-ruoyi |
1062
+ | `config/prd-rules.yaml` | PRD检测规则(30条,6大类) | pdd-linter, run-linters.js |
1063
+ | `config/gate-config.yaml` | 质量门控配置(4级阻断+评分权重) | gate-engine.js |
1064
+
1065
+ ### Bug模式库架构
1066
+
1067
+ ```
1068
+ config/bug-patterns.yaml ← 唯一真相源
1069
+ ├── categories.general # 通用模式 PATTERN-001~007
1070
+ │ ├── PATTERN-001 datetime字段类型陷阱
1071
+ │ ├── PATTERN-002 静态路由注册顺序错误
1072
+ │ ├── PATTERN-003 枚举硬编码/编码不一致
1073
+ │ ├── PATTERN-004 alert()未用safeAlert()包装
1074
+ │ ├── PATTERN-005 my-tasks查询条件不完整
1075
+ │ ├── PATTERN-006 Options接口路由顺序(同002)
1076
+ │ └── PATTERN-007 编号生成未检查已存在记录
1077
+ └── categories.ruoyi # 若依专用 PATTERN-R001~R007
1078
+ ├── PATTERN-R001 权限注解缺失
1079
+ ├── PATTERN-R002 菜单配置不完整
1080
+ ├── PATTERN-R003 数据权限未配置
1081
+ ├── PATTERN-R004 Redis缓存未清除
1082
+ ├── PATTERN-R005 参数校验缺失
1083
+ ├── PATTERN-R006 XSS防护缺失
1084
+ └── PATTERN-R007 操作日志缺失
1085
+ ```
1086
+
1087
+ ### PRD检测规则架构
1088
+
1089
+ ```
1090
+ config/prd-rules.yaml ← 唯一真相源 (30条规则)
1091
+ ├── structure (7条) # PRD结构完整性
1092
+ ├── content (8条) # 内容质量
1093
+ ├── uiux (6条) # UI/UX规范
1094
+ │ ├── uiux-form-mapping-exists # 表单控件映射表 (BLOCKER)
1095
+ │ ├── uiux-no-uuid-input # 禁止UUID输入 (BLOCKER)
1096
+ │ ├── uiux-options-api-listed # Options API声明 (BLOCKER)
1097
+ │ ├── uiux-page-list # 页面清单
1098
+ │ ├── uiux-seed-data-declared # 种子数据声明
1099
+ │ └── uiux-wireframe-exists # 线框图
1100
+ ├── data_model (4条) # 数据模型规范
1101
+ │ ├── dm-enum-convention # 枚举编码约定 (BLOCKER)
1102
+ │ ├── dm-permission-matrix # 权限矩阵 (BLOCKER)
1103
+ │ ├── dm-type-explicit # 类型显式声明
1104
+ │ └── dm-audit-fields # 审计字段
1105
+ └── api_design (3条) # API设计规范
1106
+ ├── api-options-endpoint # Options端点 (BLOCKER)
1107
+ ├── api-param-location # 参数位置
1108
+ └── api-error-format # 错误格式
1109
+ ```
1110
+
1111
+ ### 质量门控流程
1112
+
1113
+ ```
1114
+ PRD文档 → prd-linter (30条规则) → gate-engine (4级门控) → 评分卡
1115
+
1116
+ ┌─────────────┼─────────────┐
1117
+ ▼ ▼ ▼
1118
+ BLOCKER CRITICAL WARNING/INFO
1119
+ (阻断) (必须修复) (建议修复)
1120
+ │ │
1121
+ ▼ ▼
1122
+ Score = 0 Score -= 15/5/1
1123
+ │ │
1124
+ ▼ ▼
1125
+ Grade: F Grade: A~D
1126
+ │ │
1127
+ ▼ ▼
1128
+ ❌ FAIL ✅ PASS
1129
+ ```
1130
+
1131
+ ### 更新流程
1132
+
1133
+ ```bash
1134
+ # 新增Bug模式 → 只需编辑一个文件
1135
+ vim config/bug-patterns.yaml # 各skill自动通过引用获取
1136
+
1137
+ # 修改BLOCKER规则 → 只需编辑一个文件
1138
+ vim config/gate-config.yaml # gate-engine.js自动读取
1139
+
1140
+ # 修改PRD检测规则 → 只需编辑一个文件
1141
+ vim config/prd-rules.yaml # run-linters.js自动读取
1142
+ ```
1143
+
1144
+ ***
1145
+
1043
1146
  ## API 层
1044
1147
 
1045
1148
  ### 启动 API 服务器
@@ -1511,11 +1614,16 @@ pdd-skills-v3/
1511
1614
  │ └── openspec/ # 10 个 OpenSpec 技能
1512
1615
 
1513
1616
  ├── scripts/ # 工具脚本
1617
+ │ ├── linter/ # PRD Linter 工具链
1618
+ │ │ ├── prd-linter.js # PRD Linter 引擎
1619
+ │ │ ├── prd-rules.yaml # (符号链接→config/)
1620
+ │ │ ├── gate-engine.js # 4级门控引擎 (读取config/gate-config.yaml)
1621
+ │ │ ├── report-generator.js# 报告生成器
1622
+ │ │ └── run-linters.js # Linter运行器 (集成Gate Engine)
1623
+ │ ├── openapi-contract-sync.js # OpenAPI契约同步工具
1514
1624
  │ ├── skill-linter.py # Skill 文件检查器
1515
- │ ├── skill-rules.yaml # Linter 规则配置
1516
1625
  │ ├── i18n-checker.js # 双语合规检查
1517
- ├── token-analyzer.js # Token 分析
1518
- │ └── ...
1626
+ └── token-analyzer.js # Token 分析
1519
1627
 
1520
1628
  ├── docs/ # 社区文档 (~10,700 行)
1521
1629
  │ ├── user-guide/
@@ -1526,9 +1634,18 @@ pdd-skills-v3/
1526
1634
  │ └── tasks.md # 任务跟踪 (153/100%)
1527
1635
 
1528
1636
  ├── templates/ # 项目模板
1529
- ├── config/ # 配置文件
1637
+ ├── config/ # 配置中心 (Single Source of Truth)
1638
+ │ ├── bug-patterns.yaml # Bug模式库 (14个模式, 唯一真相源)
1639
+ │ ├── prd-rules.yaml # PRD检测规则 (30条, 6大类)
1640
+ │ ├── gate-config.yaml # 质量门控配置 (4级阻断+评分权重)
1641
+ │ ├── bpmn-rules.yaml # BPMN校验规则
1642
+ │ ├── checkstyle.xml # Java Checkstyle配置
1643
+ │ ├── eslint.config.js # ESLint配置
1644
+ │ ├── pmd.xml # PMD配置
1645
+ │ ├── ruff.toml # Python Ruff配置
1646
+ │ └── sqlfluff.cfg # SQL SQLFluff配置
1530
1647
  ├── hooks/ # Hook 配置
1531
- └── package.json # v3.0.1
1648
+ └── package.json # v3.1.0
1532
1649
  ```
1533
1650
 
1534
1651
  ***
@@ -1613,9 +1730,10 @@ CLI 参数 > 环境变量 > .pddrc.local > .pddrc > defaults
1613
1730
 
1614
1731
  | 版本 | 日期 | 重要变更 |
1615
1732
  | ---------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
1733
+ | **v3.1.0** | 2026-04-15 | **智能能力+生态集成**: Bug模式库集中化(14模式), PRD Linter扩展(30规则6大类), 4级门控引擎(Blocker/Critical/Warning/Info), OpenAPI契约同步, PRD感知动态模板, MVP分层交付策略, 上下文注入+微验证, expert-ruoyi+expert-activiti专家技能, 若依RuoYi脚手架支持, 种子数据分层设计 |
1616
1734
  | **v3.0.2** | 2026-04-12 | **脚手架系统发布**: python-fullstack 全栈模板(FastAPI+Vue3), 数据权限引擎, OAuth2六平台认证, 工作流状态机引擎, 响应式前端, 4份架构设计文档, Docker一键部署, CI流水线 |
1617
- | **v3.0.1** | 2026-04-07 | **PDD Visual Manager 发布**: Web Dashboard + Terminal TUI 双形态可视化监控, 11个REST API端点, SSE实时推送, Canvas图表引擎, ANSI TUI组件库 (59/59 任务 100%, 4/4 里程碑 100%) |
1618
- | **v3.0.0** | 2026-04-05 | **正式发布版**: 6大Phase全部完成 + 插件系统 + OpenClaw + gRPC + Python SDK + 暂缓清零 (94/94 任务 100%) |
1735
+ | **v3.0.1** | 2026-04-07 | **PDD Visual Manager 发布**: Web Dashboard + Terminal TUI 双形态可视化监控, 11个REST API端点, SSE实时推送, Canvas图表引擎, ANSI TUI组件库 |
1736
+ | **v3.0.0** | 2026-04-05 | **正式发布版**: 6大Phase全部完成 + 插件系统 + OpenClaw + gRPC + Python SDK + 暂缓清零 |
1619
1737
  | v2.x | 2026-03 | 内部迭代版本: MCP/SDK/缓存/Token/质量/迭代 |
1620
1738
  | v1.x | 2025-12 | 初始版本: 基础设施 + 核心技能 + Linter |
1621
1739
 
@@ -1636,9 +1754,9 @@ CLI 参数 > 环境变量 > .pddrc.local > .pddrc > defaults
1636
1754
  ***
1637
1755
 
1638
1756
  <p align="center">
1639
- <b>PDD-Skills v3.0 — 让 AI 成为你的全职结对编程伙伴 🤖</b>
1757
+ <b>PDD-Skills v3.1 — 让 AI 成为你的全职结对编程伙伴 🤖</b>
1640
1758
  </p>
1641
1759
 
1642
1760
  <p align="center">
1643
- <sub>153/153 Tasks ✅ · 29/29 Milestones ✅ · 100% Complete 🎉</sub>
1761
+ <sub>14 Bug Patterns ✅ · 30 PRD Rules ✅ · 4-Level Gate ✅ · Dual Scaffold ✅</sub>
1644
1762
  </p>
@@ -0,0 +1,293 @@
1
+ # Bug Pattern Library / Bug模式库
2
+ #
3
+ # 唯一真相源 (Single Source of Truth)
4
+ # 所有SKILL.md和脚本必须引用此文件,不得内联副本
5
+ #
6
+ # 更新流程:
7
+ # 1. 在此文件中添加/修改模式
8
+ # 2. 运行 scripts/linter/validate-patterns.js 验证格式
9
+ # 3. 各skill自动通过引用获取最新模式
10
+ #
11
+ # 模式ID命名规范:
12
+ # - 通用模式: PATTERN-NNN (如 PATTERN-001)
13
+ # - 若依专用: PATTERN-RNNN (如 PATTERN-R001)
14
+ # - 未来脚手架: PATTERN-JNNN (Java/Spring), PATTERN-GNNN (Go) 等
15
+
16
+ meta:
17
+ version: "1.0.0"
18
+ last_updated: "2026-04-15"
19
+ source: "资产评估处置管理系统首次项目实践复盘"
20
+ maintainers: ["pdd-skills-v3"]
21
+
22
+ categories:
23
+ general:
24
+ name: "通用模式 (Python Fullstack)"
25
+ description: "适用于所有Python Fullstack项目的常见Bug模式"
26
+ patterns:
27
+ - id: PATTERN-001
28
+ name: "datetime字段类型陷阱"
29
+ name_en: "datetime field type trap"
30
+ description: "datetime字段必须用field_validator或field_serializer处理,不能声明为str"
31
+ trigger: "Pydantic Schema包含datetime字段"
32
+ prevention: "使用 @field_serializer 或 model_config=json_encoders"
33
+ severity: critical
34
+ detection:
35
+ - "Schema中 created_at/updated_at 字段类型为 str"
36
+ - "datetime字段缺少序列化配置"
37
+ fix_example: |
38
+ # ❌ 错误
39
+ created_at: str
40
+ # ✅ 正确
41
+ created_at: datetime
42
+ # 并在Schema中添加:
43
+ @field_serializer('created_at')
44
+ def serialize_datetime(self, dt): return dt.isoformat() if dt else None
45
+ related_rules: ["dm-type-explicit"]
46
+ tags: ["schema", "datetime", "serialization"]
47
+
48
+ - id: PATTERN-002
49
+ name: "静态路由注册顺序错误"
50
+ name_en: "Static route registration order error"
51
+ description: "静态路由(/options, /me等)必须在动态路由(/{id})之前注册,否则被动态路由拦截"
52
+ trigger: "FastAPI路由文件同时包含/options和/{id}"
53
+ prevention: "路由注册顺序: /me → / → /options → /{id}"
54
+ severity: critical
55
+ detection:
56
+ - "router.py中 /options 定义在 /{id} 之后"
57
+ - "访问/options返回404或数据异常"
58
+ fix_example: |
59
+ # ❌ 错误
60
+ @router.get("/{id}")
61
+ @router.get("/options")
62
+ # ✅ 正确
63
+ @router.get("/options")
64
+ @router.get("/{id}")
65
+ related_rules: ["api-options-endpoint", "uiux-options-api-listed"]
66
+ tags: ["routing", "fastapi", "options-api"]
67
+
68
+ - id: PATTERN-003
69
+ name: "枚举硬编码/编码不一致"
70
+ name_en: "Enum hardcoding / inconsistent coding"
71
+ description: "枚举值散落硬编码在前端代码中,且编码风格不统一(大小写混用/中英混用)"
72
+ trigger: "定义Enum或状态字段"
73
+ prevention: "编码值统一用snake_case小写英文,显示名用中文映射,通过字典表/Options API管理"
74
+ severity: warning
75
+ detection:
76
+ - "前端 if status === '1' 散落各处"
77
+ - "枚举值大小写不统一(ACTIVE vs active vs Active)"
78
+ fix_example: |
79
+ # ❌ 错误
80
+ if (row.status === '1') { ... }
81
+ # ✅ 正确
82
+ const STATUS_MAP = { draft: '草稿', pending: '待审批', approved: '已通过' }
83
+ related_rules: ["dm-enum-convention"]
84
+ tags: ["enum", "coding-convention", "frontend"]
85
+
86
+ - id: PATTERN-004
87
+ name: "alert()未用safeAlert()包装"
88
+ name_en: "alert() not wrapped with safeAlert()"
89
+ description: "前端使用原生alert()可能导致非string参数报错"
90
+ trigger: "前端代码使用alert()"
91
+ prevention: "safeAlert确保参数为string类型"
92
+ severity: warning
93
+ detection:
94
+ - "Vue组件中使用 alert(...) 而非 safeAlert(...)"
95
+ fix_example: |
96
+ # ❌ 错误
97
+ alert(res.message)
98
+ # ✅ 正确
99
+ safeAlert(res.message)
100
+ related_rules: []
101
+ tags: ["frontend", "vue", "safety"]
102
+
103
+ - id: PATTERN-005
104
+ name: "my-tasks查询条件不完整"
105
+ name_en: "Incomplete my-tasks query conditions"
106
+ description: "我的任务查询必须同时匹配evaluator_id和created_by,否则遗漏任务"
107
+ trigger: "实现'我的任务'列表接口"
108
+ prevention: "OR(evaluator_id==user_id, created_by==user_id)"
109
+ severity: critical
110
+ detection:
111
+ - "我的任务接口只查 evaluator_id 或只查 created_by"
112
+ fix_example: |
113
+ # ❌ 错误
114
+ query = query.filter(Evaluation.evaluator_id == user_id)
115
+ # ✅ 正确
116
+ query = query.filter(
117
+ or_(Evaluation.evaluator_id == user_id, Evaluation.created_by == user_id)
118
+ )
119
+ related_rules: []
120
+ tags: ["query", "business-logic"]
121
+
122
+ - id: PATTERN-006
123
+ name: "Options接口路由顺序(同PATTERN-002)"
124
+ name_en: "Options API route order (same as PATTERN-002)"
125
+ description: "PATTERN-002的特化版本,专指/options端点的路由注册顺序问题"
126
+ trigger: "实现下拉选项API"
127
+ prevention: "参见PATTERN-002"
128
+ severity: critical
129
+ detection:
130
+ - "同PATTERN-002"
131
+ fix_example: "参见PATTERN-002"
132
+ related_rules: ["api-options-endpoint"]
133
+ tags: ["routing", "options-api"]
134
+ alias_of: "PATTERN-002"
135
+
136
+ - id: PATTERN-007
137
+ name: "编号生成未检查已存在记录"
138
+ name_en: "ID generation without checking existing records"
139
+ description: "自动编号生成时未检查数据库中已存在的最大编号,可能导致编号冲突"
140
+ trigger: "实现task_no等自动编号"
141
+ prevention: "SELECT MAX(task_no) WHERE task_no LIKE prefix%"
142
+ severity: critical
143
+ detection:
144
+ - "编号生成逻辑直接使用计数而非MAX查询"
145
+ - "并发场景下出现重复编号"
146
+ fix_example: |
147
+ # ❌ 错误
148
+ new_no = f"TASK-{count + 1:04d}"
149
+ # ✅ 正确
150
+ max_no = db.query(func.max(Task.task_no)).filter(
151
+ Task.task_no.like(f"TASK-{prefix}%")
152
+ ).scalar()
153
+ next_seq = int(max_no.split("-")[-1]) + 1 if max_no else 1
154
+ related_rules: []
155
+ tags: ["business-logic", "concurrency"]
156
+
157
+ ruoyi:
158
+ name: "若依专用模式 (RuoYi Framework)"
159
+ description: "若依框架特有的常见Bug模式"
160
+ patterns:
161
+ - id: PATTERN-R001
162
+ name: "权限注解缺失"
163
+ name_en: "Missing permission annotation"
164
+ description: "Controller方法缺少@PreAuthorize注解,导致接口无权限控制"
165
+ trigger: "新增Controller方法"
166
+ prevention: "每个接口方法必须配置@PreAuthorize注解"
167
+ severity: critical
168
+ detection:
169
+ - "Controller方法无@PreAuthorize注解"
170
+ - "接口可被任意角色访问"
171
+ fix_example: |
172
+ # ❌ 错误
173
+ @GetMapping("/list")
174
+ public TableDataInfo list(Evaluation evaluation) { ... }
175
+ # ✅ 正确
176
+ @PreAuthorize("@ss.hasPermi('eval:evaluation:list')")
177
+ @GetMapping("/list")
178
+ public TableDataInfo list(Evaluation evaluation) { ... }
179
+ related_rules: ["dm-permission-matrix"]
180
+ tags: ["ruoyi", "permission", "security"]
181
+
182
+ - id: PATTERN-R002
183
+ name: "菜单配置不完整"
184
+ name_en: "Incomplete menu configuration"
185
+ description: "新增页面未配置sys_menu记录,导致页面404或按钮不显示"
186
+ trigger: "新增功能页面"
187
+ prevention: "所有页面(含隐藏页)必须配置sys_menu INSERT语句"
188
+ severity: critical
189
+ detection:
190
+ - "新页面通过菜单访问返回404"
191
+ - "按钮权限不显示"
192
+ fix_example: |
193
+ -- 必须提供的菜单SQL
194
+ INSERT INTO sys_menu VALUES(2000, '评估管理', 0, 1, 'evaluation', NULL, '', 1, 0, 'M', '0', '0', '', 'eval', 'admin', sysdate(), '', NULL, '');
195
+ related_rules: []
196
+ tags: ["ruoyi", "menu", "configuration"]
197
+
198
+ - id: PATTERN-R003
199
+ name: "数据权限未配置"
200
+ name_en: "Data scope not configured"
201
+ description: "Service方法缺少@DataScope注解,用户可看到跨部门数据"
202
+ trigger: "实现列表查询接口"
203
+ prevention: "Service方法添加@DataScope注解"
204
+ severity: critical
205
+ detection:
206
+ - "普通用户能看到其他部门的数据"
207
+ - "Service查询方法无@DataScope"
208
+ fix_example: |
209
+ # ❌ 错误
210
+ public List<Evaluation> selectEvaluationList(Evaluation evaluation) { ... }
211
+ # ✅ 正确
212
+ @DataScope(deptAlias = "d")
213
+ public List<Evaluation> selectEvaluationList(Evaluation evaluation) { ... }
214
+ related_rules: ["dm-permission-matrix"]
215
+ tags: ["ruoyi", "data-scope", "security"]
216
+
217
+ - id: PATTERN-R004
218
+ name: "Redis缓存未清除"
219
+ name_en: "Redis cache not cleared"
220
+ description: "修改权限/菜单后未清除Redis缓存,导致修改不生效"
221
+ trigger: "修改权限或菜单配置"
222
+ prevention: "修改权限/菜单后必须清除Redis缓存"
223
+ severity: warning
224
+ detection:
225
+ - "权限修改后用户仍可访问旧权限的接口"
226
+ - "菜单修改后页面不更新"
227
+ fix_example: |
228
+ // 修改权限后执行
229
+ redisCache.deleteObject(Constants.LOGIN_TOKEN_KEY + userId);
230
+ related_rules: []
231
+ tags: ["ruoyi", "redis", "cache"]
232
+
233
+ - id: PATTERN-R005
234
+ name: "参数校验缺失"
235
+ name_en: "Missing parameter validation"
236
+ description: "@RequestBody参数未添加@Validated注解,校验注解不生效"
237
+ trigger: "新增POST/PUT接口"
238
+ prevention: "所有@RequestBody参数添加@Validated"
239
+ severity: warning
240
+ detection:
241
+ - "提交空字段无校验提示"
242
+ - "@RequestBody参数缺少@Validated"
243
+ fix_example: |
244
+ # ❌ 错误
245
+ @PostMapping
246
+ public AjaxResult add(@RequestBody Evaluation evaluation) { ... }
247
+ # ✅ 正确
248
+ @PostMapping
249
+ public AjaxResult add(@Validated @RequestBody Evaluation evaluation) { ... }
250
+ related_rules: []
251
+ tags: ["ruoyi", "validation"]
252
+
253
+ - id: PATTERN-R006
254
+ name: "XSS防护缺失"
255
+ name_en: "Missing XSS protection"
256
+ description: "文本字段未添加@Xss注解,存在XSS攻击风险"
257
+ trigger: "新增文本输入字段"
258
+ prevention: "所有String类型文本字段添加@Xss"
259
+ severity: warning
260
+ detection:
261
+ - "文本字段可输入<script>标签"
262
+ - "Bo实体类String字段无@Xss注解"
263
+ fix_example: |
264
+ # ❌ 错误
265
+ @NotBlank(message = "名称不能为空")
266
+ private String evalName;
267
+ # ✅ 正确
268
+ @Xss
269
+ @NotBlank(message = "名称不能为空")
270
+ private String evalName;
271
+ related_rules: []
272
+ tags: ["ruoyi", "xss", "security"]
273
+
274
+ - id: PATTERN-R007
275
+ name: "操作日志缺失"
276
+ name_en: "Missing operation log"
277
+ description: "增删改操作未添加@Log注解,无法追溯操作记录"
278
+ trigger: "新增CUD操作接口"
279
+ prevention: "所有CUD操作添加@Log注解"
280
+ severity: info
281
+ detection:
282
+ - "操作后sys_oper_log表中无记录"
283
+ - "CUD方法无@Log注解"
284
+ fix_example: |
285
+ # ❌ 错误
286
+ @DeleteMapping("/{ids}")
287
+ public AjaxResult remove(@PathVariable Long[] ids) { ... }
288
+ # ✅ 正确
289
+ @Log(title = "评估管理", businessType = BusinessType.DELETE)
290
+ @DeleteMapping("/{ids}")
291
+ public AjaxResult remove(@PathVariable Long[] ids) { ... }
292
+ related_rules: []
293
+ tags: ["ruoyi", "audit", "logging"]
@@ -0,0 +1,73 @@
1
+ # Gate Engine Configuration / 门控引擎配置
2
+ #
3
+ # 唯一真相源 (Single Source of Truth)
4
+ # gate-engine.js 必须从此文件读取配置,不得硬编码
5
+ #
6
+ # 修改流程:
7
+ # 1. 在此文件中修改BLOCKER规则列表或评分权重
8
+ # 2. gate-engine.js 自动读取最新配置
9
+ # 3. 无需修改JS代码
10
+
11
+ meta:
12
+ version: "1.0.0"
13
+ last_updated: "2026-04-15"
14
+
15
+ gate_levels:
16
+ - id: blocker
17
+ exit_code: 1
18
+ message: "🚫 BLOCKER: 流程被阻断,必须修复后才能继续"
19
+ color: "red"
20
+
21
+ - id: critical
22
+ exit_code: 1
23
+ message: "🔴 CRITICAL: 严重问题,必须修复"
24
+ color: "red"
25
+
26
+ - id: warning
27
+ exit_code: 0
28
+ message: "🟡 WARNING: 建议修复,非阻塞"
29
+ color: "yellow"
30
+
31
+ - id: info
32
+ exit_code: 0
33
+ message: "🔵 INFO: 可选优化"
34
+ color: "blue"
35
+
36
+ severity_mapping:
37
+ error: critical
38
+ warn: warning
39
+ info: info
40
+
41
+ blocker_rule_ids:
42
+ - uiux-no-uuid-input
43
+ - dm-enum-convention
44
+ - dm-permission-matrix
45
+ - uiux-form-mapping-exists
46
+ - uiux-options-api-listed
47
+ - api-options-endpoint
48
+ - prd-has-out-of-scope
49
+
50
+ blocker_fix_suggestions:
51
+ uiux-no-uuid-input: "外键字段使用Select组件而非手动输入"
52
+ dm-enum-convention: "在PRD中添加枚举编码约定章节"
53
+ dm-permission-matrix: "在PRD中添加角色×状态×操作权限矩阵"
54
+ uiux-form-mapping-exists: "在PRD中添加表单字段组件映射表"
55
+ uiux-options-api-listed: "在PRD中列出所有Options API数据源"
56
+ api-options-endpoint: "在PRD接口设计中声明/options端点"
57
+ prd-has-out-of-scope: "在PRD中明确声明超出范围的功能"
58
+
59
+ score_weights:
60
+ blocker_base: 0
61
+ critical_max_issues_for_nonzero: 5
62
+ critical_floor_score: 20
63
+ base_score: 100
64
+ critical_penalty: 15
65
+ warning_penalty: 5
66
+ info_penalty: 1
67
+
68
+ grade_thresholds:
69
+ A: 90
70
+ B: 80
71
+ C: 70
72
+ D: 60
73
+ F: 0