@localsummer/incspec 0.2.2 → 0.2.3
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 +3 -3
- package/commands/analyze.mjs +2 -2
- package/commands/apply.mjs +2 -2
- package/commands/collect-dep.mjs +2 -2
- package/commands/collect-req.mjs +2 -2
- package/commands/design.mjs +2 -6
- package/commands/help.mjs +1 -1
- package/commands/merge.mjs +2 -3
- package/commands/sync.mjs +45 -23
- package/lib/{cursor.mjs → ide-sync.mjs} +151 -93
- package/package.json +1 -1
- package/lib/claude.mjs +0 -144
- package/templates/inc-spec-skill/SKILL.md +0 -325
- package/templates/inc-spec-skill/references/analyze-codeflow.md +0 -368
- package/templates/inc-spec-skill/references/analyze-increment-codeflow.md +0 -246
- package/templates/inc-spec-skill/references/apply-increment-code.md +0 -520
- package/templates/inc-spec-skill/references/inc-archive.md +0 -278
- package/templates/inc-spec-skill/references/merge-to-baseline.md +0 -415
- package/templates/inc-spec-skill/references/structured-requirements-collection.md +0 -129
- package/templates/inc-spec-skill/references/ui-dependency-collection.md +0 -143
package/lib/claude.mjs
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code integration utilities
|
|
3
|
-
* - Sync inc-spec-skill to global or project
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import * as fs from 'fs';
|
|
7
|
-
import * as path from 'path';
|
|
8
|
-
import * as os from 'os';
|
|
9
|
-
import { fileURLToPath } from 'url';
|
|
10
|
-
|
|
11
|
-
/** Claude skills directory name */
|
|
12
|
-
const CLAUDE_SKILLS_DIR_NAME = 'skills';
|
|
13
|
-
|
|
14
|
-
/** Skill name */
|
|
15
|
-
const SKILL_NAME = 'inc-spec-skill';
|
|
16
|
-
|
|
17
|
-
/** Global Claude skills directory */
|
|
18
|
-
const GLOBAL_CLAUDE_SKILLS_DIR = path.join(os.homedir(), '.claude', CLAUDE_SKILLS_DIR_NAME);
|
|
19
|
-
|
|
20
|
-
/** Project Claude skills directory (relative to project root) */
|
|
21
|
-
const PROJECT_CLAUDE_SKILLS_DIR = path.join('.claude', CLAUDE_SKILLS_DIR_NAME);
|
|
22
|
-
|
|
23
|
-
/** Skill template source directory */
|
|
24
|
-
const SKILL_TEMPLATE_DIR = fileURLToPath(new URL('../templates/inc-spec-skill', import.meta.url));
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Copy directory recursively
|
|
28
|
-
* @param {string} src - Source directory
|
|
29
|
-
* @param {string} dest - Destination directory
|
|
30
|
-
*/
|
|
31
|
-
function copyDirRecursive(src, dest) {
|
|
32
|
-
if (!fs.existsSync(dest)) {
|
|
33
|
-
fs.mkdirSync(dest, { recursive: true });
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
37
|
-
|
|
38
|
-
for (const entry of entries) {
|
|
39
|
-
const srcPath = path.join(src, entry.name);
|
|
40
|
-
const destPath = path.join(dest, entry.name);
|
|
41
|
-
|
|
42
|
-
if (entry.isDirectory()) {
|
|
43
|
-
copyDirRecursive(srcPath, destPath);
|
|
44
|
-
} else {
|
|
45
|
-
fs.copyFileSync(srcPath, destPath);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Count files in directory recursively
|
|
52
|
-
* @param {string} dir - Directory path
|
|
53
|
-
* @returns {number} File count
|
|
54
|
-
*/
|
|
55
|
-
function countFiles(dir) {
|
|
56
|
-
let count = 0;
|
|
57
|
-
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
58
|
-
|
|
59
|
-
for (const entry of entries) {
|
|
60
|
-
if (entry.isDirectory()) {
|
|
61
|
-
count += countFiles(path.join(dir, entry.name));
|
|
62
|
-
} else {
|
|
63
|
-
count++;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return count;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Sync skill to global Claude skills directory
|
|
72
|
-
* @returns {{count: number, targetDir: string}}
|
|
73
|
-
*/
|
|
74
|
-
export function syncToGlobalClaude() {
|
|
75
|
-
const targetDir = path.join(GLOBAL_CLAUDE_SKILLS_DIR, SKILL_NAME);
|
|
76
|
-
|
|
77
|
-
// Remove existing if present
|
|
78
|
-
if (fs.existsSync(targetDir)) {
|
|
79
|
-
fs.rmSync(targetDir, { recursive: true, force: true });
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Copy skill template
|
|
83
|
-
copyDirRecursive(SKILL_TEMPLATE_DIR, targetDir);
|
|
84
|
-
|
|
85
|
-
const count = countFiles(targetDir);
|
|
86
|
-
|
|
87
|
-
return { count, targetDir };
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Sync skill to project Claude skills directory
|
|
92
|
-
* @param {string} projectRoot - Project root path
|
|
93
|
-
* @returns {{count: number, targetDir: string}}
|
|
94
|
-
*/
|
|
95
|
-
export function syncToProjectClaude(projectRoot) {
|
|
96
|
-
const targetDir = path.join(projectRoot, PROJECT_CLAUDE_SKILLS_DIR, SKILL_NAME);
|
|
97
|
-
|
|
98
|
-
// Remove existing if present
|
|
99
|
-
if (fs.existsSync(targetDir)) {
|
|
100
|
-
fs.rmSync(targetDir, { recursive: true, force: true });
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Copy skill template
|
|
104
|
-
copyDirRecursive(SKILL_TEMPLATE_DIR, targetDir);
|
|
105
|
-
|
|
106
|
-
const count = countFiles(targetDir);
|
|
107
|
-
|
|
108
|
-
return { count, targetDir };
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Check if Claude skill exists
|
|
113
|
-
* @param {string} projectRoot - Optional project root
|
|
114
|
-
* @returns {{project: boolean, global: boolean}}
|
|
115
|
-
*/
|
|
116
|
-
export function checkClaudeSkill(projectRoot = null) {
|
|
117
|
-
const globalDir = path.join(GLOBAL_CLAUDE_SKILLS_DIR, SKILL_NAME);
|
|
118
|
-
const result = {
|
|
119
|
-
global: fs.existsSync(globalDir) && fs.readdirSync(globalDir).length > 0,
|
|
120
|
-
project: false,
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
if (projectRoot) {
|
|
124
|
-
const projectDir = path.join(projectRoot, PROJECT_CLAUDE_SKILLS_DIR, SKILL_NAME);
|
|
125
|
-
result.project = fs.existsSync(projectDir) && fs.readdirSync(projectDir).length > 0;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
return result;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Get skill template info
|
|
133
|
-
* @returns {{fileCount: number, hasSkillMd: boolean, hasReferences: boolean}}
|
|
134
|
-
*/
|
|
135
|
-
export function getSkillTemplateInfo() {
|
|
136
|
-
const skillMdPath = path.join(SKILL_TEMPLATE_DIR, 'SKILL.md');
|
|
137
|
-
const referencesDir = path.join(SKILL_TEMPLATE_DIR, 'references');
|
|
138
|
-
|
|
139
|
-
return {
|
|
140
|
-
fileCount: countFiles(SKILL_TEMPLATE_DIR),
|
|
141
|
-
hasSkillMd: fs.existsSync(skillMdPath),
|
|
142
|
-
hasReferences: fs.existsSync(referencesDir) && fs.readdirSync(referencesDir).length > 0,
|
|
143
|
-
};
|
|
144
|
-
}
|
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: inc-spec-skill
|
|
3
|
-
description: 设计优先的前端功能增量编码工作流。适用于实现新UI组件、修改现有功能,或当用户提及"增量编码"、"代码流程分析"、"需求收集",以及需要带有API/Store依赖追踪的结构化功能开发时使用。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# AI增量编码
|
|
7
|
-
|
|
8
|
-
## 目录
|
|
9
|
-
|
|
10
|
-
- [快速开始](#快速开始)
|
|
11
|
-
- [工作流概览](#工作流概览)
|
|
12
|
-
- [CLI集成](#cli集成)
|
|
13
|
-
- [步骤详情](#步骤详情)
|
|
14
|
-
- [最佳实践](#最佳实践)
|
|
15
|
-
- [参考资源](#参考资源)
|
|
16
|
-
|
|
17
|
-
## 快速开始
|
|
18
|
-
|
|
19
|
-
**完整模式 (7步):**
|
|
20
|
-
```
|
|
21
|
-
1. 分析现有代码 → incspec analyze <path>
|
|
22
|
-
2. 收集需求 → incspec collect-req
|
|
23
|
-
3. 收集依赖 → incspec collect-dep
|
|
24
|
-
4. 设计增量 → incspec design
|
|
25
|
-
5. 应用代码变更 → incspec apply <report>
|
|
26
|
-
6. 合并到基线 → incspec merge <report>
|
|
27
|
-
7. 归档工作流 → incspec archive --yes
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
**快速模式 (5步):**
|
|
31
|
-
```
|
|
32
|
-
1. 分析现有代码 → incspec analyze <path> --quick
|
|
33
|
-
2. 收集需求 → incspec collect-req
|
|
34
|
-
[跳过 3: 依赖收集 - 简单变更无需此步]
|
|
35
|
-
[跳过 4: 增量设计 - 直接基于需求实现]
|
|
36
|
-
5. 应用代码变更 → incspec apply (基于需求文档)
|
|
37
|
-
6. 合并到基线 → incspec merge (重新分析生成)
|
|
38
|
-
7. 归档工作流 → incspec archive --yes
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
首次使用前初始化: `incspec init`
|
|
42
|
-
|
|
43
|
-
## 执行规则
|
|
44
|
-
|
|
45
|
-
当用户请求满足以下条件时,**立即启动工作流**,无需额外搜索或确认启动意图:
|
|
46
|
-
- 明确指定了模式(完整/快速)
|
|
47
|
-
- 提供了目标路径或基线文件
|
|
48
|
-
- 意图清晰无歧义
|
|
49
|
-
|
|
50
|
-
**重要说明**:
|
|
51
|
-
- "立即启动工作流"指无需确认是否开始执行,但**不跳过**工作流中定义的人工确认点
|
|
52
|
-
- 步骤2(需求收集)和步骤4(增量设计)仍然**必须**等待用户确认后才能继续
|
|
53
|
-
- 步骤7(归档)建议向用户确认归档范围
|
|
54
|
-
|
|
55
|
-
**默认行为**:
|
|
56
|
-
- 未指定模式时,默认使用完整模式
|
|
57
|
-
- 提供 `--baseline=<file>` 时,跳过步骤1的代码分析,直接使用已有基线
|
|
58
|
-
- 提供 `--quick` 时,启用快速模式流程
|
|
59
|
-
- 选项可自由组合,Agent 应根据用户意图推断最优组合
|
|
60
|
-
|
|
61
|
-
## 工作流概览
|
|
62
|
-
|
|
63
|
-
### 完整模式 (7步)
|
|
64
|
-
|
|
65
|
-
适用于复杂功能开发,需要完整的 UI 依赖分析和增量设计。
|
|
66
|
-
|
|
67
|
-
| 步骤 | 目的 | 产出 |
|
|
68
|
-
|------|------|------|
|
|
69
|
-
| 1. 代码流程分析 | 记录当前API/Store/组件交互 | 基线快照 |
|
|
70
|
-
| 2. 需求收集 | 将模糊需求转换为结构化5列表格 | 需求报告 |
|
|
71
|
-
| 3. 依赖收集 | 识别所有API/Store/类型依赖 | 依赖报告 |
|
|
72
|
-
| 4. 增量设计 | 生成实现蓝图 | 增量快照 |
|
|
73
|
-
| 5. 代码应用 | 按蓝图创建/修改文件 | 更新后的代码库 |
|
|
74
|
-
| 6. 基线合并 | 将增量转换为干净基线 | 新基线 |
|
|
75
|
-
| 7. 归档 | 归档工作流产出到 `archives/YYYY-MM/` | 干净的工作区 |
|
|
76
|
-
|
|
77
|
-
### 快速模式 (5步)
|
|
78
|
-
|
|
79
|
-
适用于简单功能或不涉及复杂 UI 依赖的变更。
|
|
80
|
-
|
|
81
|
-
| 步骤 | 目的 | 产出 |
|
|
82
|
-
|------|------|------|
|
|
83
|
-
| 1. 代码流程分析 | 记录当前API/Store/组件交互 | 基线快照 |
|
|
84
|
-
| 2. 需求收集 | 将模糊需求转换为结构化5列表格 | 需求报告 |
|
|
85
|
-
| 5. 代码应用 | 基于需求直接创建/修改文件 | 更新后的代码库 |
|
|
86
|
-
| 6. 基线合并 | 重新分析生成新基线 | 新基线 |
|
|
87
|
-
| 7. 归档 | 归档工作流产出 | 干净的工作区 |
|
|
88
|
-
|
|
89
|
-
**模式选择建议:**
|
|
90
|
-
- **完整模式**: 复杂 UI 功能、多组件交互、需要详细设计审查
|
|
91
|
-
- **快速模式**: Bug 修复、简单功能、不涉及 UI 依赖变更
|
|
92
|
-
|
|
93
|
-
## CLI集成
|
|
94
|
-
|
|
95
|
-
每个步骤与 `incspec` CLI同步以跟踪工作流状态:
|
|
96
|
-
|
|
97
|
-
| 步骤 | 模式 | 开始 | 完成 |
|
|
98
|
-
|------|------|------|------|
|
|
99
|
-
| 分析 | 完整/快速 | `incspec analyze <path> --module=<m>` 或 `--baseline=<file>` | `--complete --output=<file>` |
|
|
100
|
-
| 需求 | 完整/快速 | `incspec collect-req` | `--complete` |
|
|
101
|
-
| 依赖 | 仅完整 | `incspec collect-dep` | `--complete` |
|
|
102
|
-
| 设计 | 仅完整 | `incspec design --feature=<f>` | `--complete --output=<file>` |
|
|
103
|
-
| 应用 | 完整/快速 | `incspec apply <report>` | `--complete` |
|
|
104
|
-
| 合并 | 完整/快速 | `incspec merge <report>` | `--complete --output=<file>` |
|
|
105
|
-
| 归档 | 完整/快速 | `incspec archive --yes` | - |
|
|
106
|
-
|
|
107
|
-
**前置步骤检查**: 步骤 2-6 执行前会自动检查前置步骤是否完成。若前置步骤未完成,命令会提示并阻止执行。添加 `--force` 可跳过此检查。
|
|
108
|
-
|
|
109
|
-
管理命令:
|
|
110
|
-
- `incspec status` - 查看工作流状态
|
|
111
|
-
- `incspec list` - 列出规范文件
|
|
112
|
-
- `incspec validate` - 验证项目健康状态(步骤1/4/6后、归档前执行)
|
|
113
|
-
- `incspec validate --strict` - 严格模式,有错误时退出码为1(用于CI)
|
|
114
|
-
- `incspec reset` - 重置工作流到初始状态
|
|
115
|
-
- `incspec reset --to=N` - 回退到步骤N,保留1-N,重置N+1至7(示例:`--to=3` 保留1-3,重置4-7)
|
|
116
|
-
|
|
117
|
-
## 步骤详情
|
|
118
|
-
|
|
119
|
-
### 步骤1: 代码流程分析
|
|
120
|
-
|
|
121
|
-
分析现有代码,创建API调用、依赖关系和组件交互的文档化基线。
|
|
122
|
-
|
|
123
|
-
**命令:** `incspec analyze <path> [--module=<m>] [--quick] [--baseline=<file>]`
|
|
124
|
-
|
|
125
|
-
**选项:**
|
|
126
|
-
- `--quick`: 启用快速模式 (5步流程)
|
|
127
|
-
- `--baseline=<file>`: 复用已有基线,跳过代码分析
|
|
128
|
-
|
|
129
|
-
**输入:** 源代码目录路径 (如 `src/pages/dashboard`) 或现有基线文件 (`--baseline=<file>`)
|
|
130
|
-
|
|
131
|
-
**输出:** 基线报告,包含:
|
|
132
|
-
- 编号的API调用序列图 (如 `[1]`、`[2]`)
|
|
133
|
-
- 组件/Store依赖关系图
|
|
134
|
-
- 数据流摘要
|
|
135
|
-
|
|
136
|
-
**验证:** 完成后执行 `incspec validate` 检查基线格式(必含时序图和依赖图)
|
|
137
|
-
|
|
138
|
-
详见 [references/analyze-codeflow.md](references/analyze-codeflow.md)。
|
|
139
|
-
|
|
140
|
-
### 步骤2: 需求收集
|
|
141
|
-
|
|
142
|
-
将模糊的用户需求转换为严格的5列结构化表格,消除所有歧义术语。
|
|
143
|
-
|
|
144
|
-
**输入:** 用户的非正式需求描述
|
|
145
|
-
|
|
146
|
-
**输出:** 结构化表格,包含以下列:
|
|
147
|
-
1. 需求ID
|
|
148
|
-
2. 详细描述 (不含"某些"、"相关"等模糊术语)
|
|
149
|
-
3. 验收标准
|
|
150
|
-
4. 依赖项
|
|
151
|
-
5. 实现备注
|
|
152
|
-
|
|
153
|
-
详见 [references/structured-requirements-collection.md](references/structured-requirements-collection.md)。
|
|
154
|
-
|
|
155
|
-
### 步骤3: 依赖收集
|
|
156
|
-
|
|
157
|
-
在代码生成前识别所有上下文依赖。
|
|
158
|
-
|
|
159
|
-
**输入:** 步骤2的结构化需求
|
|
160
|
-
|
|
161
|
-
**输出:** 完整的依赖清单:
|
|
162
|
-
- **API:** 端点、方法、请求/响应类型
|
|
163
|
-
- **Store:** 模块、状态属性、actions
|
|
164
|
-
- **类型:** 现有和新增的TypeScript接口
|
|
165
|
-
- **组件:** 共享组件、工具函数
|
|
166
|
-
|
|
167
|
-
详见 [references/ui-dependency-collection.md](references/ui-dependency-collection.md)。
|
|
168
|
-
|
|
169
|
-
### 步骤4: 增量设计
|
|
170
|
-
|
|
171
|
-
基于当前状态、需求和依赖生成实现蓝图。**设计获批前不编写任何代码。**
|
|
172
|
-
|
|
173
|
-
**输入:** 基线(步骤1) + 需求(步骤2) + 依赖(步骤3)
|
|
174
|
-
|
|
175
|
-
**输出:** 增量快照,包含:
|
|
176
|
-
- 集成新调用的API序列图
|
|
177
|
-
- 文件修改计划 (新增/修改/删除)
|
|
178
|
-
- 分步实现指导
|
|
179
|
-
|
|
180
|
-
**验证:** 完成后执行 `incspec validate` 检查增量格式(必含5个模块章节)
|
|
181
|
-
|
|
182
|
-
详见 [references/analyze-increment-codeflow.md](references/analyze-increment-codeflow.md)。
|
|
183
|
-
|
|
184
|
-
### 步骤5: 代码应用
|
|
185
|
-
|
|
186
|
-
通过创建新文件和修改现有文件执行增量蓝图。
|
|
187
|
-
|
|
188
|
-
**输入:** 步骤4的增量快照 + 源代码目录
|
|
189
|
-
|
|
190
|
-
**输出:** 修改后的代码库:
|
|
191
|
-
- 按蓝图创建的新文件
|
|
192
|
-
- 更新的现有文件
|
|
193
|
-
- 正确的导入和类型定义
|
|
194
|
-
|
|
195
|
-
详见 [references/apply-increment-code.md](references/apply-increment-code.md)。
|
|
196
|
-
|
|
197
|
-
### 步骤6: 基线合并
|
|
198
|
-
|
|
199
|
-
将增量快照(带有新增/修改/删除标记)转换为干净基线,为下次迭代做准备。
|
|
200
|
-
|
|
201
|
-
**输入:** 步骤4的增量快照
|
|
202
|
-
|
|
203
|
-
**输出:** 代表当前系统状态的干净基线(无增量标记)
|
|
204
|
-
|
|
205
|
-
**验证:** 完成后执行 `incspec validate` 检查新基线完整性
|
|
206
|
-
|
|
207
|
-
详见 [references/merge-to-baseline.md](references/merge-to-baseline.md)。
|
|
208
|
-
|
|
209
|
-
### 步骤7: 归档
|
|
210
|
-
|
|
211
|
-
将已完成的工作流产出归档到 `archives/YYYY-MM/{module}/` 目录。
|
|
212
|
-
|
|
213
|
-
**输入:** 要归档的文件(可选,默认为当前工作流)
|
|
214
|
-
|
|
215
|
-
**操作:**
|
|
216
|
-
```bash
|
|
217
|
-
incspec archive --yes # 归档所有工作流产出
|
|
218
|
-
incspec archive <file> --yes # 归档指定文件
|
|
219
|
-
incspec archive <file> --keep # 复制而非移动
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
**验证:** 归档前执行 `incspec validate` 确保项目健康,归档后再次验证确保文件移动正确
|
|
223
|
-
|
|
224
|
-
详见 [references/inc-archive.md](references/inc-archive.md)。
|
|
225
|
-
|
|
226
|
-
## 最佳实践
|
|
227
|
-
|
|
228
|
-
**顺序执行:** 按步骤顺序执行。完整模式按 1-7 执行,快速模式按 1-2-5-6-7 执行。跳过步骤会导致集成问题。
|
|
229
|
-
|
|
230
|
-
**设计先于编码:** 完整模式下,步骤4设计获批前不编写任何代码。快速模式跳过设计步骤,适用于简单变更。
|
|
231
|
-
|
|
232
|
-
**不可跳过依赖:** 完整模式下,遗漏依赖(步骤3)是集成失败的首要原因。
|
|
233
|
-
|
|
234
|
-
**CLI同步:** 始终与 `incspec` CLI同步以保证工作流可追溯。
|
|
235
|
-
|
|
236
|
-
**模式选择:**
|
|
237
|
-
- 不确定时优先选择完整模式
|
|
238
|
-
- 仅在变更范围明确、不涉及复杂依赖时使用快速模式
|
|
239
|
-
|
|
240
|
-
**验证节点:**
|
|
241
|
-
- 步骤1后: `incspec validate` 检查基线格式(必含时序图和依赖图)
|
|
242
|
-
- 步骤2后: 需求中无模糊术语
|
|
243
|
-
- 步骤4后 (完整模式): `incspec validate` 检查增量格式 + 编码前审查蓝图
|
|
244
|
-
- 步骤5后: 验证所有文件已正确创建/修改
|
|
245
|
-
- 步骤6后: `incspec validate` 检查新基线完整性
|
|
246
|
-
- 步骤7前后: 归档前后各执行 `incspec validate` 确保项目健康
|
|
247
|
-
|
|
248
|
-
**工作流重置:**
|
|
249
|
-
- 完全重置: `incspec reset` - 归档所有产出,回到初始状态
|
|
250
|
-
- 部分回退: `incspec reset --to=N` - 保留步骤1-N,重置步骤N+1至7。示例:步骤5发现设计有误 → `--to=3` → 重做步骤4-7
|
|
251
|
-
|
|
252
|
-
**人工确认点:**
|
|
253
|
-
|
|
254
|
-
| 步骤 | 确认级别 | 快速模式 | 说明 |
|
|
255
|
-
|------|----------|----------|------|
|
|
256
|
-
| 1. 代码流程分析 | 自动 | 适用 | 技术性分析,错误会在后续暴露 |
|
|
257
|
-
| 2. 需求收集 | **必须确认** | 适用 | 需求理解错误会导致全部返工 |
|
|
258
|
-
| 3. 依赖收集 | 自动 | 跳过 | 遗漏会在编译阶段暴露 |
|
|
259
|
-
| 4. 增量设计 | **必须确认** | 跳过 | 架构方案需审批后才能编码 |
|
|
260
|
-
| 5. 代码应用 | 自动 | 适用 | 按蓝图执行,完成后报告结果 |
|
|
261
|
-
| 6. 基线合并 | 自动 | 适用 | 技术性操作,无决策 |
|
|
262
|
-
| 7. 归档 | 建议确认 | 适用 | 涉及文件移动,用户应知晓范围 |
|
|
263
|
-
|
|
264
|
-
- **完整模式**: 步骤2 + 步骤4必须确认
|
|
265
|
-
- **快速模式**: 仅步骤2必须确认(步骤3、4被跳过)
|
|
266
|
-
|
|
267
|
-
## 常见陷阱
|
|
268
|
-
|
|
269
|
-
| 陷阱 | 后果 | 解决方案 |
|
|
270
|
-
|------|------|----------|
|
|
271
|
-
| 跳过代码流程分析 | 集成问题,返工 | 始终从步骤1开始,建立准确基线 |
|
|
272
|
-
| 接受模糊需求 | 编码时发现歧义 | 步骤2必须确认,消除所有模糊术语 |
|
|
273
|
-
| 遗漏依赖 | 导入错误,运行时失败 | 完整模式严格执行步骤3 |
|
|
274
|
-
| 编码先于设计 | 在不符合架构的实现上浪费精力 | 完整模式严格执行步骤4,步骤4设计获批后才执行步骤5 |
|
|
275
|
-
| 跳过基线合并 | 对当前系统状态产生混淆 | 每次增量后必须执行步骤6 |
|
|
276
|
-
| 忽略归档 | 工作区杂乱,历史丢失 | 工作流完成后立即执行步骤7 |
|
|
277
|
-
| 工作流状态不一致 | CLI命令执行失败 | 使用 `incspec status` 检查状态,必要时使用 `incspec reset` 修复 |
|
|
278
|
-
| 前置步骤未完成 | 命令被阻止执行 | 按顺序完成前置步骤,或添加 `--force` 强制执行 |
|
|
279
|
-
|
|
280
|
-
## 参考资源
|
|
281
|
-
|
|
282
|
-
| 文件 | 用途 |
|
|
283
|
-
|------|------|
|
|
284
|
-
| [analyze-codeflow.md](references/analyze-codeflow.md) | 代码流程分析和API序列图 |
|
|
285
|
-
| [structured-requirements-collection.md](references/structured-requirements-collection.md) | 5列需求结构化 |
|
|
286
|
-
| [ui-dependency-collection.md](references/ui-dependency-collection.md) | API/Store/类型依赖收集 |
|
|
287
|
-
| [analyze-increment-codeflow.md](references/analyze-increment-codeflow.md) | 设计优先的增量蓝图 |
|
|
288
|
-
| [apply-increment-code.md](references/apply-increment-code.md) | 基于蓝图的代码应用 |
|
|
289
|
-
| [merge-to-baseline.md](references/merge-to-baseline.md) | 增量到基线转换 |
|
|
290
|
-
| [inc-archive.md](references/inc-archive.md) | 工作流产出归档 |
|
|
291
|
-
|
|
292
|
-
## 使用示例
|
|
293
|
-
|
|
294
|
-
**完整任务模式:** 为产品仪表板添加筛选功能
|
|
295
|
-
|
|
296
|
-
```
|
|
297
|
-
步骤1: 分析产品仪表板代码流程
|
|
298
|
-
→ 记录当前数据获取、store结构、API端点
|
|
299
|
-
|
|
300
|
-
步骤2: 结构化筛选需求
|
|
301
|
-
→ 将"添加一些筛选器"转换为具体筛选类型(类别、价格、评分)
|
|
302
|
-
→ 定义确切行为和组合逻辑(AND/OR)
|
|
303
|
-
|
|
304
|
-
步骤3: 收集依赖
|
|
305
|
-
→ 识别筛选API端点、store扩展、共享筛选组件
|
|
306
|
-
|
|
307
|
-
步骤4: 生成增量蓝图
|
|
308
|
-
→ 规划FilterPanel集成、状态管理变更、文件修改
|
|
309
|
-
|
|
310
|
-
步骤5: 应用增量
|
|
311
|
-
→ 创建FilterPanel组件,修改ProductDashboard,更新store
|
|
312
|
-
|
|
313
|
-
步骤6: 合并到基线
|
|
314
|
-
→ 生成新仪表板状态的干净快照
|
|
315
|
-
|
|
316
|
-
步骤7: 归档
|
|
317
|
-
→ 归档工作流产出,为下次增量做准备(如添加排序功能)
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
## 开发工作流集成
|
|
321
|
-
|
|
322
|
-
- **版本控制:** 步骤7(完整周期)后提交
|
|
323
|
-
- **代码审查:** 在步骤4审查增量蓝图
|
|
324
|
-
- **测试:** 在步骤5添加测试
|
|
325
|
-
- **文档:** 在步骤6更新文档
|