cc-devflow 4.5.7 → 4.5.8
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/PLAYBOOK.md +9 -0
- package/.claude/skills/cc-act/SKILL.md +15 -5
- package/.claude/skills/cc-act/references/closure-contract.md +4 -0
- 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 +6 -0
- package/.claude/skills/cc-act/scripts/sync-act-docs.sh +14 -0
- 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 +6 -0
- package/.claude/skills/cc-do/SKILL.md +23 -1
- package/.claude/skills/cc-next/CHANGELOG.md +5 -0
- package/.claude/skills/cc-next/PLAYBOOK.md +52 -0
- package/.claude/skills/cc-next/SKILL.md +161 -0
- package/.claude/skills/cc-plan/CHANGELOG.md +6 -0
- package/.claude/skills/cc-plan/SKILL.md +45 -3
- package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +26 -0
- package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +49 -1
- package/.claude/skills/cc-plan/references/planning-contract.md +11 -0
- 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-simplify/CHANGELOG.md +6 -0
- package/.claude/skills/cc-simplify/SKILL.md +19 -8
- package/CHANGELOG.md +8 -1
- package/README.md +52 -3
- package/README.zh-CN.md +52 -3
- 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 +9 -5
- package/docs/examples/full-design-blocked/README.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 +310 -6
- package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +45 -1
- package/docs/examples/local-handoff/README.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 +197 -4
- package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +35 -1
- package/docs/examples/pdca-loop/README.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 +198 -5
- package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +35 -1
- package/docs/examples/scripts/check-example-bindings.sh +19 -1
- package/docs/guides/getting-started.md +1 -1
- package/docs/guides/getting-started.zh-CN.md +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="1000" viewBox="0 0 1600 1000" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">CC-DevFlow PR Harness 运作流程</title>
|
|
3
|
+
<desc id="desc">一张中文流程图,展示 roadmap 选题、目标自动驾驶、PDCA 和 IDCA 循环、PR 独立 Review、PR 合并和 main 一致性证明。</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
6
|
+
<stop offset="0" stop-color="#07111f"/>
|
|
7
|
+
<stop offset="0.48" stop-color="#0d2638"/>
|
|
8
|
+
<stop offset="1" stop-color="#102414"/>
|
|
9
|
+
</linearGradient>
|
|
10
|
+
<linearGradient id="blue" x1="0" y1="0" x2="1" y2="1">
|
|
11
|
+
<stop offset="0" stop-color="#4cc9f0"/>
|
|
12
|
+
<stop offset="1" stop-color="#4361ee"/>
|
|
13
|
+
</linearGradient>
|
|
14
|
+
<linearGradient id="green" x1="0" y1="0" x2="1" y2="1">
|
|
15
|
+
<stop offset="0" stop-color="#b8f05a"/>
|
|
16
|
+
<stop offset="1" stop-color="#2fbf71"/>
|
|
17
|
+
</linearGradient>
|
|
18
|
+
<linearGradient id="amber" x1="0" y1="0" x2="1" y2="1">
|
|
19
|
+
<stop offset="0" stop-color="#ffd166"/>
|
|
20
|
+
<stop offset="1" stop-color="#ef8354"/>
|
|
21
|
+
</linearGradient>
|
|
22
|
+
<linearGradient id="violet" x1="0" y1="0" x2="1" y2="1">
|
|
23
|
+
<stop offset="0" stop-color="#d0a2ff"/>
|
|
24
|
+
<stop offset="1" stop-color="#7b2cbf"/>
|
|
25
|
+
</linearGradient>
|
|
26
|
+
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
|
|
27
|
+
<feDropShadow dx="0" dy="16" stdDeviation="16" flood-color="#000000" flood-opacity="0.35"/>
|
|
28
|
+
</filter>
|
|
29
|
+
<marker id="arrow" markerWidth="16" markerHeight="16" refX="12" refY="8" orient="auto" markerUnits="strokeWidth">
|
|
30
|
+
<path d="M2,2 L14,8 L2,14 Z" fill="#d7e3f4"/>
|
|
31
|
+
</marker>
|
|
32
|
+
<style>
|
|
33
|
+
.title{font:800 62px Inter,"PingFang SC","Microsoft YaHei",Arial,sans-serif;fill:#f8fbff;letter-spacing:0}
|
|
34
|
+
.subtitle{font:500 26px Inter,"PingFang SC","Microsoft YaHei",Arial,sans-serif;fill:#bdd0e8}
|
|
35
|
+
.label{font:800 26px Inter,"PingFang SC","Microsoft YaHei",Arial,sans-serif;fill:#f8fbff;letter-spacing:0}
|
|
36
|
+
.small{font:500 18px Inter,"PingFang SC","Microsoft YaHei",Arial,sans-serif;fill:#d7e3f4}
|
|
37
|
+
.note{font:600 18px Inter,"PingFang SC","Microsoft YaHei",Arial,sans-serif;fill:#f8fbff}
|
|
38
|
+
.muted{font:500 16px Inter,"PingFang SC","Microsoft YaHei",Arial,sans-serif;fill:#9fb4cd}
|
|
39
|
+
.card{fill:#102033;stroke:#27445f;stroke-width:2;filter:url(#shadow)}
|
|
40
|
+
.lane{fill:#0b1728;stroke:#27445f;stroke-width:2}
|
|
41
|
+
.line{fill:none;stroke:#d7e3f4;stroke-width:4;marker-end:url(#arrow)}
|
|
42
|
+
.thin{fill:none;stroke:#6c819b;stroke-width:3;stroke-dasharray:8 10;marker-end:url(#arrow)}
|
|
43
|
+
</style>
|
|
44
|
+
</defs>
|
|
45
|
+
<rect width="1600" height="1000" fill="url(#bg)"/>
|
|
46
|
+
<circle cx="140" cy="125" r="220" fill="#2247ff" opacity="0.12"/>
|
|
47
|
+
<circle cx="1450" cy="820" r="260" fill="#2fbf71" opacity="0.13"/>
|
|
48
|
+
|
|
49
|
+
<text x="80" y="96" class="title">CC-DevFlow PR Harness</text>
|
|
50
|
+
<text x="84" y="136" class="subtitle">从 roadmap 选题,到当前 worktree 自动开发,再到独立 PR Review 和 main 一致性证明。</text>
|
|
51
|
+
|
|
52
|
+
<rect x="80" y="190" width="1440" height="150" rx="18" class="lane"/>
|
|
53
|
+
<text x="110" y="225" class="note">导航层</text>
|
|
54
|
+
<g transform="translate(130 250)">
|
|
55
|
+
<rect width="260" height="70" rx="16" fill="url(#blue)"/>
|
|
56
|
+
<text x="24" y="32" class="label">cc-roadmap</text>
|
|
57
|
+
<text x="24" y="56" class="small">产品顺序和阶段真相</text>
|
|
58
|
+
</g>
|
|
59
|
+
<g transform="translate(520 250)">
|
|
60
|
+
<rect width="260" height="70" rx="16" fill="url(#green)"/>
|
|
61
|
+
<text x="24" y="32" class="label">cc-next</text>
|
|
62
|
+
<text x="24" y="56" class="small">选择一个 ready 目标</text>
|
|
63
|
+
</g>
|
|
64
|
+
<g transform="translate(910 250)">
|
|
65
|
+
<rect width="300" height="70" rx="16" fill="url(#amber)"/>
|
|
66
|
+
<text x="24" y="32" class="label">cc-dev</text>
|
|
67
|
+
<text x="24" y="56" class="small">当前 worktree 推进到 PR</text>
|
|
68
|
+
</g>
|
|
69
|
+
<path class="line" d="M390 285 H510"/>
|
|
70
|
+
<path class="line" d="M780 285 H900"/>
|
|
71
|
+
|
|
72
|
+
<rect x="80" y="390" width="675" height="335" rx="18" class="lane"/>
|
|
73
|
+
<text x="110" y="426" class="note">PDCA 新需求循环</text>
|
|
74
|
+
<text x="110" y="455" class="muted">适用于新行为、接口、UI、规格和需求变更</text>
|
|
75
|
+
<g transform="translate(120 490)">
|
|
76
|
+
<rect width="230" height="72" rx="14" class="card"/>
|
|
77
|
+
<text x="24" y="32" class="label">cc-plan</text>
|
|
78
|
+
<text x="24" y="57" class="small">冻结范围、设计、任务</text>
|
|
79
|
+
</g>
|
|
80
|
+
<g transform="translate(455 490)">
|
|
81
|
+
<rect width="230" height="72" rx="14" class="card"/>
|
|
82
|
+
<text x="24" y="32" class="label">cc-do</text>
|
|
83
|
+
<text x="24" y="57" class="small">红灯、绿灯、重构</text>
|
|
84
|
+
</g>
|
|
85
|
+
<g transform="translate(120 615)">
|
|
86
|
+
<rect width="230" height="72" rx="14" class="card"/>
|
|
87
|
+
<text x="24" y="32" class="label">cc-check</text>
|
|
88
|
+
<text x="24" y="57" class="small">新鲜证据裁决</text>
|
|
89
|
+
</g>
|
|
90
|
+
<g transform="translate(455 615)">
|
|
91
|
+
<rect width="230" height="72" rx="14" class="card"/>
|
|
92
|
+
<text x="24" y="32" class="label">cc-act</text>
|
|
93
|
+
<text x="24" y="57" class="small">创建或更新 PR</text>
|
|
94
|
+
</g>
|
|
95
|
+
<path class="line" d="M350 526 H445"/>
|
|
96
|
+
<path class="line" d="M570 562 V605"/>
|
|
97
|
+
<path class="line" d="M455 651 H360"/>
|
|
98
|
+
|
|
99
|
+
<rect x="845" y="390" width="675" height="335" rx="18" class="lane"/>
|
|
100
|
+
<text x="875" y="426" class="note">IDCA Bug 调查循环</text>
|
|
101
|
+
<text x="875" y="455" class="muted">适用于回归、崩溃、错误行为和不稳定失败</text>
|
|
102
|
+
<g transform="translate(885 490)">
|
|
103
|
+
<rect width="270" height="72" rx="14" class="card"/>
|
|
104
|
+
<text x="24" y="32" class="label">cc-investigate</text>
|
|
105
|
+
<text x="24" y="57" class="small">复现、根因、修复边界</text>
|
|
106
|
+
</g>
|
|
107
|
+
<g transform="translate(1245 490)">
|
|
108
|
+
<rect width="230" height="72" rx="14" class="card"/>
|
|
109
|
+
<text x="24" y="32" class="label">cc-do</text>
|
|
110
|
+
<text x="24" y="57" class="small">带证据修复</text>
|
|
111
|
+
</g>
|
|
112
|
+
<g transform="translate(885 615)">
|
|
113
|
+
<rect width="230" height="72" rx="14" class="card"/>
|
|
114
|
+
<text x="24" y="32" class="label">cc-check</text>
|
|
115
|
+
<text x="24" y="57" class="small">证明症状已修复</text>
|
|
116
|
+
</g>
|
|
117
|
+
<g transform="translate(1245 615)">
|
|
118
|
+
<rect width="230" height="72" rx="14" class="card"/>
|
|
119
|
+
<text x="24" y="32" class="label">cc-act</text>
|
|
120
|
+
<text x="24" y="57" class="small">创建或更新 PR</text>
|
|
121
|
+
</g>
|
|
122
|
+
<path class="line" d="M1155 526 H1235"/>
|
|
123
|
+
<path class="line" d="M1360 562 V605"/>
|
|
124
|
+
<path class="line" d="M1245 651 H1125"/>
|
|
125
|
+
|
|
126
|
+
<path class="thin" d="M1060 320 C950 360 830 365 685 410"/>
|
|
127
|
+
<path class="thin" d="M1060 320 C1180 360 1230 365 1260 410"/>
|
|
128
|
+
|
|
129
|
+
<rect x="250" y="790" width="1100" height="120" rx="22" fill="#101f2f" stroke="#3c5a78" stroke-width="2" filter="url(#shadow)"/>
|
|
130
|
+
<g transform="translate(305 815)">
|
|
131
|
+
<rect width="230" height="64" rx="14" fill="url(#violet)"/>
|
|
132
|
+
<text x="24" y="30" class="label">cc-pr-review</text>
|
|
133
|
+
<text x="24" y="52" class="small">单独会话 Review PR</text>
|
|
134
|
+
</g>
|
|
135
|
+
<g transform="translate(690 815)">
|
|
136
|
+
<rect width="230" height="64" rx="14" fill="url(#green)"/>
|
|
137
|
+
<text x="24" y="30" class="label">cc-pr-land</text>
|
|
138
|
+
<text x="24" y="52" class="small">Rebase 并合并 PR</text>
|
|
139
|
+
</g>
|
|
140
|
+
<g transform="translate(1075 815)">
|
|
141
|
+
<rect width="220" height="64" rx="14" fill="url(#blue)"/>
|
|
142
|
+
<text x="24" y="30" class="label">main</text>
|
|
143
|
+
<text x="24" y="52" class="small">本地和远程一致</text>
|
|
144
|
+
</g>
|
|
145
|
+
<path class="line" d="M535 847 H680"/>
|
|
146
|
+
<path class="line" d="M920 847 H1065"/>
|
|
147
|
+
<path class="thin" d="M805 815 C720 760 650 735 570 690"/>
|
|
148
|
+
<path class="thin" d="M805 815 C920 760 1110 735 1360 690"/>
|
|
149
|
+
|
|
150
|
+
<rect x="84" y="930" width="1432" height="42" rx="12" fill="#07111f" stroke="#27445f"/>
|
|
151
|
+
<text x="110" y="957" class="small">边界:cc-dev 不创建嵌套 worktree,也不合并 PR;Review 和 Landing 必须是独立会话。</text>
|
|
152
|
+
</svg>
|
|
Binary file
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"updatedAt": "2026-05-
|
|
2
|
+
"updatedAt": "2026-05-10",
|
|
3
3
|
"skills": {
|
|
4
4
|
"cc-roadmap": "5.2.0",
|
|
5
|
-
"cc-
|
|
5
|
+
"cc-next": "1.0.0",
|
|
6
|
+
"cc-dev": "1.0.0",
|
|
7
|
+
"cc-plan": "3.8.2",
|
|
6
8
|
"cc-investigate": "1.3.0",
|
|
7
|
-
"cc-do": "1.6.
|
|
8
|
-
"cc-review": "1.
|
|
9
|
+
"cc-do": "1.6.3",
|
|
10
|
+
"cc-review": "1.3.0",
|
|
11
|
+
"cc-pr-review": "1.0.0",
|
|
12
|
+
"cc-pr-land": "1.0.0",
|
|
9
13
|
"cc-check": "1.10.1",
|
|
10
|
-
"cc-act": "1.8.
|
|
14
|
+
"cc-act": "1.8.3",
|
|
11
15
|
"cc-spec-init": "1.1.0"
|
|
12
16
|
},
|
|
13
17
|
"examples": [
|
|
@@ -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.
|
|
7
|
+
- Bound skills: `cc-roadmap@5.2.0`, `cc-plan@3.8.2`, `cc-do@1.6.3`, `cc-check@1.10.1`
|
|
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.8.
|
|
7
|
+
- CC-Plan skill version: `3.8.2`
|
|
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
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"requirementId": "REQ-002",
|
|
7
7
|
"requirementVersion": "REQ-002.v2",
|
|
8
8
|
"planningMeta": {
|
|
9
|
-
"reqPlanSkillVersion": "3.8.
|
|
9
|
+
"reqPlanSkillVersion": "3.8.2",
|
|
10
10
|
"designVersion": "design.v2",
|
|
11
11
|
"approvedAt": null,
|
|
12
12
|
"approvedBy": null,
|
|
@@ -245,7 +245,61 @@
|
|
|
245
245
|
},
|
|
246
246
|
"status": "passed",
|
|
247
247
|
"attempts": 1,
|
|
248
|
-
"maxRetries": 1
|
|
248
|
+
"maxRetries": 1,
|
|
249
|
+
"tddPhase": "red",
|
|
250
|
+
"verticalSlice": "Slice 1",
|
|
251
|
+
"testSeam": {
|
|
252
|
+
"entry": "bulk invite rules and admin upload UI behavior",
|
|
253
|
+
"behaviorAsserted": "dangerous row outcomes are reproduced as explicit failing tests",
|
|
254
|
+
"specStyleTestName": "dangerous row outcomes are reproduced as explicit failing tests",
|
|
255
|
+
"oneLogicalBehavior": true,
|
|
256
|
+
"publicVerificationPath": "Run the bulk invite rule and admin panel tests through their public flows",
|
|
257
|
+
"implementationDetailRisk": "low"
|
|
258
|
+
},
|
|
259
|
+
"feedbackLoop": {
|
|
260
|
+
"type": "automated-test",
|
|
261
|
+
"determinism": "deterministic",
|
|
262
|
+
"expectedFailure": "Fails before the behavior exists"
|
|
263
|
+
},
|
|
264
|
+
"allowedMocks": [
|
|
265
|
+
"file upload boundary",
|
|
266
|
+
"billing / seat limit boundary"
|
|
267
|
+
],
|
|
268
|
+
"testQuality": {
|
|
269
|
+
"usesPublicInterface": true,
|
|
270
|
+
"describesBehavior": true,
|
|
271
|
+
"specStyleName": true,
|
|
272
|
+
"oneLogicalBehavior": true,
|
|
273
|
+
"verifiesThroughPublicPath": true,
|
|
274
|
+
"survivesInternalRefactor": true,
|
|
275
|
+
"mocksOnlySystemBoundaries": true,
|
|
276
|
+
"noBulkRed": true
|
|
277
|
+
},
|
|
278
|
+
"greenMinimality": {
|
|
279
|
+
"guard": "Keep the task scoped to its stated verification evidence",
|
|
280
|
+
"noSpeculativeBranches": true
|
|
281
|
+
},
|
|
282
|
+
"completion": {
|
|
283
|
+
"command": "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/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md --task T001",
|
|
284
|
+
"requiredBeforeCompletion": [
|
|
285
|
+
"verification evidence captured",
|
|
286
|
+
"checkpoint written",
|
|
287
|
+
"spec review gate recorded",
|
|
288
|
+
"code review gate recorded"
|
|
289
|
+
],
|
|
290
|
+
"forbiddenShortcuts": [
|
|
291
|
+
"manual checkbox edit",
|
|
292
|
+
"manual manifest status edit",
|
|
293
|
+
"leaving currentTaskId stale"
|
|
294
|
+
]
|
|
295
|
+
},
|
|
296
|
+
"refactorCandidates": [
|
|
297
|
+
"duplication",
|
|
298
|
+
"long method",
|
|
299
|
+
"primitive obsession",
|
|
300
|
+
"naming",
|
|
301
|
+
"more than three nested branches"
|
|
302
|
+
]
|
|
249
303
|
},
|
|
250
304
|
{
|
|
251
305
|
"id": "T002",
|
|
@@ -297,7 +351,61 @@
|
|
|
297
351
|
},
|
|
298
352
|
"status": "passed",
|
|
299
353
|
"attempts": 1,
|
|
300
|
-
"maxRetries": 1
|
|
354
|
+
"maxRetries": 1,
|
|
355
|
+
"tddPhase": "green",
|
|
356
|
+
"verticalSlice": "Slice 2",
|
|
357
|
+
"testSeam": {
|
|
358
|
+
"entry": "bulk invite rules and admin upload UI behavior",
|
|
359
|
+
"behaviorAsserted": "bulk invite rows receive deterministic initial states",
|
|
360
|
+
"specStyleTestName": "bulk invite rows receive deterministic initial states",
|
|
361
|
+
"oneLogicalBehavior": true,
|
|
362
|
+
"publicVerificationPath": "Run the bulk invite rule and admin panel tests through their public flows",
|
|
363
|
+
"implementationDetailRisk": "low"
|
|
364
|
+
},
|
|
365
|
+
"feedbackLoop": {
|
|
366
|
+
"type": "automated-test",
|
|
367
|
+
"determinism": "deterministic",
|
|
368
|
+
"expectedFailure": ""
|
|
369
|
+
},
|
|
370
|
+
"allowedMocks": [
|
|
371
|
+
"file upload boundary",
|
|
372
|
+
"billing / seat limit boundary"
|
|
373
|
+
],
|
|
374
|
+
"testQuality": {
|
|
375
|
+
"usesPublicInterface": true,
|
|
376
|
+
"describesBehavior": true,
|
|
377
|
+
"specStyleName": true,
|
|
378
|
+
"oneLogicalBehavior": true,
|
|
379
|
+
"verifiesThroughPublicPath": true,
|
|
380
|
+
"survivesInternalRefactor": true,
|
|
381
|
+
"mocksOnlySystemBoundaries": true,
|
|
382
|
+
"noBulkRed": true
|
|
383
|
+
},
|
|
384
|
+
"greenMinimality": {
|
|
385
|
+
"guard": "Implement only the code needed to pass the current red behavior",
|
|
386
|
+
"noSpeculativeBranches": true
|
|
387
|
+
},
|
|
388
|
+
"completion": {
|
|
389
|
+
"command": "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/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md --task T002",
|
|
390
|
+
"requiredBeforeCompletion": [
|
|
391
|
+
"verification evidence captured",
|
|
392
|
+
"checkpoint written",
|
|
393
|
+
"spec review gate recorded",
|
|
394
|
+
"code review gate recorded"
|
|
395
|
+
],
|
|
396
|
+
"forbiddenShortcuts": [
|
|
397
|
+
"manual checkbox edit",
|
|
398
|
+
"manual manifest status edit",
|
|
399
|
+
"leaving currentTaskId stale"
|
|
400
|
+
]
|
|
401
|
+
},
|
|
402
|
+
"refactorCandidates": [
|
|
403
|
+
"duplication",
|
|
404
|
+
"long method",
|
|
405
|
+
"primitive obsession",
|
|
406
|
+
"naming",
|
|
407
|
+
"more than three nested branches"
|
|
408
|
+
]
|
|
301
409
|
},
|
|
302
410
|
{
|
|
303
411
|
"id": "T003",
|
|
@@ -348,7 +456,61 @@
|
|
|
348
456
|
},
|
|
349
457
|
"status": "passed",
|
|
350
458
|
"attempts": 1,
|
|
351
|
-
"maxRetries": 1
|
|
459
|
+
"maxRetries": 1,
|
|
460
|
+
"tddPhase": "red",
|
|
461
|
+
"verticalSlice": "Slice 3",
|
|
462
|
+
"testSeam": {
|
|
463
|
+
"entry": "bulk invite rules and admin upload UI behavior",
|
|
464
|
+
"behaviorAsserted": "mixed row outcomes are visible as UI failures before implementation",
|
|
465
|
+
"specStyleTestName": "mixed row outcomes are visible as UI failures before implementation",
|
|
466
|
+
"oneLogicalBehavior": true,
|
|
467
|
+
"publicVerificationPath": "Run the bulk invite rule and admin panel tests through their public flows",
|
|
468
|
+
"implementationDetailRisk": "low"
|
|
469
|
+
},
|
|
470
|
+
"feedbackLoop": {
|
|
471
|
+
"type": "automated-test",
|
|
472
|
+
"determinism": "deterministic",
|
|
473
|
+
"expectedFailure": "Fails before the behavior exists"
|
|
474
|
+
},
|
|
475
|
+
"allowedMocks": [
|
|
476
|
+
"file upload boundary",
|
|
477
|
+
"billing / seat limit boundary"
|
|
478
|
+
],
|
|
479
|
+
"testQuality": {
|
|
480
|
+
"usesPublicInterface": true,
|
|
481
|
+
"describesBehavior": true,
|
|
482
|
+
"specStyleName": true,
|
|
483
|
+
"oneLogicalBehavior": true,
|
|
484
|
+
"verifiesThroughPublicPath": true,
|
|
485
|
+
"survivesInternalRefactor": true,
|
|
486
|
+
"mocksOnlySystemBoundaries": true,
|
|
487
|
+
"noBulkRed": true
|
|
488
|
+
},
|
|
489
|
+
"greenMinimality": {
|
|
490
|
+
"guard": "Keep the task scoped to its stated verification evidence",
|
|
491
|
+
"noSpeculativeBranches": true
|
|
492
|
+
},
|
|
493
|
+
"completion": {
|
|
494
|
+
"command": "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/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md --task T003",
|
|
495
|
+
"requiredBeforeCompletion": [
|
|
496
|
+
"verification evidence captured",
|
|
497
|
+
"checkpoint written",
|
|
498
|
+
"spec review gate recorded",
|
|
499
|
+
"code review gate recorded"
|
|
500
|
+
],
|
|
501
|
+
"forbiddenShortcuts": [
|
|
502
|
+
"manual checkbox edit",
|
|
503
|
+
"manual manifest status edit",
|
|
504
|
+
"leaving currentTaskId stale"
|
|
505
|
+
]
|
|
506
|
+
},
|
|
507
|
+
"refactorCandidates": [
|
|
508
|
+
"duplication",
|
|
509
|
+
"long method",
|
|
510
|
+
"primitive obsession",
|
|
511
|
+
"naming",
|
|
512
|
+
"more than three nested branches"
|
|
513
|
+
]
|
|
352
514
|
},
|
|
353
515
|
{
|
|
354
516
|
"id": "T004",
|
|
@@ -400,7 +562,61 @@
|
|
|
400
562
|
},
|
|
401
563
|
"status": "passed",
|
|
402
564
|
"attempts": 1,
|
|
403
|
-
"maxRetries": 1
|
|
565
|
+
"maxRetries": 1,
|
|
566
|
+
"tddPhase": "green",
|
|
567
|
+
"verticalSlice": "Slice 3",
|
|
568
|
+
"testSeam": {
|
|
569
|
+
"entry": "bulk invite rules and admin upload UI behavior",
|
|
570
|
+
"behaviorAsserted": "admins can see accepted, skipped, and rejected rows in the panel",
|
|
571
|
+
"specStyleTestName": "admins can see accepted, skipped, and rejected rows in the panel",
|
|
572
|
+
"oneLogicalBehavior": true,
|
|
573
|
+
"publicVerificationPath": "Run the bulk invite rule and admin panel tests through their public flows",
|
|
574
|
+
"implementationDetailRisk": "low"
|
|
575
|
+
},
|
|
576
|
+
"feedbackLoop": {
|
|
577
|
+
"type": "automated-test",
|
|
578
|
+
"determinism": "deterministic",
|
|
579
|
+
"expectedFailure": ""
|
|
580
|
+
},
|
|
581
|
+
"allowedMocks": [
|
|
582
|
+
"file upload boundary",
|
|
583
|
+
"billing / seat limit boundary"
|
|
584
|
+
],
|
|
585
|
+
"testQuality": {
|
|
586
|
+
"usesPublicInterface": true,
|
|
587
|
+
"describesBehavior": true,
|
|
588
|
+
"specStyleName": true,
|
|
589
|
+
"oneLogicalBehavior": true,
|
|
590
|
+
"verifiesThroughPublicPath": true,
|
|
591
|
+
"survivesInternalRefactor": true,
|
|
592
|
+
"mocksOnlySystemBoundaries": true,
|
|
593
|
+
"noBulkRed": true
|
|
594
|
+
},
|
|
595
|
+
"greenMinimality": {
|
|
596
|
+
"guard": "Implement only the code needed to pass the current red behavior",
|
|
597
|
+
"noSpeculativeBranches": true
|
|
598
|
+
},
|
|
599
|
+
"completion": {
|
|
600
|
+
"command": "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/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md --task T004",
|
|
601
|
+
"requiredBeforeCompletion": [
|
|
602
|
+
"verification evidence captured",
|
|
603
|
+
"checkpoint written",
|
|
604
|
+
"spec review gate recorded",
|
|
605
|
+
"code review gate recorded"
|
|
606
|
+
],
|
|
607
|
+
"forbiddenShortcuts": [
|
|
608
|
+
"manual checkbox edit",
|
|
609
|
+
"manual manifest status edit",
|
|
610
|
+
"leaving currentTaskId stale"
|
|
611
|
+
]
|
|
612
|
+
},
|
|
613
|
+
"refactorCandidates": [
|
|
614
|
+
"duplication",
|
|
615
|
+
"long method",
|
|
616
|
+
"primitive obsession",
|
|
617
|
+
"naming",
|
|
618
|
+
"more than three nested branches"
|
|
619
|
+
]
|
|
404
620
|
},
|
|
405
621
|
{
|
|
406
622
|
"id": "T005",
|
|
@@ -456,12 +672,100 @@
|
|
|
456
672
|
},
|
|
457
673
|
"status": "passed",
|
|
458
674
|
"attempts": 1,
|
|
459
|
-
"maxRetries": 1
|
|
675
|
+
"maxRetries": 1,
|
|
676
|
+
"tddPhase": "evidence",
|
|
677
|
+
"verticalSlice": "Slice 3",
|
|
678
|
+
"testSeam": {
|
|
679
|
+
"entry": "bulk invite rules and admin upload UI behavior",
|
|
680
|
+
"behaviorAsserted": "fresh verification evidence exists for cc-check",
|
|
681
|
+
"specStyleTestName": "fresh verification evidence exists for cc-check",
|
|
682
|
+
"oneLogicalBehavior": true,
|
|
683
|
+
"publicVerificationPath": "Run the bulk invite rule and admin panel tests through their public flows",
|
|
684
|
+
"implementationDetailRisk": "low"
|
|
685
|
+
},
|
|
686
|
+
"feedbackLoop": {
|
|
687
|
+
"type": "automated-test",
|
|
688
|
+
"determinism": "deterministic",
|
|
689
|
+
"expectedFailure": ""
|
|
690
|
+
},
|
|
691
|
+
"allowedMocks": [
|
|
692
|
+
"file upload boundary",
|
|
693
|
+
"billing / seat limit boundary"
|
|
694
|
+
],
|
|
695
|
+
"testQuality": {
|
|
696
|
+
"usesPublicInterface": true,
|
|
697
|
+
"describesBehavior": true,
|
|
698
|
+
"specStyleName": true,
|
|
699
|
+
"oneLogicalBehavior": true,
|
|
700
|
+
"verifiesThroughPublicPath": true,
|
|
701
|
+
"survivesInternalRefactor": true,
|
|
702
|
+
"mocksOnlySystemBoundaries": true,
|
|
703
|
+
"noBulkRed": true
|
|
704
|
+
},
|
|
705
|
+
"greenMinimality": {
|
|
706
|
+
"guard": "Keep the task scoped to its stated verification evidence",
|
|
707
|
+
"noSpeculativeBranches": true
|
|
708
|
+
},
|
|
709
|
+
"completion": {
|
|
710
|
+
"command": "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/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md --task T005",
|
|
711
|
+
"requiredBeforeCompletion": [
|
|
712
|
+
"verification evidence captured",
|
|
713
|
+
"checkpoint written",
|
|
714
|
+
"spec review gate recorded",
|
|
715
|
+
"code review gate recorded"
|
|
716
|
+
],
|
|
717
|
+
"forbiddenShortcuts": [
|
|
718
|
+
"manual checkbox edit",
|
|
719
|
+
"manual manifest status edit",
|
|
720
|
+
"leaving currentTaskId stale"
|
|
721
|
+
]
|
|
722
|
+
},
|
|
723
|
+
"refactorCandidates": [
|
|
724
|
+
"duplication",
|
|
725
|
+
"long method",
|
|
726
|
+
"primitive obsession",
|
|
727
|
+
"naming",
|
|
728
|
+
"more than three nested branches"
|
|
729
|
+
]
|
|
460
730
|
}
|
|
461
731
|
],
|
|
462
732
|
"metadata": {
|
|
463
733
|
"source": "tasks.md",
|
|
464
734
|
"generatedBy": "docs-example",
|
|
465
735
|
"planVersion": 1
|
|
736
|
+
},
|
|
737
|
+
"executionProtocol": {
|
|
738
|
+
"templateCompliance": {
|
|
739
|
+
"required": true,
|
|
740
|
+
"sourceTemplate": "assets/TASKS_TEMPLATE.md",
|
|
741
|
+
"taskBlockMustInclude": [
|
|
742
|
+
"Goal",
|
|
743
|
+
"TDD phase",
|
|
744
|
+
"Files",
|
|
745
|
+
"Read first",
|
|
746
|
+
"Verification",
|
|
747
|
+
"Evidence",
|
|
748
|
+
"Test seam",
|
|
749
|
+
"Public verification path",
|
|
750
|
+
"Allowed mocks",
|
|
751
|
+
"Completion"
|
|
752
|
+
],
|
|
753
|
+
"titleOnlyTasks": "forbidden"
|
|
754
|
+
},
|
|
755
|
+
"selection": {
|
|
756
|
+
"sourceOfTruth": "planning/task-manifest.json.currentTaskId",
|
|
757
|
+
"commandTemplate": "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\"/select-ready-tasks.sh --manifest docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json"
|
|
758
|
+
},
|
|
759
|
+
"completion": {
|
|
760
|
+
"manualStatusEdit": "forbidden",
|
|
761
|
+
"commandTemplate": "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/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json --tasks docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md --task <task-id>",
|
|
762
|
+
"failurePolicy": "Do not hand-edit status; fix missing checkpoint, review gate, or dependency evidence and rerun the script.",
|
|
763
|
+
"updates": [
|
|
764
|
+
"planning/task-manifest.json.tasks[].status",
|
|
765
|
+
"planning/task-manifest.json.currentTaskId",
|
|
766
|
+
"planning/task-manifest.json.status",
|
|
767
|
+
"planning/tasks.md checkbox"
|
|
768
|
+
]
|
|
769
|
+
}
|
|
466
770
|
}
|
|
467
771
|
}
|