kld-sdd 2.6.21 → 2.7.8
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 +12 -5
- package/USABILITY.md +84 -0
- package/bin/kld-sdd-init.js +3 -9
- package/kld-sdd-guide.html +16 -4
- package/lib/hook-gate-core.js +327 -0
- package/lib/init.js +241 -94
- package/lib/scale-thresholds.json +19 -0
- package/lib/skills-bundle.js +2 -1
- package/package.json +5 -3
- package/skywalk-sdd/context-client.cjs +50 -30
- package/skywalk-sdd/index.cjs +49 -16
- package/skywalk-sdd/kb-sync-identity.cjs +99 -451
- package/skywalk-sdd/kb-upload.cjs +67 -44
- package/skywalk-sdd/lib/git-identity.cjs +270 -0
- package/skywalk-sdd/lib/usage-contract.cjs +13 -81
- package/skywalk-sdd/lib/usage-reporter.cjs +235 -104
- package/skywalk-sdd/lib/user-config.cjs +21 -46
- package/skywalk-sdd/metrics-v3.cjs +2 -2
- package/skywalk-sdd/ontology/active-changes.cjs +2 -1
- package/skywalk-sdd/ontology/archive-package.cjs +1 -1
- package/skywalk-sdd/ontology/artifact-parser.cjs +8 -6
- package/skywalk-sdd/ontology/id.cjs +5 -4
- package/skywalk-sdd/ontology/identity-index.cjs +4 -3
- package/skywalk-sdd/ontology/list-changes.cjs +1 -1
- package/skywalk-sdd/ontology/runtime.cjs +7 -3
- package/skywalk-sdd/ontology/schema.cjs +2 -0
- package/skywalk-sdd/ontology/traceability-validator.cjs +74 -4
- package/skywalk-sdd/ontology/workspace-layout.cjs +25 -5
- package/skywalk-sdd/reporting/change-report-model.cjs +4 -3
- package/templates/git-hooks/commit-msg +71 -27
- package/templates/git-hooks/consistency-check-core.cjs +1087 -0
- package/templates/git-hooks/hooks.config +38 -0
- package/templates/git-hooks/pre-commit +62 -27
- package/templates/git-hooks/pre-commit-consistency-check.cjs +29 -332
- package/templates/git-hooks/pre-commit-sdd-check.cjs +98 -0
- package/templates/git-hooks/pre-push +70 -27
- package/templates/git-hooks/pre-push-consistency-check.cjs +61 -299
- package/templates/hooks/codebuddy/hooks/sdd-tdd-rhythm-gate.cjs +1 -1
- package/templates/openspec/tasks.md +3 -3
- package/templates/skills/kld-sdd/opsx-apply/SKILL.md +43 -6
- package/templates/skills/kld-sdd/opsx-apply/checklist.md +1 -1
- package/templates/skills/kld-sdd/opsx-apply/reference.md +1 -1
- package/templates/skills/kld-sdd/opsx-archive/SKILL.md +9 -13
- package/templates/skills/kld-sdd/opsx-check/SKILL.md +54 -328
- package/templates/skills/kld-sdd/opsx-check/checklist.md +7 -4
- package/templates/skills/kld-sdd/opsx-check/reference.md +58 -0
- package/templates/skills/kld-sdd/opsx-check/result-template.json +52 -0
- package/templates/skills/kld-sdd/opsx-check/reviewer.md +100 -0
- package/templates/skills/kld-sdd/opsx-consistency-check/SKILL.md +82 -451
- package/templates/skills/kld-sdd/opsx-consistency-check/{reference.md → references/reference.md} +0 -1
- package/templates/skills/kld-sdd/opsx-consistency-check/scripts/scripts.cjs +517 -0
- package/templates/skills/kld-sdd/opsx-design/SKILL.md +10 -30
- package/templates/skills/kld-sdd/opsx-design/checklist.md +3 -4
- package/templates/skills/kld-sdd/opsx-design/reference.md +1 -1
- package/templates/skills/kld-sdd/opsx-kb-ingest/SKILL.md +12 -74
- package/templates/skills/kld-sdd/opsx-ontology-query/SKILL.md +7 -5
- package/templates/skills/kld-sdd/opsx-ontology-query/phase-1-prechange.md +2 -2
- package/templates/skills/kld-sdd/opsx-ontology-query/reference.md +1 -1
- package/templates/skills/kld-sdd/opsx-propose/SKILL.md +28 -73
- package/templates/skills/kld-sdd/opsx-propose/checklist.md +8 -8
- package/templates/skills/kld-sdd/opsx-propose/interaction-policy.md +28 -0
- package/templates/skills/kld-sdd/opsx-propose/reference.md +12 -46
- package/templates/skills/kld-sdd/opsx-spec/SKILL.md +14 -61
- package/templates/skills/kld-sdd/opsx-spec/checklist.md +3 -3
- package/templates/skills/kld-sdd/opsx-task/SKILL.md +38 -32
- package/templates/skills/kld-sdd/opsx-task/checklist.md +5 -6
- package/templates/skills/kld-sdd/opsx-test/SKILL.md +2 -0
- package/templates/skills/kld-sdd/tdd-rules/rules/tdd-strategy-selection.md +1 -1
- package/lib/device-auth-cli.js +0 -130
- package/lib/device-auth.js +0 -345
- package/lib/init-account-binding.js +0 -108
|
@@ -7,6 +7,8 @@ description: >-
|
|
|
7
7
|
Use when ingesting new or updated knowledge archives into the ontology KB.
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
> **执行方式**:先读 [交互与执行契约](../opsx-propose/interaction-policy.md);同一会话已读则复用。用户已授权连续处理时按范围推进,不重复索要阶段口令;只请求单阶段时完成即停。
|
|
11
|
+
|
|
10
12
|
# 本体知识库 · 入库
|
|
11
13
|
|
|
12
14
|
只负责**入库**(zip 上传 + 文件夹上传)。鉴权只用 **API Key**(`Authorization: Bearer sk_sdd_…`),**禁止**走手机号登录。
|
|
@@ -182,82 +184,18 @@ node skywalk-sdd/kb-sync-identity.cjs \
|
|
|
182
184
|
--skip-kb-verify
|
|
183
185
|
```
|
|
184
186
|
|
|
185
|
-
|
|
186
|
-
- **Phase 0**: 读取 KB 配置(kb-state.json + project-identity.json)→ KB API 健康检查 → KB resolve 验证实体当前 version-id
|
|
187
|
-
- **结构实体同步**: 扫描 `ontology-identities.json` 中结构实体(Artifact + DocumentSection)的 content_hash 变化,为变更实体生成新 version-id(predecessor=KB验证的 version-id)
|
|
188
|
-
- **业务实体同步**: 基于结构实体同步的 DocumentSection 变化结果,只为 content_hash 真正变化的业务实体生成新 version-id 并更新 markdown 身份块。未变化的 `added` 实体保持原样,不会被无端 version-bump
|
|
189
|
-
- **同步报告**: 输出哪些实体被同步、哪些跳过、predecessor 来源(local/KB)
|
|
190
|
-
|
|
191
|
-
> **✅ 内容驱动安全保证**:默认模式下,脚本通过 Part 1 的 DocumentSection content_hash 比较结果驱动 Part 2 的业务实体筛选。只有 `delta-state=added` **且** 对应 DocumentSection content_hash 真正变化的实体才会被转为 `modified`。未变化的 `added` 实体保持原样,不会造成版本污染。
|
|
192
|
-
>
|
|
193
|
-
> **⚠️ 精准模式** (`--anchors`): 当用户明确知道改了哪些实体时使用。脚本信任用户指定,即使 Part 1 未检测到 content_hash 变化也会同步(适用于身份元数据变更等非内容性修改场景)。
|
|
194
|
-
|
|
195
|
-
> **Phase 0 说明**:脚本默认会查询 KB 获取实体的当前 version-id 作为 predecessor。如果本地 version-id 与 KB 不一致(如 git 恢复后),脚本会自动使用 KB 的 version-id 作为 predecessor 并输出警告。如果 KB 不可达,脚本会降级为本地模式(使用本地 version-id)并输出警告。使用 `--skip-kb-verify` 可强制跳过所有 KB 操作。
|
|
196
|
-
|
|
197
|
-
> ⛔ **禁止**跳过同步直接 `kb-upload.cjs --folder`:被修改的实体 version-id 未变 + content_hash 变了 → KB 报 `VERSION_IDENTITY_CONFLICT`。
|
|
198
|
-
>
|
|
199
|
-
> ⛔ **禁止**删除整个 `ontology/` + `artifacts/` 缓存来绕过冲突:会导致所有实体被重新计算 hash 和 version-id,造成不必要的版本扩散。应使用 `kb-sync-identity.cjs` 精准同步。
|
|
200
|
-
|
|
201
|
-
**方式 B:手动同步(脚本不可用时 fallback)**
|
|
202
|
-
|
|
203
|
-
1. **识别被修改的实体**——Agent 知道自己改了哪些内容。例如:修改了 AC-USER-CRUD-007 的默认分页大小,则只需处理该实体。若修改了 spec.md 的多处内容,列出所有受影响的实体 anchor(如 STMT-xxx、AC-xxx、CON-xxx)。
|
|
204
|
-
|
|
205
|
-
> ⚠️ **不要忘记结构实体**:修改了 .md 文件后,该文件的 Artifact 实体(文档级)也需要同步。结构实体存储在 `ontology/ontology-identities.json` 中,需更新其 `version_id` 字段。
|
|
206
|
-
|
|
207
|
-
2. **对每个被修改的实体,查 KB → 生成新 version-id → 更新身份块**
|
|
208
|
-
|
|
209
|
-
2a. 查询 KB 获取该实体的当前 version-id:
|
|
210
|
-
|
|
211
|
-
```bash
|
|
212
|
-
# 示例:查询 AC-USER-CRUD-007(external-id 为场景键)
|
|
213
|
-
node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" \
|
|
214
|
-
--mode=resolve \
|
|
215
|
-
--external-system=requirement-mgmt \
|
|
216
|
-
--external-object-type=scenario \
|
|
217
|
-
--external-id="REQ-US-2026-001:SCN-user-crud-007" \
|
|
218
|
-
--space-id="$ENGINEERING_KB_SPACE_ID" \
|
|
219
|
-
--kb-id="$ENGINEERING_KB_KB_ID"
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
KB 返回 `candidates[]`,每项含 `entityId` 和 `entityVersionId`(完整 UUID,`id.cjs` 自动归一化为 8-hex)。
|
|
187
|
+
脚本先读取当前正文和身份登记,再查询目标 KB 的当前版本与内容哈希,完成全部检查后才写文件:
|
|
223
188
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
--entity-id=e248ba63 \
|
|
233
|
-
--predecessor-version=be5581d9
|
|
234
|
-
# → 输出新的 version_id(如 3f8a1c2b)
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
2c. 更新 spec.md / proposal.md 中该实体的身份块:
|
|
238
|
-
|
|
239
|
-
```markdown
|
|
240
|
-
##### 场景:[AC-USER-CRUD-007] 默认分页查询
|
|
241
|
-
- **entity-id**: e248ba63 ← 不变(复用 KB 的 entityId)
|
|
242
|
-
- **version-id**: 3f8a1c2b ← 改为步骤 2b 生成的新 version-id
|
|
243
|
-
- **delta-state**: modified ← 从 added 改为 modified
|
|
244
|
-
- **predecessor-version**: be5581d9 ← 新增:KB 返回的 entityVersionId
|
|
245
|
-
- **external-ref**: requirement-mgmt:scenario:REQ-US-2026-001:SCN-user-crud-007
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
3. **未修改的实体保持原样不动**——它们 version-id + content_hash 都没变 → KB 自动幂等跳过。不需要改为 `unchanged` 或 `modified`。
|
|
249
|
-
|
|
250
|
-
4. **先校验再上传**:
|
|
251
|
-
|
|
252
|
-
```bash
|
|
253
|
-
# 先校验(含语义校验,确认 modified 实体身份块正确)
|
|
254
|
-
node skywalk-sdd/kb-upload.cjs --validate-only --folder=<变更目录路径>
|
|
255
|
-
|
|
256
|
-
# 校验通过后上传
|
|
257
|
-
node skywalk-sdd/kb-upload.cjs --folder=<变更目录路径>
|
|
258
|
-
```
|
|
189
|
+
- 正文未变保留版本;正文改变且基线匹配时生成新版本;未发布草稿继续沿用自身版本。
|
|
190
|
+
- 本地基线落后时报 `STALE_BASE_VERSION`,先比较、合并正文,不自动把最新 version-id 填成 predecessor。
|
|
191
|
+
- `--anchors` 仅筛选业务锚点,不绕过内容哈希和基线检查;结构实体也参与核对。
|
|
192
|
+
- 默认在线同步失败只终止这次同步,本地编写/检查/测试仍可继续。`--skip-kb-verify` 仅为显式本地维护模式,报告 `baselineVerified:false`,不能证明可发布。
|
|
193
|
+
- `--dry-run` 不改 Markdown 和身份登记;`--validate-only` 可能刷新工作态,不能当作无写入预览。
|
|
194
|
+
- 身份由工具维护,不让用户手工填写 UUID;脚本不可用时先保留正文和待同步事项,修复工具后再同步,不手动篡改版本链。
|
|
195
|
+
- 已发布内容修改后,先同步所有受影响文件,再上传。禁止删除 ontology/artifacts 或重建身份以绕过冲突。
|
|
196
|
+
- 完整 UUID 保留原值,旧短 ID 继续兼容;不得截断真实 UUID。
|
|
259
197
|
|
|
260
|
-
|
|
198
|
+
上传回执需分别检查事实保存、`publication_status` 和索引状态。HTTP 200 不是成功证明;多 KB 时明确本次 `--space-id` 与 `--kb-id`,不自动广播。
|
|
261
199
|
|
|
262
200
|
**其他影响入库的因素**:
|
|
263
201
|
|
|
@@ -19,6 +19,8 @@ allowed-tools:
|
|
|
19
19
|
- Edit
|
|
20
20
|
---
|
|
21
21
|
|
|
22
|
+
> **执行方式**:先读 [交互与执行契约](../opsx-propose/interaction-policy.md);同一会话已读则复用。用户已授权连续处理时按范围推进,不重复索要阶段口令;只请求单阶段时完成即停。
|
|
23
|
+
|
|
22
24
|
# 本体知识库 · 查询
|
|
23
25
|
|
|
24
26
|
只负责**查**。鉴权只用 **API Key**(`Authorization: Bearer sk_sdd_…`),**禁止**走手机号登录。
|
|
@@ -39,15 +41,15 @@ SDD 流程:Propose → Spec → Design → Task → Check → Apply → Archiv
|
|
|
39
41
|
- 当前变更内部一致性 → **本地文件 + semantic-check**,不查 KB
|
|
40
42
|
- 只有 Archive → kb-ingest 后,当前变更才进入 KB(Phase 3 验证)
|
|
41
43
|
|
|
42
|
-
## Session
|
|
44
|
+
## Session 启动(同一连续任务复用)
|
|
43
45
|
|
|
44
46
|
> **📡 共享状态**:本技能与 `opsx-kb-ingest`、`kb-upload` **共用同一份 KB 配置**(`kb-state.json`,位于 spec 仓根目录)。KB 配置(API Key + Space/KB 选择 + project-identity.json)由 `opsx-kb-config` 统一负责。
|
|
45
47
|
|
|
46
48
|
```
|
|
47
49
|
Task Progress:
|
|
48
50
|
- [ ] 1. 读 kb-state.json(spec 仓根目录)
|
|
49
|
-
- [ ] 2. 无 apiKey 或无 targets →
|
|
50
|
-
- [ ] 3.
|
|
51
|
+
- [ ] 2. 无 apiKey 或无 targets → 记录未配置,本地工作继续;用户明确要配置时才进入 /opsx-kb-config
|
|
52
|
+
- [ ] 3. 有唯一或已明确选择的目标 → 按意图查询;多个目标未明确时先澄清本次查询范围,不默认选第一个
|
|
51
53
|
- [ ] 4. 按模板输出;无命中不编造
|
|
52
54
|
```
|
|
53
55
|
|
|
@@ -75,7 +77,7 @@ Task Progress:
|
|
|
75
77
|
|
|
76
78
|
- Continuity(只要身份)→ 优先 `entities/resolve`
|
|
77
79
|
- Spec 复用 → `context/match-requirement`,带 external 与/或 `entityId`
|
|
78
|
-
- **KB 可用时禁止**扫描消费方本地 `archive/` 目录当跨迭代继承源;entity-id 必须来自 KB resolve by canonicalKey。KB degraded 时 archive
|
|
80
|
+
- **KB 可用时禁止**扫描消费方本地 `archive/` 目录当跨迭代继承源;entity-id 必须来自 KB resolve by canonicalKey。KB degraded 时 archive 仅作背景参考,不自动继承身份;保留已有草稿基线,发布前再在线核对
|
|
79
81
|
|
|
80
82
|
命中时关注:`resolution=LINK_EXISTING` 且 `inheritanceAllowed=true`(可继承 n);`removedBindingCount`(已失效绑定 m);`matchType=HISTORICAL_ONLY` 表示仅有失效绑定,不可继承。
|
|
81
83
|
|
|
@@ -103,7 +105,7 @@ scenario: ^[A-Z0-9_-]+:SCN-[a-z0-9]+(-[a-z0-9]+)*-[0-9]{3}$
|
|
|
103
105
|
|
|
104
106
|
### 命中
|
|
105
107
|
1. **{displayName}**({entityType})@ {kbName}
|
|
106
|
-
-
|
|
108
|
+
- 业务锚点 / 来源 / 匹配依据;完整身份保留在机器响应中
|
|
107
109
|
- 若外部键命中:可继承 n / 已失效绑定 m
|
|
108
110
|
```
|
|
109
111
|
|
|
@@ -68,7 +68,7 @@ POST {base}/entities/resolve
|
|
|
68
68
|
### 集成点
|
|
69
69
|
|
|
70
70
|
- opsx-propose §6.5:写入 proposal frontmatter `continuity` 字段
|
|
71
|
-
-
|
|
71
|
+
- 本地 archive 仅作背景参考,不能据此宣称已验证 KB current;离线保留已有草稿身份和真实前驱,发布前在线解析,不从相似标题自动继承 ID。
|
|
72
72
|
|
|
73
73
|
> **Agent 行为指导**:响应中的 `clarificationQuestions` 是 AI 生成的澄清问题,Agent 应直接用 `ask_user` 呈现给用户,不要自行回答。
|
|
74
74
|
> `supportEvidence` / `oppositionEvidence` 可作为决策依据向用户展示。
|
|
@@ -235,7 +235,7 @@ POST {base}/context/match-requirement
|
|
|
235
235
|
### 集成点
|
|
236
236
|
|
|
237
237
|
- opsx-spec §3:Continuity=iteration 时必须带 `entityId` + external
|
|
238
|
-
-
|
|
238
|
+
- 本地 archive 仅作背景参考,不能据此宣称已验证 KB current;离线保留已有草稿身份和真实前驱,发布前在线解析,不从相似标题自动继承 ID。
|
|
239
239
|
|
|
240
240
|
> **Agent 行为指导**:消费 `specGenerationContext` 判断复用率——`reusableStatements` > 50% 走迭代修改,< 20% 走全新建。
|
|
241
241
|
> `warnings` 和 `clarificationQuestions` 应呈现给用户,不要忽略。
|
|
@@ -131,7 +131,7 @@ curl -sS -X POST "$API/v1/spaces/$SPACE_ID/knowledge-bases/$KB_ID/entities/resol
|
|
|
131
131
|
> - `supportEvidence` / `oppositionEvidence`:支持/反对决议的证据列表,Agent 可向用户展示
|
|
132
132
|
> - `clarificationQuestions`:AI 生成的澄清问题,Agent 可用 `ask_user` 呈现给用户
|
|
133
133
|
|
|
134
|
-
|
|
134
|
+
- 本地 archive 仅作背景参考,不能据此宣称已验证 KB current;离线保留已有草稿身份和真实前驱,发布前在线解析,不从相似标题自动继承 ID。
|
|
135
135
|
|
|
136
136
|
## 按功能号圈能力(FEAT query)
|
|
137
137
|
|
|
@@ -15,22 +15,23 @@ allowed-tools:
|
|
|
15
15
|
- Edit
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
+
> **执行方式**:先读 [交互与执行契约](./interaction-policy.md);同一会话已读则复用。用户已授权连续处理时按范围推进,不重复索要阶段口令;只请求单阶段时完成即停。
|
|
19
|
+
|
|
18
20
|
你是一个 SDD(Specification-Driven Development)业务意图文档专家。激活本技能后,你将引导用户创建符合质量红线标准的 **proposal.md** 文档。
|
|
19
21
|
|
|
20
|
-
>
|
|
22
|
+
> **KB 查询依赖**:需要查询时加载 `opsx-ontology-query`;缺失或不可用只跳过远程查询,记录待核对基线后继续本地工作。
|
|
21
23
|
>
|
|
22
|
-
>
|
|
24
|
+
> **KB 使用**:有复用需要时查询一次;未配置或断连按交互契约继续,不在每个阶段询问配置。
|
|
23
25
|
|
|
24
26
|
> **⚠️ 阶段边界约束**
|
|
25
27
|
>
|
|
26
28
|
> 当前处于 **Propose(规划)阶段**:
|
|
27
29
|
> - ✅ **允许**:创建/编辑 proposal.md 文档、读取代码/文档作为上下文分析
|
|
28
30
|
> - ❌ **禁止**:创建/修改任何代码文件、执行代码生成、运行测试
|
|
29
|
-
> -
|
|
31
|
+
> - **执行范围**:单阶段请求完成即停;已授权连续处理则按交互契约加载下一阶段,check 通过后方可进入 apply,不能超出授权范围。
|
|
30
32
|
>
|
|
31
33
|
> 即使用户提供了代码作为上下文,也只用于理解需求背景,**不执行任何代码操作**。
|
|
32
34
|
> 代码实现请引导用户使用 `/opsx-apply` 命令。
|
|
33
|
-
> **完成本阶段后,绝对禁止自动继续执行 spec/design/task 等后续阶段。**
|
|
34
35
|
> 阶段边界自检见 `./checklist.md`「阶段边界⛔」。
|
|
35
36
|
|
|
36
37
|
> **🖥️ 跨平台执行规则**
|
|
@@ -208,17 +209,8 @@ node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" external-key --validat
|
|
|
208
209
|
- 编号格式:大写字母 + 数字 + 连字符(-) + 下划线(_),1~50 字符;例 KLERP-001、REQ-FI-2024-001、1010000。
|
|
209
210
|
- 不合规 → **拒绝进入 resolve**,告知「编号格式不合规(仅允许大写字母、数字、连字符、下划线)」;Agent 不得猜测、补位、改写。
|
|
210
211
|
- 用户明确说「没有外部需求号」→ 走 `numbering-waiver.reason`(必填理由);`requirement-refs` 必须为空;提示本轮不种桥。
|
|
211
|
-
3.
|
|
212
|
-
|
|
213
|
-
> "📡 **知识库未配置**
|
|
214
|
-
>
|
|
215
|
-
> 知识库可以帮你追踪能力版本,避免重复定义。现在要配置吗?
|
|
216
|
-
> - A. **现在配置** — 运行 /opsx-kb-config,配置后可复用已有能力
|
|
217
|
-
> - B. **暂不配置,先继续** — 用本地归档数据代替(精度有限,后续入库可能需修正)
|
|
218
|
-
> - C. **取消** — 终止本次操作"
|
|
219
|
-
- **选 A** → 引导运行 `/opsx-kb-config`,配置完成后继续步骤 4。
|
|
220
|
-
- **选 B** → 在 proposal.md frontmatter 标注 `kb-status: degraded(by-user-choice)`,走降级路径(扫描归档 `ontology-identities.json` 匹配已有能力;归档为空则全部按新增处理)。
|
|
221
|
-
- **选 C** → 终止 propose。
|
|
212
|
+
3. 若本轮需要 KB 复用且尚未降级,加载查询技能并使用已有 `kb-state.json`。无需先做独立 readiness 请求;查询本身即可发现连接问题。未配置、缺少查询技能、断连或无权限时,记录 `kb-status: degraded` 和原因,跳过步骤 4—6 的远程操作,继续本地编写,不开启配置问答。用户主动要求配置时再加载 `opsx-kb-config`。
|
|
213
|
+
|
|
222
214
|
4. 验号通过后才 resolve:
|
|
223
215
|
```bash
|
|
224
216
|
node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --mode=resolve \
|
|
@@ -233,43 +225,23 @@ node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --mode=resolve \
|
|
|
233
225
|
6. 按 KB 结果确认 Continuity:`iteration` / `similar-reference` / `new`;勾选本次涉及的 CAP。
|
|
234
226
|
7. 写入 proposal frontmatter:`requirement-refs`(含 `feature-id`)/ `numbering-waiver` + `continuity`。**禁止**写本地 archive 文件夹名作为 `base-archive`。
|
|
235
227
|
8. CAP 级「同 key + 同锚点、不同 entity_id」当场问 A/B/C;决议写入 `ontology/continuity-resolution.json` 的 `capabilities[]`。
|
|
236
|
-
9. KB
|
|
237
|
-
- 扫描 `openspec/changes/archive/*/ontology/ontology-identities.json` 匹配 canonicalKey
|
|
238
|
-
- 降级路径的所有 entity-id 来源在 sdd-output.md 知识库使用表中标注 `source: archive(degraded)`,与 `source: KB current` 明确区分。
|
|
239
|
-
- ⚠️ **降级风险**:归档中的版本号可能已过时(归档后该能力可能在 KB 中有更新版本)。降级路径取到的 predecessor-version 不保证是 KB 最新版本,入库时可能触发 `VERSION_CONFLICT`,需手动修正。
|
|
228
|
+
9. KB 不可用时,保留当前草稿已有身份和真实前驱,记录 `kb-status: degraded`。本地归档可作背景参考,不能仅凭相似标题复制身份并宣称已验证 KB current。已知迭代而身份未确认时先完成正文,登记待确认项,发布前在线解析;不把“查询失败”当作“确认新增”。
|
|
240
229
|
10. **不得**在本阶段生成 STMT/AC/场景或裁决场景身份;**不得**铸/改 REQ/FEAT 号。
|
|
241
230
|
|
|
242
|
-
|
|
243
|
-
```
|
|
244
|
-
# 对每个能力域按 canonicalKey 查 KB
|
|
245
|
-
resolve(canonicalKey=CAP-ACCOUNT-LOCKOUT) → RELATED_ONLY (reviewRequired)
|
|
246
|
-
→ candidates[0]: entity-id=90c49a72, version=d6787d6e (来自 KB current)
|
|
247
|
-
→ 用户确认复用 → modified, predecessor=d6787d6e
|
|
248
|
-
resolve(canonicalKey=CAP-PHONE-LOGIN) → RELATED_ONLY (reviewRequired)
|
|
249
|
-
→ candidates[0]: entity-id=xxx, version=yyy (来自 KB current)
|
|
250
|
-
→ 用户确认复用 → modified, predecessor=yyy
|
|
251
|
-
resolve(canonicalKey=CAP-USER-REGISTRATION) → CREATE_NEW
|
|
252
|
-
→ KB 中无此 canonicalKey
|
|
253
|
-
→ added, 新 CAP-USER-REGISTRATION
|
|
254
|
-
```
|
|
231
|
+
**示例**:已有明确实体身份 → 在线核对当前版本 → 保留真实继承关系;仅相似候选 → 参考内容,不自动继承;断连 → 继续本地草稿,远程身份待确认。
|
|
255
232
|
|
|
256
|
-
|
|
257
|
-
```
|
|
258
|
-
# 扫描归档(仅 KB degraded 时)
|
|
259
|
-
Read openspec/changes/archive/*/proposal.md 的能力分解章节
|
|
260
|
-
Read openspec/changes/archive/*/ontology/ontology-identities.json
|
|
261
|
-
|
|
262
|
-
# 匹配结果示例:
|
|
263
|
-
# "账号锁定从内存迁到DB" → 匹配归档 CAP-ACCOUNT-LOCKOUT (entity-id: 3d18c60e, version: 29e7f242)
|
|
264
|
-
# → modified, 复用 entity-id=3d18c60e, predecessor=29e7f242
|
|
265
|
-
# → ⚠️ source: archive(degraded)
|
|
266
|
-
# "新增用户注册 API" → 无匹配
|
|
267
|
-
# → added, 新 CAP-USER-REGISTRATION
|
|
268
|
-
```
|
|
233
|
+
### 6.8 【自动规模判定】选择最小适用的文档形态
|
|
269
234
|
|
|
270
|
-
|
|
235
|
+
先读取用户需求、已知依赖和已有文档。当前 git diff 仅作辅助,需求尚未实现时不能把空 diff 当作“小需求”的证明。
|
|
271
236
|
|
|
272
|
-
|
|
237
|
+
- 已有变更沿用原 `mode` 和目录,不自动迁移。
|
|
238
|
+
- 新变更只有一个清晰能力域,优先 `simple`;多个独立能力域或需要分别维护的协作契约,采用 `full`。
|
|
239
|
+
- 新接口、新表、文件数和行数是风险线索,不单独决定文档拆分。风险通过相关设计和验证处理。
|
|
240
|
+
- 写入 `mode: simple | full`,在摘要中说明一句理由;不单独询问内部模式。
|
|
241
|
+
|
|
242
|
+
### 7. 文档形态记录
|
|
243
|
+
|
|
244
|
+
记录上述自动选择,尊重用户明确指定。详细目录说明见 `./reference.md`「§7 文档拆分模式选择」。历史文档未设置 mode 时仍按原 Full 兼容规则读取。
|
|
273
245
|
|
|
274
246
|
### 7.5 自动判断变更类型
|
|
275
247
|
|
|
@@ -286,9 +258,11 @@ Read openspec/changes/archive/*/ontology/ontology-identities.json
|
|
|
286
258
|
|
|
287
259
|
类型原话、判断顺序和边界见 `./reference.md`「§7.5 变更类型自动分类」。
|
|
288
260
|
|
|
289
|
-
### 8.
|
|
261
|
+
### 8. 【自动选择】测试策略
|
|
262
|
+
|
|
263
|
+
沿用团队或当前变更已有策略。新变更中的复杂业务规则、状态转换、缺陷复现优先 `tdd`;一般实现采用 `impl-first` 并完成相关测试;仅正文说明或无运行行为变化时才用 `none`,仍验证格式或构建等实际受影响内容。写入 `test-strategy: tdd | impl-first | none` 并说明理由,不发起独立选择题。用户明确要求时调整;自动选择不能记录为 `user_decision`。
|
|
290
264
|
|
|
291
|
-
|
|
265
|
+
详细语义见 `./reference.md`「§8 测试策略选择」。
|
|
292
266
|
|
|
293
267
|
### 9. 创建 proposal.md
|
|
294
268
|
|
|
@@ -300,28 +274,9 @@ Read openspec/changes/archive/*/ontology/ontology-identities.json
|
|
|
300
274
|
|
|
301
275
|
> 写入文档前逐项确认,完整 8 项自检清单见 `./reference.md`「§10 质量红线自检清单」。如有任意一项未满足,重新生成对应章节,直至全部通过。
|
|
302
276
|
|
|
303
|
-
### 11.
|
|
304
|
-
|
|
305
|
-
生成文档后,向用户展示概要:
|
|
306
|
-
> "已生成 proposal.md 草案,概要如下:
|
|
307
|
-
> - 变更名称:[name]
|
|
308
|
-
> - 核心目标:[一句话总结]
|
|
309
|
-
> - 影响模块:[模块列表]
|
|
310
|
-
> - 能力域:[capability 列表]
|
|
311
|
-
>
|
|
312
|
-
> 请确认:
|
|
313
|
-
> - A. 确认无误,继续创建 specs
|
|
314
|
-
> - B. 需要修改 [具体章节]
|
|
315
|
-
> - C. 补充更多信息"
|
|
316
|
-
|
|
317
|
-
根据用户反馈:
|
|
318
|
-
- 选择 A:保存文档,提示下一步
|
|
319
|
-
- 选择 B/C:根据反馈修改文档
|
|
277
|
+
### 11. 展示业务摘要并按授权继续
|
|
320
278
|
|
|
321
|
-
|
|
322
|
-
- 文档路径
|
|
323
|
-
- 内容摘要
|
|
324
|
-
- 下一步提示:"运行 `/opsx-spec` 创建技术契约文档 (specs/<capability>/spec.md)"
|
|
279
|
+
展示目标、范围、验收要点、自动选择及文档路径。只有业务口径未定、实际范围变化时集中询问;已有连续处理授权则加载 spec 技能继续。只请求 proposal 时在此结束,不额外问一次“是否批量推进”。
|
|
325
280
|
|
|
326
281
|
---
|
|
327
282
|
|
|
@@ -348,9 +303,9 @@ Read openspec/changes/archive/*/ontology/ontology-identities.json
|
|
|
348
303
|
- `context` 和 `rules` 是约束条件,**不得出现在生成的文档中**。
|
|
349
304
|
- proposal.md 聚焦【Why】,不写技术实现细节(留给 design.md),不写 API 细节(留给 specs)。
|
|
350
305
|
- **Capabilities 章节是关键**:决定后续 specs 文件夹结构。
|
|
351
|
-
-
|
|
352
|
-
- **⛔
|
|
353
|
-
-
|
|
306
|
+
- 文档写入后验证文件确实存在;提供业务差异摘要;已有授权则继续,只有新增业务歧义或范围变化才询问。
|
|
307
|
+
- **⛔ 阶段边界**:本阶段禁止执行任何代码创建/修改操作。已授权实现时,在前置文档和 check 完成后加载 apply 继续。
|
|
308
|
+
- **执行范围**:单阶段请求完成即停;已授权连续处理则按交互契约加载下一阶段,check 通过后方可进入 apply,不能超出授权范围。
|
|
354
309
|
- **⛔ Frontmatter 规范(L7)**:YAML frontmatter 中禁止写 `#` 注释(YAML 注释在 frontmatter 中可能导致解析问题)。如需说明,在 frontmatter 之前或之后用正文描述。
|
|
355
310
|
- **⛔ change-type 必采**:frontmatter 必须含 `change-type`、`change-type-source`、`change-type-confidence`、`change-type-reason`;Agent 自动判断,不为内部分类单独打断用户。
|
|
356
311
|
|
|
@@ -13,10 +13,10 @@ description: opsx-propose 的阶段强制检查点与自检清单。仅在执行
|
|
|
13
13
|
|
|
14
14
|
- [ ] ✅ 允许:创建/编辑 proposal.md 文档、读取代码/文档作为上下文分析
|
|
15
15
|
- [ ] ❌ 禁止:创建/修改任何代码文件、执行代码生成、运行测试
|
|
16
|
-
- [ ]
|
|
16
|
+
- [ ] **执行范围**:单阶段请求完成即停;已授权连续处理则按交互契约加载下一阶段,check 通过后方可进入 apply,不能超出授权范围。
|
|
17
17
|
- [ ] 即使用户提供代码作为上下文,只用于理解需求背景,不执行任何代码操作
|
|
18
18
|
- [ ] 代码实现引导用户使用 `/opsx-apply`
|
|
19
|
-
- [ ]
|
|
19
|
+
- [ ] **执行范围**:单阶段请求完成即停;已授权连续处理则按交互契约加载下一阶段,check 通过后方可进入 apply,不能超出授权范围。
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
@@ -25,8 +25,8 @@ description: opsx-propose 的阶段强制检查点与自检清单。仅在执行
|
|
|
25
25
|
- [ ] 是否有明确的问题描述?
|
|
26
26
|
- [ ] 是否有可衡量的目标?
|
|
27
27
|
- [ ] 是否涉及具体模块?
|
|
28
|
-
- [ ]
|
|
29
|
-
- [ ]
|
|
28
|
+
- [ ] 若用户提出时间/资源约束,是否已准确记录?没有约束无需专门追问。
|
|
29
|
+
- [ ] 先读取已有上下文,只对影响业务范围或验收的缺失事实集中询问;可推断的内部参数由 Agent 处理。
|
|
30
30
|
|
|
31
31
|
---
|
|
32
32
|
|
|
@@ -43,7 +43,7 @@ description: opsx-propose 的阶段强制检查点与自检清单。仅在执行
|
|
|
43
43
|
- [ ] 文档写入后验证文件确实存在
|
|
44
44
|
- [ ] proposal.md 写入后已运行 `semantic-reconcile`,`openspec/changes/<变更名称>/artifacts/proposal.ontology.json` 已存在
|
|
45
45
|
- [ ] 工作态 JSON 为 `canonical=false`、`review_status=draft`,实体能够通过 `source.file/source.anchor_id/source.content_hash` 展开到 proposal.md 原文
|
|
46
|
-
- [ ]
|
|
47
|
-
- [ ]
|
|
48
|
-
- [ ]
|
|
49
|
-
- [ ]
|
|
46
|
+
- [ ] 提供业务差异摘要;已有授权则继续,只有新增业务歧义或范围变化才询问
|
|
47
|
+
- [ ] 本阶段只产出文档;已授权实现时,文档和 check 完成后加载 apply 技能继续,不能跳过前置检查。
|
|
48
|
+
- [ ] **执行范围**:单阶段请求完成即停;已授权连续处理则按交互契约加载下一阶段,check 通过后方可进入 apply,不能超出授权范围。
|
|
49
|
+
- [ ] CAP 身份:在线继承有明确解析依据;离线保留已有草稿身份和真实基线,归档仅作背景参考。已知迭代但身份待核对时记录待确认项,不因连接失败重建旧对象。
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# SDD 交互与执行契约
|
|
2
|
+
|
|
3
|
+
本文件统一各阶段的交互方式;各阶段仍执行自己的解析、检查和证据记录。用户的明确范围与团队显式配置优先。
|
|
4
|
+
|
|
5
|
+
## 用户决定结果,Agent 管理过程
|
|
6
|
+
|
|
7
|
+
- 用户只要求一个阶段(例如“只写 Spec”或单独调用 `/opsx-spec`)时,完成该阶段即停。
|
|
8
|
+
- 用户已要求“完成这个需求”“实现并验证”或连续处理时,在授权范围内加载下一阶段技能并继续,Simple / Full 均适用,不反复索要阶段口令。要求“完善文档”不授权实现代码。
|
|
9
|
+
- 连续推进仍按依赖完成文档、check、apply 和测试;check 未通过不得冒充通过。归档、入库、合并、推送、部署按用户授权分别判断,不能从“实现”推导为已授权发布。
|
|
10
|
+
- 只在业务目标或验收口径存在实质歧义、多个身份无法判定、真实冲突或新增外部副作用需要授权时询问。先读取用户提供的材料与现有代码,集中提出缺失事实,不把 mode、UUID、内部枚举当作业务问题。
|
|
11
|
+
- 自动选择文档形态和测试策略并简短说明理由;沿用已有变更的设置,不因这次默认规则重排存量目录。
|
|
12
|
+
- 只展示业务差异、必要决策、验证结果和剩余问题。遥测、身份分配、结构化 JSON 由工具和 Agent 维护,不让用户手填,不把自动推断伪记为用户确认。
|
|
13
|
+
|
|
14
|
+
## 本地工作可以独立进行
|
|
15
|
+
|
|
16
|
+
- KB 是历史参考和发布基线服务。编写、设计、任务、实现、测试、本地归档可在离线状态继续;本地格式、语义和质量检查照常执行。
|
|
17
|
+
- 有实际查询需要时直接查询,不在每个阶段先发一次 `--check-only`。同一连续任务复用已取得的上下文;发生失败后,本轮后续可选查询默认跳过,只简短提示一次。用户重试、配置/目标变化或准备发布时重新检查。
|
|
18
|
+
- 未配置、断连、无权限、未安装查询技能时,记录真实原因与 `kb-status: degraded`,进入本地工作,不反复问“配置还是继续”。读取旧的 `degraded(by-user-choice)` 时继续尊重用户跳过意愿。
|
|
19
|
+
- 显式离线可调用 `context-client.cjs --offline`。这只跳过远程查询,不代表验证过远程基线;`--strict` 用于明确要求在线检查的调用。
|
|
20
|
+
- 本地原文和归档可以作为背景参考。已有草稿身份和前驱保持不变;只有标题/内容相似时,不从归档复制 ID 来宣称已获 KB 当前身份。已知迭代但远程身份未确认时,先写业务内容,登记待确认事项,发布前再解析,不能为绕过断网而重建旧对象身份。
|
|
21
|
+
- 发布前调用在线身份同步和服务端入库校验。旧基线先比较并合并正文;不得只改 predecessor。离线、权限不足、目标不明确或版本冲突只影响相应远程操作,不作“已发布”报告。
|
|
22
|
+
|
|
23
|
+
## 身份与任务的呈现
|
|
24
|
+
|
|
25
|
+
- 对人用业务标题、`CAP-* / STMT-* / AC-*` 锚点和来源链接;完整 entity/version/predecessor ID 留在机器需要的元数据中。短前缀仅作显示,不能用于身份判定或截断写回。
|
|
26
|
+
- 当前 Markdown 身份块和归档格式继续兼容;本规则不声称已经把业务身份迁移到 sidecar。新 ID 由工具生成,旧 ID 不批量改写。
|
|
27
|
+
- 任务按可验证的行为或交付单元组织,保留依赖和验收,避免按每五分钟、每个字段或每次命令机械拆分。规模以实际风险和依赖判断,不能用估计的工时冒充质量证明。
|
|
28
|
+
- 默认聚焦当前 Capability;确有跨能力依赖时允许读取相关契约,注明依赖来源,避免全量加载或混写其他能力。多仓各自保留 Git 提交事实,共享 Spec 的关联由工具处理。
|
|
@@ -18,35 +18,14 @@ description: opsx-propose 的详细模板:telemetry 命令、文档拆分模
|
|
|
18
18
|
|
|
19
19
|
## §7 文档拆分模式选择
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
分析需求中的能力域数量后,使用 **AskUserQuestion** 工具向用户询问:
|
|
24
|
-
|
|
25
|
-
> "📋 **检测到需求包含以下能力域:**
|
|
26
|
-
> - [能力域列表]
|
|
27
|
-
>
|
|
28
|
-
> 🤔 **请选择文档拆分模式:**
|
|
29
|
-
>
|
|
30
|
-
> **A) 完整模式 (Full)** - 每个能力域独立文档
|
|
31
|
-
> - 目录结构:`specs/<capability>/spec.md`, `specs/<capability>/design.md`, `specs/<capability>/tasks.md`
|
|
32
|
-
> - 适合:大需求、多人协作、需要精细管控
|
|
33
|
-
>
|
|
34
|
-
> **B) 简化模式 (Simple)** - 单一文档
|
|
35
|
-
> - 目录结构:`spec.md`, `design.md`, `tasks.md`(合并所有能力域)
|
|
36
|
-
> - 适合:小需求、单人快速迭代
|
|
37
|
-
>
|
|
38
|
-
> **C) 自动判断** - 根据能力域数量自动选择
|
|
39
|
-
> - 单个能力域 → Simple 模式
|
|
40
|
-
> - 多个能力域 → Full 模式"
|
|
41
|
-
|
|
42
|
-
根据用户选择:
|
|
43
|
-
- 选择 A:设置 `mode: full`
|
|
44
|
-
- 选择 B:设置 `mode: simple`
|
|
45
|
-
- 选择 C:根据能力域数量自动判断并设置
|
|
46
|
-
|
|
47
|
-
**将用户选择记录到 proposal.md 的 YAML frontmatter 中。**
|
|
21
|
+
Agent 根据能力边界自动判断,无需单独询问。已有 mode 和用户明确选择优先。
|
|
48
22
|
|
|
49
|
-
|
|
23
|
+
| 形态 | 目录 | 默认用途 |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| Simple | 根目录 spec.md / design.md / tasks.md | 单一能力域 |
|
|
26
|
+
| Full | specs/<capability>/ 下分别维护三份文档 | 多能力域或需要独立协作的契约 |
|
|
27
|
+
|
|
28
|
+
新接口、新表和代码行数不自动增加人工确认。未设置 mode 的存量文档仍按 Full 读取,不自动迁移。
|
|
50
29
|
|
|
51
30
|
## §7.5 变更类型自动分类
|
|
52
31
|
|
|
@@ -79,26 +58,13 @@ Agent 应在 proposal 正文或完成摘要中展示中文分类及理由,但
|
|
|
79
58
|
|
|
80
59
|
## §8 测试策略选择
|
|
81
60
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
三种策略:
|
|
85
|
-
- A) TDD(红绿重构循环):每个行为点先写失败测试再写最少代码,任务量 3-5 倍
|
|
86
|
-
- B) Impl-First(代码先行):先实现再补测试验证
|
|
87
|
-
- C) None(仅实现):不生成测试任务
|
|
88
|
-
|
|
89
|
-
使用 **AskUserQuestion** 工具向用户询问(A/B/C 三选一)。
|
|
61
|
+
沿用团队/当前变更配置;新变更自动选择并说明理由,不单独询问内部枚举。
|
|
90
62
|
|
|
91
|
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
- 选择 C:设置 `test-strategy: none`
|
|
63
|
+
- `tdd`:复杂业务行为、状态转换或需要稳定复现的缺陷。保留真实 RED→GREEN 证据。
|
|
64
|
+
- `impl-first`:一般实现,配套相关测试与构建验证。
|
|
65
|
+
- `none`:仅文档等不改变运行行为的变更;保留实际适用的验证,不能借此跳过业务测试。
|
|
95
66
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
> 完整策略定义见 tdd-core/SKILL.md §5
|
|
99
|
-
> 交互引导文案见 tdd-rules/rules/tdd-strategy-selection.md
|
|
100
|
-
|
|
101
|
-
---
|
|
67
|
+
用户可纠正;自动判断不是用户决策,不能伪记为 `user_decision`。
|
|
102
68
|
|
|
103
69
|
## §10 质量红线自检清单
|
|
104
70
|
|
|
@@ -15,22 +15,23 @@ allowed-tools:
|
|
|
15
15
|
- Edit
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
+
> **执行方式**:先读 [交互与执行契约](../opsx-propose/interaction-policy.md);同一会话已读则复用。用户已授权连续处理时按范围推进,不重复索要阶段口令;只请求单阶段时完成即停。
|
|
19
|
+
|
|
18
20
|
你是一个 SDD(Specification-Driven Development)技术契约专家。激活本技能后,你将引导用户为每个 Capability 创建 **spec.md** 文档。
|
|
19
21
|
|
|
20
|
-
>
|
|
22
|
+
> **KB 查询依赖**:需要复用时加载 `opsx-ontology-query`;缺失只跳过查询,不阻断正文编写。远程继承以在线解析结果为准。
|
|
21
23
|
>
|
|
22
|
-
>
|
|
24
|
+
> **KB 使用**:按共享交互契约复用本轮上下文,不重复询问配置。
|
|
23
25
|
|
|
24
26
|
> **⚠️ 阶段边界约束**
|
|
25
27
|
>
|
|
26
28
|
> 当前处于 **Spec(契约)阶段**:
|
|
27
29
|
> - ✅ **允许**:创建/编辑 spec.md 文档、读取代码/文档作为上下文分析
|
|
28
30
|
> - ❌ **禁止**:创建/修改任何代码文件、执行代码生成、运行测试
|
|
29
|
-
> -
|
|
31
|
+
> - **执行范围**:单阶段请求完成即停;已授权连续处理则按交互契约加载下一阶段,check 通过后方可进入 apply,不能超出授权范围。
|
|
30
32
|
>
|
|
31
33
|
> 即使用户提供了代码作为上下文,也只用于分析现有实现,**不执行任何代码操作**。
|
|
32
34
|
> 代码实现将在 `/opsx-apply` 阶段进行。
|
|
33
|
-
> **完成本阶段后,绝对禁止自动继续执行 design/task 等后续阶段。**
|
|
34
35
|
> 阶段边界自检见 `./checklist.md`「阶段边界⛔」。
|
|
35
36
|
|
|
36
37
|
> **🖥️ 跨平台执行规则**
|
|
@@ -97,48 +98,13 @@ openspec list
|
|
|
97
98
|
```
|
|
98
99
|
若变更不存在,引导用户先运行 `/opsx-propose <name>`。
|
|
99
100
|
|
|
100
|
-
### 2.
|
|
101
|
-
|
|
102
|
-
读取 `proposal.md` 中定义的 Capabilities 列表:
|
|
103
|
-
|
|
104
|
-
使用 **AskUserQuestion** 让用户选择要编写规格的 Capability:
|
|
105
|
-
> "📋 **proposal.md 中定义的能力域:**
|
|
106
|
-
> - A. `user-auth` - 用户认证
|
|
107
|
-
> - B. `data-export` - 数据导出
|
|
108
|
-
> - C. 全部(按顺序逐个创建)
|
|
109
|
-
>
|
|
110
|
-
> 请选择要为哪个 Capability 创建 spec.md:"
|
|
111
|
-
|
|
112
|
-
### 2.5 【KB 就绪检查】检测并配置知识库连接
|
|
101
|
+
### 2. 确定本次 Capability 范围
|
|
113
102
|
|
|
114
|
-
|
|
103
|
+
从用户请求和 proposal 读取范围。只有一个 Capability 或用户已要求全部处理时自动选中;多个能力域且本次范围不明确时才询问。
|
|
115
104
|
|
|
116
|
-
|
|
117
|
-
- 若 `kb-status: degraded(by-user-choice)` → KB 已在 propose 阶段由用户明确跳过,本阶段同样跳过 KB 查询,直接进入 §3(仅加载本地上下文)。
|
|
118
|
-
- 若未标记 → 继续检查。
|
|
119
|
-
2. 运行 KB 就绪检查(程序化检测,自动搜索多 IDE 目录,消除路径歧义):
|
|
120
|
-
```bash
|
|
121
|
-
node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --check-only
|
|
122
|
-
```
|
|
123
|
-
- 输出 `"available": true` → KB 已配置
|
|
124
|
-
- 输出 `"available": false` → KB 未配置
|
|
105
|
+
### 2.5 KB 上下文状态
|
|
125
106
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
3. **若已配置** → 直接进入 §3。
|
|
129
|
-
4. **若未配置** → 使用 **AskUserQuestion** 询问:
|
|
130
|
-
|
|
131
|
-
> "📡 **知识库未配置**
|
|
132
|
-
>
|
|
133
|
-
> 知识库可以帮你验证场景身份、复用已有 Spec 和检索历史验收标准。现在要配置吗?
|
|
134
|
-
>
|
|
135
|
-
> - A. **现在配置** — 运行 /opsx-kb-config
|
|
136
|
-
> - B. **暂不配置,先继续** — 仅用本地数据(精度有限)
|
|
137
|
-
> - C. **取消** — 终止本次操作"
|
|
138
|
-
|
|
139
|
-
- **选 A** → 引导运行 `/opsx-kb-config`,配置完成后进入 §3。
|
|
140
|
-
- **选 B** → 在 spec.md frontmatter 标注 `kb-status: degraded(by-user-choice)`,进入 §3(仅本地上下文)。
|
|
141
|
-
- **选 C** → 终止 spec。
|
|
107
|
+
复用本轮已取得的 KB 上下文。有新的复用问题时直接执行 §3 查询,不在各阶段重复 `--check-only`。本轮已降级或用户明确离线时,记录 `kb-status: degraded` 和原因,仅加载本地上下文。未配置、断连和无权限不能被当作“确认没有历史身份”,也不触发配置问答。
|
|
142
108
|
|
|
143
109
|
### 3. 【上下文加载】识别并读取用户提供的文件
|
|
144
110
|
|
|
@@ -148,7 +114,7 @@ openspec list
|
|
|
148
114
|
|
|
149
115
|
**【默认尝试】工程 Spec 知识库上下文(场景身份主战场)**:
|
|
150
116
|
|
|
151
|
-
1. **先加载依赖技能**:确认 `${AGENT_SKILL_DIR}/opsx-ontology-query/SKILL.md` 存在并 Read
|
|
117
|
+
1. **先加载依赖技能**:确认 `${AGENT_SKILL_DIR}/opsx-ontology-query/SKILL.md` 存在并 Read;使用已有 API Key / target(`kb-state.json`);未配置或未安装仅跳过远程查询,继续正文编写。
|
|
152
118
|
2. 读取 proposal Continuity。对**当前 Capability** 各调一次(「全部」= 循环 N 次,不是一次大查询)——优先走 **`opsx-ontology-query`** 的 `match-requirement`;薄封装仅作参数拼装:
|
|
153
119
|
|
|
154
120
|
```bash
|
|
@@ -234,22 +200,9 @@ node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" \
|
|
|
234
200
|
|
|
235
201
|
> 写入文档前逐项确认,完整 7 项自检清单见 `./checklist.md`「§7 质量红线自检」。自检完成后**必须**输出结构化自检报告(模板见 `./reference.md`「§7 质量自检报告模板」),未通过项自动修复后重新输出,直至全部 ✅。
|
|
236
202
|
|
|
237
|
-
### 8.
|
|
238
|
-
|
|
239
|
-
生成文档后,向用户展示概要:
|
|
240
|
-
> "已生成 spec.md,概要如下:
|
|
241
|
-
> - Capability:[name]
|
|
242
|
-
> - 需求项数量:[N]
|
|
243
|
-
> - 场景数量:[M]
|
|
244
|
-
>
|
|
245
|
-
> 请确认:
|
|
246
|
-
> - A. 确认无误,继续下一个 Capability 的 spec / 进入 design
|
|
247
|
-
> - B. 需要修改
|
|
248
|
-
> - C. 补充更多信息"
|
|
203
|
+
### 8. 展示可审阅的业务差异
|
|
249
204
|
|
|
250
|
-
|
|
251
|
-
- 文档路径
|
|
252
|
-
- 下一步提示:"运行 `/opsx-design <name> <capability>` 创建技术设计文档"
|
|
205
|
+
展示新增/修改的规则、验收条件、来源和未决问题,完整 UUID 不放在面向用户的摘要中。已授权连续处理时完成范围内 Capability 后加载 design;单阶段请求在此结束。只在业务歧义或真实身份冲突时询问,不再追加“批量推进”选择题。
|
|
253
206
|
|
|
254
207
|
---
|
|
255
208
|
|
|
@@ -259,7 +212,7 @@ node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" \
|
|
|
259
212
|
- 新需求、场景和约束分别使用 `STMT-*`、`AC-*`、`CON-*`;分配规则是同前缀同 Capability 当前最大序号 + 1。
|
|
260
213
|
- 修改已有实体必须复用原 ID;删除实体只写 removal 语义,不得把编号分配给新实体。
|
|
261
214
|
- `added` 必须调用 `semantic-identity --delta-state=added` 生成新的实体 UUID 和版本 UUID;禁止通过复制另一需求的 UUID 创建新实体。
|
|
262
|
-
- `modified/removed`
|
|
215
|
+
- `modified/removed` 保留已明确的 `entity-id` 和真实 `predecessor-version`;在线解析当前版本后由工具分配版本。离线可以继续正文,未确认的远程身份登记为待核对,发布前解决;不能从相似归档复制 UUID 或把最新版本编号直接当作实际编辑基线。
|
|
263
216
|
- AC 必须嵌套在所属 STMT 下;CON 必须通过 `**constrains**` 显式引用 STMT。
|
|
264
217
|
- 对 `reuseMode=REFERENCE` 的历史候选必须创建新的实体身份;禁止因为内容相似而复用历史 `entity-id`。
|
|
265
218
|
- 对 `reuseMode=INHERIT` 的历史事实,必须使用返回的实体与版本来源完成 unchanged/modified 身份参数校验。
|
|
@@ -277,7 +230,7 @@ node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" \
|
|
|
277
230
|
- **需求项格式必须正确**:`####` 需求项、`#####` 场景;每个需求项必须有清晰的验收标准。
|
|
278
231
|
- 技术契约必须可执行、无歧义。
|
|
279
232
|
- **⛔ 阶段边界**:禁止执行任何代码创建/修改操作。
|
|
280
|
-
-
|
|
233
|
+
- **执行范围**:单阶段请求完成即停;已授权连续处理则按交互契约加载下一阶段,check 通过后方可进入 apply,不能超出授权范围。
|
|
281
234
|
|
|
282
235
|
---
|
|
283
236
|
|