# 对照笔记:《Graph Engineering with Claude: 14-Step roadmap》vs graphlemon 实际代码 - **对照对象**:[Graph Engineering with Claude_ 14-Step roadmap from 0 to graph architect (Full Course).md](./Graph%20Engineering%20with%20Claude_%2014-Step%20roadmap%20from%200%20to%20graph%20architect%20(Full%20Course).md)(本文简称"14 步版") - **和已有对照的关系**:`docs/graphlemon_architecture.md` §10 在 **2026-07-29(设计阶段,尚未开始实现)** 就对 14 步版做过一轮逐条映射,并在 §10.1 决策"Work Graph 执行层直接复用 Claude Code 原生动态工作流"。当时是设计意图,不是已验证的实现。本笔记的定位不同:**现在全部 43 个 Unit 已实现并自举运行**,所以这次是拿 14 步版去对照 `src/work_graph_orchestrate.py`、`src/work_graph_execute.py`、`src/work_graph_plan.py` 的真实代码,检验当初 §10.1 的设计意图有多少真的落地、有多少在实现过程中被推翻或修正。 - **状态**:讨论草稿,待后续会话继续展开。 - **整理日期**:2026-08-04 --- ## 0. headline:Work Graph 执行层并没有真的用上 Claude 原生 `parallel()`/`pipeline()` 这是本次对照发现的最重要的一条,也是对 §10.1 原决策的一处实质性修正,值得放在最前面单独讲清楚。 `src/work_graph_orchestrate.py` 的模块 docstring 直接写明了这个偏离,是有意为之: > Design: each node's actual work happens via its OWN one-node dynamic workflow script (`write_workflow_script` + `execute_work_graph`), **not one big multi-node script for the whole graph**. This is a deliberate trade-off, not the "amortize orchestration cost across many nodes in one `claude -p` call" pattern 03-C §3.5 originally motivated `execute_work_graph` with — REQ-06's breakpoint-recovery requirement (resume after a process restart without re-running already-`done` nodes) is only achievable with per-node, Python-level persisted state, which is fundamentally incompatible with wrapping the WHOLE graph in one opaque `claude` subprocess call Python has no visibility into mid-flight. 再看 `run_graph()` 的实际实现(`work_graph_orchestrate.py:196-270`): ```python ordered = topological_order(graph_manifest) # Kahn 算法,拒绝有环图 outputs = {} for node in ordered: # 纯 Python 顺序 for 循环 ... run_fn = _make_run_fn(...) # 每个节点单独渲染成一个"单节点"JS 脚本 output = work_node_run.run_work_node(...) # 一次一个节点地跑,串行 outputs[node_id] = output ``` 也就是说: - **graph_manifest 里没有依赖关系的两个节点(本该 fan-out 并行)也是一个跑完再跑下一个**,没有任何线程池/并发调度。14 步版第 5 步 `parallel()` 描述的"N 个独立节点同时起飞"在 graphlemon 现在的执行引擎里完全没有发生。 - 每个节点被单独渲染成一个**只有一次 `agent()` 调用的"单节点"JS 脚本**(`_render_node_script`),再通过 `write_workflow_script` + `execute_work_graph`(一次独立的 `claude -p "Run /