kld-sdd 2.6.7 → 2.6.9

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.
Files changed (39) hide show
  1. package/bin/kld-sdd-init.js +39 -3
  2. package/lib/init.js +320 -45
  3. package/lib/workspace-layout.js +2 -0
  4. package/package.json +2 -2
  5. package/skywalk-sdd/context-client.cjs +59 -5
  6. package/skywalk-sdd/ontology/active-changes.cjs +297 -0
  7. package/skywalk-sdd/ontology/change-key.cjs +241 -0
  8. package/skywalk-sdd/ontology/cli.cjs +135 -0
  9. package/skywalk-sdd/ontology/list-changes.cjs +110 -0
  10. package/skywalk-sdd/ontology/modules.cjs +167 -0
  11. package/skywalk-sdd/ontology/naming-diagnose.cjs +594 -0
  12. package/skywalk-sdd/ontology/sdd-config.cjs +335 -0
  13. package/skywalk-sdd/ontology/workspace-layout.cjs +194 -0
  14. package/templates/dot-sdd.yaml +8 -0
  15. package/templates/git-hooks/commit-msg-sdd-trailer.cjs +224 -0
  16. package/templates/modules.yaml +13 -0
  17. package/templates/openspec/proposal.md +7 -1
  18. package/templates/sdd.config.yaml +12 -0
  19. package/templates/skills/kld-sdd/openspec-sync-specs/SKILL.md +148 -0
  20. package/templates/skills/kld-sdd/openspec-update-change/SKILL.md +86 -0
  21. package/templates/skills/kld-sdd/opsx-apply/SKILL.md +3 -3
  22. package/templates/skills/kld-sdd/opsx-apply/checklist.md +1 -1
  23. package/templates/skills/kld-sdd/opsx-archive/SKILL.md +11 -1
  24. package/templates/skills/kld-sdd/opsx-check/SKILL.md +73 -3
  25. package/templates/skills/kld-sdd/opsx-design/SKILL.md +9 -0
  26. package/templates/skills/kld-sdd/opsx-explore/SKILL.md +37 -17
  27. package/templates/skills/kld-sdd/opsx-kb-ingest/SKILL.md +9 -14
  28. package/templates/skills/kld-sdd/opsx-ontology-query/SKILL.md +83 -109
  29. package/templates/skills/kld-sdd/opsx-ontology-query/phase-1-prechange.md +276 -0
  30. package/templates/skills/kld-sdd/opsx-ontology-query/phase-2-during.md +354 -0
  31. package/templates/skills/kld-sdd/opsx-ontology-query/phase-3-postchange.md +223 -0
  32. package/templates/skills/kld-sdd/opsx-ontology-query/phase-4-explore.md +240 -0
  33. package/templates/skills/kld-sdd/opsx-ontology-query/phase-5-governance.md +232 -0
  34. package/templates/skills/kld-sdd/opsx-ontology-query/reference.md +92 -4
  35. package/templates/skills/kld-sdd/opsx-propose/SKILL.md +87 -16
  36. package/templates/skills/kld-sdd/opsx-propose/checklist.md +1 -0
  37. package/templates/skills/kld-sdd/opsx-spec/SKILL.md +33 -3
  38. package/templates/skills/kld-sdd/opsx-task/SKILL.md +10 -0
  39. package/templates/skills/kld-sdd/opsx-tdd-core/checklist.md +1 -1
@@ -0,0 +1,223 @@
1
+ # Phase 3 · 变更后验证(Post-change Verification)
2
+
3
+ > **触发时机**:opsx-archive 完成 KB 入库后
4
+ > **加载方式**:opsx-archive §5.5 入库成功后 `Read` 本文件执行验证
5
+ > **前置条件**:archive zip 已成功上传到 KB,job 状态为 succeeded
6
+ >
7
+ > ✅ **数据边界**:这是 SDD 流程中**唯一**能从 KB 查到当前变更数据的阶段。
8
+ > Archive → kb-ingest 完成后,当前变更的实体已入库并成为 current 版本。
9
+ > 本阶段所有 KB 查询都是验证**刚入库的当前变更**是否正确。
10
+
11
+ ---
12
+
13
+ ## §1 版本变更生效验证
14
+
15
+ ### 场景
16
+
17
+ 入库后验证 modified 实体的新版本是否正确成为 current。
18
+
19
+ ### API
20
+
21
+ ```
22
+ GET {base}/entities/{entityId}/current-version
23
+ ```
24
+
25
+ ### 示例
26
+
27
+ 验证 CAP-USER-LOGIN 的新版本是否生效:
28
+
29
+ ```bash
30
+ curl -sS -H "Authorization: Bearer $API_KEY" \
31
+ "$API/v1/spaces/$SPACE_ID/knowledge-bases/$KB_ID/entities/e89287e8-0000-0000-0000-000000000000/current-version"
32
+ ```
33
+
34
+ ### 验证清单
35
+
36
+ | 字段 | 期望值 | 来源 |
37
+ |------|--------|------|
38
+ | `entityVersionId` | 新版本 UUID | archive package 中声明的 version-id |
39
+ | `deltaState` | `modified` | proposal/spec 中的 delta-state |
40
+ | `predecessorVersionId` | 旧版本 UUID | archive package 中的 predecessor-version |
41
+ | `generationRole` | `current`(本次变更 authored) | 工具链设置 / KB 推导 |
42
+
43
+ > **`generationRole` 值说明**:由 `kld-sdd` 工具链(`effective-graph.cjs`)在打包 archive 时设置,三个合法值:
44
+ > - `current` — 本次变更作者编写的事实(added/modified/removed)
45
+ > - `inherited` — 从上一次已确认 archive 继承的事实(unchanged)
46
+ > - `produced` — 系统自动生成的事实(如 change record)
47
+ >
48
+ > IngestionService 优先使用 archive 包提供的值;若缺失则从 `deltaState` 推导(`unchanged→inherited`、`added/modified/removed→current`),推导逻辑与工具链词表一致。
49
+ | `reviewStatus` | `confirmed` | 入库后自动确认 |
50
+ | `changeId` | 当前变更 ID | archive package 中的 change-id |
51
+
52
+ ### 决策逻辑
53
+
54
+ | 检查结果 | 状态 | 动作 |
55
+ |----------|------|------|
56
+ | 所有字段匹配 | ✅ 生效 | 记录验证通过 |
57
+ | entityVersionId 不匹配 | ❌ 未生效 | 检查入库 job 是否成功、predecessor 是否正确 |
58
+ | generationRole 不是 `current` 或 `inherited` | ❌ 异常 | 检查是否有版本冲突 |
59
+
60
+ ---
61
+
62
+ ## §2 历史 AC 保留验证
63
+
64
+ ### 场景
65
+
66
+ 入库后验证未修改的历史 AC 是否仍然出现在父 STMT 的 ontology-view 中。
67
+
68
+ ### API
69
+
70
+ ```
71
+ GET {base}/entities/{stmtEntityId}/ontology-view
72
+ ```
73
+
74
+ ### 示例
75
+
76
+ 验证 STMT-USER-LOGIN-001 的 AC 列表:
77
+
78
+ ```bash
79
+ curl -sS -H "Authorization: Bearer $API_KEY" \
80
+ "$API/v1/spaces/$SPACE_ID/knowledge-bases/$KB_ID/entities/89bbf6a6-0000-0000-0000-000000000000/ontology-view"
81
+ ```
82
+
83
+ ### 验证步骤
84
+
85
+ 1. 提取 `relations` 中 `relationType=verifiedBy && direction=outbound` 的邻居列表
86
+ 2. 按来源分类:
87
+ - `changeId = 旧变更` → 历史 AC(应保留)
88
+ - `changeId = 当前变更` → 新增/修改 AC
89
+ 3. 确认历史 AC 数量 ≥ 入库前数量
90
+ 4. 确认新增 AC 已出现
91
+
92
+ ### 验证清单
93
+
94
+ | 检查项 | 期望 | 机制 |
95
+ |--------|------|------|
96
+ | 历史 AC 仍在列表中 | ✅ 保留 | AC 未被修改 → v1 仍 current → 关系保留 |
97
+ | 新增 AC 已出现 | ✅ 加入 | 新 AC 入库 → statement_id 指向 STMT → inferred 关系生成 |
98
+ | 历史 AC 版本未变 | v1, added, predecessor=null | lineage 确认只有 1 个版本 |
99
+ | AC 的 changeId 正确 | 旧 AC = 旧变更 / 新 AC = 新变更 | 来源可追溯 |
100
+
101
+ ### 决策逻辑
102
+
103
+ | 检查结果 | 状态 | 动作 |
104
+ |----------|------|------|
105
+ | 历史 AC 全部保留 + 新 AC 已加入 | ✅ 正常 | 验证通过 |
106
+ | 历史 AC 丢失 | ❌ 异常 | 检查 archive package 是否误标 modified/removed |
107
+ | 新 AC 未出现 | ❌ 异常 | 检查 AC 的 statement_id 是否正确指向 STMT |
108
+
109
+ ---
110
+
111
+ ## §3 关系完整性验证
112
+
113
+ ### 场景
114
+
115
+ 入库后验证关键关系(contains / verifiedBy / realizes / covers)是否正确建立。
116
+
117
+ ### API
118
+
119
+ ```
120
+ GET {base}/entities/{entityId}/ontology-view
121
+ ```
122
+
123
+ ### 验证矩阵
124
+
125
+ 对以下实体类型分别检查:
126
+
127
+ | 实体类型 | 检查关系 | direction | 期望邻居 |
128
+ |----------|----------|-----------|----------|
129
+ | Change | `contains` | outbound | 下属 Capability |
130
+ | Capability | `contains` | outbound | 下属 STMT |
131
+ | Capability | `contains` | inbound | 所属 Change |
132
+ | STMT | `verifiedBy` | outbound | 下属 AC |
133
+ | DES | `realizes` | outbound | 上游 STMT |
134
+ | TASK | `covers` / `implements` | outbound | 上游 STMT / DES |
135
+ | STMT | `sourcedFrom` | outbound | DocumentSection |
136
+ | Entity | `declares` | inbound | Artifact |
137
+
138
+ ### 示例
139
+
140
+ ```bash
141
+ # 验证 CAP-USER-LOGIN 的 contains 关系
142
+ curl -sS -H "Authorization: Bearer $API_KEY" \
143
+ "$API/v1/spaces/$SPACE_ID/knowledge-bases/$KB_ID/entities/e89287e8-0000-0000-0000-000000000000/ontology-view" | \
144
+ jq '.data.relations[] | select(.relationType=="contains")'
145
+ ```
146
+
147
+ ### 决策逻辑
148
+
149
+ | 检查结果 | 状态 | 动作 |
150
+ |----------|------|------|
151
+ | 所有关键关系存在 | ✅ 完整 | 验证通过 |
152
+ | 缺少 contains → STMT | ❌ 断链 | 检查 spec.md 的 capability-id 引用 |
153
+ | 缺少 verifiedBy → AC | ❌ 断链 | 检查 AC 的 statement_id 属性 |
154
+ | 缺少 realizes → STMT | ❌ 断链 | 检查 design.md 的 realizes 引用 |
155
+ | 缺少 covers/implements | ⚠️ 警告 | 检查 tasks.md 的 covers/implements 引用 |
156
+
157
+ ---
158
+
159
+ ## §4 版本谱系验证
160
+
161
+ ### 场景
162
+
163
+ 验证实体的版本链完整性(v1 → v2 → ... 前后衔接)。
164
+
165
+ ### API
166
+
167
+ ```
168
+ GET {base}/entities/{entityId}/lineage
169
+ ```
170
+
171
+ ### 示例
172
+
173
+ ```bash
174
+ curl -sS -H "Authorization: Bearer $API_KEY" \
175
+ "$API/v1/spaces/$SPACE_ID/knowledge-bases/$KB_ID/entities/e89287e8-0000-0000-0000-000000000000/lineage"
176
+ ```
177
+
178
+ ### 验证清单
179
+
180
+ | 检查项 | 期望 |
181
+ |--------|------|
182
+ | 版本数 ≥ 2(modified 实体) | v1(added) → v2(modified) |
183
+ | v2.predecessorVersionId == v1.entityVersionId | 链式衔接 |
184
+ | v1.deltaState == added, v2.deltaState == modified | 状态正确 |
185
+ | 最后一个版本 generationRole == `current` 或 `inherited` | 当前版本正确 |
186
+ | 每个版本的 changeId 存在且不同 | 来源可追溯 |
187
+
188
+ ### 决策逻辑
189
+
190
+ | 检查结果 | 状态 | 动作 |
191
+ |----------|------|------|
192
+ | 链式完整 + current 正确 | ✅ 正常 | 验证通过 |
193
+ | predecessorVersionId 断裂 | ❌ 异常 | 检查 archive 的 predecessor-version 声明 |
194
+ | 最后版本非 changed | ❌ 异常 | 检查是否有后续入库覆盖 |
195
+
196
+ ---
197
+
198
+ ## §5 版本冲突检测
199
+
200
+ ### 场景
201
+
202
+ 入库时如果 predecessorVersionId 与 KB 当前版本不匹配,会标记为 conflicting。
203
+
204
+ ### 检查方式
205
+
206
+ 入库 job 响应中检查:
207
+
208
+ | 字段 | 正常 | 冲突 |
209
+ |------|------|------|
210
+ | `errorCode` | 无 | `VERSION_CONFLICT` / `EXTERNAL_REF_CONFLICT` / `EXTERNAL_REFERENCE_FORMAT_INVALID` / `SCOPE_MISMATCH` / `FEATURE_UNBOUND` |
211
+ | job status | `succeeded` | `failed`(整包回滚) |
212
+
213
+ ### 冲突处理
214
+
215
+ | 冲突类型 | 原因 | 修正方式 |
216
+ |----------|------|----------|
217
+ | `VERSION_CONFLICT` | predecessor 不匹配当前 version | 回 spec 获取正确 predecessor,重新 archive |
218
+ | `EXTERNAL_REF_CONFLICT` | 同 external key 绑定不同 entity_id | 回 propose/spec 确认身份决议 |
219
+ | `EXTERNAL_REFERENCE_FORMAT_INVALID` | 编号归一化后不合文法(含 requirement.`feature_id`) | 回需求管理系统换发合规编号,禁止手改硬闯 |
220
+ | `EXTERNAL_REFERENCE_SCOPE_MISMATCH` | 场景键 REQ 前缀不在同包 requirement 集合 | 回 spec 修正 external-ref 中 SCN 的 REQ 前缀 |
221
+ | `EXTERNAL_REFERENCE_FEATURE_UNBOUND` | feature 绑定与 requirement.`feature_id` 无法配对 | 回 propose/archive 修正线缆字段,确认 FEAT 号存在 |
222
+
223
+ > **禁止**在 KB 内现场改绑或解绑。必须回 SDD 流程修正后重新入库。
@@ -0,0 +1,240 @@
1
+ # Phase 4 · 跨迭代探索(Cross-iteration Exploration)
2
+
3
+ > **触发时机**:开发者手动查询 / Agent 按需加载
4
+ > **加载方式**:任意阶段可 `Read` 本文件
5
+ > **前置条件**:`.local/state.json` 已完成 Session 启动
6
+
7
+ ---
8
+
9
+ ## §1 版本谱系追踪(Lineage)
10
+
11
+ ### 场景
12
+
13
+ 查看某实体的完整变更历史,理解它经历了哪些变更、每次变更改了什么。
14
+
15
+ ### API
16
+
17
+ ```
18
+ GET {base}/entities/{entityId}/lineage
19
+ ```
20
+
21
+ ### 示例
22
+
23
+ ```bash
24
+ curl -sS -H "Authorization: Bearer $API_KEY" \
25
+ "$API/v1/spaces/$SPACE_ID/knowledge-bases/$KB_ID/entities/e89287e8-0000-0000-0000-000000000000/lineage"
26
+ ```
27
+
28
+ ### 响应解读
29
+
30
+ 返回按时间排序的版本数组,每版包含:
31
+
32
+ | 字段 | 含义 |
33
+ |------|------|
34
+ | `entityVersionId` | 该版本的 UUID |
35
+ | `predecessorVersionId` | 前序版本 UUID(v1 为 null) |
36
+ | `deltaState` | added / modified / removed |
37
+ | `changeId` | 来源变更 ID |
38
+ | `attributes` | 该版本的属性快照 |
39
+ | `source` | 来源文件(file / line / change_id / archive_id) |
40
+ | `createdAt` | 入库时间 |
41
+
42
+ ### 使用场景
43
+
44
+ - **变更审计**:追溯某需求从创建到当前的完整路径
45
+ - **回溯根因**:理解某属性何时被修改、由哪次变更引入
46
+ - **差异对比**:对比 v1 和 v2 的 attributes 变化
47
+
48
+ ---
49
+
50
+ ## §2 语义检索(Semantic Search)
51
+
52
+ ### 场景
53
+
54
+ 用自然语言查找相关工程事实,不依赖精确锚点。
55
+
56
+ ### API
57
+
58
+ ```
59
+ POST {base}/context/search
60
+ ```
61
+
62
+ ### 请求
63
+
64
+ ```json
65
+ {
66
+ "query": "用户登录认证流程",
67
+ "entityTypes": [],
68
+ "limit": 15
69
+ }
70
+ ```
71
+
72
+ ### 检索通道
73
+
74
+ | 通道 | 说明 | matchType |
75
+ |------|------|-----------|
76
+ | 精确 | 锚点 / canonicalKey 完全匹配 | `exact` |
77
+ | 结构 | entityType + 属性结构匹配 | `structural` |
78
+ | 全文 | PostgreSQL FTS 关键词匹配 | `fulltext` |
79
+ | 向量 | pgvector 语义相似 | `vector` |
80
+ | 图谱 | AGE 关系扩展邻居 | `graph` |
81
+
82
+ ### 响应解读
83
+
84
+ ```json
85
+ {
86
+ "degraded": false,
87
+ "degradationReasons": [],
88
+ "results": [
89
+ {
90
+ "matchType": "exact",
91
+ "entityId": "e89287e8-0000-0000-0000-000000000000",
92
+ "entityType": "Capability",
93
+ "displayName": "user-login",
94
+ "anchorId": "CAP-USER-LOGIN",
95
+ "scoreExplanation": {
96
+ "method": "rrf",
97
+ "ranks_by_channel": { "exact": 1, "fulltext": 1, "vector": 19 }
98
+ }
99
+ }
100
+ ]
101
+ }
102
+ ```
103
+
104
+ ### 降级处理
105
+
106
+ | `degraded` | `degradationReasons` | 影响 |
107
+ |------------|----------------------|------|
108
+ | `false` | `[]` | 全通道可用 |
109
+ | `true` | `["vector_unavailable"]` | 向量通道缺失,精确/全文仍可用 |
110
+ | `true` | `["age_unavailable"]` | 图谱扩展缺失 |
111
+
112
+ > 降级不阻塞查询,精确/结构/全文通道始终可用。
113
+
114
+ ---
115
+
116
+ ## §3 原文溯源(Disclosure)
117
+
118
+ ### 场景
119
+
120
+ 从实体回到源文档,查看该实体在 spec.md / design.md / tasks.md 中的原文上下文。
121
+
122
+ ### API
123
+
124
+ ```
125
+ POST {base}/context/disclosures
126
+ ```
127
+
128
+ ### 请求
129
+
130
+ ```json
131
+ {
132
+ "anchorId": "STMT-USER-LOGIN-001",
133
+ "sourceLevel": "preview"
134
+ }
135
+ ```
136
+
137
+ ### sourceLevel 选项
138
+
139
+ | sourceLevel | 返回内容 | 适用场景 |
140
+ |-------|----------|----------|
141
+ | `preview` | 锚点附近几行 | 快速确认实体内容 |
142
+ | `section` | 包含子节的完整章节 | 理解实体及其下属 AC/CON |
143
+ | `document` | 整个源文档 | 全面上下文 |
144
+
145
+ ### 使用场景
146
+
147
+ - **代码审查**:查看 STMT 的原始规格定义
148
+ - **需求对齐**:对比 AC 场景与实际实现行为
149
+ - **文档生成**:提取原文片段生成技术文档
150
+
151
+ ---
152
+
153
+ ## §4 知识图谱导航(Ontology View)
154
+
155
+ ### 场景
156
+
157
+ 浏览某实体的一跳关系结构,理解其在本体中的位置。
158
+
159
+ ### API
160
+
161
+ ```
162
+ GET {base}/entities/{entityId}/ontology-view
163
+ ```
164
+
165
+ ### 响应结构
166
+
167
+ ```json
168
+ {
169
+ "focus": { "entityId": "...", "canonicalKey": "CAP-USER-LOGIN", ... },
170
+ "attributes": [ { "key": "description", "value": "..." } ],
171
+ "businessStructure": {
172
+ "changes": [...],
173
+ "capabilities": [...],
174
+ "statements": [...],
175
+ "tasks": [...],
176
+ "designElements": [...],
177
+ "acceptanceCriteria": [...]
178
+ },
179
+ "relations": [
180
+ { "relationType": "contains", "direction": "outbound", "neighbor": {...} },
181
+ { "relationType": "verifiedBy", "direction": "outbound", "neighbor": {...} }
182
+ ],
183
+ "evidence": {
184
+ "artifacts": [...],
185
+ "documentSections": [...],
186
+ "source": { "file": "proposal.md", "line": 66 }
187
+ }
188
+ }
189
+ ```
190
+
191
+ ### 使用场景
192
+
193
+ - **影响评估**:从 Capability 出发看下游 STMT → AC → DES → TASK
194
+ - **覆盖分析**:从 STMT 出发看 verifiedBy → AC 列表
195
+ - **溯源链**:从任意实体出发看 sourcedFrom → DocumentSection → Artifact
196
+
197
+ ---
198
+
199
+ ## §5 多跳影响分析(Impact)
200
+
201
+ ### 场景
202
+
203
+ 评估变更的级联影响,超出直接关联。
204
+
205
+ ### API
206
+
207
+ ```
208
+ GET {base}/entities/{entityId}/impact
209
+ ```
210
+
211
+ ### 示例
212
+
213
+ ```bash
214
+ curl -sS -H "Authorization: Bearer $API_KEY" \
215
+ "$API/v1/spaces/$SPACE_ID/knowledge-bases/$KB_ID/entities/e89287e8-0000-0000-0000-000000000000/impact"
216
+ ```
217
+
218
+ ### 响应解读
219
+
220
+ ```json
221
+ {
222
+ "anchorEntityId": "e89287e8-0000-0000-0000-000000000000",
223
+ "maxDepth": 4,
224
+ "nodes": [
225
+ { "entityId": "...", "entityVersionId": "...", "entityType": "Capability", "displayName": "user-login", "depth": 0 },
226
+ { "entityId": "...", "entityVersionId": "...", "entityType": "SpecificationStatement", "displayName": "用户登录认证", "depth": 1 },
227
+ { "entityId": "...", "entityVersionId": "...", "entityType": "AcceptanceCriterion", "displayName": "正确凭证登录成功", "depth": 2 }
228
+ ],
229
+ "edges": [
230
+ { "relationType": "contains", "fromEntityId": "cap-id", "toEntityId": "stmt-id", "assertionType": "asserted" },
231
+ { "relationType": "verifiedBy", "fromEntityId": "stmt-id", "toEntityId": "ac-id", "assertionType": "inferred" }
232
+ ]
233
+ }
234
+ ```
235
+
236
+ ### 使用场景
237
+
238
+ - **变更前评估**:修改某 Capability 会波及哪些下游
239
+ - **回归测试范围**:确定受影响的 AC 需要回归验证
240
+ - **架构决策**:理解实体间的依赖深度
@@ -0,0 +1,232 @@
1
+ # Phase 5 · 治理与监控(Governance & Monitoring)
2
+
3
+ > **触发时机**:治理流程 / 定期巡检 / opsx-check 深度验证
4
+ > **加载方式**:治理角色按需 `Read` 本文件
5
+ > **前置条件**:`.local/state.json` 已完成 Session 启动
6
+ >
7
+ > ✅ conformance / drift API **已实现**,但需要先通过 `POST /evidence-ingestions` 入库代码证据后才有数据。
8
+ > 无 evidence 时返回 `{"integrationStatus":"not_integrated","reports":[]}`,Agent 遇到此状态应提示用户"需先入库 evidence",不当作错误。
9
+
10
+ ---
11
+
12
+ ## §1 覆盖率仪表盘(Coverage Dashboard)
13
+
14
+ ### 场景
15
+
16
+ 全局监控规格覆盖完整性,按 gapType 分类统计缺失项。
17
+
18
+ ### API
19
+
20
+ ```
21
+ GET {base}/coverage
22
+ ```
23
+
24
+ > KB 级别 API,路径含 kbId。
25
+
26
+ ### 示例
27
+
28
+ ```bash
29
+ curl -sS -H "Authorization: Bearer $API_KEY" \
30
+ "$API/v1/spaces/$SPACE_ID/knowledge-bases/$KB_ID/coverage"
31
+ ```
32
+
33
+ ### 响应解读
34
+
35
+ ```json
36
+ {
37
+ "gaps": [
38
+ {
39
+ "entityId": "xxx-0000-0000-0000-000000000000",
40
+ "entityType": "SpecificationStatement",
41
+ "displayName": "某规格声明",
42
+ "gapType": "missing_acceptance_criterion"
43
+ }
44
+ ]
45
+ }
46
+ ```
47
+
48
+ ### 统计维度
49
+
50
+ | gapType | 实体类型 | 含义 | 建议 |
51
+ |---------|----------|------|------|
52
+ | `missing_acceptance_criterion` | STMT | 无验收场景 | 补充 AC |
53
+ | `missing_specification_statement` | DES | 无规格依据 | 补充 realizes 或创建 STMT |
54
+ | `missing_upstream_trace` | TASK | 无上游追溯 | 补充 covers/implements |
55
+
56
+ ### 使用场景
57
+
58
+ - **定期巡检**:每周/每迭代检查全局覆盖率
59
+ - **质量门禁**:归档前覆盖率必须达标
60
+ - **技术债识别**:长期 missing 的实体标记为技术债
61
+
62
+ > **Agent 行为指导**:遇到 `integrationStatus: "not_integrated"` 时,提示用户"需先通过 `POST /evidence-ingestions` 入库代码证据",不当作"无数据"或错误处理。
63
+
64
+ ---
65
+
66
+ ## §2 一致性检查(Conformance)
67
+
68
+ ### 场景
69
+
70
+ 验证代码实现与规格定义的一致性,对比 KB 规格事实与实现证据。
71
+
72
+ ### API
73
+
74
+ ```
75
+ GET {base}/conformance
76
+ ```
77
+
78
+ ### 示例
79
+
80
+ ```bash
81
+ curl -sS -H "Authorization: Bearer $API_KEY" \
82
+ "$API/v1/spaces/$SPACE_ID/knowledge-bases/$KB_ID/conformance"
83
+ ```
84
+
85
+ ### 检查维度
86
+
87
+ | 维度 | 含义 | 数据源 |
88
+ |------|------|--------|
89
+ | 规格断言 vs 代码实现 | STMT/AC 是否在代码中实现 | semantic facts vs implementation_evidence |
90
+ | 规格覆盖 vs 实际行为 | AC 场景是否被测试覆盖 | AC vs test evidence |
91
+
92
+ ### 使用场景
93
+
94
+ - **发布前验证**:确认实现与规格一致
95
+ - **回归检测**:代码变更后检查是否仍符合规格
96
+ - **审计报告**:生成一致性报告供评审
97
+
98
+ ---
99
+
100
+ ## §3 漂移检测(Drift)
101
+
102
+ ### 场景
103
+
104
+ 检测实现偏离规格的程度,识别"规格说 A 但代码做 B"的情况。
105
+
106
+ ### API
107
+
108
+ ```
109
+ GET {base}/drift
110
+ ```
111
+
112
+ ### 示例
113
+
114
+ ```bash
115
+ curl -sS -H "Authorization: Bearer $API_KEY" \
116
+ "$API/v1/spaces/$SPACE_ID/knowledge-bases/$KB_ID/drift"
117
+ ```
118
+
119
+ ### 漂移类型
120
+
121
+ | 类型 | 含义 | 严重度 |
122
+ |------|------|--------|
123
+ | 规格未实现 | STMT/AC 无对应代码 | 高 |
124
+ | 实现无规格 | 代码无对应 STMT/AC | 中 |
125
+ | 行为不一致 | 代码行为与 AC 描述不符 | 高 |
126
+ | 规格过期 | 代码已变更但规格未更新 | 中 |
127
+
128
+ ### 使用场景
129
+
130
+ - **迭代回顾**:识别本迭代引入的漂移
131
+ - **技术债管理**:长期漂移项纳入技术债看板
132
+ - **重构决策**:高漂移区域优先重构
133
+
134
+ > **Agent 行为指导**:同 §2,遇到 `integrationStatus: "not_integrated"` 时提示用户需先入库 evidence。
135
+
136
+ ---
137
+
138
+ ## §4 关系候选审批(Relation Candidate Review)
139
+
140
+ ### 场景
141
+
142
+ `suggested` 关系(AI 推荐但未确认)需要人工审批后才能进入正式本体。
143
+
144
+ ### API
145
+
146
+ ```
147
+ GET {base}/relation-candidates
148
+ POST {base}/relation-candidates/{candidateId}/review
149
+ ```
150
+
151
+ > 审批通过/拒绝都走同一个 `/review` 端点,用 body 中的 `decision` 区分。
152
+
153
+ ### 示例
154
+
155
+ ```bash
156
+ # 列出待审批候选(可按 status 过滤)
157
+ curl -sS -H "Authorization: Bearer $API_KEY" \
158
+ "$API/v1/spaces/$SPACE_ID/knowledge-bases/$KB_ID/relation-candidates?status=pending"
159
+
160
+ # 审批通过
161
+ curl -sS -X POST -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
162
+ "$API/v1/spaces/$SPACE_ID/knowledge-bases/$KB_ID/relation-candidates/{candidateId}/review" \
163
+ -d '{"decision":"accept","reason":"关系正确,确认批准"}'
164
+
165
+ # 拒绝
166
+ curl -sS -X POST -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
167
+ "$API/v1/spaces/$SPACE_ID/knowledge-bases/$KB_ID/relation-candidates/{candidateId}/review" \
168
+ -d '{"decision":"reject","reason":"证据不足"}'
169
+ ```
170
+
171
+ ### 候选字段
172
+
173
+ | 字段 | 含义 |
174
+ |------|------|
175
+ | `candidateId` | 候选 UUID |
176
+ | `relationType` | 推荐的关系类型 |
177
+ | `fromEntityId` / `fromName` | 源实体 |
178
+ | `toEntityId` / `toName` | 目标实体 |
179
+ | `confidence` | 置信度(0-1) |
180
+ | `supportEvidence` / `oppositionEvidence` | 支持/反对证据 |
181
+ | `status` | pending / accepted / rejected |
182
+
183
+ ### 审批请求
184
+
185
+ ```json
186
+ { "decision": "accept | reject", "reason": "string" }
187
+ ```
188
+
189
+ ### 审批决策
190
+
191
+ | confidence | support vs opposition | 建议 |
192
+ |------------|----------------------|------|
193
+ | > 0.8 | support >> opposition | accept |
194
+ | 0.5-0.8 | 有争议 | 人工审查后决定 |
195
+ | < 0.5 | opposition >> support | reject |
196
+
197
+ ### 使用场景
198
+
199
+ - **日常治理**:定期审批待确认关系
200
+ - **本体质量提升**:高置信度候选批量批准
201
+ - **误报过滤**:低置信度候选拒绝并反馈
202
+
203
+ ---
204
+
205
+ ## §5 变更统计与趋势(Change Analytics)
206
+
207
+ ### 场景
208
+
209
+ 查看 KB 中所有变更的统计信息,分析迭代趋势。
210
+
211
+ ### API
212
+
213
+ ```
214
+ GET {base}/changes
215
+ GET {base}/changes/{changeId}
216
+ ```
217
+
218
+ ### 分析维度
219
+
220
+ | 维度 | 指标 | 用途 |
221
+ |------|------|------|
222
+ | 变更频率 | 每迭代变更数 | 评估迭代节奏 |
223
+ | 变更类型分布 | added / modified / removed 比例 | 评估系统成熟度 |
224
+ | 实体增长率 | 每迭代新增实体数 | 评估规格膨胀 |
225
+ | 覆盖率趋势 | 各 gapType 随时间变化 | 评估质量改进 |
226
+ | 冲突频率 | VERSION_CONFLICT / EXTERNAL_REF_CONFLICT / EXTERNAL_REFERENCE_FORMAT_INVALID / SCOPE_MISMATCH / FEATURE_UNBOUND 次数 | 评估 Continuity 与编号体系流程成熟度 |
227
+
228
+ ### 使用场景
229
+
230
+ - **迭代报告**:每迭代生成本体变更统计
231
+ - **成熟度评估**:评估团队的 SDD 流程成熟度
232
+ - **容量规划**:预测 KB 增长趋势