kld-sdd 2.6.16 → 2.6.21
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/bin/kld-sdd-init.js +10 -0
- package/kld-sdd-guide.html +22 -0
- package/lib/device-auth-cli.js +130 -0
- package/lib/device-auth.js +345 -0
- package/lib/init-account-binding.js +108 -0
- package/lib/init.js +238 -55
- package/lib/skills-bundle.js +20 -1
- package/lib/tool-profiles.js +8 -0
- package/package.json +7 -3
- package/skywalk-sdd/apply-worktree-finish.cjs +2 -23
- package/skywalk-sdd/context-client.cjs +38 -87
- package/skywalk-sdd/index.cjs +860 -132
- package/skywalk-sdd/kb-sync-identity.cjs +780 -0
- package/skywalk-sdd/kb-upload.cjs +505 -0
- package/skywalk-sdd/lib/shared.cjs +811 -0
- package/skywalk-sdd/lib/usage-contract.cjs +276 -0
- package/skywalk-sdd/lib/usage-reporter.cjs +354 -0
- package/skywalk-sdd/lib/user-config.cjs +157 -0
- package/skywalk-sdd/metrics-v3.cjs +138 -8
- package/skywalk-sdd/ontology/archive-package.cjs +19 -34
- package/skywalk-sdd/ontology/change-lock.cjs +3 -7
- package/skywalk-sdd/ontology/external-key.cjs +18 -4
- package/skywalk-sdd/ontology/id.cjs +26 -5
- package/skywalk-sdd/ontology/identity-index.cjs +3 -7
- package/skywalk-sdd/ontology/resolve-spec-root.cjs +20 -6
- package/skywalk-sdd/ontology/runtime.cjs +16 -12
- package/skywalk-sdd/ontology/traceability-validator.cjs +7 -4
- package/skywalk-sdd/reporting/change-report-markdown.cjs +137 -19
- package/skywalk-sdd/reporting/change-report-model.cjs +993 -14
- package/skywalk-sdd/reporting/change-report-renderer.cjs +106 -41
- package/skywalk-sdd/reporting/change-report-view-model.cjs +272 -43
- package/skywalk-sdd/reporting/core-metric-definitions.cjs +192 -0
- package/skywalk-sdd/spec-root.cjs +31 -0
- package/templates/git-hooks/pre-commit-consistency-check.cjs +271 -116
- package/templates/git-hooks/pre-push-consistency-check.cjs +252 -123
- package/templates/hooks/codebuddy/hooks/hook-gate-core.cjs +327 -0
- package/templates/hooks/codebuddy/hooks/sdd-apply-test-gate.cjs +54 -9
- package/templates/hooks/codebuddy/hooks/sdd-mid-checkpoint.cjs +63 -6
- package/templates/hooks/codebuddy/hooks/sdd-tdd-rhythm-gate.cjs +113 -65
- package/templates/openspec/proposal.md +7 -3
- package/templates/openspec/spec.md +3 -3
- package/templates/skills/kld-sdd/opsx-apply/SKILL.md +8 -6
- package/templates/skills/kld-sdd/opsx-apply/checklist.md +2 -0
- package/templates/skills/kld-sdd/opsx-apply/reference.md +29 -7
- package/templates/skills/kld-sdd/opsx-archive/SKILL.md +6 -5
- package/templates/skills/kld-sdd/opsx-check/SKILL.md +49 -17
- package/templates/skills/kld-sdd/opsx-check/checklist.md +4 -2
- package/templates/skills/kld-sdd/opsx-consistency-check/SKILL.md +187 -257
- package/templates/skills/kld-sdd/opsx-consistency-check/reference.md +129 -0
- package/templates/skills/kld-sdd/opsx-design/SKILL.md +2 -2
- package/templates/skills/kld-sdd/opsx-explore/SKILL.md +2 -2
- package/templates/skills/kld-sdd/opsx-kb-config/SKILL.md +185 -0
- package/templates/skills/kld-sdd/opsx-kb-config/reference.md +127 -0
- package/templates/skills/kld-sdd/opsx-kb-ingest/SKILL.md +218 -53
- package/templates/skills/kld-sdd/opsx-kb-ingest/reference.md +51 -9
- package/templates/skills/kld-sdd/opsx-ontology-query/SKILL.md +12 -50
- package/templates/skills/kld-sdd/opsx-ontology-query/phase-3-postchange.md +2 -2
- package/templates/skills/kld-sdd/opsx-ontology-query/reference.md +1 -1
- package/templates/skills/kld-sdd/opsx-propose/SKILL.md +35 -23
- package/templates/skills/kld-sdd/opsx-propose/checklist.md +2 -0
- package/templates/skills/kld-sdd/opsx-propose/reference.md +22 -17
- package/templates/skills/kld-sdd/opsx-rules/SKILL.md +2 -2
- package/templates/skills/kld-sdd/opsx-spec/SKILL.md +19 -15
- package/templates/skills/kld-sdd/opsx-spec/checklist.md +2 -0
- package/templates/skills/kld-sdd/opsx-task/SKILL.md +2 -4
- package/templates/skills/kld-sdd/opsx-test/SKILL.md +2 -2
- package/templates/skills/kld-sdd/tdd-core/reference.md +1 -1
- package/templates/skills/kld-sdd/tdd-rules/rules/test-skeleton-telemetry.md +1 -1
- package/templates/skills/kld-sdd/opsx-kb-ingest/state.example.json +0 -7
- package/templates/skills/kld-sdd/opsx-ontology-query/state.example.json +0 -7
|
@@ -17,7 +17,7 @@ allowed-tools:
|
|
|
17
17
|
|
|
18
18
|
你是一个 SDD(Specification-Driven Development)业务意图文档专家。激活本技能后,你将引导用户创建符合质量红线标准的 **proposal.md** 文档。
|
|
19
19
|
|
|
20
|
-
> **硬依赖**:本技能 Continuity 步骤依赖同级已部署的 **`opsx-ontology-query`**。启动 Continuity 前必须先 `Read` 该技能的 `SKILL.md`,并按其中流程准备
|
|
20
|
+
> **硬依赖**:本技能 Continuity 步骤依赖同级已部署的 **`opsx-ontology-query`**。启动 Continuity 前必须先 `Read` 该技能的 `SKILL.md`,并按其中流程准备 `kb-state.json`(spec 仓根目录,API Key + targets,与 `opsx-kb-ingest` 共用)。若项目 skills 目录中不存在 `opsx-ontology-query/`,停止 Continuity,提示用户重新执行 `kld-sdd-init`;**禁止**用本地 `archive/` 冒充查询。
|
|
21
21
|
>
|
|
22
22
|
> **📡 KB 就绪检查**:§6.5 在进入编号入场前会检测 KB 配置状态。若未配置,会**主动询问**用户选择「配置」或「跳过」,不再静默降级。
|
|
23
23
|
|
|
@@ -35,10 +35,11 @@ allowed-tools:
|
|
|
35
35
|
|
|
36
36
|
> **🖥️ 跨平台执行规则**
|
|
37
37
|
> - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`),不是 Git 根或工作区根。
|
|
38
|
-
> - `openspec`
|
|
39
|
-
> - Telemetry / ontology:`node
|
|
38
|
+
> - `openspec` 命令:`cd <spec-package> && openspec …`(先 cd 到包裹包即可)。路径不确定时用 `node <spec-package>/skywalk-sdd/spec-root.cjs` 验证。
|
|
39
|
+
> - Telemetry / ontology:`node <spec-package>/skywalk-sdd/log.cjs …`(直接在包裹包内执行);`--project=.` 指当前 spec 包裹包。
|
|
40
40
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
41
41
|
> - ${SHELL_GUIDANCE}
|
|
42
|
+
> - **⚠️ PowerShell CLIXML**:在 PowerShell 中直接执行 `node xxx.cjs --arg=val` 时,stdout 可能被包装为 CLIXML `<Objs>` 格式,导致 JSON 解析失败。建议用 `write_to_file` 创建临时 `.cjs` 脚本通过 `execFileSync` 调用,或使用 `stripCliXml()`(`lib/shared.cjs` 已内置)剥离。
|
|
42
43
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
43
44
|
> **📊 Telemetry(必做,不得跳过)** — 阶段开始 / 阶段结束**命令模板**见 `./reference.md`「📊 Telemetry 命令模板」。
|
|
44
45
|
> - 用户确认变更范围、`mode`、`test-strategy` 或方案 A/B/C 时,记录严格 `process_note`:`kind=user_decision`,并分别填写 `decision_type=scope|mode|test_strategy|other`。同一决定只记录一次,后续改变范围时改用 `kind=scope_change`。
|
|
@@ -200,28 +201,30 @@ openspec instructions proposal --change "<name>" --json
|
|
|
200
201
|
1. 收集 REQ 号(含可选 `feature-id`);没有则问一次。
|
|
201
202
|
2. 逐个验号(确定性入口,禁止肉眼判正则):
|
|
202
203
|
```bash
|
|
203
|
-
node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" external-key --validate "
|
|
204
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" external-key --validate "<外部需求编号>" --type requirement
|
|
204
205
|
# 若有 feature-id:
|
|
205
|
-
node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" external-key --validate "
|
|
206
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" external-key --validate "<外部功能编号>" --type feature
|
|
206
207
|
```
|
|
207
|
-
-
|
|
208
|
+
- 编号格式:大写字母 + 数字 + 连字符(-) + 下划线(_),1~50 字符;例 KLERP-001、REQ-FI-2024-001、1010000。
|
|
209
|
+
- 不合规 → **拒绝进入 resolve**,告知「编号格式不合规(仅允许大写字母、数字、连字符、下划线)」;Agent 不得猜测、补位、改写。
|
|
208
210
|
- 用户明确说「没有外部需求号」→ 走 `numbering-waiver.reason`(必填理由);`requirement-refs` 必须为空;提示本轮不种桥。
|
|
209
|
-
3. **先加载依赖技能**:确认 `${AGENT_SKILL_DIR}/opsx-
|
|
211
|
+
3. **先加载依赖技能**:确认 `${AGENT_SKILL_DIR}/opsx-kb-config/SKILL.md` 存在并 Read。KB 配置(API Key + Space/KB 选择 + project-identity.json)由 `opsx-kb-config` 统一负责,`kb-state.json`(spec 仓根目录)与 `opsx-ontology-query`、`opsx-kb-ingest` 共用。未安装则停止本步。
|
|
210
212
|
- **KB 就绪检查**:运行 `node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --check-only`,若 `"available": false`,使用 **AskUserQuestion** 询问用户:
|
|
211
|
-
> "📡
|
|
212
|
-
>
|
|
213
|
-
>
|
|
214
|
-
> -
|
|
215
|
-
> -
|
|
216
|
-
-
|
|
217
|
-
- **选
|
|
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` 匹配已有能力;归档为空则全部按新增处理)。
|
|
218
221
|
- **选 C** → 终止 propose。
|
|
219
222
|
4. 验号通过后才 resolve:
|
|
220
223
|
```bash
|
|
221
224
|
node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --mode=resolve \
|
|
222
225
|
--external-system=requirement-mgmt \
|
|
223
226
|
--external-object-type=requirement \
|
|
224
|
-
--external-id="
|
|
227
|
+
--external-id="<外部需求编号>" \
|
|
225
228
|
--entity-type=Capability \
|
|
226
229
|
--space-id="$ENGINEERING_KB_SPACE_ID" \
|
|
227
230
|
--kb-id="$ENGINEERING_KB_KB_ID"
|
|
@@ -230,10 +233,10 @@ node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --mode=resolve \
|
|
|
230
233
|
6. 按 KB 结果确认 Continuity:`iteration` / `similar-reference` / `new`;勾选本次涉及的 CAP。
|
|
231
234
|
7. 写入 proposal frontmatter:`requirement-refs`(含 `feature-id`)/ `numbering-waiver` + `continuity`。**禁止**写本地 archive 文件夹名作为 `base-archive`。
|
|
232
235
|
8. CAP 级「同 key + 同锚点、不同 entity_id」当场问 A/B/C;决议写入 `ontology/continuity-resolution.json` 的 `capabilities[]`。
|
|
233
|
-
9. KB 不可用 → `degraded` 继续,**禁止**扫本地 `archive/` 抄 UUID
|
|
236
|
+
9. KB 不可用 → `degraded` 继续,**禁止**扫本地 `archive/` 抄 UUID。用户选择跳过 KB 时走降级路径:
|
|
234
237
|
- 扫描 `openspec/changes/archive/*/ontology/ontology-identities.json` 匹配 canonicalKey
|
|
235
|
-
-
|
|
236
|
-
- ⚠️
|
|
238
|
+
- 降级路径的所有 entity-id 来源在 sdd-output.md 知识库使用表中标注 `source: archive(degraded)`,与 `source: KB current` 明确区分。
|
|
239
|
+
- ⚠️ **降级风险**:归档中的版本号可能已过时(归档后该能力可能在 KB 中有更新版本)。降级路径取到的 predecessor-version 不保证是 KB 最新版本,入库时可能触发 `VERSION_CONFLICT`,需手动修正。
|
|
237
240
|
10. **不得**在本阶段生成 STMT/AC/场景或裁决场景身份;**不得**铸/改 REQ/FEAT 号。
|
|
238
241
|
|
|
239
242
|
**完整流程示例(路径 A — KB 驱动)**:
|
|
@@ -268,11 +271,20 @@ Read openspec/changes/archive/*/ontology/ontology-identities.json
|
|
|
268
271
|
|
|
269
272
|
**❗ 必须主动询问用户,不得默认选择**。Full / Simple / Auto 三种模式的目录结构、适用场景与 AskUserQuestion 文案见 `./reference.md`「§7 文档拆分模式选择」。根据用户选择设置 `mode: full | simple`(Auto 按能力域数量判断),记录到 proposal.md 的 YAML frontmatter。
|
|
270
273
|
|
|
271
|
-
### 7.5
|
|
274
|
+
### 7.5 自动判断变更类型
|
|
272
275
|
|
|
273
|
-
|
|
276
|
+
变更类型只用于最终指标的分层统计,不再作为一个单独的用户交互问题,也不单独询问用户选择内部枚举。Agent 根据需求、影响范围和能力域自动分类,并把中文判断理由展示给用户;只有现有描述不足以判断业务范围时,才在正常需求澄清中补问事实。
|
|
274
277
|
|
|
275
|
-
|
|
278
|
+
按以下优先级判断,命中即停止:`composite` → `report` → `transaction` → `config`。纯 SDD/遥测/报告生成器等非业务工具变更使用受限值 `unknown`,并排除在四种业务类型的均值比较之外。
|
|
279
|
+
|
|
280
|
+
写入 proposal.md YAML frontmatter:
|
|
281
|
+
|
|
282
|
+
- `change-type`: `config | transaction | report | composite | unknown`
|
|
283
|
+
- `change-type-source`: Agent 初次判断写 `agent-inferred`;用户在整份 proposal 确认时纠正后写 `user-corrected`
|
|
284
|
+
- `change-type-confidence`: `high | medium | low`
|
|
285
|
+
- `change-type-reason`: 一句中文理由
|
|
286
|
+
|
|
287
|
+
类型原话、判断顺序和边界见 `./reference.md`「§7.5 变更类型自动分类」。
|
|
276
288
|
|
|
277
289
|
### 8. 【交互引导】测试策略选择
|
|
278
290
|
|
|
@@ -340,11 +352,11 @@ Read openspec/changes/archive/*/ontology/ontology-identities.json
|
|
|
340
352
|
- **⛔ 阶段边界**:本阶段禁止执行任何代码创建/修改操作。若用户要求处理代码,回复:「当前处于 Propose 阶段,代码操作请在完成文档后使用 `/opsx-apply` 执行。」
|
|
341
353
|
- **⛔ 单阶段原则**:完成 proposal.md 后必须立即停止。仅提示用户下一步可运行 `/opsx-spec`,绝对禁止自动执行 spec/design/task 等后续阶段。每个阶段必须由用户主动触发。
|
|
342
354
|
- **⛔ Frontmatter 规范(L7)**:YAML frontmatter 中禁止写 `#` 注释(YAML 注释在 frontmatter 中可能导致解析问题)。如需说明,在 frontmatter 之前或之后用正文描述。
|
|
343
|
-
- **⛔ change-type 必采**:frontmatter 必须含 `change-type
|
|
355
|
+
- **⛔ change-type 必采**:frontmatter 必须含 `change-type`、`change-type-source`、`change-type-confidence`、`change-type-reason`;Agent 自动判断,不为内部分类单独打断用户。
|
|
344
356
|
|
|
345
357
|
---
|
|
346
358
|
|
|
347
359
|
## 渐进披露
|
|
348
360
|
|
|
349
361
|
- Read `checklist.md` 仅在执行 propose 需要校验时 — 含阶段边界⛔(Propose 阶段约束)、§6 需求完整性检查、Guardrails ⛔ 强制项勾选表。
|
|
350
|
-
- Read `reference.md` 仅在需要参考详细模板时 — 含 📊 Telemetry 命令模板(start/end)、§7 文档拆分模式(Full/Simple/Auto)、§7.5
|
|
362
|
+
- Read `reference.md` 仅在需要参考详细模板时 — 含 📊 Telemetry 命令模板(start/end)、§7 文档拆分模式(Full/Simple/Auto)、§7.5 变更类型自动分类(config/transaction/report/composite/unknown)、§8 测试策略(TDD/Impl-First/None)、§10 质量红线自检清单(8 项)。
|
|
@@ -32,6 +32,8 @@ description: opsx-propose 的阶段强制检查点与自检清单。仅在执行
|
|
|
32
32
|
|
|
33
33
|
## Guardrails ⛔ 强制项
|
|
34
34
|
|
|
35
|
+
- [ ] ⛔ **Telemetry**:阶段开始前已执行 `log.cjs start --command=propose ...`,event_id 已保存
|
|
36
|
+
- [ ] ⛔ **Telemetry**:阶段结束后已执行 `log.cjs end --event-id=<event_id> --command=propose ...`
|
|
35
37
|
- [ ] 必须以 `openspec-templates/proposal.md` 为模板基准,不得使用 `openspec instructions` 返回的简化 template
|
|
36
38
|
- [ ] `context` 和 `rules` 是约束条件,不得出现在生成的文档中
|
|
37
39
|
- [ ] proposal.md 聚焦【Why】,不写技术实现细节(留给 design.md)
|
|
@@ -48,27 +48,32 @@ description: opsx-propose 的详细模板:telemetry 命令、文档拆分模
|
|
|
48
48
|
|
|
49
49
|
---
|
|
50
50
|
|
|
51
|
-
## §7.5
|
|
51
|
+
## §7.5 变更类型自动分类
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
变更类型用于按类型分组呈现核心指标,避免把不同类型变更混在一个平均数里导致结论失真。它只影响统计分层,不需要作为一个单独问题打断用户。
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
按以下顺序自动判断,命中后停止:
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
57
|
+
1. **composite(复合变更)**:多能力域耦合、依赖关系复杂,或同时明显具备两种以上业务类型特征。预期 E1 较长、返工次数较高,重点关注 P-R、E1。
|
|
58
|
+
2. **report(报表类)**:业务目标是报表查询、统计展示或复杂数据口径,通常数据逻辑复杂、查询优化要求高。重点关注 Q3、Q4、E2。
|
|
59
|
+
3. **transaction(单据类)**:业务流程、状态流转、CRUD、交易路径或接口协作变更,通常复杂度中等、接口较多。重点关注 P4、P-R。
|
|
60
|
+
4. **config(配置类)**:配置、开关、环境、依赖或固定模式调整,范围小、单能力域、几乎不改变业务流程。重点关注 E1、Q3。
|
|
61
|
+
5. **unknown(非业务工具)**:纯 SDD 流程、遥测、报告生成器、开发工具或无法可靠归入上述四种业务类型的变更。`unknown` 必须单列数量,不参与四种业务类型的均值和趋势比较。
|
|
62
|
+
|
|
63
|
+
写入示例:
|
|
64
|
+
|
|
65
|
+
```yaml
|
|
66
|
+
change-type: report
|
|
67
|
+
change-type-source: agent-inferred
|
|
68
|
+
change-type-confidence: high
|
|
69
|
+
change-type-reason: "主要目标是展示和解释度量报告中的计算口径,属于报表类变更"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Agent 应在 proposal 正文或完成摘要中展示中文分类及理由,但不单独询问用户选择内部枚举。只有需求事实不足时,才通过正常需求澄清补问业务目标或影响范围。
|
|
68
73
|
|
|
69
|
-
|
|
74
|
+
若用户在整份 proposal 确认时纠正分类,更新 `change-type` 和理由,并将 `change-type-source` 改为 `user-corrected`;不要再次发起独立的变更类型交互。
|
|
70
75
|
|
|
71
|
-
> 历史 proposal 的 `document`/`other` 读取侧迁移为 `unknown`
|
|
76
|
+
> 历史 proposal 的 `document`/`other` 读取侧迁移为 `unknown` 并告警;新 proposal 不再写入这两个历史值。
|
|
72
77
|
|
|
73
78
|
---
|
|
74
79
|
|
|
@@ -106,6 +111,6 @@ description: opsx-propose 的详细模板:telemetry 命令、文档拆分模
|
|
|
106
111
|
- [ ] 前置依赖使用 checkbox 格式
|
|
107
112
|
- [ ] 文档末尾包含质量红线检查清单
|
|
108
113
|
- [ ] 能力分解章节已明确(决定后续 specs 文件夹结构)
|
|
109
|
-
- [ ] frontmatter 含 `change-type
|
|
114
|
+
- [ ] frontmatter 含 `change-type`、`change-type-source`、`change-type-confidence`、`change-type-reason`,分类理由与需求事实一致
|
|
110
115
|
|
|
111
116
|
**如有任意一项未满足,重新生成对应章节,直至全部通过。**
|
|
@@ -20,8 +20,8 @@ allowed-tools:
|
|
|
20
20
|
|
|
21
21
|
> **🖥️ 跨平台执行规则**
|
|
22
22
|
> - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`、`skywalk-sdd/`),不是 Git 根。
|
|
23
|
-
> - **CLI
|
|
24
|
-
> - `openspec
|
|
23
|
+
> - **CLI 前缀**:`node <spec-package>/skywalk-sdd/log.cjs …`(直接在包裹包内执行)。路径不确定时用 `node <spec-package>/skywalk-sdd/spec-root.cjs` 验证。
|
|
24
|
+
> - `openspec`:`cd <spec-package> && openspec …`(先 cd 到包裹包即可)。
|
|
25
25
|
> - ${SHELL_GUIDANCE}
|
|
26
26
|
> - **本技能不写入 SkyWalk Telemetry**(与 `opsx-knowledge` 同属辅助技能,不走 `log.cjs start/end`)。
|
|
27
27
|
|
|
@@ -17,7 +17,7 @@ allowed-tools:
|
|
|
17
17
|
|
|
18
18
|
你是一个 SDD(Specification-Driven Development)技术契约专家。激活本技能后,你将引导用户为每个 Capability 创建 **spec.md** 文档。
|
|
19
19
|
|
|
20
|
-
> **硬依赖**:场景身份 / Spec 复用依赖同级已部署的 **`opsx-ontology-query`**。进入知识库上下文步骤前必须先 `Read` 该技能的 `SKILL.md` 并完成其 Session 启动(API Key + targets →
|
|
20
|
+
> **硬依赖**:场景身份 / Spec 复用依赖同级已部署的 **`opsx-ontology-query`**。进入知识库上下文步骤前必须先 `Read` 该技能的 `SKILL.md` 并完成其 Session 启动(API Key + targets → `kb-state.json`,spec 仓根目录)。缺失则停止复用查询,提示重新 `kld-sdd-init`;**KB 可用时禁止**从本地 `archive/` 抄 UUID,entity-id 必须来自 KB resolve by canonicalKey。
|
|
21
21
|
>
|
|
22
22
|
> **📡 KB 就绪检查**:§2.5 在进入上下文加载前会检测 KB 配置状态。若未配置,会**主动询问**用户选择「配置」或「跳过」,不再静默降级。
|
|
23
23
|
|
|
@@ -35,10 +35,11 @@ allowed-tools:
|
|
|
35
35
|
|
|
36
36
|
> **🖥️ 跨平台执行规则**
|
|
37
37
|
> - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`),不是 Git 根或工作区根。
|
|
38
|
-
> - `openspec`
|
|
39
|
-
> - Telemetry / ontology:`node
|
|
38
|
+
> - `openspec` 命令:`cd <spec-package> && openspec …`(先 cd 到包裹包即可)。路径不确定时用 `node <spec-package>/skywalk-sdd/spec-root.cjs` 验证。
|
|
39
|
+
> - Telemetry / ontology:`node <spec-package>/skywalk-sdd/log.cjs …`(直接在包裹包内执行);`--project=.` 指当前 spec 包裹包。
|
|
40
40
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
41
41
|
> - ${SHELL_GUIDANCE}
|
|
42
|
+
> - **⚠️ PowerShell CLIXML**:在 PowerShell 中直接执行 `node xxx.cjs --arg=val` 时,stdout 可能被包装为 CLIXML `<Objs>` 格式,导致 JSON 解析失败。建议用 `write_to_file` 创建临时 `.cjs` 脚本通过 `execFileSync` 调用,或使用 `stripCliXml()`(`lib/shared.cjs` 已内置)剥离。
|
|
42
43
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
43
44
|
> **📊 Telemetry(必做,不得跳过)** — 阶段开始 / 阶段结束**命令模板**见 `./reference.md`「📊 Telemetry 命令模板」。
|
|
44
45
|
|
|
@@ -121,18 +122,21 @@ openspec list
|
|
|
121
122
|
```
|
|
122
123
|
- 输出 `"available": true` → KB 已配置
|
|
123
124
|
- 输出 `"available": false` → KB 未配置
|
|
125
|
+
|
|
126
|
+
> **注意**:KB 就绪检查(`--check-only`)与 KB 上下文查询(`match-requirement`)是两个独立步骤。即使 Continuity=new 无需上下文查询,**仍需执行 `--check-only`** 确认 KB 可用性,以便在 sdd-output.md 中记录 KB 状态。
|
|
127
|
+
|
|
124
128
|
3. **若已配置** → 直接进入 §3。
|
|
125
129
|
4. **若未配置** → 使用 **AskUserQuestion** 询问:
|
|
126
130
|
|
|
127
|
-
> "📡
|
|
131
|
+
> "📡 **知识库未配置**
|
|
128
132
|
>
|
|
129
|
-
>
|
|
133
|
+
> 知识库可以帮你验证场景身份、复用已有 Spec 和检索历史验收标准。现在要配置吗?
|
|
130
134
|
>
|
|
131
|
-
> - A.
|
|
132
|
-
> - B.
|
|
133
|
-
> - C.
|
|
135
|
+
> - A. **现在配置** — 运行 /opsx-kb-config
|
|
136
|
+
> - B. **暂不配置,先继续** — 仅用本地数据(精度有限)
|
|
137
|
+
> - C. **取消** — 终止本次操作"
|
|
134
138
|
|
|
135
|
-
- **选 A** →
|
|
139
|
+
- **选 A** → 引导运行 `/opsx-kb-config`,配置完成后进入 §3。
|
|
136
140
|
- **选 B** → 在 spec.md frontmatter 标注 `kb-status: degraded(by-user-choice)`,进入 §3(仅本地上下文)。
|
|
137
141
|
- **选 C** → 终止 spec。
|
|
138
142
|
|
|
@@ -144,7 +148,7 @@ openspec list
|
|
|
144
148
|
|
|
145
149
|
**【默认尝试】工程 Spec 知识库上下文(场景身份主战场)**:
|
|
146
150
|
|
|
147
|
-
1. **先加载依赖技能**:确认 `${AGENT_SKILL_DIR}/opsx-ontology-query/SKILL.md` 存在并 Read;按该技能完成 API Key / targets
|
|
151
|
+
1. **先加载依赖技能**:确认 `${AGENT_SKILL_DIR}/opsx-ontology-query/SKILL.md` 存在并 Read;按该技能完成 API Key / targets(`kb-state.json`,spec 仓根目录,与 `opsx-kb-ingest` 共用)。未安装则停止本步。
|
|
148
152
|
2. 读取 proposal Continuity。对**当前 Capability** 各调一次(「全部」= 循环 N 次,不是一次大查询)——优先走 **`opsx-ontology-query`** 的 `match-requirement`;薄封装仅作参数拼装:
|
|
149
153
|
|
|
150
154
|
```bash
|
|
@@ -154,7 +158,7 @@ node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" \
|
|
|
154
158
|
--entity-id="<该 CAP 的 entity_id>" \
|
|
155
159
|
--external-system=requirement-mgmt \
|
|
156
160
|
--external-object-type=requirement \
|
|
157
|
-
--external-id="
|
|
161
|
+
--external-id="<外部需求编号>" \
|
|
158
162
|
--space-id="$ENGINEERING_KB_SPACE_ID" \
|
|
159
163
|
--kb-id="$ENGINEERING_KB_KB_ID"
|
|
160
164
|
```
|
|
@@ -164,16 +168,16 @@ node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" \
|
|
|
164
168
|
- **禁止**从本地 `archive/` 抄 UUID 当跨迭代继承源;跨迭代只认 KB current。
|
|
165
169
|
- 若返回 `available=false` / `degraded=true`,记录降级并继续,不得扫本地 archive 兜底。
|
|
166
170
|
- `INHERIT`:unchanged 写继承引用;modified 复用 entity-id + predecessor。`REFERENCE`:只参考,新开身份。
|
|
167
|
-
- reuseBundle / 实体上的 `externalRefs` 写入场景 `external-ref`(完整键
|
|
171
|
+
- reuseBundle / 实体上的 `externalRefs` 写入场景 `external-ref`(完整键 `<外部需求编号>:SCN-<slug>-<NNN>`)。
|
|
168
172
|
- **SCN 铸号(本仓唯一铸号点)**:
|
|
169
173
|
1. 继承优先:`reuseBundle.externalRefs` 已有场景键的 unchanged/modified 场景一律沿用原 SCN 号,禁止另铸。
|
|
170
|
-
2. 新场景:`SCN-<slug>-<NNN>`;slug=kebab-case 小写 ≤40;NNN
|
|
174
|
+
2. 新场景:`SCN-<slug>-<NNN>`;slug=kebab-case 小写 ≤40;NNN=该需求编号命名空间内 max+1(已用集合=KB 回传 ∪ 本 Change 已写键,含 removed 墓碑)。
|
|
171
175
|
3. removed 号是墓碑:永不复用、永不重排;序号达 999 → 硬错误,回需求系统拆分需求,不扩位。
|
|
172
|
-
4. 写完立即用 `cli.cjs external-key --validate … --type scenario`
|
|
176
|
+
4. 写完立即用 `cli.cjs external-key --validate … --type scenario` 校验;需求编号前缀必须 ∈ proposal `requirement-refs`。
|
|
173
177
|
- 场景级「同 SCN key + 同锚点、不同 entity_id」当场问 A/B/C;未决不得进入下一 CAP / design。决议追加到 `ontology/continuity-resolution.json` 的 `scenarios[]`;决议中的 `externalKey` 必须是归一化形态。
|
|
174
178
|
- 优先消费 `reuseBundles[].statements`;`designElements` 只作理解上下文,不能写成 Spec 的 How。
|
|
175
179
|
- 所有知识库内容均为 advisory;与用户确认 / proposal 冲突时以当前确认与 proposal 为准。
|
|
176
|
-
-
|
|
180
|
+
- **禁止**铸/改外部需求/功能编号;**禁止**自动重排/回收 SCN。
|
|
177
181
|
|
|
178
182
|
**【可选】业务知识库检索**:
|
|
179
183
|
术语含义不清且可能影响 spec 准确性时,可调用 **opsx-knowledge** skill。
|
|
@@ -42,6 +42,8 @@ description: opsx-spec 的阶段强制检查点与自检清单。仅在执行 sp
|
|
|
42
42
|
|
|
43
43
|
## Guardrails ⛔ 强制项
|
|
44
44
|
|
|
45
|
+
- [ ] ⛔ **Telemetry**:阶段开始前已执行 `log.cjs start --command=spec ...`,event_id 已保存
|
|
46
|
+
- [ ] ⛔ **Telemetry**:阶段结束后已执行 `log.cjs end --event-id=<event_id> --command=spec ...`
|
|
45
47
|
- [ ] 必须以 `openspec-templates/spec.md` 为模板基准
|
|
46
48
|
- [ ] spec.md 聚焦【What】,不写 How(留给 design.md)
|
|
47
49
|
- [ ] **需求项格式必须正确**:`####` 需求项、`#####` 场景
|
|
@@ -48,8 +48,8 @@ allowed-tools:
|
|
|
48
48
|
|
|
49
49
|
> **🖥️ 跨平台执行规则**
|
|
50
50
|
> - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`),不是 Git 根或工作区根。
|
|
51
|
-
> - `openspec`
|
|
52
|
-
> - Telemetry / ontology:`node
|
|
51
|
+
> - `openspec` 命令:`cd <spec-package> && openspec …`(先 cd 到包裹包即可)。路径不确定时用 `node <spec-package>/skywalk-sdd/spec-root.cjs` 验证。
|
|
52
|
+
> - Telemetry / ontology:`node <spec-package>/skywalk-sdd/log.cjs …`(直接在包裹包内执行);`--project=.` 指当前 spec 包裹包。
|
|
53
53
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
54
54
|
> - ${SHELL_GUIDANCE}
|
|
55
55
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
@@ -80,8 +80,6 @@ allowed-tools:
|
|
|
80
80
|
|
|
81
81
|
Simple 模式或单文件能力域下,**不要拆成多个同文件任务**。按可独立测试的函数/单元拆分任务,每个任务对应一个可独立验证的代码单元。同文件多处改动有顺序依赖时合并为一个任务。
|
|
82
82
|
|
|
83
|
-
## 启动流程
|
|
84
|
-
|
|
85
83
|
### 1. 【交互引导】确认变更名称和 Capability
|
|
86
84
|
|
|
87
85
|
若未提供参数,列出已有 design.md 的 Capability 供用户选择。
|
|
@@ -25,8 +25,8 @@ allowed-tools:
|
|
|
25
25
|
|
|
26
26
|
> **🖥️ 跨平台执行规则**
|
|
27
27
|
> - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`),不是 Git 根或工作区根。
|
|
28
|
-
> - `openspec`
|
|
29
|
-
> - Telemetry / ontology:`node
|
|
28
|
+
> - `openspec` 命令:`cd <spec-package> && openspec …`(先 cd 到包裹包即可)。路径不确定时用 `node <spec-package>/skywalk-sdd/spec-root.cjs` 验证。
|
|
29
|
+
> - Telemetry / ontology:`node <spec-package>/skywalk-sdd/log.cjs …`(直接在包裹包内执行);`--project=.` 指当前 spec 包裹包。
|
|
30
30
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
31
31
|
> - ${SHELL_GUIDANCE}
|
|
32
32
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
@@ -129,7 +129,7 @@ node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --strict --type=test_res
|
|
|
129
129
|
**实现任务**(不带 `task_kind`):
|
|
130
130
|
|
|
131
131
|
```bash
|
|
132
|
-
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --strict --type=task_update --command=apply --project=. --change=<变更名称> --capability=<capability-name> --task-id=<TASK-ID> --run-id=<任务更新稳定ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --status=completed --result=success --summary="<TASK-ID> 完成" --details-json='{"
|
|
132
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --strict --type=task_update --command=apply --project=. --change=<变更名称> --capability=<capability-name> --task-id=<TASK-ID> --run-id=<任务更新稳定ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --status=completed --result=success --summary="<TASK-ID> 完成" --details-json='{"task_update":{"files":["<本任务实际修改的项目相对路径>"],"test_event_id":"<成功的green/refactor测试event_id>","tdd_required":true,"tdd_pair_id":"<pair-N>","tdd_role":"green"}}'
|
|
133
133
|
|
|
134
134
|
> RED/GREEN 同对必须写相同 `tdd_pair_id`;也可用互斥的 `test_run_id`(唯一严格完成候选)代替 `test_event_id`。
|
|
135
135
|
```
|
|
@@ -15,5 +15,5 @@ node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --strict --type=test_res
|
|
|
15
15
|
实现任务不带 `task_kind`(默认 implementation),按真实测试结果记录。
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --strict --type=task_update --command=apply --project=. --change=<变更名称> --capability=<capability-name> --task-id=<TASK-ID> --run-id=<任务更新稳定ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --status=completed --result=success --summary="<TASK-ID> 完成" --details-json='{"
|
|
18
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --strict --type=task_update --command=apply --project=. --change=<变更名称> --capability=<capability-name> --task-id=<TASK-ID> --run-id=<任务更新稳定ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --status=completed --result=success --summary="<TASK-ID> 完成" --details-json='{"task_update":{"files":["<本任务实际修改的项目相对路径>"],"test_event_id":"<成功的green/refactor测试event_id>","tdd_required":true,"tdd_pair_id":"<pair-N>","tdd_role":"green"}}'
|
|
19
19
|
```
|