cclaw-cli 0.5.3 → 0.5.5

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.
@@ -22,161 +22,144 @@ const BRAINSTORM = {
22
22
  stage: "brainstorm",
23
23
  skillFolder: "brainstorming",
24
24
  skillName: "brainstorming",
25
- skillDescription: "Design-first stage. Clarify intent, compare options, and get explicit approval before implementation planning.",
26
- hardGate: "Do NOT invoke any implementation skill, write any code, scaffold any project, or take any implementation action until you have presented a design and the user has approved it. This applies to EVERY project regardless of perceived simplicity.",
27
- purpose: "Turn a rough request into an approved design direction with clear assumptions and boundaries.",
25
+ skillDescription: "Design-first stage. Route request complexity, run phased forcing questions, and lock an approved direction before scope/design work.",
26
+ hardGate: "Do NOT invoke implementation skills, write code, scaffold projects, or mutate product behavior until a concrete direction is approved by the user.",
27
+ purpose: "Turn an initial idea into an approved direction through routing, phased grounding, and decision-forcing questions.",
28
28
  whenToUse: [
29
29
  "Starting a new feature or behavior change",
30
- "Requirements are ambiguous or solution path is unclear",
31
- "Before any implementation-stage command"
30
+ "Requirements are ambiguous or trade-offs are unclear",
31
+ "Before any implementation-stage command or architecture commitment"
32
32
  ],
33
33
  whenNotToUse: [
34
- "An approved design, spec, and plan already exist and work is in execution stages",
35
- "The request is strictly branch finalization or release handoff work",
36
- "The task is purely retrospective after ship with no new design decisions needed"
34
+ "A valid approved direction already exists and only execution remains",
35
+ "The request is a pure release/finalization action with no new product decisions",
36
+ "The task is retrospective only (post-ship audit with no new solution choices)"
37
37
  ],
38
38
  checklist: [
39
- "Explore project context check files, docs, recent commits, existing behavior. Summarize what you found (even for seemingly simple projects).",
40
- "Assess scope if the request describes multiple independent subsystems, flag for decomposition before detailed questions.",
41
- "Restate the problem in a SEPARATE message (no questions in this message), summarize what you understood the user wants and why. **STOP and wait** for user to confirm or correct before asking any clarifying questions.",
42
- "Ask clarifying questions one at a time, one per message. You MUST cover these categories before proposing approaches: (a) PURPOSE — why this project exists, who it serves; (b) SCOPE — what it must do, what it must NOT do; (c) BOUNDARIES — error handling, edge cases, failure modes; (d) ENVIRONMENT — how it runs, deploys, installs; (e) CONSTRAINTS — performance, compatibility, dependencies. Skip a category only if the user already provided that info. Do NOT rush — 3 generic questions are never enough for a non-trivial project.",
43
- "Propose 2-3 approaches with real trade-offs (not cosmetic differences) and your explicit recommendation with reasoning. Explain WHY you recommend this option over others.",
44
- "Present design in sections. After each section, explicitly state what you are asking the user to approve: 'Do you approve [specific thing]?' Never ask a bare 'одобряете?/approve?' without context.",
45
- "Write design doc save to `.cclaw/artifacts/01-brainstorm.md`.",
46
- "Self-review scan for placeholders, TBDs, contradictions, ambiguity, scope creep. Fix inline.",
47
- "User reviews written artifact — ask user to review the written artifact (not the chat summary). **STOP.** Do NOT proceed until user responds.",
48
- "Stage complete — update `flow-state.json` per the Stage Completion Protocol. Tell user to run `/cc-next` to continue to scope."
39
+ "Principles (one line): one decision-forcing question at a time, grounding summary between rounds, and no implementation before approval.",
40
+ "Route the work: classify as Simple Route (single-surface, low-risk) or Complex Route (multi-surface, high-uncertainty); explain why.",
41
+ "Round 1 grounding: restate the problem, desired outcome, and success signal in your own words; get confirmation before deeper questioning.",
42
+ "Round 2 forcing questions: ask one decision-forcing question per turn about boundaries and constraints; each answer must change a concrete design decision.",
43
+ "Grounding checkpoint: summarize what is fixed vs still unknown after Round 2; confirm this summary before moving to solution options.",
44
+ "Round 3 forcing questions: ask trade-off questions that force prioritization (for example speed vs flexibility), then lock assumptions.",
45
+ "Propose multiple viable approaches with real trade-offs and one explicit recommendation tied to the forced decisions.",
46
+ "Write `.cclaw/artifacts/01-brainstorm.md` with route, grounding checkpoints, forcing-question log, options, and approved direction; run a contradiction pass.",
47
+ "Ask the user to review the written artifact and explicitly approve or request changes; only then complete stage and point to `/cc-next`."
49
48
  ],
50
49
  interactionProtocol: [
51
- "Explore context first (files, docs, existing behavior). Share a brief summary of what you found.",
52
- "Restate the problem in your own words in a SEPARATE message. Do NOT add any questions to this message. Wait for user to confirm or correct.",
53
- "Ask clarifying questions one per message. Cover mandatory categories: PURPOSE, SCOPE, BOUNDARIES, ENVIRONMENT, CONSTRAINTS. Do NOT combine questions. Do NOT propose approaches until all categories are addressed.",
54
- "For approach selection: use the Decision Protocol present labeled options (A/B/C) with REAL trade-offs (not cosmetic) and mark one as (recommended) with clear reasoning. If AskQuestion/AskUserQuestion is available, send exactly ONE question per call, validate fields against runtime schema, and on schema error immediately fall back to plain-text question instead of retrying guessed payloads.",
55
- "Every approval question MUST state what exactly is being approved: 'Do you approve [the architecture / the API shape / the dependency choice]?' Never ask a bare 'approve?' or 'looks good?'.",
56
- "Get section-by-section approval before finalizing the design direction.",
57
- "Run a self-review pass (ambiguity, placeholders, contradictions) before handoff.",
58
- "**STOP.** Wait for explicit user approval after writing the artifact. Do NOT auto-advance to the next stage."
50
+ "Start with routing (Simple Route vs Complex Route) so question depth matches real complexity.",
51
+ "Use phased questioning: Round 1 grounding -> Round 2 constraints/boundaries -> grounding checkpoint -> Round 3 trade-off forcing.",
52
+ "Ask exactly one decision-forcing question per turn; avoid bundled or purely informational questions.",
53
+ "After each round, publish a short grounding summary (fixed decisions vs unknowns) before continuing.",
54
+ "Use the Decision Protocol for option selection, with explicit recommendation and rationale.",
55
+ "State explicitly what is being approved when requesting approval.",
56
+ "Run a brief contradiction and ambiguity pass before handoff.",
57
+ "**STOP.** Wait for explicit user approval after writing the artifact. Do NOT auto-advance."
59
58
  ],
60
59
  process: [
61
- "Explore project context files, docs, behavior, recent changes. Share findings.",
62
- "Restate the problem summarize what the user wants and why in a SEPARATE message. Wait for confirmation before questions.",
63
- "Clarify iteratively ask questions one at a time covering mandatory categories: PURPOSE, SCOPE, BOUNDARIES, ENVIRONMENT, CONSTRAINTS. Do not skip to approaches early.",
64
- "Identify whether request should be decomposed into smaller sub-problems.",
65
- "Offer 2-3 alternatives with real trade-offs and recommendation with rationale.",
66
- "Present design in sections. After each section explicitly name what you ask the user to approve.",
67
- "Write artifact to `.cclaw/artifacts/01-brainstorm.md`.",
68
- "Run self-review: placeholder scan, internal consistency, scope check, ambiguity check.",
69
- "Ask user to review the written artifact. Wait for changes or approval.",
70
- "Handoff to scope stage only after approval is explicit."
60
+ "Route request complexity (Simple Route or Complex Route) and capture rationale.",
61
+ "Round 1 grounding: restate problem, outcome, and success signal; confirm alignment.",
62
+ "Round 2 forcing questions: boundaries and constraints one question at a time.",
63
+ "Grounding checkpoint: summarize fixed decisions and remaining unknowns.",
64
+ "Round 3 forcing questions: trade-offs and priorities; lock explicit assumptions.",
65
+ "Offer multiple approaches with recommendation and rationale.",
66
+ "Capture approved direction in `.cclaw/artifacts/01-brainstorm.md`.",
67
+ "Run contradiction/ambiguity pass and request explicit user approval.",
68
+ "Handoff to scope only after approval is explicit."
71
69
  ],
72
70
  requiredGates: [
73
- { id: "brainstorm_discovery_purpose", description: "Discovery captured WHY this project exists and WHO it serves, with explicit user confirmation." },
74
- { id: "brainstorm_discovery_scope", description: "Discovery captured explicit in-scope and out-of-scope boundaries before approach selection." },
75
- { id: "brainstorm_discovery_boundaries", description: "Discovery captured failure modes, edge cases, and error-handling boundaries." },
76
- { id: "brainstorm_discovery_environment", description: "Discovery captured runtime/install/deployment environment assumptions." },
77
- { id: "brainstorm_discovery_constraints", description: "Discovery captured constraints (performance, compatibility, dependency limits) before deciding architecture." },
78
- { id: "brainstorm_problem_restated", description: "Problem was restated in agent's words and user confirmed the understanding." },
79
- { id: "brainstorm_options_compared", description: "At least two alternatives were compared with real trade-offs." },
80
- { id: "brainstorm_design_approved", description: "User approved a concrete design direction (with explicit statement of what was approved)." },
81
- { id: "brainstorm_self_review_passed", description: "Design doc passed placeholder/ambiguity/consistency checks." },
82
- { id: "brainstorm_user_reviewed_artifact", description: "User reviewed the written artifact and confirmed readiness." }
71
+ { id: "brainstorm_route_selected", description: "Simple vs Complex route was selected with explicit rationale." },
72
+ { id: "brainstorm_round1_grounded", description: "Round 1 grounding (problem, outcome, success signal) was confirmed by the user." },
73
+ { id: "brainstorm_round2_forcing_questions", description: "Round 2 forcing questions captured boundaries and constraints that changed real decisions." },
74
+ { id: "brainstorm_round3_tradeoff_decisions", description: "Round 3 forcing questions locked explicit trade-off priorities and assumptions." },
75
+ { id: "brainstorm_options_compared", description: "Multiple solution approaches were compared with real trade-offs and a recommendation." },
76
+ { id: "brainstorm_direction_approved", description: "User approved a concrete direction and what exactly was approved is stated." },
77
+ { id: "brainstorm_artifact_reviewed", description: "User reviewed the written brainstorm artifact and confirmed readiness." }
83
78
  ],
84
79
  requiredEvidence: [
85
80
  "Artifact written to `.cclaw/artifacts/01-brainstorm.md`.",
86
- "Clarification log explicitly records PURPOSE, SCOPE, BOUNDARIES, ENVIRONMENT, and CONSTRAINTS coverage.",
87
- "Discovery sections include explicit in-scope/out-of-scope boundaries and failure handling boundaries.",
88
- "Approved direction captured in artifact.",
89
- "Open questions explicitly listed (if any).",
90
- "Self-review pass completed with no unresolved issues."
81
+ "Routing decision (`simple` or `complex`) with rationale is recorded.",
82
+ "Grounding checkpoints between rounds are recorded (fixed decisions vs unknowns).",
83
+ "Forcing-question log captures question, answer, and decision impact.",
84
+ "Approaches and recommendation are recorded with explicit trade-offs.",
85
+ "Approved direction and approval marker are present.",
86
+ "Assumptions and open questions are captured (or explicitly marked as none)."
91
87
  ],
92
88
  inputs: ["problem statement", "constraints", "success criteria"],
93
89
  requiredContext: [
94
- "existing project docs and patterns",
90
+ "existing project context and patterns",
95
91
  "current behavior of affected area",
96
92
  "business and delivery constraints"
97
93
  ],
98
94
  outputs: [
99
95
  "approved design direction",
100
- "alternatives and trade-off table",
96
+ "alternatives with trade-offs",
101
97
  "brainstorm artifact"
102
98
  ],
103
99
  blockers: [
104
100
  "no explicit approval",
105
101
  "critical ambiguity unresolved",
106
- "scope too broad and not decomposed"
102
+ "route cannot be determined due to missing context"
107
103
  ],
108
104
  exitCriteria: [
109
105
  "approved design direction documented",
110
106
  "required gates marked satisfied",
111
107
  "no implementation action taken",
112
- "self-review completed with fixes applied"
108
+ "artifact reviewed by user"
113
109
  ],
114
110
  antiPatterns: [
115
- "Skipping design because task seems simple",
116
- "Asking many questions in one message",
111
+ "Skipping route selection and treating all requests with the same question depth",
112
+ "Asking non-forcing or bundled questions",
113
+ "Skipping grounding checkpoints between rounds",
117
114
  "Jumping directly into implementation",
118
- "Combining visual companion offer with a clarifying question",
119
- "Invoking implementation skills before writing plans",
120
- "Asking bare 'approve?' or 'одобряете?' without stating WHAT is being approved",
121
- "Presenting a single summary and asking for blanket approval instead of section-by-section review",
122
- "Rushing through clarification — asking 1-2 generic questions then jumping to design",
123
- "Batching multiple gate confirmations in one message when resuming a session"
115
+ "Requesting approval without stating what decision is being approved"
124
116
  ],
125
117
  rationalizations: [
126
- { claim: "This is too simple for design.", reality: "Simple tasks fail fast when assumptions are wrong; a short design pass prevents rework." },
127
- { claim: "We can figure it out while coding.", reality: "Coding before alignment creates churn and hidden scope growth." },
128
- { claim: "There is only one obvious approach.", reality: "Without alternatives, trade-offs stay implicit and risk goes unexamined." },
129
- { claim: "The user already knows what they want.", reality: "Unstated assumptions diverge during implementation; explicit design surfaces them early." },
130
- { claim: "This is straightforward, 1-2 questions are enough.", reality: "Even simple projects have hidden constraints (error handling, edge cases, deployment). A few extra questions now prevent rework later." }
118
+ { claim: "This is straightforward so routing is unnecessary.", reality: "Explicit routing prevents under-questioning complex work and over-questioning simple work." },
119
+ { claim: "Any question is useful context.", reality: "Only forcing questions that change decisions improve design quality." },
120
+ { claim: "Grounding summaries slow us down.", reality: "Grounding checkpoints prevent hidden drift and reduce expensive rework later." }
131
121
  ],
132
122
  redFlags: [
133
- "No alternatives documented",
134
- "No explicit approval checkpoint",
135
- "Implementation-related actions before approval",
136
- "Self-review skipped or glossed over",
137
- "Artifact has TBD or placeholder sections",
138
- "Fewer than 3 clarifying questions asked for any non-trivial project",
139
- "Approval requested without stating what exactly is being approved"
123
+ "Route is missing or unjustified",
124
+ "No grounding checkpoint between question rounds",
125
+ "Questions do not force concrete decisions",
126
+ "Approval requested without explicit decision context"
140
127
  ],
141
128
  policyNeedles: [
142
- "Restate problem before questions",
143
- "One clarifying question per message",
144
- "2-3 approaches with real trade-offs",
129
+ "Simple Route / Complex Route",
130
+ "One forcing question per message",
131
+ "Grounding checkpoint between rounds",
132
+ "Multiple approaches with trade-offs",
145
133
  "State what is being approved",
146
134
  "Do NOT implement, scaffold, or modify behavior"
147
135
  ],
148
136
  artifactFile: "01-brainstorm.md",
149
137
  next: "scope",
150
138
  cognitivePatterns: [
151
- { name: "Divergent-Convergent Thinking", description: "First expand the solution space widely, then converge on the strongest option. Do not skip the divergent phase." },
152
- { name: "YAGNI Ruthlessness", description: "Remove unnecessary features from all designs. Every feature must earn its place against the cost of complexity." },
153
- { name: "Decomposition Instinct", description: "When a request describes multiple independent subsystems, decompose before refining. Each sub-project gets its own cycle." },
154
- { name: "Isolation Preference", description: "Break the system into units that each have one clear purpose, communicate through well-defined interfaces, and can be understood and tested independently." }
139
+ { name: "Route Before Depth", description: "Choose question depth using simple-vs-complex routing before diving into details." },
140
+ { name: "Forcing Question Discipline", description: "Each question must force a concrete decision, not just gather trivia." },
141
+ { name: "Grounding Cadence", description: "After each question round, re-ground on fixed decisions vs unknowns before continuing." },
142
+ { name: "Diverge Then Commit", description: "Explore multiple viable options first, then commit only after explicit approval." }
155
143
  ],
156
144
  reviewSections: [],
157
145
  completionStatus: ["DONE", "DONE_WITH_CONCERNS", "BLOCKED"],
158
146
  crossStageTrace: {
159
147
  readsFrom: [],
160
148
  writesTo: [".cclaw/artifacts/01-brainstorm.md"],
161
- traceabilityRule: "Every approved direction must be traceable forward through scope and design. Downstream stages must reference brainstorm decisions."
149
+ traceabilityRule: "Scope and design decisions must trace back to routed question rounds and approved brainstorm direction."
162
150
  },
163
151
  artifactValidation: [
164
- { section: "Problem Statement", required: true, validationRule: "Must describe the user problem, not the solution. Include WHO and WHY and success signal." },
165
- { section: "Known Context", required: true, validationRule: "Files, patterns, constraints discovered during exploration. Evidence that context was actually explored." },
166
- { section: "Clarification Log", required: true, validationRule: "At least 5 rows covering PURPOSE, SCOPE, BOUNDARIES, ENVIRONMENT, CONSTRAINTS." },
167
- { section: "Purpose & Beneficiaries", required: true, validationRule: "At least 3 meaningful lines describing why this exists and who benefits." },
168
- { section: "Scope Boundaries", required: true, validationRule: "At least 2 scope items including explicit out-of-scope boundaries." },
169
- { section: "Failure Boundaries", required: true, validationRule: "At least 2 failure/edge-case expectations and error visibility behavior." },
170
- { section: "Runtime Environment", required: true, validationRule: "At least 2 lines describing runtime, install/distribution, and execution environment." },
171
- { section: "Constraints", required: true, validationRule: "At least 2 concrete constraints (performance, compatibility, dependency, or policy)." },
172
- { section: "Alternatives Table", required: true, validationRule: "At least 2 approaches with real trade-offs (not cosmetic) and recommendation with reasoning." },
173
- { section: "Approved Direction", required: true, validationRule: "Must contain explicit approval marker from user. State what was approved." },
174
- { section: "Assumptions & Risks", required: true, validationRule: "Explicit assumptions made during design. Known risks. If none, state 'None'." },
175
- { section: "Open Questions", required: true, validationRule: "If empty, state 'None' explicitly. Do not omit." }
152
+ { section: "Problem Framing", required: true, validationRule: "Must define the user problem, desired outcome, and success signal." },
153
+ { section: "Routing Decision", required: true, validationRule: "Must state simple vs complex route and explain why." },
154
+ { section: "Grounding Checkpoints", required: true, validationRule: "Must capture fixed decisions and remaining unknowns between rounds." },
155
+ { section: "Forcing Questions Log", required: true, validationRule: "Must capture question, answer, and decision impact for each forcing question." },
156
+ { section: "Options Comparison", required: true, validationRule: "Must compare multiple distinct options with real trade-offs and recommendation." },
157
+ { section: "Approved Direction", required: true, validationRule: "Must include explicit approval marker and what was approved." },
158
+ { section: "Assumptions and Open Questions", required: true, validationRule: "Must capture unresolved assumptions/open questions, or explicitly state none." }
176
159
  ],
177
160
  namedAntiPattern: {
178
- title: "This Is Too Simple To Need A Design",
179
- description: "Every project goes through this process. A todo list, a single-function utility, a config change all of them. 'Simple' projects are where unexamined assumptions cause the most wasted work. The design can be short (a few sentences for truly simple projects), but you MUST present it and get approval."
161
+ title: "This Is Too Simple To Brainstorm",
162
+ description: "Skipping routing and forcing questions because a task looks simple creates silent assumption debt. Even simple-route work needs explicit grounding and approval."
180
163
  }
181
164
  };
182
165
  // ---------------------------------------------------------------------------
@@ -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- Follow stage order: brainstorm -> scope -> design -> spec -> plan -> tdd -> review -> ship.\n- Read `.cclaw/state/flow-state.json` before acting; continue from current stage when active.\n- Use `/cc-next` only after required gates pass; never bypass explicit pause/approval rules.\n- Keep evidence in `.cclaw/artifacts/`; cclaw sync/runtime maintains run snapshots in `.cclaw/runs/<activeRunId>/artifacts/`.\n- For machine-only checks in design/plan/tdd/review/ship, dispatch required specialists automatically when tooling supports it.\n- Ask for user input only at explicit approval gates (scope mode, plan approval, user challenge resolution, ship finalization).\n- Treat `.cclaw/skills/using-cclaw/SKILL.md` as routing source of truth; load contextual utility skills only when their triggers apply.\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- Follow stage order: brainstorm -> scope -> design -> spec -> plan -> tdd -> review -> ship.\n- Read `.cclaw/state/flow-state.json` before acting; continue from current stage when active.\n- Use `/cc-next` only after required gates pass; never bypass explicit pause/approval rules.\n- Keep evidence in `.cclaw/artifacts/`; archive completed feature artifacts only via `cclaw archive`.\n- For machine-only checks in design/plan/tdd/review/ship, dispatch required specialists automatically when tooling supports it.\n- Ask for user input only at explicit approval gates (scope mode, plan approval, user challenge resolution, ship finalization).\n- Treat `.cclaw/skills/using-cclaw/SKILL.md` as routing source of truth; load contextual utility skills only when their triggers apply.\n";
4
4
  export declare function buildRulesJson(): Record<string, unknown>;
@@ -3,71 +3,50 @@ import { orderedStageSchemas } from "./stage-schema.js";
3
3
  export const ARTIFACT_TEMPLATES = {
4
4
  "01-brainstorm.md": `# Brainstorm Artifact
5
5
 
6
- ## Problem Statement
6
+ ## Problem Framing
7
7
  - **User problem:**
8
- - **Who benefits:**
9
- - **Why now:**
8
+ - **Desired outcome:**
10
9
  - **Success signal:**
11
10
 
12
- ## Known Context
13
- - **Explored files/patterns:**
14
- - **Existing behavior:**
15
- - **Relevant dependencies:**
11
+ ## Routing Decision
12
+ - **Route:** simple | complex
13
+ - **Reasoning:**
16
14
 
17
- ## Clarification Log
18
- | Category | Question asked | User answer | Evidence note |
19
- |---|---|---|---|
20
- | PURPOSE | | | |
21
- | SCOPE | | | |
22
- | BOUNDARIES | | | |
23
- | ENVIRONMENT | | | |
24
- | CONSTRAINTS | | | |
25
-
26
- ## Purpose & Beneficiaries
27
- - **Project purpose:**
28
- - **Primary users:**
29
- - **Value outcome:**
30
-
31
- ## Scope Boundaries
32
- ### In Scope
33
- -
15
+ ## Grounding Checkpoints
16
+ ### Round 1 grounding
17
+ - **What is fixed now:**
18
+ - **What is still unknown:**
34
19
 
35
- ### Out of Scope
36
- -
20
+ ### Round 2 grounding
21
+ - **What is fixed now:**
22
+ - **What is still unknown:**
37
23
 
38
- ## Failure Boundaries
39
- - **Edge cases to handle:**
40
- - **Expected failures and behavior:**
41
- - **Error visibility expectations:**
24
+ ### Round 3 grounding
25
+ - **What is fixed now:**
26
+ - **What is still unknown:**
42
27
 
43
- ## Runtime Environment
44
- - **Runtime/platform:**
45
- - **Install/distribution model:**
46
- - **Execution context (local/CI/deploy):**
47
-
48
- ## Constraints
49
- - **Performance constraints:**
50
- - **Compatibility constraints:**
51
- - **Dependency constraints:**
28
+ ## Forcing Questions Log
29
+ | Round | Question | User answer | Decision impact |
30
+ |---|---|---|---|
31
+ | 2 | | | |
32
+ | 2 | | | |
33
+ | 3 | | | |
52
34
 
53
- ## Alternatives Table
35
+ ## Options Comparison
54
36
  | Option | Summary | Trade-offs | Recommendation |
55
37
  |---|---|---|---|
56
38
  | A | | | |
57
39
  | B | | | |
58
- | C | | | |
59
40
 
60
41
  ## Approved Direction
61
42
  - **Selected option:**
62
43
  - **Why selected:**
63
- - **What was approved:** (state the specific decision)
44
+ - **What was approved:**
64
45
  - **Approval marker:**
65
46
 
66
- ## Assumptions & Risks
67
- -
68
-
69
- ## Open Questions
70
- - None
47
+ ## Assumptions and Open Questions
48
+ - **Assumptions:**
49
+ - **Open questions (or "None"):**
71
50
  `,
72
51
  "02-scope.md": `# Scope Artifact
73
52
 
@@ -382,7 +361,7 @@ alwaysApply: true
382
361
  - Follow stage order: brainstorm -> scope -> design -> spec -> plan -> tdd -> review -> ship.
383
362
  - Read \`.cclaw/state/flow-state.json\` before acting; continue from current stage when active.
384
363
  - Use \`/cc-next\` only after required gates pass; never bypass explicit pause/approval rules.
385
- - Keep evidence in \`.cclaw/artifacts/\`; cclaw sync/runtime maintains run snapshots in \`.cclaw/runs/<activeRunId>/artifacts/\`.
364
+ - Keep evidence in \`.cclaw/artifacts/\`; archive completed feature artifacts only via \`cclaw archive\`.
386
365
  - For machine-only checks in design/plan/tdd/review/ship, dispatch required specialists automatically when tooling supports it.
387
366
  - Ask for user input only at explicit approval gates (scope mode, plan approval, user challenge resolution, ship finalization).
388
367
  - Treat \`.cclaw/skills/using-cclaw/SKILL.md\` as routing source of truth; load contextual utility skills only when their triggers apply.
@@ -4,11 +4,11 @@ import { RUNTIME_ROOT } from "./constants.js";
4
4
  import { exists, withDirectoryLock, writeFileSafe } from "./fs-utils.js";
5
5
  import { readFlowState } from "./runs.js";
6
6
  import { stageSchema } from "./content/stage-schema.js";
7
- function delegationLogPath(projectRoot, runId) {
8
- return path.join(projectRoot, RUNTIME_ROOT, "runs", runId, "delegation-log.json");
7
+ function delegationLogPath(projectRoot) {
8
+ return path.join(projectRoot, RUNTIME_ROOT, "state", "delegation-log.json");
9
9
  }
10
- function delegationLockPath(projectRoot, runId) {
11
- return path.join(projectRoot, RUNTIME_ROOT, "runs", runId, ".delegation.lock");
10
+ function delegationLockPath(projectRoot) {
11
+ return path.join(projectRoot, RUNTIME_ROOT, "state", ".delegation.lock");
12
12
  }
13
13
  function isDelegationEntry(value) {
14
14
  if (!value || typeof value !== "object" || Array.isArray(value))
@@ -45,7 +45,7 @@ function parseLedger(raw, runId) {
45
45
  }
46
46
  export async function readDelegationLedger(projectRoot) {
47
47
  const { activeRunId } = await readFlowState(projectRoot);
48
- const filePath = delegationLogPath(projectRoot, activeRunId);
48
+ const filePath = delegationLogPath(projectRoot);
49
49
  if (!(await exists(filePath))) {
50
50
  return { runId: activeRunId, entries: [] };
51
51
  }
@@ -60,8 +60,8 @@ export async function readDelegationLedger(projectRoot) {
60
60
  }
61
61
  export async function appendDelegation(projectRoot, entry) {
62
62
  const { activeRunId } = await readFlowState(projectRoot);
63
- await withDirectoryLock(delegationLockPath(projectRoot, activeRunId), async () => {
64
- const filePath = delegationLogPath(projectRoot, activeRunId);
63
+ await withDirectoryLock(delegationLockPath(projectRoot), async () => {
64
+ const filePath = delegationLogPath(projectRoot);
65
65
  const prior = await readDelegationLedger(projectRoot);
66
66
  const ledger = {
67
67
  runId: activeRunId,
package/dist/doctor.js CHANGED
@@ -426,10 +426,7 @@ export async function doctorChecks(projectRoot, options = {}) {
426
426
  "stop-checkpoint.sh",
427
427
  "prompt-guard.sh",
428
428
  "workflow-guard.sh",
429
- "context-monitor.sh",
430
- "observe.sh",
431
- "summarize-observations.sh",
432
- "summarize-observations.mjs"
429
+ "context-monitor.sh"
433
430
  ]) {
434
431
  const scriptPath = path.join(projectRoot, RUNTIME_ROOT, "hooks", script);
435
432
  const scriptExists = await exists(scriptPath);
@@ -524,15 +521,12 @@ export async function doctorChecks(projectRoot, options = {}) {
524
521
  const wiringOk = sessionCommands.some((cmd) => cmd.includes("session-start.sh")) &&
525
522
  preCommands.some((cmd) => cmd.includes("prompt-guard.sh")) &&
526
523
  preCommands.some((cmd) => cmd.includes("workflow-guard.sh")) &&
527
- preCommands.some((cmd) => cmd.includes("observe.sh pre")) &&
528
- postCommands.some((cmd) => cmd.includes("observe.sh post")) &&
529
524
  postCommands.some((cmd) => cmd.includes("context-monitor.sh")) &&
530
- stopCommands.some((cmd) => cmd.includes("summarize-observations.sh")) &&
531
525
  stopCommands.some((cmd) => cmd.includes("stop-checkpoint.sh"));
532
526
  checks.push({
533
527
  name: "hook:wiring:claude",
534
528
  ok: wiringOk,
535
- details: `${file} must wire session-start/prompt-guard/workflow-guard/observe/context-monitor/summarize/stop-checkpoint`
529
+ details: `${file} must wire session-start/prompt-guard/workflow-guard/context-monitor/stop-checkpoint`
536
530
  });
537
531
  }
538
532
  if (configuredHarnesses.includes("cursor")) {
@@ -560,15 +554,12 @@ export async function doctorChecks(projectRoot, options = {}) {
560
554
  const wiringOk = sessionCommands.some((cmd) => cmd.includes("session-start.sh")) &&
561
555
  preCommands.some((cmd) => cmd.includes("prompt-guard.sh")) &&
562
556
  preCommands.some((cmd) => cmd.includes("workflow-guard.sh")) &&
563
- preCommands.some((cmd) => cmd.includes("observe.sh pre")) &&
564
- postCommands.some((cmd) => cmd.includes("observe.sh post")) &&
565
557
  postCommands.some((cmd) => cmd.includes("context-monitor.sh")) &&
566
- stopCommands.some((cmd) => cmd.includes("summarize-observations.sh")) &&
567
558
  stopCommands.some((cmd) => cmd.includes("stop-checkpoint.sh"));
568
559
  checks.push({
569
560
  name: "hook:wiring:cursor",
570
561
  ok: wiringOk,
571
- details: `${file} must wire session-start/prompt-guard/workflow-guard/observe/context-monitor/summarize/stop-checkpoint`
562
+ details: `${file} must wire session-start/prompt-guard/workflow-guard/context-monitor/stop-checkpoint`
572
563
  });
573
564
  const cursorRulePath = path.join(projectRoot, ".cursor/rules/cclaw-workflow.mdc");
574
565
  let cursorRuleOk = false;
@@ -603,15 +594,12 @@ export async function doctorChecks(projectRoot, options = {}) {
603
594
  const wiringOk = sessionCommands.some((cmd) => cmd.includes("session-start.sh")) &&
604
595
  preCommands.some((cmd) => cmd.includes("prompt-guard.sh")) &&
605
596
  preCommands.some((cmd) => cmd.includes("workflow-guard.sh")) &&
606
- preCommands.some((cmd) => cmd.includes("observe.sh pre")) &&
607
- postCommands.some((cmd) => cmd.includes("observe.sh post")) &&
608
597
  postCommands.some((cmd) => cmd.includes("context-monitor.sh")) &&
609
- stopCommands.some((cmd) => cmd.includes("summarize-observations.sh")) &&
610
598
  stopCommands.some((cmd) => cmd.includes("stop-checkpoint.sh"));
611
599
  checks.push({
612
600
  name: "hook:wiring:codex",
613
601
  ok: wiringOk,
614
- details: `${file} must wire session-start/prompt-guard/workflow-guard/observe/context-monitor/summarize/stop-checkpoint`
602
+ details: `${file} must wire session-start/prompt-guard/workflow-guard/context-monitor/stop-checkpoint`
615
603
  });
616
604
  }
617
605
  if (configuredHarnesses.includes("opencode")) {
@@ -627,7 +615,6 @@ export async function doctorChecks(projectRoot, options = {}) {
627
615
  content.includes("workflow-guard.sh") &&
628
616
  content.includes("context-monitor.sh") &&
629
617
  content.includes('"session.idle"') &&
630
- content.includes('"session.updated"') &&
631
618
  content.includes('"session.resumed"') &&
632
619
  content.includes('"session.cleared"') &&
633
620
  content.includes('"experimental.chat.system.transform"');
@@ -635,7 +622,7 @@ export async function doctorChecks(projectRoot, options = {}) {
635
622
  checks.push({
636
623
  name: "lifecycle:opencode:rehydration_events",
637
624
  ok,
638
- details: `${file} must include event lifecycle handler, tool.execute.before/after with prompt/workflow/context hooks, session.idle summarization, and transform rehydration`
625
+ details: `${file} must include event lifecycle handler, tool.execute.before/after with prompt/workflow/context hooks, session.idle checkpoint, and transform rehydration`
639
626
  });
640
627
  const runtimeShape = await opencodePluginRuntimeShapeCheck(projectRoot);
641
628
  checks.push({
@@ -679,11 +666,11 @@ export async function doctorChecks(projectRoot, options = {}) {
679
666
  ok: true,
680
667
  details: hasPython ? "python3 available" : "warning: python3 not found, jq/node paths must stay healthy"
681
668
  });
682
- // Learnings store exists
669
+ // Knowledge store exists
683
670
  checks.push({
684
- name: "learnings:store_exists",
685
- ok: await exists(path.join(projectRoot, RUNTIME_ROOT, "learnings.jsonl")),
686
- details: `${RUNTIME_ROOT}/learnings.jsonl must exist (can be empty)`
671
+ name: "knowledge:store_exists",
672
+ ok: await exists(path.join(projectRoot, RUNTIME_ROOT, "knowledge.md")),
673
+ details: `${RUNTIME_ROOT}/knowledge.md must exist`
687
674
  });
688
675
  checks.push({
689
676
  name: "state:checkpoint_exists",
@@ -750,25 +737,21 @@ export async function doctorChecks(projectRoot, options = {}) {
750
737
  : `no gate reconciliation changes needed for stage "${reconciliation.stage}"`
751
738
  });
752
739
  }
740
+ const activeRunId = typeof flowState.activeRunId === "string" ? flowState.activeRunId.trim() : "";
753
741
  checks.push({
754
742
  name: "flow_state:active_run_id",
755
- ok: typeof flowState.activeRunId === "string" && flowState.activeRunId.trim().length > 0,
743
+ ok: activeRunId.length > 0,
756
744
  details: `${RUNTIME_ROOT}/state/flow-state.json must include activeRunId`
757
745
  });
758
746
  checks.push({
759
- name: "run:active_artifacts",
760
- ok: await exists(path.join(projectRoot, RUNTIME_ROOT, "runs", flowState.activeRunId, "artifacts")),
761
- details: `${RUNTIME_ROOT}/runs/${flowState.activeRunId}/artifacts must exist`
747
+ name: "artifacts:active_root",
748
+ ok: await exists(path.join(projectRoot, RUNTIME_ROOT, "artifacts")),
749
+ details: `${RUNTIME_ROOT}/artifacts must exist as the active artifact root`
762
750
  });
763
751
  checks.push({
764
- name: "run:active_metadata",
765
- ok: await exists(path.join(projectRoot, RUNTIME_ROOT, "runs", flowState.activeRunId, "run.json")),
766
- details: `${RUNTIME_ROOT}/runs/${flowState.activeRunId}/run.json must exist`
767
- });
768
- checks.push({
769
- name: "run:active_handoff",
770
- ok: await exists(path.join(projectRoot, RUNTIME_ROOT, "runs", flowState.activeRunId, "handoff.md")),
771
- details: `${RUNTIME_ROOT}/runs/${flowState.activeRunId}/handoff.md must exist`
752
+ name: "runs:archive_root",
753
+ ok: await exists(path.join(projectRoot, RUNTIME_ROOT, "runs")),
754
+ details: `${RUNTIME_ROOT}/runs must exist for archived feature snapshots`
772
755
  });
773
756
  const delegation = await checkMandatoryDelegations(projectRoot, flowState.currentStage);
774
757
  checks.push({
@@ -1,7 +1,7 @@
1
1
  import { COMMAND_FILE_ORDER } from "./constants.js";
2
2
  import { buildTransitionRules, orderedStageSchemas, stageGateIds } from "./content/stage-schema.js";
3
3
  export const TRANSITION_RULES = buildTransitionRules();
4
- export function createInitialFlowState(activeRunId = "run-pending") {
4
+ export function createInitialFlowState(activeRunId = "active") {
5
5
  const stageGateCatalog = {};
6
6
  for (const schema of orderedStageSchemas()) {
7
7
  stageGateCatalog[schema.stage] = {
@@ -37,7 +37,7 @@ Before responding to a coding request:
37
37
  |---|---|
38
38
  | \`/cc\` | **Entry point.** No args = resume current stage. With prompt = start brainstorm with idea. |
39
39
  | \`/cc-next\` | **Progression.** Advances to the next stage when current is complete. |
40
- | \`/cc-learn\` | **Cross-cutting.** Capture or review project learnings. |
40
+ | \`/cc-learn\` | **Cross-cutting.** Capture or review project knowledge. |
41
41
 
42
42
  **Stage order:** brainstorm > scope > design > spec > plan > tdd > review > ship.
43
43
  \`/cc-next\` loads the right stage skill automatically. Gates must pass before handoff.