cc-devflow 4.5.15 → 4.5.17
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 +11 -0
- package/.claude/skills/cc-act/PLAYBOOK.md +2 -2
- package/.claude/skills/cc-act/SKILL.md +12 -2
- package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +9 -0
- package/.claude/skills/cc-act/references/closure-contract.md +3 -2
- package/.claude/skills/cc-act/scripts/evaluate-postmortem-trigger.sh +93 -0
- package/.claude/skills/cc-act/scripts/render-pr-brief.sh +138 -32
- package/.claude/skills/cc-dev/CHANGELOG.md +5 -0
- package/.claude/skills/cc-dev/PLAYBOOK.md +6 -3
- package/.claude/skills/cc-dev/SKILL.md +10 -7
- package/.claude/skills/cc-dev/scripts/ensure-work-branch.sh +117 -0
- package/.claude/skills/cc-dev/scripts/prepare-change-worktree.sh +135 -0
- package/.claude/skills/cc-investigate/CHANGELOG.md +15 -0
- package/.claude/skills/cc-investigate/SKILL.md +85 -8
- package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +56 -0
- package/.claude/skills/cc-investigate/references/investigation-contract.md +1 -0
- package/.claude/skills/cc-plan/CHANGELOG.md +15 -0
- package/.claude/skills/cc-plan/SKILL.md +70 -6
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +41 -0
- package/.claude/skills/cc-plan/references/planning-contract.md +1 -0
- package/.claude/skills/cc-pr-review/CHANGELOG.md +9 -0
- package/.claude/skills/cc-pr-review/PLAYBOOK.md +3 -0
- package/.claude/skills/cc-pr-review/SKILL.md +30 -1
- package/.claude/skills/cc-review/CHANGELOG.md +10 -0
- package/.claude/skills/cc-review/SKILL.md +53 -9
- package/.claude/skills/cc-review/references/implementation-review-branch.md +1 -0
- package/.claude/skills/cc-review/references/plan-review-branch.md +1 -0
- package/.claude/skills/cc-review/references/review-methods.md +30 -0
- package/.claude/skills/cc-roadmap/CHANGELOG.md +6 -0
- package/.claude/skills/cc-roadmap/SKILL.md +1 -1
- package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/markdown.js +274 -69
- package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/schema.js +69 -15
- package/CHANGELOG.md +21 -3
- package/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/docs/examples/example-bindings.json +8 -8
- package/docs/examples/full-design-blocked/BACKLOG.md +12 -1
- package/docs/examples/full-design-blocked/README.md +1 -1
- package/docs/examples/full-design-blocked/ROADMAP.md +2 -2
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/task.md +23 -1
- package/docs/examples/full-design-blocked/roadmap.json +7 -2
- package/docs/examples/local-handoff/BACKLOG.md +12 -1
- package/docs/examples/local-handoff/README.md +1 -1
- package/docs/examples/local-handoff/ROADMAP.md +2 -2
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/task.md +23 -1
- package/docs/examples/local-handoff/roadmap.json +7 -2
- package/docs/examples/pdca-loop/BACKLOG.md +12 -1
- package/docs/examples/pdca-loop/README.md +1 -1
- package/docs/examples/pdca-loop/ROADMAP.md +2 -2
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/task.md +23 -1
- package/docs/examples/pdca-loop/roadmap.json +7 -2
- package/docs/guides/project-postmortem.md +8 -0
- package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +2 -1
- package/lib/skill-runtime/__tests__/config.test.js +7 -2
- package/lib/skill-runtime/config.js +38 -6
- package/package.json +1 -1
|
@@ -133,8 +133,9 @@ describe('cc-devflow cli distribution bootstrap', () => {
|
|
|
133
133
|
const doctorResult = runCli(['config', 'doctor', '--cwd', repoRoot], repoRoot);
|
|
134
134
|
|
|
135
135
|
expect(resolveResult.status).toBe(0);
|
|
136
|
-
expect(resolveResult.stdout).toContain('CC-DevFlow
|
|
136
|
+
expect(resolveResult.stdout).toContain('CC-DevFlow 输出策略');
|
|
137
137
|
expect(resolveResult.stdout).toContain('Output language: zh-CN');
|
|
138
|
+
expect(resolveResult.stdout).toContain('标题、正文、占位符、证据说明和 PR/body 草稿必须使用简体中文');
|
|
138
139
|
expect(resolveResult.stdout).toContain('Trace:');
|
|
139
140
|
expect(resolveResult.stdout).toContain('project');
|
|
140
141
|
expect(getResult.status).toBe(0);
|
|
@@ -100,8 +100,13 @@ describe('skill-runtime user config', () => {
|
|
|
100
100
|
'cli:output.document_language:zh-CN'
|
|
101
101
|
]);
|
|
102
102
|
expect(result.policy).toContain('Output language: zh-CN');
|
|
103
|
-
expect(result.policy).toContain('
|
|
104
|
-
expect(result.policy).toContain('
|
|
103
|
+
expect(result.policy).toContain('## CC-DevFlow 输出策略');
|
|
104
|
+
expect(result.policy).toContain('机器强制字段:output.document_language');
|
|
105
|
+
expect(result.policy).toContain('标题、正文、占位符、证据说明和 PR/body 草稿必须使用简体中文');
|
|
106
|
+
expect(result.policy).toContain('必须在元数据或首屏包含 `Output language: zh-CN`');
|
|
107
|
+
expect(result.policy).toContain('Agent 建议偏好:');
|
|
108
|
+
expect(result.policy).not.toContain('Machine-enforced fields');
|
|
109
|
+
expect(result.policy).not.toContain('Durable Markdown artifacts must include');
|
|
105
110
|
});
|
|
106
111
|
|
|
107
112
|
test('rejects unsupported language and unknown top-level fields', () => {
|
|
@@ -24,6 +24,35 @@ const DEFAULT_CONFIG = {
|
|
|
24
24
|
agent_preferences: {}
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
+
const OUTPUT_POLICY_TEXT = {
|
|
28
|
+
en: {
|
|
29
|
+
title: '## CC-DevFlow Output Policy',
|
|
30
|
+
enforced: 'Machine-enforced fields: output.document_language',
|
|
31
|
+
language: (language) => `- Output language: ${language}`,
|
|
32
|
+
markdown: (language) =>
|
|
33
|
+
`- Durable planning, review, and handoff Markdown must write headings, prose, placeholders, evidence summaries, and PR/body drafts in ${language}.`,
|
|
34
|
+
literals:
|
|
35
|
+
'- Keep code, commands, paths, schema keys, API names, dependency names, and Conventional Commit type/scope literals unchanged.',
|
|
36
|
+
metadata: (language) =>
|
|
37
|
+
`- Durable Markdown artifacts must include \`Output language: ${language}\` in their metadata or first screen.`,
|
|
38
|
+
preferences: 'Agent advisory preferences:',
|
|
39
|
+
none: '- none'
|
|
40
|
+
},
|
|
41
|
+
'zh-CN': {
|
|
42
|
+
title: '## CC-DevFlow 输出策略',
|
|
43
|
+
enforced: '机器强制字段:output.document_language',
|
|
44
|
+
language: (language) => `- Output language: ${language}`,
|
|
45
|
+
markdown:
|
|
46
|
+
'- 所有 durable planning、review、handoff Markdown 的标题、正文、占位符、证据说明和 PR/body 草稿必须使用简体中文。',
|
|
47
|
+
literals:
|
|
48
|
+
'- 代码、命令、路径、schema key、API 名、依赖名、Conventional Commit 的 type/scope 等机器字面量保持原文。',
|
|
49
|
+
metadata: (language) =>
|
|
50
|
+
`- Durable Markdown artifact 必须在元数据或首屏包含 \`Output language: ${language}\`。`,
|
|
51
|
+
preferences: 'Agent 建议偏好:',
|
|
52
|
+
none: '- 无'
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
27
56
|
function isPlainObject(value) {
|
|
28
57
|
return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
|
|
29
58
|
}
|
|
@@ -221,21 +250,24 @@ function formatPreferenceLines(value, prefix = '') {
|
|
|
221
250
|
|
|
222
251
|
function renderOutputPolicy(config = DEFAULT_CONFIG) {
|
|
223
252
|
const documentLanguage = config.output?.document_language || DEFAULT_CONFIG.output.document_language;
|
|
253
|
+
const text = OUTPUT_POLICY_TEXT[documentLanguage] || OUTPUT_POLICY_TEXT.en;
|
|
224
254
|
const lines = [
|
|
225
|
-
|
|
255
|
+
text.title,
|
|
226
256
|
'',
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
257
|
+
text.enforced,
|
|
258
|
+
text.language(documentLanguage),
|
|
259
|
+
typeof text.markdown === 'function' ? text.markdown(documentLanguage) : text.markdown,
|
|
260
|
+
text.literals,
|
|
261
|
+
text.metadata(documentLanguage),
|
|
230
262
|
'',
|
|
231
|
-
|
|
263
|
+
text.preferences
|
|
232
264
|
];
|
|
233
265
|
|
|
234
266
|
const preferences = config.agent_preferences || {};
|
|
235
267
|
const preferenceLines = formatPreferenceLines(preferences);
|
|
236
268
|
|
|
237
269
|
if (preferenceLines.length === 0) {
|
|
238
|
-
lines.push(
|
|
270
|
+
lines.push(text.none);
|
|
239
271
|
} else {
|
|
240
272
|
lines.push(...preferenceLines);
|
|
241
273
|
}
|