ccgx-workflow 2.4.1 → 2.5.0

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 (46) hide show
  1. package/README.md +134 -277
  2. package/README.zh-CN.md +134 -272
  3. package/dist/chunks/version-build.mjs +1 -1
  4. package/dist/cli.mjs +1 -1
  5. package/dist/index.d.mts +709 -16
  6. package/dist/index.d.ts +709 -16
  7. package/dist/index.mjs +1061 -30
  8. package/dist/shared/{ccgx-workflow.j1spUsik.mjs → ccgx-workflow.CdHnJLak.mjs} +106 -22
  9. package/package.json +1 -1
  10. package/templates/commands/agents/code-fixer.md +6 -6
  11. package/templates/commands/agents/phase-runner.md +46 -14
  12. package/templates/commands/agents/plan-checker.md +10 -0
  13. package/templates/commands/analyze.md +66 -25
  14. package/templates/commands/autonomous.md +428 -225
  15. package/templates/commands/cancel.md +9 -0
  16. package/templates/commands/codex-exec.md +12 -11
  17. package/templates/commands/context.md +14 -0
  18. package/templates/commands/debate.md +10 -6
  19. package/templates/commands/execute.md +76 -28
  20. package/templates/commands/optimize.md +53 -25
  21. package/templates/commands/plan.md +78 -28
  22. package/templates/commands/review.md +26 -19
  23. package/templates/commands/spec-impl.md +68 -127
  24. package/templates/commands/spec-plan.md +61 -82
  25. package/templates/commands/spec-research.md +35 -92
  26. package/templates/commands/spec-review.md +34 -119
  27. package/templates/commands/status.md +1 -0
  28. package/templates/commands/team-exec.md +45 -13
  29. package/templates/commands/team.md +64 -167
  30. package/templates/commands/test.md +56 -34
  31. package/templates/commands/verify-work.md +36 -13
  32. package/templates/commands/verify.md +35 -0
  33. package/templates/commands/workflow.md +22 -37
  34. package/templates/hooks/ccg-loop-detector.cjs +39 -8
  35. package/templates/hooks/ccg-statusline.js +142 -2
  36. package/templates/hooks/ccg-stop-gate.cjs +248 -19
  37. package/templates/hooks/ccg-subagent-context.cjs +505 -0
  38. package/templates/scripts/ccg-state-lock.cjs +510 -0
  39. package/templates/scripts/ccg-team-schedule.cjs +328 -0
  40. package/templates/scripts/ccgx-call-plugin.mjs +494 -141
  41. package/templates/scripts/invoke-model.mjs +28 -1
  42. package/templates/scripts/task-store.cjs +614 -0
  43. package/templates/skills/tools/verify-change/SKILL.md +7 -0
  44. package/templates/skills/tools/verify-module/SKILL.md +7 -0
  45. package/templates/skills/tools/verify-quality/SKILL.md +7 -0
  46. package/templates/skills/tools/verify-security/SKILL.md +8 -0
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: ccg:autonomous
3
- description: 跨 phase 自治长跑:roadmap → wave 并行(默认)spawn phase-runner,仅 blocker 暂停
4
- argument-hint: "[--from N] [--to N] [--only N] [--quality=fast|triple|debate] [--interactive] [--offload] [--sequential] [--max-concurrent N]"
3
+ description: 跨 phase 自治长跑:roadmap → 原生 Workflow 串行编排(默认,后台运行 + 断点恢复),--legacy 降级 wave 并行 prompt 轮转
4
+ argument-hint: "[--from N] [--to N] [--only N] [--legacy] [--resume [job-id]] [--quality=fast|triple|debate] [--interactive] [--offload] [--sequential] [--max-concurrent N] [--nested=on|off]"
5
5
  context_budget: orchestrator-15
6
6
  subagent_freshness: required
7
7
  allowed-tools:
@@ -15,6 +15,7 @@ allowed-tools:
15
15
  - Task
16
16
  - Agent
17
17
  - TodoWrite
18
+ - Workflow
18
19
  ---
19
20
  <!-- CCG:AUTONOMOUS:START -->
20
21
 
@@ -22,20 +23,26 @@ allowed-tools:
22
23
 
23
24
  ## 职能定位
24
25
 
25
- `/ccg:autonomous` 是**编排层之上的编排层**:读 `.ccg/roadmap.md` 一次性跑完整个 milestone 的所有 phase,每个 phase 内部委托给 `/ccg:team`(或 `/ccg:spec-impl`)完成 8 阶段流程,仅在 blocker / 灰区接受 / 用户决策点暂停。
26
+ `/ccg:autonomous` 是**编排层之上的编排层**:读 `.ccg/roadmap.md` 一次性跑完整个 milestone 的所有 phase,仅在 blocker / 灰区接受 / 用户决策点暂停。
26
27
 
27
- > **调度模型**:默认采用 **wave 并行**。
28
- > autonomous Kahn 拓扑排序把 EXEC_QUEUE 划分成 wave,wave 内 phase 一次性并行
29
- > spawn `Agent(phase-runner)`(max-concurrent 默认 4),wave 之间顺序执行——这与
30
- > `team-exec` wave 调度心智模型对齐,墙钟时间通常压缩 30-40%。
31
- > 顺序串行行为通过 `--sequential` flag 保留作为调试 / API 限额场景的降级路径。
28
+ > **调度模型**:默认采用**原生 Workflow 串行编排**。
29
+ > 主线把 roadmap 解析成依赖正确的串行 phase 序,烘焙成一个 Workflow JS 脚本
30
+ > (`for` 循环逐 phase `await agent(...)` 调 phase-runner),交给 `Workflow` 工具
31
+ > **后台运行**——transcript 由引擎托管、不占主线内存;主线 turn end 等
32
+ > task-notification,醒来只消费 ≤200 token 结构化摘要。中断 / 失败后
33
+ > `/ccg:autonomous --resume [job-id]` 以 `resumeFromRunId` 断点恢复:已完成
34
+ > phase 的 `agent()` 调用命中缓存直接重放,不重跑。
35
+ >
36
+ > 旧 **wave 并行 prompt 轮转协议**整体保留为降级路径(见文末附录 A):
37
+ > `--legacy` 显式启用;`Workflow` 工具不可用时自动降级并明示原因。
38
+ > workflow 模式适合无人值守长跑;强交互场景用 `--legacy --interactive`。
32
39
 
33
40
  **与 `/ccg:team` 的边界**:
34
41
 
35
42
  | 维度 | `/ccg:team` | `/ccg:autonomous` |
36
43
  |------|-------------|-------------------|
37
44
  | 范围 | 单个任务的 8 阶段全流程 | 多个 phase 顺序串联 |
38
- | 调用对象 | 直接 spawn Architect / Dev / QA / Reviewer | 调用 `/ccg:team` 或 `/ccg:spec-impl` |
45
+ | 调用对象 | 直接 spawn Architect / Dev / QA / Reviewer | Workflow 串行调 phase-runner(legacy:`/ccg:team` 或 `/ccg:spec-impl`) |
39
46
  | 状态文件 | `.ccg/state.md`(任务 wave 维度) | `.ccg/roadmap.md`(phase 维度) |
40
47
  | 暂停条件 | Critical 未修、Phase 6 之后用户确认 | blocker / 灰区 / 跨 phase 依赖断裂 |
41
48
  | 适合 | 一次性完整开发任务 | 长程 milestone(重构、迁移、多阶段功能) |
@@ -64,7 +71,7 @@ allowed-tools:
64
71
  ## 前置条件
65
72
 
66
73
  1. **`.ccg/roadmap.md` 必须存在**。若不存在,autonomous 第一步引导用户创建(见 Step 1)。
67
- 2. **Agent Teams 已启用**(`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`),因为内部要调 `/ccg:team`。
74
+ 2. **phase-runner agent 已安装**(`~/.claude/agents/ccg/phase-runner.md`,CCG 标准安装自带)。legacy 路径另需 Agent Teams 已启用(`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`),因为内部要调 `/ccg:team`。
68
75
  3. **WORKDIR**:通过 Bash `pwd`(Unix)或 `cd`(Windows)获取当前工作目录绝对路径,禁止从 `$HOME` 推断。
69
76
 
70
77
  ---
@@ -103,17 +110,20 @@ allowed-tools:
103
110
  | `--to N` 提供 | 跑到 Phase N 结束,含 N,不推进 N+1 |
104
111
  | 都未提供 | 从第一个非 `completed` phase 开始,跑到末尾 |
105
112
  | 同时给 `--only` 和 `--from`/`--to` | `--only` 优先,其余忽略并提示 |
106
- | `--interactive` | 每个 phase 内的 plan 阶段保留与用户问答(不自动判定灰区) |
107
- | `--offload` | **重型 phase 自动外包给 codex plugin**(fresh context + 后台 + 主线只 poll status),默认开启自动判定,flag 显式时强制开启 |
108
- | `--sequential` | **降级为顺序串行**:禁用 wave 并行,单 phase 一波顺序串跑。调试 / API 限额场景使用 |
109
- | `--max-concurrent N` | wave 内最大并发 phase 数,默认 4。`--max-concurrent 1` 等价 `--sequential` |
110
- | `--quality=fast\|triple\|debate` | phase 内的质量档分级。`fast`=单波 + 1 verify;`triple`=Plan-Critic-Verify 4 wave(**默认**);`debate`=triple + codex↔gemini 多轮对辩。详见 Step 4.0 |
111
- | `--nested=on\|off` | phase-runner 是否启用 nested rescue 委派(CLI 子进程内 spawn `codex:codex-rescue` / `gemini:gemini-rescue` 委派代码改动)。默认 `off` 保守。phase frontmatter `nested_rescue: true\|false` 优先级更高。详见 Step 4.0c |
113
+ | `--legacy` | **强制走附录 A** wave 并行 prompt 轮转协议。`--quality` / `--offload` / `--sequential` / `--max-concurrent` / `--nested` / `--interactive` 仅 legacy 路径生效——workflow 模式下给出任一即提示并默认转 `--legacy` |
114
+ | `--resume [job-id]` | 断点恢复 workflow 模式 job(缺省取最近未完成的 workflow job),详见 Step 4.7 |
115
+ | `--interactive` | 每个 phase 内的 plan 阶段保留与用户问答(不自动判定灰区)。**仅 legacy 路径**(后台 workflow 无法问答) |
116
+ | `--offload` | **重型 phase 自动外包给 codex plugin**(fresh context + 后台 + 主线只 poll status),默认开启自动判定,flag 显式时强制开启。**仅 legacy 路径** |
117
+ | `--sequential` | **降级为顺序串行**:禁用 wave 并行,单 phase 一波顺序串跑。调试 / API 限额场景使用。**仅 legacy 路径**(workflow 模式本身就是串行) |
118
+ | `--max-concurrent N` | wave 内最大并发 phase 数,默认 4。`--max-concurrent 1` 等价 `--sequential`。**仅 legacy 路径** |
119
+ | `--quality=fast\|triple\|debate` | 单 phase 内的质量档分级。`fast`=单波 + 1 路 verify;`triple`=Plan-Critic-Verify 4 wave(**默认**);`debate`=triple + codex↔gemini 多轮对辩。**仅 legacy 路径**,详见附录 A Step 4.0a |
120
+ | `--nested=on\|off` | phase-runner 是否启用 nested rescue 委派(CLI 子进程内 spawn `codex:codex-rescue` / `gemini:gemini-rescue` 委派代码改动)。默认 `off` 保守。phase frontmatter `nested_rescue: true\|false` 优先级更高。**仅 legacy 路径**,详见附录 A Step 4.0c |
112
121
 
113
122
  附加规则:
114
123
  - 状态已是 `completed` 的 phase 默认跳过(除非 `--only N` 强制重跑)
115
124
  - 状态为 `failed` 的 phase 进入队列时询问用户:重跑 / 跳过 / 终止
116
125
  - `EXEC_QUEUE` 为空 → 输出"所有 phase 已完成 ✅"并退出
126
+ - `--resume` 提供时跳过 Step 2/3 的队列重建与确认,直接进 Step 4.7(队列以已落盘的 workflow.mjs 为准)
117
127
 
118
128
  ### Step 3: 用户确认
119
129
 
@@ -127,18 +137,398 @@ allowed-tools:
127
137
  - Phase 3: 前端登录页(依赖 Phase 2)
128
138
  - Phase 4: SSO 集成(依赖 Phase 3)
129
139
 
130
- 预计调用:
131
- - /ccg:team × 3(每个 phase 一次完整 8 阶段)
132
- - 暂停条件:Critical 未修 / 用户决策点 / 跨 phase 依赖断裂
140
+ 调度引擎:workflow(原生 Workflow 串行编排,后台运行) | legacy(附录 A prompt 轮转)
141
+ 预计调用:phase-runner × N(workflow 串行)/ /ccg:team × N(legacy)
142
+ 暂停条件:Critical 未修 / 用户决策点 / 跨 phase 依赖断裂
133
143
 
134
- 模式:<auto | interactive>
144
+ 模式:<auto | interactive (legacy)>
135
145
 
136
146
  确认开始?
137
147
  ```
138
148
 
139
- `--interactive` 模式下,每个 phase 的 plan 阶段保留与用户问答(不自动判定灰区),其余阶段照常自治。
149
+ `--legacy --interactive` 模式下,每个 phase 的 plan 阶段保留与用户问答(不自动判定灰区),其余阶段照常自治。
140
150
 
141
- ### Step 4: Phase 主循环(wave 并行 + 质量档分级)
151
+ ### Step 4: Workflow 原生编排(默认路径)
152
+
153
+ > **Workflow 工具调用面防御原则**:Workflow 工具的参数名 / 脚本传入方式
154
+ > (script 内容 vs scriptPath)/ runId 返回字段 / 结果读取方式,一律**以运行时
155
+ > 工具 schema 实际字段为准,禁猜参数名**。沿用 phase-runner 的 ground-truth
156
+ > 先验协议:不确定的接口面先看工具 schema,再下手。
157
+
158
+ #### 4.1 可用性判定
159
+
160
+ 1. 检查当前会话**工具清单**是否含 `Workflow` 工具:
161
+ - 含且未给 `--legacy` → 走本 Step 4
162
+ - 不含 → 输出 `⚠ Workflow 工具不可用,降级 prompt 轮转协议(附录 A)` → 走附录 A
163
+ - 给了 `--legacy` → 直接走附录 A(不输出降级警告)
164
+ 2. EXEC_QUEUE 含任何 `opsx://` phase → **workflow 模式不支持**(`/ccg:spec-impl` 是命令不是 agent,无法经 `agent()` 调用)。提示用户二选一,不静默吞掉:
165
+ - 整体 `--legacy` 走附录 A
166
+ - 用 `--only` / `--from/--to` 把 opsx phase 拆出来单独跑
167
+ 3. 给了 `--quality` / `--offload` / `--sequential` / `--max-concurrent` / `--nested` / `--interactive` 任一 → 这些 flag 仅 legacy 路径生效,提示用户并**默认转 `--legacy`**。
168
+
169
+ #### 4.2 串行序
170
+
171
+ 主线按 `wave-scheduler` + `workflow-autonomous` 的算法语义**手算**串行序(权威路径)。`~/.claude/.ccg/dist/index.mjs` 通常不存在——installer 当前不安装 dist,不要依赖 `node -e` 调它;仓库 `src/utils/wave-scheduler.ts` / `src/utils/workflow-autonomous.ts` 的 `parseRoadmap / schedule / flattenWaves` 是下列伪码的设计真相源:
172
+
173
+ ```
174
+ phases = parseRoadmap(<roadmap.md 内容>)
175
+ sched = schedule(phases, { skipCompleted: true })
176
+ serial = flattenWaves(sched) # waves 按序展平 = 依赖正确的串行 phase id 序
177
+ SERIAL_QUEUE = serial ∩ EXEC_QUEUE # 与 Step 2 flag 过滤结果取交集(保持 serial 顺序)
178
+ ```
179
+
180
+ - `sched.skipped`(cascade-skip)的 phase 照旧在 roadmap.md 写 `skipped (cascade from Phase X)` 备注后从队列排除
181
+ - `SERIAL_QUEUE` 为空 → 输出"无可执行 phase"并退出
182
+
183
+ #### 4.3 phase prompt 烘焙
184
+
185
+ 对 SERIAL_QUEUE 每个 phase 生成 phase-runner YAML 契约 prompt(字段语义见 `~/.claude/agents/ccg/phase-runner.md` 输入契约)。**只放 immutable 字段**——roadmap status / 进度时间戳等可变内容一律排除,保证 `--resume` 时脚本字面量不漂移、`agent()` 缓存可命中:
186
+
187
+ ```yaml
188
+ phase_id: phase-<N>-<slug>
189
+ phase_n: <N>
190
+ phase_name: <从 roadmap.md 标题提取>
191
+ phase_type: <读 `- **Type**:` 行;缺省 generic>
192
+ phase_goal: |
193
+ <Goal 段全文>
194
+ phase_acceptance: |
195
+ <Acceptance 段全文>
196
+ phase_depends_on: <依赖 phase 列表 + 它们的产物路径>
197
+ workdir: <WORKDIR>
198
+ baseline_sha: <启动时最近 baseline commit sha7>
199
+ report_path: .claude/team-plan/phase-<N>-<slug>-report.md
200
+ commit_prefix: feat(<milestone>-p<N>):
201
+ job_id: <job-id>
202
+ summary_format: json
203
+ checkpoint_path: .context/jobs/<job-id>/checkpoints/phase-<id>.json
204
+ cancel_flag_path: .context/jobs/<job-id>/cancel.flag
205
+ progress_log: .context/jobs/<job-id>/progress.jsonl
206
+ ```
207
+
208
+ prompt 尾部追加三条运行时指令(phase-runner 侧契约见其 "Workflow 编排模式" 段):
209
+
210
+ 1. 开工前 Read `cancel_flag_path`:存在 → 按 PHASE_SUMMARY_SCHEMA 返回**全 7 字段**,`status='failed'`、`notes='cancel-flag-detected'`(完整样本见 phase-runner.md "Workflow 编排模式" 段的 cancel 示例),不做任何改动
211
+ 2. 开工前 Read `checkpoint_path`:存在且 `status=completed` → **原样返回其内容**(幂等重入,防缓存未命中重做)
212
+ 3. 收尾 Write checkpoint(内容 = 摘要 JSON 本体)+ 向 `progress_log` append 一行 `{"type":"phase-result","phase_id":"<id>","status":"<status>"}`(复用 `/ccg:status` 既有观测面)
213
+
214
+ #### 4.4 脚本生成与持久化
215
+
216
+ 按下方权威骨架**手写**生成 Workflow JS 脚本,Write 到 `.context/jobs/<job-id>/workflow.mjs`。`~/.claude/.ccg/dist/index.mjs` 通常不存在(installer 当前不安装 dist),不要依赖 `node -e` 调 `buildWorkflowScript`;仓库 `src/utils/workflow-autonomous.ts` 的 `buildWorkflowScript` 是本骨架的设计真相源:
217
+
218
+ ```js
219
+ export const meta = {
220
+ name: 'ccg-autonomous-<milestone-slug>',
221
+ description: 'CCG autonomous: <project> (<N> phases, serial)',
222
+ phases: [
223
+ { title: 'Phase 2: 实现 user API' },
224
+ // ... 按串行序逐个字面量,与 PHASES 同序同量
225
+ ],
226
+ }
227
+
228
+ const PHASES = [
229
+ {
230
+ id: '2',
231
+ title: 'Phase 2: 实现 user API',
232
+ prompt: 'phase_id: ...\n...', // 4.3 烘焙好的 YAML 全文,经 JSON.stringify 烘焙防转义事故
233
+ },
234
+ // ...
235
+ ]
236
+
237
+ const SUMMARY_SCHEMA = { /* PHASE_SUMMARY_SCHEMA 字面量(workflow-autonomous.ts 为真相源) */ }
238
+
239
+ export default async function run(args) {
240
+ const runAttempt = (args && args.runAttempt) || 1
241
+ const results = []
242
+ for (const p of PHASES) {
243
+ const upstream = results
244
+ .map(r => 'Phase ' + r.id + ': ' + r.status + ' — ' + r.notes)
245
+ .join('\n')
246
+ const basePrompt = p.prompt + '\n\nupstream_summaries: |\n' + (upstream || '(none)')
247
+ const opts = { label: 'phase-' + p.id, phase: p.title, schema: SUMMARY_SCHEMA, agentType: 'phase-runner' }
248
+ const canceled = x => x !== null && typeof x === 'object' && typeof x.notes === 'string' && x.notes.includes('cancel-flag-detected')
249
+ let s = await agent(basePrompt, opts)
250
+ if ((s === null || s.status === 'failed') && !canceled(s)) {
251
+ // 失败处理:1 次重试。label 掺 runAttempt → resume 后旧失败结果即使被缓存也强制重执行
252
+ s = await agent(
253
+ basePrompt + '\n\nretry_reason: 首次失败或返回 null,仅修复失败点',
254
+ { ...opts, label: 'phase-' + p.id + '-retry-r' + runAttempt },
255
+ )
256
+ }
257
+ if (s === null || s.status === 'failed' || s.status === 'partial') {
258
+ results.push({
259
+ id: p.id,
260
+ status: s === null ? 'failed' : s.status,
261
+ notes: s === null ? 'agent returned null after retry' : s.notes,
262
+ escalated: true,
263
+ })
264
+ break // 升级暂停:不推进下游,主线收尾走 blocker 路径
265
+ }
266
+ results.push({ id: p.id, ...s }) // completed / degraded 均推进
267
+ }
268
+ return { runAttempt, results }
269
+ }
270
+ ```
271
+
272
+ 确定性铁律:
273
+
274
+ - 脚本内**零** `Date.now()` / `Math.random()` / 无参 `new Date()`(Workflow 可重放约束)——时间戳全在主线生成(job-id)或 phase-runner 运行时 Bash 取(写 checkpoint 内容,不影响脚本重放)
275
+ - `meta` 是纯字面量;`meta.phases` 与 `PHASES` 同序同量;所有字符串经 `JSON.stringify` 烘焙
276
+ - **⛔ resume 永不重新生成此文件**——字面量漂移会击穿 `agent()` 调用缓存
277
+ - phase-runner 已列入 `ccg-subagent-context.cjs` 的 SUBAGENT_DENYLIST(prompt 由本命令烘焙、自带全量 phase 上下文),hook 不会再注入动态上下文——`--resume` 时 `agent()` 缓存确定性不受 hook 注入漂移影响
278
+
279
+ #### 4.5 启动
280
+
281
+ 1. job-id = `auto-<milestone-slug>-<yyyymmdd-hhmm>`(主线 Bash 取当前时间生成,时间戳不进脚本)
282
+ 2. 写 `.context/jobs/<job-id>/state.json`:
283
+ ```json
284
+ { "task_id": "<job-id>", "kind": "autonomous", "run_mode": "workflow",
285
+ "status": "running", "started_at": "<ISO>", "last_update": "<ISO>",
286
+ "run_attempt": 1,
287
+ "summary": "workflow serial: <N> phases" }
288
+ ```
289
+ 3. roadmap.md 一次性批注:milestone 头部加 `Mode: workflow` + `Job: <job-id>`,串行序首 phase 标 `in_progress`
290
+ 4. 调 `Workflow` 工具**后台运行**该脚本,传 `args: { runAttempt: 1 }`——脚本传入方式 / 参数名**以运行时工具 schema 为准,禁猜**
291
+ 5. 拿到返回的 runId 后立即 atomic 写回 state.json `workflow_run_id` 字段
292
+ 6. 主线 **turn end**,等 task-notification(沿用全仓事件驱动等待协议)。运行期用户可用 `/ccg:status <job-id>`(progress.jsonl 的 phase-result 行)或 `/workflows` 面板看进度
293
+
294
+ #### 4.6 收尾(task-notification 唤醒)
295
+
296
+ 1. 读 workflow 最终结果 `{ runAttempt, results }`
297
+ 2. 逐项 `summaryFromWorkflowResult(result)` 校验转换(status 非法 / 缺 required 字段 → 该项按 failed 处理并记入 NOTES)
298
+ 3. 批量更新 roadmap.md:completed / failed / partial 状态 + `Completed:` / `Outcome:` 字段;未触达 phase 保持 pending
299
+ 4. 末项 notes 含 `cancel-flag-detected` → 协作取消生效:state.json `status:'canceled'`,输出取消摘要,**不走 blocker**
300
+ 5. 否则 `decideMilestoneOutcome(results)` 裁决:
301
+ - `completed` → 写 `.context/jobs/<job-id>/result.md`(milestone 摘要 ≤200 token)+ state.json `status:'done'` + 输出 Milestone Summary(沿用"退出报告格式"节)
302
+ - `escalated` / `partial` → state.json `status:'failed'` + 走 Step 5 blocker AskUserQuestion,选项加一条"修复后 `/ccg:autonomous --resume <job-id>`"
303
+
304
+ #### 4.7 断点恢复(`--resume [job-id]`)
305
+
306
+ 1. 缺省 job-id → 取最近一个 `run_mode='workflow'` 且 `status≠done` 的 autonomous job(`listJobs` 按 started_at DESC)
307
+ 2. 校验 `.context/jobs/<job-id>/workflow.mjs` 与 state.json `workflow_run_id` 都存在;任一缺失 → 报错并建议重跑(无法断点恢复)
308
+ 3. 读 state.json 的 `run_attempt`(缺省按 `1`)→ **+1** → 以**同一脚本文件**(绝不重新生成)+ `resumeFromRunId: <workflow_run_id>` + `args: { runAttempt: <新值> }` 重启后台 run,并把新值 **atomic 写回** state.json `run_attempt` 字段(context 内旧值不可信——`/clear` 后只剩 disk 真相):
309
+ - 已完成 phase 的 `agent()` 调用(前缀未变更)命中缓存直接重放——不重跑、git log 无新 commit
310
+ - 失败 phase 双保险强制重执行:retry label 掺 `runAttempt`(缓存键已变)+ checkpoint 幂等重入(误重跑代价趋零)
311
+ 4. 新 runId atomic 写回 state.json `workflow_run_id`,`status` 回 `'running'`,后续同 4.5 步骤 6 / 4.6
312
+
313
+ #### 失败语义表(脚本内已固化,此处为主线心智模型)
314
+
315
+ | phase 结果 | 脚本行为 | 主线收尾 |
316
+ |-----------|---------|---------|
317
+ | `null` / `failed` | 脚本内 1 次重试(retry label 掺 runAttempt)→ 仍失败 break 升级暂停 | Step 5 blocker |
318
+ | `partial` | **不重试**直接 break 升级暂停(后台无法 AskUserQuestion,灰区一律暂停) | Step 5 blocker |
319
+ | `degraded` | 继续推进(与 `decideNextAction` 语义一致:fallback 已成功) | roadmap 标 completed + Note |
320
+ | notes 含 `cancel-flag-detected` | break,不重试 | state.json `status:'canceled'` |
321
+
322
+ ### Step 5: Blocker 路径
323
+
324
+ 任何 blocker 都通过 `AskUserQuestion` 暂停,向用户报告:
325
+
326
+ ```markdown
327
+ ⚠️ Autonomous 暂停于 Phase 2
328
+
329
+ 原因: <Critical 未修 / 依赖 Phase 1 失败 / API 配额耗尽 / 用户决策点>
330
+
331
+ 详情:
332
+ <具体内容,含 phase 摘要、错误日志、灰区描述>
333
+
334
+ 下一步:
335
+ 1. 重试本 phase(workflow 模式:修复后 /ccg:autonomous --resume <job-id>;legacy:重新调 /ccg:team)
336
+ 2. 跳过本 phase(标记 skipped,下游依赖 phase 自动 skipped)
337
+ 3. 终止 autonomous(保留 roadmap.md 当前进度,下次可续跑)
338
+ 4. 我来手动处理(暂停 autonomous,用户处理后回复"继续")
339
+ ```
340
+
341
+ 用户选择决定后续行为;选 4 时 autonomous 进入挂起态,等用户回到主对话发"继续"信号后从断点恢复(workflow 模式恢复 = `--resume <job-id>`)。
342
+
343
+ ---
344
+
345
+ ## 暂停条件 / Blocker 定义
346
+
347
+ 必须暂停的场景:
348
+
349
+ | 触发 | 描述 |
350
+ |------|------|
351
+ | Critical 未修 | team 完成 Phase 7 后仍有 Critical,且用户在 team 内选了"接受失败"或修复 2 轮仍失败 |
352
+ | 依赖断裂 | 当前 phase 的 `Depends on` 中有 phase 状态为 failed/skipped |
353
+ | 灰区接受 | phase 产出灰区决策(多个合理选项无单一最优解);workflow 模式下 partial 一律暂停 |
354
+ | 测试不可恢复地失败 | Phase 5 测试报告显示核心断言失败且 Phase 7 修复无效 |
355
+ | API 配额耗尽 | codeagent-wrapper 多次返回 quota/rate limit 错误 |
356
+ | 跨 phase 依赖文件被覆写 | Phase N 修改了 Phase N-1 的产出文件(罕见,靠 team-exec 的文件隔离基本可避免) |
357
+ | 用户显式中断 | 用户在主对话发 stop / pause / 取消(workflow 模式走 `/ccg:cancel <job-id>` 协作取消) |
358
+
359
+ ---
360
+
361
+ ## 状态文件 `.ccg/roadmap.md` 格式
362
+
363
+ autonomous 是 **roadmap.md 的唯一写者**。team-exec 不动它。
364
+
365
+ ```markdown
366
+ # CCG Project Roadmap
367
+
368
+ **Project**: user-auth-system
369
+ **Started**: 2026-05-01
370
+ **Last Updated**: 2026-05-03 14:30
371
+
372
+ ## Phase 1: 数据库 schema 设计 (completed)
373
+ - **Goal**: 为 users / sessions / oauth_accounts 设计 schema 与迁移脚本
374
+ - **Depends on**: (none)
375
+ - **Started**: 2026-05-01 09:00 | **Completed**: 2026-05-01 11:20
376
+ - **Plan**: .claude/team-plan/db-schema-20260501-0900/
377
+ - **Outcome**: prisma schema 完成,3 张表 + 7 个索引,迁移脚本通过 dry-run
378
+
379
+ ## Phase 2: 实现 user API (in_progress)
380
+ - **Goal**: 实现 register / login / refresh token / logout 四个 endpoint
381
+ - **Depends on**: Phase 1
382
+ - **Started**: 2026-05-03 10:00
383
+ - **Plan**: .claude/team-plan/user-api-20260503-1000/
384
+
385
+ ## Phase 3: 前端登录页 (pending)
386
+ - **Goal**: 登录页 + 注册页 + 表单校验 + 错误态
387
+ - **Depends on**: Phase 2
388
+
389
+ ## Phase 4: SSO 集成 (opsx://add-google-sso)
390
+ - **Goal**: 接入 Google OAuth 2.0
391
+ - **Depends on**: Phase 3
392
+ - **Note**: 走 OpenSpec 路径,autonomous 调 /ccg:spec-impl
393
+ ```
394
+
395
+ **字段约定**:
396
+ - 状态括号在标题尾部:`(pending|in_progress|completed|failed|skipped)`
397
+ - `Depends on` 缺省值为 `(none)`
398
+ - `Plan` 字段指向该 phase 内 team 产出的 plan 目录
399
+ - `Outcome` 一句话总结,便于下次回顾
400
+ - `opsx://<change-id>` 标记走 OpenSpec 路径
401
+ - `Mode: workflow` + `Job: <job-id>`(milestone 头部):workflow 模式启动时主线批注,`--resume` 恢复时核对
402
+ - `Type: backend|frontend|fullstack|docs|generic`(可选):phase-runner 工作风格路由,缺省 `generic`
403
+ - `Quality: fast|triple|debate`(可选,**仅 legacy 路径生效**):单 phase 覆盖全局 `--quality` flag。例:
404
+ ```markdown
405
+ ## Phase 22: schema migration (pending)
406
+ - **Goal**: 数据库 schema 破坏性变更
407
+ - **Quality**: debate ← 这步用最高档(多轮对辩)
408
+ - **Depends on**: Phase 21
409
+ ```
410
+ 缺省时遵循全局 flag,全局也无时默认 `triple`。详见附录 A Step 4.0a。
411
+
412
+ ---
413
+
414
+ ## 状态文件 `.ccg/state.md` 跨 phase 扩展
415
+
416
+ `.ccg/state.md` 由 team-exec 写、记录 wave 任务进度。autonomous 不重写它,但**容许它带 phase 维度**:每个 phase 启动 team 时,team-exec 在 state.md 顶部加一节:
417
+
418
+ ```markdown
419
+ # CCG Team Execution State
420
+
421
+ **Plan**: .claude/team-plan/user-api-20260503-1000.md
422
+ **Phase**: 2 / 4 (user-auth-system roadmap)
423
+ **Team**: user-api-team
424
+ **Started**: 2026-05-03 10:00
425
+ ...
426
+
427
+ ## Wave 1 (completed)
428
+ - [x] T1: ...
429
+ ```
430
+
431
+ 新增的 `**Phase**:` 行让用户从 state.md 一眼看出当前在 milestone 的哪一步;这是约定,不强制——老 team-exec 不写 Phase 行也兼容。
432
+
433
+ **写入时机分工**:
434
+
435
+ | 文件 | 写入者 | 写入时机 |
436
+ |------|--------|---------|
437
+ | `.ccg/roadmap.md` | autonomous | 每个 phase 进入 in_progress / completed / failed / skipped 时 |
438
+ | `.ccg/state.md` | team-exec | 每个 wave 结束时(与 W2c 行为完全一致) |
439
+ | `.claude/team-plan/<task>-*.md` | team 各阶段 teammate | PRD / 蓝图 / 计划 / 报告产出时 |
440
+ | `.context/jobs/<job-id>/*` | autonomous 主线 + phase-runner | workflow 模式:state.json / workflow.mjs / checkpoints / progress.jsonl / result.md |
441
+
442
+ ---
443
+
444
+ ## 退出报告格式
445
+
446
+ EXEC_QUEUE 全部跑完后(无论全成功还是含失败/跳过),输出 milestone 收尾报告到主对话,**并将精简版追加到 `.ccg/roadmap.md` 末尾的 `## Milestone Summary` 节**。
447
+
448
+ ```markdown
449
+ # 🏁 Milestone Summary: <project name>
450
+
451
+ **Started**: 2026-05-01 09:00
452
+ **Ended**: 2026-05-03 18:42
453
+ **Total Phases**: 4
454
+ **Mode**: workflow
455
+
456
+ ## 执行结果
457
+ | Phase | 名称 | 状态 | 耗时 | 产物 |
458
+ |-------|------|------|------|------|
459
+ | 1 | 数据库 schema | ✅ completed | 2h20 | prisma/schema.prisma + 3 迁移 |
460
+ | 2 | user API | ✅ completed | 3h15 | src/api/auth/* (8 文件) |
461
+ | 3 | 前端登录页 | ⚠️ completed (1 Critical 接受) | 4h10 | src/pages/Login.tsx + Signup.tsx |
462
+ | 4 | SSO 集成 | ❌ failed | 1h30 | (无完整产出) |
463
+
464
+ ## 经验提炼
465
+ - Phase 2 的 token 刷新机制设计值得复用到 Phase 4(被忽略)
466
+ - Phase 3 灰区:表单校验位置(前端/后端/双端),用户选了双端
467
+ - Phase 4 失败原因:Google OAuth callback URL 配置缺失,需 IT 协助
468
+
469
+ ## 未解决项
470
+ - [Critical-3.2] Login 表单未做 rate limit(接受到下一 milestone)
471
+ - [Failure-4] Google SSO 集成阻塞,等 IT 提供 client_id
472
+
473
+ ## 推荐下一步
474
+ 1. 处理 Phase 4 阻塞后重跑:`/ccg:autonomous --resume <job-id>`(或 `--only 4`)
475
+ 2. 创建新 milestone 处理 rate limit 项
476
+ 3. 提交 Phase 1-3 产出:`/ccg:commit`
477
+
478
+ ## 产出物索引
479
+ - PRD: .claude/team-plan/*-prd.md (4 份)
480
+ - 蓝图: .claude/team-plan/*-blueprint.md (4 份)
481
+ - 计划: .claude/team-plan/*-plan.md (4 份)
482
+ - 报告: .claude/team-plan/*-report.md (4 份)
483
+ - 代码变更: 见各 report 的"变更摘要"节
484
+ ```
485
+
486
+ ---
487
+
488
+ ## 与 OpenSpec 协同
489
+
490
+ 如果项目使用 OpenSpec,roadmap.md 的 phase 可以引用 OPSX proposal id:
491
+
492
+ ```markdown
493
+ ## Phase 4: SSO 集成 (opsx://add-google-sso)
494
+ - **Goal**: 接入 Google OAuth 2.0
495
+ - **Depends on**: Phase 3
496
+ ```
497
+
498
+ autonomous 检测到 `opsx://` 前缀时:
499
+ - 不调 `/ccg:team`,改调 `/ccg:spec-impl <change-id>`
500
+ - 由 spec-impl 负责完整的 Plan → Impl → Review → Archive 流程
501
+ - spec-impl 完成后写入 OpenSpec 的归档目录,autonomous 仍在 roadmap.md 写 `completed` + `Plan: openspec/archive/<change-id>/`
502
+ - Critical 处理与失败暂停逻辑与普通 phase 一致
503
+
504
+ 混合 milestone(有 phase 走 team、有 phase 走 spec-impl)受支持,autonomous 按 phase 标题里有无 `opsx://` 自动路由。
505
+
506
+ **⚠ workflow 模式限制**:`opsx://` phase 只能走 legacy 路径(`/ccg:spec-impl` 是命令不是 agent)。含 opsx phase 的队列在 Step 4.1 会提示改 `--legacy` 或拆跑,不会静默跳过。
507
+
508
+ ---
509
+
510
+ ## Exit Criteria
511
+
512
+ - [ ] `.ccg/roadmap.md` 已存在且解析无误
513
+ - [ ] EXEC_QUEUE 中所有 phase 已尝试执行(completed / failed / skipped 状态明确)
514
+ - [ ] 每个 phase 都经 phase-runner(workflow 模式)或 `/ccg:team` / `/ccg:spec-impl`(legacy)间接执行,autonomous 自身未直接 spawn Architect/Dev/QA/Reviewer
515
+ - [ ] roadmap.md 反映最终各 phase 状态
516
+ - [ ] 发生 blocker 时已通过 `AskUserQuestion` 暂停并记录用户决策
517
+ - [ ] Milestone Summary 已输出到主对话并追加到 roadmap.md
518
+ - [ ] 所有 team / state.md 由各 phase 内的 team-exec 自行清理,autonomous 不越权
519
+ - [ ] workflow 模式:`.context/jobs/<job-id>/workflow.mjs` 已落盘且 state.json 含 `workflow_run_id` + `run_mode: 'workflow'`
520
+ - [ ] 发生降级(Workflow 工具不可用 / legacy-only flag / opsx 拆跑)时已向用户明示原因
521
+
522
+ ---
523
+
524
+ ## 附录 A:降级路径——prompt 轮转协议(--legacy / 无 Workflow 工具)
525
+
526
+ 触发条件(满足任一即走本附录,其余场景一律走正文 Step 4 workflow 编排):
527
+ 1. 用户显式给 `--legacy`,或给了仅 legacy 生效的 flag(`--quality` / `--offload` / `--sequential` / `--max-concurrent` / `--nested` / `--interactive`)并确认转 legacy
528
+ 2. 当前会话工具清单不含 `Workflow` 工具(主线已输出降级警告 + 原因)
529
+ 3. EXEC_QUEUE 含 `opsx://` phase 且用户选择整体走 legacy
530
+
531
+ ### Step 4(legacy): Phase 主循环(wave 并行 + 质量档分级)
142
532
 
143
533
  #### 4.0 Ground-Truth 采样
144
534
 
@@ -539,28 +929,34 @@ nested rescue 委派由此路径解锁。
539
929
  路由(由 `src/utils/challenger-orchestrator.ts` 的 `planChallengerSpawns` 决定,
540
930
  本模板只描述 LLM 该做什么):
541
931
 
932
+ > **vendor 挑战走 Bash 直调 helper**:占位符 `{{CODEX_BASH_TASK}}` / `{{GEMINI_BASH_TASK}}`
933
+ > 由 install 渲染为 `node <ccgx-call-plugin.mjs 绝对路径> <vendor> --json`,绕开
934
+ > `Agent→gemini-companion→ACP` 慢路径与 sonnet wrapper silent-fallback;CCG 自家
935
+ > specialist(assumptions-analyzer / nyquist-auditor)仍走 `Agent(...)`(它们是真 subagent)。
936
+
542
937
  | phase Type | spawn 计划(adversarial=true)|
543
938
  |-----------|------------------------------|
544
- | `backend` | `Agent(codex:codex-rescue)` + `Agent(assumptions-analyzer)` |
545
- | `frontend` | `Agent(gemini:gemini-rescue)` + `Agent(nyquist-auditor)` |
546
- | `fullstack`| `Agent(codex:codex-rescue)` + `Agent(gemini:gemini-rescue)` + `Agent(assumptions-analyzer)` + `Agent(nyquist-auditor)` |
939
+ | `backend` | `{{CODEX_BASH_TASK}}`(Bash 直调)+ `Agent(assumptions-analyzer)` |
940
+ | `frontend` | `{{GEMINI_BASH_TASK}}`(Bash 直调)+ `Agent(nyquist-auditor)` |
941
+ | `fullstack`| `{{CODEX_BASH_TASK}}` + `{{GEMINI_BASH_TASK}}`(均 Bash 直调)+ `Agent(assumptions-analyzer)` + `Agent(nyquist-auditor)` |
547
942
  | `docs`/`generic` | `Agent(assumptions-analyzer)` 单兵 |
548
943
 
549
- **plugin 缺失降级**(acceptance d):installer 检测不到 `codex:codex-rescue`
550
- `gemini:gemini-rescue` 命令时,主线只 spawn specialist(CCG 自家 agent,必装),
551
- **不 fallback** 到 codeagent-wrapper(已退役依赖)。
944
+ **plugin 缺失降级**(acceptance d):installer 检测不到 codex / gemini plugin 时,
945
+ 主线只 spawn specialist(CCG 自家 agent,必装),**不 fallback** 到 codeagent-wrapper(已退役依赖)。
552
946
  roadmap.md 备注 `Note: challenger degraded — plugin <name> missing`。
553
947
 
554
- spawn 范式(一个 message 内并行):
948
+ spawn 范式(一个 message 内并行;vendor 用 Bash 直调,specialist 用 Agent):
555
949
 
556
950
  ```
557
- Agent({ subagent_type: "codex:codex-rescue",
558
- description: "Phase <N> challenger (codex)",
559
- prompt: <挑战 phase 改动 + 引用 phase-runner 的 commit sha7> })
951
+ # vendor 挑战:Write tmpfile(含"必须前台执行,禁止 --background / --wait"硬约束 +
952
+ # "角色定义见 ~/.claude/.ccg/prompts/<vendor>/reviewer.md,先 Read 再开始" + 引用 phase-runner commit sha7)
953
+ Bash({ command: `{{CODEX_BASH_TASK}} --prompt-file .context/tmp/ccg-auto-challenge-codex-$JOB.txt`,
954
+ description: "Phase <N> challenger (codex direct)", run_in_background: true })
560
955
  Agent({ subagent_type: "assumptions-analyzer",
561
956
  description: "Phase <N> assumption critic",
562
957
  prompt: <审视 plan 假设、隐藏依赖、未验证前提> })
563
958
  ```
959
+ 主线 Read vendor 挑战 stdout 后 `JSON.parse(stdout).text` 取 FINDINGS;specialist 走 Agent 返回。
564
960
 
565
961
  challenger 摘要协议(每路 ≤200 token):
566
962
 
@@ -595,197 +991,4 @@ nested rescue 委派由此路径解锁。
595
991
  ```
596
992
  - 进入下一 wave。
597
993
 
598
- ### Step 5: Blocker 路径
599
-
600
- 任何 blocker 都通过 `AskUserQuestion` 暂停,向用户报告:
601
-
602
- ```markdown
603
- ⚠️ Autonomous 暂停于 Phase 2
604
-
605
- 原因: <Critical 未修 / 依赖 Phase 1 失败 / API 配额耗尽 / 用户决策点>
606
-
607
- 详情:
608
- <具体内容,含 team 的 report 摘要、错误日志、灰区描述>
609
-
610
- 下一步:
611
- 1. 重试本 phase(重新调 /ccg:team)
612
- 2. 跳过本 phase(标记 skipped,下游依赖 phase 自动 skipped)
613
- 3. 终止 autonomous(保留 roadmap.md 当前进度,下次可续跑)
614
- 4. 我来手动处理(暂停 autonomous,用户处理后回复"继续")
615
- ```
616
-
617
- 用户选择决定后续行为;选 4 时 autonomous 进入挂起态,等用户回到主对话发"继续"信号后从断点恢复。
618
-
619
- ---
620
-
621
- ## 暂停条件 / Blocker 定义
622
-
623
- 必须暂停的场景:
624
-
625
- | 触发 | 描述 |
626
- |------|------|
627
- | Critical 未修 | team 完成 Phase 7 后仍有 Critical,且用户在 team 内选了"接受失败"或修复 2 轮仍失败 |
628
- | 依赖断裂 | 当前 phase 的 `Depends on` 中有 phase 状态为 failed/skipped |
629
- | 灰区接受 | team 在某阶段产出灰区决策(多个合理选项无单一最优解),且未运行 `--interactive` 模式 |
630
- | 测试不可恢复地失败 | Phase 5 测试报告显示核心断言失败且 Phase 7 修复无效 |
631
- | API 配额耗尽 | codeagent-wrapper 多次返回 quota/rate limit 错误 |
632
- | 跨 phase 依赖文件被覆写 | Phase N 修改了 Phase N-1 的产出文件(罕见,靠 team-exec 的文件隔离基本可避免) |
633
- | 用户显式中断 | 用户在主对话发 stop / pause / 取消 |
634
-
635
- ---
636
-
637
- ## 状态文件 `.ccg/roadmap.md` 格式
638
-
639
- autonomous 是 **roadmap.md 的唯一写者**。team-exec 不动它。
640
-
641
- ```markdown
642
- # CCG Project Roadmap
643
-
644
- **Project**: user-auth-system
645
- **Started**: 2026-05-01
646
- **Last Updated**: 2026-05-03 14:30
647
-
648
- ## Phase 1: 数据库 schema 设计 (completed)
649
- - **Goal**: 为 users / sessions / oauth_accounts 设计 schema 与迁移脚本
650
- - **Depends on**: (none)
651
- - **Started**: 2026-05-01 09:00 | **Completed**: 2026-05-01 11:20
652
- - **Plan**: .claude/team-plan/db-schema-20260501-0900/
653
- - **Outcome**: prisma schema 完成,3 张表 + 7 个索引,迁移脚本通过 dry-run
654
-
655
- ## Phase 2: 实现 user API (in_progress)
656
- - **Goal**: 实现 register / login / refresh token / logout 四个 endpoint
657
- - **Depends on**: Phase 1
658
- - **Started**: 2026-05-03 10:00
659
- - **Plan**: .claude/team-plan/user-api-20260503-1000/
660
-
661
- ## Phase 3: 前端登录页 (pending)
662
- - **Goal**: 登录页 + 注册页 + 表单校验 + 错误态
663
- - **Depends on**: Phase 2
664
-
665
- ## Phase 4: SSO 集成 (opsx://add-google-sso)
666
- - **Goal**: 接入 Google OAuth 2.0
667
- - **Depends on**: Phase 3
668
- - **Note**: 走 OpenSpec 路径,autonomous 调 /ccg:spec-impl
669
- ```
670
-
671
- **字段约定**:
672
- - 状态括号在标题尾部:`(pending|in_progress|completed|failed|skipped)`
673
- - `Depends on` 缺省值为 `(none)`
674
- - `Plan` 字段指向该 phase 内 team 产出的 plan 目录
675
- - `Outcome` 一句话总结,便于下次回顾
676
- - `opsx://<change-id>` 标记走 OpenSpec 路径
677
- - `Quality: fast|triple|debate`(可选):单 phase 覆盖全局 `--quality` flag。例:
678
- ```markdown
679
- ## Phase 22: schema migration (pending)
680
- - **Goal**: 数据库 schema 破坏性变更
681
- - **Quality**: debate ← 这步用最高档(多轮对辩)
682
- - **Depends on**: Phase 21
683
- ```
684
- 缺省时遵循全局 flag,全局也无时默认 `triple`。详见 Step 4.0a。
685
-
686
- ---
687
-
688
- ## 状态文件 `.ccg/state.md` 跨 phase 扩展
689
-
690
- `.ccg/state.md` 由 team-exec 写、记录 wave 任务进度。autonomous 不重写它,但**容许它带 phase 维度**:每个 phase 启动 team 时,team-exec 在 state.md 顶部加一节:
691
-
692
- ```markdown
693
- # CCG Team Execution State
694
-
695
- **Plan**: .claude/team-plan/user-api-20260503-1000.md
696
- **Phase**: 2 / 4 (user-auth-system roadmap)
697
- **Team**: user-api-team
698
- **Started**: 2026-05-03 10:00
699
- ...
700
-
701
- ## Wave 1 (completed)
702
- - [x] T1: ...
703
- ```
704
-
705
- 新增的 `**Phase**:` 行让用户从 state.md 一眼看出当前在 milestone 的哪一步;这是约定,不强制——老 team-exec 不写 Phase 行也兼容。
706
-
707
- **写入时机分工**:
708
-
709
- | 文件 | 写入者 | 写入时机 |
710
- |------|--------|---------|
711
- | `.ccg/roadmap.md` | autonomous | 每个 phase 进入 in_progress / completed / failed / skipped 时 |
712
- | `.ccg/state.md` | team-exec | 每个 wave 结束时(与 W2c 行为完全一致) |
713
- | `.claude/team-plan/<task>-*.md` | team 各阶段 teammate | PRD / 蓝图 / 计划 / 报告产出时 |
714
-
715
- ---
716
-
717
- ## 退出报告格式
718
-
719
- EXEC_QUEUE 全部跑完后(无论全成功还是含失败/跳过),输出 milestone 收尾报告到主对话,**并将精简版追加到 `.ccg/roadmap.md` 末尾的 `## Milestone Summary` 节**。
720
-
721
- ```markdown
722
- # 🏁 Milestone Summary: <project name>
723
-
724
- **Started**: 2026-05-01 09:00
725
- **Ended**: 2026-05-03 18:42
726
- **Total Phases**: 4
727
- **Mode**: auto
728
-
729
- ## 执行结果
730
- | Phase | 名称 | 状态 | 耗时 | 产物 |
731
- |-------|------|------|------|------|
732
- | 1 | 数据库 schema | ✅ completed | 2h20 | prisma/schema.prisma + 3 迁移 |
733
- | 2 | user API | ✅ completed | 3h15 | src/api/auth/* (8 文件) |
734
- | 3 | 前端登录页 | ⚠️ completed (1 Critical 接受) | 4h10 | src/pages/Login.tsx + Signup.tsx |
735
- | 4 | SSO 集成 | ❌ failed | 1h30 | (无完整产出) |
736
-
737
- ## 经验提炼
738
- - Phase 2 的 token 刷新机制设计值得复用到 Phase 4(被忽略)
739
- - Phase 3 灰区:表单校验位置(前端/后端/双端),用户选了双端
740
- - Phase 4 失败原因:Google OAuth callback URL 配置缺失,需 IT 协助
741
-
742
- ## 未解决项
743
- - [Critical-3.2] Login 表单未做 rate limit(接受到下一 milestone)
744
- - [Failure-4] Google SSO 集成阻塞,等 IT 提供 client_id
745
-
746
- ## 推荐下一步
747
- 1. 处理 Phase 4 阻塞后重跑:`/ccg:autonomous --only 4`
748
- 2. 创建新 milestone 处理 rate limit 项
749
- 3. 提交 Phase 1-3 产出:`/ccg:commit`
750
-
751
- ## 产出物索引
752
- - PRD: .claude/team-plan/*-prd.md (4 份)
753
- - 蓝图: .claude/team-plan/*-blueprint.md (4 份)
754
- - 计划: .claude/team-plan/*-plan.md (4 份)
755
- - 报告: .claude/team-plan/*-report.md (4 份)
756
- - 代码变更: 见各 report 的"变更摘要"节
757
- ```
758
-
759
- ---
760
-
761
- ## 与 OpenSpec 协同
762
-
763
- 如果项目使用 OpenSpec,roadmap.md 的 phase 可以引用 OPSX proposal id:
764
-
765
- ```markdown
766
- ## Phase 4: SSO 集成 (opsx://add-google-sso)
767
- - **Goal**: 接入 Google OAuth 2.0
768
- - **Depends on**: Phase 3
769
- ```
770
-
771
- autonomous 检测到 `opsx://` 前缀时:
772
- - 不调 `/ccg:team`,改调 `/ccg:spec-impl <change-id>`
773
- - 由 spec-impl 负责完整的 Plan → Impl → Review → Archive 流程
774
- - spec-impl 完成后写入 OpenSpec 的归档目录,autonomous 仍在 roadmap.md 写 `completed` + `Plan: openspec/archive/<change-id>/`
775
- - Critical 处理与失败暂停逻辑与普通 phase 一致
776
-
777
- 混合 milestone(有 phase 走 team、有 phase 走 spec-impl)受支持,autonomous 按 phase 标题里有无 `opsx://` 自动路由。
778
-
779
- ---
780
-
781
- ## Exit Criteria
782
-
783
- - [ ] `.ccg/roadmap.md` 已存在且解析无误
784
- - [ ] EXEC_QUEUE 中所有 phase 已尝试执行(completed / failed / skipped 状态明确)
785
- - [ ] 每个 phase 都通过 `/ccg:team` 或 `/ccg:spec-impl` 间接执行,autonomous 自身未直接 spawn Architect/Dev/QA/Reviewer
786
- - [ ] roadmap.md 反映最终各 phase 状态
787
- - [ ] 发生 blocker 时已通过 `AskUserQuestion` 暂停并记录用户决策
788
- - [ ] Milestone Summary 已输出到主对话并追加到 roadmap.md
789
- - [ ] 所有 team / state.md 由各 phase 内的 team-exec 自行清理,autonomous 不越权
790
-
791
994
  <!-- CCG:AUTONOMOUS:END -->