@zhuan-ai/zhuanspec 2.11.3 → 2.11.6

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": "@zhuan-ai/zhuanspec",
3
- "version": "2.11.3",
3
+ "version": "2.11.6",
4
4
  "description": "AI-native system for spec-driven development",
5
5
  "keywords": [
6
6
  "zhuanspec",
@@ -39,6 +39,26 @@
39
39
  "!dist/**/__tests__",
40
40
  "!dist/**/*.map"
41
41
  ],
42
+ "scripts": {
43
+ "lint": "eslint src/",
44
+ "build": "node build.js",
45
+ "dev": "tsc --watch",
46
+ "dev:cli": "pnpm build && node bin/zhuanspec.js",
47
+ "test": "vitest run",
48
+ "test:watch": "vitest",
49
+ "test:ui": "vitest --ui",
50
+ "test:coverage": "vitest --coverage",
51
+ "test:postinstall": "node scripts/postinstall.js",
52
+ "prepare": "npm run build",
53
+ "prepublishOnly": "npm run build",
54
+ "postinstall": "node scripts/postinstall.js",
55
+ "check:pack-version": "node scripts/pack-version-check.mjs",
56
+ "diagnose:cursor": "node scripts/diagnose-cursor-commands.js",
57
+ "release": "pnpm run release:ci",
58
+ "release:ci": "pnpm run check:pack-version && pnpm exec changeset publish",
59
+ "release:local": "pnpm exec changeset version && pnpm run check:pack-version && pnpm exec changeset publish",
60
+ "changeset": "changeset"
61
+ },
42
62
  "engines": {
43
63
  "node": ">=20.19.0"
44
64
  },
@@ -60,23 +80,5 @@
60
80
  "ora": "^8.2.0",
61
81
  "yaml": "^2.8.2",
62
82
  "zod": "^4.0.17"
63
- },
64
- "scripts": {
65
- "lint": "eslint src/",
66
- "build": "node build.js",
67
- "dev": "tsc --watch",
68
- "dev:cli": "pnpm build && node bin/zhuanspec.js",
69
- "test": "vitest run",
70
- "test:watch": "vitest",
71
- "test:ui": "vitest --ui",
72
- "test:coverage": "vitest --coverage",
73
- "test:postinstall": "node scripts/postinstall.js",
74
- "postinstall": "node scripts/postinstall.js",
75
- "check:pack-version": "node scripts/pack-version-check.mjs",
76
- "diagnose:cursor": "node scripts/diagnose-cursor-commands.js",
77
- "release": "pnpm run release:ci",
78
- "release:ci": "pnpm run check:pack-version && pnpm exec changeset publish",
79
- "release:local": "pnpm exec changeset version && pnpm run check:pack-version && pnpm exec changeset publish",
80
- "changeset": "changeset"
81
83
  }
82
- }
84
+ }
@@ -169,9 +169,17 @@ artifacts:
169
169
  instruction: |
170
170
  创建分解实施工作的任务列表。
171
171
 
172
+ ⚠️ 任务格式强制要求:
173
+ - 所有任务项必须使用 GitHub Flavored Markdown 复选框格式
174
+ - 待完成:- [ ] N.M 描述 @skill:xxx
175
+ - 已完成:- [x] N.M 描述 @skill:xxx
176
+ - 严禁使用 #### Task N.M: 或 #### T1: 标题格式
177
+ - 严禁使用 ✅ emoji 标记完成,必须用 [x] 复选框
178
+ - validate --strict 会对非复选框格式直接报 ERROR 并阻断流程
179
+
172
180
  指导原则:
173
- - 在 ## 编号标题下对相关任务进行分组
174
- - 每个任务是一个复选框:- [ ] X.Y 任务描述
181
+ - 任务必须组织在 Wave 标题下(### Wave 1, ### Wave 2 等)
182
+ - 每个任务按类型使用固定模板(新增文件/修改文件),填满所有字段
175
183
  - 任务应该足够小,可以在一次会话中完成
176
184
  - 按依赖关系排序任务(必须先做什么?)
177
185
 
@@ -48,12 +48,96 @@ Answer: 是,每页20条
48
48
  - 数据依赖:后续任务使用前序任务创建的表/接口/类时,必须标注依赖
49
49
  - 独立任务:无数据或逻辑依赖的任务不要添加 @depends,以最大化并行度
50
50
 
51
+ @test-case 标注指南(可选):
52
+ 1. 仅当提供测试 case 时添加此标注
53
+ 2. 格式:@test-case:TC-001 或 @test-case:TC-001,TC-002(多个用逗号分隔)
54
+ 3. 确保引用的 TC-XXX 在 test-cases.md 中存在
55
+ 4. 任务应覆盖对应测试 case 的所有验收点
56
+
57
+ @ref 标注指南:
58
+ 1. 指向技术方案文档的具体章节(路径为实际定位到的技术方案文件相对路径)
59
+ 2. 格式:@ref:<tech-spec路径>#章节编号-章节名称
60
+ 3. 示例:@ref:techDesign/tech-spec.md#3.1-新建客户接口 或 @ref:/path/to/external-tech-spec.md#3.1-新建客户接口
61
+ 4. 确保引用的章节在技术方案文档中存在
62
+
51
63
  示例:
52
64
  - [ ] 1.1 新增枚举值 @skill:kf-backend-coding-standards
53
65
  - [ ] 1.2 创建数据库表 @skill:java-db-schema-standards
54
66
  - [ ] 1.3 编写 DAO 层代码 @skill:java-dao-standards @depends:1.2
55
67
  -->
56
68
 
69
+ ## 任务格式说明
70
+
71
+ ⚠️ **所有任务项必须使用 GitHub Flavored Markdown 复选框格式**:
72
+ - 待完成:`- [ ] N.M 描述`
73
+ - 已完成:`- [x] N.M 描述`
74
+ - **严禁使用** `#### Task N.M:` 或 `#### T1:` 标题格式
75
+ - **严禁使用** ✅ emoji 标记完成,必须用 `[x]`
76
+
77
+ 每个任务按类型使用对应的固定模板,必须填满所有字段:
78
+
79
+ ### 类型 A:新增文件
80
+
81
+ - [ ] N.M [描述] @skill:xxx @ref:xxx
82
+ - **文件**: `完整相对路径`(新增)
83
+ - **内容**:
84
+ - 类定义: [类名、继承/实现关系]
85
+ - 依赖注入: [注入的 Bean/Service 列表]
86
+ - 核心方法: [方法签名 → 返回类型](列出全部 public 方法)
87
+ - 关键逻辑: [核心业务流程,如:校验 → 加锁 → 写库 → 同步ES]
88
+ - 字段/配置: [若为 Entity/DTO/配置类,列出全部字段及类型]
89
+ - **验证**: [具体的输入输出断言,含正常和异常场景]
90
+
91
+ 示例:
92
+ - [ ] 5.1 创建 CustomerDomainService @skill:java-scf-rpc-usage-skill
93
+ @ref:techDesign/tech-spec.md#3.1-新建客户
94
+ - **文件**: `domain_hub_server/src/main/java/com/zz/domain/hub/domain/CustomerDomainService.java`(新增)
95
+ - **内容**:
96
+ - 类定义: `@Service public class CustomerDomainService`
97
+ - 依赖注入: CustomerMapper, CustomerEmployeeMapper, EsSyncService, RedissonClient
98
+ - 核心方法: createCustomer(CreateCustomerRequest, Long tenantId) → Long
99
+ - 关键逻辑: customerName 必填校验 → selectByPhoneAndTenant 手机号唯一检查 → 分布式锁 dh:customer:merge:{phone} → insert t_customer → 异步 ES 同步
100
+ - 异常处理: 手机号重复抛 BizException(ErrorCode.PHONE_DUPLICATE)
101
+ - **验证**: 手机号重复返回 PHONE_DUPLICATE 错误码;正常创建返回 customerId > 0;无锁时并发创建只成功一个
102
+
103
+ ### 类型 B:修改文件
104
+
105
+ - [ ] N.M [描述] @skill:xxx @ref:xxx
106
+ - **文件**: `完整相对路径`(总行数)
107
+ - **修改位置**: L行号范围 `函数名/类名` 之后/之内
108
+ - **内容**: [具体改什么:新增代码逻辑/修改现有逻辑/删除代码,描述修改方式]
109
+ - **验证**: [修改后的预期行为,含回归验证]
110
+
111
+ 示例:
112
+ - [ ] 1.1 在 review 命令中增加任务完成度硬门禁 @skill:none
113
+ @ref:techDesign/tech-spec.md#7.1-任务完成度检查
114
+ - **文件**: `src/commands/review.ts`(138行)
115
+ - **修改位置**: L32-38 `runReview()` 函数内,现有校验逻辑之后
116
+ - **内容**: 新增任务完成度检查 — 读取 tasks.md 匹配 `- [ ]` 统计未完成任务数,>0 时输出未完成列表并阻断 review 流程,支持 `--force` 参数跳过检查
117
+ - **验证**: 有未完成任务时阻断并输出列表;--force 跳过;全部完成时正常通过
118
+
119
+ ## 任务粒度原则
120
+ - 每个任务对应一个类或一个接口方法的实现
121
+ - 单个任务 AI 执行时间不超过 30 分钟
122
+ - 超过则需拆分为多个子任务
123
+ - **禁止模糊描述**:不允许"创建XXX类"不带文件路径、"实现YYY方法"不带方法签名和关键逻辑
124
+
125
+ ## Coverage Checklist
126
+
127
+ <!-- 当存在技术方案(techDesign/tech-spec.md/ 通过--tech-spec创建的提案)时,必须填写此表 -->
128
+ <!-- 列出技术方案中所有维度与任务的映射关系,确保覆盖率 >= 95% -->
129
+
130
+ | 维度 | 技术方案数量 | 提案任务覆盖 | 覆盖率 |
131
+ |------|-------------|-------------|-------|
132
+ | DB 表 | <!-- N张 --> | <!-- T编号范围 --> | <!-- 100% --> |
133
+ | ES 索引 | <!-- N个 --> | <!-- T编号范围 --> | <!-- 100% --> |
134
+ | Entity 类 | <!-- N个 --> | <!-- T编号范围 --> | <!-- 100% --> |
135
+ | Mapper | <!-- N个 --> | <!-- T编号范围 --> | <!-- 100% --> |
136
+ | SCF接口方法 | <!-- N个 --> | <!-- T编号范围 --> | <!-- 100% --> |
137
+ | DTO 类 | <!-- N个 --> | <!-- T编号范围 --> | <!-- 100% --> |
138
+ | 配置项 | <!-- N个 --> | <!-- T编号范围 --> | <!-- 100% --> |
139
+ | 前端组件 | <!-- N个 --> | <!-- T编号范围 --> | <!-- 100% --> |
140
+
57
141
  ### Wave 1
58
142
 
59
143
  <!-- Wave 1: Tasks with no dependencies -->
@@ -85,9 +169,38 @@ Wave assignment logic:
85
169
  - Wave 2: @depends:1.x → depends on Wave 1
86
170
  - Wave 3: @depends:2.x → depends on Wave 2
87
171
 
88
- ## Quality Gates
89
-
90
- - [ ] Apply 全部任务完成后自动执行一次 `zhuanspec review <change-id>`(如失败则手动补执行)
172
+ ## File Conflict Analysis
173
+
174
+ <!-- 当多个任务修改同一文件时,在此声明冲突并指定隔离策略 -->
175
+ <!-- 隔离策略:parallel(不同区域可并行)/ serial(同区域必须串行)-->
176
+ <!-- 此表帮助编排 Agent 做更精确的并行化决策,补充自动检测无法覆盖的"同文件不同区域可并行"场景 -->
177
+ <!-- 无文件冲突时章节可省略,或将表格行填写 N/A -->
178
+
179
+ | 文件 | 涉及任务 | 各任务修改区域 | 隔离策略 |
180
+ |------|---------|-------------|---------|
181
+ | <!-- 相对路径 --> | <!-- T1.x, T2.y --> | <!-- T1.x: 函数名/行范围; T2.y: 函数名/行范围 --> | <!-- parallel / serial --> |
182
+
183
+ ## Test Case Coverage
184
+
185
+ <!-- ⚠️ CHECKPOINT [TEST-CASE-COVERAGE]: Each task should reference related test cases (recommended) -->
186
+ <!-- Use @test-case:TC-XXX to link tasks to test cases -->
187
+ <!-- 表格必须包含四列:Task、测试 Case ID、测试 Case 文件路径、覆盖场景 -->
188
+
189
+ | Task | 测试 Case ID | 测试 Case 文件路径 | 覆盖场景 |
190
+ |------|-------------|-------------------|----------|
191
+ | <!-- T1 --> | <!-- TC-001 --> | <!-- BIC 路径层级,如:退货退款 > 创建售后 > 三选一页面 > 组装机弹窗 --> | <!-- 描述覆盖的场景 --> |
192
+
193
+ <!--
194
+ 测试 case 设计指南:
195
+ 1. 为每个 Requirement 设计至少一个正向场景测试 case
196
+ 2. 为关键业务逻辑设计异常场景测试 case
197
+ 3. 测试 case 应与 Requirement 的 Scenario 对应
198
+ 4. 测试 case ID 格式:TC-XXX(三位数字)
199
+ 5. 测试 case 详情记录在 test-cases.md 文件中
200
+ 6. "测试 Case 文件路径" 列填写 BIC 路径层级格式:
201
+ - 格式:功能模块 > 子模块 > 页面 > 操作 > 结果
202
+ - 示例:退货退款 > 创建售后 > 三选一页面 > 组装机 > 退货退款 > 点击后,显示组装机弹窗
203
+ -->
91
204
 
92
205
  ## Workflow Diagram
93
206
 
@@ -98,4 +211,4 @@ Wave assignment logic:
98
211
  flowchart TD
99
212
  W1[Wave 1] --> W2[Wave 2]
100
213
  W2 --> W3[Wave 3]
101
- ```
214
+ ```