cc-devflow 4.5.7 → 4.5.9
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 +33 -0
- package/.claude/skills/cc-act/PLAYBOOK.md +18 -4
- package/.claude/skills/cc-act/SKILL.md +76 -7
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_INDEX_TEMPLATE.md +30 -0
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_PRINCIPLES_TEMPLATE.md +29 -0
- package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_TEMPLATE.md +103 -0
- package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +60 -4
- package/.claude/skills/cc-act/references/closure-contract.md +7 -0
- package/.claude/skills/cc-act/references/git-commit-guidelines.md +342 -37
- package/.claude/skills/cc-act/scripts/cc-act-common.sh +29 -1
- package/.claude/skills/cc-act/scripts/detect-ship-target.sh +27 -0
- package/.claude/skills/cc-act/scripts/ensure-ship-branch.sh +93 -0
- package/.claude/skills/cc-act/scripts/generate-status-report.sh +6 -0
- package/.claude/skills/cc-act/scripts/render-pr-brief.sh +170 -0
- package/.claude/skills/cc-act/scripts/sync-act-docs.sh +15 -1
- package/.claude/skills/cc-dev/CHANGELOG.md +5 -0
- package/.claude/skills/cc-dev/PLAYBOOK.md +63 -0
- package/.claude/skills/cc-dev/SKILL.md +168 -0
- package/.claude/skills/cc-do/CHANGELOG.md +17 -0
- package/.claude/skills/cc-do/SKILL.md +41 -13
- package/.claude/skills/cc-do/scripts/build-task-context.sh +9 -5
- package/.claude/skills/cc-do/scripts/mark-task-complete.sh +0 -6
- package/.claude/skills/cc-investigate/CHANGELOG.md +17 -0
- package/.claude/skills/cc-investigate/PLAYBOOK.md +15 -0
- package/.claude/skills/cc-investigate/SKILL.md +46 -1
- package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +47 -0
- package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +21 -2
- package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +28 -58
- package/.claude/skills/cc-investigate/references/investigation-contract.md +14 -0
- package/.claude/skills/cc-next/CHANGELOG.md +11 -0
- package/.claude/skills/cc-next/PLAYBOOK.md +74 -0
- package/.claude/skills/cc-next/SKILL.md +196 -0
- package/.claude/skills/cc-plan/CHANGELOG.md +25 -0
- package/.claude/skills/cc-plan/PLAYBOOK.md +25 -20
- package/.claude/skills/cc-plan/SKILL.md +116 -13
- package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +67 -0
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +85 -0
- package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +57 -182
- package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +46 -0
- package/.claude/skills/cc-plan/references/planning-contract.md +51 -26
- package/.claude/skills/cc-pr-land/CHANGELOG.md +5 -0
- package/.claude/skills/cc-pr-land/PLAYBOOK.md +45 -0
- package/.claude/skills/cc-pr-land/SKILL.md +157 -0
- package/.claude/skills/cc-pr-review/CHANGELOG.md +5 -0
- package/.claude/skills/cc-pr-review/PLAYBOOK.md +46 -0
- package/.claude/skills/cc-pr-review/SKILL.md +142 -0
- package/.claude/skills/cc-review/CHANGELOG.md +21 -0
- package/.claude/skills/cc-review/PLAYBOOK.md +64 -10
- package/.claude/skills/cc-review/SKILL.md +185 -18
- package/.claude/skills/cc-review/references/e2e-and-plugin-verification.md +4 -0
- package/.claude/skills/cc-review/references/implementation-review-branch.md +37 -0
- package/.claude/skills/cc-review/references/plan-review-branch.md +36 -1
- package/.claude/skills/cc-review/references/review-methods.md +98 -3
- package/.claude/skills/cc-review/scripts/collect-review-context.sh +80 -0
- package/.claude/skills/cc-roadmap/CHANGELOG.md +6 -0
- package/.claude/skills/cc-roadmap/PLAYBOOK.md +30 -0
- package/.claude/skills/cc-roadmap/SKILL.md +45 -8
- package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +8 -0
- package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +22 -0
- package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +32 -1
- package/.claude/skills/cc-roadmap/references/roadmap-dialogue.md +14 -14
- package/.claude/skills/cc-simplify/CHANGELOG.md +6 -0
- package/.claude/skills/cc-simplify/SKILL.md +19 -8
- package/CHANGELOG.md +20 -1
- package/README.md +60 -9
- package/README.zh-CN.md +60 -9
- package/config/distributable-skills.json +8 -0
- package/docs/assets/cc-devflow-pr-harness-en.svg +153 -0
- package/docs/assets/cc-devflow-pr-harness-zh.svg +152 -0
- package/docs/assets/wechat-group-qr.jpg +0 -0
- package/docs/examples/example-bindings.json +11 -7
- 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/task-manifest.json +102 -82
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +45 -1
- package/docs/examples/full-design-blocked/roadmap.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/task-manifest.json +70 -61
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +35 -1
- package/docs/examples/local-handoff/roadmap.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/handoff/pr-brief.md +64 -0
- 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 +71 -81
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +35 -1
- package/docs/examples/pdca-loop/roadmap.json +1 -1
- package/docs/examples/scripts/check-example-bindings.sh +24 -2
- package/docs/get-shit-done-strategy-audit.md +4 -4
- package/docs/guides/artifact-contract.md +44 -0
- package/docs/guides/getting-started.md +1 -1
- package/docs/guides/getting-started.zh-CN.md +1 -1
- package/docs/guides/project-postmortem.md +78 -0
- package/lib/skill-runtime/__tests__/planner.tdd.test.js +2 -2
- package/lib/skill-runtime/__tests__/schemas.test.js +33 -2
- package/lib/skill-runtime/planner.js +1 -2
- package/lib/skill-runtime/query.js +1 -1
- package/lib/skill-runtime/schemas.js +5 -3
- package/package.json +6 -1
|
@@ -120,7 +120,7 @@ describe('TDD Order Validation', () => {
|
|
|
120
120
|
});
|
|
121
121
|
});
|
|
122
122
|
|
|
123
|
-
test('should write currentTaskId
|
|
123
|
+
test('should write currentTaskId while deriving activePhase from the task graph', async () => {
|
|
124
124
|
const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'cc-devflow-planner-'));
|
|
125
125
|
const changeId = 'REQ-321';
|
|
126
126
|
const tasksPath = path.join(repoRoot, 'devflow', 'changes', `${changeId}-change`, 'planning', 'tasks.md');
|
|
@@ -146,7 +146,7 @@ describe('TDD Order Validation', () => {
|
|
|
146
146
|
overwrite: true
|
|
147
147
|
});
|
|
148
148
|
|
|
149
|
-
expect(manifest.activePhase).
|
|
149
|
+
expect(manifest.activePhase).toBeUndefined();
|
|
150
150
|
expect(manifest.currentTaskId).toBe('T002');
|
|
151
151
|
expect(manifest.tasks[1].reviews).toEqual({ spec: 'pending', code: 'pending' });
|
|
152
152
|
});
|
|
@@ -8,7 +8,6 @@ describe('Manifest schema hard constraints', () => {
|
|
|
8
8
|
createdAt: '2026-04-10T01:00:00.000Z',
|
|
9
9
|
updatedAt: '2026-04-10T01:05:00.000Z',
|
|
10
10
|
currentTaskId: 'T001',
|
|
11
|
-
activePhase: 1,
|
|
12
11
|
tasks: [
|
|
13
12
|
{
|
|
14
13
|
id: 'T001',
|
|
@@ -73,7 +72,39 @@ describe('Manifest schema hard constraints', () => {
|
|
|
73
72
|
});
|
|
74
73
|
|
|
75
74
|
expect(manifest.currentTaskId).toBe('T001');
|
|
76
|
-
expect(manifest.activePhase).
|
|
75
|
+
expect(manifest.activePhase).toBeUndefined();
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test('accepts legacy activePhase input without preserving the retired field', () => {
|
|
79
|
+
const manifest = parseManifest({
|
|
80
|
+
changeId: 'REQ-560',
|
|
81
|
+
goal: 'Validate legacy manifest compatibility',
|
|
82
|
+
createdAt: '2026-04-10T01:00:00.000Z',
|
|
83
|
+
updatedAt: '2026-04-10T01:05:00.000Z',
|
|
84
|
+
currentTaskId: 'T001',
|
|
85
|
+
activePhase: 1,
|
|
86
|
+
tasks: [
|
|
87
|
+
{
|
|
88
|
+
id: 'T001',
|
|
89
|
+
title: '[TEST] Counter behavior',
|
|
90
|
+
type: 'OTHER',
|
|
91
|
+
phase: 1,
|
|
92
|
+
dependsOn: [],
|
|
93
|
+
run: ['echo ok'],
|
|
94
|
+
status: 'pending',
|
|
95
|
+
attempts: 0,
|
|
96
|
+
maxRetries: 1
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
metadata: {
|
|
100
|
+
source: 'default',
|
|
101
|
+
generatedBy: 'test',
|
|
102
|
+
planVersion: 1
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
expect(manifest.currentTaskId).toBe('T001');
|
|
107
|
+
expect(manifest.activePhase).toBeUndefined();
|
|
77
108
|
});
|
|
78
109
|
|
|
79
110
|
test('rejects invalid currentTaskId for tasks.md manifest', () => {
|
|
@@ -480,7 +480,7 @@ function deriveManifestExecutionState(tasks) {
|
|
|
480
480
|
function applyManifestExecutionState(manifest, updatedAt = nowIso()) {
|
|
481
481
|
const executionState = deriveManifestExecutionState(manifest.tasks || []);
|
|
482
482
|
manifest.currentTaskId = executionState.currentTaskId;
|
|
483
|
-
manifest.activePhase
|
|
483
|
+
delete manifest.activePhase;
|
|
484
484
|
manifest.updatedAt = updatedAt;
|
|
485
485
|
return manifest;
|
|
486
486
|
}
|
|
@@ -504,7 +504,6 @@ async function createTaskManifest({ repoRoot, changeId, goal, overwrite = false
|
|
|
504
504
|
createdAt: previous?.createdAt || nowIso(),
|
|
505
505
|
updatedAt: nowIso(),
|
|
506
506
|
currentTaskId: null,
|
|
507
|
-
activePhase: null,
|
|
508
507
|
tasks,
|
|
509
508
|
metadata: {
|
|
510
509
|
source: hasTasksFile ? 'tasks.md' : 'default',
|
|
@@ -81,7 +81,7 @@ async function getNextTask(repoRoot, changeId, options = {}) {
|
|
|
81
81
|
const manifestPath = getTaskManifestPath(repoRoot, changeId, options);
|
|
82
82
|
const manifest = await readQueryArtifact(manifestPath);
|
|
83
83
|
const executionState = deriveManifestExecutionState(manifest.tasks || []);
|
|
84
|
-
const activePhase =
|
|
84
|
+
const activePhase = executionState.activePhase;
|
|
85
85
|
const completedIds = new Set(
|
|
86
86
|
(manifest.tasks || [])
|
|
87
87
|
.filter((task) => isTaskCompletedStatus(task.status))
|
|
@@ -107,7 +107,7 @@ const ManifestSchema = z.object({
|
|
|
107
107
|
createdAt: z.string().datetime(),
|
|
108
108
|
updatedAt: z.string().datetime(),
|
|
109
109
|
currentTaskId: z.string().regex(TASK_ID_PATTERN).nullable().default(null),
|
|
110
|
-
activePhase: z.number().int().min(1).nullable().
|
|
110
|
+
activePhase: z.number().int().min(1).nullable().optional(),
|
|
111
111
|
tasks: z.array(TaskSchema),
|
|
112
112
|
metadata: z.object({
|
|
113
113
|
source: z.enum(['tasks.md', 'default']).default('default'),
|
|
@@ -161,7 +161,7 @@ const ManifestSchema = z.object({
|
|
|
161
161
|
? Math.min(...unfinished.map((task) => task.phase || 1))
|
|
162
162
|
: null;
|
|
163
163
|
|
|
164
|
-
if (manifest.activePhase !== null && manifest.activePhase !== derivedActivePhase) {
|
|
164
|
+
if (manifest.activePhase !== undefined && manifest.activePhase !== null && manifest.activePhase !== derivedActivePhase) {
|
|
165
165
|
ctx.addIssue({
|
|
166
166
|
code: z.ZodIssueCode.custom,
|
|
167
167
|
path: ['activePhase'],
|
|
@@ -542,7 +542,9 @@ function parseWithSchema(schema, input, label) {
|
|
|
542
542
|
}
|
|
543
543
|
|
|
544
544
|
function parseManifest(input) {
|
|
545
|
-
|
|
545
|
+
const manifest = parseWithSchema(ManifestSchema, input, 'Manifest');
|
|
546
|
+
delete manifest.activePhase;
|
|
547
|
+
return manifest;
|
|
546
548
|
}
|
|
547
549
|
|
|
548
550
|
function parseCheckpoint(input) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cc-devflow",
|
|
3
|
-
"version": "4.5.
|
|
3
|
+
"version": "4.5.9",
|
|
4
4
|
"description": "Multi-platform CLI and skill pack for agent coding",
|
|
5
5
|
"main": "bin/cc-devflow.js",
|
|
6
6
|
"bin": {
|
|
@@ -10,11 +10,16 @@
|
|
|
10
10
|
"bin/",
|
|
11
11
|
"lib/",
|
|
12
12
|
"config/",
|
|
13
|
+
"docs/assets/",
|
|
13
14
|
".claude/skills/cc-roadmap/",
|
|
15
|
+
".claude/skills/cc-next/",
|
|
16
|
+
".claude/skills/cc-dev/",
|
|
14
17
|
".claude/skills/cc-plan/",
|
|
15
18
|
".claude/skills/cc-investigate/",
|
|
16
19
|
".claude/skills/cc-do/",
|
|
17
20
|
".claude/skills/cc-review/",
|
|
21
|
+
".claude/skills/cc-pr-review/",
|
|
22
|
+
".claude/skills/cc-pr-land/",
|
|
18
23
|
".claude/skills/cc-check/",
|
|
19
24
|
".claude/skills/cc-act/",
|
|
20
25
|
".claude/skills/cc-spec-init/",
|