@haiyangbg/buildbeat 2.0.0 → 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 (69) hide show
  1. package/CHANGELOG.md +28 -1
  2. package/README.en.md +100 -243
  3. package/README.md +100 -241
  4. package/SKILL.md +95 -27
  5. package/docs/CAPABILITY-MATRIX.md +37 -6
  6. package/docs/CLI.md +14 -3
  7. package/docs/README.md +39 -0
  8. package/docs/RELEASING.md +27 -3
  9. package/docs/v2/RFC-0001-product-definition.md +2 -0
  10. package/docs/v2/guide/00-how-to-talk.md +3 -1
  11. package/docs/v2/guide/01-quickstart.md +92 -29
  12. package/docs/v2/guide/02-workflow-guide.md +4 -2
  13. package/docs/v2/guide/04-adapter-guide.md +17 -2
  14. package/docs/v2/guide/05-worker-contract.md +17 -6
  15. package/docs/v2/guide/06-evidence-guide.md +2 -1
  16. package/docs/v2/guide/07-approval-guide.md +22 -7
  17. package/docs/v2/guide/08-migration-v1.md +8 -4
  18. package/docs/v2/guide/09-security-boundaries.md +22 -11
  19. package/docs/v2/guide/10-recovery.md +4 -2
  20. package/docs/v2/guide/11-session-handoff.en.md +84 -0
  21. package/docs/v2/guide/11-session-handoff.md +84 -0
  22. package/docs/v2/guide/README.md +40 -21
  23. package/example/.buildbeat/manifest.json +1 -1
  24. package/package.json +23 -8
  25. package/src/v2/cli/run.js +26 -0
  26. package/templates/v2/AGENTS.md +6 -6
  27. package/templates/v2/BUILDBEAT.md +15 -0
  28. package/templates/v2/CLAUDE.md +7 -0
  29. package/templates/v2/envelope/prompts/builder.md +8 -0
  30. package/templates/v2/envelope/prompts/fixer.md +8 -0
  31. package/templates/v2/envelope/prompts/reviewer.md +13 -0
  32. package/templates/v2/envelope/worker.sh +70 -0
  33. package/templates/v2/run-config.example.yaml +74 -0
  34. package/templates/v2//346/214/207/346/214/245/345/217/260.md +7 -3
  35. 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
  36. package/docs/CLI-PILOT-2026-08-23.md +0 -25
  37. package/docs/CLI-STRATEGY-2026-08.md +0 -55
  38. package/docs/EXECUTION-PLAN.md +0 -487
  39. package/docs/PHASE1-PILOT-2026-08-24.md +0 -32
  40. package/docs/PHASE2-BUILDBEAT-PILOT-2026-08-25.md +0 -75
  41. package/docs/PHASE2-PILOT-2026-08-25.md +0 -88
  42. package/docs/PHASE2-PILOT-PREFLIGHT-2026-08-25.md +0 -42
  43. package/docs/PHASE4-STABILITY-AUDIT-2026-08-25.md +0 -35
  44. package/docs/PHASE4-V1.20-PILOT-2026-08-25.md +0 -56
  45. package/docs/ROADMAP.md +0 -875
  46. package/docs/V1.21-RELEASE-EVIDENCE-2026-08-25.md +0 -55
  47. package/docs/V2-D2-DECISION-CARD.md +0 -37
  48. package/docs/V2-DECISIONS.md +0 -11
  49. package/docs/V2-ITERATION-01.md +0 -60
  50. package/docs/V2-ITERATION-02.md +0 -32
  51. package/docs/V2-ITERATION-03.md +0 -30
  52. package/docs/V2-ITERATION-04.md +0 -29
  53. package/docs/V2-ITERATION-05.md +0 -20
  54. package/docs/V2-ITERATION-06.md +0 -18
  55. package/docs/V2-ITERATION-07.md +0 -36
  56. package/docs/V2-ITERATION-08.md +0 -62
  57. package/docs/V2-PLAN.md +0 -333
  58. package/docs/V2-PROPOSAL.md +0 -319
  59. package/docs/V2.0.0-BETA.1-RELEASE-EVIDENCE-2026-08-28.md +0 -41
  60. package/docs/V2.0.0-BETA.2-RELEASE-EVIDENCE-2026-08-28.md +0 -8
  61. package/docs/V2.0.0-BETA.3-RELEASE-EVIDENCE-2026-09-01.md +0 -8
  62. package/docs/V2.0.0-BETA.4-RELEASE-EVIDENCE-2026-09-03.md +0 -9
  63. package/docs/V2.0.0-BETA.5-RELEASE-EVIDENCE-2026-09-05.md +0 -10
  64. package/docs/WP4.3-RELEASE-EVIDENCE-2026-08-25.md +0 -73
  65. package/docs/v2/M1-ACCEPTANCE-2026-08-28.md +0 -38
  66. package/docs/v2/M2-DOD-2026-08-28.md +0 -34
  67. package/docs/v2/M4-EXTERNAL-PILOT-2026-08-28.md +0 -46
  68. package/docs/v2/M4-PILOT-APP-2026-08-28.md +0 -44
  69. package/docs/v2/M4-SELFHOST-2026-08-28.md +0 -53
@@ -1,55 +0,0 @@
1
- # BuildBeat v1.21.0 发布关闭证据(2026-08-25)
2
-
3
- > 证据等级:公开 GitHub / npm 分发事实 + 工作流外独立回读。本页证明 `@haiyangbg/buildbeat@1.21.0` 的精确源码、artifact、provenance、签名、安装和 Release 已闭合;不证明任何业务项目的 Gate、部署、生产健康或常态流量。
4
-
5
- ## 1. 源码、评审与不可移动 Tag
6
-
7
- | 项目 | 回读结果 |
8
- |---|---|
9
- | 发布 PR | [#17](https://github.com/HaiYangBG1/BuildBeat/pull/17),全部检查通过后正常合并 |
10
- | main merge commit | `ce69a05c8a42b9ac8d3cafbc4ed224f0bbf71a63` |
11
- | main CI | [run 32864194006](https://github.com/HaiYangBG1/BuildBeat/actions/runs/32864194006),双平台脚本、Node 20/24、静态文档全部成功 |
12
- | CodeQL | [run 32864196001](https://github.com/HaiYangBG1/BuildBeat/actions/runs/32864196001),成功 |
13
- | annotated tag | `v1.21.0`,tag object `78031f68a8c16f0ef7c3bb9daceda19431db34cb`,解引用后精确指向上述 merge commit |
14
- | Tag 保护实时回读 | `Protect release tags` 为 active;include=`refs/tags/v*`;rules=`update,deletion`;bypass 为空 |
15
-
16
- `v1.21.0` 创建前,官方 registry 对精确版本返回不存在。Tag 创建并推送后没有移动、删除或复用;本证据文档是发布后的 main 文档提交,不属于已发布 tarball,也不重新定义该 immutable artifact。
17
-
18
- ## 2. OIDC 发布工作流
19
-
20
- [workflow run 32864438692](https://github.com/HaiYangBG1/BuildBeat/actions/runs/32864438692) 由 `main@ce69a05` 手动触发,输入为 `v1.21.0`:
21
-
22
- - `Publish v1.21.0 to npm` job 成功:annotated tag、checkout HEAD、事件 SHA、远端 main HEAD、package version 与干净工作树全部一致;重新运行发布检查,打出一份精确候选,再通过 npm Trusted Publishing / OIDC 发布。
23
- - `Verify v1.21.0 from npm` job 成功:从官方 registry 回读精确 integrity、SLSA provenance、隔离安装和 attestation 签名。
24
- - `npm-publish` Environment 只允许受保护分支,并由配置的 reviewer 通过正式 pending-deployment 审批接口放行;没有使用管理员 bypass,也没有向仓库、命令或日志注入长期 npm publish token。
25
-
26
- ## 3. 官方 registry 与供应链回读
27
-
28
- | 项目 | 回读结果 |
29
- |---|---|
30
- | package / version | `@haiyangbg/buildbeat@1.21.0` |
31
- | 发布时间 | `2026-08-25T15:14:09.041Z` |
32
- | dist-tags | `bootstrap=0.0.0`,`latest=1.21.0` |
33
- | tarball 文件数 | `80`;工作流外本地 pack 与 registry integrity 完全一致 |
34
- | integrity | `sha512-P9HluoPvb6/HJhh2IP3VLG3ig6kQ4aJKtkZeowcU6Virv9vGxgvulMnq9J7XN5dQNtcwaUZhfgLKR/Qi93e+wA==` |
35
- | shasum | `6670c3c7e39f1901aa1db62c1579cf83b086dcc9` |
36
- | attestation | `https://registry.npmjs.org/-/npm/v1/attestations/@haiyangbg%2fbuildbeat@1.21.0` |
37
- | provenance predicate | `https://slsa.dev/provenance/v1` |
38
- | 签名审计 | 1 个 verified registry signature;1 个 verified attestation |
39
-
40
- registry README 也已从精确版本回读,包含 v1.21 的「证据紧跟对应的已做事项」回复契约;不是用本地 README 代替 registry 页面。
41
-
42
- ## 4. 工作流外隔离安装
43
-
44
- 从全新临时 prefix 安装精确版本后:
45
-
46
- - `buildbeat --version` 返回 `1.21.0`;包内兼容入口 `solobaton --version` 也返回 `1.21.0`;
47
- - `npm audit signatures` 返回上述 1 个 registry signature 和 1 个 attestation;
48
- - 对没有 lifecycle manifest 的源码仓根运行已安装包的 `doctor . --json`,得到合法 schema 2 JSON:`ok=false`、`writesPerformed=false`,并诚实返回 exit `1`;
49
- - 执行前后 Git 可见状态完全一致,没有把诊断失败伪装成绿灯,也没有写入项目。
50
-
51
- ## 5. GitHub Release 与边界
52
-
53
- [BuildBeat v1.21.0](https://github.com/HaiYangBG1/BuildBeat/releases/tag/v1.21.0) 已发布,非 draft、非 prerelease,并成为 latest Release。Release 创建发生在工作流内验证和工作流外独立回读全部完成之后。
54
-
55
- 已验证结论只覆盖 `v1.21.0@ce69a05`、官方 npm artifact、供应链声明、隔离安装和 GitHub Release。npm dist-tag、Environment、ruleset 与 Release latest 标记仍是可变远端状态,后续发布必须重新实时回读;任何业务仓的升级、Gate、部署和生产状态仍需在其自身边界独立验证。
@@ -1,37 +0,0 @@
1
- # `V2-D2` 决策卡:M-1 分叉
2
-
3
- > 日期:2026-08-28
4
- > 状态:`V2-D2=A`(2026-08-28 项目所有者拍板,完整内核)
5
- > 决策人:项目所有者
6
- > 证据:[`pilot/evidence/2026-08-28-m1-runtime-gap.md`](../pilot/evidence/2026-08-28-m1-runtime-gap.md) · [`pilot/metrics.md`](../pilot/metrics.md)
7
-
8
- ## 已确认事实
9
-
10
- - `V2-D0=B` 已决定建设 v2;本卡只决定内核范围,不再讨论做不做。
11
- - pilot-app、Tide、AI 试点工作区三次真实工作都没有由 `pilot/loop.sh` 自动激活,自动 Run ledger 为 `0/3`;三者均只能作为真实流程/负向证据,不能伪装成合格自动 Run。
12
- - F1~F4 的 fail-closed fixture 通过;F5 已确认只能阻断、不能恢复;F6 已确认没有持久化 Approval 对象,也不会自动产生 stale 事件。
13
- - 当前暂定可组装能力加权覆盖率为 `45.8%(5.5/12)`,低于薄内核路线要求的 `80%`。
14
- - 当前仍没有 v2 tag、`next` 预发布、远端发布或目标项目原地升级。
15
-
16
- ## A(推荐):完整内核
17
-
18
- 关闭 M-1,选择 `V2-D2=A`,进入 M0。M0 先冻结产品定位、领域模型、Workflow/Policy 与 events v1;随后 M1 实现最小纵切:Run/Step 状态、events ledger、reducer、Workspace、Shell Adapter、Evidence Collector 和 `run start/status/stop`。F5/F6 分别在 M1/M2 关闭。
19
-
20
- 理由:重复出现的核心问题不是 Agent 不会做业务,而是工件不能自动触发、运行态靠人脑、进程不能恢复、审批没有对象。继续增加手工案例不会提高这四项能力。
21
-
22
- 本选择只授权在本地 `v2` 分支进入 M0/M1 实现与验证;不包含 push、merge、npm publish、tag、部署、生产动作或目标项目原地升级。
23
-
24
- ## B:继续 M-1
25
-
26
- 保持 `V2-D2=PENDING`,等待 AI 试点工作区出现下一项自然、已授权、低风险的非生产开发任务,再要求它从干净 oracle 进入现有 `pilot/loop.sh`。不补造演示需求,不回放旧 candidate。
27
-
28
- 代价:脚本本身没有自动触发、恢复和 Approval 对象;在新增这些能力前,第四次任务仍可能被人工流程绕过,且即使成功也无法消除已确认的 F5/F6 缺口。
29
-
30
- ## 回复方式
31
-
32
- - `A`:完整内核,进入 M0/M1。
33
- - `B`:继续等待下一项真实任务,M-1 保持开放。
34
-
35
- ## 拍板结果(2026-08-28)
36
-
37
- 项目所有者选择 **A**。主判据为重复出现的 CRITICAL 运行缺口(自动激活 `0/3`、F5 恢复缺失、F6 Approval 对象缺失);「已确认事实」中的暂定覆盖率 45.8% 混合了 fixture 与人工候选证据,按 [`pilot/metrics.md`](../pilot/metrics.md) 的口径仅作旁证,不作为分叉依据。M-1 关闭,进入 M0;台账见 [`V2-DECISIONS.md`](V2-DECISIONS.md)。
@@ -1,11 +0,0 @@
1
- # BuildBeat v2 决策台账
2
-
3
- > 只记录已收敛、会改变 v2 方向或授权边界的真实拍板;实现细节和试点数据留在对应迭代与证据文件中。
4
-
5
- | 日期 | 决策 ID | 拍板人 | 决策 | 生效结果 | 后续决策点 |
6
- |---|---|---|---|---|---|
7
- | 2026-08-28 | `V2-D3` | 项目所有者 | M0 退出评审通过:定稿 [`v2/RFC-0001`](v2/RFC-0001-product-definition.md)(产品定位 + 自研面理由)、[`v2/RFC-0002`](v2/RFC-0002-domain-model.md)(领域模型 + 名词消歧 + v1 处置)、[`v2/RFC-0003`](v2/RFC-0003-workflow-policy.md)(Workflow/Policy + observe/bands schema)与 [`v2/SPEC-0001-events-v1.md`](v2/SPEC-0001-events-v1.md)(事件格式) | M0 关闭,进入 M1 最小纵切;SPEC-0001 进入 `FROZEN`,此后 additive-only、破坏性变更须升 `v`;RFC 与 `V2-PLAN.md` 冲突仍以 V2-PLAN 为准,改判须回写台账 | M1 验收:真实项目上 `build → verify` 两步由 Shell Adapter 驱动跑通,证据全部来自回读 |
8
- | 2026-08-28 | `V2-D2` | 项目所有者 | 选择方案 **A**:M-1 分叉结论为**完整内核**。主判据为重复出现的 CRITICAL 运行缺口——三次真实任务自动激活 `0/3`、F5 中断恢复缺失、F6 Approval 对象缺失,满足结论 (a)「至少两个 CRITICAL 缺口在两轮以上重复出现」;暂定可组装覆盖率 45.8% 按 [`pilot/metrics.md`](../pilot/metrics.md) 口径仅作旁证,不作分叉依据。原计划三轮中的「修 bug 轮」未执行,记为已接受偏差 | M-1 关闭,迭代 01 收尾;进入 M0(三份 RFC + events.jsonl v1 冻结 + observe/bands schema 冻结),随后 M1 最小纵切,总窗口按 ~12–15 周执行;F5/F6 分别在 M1/M2 关闭。本决策只授权本地 `v2` 分支的 M0/M1 实现与验证,不含 push、merge、npm publish、tag、部署、生产动作或目标项目原地升级 | M0 退出评审:三份 RFC 与事件格式 v1 定稿为下一道人工门 |
9
- | 2026-08-27 | `V2-D1A` | 项目所有者 | M-1 第三个目标项目选定为 `<试点工作区>`;该项目开发活跃,已按 legacy 路径手工接入 BuildBeat 1.x,适合验证旧项目、多仓与接力棒场景 | 既有 `WP-B1-AUTHZ` 只作回放/兼容性证据,不倒算为自动 Loop;第三个有效 run 使用该项目下一项自然发生、已授权、低风险的非生产开发任务,并从干净 oracle commit 启动。当前不原地升级目标项目、不补造 manifest、不改/关现有 Gate,也不授权 push、merge、migration、部署或生产动作 | 有合适工作项时冻结 intent/plan/oracle;若跨多仓,先让试点明确绑定全部 workspace,不能静默退化成单仓证据 |
10
- | 2026-08-27 | `V2-D1` | 项目所有者 | M-1 首批选择两个真实工作项:① pilot-app 额度耗尽时仍可正常登录网站,但模型不可用且不得补发 Key 绕额度;② Tide 悬浮球空闲时缩入左侧并半透明隐藏,交互时立即展开 | 迭代 01 从本日启动;两项均只允许在本地 `pilot/*` 分支实施与验证,不授权 merge、push、发布、部署或生产操作;第三个工作项暂留空,不影响先跑前两轮 | 两轮证据完成后决定是否补第三轮;最终形成 `V2-D2` |
11
- | 2026-08-27 | `V2-D0` | 项目所有者 | 选择方案 **B**:正式采用 [`V2-PLAN.md`](V2-PLAN.md) 作为 BuildBeat v2 执行基线,不再把 M-1 当作“是否做 v2”的试验 | v1 转入维护线;建立本地 `v1-maintenance` 与 `v2` 开发线;`V2-PLAN.md` D1–D6 推荐项同步生效;M-1 只决定薄内核或完整内核;本决策不授权 push、发布、部署或生产操作 | `V2-D1`:M-1 工作项;`V2-D2`:M-1 分叉结论 |
@@ -1,60 +0,0 @@
1
- # v2 迭代 01:M-1 人肉内核试点
2
-
3
- > 状态:**已收尾——`V2-D2=A` 已拍板(2026-08-28,完整内核)**。pilot-app、Tide 与后续 AI 试点工作区 `WP-B1-AUTHZ` 推进均由当前会话人工编排,自动 Run ledger 为 `0/3`;F5/F6 已从 `UNVERIFIED` 收敛为 `MISSING`。决策卡见 [`V2-D2-DECISION-CARD.md`](V2-D2-DECISION-CARD.md),台账见 [`V2-DECISIONS.md`](V2-DECISIONS.md);M-1 关闭,进入迭代 02(M0)
4
- > 上游:[`V2-PLAN.md`](V2-PLAN.md) §8;决策台账:[`V2-DECISIONS.md`](V2-DECISIONS.md);试点套件:[`pilot/`](../pilot/README.md)
5
- > 时间盒:**≤2 周**(自 `V2-D1` 起算);到期未跑完也必须按已有证据形成分叉结论或明确 `UNVERIFIED`
6
-
7
- ## 迭代目标(唯一交付)
8
-
9
- 依据三轮真实任务与六个故障注入场景,形成 `V2-D2`:
10
-
11
- - **(a) 完整内核**:关键运行能力存在重复、无法由薄控制面修补的结构性缺口,总窗口约 12–15 周;
12
- - **(b) 薄内核**:可组装能力覆盖充分,BuildBeat 只自研 approval staleness、统一证据台账、policy/gate 检查器,总窗口约 5–8 周。
13
-
14
- v2 已由 `V2-D0=B` 决定正式实施;M-1 不再拥有“放弃 v2”的隐含第三选项。
15
-
16
- ## 任务清单
17
-
18
- - [x] **T1(项目所有者,`V2-D1` + `V2-D1A`)**:首批工作项为 pilot-app 额度耗尽仍可登录(含 UI)与 Tide 悬浮球空闲收纳(小功能);第三个目标项目已选定为 `<试点工作区>`,具体采用该项目下一项自然发生、已授权、低风险的非生产开发任务,不另造演示需求。
19
- - [ ] **T2(每个执行工作项)**:pilot-app 与 Tide 均已准备独立 `ACCEPT_CMD`,在原基线先失败、实现后通过;第三项尚未冻结工作项与 oracle。
20
- - [ ] **T3(每个执行工作项)**:pilot-app 与 Tide 均使用 `pilot/*` 专用 branch/worktree,intent、plan、protected paths 与验收 oracle 先独立提交;第三项尚未建立隔离现场。
21
- - [ ] **T4(每轮)**:当前两项没有运行 [`pilot/loop.sh`](../pilot/loop.sh),attempts/token/费用也没有统一 ledger;人工阶段数不得冒充自动 Loop 数据。下一轮必须由脚本从干净 oracle commit 开跑。
22
- - [ ] **T5(每轮)**:pilot-app 候选与两个精确 release commit 均完成独立只读审查;其中 reviewer 抓出单阶段滚动 P1,最终 stage1/stage2 分别收敛为无 P0/P1。Tide 仅完成回归/验收与视觉检查;两项均未由脚本产生 `WAITING_HUMAN` 终态,故本项未完成。
23
- - [x] **T6(故障注入)**:`npm run test:pilot` 当前 15/15;F1~F4 保持 fail-closed,F5 证实中断后只能阻断、不能恢复,F6 证实无持久化 Approval 对象、无 stale 事件。测试绿只表示缺口被稳定观测,不表示 F5/F6 能力通过。
24
- - [x] **T7(三轮或时间盒到期)**:[`V2-D2-DECISION-CARD.md`](V2-D2-DECISION-CARD.md) 已形成并于 2026-08-28 由项目所有者拍板 `V2-D2=A`;已回写 [`V2-PLAN.md`](V2-PLAN.md) §8 与 [`V2-DECISIONS.md`](V2-DECISIONS.md)。
25
-
26
- > `V2-D2=A` 拍板后,T2–T5 中面向「第三轮 / 下一轮自动 Run」的未完成项随 M-1 关闭而终止:三次真实任务未产生合格自动 Run 的事实保持原样记录(不补跑、不倒算),对应缺口由 M1(Run/事件/恢复纵切)与 M2(Approval stale + fix/review loop)关闭。
27
-
28
- ## 2026-08-27 当前证据
29
-
30
- - **pilot-app(含 UI + 生产)**:原始实现 `f78f64c`、证据 `d31c056`;生产 reviewer 发现单阶段滚动 P1 后拆为 `0.17.84@8e41661` 铺服务端门,再以 `0.17.85@7aa570c` 开启。最终 ops `f2495d5`、tag `v0.17.85`、digest `30d4ebc0…`、ChangeOrder `4ba5f72d…`;unit 158/158、额度 UI5 3/3、两实例同 revision、Running/Healthy/0 重启、逐实例/公网/钉钉 smoke 通过。真人 quota OAuth 仍待回访。
31
- - **Tide(小功能)**:`pilot/tide-idle-ball`,实现 `723289c`,证据 `4217708`;Node 测试 3/3、Rollup build、syntax/diff check 通过。证据目录:`pilot-work/tide-idle-ball/evidence/`。
32
- - **AI 试点工作区(第三次激活失败观察,不倒算自动 Run)**:在 `V2-D1A` 已明确“下一项自然任务必须进 Loop”之后,`WP-B1-AUTHZ` 仍由当前会话在脚本外推进到 Gate3 写者 L4,meta 记录为 `9d258ee`;没有 Run ID、attempt/cost ledger、checkpoint 或 Approval 对象。用户下一轮主动指出目标应是升级 BuildBeat v2,才把主线拉回。该事件不冒充低风险开发任务或合格自动 Run,但构成第三次真实激活失败。完整证据见 [`pilot/evidence/2026-08-28-m1-runtime-gap.md`](../pilot/evidence/2026-08-28-m1-runtime-gap.md)。
33
- - **共同边界**:pilot-app 的 push/deploy 来自试点之后的单独生产授权,不反向扩大 M-1 权限;Tide 未更新 `tide.zip`、未发布。两个交付完成与一次生产发布都不等于两轮自动 Loop 通过。
34
-
35
- ## 使用判定(回答“两个例子够不够”)
36
-
37
- - **够投入使用**:含 UI 与小功能两种任务都走通了冻结 oracle、隔离 worktree、实现、回归与证据;pilot-app 的独立 reviewer 还真实阻止了一次不安全的单阶段生产滚动,证明协议不是摆设。
38
- - **足够形成 `V2-D2` 决策卡,但不支持薄内核结论**:三次真实工作均没有自动激活;F5/F6 已确认 `MISSING`,暂定可组装覆盖率仍为 45.8%。这些负向证据不能冒充成功 Run,却已满足完整内核路线的提前止损信号。
39
- - **第三项目已选定**:`<试点工作区>` 同时覆盖 legacy 1.x、多仓、在途 Gate 与高密度历史证据,是比演示项目更有价值的第三例;但选择项目不等于产生有效 run。
40
- - **执行口径**:`V2-D2=A` 已拍板,进入完整内核 M0/M1,不再等待 AI 试点工作区第四项任务。不回放改写旧 candidate,也不专门造演示需求。
41
-
42
- ## 分叉判据
43
-
44
- - **结论 (b) 薄内核**:可组装能力加权覆盖率 ≥80%,三轮平均计划外介入 ≤2,且没有在两轮以上重复出现、无法由三项薄内核能力修补的 CRITICAL 缺口。
45
- - **结论 (a) 完整内核**:覆盖率 <80%,或至少两个 CRITICAL 运行缺口在两轮以上重复出现,或中断恢复/多步状态必须持续依赖人脑记忆。
46
- - **中间态**:默认取 (b),将存疑能力挂到 M4 复验;任何未跑场景必须标 `UNVERIFIED`,不得按通过计分。
47
-
48
- 指标与计算表见 [`pilot/metrics.md`](../pilot/metrics.md)。approval staleness、统一证据台账、policy/gate 检查器是已确定的薄内核自研面,不拿它们人为压低“可组装能力覆盖率”。
49
-
50
- ## 边界
51
-
52
- - M-1 本身不授权 merge/push/deploy;pilot-app 后续生产动作来自项目所有者另行明确授权,不能外推给 Tide 或其它试点任务。
53
- - AI 试点工作区当前不做 in-place v2 升级:v2 尚无发布 tag/预发布包,目标项目又没有可机械升级的 manifest,且现有工作树/在途 Gate 不能被试点污染。第三轮采用旁路 `pilot/*` worktree;若工作项跨仓,所有 candidate 必须由同一 run 显式绑定。
54
- - 提示词禁令只算 `ADVISORY`;必须移除 agent 的生产/发布凭据,并尽量使用宿主权限与网络限制。做不到就登记缺口,不得宣称已机器强制。
55
- - 只选低风险工作项;v1 维护线不因试点而改变运行行为。
56
- - 零新增运行时依赖;试点 evidence 留在专用工作目录,清理 branch/worktree 前先保留。
57
-
58
- ## 完成定义
59
-
60
- 三次真实流程观察 + F1–F6 结果 + 能力矩阵 + `V2-D2` 决策卡已齐;项目所有者已于 2026-08-28 选择 **A**,`V2-D2` 已入台账并回写 `V2-PLAN.md`。本迭代关闭,进入迭代 02(M0 三份 RFC + events v1 / observe schema 冻结)。
@@ -1,32 +0,0 @@
1
- # v2 迭代 02:M0 核心重置
2
-
3
- > 状态:**已完成——M0 于 2026-08-28 退出(项目所有者定稿,`V2-D3`)**
4
- > 上游:[`V2-PLAN.md`](V2-PLAN.md) §8 M0;`V2-D2=A`([`V2-DECISIONS.md`](V2-DECISIONS.md))
5
- > 时间盒:**≤1 周**(自 2026-08-28 起算)
6
-
7
- ## 迭代目标(唯一交付)
8
-
9
- M0 退出:核心名词、MVP 范围、旧概念处置(保留/转换/删除)无歧义;三份 RFC + 事件格式 v1 定稿。定稿即进入 M1(最小纵切)。
10
-
11
- ## 任务清单
12
-
13
- - [x] **T1 产品定位 RFC**:[`v2/RFC-0001-product-definition.md`](v2/RFC-0001-product-definition.md)——定位/边界/用户、Runner 与手工模式地位、v1 处置,以及**自研面逐项标注"厂商结构性不做"理由 + M-1 证据**(收尾修正二)。
14
- - [x] **T2 领域模型 RFC**:[`v2/RFC-0002-domain-model.md`](v2/RFC-0002-domain-model.md)——十三实体、状态模型、Evidence/Approval 合同、双平面存储与压实合同、核心名词消歧表、v1 概念处置表。
15
- - [x] **T3 Workflow/Policy RFC**:[`v2/RFC-0003-workflow-policy.md`](v2/RFC-0003-workflow-policy.md)——Workflow 文件模型、GateResult、Policy 四类 + 算子 + 强制等级、Approval/stale 流程、Loop 终止默认值、Risk Preset,**含 observe/bands schema 冻结**(裁决 #6)。
16
- - [x] **T4 事件格式 v1**:[`v2/SPEC-0001-events-v1.md`](v2/SPEC-0001-events-v1.md)——信封、损坏处理、reducer 合同、初始事件类型注册表;定稿即 FROZEN,此后 additive-only(裁决 #8)。
17
- - [x] **T5 v1 冻结与分支**:`v1-maintenance` / `v2` 分支已于 `V2-D0` 时建立,npm `latest` 留 v1;无新增动作。
18
- - [x] **T6 M0 退出评审(人工门)**:项目所有者于 2026-08-28 定稿四份文档(`V2-D3`);M0 退出,`V2-D2=A` 台账行的"M0 退出评审"关闭,进入 M1。
19
-
20
- ## 需求来源纪律
21
-
22
- 三份 RFC 的每个非纯工程条目均引用 M-1 试点记录([`pilot/metrics.md`](../pilot/metrics.md) 卡点 1–5、能力矩阵、F1–F6,[`pilot/evidence/2026-08-28-m1-runtime-gap.md`](../pilot/evidence/2026-08-28-m1-runtime-gap.md)),不引入无试点来源的新需求。
23
-
24
- ## 边界
25
-
26
- - M0 只产出文档与 schema 冻结,**不开始真实 Adapter 或内核编码**(报告 B M0 退出标准);
27
- - 授权边界沿用 `V2-D2=A`:仅本地 `v2` 分支,不含 push、merge、发布、部署、生产动作;
28
- - RFC 与 [`V2-PLAN.md`](V2-PLAN.md) 冲突时以 V2-PLAN 为准,除非项目所有者在评审中明确改判(改判须回写台账)。
29
-
30
- ## 完成定义
31
-
32
- 四份文档由项目所有者定稿;歧义清单清零;[`V2-PLAN.md`](V2-PLAN.md) §8 M0 标记完成后进入迭代 03(M1 最小纵切:events store + reducer + workflow parser + Workspace Manager + Mock/Shell Adapter + Evidence Collector v0 + `run start/status/stop`)。**已于 2026-08-28 达成**;迭代 03 见 [`V2-ITERATION-03.md`](V2-ITERATION-03.md)。
@@ -1,30 +0,0 @@
1
- # v2 迭代 03:M1 最小纵切
2
-
3
- > 状态:**已完成——M1 验收于 2026-08-28 通过**(证据:[`v2/M1-ACCEPTANCE-2026-08-28.md`](v2/M1-ACCEPTANCE-2026-08-28.md))
4
- > 上游:[`V2-PLAN.md`](V2-PLAN.md) §8 M1;RFC/SPEC 定稿:`V2-D3`([`V2-DECISIONS.md`](V2-DECISIONS.md))
5
- > 时间盒:**≤3 周**;授权边界沿用 `V2-D2=A`(仅本地 `v2` 分支,不含 push/merge/发布/部署/生产)
6
-
7
- ## 迭代目标
8
-
9
- 不追求内核完备,追求一条真实可跑的纵线。**验收**:真实项目上 `build → verify` 两步由 Shell Adapter 驱动跑通,证据全部来自回读。**止损**:纵切显示单人维护成本过高 → 降级为"单步推进 + 审批收件箱"半自动形态,M2 以后重排。
10
-
11
- ## 实现口径
12
-
13
- - **语言**:内核使用仓库现有约定——零运行时依赖的 Node ESM JavaScript + `node --test`,不引入 TypeScript 构建链。这是对报告 B §23.1(建议 TS)的**已声明偏离**:理由是 v1 全仓零依赖、`prepublishOnly` 直接跑源文件,引入编译步骤改变打包与测试形态,收益不抵成本;若 M2 出现类型复杂度失控,可低成本改判(届时回写台账)。
14
- - **目录**:`src/v2/{domain,engine,storage,workspace,adapters,evidence,cli}`,模块边界照报告 B §23.2;`adapters/` 不得直接改内核状态。
15
- - **合同来源**:事件一切以 [`v2/SPEC-0001-events-v1.md`](v2/SPEC-0001-events-v1.md)(FROZEN)为准;实现与规格冲突先改实现。
16
-
17
- ## 任务清单
18
-
19
- - [x] **T1 Event Ledger(WP1.2)**:`src/v2/storage/event-ledger.js`——append-only JSONL、单调 seq、digest/prev 哈希链、原子追加、损坏检测与截断报告、写侧合法性校验;测试 `tests/v2-event-ledger.test.js`(8 例:链校验、重放一致、篡改/删行截断、未知版本拒绝、未知类型保留跳过、写侧拒绝)。
20
- - [x] **T2 State Reducer(WP1.3)**:`src/v2/engine/reducer.js` + `src/v2/domain/`——由事件派生 Run/Step 状态、attempts、budgets、candidate、待批请求、evidence;replay 确定性;非法序列报告而非修补;测试 `tests/v2-reducer.test.js`(7 例:全流程、确定性、失败指纹连击、approval stale 往返、非法序列、checkpoint/interrupt)。
21
- - [x] **T3 最小 Workflow parser**:`src/v2/engine/workflow.js` + 严格 YAML 子集 `src/v2/engine/yaml-subset.js`(fail-closed:tab/锚点/flow/多行标量/重复键全部拒绝);官方预设 `src/v2/presets/software-delivery.yaml`;环检测 + 未知字段拒绝。
22
- - [x] **T4 Workspace Manager**:`src/v2/workspace/workspace-manager.js`——worktree 隔离、mkdir 原子锁、candidate 仅由 git 回读、dirty 拒绝;run 分支保留使 candidate 始终可达。
23
- - [x] **T5 Mock + Shell Adapter**:`src/v2/adapters/`——Mock 覆盖 succeed/fail/timeout/crash/invalid-output;Shell 配置化驱动任意 CLI;Adapter 不得触碰内核状态。
24
- - [x] **T6 Evidence Collector v0**:`src/v2/evidence/collector.js`——命令/退出码/日志 digest 回读,落 Evidence Contract(默认 L2)。
25
- - [x] **T7 `run start/resume/status/stop`**:`src/v2/cli/run.js` + `src/v2/runtime/orchestrator.js`(单 Project 单 Run 前台;终态压实 run-record)。**resume 即 F5 纵切**:在途 step 按 crashed 收口、恢复点取最近 CHECKPOINT/记录 entry、dirty 升级给人、workflow digest 变化拒绝恢复。
26
- - [x] **T8 M1 验收(2026-08-28 通过)**:BuildBeat 仓库自身 self-host——Shell Adapter 驱动 build(真实 commit candidate `30b3a0d`)→ verify(真实 `node --test` 20/20 回读),停在 `WAITING_HUMAN`,终态压实。证据:[`v2/M1-ACCEPTANCE-2026-08-28.md`](v2/M1-ACCEPTANCE-2026-08-28.md)。
27
-
28
- ## 完成定义
29
-
30
- T8 验收通过并留证据(run ledger + run-record 压实样例);`V2-PLAN.md` §8 M1 标记完成后进入 M2(自动修复环)。**已于 2026-08-28 达成**:验收证据 [`v2/M1-ACCEPTANCE-2026-08-28.md`](v2/M1-ACCEPTANCE-2026-08-28.md),压实样例 `delivery/work/WORK-V2-M1-ACCEPT/runs/RUN-M1-ACCEPT-01/run-record.json`;进入 M2。
@@ -1,29 +0,0 @@
1
- # v2 迭代 04:M2 自动修复环
2
-
3
- > 状态:**已完成——M2 于 2026-08-28 核验 18/20 通过**(2 项 `PARTIAL` 挂 M3;核验表:[`v2/M2-DOD-2026-08-28.md`](v2/M2-DOD-2026-08-28.md))
4
- > 上游:[`V2-PLAN.md`](V2-PLAN.md) §8 M2;M1 验收:[`v2/M1-ACCEPTANCE-2026-08-28.md`](v2/M1-ACCEPTANCE-2026-08-28.md)
5
- > 时间盒:**≤3 周**;授权边界沿用 `V2-D2=A`(仅本地 `v2` 分支,不含 push/merge/发布/部署/生产)
6
-
7
- ## 迭代目标
8
-
9
- MVP 核心承诺在此达成:**给 BuildBeat 一个已批准的目标和计划,它会自动完成 Build–Verify–Fix–Review 循环,并携带完整证据停在合并决定前。** 验收 = 报告 B §20 的 20 条 MVP DoD 逐条通过。
10
-
11
- ## 任务清单
12
-
13
- - [x] **T1 Worker 输出信封 v0**:adapter 经 `BUILDBEAT_OUTPUT` 提供信封文件路径;Worker 写 JSON(status/findings);信封非法即 `invalid-output`,fail-closed(`v2-review-loop` 第 3 例)。
14
- - [x] **T2 Review 闭环**:review 步消费信封 findings;P0/P1 → `findings-blocking` 边回 Fix(POLICY 结果 ROUTE);Reviewer **只读强制**(步前后 workspace 回读比对,写入即 BLOCK 停人);findings 落 Evidence(kind review)。测试 `tests/v2-review-loop.test.js`。
15
- - [x] **T3 决策运行时**:`src/v2/runtime/decisions.js` + CLI `inbox`/`approve`/`reject`——approve 前重验 subject 新鲜度(candidate 变了就刷新请求而不是盖章);决策同时落 `DECISION_RECORDED` 事件与 `delivery/work/<id>/decisions.jsonl`;final-decision 批准 → `RUN_TERMINAL SUCCEEDED` + 压实(merge 本身仍是人工外部动作)。测试 `tests/v2-approval.test.js`。
16
- - [x] **T4 F6 运行时关闭**:批准后 candidate/plan 变化 → resume 时机器检出 → `APPROVAL_STALE` → 回 `WAITING_HUMAN`;stale 请求的重批先刷新 subject 再绑定新对象;批准后干净恢复则跳过已批边界继续驱动(`v2-approval` 第 1/2 例)。
17
- - [x] **T5 Intent/Plan 读取**:run 启动读取 work 目录 intent/plan 并 pin digest 进 RUN_CREATED 与 Approval subject(`v2-mvp-loop` 断言 planDigest 贯穿到 final-decision subject)。
18
- - [x] **T6 预埋 Bug 自动修复端到端**:真实测试项目 fixture——builder 提交带 bug 候选 → verify 真实红 → fixer 修复 → verify 绿 → review 只读通过 → 停在合并前 → approve 终态 + 压实 + ledger 重放一致(`tests/v2-mvp-loop.test.js`)。
19
- - [x] **T7 MVP DoD 20 条逐条核验**:[`v2/M2-DOD-2026-08-28.md`](v2/M2-DOD-2026-08-28.md)——18/20 通过;#1(plan 的"被接受"强制)与 #20(coverage 纪律)标 `PARTIAL` 挂 M3,属 M3 Policy Engine 既定范围。
20
-
21
- ## 实现口径
22
-
23
- - workflow step 新增 `readonly` 字段(schema additive 演进;正式 JSON Schema 文件仍按 WP1.1 后补);官方预设 review 步 `readonly: true`。
24
- - `HUMAN_REQUESTED` data 新增 `kind`(`boundary` / `final-decision`;additive);`RUN_CREATED` data 新增 `planDigest` / `intentDigest`(additive)。SPEC-0001 信封与既有必填集不变。
25
- - 继续零运行时依赖 + `node --test`。
26
-
27
- ## 完成定义
28
-
29
- T7 的 DoD 核验表全绿(或逐条标注去向)并留证据;`V2-PLAN.md` §8 M2 标记完成后进入 M3(治理硬化)。**已于 2026-08-28 达成**:18/20 ✓,#1/#20 `PARTIAL` 且去向明确(M3 Policy Engine);MVP 核心承诺由 `tests/v2-mvp-loop.test.js` 端到端复现。进入 M3。
@@ -1,20 +0,0 @@
1
- # v2 迭代 05:M3 治理硬化
2
-
3
- > 状态:**已完成**(2026-08-28;M2 DoD #1 复核为 ✓,#20 收窄为仅剩 coverage 字段纪律挂 M4)
4
- > 上游:[`V2-PLAN.md`](V2-PLAN.md) §8 M3;M2 核验:[`v2/M2-DOD-2026-08-28.md`](v2/M2-DOD-2026-08-28.md)(#1/#20 PARTIAL 在本迭代关闭)
5
- > 时间盒:**≤2 周**;授权边界沿用 `V2-D2=A`(仅本地 `v2` 分支,不含 push/merge/发布/部署/生产)
6
-
7
- ## 任务清单
8
-
9
- - [x] **T1 Policy Engine**:`src/v2/policy/policy.js`——解析 fail-closed(未知算子/字段/类型拒绝);算子 `all/any/not`、`evidence.exists{kind,minGrade}`、`artifact.accepted`、`attempts.lt`、`budget.remaining`、`candidate.clean`、`human.approved`、`finding.maxSeverity`;三值逻辑,`UNVERIFIED` 永不当 PASS(`tests/v2-policy.test.js`)。
10
- - [x] **T2 四类接线**:pre/post 进 orchestrator(fail → WAIT_HUMAN,`onFail: BLOCK` → 终态;`ADVISORY` 只记录);transition 在 approve 时强制——`LOCAL_ENFORCED` 不满足即拒绝盖章并留 POLICY_EVALUATED 审计,`ADVISORY` 仅随结果警告;action 由 T3 能力剥离承担(`tests/v2-governance.test.js`)。
11
- - [x] **T3 Protected Actions 真实强制**:① Shell Adapter 默认**环境变量白名单**(宿主凭据 env 不达 Worker,`inheritEnv: true` 显式 opt-in 且 doctor 警告);② workspace 创建时对全部 remote 设 worktree 级 `pushurl=protected://…`(worktree 内 push 直接失败,主检出不受影响);merge/deploy/publish 内核无调用路径(不变量 20)。
12
- - [x] **T4 artifact.accepted + accept 命令**:接受即绑定文件 digest 的决策落 `decisions.jsonl`;工件再改动接受即 stale,重新接受重新绑定(关闭 DoD #1;`v2-policy` + `v2-governance` 第 1 例)。
13
- - [x] **T5 Risk Preset ×4**:`src/v2/presets/risk/{fast,standard,controlled,legacy-four-gates}.yaml` + 加载器;四预设全部保留人工合并门 + 证据地板;legacy 映射 G1→intent 接受、G2→plan 接受 + build 前人批、G3→合并决定、G4→超出 MVP(`tests/v2-risk-presets.test.js`)。
14
- - [x] **T6 UI 真渲染 Gate**:`src/v2/presets/policies/ui-render-gate.yaml`(approval 前必须存在带 digest 的 screenshot 证据);approve 侧强制验证(`v2-governance` 第 2 例,不变量 22)。
15
- - [x] **T7 doctor 强制等级报告**:逐条 Policy 报告声明 vs 实际等级;`SERVER_ENFORCED` 一律报"本地不可验证,不宣称";Worker env 模式与推送保护状态一并报告(CLI e2e 断言)。
16
- - [x] **T8 events / replay 补全**:`events`(台账列印 + 损坏警告)与 `replay`(digest/prev/seq 链校验 + 派生状态摘要)(CLI e2e 断言)。
17
-
18
- ## 完成定义
19
-
20
- 上述能力各有测试;M2 DoD #1/#20 复核为 ✓;`V2-PLAN.md` §8 M3 标记完成后进入 M4(evals、度量与试点)。**2026-08-28 达成**:T1–T8 全绿(v2 套件 58 项);DoD #1 已 ✓(digest 绑定接受 + staleness);#20 的 M3 部分(grade 地板 + `UNVERIFIED` 门控)已 ✓,coverage 字段纪律按原计划随 M4 evals 落地。进入 M4。
@@ -1,18 +0,0 @@
1
- # v2 迭代 06:M4 evals、度量与试点
2
-
3
- > 状态:**已完成——M4 于 2026-08-28 关闭**。外部试点项目数 2(pilot-backend + pilot-app),D6 原文口径满足;六退出指标全部达标(试点 Run 自动到达率 4/4)。第二项目证据:[`v2/M4-PILOT-APP-2026-08-28.md`](v2/M4-PILOT-APP-2026-08-28.md)(含完整 Build–Verify–Fix–Review 闭环实战:reviewer 阻断 → codex fixer → 二轮全绿)
4
- > 上游:[`V2-PLAN.md`](V2-PLAN.md) §8 M4;M3 收尾:[`V2-ITERATION-05.md`](V2-ITERATION-05.md)
5
- > 时间盒:**≤3 周**;授权边界沿用 `V2-D2=A`(仅本地 `v2` 分支;self-host 试点 Run 停在 `WAITING_HUMAN`,不 merge、不 push)
6
-
7
- ## 任务清单
8
-
9
- - [x] **T1 确定性套件补洞(WP5.1)**:Scope 越界即停(`allowedPaths`,越界不 pin candidate、`workspace.scope` BLOCK 落账);仓库级单活动 Run 锁;Adapter 故障路径 timeout/crash/spawn-error 端到端(`tests/v2-invariants.test.js`)。
10
- - [x] **T2 行为 evals 九目录(WP5.2)**:[`evals/`](../evals/README.md) 九场景卡 + 机器检查全部进 `tests/v2-evals.test.js`(`npm test` 单入口);每次真实事故收敛后在此追加永久回归。
11
- - [x] **T3 `metrics` v0**:本地只读,从 ledger 派生——终态分布、自动到达 `WAITING_HUMAN` 率、fix 轮次分布、人批等待、证据完整率、stale/预算计数;`--json` 可选(`tests/v2-metrics.test.js`)。
12
- - [x] **T4 Self-host 试点**:`RUN-SELF-001` 在本仓库真实跑通 build→verify(真实测试)→只读 review→停在合并决定,28 事件链校验通过;真实 remote 上实测推送保护生效;**试点抓到并修复一个真实缺陷**(YAML 子集引号标量误判)。证据:[`v2/M4-SELFHOST-2026-08-28.md`](v2/M4-SELFHOST-2026-08-28.md);Run 留在 inbox 待项目所有者处置。
13
- - [x] **T5 外部试点**:所有者点名真实需求 `LXJ-AUTH-PILOT-EXT-01`(pilot-backend 单仓,"文档 web 页面理解为 UI")——`RUN-PILOT-EXT-01` 由 **codex CLI 经 Shell Adapter** 全自动 5.2 分钟到合并决定:15 文件候选全在范围内、JDK17 全量 + portal 测试一次全绿、只读 review 零 findings、portal 页真渲染截图证据在册;停在 inbox 待所有者。证据:[`v2/M4-EXTERNAL-PILOT-2026-08-28.md`](v2/M4-EXTERNAL-PILOT-2026-08-28.md)。**D6 口径(1 项目双验收面 vs ≥2 项目)待所有者定夺后 M4 正式关闭。**
14
- - [x] **T6 M4 退出指标核验**:六指标表见 [`v2/M4-SELFHOST-2026-08-28.md`](v2/M4-SELFHOST-2026-08-28.md) §4——五项达标;"试点 Run 自动到达率"分母仅 self-host(1/1),外部试点部分如实标 `UNVERIFIED` 待 T5 回填。
15
-
16
- ## 完成定义
17
-
18
- T1–T4 全绿 + T6 核验表(外部试点相关行允许 `UNVERIFIED` 并注明等待 T5);T5 完成后回填指标,`V2-PLAN.md` §8 M4 标记完成后进入 M5。
@@ -1,36 +0,0 @@
1
- # v2 迭代 07:M5 闭环起步、迁移与 Beta
2
-
3
- > 状态:**已完成——M5 于 2026-08-28 关闭**(T1–T5 全部完成;`2.0.0-beta.1` 已发布到 dist-tag `next`,发布证据:[`v2.0.0-beta.1 evidence`](V2.0.0-BETA.1-RELEASE-EVIDENCE-2026-08-28.md))
4
- > 上游:[`V2-PLAN.md`](V2-PLAN.md) §8 M5;M4 收尾:[`V2-ITERATION-06.md`](V2-ITERATION-06.md)
5
- > 时间盒:**≤3 周**;授权边界沿用 `V2-D2=A`(仅本地 `v2` 分支,不含 push、merge、tag、部署);**`npm publish 2.0.0-beta.1` 是独立生产动作,须所有者单独授权后执行**
6
-
7
- ## 任务清单
8
-
9
- - [x] **T1 observe v0(RFC-0003 §8 冻结契约的实现)**:
10
- - `observe.yaml` 解析与校验(yaml-subset,fail-closed;bands 固定 log/diagnose/intent 三层,`triage.actions` 固定,`dismissFeedback: bands`);
11
- - Provider 执行(单周期 `observe run`;调度 v0 交给宿主 cron,见边界)→ 产出满足 Evidence Contract 的记录(采不到即 `unverified`,永不静默)→ 复用 `EVIDENCE_RECORDED` 进独立 observe 台账(同一 EventLedger 机制,链校验一致);
12
- - bands 分层:log(只落账)→ diagnose(触发配置的**只读**诊断命令,产出 `diagnosis` 证据)→ intent(**草稿**入队 Git 面 `delivery/observe/intents/`,绝不自动执行);
13
- - 人分诊 `observe triage`:fix_now / schedule / dismiss;**dismiss 回调 bands**——同指纹被 dismiss 后不再重复出 intent 草稿(除非严重度升级),分诊终态写在 Git 面草稿文件里(不变量 23:删 runtime 不丢分诊记忆);
14
- - 新事件类型 additive 注册(SPEC-0001 演进规则):`BAND_TRIGGERED` / `INTENT_DRAFTED` / `TRIAGE_RECORDED`;
15
- - 测试:配置 fail-closed、unverified 传导、band 路由、intent 只入队不执行、dismiss 反馈、runtime 可删。
16
- - [x] **T2 v1→v2 迁移 runbook(半天手工,WP6.2 原则)**:只读分析 v1 → 草稿 → 人工确认活动 Work → 冻结旧看板 → 新工作只进 v2 → 归档不双写 → 一个真实 Run 后才正式切换;装机量 N=1,不写 importer 工具。→ [`guide/08-migration-v1.md`](v2/guide/08-migration-v1.md)
17
- - [x] **T3 文档十件套(WP6.3)**:快速开始 / Workflow 编写 / Policy / Adapter / Worker 合同 / Evidence / Human Approval / v1 迁移(=T2)/ 安全与权限边界 / 故障恢复,落 [`docs/v2/guide/`](v2/guide/README.md)。
18
- - [x] **T4 Beta 打包准备**:`package.json` 版本 `2.0.0-beta.1`、`bin/buildbeat-v2.js` 入口、`files` 覆盖 `src/v2/`、`pack:check` 通过、v1 全套测试保持绿(v1 只冻结不删除,`latest` 不动)。文档一致性守卫(`tests/check_docs.py`)教会识别 prerelease 版本号(additive),教学快照/CLI 契约/RELEASING 版本联动完成。
19
- - [x] **T5 发布 `@haiyangbg/buildbeat@2.0.0-beta.1`(dist-tag `next`)**:所有者授权("发布吧,授权也一起")后经 GitHub Actions OIDC Trusted Publishing 完成;prepublish 门抓出并修正 3 个真实缺陷(发布脚本 dist-tag 契约、v1 cliVersion prerelease 校验、SCAFFOLD_VERSION 虚构跨大版本升级);`latest` 未动;独立回读五项全过。证据:[`V2.0.0-BETA.1-RELEASE-EVIDENCE-2026-08-28.md`](V2.0.0-BETA.1-RELEASE-EVIDENCE-2026-08-28.md)。
20
-
21
- ## 完成定义
22
-
23
- T1 测试全绿并入 `npm test` 单入口;T2/T3 文档齐十件且互链自洽;T4 `pack:check` 与全套测试通过;T5 授权前 M5 停在"beta-ready",授权后发布并回填证据。
24
-
25
- ## 进展(2026-08-28)
26
-
27
- - **T1**:`src/v2/observe/`(config fail-closed / runner / reducer / triage)+ 3 个 additive 事件类型(`BAND_TRIGGERED`/`INTENT_DRAFTED`/`TRIAGE_RECORDED`,`EVIDENCE_RECORDED` 复用即"同一 Evidence Contract 与台账"的冻结语义);`EventLedger` reducer 可插拔(additive,默认行为不变);`tests/v2-observe.test.js` 8 项覆盖 fail-closed/unverified 传导/band 路由/只入队/dismiss 反馈/不变量 23/链纪律。全量 `npm test` **139/139 绿**(观测新增前 131,零回归)。
28
- - **Self-host 试点**:本仓库真实接入([`.buildbeat/observe.yaml`](../.buildbeat/observe.yaml),探针=`tests/check-docs.sh` 文档漂移守卫)——cycle 1 真实跑通,`docs-drift: passed` 证据入账(`EVIDENCE_RECORDED`,digest 在 observe 台账),无误报、无草稿。
29
- - **T4 核验**:`check:docs` 162 文件全绿;`pack:check` 出包 `2.0.0-beta.1`(141 文件);`buildbeat-v2` bin 冒烟通过(usage / observe 三子命令 / 错误路径)。
30
- - **T5 未做**:`npm publish` 是生产动作,等待所有者授权(届时 `prepublishOnly` 会再整套跑一遍作为发布门)。
31
-
32
- ## v0 边界(如实声明)
33
-
34
- - Provider `schedule` 字段按冻结 schema 解析并落账,但 v0 不内置调度器——周期运行由宿主(cron / CI / 手动)反复调 `observe run` 实现;
35
- - diagnose 层 v0 执行配置的只读诊断命令(env 白名单继承 Shell Adapter 纪律),不是完整 fresh-context Agent Worker;
36
- - fix_now / schedule 的后续(把接受的 Intent 带进 `software-delivery` Run)v0 由人工发起,CLI 打印建议命令。
@@ -1,62 +0,0 @@
1
- # v2 迭代 08:等待要能找到人(会话复盘回灌)
2
-
3
- > 状态:**C1–C10 + Skill 驾驶手册已实现(源码在 `v2` 分支,未发布)**
4
- > 上游:[`V2-PLAN.md`](V2-PLAN.md);上一迭代 [`V2-ITERATION-07.md`](V2-ITERATION-07.md);变更明细见 [`CHANGELOG.md`](../CHANGELOG.md) Unreleased
5
- > 授权边界沿用 `V2-D2=A`(仅本地 `v2` 分支,不含 push、merge、tag、发布);`npm publish 2.0.0-beta.4` 是独立生产动作,须所有者单独授权
6
-
7
- ## 输入:复盘了什么
8
-
9
- - 试点工作区 2026-08-28~09-02 的全部 Claude / Codex 驾驶会话(8-30「当前进度极其缓慢」、9-1「Codex 进度好像又卡住了」、9-2「当前代办是什么,从每一个系统的进度说」、9-1「这个服务名字怎么起的」)
10
- - `pilot-backend` 与 `pilot-web` 两个子仓的 58 个 Run 台账(`buildbeat-v2 metrics` + 逐 Run events)
11
- - `pm/2026-09-01-BuildBeat三十轮复盘.md`、`pm/2026-09-01-首证复跑卡点经验.md`、`pm/2026-08-31-验证优化与瘦身计划.md`
12
- - 所有者 2026-09-02 两次拍板:「你说的我认可」(C1–C4 先做)→「继续下一轮,直到全部完成」;并指出**大部分人在其他 AI agent 里用 BuildBeat,Skill 才是真正入口,CLI 是被 Skill 调用的**
13
-
14
- | 试点工作区两个子仓的 Run | 数量 |
15
- |---|---|
16
- | 总数 | 58 |
17
- | 成功 | 7 |
18
- | 失败 | 17 |
19
- | 取消 | 32(多数在 WAITING_HUMAN 挂满一天后批量清掉) |
20
- | 人批平均等待 | 7~12 小时 |
21
-
22
- 结论:beta.3 吸收的是「审查循环烧钱」;这一周暴露的是另一族——**人看不见 Run 在干什么、看不见离目标还差多远、每开一个 Run 的手工成本**;以及 **AI 会话装载到的 Skill 还是 v1**。
23
-
24
- ## 任务清单
25
-
26
- - [x] **C1 运行中可见性**:Shell Adapter 实时流式落盘 + `status` 耗时/历史中位数/最后输出/STALLED(只标不杀)+ `metrics` 每步中位耗时。→ `src/v2/adapters/shell.js`、`src/v2/runtime/liveness.js`
27
- - [x] **C2 supersede**:同 Work 新 Run 起跑时旧的 `WAITING_HUMAN` 记 `SUPERSEDED`;`RUN_CREATED.data.supersedes`;`supersede: off`。→ `orchestrator.js`
28
- - [x] **C3 gc**:`gc --repo .` / `--apply true` / `--force true`;分支仅候选可从其他 ref 到达或无候选时删。→ `src/v2/runtime/gc.js`
29
- - [x] **C4 通知出站**:`.buildbeat/notify.yaml`(webhook|dingtalk,URL 只能 `urlEnv`);`HUMAN_REQUESTED` / `RUN_TERMINAL` / `STALLED`;fail-open;`watch` 脱离进程。→ `src/v2/runtime/notify.js`
30
- - [x] **C5 overview**:Work 级阶段机 + 下一步该谁;运行时删后由 run-record 补足。→ `src/v2/runtime/overview.js`
31
- - [x] **C6 信封一等公民**:`envelope:`(prompts / vars / pin)→ `BUILDBEAT_PROMPT` + `input.envelope`;`start --attempt new` 自动编号;`redact:` 证据脱敏。→ `src/v2/runtime/envelope.js`、`collector.js`
32
- - [x] **C7 verify 复用与增量审查**:`cache: {verify: tree}` 同树同命令同信封已通过即复用(`reused` 可见);reviewer input `lastReviewed`。→ `src/v2/runtime/cache.js`
33
- - [x] **C8 合并后车道**:预设 `release-readback` + 风险预设 `release`;workflow step `grade:`。→ `src/v2/presets/`
34
- - [x] **C9 可见命名进决策卡**:v2 AGENTS 模板第 ⑪ 条、Skill §0.5.2、Worker 合同。
35
- - [x] **C10 环境事实**:`requires:` `probe:` 条目;`env-facts.md` 约定(overview 显示)。→ `env-contract.js`
36
- - [x] **Skill 驾驶手册**:`SKILL.md` §0.5(用户一句话 → 会话调什么 → 回什么;run-config 最小样板)+ frontmatter v2 触发词;`templates/v2/AGENTS.md`、`templates/v2/指挥台.md`。
37
- - [x] **下一句该说什么**:`status` / `inbox` / `overview` / 通知附可复制命令(给会话用,不丢给用户)。
38
- - [x] 文档:CHANGELOG、指南 01/02/04/05/06/07/10、SPEC-0001 additive 注记、lessons #20/#21。
39
-
40
- ## 完成定义
41
-
42
- `npm test` 全绿(含新增 8 组测试);`check:docs` 通过;对试点工作区真实子仓跑 `gc`(计划模式)、`inbox`、`overview` 的输出符合预期且未改动任何东西(两个挂了 21 小时的 pilot-web 旧 Run 由所有者授权后 `stop`)。
43
-
44
- ## 边界(如实声明)
45
-
46
- - **编排器仍同步**:worker 在 `spawnSync` 里跑,`STALLED` 的通知由独立 `watch` 进程完成;`status` 的 STALLED 判定不需要它。异步化(进程内看表、并行 Run)不在本迭代。
47
- - **supersede 只碰 WAITING_HUMAN**;被另一进程锁住的旧 Run 跳过并明示。
48
- - **gc 永不写台账**;候选仅此分支可达时分支一律保留。
49
- - **通知不是审批通道**;钉钉走关键词模式,签名模式暂不支持。
50
- - **verify 复用只看树、命令、信封**:verifier 若依赖树之外的东西(远端服务、时间),项目不要开 `cache`。
51
- - **release 车道没有 finding 门**:车道里没有 reviewer,不设满足不了的规则;生产动作仍是人的(不变量 20)。
52
- - **`overview` 的"已合入"只对当前 checkout 分支判定**(`merge-base --is-ancestor`),远端是否推送不在其内。
53
- - **Skill 与 CLI 的关系**:Skill 是入口,CLI 是引擎;没装 CLI 时 §0.5 表格右列退化为会话手工维护同名文件,方法论不失效——但 Run 的机器强制(隔离 worktree、写者≠审者、digest 绑定)只有 CLI 才提供。
54
-
55
- ## 后续候选(未拍板)
56
-
57
- | # | 项 | 一句话 |
58
- |---|---|---|
59
- | N1 | 编排器异步化 | 进程内 STALLED、并行 Run、去掉 `watch` 子进程 |
60
- | N2 | `overview` 跨仓 | meta 仓一次看所有子仓的 Work(试点工作区是 meta + 3 子仓) |
61
- | N3 | 钉钉签名模式 | `secret` 也走 env,HMAC 签名 |
62
- | N4 | Skill 的 Bootstrap v2 | §8 引导式 Bootstrap 直接生成 v2 骨架(`delivery/`、`.buildbeat/`、v2 AGENTS) |