kld-sdd 2.6.12 → 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 (81) hide show
  1. package/README.md +20 -0
  2. package/kld-sdd-guide.html +429 -159
  3. package/lib/init.js +40 -7
  4. package/package.json +5 -2
  5. package/skywalk-sdd/index.cjs +2668 -415
  6. package/skywalk-sdd/metrics-v3.cjs +1153 -0
  7. package/skywalk-sdd/ontology/archive-package.cjs +114 -3
  8. package/skywalk-sdd/ontology/resolve-spec-root.cjs +20 -80
  9. package/skywalk-sdd/ontology/working-artifacts.cjs +2 -1
  10. package/templates/hooks/claude/hooks/sdd-apply-test-gate.cjs +39 -9
  11. package/templates/hooks/claude/hooks/sdd-post-tool.cjs +87 -8
  12. package/templates/hooks/claude/hooks/sdd-prompt.cjs +3 -1
  13. package/templates/hooks/codebuddy/hooks/sdd-apply-test-gate.cjs +39 -9
  14. package/templates/hooks/codebuddy/hooks/sdd-post-tool.cjs +87 -9
  15. package/templates/hooks/codebuddy/hooks/sdd-prompt.cjs +3 -1
  16. package/templates/skills/kld-sdd/opsx-apply/SKILL.md +14 -13
  17. package/templates/skills/kld-sdd/opsx-apply/checklist.md +20 -20
  18. package/templates/skills/kld-sdd/opsx-apply/implementer-prompt.md +12 -12
  19. package/templates/skills/kld-sdd/opsx-apply/reference.md +32 -31
  20. package/templates/skills/kld-sdd/opsx-archive/SKILL.md +44 -6
  21. package/templates/skills/kld-sdd/opsx-archive/checklist.md +4 -1
  22. package/templates/skills/kld-sdd/opsx-check/SKILL.md +19 -11
  23. package/templates/skills/kld-sdd/opsx-check/checklist.md +7 -6
  24. package/templates/skills/kld-sdd/opsx-design/SKILL.md +1 -1
  25. package/templates/skills/kld-sdd/opsx-design/checklist.md +1 -1
  26. package/templates/skills/kld-sdd/opsx-propose/SKILL.md +9 -1
  27. package/templates/skills/kld-sdd/opsx-propose/reference.md +29 -3
  28. package/templates/skills/kld-sdd/opsx-rules/reference.md +3 -1
  29. package/templates/skills/kld-sdd/opsx-spec/SKILL.md +1 -1
  30. package/templates/skills/kld-sdd/opsx-spec/checklist.md +1 -1
  31. package/templates/skills/kld-sdd/opsx-task/SKILL.md +10 -10
  32. package/templates/skills/kld-sdd/opsx-task/checklist.md +3 -3
  33. package/templates/skills/kld-sdd/opsx-task/reference.md +3 -3
  34. package/templates/skills/kld-sdd/opsx-test/SKILL.md +7 -5
  35. package/templates/skills/kld-sdd/{opsx-tdd-anti-patterns → tdd-anti-patterns}/SKILL.md +4 -4
  36. package/templates/skills/kld-sdd/{opsx-tdd-anti-patterns → tdd-anti-patterns}/reference.md +4 -4
  37. package/templates/skills/kld-sdd/{opsx-tdd-core → tdd-core}/SKILL.md +13 -13
  38. package/templates/skills/kld-sdd/{opsx-tdd-core → tdd-core}/checklist.md +5 -5
  39. package/templates/skills/kld-sdd/{opsx-tdd-core → tdd-core}/reference.md +12 -12
  40. package/templates/skills/kld-sdd/{opsx-tdd-metrics → tdd-metrics}/SKILL.md +3 -3
  41. package/templates/skills/kld-sdd/{opsx-tdd-metrics → tdd-metrics}/checklist.md +2 -2
  42. package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/SKILL.md +2 -2
  43. package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/parameterized-testing.md +1 -1
  44. package/templates/skills/kld-sdd/{opsx-tdd-review → tdd-review}/SKILL.md +5 -5
  45. package/templates/skills/kld-sdd/{opsx-tdd-review → tdd-review}/checklist.md +5 -5
  46. package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/SKILL.md +3 -3
  47. package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/non-tdd-modules.md +1 -1
  48. package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/refactor-checklist.md +1 -1
  49. package/templates/skills/kld-sdd/tdd-rules/rules/test-skeleton-telemetry.md +19 -0
  50. package/templates/skills/kld-sdd/opsx-tdd-rules/rules/test-skeleton-telemetry.md +0 -19
  51. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/cause-effect-clarity.md +0 -0
  52. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/clean-test-data.md +0 -0
  53. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/existing-test-awareness.md +0 -0
  54. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/given-when-then.md +0 -0
  55. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/good-test-qualities.md +0 -0
  56. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/mock-boundary.md +0 -0
  57. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/naming-conventions.md +0 -0
  58. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/no-logic-in-tests.md +0 -0
  59. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/one-test-one-scenario.md +0 -0
  60. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/prefer-public-apis.md +0 -0
  61. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/general/test-behaviors-not-methods.md +0 -0
  62. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/java/argument-matching.md +0 -0
  63. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/java/controller-test-rules.md +0 -0
  64. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/java/domain-service-rules.md +0 -0
  65. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/java/java-test-template.md +0 -0
  66. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/java/json-serialization.md +0 -0
  67. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/java/logging-rules.md +0 -0
  68. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/post-generation/compilation-verification.md +0 -0
  69. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/post-generation/execution-verification.md +0 -0
  70. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/python/py-test-template.md +0 -0
  71. /package/templates/skills/kld-sdd/{opsx-tdd-quality → tdd-quality}/rules/typescript/ts-test-template.md +0 -0
  72. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/controller-strategy.md +0 -0
  73. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/dag-generation-rules.md +0 -0
  74. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/des-step-annotation.md +0 -0
  75. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/exception-path-coverage.md +0 -0
  76. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/green-scope-declaration.md +0 -0
  77. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/green-yagni-fence.md +0 -0
  78. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/multi-validation-split.md +0 -0
  79. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/task-type-definitions.md +0 -0
  80. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/tdd-strategy-selection.md +0 -0
  81. /package/templates/skills/kld-sdd/{opsx-tdd-rules → tdd-rules}/rules/test-execution-gate.md +0 -0
package/lib/init.js CHANGED
@@ -822,6 +822,35 @@ function deployTelemetryDataDir(targetCwd = process.cwd()) {
822
822
  console.log(` ⚠️ Telemetry CLI 源文件缺失: ${telemetrySrc}`);
823
823
  }
824
824
 
825
+ const metricsV3Src = path.join(pkgPath, 'skywalk-sdd', 'metrics-v3.cjs');
826
+ const metricsV3Dst = path.join(dataDir, 'metrics-v3.cjs');
827
+ if (fs.existsSync(metricsV3Src)) {
828
+ fs.copyFileSync(metricsV3Src, metricsV3Dst);
829
+ console.log(' ✓ 部署 skywalk-sdd/metrics-v3.cjs(V3 指标运行时)');
830
+ } else {
831
+ console.log(` ⚠️ V3 指标模块源文件缺失: ${metricsV3Src}(report/metrics 可能无法加载 metrics-v3)`);
832
+ }
833
+
834
+ const runtimeMetadataSrc = path.join(pkgPath, 'skywalk-sdd', 'runtime-metadata.cjs');
835
+ const runtimeMetadataDst = path.join(dataDir, 'runtime-metadata.cjs');
836
+ if (fs.existsSync(runtimeMetadataSrc)) {
837
+ fs.copyFileSync(runtimeMetadataSrc, runtimeMetadataDst);
838
+ const packageVersion = require(path.join(pkgPath, 'package.json')).version;
839
+ fs.writeFileSync(path.join(dataDir, 'runtime-metadata.json'), `${JSON.stringify({
840
+ schema_version: 'kld-sdd-runtime-metadata/v1',
841
+ package_name: '@hunterzheng/kld-sdd',
842
+ version: packageVersion,
843
+ }, null, 2)}\n`, 'utf8');
844
+ console.log(` ✓ 部署 kld-sdd 运行时身份(${packageVersion})`);
845
+ }
846
+
847
+ const reportingSrc = path.join(pkgPath, 'skywalk-sdd', 'reporting');
848
+ const reportingDst = path.join(dataDir, 'reporting');
849
+ if (fs.existsSync(reportingSrc)) {
850
+ copyDir(reportingSrc, reportingDst);
851
+ console.log(' ✓ 部署 skywalk-sdd/reporting/(V3 单次变更报告)');
852
+ }
853
+
825
854
  const contextClientSrc = path.join(pkgPath, 'skywalk-sdd', 'context-client.cjs');
826
855
  const contextClientDst = path.join(dataDir, 'context-client.cjs');
827
856
  if (fs.existsSync(contextClientSrc)) {
@@ -873,16 +902,20 @@ function installGitHookShim(cwd, hookName, scriptPath, options = {}) {
873
902
  // Git 把 commit-msg 文件路径放在 $1;--project 等额外参数必须跟在 "$@" 后面,
874
903
  // 否则 trailer 脚本会把 --project=… 误当成 message 文件(argv[2])。
875
904
  const extraArgs = options.extraArgs || '';
876
- const nodeLine = extraArgs
877
- ? ` node "${scriptPath}" "$@" ${extraArgs}`
878
- : ` node "${scriptPath}" "$@"`;
905
+ // Windows 反斜杠路径在 #!/bin/sh(Git for Windows MSYS2)中不被 [ -f ] 和 node 识别,
906
+ // 统一转为正斜杠,确保 hook shim 跨平台可执行。
907
+ const shScriptPath = scriptPath.replace(/\\/g, '/');
908
+ const shExtraArgs = extraArgs.replace(/\\/g, '/');
909
+ const nodeLine = shExtraArgs
910
+ ? ` node "${shScriptPath}" "$@" ${shExtraArgs}`
911
+ : ` node "${shScriptPath}" "$@"`;
879
912
  const shim = [
880
913
  '#!/bin/sh',
881
914
  `# ${marker}`,
882
- `if [ -f "${scriptPath}" ]; then`,
915
+ `if [ -f "${shScriptPath}" ]; then`,
883
916
  nodeLine,
884
917
  'else',
885
- ` echo "[kld-sdd] Hook 脚本不存在: ${scriptPath}" >&2`,
918
+ ` echo "[kld-sdd] Hook 脚本不存在: ${shScriptPath}" >&2`,
886
919
  ' exit 1',
887
920
  'fi',
888
921
  '',
@@ -892,7 +925,7 @@ function installGitHookShim(cwd, hookName, scriptPath, options = {}) {
892
925
  const existing = fs.readFileSync(hookPath, 'utf8');
893
926
  if (existing.includes(marker)) {
894
927
  // 已是 SDD shim:若指向路径变化(如改为引用 spec 仓),允许覆盖升级
895
- if (existing.includes(scriptPath) && (!extraArgs || existing.includes(extraArgs.trim()))) {
928
+ if (existing.includes(shScriptPath) && (!shExtraArgs || existing.includes(shExtraArgs.trim()))) {
896
929
  console.log(` ✓ .git/hooks/${hookName} 已包含 SDD 质量门禁`);
897
930
  return;
898
931
  }
@@ -951,7 +984,7 @@ function installCodeRepoCommitMsgHook(codeRepoRoot, specRepoRoot, options = {})
951
984
  return false;
952
985
  }
953
986
  installGitHookShim(cwd, 'commit-msg', ensured.scriptPath, {
954
- extraArgs: `--project=${cwd}`,
987
+ extraArgs: `"--project=${cwd}"`,
955
988
  });
956
989
  return true;
957
990
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kld-sdd",
3
- "version": "2.6.12",
3
+ "version": "2.6.13",
4
4
  "description": "KLD SDD OpenSpec 项目初始化工具 - 一键部署 SDD skills",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -8,7 +8,7 @@
8
8
  "kld-sdd-init": "bin/kld-sdd-init.js"
9
9
  },
10
10
  "scripts": {
11
- "test": "node test/external-key.cjs && node test/change-key.cjs && node test/modules-and-sdd-config.cjs && node test/active-changes.cjs && node test/hook-layouts.cjs && node test/spec-package-init.cjs && node test/workspace-layout.cjs && node test/ontology-release-blockers.cjs && node test/ontology-semantic-core.cjs && node test/ontology-identity-versioning.cjs && node test/ontology-identity-continuity.cjs && node test/ontology-state-transaction.cjs && node test/ontology-process-concurrency.cjs && node test/ontology-observer-convergence.cjs && node test/ontology-working-runtime.cjs && node test/ontology-stage-materialization.cjs && node test/ontology-template-contract.cjs && node test/ontology-cli-archive.cjs && node test/archive-package-producer.cjs && node test/validate-skills-bundle.cjs && node test/tool-profiles.cjs && node test/settings-merge.cjs && node test/command-bridge.cjs && node test/codebuddy-hooks.cjs && node test/skill-content-contract.cjs && node test/init-agent-profiles.cjs"
11
+ "test": "node test/external-key.cjs && node test/change-key.cjs && node test/modules-and-sdd-config.cjs && node test/active-changes.cjs && node test/hook-layouts.cjs && node test/spec-package-init.cjs && node test/workspace-layout.cjs && node test/ontology-release-blockers.cjs && node test/ontology-semantic-core.cjs && node test/ontology-identity-versioning.cjs && node test/ontology-identity-continuity.cjs && node test/ontology-state-transaction.cjs && node test/ontology-process-concurrency.cjs && node test/ontology-observer-convergence.cjs && node test/ontology-working-runtime.cjs && node test/ontology-stage-materialization.cjs && node test/ontology-template-contract.cjs && node test/ontology-cli-archive.cjs && node test/archive-package-producer.cjs && node --test test/change-report-correctness.cjs test/report-metrics-correctness.cjs test/change-report-model-ui.cjs && node test/validate-skills-bundle.cjs && node test/tool-profiles.cjs && node test/settings-merge.cjs && node test/command-bridge.cjs && node test/codebuddy-hooks.cjs && node test/skill-content-contract.cjs && node test/init-agent-profiles.cjs && node test/init-report-runtime.cjs"
12
12
  },
13
13
  "keywords": [
14
14
  "kld",
@@ -32,6 +32,9 @@
32
32
  "templates/",
33
33
  "kld-sdd-guide.html",
34
34
  "skywalk-sdd/index.cjs",
35
+ "skywalk-sdd/metrics-v3.cjs",
36
+ "skywalk-sdd/runtime-metadata.cjs",
37
+ "skywalk-sdd/reporting/",
35
38
  "skywalk-sdd/context-client.cjs",
36
39
  "skywalk-sdd/ontology/",
37
40
  "skywalk-sdd/apply-worktree-finish.cjs",