adspecs 0.1.33 → 0.1.35
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/.adspecs/paths.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.qoder-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/plugin.json +1 -1
- package/CLAUDE.md +2 -2
- package/README.md +1 -1
- package/package.json +1 -1
- package/references/ant6-front-standard/02-/347/273/204/344/273/266/350/247/204/350/214/203.md +7 -0
- package/references/ant6-front-standard/03-/345/210/227/350/241/250/350/247/204/350/214/203.md +222 -147
- package/references/ant6-front-standard/04-/350/241/250/345/215/225/350/247/204/350/214/203.md +8 -0
- package/references/ant6-front-standard/09-/345/270/270/350/247/201/351/227/256/351/242/230/350/247/204/350/214/203.md +1 -1
- package/references/ant6-front-standard/index.md +100 -99
- package/references/yudaocloud-end-standard/01-Java/345/220/216/347/253/257/347/274/226/347/240/201/350/247/204/350/214/203.md +1166 -0
- package/references/yudaocloud-end-standard/02-/346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/344/270/216/344/275/277/347/224/250/350/247/204/350/214/203.md +1023 -0
- package/references/yudaocloud-end-standard/03-/346/225/260/346/215/256/345/255/227/345/205/270/344/270/216/350/217/234/345/215/225/350/247/204/350/214/203.md +336 -0
- package/references/yudaocloud-end-standard/index.md +14 -3
- package/references/yudaocloud-end-standard/system_dict_type.sql +186 -0
- package/skills/adspecs-adversarial-review/SKILL.md +1 -1
- package/skills/adspecs-analyze/SKILL.md +564 -574
- package/skills/adspecs-plan/SKILL.md +1 -1
- package/skills/adspecs-utest/SKILL.md +62 -40
- package/skills/project-init/SKILL.md +4 -4
- package/src/lib/paths-defaults.js +1 -1
- package/src/lib/readme-gen.js +1 -1
- package/references/ant6-front-standard/05-/345/211/215/347/253/257/347/274/226/347/240/201/350/247/204/350/214/203.md +0 -1443
|
@@ -37,6 +37,14 @@ disable-model-invocation: false
|
|
|
37
37
|
|
|
38
38
|
本技能**不修改**业务代码、不生成集成测试、不执行测试运行。
|
|
39
39
|
|
|
40
|
+
## 用户输入
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
$ARGUMENTS
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
在处理之前**必须**考虑用户输入(若不为空)。
|
|
47
|
+
|
|
40
48
|
## 路径配置加载
|
|
41
49
|
|
|
42
50
|
在开始执行之前,先确定输入/输出目录:
|
|
@@ -45,13 +53,25 @@ disable-model-invocation: false
|
|
|
45
53
|
2. 如果存在,读取其中的 `paths` 对象,提取本技能需要的配置键
|
|
46
54
|
3. 如果不存在或配置键缺失,使用下方表格中的默认值
|
|
47
55
|
|
|
48
|
-
| 配置键 | 默认值
|
|
49
|
-
| ----------------- |
|
|
50
|
-
| `design_dir` | `docs/30-system-design`
|
|
51
|
-
| `test_report_dir` | `docs/80-development`
|
|
56
|
+
| 配置键 | 默认值 | 用途 |
|
|
57
|
+
| ----------------- | -------------------------- | ------------------------------------ |
|
|
58
|
+
| `design_dir` | `docs/30-system-design` | 系统设计文档目录(输入) |
|
|
59
|
+
| `test_report_dir` | `docs/80-development/802-test` | 单元测试报告输出目录(按模块子目录保存) |
|
|
52
60
|
|
|
53
61
|
将解析后的路径分别记为 `DESIGN_DIR` 和 `TEST_REPORT_DIR`,后续步骤中引用这些变量而非硬编码路径。
|
|
54
62
|
|
|
63
|
+
## 输出路径(按模块保存)
|
|
64
|
+
|
|
65
|
+
与 `/adspecs-prd`、`/adspecs-plan` 保持一致,单元测试报告按模块子目录保存到 `{TEST_REPORT_DIR}/` 下:
|
|
66
|
+
|
|
67
|
+
1. **识别模块编号(`MODULE_ID`)**:
|
|
68
|
+
- 优先从用户指定的系统设计文档文件名提取:文件名以模块编号开头(如 `M01-01-产品主数据_system-design.md` → `MODULE_ID = M01-01`)
|
|
69
|
+
- 若文件名无模块编号前缀,且文件位于 `{DESIGN_DIR}` 的子目录中(如 `{DESIGN_DIR}/crm/`、`{DESIGN_DIR}/M03-02/`),使用该子目录名作为 `MODULE_ID`
|
|
70
|
+
- 两者均无法识别时,`MODULE_ID` 留空
|
|
71
|
+
2. **确定测试报告输出目录**:
|
|
72
|
+
- `MODULE_ID` 非空:`{TEST_REPORT_DIR}/{MODULE_ID}/`(如 `docs/80-development/802-test/M01-01/`),子目录不存在时自动创建
|
|
73
|
+
- `MODULE_ID` 为空:`{TEST_REPORT_DIR}/`(兼容旧行为,不创建模块子目录)
|
|
74
|
+
|
|
55
75
|
## 输入
|
|
56
76
|
|
|
57
77
|
### 必读文件(按顺序)
|
|
@@ -59,18 +79,18 @@ disable-model-invocation: false
|
|
|
59
79
|
| 序号 | 文件 | 用途 |
|
|
60
80
|
| ---- | ---------------------------------------------------------------------------------- | -------------------------------------------------------- |
|
|
61
81
|
| 1 | 用户指定的系统设计文件(如 `{DESIGN_DIR}/crm/M01-01-产品主数据_system-design.md`) | 提取 Service 方法、Controller 端点、异常码、§12 测试场景 |
|
|
62
|
-
| 2 | `.adspecs/templates/07-单元测试报告模板.md`
|
|
82
|
+
| 2 | `.adspecs/templates/07-单元测试报告模板.md` | 测试报告的输出模板(6 部分结构) |
|
|
63
83
|
| 3 | `CLAUDE.md` | 项目模块结构 |
|
|
64
|
-
| 4 | `docs/40-project_conventions/end-integration/index.md`
|
|
84
|
+
| 4 | `docs/40-project_conventions/end-integration/index.md` | 后端编码规范索引(测试框架、Mock 模式、命名约定等) |
|
|
65
85
|
|
|
66
86
|
### 参考文件(按需读取)
|
|
67
87
|
|
|
68
|
-
| 序号 | 文件
|
|
69
|
-
| ---- |
|
|
70
|
-
| 5 | 已有的测试文件(同模块或相邻模块)
|
|
71
|
-
| 6 | 对应的 `*_tasks.md` 文件
|
|
72
|
-
| 7 | 实际的 Service / Controller 源码
|
|
73
|
-
| 8 | 对应的 i18n 语言文件
|
|
88
|
+
| 序号 | 文件 | 用途 |
|
|
89
|
+
| ---- | ---------------------------------- | ------------------------------------ |
|
|
90
|
+
| 5 | 已有的测试文件(同模块或相邻模块) | 对齐项目现有测试风格和 Mock 模式 |
|
|
91
|
+
| 6 | 对应的 `*_tasks.md` 文件 | 了解 T0xx 任务编号与 US 的映射关系 |
|
|
92
|
+
| 7 | 实际的 Service / Controller 源码 | 了解方法签名、依赖注入、业务逻辑细节 |
|
|
93
|
+
| 8 | 对应的 i18n 语言文件 | 确认消息码与实际异常描述的对应 |
|
|
74
94
|
|
|
75
95
|
### 加载后端编码规范(必选)
|
|
76
96
|
|
|
@@ -85,20 +105,20 @@ disable-model-invocation: false
|
|
|
85
105
|
|
|
86
106
|
### 技术栈
|
|
87
107
|
|
|
88
|
-
| 项 | 值
|
|
89
|
-
| ---------- |
|
|
90
|
-
| 测试框架 | 按后端规范(如 JUnit 5 / pytest 等)
|
|
108
|
+
| 项 | 值 |
|
|
109
|
+
| ---------- | ------------------------------------------- |
|
|
110
|
+
| 测试框架 | 按后端规范(如 JUnit 5 / pytest 等) |
|
|
91
111
|
| Mock 框架 | 按后端规范(如 Mockito / unittest.mock 等) |
|
|
92
|
-
| 断言 | 按后端规范的断言库
|
|
93
|
-
| 显示名称 | 按后端规范的测试标注方式
|
|
94
|
-
| 覆盖率目标 | 行覆盖率 100%,分支覆盖率 100%
|
|
112
|
+
| 断言 | 按后端规范的断言库 |
|
|
113
|
+
| 显示名称 | 按后端规范的测试标注方式 |
|
|
114
|
+
| 覆盖率目标 | 行覆盖率 100%,分支覆盖率 100% |
|
|
95
115
|
|
|
96
116
|
### 测试类命名与位置
|
|
97
117
|
|
|
98
|
-
| 被测类
|
|
99
|
-
|
|
|
100
|
-
| Service 类
|
|
101
|
-
| Controller 类 | `{ControllerName}Test` | 按后端规范的测试目录结构
|
|
118
|
+
| 被测类 | 测试类命名 | 测试类位置 |
|
|
119
|
+
| ------------- | ---------------------- | ------------------------ |
|
|
120
|
+
| Service 类 | `{ServiceName}Test` | 按后端规范的测试目录结构 |
|
|
121
|
+
| Controller 类 | `{ControllerName}Test` | 按后端规范的测试目录结构 |
|
|
102
122
|
|
|
103
123
|
### Service 层测试模式
|
|
104
124
|
|
|
@@ -255,11 +275,11 @@ disable-model-invocation: false
|
|
|
255
275
|
|
|
256
276
|
**每个端点至少覆盖**:
|
|
257
277
|
|
|
258
|
-
| 场景 | 验证内容
|
|
259
|
-
| ---------------- |
|
|
260
|
-
| 正常请求 | 响应对象非空,data 字段正确
|
|
261
|
-
| dto 为 null | 返回失败响应(Controller 空校验)
|
|
262
|
-
| Service 抛出异常 | 异常传播(Controller 不吞异常)
|
|
278
|
+
| 场景 | 验证内容 |
|
|
279
|
+
| ---------------- | --------------------------------- |
|
|
280
|
+
| 正常请求 | 响应对象非空,data 字段正确 |
|
|
281
|
+
| dto 为 null | 返回失败响应(Controller 空校验) |
|
|
282
|
+
| Service 抛出异常 | 异常传播(Controller 不吞异常) |
|
|
263
283
|
|
|
264
284
|
**Controller 测试生成规则**:
|
|
265
285
|
|
|
@@ -289,29 +309,30 @@ disable-model-invocation: false
|
|
|
289
309
|
|
|
290
310
|
### 步骤 6:保存文件
|
|
291
311
|
|
|
292
|
-
| 输出 | 保存位置
|
|
293
|
-
| --------------- |
|
|
294
|
-
| Service 测试 | `{模块}-application/{测试目录}/{包路径}/service/impl/{ServiceName}Test`
|
|
312
|
+
| 输出 | 保存位置 |
|
|
313
|
+
| --------------- | ------------------------------------------------------------------------ |
|
|
314
|
+
| Service 测试 | `{模块}-application/{测试目录}/{包路径}/service/impl/{ServiceName}Test` |
|
|
295
315
|
| Controller 测试 | `{模块}-application/{测试目录}/{包路径}/controller/{ControllerName}Test` |
|
|
296
|
-
| 测试报告 | `{TEST_REPORT_DIR}/{模块编号}-{模块名}_单元测试报告.md`
|
|
316
|
+
| 测试报告 | `{TEST_REPORT_DIR}/{MODULE_ID}/{模块编号}-{模块名}_单元测试报告.md`(`MODULE_ID` 为空时直接保存到 `{TEST_REPORT_DIR}/`) |
|
|
297
317
|
|
|
298
318
|
## 输出
|
|
299
319
|
|
|
300
320
|
### 文件命名
|
|
301
321
|
|
|
302
|
-
| 文件类型 | 命名规则
|
|
303
|
-
| --------------- |
|
|
304
|
-
| Service 测试 | `{ServiceName}Test.{ext}`(按后端规范)
|
|
305
|
-
| Controller 测试 | `{ControllerName}Test.{ext}`(按后端规范) | `CrmProductControllerTest.java`
|
|
306
|
-
| 测试报告 | `{模块编号}-{模块名}_单元测试报告.md`
|
|
322
|
+
| 文件类型 | 命名规则 | 示例 |
|
|
323
|
+
| --------------- | ------------------------------------------ | ----------------------------------- |
|
|
324
|
+
| Service 测试 | `{ServiceName}Test.{ext}`(按后端规范) | `CrmProductServiceTest.java` |
|
|
325
|
+
| Controller 测试 | `{ControllerName}Test.{ext}`(按后端规范) | `CrmProductControllerTest.java` |
|
|
326
|
+
| 测试报告 | `{模块编号}-{模块名}_单元测试报告.md` | `M01-01-产品主数据_单元测试报告.md` |
|
|
307
327
|
|
|
308
328
|
### 输出目录映射
|
|
309
329
|
|
|
310
|
-
|
|
330
|
+
测试代码目录根据系统设计文档的模块元数据和后端规范确定,测试报告按模块子目录保存:
|
|
311
331
|
|
|
312
|
-
|
|
|
313
|
-
|
|
|
314
|
-
|
|
|
332
|
+
| 产物 | 输出目录 |
|
|
333
|
+
| ----------------------------- | ------------------------------------------------------------------- |
|
|
334
|
+
| Service/Controller 测试代码 | `{模块}-application/{后端规范测试目录}/` |
|
|
335
|
+
| 测试报告 | `{TEST_REPORT_DIR}/{MODULE_ID}/`(`MODULE_ID` 为空时 `{TEST_REPORT_DIR}/`) |
|
|
315
336
|
|
|
316
337
|
## 测试用例编号规则
|
|
317
338
|
|
|
@@ -350,6 +371,7 @@ disable-model-invocation: false
|
|
|
350
371
|
### 测试报告质量
|
|
351
372
|
|
|
352
373
|
- [ ] 报告 6 个部分全部覆盖
|
|
374
|
+
- [ ] 测试报告保存到模块子目录 `{TEST_REPORT_DIR}/{MODULE_ID}/`,与 PRD、系统设计文档的模块目录结构保持一致
|
|
353
375
|
- [ ] 测试用例清单与生成的测试方法一一对应
|
|
354
376
|
- [ ] 每个用例包含完整的前置条件、输入数据、预期结果
|
|
355
377
|
- [ ] 测试覆盖率表列出所有被测类
|
|
@@ -528,9 +528,9 @@ docs/
|
|
|
528
528
|
├── 70-scripts/
|
|
529
529
|
│ └── depoly/
|
|
530
530
|
├── 80-development/
|
|
531
|
+
│ ├── 800-log/
|
|
531
532
|
│ ├── 801-dev/
|
|
532
533
|
│ └── 802-test/
|
|
533
|
-
│ └── 800-log/
|
|
534
534
|
├── 100-help/
|
|
535
535
|
└── 300-specs/
|
|
536
536
|
```
|
|
@@ -612,7 +612,7 @@ docs/
|
|
|
612
612
|
**80-development/**:
|
|
613
613
|
|
|
614
614
|
- 用途: 开发产物,开发工件和测试工件归档
|
|
615
|
-
- 子目录: `801-dev/` 开发工件, `802-test/`
|
|
615
|
+
- 子目录: `801-dev/` 开发工件, `802-test/` 测试工件(/adspecs-utest 单元测试报告默认输出目录)
|
|
616
616
|
- 子目录: `800-log/` 开发日志,AI 会话记录和开发历史追踪
|
|
617
617
|
- 命名规范: `{YYYYMMDD}_{主题}.md` 或 `{YYYYMMDD_HHmmss}_{主题}.md`
|
|
618
618
|
|
|
@@ -1127,7 +1127,7 @@ mkdir -p "$TARGET/.adspecs"
|
|
|
1127
1127
|
"sow_dir": "docs/05-sow",
|
|
1128
1128
|
"prd_dir": "docs/20-prd",
|
|
1129
1129
|
"design_dir": "docs/30-system-design",
|
|
1130
|
-
"test_report_dir": "docs/80-development",
|
|
1130
|
+
"test_report_dir": "docs/80-development/802-test",
|
|
1131
1131
|
"session_log_dir": "docs/80-development/800-log",
|
|
1132
1132
|
"export_dir": "docs/90-export",
|
|
1133
1133
|
"wiki_dir": "wiki"
|
|
@@ -1145,7 +1145,7 @@ mkdir -p "$TARGET/.adspecs"
|
|
|
1145
1145
|
| `sow_dir` | `docs/05-sow` | adspecs-write-sow |
|
|
1146
1146
|
| `prd_dir` | `docs/20-prd` | adspecs-prd、adspecs-plan(输入)、adspecs-front-spec(输入)、wiki-update(源) |
|
|
1147
1147
|
| `design_dir` | `docs/30-system-design` | adspecs-plan(输出)、adspecs-tasks、adspecs-front-spec(输出)、adspecs-front-tasks、adspecs-utest(输入)、wiki-update(源) |
|
|
1148
|
-
| `test_report_dir` | `docs/80-development`
|
|
1148
|
+
| `test_report_dir` | `docs/80-development/802-test` | adspecs-utest(测试报告,按模块子目录保存) |
|
|
1149
1149
|
| `session_log_dir` | `docs/80-development/800-log` | session-logger(AI 会话日志) |
|
|
1150
1150
|
| `export_dir` | `docs/90-export` | adspecs-export-word(Word 导出输出) |
|
|
1151
1151
|
| `wiki_dir` | `wiki` | wiki-update(输出目标) |
|
|
@@ -14,7 +14,7 @@ const DEFAULT_PATHS = {
|
|
|
14
14
|
sow_dir: 'docs/05-sow',
|
|
15
15
|
prd_dir: 'docs/20-prd',
|
|
16
16
|
design_dir: 'docs/30-system-design',
|
|
17
|
-
test_report_dir: 'docs/80-development',
|
|
17
|
+
test_report_dir: 'docs/80-development/802-test',
|
|
18
18
|
session_log_dir: 'docs/80-development/800-log',
|
|
19
19
|
export_dir: 'docs/90-export',
|
|
20
20
|
wiki_dir: 'wiki',
|
package/src/lib/readme-gen.js
CHANGED
|
@@ -97,7 +97,7 @@ const DOCS_READMES = {
|
|
|
97
97
|
subdirs: [
|
|
98
98
|
{ name: '800-log/', desc: '开发日志,AI 会话记录和开发历史追踪' },
|
|
99
99
|
{ name: '801-dev/', desc: '开发工件' },
|
|
100
|
-
{ name: '802-test/', desc: '
|
|
100
|
+
{ name: '802-test/', desc: '测试工件(/adspecs-utest 单元测试报告默认输出目录)' },
|
|
101
101
|
],
|
|
102
102
|
namingConvention: '`{YYYYMMDD}_{主题}.md` 或 `{YYYYMMDD_HHmmss}_{主题}.md`',
|
|
103
103
|
},
|