kld-sdd 2.4.17 → 2.4.18
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/lib/init.js +15 -3
- package/package.json +2 -1
- package/skywalk-sdd/apply-worktree-finish.cjs +551 -0
- package/skywalk-sdd/index.cjs +6 -0
- package/templates/hooks/claude/hooks/sdd-apply-test-gate.cjs +315 -0
- package/templates/hooks/claude/hooks/sdd-skill-apply-gate.cjs +3 -2
- package/templates/hooks/claude/settings.json +8 -0
- package/templates/skills/kld-sdd/opsx-apply/SKILL.md +219 -11
- package/templates/skills/kld-sdd/opsx-apply/worktree-setup.md +64 -101
- package/templates/skills/kld-sdd/opsx-archive/SKILL.md +10 -0
|
@@ -1,141 +1,104 @@
|
|
|
1
|
-
# OPSX Apply
|
|
1
|
+
# OPSX Apply — 本地 Worktree 与并行加速
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## 目标(读这个就够了)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- **为什么用 worktree**:在**本地**让解耦的 capability/spec **并行写代码**,互不干扰,再按依赖 **merge 回集成分支**,缩短 Apply 总时间。
|
|
6
|
+
- **不是什么**:不是保护 `master`、不是远程发布策略、不是「主分支只放 SDD 文档」。
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
- **回退到 git 命令**:仅当原生工具不可用时
|
|
9
|
-
- **所有子代理共享同一 Worktree**:DAG 分析确保同层任务不冲突
|
|
10
|
-
- **非 Git 项目跳过**:`vcs_mode=no-git` 时无需隔离
|
|
8
|
+
集成分支 = Apply 开始时主仓库的 `git branch --show-current`(如 `hotfix-1`)。收尾 merge 回这条**本地**分支。
|
|
11
9
|
|
|
12
|
-
##
|
|
10
|
+
## 两层并行
|
|
13
11
|
|
|
14
|
-
|
|
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: 创建隔离工作区
|
|
12
|
+
| 层级 | 做法 |
|
|
13
|
+
|------|------|
|
|
14
|
+
| **Capability 级** | 多个 `/opsx-apply <change> <cap>`,每个解耦 cap 一个 worktree + `kld-sdd/<change>/<cap>` |
|
|
15
|
+
| **Task 级** | 单个 cap 内,**同一** worktree,DAG 同层子代理并行 |
|
|
30
16
|
|
|
31
|
-
|
|
17
|
+
子代理(§5)** never ** 创建 worktree 或分支。
|
|
32
18
|
|
|
33
|
-
|
|
19
|
+
## Step 0.1 分支/隔离校验(早于 record-base)
|
|
34
20
|
|
|
35
|
-
|
|
36
|
-
EnterWorktree(name="apply-<change-name>-<capability-name>")
|
|
37
|
-
```
|
|
21
|
+
建议分支 `kld-sdd/<change>/<capability>` **不是默认值**,须先校验:
|
|
38
22
|
|
|
39
|
-
|
|
23
|
+
1. **proposal.md**:§3 能力列表、§4.2 依赖图、§5.3 前置依赖、`mode`(full/simple)
|
|
24
|
+
2. **当前 cap 的 spec.md**:§4 依赖、涉及模块/表/接口
|
|
25
|
+
3. **其它 cap 的 spec.md(仅节选)**:§4 依赖、模块/表是否与当前 cap 重叠
|
|
40
26
|
|
|
41
|
-
|
|
27
|
+
| 不通过 | 处理 |
|
|
28
|
+
|--------|------|
|
|
29
|
+
| 当前 cap 依赖未完成的上游 cap | 串行,先 finish 上游 |
|
|
30
|
+
| 多 cap 改同一模块/表/配置 | 不并行 worktree |
|
|
31
|
+
| 已有同名 `kld-sdd/<change>/<cap>` 分支 | 复用或问用户清理 |
|
|
42
32
|
|
|
43
|
-
|
|
33
|
+
校验通过后输出报告(见 SKILL.md 模板),再 `record-base` / `worktree add`。
|
|
44
34
|
|
|
45
|
-
|
|
35
|
+
## 是否建 worktree?(建议,非强制)
|
|
46
36
|
|
|
47
|
-
|
|
48
|
-
# 1. 确定 Worktree 目录
|
|
49
|
-
WORKTREE_DIR=".worktrees/apply-<change-name>-<capability-name>"
|
|
37
|
+
### 建议建(常对应 full 目录 `apply-<change>-<capability>`)
|
|
50
38
|
|
|
51
|
-
|
|
52
|
-
|
|
39
|
+
- proposal §3 / design 显示该 cap 与其它并行 cap **无强依赖**
|
|
40
|
+
- 修改的文件/模块/表 **基本不重叠**
|
|
41
|
+
- 需要与其它 cap **同时** 本地实施
|
|
53
42
|
|
|
54
|
-
|
|
55
|
-
BRANCH="kld-sdd/<change-name>/<capability-name>"
|
|
56
|
-
git worktree add "$WORKTREE_DIR" -b "$BRANCH"
|
|
57
|
-
cd "$WORKTREE_DIR"
|
|
58
|
-
```
|
|
43
|
+
### 建议不建 / 串行
|
|
59
44
|
|
|
60
|
-
|
|
45
|
+
- cap B **依赖** cap A(先 finish A 再开 B)
|
|
46
|
+
- 多 cap 改 **同一文件、共享配置、顺序迁移**
|
|
47
|
+
- 其它 cap 的 worktree 尚未 merge,当前 cap 需要 **最新** 集成分支尖端
|
|
48
|
+
- `git worktree add` 被沙箱拒绝 → 当前目录 + 功能分支,并说明原因
|
|
61
49
|
|
|
62
|
-
###
|
|
50
|
+
### full 模式「一 cap 一分支」
|
|
63
51
|
|
|
64
|
-
|
|
52
|
+
- **约定 + 建议**,不是铁律
|
|
53
|
+
- simple:通常 **一 change 一 worktree**(`apply-<change>`)
|
|
65
54
|
|
|
66
|
-
|
|
67
|
-
# Node.js
|
|
68
|
-
[ -f package.json ] && npm install
|
|
55
|
+
## 多 Capability 并行 merge 顺序
|
|
69
56
|
|
|
70
|
-
|
|
71
|
-
|
|
57
|
+
1. 从 `proposal.md` 排出 capability 依赖。
|
|
58
|
+
2. **无依赖**:可同时开多个 worktree 实施;**finish merge 仍逐个** 到同一 `integration_base`。
|
|
59
|
+
3. **有依赖**:上游 cap 先 `finish`,下游 cap 在 merge 前应对集成分支 `rebase/merge`,或从更新后的尖端重建 worktree。
|
|
72
60
|
|
|
73
|
-
|
|
74
|
-
[ -f requirements.txt ] && pip install -r requirements.txt
|
|
75
|
-
[ -f pyproject.toml ] && poetry install
|
|
61
|
+
## 流程(单次 apply)
|
|
76
62
|
|
|
77
|
-
|
|
78
|
-
|
|
63
|
+
```
|
|
64
|
+
§1.2 check
|
|
65
|
+
§1.5 Step 0.1 proposal + spec 跨 cap 依赖校验 → 输出报告
|
|
66
|
+
§1.5 判断是否建 worktree(见上)
|
|
67
|
+
→ 若建:record-base → worktree add -b kld-sdd/<change>/<cap>
|
|
68
|
+
§2~§5 实施(子代理不建分支)
|
|
69
|
+
§6.1 若建了 worktree:finish → merge 回 integration_base
|
|
79
70
|
```
|
|
80
71
|
|
|
81
|
-
###
|
|
82
|
-
|
|
83
|
-
运行测试确保 Worktree 从干净状态开始:
|
|
72
|
+
### record-base
|
|
84
73
|
|
|
85
74
|
```bash
|
|
86
|
-
|
|
87
|
-
|
|
75
|
+
node skywalk-sdd/apply-worktree-finish.cjs --record-base \
|
|
76
|
+
--change=<change> --capability=<capability>
|
|
88
77
|
```
|
|
89
78
|
|
|
90
|
-
|
|
91
|
-
**测试通过**:报告就绪。
|
|
79
|
+
### 创建(git 回退)
|
|
92
80
|
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
准备实施 <change-name>/<capability-name>
|
|
81
|
+
```bash
|
|
82
|
+
git check-ignore -q .worktrees || echo ".worktrees/" >> .gitignore
|
|
83
|
+
git worktree add .worktrees/apply-<change>-<capability> -b kld-sdd/<change>/<capability>
|
|
97
84
|
```
|
|
98
85
|
|
|
99
|
-
|
|
86
|
+
须在**集成分支**上执行,apply 分支从该尖端分出。
|
|
100
87
|
|
|
101
|
-
###
|
|
88
|
+
### finish
|
|
102
89
|
|
|
103
|
-
**使用原生工具时**:
|
|
104
|
-
```
|
|
105
|
-
ExitWorktree(action="remove", discard_changes=false)
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
**使用 git 命令时**:
|
|
109
90
|
```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>"
|
|
91
|
+
node skywalk-sdd/apply-worktree-finish.cjs --change=<change> --capability=<capability>
|
|
118
92
|
```
|
|
119
93
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
## 与子代理的配合
|
|
123
|
-
|
|
124
|
-
- **所有子代理共享同一 Worktree**
|
|
125
|
-
- DAG 分析确保同层任务不修改相同文件
|
|
126
|
-
- 子代理无需关心 Worktree 存在(透明隔离)
|
|
127
|
-
- 控制器(主会话)负责 Worktree 的创建和清理
|
|
94
|
+
状态文件:`skywalk-sdd/state/apply-<change>-<capability>.json`
|
|
128
95
|
|
|
129
96
|
## 快速参考
|
|
130
97
|
|
|
131
|
-
|
|
|
98
|
+
| 问题 | 答案 |
|
|
132
99
|
|------|------|
|
|
133
|
-
|
|
|
134
|
-
|
|
|
135
|
-
|
|
|
136
|
-
|
|
|
137
|
-
|
|
|
138
|
-
| `.worktrees/` 不存在 | 创建并验证 gitignore |
|
|
139
|
-
| 权限错误 | 在当前目录继续工作 |
|
|
140
|
-
| 基线测试失败 | 报告 + 询问用户 |
|
|
141
|
-
| 完成 | `ExitWorktree(action="remove")` |
|
|
100
|
+
| 为了加速本地 apply? | 是 |
|
|
101
|
+
| 必须 master? | 否,用 record-base 的集成分支 |
|
|
102
|
+
| full 必须一 cap 一分支? | 建议,解耦才可并行 |
|
|
103
|
+
| 有依赖怎么办? | 串行 apply + 按序 finish |
|
|
104
|
+
| 子代理能建 worktree 吗? | 不能 |
|
|
@@ -65,6 +65,16 @@ node skywalk-sdd/log.cjs start --command=archive --project=. --change=<变更名
|
|
|
65
65
|
|
|
66
66
|
记录为 `<归档原因>`,它会进入 `archive-manifest.json`、archive telemetry 和最终报告。
|
|
67
67
|
|
|
68
|
+
### 2.5 确认无残留 Apply Worktree(Git 项目)
|
|
69
|
+
|
|
70
|
+
若项目使用 Apply worktree 隔离,归档前确认:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
git worktree list
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
应仅剩主工作区;或 telemetry 中存在 `worktree_finish` + `result=success` 事件。若仍有 `.worktrees/apply-*`,先执行 `node skywalk-sdd/apply-worktree-finish.cjs` 或手工清理。
|
|
77
|
+
|
|
68
78
|
### 3. 运行 telemetry doctor
|
|
69
79
|
|
|
70
80
|
```bash
|