cc-devflow 4.4.1 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/.claude/skills/cc-act/CHANGELOG.md +6 -0
  2. package/.claude/skills/cc-act/SKILL.md +9 -1
  3. package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +4 -0
  4. package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +4 -0
  5. package/.claude/skills/cc-act/scripts/cc-act-common.sh +5 -0
  6. package/.claude/skills/cc-act/scripts/render-pr-brief.sh +5 -0
  7. package/.claude/skills/cc-act/scripts/sync-act-docs.sh +14 -1
  8. package/.claude/skills/cc-check/CHANGELOG.md +5 -0
  9. package/.claude/skills/cc-check/SKILL.md +9 -1
  10. package/.claude/skills/cc-check/assets/REPORT_CARD_TEMPLATE.json +3 -0
  11. package/.claude/skills/cc-do/CHANGELOG.md +5 -0
  12. package/.claude/skills/cc-do/SKILL.md +9 -1
  13. package/.claude/skills/cc-investigate/CHANGELOG.md +5 -0
  14. package/.claude/skills/cc-investigate/SKILL.md +9 -1
  15. package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +1 -0
  16. package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +1 -0
  17. package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +3 -0
  18. package/.claude/skills/cc-plan/CHANGELOG.md +19 -0
  19. package/.claude/skills/cc-plan/PLAYBOOK.md +19 -2
  20. package/.claude/skills/cc-plan/SKILL.md +60 -20
  21. package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +71 -1
  22. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +14 -0
  23. package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +6 -1
  24. package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +23 -0
  25. package/.claude/skills/cc-roadmap/CHANGELOG.md +17 -0
  26. package/.claude/skills/cc-roadmap/PLAYBOOK.md +24 -1
  27. package/.claude/skills/cc-roadmap/SKILL.md +58 -15
  28. package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +16 -0
  29. package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +38 -0
  30. package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +5 -1
  31. package/.claude/skills/cc-spec-init/CHANGELOG.md +5 -0
  32. package/.claude/skills/cc-spec-init/SKILL.md +9 -1
  33. package/.claude/skills/cc-spec-init/assets/CAPABILITY_TEMPLATE.md +1 -0
  34. package/.claude/skills/cc-spec-init/assets/CHANGE_META_TEMPLATE.json +3 -0
  35. package/.claude/skills/cc-spec-init/assets/INDEX_TEMPLATE.md +1 -0
  36. package/CHANGELOG.md +39 -0
  37. package/CODE_OF_CONDUCT.md +39 -0
  38. package/CODE_OF_CONDUCT.zh-CN.md +39 -0
  39. package/CONTRIBUTING.md +195 -0
  40. package/CONTRIBUTING.zh-CN.md +195 -0
  41. package/README.md +154 -120
  42. package/README.zh-CN.md +156 -117
  43. package/SECURITY.md +56 -0
  44. package/SECURITY.zh-CN.md +56 -0
  45. package/bin/cc-devflow-cli.js +226 -0
  46. package/config/schema/cc-devflow-config.schema.json +45 -0
  47. package/config/user-config.template.yml +16 -0
  48. package/docs/examples/example-bindings.json +8 -8
  49. package/docs/examples/full-design-blocked/BACKLOG.md +1 -1
  50. package/docs/examples/full-design-blocked/README.md +1 -1
  51. package/docs/examples/full-design-blocked/ROADMAP.md +1 -1
  52. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +1 -1
  53. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +1 -1
  54. package/docs/examples/full-design-blocked/roadmap-tracking.json +1 -1
  55. package/docs/examples/local-handoff/BACKLOG.md +1 -1
  56. package/docs/examples/local-handoff/README.md +1 -1
  57. package/docs/examples/local-handoff/ROADMAP.md +1 -1
  58. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +1 -1
  59. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +1 -1
  60. package/docs/examples/local-handoff/roadmap-tracking.json +1 -1
  61. package/docs/examples/pdca-loop/BACKLOG.md +1 -1
  62. package/docs/examples/pdca-loop/README.md +1 -1
  63. package/docs/examples/pdca-loop/ROADMAP.md +1 -1
  64. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +1 -1
  65. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +2 -2
  66. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +1 -1
  67. package/docs/examples/pdca-loop/roadmap-tracking.json +1 -1
  68. package/docs/guides/getting-started.md +5 -0
  69. package/docs/guides/getting-started.zh-CN.md +5 -0
  70. package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +112 -2
  71. package/lib/skill-runtime/__tests__/config.test.js +161 -0
  72. package/lib/skill-runtime/__tests__/runtime.integration.test.js +2 -0
  73. package/lib/skill-runtime/config.js +379 -0
  74. package/lib/skill-runtime/index.js +2 -0
  75. package/package.json +7 -1
@@ -7,6 +7,13 @@ const PACKAGE_ROOT = path.resolve(__dirname, '..');
7
7
  const TEMPLATE_DIR = path.join(PACKAGE_ROOT, '.claude');
8
8
  const TEMPLATE_SKILLS_DIR = path.join(TEMPLATE_DIR, 'skills');
9
9
  const DISTRIBUTION_CONFIG = require(path.join(PACKAGE_ROOT, 'config', 'distributable-skills.json'));
10
+ const {
11
+ doctorUserConfig,
12
+ getConfigValue,
13
+ resolveUserConfig,
14
+ setConfigValue,
15
+ writeConfigTemplate
16
+ } = require(path.join(PACKAGE_ROOT, 'lib/skill-runtime/config.js'));
10
17
  const ADAPT_BIN = path.join(PACKAGE_ROOT, 'bin', 'adapt.js');
11
18
  const ADAPTER_BIN = path.join(PACKAGE_ROOT, 'bin', 'cc-devflow.js');
12
19
  const TEMPLATE_IGNORES = new Set(['.DS_Store', 'tsc-cache']);
@@ -42,6 +49,11 @@ Usage: cc-devflow <command> [options]
42
49
  Commands:
43
50
  init Install .claude template into a project
44
51
  adapt Compile .claude into multi-platform outputs
52
+ config init Create a YAML config template
53
+ config get Print one resolved config value
54
+ config set Set one project/user/local config value
55
+ config resolve Print resolved YAML config with key-level trace
56
+ config doctor Validate config and local ignore safety
45
57
 
46
58
  Init options:
47
59
  --dir <path> Target project path (default: cwd)
@@ -56,11 +68,26 @@ Adapt options:
56
68
  --rules Generate rules entry files only
57
69
  --verbose Show detailed output
58
70
 
71
+ Config options:
72
+ --cwd <path> Project path used for project/local config lookup
73
+ --user Read/write ~/.cc-devflow/config.yml
74
+ --project Read/write .cc-devflow/config.yml
75
+ --local Read/write .cc-devflow/config.local.yml
76
+ --scope <name> Backward-compatible scope alias: user, project, or local
77
+ --format <name> Output format: json or policy
78
+ --document-language CLI override for output.document_language
79
+ --trace Include key-level source trace with policy output
80
+ --force Overwrite an existing config template
81
+
59
82
  Examples:
60
83
  cc-devflow init
61
84
  cc-devflow init --dir /path/to/project
62
85
  cc-devflow adapt --platform cursor
63
86
  cc-devflow adapt --cwd /path/to/project --platform codex
87
+ cc-devflow config init --cwd /path/to/project --project
88
+ cc-devflow config set output.document_language zh-CN --cwd /path/to/project --project
89
+ cc-devflow config set output.document_language zh-CN --user
90
+ cc-devflow config resolve --cwd /path/to/project --format policy
64
91
  `);
65
92
  }
66
93
 
@@ -210,6 +237,201 @@ function runInit(args) {
210
237
  return 0;
211
238
  }
212
239
 
240
+ function parseConfigArgs(args) {
241
+ const parsed = {
242
+ cwd: null,
243
+ documentLanguage: null,
244
+ force: false,
245
+ format: 'json',
246
+ scope: 'project',
247
+ trace: false
248
+ };
249
+ const rest = [];
250
+
251
+ for (let i = 0; i < args.length; i++) {
252
+ const arg = args[i];
253
+
254
+ if (arg === '--force') {
255
+ parsed.force = true;
256
+ continue;
257
+ }
258
+
259
+ if (arg === '--trace') {
260
+ parsed.trace = true;
261
+ continue;
262
+ }
263
+
264
+ if (arg === '--user') {
265
+ parsed.scope = 'user';
266
+ continue;
267
+ }
268
+
269
+ if (arg === '--project') {
270
+ parsed.scope = 'project';
271
+ continue;
272
+ }
273
+
274
+ if (arg === '--local') {
275
+ parsed.scope = 'local';
276
+ continue;
277
+ }
278
+
279
+ if (arg === '--cwd') {
280
+ parsed.cwd = args[++i];
281
+ continue;
282
+ }
283
+
284
+ if (arg.startsWith('--cwd=')) {
285
+ parsed.cwd = arg.slice('--cwd='.length);
286
+ continue;
287
+ }
288
+
289
+ if (arg === '--scope') {
290
+ parsed.scope = args[++i];
291
+ continue;
292
+ }
293
+
294
+ if (arg.startsWith('--scope=')) {
295
+ parsed.scope = arg.slice('--scope='.length);
296
+ continue;
297
+ }
298
+
299
+ if (arg === '--format') {
300
+ parsed.format = args[++i];
301
+ continue;
302
+ }
303
+
304
+ if (arg.startsWith('--format=')) {
305
+ parsed.format = arg.slice('--format='.length);
306
+ continue;
307
+ }
308
+
309
+ if (arg === '--document-language') {
310
+ parsed.documentLanguage = args[++i];
311
+ continue;
312
+ }
313
+
314
+ if (arg.startsWith('--document-language=')) {
315
+ parsed.documentLanguage = arg.slice('--document-language='.length);
316
+ continue;
317
+ }
318
+
319
+ rest.push(arg);
320
+ }
321
+
322
+ parsed.rest = rest;
323
+ return parsed;
324
+ }
325
+
326
+ function parseConfigOverrides(options) {
327
+ if (!options.documentLanguage) {
328
+ return {};
329
+ }
330
+
331
+ return {
332
+ output: {
333
+ document_language: options.documentLanguage
334
+ }
335
+ };
336
+ }
337
+
338
+ function runConfig(args) {
339
+ const [subcommand, ...rest] = args;
340
+ const options = parseConfigArgs(rest);
341
+ const cwd = path.resolve(options.cwd || process.cwd());
342
+
343
+ if (subcommand === 'init') {
344
+ const configPath = writeConfigTemplate({
345
+ cwd,
346
+ force: options.force,
347
+ scope: options.scope
348
+ });
349
+ console.log(`Config template ready: ${configPath}`);
350
+ return 0;
351
+ }
352
+
353
+ if (subcommand === 'get') {
354
+ const keyPath = options.rest[0];
355
+ if (!keyPath) {
356
+ console.error('Config key is required.');
357
+ return 3;
358
+ }
359
+
360
+ const resolved = resolveUserConfig({
361
+ cwd,
362
+ overrides: parseConfigOverrides(options)
363
+ });
364
+ const value = getConfigValue(resolved.config, keyPath);
365
+ if (value === undefined) {
366
+ return 4;
367
+ }
368
+ process.stdout.write(`${typeof value === 'object' ? JSON.stringify(value, null, 2) : String(value)}\n`);
369
+ return 0;
370
+ }
371
+
372
+ if (subcommand === 'set') {
373
+ const [keyPath, value] = options.rest;
374
+ if (!keyPath || value === undefined) {
375
+ console.error('Use: cc-devflow config set <key> <value>');
376
+ return 3;
377
+ }
378
+
379
+ const configPath = setConfigValue(keyPath, value, {
380
+ cwd,
381
+ scope: options.scope
382
+ });
383
+ console.log(`Updated ${configPath}`);
384
+ return 0;
385
+ }
386
+
387
+ if (subcommand === 'doctor') {
388
+ const result = doctorUserConfig({
389
+ cwd,
390
+ overrides: parseConfigOverrides(options)
391
+ });
392
+
393
+ if (result.ok) {
394
+ console.log('Config OK');
395
+ return 0;
396
+ }
397
+
398
+ for (const warning of result.warnings) {
399
+ console.error(`Config warning: ${warning}`);
400
+ }
401
+ return 2;
402
+ }
403
+
404
+ if (subcommand !== 'resolve') {
405
+ console.error('Unknown config command. Use: cc-devflow config init|get|set|resolve|doctor');
406
+ return 3;
407
+ }
408
+
409
+ const resolved = resolveUserConfig({
410
+ cwd,
411
+ overrides: parseConfigOverrides(options)
412
+ });
413
+
414
+ if (options.format === 'policy') {
415
+ process.stdout.write(resolved.policy || '');
416
+ if (options.trace) {
417
+ process.stdout.write('\nTrace:\n');
418
+ for (const entry of resolved.trace) {
419
+ const sourcePath = entry.path ? ` ${entry.path}` : '';
420
+ process.stdout.write(`- ${entry.key} = ${entry.value} (${entry.source}${sourcePath})\n`);
421
+ }
422
+ }
423
+ return 0;
424
+ }
425
+
426
+ if (options.format !== 'json') {
427
+ console.error(`Unknown config format: ${options.format}`);
428
+ return 3;
429
+ }
430
+
431
+ process.stdout.write(`${JSON.stringify(resolved, null, 2)}\n`);
432
+ return 0;
433
+ }
434
+
213
435
  function runAdapt(args) {
214
436
  const { options, rest } = parseCliArgs(args);
215
437
 
@@ -270,6 +492,10 @@ function main() {
270
492
  return runAdapt(rest);
271
493
  }
272
494
 
495
+ if (command === 'config') {
496
+ return runConfig(rest);
497
+ }
498
+
273
499
  return runAdapter(command, rest);
274
500
  }
275
501
 
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "CC-DevFlow User Config",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "properties": {
7
+ "version": {
8
+ "type": "integer",
9
+ "enum": [1]
10
+ },
11
+ "output": {
12
+ "type": "object",
13
+ "additionalProperties": false,
14
+ "properties": {
15
+ "document_language": {
16
+ "type": "string",
17
+ "enum": ["en", "zh-CN"]
18
+ }
19
+ }
20
+ },
21
+ "agent_preferences": {
22
+ "type": "object",
23
+ "description": "Advisory user preferences. These can be non-standard, but they do not override workflow contracts.",
24
+ "additionalProperties": {
25
+ "oneOf": [
26
+ { "type": "string" },
27
+ { "type": "number" },
28
+ { "type": "boolean" },
29
+ {
30
+ "type": "array",
31
+ "items": {
32
+ "type": ["string", "number", "boolean", "object", "array", "null"]
33
+ }
34
+ },
35
+ {
36
+ "type": "object",
37
+ "additionalProperties": true
38
+ },
39
+ { "type": "null" }
40
+ ]
41
+ }
42
+ }
43
+ },
44
+ "required": ["version"]
45
+ }
@@ -0,0 +1,16 @@
1
+ version: 1
2
+
3
+ output:
4
+ # Machine-enforced. Supported values: en, zh-CN.
5
+ document_language: zh-CN
6
+
7
+ # Advisory preferences. cc-devflow preserves these values and exposes them in
8
+ # `cc-devflow config resolve --format policy`, but workflow rules still win.
9
+ agent_preferences:
10
+ general:
11
+ - Durable planning, review, and handoff documents should be direct and verifiable.
12
+ - State assumptions before task breakdowns.
13
+ planning:
14
+ - Record trade-offs and non-goals before implementation tasks.
15
+ review:
16
+ - List behavior risks before style suggestions.
@@ -1,13 +1,13 @@
1
1
  {
2
- "updatedAt": "2026-04-25",
2
+ "updatedAt": "2026-04-28",
3
3
  "skills": {
4
- "cc-roadmap": "4.3.1",
5
- "cc-plan": "3.5.3",
6
- "cc-investigate": "1.1.1",
7
- "cc-do": "1.5.1",
8
- "cc-check": "1.8.1",
9
- "cc-act": "1.6.1",
10
- "cc-spec-init": "1.0.0"
4
+ "cc-roadmap": "4.3.4",
5
+ "cc-plan": "3.5.6",
6
+ "cc-investigate": "1.1.2",
7
+ "cc-do": "1.5.2",
8
+ "cc-check": "1.8.2",
9
+ "cc-act": "1.6.2",
10
+ "cc-spec-init": "1.0.1"
11
11
  },
12
12
  "examples": [
13
13
  {
@@ -3,7 +3,7 @@
3
3
  ## Backlog Meta
4
4
 
5
5
  - Roadmap version: `roadmap.v2`
6
- - Skill version: `4.3.1`
6
+ - Skill version: `4.3.4`
7
7
  - Last synced: `2026-04-19`
8
8
  - Current focus stage: `Stage 2`
9
9
  - Tracking source: `roadmap-tracking.json`
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Example version: `1.0.0`
6
6
  - Last reviewed: `2026-04-17`
7
- - Bound skills: `cc-roadmap@4.3.1`, `cc-plan@3.5.3`, `cc-do@1.5.1`, `cc-check@1.8.1`
7
+ - Bound skills: `cc-roadmap@4.3.4`, `cc-plan@3.5.6`, `cc-do@1.5.2`, `cc-check@1.8.2`
8
8
 
9
9
  This example shows a requirement that **looked executable**, but `cc-check` correctly stopped it and sent it back to `cc-plan`.
10
10
 
@@ -3,7 +3,7 @@
3
3
  ## Roadmap Meta
4
4
 
5
5
  - Roadmap version: `roadmap.v2`
6
- - Skill version: `4.3.1`
6
+ - Skill version: `4.3.4`
7
7
  - Status: `active`
8
8
  - Last updated: `2026-04-16`
9
9
  - Owner / decider: `product-owner`
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Requirement version: `REQ-002.v2`
6
6
  - Design version: `design.v2`
7
- - CC-Plan skill version: `3.5.3`
7
+ - CC-Plan skill version: `3.5.6`
8
8
  - Requirement ID: `REQ-002`
9
9
  - Design mode: `full-design`
10
10
  - Why not `tiny-design`: the feature crosses import parsing, invite rules, billing limits, duplicate handling, and audit logging
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Requirement version: `REQ-002.v2`
6
6
  - Design version: `design.v2`
7
- - CC-Plan skill version: `3.5.3`
7
+ - CC-Plan skill version: `3.5.6`
8
8
  - Source roadmap item: `RM-010`
9
9
  - Source roadmap version: `roadmap.v2`
10
10
 
@@ -3,7 +3,7 @@
3
3
  "lastSyncedAt": "2026-04-19",
4
4
  "backlogMeta": {
5
5
  "roadmapVersion": "roadmap.v2",
6
- "skillVersion": "4.3.1",
6
+ "skillVersion": "4.3.4",
7
7
  "currentFocusStage": "Stage 2"
8
8
  },
9
9
  "dependencyHandoff": {
@@ -3,7 +3,7 @@
3
3
  ## Backlog Meta
4
4
 
5
5
  - Roadmap version: `roadmap.v2`
6
- - Skill version: `4.3.1`
6
+ - Skill version: `4.3.4`
7
7
  - Last synced: `2026-04-19`
8
8
  - Current focus stage: `Stage 2`
9
9
  - Tracking source: `roadmap-tracking.json`
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Example version: `1.0.0`
6
6
  - Last reviewed: `2026-04-17`
7
- - Bound skills: `cc-roadmap@4.3.1`, `cc-plan@3.5.3`, `cc-do@1.5.1`, `cc-check@1.8.1`, `cc-act@1.6.1`
7
+ - Bound skills: `cc-roadmap@4.3.4`, `cc-plan@3.5.6`, `cc-do@1.5.2`, `cc-check@1.8.2`, `cc-act@1.6.2`
8
8
 
9
9
  This example shows verified work that is **ready to move forward**, but `cc-act` still chooses `local-handoff`.
10
10
 
@@ -3,7 +3,7 @@
3
3
  ## Roadmap Meta
4
4
 
5
5
  - Roadmap version: `roadmap.v3`
6
- - Skill version: `4.3.1`
6
+ - Skill version: `4.3.4`
7
7
  - Status: `active`
8
8
  - Last updated: `2026-04-16`
9
9
  - Owner / decider: `product-owner`
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Requirement version: `REQ-003.v1`
6
6
  - Design version: `design.v1`
7
- - CC-Plan skill version: `3.5.3`
7
+ - CC-Plan skill version: `3.5.6`
8
8
  - Requirement ID: `REQ-003`
9
9
  - Design mode: `tiny-design`
10
10
  - Why this stays `tiny-design`: the patch adds one export action inside the existing admin audit UI without changing data contracts
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Requirement version: `REQ-003.v1`
6
6
  - Design version: `design.v1`
7
- - CC-Plan skill version: `3.5.3`
7
+ - CC-Plan skill version: `3.5.6`
8
8
  - Source roadmap item: `RM-020`
9
9
  - Source roadmap version: `roadmap.v3`
10
10
 
@@ -3,7 +3,7 @@
3
3
  "lastSyncedAt": "2026-04-19",
4
4
  "backlogMeta": {
5
5
  "roadmapVersion": "roadmap.v2",
6
- "skillVersion": "4.3.1",
6
+ "skillVersion": "4.3.4",
7
7
  "currentFocusStage": "Stage 2"
8
8
  },
9
9
  "dependencyHandoff": {
@@ -3,7 +3,7 @@
3
3
  ## Backlog Meta
4
4
 
5
5
  - Roadmap version: `roadmap.v1`
6
- - Skill version: `4.3.1`
6
+ - Skill version: `4.3.4`
7
7
  - Last synced: `2026-04-19`
8
8
  - Current focus stage: `Stage 1`
9
9
  - Tracking source: `roadmap-tracking.json`
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Example version: `1.0.0`
6
6
  - Last reviewed: `2026-04-17`
7
- - Bound skills: `cc-roadmap@4.3.1`, `cc-plan@3.5.3`, `cc-do@1.5.1`, `cc-check@1.8.1`, `cc-act@1.6.1`
7
+ - Bound skills: `cc-roadmap@4.3.4`, `cc-plan@3.5.6`, `cc-do@1.5.2`, `cc-check@1.8.2`, `cc-act@1.6.2`
8
8
 
9
9
  This folder shows one minimal but complete `cc-roadmap -> cc-plan -> cc-do -> cc-check -> cc-act` loop.
10
10
 
@@ -3,7 +3,7 @@
3
3
  ## Roadmap Meta
4
4
 
5
5
  - Roadmap version: `roadmap.v1`
6
- - Skill version: `4.3.1`
6
+ - Skill version: `4.3.4`
7
7
  - Status: `active`
8
8
  - Last updated: `2026-04-15`
9
9
  - Owner / decider: `product-owner`
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Requirement version: `REQ-001.v1`
6
6
  - Design version: `design.v1`
7
- - CC-Plan skill version: `3.5.3`
7
+ - CC-Plan skill version: `3.5.6`
8
8
  - Requirement ID: `REQ-001`
9
9
  - Design mode: `tiny-design`
10
10
  - Why this stays `tiny-design`: the patch is limited to an existing dialog and test file, with no API or data model changes
@@ -9,7 +9,7 @@
9
9
  "sourceRoadmap": {
10
10
  "itemId": "RM-001",
11
11
  "roadmapVersion": "roadmap.v1",
12
- "roadmapSkillVersion": "4.3.1",
12
+ "roadmapSkillVersion": "4.3.4",
13
13
  "sourceStage": "Stage 1",
14
14
  "successSignal": "Users can copy the invite link with one click",
15
15
  "killSignal": "The patch requires backend or permission changes",
@@ -22,7 +22,7 @@
22
22
  ]
23
23
  },
24
24
  "planningMeta": {
25
- "reqPlanSkillVersion": "3.5.3",
25
+ "reqPlanSkillVersion": "3.5.6",
26
26
  "designVersion": "design.v1",
27
27
  "approvedAt": "2026-04-15T10:05:00.000Z",
28
28
  "approvedBy": "user",
@@ -4,7 +4,7 @@
4
4
 
5
5
  - Requirement version: `REQ-001.v1`
6
6
  - Design version: `design.v1`
7
- - CC-Plan skill version: `3.5.3`
7
+ - CC-Plan skill version: `3.5.6`
8
8
  - Source roadmap item: `RM-001`
9
9
  - Source roadmap version: `roadmap.v1`
10
10
 
@@ -3,7 +3,7 @@
3
3
  "lastSyncedAt": "2026-04-19",
4
4
  "backlogMeta": {
5
5
  "roadmapVersion": "roadmap.v1",
6
- "skillVersion": "4.3.1",
6
+ "skillVersion": "4.3.4",
7
7
  "currentFocusStage": "Stage 1"
8
8
  },
9
9
  "dependencyHandoff": {
@@ -98,6 +98,11 @@ Change truth lives in `devflow/changes/<change>/`.
98
98
  - Keep `change-state.json`, `change-meta.json`, planning docs, `task-manifest.json`, optional `team-state.json`, task `checkpoint.json`, `report-card.json`, and one final handoff file under each `devflow/changes/<change>/`.
99
99
  - Worker prompts, journals, assignments, and session logs belong under `devflow/workspaces/<change>/` as ephemeral scratch.
100
100
 
101
+ Planning handoffs should be evidence-rich before implementation starts:
102
+
103
+ - `cc-roadmap` records planning posture, evidence maturity, framing check, dependency graph, and any developer/operator adoption context.
104
+ - `cc-plan` records option roles, implementation surface, decision horizon, error/rescue map, test framework source, coverage quality, and regression-test requirements when they apply.
105
+
101
106
  Typical public contract fields:
102
107
 
103
108
  - `triggers`, `reads`, structured `writes`, `effects`
@@ -97,6 +97,11 @@ durable truth 分两层:
97
97
  - `devflow/changes/<change>/`:变更真相,保留 `change-state.json`、`change-meta.json`、planning 文档、`task-manifest.json`、可选 `team-state.json`、任务级 `checkpoint.json`、`report-card.json` 和唯一的最终 handoff 文件。
98
98
  - worker prompt、journal、assignment、session log 统一放到 `devflow/workspaces/<change>/`,作为 ephemeral scratch。
99
99
 
100
+ 进入实现前,planning handoff 应该先把证据写实:
101
+
102
+ - `cc-roadmap` 记录 planning posture、evidence maturity、framing check、依赖图,以及适用时的 developer/operator adoption context。
103
+ - `cc-plan` 记录 option roles、implementation surface、decision horizon、error/rescue map、测试框架来源、覆盖质量,以及适用时的 regression-test requirement。
104
+
100
105
  公开契约字段的典型形状:
101
106
 
102
107
  - `triggers`、`reads`、结构化 `writes`、`effects`