cclaw-cli 0.14.0 → 0.15.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.
- package/dist/content/archive-command.js +6 -6
- package/dist/content/contracts.js +1 -1
- package/dist/content/diff-command.js +2 -2
- package/dist/content/feature-command.js +7 -7
- package/dist/content/harnesses-doc.js +13 -9
- package/dist/content/hooks.js +2 -2
- package/dist/content/learnings.d.ts +0 -1
- package/dist/content/learnings.js +0 -9
- package/dist/content/next-command.js +7 -7
- package/dist/content/ops-command.js +6 -6
- package/dist/content/retro-command.js +3 -3
- package/dist/content/rewind-command.js +5 -5
- package/dist/content/skills.js +0 -2
- package/dist/content/stage-common-guidance.js +14 -6
- package/dist/content/stage-schema.d.ts +2 -108
- package/dist/content/stage-schema.js +7 -1515
- package/dist/content/stages/brainstorm.d.ts +2 -0
- package/dist/content/stages/brainstorm.js +136 -0
- package/dist/content/stages/design.d.ts +2 -0
- package/dist/content/stages/design.js +215 -0
- package/dist/content/stages/index.d.ts +8 -0
- package/dist/content/stages/index.js +11 -0
- package/dist/content/stages/plan.d.ts +2 -0
- package/dist/content/stages/plan.js +146 -0
- package/dist/content/stages/review.d.ts +2 -0
- package/dist/content/stages/review.js +197 -0
- package/dist/content/stages/schema-types.d.ts +94 -0
- package/dist/content/stages/schema-types.js +1 -0
- package/dist/content/stages/scope.d.ts +2 -0
- package/dist/content/stages/scope.js +188 -0
- package/dist/content/stages/ship.d.ts +2 -0
- package/dist/content/stages/ship.js +142 -0
- package/dist/content/stages/spec.d.ts +2 -0
- package/dist/content/stages/spec.js +136 -0
- package/dist/content/stages/tdd.d.ts +2 -0
- package/dist/content/stages/tdd.js +184 -0
- package/dist/content/status-command.d.ts +2 -2
- package/dist/content/status-command.js +13 -13
- package/dist/content/tdd-log-command.js +6 -6
- package/dist/content/templates.d.ts +1 -1
- package/dist/content/templates.js +2 -2
- package/dist/content/tree-command.js +3 -3
- package/dist/content/utility-skills.js +1 -1
- package/dist/content/view-command.js +3 -3
- package/dist/doctor-registry.js +22 -4
- package/dist/doctor.js +8 -32
- package/dist/harness-adapters.d.ts +1 -0
- package/dist/harness-adapters.js +3 -63
- package/dist/install.js +4 -10
- package/dist/policy.js +1 -1
- package/dist/runs.js +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// SPEC
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
export const SPEC = {
|
|
5
|
+
stage: "spec",
|
|
6
|
+
skillFolder: "specification-authoring",
|
|
7
|
+
skillName: "specification-authoring",
|
|
8
|
+
skillDescription: "Specification stage. Produce measurable, testable requirements without ambiguity.",
|
|
9
|
+
hardGate: "Do NOT plan tasks or write implementation code. This stage produces a specification document only. Every requirement must be expressed in observable, testable terms.",
|
|
10
|
+
ironLaw: "EVERY ACCEPTANCE CRITERION MUST BE OBSERVABLE AND TESTABLE — OR IT DOES NOT EXIST.",
|
|
11
|
+
purpose: "Create a testable specification aligned with approved design and constraints.",
|
|
12
|
+
whenToUse: [
|
|
13
|
+
"After design lock",
|
|
14
|
+
"Before planning and implementation",
|
|
15
|
+
"When acceptance criteria must be measurable"
|
|
16
|
+
],
|
|
17
|
+
whenNotToUse: [
|
|
18
|
+
"Design decisions are still unresolved or disputed",
|
|
19
|
+
"The task is implementation-only cleanup with unchanged behavior",
|
|
20
|
+
"You still need to challenge scope rather than author requirements"
|
|
21
|
+
],
|
|
22
|
+
checklist: [
|
|
23
|
+
"Read upstream — load design artifact and scope contract. Cross-reference architecture decisions.",
|
|
24
|
+
"Define measurable acceptance criteria — each criterion must be observable and falsifiable. No vague adjectives.",
|
|
25
|
+
"Capture edge cases — for each criterion, define at least one boundary condition and one error condition.",
|
|
26
|
+
"Document constraints and assumptions — regulatory, system, integration, and performance boundaries. Surface implicit assumptions explicitly.",
|
|
27
|
+
"Confirm testability — for each acceptance criterion, describe the test that would prove it. If untestable, rewrite the criterion.",
|
|
28
|
+
"Write spec artifact and request user approval — wait for explicit confirmation before proceeding."
|
|
29
|
+
],
|
|
30
|
+
interactionProtocol: [
|
|
31
|
+
"Express each requirement in observable terms.",
|
|
32
|
+
"Resolve ambiguity before moving to plan. Challenge vague language.",
|
|
33
|
+
"Capture assumptions explicitly, not implicitly.",
|
|
34
|
+
"Require user confirmation on the written spec. **STOP.** Do NOT proceed to plan until user approves.",
|
|
35
|
+
"For each criterion, ask: how would you test this? If the answer is unclear, rewrite.",
|
|
36
|
+
"When encountering ambiguity, classify it before acting: (A) ask user for missing info, (B) enumerate interpretations and pick one with justification, (C) propose hypothesis with validation path. Do NOT silently resolve ambiguity."
|
|
37
|
+
],
|
|
38
|
+
process: [
|
|
39
|
+
"Define measurable acceptance criteria.",
|
|
40
|
+
"Capture constraints, assumptions, and edge cases.",
|
|
41
|
+
"Build testability map: criterion -> test description.",
|
|
42
|
+
"Confirm testability for each criterion.",
|
|
43
|
+
"Write spec artifact and request approval."
|
|
44
|
+
],
|
|
45
|
+
requiredGates: [
|
|
46
|
+
{ id: "spec_acceptance_measurable", description: "Acceptance criteria are measurable and observable." },
|
|
47
|
+
{ id: "spec_edge_cases_documented", description: "Boundary and error conditions are defined for each criterion." },
|
|
48
|
+
{ id: "spec_constraints_documented", description: "Constraints and assumptions are explicit." },
|
|
49
|
+
{ id: "spec_testability_confirmed", description: "Each criterion has a described test method." },
|
|
50
|
+
{ id: "spec_user_approved", description: "User approved the final written spec." }
|
|
51
|
+
],
|
|
52
|
+
requiredEvidence: [
|
|
53
|
+
"Artifact written to `.cclaw/artifacts/04-spec.md`.",
|
|
54
|
+
"Each acceptance criterion maps to a testable outcome.",
|
|
55
|
+
"Edge cases documented per criterion.",
|
|
56
|
+
"Approval marker captured in artifact."
|
|
57
|
+
],
|
|
58
|
+
inputs: ["design artifact", "business constraints", "quality requirements"],
|
|
59
|
+
requiredContext: [
|
|
60
|
+
"design lock baseline",
|
|
61
|
+
"regulatory or system boundaries",
|
|
62
|
+
"integration constraints"
|
|
63
|
+
],
|
|
64
|
+
outputs: [
|
|
65
|
+
"measurable specification",
|
|
66
|
+
"acceptance-to-testability map",
|
|
67
|
+
"approved spec artifact"
|
|
68
|
+
],
|
|
69
|
+
blockers: [
|
|
70
|
+
"non-measurable criteria",
|
|
71
|
+
"constraints missing",
|
|
72
|
+
"open ambiguities remain"
|
|
73
|
+
],
|
|
74
|
+
exitCriteria: [
|
|
75
|
+
"spec approved by user",
|
|
76
|
+
"required gates marked satisfied",
|
|
77
|
+
"plan-ready acceptance mapping exists",
|
|
78
|
+
"testability confirmed for all criteria"
|
|
79
|
+
],
|
|
80
|
+
antiPatterns: [
|
|
81
|
+
"High-level goals without measurable outcomes",
|
|
82
|
+
"Implicit assumptions",
|
|
83
|
+
"Proceeding to plan before approval",
|
|
84
|
+
"Using vague adjectives (fast, intuitive, robust) without thresholds"
|
|
85
|
+
],
|
|
86
|
+
redFlags: [
|
|
87
|
+
"Criteria use vague language (fast, intuitive, robust) without thresholds",
|
|
88
|
+
"No explicit assumptions section",
|
|
89
|
+
"No approval record",
|
|
90
|
+
"No testability mapping",
|
|
91
|
+
"Edge cases missing or deferred"
|
|
92
|
+
],
|
|
93
|
+
policyNeedles: ["Acceptance Criteria", "Constraints", "Testability", "approved spec", "Edge Cases"],
|
|
94
|
+
artifactFile: "04-spec.md",
|
|
95
|
+
next: "plan",
|
|
96
|
+
reviewSections: [
|
|
97
|
+
{
|
|
98
|
+
title: "Acceptance Criteria Audit",
|
|
99
|
+
evaluationPoints: [
|
|
100
|
+
"Is every criterion observable (can you point to evidence of pass/fail)?",
|
|
101
|
+
"Is every criterion measurable (numeric threshold or boolean outcome)?",
|
|
102
|
+
"Is every criterion falsifiable (can you describe what failure looks like)?",
|
|
103
|
+
"Does every criterion trace to a design decision (Design Decision Ref)?",
|
|
104
|
+
"Are there any vague adjectives (fast, intuitive, robust) without thresholds?"
|
|
105
|
+
],
|
|
106
|
+
stopGate: true
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: "Testability Audit",
|
|
110
|
+
evaluationPoints: [
|
|
111
|
+
"Does every criterion have a concrete test description in the Testability Map?",
|
|
112
|
+
"Does every test specify a verification approach (unit, integration, e2e, manual)?",
|
|
113
|
+
"Does every test include a runnable command or manual steps?",
|
|
114
|
+
"Are edge cases (boundary + error) defined for every criterion?",
|
|
115
|
+
"Can you run every verification command right now and get a meaningful result?"
|
|
116
|
+
],
|
|
117
|
+
stopGate: true
|
|
118
|
+
}
|
|
119
|
+
],
|
|
120
|
+
completionStatus: ["DONE", "DONE_WITH_CONCERNS", "BLOCKED"],
|
|
121
|
+
crossStageTrace: {
|
|
122
|
+
readsFrom: [".cclaw/artifacts/03-design.md", ".cclaw/artifacts/02-scope.md"],
|
|
123
|
+
writesTo: [".cclaw/artifacts/04-spec.md"],
|
|
124
|
+
traceabilityRule: "Every acceptance criterion must trace to a design decision. Every downstream plan task must trace to a spec criterion."
|
|
125
|
+
},
|
|
126
|
+
artifactValidation: [
|
|
127
|
+
{ section: "Acceptance Criteria", required: true, validationRule: "Each criterion is observable, measurable, and falsifiable. Table must include a Requirement Ref column linking to R# IDs in 02-scope.md and a Design Decision Ref column tracing back to design artifact. AC IDs (AC-1, AC-2…) are stable across revisions — dropped ACs stay with Priority `DROPPED`." },
|
|
128
|
+
{ section: "Edge Cases", required: true, validationRule: "At least one boundary and one error condition per criterion." },
|
|
129
|
+
{ section: "Constraints and Assumptions", required: true, validationRule: "All implicit assumptions surfaced. Constraints have sources." },
|
|
130
|
+
{ section: "Testability Map", required: true, validationRule: "Each criterion maps to a concrete test description with verification approach (unit, integration, e2e, manual) and command or manual steps." },
|
|
131
|
+
{ section: "Vague to Fixed", required: false, validationRule: "If present: table with original vague wording and rewritten observable/testable version for each ambiguous requirement." },
|
|
132
|
+
{ section: "Non-Functional Requirements", required: false, validationRule: "If present: performance thresholds, security constraints, scalability limits, reliability targets with measurable values." },
|
|
133
|
+
{ section: "Interface Contracts", required: false, validationRule: "If present: for each module boundary list produces (outputs) and consumes (inputs) with data types." },
|
|
134
|
+
{ section: "Approval", required: true, validationRule: "Explicit user approval marker present." }
|
|
135
|
+
]
|
|
136
|
+
};
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// TDD — RED → GREEN → REFACTOR cycle (merged test + build)
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
export const TDD = {
|
|
5
|
+
stage: "tdd",
|
|
6
|
+
skillFolder: "test-driven-development",
|
|
7
|
+
skillName: "test-driven-development",
|
|
8
|
+
skillDescription: "Full TDD cycle: RED (failing tests), GREEN (minimal implementation), REFACTOR (cleanup). One plan slice at a time with strict traceability.",
|
|
9
|
+
hardGate: "Do NOT merge, ship, or skip review. Follow RED → GREEN → REFACTOR strictly for each plan slice. Do NOT write implementation code before RED tests exist. Do NOT skip the REFACTOR step.",
|
|
10
|
+
ironLaw: "NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST — THE RED FAILURE IS THE SPEC.",
|
|
11
|
+
purpose: "Implement features through the TDD cycle: write failing tests, make them pass with minimal code, then refactor.",
|
|
12
|
+
whenToUse: [
|
|
13
|
+
"After plan confirmation",
|
|
14
|
+
"For every behavior change in scope",
|
|
15
|
+
"Before review stage"
|
|
16
|
+
],
|
|
17
|
+
whenNotToUse: [
|
|
18
|
+
"Plan approval is still pending WAIT_FOR_CONFIRM",
|
|
19
|
+
"The change is docs-only and does not alter behavior",
|
|
20
|
+
"The stage intent is review/ship sign-off rather than implementation"
|
|
21
|
+
],
|
|
22
|
+
checklist: [
|
|
23
|
+
"Select plan slice — pick one task from the plan. Do not batch multiple tasks.",
|
|
24
|
+
"Map to acceptance criterion — identify the specific spec criterion this test proves.",
|
|
25
|
+
"RED: Write behavior-focused test — test the expected behavior, not implementation details. Tests MUST fail.",
|
|
26
|
+
"RED: Capture failure output — copy the exact failure output as RED evidence. Record in artifact.",
|
|
27
|
+
"GREEN: Minimal implementation — write the smallest code change that makes the RED tests pass. No extra features.",
|
|
28
|
+
"GREEN: Run full suite — execute ALL tests, not just the ones you wrote. The full suite must be GREEN.",
|
|
29
|
+
"GREEN: Verify no regressions — if any existing test breaks, fix the regression before proceeding.",
|
|
30
|
+
"REFACTOR: Improve code quality — without changing behavior. Document what you changed and why.",
|
|
31
|
+
"Record evidence — capture RED failure, GREEN output, and REFACTOR notes in the TDD artifact.",
|
|
32
|
+
"Annotate traceability — link to plan task ID and spec criterion.",
|
|
33
|
+
"Repeat for each slice — return to step 1 for the next plan slice."
|
|
34
|
+
],
|
|
35
|
+
interactionProtocol: [
|
|
36
|
+
"Pick one planned slice at a time.",
|
|
37
|
+
"Write behavior-focused tests before changing implementation (RED).",
|
|
38
|
+
"Capture and store failing output as RED evidence.",
|
|
39
|
+
"Apply minimal change to satisfy RED tests (GREEN).",
|
|
40
|
+
"Run full suite, not partial checks, for GREEN validation.",
|
|
41
|
+
"Refactor without changing behavior and document rationale (REFACTOR).",
|
|
42
|
+
"Stop if regressions appear and fix before proceeding.",
|
|
43
|
+
"If a test passes unexpectedly, investigate: does the behavior already exist, or is the test wrong?"
|
|
44
|
+
],
|
|
45
|
+
process: [
|
|
46
|
+
"Select slice and map to acceptance criterion.",
|
|
47
|
+
"Write test(s) that fail for expected reason (RED).",
|
|
48
|
+
"Run tests and capture failure output.",
|
|
49
|
+
"Implement smallest change needed for GREEN.",
|
|
50
|
+
"Run full tests and build checks.",
|
|
51
|
+
"Perform refactor pass preserving behavior.",
|
|
52
|
+
"Record RED, GREEN, and REFACTOR evidence in artifact.",
|
|
53
|
+
"Annotate traceability to plan task and spec criterion."
|
|
54
|
+
],
|
|
55
|
+
requiredGates: [
|
|
56
|
+
{ id: "tdd_red_test_written", description: "Failing tests exist before implementation changes." },
|
|
57
|
+
{ id: "tdd_red_failure_captured", description: "Failure output is captured as evidence." },
|
|
58
|
+
{ id: "tdd_trace_to_acceptance", description: "RED tests trace to explicit acceptance criteria." },
|
|
59
|
+
{ id: "tdd_red_failure_reason_verified", description: "Failure is for the expected reason, not an unrelated error." },
|
|
60
|
+
{ id: "tdd_green_full_suite", description: "Full relevant suite passes in GREEN state." },
|
|
61
|
+
{ id: "tdd_refactor_completed", description: "Refactor pass completed with behavior preservation verified." },
|
|
62
|
+
{ id: "tdd_refactor_notes_written", description: "Refactor decisions and outcomes are documented." },
|
|
63
|
+
{ id: "tdd_traceable_to_plan", description: "Change traceability to plan slice is explicit." }
|
|
64
|
+
],
|
|
65
|
+
requiredEvidence: [
|
|
66
|
+
"Artifact updated at `.cclaw/artifacts/06-tdd.md` with RED, GREEN, and REFACTOR sections.",
|
|
67
|
+
"Failing command output captured (RED).",
|
|
68
|
+
"Full test/build output recorded (GREEN).",
|
|
69
|
+
"Acceptance mapping documented.",
|
|
70
|
+
"Failure reason analysis recorded.",
|
|
71
|
+
"Refactor rationale captured.",
|
|
72
|
+
"Traceability to task identifier is documented."
|
|
73
|
+
],
|
|
74
|
+
inputs: ["approved plan slice", "spec acceptance criterion", "test harness configuration", "coding standards and constraints"],
|
|
75
|
+
requiredContext: ["plan artifact", "spec artifact", "existing test patterns"],
|
|
76
|
+
outputs: ["failing test set", "passing implementation", "refactor evidence", "review-ready change set"],
|
|
77
|
+
blockers: [
|
|
78
|
+
"tests pass before behavior change (RED failure missing)",
|
|
79
|
+
"full suite not green",
|
|
80
|
+
"behavior changed during refactor",
|
|
81
|
+
"no evidence recorded"
|
|
82
|
+
],
|
|
83
|
+
exitCriteria: [
|
|
84
|
+
"RED evidence exists and is traceable",
|
|
85
|
+
"GREEN evidence captured with full suite pass",
|
|
86
|
+
"REFACTOR evidence captured",
|
|
87
|
+
"required gates marked satisfied",
|
|
88
|
+
"traceability annotated"
|
|
89
|
+
],
|
|
90
|
+
antiPatterns: [
|
|
91
|
+
"Writing code before failing test",
|
|
92
|
+
"Asserting implementation details instead of behavior",
|
|
93
|
+
"Big-bang implementation across multiple slices",
|
|
94
|
+
"Partial test runs presented as GREEN",
|
|
95
|
+
"Skipping evidence capture",
|
|
96
|
+
"Undocumented refactor changes",
|
|
97
|
+
"Adding features beyond what RED tests require"
|
|
98
|
+
],
|
|
99
|
+
redFlags: [
|
|
100
|
+
"No failing test output (RED missing)",
|
|
101
|
+
"Implementation edits appear before RED evidence",
|
|
102
|
+
"No full-suite GREEN evidence",
|
|
103
|
+
"No refactor notes",
|
|
104
|
+
"Multiple tasks implemented in one pass without justification",
|
|
105
|
+
"Files changed outside current slice scope"
|
|
106
|
+
],
|
|
107
|
+
policyNeedles: ["RED", "GREEN", "REFACTOR", "failing test", "full test suite", "acceptance criteria", "traceable to plan slice"],
|
|
108
|
+
artifactFile: "06-tdd.md",
|
|
109
|
+
next: "review",
|
|
110
|
+
reviewSections: [
|
|
111
|
+
{
|
|
112
|
+
title: "RED Evidence Audit",
|
|
113
|
+
evaluationPoints: [
|
|
114
|
+
"Does every slice have a captured failing test output?",
|
|
115
|
+
"Does each failure reason match the expected missing behavior (not a typo or config error)?",
|
|
116
|
+
"Were tests written BEFORE any production code for that slice?",
|
|
117
|
+
"Does each RED test assert observable behavior, not implementation details?",
|
|
118
|
+
"Is there a test for each acceptance criterion mapped in the plan?"
|
|
119
|
+
],
|
|
120
|
+
stopGate: true
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
title: "GREEN/REFACTOR Audit",
|
|
124
|
+
evaluationPoints: [
|
|
125
|
+
"Does GREEN evidence show a FULL suite pass (not partial)?",
|
|
126
|
+
"Is the GREEN implementation minimal — no features beyond what RED tests require?",
|
|
127
|
+
"Does the REFACTOR step preserve all existing behavior (no new failures)?",
|
|
128
|
+
"Are REFACTOR notes documented with rationale?",
|
|
129
|
+
"Is traceability complete: every change links to plan task ID and spec criterion?"
|
|
130
|
+
],
|
|
131
|
+
stopGate: true
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
title: "Test Pyramid + Size Audit",
|
|
135
|
+
evaluationPoints: [
|
|
136
|
+
"Is the tests-added count skewed toward Small (unit) tests, with Medium and Large used only when a real boundary justifies the cost?",
|
|
137
|
+
"Does every newly added test declare a size class (Small / Medium / Large) — either inline in the test file or in the TDD artifact table?",
|
|
138
|
+
"Are Large tests reserved for genuine end-to-end user journeys (not substitutes for unit coverage)?",
|
|
139
|
+
"Has the slice avoided using Medium/Large tests to paper over testability problems that should be fixed at the design layer?"
|
|
140
|
+
],
|
|
141
|
+
stopGate: false
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
title: "Prove-It Reproduction (bug-fix slices)",
|
|
145
|
+
evaluationPoints: [
|
|
146
|
+
"Does the artifact identify this slice as a bug fix, and if so, include a reproduction test checked in alongside the fix?",
|
|
147
|
+
"Is there captured RED evidence from running the reproduction WITHOUT the fix applied?",
|
|
148
|
+
"Is there captured GREEN evidence from the same reproduction AFTER the fix was applied?",
|
|
149
|
+
"Is there a note confirming the reproduction test fails again if the fix is reverted (or equivalent evidence that the test is actually pinned to this fix)?"
|
|
150
|
+
],
|
|
151
|
+
stopGate: false
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
title: "State-over-Interaction + Beyoncé Coverage",
|
|
155
|
+
evaluationPoints: [
|
|
156
|
+
"Do assertions target observable state (return values, persisted data, HTTP responses, logs) rather than which internal helpers were called?",
|
|
157
|
+
"Are mocks/spies used only at true trust boundaries (network, filesystem, time, external services), not for module-internal collaborators?",
|
|
158
|
+
"For every public surface touched in this slice (exported API, CLI flag, config key, env var, exit code, schema field) — does at least one test observe it?",
|
|
159
|
+
"If a bug or review finding revealed an uncovered surface, was a test added alongside the fix, not just the code change?",
|
|
160
|
+
"Are interaction-style assertions (e.g. `toHaveBeenCalledWith` without a state assertion) justified by an explicit boundary comment, or flagged for follow-up?"
|
|
161
|
+
],
|
|
162
|
+
stopGate: false
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
completionStatus: ["DONE", "DONE_WITH_CONCERNS", "BLOCKED"],
|
|
166
|
+
crossStageTrace: {
|
|
167
|
+
readsFrom: [".cclaw/artifacts/05-plan.md", ".cclaw/artifacts/04-spec.md", ".cclaw/artifacts/03-design.md"],
|
|
168
|
+
writesTo: [".cclaw/artifacts/06-tdd.md"],
|
|
169
|
+
traceabilityRule: "Every RED test traces to a plan task. Every GREEN change traces to a RED test. Every plan task traces to a spec criterion. Design decisions inform test strategy. Evidence chain must be unbroken."
|
|
170
|
+
},
|
|
171
|
+
artifactValidation: [
|
|
172
|
+
{ section: "RED Evidence", required: true, validationRule: "Failing test output captured per slice." },
|
|
173
|
+
{ section: "Acceptance Mapping", required: true, validationRule: "Each RED test links to a plan task and spec criterion." },
|
|
174
|
+
{ section: "Failure Analysis", required: true, validationRule: "Failure reason matches expected missing behavior." },
|
|
175
|
+
{ section: "GREEN Evidence", required: true, validationRule: "Full suite pass output captured." },
|
|
176
|
+
{ section: "REFACTOR Notes", required: true, validationRule: "What changed, why, behavior preservation confirmed." },
|
|
177
|
+
{ section: "Traceability", required: true, validationRule: "Plan task ID and spec criterion linked." },
|
|
178
|
+
{ section: "Verification Ladder", required: false, validationRule: "If present: per-slice verification tier (static, command, behavioral, human) with evidence for highest tier reached." },
|
|
179
|
+
{ section: "Coverage Targets", required: false, validationRule: "If present: per-module or per-code-type coverage thresholds with current values and measurement commands." },
|
|
180
|
+
{ section: "Test Pyramid Shape", required: false, validationRule: "If present: per-slice count of Small/Medium/Large tests added, to let reviewers verify the suite is not drifting top-heavy." },
|
|
181
|
+
{ section: "Prove-It Reproduction", required: false, validationRule: "Required for bug-fix slices: original failing reproduction test (RED without fix), passing output with fix (GREEN), and a note confirming the test fails again if the fix is reverted." }
|
|
182
|
+
],
|
|
183
|
+
waveExecutionAllowed: true
|
|
184
|
+
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Command contract for /cc-status — a read-only snapshot command.
|
|
2
|
+
* Command contract for /cc-view status — a read-only snapshot command.
|
|
3
3
|
* Does not mutate state. Always safe to run.
|
|
4
4
|
*/
|
|
5
5
|
export declare function statusCommandContract(): string;
|
|
6
6
|
/**
|
|
7
|
-
* Skill body for /cc-status — read-only status snapshot.
|
|
7
|
+
* Skill body for /cc-view status — read-only status snapshot.
|
|
8
8
|
*/
|
|
9
9
|
export declare function statusCommandSkillMarkdown(): string;
|
|
@@ -23,13 +23,13 @@ function snapshotPath() {
|
|
|
23
23
|
return `${RUNTIME_ROOT}/state/flow-state.snapshot.json`;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
* Command contract for /cc-status — a read-only snapshot command.
|
|
26
|
+
* Command contract for /cc-view status — a read-only snapshot command.
|
|
27
27
|
* Does not mutate state. Always safe to run.
|
|
28
28
|
*/
|
|
29
29
|
export function statusCommandContract() {
|
|
30
30
|
const flowPath = flowStatePath();
|
|
31
31
|
const delegationPath = delegationLogPath();
|
|
32
|
-
return `# /cc-status
|
|
32
|
+
return `# /cc-view status
|
|
33
33
|
|
|
34
34
|
## Purpose
|
|
35
35
|
|
|
@@ -41,10 +41,10 @@ time to answer "where are we?" without advancing the flow.
|
|
|
41
41
|
|
|
42
42
|
## HARD-GATE
|
|
43
43
|
|
|
44
|
-
- **Do not** use \`/cc-status\` output to infer gate completion for decisions — cite
|
|
44
|
+
- **Do not** use \`/cc-view status\` output to infer gate completion for decisions — cite
|
|
45
45
|
artifact evidence via \`/cc-next\` when advancing.
|
|
46
46
|
- **Do not** mutate \`${flowPath}\` or delegation log from this command.
|
|
47
|
-
- **Do not** rewrite \`${snapshotPath()}\` from this command (use \`/cc-diff\`).
|
|
47
|
+
- **Do not** rewrite \`${snapshotPath()}\` from this command (use \`/cc-view diff\`).
|
|
48
48
|
|
|
49
49
|
## Algorithm
|
|
50
50
|
|
|
@@ -59,7 +59,7 @@ time to answer "where are we?" without advancing the flow.
|
|
|
59
59
|
- Compute the duration as \`now - signalTimestamp\` and render compactly: \`<X>m\`, \`<X>h<Y>m\`, or \`<X>d<Y>h\`.
|
|
60
60
|
- If no signal exists, render \`(unknown)\`.
|
|
61
61
|
5. Optionally read **\`${snapshotPath()}\`** to compute gate delta versus prior baseline:
|
|
62
|
-
- If missing or invalid, render \`delta: (baseline unavailable; run /cc-diff)\`.
|
|
62
|
+
- If missing or invalid, render \`delta: (baseline unavailable; run /cc-view diff)\`.
|
|
63
63
|
6. Read the top of **\`${knowledgePath}\`** — surface up to 3 most recent entries
|
|
64
64
|
(by trailing timestamp or source marker).
|
|
65
65
|
7. Emit the visual status block described below. Do **not** load any stage skill.
|
|
@@ -83,14 +83,14 @@ cclaw status
|
|
|
83
83
|
- <latest entry summary>
|
|
84
84
|
- <second entry summary>
|
|
85
85
|
- <third entry summary>
|
|
86
|
-
next: /cc-next · /cc-tree · /cc-diff
|
|
86
|
+
next: /cc-next · /cc-view tree · /cc-view diff
|
|
87
87
|
\`\`\`
|
|
88
88
|
|
|
89
89
|
## Anti-patterns
|
|
90
90
|
|
|
91
91
|
- Inventing gate status without reading \`${flowPath}\`.
|
|
92
92
|
- Reporting delegations as satisfied when the log says \`pending\`.
|
|
93
|
-
- Advancing the stage from \`/cc-status\` — progression belongs to \`/cc-next\`.
|
|
93
|
+
- Advancing the stage from \`/cc-view status\` — progression belongs to \`/cc-next\`.
|
|
94
94
|
- Hiding stale stages; stale markers must be surfaced directly in the status line.
|
|
95
95
|
|
|
96
96
|
## Primary skill
|
|
@@ -99,7 +99,7 @@ cclaw status
|
|
|
99
99
|
`;
|
|
100
100
|
}
|
|
101
101
|
/**
|
|
102
|
-
* Skill body for /cc-status — read-only status snapshot.
|
|
102
|
+
* Skill body for /cc-view status — read-only status snapshot.
|
|
103
103
|
*/
|
|
104
104
|
export function statusCommandSkillMarkdown() {
|
|
105
105
|
const flowPath = flowStatePath();
|
|
@@ -109,11 +109,11 @@ name: ${STATUS_SKILL_NAME}
|
|
|
109
109
|
description: "Read-only visual snapshot of the cclaw flow with progress bar, gate delta, delegations, and stale markers."
|
|
110
110
|
---
|
|
111
111
|
|
|
112
|
-
# /cc-status — Flow Status Snapshot
|
|
112
|
+
# /cc-view status — Flow Status Snapshot
|
|
113
113
|
|
|
114
114
|
## Overview
|
|
115
115
|
|
|
116
|
-
\`/cc-status\` is the quickest way to answer "where are we in the flow?" without
|
|
116
|
+
\`/cc-view status\` is the quickest way to answer "where are we in the flow?" without
|
|
117
117
|
advancing or mutating anything. Safe to run at any point.
|
|
118
118
|
|
|
119
119
|
## HARD-GATE
|
|
@@ -132,7 +132,7 @@ a read-only command. Do **not** update \`${snapshotPath()}\` here.
|
|
|
132
132
|
- Render \`<X>d<Y>h\`, \`<X>h<Y>m\`, \`<X>m\`, or \`(unknown)\`.
|
|
133
133
|
5. Try reading \`${snapshotPath()}\` for gate delta:
|
|
134
134
|
- If available, compare current stage \`passed\` / \`blocked\` sets against baseline.
|
|
135
|
-
- If unavailable, render \`delta: (baseline unavailable; run /cc-diff)\`.
|
|
135
|
+
- If unavailable, render \`delta: (baseline unavailable; run /cc-view diff)\`.
|
|
136
136
|
6. Read \`${RUNTIME_ROOT}/knowledge.jsonl\`. If missing or empty → knowledge highlights are \`(none recorded)\`. Parse each line as JSON and surface its \`trigger\`/\`action\`.
|
|
137
137
|
7. For each gate in \`stageGateCatalog[currentStage].required\`:
|
|
138
138
|
- Satisfied if present in \`passed\` and absent from \`blocked\`.
|
|
@@ -151,11 +151,11 @@ a read-only command. Do **not** update \`${snapshotPath()}\` here.
|
|
|
151
151
|
- Keep output compact (≤ 30 lines) — status, not narrative.
|
|
152
152
|
- Report counts, not full artifact contents.
|
|
153
153
|
- If any data source is missing or corrupt, say so explicitly rather than guessing.
|
|
154
|
-
- Include \`/cc-tree\` for deep structure and \`/cc-diff\` for before/after map in the final line.
|
|
154
|
+
- Include \`/cc-view tree\` for deep structure and \`/cc-view diff\` for before/after map in the final line.
|
|
155
155
|
|
|
156
156
|
## Anti-patterns
|
|
157
157
|
|
|
158
|
-
- Rebuilding trace-matrix or running doctor from \`/cc-status\` — those belong to dedicated tools.
|
|
158
|
+
- Rebuilding trace-matrix or running doctor from \`/cc-view status\` — those belong to dedicated tools.
|
|
159
159
|
- Treating absence of delegation log as "all delegations complete".
|
|
160
160
|
- Mutating state to "clean up" during a status check.
|
|
161
161
|
`;
|
|
@@ -8,7 +8,7 @@ function flowStatePath() {
|
|
|
8
8
|
return `${RUNTIME_ROOT}/state/flow-state.json`;
|
|
9
9
|
}
|
|
10
10
|
export function tddLogCommandContract() {
|
|
11
|
-
return `# /cc-tdd-log
|
|
11
|
+
return `# /cc-ops tdd-log
|
|
12
12
|
|
|
13
13
|
## Purpose
|
|
14
14
|
|
|
@@ -21,10 +21,10 @@ Record explicit RED/GREEN/REFACTOR evidence used by workflow guard and doctor ch
|
|
|
21
21
|
|
|
22
22
|
## Subcommands
|
|
23
23
|
|
|
24
|
-
- \`/cc-tdd-log red <slice> <command> [note]\`
|
|
25
|
-
- \`/cc-tdd-log green <slice> <command> [note]\`
|
|
26
|
-
- \`/cc-tdd-log refactor <slice> <command> [note]\`
|
|
27
|
-
- \`/cc-tdd-log show\`
|
|
24
|
+
- \`/cc-ops tdd-log red <slice> <command> [note]\`
|
|
25
|
+
- \`/cc-ops tdd-log green <slice> <command> [note]\`
|
|
26
|
+
- \`/cc-ops tdd-log refactor <slice> <command> [note]\`
|
|
27
|
+
- \`/cc-ops tdd-log show\`
|
|
28
28
|
|
|
29
29
|
## Log Schema
|
|
30
30
|
|
|
@@ -48,7 +48,7 @@ name: ${TDD_LOG_SKILL_NAME}
|
|
|
48
48
|
description: "Append RED/GREEN/REFACTOR entries into tdd-cycle-log.jsonl for guard/doctor enforcement."
|
|
49
49
|
---
|
|
50
50
|
|
|
51
|
-
# /cc-tdd-log
|
|
51
|
+
# /cc-ops tdd-log
|
|
52
52
|
|
|
53
53
|
## HARD-GATE
|
|
54
54
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export declare const ARTIFACT_TEMPLATES: Record<string, string>;
|
|
2
2
|
export declare const RULEBOOK_MARKDOWN = "# Cclaw Rulebook\n\n## MUST_ALWAYS\n- Follow flow order: brainstorm -> scope -> design -> spec -> plan -> tdd -> review -> ship\n- Require explicit user confirmation after plan before TDD\n- Keep evidence artifacts in `.cclaw/artifacts/`\n- Enforce RED before GREEN in TDD\n- Run two-layer review (spec_compliance and code_quality) before ship\n- Validate all inputs before processing \u2014 never trust external data without sanitization\n- Prefer immutable data patterns and pure functions where the language supports them\n- Follow existing repo conventions, patterns, and directory structure \u2014 match the codebase\n- Verify claims with fresh evidence: \"tests pass\" requires running tests in this message\n- Use conventional commits: `type(scope): description` (feat, fix, refactor, test, docs, chore)\n\n## MUST_NEVER\n- Skip RED phase and jump directly to GREEN in TDD\n- Ship with critical review findings\n- Start implementation during /brainstorm\n- Modify generated cclaw files manually when CLI can regenerate them\n- Commit `.cclaw/` or generated shim files\n- Expose secrets, tokens, API keys, or absolute system paths in agent output\n- Duplicate existing functionality without explicit justification \u2014 search before building\n- Bypass security checks, linting hooks, or type checking to \"move faster\"\n- Claim success (\"Done,\" \"All good,\" \"Tests pass\") without running verification in this message\n- Make changes outside the blast radius of the current task without user consent\n\n## DELEGATION\nWhen a task requires specialist knowledge (security audit, performance profiling, database review),\ndelegate to a specialized agent or skill if the harness supports it. The primary agent should:\n1. Identify the specialist domain\n2. Provide focused context (relevant files, the specific concern)\n3. Evaluate the specialist output before acting on it \u2014 do not blindly apply recommendations\n";
|
|
3
|
-
export declare const CURSOR_WORKFLOW_RULE_MDC = "---\ndescription: cclaw workflow guardrails for Cursor agent sessions\nglobs:\n - \"**/*\"\nalwaysApply: true\n---\n\n<!-- cclaw-managed-cursor-workflow-rule -->\n\n# Cclaw Workflow Guardrails\n\n## Activation Rule\n\nBefore responding to coding work:\n1. Read `.cclaw/state/flow-state.json`.\n2. Start with `/cc` or continue with `/cc-next`.\n3. If no software-stage flow applies, respond normally.\n\n## Stage Order\n\n`brainstorm -> scope -> design -> spec -> plan -> tdd -> review -> ship`\n\nTrack-specific skips are allowed only when `flow-state.track` + `skippedStages` explicitly say so.\n\n## Task Classification\n\n| Class | Route |\n|---|---|\n| non-trivial software work | `/cc <idea>` |\n| trivial software fix | `/cc <idea>` (quick or medium track) |\n| bugfix with repro | `/cc <idea>` and enforce RED-first in tdd |\n| pure question / non-software | direct answer (no stage flow) |\n\n## Command Surface\n\n- `/cc` = entry and resume.\n- `/cc-next` = only progression path.\n- `/cc-learn` = knowledge capture and recall.\n\n## Verification Discipline\n\n- No completion claim without fresh command evidence in this turn.\n- Do not mark gates passed from memory.\n- Keep evidence in `.cclaw/artifacts/`; archive via `/cc-archive` (agent flow) or archive runtime.\n\n## Delegation And Approvals\n\n- Machine-only checks in design/plan/tdd/review/ship should auto-dispatch when tooling supports it.\n- Ask for user input only at explicit approval gates (scope mode, plan approval, challenge resolution, ship finalization).\n- If harness capabilities are partial, record waiver reasons in delegation logs.\n\n## Routing Source Of Truth\n\n- Primary router: `.cclaw/skills/using-cclaw/SKILL.md`.\n- Protocols: `.cclaw/references/protocols/*.md`.\n- Preamble budget: `.cclaw/references/protocols/ethos.md`.\n";
|
|
3
|
+
export declare const CURSOR_WORKFLOW_RULE_MDC = "---\ndescription: cclaw workflow guardrails for Cursor agent sessions\nglobs:\n - \"**/*\"\nalwaysApply: true\n---\n\n<!-- cclaw-managed-cursor-workflow-rule -->\n\n# Cclaw Workflow Guardrails\n\n## Activation Rule\n\nBefore responding to coding work:\n1. Read `.cclaw/state/flow-state.json`.\n2. Start with `/cc` or continue with `/cc-next`.\n3. If no software-stage flow applies, respond normally.\n\n## Stage Order\n\n`brainstorm -> scope -> design -> spec -> plan -> tdd -> review -> ship`\n\nTrack-specific skips are allowed only when `flow-state.track` + `skippedStages` explicitly say so.\n\n## Task Classification\n\n| Class | Route |\n|---|---|\n| non-trivial software work | `/cc <idea>` |\n| trivial software fix | `/cc <idea>` (quick or medium track) |\n| bugfix with repro | `/cc <idea>` and enforce RED-first in tdd |\n| pure question / non-software | direct answer (no stage flow) |\n\n## Command Surface\n\n- `/cc` = entry and resume.\n- `/cc-next` = only progression path.\n- `/cc-learn` = knowledge capture and recall.\n\n## Verification Discipline\n\n- No completion claim without fresh command evidence in this turn.\n- Do not mark gates passed from memory.\n- Keep evidence in `.cclaw/artifacts/`; archive via `/cc-ops archive` (agent flow) or archive runtime.\n\n## Delegation And Approvals\n\n- Machine-only checks in design/plan/tdd/review/ship should auto-dispatch when tooling supports it.\n- Ask for user input only at explicit approval gates (scope mode, plan approval, challenge resolution, ship finalization).\n- If harness capabilities are partial, record waiver reasons in delegation logs.\n\n## Routing Source Of Truth\n\n- Primary router: `.cclaw/skills/using-cclaw/SKILL.md`.\n- Protocols: `.cclaw/references/protocols/*.md`.\n- Preamble budget: `.cclaw/references/protocols/ethos.md`.\n";
|
|
4
4
|
export declare function buildRulesJson(): Record<string, unknown>;
|
|
@@ -481,7 +481,7 @@ Execution rule: complete and verify each wave before starting the next wave.
|
|
|
481
481
|
- Exceptions (if any):
|
|
482
482
|
|
|
483
483
|
## Retro Gate Handoff
|
|
484
|
-
- Run \`/cc-retro\` before archive.
|
|
484
|
+
- Run \`/cc-ops retro\` before archive.
|
|
485
485
|
- Retro artifact path: \`.cclaw/artifacts/09-retro.md\`
|
|
486
486
|
- Archive remains blocked until retro gate is complete.
|
|
487
487
|
`,
|
|
@@ -593,7 +593,7 @@ Track-specific skips are allowed only when \`flow-state.track\` + \`skippedStage
|
|
|
593
593
|
|
|
594
594
|
- No completion claim without fresh command evidence in this turn.
|
|
595
595
|
- Do not mark gates passed from memory.
|
|
596
|
-
- Keep evidence in \`.cclaw/artifacts/\`; archive via \`/cc-archive\` (agent flow) or archive runtime.
|
|
596
|
+
- Keep evidence in \`.cclaw/artifacts/\`; archive via \`/cc-ops archive\` (agent flow) or archive runtime.
|
|
597
597
|
|
|
598
598
|
## Delegation And Approvals
|
|
599
599
|
|
|
@@ -14,7 +14,7 @@ function rewindLogPath() {
|
|
|
14
14
|
return `${RUNTIME_ROOT}/state/rewind-log.jsonl`;
|
|
15
15
|
}
|
|
16
16
|
export function treeCommandContract() {
|
|
17
|
-
return `# /cc-tree
|
|
17
|
+
return `# /cc-view tree
|
|
18
18
|
|
|
19
19
|
## Purpose
|
|
20
20
|
|
|
@@ -23,7 +23,7 @@ stale markers, and artifact presence.
|
|
|
23
23
|
|
|
24
24
|
## HARD-GATE
|
|
25
25
|
|
|
26
|
-
- \`/cc-tree\` is read-only. Do not mutate flow-state or artifacts.
|
|
26
|
+
- \`/cc-view tree\` is read-only. Do not mutate flow-state or artifacts.
|
|
27
27
|
- Use values from \`${flowStatePath()}\` and \`${delegationLogPath()}\`; never infer missing evidence.
|
|
28
28
|
|
|
29
29
|
## Algorithm
|
|
@@ -64,7 +64,7 @@ name: ${TREE_SKILL_NAME}
|
|
|
64
64
|
description: "Render a visual flow tree for stages, gates, delegations, and artifacts."
|
|
65
65
|
---
|
|
66
66
|
|
|
67
|
-
# /cc-tree
|
|
67
|
+
# /cc-view tree
|
|
68
68
|
|
|
69
69
|
## HARD-GATE
|
|
70
70
|
|
|
@@ -771,7 +771,7 @@ description: "Read-only curation pass over the canonical strict-JSONL knowledge
|
|
|
771
771
|
## When to run
|
|
772
772
|
|
|
773
773
|
- Triggered automatically by **\`/cc-learn curate\`**.
|
|
774
|
-
- Recommended after \`/cc-archive\` (or archive runtime) of a feature run, when knowledge has grown.
|
|
774
|
+
- Recommended after \`/cc-ops archive\` (or archive runtime) of a feature run, when knowledge has grown.
|
|
775
775
|
- Recommended when active entry count exceeds **50**.
|
|
776
776
|
|
|
777
777
|
## Audit dimensions
|
|
@@ -48,9 +48,9 @@ Wrapper is read-only and dispatch-only. It must not mutate flow state directly.
|
|
|
48
48
|
|
|
49
49
|
1. Parse optional subcommand token:
|
|
50
50
|
- missing -> \`status\`
|
|
51
|
-
- \`status\` -> dispatch to
|
|
52
|
-
- \`tree\` -> dispatch to
|
|
53
|
-
- \`diff\` -> dispatch to
|
|
51
|
+
- \`status\` -> dispatch to \`${RUNTIME_ROOT}/commands/status.md\`
|
|
52
|
+
- \`tree\` -> dispatch to \`${RUNTIME_ROOT}/commands/tree.md\`
|
|
53
|
+
- \`diff\` -> dispatch to \`${RUNTIME_ROOT}/commands/diff.md\`
|
|
54
54
|
2. Execute the target command contract and skill.
|
|
55
55
|
3. Return concise output and suggest \`/cc-view <subcommand>\` variants for navigation.
|
|
56
56
|
`;
|
package/dist/doctor-registry.js
CHANGED
|
@@ -58,7 +58,7 @@ const RULES = [
|
|
|
58
58
|
}
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
|
-
test: /^(hook:|lifecycle:|git_hooks:)/,
|
|
61
|
+
test: /^(hook:|hooks:|lifecycle:|git_hooks:)/,
|
|
62
62
|
metadata: {
|
|
63
63
|
severity: "error",
|
|
64
64
|
summary: "Hook wiring and lifecycle integration check.",
|
|
@@ -67,7 +67,7 @@ const RULES = [
|
|
|
67
67
|
}
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
|
-
test: /^(shim:|agents:cclaw_block|rules:cursor:
|
|
70
|
+
test: /^(shim:|agents:cclaw_block|rules:cursor:)/,
|
|
71
71
|
metadata: {
|
|
72
72
|
severity: "error",
|
|
73
73
|
summary: "Harness shim and routing file consistency check.",
|
|
@@ -84,6 +84,24 @@ const RULES = [
|
|
|
84
84
|
docRef: ref("state-and-gates.md")
|
|
85
85
|
}
|
|
86
86
|
},
|
|
87
|
+
{
|
|
88
|
+
test: /^(knowledge:|artifacts:|runs:)/,
|
|
89
|
+
metadata: {
|
|
90
|
+
severity: "error",
|
|
91
|
+
summary: "Knowledge and artifact runtime integrity check.",
|
|
92
|
+
fix: "Restore missing runtime files under `.cclaw/` or re-run `cclaw sync`.",
|
|
93
|
+
docRef: ref("runtime-layout.md")
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
test: /^(meta_skill:|protocol:|stage_skill:|context_mode:)/,
|
|
98
|
+
metadata: {
|
|
99
|
+
severity: "error",
|
|
100
|
+
summary: "Routing skill and protocol integrity check.",
|
|
101
|
+
fix: "Regenerate runtime references and skills via `cclaw sync`, then re-run doctor.",
|
|
102
|
+
docRef: ref("harness-and-routing.md")
|
|
103
|
+
}
|
|
104
|
+
},
|
|
87
105
|
{
|
|
88
106
|
test: /^delegation:/,
|
|
89
107
|
metadata: {
|
|
@@ -119,9 +137,9 @@ export function doctorCheckMetadata(checkName) {
|
|
|
119
137
|
}
|
|
120
138
|
}
|
|
121
139
|
return {
|
|
122
|
-
severity: "
|
|
140
|
+
severity: "error",
|
|
123
141
|
summary: "Unclassified doctor check.",
|
|
124
|
-
fix: "
|
|
142
|
+
fix: "Report this check name to cclaw maintainers so doctor-registry can classify it explicitly.",
|
|
125
143
|
docRef: ref("README.md")
|
|
126
144
|
};
|
|
127
145
|
}
|