kld-sdd 2.4.9 → 2.4.10

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 (30) hide show
  1. package/lib/init.js +9 -9
  2. package/package.json +2 -2
  3. package/skywalk-sdd/{index.js → index.cjs} +31 -25
  4. package/templates/ci/github-actions-sdd.yml +3 -3
  5. package/templates/ci/gitlab-ci-sdd.yml +3 -3
  6. package/templates/git-hooks/{pre-push-sdd-check.js → pre-push-sdd-check.cjs} +1 -1
  7. package/templates/hooks/claude/hooks/{sdd-prompt.js → sdd-prompt.cjs} +2 -2
  8. package/templates/hooks/claude/hooks/{sdd-stop.js → sdd-stop.cjs} +1 -1
  9. package/templates/hooks/claude/settings.json +4 -4
  10. package/templates/opsx-commands/apply.md +11 -9
  11. package/templates/opsx-commands/archive.md +8 -8
  12. package/templates/opsx-commands/check.md +8 -8
  13. package/templates/opsx-commands/design.md +3 -3
  14. package/templates/opsx-commands/explore.md +3 -3
  15. package/templates/opsx-commands/propose.md +3 -3
  16. package/templates/opsx-commands/spec.md +3 -3
  17. package/templates/opsx-commands/task.md +3 -3
  18. package/templates/opsx-commands/test.md +5 -5
  19. package/templates/skills/opsx-apply/SKILL.md +8 -4
  20. package/templates/skills/opsx-archive/SKILL.md +8 -8
  21. package/templates/skills/opsx-check/SKILL.md +6 -6
  22. package/templates/skills/opsx-design/SKILL.md +2 -2
  23. package/templates/skills/opsx-explore/SKILL.md +2 -2
  24. package/templates/skills/opsx-propose/SKILL.md +2 -2
  25. package/templates/skills/opsx-spec/SKILL.md +2 -2
  26. package/templates/skills/opsx-task/SKILL.md +2 -2
  27. package/templates/skills/opsx-test/SKILL.md +2 -2
  28. /package/templates/git-hooks/{pre-commit-sdd-check.js → pre-commit-sdd-check.cjs} +0 -0
  29. /package/templates/hooks/claude/hooks/{sdd-post-tool.js → sdd-post-tool.cjs} +0 -0
  30. /package/templates/hooks/claude/hooks/{sdd-pre-tool.js → sdd-pre-tool.cjs} +0 -0
package/lib/init.js CHANGED
@@ -566,7 +566,7 @@ function deployOpsxSkills(selectedTools = Object.keys(TOOL_CONFIGS)) {
566
566
 
567
567
  /**
568
568
  * 部署 Claude Code Hook Pack(可选增强)
569
- * Hook 只调用 skywalk-sdd/log.js,不写私有日志,不替代 OPSX 模板采集。
569
+ * Hook 只调用 skywalk-sdd/log.cjs,不写私有日志,不替代 OPSX 模板采集。
570
570
  */
571
571
  function deployClaudeHookPack(selectedTools = Object.keys(TOOL_CONFIGS)) {
572
572
  if (!selectedTools.includes('claude')) {
@@ -593,7 +593,7 @@ function deployClaudeHookPack(selectedTools = Object.keys(TOOL_CONFIGS)) {
593
593
  }
594
594
 
595
595
  copyDir(hookSourceDir, targetHookDir);
596
- console.log(' ✓ 部署 .claude/hooks/sdd-*.js');
596
+ console.log(' ✓ 部署 .claude/hooks/sdd-*.cjs');
597
597
 
598
598
  const targetSettingsPath = path.join(claudeDir, 'settings.json');
599
599
  const templateSettings = JSON.parse(fs.readFileSync(settingsTemplatePath, 'utf8'));
@@ -790,16 +790,16 @@ function deployTelemetryDataDir() {
790
790
  }
791
791
 
792
792
  // 部署项目内 Telemetry CLI(不依赖 npm 发布)
793
- const telemetrySrc = path.join(pkgPath, 'skywalk-sdd', 'index.js');
794
- const telemetryDst = path.join(dataDir, 'log.js');
793
+ const telemetrySrc = path.join(pkgPath, 'skywalk-sdd', 'index.cjs');
794
+ const telemetryDst = path.join(dataDir, 'log.cjs');
795
795
  if (fs.existsSync(telemetrySrc)) {
796
796
  fs.copyFileSync(telemetrySrc, telemetryDst);
797
- console.log(' ✓ 部署 skywalk-sdd/log.js(本地 Telemetry CLI)');
797
+ console.log(' ✓ 部署 skywalk-sdd/log.cjs(本地 Telemetry CLI)');
798
798
  } else {
799
799
  console.log(` ⚠️ Telemetry CLI 源文件缺失: ${telemetrySrc}`);
800
800
  }
801
801
 
802
- console.log(' ✓ 调用方式: node skywalk-sdd/log.js start|end|metrics');
802
+ console.log(' ✓ 调用方式: node skywalk-sdd/log.cjs start|end|metrics');
803
803
  console.log('✅ Telemetry 已就绪(数据存储在 skywalk-sdd/,无需配置 MCP)');
804
804
  return true;
805
805
  }
@@ -869,8 +869,8 @@ function deployQualityGateTemplates() {
869
869
  console.log(` ⚠️ CI 模板缺失: ${ciTemplateDir}`);
870
870
  }
871
871
 
872
- installGitHookShim(cwd, 'pre-commit', 'skywalk-sdd/git-hooks/pre-commit-sdd-check.js');
873
- installGitHookShim(cwd, 'pre-push', 'skywalk-sdd/git-hooks/pre-push-sdd-check.js');
872
+ installGitHookShim(cwd, 'pre-commit', 'skywalk-sdd/git-hooks/pre-commit-sdd-check.cjs');
873
+ installGitHookShim(cwd, 'pre-push', 'skywalk-sdd/git-hooks/pre-push-sdd-check.cjs');
874
874
 
875
875
  console.log('✅ Git hooks / CI 兜底模板已就绪');
876
876
  return true;
@@ -1086,7 +1086,7 @@ async function main() {
1086
1086
  console.log();
1087
1087
  console.log('📊 SDD Telemetry(嵌入在命令流程中,自动执行,无需配置):');
1088
1088
  console.log(' - 度量数据自动采集到 skywalk-sdd/events/');
1089
- console.log(' - 运行 node skywalk-sdd/log.js metrics --project=. 查看四维度指标');
1089
+ console.log(' - 运行 node skywalk-sdd/log.cjs metrics --project=. 查看四维度指标');
1090
1090
  console.log();
1091
1091
 
1092
1092
  rl.close();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kld-sdd",
3
- "version": "2.4.9",
3
+ "version": "2.4.10",
4
4
  "description": "KLD SDD OpenSpec 项目初始化工具 - 内置模版一键初始化",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -30,7 +30,7 @@
30
30
  "bin/",
31
31
  "lib/",
32
32
  "templates/",
33
- "skywalk-sdd/index.js",
33
+ "skywalk-sdd/index.cjs",
34
34
  "README.md"
35
35
  ]
36
36
  }
@@ -6,9 +6,9 @@
6
6
  * AI Agent 通过终端命令调用,将事件写入项目本地 skywalk-sdd/ 目录。
7
7
  *
8
8
  * 用法:
9
- * node skywalk-sdd/log.js start --command=propose --project=/path --change=xxx [--agent=cursor]
10
- * node skywalk-sdd/log.js end --event-id=evt_xxx --result=success --summary="..."
11
- * node skywalk-sdd/log.js metrics --project=/path [--change=xxx]
9
+ * node skywalk-sdd/log.cjs start --command=propose --project=/path --change=xxx [--agent=cursor]
10
+ * node skywalk-sdd/log.cjs end --event-id=evt_xxx --result=success --summary="..."
11
+ * node skywalk-sdd/log.cjs metrics --project=/path [--change=xxx]
12
12
  */
13
13
 
14
14
  const fs = require('fs');
@@ -1395,7 +1395,9 @@ function computeAiAdoptionMetrics(events) {
1395
1395
  const review = getAiAdoptionReview(e);
1396
1396
  return review?.review_status === 'final' || e.status === 'final';
1397
1397
  });
1398
- const latestEvent = latestByTimestamp(finalEvents.length > 0 ? finalEvents : adoptionEvents);
1398
+ // 优先使用 final 事件,无 final fallback snapshot(AI 产出快照)
1399
+ const candidates = finalEvents.length > 0 ? finalEvents : adoptionEvents;
1400
+ const latestEvent = latestByTimestamp(candidates);
1399
1401
  const latestReview = getAiAdoptionReview(latestEvent);
1400
1402
  if (!latestReview) {
1401
1403
  return {
@@ -1665,7 +1667,7 @@ function computeSinglePdfMvpMetrics(events, options = {}) {
1665
1667
  const gitDocumentMetrics = options.projectRoot && options.change
1666
1668
  ? computeGitDocumentMetrics(options.projectRoot, options.change)
1667
1669
  : null;
1668
- const specIterationCount = gitDocumentMetrics
1670
+ const specIterationCount = gitDocumentMetrics?.spec_iteration_count != null
1669
1671
  ? gitDocumentMetrics.spec_iteration_count
1670
1672
  : stageSpecIterationCount;
1671
1673
 
@@ -1902,6 +1904,10 @@ function renderExecutiveReportMarkdown(report) {
1902
1904
  '',
1903
1905
  '## 说明',
1904
1906
  '- `null` 表示当前还没有采集到对应事件或该指标暂不适用。',
1907
+ '- E4 AI 一次成码率:依赖 `task_update` 事件中的 `task_id` 和首次执行结果,若 apply 阶段未正确记录则显示 null。',
1908
+ '- P1 文档迭代次数:优先使用 Git 提交历史统计,无 Git 仓库或无提交历史时使用阶段 start 事件数。',
1909
+ '- P2 AI 代码保留率:优先使用 `ai_adoption_review` 的 final 状态,无 final 时 fallback 到 AI 产出快照(ai_snapshot)。',
1910
+ '- Q4 规约驱动测试覆盖率:依赖 check/test 阶段记录 spec 断言到测试用例的映射数据(spec_test_coverage 字段),属高级功能。',
1905
1911
  '- Q1 规约符合度与人工反馈类指标属于评审信号,默认不作为强阻断门禁。',
1906
1912
  ].join('\n');
1907
1913
  }
@@ -2064,7 +2070,7 @@ function cmdStart(args) {
2064
2070
 
2065
2071
  if (!command) {
2066
2072
  console.error('错误: 缺少 --command 参数');
2067
- console.error('用法: node skywalk-sdd/log.js start --command=propose --project=/path');
2073
+ console.error('用法: node skywalk-sdd/log.cjs start --command=propose --project=/path');
2068
2074
  process.exit(1);
2069
2075
  }
2070
2076
 
@@ -2556,7 +2562,7 @@ function cmdArchiveDocs(args) {
2556
2562
  function main() {
2557
2563
  // 支持两种调用方式:
2558
2564
  // 1) npx kld-sdd log start ... → argv 含 'log'
2559
- // 2) node skywalk-sdd/log.js start ... → argv 直接以子命令开头
2565
+ // 2) node skywalk-sdd/log.cjs start ... → argv 直接以子命令开头
2560
2566
  const argv = process.argv.slice(2);
2561
2567
  const logIdx = argv.indexOf('log');
2562
2568
  const subArgs = logIdx === -1 ? argv : argv.slice(logIdx + 1);
@@ -2604,12 +2610,12 @@ function showHelp() {
2604
2610
  SDD Telemetry CLI - 流程度量采集工具
2605
2611
 
2606
2612
  用法:
2607
- node skywalk-sdd/log.js start --command=<cmd> --project=<path> [--change=<name>] [--agent=<type>]
2608
- node skywalk-sdd/log.js end --event-id=<id> --result=<success|failure|partial> --summary="..."
2609
- node skywalk-sdd/log.js metrics --project=<path> [--change=<name>] [--pdf-mvp] [--format=json|markdown]
2610
- node skywalk-sdd/log.js report --project=<path> [--change=<name>] [--format=json|markdown] [--output=<file>]
2611
- node skywalk-sdd/log.js tasks-status --project=<path> --change=<name> [--require-complete]
2612
- node skywalk-sdd/log.js archive-docs --project=<path> --change=<name> [--reason=<text>] [--event-id=<id>] [--report-output=<file>]
2613
+ node skywalk-sdd/log.cjs start --command=<cmd> --project=<path> [--change=<name>] [--agent=<type>]
2614
+ node skywalk-sdd/log.cjs end --event-id=<id> --result=<success|failure|partial> --summary="..."
2615
+ node skywalk-sdd/log.cjs metrics --project=<path> [--change=<name>] [--pdf-mvp] [--format=json|markdown]
2616
+ node skywalk-sdd/log.cjs report --project=<path> [--change=<name>] [--format=json|markdown] [--output=<file>]
2617
+ node skywalk-sdd/log.cjs tasks-status --project=<path> --change=<name> [--require-complete]
2618
+ node skywalk-sdd/log.cjs archive-docs --project=<path> --change=<name> [--reason=<text>] [--event-id=<id>] [--report-output=<file>]
2613
2619
 
2614
2620
  子命令:
2615
2621
  start 记录 SDD 阶段开始,返回 event_id
@@ -2622,18 +2628,18 @@ SDD Telemetry CLI - 流程度量采集工具
2622
2628
  archive-docs 将 Simple/Full spec 变更真实移动到 openspec/changes/archive/,并可结束 archive 阶段生成报告
2623
2629
 
2624
2630
  示例:
2625
- node skywalk-sdd/log.js start --command=propose --project=/my/project --change=user-auth --agent=cursor
2626
- node skywalk-sdd/log.js end --event-id=evt_abc123 --result=success --summary="创建 proposal.md"
2627
- node skywalk-sdd/log.js record --type=task_update --command=apply --project=/my/project --change=user-auth --task-id=TASK-01 --status=completed
2628
- node skywalk-sdd/log.js record --type=conformance_review --command=check --project=/my/project --change=user-auth --source=manual --details-file=conformance-review.json
2629
- node skywalk-sdd/log.js record --type=ai_adoption_review --command=apply --project=/my/project --change=user-auth --status=final --details-file=ai-adoption.json
2630
- node skywalk-sdd/log.js record --type=survey_result --project=/my/project --change=user-auth --source=manual --details-file=survey.json
2631
- node skywalk-sdd/log.js metrics --project=/my/project --change=user-auth
2632
- node skywalk-sdd/log.js metrics --project=/my/project --change=user-auth --pdf-mvp --format=markdown
2633
- node skywalk-sdd/log.js report --project=/my/project --change=user-auth --format=markdown
2634
- node skywalk-sdd/log.js doctor --project=/my/project --change=user-auth
2635
- node skywalk-sdd/log.js tasks-status --project=/my/project --change=user-auth --require-complete
2636
- node skywalk-sdd/log.js archive-docs --project=/my/project --change=user-auth --reason="变更已完成实施" --event-id=evt_archive --report-output=skywalk-sdd/reports/user-auth-report.md
2631
+ node skywalk-sdd/log.cjs start --command=propose --project=/my/project --change=user-auth --agent=cursor
2632
+ node skywalk-sdd/log.cjs end --event-id=evt_abc123 --result=success --summary="创建 proposal.md"
2633
+ node skywalk-sdd/log.cjs record --type=task_update --command=apply --project=/my/project --change=user-auth --task-id=TASK-01 --status=completed
2634
+ node skywalk-sdd/log.cjs record --type=conformance_review --command=check --project=/my/project --change=user-auth --source=manual --details-file=conformance-review.json
2635
+ node skywalk-sdd/log.cjs record --type=ai_adoption_review --command=apply --project=/my/project --change=user-auth --status=final --details-file=ai-adoption.json
2636
+ node skywalk-sdd/log.cjs record --type=survey_result --project=/my/project --change=user-auth --source=manual --details-file=survey.json
2637
+ node skywalk-sdd/log.cjs metrics --project=/my/project --change=user-auth
2638
+ node skywalk-sdd/log.cjs metrics --project=/my/project --change=user-auth --pdf-mvp --format=markdown
2639
+ node skywalk-sdd/log.cjs report --project=/my/project --change=user-auth --format=markdown
2640
+ node skywalk-sdd/log.cjs doctor --project=/my/project --change=user-auth
2641
+ node skywalk-sdd/log.cjs tasks-status --project=/my/project --change=user-auth --require-complete
2642
+ node skywalk-sdd/log.cjs archive-docs --project=/my/project --change=user-auth --reason="变更已完成实施" --event-id=evt_archive --report-output=skywalk-sdd/reports/user-auth-report.md
2637
2643
  `);
2638
2644
  }
2639
2645
 
@@ -28,7 +28,7 @@ jobs:
28
28
  run: npm install
29
29
 
30
30
  - name: SDD doctor
31
- run: node skywalk-sdd/log.js doctor --project="$SDD_PROJECT" --change="$SDD_CHANGE"
31
+ run: node skywalk-sdd/log.cjs doctor --project="$SDD_PROJECT" --change="$SDD_CHANGE"
32
32
 
33
33
  - name: Build and record SDD result
34
34
  shell: bash
@@ -45,7 +45,7 @@ jobs:
45
45
  result="failure"
46
46
  success="false"
47
47
  fi
48
- node skywalk-sdd/log.js record --type=build_result --command=ci --project="$SDD_PROJECT" --change="$SDD_CHANGE" --agent="$SDD_AGENT" --source=ci --session-id="$SDD_SESSION" --result="$result" --summary="CI build $result" --details-json="{\"build_results\":{\"command\":\"$SDD_BUILD_COMMAND\",\"success\":$success,\"duration_ms\":$duration,\"error_count\":0}}"
48
+ node skywalk-sdd/log.cjs record --type=build_result --command=ci --project="$SDD_PROJECT" --change="$SDD_CHANGE" --agent="$SDD_AGENT" --source=ci --session-id="$SDD_SESSION" --result="$result" --summary="CI build $result" --details-json="{\"build_results\":{\"command\":\"$SDD_BUILD_COMMAND\",\"success\":$success,\"duration_ms\":$duration,\"error_count\":0}}"
49
49
  exit "$status"
50
50
 
51
51
  - name: Test and record SDD result
@@ -63,5 +63,5 @@ jobs:
63
63
  result="failure"
64
64
  failed=1
65
65
  fi
66
- node skywalk-sdd/log.js record --type=test_result --command=ci --project="$SDD_PROJECT" --change="$SDD_CHANGE" --agent="$SDD_AGENT" --source=ci --session-id="$SDD_SESSION" --result="$result" --summary="CI test $result" --details-json="{\"test_results\":{\"command\":\"$SDD_TEST_COMMAND\",\"passed\":0,\"failed\":$failed,\"skipped\":0,\"coverage\":null,\"duration_ms\":$duration}}"
66
+ node skywalk-sdd/log.cjs record --type=test_result --command=ci --project="$SDD_PROJECT" --change="$SDD_CHANGE" --agent="$SDD_AGENT" --source=ci --session-id="$SDD_SESSION" --result="$result" --summary="CI test $result" --details-json="{\"test_results\":{\"command\":\"$SDD_TEST_COMMAND\",\"passed\":0,\"failed\":$failed,\"skipped\":0,\"coverage\":null,\"duration_ms\":$duration}}"
67
67
  exit "$status"
@@ -11,7 +11,7 @@ sdd_quality_gate:
11
11
  before_script:
12
12
  - npm install
13
13
  script:
14
- - node skywalk-sdd/log.js doctor --project="$SDD_PROJECT" --change="$SDD_CHANGE"
14
+ - node skywalk-sdd/log.cjs doctor --project="$SDD_PROJECT" --change="$SDD_CHANGE"
15
15
  - |
16
16
  set +e
17
17
  start_ms=$(date +%s%3N)
@@ -25,7 +25,7 @@ sdd_quality_gate:
25
25
  result="failure"
26
26
  success="false"
27
27
  fi
28
- node skywalk-sdd/log.js record --type=build_result --command=ci --project="$SDD_PROJECT" --change="$SDD_CHANGE" --agent="$SDD_AGENT" --source=ci --session-id="$SDD_SESSION" --result="$result" --summary="CI build $result" --details-json="{\"build_results\":{\"command\":\"$SDD_BUILD_COMMAND\",\"success\":$success,\"duration_ms\":$duration,\"error_count\":0}}"
28
+ node skywalk-sdd/log.cjs record --type=build_result --command=ci --project="$SDD_PROJECT" --change="$SDD_CHANGE" --agent="$SDD_AGENT" --source=ci --session-id="$SDD_SESSION" --result="$result" --summary="CI build $result" --details-json="{\"build_results\":{\"command\":\"$SDD_BUILD_COMMAND\",\"success\":$success,\"duration_ms\":$duration,\"error_count\":0}}"
29
29
  if [ "$status" -ne 0 ]; then exit "$status"; fi
30
30
  - |
31
31
  set +e
@@ -40,5 +40,5 @@ sdd_quality_gate:
40
40
  result="failure"
41
41
  failed=1
42
42
  fi
43
- node skywalk-sdd/log.js record --type=test_result --command=ci --project="$SDD_PROJECT" --change="$SDD_CHANGE" --agent="$SDD_AGENT" --source=ci --session-id="$SDD_SESSION" --result="$result" --summary="CI test $result" --details-json="{\"test_results\":{\"command\":\"$SDD_TEST_COMMAND\",\"passed\":0,\"failed\":$failed,\"skipped\":0,\"coverage\":null,\"duration_ms\":$duration}}"
43
+ node skywalk-sdd/log.cjs record --type=test_result --command=ci --project="$SDD_PROJECT" --change="$SDD_CHANGE" --agent="$SDD_AGENT" --source=ci --session-id="$SDD_SESSION" --result="$result" --summary="CI test $result" --details-json="{\"test_results\":{\"command\":\"$SDD_TEST_COMMAND\",\"passed\":0,\"failed\":$failed,\"skipped\":0,\"coverage\":null,\"duration_ms\":$duration}}"
44
44
  if [ "$status" -ne 0 ]; then exit "$status"; fi
@@ -16,7 +16,7 @@ function main() {
16
16
  const logCli = path.join(projectRoot, 'skywalk-sdd', 'log.js');
17
17
 
18
18
  if (!fs.existsSync(logCli)) {
19
- console.log('SDD pre-push: skywalk-sdd/log.js not found; doctor gate skipped.');
19
+ console.log('SDD pre-push: skywalk-sdd/log.cjs not found; doctor gate skipped.');
20
20
  return;
21
21
  }
22
22
 
@@ -54,8 +54,8 @@ const activeStages = readActiveStages(projectRoot)
54
54
 
55
55
  const lines = [
56
56
  'SDD Telemetry reminder:',
57
- '- Run skywalk-sdd/log.js start before the OPSX stage work begins.',
58
- '- Run skywalk-sdd/log.js end before stopping the stage.',
57
+ '- Run skywalk-sdd/log.cjs start before the OPSX stage work begins.',
58
+ '- Run skywalk-sdd/log.cjs end before stopping the stage.',
59
59
  '- Hooks are only an enhancement; OPSX command instructions remain authoritative.',
60
60
  ];
61
61
 
@@ -78,5 +78,5 @@ for (const event of activeStages) {
78
78
  console.log([
79
79
  'SDD Telemetry warning: open stage(s) detected.',
80
80
  ...activeStages.map(event => `- ${event.change || 'general'}:${event.command || event.stage || 'unknown'} event_id=${event.event_id}`),
81
- 'Run skywalk-sdd/log.js end before closing the OPSX stage, or explicitly mark it partial/failure.',
81
+ 'Run skywalk-sdd/log.cjs end before closing the OPSX stage, or explicitly mark it partial/failure.',
82
82
  ].join('\n'));
@@ -5,7 +5,7 @@
5
5
  "hooks": [
6
6
  {
7
7
  "type": "command",
8
- "command": "node .claude/hooks/sdd-prompt.js"
8
+ "command": "node .claude/hooks/sdd-prompt.cjs"
9
9
  }
10
10
  ]
11
11
  }
@@ -16,7 +16,7 @@
16
16
  "hooks": [
17
17
  {
18
18
  "type": "command",
19
- "command": "node .claude/hooks/sdd-pre-tool.js"
19
+ "command": "node .claude/hooks/sdd-pre-tool.cjs"
20
20
  }
21
21
  ]
22
22
  }
@@ -27,7 +27,7 @@
27
27
  "hooks": [
28
28
  {
29
29
  "type": "command",
30
- "command": "node .claude/hooks/sdd-post-tool.js"
30
+ "command": "node .claude/hooks/sdd-post-tool.cjs"
31
31
  }
32
32
  ]
33
33
  }
@@ -37,7 +37,7 @@
37
37
  "hooks": [
38
38
  {
39
39
  "type": "command",
40
- "command": "node .claude/hooks/sdd-stop.js"
40
+ "command": "node .claude/hooks/sdd-stop.cjs"
41
41
  }
42
42
  ]
43
43
  }
@@ -12,7 +12,7 @@ argument-hint: "[change-name] [capability-name] [上下文文件...]"
12
12
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
13
13
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
14
14
  > **📊 Telemetry(必做,不得跳过)**
15
- > 在终端执行(必须成功):`node skywalk-sdd/log.js 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 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。
16
16
 
17
17
  > **🔒 Git 策略(只读增强,不改变开发流)**
18
18
  > - Git 只作为可选度量数据源,不是 apply 前置条件。
@@ -65,7 +65,7 @@ argument-hint: "[change-name] [capability-name] [上下文文件...]"
65
65
 
66
66
  在终端执行(若命令失败必须中止本阶段,不得跳过):
67
67
  ```bash
68
- node skywalk-sdd/log.js start --command=apply --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --git-sha=<base_git_sha_or_none>
68
+ 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>
69
69
  ```
70
70
  保存输出 JSON 中的 `event_id`,供阶段结束使用。
71
71
 
@@ -350,7 +350,7 @@ argument-hint: "[change-name] [capability-name] [上下文文件...]"
350
350
 
351
351
  5. **记录构建 Telemetry**:
352
352
  ```bash
353
- node skywalk-sdd/log.js record --type=build_result --command=apply --project=. --change=<变更名称> --capability=<capability-name> --task-id=<TASK-ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="编译检查结果" --details-json="{\"build_results\":{\"command\":\"<实际编译命令>\",\"success\":true,\"duration_ms\":0,\"error_count\":0}}"
353
+ node skywalk-sdd/log.cjs record --type=build_result --command=apply --project=. --change=<变更名称> --capability=<capability-name> --task-id=<TASK-ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="编译检查结果" --details-json="{\"build_results\":{\"command\":\"<实际编译命令>\",\"success\":true,\"duration_ms\":0,\"error_count\":0}}"
354
354
  ```
355
355
  `build_results` 字段口径:
356
356
  - `command`: 实际执行的编译/构建命令。
@@ -402,8 +402,10 @@ argument-hint: "[change-name] [capability-name] [上下文文件...]"
402
402
 
403
403
  4. **记录任务级 Telemetry**:
404
404
  ```bash
405
- node skywalk-sdd/log.js 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}}"
405
+ 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}}"
406
406
  ```
407
+ **⚠️ 注意**:`--task-id=<TASK-ID>` 中的 `<TASK-ID>` 必须替换为当前任务的实际 ID(如 `TASK-USER-AUTH-01`),不得保留占位符,否则 E4 指标无法计算。
408
+
407
409
  若任务失败或暂停,`--status` 使用 `failed` / `blocked`,`--result` 使用 `failure` / `partial`,并在 details 中记录失败原因。
408
410
 
409
411
  g. **继续下一个可执行任务**
@@ -481,8 +483,8 @@ argument-hint: "[change-name] [capability-name] [上下文文件...]"
481
483
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
482
484
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
483
485
  > **📊 Telemetry(必做,不得跳过)**
484
- > 每次编译检查后,必须记录构建事件:`node skywalk-sdd/log.js record --type=build_result --command=apply --project=. --change=<变更名称> --capability=<capability-name> --task-id=<TASK-ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="编译检查结果" --details-json="{\"build_results\":{\"command\":\"<实际编译命令>\",\"success\":true,\"duration_ms\":0,\"error_count\":0}}"`
485
- > 每完成一个任务,必须记录任务级结构化事件:`node skywalk-sdd/log.js 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}}"`
486
- > AI 代码产出完成后,必须记录采纳率快照,但不得为了采集快照自动提交 commit。Git 可用时只读统计 SHA/diff;Git 不可用时使用 `vcs_mode=no-git` 和 `base_git_sha=null`:`node skywalk-sdd/log.js 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\":0,\"added_lines\":null,\"deleted_lines\":null},\"notes\":\"未自动创建 Git 仓库,未自动提交 commit;仅记录可用统计\"}}"`
487
- > 若后续发生人工修改并完成采纳确认,必须补录最终采纳统计;若非 Git 项目,SHA 可填 `null`,采纳行数由人工或工具统计补录:`node skywalk-sdd/log.js record --type=ai_adoption_review --command=apply --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=manual --session-id=<会话ID> --status=final --result=success --summary="AI 代码采纳率人工确认" --details-json="{\"ai_adoption\":{\"review_status\":\"final\",\"vcs_mode\":\"<readonly|no-git>\",\"base_git_sha\":\"<base_git_sha_or_null>\",\"ai_git_sha\":\"<ai_git_sha_or_null>\",\"final_git_sha\":\"<final_git_sha_or_null>\",\"retained_lines\":0,\"rewritten_lines\":0,\"deleted_lines\":0,\"ai_diff\":{\"files_changed\":0,\"added_lines\":null,\"deleted_lines\":null},\"final_diff\":{\"files_changed\":0,\"added_lines\":null,\"deleted_lines\":null},\"notes\":\"只记录行数统计,不记录源码;非 Git 项目允许 SHA 为 null\"}}"`
488
- > 阶段结束时执行(必须成功):`node skywalk-sdd/log.js end --event-id=<开头记录的event_id> --command=apply --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="实施结果摘要"`
486
+ > 每次编译检查后,必须记录构建事件:`node skywalk-sdd/log.cjs record --type=build_result --command=apply --project=. --change=<变更名称> --capability=<capability-name> --task-id=<TASK-ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="编译检查结果" --details-json="{\"build_results\":{\"command\":\"<实际编译命令>\",\"success\":true,\"duration_ms\":0,\"error_count\":0}}"`
487
+ > 每完成一个任务,必须记录任务级结构化事件:`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}}"`
488
+ > AI 代码产出完成后,必须记录采纳率快照,但不得为了采集快照自动提交 commit。Git 可用时只读统计 SHA/diff;Git 不可用时使用 `vcs_mode=no-git` 和 `base_git_sha=null`:`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\":0,\"added_lines\":null,\"deleted_lines\":null},\"notes\":\"未自动创建 Git 仓库,未自动提交 commit;仅记录可用统计\"}}"`
489
+ > 若后续发生人工修改并完成采纳确认,必须补录最终采纳统计;若非 Git 项目,SHA 可填 `null`,采纳行数由人工或工具统计补录:`node skywalk-sdd/log.cjs record --type=ai_adoption_review --command=apply --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=manual --session-id=<会话ID> --status=final --result=success --summary="AI 代码采纳率人工确认" --details-json="{\"ai_adoption\":{\"review_status\":\"final\",\"vcs_mode\":\"<readonly|no-git>\",\"base_git_sha\":\"<base_git_sha_or_null>\",\"ai_git_sha\":\"<ai_git_sha_or_null>\",\"final_git_sha\":\"<final_git_sha_or_null>\",\"retained_lines\":0,\"rewritten_lines\":0,\"deleted_lines\":0,\"ai_diff\":{\"files_changed\":0,\"added_lines\":null,\"deleted_lines\":null},\"final_diff\":{\"files_changed\":0,\"added_lines\":null,\"deleted_lines\":null},\"notes\":\"只记录行数统计,不记录源码;非 Git 项目允许 SHA 为 null\"}}"`
490
+ > 阶段结束时执行(必须成功):`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="实施结果摘要"`
@@ -20,7 +20,7 @@ argument-hint: "[change-name]"
20
20
  **核心原则**
21
21
 
22
22
  - `archive` 必须产生真实归档结果:活动目录 `openspec/changes/<name>/` 应被移出,归档目录位于 `openspec/changes/archive/<日期>-<name>/`。
23
- - 归档统一使用 `node skywalk-sdd/log.js archive-docs`,同时兼容 Simple 与 Full 两种文档结构。
23
+ - 归档统一使用 `node skywalk-sdd/log.cjs archive-docs`,同时兼容 Simple 与 Full 两种文档结构。
24
24
  - 最终报告必须随着 `archive` 阶段成功结束自动生成,不再作为可选手工步骤。
25
25
  - 即使归档原因是“变更已完成实施”,未勾选的 `tasks.md/task.md` 项也不阻断归档;但必须写入 archive 详情和最终报告。
26
26
 
@@ -31,7 +31,7 @@ argument-hint: "[change-name]"
31
31
  ### 0. 记录阶段开始
32
32
 
33
33
  ```bash
34
- node skywalk-sdd/log.js start --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
34
+ node skywalk-sdd/log.cjs start --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
35
35
  ```
36
36
 
37
37
  保存输出 JSON 中的 `event_id`。
@@ -63,7 +63,7 @@ openspec list
63
63
  归档前执行 doctor:
64
64
 
65
65
  ```bash
66
- node skywalk-sdd/log.js doctor --project=. --change=<变更名称>
66
+ node skywalk-sdd/log.cjs doctor --project=. --change=<变更名称>
67
67
  ```
68
68
 
69
69
  处理规则:
@@ -76,7 +76,7 @@ node skywalk-sdd/log.js doctor --project=. --change=<变更名称>
76
76
  始终扫描 Simple 和 Full 两种布局下的所有 `tasks.md/task.md`:
77
77
 
78
78
  ```bash
79
- node skywalk-sdd/log.js tasks-status --project=. --change=<变更名称>
79
+ node skywalk-sdd/log.cjs tasks-status --project=. --change=<变更名称>
80
80
  ```
81
81
 
82
82
  处理规则:
@@ -89,7 +89,7 @@ node skywalk-sdd/log.js tasks-status --project=. --change=<变更名称>
89
89
  执行:
90
90
 
91
91
  ```bash
92
- node skywalk-sdd/log.js archive-docs --project=. --change=<变更名称> --reason="<归档原因>" --event-id=<event_id> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --report-output=skywalk-sdd/reports/<变更名称>-report.md
92
+ node skywalk-sdd/log.cjs archive-docs --project=. --change=<变更名称> --reason="<归档原因>" --event-id=<event_id> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --report-output=skywalk-sdd/reports/<变更名称>-report.md
93
93
  ```
94
94
 
95
95
  该命令必须一次完成:
@@ -103,7 +103,7 @@ node skywalk-sdd/log.js archive-docs --project=. --change=<变更名称> --reaso
103
103
  如果命令失败,必须以失败状态结束 telemetry:
104
104
 
105
105
  ```bash
106
- node skywalk-sdd/log.js end --event-id=<event_id> --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=failure --summary="归档失败:<失败原因>"
106
+ 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="归档失败:<失败原因>"
107
107
  ```
108
108
 
109
109
  失败时不要输出“归档完成”。
@@ -126,13 +126,13 @@ node skywalk-sdd/log.js end --event-id=<event_id> --command=archive --project=.
126
126
  如用户愿意提供反馈,可补录问卷结果:
127
127
 
128
128
  ```bash
129
- node skywalk-sdd/log.js 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\":\"\"}}"
129
+ 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\":\"\"}}"
130
130
  ```
131
131
 
132
132
  如团队有传统方式工时基线,可补录 baseline:
133
133
 
134
134
  ```bash
135
- node skywalk-sdd/log.js 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\":\"\"}}"
135
+ 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\":\"\"}}"
136
136
  ```
137
137
 
138
138
  ---
@@ -12,7 +12,7 @@ argument-hint: "[change-name] [上下文文件...]"
12
12
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
13
13
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
14
14
  > **📊 Telemetry(必做,不得跳过)**
15
- > 在终端执行(必须成功):`node skywalk-sdd/log.js start --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
15
+ > 在终端执行(必须成功):`node skywalk-sdd/log.cjs start --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
16
16
 
17
17
  > **⚠️ 阶段边界提示**
18
18
  >
@@ -31,7 +31,7 @@ argument-hint: "[change-name] [上下文文件...]"
31
31
 
32
32
  在终端执行(若命令失败必须中止本阶段,不得跳过):
33
33
  ```bash
34
- node skywalk-sdd/log.js start --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
34
+ node skywalk-sdd/log.cjs start --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
35
35
  ```
36
36
  保存输出 JSON 中的 `event_id`,供阶段结束使用。
37
37
 
@@ -170,7 +170,7 @@ argument-hint: "[change-name] [上下文文件...]"
170
170
  执行:
171
171
 
172
172
  ```bash
173
- node skywalk-sdd/log.js tasks-status --project=. --change=<变更名称>
173
+ node skywalk-sdd/log.cjs tasks-status --project=. --change=<变更名称>
174
174
  ```
175
175
 
176
176
  判定规则:
@@ -317,7 +317,7 @@ argument-hint: "[change-name] [上下文文件...]"
317
317
  | | | |
318
318
 
319
319
  ## 任务完成状态
320
- - 检查命令:`node skywalk-sdd/log.js tasks-status --project=. --change=<name>`
320
+ - 检查命令:`node skywalk-sdd/log.cjs tasks-status --project=. --change=<name>`
321
321
  - 状态口径:task 阶段允许未勾选;apply/test/archive readiness 阶段不得把未勾选项静默视为完成。
322
322
  - 未勾选项清单:列出文件、行号、原文。
323
323
 
@@ -402,7 +402,7 @@ argument-hint: "[change-name] [上下文文件...]"
402
402
 
403
403
  在终端执行(必须成功):
404
404
  ```bash
405
- node skywalk-sdd/log.js 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,\"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}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"
405
+ 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,\"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}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"
406
406
  ```
407
407
 
408
408
  12. **【Telemetry 建议】记录规约符合度 Q1**
@@ -437,7 +437,7 @@ argument-hint: "[change-name] [上下文文件...]"
437
437
 
438
438
  在终端执行(若存在实现代码则必须成功):
439
439
  ```bash
440
- node skywalk-sdd/log.js 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+manual\",\"manual_confirmed\":true,\"assertions\":[{\"id\":\"ASSERT-001\",\"description\":\"规约中的可验证断言\",\"judge_status\":\"matched\",\"human_status\":\"matched\",\"evidence\":\"代码、测试或文档证据摘要\",\"files\":[],\"notes\":\"\"}]}}"
440
+ 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+manual\",\"manual_confirmed\":true,\"assertions\":[{\"id\":\"ASSERT-001\",\"description\":\"规约中的可验证断言\",\"judge_status\":\"matched\",\"human_status\":\"matched\",\"evidence\":\"代码、测试或文档证据摘要\",\"files\":[],\"notes\":\"\"}]}}"
441
441
  ```
442
442
 
443
443
  若当前尚未进入实现阶段或无法验证代码,允许跳过 `conformance_review`,但需要在检查报告中说明原因。
@@ -459,5 +459,5 @@ argument-hint: "[change-name] [上下文文件...]"
459
459
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
460
460
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
461
461
  > **📊 Telemetry(必做,不得跳过)**
462
- > 生成检查报告后,必须先记录结构化检查结果:`node skywalk-sdd/log.js 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,\"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}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"`
463
- > `check_result` 记录成功后,才允许执行阶段结束:`node skywalk-sdd/log.js 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="检查结果摘要" --details-json="{\"check_results\":{\"total\":0,\"errors\":0,\"warnings\":0,\"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}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"`
462
+ > 生成检查报告后,必须先记录结构化检查结果:`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,\"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}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"`
463
+ > `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="检查结果摘要" --details-json="{\"check_results\":{\"total\":0,\"errors\":0,\"warnings\":0,\"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}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"`
@@ -12,7 +12,7 @@ argument-hint: "[change-name] [capability-name] [上下文文件...]"
12
12
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
13
13
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
14
14
  > **📊 Telemetry(必做,不得跳过)**
15
- > 在终端执行(必须成功):`node skywalk-sdd/log.js start --command=design --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
15
+ > 在终端执行(必须成功):`node skywalk-sdd/log.cjs start --command=design --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
16
16
 
17
17
  > **⚠️ 阶段边界提示**
18
18
  >
@@ -41,7 +41,7 @@ argument-hint: "[change-name] [capability-name] [上下文文件...]"
41
41
 
42
42
  在终端执行(若命令失败必须中止本阶段,不得跳过):
43
43
  ```bash
44
- node skywalk-sdd/log.js start --command=design --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
44
+ node skywalk-sdd/log.cjs start --command=design --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
45
45
  ```
46
46
  保存输出 JSON 中的 `event_id`,供阶段结束使用。
47
47
 
@@ -567,4 +567,4 @@ argument-hint: "[change-name] [capability-name] [上下文文件...]"
567
567
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
568
568
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
569
569
  > **📊 Telemetry(必做,不得跳过)**
570
- > 在终端执行(必须成功):`node skywalk-sdd/log.js end --event-id=<开头记录的event_id> --command=design --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="一句话摘要"`
570
+ > 在终端执行(必须成功):`node skywalk-sdd/log.cjs end --event-id=<开头记录的event_id> --command=design --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="一句话摘要"`
@@ -12,7 +12,7 @@ argument-hint: "[change-name]"
12
12
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
13
13
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
14
14
  > **📊 Telemetry(必做,不得跳过)**
15
- > 在终端执行(必须成功):`node skywalk-sdd/log.js start --command=explore --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
15
+ > 在终端执行(必须成功):`node skywalk-sdd/log.cjs start --command=explore --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
16
16
 
17
17
  ---
18
18
 
@@ -24,7 +24,7 @@ argument-hint: "[change-name]"
24
24
 
25
25
  在终端执行(若命令失败必须中止本阶段,不得跳过):
26
26
  ```bash
27
- node skywalk-sdd/log.js start --command=explore --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
27
+ node skywalk-sdd/log.cjs start --command=explore --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
28
28
  ```
29
29
  保存输出 JSON 中的 `event_id`,供阶段结束使用。
30
30
 
@@ -96,4 +96,4 @@ argument-hint: "[change-name]"
96
96
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
97
97
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
98
98
  > **📊 Telemetry(必做,不得跳过)**
99
- > 在终端执行(必须成功):`node skywalk-sdd/log.js end --event-id=<开头记录的event_id> --command=explore --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success --summary="浏览结果摘要"`
99
+ > 在终端执行(必须成功):`node skywalk-sdd/log.cjs end --event-id=<开头记录的event_id> --command=explore --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success --summary="浏览结果摘要"`
@@ -13,7 +13,7 @@ argument-hint: "[change-name] [上下文文件...]"
13
13
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
14
14
 
15
15
  > **📊 Telemetry(必做,不得跳过)**
16
- > 在终端执行(必须成功):`node skywalk-sdd/log.js start --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
16
+ > 在终端执行(必须成功):`node skywalk-sdd/log.cjs start --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
17
17
 
18
18
  > **⚠️ 阶段边界提示**
19
19
  >
@@ -34,7 +34,7 @@ argument-hint: "[change-name] [上下文文件...]"
34
34
 
35
35
  在终端执行(若命令失败必须中止本阶段,不得跳过):
36
36
  ```bash
37
- node skywalk-sdd/log.js start --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
37
+ node skywalk-sdd/log.cjs start --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
38
38
  ```
39
39
  保存输出 JSON 中的 `event_id`,供阶段结束使用。
40
40
 
@@ -402,4 +402,4 @@ argument-hint: "[change-name] [上下文文件...]"
402
402
  - **⛔ 单阶段原则:完成 proposal.md 后必须立即停止**。仅提示用户下一步可运行 `/opsx:spec`,**绝对禁止自动执行 spec/design/task 等后续阶段**。每个阶段必须由用户主动触发。
403
403
 
404
404
  > **📊 Telemetry(必做,不得跳过)**
405
- > 在终端执行(必须成功):`node skywalk-sdd/log.js end --event-id=<开头记录的event_id> --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="一句话摘要"`
405
+ > 在终端执行(必须成功):`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="一句话摘要"`
@@ -12,7 +12,7 @@ argument-hint: "[change-name] [上下文文件...]"
12
12
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
13
13
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
14
14
  > **📊 Telemetry(必做,不得跳过)**
15
- > 在终端执行(必须成功):`node skywalk-sdd/log.js start --command=spec --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
15
+ > 在终端执行(必须成功):`node skywalk-sdd/log.cjs start --command=spec --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
16
16
 
17
17
  > **⚠️ 阶段边界提示**
18
18
  >
@@ -49,7 +49,7 @@ openspec/changes/<name>/
49
49
 
50
50
  在终端执行(若命令失败必须中止本阶段,不得跳过):
51
51
  ```bash
52
- node skywalk-sdd/log.js start --command=spec --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
52
+ node skywalk-sdd/log.cjs start --command=spec --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
53
53
  ```
54
54
  保存输出 JSON 中的 `event_id`,供阶段结束使用。
55
55
 
@@ -523,4 +523,4 @@ openspec/changes/<name>/
523
523
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
524
524
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
525
525
  > **📊 Telemetry(必做,不得跳过)**
526
- > 在终端执行(必须成功):`node skywalk-sdd/log.js end --event-id=<开头记录的event_id> --command=spec --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="一句话摘要"`
526
+ > 在终端执行(必须成功):`node skywalk-sdd/log.cjs end --event-id=<开头记录的event_id> --command=spec --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="一句话摘要"`
@@ -12,7 +12,7 @@ argument-hint: "[change-name] [capability-name] [上下文文件...]"
12
12
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
13
13
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
14
14
  > **📊 Telemetry(必做,不得跳过)**
15
- > 在终端执行(必须成功):`node skywalk-sdd/log.js start --command=task --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
15
+ > 在终端执行(必须成功):`node skywalk-sdd/log.cjs start --command=task --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
16
16
 
17
17
  > **⚠️ 阶段边界提示**
18
18
  >
@@ -42,7 +42,7 @@ argument-hint: "[change-name] [capability-name] [上下文文件...]"
42
42
 
43
43
  在终端执行(若命令失败必须中止本阶段,不得跳过):
44
44
  ```bash
45
- node skywalk-sdd/log.js start --command=task --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
45
+ node skywalk-sdd/log.cjs start --command=task --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
46
46
  ```
47
47
  保存输出 JSON 中的 `event_id`,供阶段结束使用。
48
48
 
@@ -430,4 +430,4 @@ argument-hint: "[change-name] [capability-name] [上下文文件...]"
430
430
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
431
431
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
432
432
  > **📊 Telemetry(必做,不得跳过)**
433
- > 在终端执行(必须成功):`node skywalk-sdd/log.js end --event-id=<开头记录的event_id> --command=task --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="一句话摘要"`
433
+ > 在终端执行(必须成功):`node skywalk-sdd/log.cjs end --event-id=<开头记录的event_id> --command=task --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="一句话摘要"`
@@ -12,7 +12,7 @@ argument-hint: "[test-scope] [options]"
12
12
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
13
13
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
14
14
  > **📊 Telemetry(必做,不得跳过)**
15
- > 在终端执行(必须成功):`node skywalk-sdd/log.js start --command=test --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
15
+ > 在终端执行(必须成功):`node skywalk-sdd/log.cjs start --command=test --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
16
16
 
17
17
  > **⚠️ 命令定位**
18
18
  >
@@ -28,7 +28,7 @@ argument-hint: "[test-scope] [options]"
28
28
 
29
29
  在终端执行(若命令失败必须中止本阶段,不得跳过):
30
30
  ```bash
31
- node skywalk-sdd/log.js start --command=test --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
31
+ node skywalk-sdd/log.cjs start --command=test --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
32
32
  ```
33
33
  保存输出 JSON 中的 `event_id`,供阶段结束使用。
34
34
 
@@ -239,6 +239,6 @@ argument-hint: "[test-scope] [options]"
239
239
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
240
240
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
241
241
  > **📊 Telemetry(必做,不得跳过)**
242
- > 测试运行后,必须记录结构化测试结果:`node skywalk-sdd/log.js record --type=test_result --command=test --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="测试结果摘要" --details-json="{\"test_results\":{\"command\":\"<实际测试命令>\",\"passed\":0,\"failed\":0,\"skipped\":0,\"coverage\":null,\"duration_ms\":0}}"`
243
- > 若 spec.md 中有可识别场景 ID,且测试能映射到这些场景,建议记录 Q4 规约驱动测试覆盖率(可选,不阻塞测试流程):`node skywalk-sdd/log.js record --type=coverage_result --command=test --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/partial/failure --summary="规约场景测试覆盖率" --details-json="{\"spec_test_coverage\":{\"mappings\":[{\"scenario_id\":\"SCN-001\",\"description\":\"规约场景摘要\",\"test_ids\":[\"<测试文件或用例ID>\"],\"status\":\"covered\",\"notes\":\"\"}]}}"`
244
- > 阶段结束时执行(必须成功):`node skywalk-sdd/log.js end --event-id=<开头记录的event_id> --command=test --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="测试结果摘要" --details-json="{\"test_results\":{\"command\":\"<实际测试命令>\",\"passed\":0,\"failed\":0,\"skipped\":0,\"coverage\":null,\"duration_ms\":0}}"`
242
+ > 测试运行后,必须记录结构化测试结果:`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="测试结果摘要" --details-json="{\"test_results\":{\"command\":\"<实际测试命令>\",\"passed\":0,\"failed\":0,\"skipped\":0,\"coverage\":null,\"duration_ms\":0}}"`
243
+ > 若 spec.md 中有可识别场景 ID,且测试能映射到这些场景,建议记录 Q4 规约驱动测试覆盖率(可选,不阻塞测试流程):`node skywalk-sdd/log.cjs record --type=coverage_result --command=test --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/partial/failure --summary="规约场景测试覆盖率" --details-json="{\"spec_test_coverage\":{\"mappings\":[{\"scenario_id\":\"SCN-001\",\"description\":\"规约场景摘要\",\"test_ids\":[\"<测试文件或用例ID>\"],\"status\":\"covered\",\"notes\":\"\"}]}}"`
244
+ > 阶段结束时执行(必须成功):`node skywalk-sdd/log.cjs end --event-id=<开头记录的event_id> --command=test --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="测试结果摘要" --details-json="{\"test_results\":{\"command\":\"<实际测试命令>\",\"passed\":0,\"failed\":0,\"skipped\":0,\"coverage\":null,\"duration_ms\":0}}"`
@@ -29,8 +29,8 @@ allowed-tools:
29
29
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
30
30
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
31
31
  > **📊 Telemetry(必做,不得跳过)**
32
- > - 阶段开始:`node skywalk-sdd/log.js 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)
33
- > - 阶段结束:`node skywalk-sdd/log.js end --event-id=<event_id> --command=apply --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
32
+ > - 阶段开始:`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)
33
+ > - 阶段结束:`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="摘要"`
34
34
 
35
35
  > **🔒 Git 策略(只读增强,不改变开发流)**
36
36
  > - Git 只作为可选度量数据源,不是 apply 前置条件。
@@ -187,8 +187,9 @@ f. **⛔ 立即更新任务状态**
187
187
  - 显示进度:`✅ [TASK-ID] 已完成 [N/M]`
188
188
  - 记录任务级 Telemetry:
189
189
  ```bash
190
- node skywalk-sdd/log.js 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}}"
190
+ 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}}"
191
191
  ```
192
+ **⚠️ 注意**:`--task-id=<TASK-ID>` 必须替换为实际任务 ID,否则 E4 指标无法计算。
192
193
 
193
194
  g. **继续下一个可执行任务**
194
195
 
@@ -196,9 +197,12 @@ g. **继续下一个可执行任务**
196
197
 
197
198
  当前 Capability 的 AI 代码产出完成后,必须记录 `ai_adoption_review`,但不得为了采集快照自动提交 commit。
198
199
 
200
+ - `--status=ai_snapshot` 用于记录 AI 初始产出快照,P2 指标在无 final 事件时会使用此快照数据
201
+ - 若用户进行了人工 review 并确认保留率,可补录 `--status=final` 事件(`review_status: "final"`),P2 指标将优先使用 final 数据
202
+
199
203
  Git 可用时只读统计 SHA/diff;Git 不可用时使用 `vcs_mode=no-git` 和 `base_git_sha=null`:
200
204
  ```bash
201
- node skywalk-sdd/log.js 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\":0,\"added_lines\":null,\"deleted_lines\":null},\"notes\":\"未自动创建 Git 仓库,未自动提交 commit;仅记录可用统计\"}}"
205
+ 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\":0,\"added_lines\":null,\"deleted_lines\":null},\"notes\":\"未自动创建 Git 仓库,未自动提交 commit;仅记录可用统计\"}}"
202
206
  ```
203
207
 
204
208
  ### 6. 完成或暂停时显示状态
@@ -3,7 +3,7 @@ name: opsx-archive
3
3
  description: "归档变更技能 - 将已结束的 SDD 变更真实移入 archive,并生成最终中文度量报告"
4
4
  argument-hint: "[change-name]"
5
5
  license: MIT
6
- compatibility: Requires skywalk-sdd/log.js.
6
+ compatibility: Requires skywalk-sdd/log.cjs.
7
7
  metadata:
8
8
  author: sdd-team
9
9
  version: "3.2"
@@ -48,7 +48,7 @@ openspec list
48
48
  让用户选择现有变更。确认后记录阶段开始:
49
49
 
50
50
  ```bash
51
- node skywalk-sdd/log.js start --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
51
+ node skywalk-sdd/log.cjs start --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
52
52
  ```
53
53
 
54
54
  保存 `event_id`。
@@ -68,7 +68,7 @@ node skywalk-sdd/log.js start --command=archive --project=. --change=<变更名
68
68
  ### 3. 运行 telemetry doctor
69
69
 
70
70
  ```bash
71
- node skywalk-sdd/log.js doctor --project=. --change=<变更名称>
71
+ node skywalk-sdd/log.cjs doctor --project=. --change=<变更名称>
72
72
  ```
73
73
 
74
74
  如果存在 `severe_issues`,暂停归档并说明必须先修复。`superseded_open_stages` 和 `rework_summary` 只作为返工/重复执行展示,不要求用户人工区分测试回滚或真实研发返工。
@@ -76,7 +76,7 @@ node skywalk-sdd/log.js doctor --project=. --change=<变更名称>
76
76
  ### 4. 扫描 tasks 完成状态
77
77
 
78
78
  ```bash
79
- node skywalk-sdd/log.js tasks-status --project=. --change=<变更名称>
79
+ node skywalk-sdd/log.cjs tasks-status --project=. --change=<变更名称>
80
80
  ```
81
81
 
82
82
  即使用户选择“变更已完成实施”,未勾选项也不阻断归档。它可能代表任务真实未完成,也可能代表代码已完成但文档未同步;不要猜测,也不要静默忽略。最终必须让 `archive-docs` 将其写入 `archive_result.task_completion` 和报告。
@@ -86,7 +86,7 @@ node skywalk-sdd/log.js tasks-status --project=. --change=<变更名称>
86
86
  执行唯一归档命令:
87
87
 
88
88
  ```bash
89
- node skywalk-sdd/log.js archive-docs --project=. --change=<变更名称> --reason="<归档原因>" --event-id=<event_id> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --report-output=skywalk-sdd/reports/<变更名称>-report.md
89
+ node skywalk-sdd/log.cjs archive-docs --project=. --change=<变更名称> --reason="<归档原因>" --event-id=<event_id> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --report-output=skywalk-sdd/reports/<变更名称>-report.md
90
90
  ```
91
91
 
92
92
  该命令成功后必须已经完成:
@@ -100,7 +100,7 @@ node skywalk-sdd/log.js archive-docs --project=. --change=<变更名称> --reaso
100
100
  如果该命令失败,以失败状态结束 telemetry:
101
101
 
102
102
  ```bash
103
- node skywalk-sdd/log.js end --event-id=<event_id> --command=archive --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=failure --summary="归档失败:<失败原因>"
103
+ 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="归档失败:<失败原因>"
104
104
  ```
105
105
 
106
106
  失败时不要输出“归档完成”。
@@ -124,13 +124,13 @@ node skywalk-sdd/log.js end --event-id=<event_id> --command=archive --project=.
124
124
  如用户愿意提供反馈,可补录问卷结果:
125
125
 
126
126
  ```bash
127
- node skywalk-sdd/log.js 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\":\"\"}}"
127
+ 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\":\"\"}}"
128
128
  ```
129
129
 
130
130
  如团队有传统方式工时基线,可补录 baseline:
131
131
 
132
132
  ```bash
133
- node skywalk-sdd/log.js 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\":\"\"}}"
133
+ 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\":\"\"}}"
134
134
  ```
135
135
 
136
136
  ---
@@ -32,9 +32,9 @@ allowed-tools:
32
32
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
33
33
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
34
34
  > **📊 Telemetry(必做,不得跳过)**
35
- > - 阶段开始:`node skywalk-sdd/log.js start --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
36
- > - 检查报告生成后,必须先记录结构化检查结果:`node skywalk-sdd/log.js 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,\"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}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"`
37
- > - `check_result` 记录成功后,才允许阶段结束:`node skywalk-sdd/log.js 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="摘要"`
35
+ > - 阶段开始:`node skywalk-sdd/log.cjs start --command=check --project=. --change=<变更名称> --capability=<可选capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
36
+ > - 检查报告生成后,必须先记录结构化检查结果:`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,\"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}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"`
37
+ > - `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="摘要"`
38
38
 
39
39
  ---
40
40
 
@@ -115,7 +115,7 @@ openspec list
115
115
  `task` 阶段允许 `tasks.md` 出现未完成项;这只是计划状态。但如果当前变更已经进入 apply 之后,或本次 check 发现实现代码、测试报告、`build_result/test_result/task_update/conformance_review` 等实施证据,必须检查任务勾选状态:
116
116
 
117
117
  ```bash
118
- node skywalk-sdd/log.js tasks-status --project=. --change=<变更名称>
118
+ node skywalk-sdd/log.cjs tasks-status --project=. --change=<变更名称>
119
119
  ```
120
120
 
121
121
  判定规则:
@@ -156,12 +156,12 @@ node skywalk-sdd/log.js tasks-status --project=. --change=<变更名称>
156
156
 
157
157
  在终端执行(必须成功):
158
158
  ```bash
159
- node skywalk-sdd/log.js 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,\"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}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"
159
+ 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,\"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}},\"task_completion\":{\"completed\":0,\"incomplete\":0,\"total\":0,\"has_incomplete\":false,\"checked_for_archive_readiness\":false}}}"
160
160
  ```
161
161
 
162
162
  若当前已有实现代码,并且能够验证 spec 断言,还应记录 `conformance_review`(用于 Q1 规约符合度):
163
163
  ```bash
164
- node skywalk-sdd/log.js 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+manual\",\"manual_confirmed\":true,\"assertions\":[{\"id\":\"ASSERT-001\",\"description\":\"规约中的可验证断言\",\"judge_status\":\"matched\",\"human_status\":\"matched\",\"evidence\":\"代码、测试或文档证据摘要\",\"files\":[],\"notes\":\"\"}]}}"
164
+ 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+manual\",\"manual_confirmed\":true,\"assertions\":[{\"id\":\"ASSERT-001\",\"description\":\"规约中的可验证断言\",\"judge_status\":\"matched\",\"human_status\":\"matched\",\"evidence\":\"代码、测试或文档证据摘要\",\"files\":[],\"notes\":\"\"}]}}"
165
165
  ```
166
166
 
167
167
  ### 6. 【交互引导】根据结果引导下一步
@@ -40,8 +40,8 @@ allowed-tools:
40
40
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
41
41
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
42
42
  > **📊 Telemetry(必做,不得跳过)**
43
- > - 阶段开始:`node skywalk-sdd/log.js start --command=design --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
44
- > - 阶段结束:`node skywalk-sdd/log.js end --event-id=<event_id> --command=design --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
43
+ > - 阶段开始:`node skywalk-sdd/log.cjs start --command=design --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
44
+ > - 阶段结束:`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="摘要"`
45
45
 
46
46
  ---
47
47
 
@@ -23,8 +23,8 @@ allowed-tools:
23
23
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
24
24
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
25
25
  > **📊 Telemetry(必做,不得跳过)**
26
- > - 阶段开始:`node skywalk-sdd/log.js start --command=explore --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
27
- > - 阶段结束:`node skywalk-sdd/log.js end --event-id=<event_id> --command=explore --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
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="摘要"`
28
28
 
29
29
  ---
30
30
 
@@ -34,8 +34,8 @@ allowed-tools:
34
34
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
35
35
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
36
36
  > **📊 Telemetry(必做,不得跳过)**
37
- > - 阶段开始:`node skywalk-sdd/log.js start --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
38
- > - 阶段结束:`node skywalk-sdd/log.js end --event-id=<event_id> --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
37
+ > - 阶段开始:`node skywalk-sdd/log.cjs start --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
38
+ > - 阶段结束:`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="摘要"`
39
39
 
40
40
  ---
41
41
 
@@ -34,8 +34,8 @@ allowed-tools:
34
34
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
35
35
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
36
36
  > **📊 Telemetry(必做,不得跳过)**
37
- > - 阶段开始:`node skywalk-sdd/log.js start --command=spec --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
38
- > - 阶段结束:`node skywalk-sdd/log.js end --event-id=<event_id> --command=spec --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
37
+ > - 阶段开始:`node skywalk-sdd/log.cjs start --command=spec --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
38
+ > - 阶段结束:`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="摘要"`
39
39
 
40
40
  ---
41
41
 
@@ -41,8 +41,8 @@ allowed-tools:
41
41
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
42
42
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
43
43
  > **📊 Telemetry(必做,不得跳过)**
44
- > - 阶段开始:`node skywalk-sdd/log.js start --command=task --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
45
- > - 阶段结束:`node skywalk-sdd/log.js end --event-id=<event_id> --command=task --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
44
+ > - 阶段开始:`node skywalk-sdd/log.cjs start --command=task --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
45
+ > - 阶段结束:`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="摘要"`
46
46
 
47
47
  ---
48
48
 
@@ -29,8 +29,8 @@ allowed-tools:
29
29
  > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
30
30
  > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
31
31
  > **📊 Telemetry(必做,不得跳过)**
32
- > - 阶段开始:`node skywalk-sdd/log.js start --command=test --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
33
- > - 阶段结束:`node skywalk-sdd/log.js end --event-id=<event_id> --command=test --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
32
+ > - 阶段开始:`node skywalk-sdd/log.cjs start --command=test --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
33
+ > - 阶段结束:`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
34
 
35
35
  ---
36
36