ironweave 1.0.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.
- package/.claude-plugin/plugin.json +16 -0
- package/.clinerules +7 -0
- package/.codex/INSTALL.md +45 -0
- package/.cursor-plugin/plugin.json +19 -0
- package/.cursorrules +7 -0
- package/.github/copilot-instructions.md +7 -0
- package/.opencode/INSTALL.md +42 -0
- package/.windsurfrules +7 -0
- package/AGENTS.md +1 -0
- package/CLAUDE.md +22 -0
- package/CONTRIBUTING.md +81 -0
- package/GEMINI.md +1 -0
- package/LICENSE +21 -0
- package/README.md +250 -0
- package/README_CN.md +248 -0
- package/package.json +48 -0
- package/skills/api-contract-design/SKILL.md +227 -0
- package/skills/api-contract-design/references/api-design-rules.md +106 -0
- package/skills/brainstorm/SKILL.md +271 -0
- package/skills/brainstorm/agents/architect.md +34 -0
- package/skills/brainstorm/agents/challenger.md +34 -0
- package/skills/brainstorm/agents/domain-expert.md +34 -0
- package/skills/brainstorm/agents/pragmatist.md +34 -0
- package/skills/brainstorm/agents/product-manager.md +34 -0
- package/skills/brainstorm/agents/ux-designer.md +34 -0
- package/skills/brainstorm/references/synthesis-rules.md +51 -0
- package/skills/code-scaffold/SKILL.md +313 -0
- package/skills/code-scaffold/references/scaffold-rules.md +131 -0
- package/skills/docs-output/SKILL.md +149 -0
- package/skills/docs-output/references/naming-rules.md +52 -0
- package/skills/docs-output/scripts/docs_manager.py +353 -0
- package/skills/engineering-principles/SKILL.md +133 -0
- package/skills/engineering-principles/references/anti-patterns.md +144 -0
- package/skills/engineering-principles/references/ddd-patterns.md +66 -0
- package/skills/engineering-principles/references/design-patterns.md +34 -0
- package/skills/engineering-principles/references/patterns-architecture.md +301 -0
- package/skills/engineering-principles/references/patterns-backend.md +77 -0
- package/skills/engineering-principles/references/patterns-classic.md +200 -0
- package/skills/engineering-principles/references/patterns-crosscut.md +67 -0
- package/skills/engineering-principles/references/patterns-frontend.md +27 -0
- package/skills/engineering-principles/references/patterns-module.md +95 -0
- package/skills/engineering-principles/references/patterns-small-scale.md +79 -0
- package/skills/engineering-principles/references/quality-checklist.md +76 -0
- package/skills/engineering-principles/references/solid-principles.md +46 -0
- package/skills/engineering-principles/references/tdd-workflow.md +60 -0
- package/skills/engineering-principles/scripts/principles_matcher.py +433 -0
- package/skills/error-handling-strategy/SKILL.md +347 -0
- package/skills/error-handling-strategy/references/error-handling-rules.md +91 -0
- package/skills/implementation-complexity-analysis/SKILL.md +193 -0
- package/skills/implementation-complexity-analysis/references/complexity-rules.md +126 -0
- package/skills/integration-test-design/SKILL.md +296 -0
- package/skills/integration-test-design/references/test-strategy-rules.md +90 -0
- package/skills/observability-design/SKILL.md +327 -0
- package/skills/observability-design/references/observability-rules.md +129 -0
- package/skills/orchestrator/SKILL.md +260 -0
- package/skills/orchestrator/references/deliver.md +112 -0
- package/skills/orchestrator/references/execute.md +313 -0
- package/skills/orchestrator/references/gates.md +252 -0
- package/skills/orchestrator/references/parallel.md +70 -0
- package/skills/orchestrator/references/route-a.md +135 -0
- package/skills/orchestrator/references/route-b.md +91 -0
- package/skills/orchestrator/references/route-c.md +65 -0
- package/skills/orchestrator/references/route-d.md +75 -0
- package/skills/orchestrator/references/scope-sizer.md +219 -0
- package/skills/performance-arch-design/SKILL.md +208 -0
- package/skills/performance-arch-design/references/performance-rules.md +95 -0
- package/skills/project-context/SKILL.md +104 -0
- package/skills/project-context/references/schema.md +97 -0
- package/skills/project-context/scripts/context_db.py +358 -0
- package/skills/requirement-qa/SKILL.md +287 -0
- package/skills/requirement-qa/references/completion-signals.md +42 -0
- package/skills/requirement-qa/references/option-rules.md +57 -0
- package/skills/requirement-qa/scripts/qa_session.py +223 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/SKILL.md +485 -0
- package/skills/skill-creator/agents/analyzer.md +274 -0
- package/skills/skill-creator/agents/comparator.md +202 -0
- package/skills/skill-creator/agents/grader.md +223 -0
- package/skills/skill-creator/assets/eval_review.html +146 -0
- package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/skill-creator/references/schemas.md +430 -0
- package/skills/skill-creator/scripts/__init__.py +0 -0
- package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/skill-creator/scripts/generate_report.py +326 -0
- package/skills/skill-creator/scripts/improve_description.py +247 -0
- package/skills/skill-creator/scripts/package_skill.py +136 -0
- package/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/skills/skill-creator/scripts/run_eval.py +310 -0
- package/skills/skill-creator/scripts/run_loop.py +328 -0
- package/skills/skill-creator/scripts/utils.py +47 -0
- package/skills/spec-writing/SKILL.md +96 -0
- package/skills/spec-writing/references/mermaid-guide.md +66 -0
- package/skills/spec-writing/references/test-matrix.md +73 -0
- package/skills/task-difficulty/SKILL.md +162 -0
- package/skills/task-difficulty/references/scoring-guide.md +123 -0
- package/skills/task-difficulty/scripts/difficulty_scorer.py +328 -0
- package/skills/tech-stack/SKILL.md +67 -0
- package/skills/tech-stack/references/tech-reference-tables.md +130 -0
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-scaffold
|
|
3
|
+
description: >-
|
|
4
|
+
从设计文档生成项目代码骨架——包括目录结构、分层架构、Entity/Repository/Service 骨架、配置文件和测试框架初始化。执行阶段的核心工具,将 Plan 阶段产出的领域模型、时序设计、组件设计转化为可编译运行的项目框架。
|
|
5
|
+
务必在以下场景使用本 skill:用户要求初始化项目、生成代码骨架、搭建项目结构、创建 Entity、创建 Repository、创建 Service、项目脚手架、scaffold、项目初始化、从设计到代码、组件结构生成、代码生成、模块注册,或涉及 steps/09 时序设计和 steps/10 组件设计到实际代码的转化工作。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 代码骨架生成
|
|
9
|
+
|
|
10
|
+
从领域模型 + 时序设计 + 组件设计出发,产出可编译运行的分层项目骨架。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 生成流程
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
graph TB
|
|
18
|
+
INPUT["设计文档输入<br>领域模型 + 时序设计 + 组件设计"] --> SCAN["上下文扫描<br>技术栈 + 构建工具 + 目录约定"]
|
|
19
|
+
SCAN --> INIT["项目初始化<br>构建配置 + 依赖管理"]
|
|
20
|
+
INIT --> LAYER["分层骨架<br>按架构生成目录与基类"]
|
|
21
|
+
LAYER --> DOMAIN["领域层代码<br>Entity + VO + Repository 接口"]
|
|
22
|
+
DOMAIN --> APP["应用层代码<br>Service + Command + Query"]
|
|
23
|
+
APP --> INFRA["基础设施层<br>RepositoryImpl + Mapper + 配置"]
|
|
24
|
+
INFRA --> TEST["测试骨架<br>测试配置 + 样板测试"]
|
|
25
|
+
|
|
26
|
+
style INPUT fill:#e3f2fd,stroke:#1565c0,color:#0d47a1
|
|
27
|
+
style SCAN fill:#fff3e0,stroke:#e65100,color:#bf360c
|
|
28
|
+
style INIT fill:#e8eaf6,stroke:#283593,color:#1a237e
|
|
29
|
+
style LAYER fill:#e8eaf6,stroke:#283593,color:#1a237e
|
|
30
|
+
style DOMAIN fill:#c8e6c9,stroke:#2e7d32,color:#1b5e20
|
|
31
|
+
style APP fill:#c8e6c9,stroke:#2e7d32,color:#1b5e20
|
|
32
|
+
style INFRA fill:#ffe0b2,stroke:#e65100,color:#bf360c
|
|
33
|
+
style TEST fill:#f3e5f5,stroke:#6a1b9a,color:#4a148c
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 1. 上下文扫描
|
|
39
|
+
|
|
40
|
+
生成前先确认以下信息(从 project-context / tech-stack 获取或询问用户):
|
|
41
|
+
|
|
42
|
+
| 扫描项 | 影响 | 示例 |
|
|
43
|
+
|--|--|--|
|
|
44
|
+
| 语言 / 框架 | 目录结构模板 | Java + Spring Boot / TypeScript + NestJS |
|
|
45
|
+
| 构建工具 | 配置文件 | Gradle / Maven / pnpm / npm |
|
|
46
|
+
| 架构模式 | 分层策略 | 分层架构 / 六边形 / 模块化单体 |
|
|
47
|
+
| ORM / 数据访问 | Repository 实现 | MyBatis / JPA / Prisma / TypeORM |
|
|
48
|
+
| 测试框架 | 测试目录与配置 | JUnit5 / Vitest / Pytest |
|
|
49
|
+
| Monorepo? | 顶层布局 | 单模块 / apps+packages |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 2. 目录结构模板
|
|
54
|
+
|
|
55
|
+
### Java + Spring Boot(模块化单体)
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
src/
|
|
59
|
+
├── main/java/com/example/project/
|
|
60
|
+
│ ├── common/ # 公共工具
|
|
61
|
+
│ │ ├── exception/ # 统一异常
|
|
62
|
+
│ │ ├── response/ # 统一响应
|
|
63
|
+
│ │ └── config/ # 全局配置
|
|
64
|
+
│ ├── module1/ # 业务模块
|
|
65
|
+
│ │ ├── controller/
|
|
66
|
+
│ │ ├── dto/
|
|
67
|
+
│ │ │ ├── request/
|
|
68
|
+
│ │ │ └── response/
|
|
69
|
+
│ │ ├── application/ # 应用服务
|
|
70
|
+
│ │ ├── domain/
|
|
71
|
+
│ │ │ ├── entity/
|
|
72
|
+
│ │ │ ├── vo/
|
|
73
|
+
│ │ │ └── repository/ # 接口
|
|
74
|
+
│ │ └── infrastructure/
|
|
75
|
+
│ │ ├── repository/ # 实现
|
|
76
|
+
│ │ └── mapper/ # MyBatis Mapper
|
|
77
|
+
│ └── module2/
|
|
78
|
+
│ └── ...
|
|
79
|
+
├── main/resources/
|
|
80
|
+
│ ├── application.yml
|
|
81
|
+
│ ├── mapper/ # MyBatis XML
|
|
82
|
+
│ └── db/migration/ # 数据库迁移脚本
|
|
83
|
+
└── test/java/com/example/project/
|
|
84
|
+
├── module1/
|
|
85
|
+
│ ├── controller/ # Controller 测试
|
|
86
|
+
│ ├── application/ # Service 测试
|
|
87
|
+
│ └── domain/ # 领域逻辑测试
|
|
88
|
+
└── common/
|
|
89
|
+
└── BaseIntegrationTest.java
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### TypeScript + NestJS(Monorepo)
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
apps/
|
|
96
|
+
├── api/
|
|
97
|
+
│ └── src/
|
|
98
|
+
│ ├── modules/
|
|
99
|
+
│ │ ├── module1/
|
|
100
|
+
│ │ │ ├── module1.module.ts
|
|
101
|
+
│ │ │ ├── module1.controller.ts
|
|
102
|
+
│ │ │ ├── module1.service.ts
|
|
103
|
+
│ │ │ ├── dto/
|
|
104
|
+
│ │ │ ├── entities/
|
|
105
|
+
│ │ │ └── __tests__/
|
|
106
|
+
│ │ └── module2/
|
|
107
|
+
│ ├── common/
|
|
108
|
+
│ │ ├── filters/
|
|
109
|
+
│ │ ├── guards/
|
|
110
|
+
│ │ └── interceptors/
|
|
111
|
+
│ └── main.ts
|
|
112
|
+
packages/
|
|
113
|
+
├── shared/
|
|
114
|
+
│ └── src/
|
|
115
|
+
│ ├── types/
|
|
116
|
+
│ └── utils/
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 3. 分层骨架生成规则
|
|
122
|
+
|
|
123
|
+
### 从领域模型到代码的映射
|
|
124
|
+
|
|
125
|
+
```mermaid
|
|
126
|
+
graph LR
|
|
127
|
+
AGG["聚合根"] -->|"1:1"| ENTITY["Entity 类"]
|
|
128
|
+
VO_M["值对象"] -->|"1:1"| VO_C["Value Object 类"]
|
|
129
|
+
AGG -->|"1:1"| REPO_I["Repository 接口"]
|
|
130
|
+
REPO_I -->|"1:1"| REPO_IMPL["Repository 实现"]
|
|
131
|
+
DS["领域服务"] -->|"1:1"| DOMAIN_SVC["DomainService 类"]
|
|
132
|
+
UC["用例/用户故事"] -->|"1:1"| APP_SVC["ApplicationService 方法"]
|
|
133
|
+
AGG -->|"1:1"| CTRL["Controller 端点组"]
|
|
134
|
+
|
|
135
|
+
style AGG fill:#e8f5e9,stroke:#2e7d32,color:#1b5e20
|
|
136
|
+
style VO_M fill:#e8f5e9,stroke:#2e7d32,color:#1b5e20
|
|
137
|
+
style DS fill:#e8f5e9,stroke:#2e7d32,color:#1b5e20
|
|
138
|
+
style ENTITY fill:#e3f2fd,stroke:#1565c0,color:#0d47a1
|
|
139
|
+
style VO_C fill:#e3f2fd,stroke:#1565c0,color:#0d47a1
|
|
140
|
+
style REPO_I fill:#e3f2fd,stroke:#1565c0,color:#0d47a1
|
|
141
|
+
style REPO_IMPL fill:#ffe0b2,stroke:#e65100,color:#bf360c
|
|
142
|
+
style DOMAIN_SVC fill:#e3f2fd,stroke:#1565c0,color:#0d47a1
|
|
143
|
+
style APP_SVC fill:#e8eaf6,stroke:#283593,color:#1a237e
|
|
144
|
+
style CTRL fill:#f5f5f5,stroke:#616161,color:#212121
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 各层职责与约束
|
|
148
|
+
|
|
149
|
+
| 层级 | 职责 | 允许依赖 | 禁止依赖 |
|
|
150
|
+
|--|--|--|--|
|
|
151
|
+
| Controller | HTTP 入口、参数校验、DTO 转换 | Application 层 | Domain 直接操作 |
|
|
152
|
+
| Application | 用例编排、事务控制 | Domain 层、Repository 接口 | Infrastructure 具体实现 |
|
|
153
|
+
| Domain | 核心业务规则、不变量约束 | 仅自身(无外部依赖) | 任何框架注解 |
|
|
154
|
+
| Infrastructure | 持久化实现、外部集成 | Domain 层(实现接口) | Controller / Application |
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 4. Entity 骨架生成
|
|
159
|
+
|
|
160
|
+
每个聚合根生成以下内容:
|
|
161
|
+
|
|
162
|
+
### Java 示例
|
|
163
|
+
|
|
164
|
+
```java
|
|
165
|
+
// domain/entity/MigrationTask.java
|
|
166
|
+
public class MigrationTask {
|
|
167
|
+
private Long id;
|
|
168
|
+
private String name;
|
|
169
|
+
private TaskStatus status;
|
|
170
|
+
private LocalDateTime createdAt;
|
|
171
|
+
private LocalDateTime updatedAt;
|
|
172
|
+
|
|
173
|
+
// 领域行为(从用例提取)
|
|
174
|
+
public void start() {
|
|
175
|
+
if (this.status != TaskStatus.CONFIGURED) {
|
|
176
|
+
throw new TaskNotExecutableException(this.id);
|
|
177
|
+
}
|
|
178
|
+
this.status = TaskStatus.RUNNING;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### TypeScript 示例
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
// entities/migration-task.entity.ts
|
|
187
|
+
export class MigrationTask {
|
|
188
|
+
constructor(
|
|
189
|
+
public readonly id: string,
|
|
190
|
+
public name: string,
|
|
191
|
+
public status: TaskStatus,
|
|
192
|
+
public readonly createdAt: Date,
|
|
193
|
+
public updatedAt: Date,
|
|
194
|
+
) {}
|
|
195
|
+
|
|
196
|
+
start(): void {
|
|
197
|
+
if (this.status !== TaskStatus.CONFIGURED) {
|
|
198
|
+
throw new TaskNotExecutableError(this.id);
|
|
199
|
+
}
|
|
200
|
+
this.status = TaskStatus.RUNNING;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### 生成要素
|
|
206
|
+
- 从领域模型提取**所有字段**(属性名、类型、约束)
|
|
207
|
+
- 从时序设计提取**领域行为方法**(方法签名 + 前置校验)
|
|
208
|
+
- 值对象用不可变类/`readonly` 表达
|
|
209
|
+
- 状态字段用枚举
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## 5. Repository + Service 骨架
|
|
214
|
+
|
|
215
|
+
### Repository 接口(领域层)
|
|
216
|
+
|
|
217
|
+
```java
|
|
218
|
+
public interface MigrationTaskRepository {
|
|
219
|
+
Optional<MigrationTask> findById(Long id);
|
|
220
|
+
List<MigrationTask> findByStatus(TaskStatus status);
|
|
221
|
+
MigrationTask save(MigrationTask task);
|
|
222
|
+
void deleteById(Long id);
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### ApplicationService(应用层)
|
|
227
|
+
|
|
228
|
+
```java
|
|
229
|
+
@Service
|
|
230
|
+
@Transactional
|
|
231
|
+
public class MigrationTaskAppService {
|
|
232
|
+
|
|
233
|
+
private final MigrationTaskRepository taskRepository;
|
|
234
|
+
|
|
235
|
+
// 从用例 US001~US008 提取方法
|
|
236
|
+
public MigrationTaskResponse createTask(CreateTaskCommand command) {
|
|
237
|
+
// TODO: 实现
|
|
238
|
+
throw new UnsupportedOperationException();
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
public void startTask(Long taskId) {
|
|
242
|
+
// TODO: 实现
|
|
243
|
+
throw new UnsupportedOperationException();
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### 生成原则
|
|
249
|
+
- 每个 `TODO` 对应一个用户故事
|
|
250
|
+
- Repository 方法从时序设计的数据库调用提取
|
|
251
|
+
- Service 方法签名从时序设计的调用链提取
|
|
252
|
+
- 骨架代码可编译但抛出 `UnsupportedOperationException`
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 6. 测试骨架
|
|
257
|
+
|
|
258
|
+
### 测试配置
|
|
259
|
+
|
|
260
|
+
```java
|
|
261
|
+
// BaseIntegrationTest.java
|
|
262
|
+
@SpringBootTest
|
|
263
|
+
@Transactional
|
|
264
|
+
@Rollback
|
|
265
|
+
public abstract class BaseIntegrationTest {
|
|
266
|
+
// 集成测试基类,自动回滚
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### 单元测试骨架
|
|
271
|
+
|
|
272
|
+
```java
|
|
273
|
+
class MigrationTaskTest {
|
|
274
|
+
|
|
275
|
+
@Test
|
|
276
|
+
void should_start_task_when_status_is_configured() {
|
|
277
|
+
// TODO: 实现
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
@Test
|
|
281
|
+
void should_throw_when_starting_non_configured_task() {
|
|
282
|
+
// TODO: 实现
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### 生成原则
|
|
288
|
+
- 每个 Entity 领域行为 → 至少 1 个正向 + 1 个异常测试骨架
|
|
289
|
+
- 每个 Service 方法 → 1 个集成测试骨架
|
|
290
|
+
- 测试命名:`should_[行为]_when_[条件]`
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## 7. 输出清单
|
|
295
|
+
|
|
296
|
+
| 制品 | 说明 |
|
|
297
|
+
|--|--|
|
|
298
|
+
| 项目目录结构 | 完整目录树,含 README |
|
|
299
|
+
| 构建配置 | build.gradle / pom.xml / package.json |
|
|
300
|
+
| Entity 类 | 所有聚合根 + 值对象 |
|
|
301
|
+
| Repository 接口 + 实现 | 数据访问层 |
|
|
302
|
+
| Service 骨架 | 所有用例对应的方法(TODO) |
|
|
303
|
+
| Controller 骨架 | RESTful 端点 |
|
|
304
|
+
| DTO 类 | Request + Response |
|
|
305
|
+
| 测试骨架 | 单元测试 + 集成测试基类 |
|
|
306
|
+
| 配置文件 | application.yml / .env |
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## 参考
|
|
311
|
+
|
|
312
|
+
详细模板与规则参见 `references/` 目录:
|
|
313
|
+
- `scaffold-rules.md` — 各技术栈骨架生成详细规则与检查清单
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# 代码骨架生成规则与检查清单
|
|
2
|
+
|
|
3
|
+
## 骨架生成顺序
|
|
4
|
+
|
|
5
|
+
严格按以下顺序生成,确保依赖方向正确:
|
|
6
|
+
|
|
7
|
+
1. **构建配置** — build.gradle / pom.xml / package.json
|
|
8
|
+
2. **公共模块** — 统一异常、统一响应、全局配置
|
|
9
|
+
3. **领域层** — Entity → Value Object → Repository 接口 → Domain Service
|
|
10
|
+
4. **应用层** — Application Service(引用 Repository 接口)
|
|
11
|
+
5. **基础设施层** — Repository 实现 → Mapper → 外部适配器
|
|
12
|
+
6. **表现层** — Controller → DTO(Request/Response)
|
|
13
|
+
7. **测试骨架** — 测试基类 → 单元测试 → 集成测试
|
|
14
|
+
|
|
15
|
+
## 命名规范
|
|
16
|
+
|
|
17
|
+
### Java / Spring Boot
|
|
18
|
+
|
|
19
|
+
| 类型 | 后缀 | 包位置 |
|
|
20
|
+
|--|--|--|
|
|
21
|
+
| Controller | `XxxController` | `module/controller/` |
|
|
22
|
+
| Application Service | `XxxAppService` | `module/application/` |
|
|
23
|
+
| Domain Service | `XxxDomainService` | `module/domain/service/` |
|
|
24
|
+
| Entity | `XxxEntity` 或直接领域名 | `module/domain/entity/` |
|
|
25
|
+
| Value Object | `XxxVO` (领域) / `XxxVo` (DTO) | `module/domain/vo/` |
|
|
26
|
+
| Repository 接口 | `XxxRepository` | `module/domain/repository/` |
|
|
27
|
+
| Repository 实现 | `XxxRepositoryImpl` | `module/infrastructure/repository/` |
|
|
28
|
+
| Mapper | `XxxMapper` | `module/infrastructure/mapper/` |
|
|
29
|
+
| Request DTO | `XxxRequest` | `module/dto/request/` |
|
|
30
|
+
| Response DTO | `XxxResponse` | `module/dto/response/` |
|
|
31
|
+
|
|
32
|
+
### TypeScript / NestJS
|
|
33
|
+
|
|
34
|
+
| 类型 | 命名 | 文件位置 |
|
|
35
|
+
|--|--|--|
|
|
36
|
+
| Controller | `xxx.controller.ts` | `modules/xxx/` |
|
|
37
|
+
| Service | `xxx.service.ts` | `modules/xxx/` |
|
|
38
|
+
| Entity | `xxx.entity.ts` | `modules/xxx/entities/` |
|
|
39
|
+
| DTO | `create-xxx.dto.ts` | `modules/xxx/dto/` |
|
|
40
|
+
| Repository | `xxx.repository.ts` | `modules/xxx/` |
|
|
41
|
+
| Module | `xxx.module.ts` | `modules/xxx/` |
|
|
42
|
+
| Test | `xxx.service.spec.ts` | `modules/xxx/__tests__/` |
|
|
43
|
+
|
|
44
|
+
## 依赖注入规则
|
|
45
|
+
|
|
46
|
+
### Spring Boot
|
|
47
|
+
- 使用**构造器注入**(不用 `@Autowired` 字段注入)
|
|
48
|
+
- 单个依赖可省略 `@Autowired`(Spring 4.3+)
|
|
49
|
+
- 依赖 > 5 个时考虑拆分 Service
|
|
50
|
+
|
|
51
|
+
### NestJS
|
|
52
|
+
- 使用**构造器注入** + `@Injectable()`
|
|
53
|
+
- 模块间通信通过 `exports` / `imports`
|
|
54
|
+
|
|
55
|
+
## 构建配置模板
|
|
56
|
+
|
|
57
|
+
### Gradle (Kotlin DSL)
|
|
58
|
+
|
|
59
|
+
```kotlin
|
|
60
|
+
plugins {
|
|
61
|
+
java
|
|
62
|
+
id("org.springframework.boot") version "3.x.x"
|
|
63
|
+
id("io.spring.dependency-management") version "1.x.x"
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
java {
|
|
67
|
+
sourceCompatibility = JavaVersion.VERSION_17
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
dependencies {
|
|
71
|
+
// Web
|
|
72
|
+
implementation("org.springframework.boot:spring-boot-starter-web")
|
|
73
|
+
// Validation
|
|
74
|
+
implementation("org.springframework.boot:spring-boot-starter-validation")
|
|
75
|
+
// MyBatis
|
|
76
|
+
implementation("org.mybatis.spring.boot:mybatis-spring-boot-starter:3.x.x")
|
|
77
|
+
// Database
|
|
78
|
+
runtimeOnly("org.xerial:sqlite-jdbc")
|
|
79
|
+
// Test
|
|
80
|
+
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### package.json (NestJS)
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"scripts": {
|
|
89
|
+
"build": "nest build",
|
|
90
|
+
"start:dev": "nest start --watch",
|
|
91
|
+
"test": "vitest",
|
|
92
|
+
"test:e2e": "vitest run --config vitest.e2e.config.ts"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 配置文件模板
|
|
98
|
+
|
|
99
|
+
### application.yml
|
|
100
|
+
|
|
101
|
+
```yaml
|
|
102
|
+
spring:
|
|
103
|
+
application:
|
|
104
|
+
name: project-name
|
|
105
|
+
datasource:
|
|
106
|
+
url: jdbc:sqlite:data/app.db
|
|
107
|
+
driver-class-name: org.sqlite.JDBC
|
|
108
|
+
|
|
109
|
+
mybatis:
|
|
110
|
+
mapper-locations: classpath:mapper/**/*.xml
|
|
111
|
+
configuration:
|
|
112
|
+
map-underscore-to-camel-case: true
|
|
113
|
+
|
|
114
|
+
server:
|
|
115
|
+
port: 8080
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 骨架完成检查清单
|
|
119
|
+
|
|
120
|
+
- [ ] 所有聚合根都有对应 Entity 类
|
|
121
|
+
- [ ] 所有 Entity 都有 Repository 接口
|
|
122
|
+
- [ ] 所有 Repository 接口都有 Implementation
|
|
123
|
+
- [ ] 所有用例都有 ApplicationService 方法(可为 TODO)
|
|
124
|
+
- [ ] 所有资源都有 Controller 端点
|
|
125
|
+
- [ ] 所有端点都有 Request/Response DTO
|
|
126
|
+
- [ ] 统一异常处理器已创建
|
|
127
|
+
- [ ] 统一响应封装已创建
|
|
128
|
+
- [ ] 构建配置完整,可编译通过
|
|
129
|
+
- [ ] 测试框架已配置,样板测试可运行
|
|
130
|
+
- [ ] 数据库迁移脚本目录已创建
|
|
131
|
+
- [ ] 目录结构符合分层约束(无反向依赖)
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: docs-output
|
|
3
|
+
description: >-
|
|
4
|
+
文档产出管理——维护项目 docs/ 目录的模块化组织和进度追踪。模块文档按业务维度分目录存放详细内容,进度记录按日期/会话hash存放摘要。支持多人协作和跨会话任务追溯,文件头部标识 Git 账号。被动调用,不会主动触发。
|
|
5
|
+
务必在以下场景使用本 skill:创建文档、文档目录管理、docs 目录、产出物管理、输出文档、document output、docs management、模块文档、文档分类、多人协作文档、跨会话文档、进度记录、任务摘要、progress、会话记录、开发日志。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 文档产出管理
|
|
9
|
+
|
|
10
|
+
本 Skill 解决两个核心问题:
|
|
11
|
+
|
|
12
|
+
1. **文档产出缺乏统一组织**:模块文档散落、分类混乱
|
|
13
|
+
2. **缺少任务进度记录**:模型处理需求/修复 Bug 后没有简要摘要,回溯困难
|
|
14
|
+
|
|
15
|
+
本 Skill 管理 `docs/` 目录的两类内容:模块详细文档 + 进度摘要记录。
|
|
16
|
+
|
|
17
|
+
## 数据模型
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
graph TD
|
|
21
|
+
TASK["模型执行任务<br/>需求分析 · Bug修复 · 技术方案"]
|
|
22
|
+
MODULES["docs/{module}/<br/>模块文档<br/>详细功能描述"]
|
|
23
|
+
PROGRESS["docs/progress/{date}/{hash}.md<br/>进度摘要<br/>会话级记录"]
|
|
24
|
+
|
|
25
|
+
TASK -->|"详细产出"| MODULES
|
|
26
|
+
TASK -->|"摘要记录"| PROGRESS
|
|
27
|
+
|
|
28
|
+
style TASK fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
|
|
29
|
+
style MODULES fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
|
|
30
|
+
style PROGRESS fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 原则
|
|
34
|
+
|
|
35
|
+
- **被动调用**:本 skill 不会自动触发,仅在需要创建/管理文档或记录进度时被调用。
|
|
36
|
+
- **模块化组织**:模块文档按业务维度分目录。
|
|
37
|
+
- **一会话一文件**:进度记录按日期/会话hash独立存放,多人不冲突。
|
|
38
|
+
- **只管结构不管内容格式**:文档内容格式由调用方决定。
|
|
39
|
+
- **Git 账号标识**:进度记录头部包含开发者 Git 账号。
|
|
40
|
+
|
|
41
|
+
## 目录结构
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
docs/
|
|
45
|
+
├── auth/ # 业务模块 — 详细文档
|
|
46
|
+
│ ├── login.md
|
|
47
|
+
│ └── register.md
|
|
48
|
+
├── user/
|
|
49
|
+
│ ├── profile.md
|
|
50
|
+
│ └── settings.md
|
|
51
|
+
├── progress/ # 进度记录
|
|
52
|
+
│ ├── 2024-01-15/
|
|
53
|
+
│ │ ├── a3f8c1.md # 会话hash
|
|
54
|
+
│ │ └── b7d2e4.md
|
|
55
|
+
│ ├── 2024-01-16/
|
|
56
|
+
│ │ └── c9e5f0.md
|
|
57
|
+
│ └── archive/ # 归档(>30天)
|
|
58
|
+
│ └── 2024-01/
|
|
59
|
+
│ └── ...
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 模块文档规则
|
|
63
|
+
|
|
64
|
+
- 一级目录 = 业务模块(如 `auth`、`user`、`dashboard`)
|
|
65
|
+
- 二级文件 = 页面/功能点(如 `login.md`、`register.md`)
|
|
66
|
+
- 模块名和文件名使用 kebab-case
|
|
67
|
+
- 中文项目可用中文命名
|
|
68
|
+
|
|
69
|
+
### 进度记录规则
|
|
70
|
+
|
|
71
|
+
- 路径:`docs/progress/{YYYY-MM-DD}/{会话hash}.md`
|
|
72
|
+
- 会话hash:6位随机十六进制(如 `a3f8c1`),保证唯一
|
|
73
|
+
- 同一天可有多个会话文件(不同人/不同任务)
|
|
74
|
+
|
|
75
|
+
> 完整命名规则见 → `references/naming-rules.md`
|
|
76
|
+
|
|
77
|
+
## 进度记录模板
|
|
78
|
+
|
|
79
|
+
```markdown
|
|
80
|
+
# {主题}
|
|
81
|
+
|
|
82
|
+
- **日期**: YYYY-MM-DD
|
|
83
|
+
- **开发者**: {git user.name} <{git user.email}>
|
|
84
|
+
- **类型**: 需求开发 | Bug修复 | 技术方案 | 重构 | 其他
|
|
85
|
+
|
|
86
|
+
## 任务摘要
|
|
87
|
+
|
|
88
|
+
(一两句话描述本次会话完成了什么)
|
|
89
|
+
|
|
90
|
+
## 变更文件
|
|
91
|
+
|
|
92
|
+
- `path/to/file1.ts` — 修改原因
|
|
93
|
+
|
|
94
|
+
## 决策记录
|
|
95
|
+
|
|
96
|
+
(简要记录重要的技术决策)
|
|
97
|
+
|
|
98
|
+
## 遗留问题
|
|
99
|
+
|
|
100
|
+
(未完成的事项或待跟进的问题)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## 核心能力(被动 API)
|
|
104
|
+
|
|
105
|
+
### 1. create — 创建模块文档
|
|
106
|
+
|
|
107
|
+
在指定模块目录下创建新文档。
|
|
108
|
+
|
|
109
|
+
- 自动创建模块目录(如不存在)
|
|
110
|
+
- 生成空白文档(仅包含一级标题)
|
|
111
|
+
|
|
112
|
+
### 2. progress — 记录进度
|
|
113
|
+
|
|
114
|
+
创建一份会话进度摘要。
|
|
115
|
+
|
|
116
|
+
- 自动获取 Git 账号信息
|
|
117
|
+
- 生成日期目录和会话hash文件
|
|
118
|
+
- 填充进度模板
|
|
119
|
+
|
|
120
|
+
### 3. list — 列出文档
|
|
121
|
+
|
|
122
|
+
按模块和进度分别列出 docs/ 下所有内容。
|
|
123
|
+
|
|
124
|
+
### 4. validate — 校验目录
|
|
125
|
+
|
|
126
|
+
检查文档目录的基本健康状态。
|
|
127
|
+
|
|
128
|
+
### 5. archive — 归档旧进度
|
|
129
|
+
|
|
130
|
+
将超过 30 天的进度记录移入 `progress/archive/YYYY-MM/`。
|
|
131
|
+
|
|
132
|
+
## 多人协作
|
|
133
|
+
|
|
134
|
+
- **模块粒度隔离**:不同开发者负责不同模块目录,天然避免文件冲突
|
|
135
|
+
- **进度无冲突**:每个会话独立文件(日期+hash),多人同时工作不会冲突
|
|
136
|
+
- **分支工作流**:每人在独立 Git 分支上工作,通过 PR 合入
|
|
137
|
+
- **Git 账号追溯**:进度记录头部包含 `git user.name` 和 `git user.email`,可追溯到具体开发者
|
|
138
|
+
|
|
139
|
+
## Python 脚本
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
python scripts/docs_manager.py create --root <project_root> --module <模块名> --name <文档名> [--title <一级标题>]
|
|
143
|
+
python scripts/docs_manager.py progress --root <project_root> --topic <主题> --type <类型> --summary <摘要> [--files <变更文件JSON>] [--decisions <决策>] [--todos <遗留>]
|
|
144
|
+
python scripts/docs_manager.py list --root <project_root>
|
|
145
|
+
python scripts/docs_manager.py validate --root <project_root>
|
|
146
|
+
python scripts/docs_manager.py archive --root <project_root> [--older-than <天数>]
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
> 输出均为 JSON 格式,便于模型解析。
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# 文档命名与组织规则
|
|
2
|
+
|
|
3
|
+
## 目录结构
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
docs/
|
|
7
|
+
├── auth/ # 认证模块
|
|
8
|
+
│ ├── login.md
|
|
9
|
+
│ └── register.md
|
|
10
|
+
├── user/ # 用户模块
|
|
11
|
+
│ ├── profile.md
|
|
12
|
+
│ └── settings.md
|
|
13
|
+
├── order/ # 订单模块
|
|
14
|
+
│ ├── create-order.md
|
|
15
|
+
│ ├── order-list.md
|
|
16
|
+
│ └── order-detail.md
|
|
17
|
+
├── dashboard/ # 仪表盘模块
|
|
18
|
+
│ └── overview.md
|
|
19
|
+
└── progress/ # 进度记录
|
|
20
|
+
├── 2025-01-15/
|
|
21
|
+
│ ├── a3f2c1.md
|
|
22
|
+
│ └── b7e4d9.md
|
|
23
|
+
├── 2025-01-16/
|
|
24
|
+
│ └── c8a1f0.md
|
|
25
|
+
└── archive/ # 归档(>30天自动迁移)
|
|
26
|
+
└── 2024-12/
|
|
27
|
+
└── 2024-12-10/
|
|
28
|
+
└── d1e2f3.md
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 命名规范
|
|
32
|
+
|
|
33
|
+
| 层级 | 规则 | 示例 |
|
|
34
|
+
|------|------|------|
|
|
35
|
+
| 一级目录 | 业务模块名,kebab-case | `auth`、`user`、`order-management` |
|
|
36
|
+
| 二级文件 | 页面/功能点名,kebab-case,`.md` 扩展名 | `login.md`、`create-order.md` |
|
|
37
|
+
| 进度日期目录 | `YYYY-MM-DD` 格式 | `2025-01-15` |
|
|
38
|
+
| 进度文件 | 6 位十六进制会话 hash | `a3f2c1.md` |
|
|
39
|
+
| 归档月度目录 | `YYYY-MM` 格式 | `2024-12` |
|
|
40
|
+
|
|
41
|
+
## 详细规则
|
|
42
|
+
|
|
43
|
+
1. **模块目录**:名称简短,2-4 个词,使用 kebab-case(如 `user-management`,不用 `userManagement`)
|
|
44
|
+
2. **功能文件**:名称对应具体页面或功能点,使用 kebab-case
|
|
45
|
+
3. **中文名允许**:如果项目统一使用中文,模块和文件名可用中文(如 `认证/登录.md`)
|
|
46
|
+
4. **不使用序号前缀**:模块化结构不需要 `01-`、`02-` 编号
|
|
47
|
+
|
|
48
|
+
## 多人协作约定
|
|
49
|
+
|
|
50
|
+
- 开发前明确模块归属,每人负责不同模块目录
|
|
51
|
+
- 一个功能点 = 一个 `.md` 文件,避免多人编辑同一文件
|
|
52
|
+
- 在独立 Git 分支上工作,通过 PR 合入主分支
|