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.
- package/.claude/skills/cc-act/CHANGELOG.md +6 -0
- package/.claude/skills/cc-act/SKILL.md +9 -1
- package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +4 -0
- package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +4 -0
- package/.claude/skills/cc-act/scripts/cc-act-common.sh +5 -0
- package/.claude/skills/cc-act/scripts/render-pr-brief.sh +5 -0
- package/.claude/skills/cc-act/scripts/sync-act-docs.sh +14 -1
- package/.claude/skills/cc-check/CHANGELOG.md +5 -0
- package/.claude/skills/cc-check/SKILL.md +9 -1
- package/.claude/skills/cc-check/assets/REPORT_CARD_TEMPLATE.json +3 -0
- package/.claude/skills/cc-do/CHANGELOG.md +5 -0
- package/.claude/skills/cc-do/SKILL.md +9 -1
- package/.claude/skills/cc-investigate/CHANGELOG.md +5 -0
- package/.claude/skills/cc-investigate/SKILL.md +9 -1
- package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +1 -0
- package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +1 -0
- package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +3 -0
- package/.claude/skills/cc-plan/CHANGELOG.md +19 -0
- package/.claude/skills/cc-plan/PLAYBOOK.md +19 -2
- package/.claude/skills/cc-plan/SKILL.md +60 -20
- package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +71 -1
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +14 -0
- package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +6 -1
- package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +23 -0
- package/.claude/skills/cc-roadmap/CHANGELOG.md +17 -0
- package/.claude/skills/cc-roadmap/PLAYBOOK.md +24 -1
- package/.claude/skills/cc-roadmap/SKILL.md +58 -15
- package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +16 -0
- package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +38 -0
- package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +5 -1
- package/.claude/skills/cc-spec-init/CHANGELOG.md +5 -0
- package/.claude/skills/cc-spec-init/SKILL.md +9 -1
- package/.claude/skills/cc-spec-init/assets/CAPABILITY_TEMPLATE.md +1 -0
- package/.claude/skills/cc-spec-init/assets/CHANGE_META_TEMPLATE.json +3 -0
- package/.claude/skills/cc-spec-init/assets/INDEX_TEMPLATE.md +1 -0
- package/CHANGELOG.md +39 -0
- package/CODE_OF_CONDUCT.md +39 -0
- package/CODE_OF_CONDUCT.zh-CN.md +39 -0
- package/CONTRIBUTING.md +195 -0
- package/CONTRIBUTING.zh-CN.md +195 -0
- package/README.md +154 -120
- package/README.zh-CN.md +156 -117
- package/SECURITY.md +56 -0
- package/SECURITY.zh-CN.md +56 -0
- package/bin/cc-devflow-cli.js +226 -0
- package/config/schema/cc-devflow-config.schema.json +45 -0
- package/config/user-config.template.yml +16 -0
- package/docs/examples/example-bindings.json +8 -8
- package/docs/examples/full-design-blocked/BACKLOG.md +1 -1
- package/docs/examples/full-design-blocked/README.md +1 -1
- package/docs/examples/full-design-blocked/ROADMAP.md +1 -1
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +1 -1
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +1 -1
- package/docs/examples/full-design-blocked/roadmap-tracking.json +1 -1
- package/docs/examples/local-handoff/BACKLOG.md +1 -1
- package/docs/examples/local-handoff/README.md +1 -1
- package/docs/examples/local-handoff/ROADMAP.md +1 -1
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +1 -1
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +1 -1
- package/docs/examples/local-handoff/roadmap-tracking.json +1 -1
- package/docs/examples/pdca-loop/BACKLOG.md +1 -1
- package/docs/examples/pdca-loop/README.md +1 -1
- package/docs/examples/pdca-loop/ROADMAP.md +1 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +1 -1
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +2 -2
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +1 -1
- package/docs/examples/pdca-loop/roadmap-tracking.json +1 -1
- package/docs/guides/getting-started.md +5 -0
- package/docs/guides/getting-started.zh-CN.md +5 -0
- package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +112 -2
- package/lib/skill-runtime/__tests__/config.test.js +161 -0
- package/lib/skill-runtime/__tests__/runtime.integration.test.js +2 -0
- package/lib/skill-runtime/config.js +379 -0
- package/lib/skill-runtime/index.js +2 -0
- package/package.json +7 -1
package/bin/cc-devflow-cli.js
CHANGED
|
@@ -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-
|
|
2
|
+
"updatedAt": "2026-04-28",
|
|
3
3
|
"skills": {
|
|
4
|
-
"cc-roadmap": "4.3.
|
|
5
|
-
"cc-plan": "3.5.
|
|
6
|
-
"cc-investigate": "1.1.
|
|
7
|
-
"cc-do": "1.5.
|
|
8
|
-
"cc-check": "1.8.
|
|
9
|
-
"cc-act": "1.6.
|
|
10
|
-
"cc-spec-init": "1.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
|
{
|
|
@@ -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.
|
|
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
|
|
package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md
CHANGED
|
@@ -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.
|
|
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
|
- Example version: `1.0.0`
|
|
6
6
|
- Last reviewed: `2026-04-17`
|
|
7
|
-
- Bound skills: `cc-roadmap@4.3.
|
|
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
|
|
|
@@ -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.
|
|
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
|
- Example version: `1.0.0`
|
|
6
6
|
- Last reviewed: `2026-04-17`
|
|
7
|
-
- Bound skills: `cc-roadmap@4.3.
|
|
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
|
|
|
@@ -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.
|
|
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
|
package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"sourceRoadmap": {
|
|
10
10
|
"itemId": "RM-001",
|
|
11
11
|
"roadmapVersion": "roadmap.v1",
|
|
12
|
-
"roadmapSkillVersion": "4.3.
|
|
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.
|
|
25
|
+
"reqPlanSkillVersion": "3.5.6",
|
|
26
26
|
"designVersion": "design.v1",
|
|
27
27
|
"approvedAt": "2026-04-15T10:05:00.000Z",
|
|
28
28
|
"approvedBy": "user",
|
|
@@ -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`
|