@haiyangbg/buildbeat 2.0.1 → 2.0.2

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 (43) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/docs/CAPABILITY-MATRIX.md +2 -2
  3. package/docs/CLI.md +3 -2
  4. package/docs/README.md +3 -1
  5. package/docs/RELEASING.md +1 -1
  6. package/example/.buildbeat/manifest.json +1 -1
  7. package/package.json +14 -1
  8. package/docs/BuildBeat v2/357/274/232AI /345/216/237/347/224/237/350/275/257/344/273/266/344/272/244/344/273/230/346/216/247/345/210/266/345/271/263/351/235/242.md" +0 -2053
  9. package/docs/CLI-PILOT-2026-08-23.md +0 -25
  10. package/docs/CLI-STRATEGY-2026-08.md +0 -55
  11. package/docs/EXECUTION-PLAN.md +0 -487
  12. package/docs/PHASE1-PILOT-2026-08-24.md +0 -32
  13. package/docs/PHASE2-BUILDBEAT-PILOT-2026-08-25.md +0 -75
  14. package/docs/PHASE2-PILOT-2026-08-25.md +0 -88
  15. package/docs/PHASE2-PILOT-PREFLIGHT-2026-08-25.md +0 -42
  16. package/docs/PHASE4-STABILITY-AUDIT-2026-08-25.md +0 -35
  17. package/docs/PHASE4-V1.20-PILOT-2026-08-25.md +0 -56
  18. package/docs/ROADMAP.md +0 -875
  19. package/docs/V1.21-RELEASE-EVIDENCE-2026-08-25.md +0 -55
  20. package/docs/V2-D2-DECISION-CARD.md +0 -37
  21. package/docs/V2-DECISIONS.md +0 -11
  22. package/docs/V2-ITERATION-01.md +0 -60
  23. package/docs/V2-ITERATION-02.md +0 -32
  24. package/docs/V2-ITERATION-03.md +0 -30
  25. package/docs/V2-ITERATION-04.md +0 -29
  26. package/docs/V2-ITERATION-05.md +0 -20
  27. package/docs/V2-ITERATION-06.md +0 -18
  28. package/docs/V2-ITERATION-07.md +0 -36
  29. package/docs/V2-ITERATION-08.md +0 -62
  30. package/docs/V2-PLAN.md +0 -335
  31. package/docs/V2-PROPOSAL.md +0 -319
  32. package/docs/V2.0.0-BETA.1-RELEASE-EVIDENCE-2026-08-28.md +0 -41
  33. package/docs/V2.0.0-BETA.2-RELEASE-EVIDENCE-2026-08-28.md +0 -8
  34. package/docs/V2.0.0-BETA.3-RELEASE-EVIDENCE-2026-09-01.md +0 -8
  35. package/docs/V2.0.0-BETA.4-RELEASE-EVIDENCE-2026-09-03.md +0 -9
  36. package/docs/V2.0.0-BETA.5-RELEASE-EVIDENCE-2026-09-05.md +0 -10
  37. package/docs/V2.0.0-RELEASE-EVIDENCE-2026-09-05.md +0 -11
  38. package/docs/WP4.3-RELEASE-EVIDENCE-2026-08-25.md +0 -73
  39. package/docs/v2/M1-ACCEPTANCE-2026-08-28.md +0 -38
  40. package/docs/v2/M2-DOD-2026-08-28.md +0 -34
  41. package/docs/v2/M4-EXTERNAL-PILOT-2026-08-28.md +0 -46
  42. package/docs/v2/M4-PILOT-APP-2026-08-28.md +0 -44
  43. package/docs/v2/M4-SELFHOST-2026-08-28.md +0 -53
@@ -1,2053 +0,0 @@
1
- # BuildBeat v2:AI 原生软件交付控制平面
2
- ## 产品规划与落地计划书
3
-
4
- **文档状态:** 已被 [`V2-PLAN.md`](V2-PLAN.md) 合并取代;仅作为报告 B 的运行时设计输入,不再单独执行,冲突以 `V2-PLAN.md` 为准
5
- **编制日期:** 2026 年 8 月 27 日
6
- **规划对象:** BuildBeat v2
7
- **核心前提:** 不以 BuildBeat v1 的定位、固定 Gate、文件结构、角色模型和 CLI 边界为约束;从目标、核心模型和运行架构重新设计。本文的 Kernel-first 顺序、无 Spec 默认流、v1 Importer 等主张已被终版裁决改写,不得绕过 `V2-PLAN.md` 直接执行。
8
-
9
- ---
10
-
11
- # 1. 一页结论
12
-
13
- BuildBeat v2 不再被定义为“多 AI 会话之间的文件协作协议与脚手架”,而应升级为:
14
-
15
- > **一个 AI 原生软件交付控制平面。它通过版本化工件、策略化 Gate、可恢复 Agent Loop 和可验证证据,持续推动工作从意图走向交付,并只在需要人类判断时暂停。**
16
-
17
- 其核心运行目标是:
18
-
19
- ```text
20
- 人提出或批准目标
21
- ↓
22
- BuildBeat 自动规划、执行、验证、修复和审查
23
- ↓
24
- 证据不足则继续 Loop
25
- 风险或权限超出策略则暂停
26
- ↓
27
- 最终停在人类必须作出的决定前
28
- ```
29
-
30
- MVP 首先实现:
31
-
32
- ```text
33
- Plan
34
- ↓
35
- Build
36
- ↓
37
- Verify ──失败──→ Fix ──→ Verify
38
- ↓通过
39
- Independent Review
40
- ↓发现问题
41
- Fix ──→ Verify ──→ Review
42
- ↓通过
43
- WAIT_HUMAN:等待合并决定
44
- ```
45
-
46
- BuildBeat v2 的完整产品构成变为:
47
-
48
- ```text
49
- BuildBeat Protocol
50
- + Deterministic Kernel
51
- + Workflow / Policy Engine
52
- + Agent Runner
53
- + Tool Adapters
54
- + Evidence & Event Ledger
55
- ```
56
-
57
- v1 不再继续扩展成 v2,而是进入维护线;v2 使用新的核心模型、配置格式和运行时。
58
-
59
- ---
60
-
61
- # 2. 为什么不能继续在 v1 上增加功能
62
-
63
- ## 2.1 当前 BuildBeat 的真实形态
64
-
65
- 当前 BuildBeat 将自身定义为 file-first、human-gated 的工程交付协议与脚手架,并明确不负责创建 Agent、管理模型或提供运行时编排。
66
-
67
- 当前 CLI 的主要职责是:
68
-
69
- ```text
70
- doctor
71
- init
72
- adopt
73
- upgrade
74
- version
75
- ```
76
-
77
- Gate、状态、证据、ADR 和规范工作流由 Skill、项目文件和脚本维护,CLI 不承担这些运行职责。
78
-
79
- 当前项目还将以下概念固化进核心协议:
80
-
81
- - `NOW → 看板 → contracts → status/evidence`;
82
- - 产品、全栈、测试三个 AI 视角;
83
- - Gate1 需求、Gate2 设计、Gate3 合并、Gate4 上线;
84
- - `pm/status/{视角}.md` 状态分写;
85
- - review-ready 后调用一个独立 reviewer。
86
-
87
- 四个 Gate 目前是看板中的固定机器令牌。
88
- Reviewer 已经具有独立上下文、固定 candidate、只读检查、closure 等合理机制,但它仍是主会话手动触发的单个 Subagent,不构成完整自动 Loop。
89
-
90
- ## 2.2 当前架构无法自然承载的能力
91
-
92
- 在现有结构上继续增加自动 Loop,会遇到以下根本冲突:
93
-
94
- | v1 设计 | v2 自动运行需要 |
95
- |---|---|
96
- | CLI 是可选增强 | Runner 是自动 Loop 的必要组件 |
97
- | 所有关键状态尽量进 Git | 高频运行状态、锁、重试和会话信息需要运行时存储 |
98
- | Gate 是四个阶段令牌 | Gate 应附着在任意状态转换和危险动作上 |
99
- | 产品/全栈/测试是默认视角 | Worker 应按能力和任务动态组合 |
100
- | 人负责打开和接续会话 | 系统应自动调度下一 Worker |
101
- | `status` 记录当前进展 | 当前状态应由事件和状态机派生 |
102
- | reviewer 只在末期启动 | 构建、测试、修复、验证需要持续自动循环 |
103
- | Skill-only 能力不能弱于 CLI | 自动运行能力无法在没有 Runtime 的情况下等价存在 |
104
-
105
- 因此,v2 不是在 v1 上增加几个命令或 Subagent,而是重建产品核心。
106
-
107
- ---
108
-
109
- # 3. 新产品定位
110
-
111
- ## 3.1 产品定义
112
-
113
- > **BuildBeat 是一个模型与工具无关的 AI 原生软件交付控制平面。它读取工作目标和项目策略,调用外部 Agent 或工程工具执行任务,根据证据和 Policy 推进状态,并在风险、权限或判断超出自动化边界时升级给人。**
114
-
115
- ## 3.2 核心输入与输出
116
-
117
- ### 输入
118
-
119
- ```text
120
- 项目仓库
121
- 工作目标
122
- 项目规则与约束
123
- Workflow
124
- Policy
125
- 可用 Worker / Adapter
126
- 预算和权限
127
- ```
128
-
129
- ### 输出
130
-
131
- ```text
132
- 可审查的交付候选
133
- 版本化工件
134
- 测试和验证证据
135
- 完整事件记录
136
- 需要人类处理的最小决策
137
- ```
138
-
139
- ## 3.3 目标用户
140
-
141
- 第一阶段面向:
142
-
143
- - 使用 Claude Code、Codex、Cursor 等 AI Coding 工具的个人开发者;
144
- - 一个开发者同时运行多个 AI Worker 的场景;
145
- - 希望将 Build、Verify、Fix、Review 连成自动闭环的项目;
146
- - 需要保留人类合并和发布权,但不希望人工调度每一个 AI 会话的团队。
147
-
148
- 后续可扩展到:
149
-
150
- - 多人共享的远程 Runner;
151
- - GitHub PR / CI 驱动交付;
152
- - 多仓库和多部署单元;
153
- - 生产异常到修复 PR 的自动闭环。
154
-
155
- ## 3.4 v2 的核心价值
156
-
157
- 1. **人不再充当 Agent 调度器。**
158
- 2. **Agent 不能用自然语言声明替代实际完成证据。**
159
- 3. **低风险步骤自动循环,高风险步骤才请求人类。**
160
- 4. **每次执行可以暂停、恢复、追踪和审计。**
161
- 5. **更换模型或 AI 工具不改变工作协议。**
162
- 6. **审批绑定精确工件和 candidate,不会因后续修改而继续有效。**
163
-
164
- ---
165
-
166
- # 4. 产品边界
167
-
168
- ## 4.1 v2 要做
169
-
170
- - 定义和运行软件交付 Workflow;
171
- - 调度 Planner、Builder、Fixer、Verifier、Reviewer 等 Worker;
172
- - 管理 Agent Loop;
173
- - 建立状态机和事件日志;
174
- - 管理 worktree、分支、candidate 和写入边界;
175
- - 收集实际测试、命令、截图和审查证据;
176
- - 根据 Policy 自动推进、重试、路由或暂停;
177
- - 支持人类批准、拒绝、修改和恢复;
178
- - 提供不同 AI 工具的 Adapter;
179
- - 提供本地优先的完整运行能力。
180
-
181
- ## 4.2 MVP 暂不做
182
-
183
- - 自动合并 PR;
184
- - 自动生产部署;
185
- - 自动接受安全或合规风险;
186
- - 多人账号、RBAC、SSO;
187
- - Web 管理后台;
188
- - 远程多节点调度;
189
- - 自研大模型或模型路由平台;
190
- - Agent Marketplace;
191
- - 多项目效能排行榜;
192
- - 无限自主运行;
193
- - 完整的生产 Incident 自动修复;
194
- - 多仓事务式原子提交。
195
-
196
- ---
197
-
198
- # 5. 核心设计原则
199
-
200
- ## 5.1 Kernel 决策,Worker 执行
201
-
202
- BuildBeat Kernel 负责:
203
-
204
- ```text
205
- 状态
206
- Workflow
207
- Policy
208
- 权限
209
- 调度
210
- 重试
211
- 预算
212
- 证据要求
213
- 事件记录
214
- ```
215
-
216
- Worker 负责:
217
-
218
- ```text
219
- 计划
220
- 编码
221
- 修复
222
- 验证
223
- 审查
224
- ```
225
-
226
- Worker 可以提出建议,但不能自行决定是否进入下一状态。
227
-
228
- ---
229
-
230
- ## 5.2 Artifact-first,而不是 Status-first
231
-
232
- 系统不再围绕“某个会话做到哪一步”工作,而是围绕版本化工件工作:
233
-
234
- ```text
235
- Intent
236
- Spec
237
- Plan
238
- Patch / Candidate
239
- Evidence
240
- Review Findings
241
- Decision
242
- Release Record
243
- ```
244
-
245
- 下一个 Worker 只依赖被接受的工件,不依赖上一个聊天窗口。
246
-
247
- ---
248
-
249
- ## 5.3 Gate 是 Policy 结果,不是固定阶段
250
-
251
- 不再将 Gate1–Gate4 写死在核心模型中。
252
-
253
- Gate 是:
254
-
255
- > **针对某一次状态转换或危险动作执行的一组 Policy。**
256
-
257
- 例如:
258
-
259
- ```text
260
- plan → build
261
- verify → review
262
- review → ready-to-merge
263
- staging → production
264
- incident → rollback
265
- ```
266
-
267
- ---
268
-
269
- ## 5.4 人类是升级目标,不是默认调度器
270
-
271
- 系统应尽量自动推进,只在以下情况暂停:
272
-
273
- - 产品或方案存在真实取舍;
274
- - 修改超出已批准范围;
275
- - 需要接受安全或合规风险;
276
- - 涉及合并、发布或不可逆外部动作;
277
- - 证据不足;
278
- - 多次重试仍无进展;
279
- - 权威事实冲突;
280
- - 预算或权限不足。
281
-
282
- ---
283
-
284
- ## 5.5 验证结果必须来自实际执行
285
-
286
- 测试是否通过,应由 Runner 记录真实命令结果,而不是相信 Worker 的描述。
287
-
288
- 同理:
289
-
290
- - candidate 由 Git 回读;
291
- - 工作树状态由 Git 回读;
292
- - 测试结果由进程退出码和报告回读;
293
- - 截图由实际渲染生成;
294
- - Approval 绑定工件摘要;
295
- - 外部状态无法回读时必须标记 `UNVERIFIED`。
296
-
297
- ---
298
-
299
- ## 5.6 运行必须可恢复
300
-
301
- 任何 Run 都必须能够:
302
-
303
- ```text
304
- 暂停
305
- 进程异常退出
306
- 重新启动 BuildBeat
307
- 读取事件记录
308
- 恢复到最近一个安全状态
309
- 继续执行
310
- ```
311
-
312
- 不能依赖某个 AI 会话仍然存在。
313
-
314
- ---
315
-
316
- ## 5.7 自动化必须有上限
317
-
318
- 所有 Loop 都必须具有:
319
-
320
- ```text
321
- 最大尝试次数
322
- 最大运行时间
323
- 最大成本或 Token 预算
324
- 连续相同失败检测
325
- 无进展检测
326
- 范围漂移检测
327
- 人类升级条件
328
- ```
329
-
330
- ---
331
-
332
- ## 5.8 本地优先,远程可扩展
333
-
334
- MVP 先实现本地前台 Runner,但核心接口必须允许后续接入:
335
-
336
- - GitHub Actions;
337
- - 自托管 Runner;
338
- - 远程事件存储;
339
- - 团队共享控制面;
340
- - Web UI。
341
-
342
- ---
343
-
344
- # 6. 新核心模型
345
-
346
- ## 6.1 核心实体
347
-
348
- | 实体 | 定义 |
349
- |---|---|
350
- | **Project** | 项目配置、仓库、Workflow、Policy 和 Adapter 集合 |
351
- | **Work** | 一个要达成的用户级结果,生命周期可跨多个 Run |
352
- | **Run** | 对一个 Work 的一次具体执行,可失败、重试或被替代 |
353
- | **Workflow** | Step、Transition 和默认执行顺序的声明 |
354
- | **Step** | 一次可调度执行单元,例如 plan、build、verify |
355
- | **Worker** | 具有某种能力的逻辑执行者,例如 builder、reviewer |
356
- | **Adapter** | 将 Worker 映射到 Claude、Codex、Shell 或其他执行环境 |
357
- | **Artifact** | Worker 产生或消费的版本化工件 |
358
- | **Evidence** | 对某个声明进行证明的机器或人工证据 |
359
- | **Policy** | 判断某次转换或动作是否允许的规则 |
360
- | **Decision** | 人类对精确工件或状态转换作出的决定 |
361
- | **Event** | Run 中发生的不可变事实记录 |
362
- | **Workspace** | 某个 Worker 实际工作的隔离目录、分支或 worktree |
363
-
364
- ---
365
-
366
- ## 6.2 Work 与 Run 的区别
367
-
368
- ### Work
369
-
370
- 表示长期目标:
371
-
372
- ```text
373
- 修复支付回调重复入账
374
- 增加订单导出功能
375
- 迁移鉴权服务
376
- ```
377
-
378
- ### Run
379
-
380
- 表示一次执行:
381
-
382
- ```text
383
- RUN-001:第一次自动实现,验证失败
384
- RUN-002:根据新计划重新执行
385
- ```
386
-
387
- 一个 Work 可以对应多个 Run,但只有一个最终 accepted candidate。
388
-
389
- ---
390
-
391
- ## 6.3 状态模型
392
-
393
- ### Work 状态
394
-
395
- ```text
396
- OPEN
397
- COMPLETED
398
- CANCELLED
399
- ```
400
-
401
- ### Run 状态
402
-
403
- ```text
404
- CREATED
405
- QUEUED
406
- RUNNING
407
- WAITING_HUMAN
408
- BLOCKED
409
- SUCCEEDED
410
- FAILED
411
- CANCELLED
412
- SUPERSEDED
413
- ```
414
-
415
- ### Step 状态
416
-
417
- ```text
418
- PENDING
419
- READY
420
- RUNNING
421
- SUCCEEDED
422
- FAILED
423
- SKIPPED
424
- CANCELLED
425
- ```
426
-
427
- 核心状态机只识别通用运行状态;`plan`、`build`、`review` 等业务阶段由 Workflow 定义,不写死进 Kernel。
428
-
429
- ---
430
-
431
- ## 6.4 Gate 统一结果
432
-
433
- ```text
434
- PASS
435
- RETRY
436
- ROUTE
437
- WAIT_HUMAN
438
- BLOCK
439
- UNVERIFIED
440
- ```
441
-
442
- | 结果 | 行为 |
443
- |---|---|
444
- | `PASS` | 进入下一 Step |
445
- | `RETRY` | 重新运行当前 Step 或指定修复 Step |
446
- | `ROUTE` | 转交给另一 Worker |
447
- | `WAIT_HUMAN` | 持久化状态并暂停 |
448
- | `BLOCK` | 确定性终止当前转换 |
449
- | `UNVERIFIED` | 无法安全判断,按 Policy 升级、补证或暂停 |
450
-
451
- `UNVERIFIED` 绝不能被隐式当成 `PASS`。
452
-
453
- ---
454
-
455
- # 7. 总体架构
456
-
457
- ```mermaid
458
- flowchart TB
459
- Trigger["用户 / Git / CI / 外部事件"] --> API["CLI / API"]
460
-
461
- API --> Orchestrator["Orchestrator<br/>Loop Controller"]
462
- Orchestrator --> Workflow["Workflow Engine"]
463
- Orchestrator --> Policy["Policy Engine"]
464
- Orchestrator --> Scheduler["Scheduler"]
465
- Orchestrator --> Store["Event Store + State Snapshot"]
466
-
467
- Scheduler --> Runner["Worker Runner"]
468
- Runner --> Adapter["Agent / Tool Adapter"]
469
- Adapter --> Worker["Claude / Codex / Shell / Human Worker"]
470
-
471
- Runner --> Workspace["Workspace Manager<br/>Git Branch / Worktree"]
472
- Runner --> Evidence["Evidence Collector"]
473
- Evidence --> Store
474
-
475
- Policy --> Human["Human Decision"]
476
- Human --> Orchestrator
477
-
478
- Workspace --> Git["Git Repository / PR"]
479
- Evidence --> Artifacts["Artifacts / Reports / Screenshots"]
480
- ```
481
-
482
- ---
483
-
484
- ## 7.1 Deterministic Kernel
485
-
486
- Kernel 必须保持确定性,包含:
487
-
488
- - Workflow 解析;
489
- - 状态迁移;
490
- - Policy 组合;
491
- - Event reducer;
492
- - Retry 和 Budget;
493
- - 锁和并发控制;
494
- - Approval 有效性;
495
- - Candidate 身份;
496
- - Evidence 完整性;
497
- - Run 恢复。
498
-
499
- Kernel 不解释自然语言,不自行做产品判断。
500
-
501
- ---
502
-
503
- ## 7.2 Orchestrator
504
-
505
- Orchestrator 是自动 Loop 的控制器,负责:
506
-
507
- 1. 读取当前 Run 状态;
508
- 2. 找到下一个可运行 Step;
509
- 3. 运行前置 Policy;
510
- 4. 分配 Workspace;
511
- 5. 调用 Worker Runner;
512
- 6. 收集结果和证据;
513
- 7. 运行后置 Policy;
514
- 8. 决定转换、重试、路由或暂停;
515
- 9. 将全部事件写入 Ledger。
516
-
517
- ---
518
-
519
- ## 7.3 Worker Runner
520
-
521
- Runner 负责执行 Worker:
522
-
523
- - 准备上下文;
524
- - 固定输入工件版本;
525
- - 设置允许写入的路径;
526
- - 设置预算、超时和环境变量;
527
- - 启动 Adapter;
528
- - 捕获标准输出、错误输出和退出状态;
529
- - 收集 Worker 结果;
530
- - 终止超时或越权执行。
531
-
532
- ---
533
-
534
- ## 7.4 Adapter
535
-
536
- MVP 首先提供:
537
-
538
- 1. **Mock Adapter**
539
- 用于状态机、错误和恢复测试。
540
-
541
- 2. **Shell Adapter**
542
- 执行配置化命令,可接入任意支持 CLI 的 Agent 工具。
543
-
544
- 3. **Manual Adapter**
545
- 允许人或外部工具手动完成 Step,再由 BuildBeat 继续推进。
546
-
547
- 第一个专用 AI Adapter 在 Shell Loop 跑通后再选择,不提前绑定 Claude 或 Codex。
548
-
549
- ---
550
-
551
- ## 7.5 Workspace Manager
552
-
553
- MVP 默认每个 Run 使用独立 worktree:
554
-
555
- ```text
556
- .buildbeat/worktrees/<run-id>/
557
- ```
558
-
559
- 职责包括:
560
-
561
- - 创建分支和 worktree;
562
- - 检查基线 commit;
563
- - 防止多个 Run 写同一 Workspace;
564
- - 固定 candidate;
565
- - 检测未提交修改;
566
- - 回收失败 Workspace;
567
- - 保留必要调试现场。
568
-
569
- 第一版只支持:
570
-
571
- ```text
572
- 一个 Project
573
- 一个 Repository
574
- 一个活动 Run
575
- ```
576
-
577
- 多仓和同项目多 Run 并发在后续阶段开放。
578
-
579
- ---
580
-
581
- # 8. 默认软件交付 Workflow
582
-
583
- 核心引擎不写死阶段,但提供一个官方默认 Preset:
584
-
585
- ```mermaid
586
- flowchart LR
587
- I["Intent"] --> P["Plan"]
588
- P --> PA{"Plan Policy"}
589
- PA -->|PASS| B["Build"]
590
- PA -->|WAIT_HUMAN| HP["等待 Plan 批准"]
591
-
592
- HP --> B
593
- B --> V["Verify"]
594
-
595
- V -->|失败| F["Fix"]
596
- F --> V
597
-
598
- V -->|通过| R["Independent Review"]
599
- R -->|P0/P1| F
600
- R -->|通过| HM["等待合并决定"]
601
-
602
- HM --> C["Complete / External Merge"]
603
- ```
604
-
605
- ## 8.1 默认执行规则
606
-
607
- ### Intent
608
-
609
- 明确:
610
-
611
- - 为什么做;
612
- - 目标;
613
- - 非目标;
614
- - 范围;
615
- - 约束;
616
- - 验收条件。
617
-
618
- ### Plan
619
-
620
- 明确:
621
-
622
- - 修改范围;
623
- - 实现顺序;
624
- - 契约或数据变化;
625
- - 风险;
626
- - 测试方法;
627
- - 回滚方式。
628
-
629
- ### Build
630
-
631
- Builder 只能修改 Workflow 授权的 Workspace 和路径。
632
-
633
- ### Verify
634
-
635
- 确定性运行:
636
-
637
- - build;
638
- - lint;
639
- - unit test;
640
- - integration test;
641
- - 项目声明的其他检查。
642
-
643
- ### Fix
644
-
645
- Fixer 输入必须包括:
646
-
647
- - 失败命令;
648
- - 退出码;
649
- - 日志摘要;
650
- - candidate;
651
- - 允许修改的范围。
652
-
653
- ### Independent Review
654
-
655
- Reviewer:
656
-
657
- - 使用 fresh context;
658
- - 默认只读;
659
- - 不允许修改代码;
660
- - 对照 Intent、Plan、Diff 和 Evidence;
661
- - 产生结构化 findings。
662
-
663
- ### Merge Decision
664
-
665
- MVP 到此暂停,不自动合并。
666
-
667
- ---
668
-
669
- # 9. 三种 Loop
670
-
671
- ## 9.1 Step 内反馈 Loop
672
-
673
- ```text
674
- Worker 修改
675
- → 运行快速检查
676
- → 失败
677
- → Worker 继续修
678
- ```
679
-
680
- 由 Adapter 或 Worker 内部完成,但仍受预算和超时限制。
681
-
682
- ## 9.2 Workflow 交付 Loop
683
-
684
- ```text
685
- Build
686
- → Verify
687
- → Fix
688
- → Verify
689
- → Review
690
- → Fix
691
- → Verify
692
- → Review
693
- ```
694
-
695
- 这是 v2 MVP 的重点,由 Orchestrator 控制。
696
-
697
- ## 9.3 生命周期 Loop
698
-
699
- ```text
700
- 生产异常
701
- → Intent
702
- → Plan
703
- → Build
704
- → Verify
705
- → Review
706
- → Release
707
- → 生产验证
708
- ```
709
-
710
- 该能力作为后续版本目标,不进入 MVP。
711
-
712
- ---
713
-
714
- # 10. Loop 终止和升级条件
715
-
716
- 以下任一情况发生时,自动 Loop 必须停止:
717
-
718
- | 条件 | 处理 |
719
- |---|---|
720
- | 达到最大修复次数 | `WAIT_HUMAN` |
721
- | 连续两次出现相同失败指纹 | `WAIT_HUMAN` |
722
- | Candidate 无实质变化 | 判定无进展 |
723
- | Worker 修改超出 Scope | `BLOCK` |
724
- | 计划需要改变 | 返回 Plan Step 或请求人类 |
725
- | 发现新的高风险语义 | 路由安全 Reviewer 或人类 |
726
- | Token、时间或费用超预算 | `WAIT_HUMAN` |
727
- | Workspace 不干净或锁冲突 | `BLOCK` |
728
- | 证据收集不完整 | `UNVERIFIED` |
729
- | Adapter 不支持必要的强制能力 | 降级或阻断 |
730
- | 人类拒绝继续 | `CANCELLED` |
731
-
732
- 建议 MVP 默认:
733
-
734
- ```text
735
- build/fix 最大尝试:4
736
- review 修复轮次:2
737
- 连续相同失败:2
738
- 单 Step 超时:项目配置
739
- 总 Run 预算:项目配置
740
- ```
741
-
742
- ---
743
-
744
- # 11. Gate 与 Policy 重构
745
-
746
- ## 11.1 删除固定 Gate1–Gate4
747
-
748
- 固定四 Gate 不再属于核心协议。
749
-
750
- 它们可以作为迁移 Preset:
751
-
752
- ```text
753
- legacy-four-gates
754
- ```
755
-
756
- 但新 Workflow 可以没有设计 Gate,也可以拥有安全、数据迁移、发布窗口等更多 Gate。
757
-
758
- ---
759
-
760
- ## 11.2 四类 Policy
761
-
762
- ### 前置 Policy
763
-
764
- 判断某 Step 是否可以启动:
765
-
766
- ```text
767
- Plan 是否已接受
768
- Workspace 是否干净
769
- 依赖工件是否齐全
770
- 预算是否充足
771
- ```
772
-
773
- ### 后置 Policy
774
-
775
- 判断 Step 是否真正完成:
776
-
777
- ```text
778
- 测试是否通过
779
- Evidence 是否齐全
780
- Artifact 是否产生
781
- Candidate 是否固定
782
- ```
783
-
784
- ### 转换 Policy
785
-
786
- 决定下一状态:
787
-
788
- ```text
789
- Verify 失败 → Fix
790
- Review P1 → Fix
791
- Review 通过 → WAIT_HUMAN
792
- ```
793
-
794
- ### Action Policy
795
-
796
- 约束 Worker 内部危险动作:
797
-
798
- ```text
799
- merge
800
- push
801
- deploy
802
- publish
803
- migration
804
- 删除远端资源
805
- 修改生产配置
806
- ```
807
-
808
- ---
809
-
810
- ## 11.3 Human Approval 必须绑定精确对象
811
-
812
- Approval 不再是:
813
-
814
- ```text
815
- Gate3: passed
816
- ```
817
-
818
- 而是:
819
-
820
- ```yaml
821
- decision: approved
822
- transition: review-to-ready-for-merge
823
- subject:
824
- candidate: 7f3a12c
825
- planDigest: sha256:...
826
- evidenceDigest: sha256:...
827
- approvedBy: human
828
- approvedAt: 2026-08-27T...
829
- ```
830
-
831
- 只要 candidate、Plan 或必要 Evidence 发生变化,Approval 自动失效:
832
-
833
- ```text
834
- APPROVAL_STALE
835
- ```
836
-
837
- ---
838
-
839
- ## 11.4 强制等级
840
-
841
- 每条 Policy 都应声明强制等级:
842
-
843
- | 等级 | 含义 |
844
- |---|---|
845
- | `ADVISORY` | 通过 Prompt 或规则提示 Worker |
846
- | `LOCAL_ENFORCED` | 由本地 Runner、Hook 或 Workspace 权限阻断 |
847
- | `SERVER_ENFORCED` | 由 Branch Protection、CI 或部署平台阻断 |
848
-
849
- MVP 不得宣称所有规则都被强制执行。Adapter 不支持确定性限制时,必须显示实际强制等级。
850
-
851
- ---
852
-
853
- # 12. Worker 与 Adapter 合同
854
-
855
- ## 12.1 Worker 输入
856
-
857
- ```text
858
- Project ID
859
- Work ID
860
- Run ID
861
- Step ID
862
- Objective
863
- Scope
864
- Base commit
865
- Candidate commit
866
- 输入 Artifact
867
- 项目规则
868
- 允许工具
869
- 允许写入路径
870
- 预算
871
- 超时
872
- 前序 Evidence
873
- ```
874
-
875
- ## 12.2 Worker 输出
876
-
877
- ```yaml
878
- status: succeeded | failed | blocked
879
- summary: ...
880
- artifacts:
881
- - kind: plan
882
- path: delivery/work/WORK-001/plan.md
883
- changes:
884
- base: abc1234
885
- candidate: def5678
886
- evidence:
887
- - kind: test
888
- ref: ...
889
- findings: []
890
- suggestedAction: verify
891
- ```
892
-
893
- `suggestedAction` 只是一项建议。真正的下一状态由 Kernel 和 Policy 决定。
894
-
895
- ---
896
-
897
- # 13. Evidence Contract
898
-
899
- 每份证据至少包含:
900
-
901
- | 字段 | 含义 |
902
- |---|---|
903
- | `kind` | test、build、review、screenshot、deployment 等 |
904
- | `subject` | 所证明的 Artifact 或 candidate |
905
- | `producer` | Runner、Worker、外部系统或人 |
906
- | `command` | 实际执行命令,适用时 |
907
- | `exitCode` | 实际退出码 |
908
- | `startedAt` / `finishedAt` | 执行时间 |
909
- | `digest` | 证据内容摘要 |
910
- | `location` | 本地路径或外部权威引用 |
911
- | `coverage` | 已覆盖和未覆盖范围 |
912
- | `status` | passed、failed、unverified |
913
- | `adapter` | 证据来源 Adapter |
914
-
915
- Worker 的自然语言总结不能单独作为测试通过证据。
916
-
917
- ---
918
-
919
- # 14. 存储设计
920
-
921
- ## 14.1 双平面存储
922
-
923
- ### Git 中保存
924
-
925
- - Workflow;
926
- - Policy;
927
- - Worker 定义;
928
- - 项目标准;
929
- - Intent、Spec、Plan;
930
- - accepted candidate 引用;
931
- - Review 报告;
932
- - Human Decision;
933
- - 需要长期保存的 Evidence manifest;
934
- - Work 最终摘要。
935
-
936
- ### 本地 Runtime 保存
937
-
938
- - 当前 Run 状态;
939
- - Step 执行状态;
940
- - Agent 进程和 session 信息;
941
- - 锁;
942
- - 重试次数;
943
- - Budget;
944
- - 临时日志;
945
- - 未完成事件;
946
- - Workspace 元数据。
947
-
948
- ---
949
-
950
- ## 14.2 MVP Runtime 格式
951
-
952
- MVP 不先引入数据库服务,采用:
953
-
954
- ```text
955
- append-only events.jsonl
956
- + atomic state snapshot
957
- + lock directory
958
- ```
959
-
960
- 目录建议:
961
-
962
- ```text
963
- .buildbeat/runtime/
964
- ├── events.jsonl
965
- ├── state.json
966
- ├── locks/
967
- ├── sessions/
968
- └── logs/
969
- ```
970
-
971
- 该目录默认进入 `.gitignore`。
972
-
973
- 状态必须可以完全由 Event Ledger 重建。`state.json` 只是加速快照,不是唯一真相源。
974
-
975
- 后续通过 `StateStore` 接口增加 SQLite 或远程存储。
976
-
977
- ---
978
-
979
- # 15. 新项目目录
980
-
981
- ```text
982
- <project>/
983
- ├── AGENTS.md
984
- ├── standards/
985
- │ ├── STACK.md
986
- │ ├── CODE.md
987
- │ ├── REVIEW.md
988
- │ └── DESIGN.md
989
- ├── .buildbeat/
990
- │ ├── project.yaml
991
- │ ├── workflows/
992
- │ │ └── software-delivery.yaml
993
- │ ├── policies/
994
- │ │ ├── default.yaml
995
- │ │ └── protected-actions.yaml
996
- │ ├── workers/
997
- │ │ ├── planner.yaml
998
- │ │ ├── builder.yaml
999
- │ │ ├── fixer.yaml
1000
- │ │ ├── verifier.yaml
1001
- │ │ └── reviewer.yaml
1002
- │ ├── adapters/
1003
- │ │ └── shell.yaml
1004
- │ └── runtime/ # gitignored
1005
- └── delivery/
1006
- └── work/
1007
- └── WORK-001/
1008
- ├── work.yaml
1009
- ├── intent.md
1010
- ├── spec.md
1011
- ├── plan.md
1012
- ├── decisions.jsonl
1013
- ├── reviews/
1014
- ├── evidence/
1015
- └── summary.md
1016
- ```
1017
-
1018
- ## 15.1 `AGENTS.md` 的新职责
1019
-
1020
- `AGENTS.md` 继续承担项目级 AI 规则入口,但不再保存:
1021
-
1022
- - 当前工作包状态;
1023
- - 调度顺序;
1024
- - Gate 状态;
1025
- - Agent handoff;
1026
- - Run 状态。
1027
-
1028
- Adapter 应显式将当前 Work、Artifact 和 Scope 传给 Worker,不再依赖工具是否自动加载某个文件。
1029
-
1030
- ---
1031
-
1032
- # 16. CLI 规划
1033
-
1034
- ## 16.1 项目与环境
1035
-
1036
- ```bash
1037
- buildbeat init
1038
- buildbeat doctor
1039
- buildbeat workflow validate
1040
- buildbeat adapter list
1041
- buildbeat adapter doctor
1042
- ```
1043
-
1044
- ## 16.2 Work
1045
-
1046
- ```bash
1047
- buildbeat work create
1048
- buildbeat work list
1049
- buildbeat work show WORK-001
1050
- buildbeat work close WORK-001
1051
- ```
1052
-
1053
- ## 16.3 Run
1054
-
1055
- ```bash
1056
- buildbeat run start WORK-001
1057
- buildbeat run status RUN-001
1058
- buildbeat run inspect RUN-001
1059
- buildbeat run resume RUN-001
1060
- buildbeat run retry RUN-001
1061
- buildbeat run stop RUN-001
1062
- ```
1063
-
1064
- ## 16.4 人类决定
1065
-
1066
- ```bash
1067
- buildbeat approve RUN-001 --transition plan-to-build
1068
- buildbeat reject RUN-001 --transition plan-to-build
1069
- buildbeat approve RUN-001 --transition review-to-ready-for-merge
1070
- ```
1071
-
1072
- 命令执行前必须展示:
1073
-
1074
- - 当前状态;
1075
- - 将批准的精确对象;
1076
- - candidate;
1077
- - Evidence;
1078
- - 风险;
1079
- - 批准后将发生的动作。
1080
-
1081
- ## 16.5 调试和审计
1082
-
1083
- ```bash
1084
- buildbeat events RUN-001
1085
- buildbeat evidence RUN-001
1086
- buildbeat explain RUN-001
1087
- buildbeat replay RUN-001 --dry-run
1088
- ```
1089
-
1090
- ---
1091
-
1092
- # 17. v1 概念迁移
1093
-
1094
- ## 17.1 保留、转换和删除
1095
-
1096
- | v1 概念 | v2 处理 |
1097
- |---|---|
1098
- | Evidence-based completion | 保留并升级为 Evidence Contract |
1099
- | 独立 reviewer | 保留并升级为标准 Worker |
1100
- | fail-closed / unverified | 保留 |
1101
- | Git 版本化事实 | 保留,但不承载全部运行时状态 |
1102
- | `AGENTS.md` | 保留为项目规则入口 |
1103
- | `STACK/CODE/REVIEW/DESIGN` | 保留为 Policy 输入工件 |
1104
- | 固定 Gate1–Gate4 | 从核心删除,作为 Legacy Preset |
1105
- | 产品/全栈/测试视角 | 从核心删除,转换为可选 Worker Preset |
1106
- | `NOW.md` | 删除为必需入口,可提供生成式兼容视图 |
1107
- | 当期看板 | 不再是状态权威,可转换为 Work 列表视图 |
1108
- | `pm/status/{视角}.md` | 删除为核心状态源 |
1109
- | `pm/changes/` | 转换为 Work + Artifact |
1110
- | `decisions.md` | 转换为 Decision Event 和导出视图 |
1111
- | `bus-check.sh` | 拆为确定性 Evidence Provider 和 Policy Check |
1112
- | `verify-status.sh` | 转换为 Verify Provider |
1113
- | `drift-check.sh` | 转换为 Runtime / Production Evidence Provider |
1114
- | CLI 不调用 Agent | 修改为 Kernel 确定性、Runner 可调用外部 Agent |
1115
- | Skill-only 完整等价 | 取消;手工模式是降级兼容,不承诺自动能力等价 |
1116
-
1117
- ---
1118
-
1119
- ## 17.2 运行模式变化
1120
-
1121
- ### v1
1122
-
1123
- ```text
1124
- Skill-only 是完整模式
1125
- CLI 是可选增强
1126
- ```
1127
-
1128
- ### v2
1129
-
1130
- ```text
1131
- Runtime Mode:
1132
- 完整自动 Loop,需要 BuildBeat Runner
1133
-
1134
- Manual Mode:
1135
- 文件和 Workflow 仍可人工执行,
1136
- 但不具备自动调度、重试和恢复能力
1137
- ```
1138
-
1139
- Manual Mode 是兼容和故障降级能力,不再与 Runtime Mode 功能等价。
1140
-
1141
- ---
1142
-
1143
- # 18. v1 与 v2 发布策略
1144
-
1145
- ## 18.1 版本线
1146
-
1147
- - `1.x`:维护线,只修安全问题和严重缺陷;
1148
- - `2.0.0-alpha`:核心模型和本地 Runner;
1149
- - `2.0.0-beta`:真实 Agent Loop 和迁移试点;
1150
- - `2.0.0`:完成规定的真实项目验收后发布。
1151
-
1152
- 当前项目已经有较完整的 v1 CLI、模板和测试资产,应保留作为稳定基线,不在同一主干中边维护旧协议边重写全部语义。当前源码主要集中在 CLI、项目扫描、规划、写入和升级模块,可在代码审计后选择性复用底层工具,但不沿用其领域模型。
1153
-
1154
- ## 18.2 分支建议
1155
-
1156
- ```text
1157
- v1-maintenance
1158
- 维护 1.x
1159
-
1160
- v2
1161
- v2 开发和试点
1162
-
1163
- main
1164
- 在 v2 达到 Beta 退出条件后切换
1165
- ```
1166
-
1167
- npm 使用:
1168
-
1169
- ```text
1170
- latest → 稳定 v1
1171
- next → v2 alpha/beta
1172
- ```
1173
-
1174
- 在 v2 Beta 前不让 `latest` 自动指向新架构。
1175
-
1176
- ---
1177
-
1178
- # 19. v2 MVP 范围
1179
-
1180
- ## 19.1 MVP 必须具备
1181
-
1182
- 1. 一个项目、一个仓库、一个活动 Run;
1183
- 2. Workflow 加载和校验;
1184
- 3. Policy Engine;
1185
- 4. Event Ledger 和恢复;
1186
- 5. Mock Adapter;
1187
- 6. Shell Adapter;
1188
- 7. worktree 隔离;
1189
- 8. Builder、Fixer、Verifier、Reviewer Worker 合同;
1190
- 9. Build–Verify–Fix 自动 Loop;
1191
- 10. Review–Fix–Verify 自动 Loop;
1192
- 11. Retry、Budget、Timeout、无进展检测;
1193
- 12. Human Approval;
1194
- 13. Approval stale 检测;
1195
- 14. Evidence manifest;
1196
- 15. `run start/status/inspect/resume/stop`;
1197
- 16. 前台运行;
1198
- 17. 最终停在合并批准前。
1199
-
1200
- ## 19.2 MVP 明确不具备
1201
-
1202
- - 多仓;
1203
- - 多 Run 并发;
1204
- - 后台 daemon;
1205
- - Web UI;
1206
- - 自动 PR 合并;
1207
- - 自动部署;
1208
- - 远程团队共享;
1209
- - Agent Marketplace;
1210
- - 自动动态生成任意 Workflow;
1211
- - 生产 Incident Loop。
1212
-
1213
- ---
1214
-
1215
- # 20. MVP Definition of Done
1216
-
1217
- 在一个真实 Git 项目中,执行:
1218
-
1219
- ```bash
1220
- buildbeat run start WORK-001
1221
- ```
1222
-
1223
- 系统必须能够:
1224
-
1225
- 1. 读取被接受的 Intent 和 Plan;
1226
- 2. 创建独立 worktree;
1227
- 3. 启动 Builder;
1228
- 4. 固定 candidate;
1229
- 5. 运行真实测试;
1230
- 6. 测试失败时自动路由 Fixer;
1231
- 7. 在限定次数内重新测试;
1232
- 8. 测试通过后启动 fresh-context Verifier;
1233
- 9. Verifier 发现问题时自动路由 Fixer;
1234
- 10. 再次执行验证;
1235
- 11. 启动只读 Reviewer;
1236
- 12. P0/P1 存在时进入修复闭环;
1237
- 13. 无阻断后进入 `WAITING_HUMAN`;
1238
- 14. 展示 candidate、Plan、Review 和 Evidence;
1239
- 15. 不自动 merge;
1240
- 16. 中途终止进程后可以恢复;
1241
- 17. 每一次执行和状态转换均可通过 Event Ledger 解释;
1242
- 18. Approval 在 candidate 改变后自动失效;
1243
- 19. 达到重试或预算上限后不会继续死循环;
1244
- 20. 所有未验证范围被明确暴露。
1245
-
1246
- ---
1247
-
1248
- # 21. 落地路线图
1249
-
1250
- 以下周期为单人主导、AI 辅助开发的建议基线,不作为不可调整的发布日期。
1251
-
1252
- | 里程碑 | 建议周期 | 目标 | 退出条件 |
1253
- |---|---:|---|---|
1254
- | **M0 核心重置** | 1 周 | 完成新定位、模型和协议 RFC | 核心名词、MVP 和非目标不再存在歧义 |
1255
- | **M1 Deterministic Kernel** | 2 周 | 状态机、事件、Workflow、Policy | Mock Workflow 可确定性模拟和重放 |
1256
- | **M2 Runner 与隔离** | 2 周 | Workspace、Shell/Mock Adapter、Evidence | 无 AI 情况下完整跑通模拟 Loop |
1257
- | **M3 自动 Agent Loop** | 3 周 | Build–Verify–Fix–Review | 一个真实项目可自动推进到 WAITING_HUMAN |
1258
- | **M4 Policy 与人工控制** | 2 周 | Approval、stale、预算、危险动作 | 无法绕过 candidate 绑定和重试上限 |
1259
- | **M5 Eval 与真实试点** | 3 周 | 行为 Eval、自托管、外部项目试点 | 达到 Pilot 指标,关键失败模式关闭 |
1260
- | **M6 Beta 与迁移** | 2 周 | v1 importer、文档、npm next | 发布 `2.0.0-beta.1` |
1261
-
1262
- 建议总窗口:**15 周左右**。
1263
-
1264
- ---
1265
-
1266
- # 22. 分阶段工作包
1267
-
1268
- ## M0:核心重置
1269
-
1270
- ### WP0.1 产品定位 RFC
1271
-
1272
- 交付:
1273
-
1274
- ```text
1275
- docs/v2/RFC-0001-product-definition.md
1276
- ```
1277
-
1278
- 必须回答:
1279
-
1280
- - BuildBeat 是什么;
1281
- - 不是什么;
1282
- - 谁使用;
1283
- - Runner 是否核心;
1284
- - 手工模式是什么地位;
1285
- - v1 是否继续演进。
1286
-
1287
- ### WP0.2 领域模型 RFC
1288
-
1289
- 交付:
1290
-
1291
- ```text
1292
- docs/v2/RFC-0002-domain-model.md
1293
- ```
1294
-
1295
- 定义:
1296
-
1297
- ```text
1298
- Project
1299
- Work
1300
- Run
1301
- Workflow
1302
- Step
1303
- Worker
1304
- Adapter
1305
- Artifact
1306
- Evidence
1307
- Policy
1308
- Event
1309
- Decision
1310
- Workspace
1311
- ```
1312
-
1313
- ### WP0.3 Workflow 与 Policy RFC
1314
-
1315
- 交付:
1316
-
1317
- ```text
1318
- docs/v2/RFC-0003-workflow-policy.md
1319
- ```
1320
-
1321
- 明确:
1322
-
1323
- - GateResult;
1324
- - 转换顺序;
1325
- - Human Approval;
1326
- - stale;
1327
- - retry;
1328
- - route;
1329
- - block;
1330
- - unverified。
1331
-
1332
- ### WP0.4 v1 冻结
1333
-
1334
- - 创建 `v1-maintenance`;
1335
- - 标记 v1 功能冻结;
1336
- - v1 新需求默认转入 v2 评估;
1337
- - 不再向固定 Gate 和 status 体系增加新能力。
1338
-
1339
- ### M0 退出标准
1340
-
1341
- - 通过三个 RFC;
1342
- - MVP 需求稳定;
1343
- - 所有旧概念已标记为保留、转换或删除;
1344
- - 不开始真实 Adapter 开发。
1345
-
1346
- ---
1347
-
1348
- ## M1:Deterministic Kernel
1349
-
1350
- ### WP1.1 Schema
1351
-
1352
- 建立:
1353
-
1354
- ```text
1355
- project.schema.json
1356
- workflow.schema.json
1357
- policy.schema.json
1358
- worker.schema.json
1359
- artifact.schema.json
1360
- evidence.schema.json
1361
- event.schema.json
1362
- ```
1363
-
1364
- 用户配置使用 YAML,内部验证使用 JSON Schema。
1365
-
1366
- ### WP1.2 Event Store
1367
-
1368
- 实现:
1369
-
1370
- - append-only JSONL;
1371
- - 单调 event sequence;
1372
- - hash 或 checksum;
1373
- - 原子追加;
1374
- - Event replay;
1375
- - snapshot 重建;
1376
- - corrupted log 检测。
1377
-
1378
- ### WP1.3 State Reducer
1379
-
1380
- 根据 Event 计算:
1381
-
1382
- - Run 状态;
1383
- - Step 状态;
1384
- - attempts;
1385
- - budgets;
1386
- - current candidate;
1387
- - pending human request;
1388
- - evidence coverage。
1389
-
1390
- ### WP1.4 Workflow Engine
1391
-
1392
- 实现:
1393
-
1394
- - Step;
1395
- - Transition;
1396
- - entry;
1397
- - terminal;
1398
- - retry route;
1399
- - branch;
1400
- - skip;
1401
- - loop detection。
1402
-
1403
- ### WP1.5 Policy Engine
1404
-
1405
- 第一版支持:
1406
-
1407
- ```text
1408
- all
1409
- any
1410
- not
1411
- evidence.exists
1412
- artifact.accepted
1413
- attempts.lt
1414
- budget.remaining
1415
- candidate.clean
1416
- human.approved
1417
- finding.maxSeverity
1418
- ```
1419
-
1420
- ### WP1.6 Simulator
1421
-
1422
- ```bash
1423
- buildbeat workflow simulate
1424
- ```
1425
-
1426
- 不调用 Worker,只输入模拟事件并输出状态变化。
1427
-
1428
- ### M1 退出标准
1429
-
1430
- - 任何状态都可以由事件重建;
1431
- - 非法转换被拒绝;
1432
- - `UNVERIFIED` 不会变成 `PASS`;
1433
- - Retry 不会超过上限;
1434
- - 终态不能被普通事件重新打开;
1435
- - 100% 核心转换有单元测试。
1436
-
1437
- ---
1438
-
1439
- ## M2:Runner 与执行隔离
1440
-
1441
- ### WP2.1 Workspace Manager
1442
-
1443
- - 创建 worktree;
1444
- - 基线校验;
1445
- - 分支命名;
1446
- - 锁;
1447
- - candidate 回读;
1448
- - dirty 检测;
1449
- - cleanup policy。
1450
-
1451
- ### WP2.2 Worker Contract
1452
-
1453
- 实现标准输入输出 envelope。
1454
-
1455
- ### WP2.3 Mock Adapter
1456
-
1457
- 支持:
1458
-
1459
- - 成功;
1460
- - 失败;
1461
- - 超时;
1462
- - 输出非法;
1463
- - 修改超 Scope;
1464
- - 进程崩溃;
1465
- - 相同失败重复。
1466
-
1467
- ### WP2.4 Shell Adapter
1468
-
1469
- 配置示例:
1470
-
1471
- ```yaml
1472
- adapter:
1473
- type: shell
1474
- command: agent-cli
1475
- args:
1476
- - run
1477
- - --input
1478
- - "{input}"
1479
- - --output
1480
- - "{output}"
1481
- ```
1482
-
1483
- ### WP2.5 Evidence Collector
1484
-
1485
- 第一版收集:
1486
-
1487
- - command;
1488
- - exit code;
1489
- - stdout/stderr digest;
1490
- - test report path;
1491
- - Git diff;
1492
- - base/candidate;
1493
- - working tree 状态。
1494
-
1495
- ### WP2.6 Runtime CLI
1496
-
1497
- 实现:
1498
-
1499
- ```text
1500
- run start
1501
- run status
1502
- run inspect
1503
- run resume
1504
- run stop
1505
- events
1506
- evidence
1507
- ```
1508
-
1509
- ### M2 退出标准
1510
-
1511
- - Mock Adapter 可以完整执行多 Step Workflow;
1512
- - 进程被中止后可以恢复;
1513
- - 两个进程不能同时占用同一 Run;
1514
- - Worker 无法将自然语言声明伪装成命令成功;
1515
- - candidate 与证据均来自实际回读。
1516
-
1517
- ---
1518
-
1519
- ## M3:自动 Agent Loop
1520
-
1521
- ### WP3.1 Planner Worker
1522
-
1523
- 输出结构化 Plan,并明确:
1524
-
1525
- - Scope;
1526
- -文件或模块;
1527
- -风险;
1528
- -验证;
1529
- -非目标。
1530
-
1531
- ### WP3.2 Builder Worker
1532
-
1533
- - 只消费 accepted Plan;
1534
- - 只能写 Workspace;
1535
- - 不能修改 Policy 和 Workflow;
1536
- - 输出 candidate。
1537
-
1538
- ### WP3.3 Fixer Worker
1539
-
1540
- 输入必须包含失败 Evidence,不接受泛化的“再检查一下”。
1541
-
1542
- ### WP3.4 Verifier Worker
1543
-
1544
- - fresh context;
1545
- - 默认只读分析;
1546
- - 可运行声明的检查;
1547
- - 输出结构化 verdict;
1548
- - 不直接推进状态。
1549
-
1550
- ### WP3.5 Reviewer Worker
1551
-
1552
- 将当前 reviewer 的合理机制迁入通用 Worker Contract:
1553
-
1554
- - candidate 固定;
1555
- - 只读;
1556
- - fresh context;
1557
- - findings 分级;
1558
- - 不允许自己批准合并。
1559
-
1560
- ### WP3.6 Loop Controller
1561
-
1562
- 实现:
1563
-
1564
- ```text
1565
- build → verify
1566
- verify failed → fix
1567
- fix → verify
1568
- verify passed → review
1569
- review blocked → fix
1570
- review passed → wait human
1571
- ```
1572
-
1573
- ### WP3.7 无进展检测
1574
-
1575
- 失败指纹至少结合:
1576
-
1577
- ```text
1578
- Step
1579
- command
1580
- exit code
1581
- 关键错误摘要
1582
- candidate diff digest
1583
- ```
1584
-
1585
- ### M3 退出标准
1586
-
1587
- - 在一个真实测试项目中,系统可自动修复预埋 Bug;
1588
- - 测试失败不会进入 Review;
1589
- - Reviewer 不能修改代码;
1590
- - Reviewer findings 可自动进入 Fix Loop;
1591
- - 最终停在 `WAITING_HUMAN`。
1592
-
1593
- ---
1594
-
1595
- ## M4:Policy、权限与人类控制
1596
-
1597
- ### WP4.1 Approval
1598
-
1599
- 批准对象绑定:
1600
-
1601
- ```text
1602
- transition
1603
- artifact revision
1604
- candidate
1605
- evidence digest
1606
- ```
1607
-
1608
- ### WP4.2 Stale Detection
1609
-
1610
- 任何受保护输入发生改变:
1611
-
1612
- ```text
1613
- approval → stale
1614
- run → WAITING_HUMAN
1615
- ```
1616
-
1617
- ### WP4.3 Risk Profile
1618
-
1619
- 提供三个官方 Preset:
1620
-
1621
- #### Fast
1622
-
1623
- ```text
1624
- 自动 Plan
1625
- 自动 Build/Verify/Review
1626
- 人工 Merge
1627
- ```
1628
-
1629
- #### Standard
1630
-
1631
- ```text
1632
- 人工批准 Plan
1633
- 自动 Build/Verify/Review
1634
- 人工 Merge
1635
- ```
1636
-
1637
- #### Controlled
1638
-
1639
- ```text
1640
- 人工批准 Intent
1641
- 人工批准 Plan
1642
- 自动 Build/Verify/Review
1643
- 人工 Merge
1644
- 人工 Release
1645
- ```
1646
-
1647
- 这些是 Preset,不是核心固定 Gate。
1648
-
1649
- ### WP4.4 Protected Actions
1650
-
1651
- MVP 禁止 Worker 执行:
1652
-
1653
- ```text
1654
- merge
1655
- deploy
1656
- publish
1657
- force push
1658
- remote delete
1659
- production mutation
1660
- ```
1661
-
1662
- 最可靠的方式不是提示词阻止,而是不给 Worker 相应凭据和能力。
1663
-
1664
- ### WP4.5 Budget
1665
-
1666
- 支持:
1667
-
1668
- ```text
1669
- maxAttempts
1670
- maxDuration
1671
- maxCost
1672
- maxTokens
1673
- maxNoProgress
1674
- ```
1675
-
1676
- ### M4 退出标准
1677
-
1678
- - candidate 改变后旧 Approval 无效;
1679
- - Worker 无法直接到达合并或发布;
1680
- - 所有 Loop 均有终止上限;
1681
- - Policy 决策可解释;
1682
- - 人工决定后 Run 可以安全恢复。
1683
-
1684
- ---
1685
-
1686
- ## M5:Eval 与试点
1687
-
1688
- 当前 CI 已经覆盖文档、Shell、CLI 和打包等确定性行为,但还没有验证 Agent 是否真正遵循协议。
1689
-
1690
- ### WP5.1 Deterministic Test Suite
1691
-
1692
- 覆盖:
1693
-
1694
- - 状态机;
1695
- - Event replay;
1696
- - crash recovery;
1697
- - Policy;
1698
- - Approval stale;
1699
- - retry;
1700
- - Budget;
1701
- - lock;
1702
- - candidate;
1703
- - Evidence;
1704
- - Adapter failure。
1705
-
1706
- ### WP5.2 Agent Behavior Eval
1707
-
1708
- 建立:
1709
-
1710
- ```text
1711
- evals/
1712
- ├── plan-scope/
1713
- ├── gate-cannot-self-pass/
1714
- ├── failing-test-first/
1715
- ├── fix-loop/
1716
- ├── reviewer-readonly/
1717
- ├── stale-approval/
1718
- ├── protected-action/
1719
- ├── no-progress/
1720
- └── evidence-required/
1721
- ```
1722
-
1723
- 每个 Eval 包含:
1724
-
1725
- ```text
1726
- fixture repository
1727
- task
1728
- expected artifacts
1729
- allowed actions
1730
- forbidden actions
1731
- machine checks
1732
- semantic rubric
1733
- ```
1734
-
1735
- ### WP5.3 Self-host Pilot
1736
-
1737
- BuildBeat v2 使用自己的 Runner 开发 BuildBeat v2:
1738
-
1739
- ```text
1740
- BuildBeat builds BuildBeat
1741
- ```
1742
-
1743
- 该试点用于发现:
1744
-
1745
- - Runtime 恢复问题;
1746
- - Agent 输出协议问题;
1747
- - Scope 漂移;
1748
- - Prompt injection;
1749
- - Review 自证;
1750
- - Event 和 Git 不一致。
1751
-
1752
- ### WP5.4 外部 Pilot
1753
-
1754
- 至少选择:
1755
-
1756
- 1. 一个小型单仓项目;
1757
- 2. 一个具有真实自动化测试的现有项目;
1758
- 3. 一个包含 UI 或接口变更的项目。
1759
-
1760
- ### M5 退出指标
1761
-
1762
- | 指标 | Beta 目标 |
1763
- |---|---:|
1764
- | 所有状态转换可追溯 | 100% |
1765
- | stale Approval 被复用 | 0 |
1766
- | 超预算后继续运行 | 0 |
1767
- | 无上限 Loop | 0 |
1768
- | 自动到达 `WAITING_HUMAN` 的 Pilot Run | ≥70% |
1769
- | 完成 Run Evidence 完整率 | ≥95% |
1770
- | 失败 Run 有明确终止原因 | 100% |
1771
- | 人工手动切换 Agent 的次数 | 相比 v1 显著减少 |
1772
- | Reviewer 自行修改代码 | 0 |
1773
-
1774
- ---
1775
-
1776
- ## M6:迁移与 Beta
1777
-
1778
- ### WP6.1 v1 Importer
1779
-
1780
- 新增:
1781
-
1782
- ```bash
1783
- buildbeat migrate-v1 --dry-run
1784
- ```
1785
-
1786
- 可识别:
1787
-
1788
- - 工作包;
1789
- - `pm/changes`;
1790
- - decisions;
1791
- - standards;
1792
- - reviewer;
1793
- - verify scripts;
1794
- - 当前 candidate 引用。
1795
-
1796
- 不得自动猜测:
1797
-
1798
- - 哪个旧状态仍有效;
1799
- - 哪个 Gate 仍应通过;
1800
- - 哪份文档是 accepted Plan;
1801
- - 哪个 status 是权威。
1802
-
1803
- 无法确定的内容输出 migration gap。
1804
-
1805
- ### WP6.2 迁移策略
1806
-
1807
- 1. 只读分析 v1;
1808
- 2. 生成 v2 Work 和 Artifact 草稿;
1809
- 3. 人工确认当前活动 Work;
1810
- 4. 冻结旧看板;
1811
- 5. 新工作只进入 v2;
1812
- 6. 历史 v1 文件归档,不双写;
1813
- 7. 完成一个真实 Run 后才正式切换。
1814
-
1815
- ### WP6.3 文档
1816
-
1817
- 必须完成:
1818
-
1819
- - 5 分钟快速开始;
1820
- - Workflow 编写指南;
1821
- - Policy 指南;
1822
- - Adapter 指南;
1823
- - Worker 合同;
1824
- - Evidence 指南;
1825
- - Human Approval 指南;
1826
- - v1 迁移指南;
1827
- - 安全和权限边界;
1828
- - 故障恢复手册。
1829
-
1830
- ### WP6.4 Beta Release
1831
-
1832
- 发布:
1833
-
1834
- ```text
1835
- @haiyangbg/buildbeat@2.0.0-beta.1
1836
- npm dist-tag: next
1837
- ```
1838
-
1839
- ---
1840
-
1841
- # 23. 技术实施建议
1842
-
1843
- ## 23.1 语言和工程结构
1844
-
1845
- 建议 v2 Kernel 使用:
1846
-
1847
- ```text
1848
- TypeScript
1849
- Node.js 20+
1850
- ESM
1851
- JSON Schema
1852
- YAML 用户配置
1853
- Node 原生测试框架或现有测试体系
1854
- ```
1855
-
1856
- 第一阶段不立即拆多个 npm 公共包,先在同一仓库形成稳定模块合同:
1857
-
1858
- ```text
1859
- src/v2/
1860
- ├── domain/
1861
- ├── schemas/
1862
- ├── engine/
1863
- ├── policy/
1864
- ├── runtime/
1865
- ├── adapters/
1866
- ├── workspace/
1867
- ├── evidence/
1868
- ├── storage/
1869
- └── cli/
1870
- ```
1871
-
1872
- Adapter 合同稳定后,再拆为独立包。
1873
-
1874
- ---
1875
-
1876
- ## 23.2 模块边界
1877
-
1878
- ```text
1879
- domain/
1880
- 纯类型和不变量
1881
-
1882
- engine/
1883
- Workflow、状态机、Scheduler
1884
-
1885
- policy/
1886
- Policy 解析和求值
1887
-
1888
- runtime/
1889
- Orchestrator、Budget、Retry、恢复
1890
-
1891
- adapters/
1892
- Mock、Shell、Manual
1893
-
1894
- workspace/
1895
- Git、worktree、锁、candidate
1896
-
1897
- evidence/
1898
- Evidence 收集、摘要和验证
1899
-
1900
- storage/
1901
- Event Store、Snapshot、Artifact index
1902
-
1903
- cli/
1904
- 用户命令和展示
1905
- ```
1906
-
1907
- 任何 `adapter/` 代码不得直接修改 Kernel 状态;只能返回结构化结果,由 Orchestrator 写入 Event。
1908
-
1909
- ---
1910
-
1911
- # 24. 必须测试的系统不变量
1912
-
1913
- 1. 未通过前置 Policy 的 Step 永远不能启动。
1914
- 2. Worker 永远不能直接修改 Run 状态。
1915
- 3. 人类 Approval 必须绑定精确对象。
1916
- 4. 对象改变后 Approval 必须失效。
1917
- 5. 每次状态转换必须对应一个 Event。
1918
- 6. 每个成功 Step 必须有满足合同的 Evidence。
1919
- 7. `UNVERIFIED` 不得自动转为通过。
1920
- 8. Retry 不得超过预算。
1921
- 9. Reviewer 默认不能写代码。
1922
- 10. 同一 Workspace 不得被两个活动 Worker 同时占用。
1923
- 11. Run 终态默认不可逆。
1924
- 12. Event Ledger 必须能够重建 State。
1925
- 13. Snapshot 损坏不能导致 Event 丢失。
1926
- 14. Worker 输出非法时不得推进状态。
1927
- 15. Adapter 异常退出必须留下失败事实。
1928
- 16. candidate 改变后旧 Review 和 Approval 不得冒充当前结论。
1929
- 17. Worker 不得修改自身 Workflow、Policy 或 Evidence 记录。
1930
- 18. 未配置强制能力时必须公开降级级别。
1931
- 19. BuildBeat 进程退出不得导致安全边界消失。
1932
- 20. Merge 和 Release 在 MVP 中没有可调用能力。
1933
-
1934
- ---
1935
-
1936
- # 25. 风险与应对
1937
-
1938
- | 风险 | 影响 | 应对 |
1939
- |---|---|---|
1940
- | v2 范围过大 | 长期停留在架构设计 | 只做单仓、单 Run、前台 Build–Verify–Fix |
1941
- | 过早绑定某个 Agent 工具 | 被厂商 CLI 变化牵制 | Mock + Shell 先行,专用 Adapter 后置 |
1942
- | Agent 无限修复 | 成本和时间失控 | attempts、budget、无进展检测 |
1943
- | Agent 修改控制文件 | 绕过 Workflow 和 Policy | 控制文件只读、隔离 Workspace |
1944
- | Worker 伪造证据 | 错误候选被放行 | Runner 回读真实命令和 Git 状态 |
1945
- | Approval 过期 | 人批的不是当前代码 | Approval 绑定 digest 和 candidate |
1946
- | Runtime 状态损坏 | 无法恢复 | Event sourcing + 原子 Snapshot |
1947
- | worktree 管理复杂 | 残留分支和目录 | 明确 lifecycle 和 cleanup policy |
1948
- | Semantic Reviewer 不稳定 | 误判或漏判 | 确定性检查优先,语义结论不可独立批准高风险动作 |
1949
- | v1/v2 双写 | 新旧事实冲突 | 单向迁移,禁止长期双写 |
1950
- | 过早支持多仓 | 状态和事务复杂度骤增 | 多仓延后到单仓 MVP 稳定后 |
1951
- | 自动化权限过大 | 产生不可逆损失 | MVP 不提供 merge/deploy capability |
1952
-
1953
- ---
1954
-
1955
- # 26. 前两周立即执行清单
1956
-
1957
- ## 第 1 周
1958
-
1959
- 1. 创建 `v1-maintenance` 分支;
1960
- 2. 创建 `v2` 分支;
1961
- 3. 新建 `docs/v2/`;
1962
- 4. 完成产品定位 RFC;
1963
- 5. 完成领域模型 RFC;
1964
- 6. 完成 Workflow / Policy RFC;
1965
- 7. 删除“Skill-only 必须与 Runtime 等价”的 v2 约束;
1966
- 8. 将固定 Gate1–Gate4 标记为 Legacy Preset;
1967
- 9. 冻结 v1 新功能;
1968
- 10. 建立 v2 决策记录。
1969
-
1970
- ## 第 2 周
1971
-
1972
- 1. 创建 TypeScript v2 目录;
1973
- 2. 定义所有核心 Schema;
1974
- 3. 实现 Event 类型;
1975
- 4. 实现 append-only Event Store;
1976
- 5. 实现 State reducer;
1977
- 6. 实现最小 Workflow parser;
1978
- 7. 实现 GateResult;
1979
- 8. 实现 Mock Adapter;
1980
- 9. 编写第一个软件交付 Workflow;
1981
- 10. 完成纯模拟的 Build–Verify–Fix Loop。
1982
-
1983
- 在第 2 周结束前,不接真实 Claude 或 Codex Adapter。先证明 Kernel、事件和 Loop 本身正确。
1984
-
1985
- ---
1986
-
1987
- # 27. Beta 发布前的最终决策点
1988
-
1989
- 以下问题在对应阶段必须形成明确结论:
1990
-
1991
- | 决策 | 最晚时间 |
1992
- |---|---|
1993
- | v2 是否正式采用“交付控制平面”定位 | M0 |
1994
- | Artifact 和 Runtime 的存储边界 | M0 |
1995
- | Workflow / Policy Schema | M1 |
1996
- | Event Store 格式 | M1 |
1997
- | 一个 Run 是否强制独立 worktree | M2 |
1998
- | 第一个专用 Agent Adapter | M3 |
1999
- | 默认 Risk Preset | M4 |
2000
- | v1 Importer 的自动化边界 | M5 |
2001
- | `main` 何时切换至 v2 | M6 |
2002
- | v1 `latest` 何时停止维护 | 2.0 稳定版后单独决定 |
2003
-
2004
- ---
2005
-
2006
- # 28. 最终产品形态
2007
-
2008
- BuildBeat v2 的核心不再是:
2009
-
2010
- ```text
2011
- 给项目生成几份规则文件
2012
- 让多个会话按看板和 status 协作
2013
- ```
2014
-
2015
- 而是:
2016
-
2017
- ```text
2018
- 接受一个工作目标
2019
- ↓
2020
- 建立版本化工件
2021
- ↓
2022
- 由确定性 Kernel 推进 Workflow
2023
- ↓
2024
- 自动调用适合的 Worker
2025
- ↓
2026
- 根据实际 Evidence 继续、修复或暂停
2027
- ↓
2028
- 在人类必须判断的地方请求最小决策
2029
- ↓
2030
- 产生可审查、可恢复、可追溯的交付结果
2031
- ```
2032
-
2033
- 最终产品公式为:
2034
-
2035
- ```text
2036
- BuildBeat v2
2037
- =
2038
- Artifact Protocol
2039
- + Deterministic Workflow Kernel
2040
- + Policy-based Gates
2041
- + Agent Loop Runtime
2042
- + Execution Adapters
2043
- + Evidence Ledger
2044
- + Human Escalation
2045
- ```
2046
-
2047
- ## 核心定位语
2048
-
2049
- > **BuildBeat 是一个 AI 原生软件交付控制平面:它让外部 Agent 围绕版本化工件持续计划、构建、验证、修复和审查,并通过策略、证据和人类升级机制控制每一次状态转换。**
2050
-
2051
- ## MVP 核心承诺
2052
-
2053
- > **给 BuildBeat 一个已批准的目标和计划,它会自动完成 Build–Verify–Fix–Review 循环,并携带完整证据停在合并决定前。**