cclaw-cli 0.51.12 → 0.51.13

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.
@@ -10,7 +10,7 @@ export declare const FLOW_VERSION = "1.0.0";
10
10
  export declare const SHIP_FINALIZATION_MODES: readonly ["FINALIZE_MERGE_LOCAL", "FINALIZE_OPEN_PR", "FINALIZE_KEEP_BRANCH", "FINALIZE_DISCARD_BRANCH", "FINALIZE_NO_VCS"];
11
11
  export type ShipFinalizationMode = (typeof SHIP_FINALIZATION_MODES)[number];
12
12
  export declare const DEFAULT_HARNESSES: HarnessId[];
13
- export declare const REQUIRED_DIRS: readonly [".cclaw", ".cclaw/commands", ".cclaw/skills", ".cclaw/templates", ".cclaw/artifacts", ".cclaw/state", ".cclaw/runs", ".cclaw/rules", ".cclaw/agents", ".cclaw/hooks"];
13
+ export declare const REQUIRED_DIRS: readonly [".cclaw", ".cclaw/commands", ".cclaw/skills", ".cclaw/templates", ".cclaw/templates/state-contracts", ".cclaw/artifacts", ".cclaw/state", ".cclaw/runs", ".cclaw/rules", ".cclaw/agents", ".cclaw/hooks", ".cclaw/skills/review-prompts"];
14
14
  export declare const REQUIRED_GITIGNORE_PATTERNS: readonly ["# cclaw generated artifacts", ".cclaw/", ".claude/commands/cc-*.md", ".claude/commands/cc.md", ".cursor/commands/cc-*.md", ".cursor/commands/cc.md", ".opencode/commands/cc-*.md", ".opencode/commands/cc.md", ".agents/skills/cc/SKILL.md", ".agents/skills/cc-*/SKILL.md", ".claude/hooks/hooks.json", ".cursor/hooks.json", ".codex/hooks.json", ".opencode/plugins/cclaw-plugin.mjs", ".cursor/rules/cclaw-workflow.mdc"];
15
15
  /**
16
16
  * Canonical stage -> skill folder mapping.
package/dist/constants.js CHANGED
@@ -57,12 +57,14 @@ export const REQUIRED_DIRS = [
57
57
  `${RUNTIME_ROOT}/commands`,
58
58
  `${RUNTIME_ROOT}/skills`,
59
59
  `${RUNTIME_ROOT}/templates`,
60
+ `${RUNTIME_ROOT}/templates/state-contracts`,
60
61
  `${RUNTIME_ROOT}/artifacts`,
61
62
  `${RUNTIME_ROOT}/state`,
62
63
  `${RUNTIME_ROOT}/runs`,
63
64
  `${RUNTIME_ROOT}/rules`,
64
65
  `${RUNTIME_ROOT}/agents`,
65
- `${RUNTIME_ROOT}/hooks`
66
+ `${RUNTIME_ROOT}/hooks`,
67
+ `${RUNTIME_ROOT}/skills/review-prompts`
66
68
  ];
67
69
  export const REQUIRED_GITIGNORE_PATTERNS = [
68
70
  "# cclaw generated artifacts",
@@ -0,0 +1 @@
1
+ export declare const REVIEW_PROMPTS: Record<string, string>;
@@ -0,0 +1,104 @@
1
+ export const REVIEW_PROMPTS = {
2
+ "brainstorm-self-review.md": `# Brainstorm Self-Review Prompt
3
+
4
+ Use this before asking the user to approve the brainstorm artifact.
5
+
6
+ ## Calibration
7
+
8
+ Only flag issues that would cause a real downstream scope/design mistake:
9
+ wrong problem, no real alternative, hidden scope growth, missing user reaction,
10
+ or a recommendation that does not trace to the user's answer.
11
+
12
+ Do not flag prose style, wording preferences, section length, or missing detail
13
+ that would not change the scope/design decision.
14
+
15
+ ## Checks
16
+
17
+ | Category | What to check |
18
+ |---|---|
19
+ | Premise | Is this the right problem and the direct path? |
20
+ | Alternatives | Are there 2-3 meaningfully different options, including exactly one challenger with high/higher upside? |
21
+ | User reaction | Does the selected direction trace to the user's reaction/concerns? |
22
+ | Scope protection | Does the Not Doing list prevent silent enlargement? |
23
+ | Handoff | Is the next-stage handoff explicit and track-aware? |
24
+
25
+ ## Output
26
+
27
+ Write the result into \`## Self-Review Notes\`:
28
+
29
+ \`\`\`markdown
30
+ - Status: Approved | Issues Found
31
+ - Patches applied:
32
+ - <specific patch or None>
33
+ - Remaining concerns:
34
+ - <concern or None>
35
+ \`\`\`
36
+ `,
37
+ "scope-ceo-review.md": `# Scope CEO Review Prompt
38
+
39
+ Use this after drafting scope boundaries and before user approval.
40
+
41
+ ## Calibration
42
+
43
+ Think like a founder reviewing whether this is the right product slice. Flag
44
+ only issues that would materially change scope, sequencing, leverage, or user
45
+ value. Do not nitpick wording.
46
+
47
+ ## Checks
48
+
49
+ | Category | What to check |
50
+ |---|---|
51
+ | Premise | Are we solving the right problem now? |
52
+ | Leverage | Are we using existing code, constraints, and platform strengths? |
53
+ | 10-star delta | Is there a better high-leverage scope move worth cherry-picking? |
54
+ | Boundary | Are accepted, deferred, and excluded items unambiguous? |
55
+ | Mode fit | Does the selected mode match the evidence: SCOPE EXPANSION, SELECTIVE EXPANSION, HOLD SCOPE, or SCOPE REDUCTION? |
56
+ | Downstream refs | Are R-IDs and LD#hash anchors ready for design/spec/plan? |
57
+
58
+ ## Output
59
+
60
+ Record in \`## Outside Voice Findings\` or \`## Spec Review Loop\`:
61
+
62
+ \`\`\`markdown
63
+ | ID | Dimension | Finding | Disposition | Rationale |
64
+ |---|---|---|---|---|
65
+ | CEO-1 | <dimension> | <issue> | accept/reject/defer | <why> |
66
+ \`\`\`
67
+ `,
68
+ "design-eng-review.md": `# Design Engineering Review Prompt
69
+
70
+ Use this after drafting design and before handing to spec.
71
+
72
+ ## Calibration
73
+
74
+ Think like a senior engineer reviewing whether implementation can proceed
75
+ without hidden architecture risk. Flag only issues that would cause wrong code,
76
+ rework, missing failure behavior, or unverifiable acceptance criteria.
77
+
78
+ ## Checks
79
+
80
+ | Category | What to check |
81
+ |---|---|
82
+ | Architecture | Are component boundaries concrete and aligned with scope? |
83
+ | Data flow | Are inputs, outputs, persistence, and async/sync edges explicit? |
84
+ | Failure modes | Does every meaningful failure have detection, rescue, and user-visible behavior? |
85
+ | Traceability | Do design decisions reference relevant R-IDs and LD#hash anchors? |
86
+ | Verification | Is each risky choice testable by spec/plan/TDD? |
87
+ | Overbuild | Is any architecture stronger than the locked scope actually needs? |
88
+
89
+ ## Output
90
+
91
+ Record findings in the design artifact's review section:
92
+
93
+ \`\`\`markdown
94
+ ## Engineering Review
95
+ **Status:** Approved | Issues Found
96
+
97
+ **Issues:**
98
+ - [R#/LD#hash]: <specific issue> — <why it matters>
99
+
100
+ **Recommendations:**
101
+ - <advisory item or None>
102
+ \`\`\`
103
+ `
104
+ };
@@ -30,16 +30,20 @@ Before execution:
30
30
  2. Load active artifacts from \`.cclaw/artifacts/\`.
31
31
  3. Load upstream artifacts required by this stage:
32
32
  ${readLines}
33
- 4. Extract upstream decisions, constraints, and open questions into the current
33
+ 4. Read the state contract for this stage from \`.cclaw/templates/state-contracts/<stage>.json\`.
34
+ Treat it as the machine-readable skeleton: required top-level fields,
35
+ closed taxonomies, and the derived markdown path. Do not validate natural-language
36
+ prose by regex; put semantic quality checks in the review prompts.
37
+ 5. Extract upstream decisions, constraints, and open questions into the current
34
38
  artifact's \`Upstream Handoff\` section when that section exists.
35
- 5. Before doing stage work, give a compact user-facing drift preamble: "Carrying forward: <1-3 bullets>. Drift since upstream: None / <specific drift>. Recommendation: continue / re-scope."
36
- 6. If you change an upstream decision, record an explicit drift reason in the
39
+ 6. Before doing stage work, give a compact user-facing drift preamble: "Carrying forward: <1-3 bullets>. Drift since upstream: None / <specific drift>. Recommendation: continue / re-scope."
40
+ 7. If you change an upstream decision, record an explicit drift reason in the
37
41
  current artifact before continuing.
38
- 7. Confirm stage inputs:
42
+ 8. Confirm stage inputs:
39
43
  ${inputs}
40
- 8. Confirm required context:
44
+ 9. Confirm required context:
41
45
  ${requiredContext}
42
- 9. Use the injected knowledge digest from session-start; only fall back to full
46
+ 10. Use the injected knowledge digest from session-start; only fall back to full
43
47
  \`.cclaw/knowledge.jsonl\` when the digest is insufficient.
44
48
  `;
45
49
  }
@@ -0,0 +1 @@
1
+ export declare const STATE_CONTRACTS: Record<string, string>;
@@ -0,0 +1,63 @@
1
+ import { CCLAW_VERSION, RUNTIME_ROOT, SHIP_FINALIZATION_MODES } from "../constants.js";
2
+ import { FLOW_STAGES } from "../types.js";
3
+ const REQUIRED_TOP_LEVEL_FIELDS = {
4
+ brainstorm: ["stage", "selectedDirection", "approachTier", "approaches", "approval", "nextStageHandoff"],
5
+ scope: ["stage", "scopeMode", "requirements", "lockedDecisions", "scopeSummary", "nextStageHandoff"],
6
+ design: ["stage", "architecture", "dataFlow", "failureModes", "requirementRefs", "decisionRefs"],
7
+ spec: ["stage", "acceptanceCriteria", "requirementRefs", "designDecisionRefs"],
8
+ plan: ["stage", "tasks", "acceptanceCriteriaRefs", "requirementRefs", "decisionRefs", "verificationCommands"],
9
+ tdd: ["stage", "redEvidence", "greenEvidence", "acceptanceCriteriaRefs", "verificationCommands"],
10
+ review: ["stage", "finalVerdict", "findings", "acceptanceCriteriaRefs", "requirementRefs", "verificationCommands"],
11
+ ship: ["stage", "finalizationMode", "verificationSummary", "releaseNotesDraft"]
12
+ };
13
+ const STAGE_TAXONOMIES = {
14
+ brainstorm: {
15
+ approachTier: ["Lightweight", "Standard", "Deep"],
16
+ approachRole: ["baseline", "challenger", "wild-card"],
17
+ approachUpside: ["low", "modest", "high", "higher"]
18
+ },
19
+ scope: {
20
+ scopeMode: ["SCOPE EXPANSION", "SELECTIVE EXPANSION", "HOLD SCOPE", "SCOPE REDUCTION"],
21
+ priority: ["P0", "P1", "P2", "P3", "DROPPED"]
22
+ },
23
+ design: {
24
+ diagramTier: ["lightweight", "standard", "deep"],
25
+ edgeKind: ["sync", "async", "failure", "degraded"]
26
+ },
27
+ spec: {
28
+ priority: ["P0", "P1", "P2", "P3", "DROPPED"]
29
+ },
30
+ plan: {
31
+ taskStatus: ["pending", "in_progress", "blocked", "done", "dropped"]
32
+ },
33
+ tdd: {
34
+ cycleState: ["RED", "GREEN", "REFACTOR", "BLOCKED"]
35
+ },
36
+ review: {
37
+ finalVerdict: ["APPROVED", "APPROVED_WITH_CONCERNS", "BLOCKED"],
38
+ findingSeverity: ["Critical", "High", "Medium", "Low", "Info"]
39
+ },
40
+ ship: {
41
+ finalizationMode: [...SHIP_FINALIZATION_MODES]
42
+ }
43
+ };
44
+ function stateContract(stage) {
45
+ const stageIndex = FLOW_STAGES.indexOf(stage) + 1;
46
+ const stageNumber = String(stageIndex).padStart(2, "0");
47
+ return {
48
+ schemaVersion: 1,
49
+ contractId: `cclaw-${stage}-state`,
50
+ stage,
51
+ derivedMarkdownPath: `${RUNTIME_ROOT}/artifacts/${stageNumber}-${stage}.md`,
52
+ requiredTopLevelFields: REQUIRED_TOP_LEVEL_FIELDS[stage],
53
+ taxonomies: STAGE_TAXONOMIES[stage]
54
+ };
55
+ }
56
+ export const STATE_CONTRACTS = Object.fromEntries(FLOW_STAGES.map((stage) => [
57
+ `${stage}.json`,
58
+ `${JSON.stringify({
59
+ ...stateContract(stage),
60
+ generatedBy: "cclaw",
61
+ cclawVersion: CCLAW_VERSION
62
+ }, null, 2)}\n`
63
+ ]));
@@ -210,6 +210,8 @@ When in doubt, prefer **non-trivial** — the quick track is opt-in and only saf
210
210
 
211
211
  Knowledge capture and curation run automatically as part of stage completion
212
212
  protocols via the internal \`learnings\` skill — no user-facing command.
213
+ Reusable entries land in \`.cclaw/knowledge.jsonl\` as strict JSONL with
214
+ \`type\`, \`trigger\`, \`action\`, and \`origin_run\` metadata.
213
215
 
214
216
  **Stage order:** brainstorm > scope > design > spec > plan > tdd > review > ship, then closeout: retro > compound > archive.
215
217
  \`/cc-next\` loads the right stage skill automatically and also drives post-ship closeout. Gates must pass before handoff.
package/dist/install.js CHANGED
@@ -16,6 +16,8 @@ import { stageCompleteScript, startFlowScript, runHookCmdScript, opencodePluginJ
16
16
  import { nodeHookRuntimeScript } from "./content/node-hooks.js";
17
17
  import { META_SKILL_NAME, usingCclawSkillMarkdown } from "./content/meta-skill.js";
18
18
  import { ARTIFACT_TEMPLATES, CURSOR_WORKFLOW_RULE_MDC, RULEBOOK_MARKDOWN, buildRulesJson } from "./content/templates.js";
19
+ import { STATE_CONTRACTS } from "./content/state-contracts.js";
20
+ import { REVIEW_PROMPTS } from "./content/review-prompts.js";
19
21
  import { stageSkillFolder, stageSkillMarkdown } from "./content/skills.js";
20
22
  import { LANGUAGE_RULE_PACK_DIR, LANGUAGE_RULE_PACK_FILES, LANGUAGE_RULE_PACK_GENERATORS, LEGACY_LANGUAGE_RULE_PACK_FOLDERS } from "./content/utility-skills.js";
21
23
  import { RESEARCH_PLAYBOOKS } from "./content/research-playbooks.js";
@@ -357,6 +359,9 @@ async function writeArtifactTemplates(projectRoot) {
357
359
  await Promise.all(Object.entries(ARTIFACT_TEMPLATES).map(async ([fileName, content]) => {
358
360
  await writeFileSafe(runtimePath(projectRoot, "templates", fileName), content);
359
361
  }));
362
+ await Promise.all(Object.entries(STATE_CONTRACTS).map(async ([fileName, content]) => {
363
+ await writeFileSafe(runtimePath(projectRoot, "templates", "state-contracts", fileName), content);
364
+ }));
360
365
  }
361
366
  async function writeSkills(projectRoot, config) {
362
367
  const skillTrack = config?.defaultTrack ?? "standard";
@@ -379,6 +384,9 @@ async function writeSkills(projectRoot, config) {
379
384
  for (const [fileName, markdown] of Object.entries(RESEARCH_PLAYBOOKS)) {
380
385
  await writeFileSafe(runtimePath(projectRoot, "skills", "research", fileName), markdown);
381
386
  }
387
+ for (const [fileName, markdown] of Object.entries(REVIEW_PROMPTS)) {
388
+ await writeFileSafe(runtimePath(projectRoot, "skills", "review-prompts", fileName), markdown);
389
+ }
382
390
  // Language rule packs live under .cclaw/rules/lang/<pack>.md. They are opt-in:
383
391
  // only the packs listed in config.languageRulePacks are materialised. Any
384
392
  // legacy per-language skill folders from v0.7.0 (.cclaw/skills/language-*)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cclaw-cli",
3
- "version": "0.51.12",
3
+ "version": "0.51.13",
4
4
  "description": "Installer-first flow toolkit for coding agents",
5
5
  "type": "module",
6
6
  "bin": {