ethan-skill 1.10.4 → 1.11.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/README.md +10 -10
- package/dist/cli/index.js +248 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/context/builder.d.ts +7 -0
- package/dist/context/builder.d.ts.map +1 -1
- package/dist/context/builder.js +31 -0
- package/dist/context/builder.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +212 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/skills/25-spec-proposal.d.ts +3 -0
- package/dist/skills/25-spec-proposal.d.ts.map +1 -0
- package/dist/skills/25-spec-proposal.js +157 -0
- package/dist/skills/25-spec-proposal.js.map +1 -0
- package/dist/skills/26-spec-review.d.ts +3 -0
- package/dist/skills/26-spec-review.d.ts.map +1 -0
- package/dist/skills/26-spec-review.js +126 -0
- package/dist/skills/26-spec-review.js.map +1 -0
- package/dist/skills/index.d.ts +2 -0
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +9 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/pipeline.d.ts.map +1 -1
- package/dist/skills/pipeline.js +12 -0
- package/dist/skills/pipeline.js.map +1 -1
- package/dist/spec/index.d.ts +57 -0
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +303 -0
- package/dist/spec/index.js.map +1 -0
- package/package.json +1 -1
- package/rules/claude-code/CLAUDE.md +246 -3
- package/rules/cline/.clinerules +216 -2
- package/rules/codebuddy/CODEBUDDY.md +236 -2
- package/rules/continue/.continuerules +216 -2
- package/rules/copilot/copilot-instructions.md +230 -2
- package/rules/cursor/.cursorrules +243 -2
- package/rules/cursor/smart-flow.mdc +243 -2
- package/rules/jetbrains/smart-flow.md +230 -2
- package/rules/lingma/smart-flow.md +235 -3
- package/rules/windsurf/.windsurf/rules/smart-flow.md +231 -3
- package/rules/zed/smart-flow.rules +213 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# Ethan v1.
|
|
2
|
-
# Generated: 2026-
|
|
1
|
+
# Ethan v1.11.0
|
|
2
|
+
# Generated: 2026-04-06T14:12:22.298Z
|
|
3
3
|
# Source: https://github.com/aokiz-ek/smart-flow-skill
|
|
4
4
|
|
|
5
5
|
Ethan(Continue)。当用户输入以下触发词时,按对应 Skill 的步骤执行。
|
|
@@ -36,6 +36,8 @@ Ethan(Continue)。当用户输入以下触发词时,按对应 Skill 的步
|
|
|
36
36
|
- **代码重构**: 代码重构 | refactoring | refactor | 重构
|
|
37
37
|
- **可观测性**: 可观测性 | observability | 监控 | monitoring
|
|
38
38
|
- **设计模式**: 设计模式 | design pattern | design patterns | 模式
|
|
39
|
+
- **Spec Proposal**: spec proposal | openspec proposal | 生成提案 | 变更提案
|
|
40
|
+
- **Spec Review(意图审查)**: spec review | intent review | 意图审查 | openspec review
|
|
39
41
|
|
|
40
42
|
---
|
|
41
43
|
|
|
@@ -3461,5 +3463,217 @@ export const db = createDbPool(); // 模块级单例,足够用
|
|
|
3461
3463
|
|
|
3462
3464
|
输出格式:Markdown 设计模式方案:场景分析 + 模式选型理由 + TypeScript 实现示例 + 反模式警示
|
|
3463
3465
|
|
|
3466
|
+
## Spec Proposal
|
|
3467
|
+
|
|
3468
|
+
触发:spec proposal | openspec proposal | 生成提案 | 变更提案
|
|
3469
|
+
说明:遵循 OpenSpec 规范,在编码前生成完整变更提案包(proposal + design + tasks + spec delta)
|
|
3470
|
+
|
|
3471
|
+
1. 扫描现有 Spec 上下文
|
|
3472
|
+
查阅 openspec/specs/ 目录,了解已有规范:
|
|
3473
|
+
|
|
3474
|
+
- 列出所有 capability 目录及其 spec.md 摘要
|
|
3475
|
+
- 识别本次变更涉及的 capability(可能跨多个)
|
|
3476
|
+
- 了解现有需求(Requirements)和场景(Scenarios)边界
|
|
3477
|
+
|
|
3478
|
+
**如无 openspec 目录**:询问用户需要创建哪些 capability 的 spec,用 `ethan spec init [capability]` 初始化。
|
|
3479
|
+
|
|
3480
|
+
**输出**:涉及的 spec 文件列表 + 关键现有需求摘要
|
|
3481
|
+
|
|
3482
|
+
2. 生成 proposal.md(变更提案)
|
|
3483
|
+
生成 openspec/changes/[change-id]/proposal.md:
|
|
3484
|
+
|
|
3485
|
+
```markdown
|
|
3486
|
+
# Change Proposal: [变更标题]
|
|
3487
|
+
|
|
3488
|
+
> Change ID: [yyyymmdd-xxxx]
|
|
3489
|
+
|
|
3490
|
+
## 变更描述
|
|
3491
|
+
[1-3 句话说明这个变更要做什么]
|
|
3492
|
+
|
|
3493
|
+
## 动机与背景
|
|
3494
|
+
[为什么需要这个变更,解决什么业务问题]
|
|
3495
|
+
|
|
3496
|
+
## 影响范围
|
|
3497
|
+
- 涉及的 Capability:[列表]
|
|
3498
|
+
- 影响的用户角色:[列表]
|
|
3499
|
+
- 影响的现有功能:[列表]
|
|
3500
|
+
|
|
3501
|
+
## 非功能性考量
|
|
3502
|
+
- 性能影响:[说明或无]
|
|
3503
|
+
- 安全考量:[说明或无]
|
|
3504
|
+
- 向后兼容性:[说明]
|
|
3505
|
+
```
|
|
3506
|
+
|
|
3507
|
+
3. 生成 design.md(技术方案)
|
|
3508
|
+
生成 openspec/changes/[change-id]/design.md:
|
|
3509
|
+
|
|
3510
|
+
```markdown
|
|
3511
|
+
# Technical Design: [变更标题]
|
|
3512
|
+
|
|
3513
|
+
## 架构决策
|
|
3514
|
+
[关键架构选择及原因,如技术选型、模式选择]
|
|
3515
|
+
|
|
3516
|
+
## 接口变更
|
|
3517
|
+
[新增/修改的 API 端点、组件 Props、函数签名]
|
|
3518
|
+
|
|
3519
|
+
## 数据模型变更
|
|
3520
|
+
[新增/修改的数据库表、数据结构]
|
|
3521
|
+
|
|
3522
|
+
## 实现方案
|
|
3523
|
+
[核心实现思路,关键算法或流程]
|
|
3524
|
+
|
|
3525
|
+
## 风险与缓解措施
|
|
3526
|
+
[技术风险点 → 对应缓解策略]
|
|
3527
|
+
```
|
|
3528
|
+
|
|
3529
|
+
4. 生成 tasks.md(实现任务)
|
|
3530
|
+
生成 openspec/changes/[change-id]/tasks.md,按阶段拆分原子任务:
|
|
3531
|
+
|
|
3532
|
+
```markdown
|
|
3533
|
+
# Implementation Tasks: [变更标题]
|
|
3534
|
+
|
|
3535
|
+
## Phase 1: 基础准备
|
|
3536
|
+
- [ ] Task 1.1: [任务描述] | 估算:S/M/L
|
|
3537
|
+
|
|
3538
|
+
## Phase 2: 核心实现
|
|
3539
|
+
- [ ] Task 2.1: [任务描述] | 估算:S/M/L
|
|
3540
|
+
|
|
3541
|
+
## Phase 3: 测试与验收
|
|
3542
|
+
- [ ] Task 3.1: 编写单元测试,覆盖所有场景 AC
|
|
3543
|
+
- [ ] Task 3.2: Spec Review — 验证代码与 spec delta 对齐
|
|
3544
|
+
|
|
3545
|
+
## 总估算
|
|
3546
|
+
S: [n] | M: [n] | L: [n]
|
|
3547
|
+
```
|
|
3548
|
+
|
|
3549
|
+
每个任务应足够原子,可独立完成和验证。
|
|
3550
|
+
|
|
3551
|
+
5. 生成 Spec Delta(需求变更)
|
|
3552
|
+
为每个涉及的 capability 生成需求变更文件(openspec/changes/[id]/specs/[capability].md):
|
|
3553
|
+
|
|
3554
|
+
```markdown
|
|
3555
|
+
# Spec Delta: [capability]
|
|
3556
|
+
|
|
3557
|
+
> 变更描述:[本次变更对此 capability 的影响]
|
|
3558
|
+
|
|
3559
|
+
## 新增需求
|
|
3560
|
+
|
|
3561
|
+
### REQ-XXX: [新需求名称]
|
|
3562
|
+
[需求描述]
|
|
3563
|
+
|
|
3564
|
+
## 修改需求
|
|
3565
|
+
|
|
3566
|
+
**变更前:**
|
|
3567
|
+
[原需求内容]
|
|
3568
|
+
|
|
3569
|
+
**变更后:**
|
|
3570
|
+
[新需求内容]
|
|
3571
|
+
|
|
3572
|
+
## 新增场景
|
|
3573
|
+
|
|
3574
|
+
GIVEN [前置条件]
|
|
3575
|
+
WHEN [用户操作]
|
|
3576
|
+
THEN [预期结果]
|
|
3577
|
+
```
|
|
3578
|
+
|
|
3579
|
+
**原则**:Spec delta 只记录"变化",不重复现有 spec 的未变更内容。
|
|
3580
|
+
|
|
3581
|
+
输出格式:OpenSpec 变更提案包(保存到 openspec/changes/[change-id]/):
|
|
3582
|
+
- proposal.md(变更提案)
|
|
3583
|
+
- design.md(技术方案)
|
|
3584
|
+
- tasks.md(分阶段任务)
|
|
3585
|
+
- specs/[capability].md(spec delta,每个涉及的 capability 一个文件)
|
|
3586
|
+
|
|
3587
|
+
## Spec Review(意图审查)
|
|
3588
|
+
|
|
3589
|
+
触发:spec review | intent review | 意图审查 | openspec review
|
|
3590
|
+
说明:基于 OpenSpec,对比 spec delta 与代码实现,执行意图级 Review(而非逐行代码审查)
|
|
3591
|
+
|
|
3592
|
+
1. 加载 Spec 上下文
|
|
3593
|
+
读取本次变更相关的 OpenSpec 文档:
|
|
3594
|
+
|
|
3595
|
+
1. 定位 openspec/changes/[change-id]/ 目录(取最新的或由用户指定)
|
|
3596
|
+
2. 读取 proposal.md(了解变更目标和意图)
|
|
3597
|
+
3. 读取 specs/[capability].md(逐个 spec delta)
|
|
3598
|
+
4. 读取代码 diff(git diff HEAD 或 PR diff)
|
|
3599
|
+
|
|
3600
|
+
**目标**:建立"期望变更"(spec delta)和"实际变更"(代码)的对照关系。
|
|
3601
|
+
|
|
3602
|
+
如无 change proposal,说明本次改动未经过 spec 规范流程,建议先运行 `ethan spec proposal`。
|
|
3603
|
+
|
|
3604
|
+
2. 意图对齐检查
|
|
3605
|
+
逐条检查每个 spec delta 条目是否在代码中得到正确实现:
|
|
3606
|
+
|
|
3607
|
+
**对齐矩阵模板**
|
|
3608
|
+
|
|
3609
|
+
| Spec 需求/场景 | 对应代码位置 | 对齐状态 | 说明 |
|
|
3610
|
+
|--------------|------------|---------|------|
|
|
3611
|
+
| REQ-XXX: [需求名] | [文件:行号] | ✅ | 完全实现 |
|
|
3612
|
+
| Scenario: [场景名] | [文件:行号] | ⚠️ | 边界条件缺失 |
|
|
3613
|
+
| REQ-YYY: [需求名] | — | ❌ | 未找到实现 |
|
|
3614
|
+
| [代码功能] | [文件:行号] | 🔄 | 超出 spec 范围 |
|
|
3615
|
+
|
|
3616
|
+
**状态说明**
|
|
3617
|
+
- ✅ 完全实现:代码与 spec 意图一致,GIVEN/WHEN/THEN 均覆盖
|
|
3618
|
+
- ⚠️ 部分实现:核心逻辑存在但细节缺失(如缺少异常处理)
|
|
3619
|
+
- ❌ 未实现:spec 要求的功能在代码中找不到
|
|
3620
|
+
- 🔄 超范围:代码实现了 spec 未定义的内容
|
|
3621
|
+
|
|
3622
|
+
3. 偏差识别与分级
|
|
3623
|
+
识别三类关键偏差:
|
|
3624
|
+
|
|
3625
|
+
**🔴 意图偏差(Critical)—— 必须修复才能合并**
|
|
3626
|
+
代码实现与 spec 意图相反或严重不符,例如:
|
|
3627
|
+
- 场景要求"3次失败后锁定账号",实际实现了"无限重试"
|
|
3628
|
+
- 权限检查逻辑与 GIVEN/WHEN/THEN 定义的场景不匹配
|
|
3629
|
+
- 数据模型与 spec delta 中定义的结构不一致
|
|
3630
|
+
|
|
3631
|
+
**🟡 遗漏需求(Warning)—— 强烈建议补充**
|
|
3632
|
+
spec 中定义的场景或需求在代码中未体现:
|
|
3633
|
+
- 异常流程未处理(spec 中有 THEN [错误情况] 但代码未实现)
|
|
3634
|
+
- 边界条件未覆盖(如空值、超长输入、并发)
|
|
3635
|
+
- 非功能性需求未落实(如性能、安全要求)
|
|
3636
|
+
|
|
3637
|
+
**💡 超范围实现(Info)—— 确认并按需更新 spec**
|
|
3638
|
+
代码实现了 spec 没有定义的功能:
|
|
3639
|
+
- 可能是合理的技术实现细节(不需要更新 spec)
|
|
3640
|
+
- 也可能是功能范围蔓延(需补充 spec delta 或回退)
|
|
3641
|
+
|
|
3642
|
+
4. 输出 Spec Review 报告
|
|
3643
|
+
生成结构化的意图审查报告:
|
|
3644
|
+
|
|
3645
|
+
```markdown
|
|
3646
|
+
# Spec Review Report
|
|
3647
|
+
|
|
3648
|
+
## 变更提案摘要
|
|
3649
|
+
- Change ID: [id]
|
|
3650
|
+
- 变更目标:[proposal.md 核心摘要]
|
|
3651
|
+
- 涉及 Capability:[列表]
|
|
3652
|
+
|
|
3653
|
+
## 意图对齐矩阵
|
|
3654
|
+
[对照表格]
|
|
3655
|
+
|
|
3656
|
+
## 关键发现
|
|
3657
|
+
|
|
3658
|
+
### 🔴 意图偏差([n] 项)
|
|
3659
|
+
1. **[偏差描述]**
|
|
3660
|
+
- Spec 要求:[spec 原文]
|
|
3661
|
+
- 实际实现:[代码位置] [实际行为]
|
|
3662
|
+
- 建议:[修复方向]
|
|
3663
|
+
|
|
3664
|
+
### 🟡 遗漏需求([n] 项)
|
|
3665
|
+
[列表]
|
|
3666
|
+
|
|
3667
|
+
### 💡 超范围实现([n] 项)
|
|
3668
|
+
[列表]
|
|
3669
|
+
|
|
3670
|
+
## 审查结论
|
|
3671
|
+
- [ ] 意图完全对齐,可以合并
|
|
3672
|
+
- [ ] 需要修复意图偏差后重新审查
|
|
3673
|
+
- [ ] 需要更新 spec(超范围实现合理)
|
|
3674
|
+
```
|
|
3675
|
+
|
|
3676
|
+
输出格式:Spec Review 报告:意图对齐矩阵 + 三级偏差列表(🔴意图偏差 / 🟡遗漏需求 / 💡超范围)+ 审查结论
|
|
3677
|
+
|
|
3464
3678
|
---
|
|
3465
3679
|
规则:严格按步骤执行,不跳步,输出遵循各 Skill 的格式模板。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Ethan - Copilot Instructions (v1.
|
|
1
|
+
# Ethan - Copilot Instructions (v1.11.0)
|
|
2
2
|
|
|
3
|
-
> Auto-generated from src/skills/ | 2026-
|
|
3
|
+
> Auto-generated from src/skills/ | 2026-04-06T14:12:22.298Z
|
|
4
4
|
> Do not edit manually.
|
|
5
5
|
|
|
6
6
|
## IMPORTANT: Skill Activation Rules
|
|
@@ -3666,3 +3666,231 @@ You are equipped with the **Ethan AI Workflow Assistant**. Follow these rules st
|
|
|
3666
3666
|
- TypeScript 的类型系统让很多模式更安全,善用 interface + generic
|
|
3667
3667
|
- 函数式替代方案通常比类更简洁:Strategy → 高阶函数,Observer → EventEmitter
|
|
3668
3668
|
- 重构引入模式时,必须有测试覆盖,见 refactoring Skill
|
|
3669
|
+
|
|
3670
|
+
### 25. Spec Proposal (spec_proposal)
|
|
3671
|
+
|
|
3672
|
+
**Triggers**: `spec proposal`, `openspec proposal`, `生成提案`, `变更提案`, `spec 提案`, `写 proposal`, `@ethan spec proposal`, `/spec-proposal`
|
|
3673
|
+
|
|
3674
|
+
**Goal**: 遵循 OpenSpec 规范,在编码前生成完整变更提案包(proposal + design + tasks + spec delta)
|
|
3675
|
+
|
|
3676
|
+
**Steps**:
|
|
3677
|
+
|
|
3678
|
+
1. **扫描现有 Spec 上下文**:
|
|
3679
|
+
查阅 openspec/specs/ 目录,了解已有规范:
|
|
3680
|
+
|
|
3681
|
+
- 列出所有 capability 目录及其 spec.md 摘要
|
|
3682
|
+
- 识别本次变更涉及的 capability(可能跨多个)
|
|
3683
|
+
- 了解现有需求(Requirements)和场景(Scenarios)边界
|
|
3684
|
+
|
|
3685
|
+
**如无 openspec 目录**:询问用户需要创建哪些 capability 的 spec,用 `ethan spec init [capability]` 初始化。
|
|
3686
|
+
|
|
3687
|
+
**输出**:涉及的 spec 文件列表 + 关键现有需求摘要
|
|
3688
|
+
|
|
3689
|
+
2. **生成 proposal.md(变更提案)**:
|
|
3690
|
+
生成 openspec/changes/[change-id]/proposal.md:
|
|
3691
|
+
|
|
3692
|
+
```markdown
|
|
3693
|
+
# Change Proposal: [变更标题]
|
|
3694
|
+
|
|
3695
|
+
> Change ID: [yyyymmdd-xxxx]
|
|
3696
|
+
|
|
3697
|
+
## 变更描述
|
|
3698
|
+
[1-3 句话说明这个变更要做什么]
|
|
3699
|
+
|
|
3700
|
+
## 动机与背景
|
|
3701
|
+
[为什么需要这个变更,解决什么业务问题]
|
|
3702
|
+
|
|
3703
|
+
## 影响范围
|
|
3704
|
+
- 涉及的 Capability:[列表]
|
|
3705
|
+
- 影响的用户角色:[列表]
|
|
3706
|
+
- 影响的现有功能:[列表]
|
|
3707
|
+
|
|
3708
|
+
## 非功能性考量
|
|
3709
|
+
- 性能影响:[说明或无]
|
|
3710
|
+
- 安全考量:[说明或无]
|
|
3711
|
+
- 向后兼容性:[说明]
|
|
3712
|
+
```
|
|
3713
|
+
|
|
3714
|
+
3. **生成 design.md(技术方案)**:
|
|
3715
|
+
生成 openspec/changes/[change-id]/design.md:
|
|
3716
|
+
|
|
3717
|
+
```markdown
|
|
3718
|
+
# Technical Design: [变更标题]
|
|
3719
|
+
|
|
3720
|
+
## 架构决策
|
|
3721
|
+
[关键架构选择及原因,如技术选型、模式选择]
|
|
3722
|
+
|
|
3723
|
+
## 接口变更
|
|
3724
|
+
[新增/修改的 API 端点、组件 Props、函数签名]
|
|
3725
|
+
|
|
3726
|
+
## 数据模型变更
|
|
3727
|
+
[新增/修改的数据库表、数据结构]
|
|
3728
|
+
|
|
3729
|
+
## 实现方案
|
|
3730
|
+
[核心实现思路,关键算法或流程]
|
|
3731
|
+
|
|
3732
|
+
## 风险与缓解措施
|
|
3733
|
+
[技术风险点 → 对应缓解策略]
|
|
3734
|
+
```
|
|
3735
|
+
|
|
3736
|
+
4. **生成 tasks.md(实现任务)**:
|
|
3737
|
+
生成 openspec/changes/[change-id]/tasks.md,按阶段拆分原子任务:
|
|
3738
|
+
|
|
3739
|
+
```markdown
|
|
3740
|
+
# Implementation Tasks: [变更标题]
|
|
3741
|
+
|
|
3742
|
+
## Phase 1: 基础准备
|
|
3743
|
+
- [ ] Task 1.1: [任务描述] | 估算:S/M/L
|
|
3744
|
+
|
|
3745
|
+
## Phase 2: 核心实现
|
|
3746
|
+
- [ ] Task 2.1: [任务描述] | 估算:S/M/L
|
|
3747
|
+
|
|
3748
|
+
## Phase 3: 测试与验收
|
|
3749
|
+
- [ ] Task 3.1: 编写单元测试,覆盖所有场景 AC
|
|
3750
|
+
- [ ] Task 3.2: Spec Review — 验证代码与 spec delta 对齐
|
|
3751
|
+
|
|
3752
|
+
## 总估算
|
|
3753
|
+
S: [n] | M: [n] | L: [n]
|
|
3754
|
+
```
|
|
3755
|
+
|
|
3756
|
+
每个任务应足够原子,可独立完成和验证。
|
|
3757
|
+
|
|
3758
|
+
5. **生成 Spec Delta(需求变更)**:
|
|
3759
|
+
为每个涉及的 capability 生成需求变更文件(openspec/changes/[id]/specs/[capability].md):
|
|
3760
|
+
|
|
3761
|
+
```markdown
|
|
3762
|
+
# Spec Delta: [capability]
|
|
3763
|
+
|
|
3764
|
+
> 变更描述:[本次变更对此 capability 的影响]
|
|
3765
|
+
|
|
3766
|
+
## 新增需求
|
|
3767
|
+
|
|
3768
|
+
### REQ-XXX: [新需求名称]
|
|
3769
|
+
[需求描述]
|
|
3770
|
+
|
|
3771
|
+
## 修改需求
|
|
3772
|
+
|
|
3773
|
+
**变更前:**
|
|
3774
|
+
[原需求内容]
|
|
3775
|
+
|
|
3776
|
+
**变更后:**
|
|
3777
|
+
[新需求内容]
|
|
3778
|
+
|
|
3779
|
+
## 新增场景
|
|
3780
|
+
|
|
3781
|
+
GIVEN [前置条件]
|
|
3782
|
+
WHEN [用户操作]
|
|
3783
|
+
THEN [预期结果]
|
|
3784
|
+
```
|
|
3785
|
+
|
|
3786
|
+
**原则**:Spec delta 只记录"变化",不重复现有 spec 的未变更内容。
|
|
3787
|
+
|
|
3788
|
+
**Output**: OpenSpec 变更提案包(保存到 openspec/changes/[change-id]/):
|
|
3789
|
+
- proposal.md(变更提案)
|
|
3790
|
+
- design.md(技术方案)
|
|
3791
|
+
- tasks.md(分阶段任务)
|
|
3792
|
+
- specs/[capability].md(spec delta,每个涉及的 capability 一个文件)
|
|
3793
|
+
**Notes**:
|
|
3794
|
+
- 提案应在编写任何代码之前生成,让团队先对变更意图达成共识
|
|
3795
|
+
- Spec delta 只记录"变化",不重复现有 spec 内容
|
|
3796
|
+
- tasks.md 的每个任务应足够原子,可独立完成和验证
|
|
3797
|
+
- 如项目尚无 openspec 目录,先运行 ethan spec init [capability] 初始化
|
|
3798
|
+
|
|
3799
|
+
### 26. Spec Review(意图审查) (spec_review)
|
|
3800
|
+
|
|
3801
|
+
**Triggers**: `spec review`, `intent review`, `意图审查`, `openspec review`, `spec 审查`, `需求对齐检查`, `@ethan spec review`, `/spec-review`
|
|
3802
|
+
|
|
3803
|
+
**Goal**: 基于 OpenSpec,对比 spec delta 与代码实现,执行意图级 Review(而非逐行代码审查)
|
|
3804
|
+
|
|
3805
|
+
**Steps**:
|
|
3806
|
+
|
|
3807
|
+
1. **加载 Spec 上下文**:
|
|
3808
|
+
读取本次变更相关的 OpenSpec 文档:
|
|
3809
|
+
|
|
3810
|
+
1. 定位 openspec/changes/[change-id]/ 目录(取最新的或由用户指定)
|
|
3811
|
+
2. 读取 proposal.md(了解变更目标和意图)
|
|
3812
|
+
3. 读取 specs/[capability].md(逐个 spec delta)
|
|
3813
|
+
4. 读取代码 diff(git diff HEAD 或 PR diff)
|
|
3814
|
+
|
|
3815
|
+
**目标**:建立"期望变更"(spec delta)和"实际变更"(代码)的对照关系。
|
|
3816
|
+
|
|
3817
|
+
如无 change proposal,说明本次改动未经过 spec 规范流程,建议先运行 `ethan spec proposal`。
|
|
3818
|
+
|
|
3819
|
+
2. **意图对齐检查**:
|
|
3820
|
+
逐条检查每个 spec delta 条目是否在代码中得到正确实现:
|
|
3821
|
+
|
|
3822
|
+
**对齐矩阵模板**
|
|
3823
|
+
|
|
3824
|
+
| Spec 需求/场景 | 对应代码位置 | 对齐状态 | 说明 |
|
|
3825
|
+
|--------------|------------|---------|------|
|
|
3826
|
+
| REQ-XXX: [需求名] | [文件:行号] | ✅ | 完全实现 |
|
|
3827
|
+
| Scenario: [场景名] | [文件:行号] | ⚠️ | 边界条件缺失 |
|
|
3828
|
+
| REQ-YYY: [需求名] | — | ❌ | 未找到实现 |
|
|
3829
|
+
| [代码功能] | [文件:行号] | 🔄 | 超出 spec 范围 |
|
|
3830
|
+
|
|
3831
|
+
**状态说明**
|
|
3832
|
+
- ✅ 完全实现:代码与 spec 意图一致,GIVEN/WHEN/THEN 均覆盖
|
|
3833
|
+
- ⚠️ 部分实现:核心逻辑存在但细节缺失(如缺少异常处理)
|
|
3834
|
+
- ❌ 未实现:spec 要求的功能在代码中找不到
|
|
3835
|
+
- 🔄 超范围:代码实现了 spec 未定义的内容
|
|
3836
|
+
|
|
3837
|
+
3. **偏差识别与分级**:
|
|
3838
|
+
识别三类关键偏差:
|
|
3839
|
+
|
|
3840
|
+
**🔴 意图偏差(Critical)—— 必须修复才能合并**
|
|
3841
|
+
代码实现与 spec 意图相反或严重不符,例如:
|
|
3842
|
+
- 场景要求"3次失败后锁定账号",实际实现了"无限重试"
|
|
3843
|
+
- 权限检查逻辑与 GIVEN/WHEN/THEN 定义的场景不匹配
|
|
3844
|
+
- 数据模型与 spec delta 中定义的结构不一致
|
|
3845
|
+
|
|
3846
|
+
**🟡 遗漏需求(Warning)—— 强烈建议补充**
|
|
3847
|
+
spec 中定义的场景或需求在代码中未体现:
|
|
3848
|
+
- 异常流程未处理(spec 中有 THEN [错误情况] 但代码未实现)
|
|
3849
|
+
- 边界条件未覆盖(如空值、超长输入、并发)
|
|
3850
|
+
- 非功能性需求未落实(如性能、安全要求)
|
|
3851
|
+
|
|
3852
|
+
**💡 超范围实现(Info)—— 确认并按需更新 spec**
|
|
3853
|
+
代码实现了 spec 没有定义的功能:
|
|
3854
|
+
- 可能是合理的技术实现细节(不需要更新 spec)
|
|
3855
|
+
- 也可能是功能范围蔓延(需补充 spec delta 或回退)
|
|
3856
|
+
|
|
3857
|
+
4. **输出 Spec Review 报告**:
|
|
3858
|
+
生成结构化的意图审查报告:
|
|
3859
|
+
|
|
3860
|
+
```markdown
|
|
3861
|
+
# Spec Review Report
|
|
3862
|
+
|
|
3863
|
+
## 变更提案摘要
|
|
3864
|
+
- Change ID: [id]
|
|
3865
|
+
- 变更目标:[proposal.md 核心摘要]
|
|
3866
|
+
- 涉及 Capability:[列表]
|
|
3867
|
+
|
|
3868
|
+
## 意图对齐矩阵
|
|
3869
|
+
[对照表格]
|
|
3870
|
+
|
|
3871
|
+
## 关键发现
|
|
3872
|
+
|
|
3873
|
+
### 🔴 意图偏差([n] 项)
|
|
3874
|
+
1. **[偏差描述]**
|
|
3875
|
+
- Spec 要求:[spec 原文]
|
|
3876
|
+
- 实际实现:[代码位置] [实际行为]
|
|
3877
|
+
- 建议:[修复方向]
|
|
3878
|
+
|
|
3879
|
+
### 🟡 遗漏需求([n] 项)
|
|
3880
|
+
[列表]
|
|
3881
|
+
|
|
3882
|
+
### 💡 超范围实现([n] 项)
|
|
3883
|
+
[列表]
|
|
3884
|
+
|
|
3885
|
+
## 审查结论
|
|
3886
|
+
- [ ] 意图完全对齐,可以合并
|
|
3887
|
+
- [ ] 需要修复意图偏差后重新审查
|
|
3888
|
+
- [ ] 需要更新 spec(超范围实现合理)
|
|
3889
|
+
```
|
|
3890
|
+
|
|
3891
|
+
**Output**: Spec Review 报告:意图对齐矩阵 + 三级偏差列表(🔴意图偏差 / 🟡遗漏需求 / 💡超范围)+ 审查结论
|
|
3892
|
+
**Notes**:
|
|
3893
|
+
- Spec Review 不替代 Code Review,两者互补:Spec Review 审意图,Code Review 审实现质量
|
|
3894
|
+
- 如果没有对应的 spec delta,说明该改动未经过规范的 spec 流程,需补充
|
|
3895
|
+
- 超范围实现不一定是问题,但必须显式确认并按需更新 spec
|
|
3896
|
+
- GIVEN/WHEN/THEN 场景是最好的对齐锚点,每个场景都应在代码中有对应的实现
|