章 05
代码仓库原型
在代理改动任何一行代码之前,它会先做出一个决定,而这个决定将影响此后的一切:**这是什么类型的代码仓库?**它所推断出的原型,界定了它在整个协作过程中的推理边界——它如何接入、计划的覆盖范围有多大,以及状态保存在哪里。判断错误,代理就会把工作范围限定到错误的对象上,这是长周期任务中最常见的漂移根源。判断正确,它就能自主运转数小时,因为计划、接入与状态都与代码的真实形态保持一致。
DWP 识别两种原型。绝大多数代码仓库属于第一种;第二种则为需要协调多个仓库的团队而存在。
独立仓库
一个自包含的代码库
编排中枢
协调子仓库
单一代码仓库
最常见的情形:一个自成一体的代码库——一个应用、一个库或一个服务。只有一个连贯的对象面需要推理,因此计划直接作用于仓库中的代码,接入则读取仓库自身的结构与约定。代理将整个代码库作为其上下文,并对其进行端到端的处理。
特征:
- 单一、连贯的代码库。
- 计划修改本仓库中的文件。
.dwp/工作区位于仓库根目录。
编排枢纽
协调型场景:一个以管理其他代码仓库为职责的仓库。此时的工作单元不是文件,而是子仓库——计划可以在子仓库中派生出子计划,接入则读取枢纽中所管理仓库的登记表,而非单一代码库。代理推理的是边界与交接——哪个仓库负责哪部分工作,以及它们的状态如何保持一致。
特征:
- 协调多个子仓库。
- 计划可以委派给子计划。
- 维护一份所管理仓库的登记表。
- 位于枢纽根目录的
.dwp/工作区追踪跨仓库的状态。
归类判定法则
两种原型在磁盘上呈现出不同的面貌,代理根据它能够核实的信号在二者之间做出判断——而非被告知的标签。下方的决策树展示了判断路径;简而言之,只有在证据确凿时才将仓库视为编排枢纽,否则一律视为单一代码仓库。
独立仓库
- 单一代码库
- 计划修改本地文件
- .dwp/ 位于仓库根目录
编排中心
- 协调子仓库
- 计划委派给子计划
- 跨仓库的 .dwp/ 状态
当代理发现多个嵌套的 git 仓库或子模块、一份所管理仓库的登记表或清单,或指向外部仓库的配置时,就应当把该仓库归类为编排枢纽。在缺乏这些信号的情况下,它会把该仓库当作单一代码仓库来对待——这是安全的默认选择,因为将计划的范围扩展到并不存在的边界之外,比在一个真实存在的边界内工作要糟糕得多。
接入有何不同
原型并非装饰性的标签;它改变了代理读取的内容、计划可以触及的范围,以及状态的记录位置。
| 方面 | 单一 | 编排 |
|---|---|---|
| 范围 | 本仓库 | 多个仓库 |
| 接入 | 仓库结构 | 枢纽登记表 |
| 计划目标 | 本地文件 | 子计划 |
| 状态 | 本地 .dwp/ |
跨仓库 .dwp/ |
其实际效果是:单一仓库代理会对一个代码库进行端到端的推理,而编排代理则对协调本身进行推理——哪个子仓库负责哪部分工作,以及跨仓库的状态如何保持一致。
这正是让代理得以在无人监督下自主工作数小时的关键所在:通过首先确定原型,它把计划、接入与状态界定到正确的边界上,于是代理从第一项任务到最后一项都在正确的对象面上运作。