kld-sdd 2.6.10 → 2.6.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/hook-gate-core.js +41 -5
- package/lib/init.js +154 -31
- package/package.json +1 -1
- package/skywalk-sdd/ontology/naming-diagnose.cjs +26 -3
- package/templates/git-hooks/commit-msg-sdd-trailer.cjs +11 -1
- package/templates/hooks/claude/hooks/sdd-prompt.cjs +23 -5
- package/templates/hooks/codebuddy/hooks/sdd-prompt.cjs +22 -3
- package/templates/skills/kld-sdd/opsx-apply/SKILL.md +3 -3
- package/templates/skills/kld-sdd/opsx-apply/checklist.md +3 -3
- package/templates/skills/kld-sdd/opsx-apply/reference.md +13 -13
- package/templates/skills/kld-sdd/opsx-apply/worktree-setup.md +3 -3
- package/templates/skills/kld-sdd/opsx-archive/SKILL.md +14 -14
- package/templates/skills/kld-sdd/opsx-archive/checklist.md +2 -2
- package/templates/skills/kld-sdd/opsx-check/SKILL.md +13 -13
- package/templates/skills/kld-sdd/opsx-design/SKILL.md +4 -4
- package/templates/skills/kld-sdd/opsx-design/reference.md +2 -2
- package/templates/skills/kld-sdd/opsx-explore/SKILL.md +5 -5
- package/templates/skills/kld-sdd/opsx-propose/SKILL.md +11 -11
- package/templates/skills/kld-sdd/opsx-propose/reference.md +2 -2
- package/templates/skills/kld-sdd/opsx-rules/SKILL.md +3 -3
- package/templates/skills/kld-sdd/opsx-spec/SKILL.md +5 -5
- package/templates/skills/kld-sdd/opsx-spec/reference.md +2 -2
- package/templates/skills/kld-sdd/opsx-task/SKILL.md +4 -4
- package/templates/skills/kld-sdd/opsx-task/reference.md +2 -2
- package/templates/skills/kld-sdd/opsx-tdd-core/reference.md +3 -3
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/test-skeleton-telemetry.md +2 -2
- package/templates/skills/kld-sdd/opsx-test/SKILL.md +5 -5
|
@@ -11,13 +11,13 @@ description: opsx-apply 的详细模板:telemetry 命令、worktree 全套策
|
|
|
11
11
|
|
|
12
12
|
## 📊 Telemetry 命令模板(必做,不得跳过)
|
|
13
13
|
|
|
14
|
-
> 阶段开始:`node skywalk-sdd/log.cjs start --command=apply --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --git-sha=<base_git_sha_or_none>`(保存 event_id)
|
|
15
|
-
> 阶段结束:`node skywalk-sdd/log.cjs end --event-id=<event_id> --command=apply --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
|
|
14
|
+
> 阶段开始:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" start --command=apply --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --git-sha=<base_git_sha_or_none>`(保存 event_id)
|
|
15
|
+
> 阶段结束:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" end --event-id=<event_id> --command=apply --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
|
|
16
16
|
|
|
17
17
|
### task_update(每完成一个任务记录)
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
node skywalk-sdd/log.cjs record --type=task_update --command=apply --project=. --change=<变更名称> --capability=<capability-name> --task-id=<TASK-ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --status=completed --result=success --summary="<TASK-ID> 完成" --details-json="{\"files_changed\":[],\"build_results\":{\"command\":\"<实际编译命令>\",\"success\":true,\"duration_ms\":0,\"error_count\":0},\"test_results\":{\"command\":\"<实际测试命令>\",\"passed\":0,\"failed\":0,\"skipped\":0,\"coverage\":null,\"duration_ms\":0}}"
|
|
20
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --type=task_update --command=apply --project=. --change=<变更名称> --capability=<capability-name> --task-id=<TASK-ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --status=completed --result=success --summary="<TASK-ID> 完成" --details-json="{\"files_changed\":[],\"build_results\":{\"command\":\"<实际编译命令>\",\"success\":true,\"duration_ms\":0,\"error_count\":0},\"test_results\":{\"command\":\"<实际测试命令>\",\"passed\":0,\"failed\":0,\"skipped\":0,\"coverage\":null,\"duration_ms\":0}}"
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
**⚠️ 注意**:`--task-id=<TASK-ID>` 必须替换为实际任务 ID,否则 E4 指标无法计算。
|
|
@@ -26,16 +26,16 @@ node skywalk-sdd/log.cjs record --type=task_update --command=apply --project=. -
|
|
|
26
26
|
|
|
27
27
|
> 完整 test-skeleton telemetry 模板见 opsx-tdd-rules/rules/test-skeleton-telemetry.md
|
|
28
28
|
|
|
29
|
-
**📄 通过文件传递大 payload**:若 `details-json` 内容过长,可先写入 `skywalk-sdd/state/<变更名称>-task-update.json`,再使用 `--details-file` 指定该文件:
|
|
29
|
+
**📄 通过文件传递大 payload**:若 `details-json` 内容过长,可先写入 `"$(cat .sdd-spec-root)/skywalk-sdd/state/<变更名称>-task-update.json`,再使用 `--details-file` 指定该文件:
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
node skywalk-sdd/log.cjs record --type=task_update --command=apply --project=. --change=<变更名称> --capability=<capability-name> --task-id=<TASK-ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --status=completed --result=success --summary="<TASK-ID> 完成" --details-file=skywalk-sdd/state/<变更名称>-task-update.json
|
|
32
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --type=task_update --command=apply --project=. --change=<变更名称> --capability=<capability-name> --task-id=<TASK-ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --status=completed --result=success --summary="<TASK-ID> 完成" --details-file="$(cat .sdd-spec-root)/skywalk-sdd/state/<变更名称>-task-update.json"
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
**✅ 验证 checkbox 已更新**:`task_update` 记录成功后会自动调用 `check-task` 更新 `tasks.md` 中的任务 checkbox。需要显式校验时可执行:
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
node skywalk-sdd/log.cjs check-task --project=. --change=<变更名称> --task-id=<TASK-ID>
|
|
38
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" check-task --project=. --change=<变更名称> --task-id=<TASK-ID>
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
**【Q3 details schema 字段说明】**:`details-json` 中的 `test_results` 和 `build_results` 字段非强制,但提供后能让 E4 一次成码率更准确:
|
|
@@ -59,7 +59,7 @@ node skywalk-sdd/log.cjs check-task --project=. --change=<变更名称> --task-i
|
|
|
59
59
|
| `manual-action` | 用户手动操作 | 用户手动改配置 |
|
|
60
60
|
|
|
61
61
|
```bash
|
|
62
|
-
node skywalk-sdd/log.cjs record --type=process_note --command=<stage> --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --summary="<人读摘要>" --details-json="{\"kind\":\"<fix|clarification|decision|api-error|model-switch|manual-action>\",\"target\":\"<可选,关联对象>\",\"round\":<可选,clarification 轮次整数>}"
|
|
62
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --type=process_note --command=<stage> --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --summary="<人读摘要>" --details-json="{\"kind\":\"<fix|clarification|decision|api-error|model-switch|manual-action>\",\"target\":\"<可选,关联对象>\",\"round\":<可选,clarification 轮次整数>}"
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
**使用时机**:
|
|
@@ -94,13 +94,13 @@ node skywalk-sdd/log.cjs record --type=process_note --command=<stage> --project=
|
|
|
94
94
|
Git 可用时只读统计 SHA/diff;Git 不可用时使用 `vcs_mode=no-git` 和 `base_git_sha=null`:
|
|
95
95
|
|
|
96
96
|
```bash
|
|
97
|
-
node skywalk-sdd/log.cjs record --type=ai_adoption_review --command=apply --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --status=ai_snapshot --result=success --summary="AI 代码产出快照" --details-json="{\"ai_adoption\":{\"review_status\":\"ai_snapshot\",\"vcs_mode\":\"<readonly|no-git>\",\"base_git_sha\":\"<base_git_sha_or_null>\",\"ai_git_sha\":\"<ai_git_sha_or_null>\",\"ai_diff\":{\"files_changed\":<N>,\"files\":[\"<产出文件路径1>\",\"<产出文件路径2>\"],\"added_lines\":<git_diff_numstat_HEAD_取值或0>,\"deleted_lines\":<同左>},\"notes\":\"未自动提交 commit;vcs_mode=readonly 时 added_lines 用只读 git diff --numstat HEAD 取值(不得填 null,工具侧硬校验);vcs_mode=no-git 时可填 null\"}}"
|
|
97
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --type=ai_adoption_review --command=apply --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --status=ai_snapshot --result=success --summary="AI 代码产出快照" --details-json="{\"ai_adoption\":{\"review_status\":\"ai_snapshot\",\"vcs_mode\":\"<readonly|no-git>\",\"base_git_sha\":\"<base_git_sha_or_null>\",\"ai_git_sha\":\"<ai_git_sha_or_null>\",\"ai_diff\":{\"files_changed\":<N>,\"files\":[\"<产出文件路径1>\",\"<产出文件路径2>\"],\"added_lines\":<git_diff_numstat_HEAD_取值或0>,\"deleted_lines\":<同左>},\"notes\":\"未自动提交 commit;vcs_mode=readonly 时 added_lines 用只读 git diff --numstat HEAD 取值(不得填 null,工具侧硬校验);vcs_mode=no-git 时可填 null\"}}"
|
|
98
98
|
```
|
|
99
99
|
|
|
100
100
|
### worktree_finish(收尾 Telemetry,推荐)
|
|
101
101
|
|
|
102
102
|
```bash
|
|
103
|
-
node skywalk-sdd/log.cjs record --type=worktree_finish \
|
|
103
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --type=worktree_finish \
|
|
104
104
|
--command=apply --project=. --change=<变更名称> --capability=<capability-name> \
|
|
105
105
|
--agent=<Agent类型> --source=opsx-command --session-id=<会话ID> \
|
|
106
106
|
--result=success --summary="merge+remove completed" \
|
|
@@ -243,12 +243,12 @@ node skywalk-sdd/log.cjs record --type=worktree_finish \
|
|
|
243
243
|
在主仓库根目录、**尚未** `cd` 进 `.worktrees/` 时执行:
|
|
244
244
|
|
|
245
245
|
```bash
|
|
246
|
-
node skywalk-sdd/apply-worktree-finish.cjs --record-base \
|
|
246
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/apply-worktree-finish.cjs" --record-base \
|
|
247
247
|
--change=<变更名称> \
|
|
248
248
|
--capability=<capability-name>
|
|
249
249
|
```
|
|
250
250
|
|
|
251
|
-
- 将当前具名分支写入 `skywalk-sdd/state/apply-<change>-<capability>.json` 的 `integration_base`
|
|
251
|
+
- 将当前具名分支写入 `"$(cat .sdd-spec-root)/skywalk-sdd/state/apply-<change>-<capability>.json` 的 `integration_base`
|
|
252
252
|
- 若为 detached HEAD,先 `git checkout` 到具名分支再记录
|
|
253
253
|
- simple 模式可省略 `--capability`(默认与 change 相同)
|
|
254
254
|
|
|
@@ -340,7 +340,7 @@ Agent("实现 TASK-03: 创建权限数据模型", ...)
|
|
|
340
340
|
Git 可用时只读统计 SHA/diff;Git 不可用时使用 `vcs_mode=no-git` 和 `base_git_sha=null`:
|
|
341
341
|
|
|
342
342
|
```bash
|
|
343
|
-
node skywalk-sdd/log.cjs record --type=ai_adoption_review --command=apply --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --status=ai_snapshot --result=success --summary="AI 代码产出快照" --details-json="{\"ai_adoption\":{\"review_status\":\"ai_snapshot\",\"vcs_mode\":\"<readonly|no-git>\",\"base_git_sha\":\"<base_git_sha_or_null>\",\"ai_git_sha\":\"<ai_git_sha_or_null>\",\"ai_diff\":{\"files_changed\":<N>,\"files\":[\"<产出文件路径1>\",\"<产出文件路径2>\"],\"added_lines\":<git_diff_numstat_HEAD_取值或0>,\"deleted_lines\":<同左>},\"notes\":\"未自动提交 commit;vcs_mode=readonly 时 added_lines 用只读 git diff --numstat HEAD 取值(不得填 null,工具侧硬校验);vcs_mode=no-git 时可填 null\"}}"
|
|
343
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --type=ai_adoption_review --command=apply --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --status=ai_snapshot --result=success --summary="AI 代码产出快照" --details-json="{\"ai_adoption\":{\"review_status\":\"ai_snapshot\",\"vcs_mode\":\"<readonly|no-git>\",\"base_git_sha\":\"<base_git_sha_or_null>\",\"ai_git_sha\":\"<ai_git_sha_or_null>\",\"ai_diff\":{\"files_changed\":<N>,\"files\":[\"<产出文件路径1>\",\"<产出文件路径2>\"],\"added_lines\":<git_diff_numstat_HEAD_取值或0>,\"deleted_lines\":<同左>},\"notes\":\"未自动提交 commit;vcs_mode=readonly 时 added_lines 用只读 git diff --numstat HEAD 取值(不得填 null,工具侧硬校验);vcs_mode=no-git 时可填 null\"}}"
|
|
344
344
|
```
|
|
345
345
|
|
|
346
346
|
> 该命令亦见上文「📊 Telemetry 命令模板 → ai_adoption_review」。
|
|
@@ -377,7 +377,7 @@ node skywalk-sdd/log.cjs record --type=ai_adoption_review --command=apply --proj
|
|
|
377
377
|
|
|
378
378
|
**执行**(主仓库根目录):
|
|
379
379
|
```bash
|
|
380
|
-
node skywalk-sdd/apply-worktree-finish.cjs \
|
|
380
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/apply-worktree-finish.cjs" \
|
|
381
381
|
--change=<变更名称> \
|
|
382
382
|
--capability=<capability-name>
|
|
383
383
|
```
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
### record-base
|
|
73
73
|
|
|
74
74
|
```bash
|
|
75
|
-
node skywalk-sdd/apply-worktree-finish.cjs --record-base \
|
|
75
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/apply-worktree-finish.cjs" --record-base \
|
|
76
76
|
--change=<change> --capability=<capability>
|
|
77
77
|
```
|
|
78
78
|
|
|
@@ -88,10 +88,10 @@ git worktree add .worktrees/apply-<change>-<capability> -b kld-sdd/<change>/<cap
|
|
|
88
88
|
### finish
|
|
89
89
|
|
|
90
90
|
```bash
|
|
91
|
-
node skywalk-sdd/apply-worktree-finish.cjs --change=<change> --capability=<capability>
|
|
91
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/apply-worktree-finish.cjs" --change=<change> --capability=<capability>
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
-
状态文件:`skywalk-sdd/state/apply-<change>-<capability>.json`
|
|
94
|
+
状态文件:`"$(cat .sdd-spec-root)/skywalk-sdd/state/apply-<change>-<capability>.json`
|
|
95
95
|
|
|
96
96
|
## 快速参考
|
|
97
97
|
|
|
@@ -21,8 +21,8 @@ allowed-tools:
|
|
|
21
21
|
|
|
22
22
|
> **跨平台执行规则**
|
|
23
23
|
> - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`),不是 Git 根或工作区根。
|
|
24
|
-
> - `openspec` 命令:优先 `node skywalk-sdd/openspec-shim.cjs list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
|
|
25
|
-
> -
|
|
24
|
+
> - `openspec` 命令:优先 `node "$(cat .sdd-spec-root)/skywalk-sdd/openspec-shim.cjs" list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
|
|
25
|
+
> - Telemetry / ontology:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" …`(Git 根无 skywalk-sdd/);`spec-root` 可用 `node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" spec-root`。
|
|
26
26
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
27
27
|
> - 不要裸写 Windows 反斜杠绝对路径;如必须使用绝对路径,请加引号或改成正斜杠。
|
|
28
28
|
> - 不要省略 `--source=opsx-command` 和 `--session-id=<会话ID>`。
|
|
@@ -53,7 +53,7 @@ openspec list
|
|
|
53
53
|
让用户选择现有变更。确认后记录阶段开始:
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
|
-
node skywalk-sdd/log.cjs start --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
|
|
56
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" start --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
保存 `event_id`。
|
|
@@ -78,12 +78,12 @@ node skywalk-sdd/log.cjs start --command=archive --project=. --change=<变更名
|
|
|
78
78
|
git worktree list
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
-
应仅剩主工作区;或 telemetry 中存在 `worktree_finish` + `result=success` 事件。若仍有 `.worktrees/apply-*`,先执行 `node skywalk-sdd/apply-worktree-finish.cjs` 或手工清理。
|
|
81
|
+
应仅剩主工作区;或 telemetry 中存在 `worktree_finish` + `result=success` 事件。若仍有 `.worktrees/apply-*`,先执行 `node "$(cat .sdd-spec-root)/skywalk-sdd/apply-worktree-finish.cjs"` 或手工清理。
|
|
82
82
|
|
|
83
83
|
### 3. 运行 telemetry doctor
|
|
84
84
|
|
|
85
85
|
```bash
|
|
86
|
-
node skywalk-sdd/log.cjs doctor --project=. --change=<变更名称>
|
|
86
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" doctor --project=. --change=<变更名称>
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
如果存在 `severe_issues`,暂停归档并说明必须先修复。`superseded_open_stages` 和 `rework_summary` 只作为返工/重复执行展示,不要求用户人工区分测试回滚或真实研发返工。
|
|
@@ -91,7 +91,7 @@ node skywalk-sdd/log.cjs doctor --project=. --change=<变更名称>
|
|
|
91
91
|
### 4. 扫描 tasks 完成状态
|
|
92
92
|
|
|
93
93
|
```bash
|
|
94
|
-
node skywalk-sdd/log.cjs tasks-status --project=. --change=<变更名称>
|
|
94
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" tasks-status --project=. --change=<变更名称>
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
即使用户选择“变更已完成实施”,未勾选项也不阻断归档。它可能代表任务真实未完成,也可能代表代码已完成但文档未同步;不要猜测,也不要静默忽略。最终必须让 `archive-docs` 将其写入 `archive_result.task_completion` 和报告。
|
|
@@ -105,7 +105,7 @@ node skywalk-sdd/log.cjs tasks-status --project=. --change=<变更名称>
|
|
|
105
105
|
执行唯一归档命令:
|
|
106
106
|
|
|
107
107
|
```bash
|
|
108
|
-
node skywalk-sdd/log.cjs archive-docs --project=. --change=<变更名称> --reason="变更已完成实施" --event-id=<event_id> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
|
|
108
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" archive-docs --project=. --change=<变更名称> --reason="变更已完成实施" --event-id=<event_id> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
|
|
109
109
|
```
|
|
110
110
|
|
|
111
111
|
> `--reason` 默认值为 `变更已完成实施`;如果用户选择了其他归档原因,请将上述 `--reason` 的值替换为对应原因。
|
|
@@ -125,7 +125,7 @@ node skywalk-sdd/log.cjs archive-docs --project=. --change=<变更名称> --reas
|
|
|
125
125
|
归档成功后立即执行(不询问用户):
|
|
126
126
|
|
|
127
127
|
```bash
|
|
128
|
-
node skywalk-sdd/ontology/cli.cjs active-change --remove --change=<变更名称> --project=.
|
|
128
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" active-change --remove --change=<变更名称> --project=.
|
|
129
129
|
```
|
|
130
130
|
|
|
131
131
|
把该 change 从 spec 仓 `sdd.config.yaml` 的 `active_changes` 移除,避免已归档 change 继续被代码 commit 写成 `Spec-Change`。该操作幂等;条目本就不存在时不报错。
|
|
@@ -136,12 +136,12 @@ node skywalk-sdd/ontology/cli.cjs active-change --remove --change=<变更名称>
|
|
|
136
136
|
2. 归档 zip 生成后,**加载并执行** **`opsx-kb-ingest`** 上传(勿只口头提示而不走技能流程);成功则写 `ingest-receipt.json`。
|
|
137
137
|
3. 若返回 `EXTERNAL_REF_CONFLICT`,引导回 spec/check 修正后重入,**禁止**在 KB 内现场改绑。
|
|
138
138
|
|
|
139
|
-
> 注意:`archive-docs` 成功执行后已经在内部写入 `stage_end`,因此**不要在成功的归档后再单独运行 `node skywalk-sdd/log.cjs end --command=archive ...`**。仅在第 5 步归档命令失败时,才需要运行下方的失败分支 `end`。
|
|
139
|
+
> 注意:`archive-docs` 成功执行后已经在内部写入 `stage_end`,因此**不要在成功的归档后再单独运行 `node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" end --command=archive ...`**。仅在第 5 步归档命令失败时,才需要运行下方的失败分支 `end`。
|
|
140
140
|
|
|
141
141
|
如果该命令失败,以失败状态结束 telemetry:
|
|
142
142
|
|
|
143
143
|
```bash
|
|
144
|
-
node skywalk-sdd/log.cjs end --event-id=<event_id> --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=failure --summary="归档失败:<失败原因>"
|
|
144
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" end --event-id=<event_id> --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=failure --summary="归档失败:<失败原因>"
|
|
145
145
|
```
|
|
146
146
|
|
|
147
147
|
失败时不要输出“归档完成”。
|
|
@@ -168,21 +168,21 @@ node skywalk-sdd/log.cjs end --event-id=<event_id> --command=archive --project=.
|
|
|
168
168
|
如用户愿意提供反馈,可补录问卷结果:
|
|
169
169
|
|
|
170
170
|
```bash
|
|
171
|
-
node skywalk-sdd/log.cjs record --type=survey_result --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=manual --session-id=<会话ID> --result=success --summary="SDD 人工反馈" --details-json="{\"survey_result\":{\"nps\":9,\"cognitive_load\":3,\"spec_fatigue_index\":2,\"satisfaction\":8,\"respondent_role\":\"developer\",\"collected_at\":\"<ISO时间>\",\"notes\":\"\"}}"
|
|
171
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --type=survey_result --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=manual --session-id=<会话ID> --result=success --summary="SDD 人工反馈" --details-json="{\"survey_result\":{\"nps\":9,\"cognitive_load\":3,\"spec_fatigue_index\":2,\"satisfaction\":8,\"respondent_role\":\"developer\",\"collected_at\":\"<ISO时间>\",\"notes\":\"\"}}"
|
|
172
172
|
```
|
|
173
173
|
|
|
174
174
|
如团队有传统方式工时基线,可补录 baseline:
|
|
175
175
|
|
|
176
176
|
```bash
|
|
177
|
-
node skywalk-sdd/log.cjs record --type=baseline_record --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=manual --session-id=<会话ID> --result=success --summary="传统工时基线" --details-json="{\"baseline_record\":{\"traditional_hours\":10,\"sdd_hours\":6,\"task_type\":\"feature\",\"baseline_source\":\"manual-estimate\",\"collected_at\":\"<ISO时间>\",\"notes\":\"\"}}"
|
|
177
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --type=baseline_record --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=manual --session-id=<会话ID> --result=success --summary="传统工时基线" --details-json="{\"baseline_record\":{\"traditional_hours\":10,\"sdd_hours\":6,\"task_type\":\"feature\",\"baseline_source\":\"manual-estimate\",\"collected_at\":\"<ISO时间>\",\"notes\":\"\"}}"
|
|
178
178
|
```
|
|
179
179
|
|
|
180
180
|
---
|
|
181
181
|
|
|
182
182
|
## 本体语义归档门禁
|
|
183
183
|
|
|
184
|
-
- 归档前必须运行 `node skywalk-sdd/log.cjs semantic-reconcile --project=. --change=<变更名称>`,不能只信任文件观察事件。
|
|
185
|
-
- 随后必须运行 `node skywalk-sdd/log.cjs semantic-check --project=. --change=<变更名称>`;有阻断诊断时禁止移动活动 Change。
|
|
184
|
+
- 归档前必须运行 `node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" semantic-reconcile --project=. --change=<变更名称>`,不能只信任文件观察事件。
|
|
185
|
+
- 随后必须运行 `node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" semantic-check --project=. --change=<变更名称>`;有阻断诊断时禁止移动活动 Change。
|
|
186
186
|
- Archive 不负责首次生成 propose/spec/design/tasks 的工作态事实;它重新解析原文核对 pending revision,补充 `OntologySnapshot/project_id/archive_id` 后冻结为 confirmed。
|
|
187
187
|
- `archive-docs` 成功后必须在归档目录生成 `archive-ontology.json`,并将 `review_status` 标记为 `confirmed`。
|
|
188
188
|
- 生产端必须把 confirmed 本体转换为 `canonical-facts.json`;实体固定为 `fact_kind=semantic`、`assertion_type=asserted`、`review_status=confirmed`,关系必须补齐对应语义边界字段。
|
|
@@ -9,8 +9,8 @@ description: "opsx-archive 前后日志/总结自检清单 — 仅在 archive
|
|
|
9
9
|
|
|
10
10
|
## A. 归档前自检
|
|
11
11
|
|
|
12
|
-
- [ ] `node skywalk-sdd/log.cjs doctor --project=. --change=<变更名称>` 无 `severe_issues`(`superseded_open_stages`/`rework_summary` 仅展示,不阻断)
|
|
13
|
-
- [ ] `node skywalk-sdd/log.cjs tasks-status --project=. --change=<变更名称>` 已运行;未勾选项将进入 `archive_result.task_completion`,不阻断归档但必须如实记录
|
|
12
|
+
- [ ] `node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" doctor --project=. --change=<变更名称>` 无 `severe_issues`(`superseded_open_stages`/`rework_summary` 仅展示,不阻断)
|
|
13
|
+
- [ ] `node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" tasks-status --project=. --change=<变更名称>` 已运行;未勾选项将进入 `archive_result.task_completion`,不阻断归档但必须如实记录
|
|
14
14
|
- [ ] `openspec/changes/<变更名称>/logs/execution-log.md` 各阶段条目齐全:propose/spec/design/task/check/apply/test/archive 的 `stage_start`/`stage_end` 闭环
|
|
15
15
|
- [ ] execution-log 状态标记规范:成功 `✅OK`、部分 `🟡WARN`、失败 `❌FAIL`;未闭环阶段已修复或标记 partial
|
|
16
16
|
- [ ] 无残留 Apply worktree(`git worktree list` 仅主工作区,或 telemetry 存在 `worktree_finish`+success 事件)
|
|
@@ -33,15 +33,15 @@ allowed-tools:
|
|
|
33
33
|
|
|
34
34
|
> **🖥️ 跨平台执行规则**
|
|
35
35
|
> - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`),不是 Git 根或工作区根。
|
|
36
|
-
> - `openspec` 命令:优先 `node skywalk-sdd/openspec-shim.cjs list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
|
|
37
|
-
> -
|
|
36
|
+
> - `openspec` 命令:优先 `node "$(cat .sdd-spec-root)/skywalk-sdd/openspec-shim.cjs" list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
|
|
37
|
+
> - Telemetry / ontology:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" …`(Git 根无 skywalk-sdd/);`spec-root` 可用 `node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" spec-root`。
|
|
38
38
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
39
39
|
> - ${SHELL_GUIDANCE}
|
|
40
40
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
41
41
|
> **📊 Telemetry(必做,不得跳过)**
|
|
42
|
-
> - 阶段开始:`node skywalk-sdd/log.cjs start --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
43
|
-
> - 检查报告生成后,必须先记录结构化检查结果:`node skywalk-sdd/log.cjs record --type=check_result --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/partial/failure --summary="检查结果摘要" --details-json="{\"check_results\":{\"total\":0,\"errors\":0,\"warnings\":0,\"warning_items\":[],\"suggestions\":0,\"fixed_before_apply\":0,\"consistency_score\":null,\"categories\":{\"completeness\":{\"passed\":0,\"total\":0},\"consistency\":{\"passed\":0,\"total\":0},\"executability\":{\"passed\":0,\"total\":0},\"tdd_compliance\":{\"passed\":0,\"total\":0}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"`
|
|
44
|
-
> - `check_result` 记录成功后,才允许阶段结束:`node skywalk-sdd/log.cjs end --event-id=<event_id> --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/partial/failure --summary="摘要"`
|
|
42
|
+
> - 阶段开始:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" start --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
43
|
+
> - 检查报告生成后,必须先记录结构化检查结果:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --type=check_result --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/partial/failure --summary="检查结果摘要" --details-json="{\"check_results\":{\"total\":0,\"errors\":0,\"warnings\":0,\"warning_items\":[],\"suggestions\":0,\"fixed_before_apply\":0,\"consistency_score\":null,\"categories\":{\"completeness\":{\"passed\":0,\"total\":0},\"consistency\":{\"passed\":0,\"total\":0},\"executability\":{\"passed\":0,\"total\":0},\"tdd_compliance\":{\"passed\":0,\"total\":0}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"`
|
|
44
|
+
> - `check_result` 记录成功后,才允许阶段结束:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" end --event-id=<event_id> --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/partial/failure --summary="摘要"`
|
|
45
45
|
> - **【B1 摘要数字校验】** `stage_end --summary` 中的数字(如「N 个场景」「N 层 DAG」「N 个任务」)必须与 `spec.md`/`tasks.md`/`test-scenarios.md` 的实统计交叉校验一致后再填写,不得凭记忆自填。典型失真:summary 写「11 个场景」实际 spec 含 13 条断言、「5 层 DAG」实际 tasks 修复后为 6 层。check 阶段发现不一致时,修正 summary 或补齐文档,使三者数字自洽。
|
|
46
46
|
|
|
47
47
|
---
|
|
@@ -82,10 +82,10 @@ openspec list
|
|
|
82
82
|
|
|
83
83
|
```bash
|
|
84
84
|
# 在 spec 仓库:
|
|
85
|
-
node skywalk-sdd/ontology/cli.cjs diagnose-naming --project=. --change=<change-key>
|
|
85
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" diagnose-naming --project=. --change=<change-key>
|
|
86
86
|
|
|
87
87
|
# 在代码仓库:
|
|
88
|
-
node skywalk-sdd/ontology/cli.cjs diagnose-naming --project=. --mode=code-repo
|
|
88
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" diagnose-naming --project=. --mode=code-repo
|
|
89
89
|
```
|
|
90
90
|
|
|
91
91
|
诊断结果三类:
|
|
@@ -122,7 +122,7 @@ node skywalk-sdd/ontology/cli.cjs diagnose-naming --project=. --mode=code-repo
|
|
|
122
122
|
- 若未标记 → 继续检查。
|
|
123
123
|
2. 运行 KB 就绪检查(程序化检测,自动搜索多 IDE 目录,消除路径歧义):
|
|
124
124
|
```bash
|
|
125
|
-
node skywalk-sdd/context-client.cjs --check-only
|
|
125
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --check-only
|
|
126
126
|
```
|
|
127
127
|
- 输出 `"available": true` → KB 已配置
|
|
128
128
|
- 输出 `"available": false` → KB 未配置
|
|
@@ -207,7 +207,7 @@ node skywalk-sdd/ontology/cli.cjs diagnose-naming --project=. --mode=code-repo
|
|
|
207
207
|
`task` 阶段允许 `tasks.md` 出现未完成项;这只是计划状态。但如果当前变更已经进入 apply 之后,或本次 check 发现实现代码、测试报告、`build_result/test_result/task_update/conformance_review` 等实施证据,必须检查任务勾选状态:
|
|
208
208
|
|
|
209
209
|
```bash
|
|
210
|
-
node skywalk-sdd/log.cjs tasks-status --project=. --change=<变更名称>
|
|
210
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" tasks-status --project=. --change=<变更名称>
|
|
211
211
|
```
|
|
212
212
|
|
|
213
213
|
判定规则:
|
|
@@ -250,7 +250,7 @@ node skywalk-sdd/log.cjs tasks-status --project=. --change=<变更名称>
|
|
|
250
250
|
|
|
251
251
|
在终端执行(必须成功):
|
|
252
252
|
```bash
|
|
253
|
-
node skywalk-sdd/log.cjs record --type=check_result --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/partial/failure --summary="检查结果摘要" --details-json="{\"check_results\":{\"total\":0,\"errors\":0,\"warnings\":0,\"warning_items\":[],\"suggestions\":0,\"fixed_before_apply\":0,\"consistency_score\":null,\"categories\":{\"completeness\":{\"passed\":0,\"total\":0},\"consistency\":{\"passed\":0,\"total\":0},\"executability\":{\"passed\":0,\"total\":0},\"tdd_compliance\":{\"passed\":0,\"total\":0}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"
|
|
253
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --type=check_result --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/partial/failure --summary="检查结果摘要" --details-json="{\"check_results\":{\"total\":0,\"errors\":0,\"warnings\":0,\"warning_items\":[],\"suggestions\":0,\"fixed_before_apply\":0,\"consistency_score\":null,\"categories\":{\"completeness\":{\"passed\":0,\"total\":0},\"consistency\":{\"passed\":0,\"total\":0},\"executability\":{\"passed\":0,\"total\":0},\"tdd_compliance\":{\"passed\":0,\"total\":0}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"
|
|
254
254
|
```
|
|
255
255
|
|
|
256
256
|
> **⚠️ P1-1 check_result details 不得为空**:`--details-json` 必须含 `consistency_score` / `categories` / `task_completion` 等字段,**禁止传空对象 `{}`**。空 details 会导致 report 的 Q5 跨文档一致性得分、P4b 修复率为 null(工具侧虽有 state fallback 兜底,但事件 details 是主数据源)。
|
|
@@ -259,7 +259,7 @@ node skywalk-sdd/log.cjs record --type=check_result --command=check --project=.
|
|
|
259
259
|
|
|
260
260
|
若当前已有实现代码,并且能够验证 spec 断言,还应记录 `conformance_review`(用于 Q1 规约符合度):
|
|
261
261
|
```bash
|
|
262
|
-
node skywalk-sdd/log.cjs record --type=conformance_review --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=manual --session-id=<会话ID> --result=success --summary="规约符合度评审" --details-json="{\"conformance_review\":{\"method\":\"llm-as-judge\",\"agent_confirmed\":true,\"human_status\":\"unverified\",\"reviewer\":\"<reviewer-identifier>\",\"assertions\":[{\"id\":\"ASSERT-001\",\"description\":\"规约中的可验证断言\",\"judge_status\":\"matched\",\"human_status\":\"matched\",\"evidence\":\"代码、测试或文档证据摘要\",\"files\":[],\"notes\":\"\"}]}}"
|
|
262
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --type=conformance_review --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=manual --session-id=<会话ID> --result=success --summary="规约符合度评审" --details-json="{\"conformance_review\":{\"method\":\"llm-as-judge\",\"agent_confirmed\":true,\"human_status\":\"unverified\",\"reviewer\":\"<reviewer-identifier>\",\"assertions\":[{\"id\":\"ASSERT-001\",\"description\":\"规约中的可验证断言\",\"judge_status\":\"matched\",\"human_status\":\"matched\",\"evidence\":\"代码、测试或文档证据摘要\",\"files\":[],\"notes\":\"\"}]}}"
|
|
263
263
|
```
|
|
264
264
|
|
|
265
265
|
> **human_status 说明(T3.4)**:`conformance_review.human_status` 标识本次评审是否经真实人工确认:`unverified`(AI 自评,待人工确认,默认)或 `matched`(已由人工评审确认)。**仅当真实人工评审时才填 `matched`**,避免 AI 自评被误标为已确认。报告 Q1 规约符合度会据此标注「自评,待人工确认」。
|
|
@@ -314,8 +314,8 @@ node skywalk-sdd/log.cjs record --type=conformance_review --command=check --proj
|
|
|
314
314
|
在其他质量检查前必须运行:
|
|
315
315
|
|
|
316
316
|
```bash
|
|
317
|
-
node skywalk-sdd/log.cjs semantic-reconcile --project=. --change=<变更名称> --profile=<simple|full|strict>
|
|
318
|
-
node skywalk-sdd/log.cjs semantic-check --project=. --change=<变更名称> --profile=<simple|full|strict>
|
|
317
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" semantic-reconcile --project=. --change=<变更名称> --profile=<simple|full|strict>
|
|
318
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" semantic-check --project=. --change=<变更名称> --profile=<simple|full|strict>
|
|
319
319
|
```
|
|
320
320
|
|
|
321
321
|
- `simple` 必须阻断 STMT 无 AC;没有 design/tasks 时跳过对应链路,不得误报。
|
|
@@ -31,7 +31,7 @@ allowed-tools:
|
|
|
31
31
|
> 1. 检查 proposal.md frontmatter `kb-status`:若 `degraded(by-user-choice)` → 跳过 KB,仅用本地上下文。
|
|
32
32
|
> 2. 否则运行 KB 就绪检查:
|
|
33
33
|
> ```bash
|
|
34
|
-
> node skywalk-sdd/context-client.cjs --check-only
|
|
34
|
+
> node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --check-only
|
|
35
35
|
> ```
|
|
36
36
|
> - `"available": true` → 若需查历史设计参考,先 `Read` `opsx-ontology-query/phase-2-during.md` §1
|
|
37
37
|
> - `"available": false` → **KB 不可用不阻塞 design 流程**,仅跳过历史设计参考查询
|
|
@@ -47,8 +47,8 @@ allowed-tools:
|
|
|
47
47
|
|
|
48
48
|
> **🖥️ 跨平台执行规则**
|
|
49
49
|
> - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`),不是 Git 根或工作区根。
|
|
50
|
-
> - `openspec` 命令:优先 `node skywalk-sdd/openspec-shim.cjs list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
|
|
51
|
-
> -
|
|
50
|
+
> - `openspec` 命令:优先 `node "$(cat .sdd-spec-root)/skywalk-sdd/openspec-shim.cjs" list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
|
|
51
|
+
> - Telemetry / ontology:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" …`(Git 根无 skywalk-sdd/);`spec-root` 可用 `node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" spec-root`。
|
|
52
52
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
53
53
|
> - ${SHELL_GUIDANCE}
|
|
54
54
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
@@ -184,7 +184,7 @@ design.md 中若使用 version 正则约束(如格式校验 `^\d+\.\d+\.\d+$`
|
|
|
184
184
|
- 每个 DES 必须同时写 `entity-id`、`version-id`、`delta-state` 和按需的 `predecessor-version`;新增用 `semantic-identity --delta-state=added`,修改时复用实体 UUID 并生成新版本 UUID。
|
|
185
185
|
- 每个 DES 必须通过 `**realizes**: STMT-*` 显式引用一个或多个真实 STMT。
|
|
186
186
|
- 不得仅凭文本相似创建 realizes;没有上游 STMT 时必须标记 unresolved。
|
|
187
|
-
- 生成结束后必须运行 `node skywalk-sdd/log.cjs semantic-reconcile --project=. --change=<name>`。
|
|
187
|
+
- 生成结束后必须运行 `node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" semantic-reconcile --project=. --change=<name>`。
|
|
188
188
|
- reconcile 必须立即生成 `openspec/changes/<name>/artifacts/.../design.ontology.json`,其中 DES 和 realizes 关系保留原文 source;不得推迟到 check/archive。
|
|
189
189
|
- 阶段 `stage_end` 会在无 Hook 环境下幂等执行同步兜底。
|
|
190
190
|
|
|
@@ -11,8 +11,8 @@ description: opsx-design 的详细模板:telemetry 命令、上下文类型表
|
|
|
11
11
|
|
|
12
12
|
## 📊 Telemetry 命令模板(必做,不得跳过)
|
|
13
13
|
|
|
14
|
-
> 阶段开始:`node skywalk-sdd/log.cjs start --command=design --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
15
|
-
> 阶段结束:`node skywalk-sdd/log.cjs end --event-id=<event_id> --command=design --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
|
|
14
|
+
> 阶段开始:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" start --command=design --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
15
|
+
> 阶段结束:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" end --event-id=<event_id> --command=design --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -17,14 +17,14 @@ allowed-tools:
|
|
|
17
17
|
|
|
18
18
|
> **🖥️ 跨平台执行规则**
|
|
19
19
|
> - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`),不是 Git 根或工作区根。
|
|
20
|
-
> - `openspec` 命令:优先 `node skywalk-sdd/openspec-shim.cjs list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
|
|
21
|
-
> -
|
|
20
|
+
> - `openspec` 命令:优先 `node "$(cat .sdd-spec-root)/skywalk-sdd/openspec-shim.cjs" list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
|
|
21
|
+
> - Telemetry / ontology:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" …`(Git 根无 skywalk-sdd/);`spec-root` 可用 `node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" spec-root`。
|
|
22
22
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
23
23
|
> - ${SHELL_GUIDANCE}
|
|
24
24
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
25
25
|
> **📊 Telemetry(必做,不得跳过)**
|
|
26
|
-
> - 阶段开始:`node skywalk-sdd/log.cjs start --command=explore --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
27
|
-
> - 阶段结束:`node skywalk-sdd/log.cjs end --event-id=<event_id> --command=explore --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
|
|
26
|
+
> - 阶段开始:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" start --command=explore --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
27
|
+
> - 阶段结束:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" end --event-id=<event_id> --command=explore --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
|
|
28
28
|
|
|
29
29
|
---
|
|
30
30
|
|
|
@@ -44,7 +44,7 @@ allowed-tools:
|
|
|
44
44
|
|
|
45
45
|
优先使用命名协议分组:
|
|
46
46
|
```bash
|
|
47
|
-
node skywalk-sdd/ontology/cli.cjs list-changes --project=.
|
|
47
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" list-changes --project=.
|
|
48
48
|
# 需要结构化数据时加 --json
|
|
49
49
|
```
|
|
50
50
|
|
|
@@ -35,8 +35,8 @@ allowed-tools:
|
|
|
35
35
|
|
|
36
36
|
> **🖥️ 跨平台执行规则**
|
|
37
37
|
> - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`),不是 Git 根或工作区根。
|
|
38
|
-
> - `openspec` 命令:优先 `node skywalk-sdd/openspec-shim.cjs list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
|
|
39
|
-
> -
|
|
38
|
+
> - `openspec` 命令:优先 `node "$(cat .sdd-spec-root)/skywalk-sdd/openspec-shim.cjs" list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
|
|
39
|
+
> - Telemetry / ontology:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" …`(Git 根无 skywalk-sdd/);`spec-root` 可用 `node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" spec-root`。
|
|
40
40
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
41
41
|
> - ${SHELL_GUIDANCE}
|
|
42
42
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
@@ -70,7 +70,7 @@ allowed-tools:
|
|
|
70
70
|
5. 生成英文短 slug(小写、连字符、建议 ≤48 字符)
|
|
71
71
|
6. 用本地日历日 `YYMMDD` 生成 change-key,并做冲突消解:
|
|
72
72
|
```bash
|
|
73
|
-
node skywalk-sdd/ontology/cli.cjs change-key --generate --module=<code> --slug=<slug> --project=.
|
|
73
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" change-key --generate --module=<code> --slug=<slug> --project=.
|
|
74
74
|
```
|
|
75
75
|
7. 得到:
|
|
76
76
|
- `change-key`:spec 仓目录名 `openspec/changes/<change-key>/`(权威名称;不等于代码分支名)
|
|
@@ -92,7 +92,7 @@ allowed-tools:
|
|
|
92
92
|
|
|
93
93
|
**重要**:未明确需求前不得继续。change-key 必须通过校验,禁止手写不合规目录名:
|
|
94
94
|
```bash
|
|
95
|
-
node skywalk-sdd/ontology/cli.cjs change-key --validate <change-key> --project=.
|
|
95
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" change-key --validate <change-key> --project=.
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
### 2. 【上下文加载】识别并读取用户提供的文件
|
|
@@ -136,7 +136,7 @@ openspec new change "<change-key>"
|
|
|
136
136
|
|
|
137
137
|
**第 4 步:隐式登记活动变更**(创建目录后立即执行,不询问用户):
|
|
138
138
|
```bash
|
|
139
|
-
node skywalk-sdd/ontology/cli.cjs active-change --register --change=<change-key> \
|
|
139
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" active-change --register --change=<change-key> \
|
|
140
140
|
--title="<中文标题>" --module=<code> --summary="<一句话摘要>" --project=.
|
|
141
141
|
```
|
|
142
142
|
|
|
@@ -199,14 +199,14 @@ openspec instructions proposal --change "<name>" --json
|
|
|
199
199
|
1. 收集 REQ 号(含可选 `feature-id`);没有则问一次。
|
|
200
200
|
2. 逐个验号(确定性入口,禁止肉眼判正则):
|
|
201
201
|
```bash
|
|
202
|
-
node skywalk-sdd/ontology/cli.cjs external-key --validate "<REQ-...>" --type requirement
|
|
202
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" external-key --validate "<REQ-...>" --type requirement
|
|
203
203
|
# 若有 feature-id:
|
|
204
|
-
node skywalk-sdd/ontology/cli.cjs external-key --validate "<FEAT-...>" --type feature
|
|
204
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" external-key --validate "<FEAT-...>" --type feature
|
|
205
205
|
```
|
|
206
206
|
- REQ/FEAT 不合规 → **拒绝进入 resolve**,告知「编号不合规,请回需求管理系统核实/换发」;Agent 不得猜测、补位、改写。
|
|
207
207
|
- 用户明确说「没有外部需求号」→ 走 `numbering-waiver.reason`(必填理由);`requirement-refs` 必须为空;提示本轮不种桥。
|
|
208
208
|
3. **先加载依赖技能**:确认 `${AGENT_SKILL_DIR}/opsx-ontology-query/SKILL.md` 存在并 Read;按该技能完成 API Key / 空间与 KB 选择(`../.shared/kb-state.json`,与 `opsx-kb-ingest` 共用)。未安装则停止本步。
|
|
209
|
-
- **KB 就绪检查**:运行 `node skywalk-sdd/context-client.cjs --check-only`,若 `"available": false`,使用 **AskUserQuestion** 询问用户:
|
|
209
|
+
- **KB 就绪检查**:运行 `node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --check-only`,若 `"available": false`,使用 **AskUserQuestion** 询问用户:
|
|
210
210
|
> "📡 **Engineering KB 未配置**
|
|
211
211
|
> KB 可以提供 Continuity 身份验证和 Capability 复用。是否现在配置?
|
|
212
212
|
> - A. **配置 KB**(加载 opsx-ontology-query 走 Session 启动)
|
|
@@ -217,7 +217,7 @@ node skywalk-sdd/ontology/cli.cjs external-key --validate "<FEAT-...>" --type fe
|
|
|
217
217
|
- **选 C** → 终止 propose。
|
|
218
218
|
4. 验号通过后才 resolve:
|
|
219
219
|
```bash
|
|
220
|
-
node skywalk-sdd/context-client.cjs --mode=resolve \
|
|
220
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --mode=resolve \
|
|
221
221
|
--external-system=requirement-mgmt \
|
|
222
222
|
--external-object-type=requirement \
|
|
223
223
|
--external-id="<REQ-...>" \
|
|
@@ -315,10 +315,10 @@ Read openspec/changes/archive/*/ontology-identities.json
|
|
|
315
315
|
- 每个新增 Capability 必须写成 `[CAP-<CAPABILITY>] <slug>: <说明>`。
|
|
316
316
|
- 修改既有 Capability 时必须复用已有 CAP ID,不得修改或重新分配已有实体 ID。
|
|
317
317
|
- 分配新 CAP ID 前必须扫描当前 proposal 和归档中的显式编号;不得只凭标题认定跨 Change 同一性。
|
|
318
|
-
- 每个 Change/Capability 同时写人工锚点、`entity-id`、`version-id` 和 `delta-state`。新增时必须调用 `node skywalk-sdd/log.cjs semantic-identity --delta-state=added`,不得手写或复制 UUID。
|
|
318
|
+
- 每个 Change/Capability 同时写人工锚点、`entity-id`、`version-id` 和 `delta-state`。新增时必须调用 `node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" semantic-identity --delta-state=added`,不得手写或复制 UUID。
|
|
319
319
|
- 修改既有 Capability 时调用 `semantic-identity --delta-state=modified --entity-id=<历史实体UUID> --predecessor-version=<直接前序版本UUID>`;复用实体 UUID,但必须生成新版本 UUID。
|
|
320
320
|
- 本阶段只声明 Change 和 Capability,不得提前生成 STMT、AC、DES 或 TASK 事实。
|
|
321
|
-
- proposal.md 写入结束后必须立即运行 `node skywalk-sdd/log.cjs semantic-reconcile --project=. --change=<name>`,生成 `openspec/changes/<name>/artifacts/proposal.ontology.json`;不得等到 check 或 archive 才首次生成 JSON。
|
|
321
|
+
- proposal.md 写入结束后必须立即运行 `node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" semantic-reconcile --project=. --change=<name>`,生成 `openspec/changes/<name>/artifacts/proposal.ontology.json`;不得等到 check 或 archive 才首次生成 JSON。
|
|
322
322
|
- 阶段 `stage_end` 会在无 Hook 环境下幂等执行同一次同步作为兜底,结果中的 `semantic_state.artifact_json_paths` 必须包含 proposal 对应 JSON。
|
|
323
323
|
|
|
324
324
|
## Guardrails
|
|
@@ -11,8 +11,8 @@ description: opsx-propose 的详细模板:telemetry 命令、文档拆分模
|
|
|
11
11
|
|
|
12
12
|
## 📊 Telemetry 命令模板(必做,不得跳过)
|
|
13
13
|
|
|
14
|
-
> 阶段开始:`node skywalk-sdd/log.cjs start --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
15
|
-
> 阶段结束:`node skywalk-sdd/log.cjs end --event-id=<event_id> --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
|
|
14
|
+
> 阶段开始:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" start --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
15
|
+
> 阶段结束:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" end --event-id=<event_id> --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -19,9 +19,9 @@ allowed-tools:
|
|
|
19
19
|
你是一个 SDD 项目规则生成与维护专家。激活本技能后,你将扫描项目事实,为已部署的 Agent 生成或审查规则文件。
|
|
20
20
|
|
|
21
21
|
> **🖥️ 跨平台执行规则**
|
|
22
|
-
> - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml
|
|
23
|
-
> -
|
|
24
|
-
> - `
|
|
22
|
+
> - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`、`skywalk-sdd/`),不是 Git 根。
|
|
23
|
+
> - **CLI 前缀**:Git/工作区根执行时用 `node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" …`;**不要**在 Git 根另建 `skywalk-sdd/`。
|
|
24
|
+
> - `openspec`:优先 `node "$(cat .sdd-spec-root)/skywalk-sdd/openspec-shim.cjs" list`,或先 `cd` 到包裹包再执行。
|
|
25
25
|
> - ${SHELL_GUIDANCE}
|
|
26
26
|
> - **本技能不写入 SkyWalk Telemetry**(与 `opsx-knowledge` 同属辅助技能,不走 `log.cjs start/end`)。
|
|
27
27
|
|
|
@@ -35,8 +35,8 @@ allowed-tools:
|
|
|
35
35
|
|
|
36
36
|
> **🖥️ 跨平台执行规则**
|
|
37
37
|
> - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`),不是 Git 根或工作区根。
|
|
38
|
-
> - `openspec` 命令:优先 `node skywalk-sdd/openspec-shim.cjs list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
|
|
39
|
-
> -
|
|
38
|
+
> - `openspec` 命令:优先 `node "$(cat .sdd-spec-root)/skywalk-sdd/openspec-shim.cjs" list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
|
|
39
|
+
> - Telemetry / ontology:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" …`(Git 根无 skywalk-sdd/);`spec-root` 可用 `node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" spec-root`。
|
|
40
40
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
41
41
|
> - ${SHELL_GUIDANCE}
|
|
42
42
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
@@ -117,7 +117,7 @@ openspec list
|
|
|
117
117
|
- 若未标记 → 继续检查。
|
|
118
118
|
2. 运行 KB 就绪检查(程序化检测,自动搜索多 IDE 目录,消除路径歧义):
|
|
119
119
|
```bash
|
|
120
|
-
node skywalk-sdd/context-client.cjs --check-only
|
|
120
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --check-only
|
|
121
121
|
```
|
|
122
122
|
- 输出 `"available": true` → KB 已配置
|
|
123
123
|
- 输出 `"available": false` → KB 未配置
|
|
@@ -148,7 +148,7 @@ openspec list
|
|
|
148
148
|
2. 读取 proposal Continuity。对**当前 Capability** 各调一次(「全部」= 循环 N 次,不是一次大查询)——优先走 **`opsx-ontology-query`** 的 `match-requirement`;薄封装仅作参数拼装:
|
|
149
149
|
|
|
150
150
|
```bash
|
|
151
|
-
node skywalk-sdd/context-client.cjs \
|
|
151
|
+
node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" \
|
|
152
152
|
--query="<当前 Capability 的自然语言需求>" \
|
|
153
153
|
--target-stage=spec \
|
|
154
154
|
--entity-id="<该 CAP 的 entity_id>" \
|
|
@@ -260,7 +260,7 @@ node skywalk-sdd/context-client.cjs \
|
|
|
260
260
|
- 对 `reuseMode=REFERENCE` 的历史候选必须创建新的实体身份;禁止因为内容相似而复用历史 `entity-id`。
|
|
261
261
|
- 对 `reuseMode=INHERIT` 的历史事实,必须使用返回的实体与版本来源完成 unchanged/modified 身份参数校验。
|
|
262
262
|
- unchanged 内容只写人工锚点、历史实体 UUID、历史版本 UUID 和来源引用,不复制历史原文;调用 `semantic-identity --delta-state=unchanged --entity-id=<UUID> --version-id=<UUID>` 校验复用参数,引用断链时保持 unresolved 并交由 check 阻断。
|
|
263
|
-
- 生成结束后必须运行 `node skywalk-sdd/log.cjs semantic-reconcile --project=. --change=<name>`,根据诊断修复缺号、重号和悬空引用。
|
|
263
|
+
- 生成结束后必须运行 `node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" semantic-reconcile --project=. --change=<name>`,根据诊断修复缺号、重号和悬空引用。
|
|
264
264
|
- reconcile 必须在 change 目录生成 `openspec/changes/<name>/artifacts/spec.ontology.json` 或 `openspec/changes/<name>/artifacts/specs/<capability>/spec.ontology.json`;该 JSON 是 draft 工作事实,不得等待 check/archive 才生成。
|
|
265
265
|
- 阶段 `stage_end` 会在无 Hook 环境下幂等执行同步兜底,并返回 `semantic_state.artifact_json_paths`。
|
|
266
266
|
|
|
@@ -11,8 +11,8 @@ description: opsx-spec 的详细模板:telemetry 命令、上下文类型表
|
|
|
11
11
|
|
|
12
12
|
## 📊 Telemetry 命令模板(必做,不得跳过)
|
|
13
13
|
|
|
14
|
-
> 阶段开始:`node skywalk-sdd/log.cjs start --command=spec --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
15
|
-
> 阶段结束:`node skywalk-sdd/log.cjs end --event-id=<event_id> --command=spec --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
|
|
14
|
+
> 阶段开始:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" start --command=spec --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
15
|
+
> 阶段结束:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" end --event-id=<event_id> --command=spec --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|