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.
Files changed (105) hide show
  1. package/.claude/skills/cc-act/CHANGELOG.md +33 -0
  2. package/.claude/skills/cc-act/PLAYBOOK.md +18 -4
  3. package/.claude/skills/cc-act/SKILL.md +76 -7
  4. package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_INDEX_TEMPLATE.md +30 -0
  5. package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_PRINCIPLES_TEMPLATE.md +29 -0
  6. package/.claude/skills/cc-act/assets/PROJECT_POSTMORTEM_TEMPLATE.md +103 -0
  7. package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +60 -4
  8. package/.claude/skills/cc-act/references/closure-contract.md +7 -0
  9. package/.claude/skills/cc-act/references/git-commit-guidelines.md +342 -37
  10. package/.claude/skills/cc-act/scripts/cc-act-common.sh +29 -1
  11. package/.claude/skills/cc-act/scripts/detect-ship-target.sh +27 -0
  12. package/.claude/skills/cc-act/scripts/ensure-ship-branch.sh +93 -0
  13. package/.claude/skills/cc-act/scripts/generate-status-report.sh +6 -0
  14. package/.claude/skills/cc-act/scripts/render-pr-brief.sh +170 -0
  15. package/.claude/skills/cc-act/scripts/sync-act-docs.sh +15 -1
  16. package/.claude/skills/cc-dev/CHANGELOG.md +5 -0
  17. package/.claude/skills/cc-dev/PLAYBOOK.md +63 -0
  18. package/.claude/skills/cc-dev/SKILL.md +168 -0
  19. package/.claude/skills/cc-do/CHANGELOG.md +17 -0
  20. package/.claude/skills/cc-do/SKILL.md +41 -13
  21. package/.claude/skills/cc-do/scripts/build-task-context.sh +9 -5
  22. package/.claude/skills/cc-do/scripts/mark-task-complete.sh +0 -6
  23. package/.claude/skills/cc-investigate/CHANGELOG.md +17 -0
  24. package/.claude/skills/cc-investigate/PLAYBOOK.md +15 -0
  25. package/.claude/skills/cc-investigate/SKILL.md +46 -1
  26. package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +47 -0
  27. package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +21 -2
  28. package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +28 -58
  29. package/.claude/skills/cc-investigate/references/investigation-contract.md +14 -0
  30. package/.claude/skills/cc-next/CHANGELOG.md +11 -0
  31. package/.claude/skills/cc-next/PLAYBOOK.md +74 -0
  32. package/.claude/skills/cc-next/SKILL.md +196 -0
  33. package/.claude/skills/cc-plan/CHANGELOG.md +25 -0
  34. package/.claude/skills/cc-plan/PLAYBOOK.md +25 -20
  35. package/.claude/skills/cc-plan/SKILL.md +116 -13
  36. package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +67 -0
  37. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +85 -0
  38. package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +57 -182
  39. package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +46 -0
  40. package/.claude/skills/cc-plan/references/planning-contract.md +51 -26
  41. package/.claude/skills/cc-pr-land/CHANGELOG.md +5 -0
  42. package/.claude/skills/cc-pr-land/PLAYBOOK.md +45 -0
  43. package/.claude/skills/cc-pr-land/SKILL.md +157 -0
  44. package/.claude/skills/cc-pr-review/CHANGELOG.md +5 -0
  45. package/.claude/skills/cc-pr-review/PLAYBOOK.md +46 -0
  46. package/.claude/skills/cc-pr-review/SKILL.md +142 -0
  47. package/.claude/skills/cc-review/CHANGELOG.md +21 -0
  48. package/.claude/skills/cc-review/PLAYBOOK.md +64 -10
  49. package/.claude/skills/cc-review/SKILL.md +185 -18
  50. package/.claude/skills/cc-review/references/e2e-and-plugin-verification.md +4 -0
  51. package/.claude/skills/cc-review/references/implementation-review-branch.md +37 -0
  52. package/.claude/skills/cc-review/references/plan-review-branch.md +36 -1
  53. package/.claude/skills/cc-review/references/review-methods.md +98 -3
  54. package/.claude/skills/cc-review/scripts/collect-review-context.sh +80 -0
  55. package/.claude/skills/cc-roadmap/CHANGELOG.md +6 -0
  56. package/.claude/skills/cc-roadmap/PLAYBOOK.md +30 -0
  57. package/.claude/skills/cc-roadmap/SKILL.md +45 -8
  58. package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +8 -0
  59. package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +22 -0
  60. package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +32 -1
  61. package/.claude/skills/cc-roadmap/references/roadmap-dialogue.md +14 -14
  62. package/.claude/skills/cc-simplify/CHANGELOG.md +6 -0
  63. package/.claude/skills/cc-simplify/SKILL.md +19 -8
  64. package/CHANGELOG.md +20 -1
  65. package/README.md +60 -9
  66. package/README.zh-CN.md +60 -9
  67. package/config/distributable-skills.json +8 -0
  68. package/docs/assets/cc-devflow-pr-harness-en.svg +153 -0
  69. package/docs/assets/cc-devflow-pr-harness-zh.svg +152 -0
  70. package/docs/assets/wechat-group-qr.jpg +0 -0
  71. package/docs/examples/example-bindings.json +11 -7
  72. package/docs/examples/full-design-blocked/BACKLOG.md +1 -1
  73. package/docs/examples/full-design-blocked/README.md +1 -1
  74. package/docs/examples/full-design-blocked/ROADMAP.md +1 -1
  75. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +1 -1
  76. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +102 -82
  77. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +45 -1
  78. package/docs/examples/full-design-blocked/roadmap.json +1 -1
  79. package/docs/examples/local-handoff/BACKLOG.md +1 -1
  80. package/docs/examples/local-handoff/README.md +1 -1
  81. package/docs/examples/local-handoff/ROADMAP.md +1 -1
  82. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +1 -1
  83. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +70 -61
  84. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +35 -1
  85. package/docs/examples/local-handoff/roadmap.json +1 -1
  86. package/docs/examples/pdca-loop/BACKLOG.md +1 -1
  87. package/docs/examples/pdca-loop/README.md +1 -1
  88. package/docs/examples/pdca-loop/ROADMAP.md +1 -1
  89. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/pr-brief.md +64 -0
  90. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +1 -1
  91. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +71 -81
  92. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +35 -1
  93. package/docs/examples/pdca-loop/roadmap.json +1 -1
  94. package/docs/examples/scripts/check-example-bindings.sh +24 -2
  95. package/docs/get-shit-done-strategy-audit.md +4 -4
  96. package/docs/guides/artifact-contract.md +44 -0
  97. package/docs/guides/getting-started.md +1 -1
  98. package/docs/guides/getting-started.zh-CN.md +1 -1
  99. package/docs/guides/project-postmortem.md +78 -0
  100. package/lib/skill-runtime/__tests__/planner.tdd.test.js +2 -2
  101. package/lib/skill-runtime/__tests__/schemas.test.js +33 -2
  102. package/lib/skill-runtime/planner.js +1 -2
  103. package/lib/skill-runtime/query.js +1 -1
  104. package/lib/skill-runtime/schemas.js +5 -3
  105. package/package.json +6 -1
@@ -5,7 +5,7 @@
5
5
  },
6
6
  "meta": {
7
7
  "roadmapVersion": "roadmap.v2",
8
- "skillVersion": "5.2.0",
8
+ "skillVersion": "5.3.0",
9
9
  "status": "active",
10
10
  "lastUpdated": "2026-04-19",
11
11
  "currentFocusStage": "Stage 2"
@@ -5,7 +5,7 @@
5
5
  ## Backlog Meta
6
6
 
7
7
  - Roadmap version: `roadmap.v1`
8
- - Skill version: `5.2.0`
8
+ - Skill version: `5.3.0`
9
9
  - Last synced: `2026-04-19`
10
10
  - Current focus stage: `Stage 1`
11
11
  - Roadmap state source: `roadmap.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@5.2.0`, `cc-plan@3.8.1`, `cc-do@1.6.2`, `cc-check@1.10.1`, `cc-act@1.8.2`
7
+ - Bound skills: `cc-roadmap@5.3.0`, `cc-plan@3.8.5`, `cc-do@1.6.5`, `cc-check@1.10.1`, `cc-act@1.8.7`
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: `5.2.0`
6
+ - Skill version: `5.3.0`
7
7
  - Status: `active`
8
8
  - Last updated: `2026-04-15`
9
9
  - Owner / decider: `product-owner`
@@ -1,5 +1,9 @@
1
1
  # PR Brief
2
2
 
3
+ ## Document Meta
4
+
5
+ - Output language: en
6
+
3
7
  ## Decision
4
8
 
5
9
  - Recommended mode: `create-pr`
@@ -39,6 +43,66 @@
39
43
  - Documentation release: README and CLAUDE unchanged for this scoped example
40
44
  - PR body accuracy: regenerate the PR body from this brief, current report-card, and current diff
41
45
 
46
+ ## Pull Request Body Contract
47
+
48
+ - Language source: `Output language: en`
49
+ - PR body language: English
50
+ - Title rule: use English after the Conventional Commits `type(scope)` prefix; keep identifiers, paths, commands, and issue keys unchanged.
51
+ - Body source: current `pr-brief.md`, current diff, current `review/report-card.json`, doc sync output, and roadmap/backlog writeback.
52
+ - Required sections: summary, problem, changes, validation, review/gate evidence, risk/rollback, docs/writeback, and follow-ups.
53
+ - Completeness gate: no empty headings, no stale inherited PR body, no generic "tests passed" without commands or evidence, and no `<placeholder>` text before `gh pr create`.
54
+
55
+ ## Pull Request Body Draft
56
+
57
+ ```markdown
58
+ ## Summary
59
+
60
+ - removes a small but visible sharing friction in the beta flow
61
+ - keeps the patch inside the approved `tiny-design` boundary
62
+ - ships with fresh test, lint, and review proof
63
+
64
+ ## Problem
65
+
66
+ - Requirement: `RM-001` / `REQ-001`
67
+ - User-visible gap: users can see the invite URL but cannot copy it with one click from the share dialog.
68
+
69
+ ## Changes
70
+
71
+ - adds a `Copy invite link` action beside the existing invite URL
72
+ - reuses the current invite link source of truth
73
+ - adds copied-state confirmation without redesigning the dialog
74
+
75
+ ## Validation
76
+
77
+ - `report-card.json` verdict: `pass`
78
+ - `npm test -- src/features/share/ShareDialog.test.tsx`
79
+ - `npm run lint -- src/features/share/ShareDialog.tsx`
80
+
81
+ ## Review / Gate Evidence
82
+
83
+ - Reviewed base SHA: `example-base`
84
+ - Reviewed head SHA: `example-head`
85
+ - Review packet: `planning/tasks.md#T001-T003`; `planning/design.md`
86
+ - Finding triage: no findings
87
+ - QA / claim evidence: `qa=pass`, `tests-pass=pass`, `requirements-met=pass`
88
+ - Readiness: review freshness=`fresh`; QA coverage has no gaps; browser QA intentionally skipped for this fixture.
89
+
90
+ ## Risk And Rollback
91
+
92
+ - Main risk: copied-state feedback may still be too subtle for some users.
93
+ - Rollback boundary: revert the share-dialog change and targeted test in one commit; no data migration or external side effect is involved.
94
+
95
+ ## Docs And Writeback
96
+
97
+ - `CLAUDE.md`: unchanged
98
+ - `README.md`: unchanged
99
+ - Roadmap progress: `RM-001` is ready for PR review after this create-pr handoff.
100
+
101
+ ## Follow-ups
102
+
103
+ - If users still miss the feedback, lift `RM-002` into the next requirement.
104
+ ```
105
+
42
106
  ## Summary
43
107
 
44
108
  - removes a small but visible sharing friction in the beta flow
@@ -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.8.1`
7
+ - CC-Plan skill version: `3.8.5`
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
@@ -3,63 +3,33 @@
3
3
  "goal": "Add a one-click copy action to the existing share dialog without changing backend contracts.",
4
4
  "createdAt": "2026-04-15T10:00:00.000Z",
5
5
  "updatedAt": "2026-04-15T11:10:00.000Z",
6
- "status": "verified",
7
6
  "requirementId": "REQ-001",
8
7
  "requirementVersion": "REQ-001.v1",
9
- "sourceRoadmap": {
10
- "itemId": "RM-001",
11
- "roadmapVersion": "roadmap.v1",
12
- "roadmapSkillVersion": "5.2.0",
13
- "sourceStage": "Stage 1",
14
- "successSignal": "Users can copy the invite link with one click",
15
- "killSignal": "The patch requires backend or permission changes",
16
- "dependencies": [
17
- "Existing share dialog stays intact"
18
- ],
19
- "nonGoals": [
20
- "No invite role redesign",
21
- "No share analytics"
22
- ]
23
- },
24
8
  "planningMeta": {
25
- "reqPlanSkillVersion": "3.8.1",
9
+ "reqPlanSkillVersion": "3.8.5",
26
10
  "designVersion": "design.v1",
27
11
  "approvedAt": "2026-04-15T10:05:00.000Z",
28
- "approvedBy": "user",
29
12
  "basedOnOption": "Tiny design card",
30
- "requirementBrief": {
31
- "problemStatement": "Users can see the invite URL, but copying it still requires manual selection.",
32
- "solutionSummary": "Add a one-click copy action with lightweight confirmation inside the existing share dialog.",
33
- "actors": [
34
- "workspace member sharing an invite"
35
- ],
36
- "userStories": [
37
- {
38
- "id": "US-001",
39
- "actor": "workspace member",
40
- "want": "copy the invite link with one click",
41
- "benefit": "share it without manually selecting text",
42
- "acceptance": [
43
- "Dialog behavior test proves the current invite URL is copied"
44
- ]
45
- }
46
- ],
47
- "edgeOrRecoveryStories": [],
48
- "implementationDecisions": [
49
- "Reuse the existing invite URL source and dialog props"
50
- ],
51
- "testingDecisions": [
52
- "Test through the share dialog behavior, not an internal helper"
53
- ],
54
- "outOfScope": [
55
- "invite generation",
56
- "role controls",
57
- "analytics",
58
- "clipboard fallback redesign"
59
- ],
60
- "furtherNotes": [
61
- "Richer copied-state feedback is a separate UX requirement"
62
- ]
13
+ "aiLeverageDecisionLens": {
14
+ "realUserOrOperator": "workspace member sharing an invite",
15
+ "statusQuoWorkaround": "manual selection and copy of the visible invite URL",
16
+ "humanTeamEffortForFullScope": "about half a day for one engineer including test and review",
17
+ "ccAgentEffortForFullScope": "about 20 minutes for a targeted UI patch plus test update",
18
+ "aiCompressionRatio": "roughly 10x for this bounded UI slice",
19
+ "completeLakeBoundary": "copy action, current invite URL source, copied-state feedback, and dialog behavior test",
20
+ "oceanBoundary": "invite generation, permissions, analytics, or clipboard fallback redesign",
21
+ "scopeRecommendation": "boil-lake",
22
+ "costModel": {
23
+ "agentTime": "low",
24
+ "humanReviewTime": "low",
25
+ "verificationCost": "targeted dialog test",
26
+ "maintenanceCost": "low while scoped to the dialog",
27
+ "failureCost": "sharing friction remains",
28
+ "reversibility": "reversible UI patch"
29
+ },
30
+ "verdict": "boil-lake",
31
+ "missingEvidenceOrPivotReason": "",
32
+ "impactOnApprovedDirection": "cover the full same-dialog copy lake instead of only a happy-path button render"
63
33
  },
64
34
  "externalBestPractice": {
65
35
  "needed": false,
@@ -105,31 +75,9 @@
105
75
  "impact": "cc-do keeps implementation inside the share dialog and avoids backend or permission work",
106
76
  "status": "answered"
107
77
  }
108
- ],
109
- "aiLeverageDecisionLens": {
110
- "realUserOrOperator": "workspace member sharing an invite",
111
- "statusQuoWorkaround": "manual selection and copy of the visible invite URL",
112
- "humanTeamEffortForFullScope": "about half a day for one engineer including test and review",
113
- "ccAgentEffortForFullScope": "about 20 minutes for a targeted UI patch plus test update",
114
- "aiCompressionRatio": "roughly 10x for this bounded UI slice",
115
- "completeLakeBoundary": "copy action, current invite URL source, copied-state feedback, and dialog behavior test",
116
- "oceanBoundary": "invite generation, permissions, analytics, or clipboard fallback redesign",
117
- "scopeRecommendation": "boil-lake",
118
- "costModel": {
119
- "agentTime": "low",
120
- "humanReviewTime": "low",
121
- "verificationCost": "targeted dialog test",
122
- "maintenanceCost": "low while scoped to the dialog",
123
- "failureCost": "sharing friction remains",
124
- "reversibility": "reversible UI patch"
125
- },
126
- "verdict": "boil-lake",
127
- "missingEvidenceOrPivotReason": "",
128
- "impactOnApprovedDirection": "cover the full same-dialog copy lake instead of only a happy-path button render"
129
- }
78
+ ]
130
79
  },
131
80
  "currentTaskId": null,
132
- "activePhase": null,
133
81
  "tasks": [
134
82
  {
135
83
  "id": "T001",
@@ -179,7 +127,22 @@
179
127
  },
180
128
  "status": "passed",
181
129
  "attempts": 1,
182
- "maxRetries": 1
130
+ "maxRetries": 1,
131
+ "tddPhase": "red",
132
+ "verticalSlice": "Slice 1",
133
+ "testSeam": {
134
+ "entry": "share dialog UI behavior",
135
+ "behaviorAsserted": "The missing copy action is reproduced as a failing test",
136
+ "specStyleTestName": "The missing copy action is reproduced as a failing test",
137
+ "oneLogicalBehavior": true,
138
+ "publicVerificationPath": "Run the share dialog test and observe the copy action through the rendered dialog",
139
+ "implementationDetailRisk": "low"
140
+ },
141
+ "feedbackLoop": {
142
+ "type": "automated-test",
143
+ "determinism": "deterministic",
144
+ "expectedFailure": "Fails before the behavior exists"
145
+ }
183
146
  },
184
147
  {
185
148
  "id": "T002",
@@ -231,7 +194,22 @@
231
194
  },
232
195
  "status": "passed",
233
196
  "attempts": 1,
234
- "maxRetries": 1
197
+ "maxRetries": 1,
198
+ "tddPhase": "green",
199
+ "verticalSlice": "Slice 2",
200
+ "testSeam": {
201
+ "entry": "share dialog UI behavior",
202
+ "behaviorAsserted": "The dialog exposes a copy button and confirms the copied state",
203
+ "specStyleTestName": "The dialog exposes a copy button and confirms the copied state",
204
+ "oneLogicalBehavior": true,
205
+ "publicVerificationPath": "Run the share dialog test and observe the copy action through the rendered dialog",
206
+ "implementationDetailRisk": "low"
207
+ },
208
+ "feedbackLoop": {
209
+ "type": "automated-test",
210
+ "determinism": "deterministic",
211
+ "expectedFailure": ""
212
+ }
235
213
  },
236
214
  {
237
215
  "id": "T003",
@@ -287,15 +265,27 @@
287
265
  },
288
266
  "status": "passed",
289
267
  "attempts": 1,
290
- "maxRetries": 1
268
+ "maxRetries": 1,
269
+ "tddPhase": "evidence",
270
+ "verticalSlice": "Slice 3",
271
+ "testSeam": {
272
+ "entry": "share dialog UI behavior",
273
+ "behaviorAsserted": "Fresh verification evidence is ready for cc-check",
274
+ "specStyleTestName": "Fresh verification evidence is ready for cc-check",
275
+ "oneLogicalBehavior": true,
276
+ "publicVerificationPath": "Run the share dialog test and observe the copy action through the rendered dialog",
277
+ "implementationDetailRisk": "low"
278
+ },
279
+ "feedbackLoop": {
280
+ "type": "automated-test",
281
+ "determinism": "deterministic",
282
+ "expectedFailure": ""
283
+ }
291
284
  }
292
285
  ],
293
286
  "metadata": {
294
287
  "source": "tasks.md",
295
288
  "generatedBy": "docs-example",
296
289
  "planVersion": 1
297
- },
298
- "deferredQuestions": [
299
- "If users still miss the copied-state confirmation, open RM-002 for richer feedback."
300
- ]
290
+ }
301
291
  }
@@ -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.8.1`
7
+ - CC-Plan skill version: `3.8.5`
8
8
  - Source roadmap item: `RM-001`
9
9
  - Source roadmap version: `roadmap.v1`
10
10
 
@@ -39,34 +39,68 @@
39
39
 
40
40
  > 顶部 handoff 只保留执行者必须知道的现实,不重复讲背景故事。
41
41
 
42
+ ## Execution Protocol
43
+
44
+ ClaudeCode / Codex 执行本计划时,必须把本文件当成任务模板合同,而不是普通 TODO 列表。
45
+
46
+ - Template source: `assets/TASKS_TEMPLATE.md`
47
+ - Task selection: read `planning/task-manifest.json.currentTaskId`; if empty, run the ready-task selector before choosing work.
48
+ - Task block rule: read the full task block before coding; title-only execution is invalid.
49
+ - Completion rule: after verification and review gates pass, run the completion script; do not manually edit checkbox, status, or `currentTaskId`.
50
+ - Completion failure: if the script fails, fix the missing checkpoint / review / dependency evidence and rerun it. Do not bypass it by editing JSON or Markdown.
51
+
52
+ ```bash
53
+ SCRIPT_ROOT=".claude/skills/cc-do/scripts"
54
+ if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then
55
+ SCRIPT_ROOT=".codex/skills/cc-do/scripts"
56
+ fi
57
+ bash "$SCRIPT_ROOT/select-ready-tasks.sh" --manifest docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json
58
+ bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json --tasks docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md --task <task-id>
59
+ ```
60
+
42
61
  ## Phase 1: Foundation
43
62
 
44
63
  - [x] T001 [TEST] Add a failing dialog test for the missing copy action (dependsOn:none) `src/features/share/ShareDialog.test.tsx`
45
64
  Goal: 证明当前 share dialog 还不能一键复制 invite link。
65
+ TDD phase: red
46
66
  Files: `src/features/share/ShareDialog.test.tsx`
47
67
  Read first: `design.md`, `src/features/share/ShareDialog.tsx`
48
68
  Verification: `npm test -- src/features/share/ShareDialog.test.tsx`
49
69
  Evidence: failing output that shows the missing button / action
70
+ Completion: after verification evidence and required checkpoint/review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json --tasks docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md --task T001`; do not hand-edit status.
71
+ Test seam: share dialog UI behavior
72
+ Public verification path: Run the share dialog test and observe the copy action through the rendered dialog
73
+ Allowed mocks: clipboard boundary
50
74
  Ready when: 没有上游依赖,且现有 dialog test 已可运行
51
75
 
52
76
  - [x] T002 [IMPL] Add the copy button and copied-state confirmation (dependsOn:T001) `src/features/share/ShareDialog.tsx`
53
77
  Goal: 用最小实现让 T001 转绿,并保持当前 share contract 不变。
78
+ TDD phase: green
54
79
  Files: `src/features/share/ShareDialog.tsx`
55
80
  Read first: `design.md`, `src/features/share/ShareDialog.test.tsx`
56
81
  Verification: `npm test -- src/features/share/ShareDialog.test.tsx`
57
82
  Evidence: passing output + checkpoint + review notes
83
+ Completion: after verification evidence and required checkpoint/review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json --tasks docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md --task T002`; do not hand-edit status.
84
+ Test seam: share dialog UI behavior
85
+ Public verification path: Run the share dialog test and observe the copy action through the rendered dialog
86
+ Allowed mocks: clipboard boundary
58
87
  Ready when: T001 已经见红,且当前 touched files 没有外部依赖阻塞
59
88
 
60
89
  ## Phase 2: Verify
61
90
 
62
91
  - [x] T003 Run targeted checks and collect fresh evidence (dependsOn:T002) `share dialog quality gates`
63
92
  Goal: 为 `cc-check` 准备本次实现的真实验证证据。
93
+ TDD phase: evidence
64
94
  Files: `src/features/share/ShareDialog.tsx`, `src/features/share/ShareDialog.test.tsx`
65
95
  Read first: `tasks.md`, `task-manifest.json`
66
96
  Verification:
67
97
  - `npm test -- src/features/share/ShareDialog.test.tsx`
68
98
  - `npm run lint -- src/features/share/ShareDialog.tsx`
69
99
  Evidence: passing test output + clean lint output
100
+ Completion: after verification evidence and required checkpoint/review records exist, run `SCRIPT_ROOT=".claude/skills/cc-do/scripts"; if [[ ! -d "$SCRIPT_ROOT" && -d ".codex/skills/cc-do/scripts" ]]; then SCRIPT_ROOT=".codex/skills/cc-do/scripts"; fi; bash "$SCRIPT_ROOT/mark-task-complete.sh" --manifest docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json --tasks docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md --task T003`; do not hand-edit status.
101
+ Test seam: share dialog UI behavior
102
+ Public verification path: Run the share dialog test and observe the copy action through the rendered dialog
103
+ Allowed mocks: clipboard boundary
70
104
  Ready when: T002 已完成,且 review gate 已可补齐
71
105
 
72
106
  > `[P]` 只表示“依赖满足后有资格并行”,不表示可以无脑同时开发。
@@ -5,7 +5,7 @@
5
5
  },
6
6
  "meta": {
7
7
  "roadmapVersion": "roadmap.v1",
8
- "skillVersion": "5.2.0",
8
+ "skillVersion": "5.3.0",
9
9
  "status": "active",
10
10
  "lastUpdated": "2026-04-19",
11
11
  "currentFocusStage": "Stage 1"
@@ -35,19 +35,27 @@ assert_contains() {
35
35
  }
36
36
 
37
37
  ROADMAP_VERSION="$(skill_version cc-roadmap)"
38
+ NEXT_VERSION="$(skill_version cc-next)"
39
+ DEV_VERSION="$(skill_version cc-dev)"
38
40
  REQ_PLAN_VERSION="$(skill_version cc-plan)"
39
41
  INVESTIGATE_VERSION="$(skill_version cc-investigate)"
40
42
  REQ_DO_VERSION="$(skill_version cc-do)"
41
43
  REQ_REVIEW_VERSION="$(skill_version cc-review)"
44
+ PR_REVIEW_VERSION="$(skill_version cc-pr-review)"
45
+ PR_LAND_VERSION="$(skill_version cc-pr-land)"
42
46
  REQ_CHECK_VERSION="$(skill_version cc-check)"
43
47
  REQ_ACT_VERSION="$(skill_version cc-act)"
44
48
 
45
49
  for pair in \
46
50
  "cc-roadmap:$ROADMAP_VERSION" \
51
+ "cc-next:$NEXT_VERSION" \
52
+ "cc-dev:$DEV_VERSION" \
47
53
  "cc-plan:$REQ_PLAN_VERSION" \
48
54
  "cc-investigate:$INVESTIGATE_VERSION" \
49
55
  "cc-do:$REQ_DO_VERSION" \
50
56
  "cc-review:$REQ_REVIEW_VERSION" \
57
+ "cc-pr-review:$PR_REVIEW_VERSION" \
58
+ "cc-pr-land:$PR_LAND_VERSION" \
51
59
  "cc-check:$REQ_CHECK_VERSION" \
52
60
  "cc-act:$REQ_ACT_VERSION"
53
61
  do
@@ -92,10 +100,24 @@ while IFS= read -r encoded; do
92
100
  assert_contains "$planning_dir/tasks.md" "- CC-Plan skill version: \`$REQ_PLAN_VERSION\`"
93
101
 
94
102
  jq -er --arg roadmap "$ROADMAP_VERSION" --arg reqplan "$REQ_PLAN_VERSION" '
95
- (.sourceRoadmap.roadmapSkillVersion // $roadmap) == $roadmap and
96
- (.planningMeta.reqPlanSkillVersion // $reqplan) == $reqplan
103
+ (.planningMeta.reqPlanSkillVersion // $reqplan) == $reqplan and
104
+ (.status? == null) and
105
+ (.activePhase? == null) and
106
+ (.sourceRoadmap? == null) and
107
+ (.spec? == null) and
108
+ (.executionProtocol? == null) and
109
+ (.planningMeta.requirementBrief? == null) and
110
+ (.planningMeta.ambiguityGate? == null) and
111
+ (.planningMeta.reviewLoop? == null) and
112
+ all(.tasks[]; (.completion? == null) and (.tddPhase | type == "string") and (.testSeam.publicVerificationPath | type == "string"))
97
113
  ' "$planning_dir/task-manifest.json" >/dev/null
98
114
 
115
+ assert_contains "$planning_dir/tasks.md" "## Execution Protocol"
116
+ assert_contains "$planning_dir/tasks.md" "mark-task-complete.sh"
117
+ assert_contains "$planning_dir/tasks.md" "TDD phase:"
118
+ assert_contains "$planning_dir/tasks.md" "Completion:"
119
+ assert_contains "$planning_dir/tasks.md" "Public verification path:"
120
+
99
121
  assert_contains "$readme" "## Example Meta"
100
122
  assert_contains "$readme" "\`cc-roadmap@$ROADMAP_VERSION\`"
101
123
  assert_contains "$readme" "\`cc-plan@$REQ_PLAN_VERSION\`"
@@ -127,9 +127,9 @@ Codebase Map 七件套只作为按需缓存:
127
127
  | --- | --- | --- | --- |
128
128
  | WHAT/WHY ambiguity score | `task-manifest.json.planningMeta` + `planning/design.md` | score above threshold blocks task manifest approval | unit fixture: ambiguous input blocks; clear input passes |
129
129
  | Assumptions preview | `planning/design.md` decision log | user-visible assumptions before approval | fixture: hidden assumption fails review |
130
- | Bounded review loop | `task-manifest.json.planningMeta.reviewLoop` | max attempts and stall detection reroute to `cc-roadmap` or user question | hostile fixture: repeated issue count blocks |
131
- | External doc conflict buckets | `task-manifest.json.languageAndDecisions` | imported docs classified as auto-resolved, competing, unresolved | fixture: conflicting ADR/PRD creates blocker |
132
- | Trust boundary | `task-manifest.json.sourceEvidence[]` | external text is evidence/source only, never instruction | hostile fixture: prompt injection remains evidence-only |
130
+ | Bounded review loop | `planning/design.md` | max attempts and stall detection reroute to `cc-roadmap` or user question | hostile fixture: repeated issue count blocks |
131
+ | External doc conflict buckets | `planning/design.md` | imported docs classified as auto-resolved, competing, unresolved | fixture: conflicting ADR/PRD creates blocker |
132
+ | Trust boundary | `planning/design.md` | external text is evidence/source only, never instruction | hostile fixture: prompt injection remains evidence-only |
133
133
 
134
134
  `cc-plan` must keep design decisions readable in Markdown and machine truth in JSON.
135
135
  No separate GSD-style `.planning/` tree.
@@ -209,7 +209,7 @@ default planning path.
209
209
  | Data | Owner | Human view | Machine truth |
210
210
  | --- | --- | --- | --- |
211
211
  | Ambiguity and assumptions | `cc-plan` | `planning/design.md` | `task-manifest.json.planningMeta` |
212
- | Imported doc trust classification | `cc-plan` | `planning/design.md` | `task-manifest.json.sourceEvidence[]` |
212
+ | Imported doc trust classification | `cc-plan` | `planning/design.md` | `planning/design.md` |
213
213
  | Task graph and waves | `cc-plan` / `cc-do` | `planning/tasks.md` | `task-manifest.json.tasks[]` |
214
214
  | Quick lane state | `cc-do` | checkpoint summary | `task-manifest.json.metadata`, `checkpoint.json` |
215
215
  | Debug hypotheses and probes | `cc-investigate` | `planning/analysis.md` | optional `task-manifest.json.investigation` |
@@ -0,0 +1,44 @@
1
+ # Artifact Contract
2
+
3
+ cc-devflow artifacts follow two rules: progressive disclosure and one state owner.
4
+
5
+ ## Progressive Disclosure
6
+
7
+ Every skill output should have a default path and deeper layers.
8
+
9
+ - Default layer: the next actor can see the current state, next action, and proof source quickly.
10
+ - Conditional layer: open only when scope, dependency, review, or conflict questions arise.
11
+ - Deep layer: full evidence, reasoning, or historical review, opened only for audit or recovery.
12
+
13
+ If a field has no clear opener and no downstream consumer, remove it.
14
+
15
+ ## State Owners
16
+
17
+ | State | Owner artifact | Projection / derived readers |
18
+ | --- | --- | --- |
19
+ | Roadmap item status and progress | `devflow/roadmap.json` | `devflow/ROADMAP.md`, `devflow/BACKLOG.md`, handoff summaries |
20
+ | Capability/spec sync state | `devflow/changes/<change-key>/change-meta.json` | `planning/tasks.md`, `review/report-card.json`, handoff summaries |
21
+ | Execution task status | `planning/task-manifest.json.tasks[].status` | `planning/tasks.md` checkboxes, recovery summaries |
22
+ | Ready task / phase | derived from `tasks[].status`, `tasks[].phase`, and `tasks[].dependsOn` | `currentTaskId` cache, ready-task selector output |
23
+ | Runtime checkpoint state | `execution/tasks/<task-id>/checkpoint.json` | `events.jsonl`, recovery summaries |
24
+ | Review verdict | `review/report-card.json.verdict` | PR brief, release note, act gate |
25
+ | PR / remote queue truth | live GitHub API / `gh` output | local review notes and handoff summaries |
26
+ | Project postmortem facts and principles | `devflow/postmortems/` | planning recall, investigation hypotheses, task guardrails |
27
+
28
+ ## Duplication Rules
29
+
30
+ - Machine artifacts may reference another owner by id or path, but must not copy its status lifecycle.
31
+ - Markdown projections must state their source instead of becoming editable truth.
32
+ - Derived fields must be described as derived/cache and must be recomputable.
33
+ - A skill must not create a new status field unless it also names the owner, lifecycle, projection readers, and validation gate.
34
+ - Task manifests must not duplicate PRD narrative, review-loop prose, source-trust details, completion shell commands, roadmap progress, or spec sync status.
35
+ - Project postmortems must cite stronger owner artifacts and Git evidence; they do not own roadmap progress, task status, review verdicts, or spec sync state.
36
+
37
+ ## Required Check
38
+
39
+ Before changing any skill output, answer:
40
+
41
+ 1. Who owns this state?
42
+ 2. Is this field consumed directly, or is it a projection?
43
+ 3. Can it be recomputed from a stronger source?
44
+ 4. What validation fails if this state diverges?
@@ -89,7 +89,7 @@ Typical outputs:
89
89
  - `cc-spec-init` writes `devflow/specs/INDEX.md`, capability specs, and `change-meta.json`
90
90
  - `cc-plan` writes `planning/design.md`, `planning/tasks.md`, `task-manifest.json`, and `change-meta.json`
91
91
  - `cc-investigate` writes `planning/analysis.md`, `planning/tasks.md`, `task-manifest.json`, and `change-meta.json`
92
- - `cc-review` writes `cc-review-report.md` and optional structured findings for deep plan or implementation review
92
+ - `cc-review` writes `cc-review-plan.md`, `cc-review-ledger.jsonl`, `cc-review-report.md`, optional `cc-review-agent-results.jsonl`, and optional structured findings for deep plan or implementation review
93
93
  - `cc-check` writes `report-card.json`
94
94
  - `cc-act` writes exactly one final handoff file: `handoff/pr-brief.md`, `handoff/resume-index.md`, or `handoff/release-note.md`
95
95
 
@@ -89,7 +89,7 @@ find .codex/skills -mindepth 2 -maxdepth 2 -name SKILL.md | sort
89
89
  - `cc-spec-init` 产出 `devflow/specs/INDEX.md`、capability spec 和 `change-meta.json`
90
90
  - `cc-plan` 产出 `planning/design.md`、`planning/tasks.md`、`task-manifest.json` 和 `change-meta.json`
91
91
  - `cc-investigate` 产出 `planning/analysis.md`、`planning/tasks.md`、`task-manifest.json` 和 `change-meta.json`
92
- - `cc-review` 产出 `cc-review-report.md`,以及可选的结构化深度 Review findings
92
+ - `cc-review` 产出 `cc-review-plan.md`、`cc-review-ledger.jsonl`、`cc-review-report.md`、可选 `cc-review-agent-results.jsonl`,以及可选的结构化深度 Review findings
93
93
  - `cc-check` 产出 `report-card.json`
94
94
  - `cc-act` 只产出一个最终 handoff 文件:`handoff/pr-brief.md`、`handoff/resume-index.md` 或 `handoff/release-note.md`
95
95
 
@@ -0,0 +1,78 @@
1
+ # Project Postmortem Contract
2
+
3
+ cc-devflow treats project postmortems as a durable AI memory surface. They are not
4
+ chat summaries. They are repo-owned evidence that future agents can search before
5
+ planning, investigating, or executing work.
6
+
7
+ ## Storage Layout
8
+
9
+ Project-level postmortems live under `devflow/postmortems/`:
10
+
11
+ | Path | Owner | Purpose |
12
+ | --- | --- | --- |
13
+ | `INDEX.md` | `cc-act` | Progressive entry point, latest incidents, tags, and search hints |
14
+ | `principles.md` | `cc-act` | Generalized lessons about recurring model, process, and engineering mistakes |
15
+ | `incidents/<date>-<change-key>.md` | `cc-act` | Immutable-ish factual record for one incident, bug, or repeated AI failure |
16
+
17
+ `cc-act` owns writes because it has verified closeout, Git state, review state, and
18
+ ship facts. Earlier skills only read and project the relevant reminders into their
19
+ own artifacts.
20
+
21
+ ## Progressive Disclosure
22
+
23
+ - Default layer: `INDEX.md` gives tags, one-line lessons, severity, affected
24
+ surfaces, and links to deeper incident files.
25
+ - Principle layer: `principles.md` gives reusable rules such as model failure
26
+ modes, domain-specific judgment traps, and required countermeasures.
27
+ - Incident layer: `incidents/*.md` gives the detailed facts, Git evidence,
28
+ timeline, root cause, detection gap, repair, follow-ups, and search terms.
29
+
30
+ Agents should start with keyword search over the default and principle layers, then
31
+ open incident files only when the tags or failure class match the current task.
32
+
33
+ ## Required Incident Evidence
34
+
35
+ Every incident file should include:
36
+
37
+ - Symptom and impact.
38
+ - Trigger and timeline.
39
+ - Confirmed root cause and rejected near-causes.
40
+ - Why the failure escaped planning, investigation, execution, review, or ship.
41
+ - Git evidence: branch, base, head SHA, PR if any, relevant commits, review range,
42
+ and dirty-tree notes when they matter.
43
+ - Verification evidence: commands, exit status, key output, and artifact paths.
44
+ - Follow-up actions: root-cause fixes, detection improvements, and backlog items.
45
+ - AI failure mode: model limitation, pattern-matching trap, missing evidence habit,
46
+ over-broad abstraction, fake compatibility, test-seam mistake, or other reusable
47
+ class.
48
+ - Search terms future agents should use before repeating similar work.
49
+
50
+ ## Redaction Guard
51
+
52
+ Postmortems are durable repo artifacts, so they must never preserve secrets,
53
+ tokens, private customer data, personal machine paths, or raw private logs unless
54
+ the repository already treats that exact artifact as public source truth.
55
+
56
+ - Record the command, file path, commit, or artifact pointer that proves the fact.
57
+ - Quote only the minimal output needed to prove the incident.
58
+ - Replace sensitive values with `<redacted>` and add a short redaction summary.
59
+ - If the only available proof is sensitive, cite the owner artifact and describe
60
+ the observed shape instead of copying the raw value.
61
+
62
+ ## Read Gates
63
+
64
+ `cc-plan`, `cc-investigate`, and `cc-do` must run a quick local search before they
65
+ freeze direction or touch code:
66
+
67
+ ```bash
68
+ rg -n "<capability|module|error|failure-class|model-risk>" devflow/postmortems
69
+ ```
70
+
71
+ If `devflow/postmortems/` does not exist, record `no-project-postmortems-yet`.
72
+ If a match exists, load only `INDEX.md`, `principles.md`, and the one or two
73
+ incident files most relevant to the current work.
74
+
75
+ ## State Ownership
76
+
77
+ Postmortems do not own task status, roadmap progress, review verdicts, or spec sync
78
+ state. They cite those stronger owners by path, commit, or command output.