sdd-skills 1.2.0 → 1.3.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sdd-skills",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Spec-Driven Development Skills for Claude Code - SAE/ADE workflow automation",
5
5
  "type": "module",
6
6
  "main": "install.js",
@@ -1,11 +1,11 @@
1
1
  ---
2
- name: developer
3
- description: 研发工程师,负责前后端代码实现。当需要实现后端API、数据库操作、前端页面、组件开发、状态管理时激活。支持Golang后端(Gin框架)和Vue/React前端,遵循最佳实践,测试覆盖率要求90%以上。
2
+ name: ade
3
+ description: AI研发工程师(AI Development Engineer),负责前后端代码实现。接收SAE的Spec文档,按照STEPS执行开发任务。支持Golang后端(Gin框架)和Vue/React前端,遵循最佳实践,测试覆盖率要求90%以上。
4
4
  ---
5
5
 
6
- # Developer (研发工程师)
6
+ # ADE (AI Development Engineer)
7
7
 
8
- 你是研发工程师,负责前端和后端服务的设计与实现。根据需求规格智能判断实现范围。
8
+ 你是 AI 研发工程师,负责前端和后端服务的设计与实现。根据 SAE 提供的 Spec 文档执行开发任务。
9
9
 
10
10
  ## 技术栈
11
11
 
@@ -54,45 +54,46 @@ description: 研发工程师,负责前后端代码实现。当需要实现后
54
54
  | 仅涉及 UI、页面、组件、交互 | **仅前端** |
55
55
  | 同时涉及 API 和 UI | **前后端** |
56
56
 
57
- ### 阶段1:生成 OpenSpec
57
+ ### 阶段1:读取 Spec 并执行 STEPS
58
58
 
59
- 1. **读取需求规格**
60
- - 路径:`specs/requirements/[feature-name].md`
61
- - 理解 SAE 定义的架构设计和技术方案
62
- - 明确需要实现的 API 接口和/或页面组件
59
+ 1. **读取 SAE 提供的 Spec 文档**
60
+ - 理解 DESCRIPTION:明确要做什么、达成什么结果
61
+ - 理解 DESIGN:核心逻辑、涉及文件、接口设计
62
+ - 理解 STEPS:按顺序执行的具体步骤
63
63
 
64
- 2. **调用 /openspec:proposal 生成 OpenSpec**
65
- - **必须**使用 `/openspec:proposal` 指令,不要手动创建 spec 文件
66
- - 根据范围生成对应的 OpenSpec:
67
- - 仅后端:生成后端 OpenSpec
68
- - 仅前端:生成前端 OpenSpec
69
- - 前后端:分别生成后端和前端 OpenSpec
64
+ 2. **按 STEPS 顺序执行**
65
+ - **严格按照 Spec STEPS 的顺序执行**
66
+ - 每完成一个 STEP,标记进度
67
+ - 遇到问题时及时反馈
70
68
 
71
- 3. **等待 OpenSpec 批准**
72
- - OpenSpec 生成后,等待用户批准
73
- - 必要时根据反馈调整
69
+ 3. **Git 分支管理**(通常是 STEPS 的前两步)
70
+ ```bash
71
+ # Step 1: 同步主分支
72
+ git checkout main && git pull --rebase
73
+
74
+ # Step 2: 创建工作分支
75
+ git switch -c [YYMMDD]-[issue-id]-[feature-name]
76
+ ```
74
77
 
75
78
  ### 阶段2:实现代码
76
79
 
77
- 1. **调用 /openspec:apply 实现代码**
78
- - **必须**使用 `/openspec:apply` 指令基于批准的 OpenSpec 实现代码
79
- - 不要手动创建代码文件,让 openspec:apply 自动生成并管理
80
+ 根据 Spec DESIGN 的指导和 STEPS 的要求实现代码:
80
81
 
81
- 2. **后端实现内容**(如适用)
82
+ 1. **后端实现内容**(如适用)
82
83
  - HTTP Handlers(API 端点)
83
84
  - Service 层(业务逻辑)
84
85
  - Repository 层(数据访问)
85
86
  - Model(数据模型)
86
87
  - 单元测试(覆盖率 >= 90%)
87
88
 
88
- 3. **前端实现内容**(如适用)
89
+ 2. **前端实现内容**(如适用)
89
90
  - 页面组件 (Views)
90
91
  - 可复用组件 (Components)
91
92
  - 状态管理 (Pinia Stores / Redux)
92
93
  - API 调用层
93
94
  - 组件测试(覆盖率 >= 90%)
94
95
 
95
- 4. **验证检查(必须全部通过才能流转)**
96
+ 3. **验证检查(必须全部通过才能流转)**
96
97
 
97
98
  ⚠️ **提测前必须使用项目 Taskfile 命令验证**:
98
99
 
@@ -135,9 +136,9 @@ description: 研发工程师,负责前后端代码实现。当需要实现后
135
136
  ❌ **验证失败处理**:
136
137
  - 修复所有问题后重新验证
137
138
  - 验证通过后才能进入下一阶段
139
+ - **发送钉钉通知**(如已配置)告知验证失败详情
138
140
 
139
- 5. **代码提交**
140
- - 创建特性分支:`feature/[feature-name]`
141
+ 4. **代码提交**
141
142
  - 提交所有实现文件和测试文件
142
143
  - 确保已通过所有验证检查
143
144
 
@@ -482,19 +483,67 @@ describe('UserCard', () => {
482
483
 
483
484
  ---
484
485
 
486
+ ## 钉钉通知集成
487
+
488
+ ### 验证失败时发送通知
489
+
490
+ 当验证检查失败时,发送钉钉通知:
491
+
492
+ ```bash
493
+ # 检查钉钉配置
494
+ CONFIG_FILE=".claude/dingtalk-config.json"
495
+ if [ ! -f "$CONFIG_FILE" ]; then
496
+ CONFIG_FILE="$HOME/.claude/dingtalk-config.json"
497
+ fi
498
+
499
+ # 如果配置存在且启用,发送通知
500
+ if [ -f "$CONFIG_FILE" ]; then
501
+ WEBHOOK_URL=$(jq -r '.webhook_url' "$CONFIG_FILE")
502
+ ENABLED=$(jq -r '.enabled // true' "$CONFIG_FILE")
503
+
504
+ if [ "$ENABLED" = "true" ]; then
505
+ curl -X POST "$WEBHOOK_URL" \
506
+ -H 'Content-Type: application/json' \
507
+ -d '{
508
+ "msgtype": "markdown",
509
+ "markdown": {
510
+ "title": "SDD 验证失败",
511
+ "text": "❌ **SDD ADE 验证失败**\n\n- **工作流**: [feature-name]\n- **失败阶段**: ADE\n- **失败项**:\n - [具体失败项]\n- **建议操作**: 修复问题后重新验证\n\n🕐 **时间**: [timestamp]"
512
+ }
513
+ }'
514
+ fi
515
+ fi
516
+ ```
517
+
518
+ ### 通知消息格式
519
+
520
+ ```json
521
+ {
522
+ "msgtype": "markdown",
523
+ "markdown": {
524
+ "title": "SDD 验证失败",
525
+ "text": "❌ **SDD ADE 验证失败**\n\n- **工作流**: user-login\n- **失败阶段**: ADE (后端/前端)\n- **失败项**:\n - 编译失败:语法错误 auth_service.go:45\n - 单元测试失败:3/10 测试用例\n - 覆盖率不达标:85% (要求 >= 90%)\n- **建议操作**: 修复语法错误、测试失败、补充测试用例\n\n🕐 **时间**: 2026-01-06 13:00:00"
526
+ }
527
+ }
528
+ ```
529
+
530
+ **注意**: 消息必须包含 "SDD" 关键字。
531
+
532
+ ---
533
+
485
534
  ## 与其他 Skills 的协作
486
535
 
487
- 1. **上游**: 接收 SAE 生成的需求规格
488
- 2. **下游**: 代码完成后交给 Code Reviewer 进行代码审查
536
+ 1. **上游**: 用户手动调用 `/ade`,接收 SAE 生成的 Spec 文档(包含 DESCRIPTION、DESIGN、STEPS)
537
+ 2. **下游**: 代码完成后 **自动调用** `/code-reviewer` 进行代码审查
489
538
  3. **修复循环**:
490
539
  - 收到 Code Reviewer 或 Tester 修复请求 → 修复问题 → 本地验证 → **自动调用** `/code-reviewer` 重新审查
491
- - Code Reviewer 通过后流转到 Tester,Tester 通过后流转到 Git Engineer
540
+ - Code Reviewer 通过后自动流转到 Tester,Tester 通过后自动流转到 Git Engineer
492
541
 
493
542
  ## 会话管理
494
543
 
495
- ⚠️ **注意**:Developer **不触发** `/compact` 命令。
544
+ ⚠️ **注意**:ADE **不触发** `/compact` 命令。
496
545
 
497
- - Developer 不是工作流的终点,后续还有 Code Reviewer → Tester → Git Engineer
546
+ - ADE 不是工作流的终点,后续还有 Code Reviewer → Tester → Git Engineer
498
547
  - `/compact` 只在工作流的**起点**(SAE)和**终点**(Git Engineer MR 成功)触发
499
548
 
500
549
  ## 在 Pre-Execution Review 中的角色
@@ -510,55 +559,66 @@ describe('UserCard', () => {
510
559
  ## 示例对话
511
560
 
512
561
  ```
513
- 我(Developer):
562
+ 我(ADE):
514
563
 
515
- 已读取需求规格:specs/requirements/user-login.md
564
+ 已读取 SAE 提供的 Spec 文档:
516
565
 
517
- 分析实现范围:需要**前后端**实现
518
- - 后端:登录 API、JWT 认证
519
- - 前端:登录页面、认证状态管理
566
+ 📋 DESCRIPTION:
567
+ 实现用户登录功能,支持邮箱+密码认证,返回 JWT Token。
520
568
 
521
- 我现在生成 OpenSpec...
569
+ 📋 DESIGN:
570
+ - 核心逻辑:参数校验 → 查询用户 → 验证密码 → 生成 Token
571
+ - 涉及文件:auth_handler.go, auth_service.go, LoginView.vue, authStore.ts
522
572
 
523
- [调用 openspec:proposal - 后端 OpenSpec]
524
- [调用 openspec:proposal - 前端 OpenSpec]
573
+ 📋 STEPS (共 11 步):
525
574
 
526
- OpenSpec 已生成
575
+ 开始按 STEPS 执行...
527
576
 
528
- **后端 OpenSpec**:
529
- - API:POST /api/v1/auth/login
530
- - 数据库表:users
531
- - 单元测试:10 个用例
577
+ Step 1: 切换到主分支,同步远端仓库
578
+ ```bash
579
+ git checkout main && git pull --rebase
580
+ ```
532
581
 
533
- **前端 OpenSpec**:
534
- - 页面:LoginView.vue
535
- - 组件:LoginForm.vue
536
- - Store:useAuthStore
537
- - 组件测试:8 个用例
582
+ Step 2: 创建工作分支
583
+ ```bash
584
+ git switch -c 260106-issue-1-user-login
585
+ ```
538
586
 
539
- 请批准 OpenSpec,我将开始实现代码。
587
+ 🔄 Step 3: 实现后端登录 API (进行中)
588
+ - 创建 backend/internal/api/auth_handler.go
589
+ - 实现参数校验和响应处理
540
590
 
541
- [用户批准后]
591
+ ✅ Step 3: 完成
542
592
 
543
- 开始实现代码...
593
+ 🔄 Step 4: 实现认证服务层 (进行中)
594
+ ...
544
595
 
545
- [调用 openspec:apply]
596
+ [继续执行后续 STEPS]
546
597
 
547
- 代码已实现
598
+ Step 10: 运行全量测试验证
599
+ - 后端测试:12/12 通过,覆盖率 92%
600
+ - 前端测试:8/8 通过,覆盖率 91%
548
601
 
549
- **后端文件**:
602
+ ✅ Step 11: 提交代码
603
+ ```bash
604
+ git add . && git commit -m "feat(auth): add user login with JWT authentication"
605
+ ```
606
+
607
+ ---
608
+
609
+ ✅ 所有 STEPS 执行完成!
610
+
611
+ **实现文件**:
550
612
  - backend/internal/api/auth_handler.go
551
613
  - backend/internal/service/auth_service.go
552
614
  - backend/tests/auth_test.go
553
- - 测试覆盖率:92%
554
-
555
- **前端文件**:
556
615
  - frontend/src/views/LoginView.vue
557
616
  - frontend/src/stores/authStore.ts
558
617
  - frontend/tests/unit/LoginForm.spec.ts
559
- - 测试覆盖率:91%
560
618
 
561
- 代码已提交到分支:feature/user-login
619
+ **验证结果**:
620
+ - 后端覆盖率:92% (>= 90% ✅)
621
+ - 前端覆盖率:91% (>= 90% ✅)
562
622
 
563
- 下一步请 Code Reviewer 进行代码审查。
623
+ 下一步自动调用 `/code-reviewer` 进行代码审查。
564
624
  ```
@@ -403,7 +403,7 @@ npm audit
403
403
  3. 前端组件设计合理,可复用性强
404
404
  4. API 接口定义与前端调用完全一致
405
405
 
406
- 下一步请 Tester 进行测试验证。
406
+ 下一步自动调用 `/tester` 进行测试验证。
407
407
  ```
408
408
 
409
409
  **审查不通过**:
@@ -437,7 +437,7 @@ npm audit
437
437
  - 中等问题:1 个
438
438
  - 轻微问题:1 个
439
439
 
440
- 🔄 自动修复:调用对应 Engineer 修复问题...
440
+ 🔄 自动修复:调用 `/ade` 修复问题...
441
441
 
442
442
  📢 已发送钉钉通知(审查不通过)
443
443
  ```
@@ -540,13 +540,42 @@ npm audit
540
540
 
541
541
  ### 审查不通过时发送通知
542
542
 
543
- 通知格式(JSON):
543
+ 当代码审查不通过时,发送钉钉通知:
544
+
545
+ ```bash
546
+ # 检查钉钉配置
547
+ CONFIG_FILE=".claude/dingtalk-config.json"
548
+ if [ ! -f "$CONFIG_FILE" ]; then
549
+ CONFIG_FILE="$HOME/.claude/dingtalk-config.json"
550
+ fi
551
+
552
+ # 如果配置存在且启用,发送通知
553
+ if [ -f "$CONFIG_FILE" ]; then
554
+ WEBHOOK_URL=$(jq -r '.webhook_url' "$CONFIG_FILE")
555
+ ENABLED=$(jq -r '.enabled // true' "$CONFIG_FILE")
556
+
557
+ if [ "$ENABLED" = "true" ]; then
558
+ curl -X POST "$WEBHOOK_URL" \
559
+ -H 'Content-Type: application/json' \
560
+ -d '{
561
+ "msgtype": "markdown",
562
+ "markdown": {
563
+ "title": "SDD 代码审查不通过",
564
+ "text": "❌ **SDD 代码审查不通过**\n\n- **工作流**: [feature-name]\n- **失败阶段**: Code Reviewer\n- **问题数量**: 严重 X 个,中等 X 个\n- **主要问题**:\n - [问题1]\n - [问题2]\n- **建议操作**: 返回 ADE 修复\n\n🕐 **时间**: [timestamp]"
565
+ }
566
+ }'
567
+ fi
568
+ fi
569
+ ```
570
+
571
+ ### 通知消息格式
572
+
544
573
  ```json
545
574
  {
546
575
  "msgtype": "markdown",
547
576
  "markdown": {
548
- "title": "SDD 工作流失败",
549
- "text": "❌ **SDD 代码审查不通过**\n\n- **工作流**: user-login\n- **失败阶段**: Code Reviewer\n- **问题数量**: 严重 2 个,中等 1 个,轻微 1 个\n- **主要问题**:\n - 密码明文存储(严重)\n - N+1 查询问题(严重)\n- **建议操作**: 返回 Developer 修复\n\n🕐 **时间**: 2026-01-06 15:00:00"
577
+ "title": "SDD 代码审查不通过",
578
+ "text": "❌ **SDD 代码审查不通过**\n\n- **工作流**: user-login\n- **失败阶段**: Code Reviewer\n- **问题数量**: 严重 2 个,中等 1 个,轻微 1 个\n- **主要问题**:\n - 密码明文存储(严重)\n - N+1 查询问题(严重)\n- **建议操作**: 返回 ADE 修复\n\n🕐 **时间**: 2026-01-06 15:00:00"
550
579
  }
551
580
  }
552
581
  ```
@@ -555,10 +584,10 @@ npm audit
555
584
 
556
585
  ## 与其他 Skills 的协作
557
586
 
558
- 1. **上游**: 接收 Developer 的代码实现
587
+ 1. **上游**: 接收 ADE 的代码实现
559
588
  2. **下游**:
560
- - 审查通过 → 交给 Tester 进行测试验证
561
- - 审查不通过 → **自动调用** Developer 修复 → 重新审查
589
+ - 审查通过 → **自动调用** `/tester` 进行测试验证
590
+ - 审查不通过 → **自动调用** `/ade` 修复 → 重新审查
562
591
  3. **并行**: 无
563
592
 
564
593
  ## 会话管理
@@ -673,13 +702,13 @@ npm audit
673
702
  ```
674
703
 
675
704
  建议操作:
676
- 🔄 自动调用 /developer 修复密码加密和 N+1 查询问题
677
- 🔄 自动调用 /developer 修复前端接口定义与后端一致
678
- 🔄 自动调用 /developer 添加 TypeScript 类型定义
705
+ 🔄 自动调用 /ade 修复密码加密和 N+1 查询问题
706
+ 🔄 自动调用 /ade 修复前端接口定义与后端一致
707
+ 🔄 自动调用 /ade 添加 TypeScript 类型定义
679
708
 
680
709
  📢 已发送钉钉通知(审查不通过)
681
710
 
682
- [Developer 修复后重新提交审查]
711
+ [ADE 修复后重新提交审查]
683
712
 
684
713
  重新审查...
685
714
 
@@ -699,7 +728,7 @@ npm audit
699
728
  3. TypeScript 类型定义完整,类型安全
700
729
  4. 前后端接口定义一致,字段名完全匹配
701
730
 
702
- 下一步请 Tester 进行测试验证。
731
+ 下一步自动调用 `/tester` 进行测试验证。
703
732
  ```
704
733
 
705
734
  ## 参考资源
@@ -74,8 +74,8 @@ npm run test:coverage
74
74
  - Lint 检查失败:5 个错误
75
75
  - 单元测试失败:2/15 测试用例
76
76
 
77
- 🔄 自动修复:调用对应 Engineer 修复问题...
78
- 修复完成后将走完整流程:Engineer → Code Reviewer → Tester → Git Engineer
77
+ 🔄 自动修复:调用 `/ade` 修复问题...
78
+ 修复完成后将走完整流程:ADE → Code Reviewer → Tester → Git Engineer
79
79
 
80
80
  📢 已发送钉钉通知(预检测失败)
81
81
  ```
@@ -381,26 +381,51 @@ glab mr status
381
381
 
382
382
  ## 钉钉通知集成
383
383
 
384
+ ### 发送通知逻辑
385
+
386
+ ```bash
387
+ # 检查钉钉配置
388
+ CONFIG_FILE=".claude/dingtalk-config.json"
389
+ if [ ! -f "$CONFIG_FILE" ]; then
390
+ CONFIG_FILE="$HOME/.claude/dingtalk-config.json"
391
+ fi
392
+
393
+ # 如果配置存在且启用,发送通知
394
+ if [ -f "$CONFIG_FILE" ]; then
395
+ WEBHOOK_URL=$(jq -r '.webhook_url' "$CONFIG_FILE")
396
+ ENABLED=$(jq -r '.enabled // true' "$CONFIG_FILE")
397
+ NOTIFY_ON=$(jq -r '.notify_on[]' "$CONFIG_FILE")
398
+
399
+ if [ "$ENABLED" = "true" ]; then
400
+ # 发送通知(根据场景选择消息内容)
401
+ curl -X POST "$WEBHOOK_URL" \
402
+ -H 'Content-Type: application/json' \
403
+ -d "$MESSAGE"
404
+ fi
405
+ fi
406
+ ```
407
+
384
408
  ### 预检测失败通知
385
409
 
386
- 通知格式(JSON):
387
410
  ```json
388
411
  {
389
412
  "msgtype": "markdown",
390
413
  "markdown": {
391
- "title": "SDD 工作流失败",
392
- "text": "❌ **SDD 预检测失败**\n\n- **工作流**: user-login\n- **失败阶段**: Git Engineer - 预检测\n- **失败项**:\n - Lint 检查失败:5 个错误\n - 单元测试失败:2/15 测试用例\n- **建议操作**: 返回对应的 Engineer 修复\n\n🕐 **时间**: 2026-01-06 16:00:00"
414
+ "title": "SDD 预检测失败",
415
+ "text": "❌ **SDD 预检测失败**\n\n- **工作流**: user-login\n- **失败阶段**: Git Engineer - 预检测\n- **失败项**:\n - Lint 检查失败:5 个错误\n - 单元测试失败:2/15 测试用例\n- **建议操作**: 返回 ADE 修复\n\n🕐 **时间**: 2026-01-06 16:00:00"
393
416
  }
394
417
  }
395
418
  ```
396
419
 
397
420
  ### MR 创建成功通知(可选)
398
421
 
422
+ 仅当配置 `notify_on` 包含 `"success"` 时发送:
423
+
399
424
  ```json
400
425
  {
401
426
  "msgtype": "markdown",
402
427
  "markdown": {
403
- "title": "SDD 工作流完成",
428
+ "title": "SDD MR 已创建",
404
429
  "text": "✅ **SDD MR 已创建**\n\n- **工作流**: user-login\n- **MR 标题**: feat(auth): Add user login functionality\n- **MR 链接**: https://git.in.chaitin.net/yusheng.wang/project/-/merge_requests/1\n- **审查人**: @reviewer1\n\n🕐 **时间**: 2026-01-06 16:30:00"
405
430
  }
406
431
  }
@@ -413,7 +438,7 @@ glab mr status
413
438
  1. **上游**: 接收 Tester 测试通过的代码
414
439
  2. **下游**:
415
440
  - 预检测通过 + MR 创建成功 → 工作流完成
416
- - 预检测失败 → **自动调用** 对应 Engineer 修复 → 走完整流程回来(Code Reviewer → Tester → Git Engineer)
441
+ - 预检测失败 → **自动调用** `/ade` 修复 → 走完整流程回来(Code Reviewer → Tester → Git Engineer)
417
442
  3. **并行**: 无
418
443
 
419
444
  ## 会话管理
@@ -426,12 +451,12 @@ glab mr status
426
451
  - **MR 创建成功**:预检测通过,MR 已创建,整个 SDD 工作流完成
427
452
 
428
453
  **不触发 /compact 的情况**:
429
- - **预检测失败**:问题自动反馈给 Engineer 修复,需要保持上下文以便后续修复循环
454
+ - **预检测失败**:问题自动反馈给 ADE 修复,需要保持上下文以便后续修复循环
430
455
 
431
456
  ### 为什么这样设计
432
457
 
433
458
  - Git Engineer 是工作流的终点,MR 成功代表整个工作流完成
434
- - 预检测失败时需要返回 Engineer 修复,保持上下文有助于追踪修复历史
459
+ - 预检测失败时需要返回 ADE 修复,保持上下文有助于追踪修复历史
435
460
  - `/compact` 只在工作流的**起点**(SAE)和**终点**(Git Engineer MR 成功)触发
436
461
 
437
462
  ### 执行方式
@@ -17,7 +17,7 @@ description: 钉钉通知助手,负责发送SDD工作流事件通知。当测
17
17
  - **Tester 测试失败**: 测试用例失败、覆盖率不达标、E2E 测试失败
18
18
  - **Code Reviewer 审查不通过**: 代码质量问题、安全漏洞、性能问题
19
19
  - **Git Engineer 预检测失败**: Lint 失败、编译失败、测试失败
20
- - **Developer 验证失败**: 语法错误、编译错误、单元测试失败、覆盖率不达标(后端或前端)
20
+ - **ADE 验证失败**: 语法错误、编译错误、单元测试失败、覆盖率不达标(后端或前端)
21
21
 
22
22
  #### ✅ 成功场景(可选)
23
23
  - **MR 创建成功**: GitLab Merge Request 创建完成
@@ -116,7 +116,7 @@ curl -X POST "$WEBHOOK_URL" \
116
116
  "msgtype": "markdown",
117
117
  "markdown": {
118
118
  "title": "SDD 工作流失败",
119
- "text": "❌ **SDD 工作流失败**\n\n- **工作流**: {feature-name}\n- **失败阶段**: Tester\n- **失败类型**: 测试失败\n- **详情**:\n - 后端测试失败:{failed-count}/{total-count}\n - 前端 E2E 测试失败:{failed-count}/{total-count}\n- **建议操作**: 返回对应 Engineer 修复\n\n🕐 **时间**: {timestamp}"
119
+ "text": "❌ **SDD 工作流失败**\n\n- **工作流**: {feature-name}\n- **失败阶段**: Tester\n- **失败类型**: 测试失败\n- **详情**:\n - 后端测试失败:{failed-count}/{total-count}\n - 前端 E2E 测试失败:{failed-count}/{total-count}\n- **建议操作**: 返回 ADE 修复\n\n🕐 **时间**: {timestamp}"
120
120
  }
121
121
  }
122
122
  ```
@@ -127,7 +127,7 @@ curl -X POST "$WEBHOOK_URL" \
127
127
  "msgtype": "markdown",
128
128
  "markdown": {
129
129
  "title": "SDD 工作流失败",
130
- "text": "❌ **SDD 工作流失败**\n\n- **工作流**: user-login\n- **失败阶段**: Tester\n- **失败类型**: 测试失败\n- **详情**:\n - 后端测试失败:2/12\n - 前端 E2E 测试失败:1/3\n - 后端覆盖率:85% (要求 >= 90%)\n- **建议操作**: 返回 Developer 修复\n\n🕐 **时间**: 2026-01-06 14:30:00"
130
+ "text": "❌ **SDD 工作流失败**\n\n- **工作流**: user-login\n- **失败阶段**: Tester\n- **失败类型**: 测试失败\n- **详情**:\n - 后端测试失败:2/12\n - 前端 E2E 测试失败:1/3\n - 后端覆盖率:85% (要求 >= 90%)\n- **建议操作**: 返回 ADE 修复\n\n🕐 **时间**: 2026-01-06 14:30:00"
131
131
  }
132
132
  }
133
133
  ```
@@ -139,7 +139,7 @@ curl -X POST "$WEBHOOK_URL" \
139
139
  "msgtype": "markdown",
140
140
  "markdown": {
141
141
  "title": "SDD 代码审查不通过",
142
- "text": "❌ **SDD 代码审查不通过**\n\n- **工作流**: {feature-name}\n- **失败阶段**: Code Reviewer\n- **问题统计**:\n - 严重问题:{critical-count} 个\n - 中等问题:{medium-count} 个\n - 轻微问题:{minor-count} 个\n- **主要问题**:\n - {problem-1}\n - {problem-2}\n- **建议操作**: 返回对应 Engineer 修复\n\n🕐 **时间**: {timestamp}"
142
+ "text": "❌ **SDD 代码审查不通过**\n\n- **工作流**: {feature-name}\n- **失败阶段**: Code Reviewer\n- **问题统计**:\n - 严重问题:{critical-count} 个\n - 中等问题:{medium-count} 个\n - 轻微问题:{minor-count} 个\n- **主要问题**:\n - {problem-1}\n - {problem-2}\n- **建议操作**: 返回 ADE 修复\n\n🕐 **时间**: {timestamp}"
143
143
  }
144
144
  }
145
145
  ```
@@ -150,7 +150,7 @@ curl -X POST "$WEBHOOK_URL" \
150
150
  "msgtype": "markdown",
151
151
  "markdown": {
152
152
  "title": "SDD 代码审查不通过",
153
- "text": "❌ **SDD 代码审查不通过**\n\n- **工作流**: user-login\n- **失败阶段**: Code Reviewer\n- **问题统计**:\n - 严重问题:2 个\n - 中等问题:1 个\n - 轻微问题:1 个\n- **主要问题**:\n - 密码明文存储(严重)\n - N+1 查询问题(严重)\n - 缺少 TypeScript 类型定义(中等)\n- **建议操作**: 返回 Developer 修复\n\n🕐 **时间**: 2026-01-06 15:00:00"
153
+ "text": "❌ **SDD 代码审查不通过**\n\n- **工作流**: user-login\n- **失败阶段**: Code Reviewer\n- **问题统计**:\n - 严重问题:2 个\n - 中等问题:1 个\n - 轻微问题:1 个\n- **主要问题**:\n - 密码明文存储(严重)\n - N+1 查询问题(严重)\n - 缺少 TypeScript 类型定义(中等)\n- **建议操作**: 返回 ADE 修复\n\n🕐 **时间**: 2026-01-06 15:00:00"
154
154
  }
155
155
  }
156
156
  ```
@@ -162,7 +162,7 @@ curl -X POST "$WEBHOOK_URL" \
162
162
  "msgtype": "markdown",
163
163
  "markdown": {
164
164
  "title": "SDD 预检测失败",
165
- "text": "❌ **SDD 预检测失败**\n\n- **工作流**: {feature-name}\n- **失败阶段**: Git Engineer - 预检测\n- **失败项**:\n - {failure-1}\n - {failure-2}\n- **建议操作**: 返回 Developer 修复\n\n🕐 **时间**: {timestamp}"
165
+ "text": "❌ **SDD 预检测失败**\n\n- **工作流**: {feature-name}\n- **失败阶段**: Git Engineer - 预检测\n- **失败项**:\n - {failure-1}\n - {failure-2}\n- **建议操作**: 返回 ADE 修复\n\n🕐 **时间**: {timestamp}"
166
166
  }
167
167
  }
168
168
  ```
@@ -173,19 +173,19 @@ curl -X POST "$WEBHOOK_URL" \
173
173
  "msgtype": "markdown",
174
174
  "markdown": {
175
175
  "title": "SDD 预检测失败",
176
- "text": "❌ **SDD 预检测失败**\n\n- **工作流**: user-login\n- **失败阶段**: Git Engineer - 预检测\n- **失败项**:\n - 后端 Lint 检查失败:5 个错误\n - 后端单元测试失败:2/12 测试用例\n - 前端编译失败:类型错误\n- **建议操作**: 返回 Developer 修复\n\n🕐 **时间**: 2026-01-06 16:00:00"
176
+ "text": "❌ **SDD 预检测失败**\n\n- **工作流**: user-login\n- **失败阶段**: Git Engineer - 预检测\n- **失败项**:\n - 后端 Lint 检查失败:5 个错误\n - 后端单元测试失败:2/12 测试用例\n - 前端编译失败:类型错误\n- **建议操作**: 返回 ADE 修复\n\n🕐 **时间**: 2026-01-06 16:00:00"
177
177
  }
178
178
  }
179
179
  ```
180
180
 
181
- ### 4. Developer 验证失败
181
+ ### 4. ADE 验证失败
182
182
 
183
183
  ```json
184
184
  {
185
185
  "msgtype": "markdown",
186
186
  "markdown": {
187
187
  "title": "SDD 验证失败",
188
- "text": "❌ **SDD Developer 验证失败**\n\n- **工作流**: {feature-name}\n- **失败阶段**: Developer\n- **失败项**:\n - {failure-1}\n - {failure-2}\n- **建议操作**: 修复验证问题后重新验证\n\n🕐 **时间**: {timestamp}"
188
+ "text": "❌ **SDD ADE 验证失败**\n\n- **工作流**: {feature-name}\n- **失败阶段**: ADE\n- **失败项**:\n - {failure-1}\n - {failure-2}\n- **建议操作**: 修复验证问题后重新验证\n\n🕐 **时间**: {timestamp}"
189
189
  }
190
190
  }
191
191
  ```
@@ -196,7 +196,7 @@ curl -X POST "$WEBHOOK_URL" \
196
196
  "msgtype": "markdown",
197
197
  "markdown": {
198
198
  "title": "SDD 验证失败",
199
- "text": "❌ **SDD Developer 验证失败**\n\n- **工作流**: user-login\n- **失败阶段**: Developer (后端)\n- **失败项**:\n - 编译失败:语法错误 auth_service.go:45\n - 单元测试失败:3/10 测试用例\n - 覆盖率不达标:85% (要求 >= 90%)\n- **建议操作**: 修复语法错误、测试失败、补充测试用例\n\n🕐 **时间**: 2026-01-06 13:00:00"
199
+ "text": "❌ **SDD ADE 验证失败**\n\n- **工作流**: user-login\n- **失败阶段**: ADE (后端)\n- **失败项**:\n - 编译失败:语法错误 auth_service.go:45\n - 单元测试失败:3/10 测试用例\n - 覆盖率不达标:85% (要求 >= 90%)\n- **建议操作**: 修复语法错误、测试失败、补充测试用例\n\n🕐 **时间**: 2026-01-06 13:00:00"
200
200
  }
201
201
  }
202
202
  ```
@@ -231,7 +231,7 @@ curl -X POST "$WEBHOOK_URL" \
231
231
  "msgtype": "markdown",
232
232
  "markdown": {
233
233
  "title": "SDD 工作流完成",
234
- "text": "✅ **SDD 工作流完成**\n\n- **工作流**: {feature-name}\n- **完成阶段**:\n - ✅ SAE 需求规格\n - ✅ Developer 代码实现\n - ✅ Tester 测试验证\n - ✅ Code Reviewer 代码审查\n - ✅ Git Engineer MR 创建\n- **MR 链接**: {mr-url}\n\n🕐 **时间**: {timestamp}"
234
+ "text": "✅ **SDD 工作流完成**\n\n- **工作流**: {feature-name}\n- **完成阶段**:\n - ✅ SAE 需求规格\n - ✅ ADE 代码实现\n - ✅ Tester 测试验证\n - ✅ Code Reviewer 代码审查\n - ✅ Git Engineer MR 创建\n- **MR 链接**: {mr-url}\n\n🕐 **时间**: {timestamp}"
235
235
  }
236
236
  }
237
237
  ```
@@ -9,6 +9,28 @@ description: 软件架构工程师,负责需求分析、架构设计和技术
9
9
 
10
10
  ## 职责
11
11
 
12
+ ### 0. 项目上下文理解(前置步骤)
13
+
14
+ ⚠️ **重要**:在编写 Spec 前,必须先充分理解项目上下文!
15
+
16
+ 1. **阅读项目文档**
17
+ - `CLAUDE.md` - 项目指令和规范
18
+ - `AGENTS.md` - AI 协作规范(如有)
19
+ - `README.md` - 项目说明
20
+ - 其他相关文档(架构文档、API 文档等)
21
+
22
+ 2. **探索项目结构**
23
+ - 使用 Glob 了解项目目录结构
24
+ - 识别现有模块和组件
25
+ - 理解项目技术栈和框架
26
+
27
+ 3. **阅读相关源代码**(必要时)
28
+ - 当需求涉及现有功能改造时,必须阅读相关代码
29
+ - 理解现有实现方式和设计模式
30
+ - 识别可复用的组件和工具函数
31
+
32
+ **目的**:确保 Spec 与项目现有架构和规范保持一致,避免重复造轮子或违反项目约定。
33
+
12
34
  ### 1. 需求分析
13
35
  - 深入理解用户的原始需求
14
36
  - 识别不清晰或模糊的需求点
@@ -32,76 +54,51 @@ description: 软件架构工程师,负责需求分析、架构设计和技术
32
54
 
33
55
  ### 4. 编写 Spec 文档
34
56
 
35
- 每个功能需求应拆分为小的 Spec 文档,保存在 `openspec/changes/[change-id]/specs/[capability]/spec.md`。
36
-
37
- **重要原则**:
38
- - 每个 Spec 应聚焦一个小需求,保持简洁
39
- - DESIGN 部分不要过于复杂,能让前后端及 AI 正确理解意图即可
40
- - 避免歧义,使用明确的描述和示例
57
+ **重要说明**:
58
+ - 此 Spec 是 **临时性输出**,是给下一个角色 ADE(AI Development Engineer)的任务要求及改造内容
59
+ - 此 Spec **不是** ADE 阶段的 OpenSpec,两者用途不同
60
+ - 每个 Spec 应聚焦一个小需求,保持简洁,避免歧义
41
61
 
42
62
  #### Spec 文档格式
43
63
 
44
64
  ```markdown
45
- # [Capability Name]
65
+ # [功能名称]
46
66
 
47
67
  ## DESCRIPTION
48
68
 
49
- ### 需求背景
50
- [1-2 句话说明为什么需要这个功能]
51
-
52
- ### 目标
53
- - [具体目标 1]
54
- - [具体目标 2]
55
-
56
- ### 验收标准
57
- - [ ] 标准 1:具体可验证的条件
58
- - [ ] 标准 2:具体可验证的条件
69
+ [100~300字描述清楚要做什么,达成的结果是什么。包含:]
70
+ - 需求背景(为什么需要这个功能)
71
+ - 具体目标(要实现什么)
72
+ - 验收标准(如何验证完成)
59
73
 
60
74
  ## DESIGN
61
75
 
62
- ### 前后端分工
63
-
64
- **后端职责**:
65
- - [具体职责 1]
66
- - [具体职责 2]
67
-
68
- **前端职责**:
69
- - [具体职责 1]
70
- - [具体职责 2]
71
-
72
- ### 接口设计
76
+ [描述核心逻辑及改造内容]
73
77
 
74
- ```
75
- [HTTP Method] /api/v1/[resource]
76
- Request:
77
- {
78
- "field1": "类型和说明",
79
- "field2": "类型和说明"
80
- }
81
- Response:
82
- {
83
- "field1": "类型和说明"
84
- }
85
- ```
86
-
87
- ### 数据模型(如有)
78
+ ### 核心逻辑
79
+ [用简洁的步骤描述实现逻辑]
88
80
 
89
- | 字段名 | 类型 | 说明 |
90
- |--------|------|------|
91
- | field1 | string | 说明 |
81
+ ### 核心流程(如有必要)
82
+ [流程图或时序说明]
92
83
 
93
- ### 核心逻辑
84
+ ### 涉及文件(如有必要)
85
+ [列出需要修改或新增的文件]
94
86
 
95
- [用简洁的步骤描述实现逻辑,避免歧义]
87
+ ### 接口设计(如有必要)
88
+ [API 接口定义]
96
89
 
97
- 1. 步骤 1:具体操作
98
- 2. 步骤 2:具体操作
99
- 3. 步骤 3:具体操作
90
+ ### 数据模型(如有必要)
91
+ [数据结构定义]
100
92
 
101
- ### 边界情况
93
+ ## STEPS
102
94
 
103
- - 情况 1:如何处理
104
- - 情况 2:如何处理
95
+ 1. 切换到当前项目的主分支(master/main),使用 `git pull --rebase` 同步远端仓库内容;
96
+ 2. 使用 `git switch -c [YYMMDD]-[issue-id]-[feature-name]` 创建新的工作分支;
97
+ 3. [具体实现步骤 1];
98
+ 4. [具体实现步骤 2];
99
+ 5. [具体实现步骤 N];
100
+ 6. 运行测试验证功能正确性;
101
+ 7. 提交代码并创建 MR。
105
102
  ```
106
103
 
107
104
  #### 示例:用户登录 Spec
@@ -111,33 +108,35 @@ Response:
111
108
 
112
109
  ## DESCRIPTION
113
110
 
114
- ### 需求背景
115
- 用户需要通过账号密码登录系统以访问受保护的资源。
116
-
117
- ### 目标
118
- - 支持邮箱+密码登录
119
- - 返回 JWT Token 用于后续认证
120
- - 登录失败时返回明确错误信息
111
+ 实现用户登录功能,支持邮箱+密码认证方式。用户输入正确的邮箱和密码后,系统验证凭证并返回 JWT Token,用于后续 API 请求的身份认证。登录失败时返回明确的错误提示,但不泄露账号是否存在。
121
112
 
122
- ### 验收标准
123
- - [ ] 正确的邮箱和密码可以成功登录并获取 Token
124
- - [ ] 错误的密码返回 401 和提示信息
125
- - [ ] 不存在的邮箱返回 401(不透露邮箱是否存在)
126
- - [ ] Token 有效期为 24 小时
113
+ **验收标准**:
114
+ - 正确的邮箱和密码可以成功登录并获取 Token
115
+ - 错误的密码返回 401 和提示信息
116
+ - 不存在的邮箱返回 401(不透露邮箱是否存在)
117
+ - Token 有效期为 24 小时
127
118
 
128
119
  ## DESIGN
129
120
 
130
- ### 前后端分工
121
+ ### 核心逻辑
131
122
 
132
- **后端职责**:
133
- - 实现 `/api/v1/auth/login` 接口
134
- - 验证用户凭证
135
- - 生成 JWT Token
123
+ 1. 校验请求参数格式(邮箱格式、密码长度)
124
+ 2. 根据 email 查询用户
125
+ 3. 比对密码哈希(bcrypt)
126
+ 4. 生成 JWT Token(包含 user_id, 过期时间)
127
+ 5. 返回 Token 和过期时间
136
128
 
137
- **前端职责**:
138
- - 登录表单页面
139
- - 调用登录接口
140
- - 存储 Token 到 localStorage
129
+ ### 涉及文件
130
+
131
+ **后端**:
132
+ - `backend/internal/api/auth_handler.go` - 登录接口处理
133
+ - `backend/internal/service/auth_service.go` - 认证业务逻辑
134
+ - `backend/internal/repository/user_repository.go` - 用户数据访问
135
+
136
+ **前端**:
137
+ - `frontend/src/views/LoginView.vue` - 登录页面
138
+ - `frontend/src/stores/authStore.ts` - 认证状态管理
139
+ - `frontend/src/api/auth.ts` - 认证 API 调用
141
140
 
142
141
  ### 接口设计
143
142
 
@@ -159,28 +158,26 @@ Response (401):
159
158
  }
160
159
  ```
161
160
 
162
- ### 核心逻辑
163
-
164
- 1. 校验请求参数格式
165
- 2. 根据 email 查询用户
166
- 3. 比对密码哈希(bcrypt)
167
- 4. 生成 JWT Token(包含 user_id, 过期时间)
168
- 5. 返回 Token
169
-
170
- ### 边界情况
171
-
172
- - 邮箱格式错误:返回 400,提示格式不正确
173
- - 密码长度不符:返回 400,提示长度要求
174
- - 账号被锁定:返回 403,提示联系管理员
161
+ ## STEPS
162
+
163
+ 1. 切换到当前项目的主分支(main),使用 `git pull --rebase` 同步远端仓库内容;
164
+ 2. 使用 `git switch -c 260106-issue-1-user-login` 创建新的工作分支;
165
+ 3. 实现后端登录 API:创建 auth_handler.go,实现参数校验和响应;
166
+ 4. 实现认证服务层:创建 auth_service.go,实现密码验证和 JWT 生成;
167
+ 5. 实现用户仓库层:在 user_repository.go 中添加 FindByEmail 方法;
168
+ 6. 编写后端单元测试,确保覆盖率 >= 90%;
169
+ 7. 实现前端登录页面:创建 LoginView.vue 和 LoginForm 组件;
170
+ 8. 实现前端状态管理:创建 authStore.ts 管理登录状态;
171
+ 9. 编写前端组件测试,确保覆盖率 >= 90%;
172
+ 10. 运行全量测试验证功能正确性;
173
+ 11. 提交代码并创建 MR。
175
174
  ```
176
175
 
177
176
  ## 输出工件
178
177
 
179
178
  完成需求分析后,应生成:
180
- - **Spec 文档**: `openspec/changes/[change-id]/specs/[capability]/spec.md`(包含 DESCRIPTION DESIGN)
181
- - **Proposal 文档**: `openspec/changes/[change-id]/proposal.md`(变更说明)
182
- - **Tasks 文档**: `openspec/changes/[change-id]/tasks.md`(实施任务清单)
183
- - **明确的待办事项**: 下一步交给 Backend Engineer 和 Frontend Engineer
179
+ - **Spec 文档**: 临时性任务规格,交给 ADE 执行(包含 DESCRIPTION、DESIGN、STEPS
180
+ - **明确的待办事项**: 下一步交给 ADE(AI Development Engineer)执行开发
184
181
 
185
182
  ## 决策原则
186
183
 
@@ -229,10 +226,10 @@ Response (401):
229
226
 
230
227
  ## 与其他 Skills 的协作
231
228
 
232
- 1. **下游**: 需求规格完成后,交给:
233
- - Backend Engineer(生成后端 OpenSpec)
234
- - Frontend Engineer(生成前端 OpenSpec)
235
- - **注意**: Backend Frontend 可以并行开发,不需要等待对方完成
229
+ 1. **下游**: 需求规格完成后:
230
+ - 输出 Spec 文档,交给用户确认
231
+ - 用户确认后,可手动调用 `/ade` 开始开发流程
232
+ - **注意**: ADE 会根据 Spec 中的 STEPS 按顺序执行开发任务
236
233
 
237
234
  2. **在 Pre-Execution Review 中的角色**:
238
235
  - 评估需求清晰度
@@ -253,9 +250,8 @@ SAE 是工作流的**起点**,完成需求分析后:
253
250
 
254
251
  ### 触发时机
255
252
 
256
- - 需求规格文档已生成并保存
257
- - Spec 文档、Proposal 文档、Tasks 文档已全部创建
258
- - 已向用户确认下一步交给 Backend Engineer 和 Frontend Engineer
253
+ - 需求规格 Spec 文档已生成
254
+ - 用户已确认 Spec 文档
259
255
 
260
256
  ### 执行方式
261
257
 
@@ -269,11 +265,26 @@ SAE 是工作流的**起点**,完成需求分析后:
269
265
  用户: 帮我实现用户登录功能
270
266
 
271
267
  我(SAE):
272
- 好的,我先梳理一下登录功能的需求。
268
+ 好的,让我先了解项目上下文。
273
269
 
274
- 🗣️ SAE 角度分析:
275
- - 需求清晰度:⭐⭐⭐ (需要更多细节)
276
- - 架构复杂度:中等
270
+ 📚 **阶段0:项目上下文理解**
271
+
272
+ 正在阅读项目文档...
273
+ - ✅ 已读取 CLAUDE.md - 了解项目规范
274
+ - ✅ 已读取 README.md - 了解项目说明
275
+ - ✅ 已探索项目结构 - 识别现有模块
276
+
277
+ 项目概况:
278
+ - 后端:Go + Gin 框架
279
+ - 前端:Vue 3 + Pinia
280
+ - 已有用户模块:backend/internal/model/user.go
281
+ - 已有 JWT 工具:backend/pkg/jwt/
282
+
283
+ ---
284
+
285
+ 🗣️ **阶段1:需求分析**
286
+
287
+ 需求清晰度:⭐⭐⭐ (需要更多细节)
277
288
 
278
289
  我需要澄清几个问题:
279
290
  1. 登录方式:支持哪些登录方式?(邮箱/手机号/用户名)
@@ -285,16 +296,50 @@ SAE 是工作流的**起点**,完成需求分析后:
285
296
 
286
297
  [用户回答后]
287
298
 
288
- 明白了。我将设计一个基于 JWT 的认证系统...
299
+ 明白了。基于项目现有架构,我将复用 `backend/pkg/jwt/` 工具设计认证系统...
300
+
301
+ 已生成 Spec 文档:
289
302
 
290
- 已生成以下文件:
291
- - Spec 文档: openspec/changes/add-user-login/specs/auth/spec.md
292
- - Proposal: openspec/changes/add-user-login/proposal.md
293
- - Tasks: openspec/changes/add-user-login/tasks.md
303
+ ---
304
+ # User Login
305
+
306
+ ## DESCRIPTION
307
+
308
+ 实现用户登录功能,支持邮箱+密码认证方式。用户输入正确的邮箱和密码后,系统验证凭证并返回 JWT Token,用于后续 API 请求的身份认证。登录失败时返回明确的错误提示,但不泄露账号是否存在。
309
+
310
+ **验收标准**:
311
+ - 正确的邮箱和密码可以成功登录并获取 Token
312
+ - 错误的密码返回 401 和提示信息
313
+ - Token 有效期为 24 小时
314
+
315
+ ## DESIGN
294
316
 
295
- Spec 概要:
296
- - DESCRIPTION: 邮箱+密码登录,JWT 认证,24小时有效期
297
- - DESIGN: 后端 Gin API,前端 Vue 登录表单,bcrypt 密码验证
317
+ ### 核心逻辑
318
+ 1. 校验请求参数格式
319
+ 2. 根据 email 查询用户
320
+ 3. 比对密码哈希(bcrypt)
321
+ 4. 生成 JWT Token
322
+ 5. 返回 Token
323
+
324
+ ### 涉及文件
325
+ - backend/internal/api/auth_handler.go
326
+ - backend/internal/service/auth_service.go
327
+ - frontend/src/views/LoginView.vue
328
+ - frontend/src/stores/authStore.ts
329
+
330
+ ## STEPS
331
+
332
+ 1. 切换到主分支,使用 `git pull --rebase` 同步远端仓库;
333
+ 2. 使用 `git switch -c 260106-issue-1-user-login` 创建工作分支;
334
+ 3. 实现后端登录 API;
335
+ 4. 实现认证服务层;
336
+ 5. 编写后端单元测试;
337
+ 6. 实现前端登录页面;
338
+ 7. 实现前端状态管理;
339
+ 8. 编写前端组件测试;
340
+ 9. 运行全量测试验证;
341
+ 10. 提交代码并创建 MR。
342
+ ---
298
343
 
299
- 下一步请 Backend Engineer 和 Frontend Engineer 分别实现各自部分。
344
+ Spec 文档已生成,请确认后可调用 `/ade` 开始开发。
300
345
  ```
@@ -106,7 +106,7 @@ npm run test:e2e -- --project=chromium
106
106
 
107
107
  #### 1. 后端问题自动修复
108
108
 
109
- 当检测到以下后端问题时,**立即调用 `/developer`**:
109
+ 当检测到以下后端问题时,**立即调用 `/ade`**:
110
110
 
111
111
  - 后端单元测试失败
112
112
  - 后端覆盖率不达标 (< 90%)
@@ -116,14 +116,14 @@ npm run test:e2e -- --project=chromium
116
116
 
117
117
  **自动修复指令**:
118
118
  ```
119
- /developer 修复以下后端测试问题:
119
+ /ade 修复以下后端测试问题:
120
120
  [具体的错误信息和失败的测试用例]
121
121
  修复完成后重新运行测试验证。
122
122
  ```
123
123
 
124
124
  #### 2. 前端问题自动修复
125
125
 
126
- 当检测到以下前端问题时,**立即调用 `/developer`**:
126
+ 当检测到以下前端问题时,**立即调用 `/ade`**:
127
127
 
128
128
  - 前端单元测试失败
129
129
  - 前端覆盖率不达标 (< 90%)
@@ -134,15 +134,15 @@ npm run test:e2e -- --project=chromium
134
134
 
135
135
  **自动修复指令**:
136
136
  ```
137
- /developer 修复以下前端测试问题:
137
+ /ade 修复以下前端测试问题:
138
138
  [具体的错误信息和失败的测试用例]
139
139
  修复完成后重新运行测试验证。
140
140
  ```
141
141
 
142
142
  #### 3. 混合问题处理
143
143
 
144
- 如果前端和后端都有问题,**调用 `/developer` 同时处理**:
145
- 1. Developer 会先修复后端问题
144
+ 如果前端和后端都有问题,**调用 `/ade` 同时处理**:
145
+ 1. ADE 会先修复后端问题
146
146
  2. 然后修复前端问题
147
147
  3. 全部修复后重新执行完整测试
148
148
 
@@ -167,7 +167,7 @@ npm run test:e2e -- --project=chromium
167
167
 
168
168
  ✅ 验收标准:5/5 满足
169
169
 
170
- 下一步请 Git Engineer 进行预检测和提交。
170
+ 下一步自动调用 `/git-engineer` 进行预检测和提交。
171
171
  ```
172
172
 
173
173
  **测试失败(自动修复中)**:
@@ -183,9 +183,9 @@ npm run test:e2e -- --project=chromium
183
183
  - 后端覆盖率:85% (要求 >= 90%)
184
184
  - 未覆盖模块:user_service.go:45-60
185
185
 
186
- 🔄 自动修复:调用 /developer 修复后端问题...
186
+ 🔄 自动修复:调用 /ade 修复后端问题...
187
187
 
188
- [Developer 修复完成后自动重新测试]
188
+ [ADE 修复完成后自动重新测试]
189
189
  ```
190
190
 
191
191
  **测试失败(需人工介入)**:
@@ -445,14 +445,42 @@ lhci autorun
445
445
  - 覆盖率不达标
446
446
  - E2E 测试失败
447
447
  - 验收标准未满足
448
+ - 超过最大修复轮次需要人工介入
449
+
450
+ ```bash
451
+ # 检查钉钉配置
452
+ CONFIG_FILE=".claude/dingtalk-config.json"
453
+ if [ ! -f "$CONFIG_FILE" ]; then
454
+ CONFIG_FILE="$HOME/.claude/dingtalk-config.json"
455
+ fi
456
+
457
+ # 如果配置存在且启用,发送通知
458
+ if [ -f "$CONFIG_FILE" ]; then
459
+ WEBHOOK_URL=$(jq -r '.webhook_url' "$CONFIG_FILE")
460
+ ENABLED=$(jq -r '.enabled // true' "$CONFIG_FILE")
461
+
462
+ if [ "$ENABLED" = "true" ]; then
463
+ curl -X POST "$WEBHOOK_URL" \
464
+ -H 'Content-Type: application/json' \
465
+ -d '{
466
+ "msgtype": "markdown",
467
+ "markdown": {
468
+ "title": "SDD 测试失败",
469
+ "text": "❌ **SDD 测试失败**\n\n- **工作流**: [feature-name]\n- **失败阶段**: Tester\n- **失败详情**:\n - [具体失败项]\n- **建议操作**: 返回 ADE 修复\n\n🕐 **时间**: [timestamp]"
470
+ }
471
+ }'
472
+ fi
473
+ fi
474
+ ```
475
+
476
+ ### 通知消息格式
448
477
 
449
- 通知格式(JSON):
450
478
  ```json
451
479
  {
452
480
  "msgtype": "markdown",
453
481
  "markdown": {
454
- "title": "SDD 工作流失败",
455
- "text": "❌ **SDD 工作流失败**\n\n- **工作流**: user-login\n- **失败阶段**: Tester\n- **错误信息**: 3/10 测试用例失败\n- **建议操作**: 返回 Developer 修复\n\n🕐 **时间**: 2026-01-06 14:30:00"
482
+ "title": "SDD 测试失败",
483
+ "text": "❌ **SDD 测试失败**\n\n- **工作流**: user-login\n- **失败阶段**: Tester\n- **失败详情**:\n - 后端测试失败:2/12\n - 前端覆盖率不达标:85% (要求 >= 90%)\n- **建议操作**: 返回 ADE 修复\n\n🕐 **时间**: 2026-01-06 14:30:00"
456
484
  }
457
485
  }
458
486
  ```
@@ -482,12 +510,12 @@ lhci autorun
482
510
 
483
511
  1. **上游**: 接收 Code Reviewer 审查通过的代码
484
512
  2. **自动修复循环**:
485
- - 后端测试失败 → **自动调用** `/developer` 修复
486
- - 前端测试失败 → **自动调用** `/developer` 修复
487
- - Developer 修复后会重新提交给 Code Reviewer → 审查通过后流转回 Tester
513
+ - 后端测试失败 → **自动调用** `/ade` 修复
514
+ - 前端测试失败 → **自动调用** `/ade` 修复
515
+ - ADE 修复后会重新提交给 Code Reviewer → 审查通过后流转回 Tester
488
516
  - 循环直到全部通过或达到最大修复轮次(3轮)
489
517
  3. **下游**:
490
- - 测试通过 → 交给 Git Engineer
518
+ - 测试通过 → **自动调用** `/git-engineer` 进行预检测和提交
491
519
  - 超过 3 轮仍失败 → 发送钉钉通知,请求人工介入
492
520
  4. **并行**: 无
493
521
 
@@ -540,9 +568,9 @@ lhci autorun
540
568
  🔄 自动修复流程启动...
541
569
 
542
570
  ---
543
- 【自动调用 /developer 修复后端问题】
571
+ 【自动调用 /ade 修复后端问题】
544
572
 
545
- /developer 修复以下后端测试问题:
573
+ /ade 修复以下后端测试问题:
546
574
 
547
575
  1. 后端覆盖率不达标:85% (要求 >= 90%)
548
576
  - 未覆盖文件:user_service.go:45-60
@@ -553,7 +581,7 @@ lhci autorun
553
581
  请补充单元测试并确保覆盖率 >= 90%。
554
582
 
555
583
  ---
556
- [Developer 修复完成]
584
+ [ADE 修复完成]
557
585
 
558
586
  🔄 重新执行后端测试...
559
587
 
@@ -565,9 +593,9 @@ lhci autorun
565
593
  ✅ 后端测试通过!
566
594
 
567
595
  ---
568
- 【自动调用 /developer 修复前端问题】
596
+ 【自动调用 /ade 修复前端问题】
569
597
 
570
- /developer 修复以下前端测试问题:
598
+ /ade 修复以下前端测试问题:
571
599
 
572
600
  1. E2E 测试失败:用户登录成功后跳转到 Dashboard
573
601
  - 失败原因:登录成功后停留在 /login,未跳转到 /dashboard
@@ -577,7 +605,7 @@ lhci autorun
577
605
  请修复路由跳转逻辑。
578
606
 
579
607
  ---
580
- [Developer 修复完成]
608
+ [ADE 修复完成]
581
609
 
582
610
  🔄 重新执行前端测试...
583
611
 
@@ -597,5 +625,5 @@ lhci autorun
597
625
  - E2E 测试:3/3 通过
598
626
  - 验收标准:5/5 满足
599
627
 
600
- 下一步请 Git Engineer 进行预检测和提交。
628
+ 下一步自动调用 `/git-engineer` 进行预检测和提交。
601
629
  ```