cclaw-cli 0.49.0 → 0.51.0

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 (181) hide show
  1. package/README.md +54 -82
  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 +51 -9
  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 +2 -0
  23. package/dist/content/ideate-command.d.ts +2 -0
  24. package/dist/content/ideate-command.js +31 -25
  25. package/dist/content/iron-laws.d.ts +5 -5
  26. package/dist/content/iron-laws.js +5 -5
  27. package/dist/content/learnings.d.ts +3 -4
  28. package/dist/content/learnings.js +24 -50
  29. package/dist/content/meta-skill.js +31 -21
  30. package/dist/content/next-command.js +38 -38
  31. package/dist/content/node-hooks.js +17 -343
  32. package/dist/content/opencode-plugin.js +2 -100
  33. package/dist/content/research-playbooks.js +14 -14
  34. package/dist/content/review-loop.d.ts +2 -0
  35. package/dist/content/review-loop.js +8 -0
  36. package/dist/content/session-hooks.js +14 -46
  37. package/dist/content/skills.d.ts +0 -5
  38. package/dist/content/skills.js +53 -128
  39. package/dist/content/stage-common-guidance.d.ts +0 -1
  40. package/dist/content/stage-common-guidance.js +15 -14
  41. package/dist/content/stage-schema.d.ts +26 -1
  42. package/dist/content/stage-schema.js +121 -40
  43. package/dist/content/stages/_lint-metadata/index.js +9 -15
  44. package/dist/content/stages/brainstorm.js +22 -43
  45. package/dist/content/stages/design.js +37 -57
  46. package/dist/content/stages/plan.js +22 -13
  47. package/dist/content/stages/review.js +24 -27
  48. package/dist/content/stages/scope.js +34 -46
  49. package/dist/content/stages/ship.js +7 -4
  50. package/dist/content/stages/spec.js +20 -9
  51. package/dist/content/stages/tdd.js +64 -44
  52. package/dist/content/start-command.js +10 -12
  53. package/dist/content/status-command.d.ts +2 -7
  54. package/dist/content/status-command.js +19 -146
  55. package/dist/content/subagents.d.ts +0 -5
  56. package/dist/content/subagents.js +47 -28
  57. package/dist/content/templates.d.ts +1 -1
  58. package/dist/content/templates.js +126 -135
  59. package/dist/content/track-render-context.d.ts +17 -0
  60. package/dist/content/track-render-context.js +44 -0
  61. package/dist/content/tree-command.d.ts +1 -2
  62. package/dist/content/tree-command.js +4 -87
  63. package/dist/content/utility-skills.d.ts +2 -29
  64. package/dist/content/utility-skills.js +2 -1534
  65. package/dist/content/view-command.js +29 -11
  66. package/dist/delegation.d.ts +1 -1
  67. package/dist/delegation.js +5 -15
  68. package/dist/doctor-registry.js +20 -21
  69. package/dist/doctor.js +88 -344
  70. package/dist/flow-state.d.ts +3 -0
  71. package/dist/flow-state.js +2 -0
  72. package/dist/harness-adapters.d.ts +1 -1
  73. package/dist/harness-adapters.js +48 -57
  74. package/dist/install.js +128 -358
  75. package/dist/internal/advance-stage.js +3 -9
  76. package/dist/internal/compound-readiness.d.ts +1 -1
  77. package/dist/internal/compound-readiness.js +1 -1
  78. package/dist/internal/tdd-loop-status.d.ts +1 -1
  79. package/dist/internal/tdd-loop-status.js +1 -1
  80. package/dist/knowledge-store.d.ts +16 -10
  81. package/dist/knowledge-store.js +51 -15
  82. package/dist/policy.js +16 -105
  83. package/dist/run-archive.d.ts +4 -6
  84. package/dist/run-archive.js +15 -20
  85. package/dist/run-persistence.d.ts +2 -2
  86. package/dist/run-persistence.js +3 -9
  87. package/package.json +1 -2
  88. package/dist/content/archive-command.d.ts +0 -2
  89. package/dist/content/archive-command.js +0 -124
  90. package/dist/content/compound-command.d.ts +0 -5
  91. package/dist/content/compound-command.js +0 -193
  92. package/dist/content/contexts.d.ts +0 -18
  93. package/dist/content/contexts.js +0 -24
  94. package/dist/content/contracts.d.ts +0 -2
  95. package/dist/content/contracts.js +0 -51
  96. package/dist/content/doctor-references.d.ts +0 -2
  97. package/dist/content/doctor-references.js +0 -150
  98. package/dist/content/eval-scaffold.d.ts +0 -15
  99. package/dist/content/eval-scaffold.js +0 -370
  100. package/dist/content/feature-command.d.ts +0 -2
  101. package/dist/content/feature-command.js +0 -123
  102. package/dist/content/flow-map.d.ts +0 -23
  103. package/dist/content/flow-map.js +0 -134
  104. package/dist/content/harness-doc.d.ts +0 -2
  105. package/dist/content/harness-doc.js +0 -202
  106. package/dist/content/harness-playbooks.d.ts +0 -24
  107. package/dist/content/harness-playbooks.js +0 -393
  108. package/dist/content/harness-tool-refs.d.ts +0 -20
  109. package/dist/content/harness-tool-refs.js +0 -268
  110. package/dist/content/ops-command.d.ts +0 -2
  111. package/dist/content/ops-command.js +0 -71
  112. package/dist/content/protocols.d.ts +0 -7
  113. package/dist/content/protocols.js +0 -215
  114. package/dist/content/retro-command.d.ts +0 -2
  115. package/dist/content/retro-command.js +0 -165
  116. package/dist/content/rewind-command.d.ts +0 -2
  117. package/dist/content/rewind-command.js +0 -106
  118. package/dist/content/tdd-log-command.d.ts +0 -2
  119. package/dist/content/tdd-log-command.js +0 -85
  120. package/dist/eval/agents/single-shot.d.ts +0 -27
  121. package/dist/eval/agents/single-shot.js +0 -79
  122. package/dist/eval/agents/with-tools.d.ts +0 -44
  123. package/dist/eval/agents/with-tools.js +0 -261
  124. package/dist/eval/agents/workflow.d.ts +0 -31
  125. package/dist/eval/agents/workflow.js +0 -155
  126. package/dist/eval/baseline.d.ts +0 -38
  127. package/dist/eval/baseline.js +0 -282
  128. package/dist/eval/config-loader.d.ts +0 -14
  129. package/dist/eval/config-loader.js +0 -395
  130. package/dist/eval/corpus.d.ts +0 -30
  131. package/dist/eval/corpus.js +0 -330
  132. package/dist/eval/cost-guard.d.ts +0 -102
  133. package/dist/eval/cost-guard.js +0 -190
  134. package/dist/eval/diff.d.ts +0 -64
  135. package/dist/eval/diff.js +0 -323
  136. package/dist/eval/llm-client.d.ts +0 -176
  137. package/dist/eval/llm-client.js +0 -267
  138. package/dist/eval/mode.d.ts +0 -28
  139. package/dist/eval/mode.js +0 -61
  140. package/dist/eval/progress.d.ts +0 -83
  141. package/dist/eval/progress.js +0 -59
  142. package/dist/eval/report.d.ts +0 -11
  143. package/dist/eval/report.js +0 -181
  144. package/dist/eval/rubric-loader.d.ts +0 -20
  145. package/dist/eval/rubric-loader.js +0 -143
  146. package/dist/eval/runner.d.ts +0 -81
  147. package/dist/eval/runner.js +0 -746
  148. package/dist/eval/runs.d.ts +0 -41
  149. package/dist/eval/runs.js +0 -114
  150. package/dist/eval/sandbox.d.ts +0 -38
  151. package/dist/eval/sandbox.js +0 -137
  152. package/dist/eval/tools/glob.d.ts +0 -2
  153. package/dist/eval/tools/glob.js +0 -163
  154. package/dist/eval/tools/grep.d.ts +0 -2
  155. package/dist/eval/tools/grep.js +0 -152
  156. package/dist/eval/tools/index.d.ts +0 -7
  157. package/dist/eval/tools/index.js +0 -35
  158. package/dist/eval/tools/read.d.ts +0 -2
  159. package/dist/eval/tools/read.js +0 -122
  160. package/dist/eval/tools/types.d.ts +0 -49
  161. package/dist/eval/tools/types.js +0 -41
  162. package/dist/eval/tools/write.d.ts +0 -2
  163. package/dist/eval/tools/write.js +0 -92
  164. package/dist/eval/types.d.ts +0 -561
  165. package/dist/eval/types.js +0 -47
  166. package/dist/eval/verifiers/judge.d.ts +0 -40
  167. package/dist/eval/verifiers/judge.js +0 -256
  168. package/dist/eval/verifiers/rules.d.ts +0 -24
  169. package/dist/eval/verifiers/rules.js +0 -218
  170. package/dist/eval/verifiers/structural.d.ts +0 -14
  171. package/dist/eval/verifiers/structural.js +0 -171
  172. package/dist/eval/verifiers/traceability.d.ts +0 -23
  173. package/dist/eval/verifiers/traceability.js +0 -84
  174. package/dist/eval/verifiers/workflow-consistency.d.ts +0 -21
  175. package/dist/eval/verifiers/workflow-consistency.js +0 -225
  176. package/dist/eval/workflow-corpus.d.ts +0 -7
  177. package/dist/eval/workflow-corpus.js +0 -207
  178. package/dist/feature-system.d.ts +0 -42
  179. package/dist/feature-system.js +0 -432
  180. package/dist/internal/knowledge-digest.d.ts +0 -7
  181. package/dist/internal/knowledge-digest.js +0 -93
@@ -1,4 +1,7 @@
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";
2
5
  const VIEW_SKILL_FOLDER = "flow-view";
3
6
  const VIEW_SKILL_NAME = "flow-view";
4
7
  export function viewCommandContract() {
@@ -11,20 +14,20 @@ Unified read-only command surface for flow visibility.
11
14
  Subcommands:
12
15
  - \`/cc-view\` or \`/cc-view status\` -> status snapshot
13
16
  - \`/cc-view tree\` -> structural flow tree
14
- - \`/cc-view diff\` -> baseline delta map
17
+ - \`/cc-view diff\` -> read-only git delta map
15
18
 
16
19
  ## HARD-GATE
17
20
 
18
21
  - \`/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).
22
+ - Do not mutate flow-state or derived state from any subcommand.
20
23
 
21
24
  ## Routing
22
25
 
23
26
  1. Parse subcommand (default \`status\`).
24
27
  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\`
28
+ - \`status\` -> use the **Status Subcommand** section in \`${RUNTIME_ROOT}/skills/${VIEW_SKILL_FOLDER}/SKILL.md\`
29
+ - \`tree\` -> use the **Tree Subcommand** section in \`${RUNTIME_ROOT}/skills/${VIEW_SKILL_FOLDER}/SKILL.md\`
30
+ - \`diff\` -> use the **Diff Subcommand** section in \`${RUNTIME_ROOT}/skills/${VIEW_SKILL_FOLDER}/SKILL.md\`
28
31
  3. Unknown subcommand -> print supported values and stop.
29
32
 
30
33
  ## Headless mode
@@ -32,7 +35,7 @@ Subcommands:
32
35
  For machine orchestration, emit one JSON envelope:
33
36
 
34
37
  \`\`\`json
35
- {"version":"1","kind":"stage-output","stage":"review","payload":{"command":"/cc-view","subcommand":"status","summary":"<short>"},"emittedAt":"<ISO-8601>"}
38
+ {"version":"1","kind":"stage-output","stage":"non-flow","payload":{"command":"/cc-view","subcommand":"status","summary":"<short>"},"emittedAt":"<ISO-8601>"}
36
39
  \`\`\`
37
40
 
38
41
  Validate envelopes with:
@@ -44,9 +47,12 @@ Validate envelopes with:
44
47
  `;
45
48
  }
46
49
  export function viewCommandSkillMarkdown() {
50
+ const status = statusSubcommandMarkdown();
51
+ const tree = treeSubcommandMarkdown();
52
+ const diff = diffSubcommandMarkdown();
47
53
  return `---
48
54
  name: ${VIEW_SKILL_NAME}
49
- description: "Unified read-only view router for status/tree/diff flow visibility commands."
55
+ description: "Unified read-only view skill for status/tree/diff flow visibility commands."
50
56
  ---
51
57
 
52
58
  # /cc-view
@@ -59,10 +65,22 @@ Wrapper is read-only and dispatch-only. It must not mutate flow state directly.
59
65
 
60
66
  1. Parse optional subcommand token:
61
67
  - 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.
68
+ - \`status\` -> run **Status Subcommand** below
69
+ - \`tree\` -> run **Tree Subcommand** below
70
+ - \`diff\` -> run **Diff Subcommand** below
71
+ 2. Execute only the chosen subcommand section.
66
72
  3. Return concise output and suggest \`/cc-view <subcommand>\` variants for navigation.
73
+
74
+ ## Status Subcommand
75
+
76
+ ${status}
77
+
78
+ ## Tree Subcommand
79
+
80
+ ${tree}
81
+
82
+ ## Diff Subcommand
83
+
84
+ ${diff}
67
85
  `;
68
86
  }
@@ -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
  }