kld-sdd 2.5.0 → 2.5.2
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 +95 -8
- package/kld-sdd-guide.html +1109 -0
- package/lib/command-bridge.js +156 -0
- package/lib/deploy-codebuddy-hooks.js +99 -0
- package/lib/hook-gate-core.js +333 -0
- package/lib/init.js +137 -82
- package/lib/settings-merge.js +85 -0
- package/lib/skills-bundle.js +142 -5
- package/lib/tool-profiles.js +270 -0
- package/package.json +4 -2
- package/skywalk-sdd/index.cjs +329 -24
- package/skywalk-sdd/ontology/artifact-observer.cjs +91 -0
- package/skywalk-sdd/ontology/artifact-parser.cjs +621 -0
- package/skywalk-sdd/ontology/change-lock.cjs +126 -0
- package/skywalk-sdd/ontology/cli.cjs +146 -0
- package/skywalk-sdd/ontology/effective-graph.cjs +158 -0
- package/skywalk-sdd/ontology/id.cjs +126 -0
- package/skywalk-sdd/ontology/identity-index.cjs +262 -0
- package/skywalk-sdd/ontology/normalizer.cjs +107 -0
- package/skywalk-sdd/ontology/runtime.cjs +341 -0
- package/skywalk-sdd/ontology/schema.cjs +139 -0
- package/skywalk-sdd/ontology/structural-identity.cjs +77 -0
- package/skywalk-sdd/ontology/traceability-validator.cjs +610 -0
- package/templates/commands/kunlunzhima/skill-bridge.md +23 -0
- package/templates/hooks/codebuddy/hooks/sdd-apply-gate.cjs +16 -0
- package/templates/hooks/codebuddy/hooks/sdd-apply-test-gate.cjs +395 -0
- package/templates/hooks/codebuddy/hooks/sdd-post-tool.cjs +123 -0
- package/templates/hooks/codebuddy/hooks/sdd-pre-tool.cjs +16 -0
- package/templates/hooks/codebuddy/hooks/sdd-prompt.cjs +48 -0
- package/templates/hooks/codebuddy/hooks/sdd-skill-apply-gate.cjs +16 -0
- package/templates/hooks/codebuddy/hooks/sdd-stop.cjs +70 -0
- package/templates/hooks/codebuddy/settings.json +72 -0
- package/templates/openspec/design.md +18 -0
- package/templates/openspec/proposal.md +19 -6
- package/templates/openspec/spec.md +62 -8
- package/templates/openspec/tasks.md +28 -6
- package/templates/skills/kld-sdd/opsx-apply/SKILL.md +5 -5
- package/templates/skills/kld-sdd/opsx-archive/SKILL.md +9 -0
- package/templates/skills/kld-sdd/opsx-check/SKILL.md +17 -1
- package/templates/skills/kld-sdd/opsx-design/SKILL.md +10 -1
- package/templates/skills/kld-sdd/opsx-explore/SKILL.md +1 -1
- package/templates/skills/kld-sdd/opsx-propose/SKILL.md +11 -1
- package/templates/skills/kld-sdd/opsx-rules/SKILL.md +131 -0
- package/templates/skills/kld-sdd/opsx-rules/checklist.md +27 -0
- package/templates/skills/kld-sdd/opsx-rules/reference.md +124 -0
- package/templates/skills/kld-sdd/opsx-spec/SKILL.md +12 -1
- package/templates/skills/kld-sdd/opsx-task/SKILL.md +10 -1
- package/templates/skills/kld-sdd/opsx-test/SKILL.md +1 -1
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"UserPromptSubmit": [
|
|
4
|
+
{
|
|
5
|
+
"hooks": [
|
|
6
|
+
{
|
|
7
|
+
"type": "command",
|
|
8
|
+
"command": "node \"$CODEBUDDY_PROJECT_DIR/.codebuddy/hooks/sdd-prompt.cjs\""
|
|
9
|
+
}
|
|
10
|
+
]
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"PreToolUse": [
|
|
14
|
+
{
|
|
15
|
+
"matcher": "Skill",
|
|
16
|
+
"hooks": [
|
|
17
|
+
{
|
|
18
|
+
"type": "command",
|
|
19
|
+
"command": "node \"$CODEBUDDY_PROJECT_DIR/.codebuddy/hooks/sdd-skill-apply-gate.cjs\""
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"matcher": "Bash",
|
|
25
|
+
"hooks": [
|
|
26
|
+
{
|
|
27
|
+
"type": "command",
|
|
28
|
+
"command": "node \"$CODEBUDDY_PROJECT_DIR/.codebuddy/hooks/sdd-pre-tool.cjs\""
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"type": "command",
|
|
32
|
+
"command": "node \"$CODEBUDDY_PROJECT_DIR/.codebuddy/hooks/sdd-apply-test-gate.cjs\""
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"matcher": "Write|Edit",
|
|
38
|
+
"hooks": [
|
|
39
|
+
{
|
|
40
|
+
"type": "command",
|
|
41
|
+
"command": "node \"$CODEBUDDY_PROJECT_DIR/.codebuddy/hooks/sdd-apply-gate.cjs\""
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"PostToolUse": [
|
|
47
|
+
{
|
|
48
|
+
"matcher": "Bash",
|
|
49
|
+
"hooks": [
|
|
50
|
+
{
|
|
51
|
+
"type": "command",
|
|
52
|
+
"command": "node \"$CODEBUDDY_PROJECT_DIR/.codebuddy/hooks/sdd-post-tool.cjs\""
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"Stop": [
|
|
58
|
+
{
|
|
59
|
+
"hooks": [
|
|
60
|
+
{
|
|
61
|
+
"type": "command",
|
|
62
|
+
"command": "node \"$CODEBUDDY_PROJECT_DIR/.codebuddy/hooks/sdd-apply-test-gate.cjs\""
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"type": "command",
|
|
66
|
+
"command": "node \"$CODEBUDDY_PROJECT_DIR/.codebuddy/hooks/sdd-stop.cjs\""
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
capability-id: "CAP-<CAPABILITY>" # 必须与对应 spec.md 一致
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# 局部技术实现方案 - [Capability 名称]
|
|
2
6
|
|
|
3
7
|
> **定位**:单一 Capability 的业务维度技术实现方案
|
|
@@ -8,6 +12,20 @@
|
|
|
8
12
|
|
|
9
13
|
---
|
|
10
14
|
|
|
15
|
+
## 0. 本体语义锚点
|
|
16
|
+
|
|
17
|
+
<!-- 每个独立设计单元创建一个 DES;修改既有设计时复用原 ID -->
|
|
18
|
+
|
|
19
|
+
### [DES-<CAPABILITY>-NNN] <!-- 设计单元名称 -->
|
|
20
|
+
- **entity-id**: <UUID>
|
|
21
|
+
- **version-id**: <UUID>
|
|
22
|
+
- **delta-state**: added
|
|
23
|
+
- **predecessor-version**: 无
|
|
24
|
+
- **realizes**: STMT-<CAPABILITY>-NNN
|
|
25
|
+
- **设计范围**: <!-- 本设计负责实现的局部范围 -->
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
11
29
|
## 1. 字段完整性追溯表
|
|
12
30
|
|
|
13
31
|
> **⛔ 核心红线**:用户在 Spec 中输入的所有字段必须在此表中体现,严禁无故丢弃!
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
# 【用户选择配置 - 由 /opsx:propose 引导填写】
|
|
3
|
+
change-id: "CHG-<CHANGE-SLUG>" # 创建时生成,后续不得修改
|
|
4
|
+
entity-id: "<UUID>" # Change 的全局逻辑实体 UUID,added 时生成
|
|
5
|
+
version-id: "<UUID>" # 本次 Change 版本 UUID
|
|
6
|
+
delta-state: "added"
|
|
7
|
+
predecessor-version: "" # added 留空;modified/removed 指向直接前序版本
|
|
8
|
+
mode: "" # full=分 Capability 产物,simple=根目录精简产物
|
|
3
9
|
test-strategy: "" # tdd=测试先行, impl-first=实现优先, none=无测试
|
|
4
10
|
---
|
|
5
11
|
|
|
@@ -7,7 +13,7 @@ test-strategy: "" # tdd=测试先行, impl-first=实现优先, none=无测试
|
|
|
7
13
|
|
|
8
14
|
> **定位**:变更的业务意图(Why)与上下文总览
|
|
9
15
|
>
|
|
10
|
-
>
|
|
16
|
+
> **必需性**:ontology v2 新产物必须保留 proposal,用于承载 Change/Capability 身份和 profile;旧 proposal-less Simple 只能兼容扫描,不能直接归档为 confirmed
|
|
11
17
|
|
|
12
18
|
---
|
|
13
19
|
|
|
@@ -41,11 +47,19 @@ test-strategy: "" # tdd=测试先行, impl-first=实现优先, none=无测试
|
|
|
41
47
|
|
|
42
48
|
### 3.1 新增能力
|
|
43
49
|
<!-- 每个能力会创建 specs/<name>/spec.md,使用 kebab-case 命名 -->
|
|
44
|
-
- `<capability-name>`: <能力简要描述>
|
|
50
|
+
- [CAP-<CAPABILITY>] `<capability-name>`: <能力简要描述>
|
|
51
|
+
- **entity-id**: <UUID>
|
|
52
|
+
- **version-id**: <UUID>
|
|
53
|
+
- **delta-state**: added
|
|
54
|
+
- **predecessor-version**: 无
|
|
45
55
|
|
|
46
56
|
### 3.2 修改能力
|
|
47
|
-
<!--
|
|
48
|
-
- `<existing-name>`: <修改什么需求>
|
|
57
|
+
<!-- 修改既有能力必须复用原 CAP ID,不得重新编号 -->
|
|
58
|
+
- [CAP-<EXISTING>] `<existing-name>`: <修改什么需求>
|
|
59
|
+
- **entity-id**: <复用历史 UUID>
|
|
60
|
+
- **version-id**: <新 UUID>
|
|
61
|
+
- **delta-state**: modified
|
|
62
|
+
- **predecessor-version**: <直接前序 version UUID>
|
|
49
63
|
|
|
50
64
|
---
|
|
51
65
|
|
|
@@ -103,5 +117,4 @@ test-strategy: "" # tdd=测试先行, impl-first=实现优先, none=无测试
|
|
|
103
117
|
> - [ ] 逻辑链路已闭环
|
|
104
118
|
> - [ ] 受影响模块已明确
|
|
105
119
|
> - [ ] 依赖关系已梳理
|
|
106
|
-
> - [ ]
|
|
107
|
-
> - [ ] 能力分解章节已明确列出所有能力
|
|
120
|
+
> - [ ] 能力分解章节已明确列出所有能力
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
capability-id: "CAP-<CAPABILITY>" # 必须与 proposal.md 中的 Capability ID 一致
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# spec.md - 能力规格定义
|
|
2
6
|
|
|
3
7
|
> **定位**:单个能力(capability)的技术规格定义,用于 `specs/<capability>/spec.md`
|
|
@@ -14,29 +18,49 @@
|
|
|
14
18
|
|
|
15
19
|
### 新增需求
|
|
16
20
|
|
|
17
|
-
<!--
|
|
21
|
+
<!-- 新增实体按当前最大序号 + 1 分配 ID;已有实体修改时复用原 ID -->
|
|
18
22
|
|
|
19
|
-
####
|
|
23
|
+
#### 需求项:[STMT-<CAPABILITY>-NNN] <!-- 需求名称 -->
|
|
24
|
+
- **entity-id**: <UUID>
|
|
25
|
+
- **version-id**: <UUID>
|
|
26
|
+
- **delta-state**: added
|
|
27
|
+
- **predecessor-version**: 无
|
|
20
28
|
|
|
21
29
|
<!-- 需求描述,使用「必须」而非「应该」「可以」 -->
|
|
22
30
|
系统必须 ...
|
|
23
31
|
|
|
24
|
-
#####
|
|
32
|
+
##### 场景:[AC-<CAPABILITY>-NNN] <!-- 场景名称 -->
|
|
33
|
+
- **entity-id**: <UUID>
|
|
34
|
+
- **version-id**: <UUID>
|
|
35
|
+
- **delta-state**: added
|
|
36
|
+
- **predecessor-version**: 无
|
|
25
37
|
- **当** <!-- 触发条件 -->
|
|
26
38
|
- **预期** <!-- 预期结果 -->
|
|
27
39
|
|
|
28
|
-
#####
|
|
40
|
+
##### 场景:[AC-<CAPABILITY>-NNN] <!-- 另一个场景 -->
|
|
41
|
+
- **entity-id**: <UUID>
|
|
42
|
+
- **version-id**: <UUID>
|
|
43
|
+
- **delta-state**: added
|
|
44
|
+
- **predecessor-version**: 无
|
|
29
45
|
- **当** <!-- 触发条件 -->
|
|
30
46
|
- **预期** <!-- 预期结果 -->
|
|
31
47
|
|
|
32
48
|
### 修改需求
|
|
33
49
|
|
|
34
|
-
<!--
|
|
50
|
+
<!-- 修改已有需求时复用原 STMT/AC/CON ID,只展开实际变化内容 -->
|
|
35
51
|
|
|
36
|
-
####
|
|
52
|
+
#### 需求项:[STMT-<CAPABILITY>-NNN] <!-- 已有需求名称,复用原 ID -->
|
|
53
|
+
- **entity-id**: <复用历史 UUID>
|
|
54
|
+
- **version-id**: <新 UUID>
|
|
55
|
+
- **delta-state**: modified
|
|
56
|
+
- **predecessor-version**: <直接前序 version UUID>
|
|
37
57
|
系统必须 ...
|
|
38
58
|
|
|
39
|
-
#####
|
|
59
|
+
##### 场景:[AC-<CAPABILITY>-NNN] <!-- 场景名称,复用或新增 ID -->
|
|
60
|
+
- **entity-id**: <复用历史 UUID;新增场景则生成新 UUID>
|
|
61
|
+
- **version-id**: <新 UUID>
|
|
62
|
+
- **delta-state**: <modified|added>
|
|
63
|
+
- **predecessor-version**: <modified 时填写;added 为无>
|
|
40
64
|
- **当** <!-- 触发条件 -->
|
|
41
65
|
- **预期** <!-- 预期结果 -->
|
|
42
66
|
|
|
@@ -44,10 +68,40 @@
|
|
|
44
68
|
|
|
45
69
|
<!-- 仅当移除已有需求时使用 -->
|
|
46
70
|
|
|
47
|
-
####
|
|
71
|
+
#### 需求项:[STMT-<CAPABILITY>-NNN] <!-- 被移除的需求名称,复用原 ID -->
|
|
72
|
+
- **entity-id**: <复用历史 UUID>
|
|
73
|
+
- **version-id**: <新墓碑版本 UUID>
|
|
74
|
+
- **delta-state**: removed
|
|
75
|
+
- **predecessor-version**: <直接前序 version UUID>
|
|
48
76
|
**移除原因**:<!-- 移除原因 -->
|
|
49
77
|
**迁移方案**:<!-- 迁移方案 -->
|
|
50
78
|
|
|
79
|
+
### 约束
|
|
80
|
+
|
|
81
|
+
#### 约束:[CON-<CAPABILITY>-NNN] <!-- 约束名称 -->
|
|
82
|
+
- **entity-id**: <UUID>
|
|
83
|
+
- **version-id**: <UUID>
|
|
84
|
+
- **delta-state**: added
|
|
85
|
+
- **predecessor-version**: 无
|
|
86
|
+
- **constrains**: STMT-<CAPABILITY>-NNN
|
|
87
|
+
- **约束内容**: <!-- 可量化、可验证的约束 -->
|
|
88
|
+
|
|
89
|
+
### 继承引用
|
|
90
|
+
|
|
91
|
+
<!-- unchanged 内容只记录既有实体/版本引用,不复制历史正文;断链时 opsx-check 必须阻断 -->
|
|
92
|
+
- **anchor**: `STMT-<CAPABILITY>-NNN`
|
|
93
|
+
- **entity-id**: `<复用历史 UUID>`
|
|
94
|
+
- **version-id**: `<复用历史 version UUID>`
|
|
95
|
+
- **delta-state**: `unchanged`
|
|
96
|
+
- **source**: `<archive>/<artifact>#<anchor>`
|
|
97
|
+
- **source-version-hash**: `<前序实体版本内容 SHA-256>`
|
|
98
|
+
|
|
99
|
+
### 继承关系
|
|
100
|
+
|
|
101
|
+
<!-- 历史关系不会自动全部继承;只有本节显式列出的 confirmed 关系进入 Effective Graph -->
|
|
102
|
+
- **relation**: `STMT-<CAPABILITY>-NNN acceptedBy AC-<CAPABILITY>-NNN`
|
|
103
|
+
- **source**: `<archive>/<artifact>#<from>-<relation>-<to>`
|
|
104
|
+
|
|
51
105
|
---
|
|
52
106
|
|
|
53
107
|
## 2. 技术契约(SDD 扩展)
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
capability-id: "CAP-<CAPABILITY>" # 必须与对应 spec/design 一致
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# 实施任务拆解 - [Capability 名称]
|
|
2
6
|
|
|
3
7
|
> **定位**:单一 Capability 的 AI 编码引擎执行单元
|
|
@@ -116,10 +120,16 @@
|
|
|
116
120
|
|
|
117
121
|
---
|
|
118
122
|
|
|
119
|
-
### [TASK
|
|
123
|
+
### [TASK-<CAPABILITY>-NNN] 任务名称
|
|
120
124
|
|
|
125
|
+
- **entity-id**: <UUID>
|
|
126
|
+
- **version-id**: <UUID>
|
|
127
|
+
- **delta-state**: added
|
|
128
|
+
- **predecessor-version**: 无
|
|
121
129
|
- **类型**: 数据层 / 接口层 / UI层 / 测试
|
|
122
|
-
-
|
|
130
|
+
- **implements**: DES-<CAPABILITY>-NNN
|
|
131
|
+
- **covers**: STMT-<CAPABILITY>-NNN
|
|
132
|
+
- **dependsOn**: 无
|
|
123
133
|
- **状态**: [ ] 未完成
|
|
124
134
|
|
|
125
135
|
#### 任务描述
|
|
@@ -146,10 +156,16 @@
|
|
|
146
156
|
|
|
147
157
|
---
|
|
148
158
|
|
|
149
|
-
### [TASK
|
|
159
|
+
### [TASK-<CAPABILITY>-NNN] 任务名称
|
|
150
160
|
|
|
161
|
+
- **entity-id**: <UUID>
|
|
162
|
+
- **version-id**: <UUID>
|
|
163
|
+
- **delta-state**: added
|
|
164
|
+
- **predecessor-version**: 无
|
|
151
165
|
- **类型**: 数据层 / 接口层 / UI层 / 测试
|
|
152
|
-
-
|
|
166
|
+
- **implements**: DES-<CAPABILITY>-NNN
|
|
167
|
+
- **covers**: STMT-<CAPABILITY>-NNN
|
|
168
|
+
- **dependsOn**: 无
|
|
153
169
|
- **状态**: [ ] 未完成
|
|
154
170
|
|
|
155
171
|
#### 任务描述
|
|
@@ -173,10 +189,16 @@
|
|
|
173
189
|
|
|
174
190
|
---
|
|
175
191
|
|
|
176
|
-
### [TASK
|
|
192
|
+
### [TASK-<CAPABILITY>-NNN] 任务名称
|
|
177
193
|
|
|
194
|
+
- **entity-id**: <UUID>
|
|
195
|
+
- **version-id**: <UUID>
|
|
196
|
+
- **delta-state**: added
|
|
197
|
+
- **predecessor-version**: 无
|
|
178
198
|
- **类型**: 数据层 / 接口层 / UI层 / 测试
|
|
179
|
-
-
|
|
199
|
+
- **implements**: DES-<CAPABILITY>-NNN
|
|
200
|
+
- **covers**: STMT-<CAPABILITY>-NNN
|
|
201
|
+
- **dependsOn**: TASK-<CAPABILITY>-NNN, TASK-<CAPABILITY>-NNN
|
|
180
202
|
- **状态**: [ ] 未完成
|
|
181
203
|
|
|
182
204
|
#### 任务描述
|
|
@@ -29,7 +29,7 @@ allowed-tools:
|
|
|
29
29
|
> **🖥️ 跨平台执行规则**
|
|
30
30
|
> - 先确认当前终端工作目录是项目根目录;若不是,先 `cd` 到项目根目录。
|
|
31
31
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
32
|
-
> -
|
|
32
|
+
> - ${SHELL_GUIDANCE}
|
|
33
33
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
34
34
|
> **📊 Telemetry(必做,不得跳过)**
|
|
35
35
|
> - 阶段开始 / 阶段结束 / `task_update` / `ai_adoption_review` / `worktree_finish` 的**完整命令模板**见 `./reference.md`「📊 Telemetry 命令模板」。
|
|
@@ -115,7 +115,7 @@ openspec list --json
|
|
|
115
115
|
### 1.2 【Check 门禁检查】验证质量门禁状态
|
|
116
116
|
|
|
117
117
|
> **⛔ 强制门禁**:apply 阶段开始前,必须确认 check 阶段已完成。这是 SDD 流程的关键质量保障。
|
|
118
|
-
> 详细检查步骤、判定与门禁体系说明见 `./checklist.md`「§1.2 Check
|
|
118
|
+
> 详细检查步骤、判定与门禁体系说明见 `./checklist.md`「§1.2 Check 门禁」。未完成强制拒绝。${HOOK_GATE_DESCRIPTION}
|
|
119
119
|
|
|
120
120
|
### 1.5 【本地并行】Worktree 与工作区(建议性策略)
|
|
121
121
|
|
|
@@ -230,7 +230,7 @@ g. **继续下一个层级** — 重新检查 DAG,找出依赖已满足的下
|
|
|
230
230
|
|
|
231
231
|
### 6.0 【条件必做】单元测试真实执行(`test-strategy` 非 `none`)
|
|
232
232
|
|
|
233
|
-
当 `proposal.md` 的 `test-strategy` 为 **`tdd`** 或 **`impl-first`** 时,在结束 apply 或执行 §6.1 收尾之前,必须真实运行单元测试并留 telemetry 证据。**详细执行要求与证据形式见 `./reference.md`「§6.0」+ `./checklist.md`「§6.0
|
|
233
|
+
当 `proposal.md` 的 `test-strategy` 为 **`tdd`** 或 **`impl-first`** 时,在结束 apply 或执行 §6.1 收尾之前,必须真实运行单元测试并留 telemetry 证据。**详细执行要求与证据形式见 `./reference.md`「§6.0」+ `./checklist.md`「§6.0 单元测试真实执行自检」**。${HOOK_GATE_DESCRIPTION}
|
|
234
234
|
|
|
235
235
|
### 6.1 【条件必做】Worktree 收尾(仅当 §1.5 已创建 worktree)
|
|
236
236
|
|
|
@@ -247,11 +247,11 @@ g. **继续下一个层级** — 重新检查 DAG,找出依赖已满足的下
|
|
|
247
247
|
|
|
248
248
|
> 完整 ⛔ 强制项勾选清单见 `./checklist.md`「Guardrails ⛔ 强制项」。核心红线:
|
|
249
249
|
|
|
250
|
-
- **⛔ Check 门禁检查**:apply 前必须确认 check
|
|
250
|
+
- **⛔ Check 门禁检查**:apply 前必须确认 check 已完成;未完成强制拒绝。${HOOK_GATE_DESCRIPTION}
|
|
251
251
|
- **⛔ 渐进式加载 + 隔离红线**:只加载当前 Capability 的四文档链,禁止加载同级其他 Capability 的文档。
|
|
252
252
|
- **⛔ DAG 依赖拦截**:执行任务前必须检查依赖,前置未完成必须拦截。
|
|
253
253
|
- **⛔ 编译检查门禁**:每完成一个任务后必须运行编译检查,编译失败禁止标记已完成。
|
|
254
|
-
- **⛔ 测试执行门禁**:根据 `test-strategy` 决定(tdd=强制, impl-first=强制补跑, none=跳过);须真实执行并留 telemetry
|
|
254
|
+
- **⛔ 测试执行门禁**:根据 `test-strategy` 决定(tdd=强制, impl-first=强制补跑, none=跳过);须真实执行并留 telemetry。${HOOK_GATE_DESCRIPTION}
|
|
255
255
|
- **⛔ 必须实时更新任务状态**:每完成一个任务立即改 tasks.md,两种格式同步。
|
|
256
256
|
- **Git 只读策略**:禁止为了度量自动初始化 Git、创建分支或提交 commit;非 Git 项目用 `vcs_mode=no-git` 继续执行。
|
|
257
257
|
- **⛔ Step 0.1 隔离校验必做**:建 worktree / 建议分支名前必须完成 proposal + 跨 cap spec 依赖校验并输出报告。
|
|
@@ -155,6 +155,15 @@ node skywalk-sdd/log.cjs record --type=baseline_record --command=archive --proje
|
|
|
155
155
|
|
|
156
156
|
---
|
|
157
157
|
|
|
158
|
+
## 本体语义归档门禁
|
|
159
|
+
|
|
160
|
+
- 归档前必须运行 `node skywalk-sdd/log.cjs semantic-reconcile --project=. --change=<变更名称>`,不能只信任文件观察事件。
|
|
161
|
+
- 随后必须运行 `node skywalk-sdd/log.cjs semantic-check --project=. --change=<变更名称>`;有阻断诊断时禁止移动活动 Change。
|
|
162
|
+
- `archive-docs` 成功后必须在归档目录生成 `archive-ontology.json`,并将 `review_status` 标记为 `confirmed`。
|
|
163
|
+
- Archive 快照必须固化人工锚点、逻辑实体 UUID、版本 UUID、前序版本 UUID、delta-state 和内容哈希;任一 UUID 冲突或谱系断裂都不得 confirmed。
|
|
164
|
+
- 归档目录已经复制但语义快照失败时,不得删除活动 Change,不得标记 confirmed。
|
|
165
|
+
- unchanged 正文保留在前序 Archive;当前归档只固化差量事实、继承引用和来源锚点。
|
|
166
|
+
|
|
158
167
|
## Guardrails
|
|
159
168
|
|
|
160
169
|
- 归档操作执行前必须让用户确认归档原因。
|
|
@@ -29,7 +29,7 @@ allowed-tools:
|
|
|
29
29
|
> **🖥️ 跨平台执行规则**
|
|
30
30
|
> - 先确认当前终端工作目录是项目根目录;若不是,先 `cd` 到项目根目录。
|
|
31
31
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
32
|
-
> -
|
|
32
|
+
> - ${SHELL_GUIDANCE}
|
|
33
33
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
34
34
|
> **📊 Telemetry(必做,不得跳过)**
|
|
35
35
|
> - 阶段开始:`node skywalk-sdd/log.cjs start --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
@@ -200,6 +200,22 @@ node skywalk-sdd/log.cjs record --type=conformance_review --command=check --proj
|
|
|
200
200
|
|
|
201
201
|
---
|
|
202
202
|
|
|
203
|
+
## 本体语义关系门禁
|
|
204
|
+
|
|
205
|
+
在其他质量检查前必须运行:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
node skywalk-sdd/log.cjs semantic-reconcile --project=. --change=<变更名称> --profile=<simple|full|strict>
|
|
209
|
+
node skywalk-sdd/log.cjs semantic-check --project=. --change=<变更名称> --profile=<simple|full|strict>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
- `simple` 必须阻断 STMT 无 AC;没有 design/tasks 时跳过对应链路,不得误报。
|
|
213
|
+
- `full` 必须阻断 STMT→AC→Design→Task 任一断链。
|
|
214
|
+
- `strict` 在 full 基础上要求完整来源字段并提升可选警告。
|
|
215
|
+
- 所有 profile 都必须阻断重复人工锚点、UUID 缺失/非法、跨 Change 或 Archive 的实体 UUID 误复用、版本 UUID 重用、版本谱系断裂、悬空引用、非法 domain/range 和 Task 依赖成环。
|
|
216
|
+
- `added` 必须使用全新实体/版本 UUID;`modified/removed` 必须复用实体 UUID并指向直接前序版本;`unchanged` 必须复用历史实体和版本 UUID且不得复制历史正文。
|
|
217
|
+
- 文件观察结果只能作为快速上下文,check 必须重新全量 semantic-reconcile。
|
|
218
|
+
|
|
203
219
|
## Guardrails
|
|
204
220
|
|
|
205
221
|
- Check 是**只读检查**操作,不修改任何文档内容
|
|
@@ -39,7 +39,7 @@ allowed-tools:
|
|
|
39
39
|
> **🖥️ 跨平台执行规则**
|
|
40
40
|
> - 先确认当前终端工作目录是项目根目录;若不是,先 `cd` 到项目根目录。
|
|
41
41
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
42
|
-
> -
|
|
42
|
+
> - ${SHELL_GUIDANCE}
|
|
43
43
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
44
44
|
> **📊 Telemetry(必做,不得跳过)** — 阶段开始 / 阶段结束**命令模板**见 `./reference.md`「📊 Telemetry 命令模板」。
|
|
45
45
|
|
|
@@ -164,6 +164,15 @@ design.md 中若使用 version 正则约束(如格式校验 `^\d+\.\d+\.\d+$`
|
|
|
164
164
|
|
|
165
165
|
---
|
|
166
166
|
|
|
167
|
+
## 本体语义生成契约
|
|
168
|
+
|
|
169
|
+
- 写入与当前 spec 一致的 `capability-id`。
|
|
170
|
+
- 每个独立设计单元必须使用 `DES-<CAPABILITY>-NNN`;新增前按当前最大序号 + 1 分配,修改时复用原 ID。
|
|
171
|
+
- 每个 DES 必须同时写 `entity-id`、`version-id`、`delta-state` 和按需的 `predecessor-version`;新增用 `semantic-identity --delta-state=added`,修改时复用实体 UUID 并生成新版本 UUID。
|
|
172
|
+
- 每个 DES 必须通过 `**realizes**: STMT-*` 显式引用一个或多个真实 STMT。
|
|
173
|
+
- 不得仅凭文本相似创建 realizes;没有上游 STMT 时必须标记 unresolved。
|
|
174
|
+
- 生成结束后必须运行 `node skywalk-sdd/log.cjs semantic-reconcile --project=. --change=<name>`。
|
|
175
|
+
|
|
167
176
|
## Guardrails
|
|
168
177
|
|
|
169
178
|
> 完整 ⛔ 强制项勾选清单见 `./checklist.md`「Guardrails ⛔ 强制项」。核心红线:
|
|
@@ -20,7 +20,7 @@ allowed-tools:
|
|
|
20
20
|
> **🖥️ 跨平台执行规则**
|
|
21
21
|
> - 先确认当前终端工作目录是项目根目录;若不是,先 `cd` 到项目根目录。
|
|
22
22
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
23
|
-
> -
|
|
23
|
+
> - ${SHELL_GUIDANCE}
|
|
24
24
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
25
25
|
> **📊 Telemetry(必做,不得跳过)**
|
|
26
26
|
> - 阶段开始:`node skywalk-sdd/log.cjs start --command=explore --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
@@ -31,7 +31,7 @@ allowed-tools:
|
|
|
31
31
|
> **🖥️ 跨平台执行规则**
|
|
32
32
|
> - 先确认当前终端工作目录是项目根目录;若不是,先 `cd` 到项目根目录。
|
|
33
33
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
34
|
-
> -
|
|
34
|
+
> - ${SHELL_GUIDANCE}
|
|
35
35
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
36
36
|
> **📊 Telemetry(必做,不得跳过)** — 阶段开始 / 阶段结束**命令模板**见 `./reference.md`「📊 Telemetry 命令模板」。
|
|
37
37
|
|
|
@@ -202,6 +202,16 @@ openspec instructions proposal --change "<name>" --json
|
|
|
202
202
|
|
|
203
203
|
---
|
|
204
204
|
|
|
205
|
+
## 本体语义生成契约
|
|
206
|
+
|
|
207
|
+
- 创建 Change 时必须写入 `change-id: CHG-<CHANGE-SLUG>`;重新编辑时不得修改已有 Change ID。
|
|
208
|
+
- 每个新增 Capability 必须写成 `[CAP-<CAPABILITY>] <slug>: <说明>`。
|
|
209
|
+
- 修改既有 Capability 时必须复用已有 CAP ID,不得修改或重新分配已有实体 ID。
|
|
210
|
+
- 分配新 CAP ID 前必须扫描当前 proposal 和归档中的显式编号;不得只凭标题认定跨 Change 同一性。
|
|
211
|
+
- 每个 Change/Capability 同时写人工锚点、`entity-id`、`version-id` 和 `delta-state`。新增时必须调用 `node skywalk-sdd/log.cjs semantic-identity --delta-state=added`,不得手写或复制 UUID。
|
|
212
|
+
- 修改既有 Capability 时调用 `semantic-identity --delta-state=modified --entity-id=<历史实体UUID> --predecessor-version=<直接前序版本UUID>`;复用实体 UUID,但必须生成新版本 UUID。
|
|
213
|
+
- 本阶段只声明 Change 和 Capability,不得提前生成 STMT、AC、DES 或 TASK 事实。
|
|
214
|
+
|
|
205
215
|
## Guardrails
|
|
206
216
|
|
|
207
217
|
> 完整 ⛔ 强制项勾选清单见 `./checklist.md`「Guardrails ⛔ 强制项」。核心红线:
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opsx-rules
|
|
3
|
+
description: "规则生成技能 - 扫描项目生成 5 主题 Agent 规则,或对比现有规则输出更新建议"
|
|
4
|
+
argument-hint: "[generate|review] [--agent <id>]"
|
|
5
|
+
license: MIT
|
|
6
|
+
compatibility: 无外部依赖;opencode 接线需项目存在或可创建 opencode.json。
|
|
7
|
+
metadata:
|
|
8
|
+
author: sdd-team
|
|
9
|
+
version: "1.0"
|
|
10
|
+
allowed-tools:
|
|
11
|
+
- Bash
|
|
12
|
+
- Read
|
|
13
|
+
- Write
|
|
14
|
+
- Edit
|
|
15
|
+
- Glob
|
|
16
|
+
- Grep
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
你是一个 SDD 项目规则生成与维护专家。激活本技能后,你将扫描项目事实,为已部署的 Agent 生成或审查规则文件。
|
|
20
|
+
|
|
21
|
+
> **🖥️ 跨平台执行规则**
|
|
22
|
+
> - 先确认当前终端工作目录是项目根目录;若不是,先 `cd` 到项目根目录。
|
|
23
|
+
> - ${SHELL_GUIDANCE}
|
|
24
|
+
> - **本技能不写入 SkyWalk Telemetry**(与 `opsx-knowledge` 同属辅助技能,不走 `log.cjs start/end`)。
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 技能定位
|
|
29
|
+
|
|
30
|
+
| 维度 | 内容 |
|
|
31
|
+
|------|------|
|
|
32
|
+
| 核心问题 | 各 Agent 的规则文件在哪里、格式如何、是否与项目事实一致 |
|
|
33
|
+
| 关键输出 | generate:按 Agent 落位的 5 主题规则文件;review:更新建议表 |
|
|
34
|
+
| 操作类型 | generate 写入新规则;review 默认只读,确认后才写入 |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 启动流程
|
|
39
|
+
|
|
40
|
+
### 1. 检测已部署 Agent 与运行模式
|
|
41
|
+
|
|
42
|
+
扫描以下目录,记录存在的 Agent(`--agent <id>` 可过滤为单个):
|
|
43
|
+
|
|
44
|
+
| Agent id | 检测路径 |
|
|
45
|
+
|----------|----------|
|
|
46
|
+
| cursor | `.cursor/` |
|
|
47
|
+
| claude | `.claude/` |
|
|
48
|
+
| codebuddy | `.codebuddy/` |
|
|
49
|
+
| qoder | `.qoder/` |
|
|
50
|
+
| opencode | `.opencode/` |
|
|
51
|
+
| kunlunzhima | `.kunlunzhima/` |
|
|
52
|
+
| workbuddy | `.workbuddy/` |
|
|
53
|
+
| codex | `.agents/` |
|
|
54
|
+
|
|
55
|
+
**模式判定**(参数优先,否则自动):
|
|
56
|
+
- 显式 `generate` → 生成模式
|
|
57
|
+
- 显式 `review` → 审查模式
|
|
58
|
+
- 未指定:任一已选 Agent 的规则目录已有文件 → **review**;否则 → **generate**
|
|
59
|
+
|
|
60
|
+
规则目录与格式详见 `reference.md` 落位矩阵。**KunlunZhima 注意**:目录是 `.kunlunzhima/.rules/`(点前缀),不是 `rules/`。
|
|
61
|
+
|
|
62
|
+
### 2. 轻量项目扫描(generate 与 review 共用,不落盘)
|
|
63
|
+
|
|
64
|
+
借鉴 codebase-map 三视角,只读扫描:
|
|
65
|
+
|
|
66
|
+
| 视角 | 探测目标 |
|
|
67
|
+
|------|----------|
|
|
68
|
+
| STACK | `package.json` / `pom.xml` / `pyproject.toml` / `go.mod` / `Cargo.toml`;构建命令 |
|
|
69
|
+
| STRUCTURE | 顶层目录职责、入口文件(`bin/`、`src/`、`lib/`、`app/`) |
|
|
70
|
+
| CONVENTIONS | ESLint/Prettier/Ruff 配置;`test/` 目录与框架;`git log --oneline -20` 提交风格 |
|
|
71
|
+
|
|
72
|
+
扫描结果作为 5 主题规则的正文依据,禁止编造与仓库不符的内容。
|
|
73
|
+
|
|
74
|
+
### 3a. generate 模式
|
|
75
|
+
|
|
76
|
+
对 Step 1 检测到的每个 Agent:
|
|
77
|
+
|
|
78
|
+
1. 读取 `reference.md` 中该 Agent 的 `rulesDir` / `rulesFormat` / `rulesWiring`
|
|
79
|
+
2. 按 5 主题(architecture / coding-style / testing / database-safety / git-commit)生成内容
|
|
80
|
+
3. 按格式模板写入规则文件(见 `reference.md`)
|
|
81
|
+
4. **已有同名文件 → 跳过**,提示用户改用 review 模式
|
|
82
|
+
5. **接线**(仅 wiring ≠ none 的 Agent):
|
|
83
|
+
- `opencode-config`:保守合并 `opencode.json` 的 `instructions` 数组(只增不删);优先指向已有 `.claude/rules/*.md`
|
|
84
|
+
- `agents-md`:在 `AGENTS.md` 用 `<!-- kld-sdd-rules:start/end -->` marker 追加/替换规则章节
|
|
85
|
+
- `context-file`:在 WorkBuddy 上下文文件加一行规则目录索引(见 reference.md)
|
|
86
|
+
|
|
87
|
+
### 3b. review 模式
|
|
88
|
+
|
|
89
|
+
1. 读取各 Agent 现有规则文件
|
|
90
|
+
2. 与 Step 2 扫描事实对比,输出建议表:
|
|
91
|
+
|
|
92
|
+
| 文件 | 主题 | 建议类型 | 依据 |
|
|
93
|
+
|------|------|----------|------|
|
|
94
|
+
| (路径) | architecture 等 | 新增 / 修订 / 过期 | 具体扫描证据 |
|
|
95
|
+
|
|
96
|
+
3. 使用 **AskUserQuestion** 让用户确认要应用的项
|
|
97
|
+
4. **未经确认不写文件**
|
|
98
|
+
|
|
99
|
+
### 4. 输出报告
|
|
100
|
+
|
|
101
|
+
```markdown
|
|
102
|
+
## opsx-rules 执行报告
|
|
103
|
+
|
|
104
|
+
| Agent | 模式 | 写入/建议文件数 | 接线 |
|
|
105
|
+
|-------|------|----------------|------|
|
|
106
|
+
| ... | generate/review | N | 无/opencode.json/AGENTS.md |
|
|
107
|
+
|
|
108
|
+
### 详情
|
|
109
|
+
- (列出路径与操作摘要)
|
|
110
|
+
|
|
111
|
+
### 后续
|
|
112
|
+
- 规则内容可手工微调;再次变更后运行 `/opsx-rules review`
|
|
113
|
+
- OpenCode 用户:确认 `opencode.json` instructions 已包含规则路径
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Guardrails
|
|
119
|
+
|
|
120
|
+
- **review 模式未经用户确认不写文件**
|
|
121
|
+
- **generate 模式不覆盖已有同名规则文件**(存在即跳过 + 提示 review)
|
|
122
|
+
- **opencode.json 合并只增不删**;写前提示用户备份已有配置
|
|
123
|
+
- **AGENTS.md 追加用 managed marker**,存在 marker 则整块替换(幂等)
|
|
124
|
+
- **规则内容来自扫描证据**,禁止编造项目不存在的框架或命令
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 渐进披露
|
|
129
|
+
|
|
130
|
+
- **Read `reference.md`** — 落位矩阵、格式模板、5 主题骨架、接线示例
|
|
131
|
+
- **Read `checklist.md`** — generate/review 前后检查项
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# opsx-rules 检查清单
|
|
2
|
+
|
|
3
|
+
## generate 前
|
|
4
|
+
|
|
5
|
+
- [ ] 工作目录为项目根
|
|
6
|
+
- [ ] 已检测存在的 Agent 目录
|
|
7
|
+
- [ ] 已完成 Step 2 轻量扫描(STACK / STRUCTURE / CONVENTIONS)
|
|
8
|
+
- [ ] 目标 Agent 规则目录无同名文件(有则改 review)
|
|
9
|
+
|
|
10
|
+
## generate 写后
|
|
11
|
+
|
|
12
|
+
- [ ] 5 主题文件均已写入(或按 Agent 格式合并)
|
|
13
|
+
- [ ] frontmatter 符合 reference.md 模板
|
|
14
|
+
- [ ] KunlunZhima 路径为 `.kunlunzhima/.rules/` 而非 `rules/`
|
|
15
|
+
- [ ] opencode.json / AGENTS.md 接线已完成(若 wiring 非 none)
|
|
16
|
+
- [ ] 未覆盖用户已有非受管文件
|
|
17
|
+
|
|
18
|
+
## review 前
|
|
19
|
+
|
|
20
|
+
- [ ] 已读取现有规则文件
|
|
21
|
+
- [ ] 已完成 Step 2 扫描
|
|
22
|
+
- [ ] 建议表已输出(文件 / 主题 / 类型 / 依据)
|
|
23
|
+
|
|
24
|
+
## review 写后
|
|
25
|
+
|
|
26
|
+
- [ ] 用户已通过 AskUserQuestion 确认
|
|
27
|
+
- [ ] 仅写入确认项
|