cclaw-cli 0.49.0 → 0.51.1

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 (183) hide show
  1. package/README.md +57 -84
  2. package/dist/artifact-linter.d.ts +4 -0
  3. package/dist/artifact-linter.js +24 -3
  4. package/dist/cli.d.ts +1 -19
  5. package/dist/cli.js +49 -491
  6. package/dist/constants.d.ts +2 -13
  7. package/dist/constants.js +1 -43
  8. package/dist/content/closeout-guidance.d.ts +14 -0
  9. package/dist/content/closeout-guidance.js +42 -0
  10. package/dist/content/core-agents.js +55 -17
  11. package/dist/content/decision-protocol.d.ts +12 -0
  12. package/dist/content/decision-protocol.js +20 -0
  13. package/dist/content/diff-command.d.ts +1 -2
  14. package/dist/content/diff-command.js +8 -94
  15. package/dist/content/examples.d.ts +4 -10
  16. package/dist/content/examples.js +10 -20
  17. package/dist/content/hook-events.js +2 -2
  18. package/dist/content/hook-inline-snippets.d.ts +5 -2
  19. package/dist/content/hook-inline-snippets.js +33 -1
  20. package/dist/content/hook-manifest.d.ts +3 -4
  21. package/dist/content/hook-manifest.js +11 -12
  22. package/dist/content/hooks.js +44 -21
  23. package/dist/content/ideate-command.d.ts +2 -0
  24. package/dist/content/ideate-command.js +34 -25
  25. package/dist/content/iron-laws.d.ts +5 -5
  26. package/dist/content/iron-laws.js +5 -5
  27. package/dist/content/language-policy.d.ts +2 -0
  28. package/dist/content/language-policy.js +13 -0
  29. package/dist/content/learnings.d.ts +3 -4
  30. package/dist/content/learnings.js +26 -50
  31. package/dist/content/meta-skill.js +33 -22
  32. package/dist/content/next-command.js +41 -38
  33. package/dist/content/node-hooks.js +17 -345
  34. package/dist/content/opencode-plugin.js +5 -103
  35. package/dist/content/research-playbooks.js +14 -14
  36. package/dist/content/review-loop.d.ts +2 -0
  37. package/dist/content/review-loop.js +8 -0
  38. package/dist/content/session-hooks.js +15 -47
  39. package/dist/content/skills.d.ts +0 -5
  40. package/dist/content/skills.js +55 -128
  41. package/dist/content/stage-common-guidance.d.ts +0 -1
  42. package/dist/content/stage-common-guidance.js +17 -14
  43. package/dist/content/stage-schema.d.ts +26 -1
  44. package/dist/content/stage-schema.js +121 -40
  45. package/dist/content/stages/_lint-metadata/index.js +9 -15
  46. package/dist/content/stages/brainstorm.js +22 -43
  47. package/dist/content/stages/design.js +37 -57
  48. package/dist/content/stages/plan.js +22 -13
  49. package/dist/content/stages/review.js +24 -27
  50. package/dist/content/stages/scope.js +34 -46
  51. package/dist/content/stages/ship.js +7 -4
  52. package/dist/content/stages/spec.js +20 -9
  53. package/dist/content/stages/tdd.js +64 -44
  54. package/dist/content/start-command.js +13 -12
  55. package/dist/content/status-command.d.ts +2 -7
  56. package/dist/content/status-command.js +19 -146
  57. package/dist/content/subagents.d.ts +0 -5
  58. package/dist/content/subagents.js +51 -28
  59. package/dist/content/templates.d.ts +1 -1
  60. package/dist/content/templates.js +126 -135
  61. package/dist/content/track-render-context.d.ts +17 -0
  62. package/dist/content/track-render-context.js +44 -0
  63. package/dist/content/tree-command.d.ts +1 -2
  64. package/dist/content/tree-command.js +4 -87
  65. package/dist/content/utility-skills.d.ts +2 -29
  66. package/dist/content/utility-skills.js +2 -1534
  67. package/dist/content/view-command.js +31 -11
  68. package/dist/delegation.d.ts +1 -1
  69. package/dist/delegation.js +5 -15
  70. package/dist/doctor-registry.js +20 -21
  71. package/dist/doctor.js +88 -344
  72. package/dist/flow-state.d.ts +3 -0
  73. package/dist/flow-state.js +2 -0
  74. package/dist/harness-adapters.d.ts +1 -1
  75. package/dist/harness-adapters.js +51 -58
  76. package/dist/install.js +128 -358
  77. package/dist/internal/advance-stage.js +3 -9
  78. package/dist/internal/compound-readiness.d.ts +1 -1
  79. package/dist/internal/compound-readiness.js +1 -1
  80. package/dist/internal/tdd-loop-status.d.ts +1 -1
  81. package/dist/internal/tdd-loop-status.js +1 -1
  82. package/dist/knowledge-store.d.ts +16 -10
  83. package/dist/knowledge-store.js +51 -15
  84. package/dist/policy.js +16 -105
  85. package/dist/run-archive.d.ts +4 -6
  86. package/dist/run-archive.js +15 -20
  87. package/dist/run-persistence.d.ts +2 -2
  88. package/dist/run-persistence.js +3 -9
  89. package/package.json +1 -2
  90. package/dist/content/archive-command.d.ts +0 -2
  91. package/dist/content/archive-command.js +0 -124
  92. package/dist/content/compound-command.d.ts +0 -5
  93. package/dist/content/compound-command.js +0 -193
  94. package/dist/content/contexts.d.ts +0 -18
  95. package/dist/content/contexts.js +0 -24
  96. package/dist/content/contracts.d.ts +0 -2
  97. package/dist/content/contracts.js +0 -51
  98. package/dist/content/doctor-references.d.ts +0 -2
  99. package/dist/content/doctor-references.js +0 -150
  100. package/dist/content/eval-scaffold.d.ts +0 -15
  101. package/dist/content/eval-scaffold.js +0 -370
  102. package/dist/content/feature-command.d.ts +0 -2
  103. package/dist/content/feature-command.js +0 -123
  104. package/dist/content/flow-map.d.ts +0 -23
  105. package/dist/content/flow-map.js +0 -134
  106. package/dist/content/harness-doc.d.ts +0 -2
  107. package/dist/content/harness-doc.js +0 -202
  108. package/dist/content/harness-playbooks.d.ts +0 -24
  109. package/dist/content/harness-playbooks.js +0 -393
  110. package/dist/content/harness-tool-refs.d.ts +0 -20
  111. package/dist/content/harness-tool-refs.js +0 -268
  112. package/dist/content/ops-command.d.ts +0 -2
  113. package/dist/content/ops-command.js +0 -71
  114. package/dist/content/protocols.d.ts +0 -7
  115. package/dist/content/protocols.js +0 -215
  116. package/dist/content/retro-command.d.ts +0 -2
  117. package/dist/content/retro-command.js +0 -165
  118. package/dist/content/rewind-command.d.ts +0 -2
  119. package/dist/content/rewind-command.js +0 -106
  120. package/dist/content/tdd-log-command.d.ts +0 -2
  121. package/dist/content/tdd-log-command.js +0 -85
  122. package/dist/eval/agents/single-shot.d.ts +0 -27
  123. package/dist/eval/agents/single-shot.js +0 -79
  124. package/dist/eval/agents/with-tools.d.ts +0 -44
  125. package/dist/eval/agents/with-tools.js +0 -261
  126. package/dist/eval/agents/workflow.d.ts +0 -31
  127. package/dist/eval/agents/workflow.js +0 -155
  128. package/dist/eval/baseline.d.ts +0 -38
  129. package/dist/eval/baseline.js +0 -282
  130. package/dist/eval/config-loader.d.ts +0 -14
  131. package/dist/eval/config-loader.js +0 -395
  132. package/dist/eval/corpus.d.ts +0 -30
  133. package/dist/eval/corpus.js +0 -330
  134. package/dist/eval/cost-guard.d.ts +0 -102
  135. package/dist/eval/cost-guard.js +0 -190
  136. package/dist/eval/diff.d.ts +0 -64
  137. package/dist/eval/diff.js +0 -323
  138. package/dist/eval/llm-client.d.ts +0 -176
  139. package/dist/eval/llm-client.js +0 -267
  140. package/dist/eval/mode.d.ts +0 -28
  141. package/dist/eval/mode.js +0 -61
  142. package/dist/eval/progress.d.ts +0 -83
  143. package/dist/eval/progress.js +0 -59
  144. package/dist/eval/report.d.ts +0 -11
  145. package/dist/eval/report.js +0 -181
  146. package/dist/eval/rubric-loader.d.ts +0 -20
  147. package/dist/eval/rubric-loader.js +0 -143
  148. package/dist/eval/runner.d.ts +0 -81
  149. package/dist/eval/runner.js +0 -746
  150. package/dist/eval/runs.d.ts +0 -41
  151. package/dist/eval/runs.js +0 -114
  152. package/dist/eval/sandbox.d.ts +0 -38
  153. package/dist/eval/sandbox.js +0 -137
  154. package/dist/eval/tools/glob.d.ts +0 -2
  155. package/dist/eval/tools/glob.js +0 -163
  156. package/dist/eval/tools/grep.d.ts +0 -2
  157. package/dist/eval/tools/grep.js +0 -152
  158. package/dist/eval/tools/index.d.ts +0 -7
  159. package/dist/eval/tools/index.js +0 -35
  160. package/dist/eval/tools/read.d.ts +0 -2
  161. package/dist/eval/tools/read.js +0 -122
  162. package/dist/eval/tools/types.d.ts +0 -49
  163. package/dist/eval/tools/types.js +0 -41
  164. package/dist/eval/tools/write.d.ts +0 -2
  165. package/dist/eval/tools/write.js +0 -92
  166. package/dist/eval/types.d.ts +0 -561
  167. package/dist/eval/types.js +0 -47
  168. package/dist/eval/verifiers/judge.d.ts +0 -40
  169. package/dist/eval/verifiers/judge.js +0 -256
  170. package/dist/eval/verifiers/rules.d.ts +0 -24
  171. package/dist/eval/verifiers/rules.js +0 -218
  172. package/dist/eval/verifiers/structural.d.ts +0 -14
  173. package/dist/eval/verifiers/structural.js +0 -171
  174. package/dist/eval/verifiers/traceability.d.ts +0 -23
  175. package/dist/eval/verifiers/traceability.js +0 -84
  176. package/dist/eval/verifiers/workflow-consistency.d.ts +0 -21
  177. package/dist/eval/verifiers/workflow-consistency.js +0 -225
  178. package/dist/eval/workflow-corpus.d.ts +0 -7
  179. package/dist/eval/workflow-corpus.js +0 -207
  180. package/dist/feature-system.d.ts +0 -42
  181. package/dist/feature-system.js +0 -432
  182. package/dist/internal/knowledge-digest.d.ts +0 -7
  183. package/dist/internal/knowledge-digest.js +0 -93
@@ -1,4 +1,8 @@
1
1
  import { RUNTIME_ROOT } from "../constants.js";
2
+ import { diffSubcommandMarkdown } from "./diff-command.js";
3
+ import { statusSubcommandMarkdown } from "./status-command.js";
4
+ import { treeSubcommandMarkdown } from "./tree-command.js";
5
+ import { conversationLanguagePolicyMarkdown } from "./language-policy.js";
2
6
  const VIEW_SKILL_FOLDER = "flow-view";
3
7
  const VIEW_SKILL_NAME = "flow-view";
4
8
  export function viewCommandContract() {
@@ -11,20 +15,21 @@ Unified read-only command surface for flow visibility.
11
15
  Subcommands:
12
16
  - \`/cc-view\` or \`/cc-view status\` -> status snapshot
13
17
  - \`/cc-view tree\` -> structural flow tree
14
- - \`/cc-view diff\` -> baseline delta map
18
+ - \`/cc-view diff\` -> read-only git delta map
15
19
 
16
20
  ## HARD-GATE
17
21
 
22
+ ${conversationLanguagePolicyMarkdown()}
18
23
  - \`/cc-view\` is strictly read-only at wrapper level.
19
- - Do not mutate flow-state unless routing to \`diff\` (which updates snapshot baseline by design).
24
+ - Do not mutate flow-state or derived state from any subcommand.
20
25
 
21
26
  ## Routing
22
27
 
23
28
  1. Parse subcommand (default \`status\`).
24
29
  2. Route:
25
- - \`status\` -> load \`${RUNTIME_ROOT}/commands/status.md\` + \`${RUNTIME_ROOT}/skills/flow-status/SKILL.md\`
26
- - \`tree\` -> load \`${RUNTIME_ROOT}/commands/tree.md\` + \`${RUNTIME_ROOT}/skills/flow-tree/SKILL.md\`
27
- - \`diff\` -> load \`${RUNTIME_ROOT}/commands/diff.md\` + \`${RUNTIME_ROOT}/skills/flow-diff/SKILL.md\`
30
+ - \`status\` -> use the **Status Subcommand** section in \`${RUNTIME_ROOT}/skills/${VIEW_SKILL_FOLDER}/SKILL.md\`
31
+ - \`tree\` -> use the **Tree Subcommand** section in \`${RUNTIME_ROOT}/skills/${VIEW_SKILL_FOLDER}/SKILL.md\`
32
+ - \`diff\` -> use the **Diff Subcommand** section in \`${RUNTIME_ROOT}/skills/${VIEW_SKILL_FOLDER}/SKILL.md\`
28
33
  3. Unknown subcommand -> print supported values and stop.
29
34
 
30
35
  ## Headless mode
@@ -32,7 +37,7 @@ Subcommands:
32
37
  For machine orchestration, emit one JSON envelope:
33
38
 
34
39
  \`\`\`json
35
- {"version":"1","kind":"stage-output","stage":"review","payload":{"command":"/cc-view","subcommand":"status","summary":"<short>"},"emittedAt":"<ISO-8601>"}
40
+ {"version":"1","kind":"stage-output","stage":"non-flow","payload":{"command":"/cc-view","subcommand":"status","summary":"<short>"},"emittedAt":"<ISO-8601>"}
36
41
  \`\`\`
37
42
 
38
43
  Validate envelopes with:
@@ -44,9 +49,12 @@ Validate envelopes with:
44
49
  `;
45
50
  }
46
51
  export function viewCommandSkillMarkdown() {
52
+ const status = statusSubcommandMarkdown();
53
+ const tree = treeSubcommandMarkdown();
54
+ const diff = diffSubcommandMarkdown();
47
55
  return `---
48
56
  name: ${VIEW_SKILL_NAME}
49
- description: "Unified read-only view router for status/tree/diff flow visibility commands."
57
+ description: "Unified read-only view skill for status/tree/diff flow visibility commands."
50
58
  ---
51
59
 
52
60
  # /cc-view
@@ -59,10 +67,22 @@ Wrapper is read-only and dispatch-only. It must not mutate flow state directly.
59
67
 
60
68
  1. Parse optional subcommand token:
61
69
  - missing -> \`status\`
62
- - \`status\` -> dispatch to \`${RUNTIME_ROOT}/commands/status.md\`
63
- - \`tree\` -> dispatch to \`${RUNTIME_ROOT}/commands/tree.md\`
64
- - \`diff\` -> dispatch to \`${RUNTIME_ROOT}/commands/diff.md\`
65
- 2. Execute the target command contract and skill.
70
+ - \`status\` -> run **Status Subcommand** below
71
+ - \`tree\` -> run **Tree Subcommand** below
72
+ - \`diff\` -> run **Diff Subcommand** below
73
+ 2. Execute only the chosen subcommand section.
66
74
  3. Return concise output and suggest \`/cc-view <subcommand>\` variants for navigation.
75
+
76
+ ## Status Subcommand
77
+
78
+ ${status}
79
+
80
+ ## Tree Subcommand
81
+
82
+ ${tree}
83
+
84
+ ## Diff Subcommand
85
+
86
+ ${diff}
67
87
  `;
68
88
  }
@@ -70,7 +70,7 @@ export type DelegationLedger = {
70
70
  };
71
71
  /**
72
72
  * Heuristic: does a changed file path strongly imply a trust-boundary
73
- * surface? Used to gate adversarial-reviewer requirements on review.
73
+ * surface? Used by tests and prompt guidance for risk-triggered review.
74
74
  *
75
75
  * Matches authN/Z, credentials, crypto, policy, or explicit sanitization
76
76
  * or injection handling. Intentionally excludes broad terms like `input`
@@ -55,7 +55,7 @@ async function resolveReviewDiffBase(projectRoot) {
55
55
  }
56
56
  /**
57
57
  * Heuristic: does a changed file path strongly imply a trust-boundary
58
- * surface? Used to gate adversarial-reviewer requirements on review.
58
+ * surface? Used by tests and prompt guidance for risk-triggered review.
59
59
  *
60
60
  * Matches authN/Z, credentials, crypto, policy, or explicit sanitization
61
61
  * or injection handling. Intentionally excludes broad terms like `input`
@@ -69,8 +69,7 @@ async function detectReviewTriggers(projectRoot) {
69
69
  const empty = {
70
70
  changedFiles: 0,
71
71
  changedLines: 0,
72
- trustBoundaryChanged: false,
73
- requireAdversarialReviewer: false
72
+ trustBoundaryChanged: false
74
73
  };
75
74
  const base = await resolveReviewDiffBase(projectRoot);
76
75
  if (!base) {
@@ -94,12 +93,10 @@ async function detectReviewTriggers(projectRoot) {
94
93
  .map((line) => line.trim())
95
94
  .filter((line) => line.length > 0);
96
95
  const trustBoundaryChanged = changedPaths.some((p) => isTrustBoundaryPath(p));
97
- const requireAdversarialReviewer = changedLines > 100 || changedFiles > 10 || trustBoundaryChanged;
98
96
  return {
99
97
  changedFiles,
100
98
  changedLines,
101
- trustBoundaryChanged,
102
- requireAdversarialReviewer
99
+ trustBoundaryChanged
103
100
  };
104
101
  }
105
102
  catch {
@@ -277,20 +274,13 @@ export async function checkMandatoryDelegations(projectRoot, stage, options = {}
277
274
  const harnesses = config?.harnesses ?? [];
278
275
  const fallbacks = harnesses.map((h) => HARNESS_ADAPTERS[h].capabilities.subagentFallback);
279
276
  const expectedMode = expectedFulfillmentMode(fallbacks);
280
- const reviewTriggers = stage === "review" ? await detectReviewTriggers(projectRoot) : null;
281
277
  for (const agent of mandatory) {
282
278
  const rows = forRun.filter((e) => e.agent === agent);
283
279
  const completedRows = rows.filter((e) => e.status === "completed");
284
280
  const waivedRows = rows.filter((e) => e.status === "waived");
285
- const adversarialReviewerRequired = stage === "review" &&
286
- agent === "reviewer" &&
287
- reviewTriggers?.requireAdversarialReviewer === true;
288
- const requiredCompletedCount = adversarialReviewerRequired ? 2 : 1;
289
- const hasCompleted = completedRows.length >= requiredCompletedCount;
281
+ const hasCompleted = completedRows.length >= 1;
290
282
  const hasWaived = waivedRows.length > 0;
291
- const hasAdversarialSkill = !adversarialReviewerRequired ||
292
- completedRows.some((row) => row.skill === "adversarial-review");
293
- const ok = hasWaived || (hasCompleted && hasAdversarialSkill);
283
+ const ok = hasWaived || hasCompleted;
294
284
  if (!ok) {
295
285
  missing.push(agent);
296
286
  continue;
@@ -1,6 +1,5 @@
1
- import { DOCTOR_REFERENCE_DIR } from "./content/doctor-references.js";
2
1
  function ref(fileName) {
3
- return `${DOCTOR_REFERENCE_DIR}/${fileName}`;
2
+ return `docs/${fileName}`;
4
3
  }
5
4
  const RULES = [
6
5
  {
@@ -9,7 +8,7 @@ const RULES = [
9
8
  severity: "info",
10
9
  summary: "Gate reconciliation status update.",
11
10
  fix: "No action required unless subsequent gate checks fail.",
12
- docRef: ref("state-and-gates.md")
11
+ docRef: ref("config.md")
13
12
  }
14
13
  },
15
14
  {
@@ -18,7 +17,7 @@ const RULES = [
18
17
  severity: "warning",
19
18
  summary: "Advisory signal; runtime can continue with caution.",
20
19
  fix: "Address when possible to prevent future drift or degraded behavior.",
21
- docRef: ref("README.md")
20
+ docRef: "README.md"
22
21
  }
23
22
  },
24
23
  {
@@ -27,7 +26,7 @@ const RULES = [
27
26
  severity: "warning",
28
27
  summary: "Stage skill quality guardrail check.",
29
28
  fix: "Tune generated stage skill content and re-run `cclaw sync`.",
30
- docRef: ref("runtime-layout.md")
29
+ docRef: "README.md"
31
30
  }
32
31
  },
33
32
  {
@@ -36,7 +35,7 @@ const RULES = [
36
35
  severity: "error",
37
36
  summary: "Required runtime tooling availability check.",
38
37
  fix: "Install the missing required tool and re-run `cclaw doctor`.",
39
- docRef: ref("tooling-capabilities.md")
38
+ docRef: "README.md"
40
39
  }
41
40
  },
42
41
  {
@@ -45,7 +44,7 @@ const RULES = [
45
44
  severity: "error",
46
45
  summary: "Generated runtime surface presence check.",
47
46
  fix: "Run `cclaw sync` to regenerate runtime files, then re-run doctor.",
48
- docRef: ref("runtime-layout.md")
47
+ docRef: "README.md"
49
48
  }
50
49
  },
51
50
  {
@@ -54,7 +53,7 @@ const RULES = [
54
53
  severity: "error",
55
54
  summary: "Hook wiring and lifecycle integration check.",
56
55
  fix: "Repair hook/plugin wiring (usually via `cclaw sync`) and validate harness config.",
57
- docRef: ref("hooks-and-lifecycle.md")
56
+ docRef: ref("harnesses.md")
58
57
  }
59
58
  },
60
59
  {
@@ -63,16 +62,16 @@ const RULES = [
63
62
  severity: "error",
64
63
  summary: "Harness shim and routing file consistency check.",
65
64
  fix: "Regenerate harness adapters via `cclaw sync`; confirm enabled harness list.",
66
- docRef: ref("harness-and-routing.md")
65
+ docRef: ref("harnesses.md")
67
66
  }
68
67
  },
69
68
  {
70
- test: /^(flow_state:|state:|contexts:|gates:)/,
69
+ test: /^(flow_state:|state:|gates:)/,
71
70
  metadata: {
72
71
  severity: "error",
73
72
  summary: "Flow state and gate evidence consistency check.",
74
73
  fix: "Repair flow-state artifacts and gate evidence, then run `cclaw doctor --reconcile-gates`.",
75
- docRef: ref("state-and-gates.md")
74
+ docRef: ref("config.md")
76
75
  }
77
76
  },
78
77
  {
@@ -81,16 +80,16 @@ const RULES = [
81
80
  severity: "error",
82
81
  summary: "Knowledge and artifact runtime integrity check.",
83
82
  fix: "Restore missing runtime files under `.cclaw/` or re-run `cclaw sync`.",
84
- docRef: ref("runtime-layout.md")
83
+ docRef: "README.md"
85
84
  }
86
85
  },
87
86
  {
88
- test: /^(meta_skill:|protocol:|stage_skill:|context_mode:)/,
87
+ test: /^(meta_skill:|protocol:|stage_skill:)/,
89
88
  metadata: {
90
89
  severity: "error",
91
90
  summary: "Routing skill and protocol integrity check.",
92
- fix: "Regenerate runtime references and skills via `cclaw sync`, then re-run doctor.",
93
- docRef: ref("harness-and-routing.md")
91
+ fix: "Regenerate runtime skills via `cclaw sync`, then re-run doctor.",
92
+ docRef: ref("harnesses.md")
94
93
  }
95
94
  },
96
95
  {
@@ -105,7 +104,7 @@ const RULES = [
105
104
  severity: "warning",
106
105
  summary: "Reference/overview doc integrity (non-blocking).",
107
106
  fix: "Run `cclaw sync` to regenerate the reference doc from the canonical source.",
108
- docRef: ref("harness-and-routing.md")
107
+ docRef: ref("harnesses.md")
109
108
  }
110
109
  },
111
110
  {
@@ -114,7 +113,7 @@ const RULES = [
114
113
  severity: "error",
115
114
  summary: "Mandatory delegation completion check.",
116
115
  fix: "Complete or explicitly waive missing mandatory delegations in delegation log.",
117
- docRef: ref("delegation-and-preamble.md")
116
+ docRef: ref("harnesses.md")
118
117
  }
119
118
  },
120
119
  {
@@ -123,7 +122,7 @@ const RULES = [
123
122
  severity: "error",
124
123
  summary: "Cross-artifact traceability integrity check.",
125
124
  fix: "Restore criterion/task/test ID mappings across spec, plan, and tdd artifacts.",
126
- docRef: ref("traceability.md")
125
+ docRef: "README.md"
127
126
  }
128
127
  },
129
128
  {
@@ -132,7 +131,7 @@ const RULES = [
132
131
  severity: "error",
133
132
  summary: "Config or policy schema consistency check.",
134
133
  fix: "Fix config/rules drift, then run `cclaw sync` and re-run doctor.",
135
- docRef: ref("config-and-policy.md")
134
+ docRef: ref("config.md")
136
135
  }
137
136
  }
138
137
  ];
@@ -143,9 +142,9 @@ export function doctorCheckMetadata(checkName) {
143
142
  }
144
143
  }
145
144
  return {
146
- severity: "error",
145
+ severity: "warning",
147
146
  summary: "Unclassified doctor check.",
148
147
  fix: "Report this check name to cclaw maintainers so doctor-registry can classify it explicitly.",
149
- docRef: ref("README.md")
148
+ docRef: "README.md"
150
149
  };
151
150
  }