kld-sdd 2.4.14 → 2.4.15
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 +32 -47
- package/lib/init.js +30 -91
- package/package.json +2 -2
- package/templates/hooks/claude/hooks/sdd-apply-gate.cjs +170 -0
- package/templates/hooks/claude/hooks/sdd-prompt.cjs +2 -2
- package/templates/hooks/claude/settings.json +9 -0
- package/templates/skills/kld-sdd/opsx-apply/SKILL.md +91 -9
- package/templates/skills/kld-sdd/opsx-apply/implementer-prompt.md +129 -0
- package/templates/skills/kld-sdd/opsx-apply/worktree-setup.md +141 -0
- package/templates/opsx-commands/apply.md +0 -490
- package/templates/opsx-commands/archive.md +0 -146
- package/templates/opsx-commands/check.md +0 -463
- package/templates/opsx-commands/design.md +0 -570
- package/templates/opsx-commands/explore.md +0 -99
- package/templates/opsx-commands/propose.md +0 -405
- package/templates/opsx-commands/spec.md +0 -526
- package/templates/opsx-commands/task.md +0 -433
- package/templates/opsx-commands/test.md +0 -244
|
@@ -12,6 +12,9 @@ allowed-tools:
|
|
|
12
12
|
- Read
|
|
13
13
|
- Write
|
|
14
14
|
- Edit
|
|
15
|
+
- EnterWorktree
|
|
16
|
+
- ExitWorktree
|
|
17
|
+
- Agent
|
|
15
18
|
---
|
|
16
19
|
|
|
17
20
|
你是一个 SDD(Specification-Driven Development)变更实施专家。激活本技能后,你将引导用户按 DAG 依赖顺序逐任务实施代码。
|
|
@@ -105,6 +108,39 @@ openspec list --json
|
|
|
105
108
|
> - **Capability**:`<capability-name>`
|
|
106
109
|
> - **任务文件**:`changes/<name>/specs/<capability>/tasks.md`"
|
|
107
110
|
|
|
111
|
+
### 1.5 【隔离工作区】设置 Git Worktree
|
|
112
|
+
|
|
113
|
+
> **🤖 使用 Git Worktree 创建隔离工作区,保护主分支不受变更影响。**
|
|
114
|
+
> 与子代理并行派发配合使用——同一 Worktree 中多个子代理并行工作,零冲突。
|
|
115
|
+
|
|
116
|
+
**设置流程**(详见 `./worktree-setup.md`):
|
|
117
|
+
|
|
118
|
+
**Step 0: 检测当前状态**
|
|
119
|
+
- 若已是 Git Worktree → 跳过创建
|
|
120
|
+
- 若非 Git 项目(`vcs_mode=no-git`)→ 跳过
|
|
121
|
+
|
|
122
|
+
**Step 1: 创建隔离工作区**
|
|
123
|
+
- **首选**:使用 `EnterWorktree` 工具(Claude Code 原生)
|
|
124
|
+
```
|
|
125
|
+
EnterWorktree(name="apply-<change-name>-<capability-name>")
|
|
126
|
+
```
|
|
127
|
+
- **回退**:仅当原生工具不可用时,使用 `git worktree add`
|
|
128
|
+
```bash
|
|
129
|
+
git worktree add .worktrees/apply-<change-name>-<capability-name> \
|
|
130
|
+
-b kld-sdd/<change-name>/<capability-name>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Step 2: 项目设置**
|
|
134
|
+
- 自动检测并安装依赖(`npm install` / `pip install` 等)
|
|
135
|
+
|
|
136
|
+
**Step 3: 验证基线**
|
|
137
|
+
- 运行编译/测试,确保工作区干净
|
|
138
|
+
|
|
139
|
+
**报告**:
|
|
140
|
+
> "✅ Worktree 就绪:`<path>`
|
|
141
|
+
> 基线测试通过(N 个测试,0 失败)
|
|
142
|
+
> 准备实施 `<change-name>/<capability-name>`"
|
|
143
|
+
|
|
108
144
|
### 2. 渐进式上下文加载
|
|
109
145
|
|
|
110
146
|
**⛔ 只加载当前 Capability 的四文档链:**
|
|
@@ -153,17 +189,50 @@ openspec list --json
|
|
|
153
189
|
|
|
154
190
|
**执行每个任务**:
|
|
155
191
|
|
|
156
|
-
a. **DAG
|
|
192
|
+
a. **DAG 依赖检查 & 层级收集**
|
|
193
|
+
- 解析当前层级:收集所有依赖已满足的待执行任务
|
|
157
194
|
- 若依赖未满足,暂停并提示用户先完成前置任务
|
|
195
|
+
- 同一层级多个独立任务 → 可并行派发子代理
|
|
196
|
+
|
|
197
|
+
b. **显示当前层级任务**
|
|
198
|
+
> "📍 **层级 [X]**:准备派发 [K] 个子代理并行处理 [M] 个任务
|
|
199
|
+
> - [TASK-01]: <任务描述> - 依赖 ✅ 已满足
|
|
200
|
+
> - [TASK-02]: <任务描述> - 依赖 ✅ 已满足
|
|
201
|
+
> ..."
|
|
158
202
|
|
|
159
|
-
|
|
160
|
-
> "📍 **[N/M]** 正在处理: [TASK-ID] <任务描述>
|
|
161
|
-
> - **依赖**: [依赖列表] ✅ 已满足"
|
|
203
|
+
c. **🤖 派发子代理实现代码**
|
|
162
204
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
205
|
+
> **使用 Agent 工具并行派发同层任务,每个子代理负责一个任务,上下文隔离、专注高效。**
|
|
206
|
+
|
|
207
|
+
**派发准备(每个子代理):**
|
|
208
|
+
1. 从 tasks.md 中提取该任务的完整描述
|
|
209
|
+
2. 从 design.md 中提取该任务相关的设计约定(类签名、数据模型、接口定义、算法逻辑)
|
|
210
|
+
3. 从 overview.md 中提取相关全局规范(命名约定、目录结构、错误处理模式)
|
|
211
|
+
4. 组合以上上下文 + `./implementer-prompt.md` 模板 → 子代理 prompt
|
|
212
|
+
|
|
213
|
+
**同层并行派发**:
|
|
214
|
+
- 同一 DAG 层级、无相互依赖的任务 → **一次性并行派发多个子代理**
|
|
215
|
+
- 不同 DAG 层级 → **等待当前层全部完成后,再派发下一层**
|
|
216
|
+
|
|
217
|
+
**派发示例**:
|
|
218
|
+
```
|
|
219
|
+
同一层级 3 个独立任务,一次性并行派发:
|
|
220
|
+
|
|
221
|
+
Agent("实现 TASK-01: 创建用户数据模型", ...)
|
|
222
|
+
Agent("实现 TASK-02: 创建角色数据模型", ...)
|
|
223
|
+
Agent("实现 TASK-03: 创建权限数据模型", ...)
|
|
224
|
+
// 三个子代理同时运行,上下文隔离,互不干扰
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**等待所有子代理返回结果后,按状态处理**:
|
|
228
|
+
| 子代理状态 | 控制器处理方式 |
|
|
229
|
+
|-----------|---------------|
|
|
230
|
+
| DONE | 进入编译/测试门禁 |
|
|
231
|
+
| DONE_WITH_CONCERNS | 审查顾虑内容,判断是否需要在门禁前处理 |
|
|
232
|
+
| NEEDS_CONTEXT | 提供缺失上下文,重新派发 |
|
|
233
|
+
| BLOCKED | 补充上下文 / 换更强模型 / 拆分任务 / 升级给用户 |
|
|
234
|
+
|
|
235
|
+
> **⛔ 严禁**忽略子代理的升级请求!不改变参数就重复派发不会解决问题。
|
|
167
236
|
|
|
168
237
|
d. **⛔ 编译检查门禁**
|
|
169
238
|
|
|
@@ -195,7 +264,10 @@ f. **⛔ 立即更新任务状态**
|
|
|
195
264
|
```
|
|
196
265
|
**⚠️ 注意**:`--task-id=<TASK-ID>` 必须替换为实际任务 ID,否则 E4 指标无法计算。
|
|
197
266
|
|
|
198
|
-
g.
|
|
267
|
+
g. **继续下一个层级**
|
|
268
|
+
- 重新检查 DAG,找出所有依赖已满足的下一层级任务
|
|
269
|
+
- 若同层有多个可执行任务 → 并行派发子代理
|
|
270
|
+
- 若当前层级有未完成的任务 → 等待或重新派发
|
|
199
271
|
|
|
200
272
|
### 5.1 【Telemetry 必做】记录 AI 产出快照
|
|
201
273
|
|
|
@@ -216,6 +288,16 @@ node skywalk-sdd/log.cjs record --type=ai_adoption_review --command=apply --proj
|
|
|
216
288
|
> - 已完成:[N/M] 任务
|
|
217
289
|
> - 当前层级:Layer [X]
|
|
218
290
|
> - 下一步建议:[继续实施 / 运行测试 / 归档]"
|
|
291
|
+
>
|
|
292
|
+
> **💡 代码评审提示**:
|
|
293
|
+
> 建议执行 `/kld-review --local` 对本次变更的代码进行评审。
|
|
294
|
+
> 该技能可在公司内部 SkillHub 下载安装。
|
|
295
|
+
>
|
|
296
|
+
> **🧹 Worktree 清理**:
|
|
297
|
+
> 全部完成后,清理隔离工作区:
|
|
298
|
+
> - 使用 `EnterWorktree` 时:`ExitWorktree(action="remove", discard_changes=false)`
|
|
299
|
+
> - 使用 `git worktree add` 时:`git worktree remove .worktrees/<dir> && git branch -D <branch>`
|
|
300
|
+
> - 需保留变更时:`ExitWorktree(action="keep")`
|
|
219
301
|
|
|
220
302
|
---
|
|
221
303
|
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# OPSX 任务实现子代理提示模板
|
|
2
|
+
|
|
3
|
+
在派发实现子代理时使用此模板。每个 DAG 任务由一个独立子代理执行。
|
|
4
|
+
|
|
5
|
+
## 派发格式
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Agent (general-purpose):
|
|
9
|
+
description: "实现任务 [TASK-ID]: [任务描述]"
|
|
10
|
+
prompt: |
|
|
11
|
+
你是 SDD(Specification-Driven Development)任务实现专家。
|
|
12
|
+
|
|
13
|
+
## 当前任务
|
|
14
|
+
|
|
15
|
+
[TASK-ID]: [完整任务描述,从 tasks.md 中提取]
|
|
16
|
+
- 类型: [数据层/业务层/接口层/测试]
|
|
17
|
+
- 依赖: [前置任务列表] ✅ 已完成
|
|
18
|
+
- 层级: [N]
|
|
19
|
+
|
|
20
|
+
## 设计约定
|
|
21
|
+
|
|
22
|
+
[从 design.md 中提取与本任务相关的设计内容:
|
|
23
|
+
- 类/函数签名
|
|
24
|
+
- 数据模型
|
|
25
|
+
- 接口定义
|
|
26
|
+
- 关键算法逻辑]
|
|
27
|
+
|
|
28
|
+
## 全局规范
|
|
29
|
+
|
|
30
|
+
[从 overview.md 中提取相关全局规范:
|
|
31
|
+
- 命名约定
|
|
32
|
+
- 目录结构
|
|
33
|
+
- 错误处理模式
|
|
34
|
+
- 日志规范]
|
|
35
|
+
|
|
36
|
+
## 开始前确认
|
|
37
|
+
|
|
38
|
+
如果你对以下内容有疑问:
|
|
39
|
+
- 任务需求或验收标准
|
|
40
|
+
- 实现方式或技术方案
|
|
41
|
+
- 依赖项或假设条件
|
|
42
|
+
- 任务描述中不清晰的地方
|
|
43
|
+
|
|
44
|
+
**请现在提出。** 在开始工作之前澄清所有疑问。
|
|
45
|
+
|
|
46
|
+
## 你的工作
|
|
47
|
+
|
|
48
|
+
确认需求清晰后:
|
|
49
|
+
1. 实现任务指定的内容(不多不少)
|
|
50
|
+
2. 遵循 design.md 的设计约定
|
|
51
|
+
3. 遵循 overview.md 的全局规范
|
|
52
|
+
4. 保持变更最小化,不超出任务范围
|
|
53
|
+
5. 自我审查(见下方)
|
|
54
|
+
6. 报告结果
|
|
55
|
+
|
|
56
|
+
工作目录:[项目根目录]
|
|
57
|
+
|
|
58
|
+
**工作中遇到意外或不明确的情况时,请提问。**
|
|
59
|
+
允许暂停并澄清,不要猜测或假设。
|
|
60
|
+
|
|
61
|
+
## 代码组织
|
|
62
|
+
|
|
63
|
+
- 遵循 design.md 中定义的文件结构
|
|
64
|
+
- 每个文件应有单一明确的职责
|
|
65
|
+
- 遵循项目现有的代码模式和风格
|
|
66
|
+
- 如果任务涉及的文件超出预期范围,报告 DONE_WITH_CONCERNS
|
|
67
|
+
|
|
68
|
+
## 何时升级
|
|
69
|
+
|
|
70
|
+
**暂停并升级的情况:**
|
|
71
|
+
- 任务需要架构决策且有多种可行方案
|
|
72
|
+
- 需要理解超出提供范围之外的代码
|
|
73
|
+
- 不确定实现方式是否正确
|
|
74
|
+
- 需要重构现有代码且设计文档未预期的
|
|
75
|
+
|
|
76
|
+
**升级方式:** 报告状态为 BLOCKED 或 NEEDS_CONTEXT,具体说明卡在哪里、尝试了什么、需要什么帮助。
|
|
77
|
+
|
|
78
|
+
## 报告前自我审查
|
|
79
|
+
|
|
80
|
+
用新的眼光审视你的工作,自查:
|
|
81
|
+
|
|
82
|
+
**完整性:**
|
|
83
|
+
- 是否完整实现了任务描述中的所有内容?
|
|
84
|
+
- 是否遗漏了任何需求?
|
|
85
|
+
- 是否处理了边界情况?
|
|
86
|
+
|
|
87
|
+
**质量:**
|
|
88
|
+
- 代码是否清晰可维护?
|
|
89
|
+
- 命名是否准确(反映做什么,而非怎么做)?
|
|
90
|
+
- 是否遵循了项目现有模式?
|
|
91
|
+
|
|
92
|
+
**纪律:**
|
|
93
|
+
- 是否避免了过度工程(YAGNI)?
|
|
94
|
+
- 是否只构建了任务要求的内容?
|
|
95
|
+
- 是否避免了对无关文件的修改?
|
|
96
|
+
|
|
97
|
+
如果在自我审查中发现问题,先修复再报告。
|
|
98
|
+
|
|
99
|
+
## 报告格式
|
|
100
|
+
|
|
101
|
+
完成后报告:
|
|
102
|
+
|
|
103
|
+
- **状态**: DONE | DONE_WITH_CONCERNS | BLOCKED | NEEDS_CONTEXT
|
|
104
|
+
- **实现了什么**(或尝试了什么,如果受阻)
|
|
105
|
+
- **修改的文件列表**
|
|
106
|
+
- **自我审查发现**(如有)
|
|
107
|
+
- **任何问题或关注点**
|
|
108
|
+
|
|
109
|
+
使用 DONE_WITH_CONCERNS 表示完成了工作但对正确性有疑虑。
|
|
110
|
+
使用 BLOCKED 表示无法完成任务。
|
|
111
|
+
使用 NEEDS_CONTEXT 表示缺少必要信息。
|
|
112
|
+
永远不要默默产出你不确定的工作成果。
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## 状态处理指南
|
|
116
|
+
|
|
117
|
+
| 状态 | 含义 | 控制器操作 |
|
|
118
|
+
|------|------|------------|
|
|
119
|
+
| DONE | 任务完成,无顾虑 | 进入编译/测试门禁 |
|
|
120
|
+
| DONE_WITH_CONCERNS | 完成但有疑虑 | 读取顾虑,判断是否需要在门禁前处理 |
|
|
121
|
+
| NEEDS_CONTEXT | 需要更多信息 | 提供缺失上下文,重新派发 |
|
|
122
|
+
| BLOCKED | 无法完成 | 评估阻碍:补充上下文 / 换模型 / 拆分任务 / 升级给用户 |
|
|
123
|
+
|
|
124
|
+
## 注意事项
|
|
125
|
+
|
|
126
|
+
- **绝不要**忽略子代理的升级请求,重复同样参数重新派发不会解决问题
|
|
127
|
+
- **绝不要**在子代理说出"卡住"后不做改变就重试
|
|
128
|
+
- 子代理报告 NEEDS_CONTEXT 时,提供精准的补充信息
|
|
129
|
+
- 子代理报告 DONE_WITH_CONCERNS 时,仔细审查顾虑内容
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# OPSX Apply 工作区隔离指南
|
|
2
|
+
|
|
3
|
+
在 Apply 阶段使用 Git Worktree 隔离工作区,保护主分支不受代码变更影响。
|
|
4
|
+
|
|
5
|
+
## 核心原则
|
|
6
|
+
|
|
7
|
+
- **优先使用平台原生工具**:Claude Code 的 `EnterWorktree` / `ExitWorktree`
|
|
8
|
+
- **回退到 git 命令**:仅当原生工具不可用时
|
|
9
|
+
- **所有子代理共享同一 Worktree**:DAG 分析确保同层任务不冲突
|
|
10
|
+
- **非 Git 项目跳过**:`vcs_mode=no-git` 时无需隔离
|
|
11
|
+
|
|
12
|
+
## 设置流程
|
|
13
|
+
|
|
14
|
+
### Step 0: 检测当前状态
|
|
15
|
+
|
|
16
|
+
在执行任何操作前,先检查是否已在隔离工作区中:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
git rev-parse --is-inside-work-tree 2>/dev/null && git rev-parse --git-common-dir 2>/dev/null
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**已在 Worktree 中**(`GIT_DIR != GIT_COMMON_DIR` 且非 submodule):
|
|
23
|
+
→ 跳过创建,直接进入上下文加载阶段。
|
|
24
|
+
> "📍 已在隔离工作区 `<path>` 中,跳过 Worktree 创建。"
|
|
25
|
+
|
|
26
|
+
**在主仓库中**(`GIT_DIR == GIT_COMMON_DIR` 或非 Git 项目):
|
|
27
|
+
→ 继续 Step 1(非 Git 项目跳过)。
|
|
28
|
+
|
|
29
|
+
### Step 1: 创建隔离工作区
|
|
30
|
+
|
|
31
|
+
#### 1a. 平台原生工具(首选)
|
|
32
|
+
|
|
33
|
+
**Claude Code 环境**:直接调用 `EnterWorktree` 工具。
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
EnterWorktree(name="apply-<change-name>-<capability-name>")
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
原生工具自动处理目录选择、分支创建和清理,无需手动管理。
|
|
40
|
+
|
|
41
|
+
> **注意**:确认变更名称和 Capability 后,在开始上下文加载前创建 Worktree。
|
|
42
|
+
|
|
43
|
+
#### 1b. Git Worktree 回退(仅当无原生工具时)
|
|
44
|
+
|
|
45
|
+
**仅当 Step 1a 不可用时使用**,手动创建 Worktree:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# 1. 确定 Worktree 目录
|
|
49
|
+
WORKTREE_DIR=".worktrees/apply-<change-name>-<capability-name>"
|
|
50
|
+
|
|
51
|
+
# 2. 验证 .worktrees 已被 gitignore
|
|
52
|
+
git check-ignore -q .worktrees || echo ".worktrees/" >> .gitignore
|
|
53
|
+
|
|
54
|
+
# 3. 创建 Worktree
|
|
55
|
+
BRANCH="kld-sdd/<change-name>/<capability-name>"
|
|
56
|
+
git worktree add "$WORKTREE_DIR" -b "$BRANCH"
|
|
57
|
+
cd "$WORKTREE_DIR"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**权限错误回退**:如果 `git worktree add` 因沙箱限制失败,告知用户后在当前目录继续工作。
|
|
61
|
+
|
|
62
|
+
### Step 2: 项目初始设置
|
|
63
|
+
|
|
64
|
+
在 Worktree 中自动检测并运行项目设置:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# Node.js
|
|
68
|
+
[ -f package.json ] && npm install
|
|
69
|
+
|
|
70
|
+
# Rust
|
|
71
|
+
[ -f Cargo.toml ] && cargo build
|
|
72
|
+
|
|
73
|
+
# Python
|
|
74
|
+
[ -f requirements.txt ] && pip install -r requirements.txt
|
|
75
|
+
[ -f pyproject.toml ] && poetry install
|
|
76
|
+
|
|
77
|
+
# Go
|
|
78
|
+
[ -f go.mod ] && go mod download
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Step 3: 验证干净基线
|
|
82
|
+
|
|
83
|
+
运行测试确保 Worktree 从干净状态开始:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# 使用项目对应的测试命令
|
|
87
|
+
npm test / cargo test / pytest / go test ./...
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**测试失败**:报告失败,询问用户是否继续。
|
|
91
|
+
**测试通过**:报告就绪。
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
✅ Worktree 就绪:<full-path>
|
|
95
|
+
基线测试通过(N 个测试,0 失败)
|
|
96
|
+
准备实施 <change-name>/<capability-name>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## 清理流程
|
|
100
|
+
|
|
101
|
+
### 应用完成后
|
|
102
|
+
|
|
103
|
+
**使用原生工具时**:
|
|
104
|
+
```
|
|
105
|
+
ExitWorktree(action="remove", discard_changes=false)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**使用 git 命令时**:
|
|
109
|
+
```bash
|
|
110
|
+
# 返回主仓库
|
|
111
|
+
cd "$MAIN_REPO"
|
|
112
|
+
|
|
113
|
+
# 移除 Worktree
|
|
114
|
+
git worktree remove "$WORKTREE_DIR"
|
|
115
|
+
|
|
116
|
+
# 删除分支
|
|
117
|
+
git branch -D "kld-sdd/<change-name>/<capability-name>"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**保留选项**:若用户需要保留变更待审查,使用 `ExitWorktree(action="keep")`。
|
|
121
|
+
|
|
122
|
+
## 与子代理的配合
|
|
123
|
+
|
|
124
|
+
- **所有子代理共享同一 Worktree**
|
|
125
|
+
- DAG 分析确保同层任务不修改相同文件
|
|
126
|
+
- 子代理无需关心 Worktree 存在(透明隔离)
|
|
127
|
+
- 控制器(主会话)负责 Worktree 的创建和清理
|
|
128
|
+
|
|
129
|
+
## 快速参考
|
|
130
|
+
|
|
131
|
+
| 场景 | 操作 |
|
|
132
|
+
|------|------|
|
|
133
|
+
| 已在 Worktree 中 | 跳过创建 |
|
|
134
|
+
| 非 Git 项目 | 跳过(`vcs_mode=no-git`) |
|
|
135
|
+
| Claude Code 环境 | 使用 `EnterWorktree` |
|
|
136
|
+
| 无原生工具 | `git worktree add` 回退 |
|
|
137
|
+
| `.worktrees/` 存在 | 直接使用 |
|
|
138
|
+
| `.worktrees/` 不存在 | 创建并验证 gitignore |
|
|
139
|
+
| 权限错误 | 在当前目录继续工作 |
|
|
140
|
+
| 基线测试失败 | 报告 + 询问用户 |
|
|
141
|
+
| 完成 | `ExitWorktree(action="remove")` |
|