aodw-skill 0.7.5 → 0.7.7

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.
@@ -23,9 +23,88 @@
23
23
  - **缓存**:Redis
24
24
  - **消息中间件**:RabbitMQ
25
25
 
26
+ **必须与以下规范配合使用**:
27
+ - `.aodw/03-standards/ai-coding-rules.md`(主文件,包含通用原则)
28
+ - `.aodw/03-standards/ai-coding-rules-common.md`(通用编码规范)
29
+ - `.aodw/05-tooling/ai-tools-init-rules.md`(工具初始化规则,如果通过 AI 方式初始化工具)
30
+
31
+ **⚠️ 强制要求**:所有后端开发必须严格遵守 `docs/backend-guidelines.md` 中的规范(如果存在)。
32
+
33
+ ---
34
+
35
+ ## 2. 工具初始化检查(必须)
36
+
37
+ > **⚠️ 重要**:所有后端开发必须使用工具强制执行规范,不能只靠自觉。
38
+ > 本项目的后端规范通过 **工具自动化质量体系** 实现:
39
+ > - ✅ 编辑器即时提示 → Git 提交前阻断 → CI 自动失败 → AI 自动服从
40
+
41
+ 在开始任何后端开发前,AI 必须检查工具初始化状态:
42
+
43
+ ### 2.1 工具初始化状态检查
44
+
45
+ **AI 必须检查**:
46
+ - [ ] 是否已运行工具初始化?
47
+ - [ ] `.aodw/tools-status.yaml` 中 `initialized: true` 且后端工具状态为 `configured: true`?
48
+
49
+ **检查方法**:
50
+ 1. 读取 `.aodw/tools-status.yaml` 文件
51
+ 2. 检查 `tools_init.initialized` 是否为 `true`
52
+ 3. 检查 `tools_init.backend.maven.configured` 是否为 `true`(Maven 依赖管理)
53
+ 4. 检查 `tools_init.backend.checkstyle.configured` 是否为 `true`(如果使用 Checkstyle)
54
+ 5. 检查 `tools_init.backend.spotless.configured` 是否为 `true`(如果使用 Spotless)
55
+ 6. 检查 `tools_init.backend.pre_commit.configured` 和 `hooks_installed` 是否为 `true`
56
+
57
+ ### 2.2 工具要求
58
+
59
+ **Java 后端开发推荐使用以下工具**:
60
+ - **Maven**:依赖管理(必须)
61
+ - **Checkstyle**:代码风格检查(推荐)
62
+ - **Spotless**:代码格式化(推荐)
63
+ - **pre-commit**:Git 提交前强制检查(推荐)
64
+ - **Maven Wrapper**:确保 Maven 版本一致性(推荐)
65
+
66
+ **工具作用**:
67
+ - **Maven**:依赖管理,确保依赖版本一致性和可重现性
68
+ - **Checkstyle**:自动检查代码风格,确保符合 Java 编码规范
69
+ - **Spotless**:自动统一代码格式,避免风格争议
70
+ - **pre-commit**:不合格的代码连 commit 都提不上去,实现"提交前阻断"
71
+
72
+ **工具工作流程**:
73
+ - 每次执行 `git commit` 时,将自动触发:
74
+ 1. Checkstyle 检查:发现代码风格问题 → ❌ 直接中断提交
75
+ 2. Spotless 格式化:格式不统一 → ❌ 强制格式化后重新提交
76
+ 3. 全部通过 → ✅ 才允许提交
77
+
78
+ ### 2.3 工具未初始化时的处理
79
+
80
+ **如果工具未初始化或未配置**:
81
+ 1. **AI 必须立即停止编码**
82
+ 2. **AI 必须提示用户运行工具初始化**:
83
+ - **CLI 方式**:运行 `aodw` 选择"工具初始化",或运行 `aodw init-tools`
84
+ - **AI 方式**:说"初始化工具"或"设置开发工具"
85
+ 3. **AI 必须说明**:工具初始化会引导用户完成工具的安装和配置
86
+ 4. **在工具初始化完成前,不能开始编码**
87
+
88
+ ### 2.4 工具配置参考
89
+
90
+ **配置模板位置**:`.aodw/templates/tools-config/backend/`
91
+ - Checkstyle 配置模板:`checkstyle.config.template.xml`(如果存在)
92
+ - Spotless 配置模板:`spotless.config.template.xml`(如果存在)
93
+ - pre-commit 配置模板:`pre-commit.config.template.yaml`
94
+
95
+ **如果工具已初始化**:
96
+ - 配置应已符合 AODW 规范
97
+ - 配置文件应已生成或合并
98
+ - 工具应已正确安装和配置
99
+ - pre-commit hooks 应已安装
100
+
101
+ **如果需要对配置进行调整**:
102
+ - 可以再次运行工具初始化
103
+ - 或参考配置模板手动调整
104
+
26
105
  ---
27
106
 
28
- ## 2. 目录结构规范
107
+ ## 3. 目录结构规范
29
108
 
30
109
  ### 2.1 标准 Maven 结构
31
110
  ```
@@ -55,7 +134,7 @@ backend/
55
134
 
56
135
  ---
57
136
 
58
- ## 3. 命名规范
137
+ ## 4. 命名规范
59
138
 
60
139
  - **类名**: PascalCase (如 `ProjectService`)。
61
140
  - **接口名**: 无需 `I` 前缀。
@@ -64,7 +143,7 @@ backend/
64
143
 
65
144
  ---
66
145
 
67
- ## 4. Spring Boot 编码规范
146
+ ## 5. Spring Boot 编码规范
68
147
 
69
148
  ### 4.1 注解使用
70
149
  - 优先使用构造函数注入 (`@RequiredArgsConstructor`) 代替 `@Autowired`。
@@ -80,7 +159,7 @@ backend/
80
159
 
81
160
  ---
82
161
 
83
- ## 5. 依赖管理 (Maven)
162
+ ## 6. 依赖管理 (Maven)
84
163
 
85
164
  - **pom.xml**:
86
165
  - 代码变更涉及新依赖时,必须更新 `pom.xml`。
@@ -89,12 +168,64 @@ backend/
89
168
 
90
169
  ---
91
170
 
92
- ## 6. AI 实现流程约束
171
+ ## 7. AI 实现流程约束
93
172
 
94
- ### 6.1 生成粒度
173
+ ### 7.1 生成粒度
95
174
  - 遵循“一个文件一次生成”原则。
96
175
  - 复杂功能应先生成 Entity/Repository,再生成 Service,最后生成 Controller。
97
176
 
98
- ### 6.2 代码质量
177
+ ### 7.2 代码质量
99
178
  - 所有的 POJO 类建议使用 `@Data` (Lombok) 以减少冗余。
100
179
  - API 接口必须符合 RESTful 设计原则。
180
+
181
+ ---
182
+
183
+ ## 8. Java 代码提交前检查清单
184
+
185
+ 在提交 Java 代码前,必须完成以下检查:
186
+
187
+ ### 8.1 工具初始化检查(参考 `.aodw/03-standards/stacks/java-springboot/ai-coding-rules-backend.md` 第 2 节)
188
+
189
+ - [ ] **工具是否已初始化**:
190
+ - [ ] 检查 `.aodw/tools-status.yaml` 中 `initialized: true`
191
+ - [ ] **Maven** 是否已安装并配置?
192
+ - [ ] **Checkstyle** 是否已安装并配置?(如果使用)
193
+ - [ ] **Spotless** 是否已安装并配置?(如果使用)
194
+ - [ ] **pre-commit** 是否已安装并配置?
195
+ - [ ] pre-commit hooks 是否已安装?
196
+
197
+ ### 8.2 依赖管理检查
198
+
199
+ - [ ] **Maven 依赖管理**:
200
+ - [ ] 是否使用 Maven 管理依赖?
201
+ - [ ] `pom.xml` 是否已更新?
202
+ - [ ] 依赖版本是否与 `xg-common-parent` 一致?
203
+ - [ ] 依赖范围是否准确(compile, provided, test 等)?
204
+
205
+ ### 8.3 代码质量检查(工具自动)
206
+
207
+ - [ ] **Checkstyle 静态检查**(如果使用):
208
+ - [ ] `mvn checkstyle:check` 是否通过?
209
+ - [ ] 代码风格是否符合规范?
210
+ - [ ] **Spotless 格式化**(如果使用):
211
+ - [ ] `mvn spotless:apply` 是否已运行?
212
+ - [ ] 代码格式是否统一?
213
+
214
+ ### 8.4 目录结构检查
215
+
216
+ - [ ] **分层架构检查**:
217
+ - [ ] controller 层是否未直接导入 mapper/dao?
218
+ - [ ] service 层是否未直接导入 controller?
219
+ - [ ] 依赖关系是否符合规范?
220
+
221
+ ### 8.5 最终验证
222
+
223
+ - [ ] **运行完整检查**:
224
+ ```bash
225
+ mvn clean compile
226
+ mvn checkstyle:check # 如果使用 Checkstyle
227
+ mvn spotless:apply # 如果使用 Spotless
228
+ mvn test
229
+ pre-commit run --all-files # 如果使用 pre-commit
230
+ ```
231
+ - [ ] **所有检查通过后,才能提交代码**
@@ -0,0 +1,134 @@
1
+ # AI Coding Rules - Backend Development (Rust)
2
+
3
+ > **注意**:本文件是 `.aodw-next/03-standards/ai-coding-rules.md` 的子规范文件。
4
+ > 请先阅读主文件了解通用编码原则。
5
+
6
+ **适用场景**:
7
+ - 后端开发(Rust + Axum + SQLx)
8
+ - 命令行工具开发
9
+ - 高性能组件开发
10
+
11
+ **依赖规范**:
12
+ - [Rust API Guidelines](https://rust-lang.github.io/api-guidelines/)
13
+ - [Effective Rust](https://www.lurklurk.org/effective-rust/)
14
+
15
+ ## 1. 核心原则 (Core Principals)
16
+
17
+ ### 1.1 稳定性优先 (Stability First)
18
+ - **绝对禁止在业务逻辑中使用 `unwrap()` 或 `expect()`**。
19
+ - 仅允许在 `tests/`, `examples/`, 或 `bin/` 的初始化阶段(无法恢复的启动错误)使用。
20
+ - 业务代码必须使用 `match`, `if let`, 或 `?` 传播 `Result`。
21
+ - **避免 Panic**:任何可能 Panic 的操作(如数组索引 `arr[i]`)都应使用安全版本(如 `arr.get(i)`)。
22
+
23
+ ### 1.2 错误处理 (Error Handling)
24
+ - 使用 `thiserror` 定义库/模块级别的错误枚举。
25
+ - 使用 `anyhow` 处理顶层应用(Application)的错误传播。
26
+ - **Axum Handler** 必须返回实现了 `IntoResponse` 的 Result 类型(通常自定义 `AppError`)。
27
+
28
+ ### 1.3 异步规范 (Async)
29
+ - 避免在异步上下文中执行阻塞操作(如标准 `std::fs` 或大量 CPU 计算)。
30
+ - 使用 `tokio::fs` 替代 `std::fs`。
31
+ - 长时间计算任务使用 `tokio::task::spawn_blocking`。
32
+
33
+ ---
34
+
35
+ ## 2. 代码风格与命名 (Style & Naming)
36
+
37
+ 遵循 `rustfmt` 默认配置。
38
+
39
+ - **Types (Structs, Enums, Traits)**: `PascalCase`
40
+ - **Functions, Methods, Variables, Modules**: `snake_case`
41
+ - **Constants, Statics**: `SCREAMING_SNAKE_CASE`
42
+ - **File Names**: `snake_case.rs`
43
+
44
+ ---
45
+
46
+ ## 3. 目录结构规范 (Directory Structure)
47
+
48
+ ```
49
+ backend/
50
+ src/
51
+ bin/ # 独立可执行文件(工具脚本)
52
+ routes/ # Axum 路由处理函数 (Handlers)
53
+ mod.rs # 路由注册
54
+ users.rs # 用户模块路由
55
+ models/ # 数据模型 (Structs) & DB 映射
56
+ services/ # 业务逻辑层 (可选,复杂逻辑从 routes 剥离)
57
+ utils/ # 通用工具函数
58
+ main.rs # 应用入口,仅包含启动配置
59
+ ```
60
+
61
+ - **Routes**: 负责 HTTP 解析、参数校验、调用 Service/Model、返回响应。
62
+ - **Services/Models**: 负责核心业务逻辑和数据持久化,不应依赖 HTTP 层细节。
63
+
64
+ ---
65
+
66
+ ## 4. 最佳实践 (Best Practices)
67
+
68
+ ### 4.1 SQLx 使用
69
+ - 优先使用 `sqlx::query_as!` 宏进行编译时 SQL 检查。
70
+ - 如果必须使用动态 SQL,确保使用参数化查询 (`bind`) 防止注入。
71
+ - 数据库模型 Struct 字段应与 DB 列名一致,或使用 `#[sqlx(rename = "...")]`。
72
+
73
+ ### 4.2 Axum Handler
74
+ - 保持 Handler 瘦身:如果逻辑超过 50 行,考虑提取到 Service 层或独立函数。
75
+ - 使用 `State` 抽取共享状态(如 DB Pool)。
76
+
77
+ ### 4.3 日志 (Logging)
78
+ - 使用 `tracing` 而非 `println!`。
79
+ - 关键业务路径必须有 `info!` 日志。
80
+ - 错误分支必须有 `error!` 日志,包含上下文信息。
81
+
82
+ ---
83
+
84
+ ## 5. 工具链配置 (Tooling)
85
+
86
+ 所有 Rust 项目必须包含以下配置:
87
+
88
+ ### 5.1 工具初始化(必须)
89
+
90
+ 在开始开发前,必须运行工具初始化:
91
+ - 通过 AI 命令:"初始化工具" 或 "设置开发工具"
92
+ - 通过 CLI 命令:`aodw init-tools`
93
+
94
+ 工具初始化会自动:
95
+ - 检测 rustfmt、clippy、cargo 是否已安装
96
+ - 从模板生成 `rustfmt.toml` 和 `clippy.toml` 配置文件
97
+ - 配置 pre-commit hooks(如果使用)
98
+
99
+ ### 5.2 配置文件
100
+
101
+ **rustfmt.toml**(从模板生成):
102
+ - 模板位置:`.aodw/templates/tools-config/backend/rustfmt.config.template.toml`
103
+ - 生成位置:项目根目录 `rustfmt.toml`
104
+ - 主要配置:
105
+ ```toml
106
+ edition = "2021"
107
+ max_width = 100
108
+ use_small_heuristics = "Max"
109
+ ```
110
+
111
+ **clippy.toml**(从模板生成):
112
+ - 模板位置:`.aodw/templates/tools-config/backend/clippy.config.template.toml`
113
+ - 生成位置:项目根目录 `clippy.toml` 或 `Cargo.toml` 的 `[lints.clippy]` 部分
114
+ - 主要配置:
115
+ - 零警告策略:`warn = "all"`, `deny = ["warnings"]`
116
+ - 复杂度限制:`cognitive_complexity_threshold = 15`, `cyclomatic_complexity_threshold = 15`
117
+ - 文件长度限制:`too_many_lines_threshold = 400`
118
+
119
+ ### 5.3 提交前检查(必须)
120
+
121
+ 所有代码提交前必须通过以下检查:
122
+ - `cargo fmt -- --check`(代码格式化检查)
123
+ - `cargo clippy -- -D warnings`(零警告策略)
124
+ - `cargo test`(单元测试)
125
+
126
+ 这些检查应配置在 pre-commit hooks 中,确保提交前自动执行。
127
+
128
+ ---
129
+
130
+ ## 6. 代码质量指标 (Metrics)
131
+
132
+ - **函数长度**: 软限制 60 行。超过则拆分。
133
+ - **文件长度**: 软限制 400 行。
134
+ - **复杂度**: 单个函数 Cyclomatic Complexity < 15。
@@ -8,6 +8,13 @@
8
8
  - UI 组件开发
9
9
  - 前端工具配置
10
10
 
11
+ **必须与以下规范配合使用**:
12
+ - `.aodw/03-standards/ai-coding-rules.md`(主文件,包含通用原则)
13
+ - `.aodw/03-standards/ai-coding-rules-common.md`(通用编码规范)
14
+ - `.aodw/05-tooling/ai-tools-init-rules.md`(工具初始化规则,如果通过 AI 方式初始化工具)
15
+
16
+ **⚠️ 强制要求**:所有前端开发必须严格遵守 `docs/frontend-guidelines.md` 中的规范(如果存在)。
17
+
11
18
  ---
12
19
 
13
20
  ## 1. 技术栈确认
@@ -22,12 +29,68 @@
22
29
 
23
30
  ---
24
31
 
25
- ## 2. 工具配置检查
32
+ ## 2. 工具初始化检查(必须)
33
+
34
+ > **⚠️ 重要**:所有前端开发必须使用工具强制执行规范,不能只靠自觉。
35
+ > 本项目的后端规范通过 **工具自动化质量体系** 实现:
36
+ > - ✅ 编辑器即时提示 → Git 提交前阻断 → CI 自动失败 → AI 自动服从
37
+
38
+ 在开始任何前端开发前,AI 必须检查工具初始化状态:
39
+
40
+ ### 2.1 工具初始化状态检查
41
+
42
+ **AI 必须检查**:
43
+ - [ ] 是否已运行工具初始化?
44
+ - [ ] `.aodw/tools-status.yaml` 中 `initialized: true` 且前端工具状态为 `configured: true`?
45
+
46
+ **检查方法**:
47
+ 1. 读取 `.aodw/tools-status.yaml` 文件
48
+ 2. 检查 `tools_init.initialized` 是否为 `true`
49
+ 3. 检查 `tools_init.frontend.eslint.configured` 是否为 `true`
50
+ 4. 检查 `tools_init.frontend.prettier.configured` 是否为 `true`
51
+ 5. 检查 ESLint 配置是否适用于 Vue 2
52
+
53
+ ### 2.2 工具要求
54
+
55
+ **Vue 2 前端开发必须使用以下工具**:
56
+ - **ESLint**:代码质量检查(语法错误、未使用变量、Vue 2 特定规则)
57
+ - **Prettier**:代码格式化(统一代码风格)
58
+ - **PostCSS**:CSS 后处理(兼容性配置)
59
+
60
+ **工具作用**:
61
+ - ESLint:自动拦截代码质量问题,确保符合 Vue 2 编码规范
62
+ - Prettier:自动统一代码格式,避免风格争议
63
+ - PostCSS:处理 CSS 兼容性问题
64
+
65
+ ### 2.3 工具未初始化时的处理
66
+
67
+ **如果工具未初始化或未配置**:
68
+ 1. **AI 必须立即停止编码**
69
+ 2. **AI 必须提示用户运行工具初始化**:
70
+ - **CLI 方式**:运行 `aodw` 选择"工具初始化",或运行 `aodw init-tools`
71
+ - **AI 方式**:说"初始化工具"或"设置开发工具"
72
+ 3. **AI 必须说明**:工具初始化会引导用户完成工具的安装和配置
73
+ 4. **在工具初始化完成前,不能开始编码**
74
+
75
+ ### 2.4 工具配置参考
76
+
77
+ **配置模板位置**:`.aodw/templates/tools-config/frontend/`
78
+ - ESLint 配置模板:`eslint.config.template.json`(需要适配 Vue 2)
79
+ - Prettier 配置模板:`prettier.config.template.json`
80
+
81
+ **Vue 2 特定配置要求**:
82
+ - ESLint 必须包含 `eslint-plugin-vue` 插件
83
+ - ESLint 配置必须设置为 Vue 2 模式(`vue/no-v-for-template-key` 等规则)
84
+ - Prettier 配置需要兼容 Vue 2 的单文件组件格式
85
+
86
+ **如果工具已初始化**:
87
+ - 配置应已符合 AODW 规范
88
+ - 配置文件应已生成或合并
89
+ - 工具应已正确安装和配置
26
90
 
27
- 在开始编码前,AI 应检查以下配置:
28
- - **ESLint**: 检查 `.eslintrc.js` 确保适用于 Vue 2。
29
- - **Prettier**: 确保配置符合项目风格。
30
- - **PostCSS**: 检查兼容性配置。
91
+ **如果需要对配置进行调整**:
92
+ - 可以再次运行工具初始化
93
+ - 或参考配置模板手动调整
31
94
 
32
95
  ---
33
96
 
@@ -95,3 +158,63 @@ frontend/
95
158
  ### 6.2 代码生成策略
96
159
  - 优先生成符合 Vue 2 语法的代码(Option API)。
97
160
  - 确保所有的 `import` 路径正确(使用项目中定义的别名,如 `@`)。
161
+
162
+ ---
163
+
164
+ ## 7. Vue 2 代码提交前检查清单
165
+
166
+ 在提交 Vue 2 代码前,必须完成以下检查:
167
+
168
+ ### 7.1 工具初始化检查(参考 `.aodw/03-standards/stacks/vue2/ai-coding-rules-frontend.md` 第 2 节)
169
+
170
+ - [ ] **工具是否已初始化**:
171
+ - [ ] 检查 `.aodw/tools-status.yaml` 中 `initialized: true`
172
+ - [ ] ESLint 是否已安装并配置?(必须支持 Vue 2)
173
+ - [ ] Prettier 是否已安装并配置?
174
+ - [ ] PostCSS 是否已配置?
175
+
176
+ ### 7.2 目录结构检查
177
+
178
+ - [ ] **目录结构是否符合规范**:
179
+ - [ ] 页面组件是否放在 `src/views/` 下?
180
+ - [ ] 通用组件是否放在 `src/components/` 下?
181
+ - [ ] API 请求是否放在 `src/api/` 下?
182
+ - [ ] 工具函数是否放在 `src/utils/` 下?
183
+
184
+ ### 7.3 文件大小检查
185
+
186
+ - [ ] **文件大小是否符合规范**:
187
+ - [ ] 单个 `.vue` 文件是否 ≤ 500 行?
188
+ - [ ] `template` 部分是否 ≤ 300 行?
189
+ - [ ] 单个函数是否 ≤ 60 行?
190
+
191
+ ### 7.4 Vue 2 编码规范检查
192
+
193
+ - [ ] **组件定义**:
194
+ - [ ] 是否包含 `name` 属性?
195
+ - [ ] `data` 是否是一个函数?
196
+ - [ ] `props` 是否定义了类型、默认值或是否必传?
197
+ - [ ] **样式约定**:
198
+ - [ ] 组件样式是否使用了 `scoped`?
199
+ - [ ] 是否优先使用项目定义的 SASS 变量?
200
+
201
+ ### 7.5 代码质量检查(工具自动)
202
+
203
+ - [ ] **ESLint 静态检查**:
204
+ - [ ] `npm run lint` 或 `npx eslint .` 是否通过?
205
+ - [ ] 是否有语法错误?
206
+ - [ ] 是否有未使用的变量?
207
+ - [ ] Vue 2 特定规则是否通过?
208
+ - [ ] **Prettier 格式化**:
209
+ - [ ] `npm run format` 或 `npx prettier --write .` 是否已运行?
210
+ - [ ] 代码格式是否统一?
211
+
212
+ ### 7.6 最终验证
213
+
214
+ - [ ] **运行完整检查**:
215
+ ```bash
216
+ npm run lint # ESLint 检查
217
+ npm run format # Prettier 格式化
218
+ npm run build # 构建检查
219
+ ```
220
+ - [ ] **所有检查通过后,才能提交代码**