Skip to content

Latest commit

 

History

History
86 lines (58 loc) · 6.77 KB

File metadata and controls

86 lines (58 loc) · 6.77 KB

Dev - 端到端开发工作流

Dev 是一个端到端开发工作流编排器,覆盖从需求到交付的完整功能实现周期。

┌─────────────────────────────────────────────────────────────────┐
│                      Dev 工作流 (7步)                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   Step 0        Step 1        Step 2        Step 3             │
│   ┌───┐        ┌───┐         ┌───┐         ┌───┐               │
│   │选择│  →   │需求│   →    │分析│   →    │计划│              │
│   │后端│        │澄清│         │调研│         │制定│             │
│   └───┘        └───┘         └───┘         └───┘               │
│                                               │                 │
│                                               ▼ (需用户确认)      │
│   Step 6        Step 5        Step 4        ┌───┐              │
│   ┌───┐        ┌───┐         ┌───┐         │执行│              │
│   │总结│  ←   │验证│   ←    │并行│   ←    │DAG │              │
│   │报告│        │覆盖率│       │执行│         │调度│              │
│   └───┘        └───┘         └───┘         └───┘               │
│                                    code-dispatcher --parallel   │
│                                                                 │
│   硬性规则:所有代码变更必须通过 code-dispatcher 执行           │
│   覆盖率要求: >= 90%                                            │
│   失败重试: 最多2轮                                              │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

设计决策记录

为什么是7步?[DC-1]

整个工作流围绕两个核心目标展开:把需求吃透把后端选择权交给用户

很多 AI 编码工具的失败根源是一样的——需求还没理解清楚就动手。所以 Step 1 强制做 2-3 轮需求澄清,不允许跳过。同时,用户比系统更清楚当前任务适合哪个模型,所以 Step 0 让用户自己决定参与执行的后端组合,而不是系统硬分配。

有了这两个锚点,剩下的步骤自然按"谁来决策"划分:Step 0-1 是人说了算(选后端、定需求),Step 2-3 是 AI 干活人来审(code-dispatcher 做代码调研,用户审开发计划),Step 4-6 全自动跑(并行调度、覆盖率验证、出总结报告)。人工介入点压到最少,但关键决策不跳过。

职责分离:所有变更走 code-dispatcher [DC-2]

主对话(Claude)只负责规划和协调,绝不直接改文件。实际执行全部交给 code-dispatcher。Worker agent 的定位很明确:"execution backend, not the planning layer"——接到任务就跑到底,不中途停下来问问题。

这样做的好处是多层的:三个后端的超时、退出码、日志、进程管理全在 dispatcher 层统一处理;每次执行返回 SESSION_ID,后续可以 resume 复用同一个对话上下文;出了问题有结构化日志能定位到具体任务。规划和执行隔离,两边都不会互相干扰。

后端怎么选?[DC-3]

路由逻辑是按各后端的实际表现定的,不是按理论能力:

任务类型 后端 理由
default codex 干活最细致,复杂逻辑和大规模重构交给它
ui claude 组件、布局、样式、交互交给 claude
quick-fix claude 小修小补要快,claude 响应速度合适
docs claude codex 写文档人机味太重,claude 文风自然得多

每种类型都有自己的 fallback 链,且只在用户允许的后端集合内选择:default 走 codex → claude,uiquick-fixdocs 走 claude → codex。

为什么不是线性执行,而是 DAG?[DC-4]

任务之间天然是有依赖的——先分析才能设计,设计完了才能实现。但同层级内没有依赖的任务完全可以同时跑。DAG 拓扑分层正好解决这个矛盾:层内并行缩短总耗时,层间保序保证正确性。依赖失败时下游自动跳过,不做无用功。

90% 覆盖率的由来 [DC-5]

这个数字不是自定义的,是跟着行业惯例走。常见测试实践会把覆盖率分成几个区间:60% 是及格线,75% 值得表扬,90% 是标杆,同时警告超过 90% 边际收益急剧下降。再往前追溯,80% 这个数字来自帕累托原则(80/20 法则)在测试领域的泛化引用,90% 是它的上浮版本,被大型工程团队的实践共同采用。SonarQube、JaCoCo、Codecov 等工具链也把 90% 作为推荐默认值,进一步固化了这个标准。

本质上,90% 是"核心路径全覆盖"和"边界场景测试成本过高"之间的平衡点。

重试上限:2轮 [DC-6]

快速失败原则的应用。1 轮可能只是偶发问题,多试一次合理;3 轮以上就该停下来让人看了。2 轮是自动重试和人工介入之间的分界线。

超过 2 轮通常说明任务拆分、需求边界或验证方式需要重新判断,不应继续自动重试。

---TASK---/---CONTENT--- 格式 [DC-7]

该格式和 dispatcher 的 stdin 输入一致:---TASK--- 标记任务边界,---CONTENT--- 后面的内容原样交给后端。任务内容可以包含代码、Markdown、JSON/YAML 或 shell 片段,不需要额外转义。

并发模型 [DC-8]

并发调度用的是 Go channel-based worker pool,code-dispatcher 项目的选型。通过 ~/.code-dispatcher/.env 中的 CODE_DISPATCHER_MAX_PARALLEL_WORKERS 控制并发上限(最大100),防止后端 API 被打爆。信号量模式是 Go 里处理这类问题的标准做法。

Session/Resume:为了复用,不是为了容错 [DC-9]

SESSION_ID 机制的核心目的经常被误解。它不是为了处理超时或中断——那些是副作用。真正的目的是复用对话上下文。一个长任务可能分多轮人机交互,resume 让后续指令在同一个对话里继续,不用从零开始、不丢上下文。