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.
Files changed (56) hide show
  1. package/.claude/skills/cc-act/CHANGELOG.md +11 -0
  2. package/.claude/skills/cc-act/PLAYBOOK.md +2 -2
  3. package/.claude/skills/cc-act/SKILL.md +12 -2
  4. package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +9 -0
  5. package/.claude/skills/cc-act/references/closure-contract.md +3 -2
  6. package/.claude/skills/cc-act/scripts/evaluate-postmortem-trigger.sh +93 -0
  7. package/.claude/skills/cc-act/scripts/render-pr-brief.sh +138 -32
  8. package/.claude/skills/cc-dev/CHANGELOG.md +5 -0
  9. package/.claude/skills/cc-dev/PLAYBOOK.md +6 -3
  10. package/.claude/skills/cc-dev/SKILL.md +10 -7
  11. package/.claude/skills/cc-dev/scripts/ensure-work-branch.sh +117 -0
  12. package/.claude/skills/cc-dev/scripts/prepare-change-worktree.sh +135 -0
  13. package/.claude/skills/cc-investigate/CHANGELOG.md +15 -0
  14. package/.claude/skills/cc-investigate/SKILL.md +85 -8
  15. package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +56 -0
  16. package/.claude/skills/cc-investigate/references/investigation-contract.md +1 -0
  17. package/.claude/skills/cc-plan/CHANGELOG.md +15 -0
  18. package/.claude/skills/cc-plan/SKILL.md +70 -6
  19. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +41 -0
  20. package/.claude/skills/cc-plan/references/planning-contract.md +1 -0
  21. package/.claude/skills/cc-pr-review/CHANGELOG.md +9 -0
  22. package/.claude/skills/cc-pr-review/PLAYBOOK.md +3 -0
  23. package/.claude/skills/cc-pr-review/SKILL.md +30 -1
  24. package/.claude/skills/cc-review/CHANGELOG.md +10 -0
  25. package/.claude/skills/cc-review/SKILL.md +53 -9
  26. package/.claude/skills/cc-review/references/implementation-review-branch.md +1 -0
  27. package/.claude/skills/cc-review/references/plan-review-branch.md +1 -0
  28. package/.claude/skills/cc-review/references/review-methods.md +30 -0
  29. package/.claude/skills/cc-roadmap/CHANGELOG.md +6 -0
  30. package/.claude/skills/cc-roadmap/SKILL.md +1 -1
  31. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/markdown.js +274 -69
  32. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/schema.js +69 -15
  33. package/CHANGELOG.md +21 -3
  34. package/README.md +1 -1
  35. package/README.zh-CN.md +1 -1
  36. package/docs/examples/example-bindings.json +8 -8
  37. package/docs/examples/full-design-blocked/BACKLOG.md +12 -1
  38. package/docs/examples/full-design-blocked/README.md +1 -1
  39. package/docs/examples/full-design-blocked/ROADMAP.md +2 -2
  40. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/task.md +23 -1
  41. package/docs/examples/full-design-blocked/roadmap.json +7 -2
  42. package/docs/examples/local-handoff/BACKLOG.md +12 -1
  43. package/docs/examples/local-handoff/README.md +1 -1
  44. package/docs/examples/local-handoff/ROADMAP.md +2 -2
  45. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/task.md +23 -1
  46. package/docs/examples/local-handoff/roadmap.json +7 -2
  47. package/docs/examples/pdca-loop/BACKLOG.md +12 -1
  48. package/docs/examples/pdca-loop/README.md +1 -1
  49. package/docs/examples/pdca-loop/ROADMAP.md +2 -2
  50. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/task.md +23 -1
  51. package/docs/examples/pdca-loop/roadmap.json +7 -2
  52. package/docs/guides/project-postmortem.md +8 -0
  53. package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +2 -1
  54. package/lib/skill-runtime/__tests__/config.test.js +7 -2
  55. package/lib/skill-runtime/config.js +38 -6
  56. 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 Output Policy');
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('Machine-enforced fields: output.document_language');
104
- expect(result.policy).toContain('Agent advisory preferences');
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
- '## CC-DevFlow Output Policy',
255
+ text.title,
226
256
  '',
227
- 'Machine-enforced fields: output.document_language',
228
- `- Output language: ${documentLanguage}`,
229
- `- Durable Markdown artifacts must include \`Output language: ${documentLanguage}\` in their metadata or first screen.`,
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
- 'Agent advisory preferences:'
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('- none');
270
+ lines.push(text.none);
239
271
  } else {
240
272
  lines.push(...preferenceLines);
241
273
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cc-devflow",
3
- "version": "4.5.15",
3
+ "version": "4.5.17",
4
4
  "description": "Multi-platform CLI and skill pack for agent coding",
5
5
  "main": "bin/cc-devflow.js",
6
6
  "bin": {