kld-sdd 2.6.11 → 2.6.13

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 (87) hide show
  1. package/README.md +20 -0
  2. package/kld-sdd-guide.html +429 -159
  3. package/lib/hook-gate-core.js +41 -5
  4. package/lib/init.js +101 -95
  5. package/package.json +5 -2
  6. package/skywalk-sdd/index.cjs +2668 -415
  7. package/skywalk-sdd/metrics-v3.cjs +1153 -0
  8. package/skywalk-sdd/ontology/archive-package.cjs +114 -3
  9. package/skywalk-sdd/ontology/resolve-spec-root.cjs +20 -80
  10. package/skywalk-sdd/ontology/working-artifacts.cjs +2 -1
  11. package/templates/hooks/claude/hooks/sdd-apply-test-gate.cjs +39 -9
  12. package/templates/hooks/claude/hooks/sdd-post-tool.cjs +87 -8
  13. package/templates/hooks/claude/hooks/sdd-prompt.cjs +25 -5
  14. package/templates/hooks/codebuddy/hooks/sdd-apply-test-gate.cjs +39 -9
  15. package/templates/hooks/codebuddy/hooks/sdd-post-tool.cjs +87 -9
  16. package/templates/hooks/codebuddy/hooks/sdd-prompt.cjs +24 -3
  17. package/templates/skills/kld-sdd/opsx-apply/SKILL.md +17 -16
  18. package/templates/skills/kld-sdd/opsx-apply/checklist.md +22 -22
  19. package/templates/skills/kld-sdd/opsx-apply/implementer-prompt.md +12 -12
  20. package/templates/skills/kld-sdd/opsx-apply/reference.md +43 -42
  21. package/templates/skills/kld-sdd/opsx-apply/worktree-setup.md +3 -3
  22. package/templates/skills/kld-sdd/opsx-archive/SKILL.md +58 -20
  23. package/templates/skills/kld-sdd/opsx-archive/checklist.md +6 -3
  24. package/templates/skills/kld-sdd/opsx-check/SKILL.md +30 -22
  25. package/templates/skills/kld-sdd/opsx-check/checklist.md +7 -6
  26. package/templates/skills/kld-sdd/opsx-design/SKILL.md +5 -5
  27. package/templates/skills/kld-sdd/opsx-design/checklist.md +1 -1
  28. package/templates/skills/kld-sdd/opsx-design/reference.md +2 -2
  29. package/templates/skills/kld-sdd/opsx-explore/SKILL.md +5 -5
  30. package/templates/skills/kld-sdd/opsx-propose/SKILL.md +20 -12
  31. package/templates/skills/kld-sdd/opsx-propose/reference.md +31 -5
  32. package/templates/skills/kld-sdd/opsx-rules/SKILL.md +3 -3
  33. package/templates/skills/kld-sdd/opsx-rules/reference.md +3 -1
  34. package/templates/skills/kld-sdd/opsx-spec/SKILL.md +6 -6
  35. package/templates/skills/kld-sdd/opsx-spec/checklist.md +1 -1
  36. package/templates/skills/kld-sdd/opsx-spec/reference.md +2 -2
  37. package/templates/skills/kld-sdd/opsx-task/SKILL.md +14 -14
  38. package/templates/skills/kld-sdd/opsx-task/checklist.md +3 -3
  39. package/templates/skills/kld-sdd/opsx-task/reference.md +5 -5
  40. package/templates/skills/kld-sdd/opsx-test/SKILL.md +11 -9
  41. package/templates/skills/kld-sdd/{opsx-tdd-anti-patterns → tdd-anti-patterns}/SKILL.md +4 -4
  42. package/templates/skills/kld-sdd/{opsx-tdd-anti-patterns → tdd-anti-patterns}/reference.md +4 -4
  43. package/templates/skills/kld-sdd/{opsx-tdd-core → tdd-core}/SKILL.md +13 -13
  44. package/templates/skills/kld-sdd/{opsx-tdd-core → tdd-core}/checklist.md +5 -5
  45. package/templates/skills/kld-sdd/{opsx-tdd-core → tdd-core}/reference.md +12 -12
  46. package/templates/skills/kld-sdd/{opsx-tdd-metrics → tdd-metrics}/SKILL.md +3 -3
  47. package/templates/skills/kld-sdd/{opsx-tdd-metrics → tdd-metrics}/checklist.md +2 -2
  48. package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/SKILL.md +2 -2
  49. package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/parameterized-testing.md +1 -1
  50. package/templates/skills/kld-sdd/{opsx-tdd-review → tdd-review}/SKILL.md +5 -5
  51. package/templates/skills/kld-sdd/{opsx-tdd-review → tdd-review}/checklist.md +5 -5
  52. package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/SKILL.md +3 -3
  53. package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/non-tdd-modules.md +1 -1
  54. package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/refactor-checklist.md +1 -1
  55. package/templates/skills/kld-sdd/tdd-rules/rules/test-skeleton-telemetry.md +19 -0
  56. package/templates/skills/kld-sdd/opsx-tdd-rules/rules/test-skeleton-telemetry.md +0 -19
  57. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/cause-effect-clarity.md +0 -0
  58. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/clean-test-data.md +0 -0
  59. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/existing-test-awareness.md +0 -0
  60. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/given-when-then.md +0 -0
  61. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/good-test-qualities.md +0 -0
  62. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/mock-boundary.md +0 -0
  63. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/naming-conventions.md +0 -0
  64. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/no-logic-in-tests.md +0 -0
  65. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/one-test-one-scenario.md +0 -0
  66. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/prefer-public-apis.md +0 -0
  67. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/test-behaviors-not-methods.md +0 -0
  68. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/java/argument-matching.md +0 -0
  69. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/java/controller-test-rules.md +0 -0
  70. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/java/domain-service-rules.md +0 -0
  71. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/java/java-test-template.md +0 -0
  72. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/java/json-serialization.md +0 -0
  73. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/java/logging-rules.md +0 -0
  74. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/post-generation/compilation-verification.md +0 -0
  75. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/post-generation/execution-verification.md +0 -0
  76. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/python/py-test-template.md +0 -0
  77. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/typescript/ts-test-template.md +0 -0
  78. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/controller-strategy.md +0 -0
  79. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/dag-generation-rules.md +0 -0
  80. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/des-step-annotation.md +0 -0
  81. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/exception-path-coverage.md +0 -0
  82. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/green-scope-declaration.md +0 -0
  83. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/green-yagni-fence.md +0 -0
  84. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/multi-validation-split.md +0 -0
  85. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/task-type-definitions.md +0 -0
  86. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/tdd-strategy-selection.md +0 -0
  87. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/test-execution-gate.md +0 -0
@@ -20,10 +20,11 @@ description: "opsx-check 阶段日志自检清单 — 仅在 check 自检时读
20
20
  - [ ] `warnings`: 建议修复的问题数
21
21
  - [ ] `suggestions`: 可选优化建议数
22
22
  - [ ] `fixed_before_apply`: 进入 apply 前已通过/已确认满足门禁的检查项数
23
- - [ ] `consistency_score`: 跨文档一致性评分 0-1;无法评分填 `null`
23
+ - [ ] `consistency_score`: legacy 兼容字段;跨文档一致性评分 0-1,无法评分填 `null`
24
+ - [ ] `reviewer` / `review_session_id` / `author_session_id` / `reviewer_independence`: Q3 独立性元数据已填写;优先独立 evaluator,不可用时标 `self-review` 或 `unknown`(Q3 provisional)
24
25
  - [ ] `categories`: 至少含 `completeness` / `consistency` / `executability`
25
26
  - [ ] `task_completion`: 从 `tasks-status` 整理;未进入 apply 时 `checked_for_archive_readiness=false`
26
- - [ ] **P1-1**:`check_result` 事件 `details` 非空且含 `consistency_score` 键(禁止空 `{}`,否则 Q5 为 null)
27
+ - [ ] **P1-1**:`check_result` 事件 `details` 非空且含 `categories` 等必填键(禁止空 `{}`,否则 Q3 不可计算)
27
28
  - [ ] **P2-3**:`has_incomplete=true` 时 `check_result.result=partial` 且 `warning_items` 含 task_completion 项
28
29
 
29
30
  ## C. execution-log 状态标记
@@ -40,15 +41,15 @@ description: "opsx-check 阶段日志自检清单 — 仅在 check 自检时读
40
41
 
41
42
  - [ ] **CON 覆盖**:spec.md 中每个 CON 在 tasks.md 中有对应验证任务或显式声明间接覆盖
42
43
  - [ ] **安全/审计要求覆盖**:spec.md §5.x 中的安全与审计要求在 tasks.md 中有对应任务或显式声明推迟
43
- - [ ] **AC 变体覆盖**:spec.md 中含"或"条件的 AC 场景,其 RED 任务验收标准列出所有变体的测试方法(引用 `opsx-tdd-rules/rules/multi-validation-split.md`)
44
+ - [ ] **AC 变体覆盖**:spec.md 中含"或"条件的 AC 场景,其 RED 任务验收标准列出所有变体的测试方法(引用 `tdd-rules/rules/multi-validation-split.md`)
44
45
  - [ ] **§4.x 验证方式表内部一致性**:tasks.md §4.x 验证方式表中的测试注解/配置与任务实现步骤中的声明一致
45
46
 
46
47
  ## E. TDD 合规性检查(仅 test-strategy=tdd 时)
47
48
 
48
- ⛔ 执行 `opsx-tdd-core/checklist.md` §B(11 项)逐项检查。
49
+ ⛔ 执行 `tdd-core/checklist.md` §B(11 项)逐项检查。
49
50
 
50
- > 不在此内联复制,以 opsx-tdd-core/checklist.md §B 为唯一真相源。
51
- > 额外补充:还需检查 `opsx-tdd-rules/rules/exception-path-coverage.md`(异常路径覆盖门禁)。
51
+ > 不在此内联复制,以 tdd-core/checklist.md §B 为唯一真相源。
52
+ > 额外补充:还需检查 `tdd-rules/rules/exception-path-coverage.md`(异常路径覆盖门禁)。
52
53
 
53
54
  **检查项适用阶段**:
54
55
  - **apply 前可验证**(文档级):§B 中除"GREEN 任务输出不含未测试的 Controller/Filter/Config"外的所有检查项(含 Controller 策略声明和测试任务生成)
@@ -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
- > - `skywalk-sdd/log.cjs` / `ontology/cli.cjs`:`--project=.` Git 根/工作区根会自动解析;也可 `node skywalk-sdd/ontology/cli.cjs spec-root` 查看路径。
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>`。
@@ -141,7 +141,7 @@ openspec list
141
141
 
142
142
  **输出路径**:`changes/<name>/specs/<capability>/design.md`
143
143
 
144
- **⛔ DES 步骤级标注(TDD 模式强制)**:当 `test-strategy=tdd` 时,被多个 RED/GREEN 对映射的 DES 元素必须标注步骤级任务归属。规则详见 `opsx-tdd-rules/rules/des-step-annotation.md`
144
+ **⛔ DES 步骤级标注(TDD 模式强制)**:当 `test-strategy=tdd` 时,被多个 RED/GREEN 对映射的 DES 元素必须标注步骤级任务归属。规则详见 `tdd-rules/rules/des-step-annotation.md`
145
145
 
146
146
  ### 6.5 【version 正则注释】允许前导零
147
147
 
@@ -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
 
@@ -29,7 +29,7 @@ description: opsx-design 的阶段强制检查点与自检清单。仅在执行
29
29
  - [ ] 外部依赖已列出
30
30
  - [ ] 异常处理策略已定义
31
31
  - [ ] 文档末尾包含质量红线检查清单
32
- - [ ] ⛔ **DES 步骤级标注(TDD 模式)**:当 test-strategy=tdd 时,被多个 RED/GREEN 对映射的 DES 元素已标注步骤级 `[GREEN-N]` 归属(规则见 `opsx-tdd-rules/rules/des-step-annotation.md`)
32
+ - [ ] ⛔ **DES 步骤级标注(TDD 模式)**:当 test-strategy=tdd 时,被多个 RED/GREEN 对映射的 DES 元素已标注步骤级 `[GREEN-N]` 归属(规则见 `tdd-rules/rules/des-step-annotation.md`)
33
33
 
34
34
  **如有任意一项未满足,重新生成对应章节,直至全部通过。**
35
35
 
@@ -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
- > - `skywalk-sdd/log.cjs` / `ontology/cli.cjs`:`--project=.` Git 根/工作区根会自动解析;也可 `node skywalk-sdd/ontology/cli.cjs spec-root` 查看路径。
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,12 +35,13 @@ 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
- > - `skywalk-sdd/log.cjs` / `ontology/cli.cjs`:`--project=.` Git 根/工作区根会自动解析;也可 `node skywalk-sdd/ontology/cli.cjs spec-root` 查看路径。
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>`。
43
43
  > **📊 Telemetry(必做,不得跳过)** — 阶段开始 / 阶段结束**命令模板**见 `./reference.md`「📊 Telemetry 命令模板」。
44
+ > - 用户确认变更范围、`mode`、`test-strategy` 或方案 A/B/C 时,记录严格 `process_note`:`kind=user_decision`,并分别填写 `decision_type=scope|mode|test_strategy|other`。同一决定只记录一次,后续改变范围时改用 `kind=scope_change`。
44
45
 
45
46
  ---
46
47
 
@@ -70,7 +71,7 @@ allowed-tools:
70
71
  5. 生成英文短 slug(小写、连字符、建议 ≤48 字符)
71
72
  6. 用本地日历日 `YYMMDD` 生成 change-key,并做冲突消解:
72
73
  ```bash
73
- node skywalk-sdd/ontology/cli.cjs change-key --generate --module=<code> --slug=<slug> --project=.
74
+ node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" change-key --generate --module=<code> --slug=<slug> --project=.
74
75
  ```
75
76
  7. 得到:
76
77
  - `change-key`:spec 仓目录名 `openspec/changes/<change-key>/`(权威名称;不等于代码分支名)
@@ -92,7 +93,7 @@ allowed-tools:
92
93
 
93
94
  **重要**:未明确需求前不得继续。change-key 必须通过校验,禁止手写不合规目录名:
94
95
  ```bash
95
- node skywalk-sdd/ontology/cli.cjs change-key --validate <change-key> --project=.
96
+ node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" change-key --validate <change-key> --project=.
96
97
  ```
97
98
 
98
99
  ### 2. 【上下文加载】识别并读取用户提供的文件
@@ -136,7 +137,7 @@ openspec new change "<change-key>"
136
137
 
137
138
  **第 4 步:隐式登记活动变更**(创建目录后立即执行,不询问用户):
138
139
  ```bash
139
- node skywalk-sdd/ontology/cli.cjs active-change --register --change=<change-key> \
140
+ node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" active-change --register --change=<change-key> \
140
141
  --title="<中文标题>" --module=<code> --summary="<一句话摘要>" --project=.
141
142
  ```
142
143
 
@@ -199,14 +200,14 @@ openspec instructions proposal --change "<name>" --json
199
200
  1. 收集 REQ 号(含可选 `feature-id`);没有则问一次。
200
201
  2. 逐个验号(确定性入口,禁止肉眼判正则):
201
202
  ```bash
202
- node skywalk-sdd/ontology/cli.cjs external-key --validate "<REQ-...>" --type requirement
203
+ node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" external-key --validate "<REQ-...>" --type requirement
203
204
  # 若有 feature-id:
204
- node skywalk-sdd/ontology/cli.cjs external-key --validate "<FEAT-...>" --type feature
205
+ node "$(cat .sdd-spec-root)/skywalk-sdd/ontology/cli.cjs" external-key --validate "<FEAT-...>" --type feature
205
206
  ```
206
207
  - REQ/FEAT 不合规 → **拒绝进入 resolve**,告知「编号不合规,请回需求管理系统核实/换发」;Agent 不得猜测、补位、改写。
207
208
  - 用户明确说「没有外部需求号」→ 走 `numbering-waiver.reason`(必填理由);`requirement-refs` 必须为空;提示本轮不种桥。
208
209
  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** 询问用户:
210
+ - **KB 就绪检查**:运行 `node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --check-only`,若 `"available": false`,使用 **AskUserQuestion** 询问用户:
210
211
  > "📡 **Engineering KB 未配置**
211
212
  > KB 可以提供 Continuity 身份验证和 Capability 复用。是否现在配置?
212
213
  > - A. **配置 KB**(加载 opsx-ontology-query 走 Session 启动)
@@ -217,7 +218,7 @@ node skywalk-sdd/ontology/cli.cjs external-key --validate "<FEAT-...>" --type fe
217
218
  - **选 C** → 终止 propose。
218
219
  4. 验号通过后才 resolve:
219
220
  ```bash
220
- node skywalk-sdd/context-client.cjs --mode=resolve \
221
+ node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --mode=resolve \
221
222
  --external-system=requirement-mgmt \
222
223
  --external-object-type=requirement \
223
224
  --external-id="<REQ-...>" \
@@ -267,6 +268,12 @@ Read openspec/changes/archive/*/ontology-identities.json
267
268
 
268
269
  **❗ 必须主动询问用户,不得默认选择**。Full / Simple / Auto 三种模式的目录结构、适用场景与 AskUserQuestion 文案见 `./reference.md`「§7 文档拆分模式选择」。根据用户选择设置 `mode: full | simple`(Auto 按能力域数量判断),记录到 proposal.md 的 YAML frontmatter。
269
270
 
271
+ ### 7.5 【交互引导】变更类型确认
272
+
273
+ **❗ 必须主动询问用户,不得默认选择**。在模式与测试策略选择附近,基于需求给出 `change-type` **推荐**并让用户确认;Auto 只能推荐,**禁止无提示静默写入**。
274
+
275
+ 允许值固定为:`config | document | report | composite | other`(写入 proposal.md YAML frontmatter 的 `change-type` 字段)。AskUserQuestion 文案与类型说明见 `./reference.md`「§7.5 变更类型选择」。
276
+
270
277
  ### 8. 【交互引导】测试策略选择
271
278
 
272
279
  **❗ 必须主动询问用户,不得默认选择**。TDD / Impl-First / None 三种策略的 DAG 结构、适用场景与 AskUserQuestion 文案见 `./reference.md`「§8 测试策略选择」。根据用户选择设置 `test-strategy: tdd | impl-first | none`,记录到 proposal.md 的 YAML frontmatter。
@@ -315,10 +322,10 @@ Read openspec/changes/archive/*/ontology-identities.json
315
322
  - 每个新增 Capability 必须写成 `[CAP-<CAPABILITY>] <slug>: <说明>`。
316
323
  - 修改既有 Capability 时必须复用已有 CAP ID,不得修改或重新分配已有实体 ID。
317
324
  - 分配新 CAP ID 前必须扫描当前 proposal 和归档中的显式编号;不得只凭标题认定跨 Change 同一性。
318
- - 每个 Change/Capability 同时写人工锚点、`entity-id`、`version-id` 和 `delta-state`。新增时必须调用 `node skywalk-sdd/log.cjs semantic-identity --delta-state=added`,不得手写或复制 UUID。
325
+ - 每个 Change/Capability 同时写人工锚点、`entity-id`、`version-id` 和 `delta-state`。新增时必须调用 `node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" semantic-identity --delta-state=added`,不得手写或复制 UUID。
319
326
  - 修改既有 Capability 时调用 `semantic-identity --delta-state=modified --entity-id=<历史实体UUID> --predecessor-version=<直接前序版本UUID>`;复用实体 UUID,但必须生成新版本 UUID。
320
327
  - 本阶段只声明 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。
328
+ - 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
329
  - 阶段 `stage_end` 会在无 Hook 环境下幂等执行同一次同步作为兜底,结果中的 `semantic_state.artifact_json_paths` 必须包含 proposal 对应 JSON。
323
330
 
324
331
  ## Guardrails
@@ -333,10 +340,11 @@ Read openspec/changes/archive/*/ontology-identities.json
333
340
  - **⛔ 阶段边界**:本阶段禁止执行任何代码创建/修改操作。若用户要求处理代码,回复:「当前处于 Propose 阶段,代码操作请在完成文档后使用 `/opsx-apply` 执行。」
334
341
  - **⛔ 单阶段原则**:完成 proposal.md 后必须立即停止。仅提示用户下一步可运行 `/opsx-spec`,绝对禁止自动执行 spec/design/task 等后续阶段。每个阶段必须由用户主动触发。
335
342
  - **⛔ Frontmatter 规范(L7)**:YAML frontmatter 中禁止写 `#` 注释(YAML 注释在 frontmatter 中可能导致解析问题)。如需说明,在 frontmatter 之前或之后用正文描述。
343
+ - **⛔ change-type 必采**:frontmatter 必须含 `change-type`,取值仅限 `config | document | report | composite | other`;Agent 可推荐但须经用户确认后写入,禁止静默默认。
336
344
 
337
345
  ---
338
346
 
339
347
  ## 渐进披露
340
348
 
341
349
  - Read `checklist.md` 仅在执行 propose 需要校验时 — 含阶段边界⛔(Propose 阶段约束)、§6 需求完整性检查、Guardrails ⛔ 强制项勾选表。
342
- - Read `reference.md` 仅在需要参考详细模板时 — 含 📊 Telemetry 命令模板(start/end)、§7 文档拆分模式(Full/Simple/Auto)、§8 测试策略(TDD/Impl-First/None)、§10 质量红线自检清单(8 项)。
350
+ - Read `reference.md` 仅在需要参考详细模板时 — 含 📊 Telemetry 命令模板(start/end)、§7 文档拆分模式(Full/Simple/Auto)、§7.5 变更类型(config/document/report/composite/other)、§8 测试策略(TDD/Impl-First/None)、§10 质量红线自检清单(8 项)。
@@ -4,15 +4,15 @@ description: opsx-propose 的详细模板:telemetry 命令、文档拆分模
4
4
 
5
5
  # opsx-propose — 详细参考(reference)
6
6
 
7
- > 本文件承载 opsx-propose 的重细节模板:telemetry 命令、§7 文档拆分模式说明、§8 测试策略说明、§10 质量红线自检清单。
7
+ > 本文件承载 opsx-propose 的重细节模板:telemetry 命令、§7 文档拆分模式说明、§7.5 变更类型说明、§8 测试策略说明、§10 质量红线自检清单。
8
8
  > SKILL.md 保留入口骨架与指针;本文件为详细模板来源。
9
9
 
10
10
  ---
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
 
@@ -48,6 +48,31 @@ description: opsx-propose 的详细模板:telemetry 命令、文档拆分模
48
48
 
49
49
  ---
50
50
 
51
+ ## §7.5 变更类型选择
52
+
53
+ **❗ 必须主动询问用户,不得默认选择;Auto 仅给推荐,禁止无提示写入**
54
+
55
+ 分析需求后,Agent 先给出推荐类型,再使用 **AskUserQuestion** 让用户确认:
56
+
57
+ > "📊 **变更类型(用于 V3 指标分层统计)**
58
+ >
59
+ > 根据本次需求,推荐类型:**[config | document | report | composite | other]** — [一句话理由]
60
+ >
61
+ > 请选择或确认:
62
+ > - **config** — 配置/开关/环境/依赖调整,几乎不改业务逻辑
63
+ > - **document** — 文档、规范、模板、注释类变更
64
+ > - **report** — 报告、度量、仪表盘、采集契约类变更
65
+ > - **composite** — 跨多类能力的组合变更
66
+ > - **other** — 以上均不合适时使用
67
+ >
68
+ > A) 采用推荐 B) 手动选择其他类型"
69
+
70
+ 根据用户确认,在 proposal.md YAML frontmatter 写入 `change-type: <值>`。允许值固定:`config | document | report | composite | other`。
71
+
72
+ > 历史 proposal 缺该字段时,报告侧归为 `unknown`;本阶段不得替用户猜测补写。
73
+
74
+ ---
75
+
51
76
  ## §8 测试策略选择
52
77
 
53
78
  **❗ 必须主动询问用户,不得默认选择**
@@ -66,8 +91,8 @@ description: opsx-propose 的详细模板:telemetry 命令、文档拆分模
66
91
 
67
92
  **将用户选择记录到 proposal.md 的 YAML frontmatter 中。**
68
93
 
69
- > 完整策略定义见 opsx-tdd-core/SKILL.md §5
70
- > 交互引导文案见 opsx-tdd-rules/rules/tdd-strategy-selection.md
94
+ > 完整策略定义见 tdd-core/SKILL.md §5
95
+ > 交互引导文案见 tdd-rules/rules/tdd-strategy-selection.md
71
96
 
72
97
  ---
73
98
 
@@ -82,5 +107,6 @@ description: opsx-propose 的详细模板:telemetry 命令、文档拆分模
82
107
  - [ ] 前置依赖使用 checkbox 格式
83
108
  - [ ] 文档末尾包含质量红线检查清单
84
109
  - [ ] 能力分解章节已明确(决定后续 specs 文件夹结构)
110
+ - [ ] frontmatter 含 `change-type`,取值为 `config | document | report | composite | other` 之一且经用户确认
85
111
 
86
112
  **如有任意一项未满足,重新生成对应章节,直至全部通过。**
@@ -19,9 +19,9 @@ allowed-tools:
19
19
  你是一个 SDD 项目规则生成与维护专家。激活本技能后,你将扫描项目事实,为已部署的 Agent 生成或审查规则文件。
20
20
 
21
21
  > **🖥️ 跨平台执行规则**
22
- > - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`),不是 Git 根或工作区根。
23
- > - `openspec` 命令:优先 `node skywalk-sdd/openspec-shim.cjs list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
24
- > - `skywalk-sdd/log.cjs` / `ontology/cli.cjs`:`--project=.` 在 Git 根/工作区根会自动解析;也可 `node skywalk-sdd/ontology/cli.cjs spec-root` 查看路径。
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
 
@@ -1,6 +1,8 @@
1
1
  # opsx-rules 参考 — 落位矩阵与格式模板
2
2
 
3
3
  > **权威源说明**:本文件是 skill **运行时**的落位矩阵真相源(部署到目标项目后无法 `require` kld-sdd 的 `lib/`)。`lib/tool-profiles.js` 中的 `rulesDir` / `rulesFormat` / `rulesWiring` 为 **init 契约与测试断言**;变更时须与本表同步,以本表为准写入规则文件。
4
+ >
5
+ > **边界**:SkyWalk Telemetry 的事件 schema、`run_id`、`test_event_id` 等属于 SDD 工具协议,不属于业务项目规则。生成或 review 五类项目规则时,不把 telemetry 命令或事件字段写入规则正文。
4
6
 
5
7
  ## 落位矩阵
6
8
 
@@ -80,7 +82,7 @@ trigger: always_on
80
82
  |------|--------|----------|----------|
81
83
  | 架构规范 | `architecture` | 目录分层、模块边界、入口 | 分层约定、禁止循环依赖、新代码落位 |
82
84
  | 编码规范 | `coding-style` | 语言、lint、缩进 | 命名、缩进、注释语言、CommonJS/ESM |
83
- | 测试约定 | `testing` | test 目录、框架 | 测试命令、命名、TDD 期望(见 opsx-tdd-core/SKILL.md §5) |
85
+ | 测试约定 | `testing` | test 目录、框架 | 测试命令、命名、TDD 期望(见 tdd-core/SKILL.md §5) |
84
86
  | 数据安全 | `database-safety` | ORM/迁移目录 | 无 DB 时降级为「禁止危险文件操作/敏感数据提交」 |
85
87
  | Git 提交 | `git-commit` | git log 风格、CI | 提交前确认、message 风格、禁止 force push |
86
88
 
@@ -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
- > - `skywalk-sdd/log.cjs` / `ontology/cli.cjs`:`--project=.` Git 根/工作区根会自动解析;也可 `node skywalk-sdd/ontology/cli.cjs spec-root` 查看路径。
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>" \
@@ -214,7 +214,7 @@ node skywalk-sdd/context-client.cjs \
214
214
  - 需求项使用 `####`(4个#)
215
215
  - 场景使用 `#####`(5个#)
216
216
 
217
- **⛔ 多校验拆分规则(TDD 关键)**:当单个 STMT 包含多个"必须校验"条件时,每个校验条件必须有对应的独立 AC 场景。规则详见 `opsx-tdd-rules/rules/multi-validation-split.md`
217
+ **⛔ 多校验拆分规则(TDD 关键)**:当单个 STMT 包含多个"必须校验"条件时,每个校验条件必须有对应的独立 AC 场景。规则详见 `tdd-rules/rules/multi-validation-split.md`
218
218
 
219
219
  ### 6.5 【Node 版本约束来源校验】
220
220
 
@@ -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
 
@@ -34,7 +34,7 @@ description: opsx-spec 的阶段强制检查点与自检清单。仅在执行 sp
34
34
  - [ ] 已消费工程知识库 `answeredQuestions`,没有重复询问历史事实已经回答的问题
35
35
  - [ ] 仅将 `reuseMode=INHERIT` 的事实作为身份继承;`REFERENCE` 候选使用新实体身份
36
36
  - [ ] 已处理与当前 Capability 有关的 `clarificationQuestions`
37
- - [ ] ⛔ **多校验拆分(TDD 模式)**:当 test-strategy=tdd 时,单个 STMT 包含多个"必须校验"条件时,每个校验条件有对应的独立 AC 场景(规则见 `opsx-tdd-rules/rules/multi-validation-split.md`)
37
+ - [ ] ⛔ **多校验拆分(TDD 模式)**:当 test-strategy=tdd 时,单个 STMT 包含多个"必须校验"条件时,每个校验条件有对应的独立 AC 场景(规则见 `tdd-rules/rules/multi-validation-split.md`)
38
38
 
39
39
  **如有任意一项未满足,重新生成对应章节,直至全部通过。** 自检完成后必须输出结构化自检报告(模板见 `./reference.md`「§7 质量自检报告模板」),未通过项自动修复后重新输出。
40
40
 
@@ -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
 
@@ -32,7 +32,7 @@ allowed-tools:
32
32
  > 1. 检查 proposal.md frontmatter `kb-status`:若 `degraded(by-user-choice)` → 跳过 KB,仅用本地上下文。
33
33
  > 2. 否则运行 KB 就绪检查:
34
34
  > ```bash
35
- > node skywalk-sdd/context-client.cjs --check-only
35
+ > node "$(cat .sdd-spec-root)/skywalk-sdd/context-client.cjs" --check-only
36
36
  > ```
37
37
  > - `"available": true` → 若需查历史任务参考,先 `Read` `opsx-ontology-query/phase-2-during.md` §2
38
38
  > - `"available": false` → **KB 不可用不阻塞 task 流程**,仅跳过历史任务追溯参考
@@ -48,8 +48,8 @@ allowed-tools:
48
48
 
49
49
  > **🖥️ 跨平台执行规则**
50
50
  > - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`),不是 Git 根或工作区根。
51
- > - `openspec` 命令:优先 `node skywalk-sdd/openspec-shim.cjs list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
52
- > - `skywalk-sdd/log.cjs` / `ontology/cli.cjs`:`--project=.` Git 根/工作区根会自动解析;也可 `node skywalk-sdd/ontology/cli.cjs spec-root` 查看路径。
51
+ > - `openspec` 命令:优先 `node "$(cat .sdd-spec-root)/skywalk-sdd/openspec-shim.cjs" list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
52
+ > - 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`。
53
53
  > - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
54
54
  > - ${SHELL_GUIDANCE}
55
55
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
@@ -150,8 +150,8 @@ Simple 模式或单文件能力域下,**不要拆成多个同文件任务**。
150
150
 
151
151
  **若未设置**:使用 **AskUserQuestion** 工具询问(A/B/C 三选一)
152
152
 
153
- > 完整策略定义见 opsx-tdd-core/SKILL.md §5
154
- > 交互引导文案见 opsx-tdd-rules/rules/tdd-strategy-selection.md
153
+ > 完整策略定义见 tdd-core/SKILL.md §5
154
+ > 交互引导文案见 tdd-rules/rules/tdd-strategy-selection.md
155
155
 
156
156
  ### 6. 【交互引导】确认任务拆解策略
157
157
 
@@ -185,19 +185,19 @@ Simple 模式或单文件能力域下,**不要拆成多个同文件任务**。
185
185
  4. GREEN 不得包含未测试的 Controller/Filter/Config
186
186
  5. 非 TDD 模块(前端 UI/配置/SQL DDL)不拆红绿
187
187
  6. Controller 层策略必须在 tasks.md §2.0 中声明(策略 A 或 B),两种策略都必须生成测试任务
188
- 7. ⛔ **GREEN 任务 YAGNI 围栏**:每个 GREEN-N 任务描述末尾必须包含"不提前实现 [后续 RED 行为]"围栏声明。规则详见 `opsx-tdd-rules/rules/green-yagni-fence.md`
188
+ 7. ⛔ **GREEN 任务 YAGNI 围栏**:每个 GREEN-N 任务描述末尾必须包含"不提前实现 [后续 RED 行为]"围栏声明。规则详见 `tdd-rules/rules/green-yagni-fence.md`
189
189
  8. ⛔ **TDD 模式 DAG 并行标注**:当 `test-strategy=tdd` 时,DAG 拓扑图中每个 RED→GREEN 对必须标注 `⛔ 串行:不可同层并行`。同层存在多个 RED→GREEN 对时,必须在拓扑图中显式注明"本层 RED→GREEN 对须逐对串行执行,禁止并行派发"。非 TDD 模块的同层任务(如 UI/配置/SQL DDL)仍可并行。
190
190
 
191
191
  ⛔ BEFORE 生成 TDD 任务,必须读取:
192
- 1. opsx-tdd-core/reference.md §6(DAG 生成规则表)
193
- 2. opsx-tdd-rules/rules/dag-generation-rules.md(DAG 规则文件)
194
- 3. opsx-tdd-rules/rules/controller-strategy.md(Controller 策略 A/B)
195
- 4. opsx-tdd-rules/rules/exception-path-coverage.md(异常路径测试覆盖门禁)
192
+ 1. tdd-core/reference.md §6(DAG 生成规则表)
193
+ 2. tdd-rules/rules/dag-generation-rules.md(DAG 规则文件)
194
+ 3. tdd-rules/rules/controller-strategy.md(Controller 策略 A/B)
195
+ 4. tdd-rules/rules/exception-path-coverage.md(异常路径测试覆盖门禁)
196
196
  读取后确认:"已读取 N 个规则文件"。
197
197
 
198
- > 完整 TDD 拆分示例见 opsx-tdd-core/reference.md §4
199
- > 非 TDD 模块定义见 opsx-tdd-rules/rules/non-tdd-modules.md
200
- > 任务类型定义见 opsx-tdd-rules/rules/task-type-definitions.md
198
+ > 完整 TDD 拆分示例见 tdd-core/reference.md §4
199
+ > 非 TDD 模块定义见 tdd-rules/rules/non-tdd-modules.md
200
+ > 任务类型定义见 tdd-rules/rules/task-type-definitions.md
201
201
 
202
202
  ### 8. 质量红线自检
203
203
 
@@ -236,7 +236,7 @@ Simple 模式或单文件能力域下,**不要拆成多个同文件任务**。
236
236
  - 每个 TASK 必须同时写 `entity-id`、`version-id` 和 `delta-state`;新增任务调用 `semantic-identity --delta-state=added`,不得复用其他任务 UUID。
237
237
  - 每个 TASK 必须写 `**implements**: DES-*` 或 `**covers**: STMT-*`,不得生成无上游来源任务。
238
238
  - 任务依赖必须写 `**dependsOn**: TASK-*`;无依赖显式写“无”,所有依赖必须构成 DAG。
239
- - 生成结束后必须运行 `node skywalk-sdd/log.cjs semantic-reconcile --project=. --change=<name>`。
239
+ - 生成结束后必须运行 `node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" semantic-reconcile --project=. --change=<name>`。
240
240
  - reconcile 必须立即生成 `openspec/changes/<name>/artifacts/.../tasks.ontology.json`,包含 TASK、implements/covers/dependsOn 及原文 source;不得推迟到 check/archive。
241
241
  - 阶段 `stage_end` 会在无 Hook 环境下幂等执行同步兜底。
242
242
 
@@ -39,10 +39,10 @@ description: opsx-task 的阶段强制检查点与自检清单。仅在执行 ta
39
39
 
40
40
  ## §8.1 TDD 合规性自检(仅 test-strategy=tdd 时)
41
41
 
42
- ⛔ 执行 `opsx-tdd-core/checklist.md` §B(11 项)逐项检查。
42
+ ⛔ 执行 `tdd-core/checklist.md` §B(11 项)逐项检查。
43
43
 
44
- > 不在此内联复制,以 opsx-tdd-core/checklist.md §B 为唯一真相源。
45
- > 额外补充:还需检查 `opsx-tdd-rules/rules/exception-path-coverage.md`(异常路径覆盖门禁)——每个 orElseThrow/边界检查须有对应 RED 任务。
44
+ > 不在此内联复制,以 tdd-core/checklist.md §B 为唯一真相源。
45
+ > 额外补充:还需检查 `tdd-rules/rules/exception-path-coverage.md`(异常路径覆盖门禁)——每个 orElseThrow/边界检查须有对应 RED 任务。
46
46
 
47
47
  ---
48
48
 
@@ -11,14 +11,14 @@ description: opsx-task 的详细模板:telemetry 命令、DAG 生成规则表
11
11
 
12
12
  ## 📊 Telemetry 命令模板(必做,不得跳过)
13
13
 
14
- > 阶段开始:`node skywalk-sdd/log.cjs start --command=task --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
15
- > 阶段结束:`node skywalk-sdd/log.cjs end --event-id=<event_id> --command=task --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=task --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=task --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
16
16
 
17
17
  ---
18
18
 
19
19
  ## §6 DAG 生成规则表
20
20
 
21
- > 完整规则见 `opsx-tdd-rules/rules/dag-generation-rules.md`,此处仅保留快速参考。
21
+ > 完整规则见 `tdd-rules/rules/dag-generation-rules.md`,此处仅保留快速参考。
22
22
 
23
23
  **根据 test-strategy 调整 DAG 生成规则:**
24
24
 
@@ -52,7 +52,7 @@ spec.md user-auth 定义了 7 个场景,拆为 7 对 RED+GREEN + 1 个 REFACTO
52
52
  | TASK-05-GREEN-6 | 登出实现 | 实现-GREEN | TASK-05-RED-6 | 让 RED-6 通过。仅实现当前 RED 测试覆盖的行为路径,不提前实现后续 capability 的功能。 |
53
53
  | TASK-05-REFACTOR | 重构优化 | 重构-REFACTOR | TASK-05-GREEN-6 | 所有测试仍绿,代码清理 |
54
54
 
55
- > GREEN 任务的 YAGNI 围栏生成规则详见 `opsx-tdd-rules/rules/green-yagni-fence.md`
55
+ > GREEN 任务的 YAGNI 围栏生成规则详见 `tdd-rules/rules/green-yagni-fence.md`
56
56
 
57
57
  **关键区别**:
58
58
  - 每个 RED 任务都带**真实断言**,跑起来确实失败
@@ -86,7 +86,7 @@ spec.md user-auth 定义了 7 个场景,拆为 7 对 RED+GREEN + 1 个 REFACTO
86
86
 
87
87
  ## §6.2 非 TDD 模块处理规则
88
88
 
89
- > 完整规则见 `opsx-tdd-rules/rules/non-tdd-modules.md`,此处仅保留快速参考。
89
+ > 完整规则见 `tdd-rules/rules/non-tdd-modules.md`,此处仅保留快速参考。
90
90
 
91
91
  以下模块不需要红绿循环,按常规任务处理:
92
92
  - 前端 UI 页面(Vue 组件)→ UI层任务
@@ -25,14 +25,14 @@ allowed-tools:
25
25
 
26
26
  > **🖥️ 跨平台执行规则**
27
27
  > - **SDD 文档根** = `*-sdd-specs` 包裹包(含 `openspec/`、`modules.yaml`),不是 Git 根或工作区根。
28
- > - `openspec` 命令:优先 `node skywalk-sdd/openspec-shim.cjs list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
29
- > - `skywalk-sdd/log.cjs` / `ontology/cli.cjs`:`--project=.` Git 根/工作区根会自动解析;也可 `node skywalk-sdd/ontology/cli.cjs spec-root` 查看路径。
28
+ > - `openspec` 命令:优先 `node "$(cat .sdd-spec-root)/skywalk-sdd/openspec-shim.cjs" list`(自动 cd 到包裹包),或先 `cd` 到包裹包再执行。
29
+ > - 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`。
30
30
  > - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
31
31
  > - ${SHELL_GUIDANCE}
32
32
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
33
33
  > **📊 Telemetry(必做,不得跳过)**
34
- > - 阶段开始:`node skywalk-sdd/log.cjs start --command=test --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
35
- > - 阶段结束:`node skywalk-sdd/log.cjs end --event-id=<event_id> --command=test --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
34
+ > - 阶段开始:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" start --command=test --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
35
+ > - 阶段结束:`node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" end --event-id=<event_id> --command=test --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
36
36
 
37
37
  ---
38
38
 
@@ -105,13 +105,15 @@ allowed-tools:
105
105
 
106
106
  ### 4a. 【M3 Telemetry】记录测试结果
107
107
 
108
- 测试执行完成后,在 stage_end 之前记录 `test_result` 事件:
108
+ 每一次真实测试执行只记录一条 `test_result`,不得把同一次命令的结果复制到多个任务,也不得用估算值补齐用例数。测试执行完成后,在 stage_end 之前记录:
109
109
 
110
110
  ```bash
111
- node skywalk-sdd/log.cjs record --type=test_result --command=test --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="[passed]/[total] passed" --details-json="{\"test_results\":{\"command\":\"<实际测试命令>\",\"passed\":<passed>,\"failed\":<failed>,\"skipped\":<skipped>,\"coverage\":<coverage>,\"duration_ms\":<duration_ms>}}"
111
+ node "$(cat .sdd-spec-root)/skywalk-sdd/log.cjs" record --strict --type=test_result --command=test --project=. --change=<变更名称> --capability=<可选capability-name> --task-id=<首个TASK-ID> --run-id=<本次真实执行的稳定ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="<人能看懂的测试结论>" --details-json="{\"test_results\":{\"snapshot_kind\":\"final\",\"verified_task_ids\":[\"<TASK-ID-1>\",\"<TASK-ID-2>\"],\"tdd_phase\":\"<red|green|refactor|regression|not-applicable>\",\"command\":\"<实际测试命令>\",\"exit_code\":<退出码>,\"counts_known\":<true|false>,\"passed\":<counts_known=true时填写>,\"failed\":<counts_known=true时填写>,\"skipped\":<counts_known=true时填写>,\"duration_ms\":<实测毫秒>,\"failure_type\":\"<assertion|contract|compile|infrastructure|timeout|none>\",\"expected_failure\":<仅RED预期失败时true>}}"
112
112
  ```
113
113
 
114
- 此事件供 report `test_pass_summary` 采集(M3),确保报告能显示真实测试通过率。
114
+ `run_id` 在同一次执行重试写入时必须保持不变:相同内容会幂等跳过,不同内容会被判为冲突。`counts_known=false` 时省略 `passed/failed/skipped`,绝不写虚构的 `0`。RED 只有在 `expected_failure=true`、退出码非 0 且失败类型为 `assertion` 或 `contract` 时才是有效 RED;基础设施或编译错误不算。
115
+
116
+ 此事件供任务完成证据和最终报告采集。最终回归必须写 `snapshot_kind:"final"`;一次执行覆盖多个任务时用去重的 `verified_task_ids`,仍只写一条事件。后续 `task_update` 只引用本事件返回的 `event_id`,不再内嵌或复制测试计数。
115
117
 
116
118
  > **⚠️ P1-4 coverage 不得为 null**:`test_results.coverage` 必须填实测覆盖率数值(跑了 `--coverage` 就填数值,如 `86.5`);未跑 `--coverage` 时填字符串 `"not-run"` 并在 summary 说明原因。**禁止填 `null`**。若 `proposal.md` 含"覆盖率 ≥ X%"验收标准,强制使用 `--coverage` 运行测试。
117
119
 
@@ -148,8 +150,8 @@ node skywalk-sdd/log.cjs record --type=test_result --command=test --project=. --
148
150
  - [ ] 无"生产类中加测试专用方法"
149
151
  - [ ] 无"不理解依赖就 mock"
150
152
 
151
- > 完整 12 项反模式检测见 opsx-tdd-anti-patterns/SKILL.md §4
152
- > TDD 报告模式见 opsx-tdd-review/SKILL.md §3
153
+ > 完整 12 项反模式检测见 tdd-anti-patterns/SKILL.md §4
154
+ > TDD 报告模式见 tdd-review/SKILL.md §3
153
155
 
154
156
  ### 6. 【交互引导】根据结果引导下一步
155
157