@haiyangbg/buildbeat 3.3.1 → 4.1.0

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 (102) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.en.md +20 -124
  3. package/README.md +20 -124
  4. package/SKILL.md +73 -84
  5. package/docs/CAPABILITY-MATRIX.md +30 -39
  6. package/docs/MIGRATION.md +93 -0
  7. package/docs/README.md +8 -37
  8. package/docs/RELEASING.md +4 -3
  9. package/docs/v2/RFC-0001-product-definition.md +3 -0
  10. package/docs/v2/RFC-0002-domain-model.md +3 -0
  11. package/docs/v2/RFC-0003-workflow-policy.md +3 -0
  12. package/docs/v2/SPEC-0001-events-v1.md +3 -0
  13. package/docs/v2/guide/00-how-to-talk.en.md +12 -56
  14. package/docs/v2/guide/00-how-to-talk.md +12 -56
  15. package/docs/v2/guide/01-quickstart.en.md +42 -111
  16. package/docs/v2/guide/01-quickstart.md +42 -111
  17. package/docs/v2/guide/02-workflow-guide.en.md +13 -123
  18. package/docs/v2/guide/02-workflow-guide.md +14 -122
  19. package/docs/v2/guide/03-policy-guide.en.md +6 -50
  20. package/docs/v2/guide/03-policy-guide.md +6 -50
  21. package/docs/v2/guide/04-adapter-guide.en.md +7 -60
  22. package/docs/v2/guide/04-adapter-guide.md +7 -60
  23. package/docs/v2/guide/05-worker-contract.en.md +6 -53
  24. package/docs/v2/guide/05-worker-contract.md +7 -52
  25. package/docs/v2/guide/06-evidence-guide.en.md +8 -44
  26. package/docs/v2/guide/06-evidence-guide.md +9 -43
  27. package/docs/v2/guide/07-approval-guide.en.md +8 -110
  28. package/docs/v2/guide/07-approval-guide.md +8 -121
  29. package/docs/v2/guide/09-security-boundaries.en.md +13 -37
  30. package/docs/v2/guide/09-security-boundaries.md +13 -37
  31. package/docs/v2/guide/10-recovery.en.md +12 -96
  32. package/docs/v2/guide/10-recovery.md +12 -96
  33. package/docs/v2/guide/11-session-handoff.en.md +10 -75
  34. package/docs/v2/guide/11-session-handoff.md +10 -75
  35. package/docs/v2/guide/12-without-runtime.en.md +46 -0
  36. package/docs/v2/guide/12-without-runtime.md +46 -0
  37. package/docs/v2/guide/README.en.md +16 -36
  38. package/docs/v2/guide/README.md +16 -36
  39. package/example/AGENTS.md +15 -69
  40. package/example/README.md +8 -23
  41. package/example/delivery/envelope/prompts/builder.md +3 -1
  42. package/example/delivery/envelope/prompts/fixer.md +3 -1
  43. package/example/delivery/envelope/prompts/reviewer.md +3 -1
  44. package/example/delivery/work/WORK-EXPORT-DATE-FILTER/run-config.yaml +1 -1
  45. package/example//346/214/207/346/214/245/345/217/260.md +8 -40
  46. package/package.json +2 -1
  47. package/src/v2/adapters/notification-payload.js +40 -0
  48. package/src/v2/adapters/shell.js +3 -1
  49. package/src/v2/cli/run-config-check.js +129 -45
  50. package/src/v2/cli/run.js +853 -254
  51. package/src/v2/engine/reducer.js +2 -0
  52. package/src/v2/engine/risk-preset.js +14 -47
  53. package/src/v2/engine/workflow.js +177 -185
  54. package/src/v2/evidence/collector.js +12 -1
  55. package/src/v2/evidence/image.js +346 -0
  56. package/src/v2/policy/policy.js +219 -286
  57. package/src/v2/presets/software-delivery.yaml +1 -16
  58. package/src/v2/runtime/cache.js +22 -1
  59. package/src/v2/runtime/decisions.js +185 -31
  60. package/src/v2/runtime/findings.js +4 -1
  61. package/src/v2/runtime/notify.js +42 -36
  62. package/src/v2/runtime/orchestrator.js +811 -297
  63. package/src/v2/runtime/overview-repos.js +79 -0
  64. package/src/v2/runtime/overview.js +279 -47
  65. package/src/v2/runtime/release.js +233 -0
  66. package/src/v2/runtime/run-record.js +1 -0
  67. package/src/v2/workspace/workspace-manager.js +8 -0
  68. package/templates/v2/AGENTS.md +20 -73
  69. package/templates/v2/BUILDBEAT.md +2 -13
  70. package/templates/v2/envelope/prompts/builder.md +3 -1
  71. package/templates/v2/envelope/prompts/fixer.md +3 -1
  72. package/templates/v2/envelope/prompts/reviewer.md +3 -1
  73. package/templates/v2/run-config.example.yaml +9 -7
  74. package/templates/v2/work.example.md +16 -0
  75. package/templates/v2//346/214/207/346/214/245/345/217/260.md +8 -40
  76. package/docs/v2/skill/01-principles.md +0 -26
  77. package/docs/v2/skill/02-project-layout.md +0 -31
  78. package/docs/v2/skill/03-collaboration-rules.md +0 -45
  79. package/docs/v2/skill/04-rhythm-and-rituals.md +0 -104
  80. package/docs/v2/skill/05-red-lines.md +0 -13
  81. package/docs/v2/skill/06-bootstrap-and-takeover.md +0 -84
  82. package/docs/v2/skill/07-templates-and-lessons.md +0 -24
  83. package/example/.buildbeat/observe.yaml +0 -31
  84. package/src/v2/observe/observe-config.js +0 -194
  85. package/src/v2/observe/observe-reducer.js +0 -117
  86. package/src/v2/observe/observe.js +0 -427
  87. package/src/v2/presets/observe.yaml +0 -45
  88. package/src/v2/presets/policies/ui-render-gate.yaml +0 -13
  89. package/src/v2/presets/release-readback.yaml +0 -36
  90. package/src/v2/presets/risk/controlled.yaml +0 -39
  91. package/src/v2/presets/risk/fast.yaml +0 -19
  92. package/src/v2/presets/risk/release.yaml +0 -21
  93. package/src/v2/presets/risk/standard.yaml +0 -28
  94. package/templates/ARCHITECTURE.md +0 -50
  95. package/templates/contracts/PROTOCOL.md +0 -28
  96. package/templates/pm/adr/ADR-0000-template.md +0 -25
  97. package/templates/pm/adr/README.md +0 -15
  98. package/templates/pm/decisions.md +0 -11
  99. package/templates/standards/CODE.md +0 -23
  100. package/templates/standards/DESIGN.md +0 -36
  101. package/templates/standards/REVIEW.md +0 -20
  102. package/templates/standards/STACK.md +0 -31
package/SKILL.md CHANGED
@@ -1,92 +1,97 @@
1
1
  ---
2
2
  name: buildbeat
3
- description: BuildBeat —— 面向人和 AI 会话的工程交付工作流,上下文落在项目文件、Git 管理长期事实,支持跨模型、跨工具、跨会话和跨人接续;帮助一个或多个端到端 Builder 用可验证证据闭环需求/功能工作包。运行时 `buildbeat`(由会话调用而非用户手敲):Work 目录 intent/plan digest 绑定接受;隔离 worktree 内 Build→Verify→Review→Fix 自动闭环,停在人的合并决定;overview/inbox/status 回答"到哪了/谁批/卡没卡";发现分诊、预算与成本、infra 故障停人、release-readback 上线回读、observe 生产体检、通知出站、gc 打扫。产品/全栈/测试是可调用的 AI 专业视角,不是人类岗位流水线。当用户说"换会话/删旧会话/继续项目/跨工具接手/同事接手/团队接力",或在 AI 会话里说"当前进度/开工/怎么样了/批准/上线/打扫卫生",或要为新项目搭多会话协作架构、给存量老项目套上协作流程(接管),提到"BuildBeat/Builder/人在回路/多 session 协作/AI 团队流程",或抱怨"多个 AI 会话信息不同步、任务过早结束、审批打断过多、review 过于频繁、验收漏验、返工螺旋"时使用。
3
+ description: BuildBeat 用项目文件接续上下文,在隔离工作树内自动实现、验证、审查和修复,带证据停在人的合并决定。用于持续迭代、换会话或工具接手、查看进度、执行工作、处理决定和恢复中断。运行时 `buildbeat` 负责推进,Skill 负责使用路由。
4
4
  ---
5
5
 
6
- # BuildBeat —— 面向人和 AI 会话的工程交付协议
6
+ # BuildBeat
7
7
 
8
- > 蒸馏自一个真实跑了多期迭代的实践:一个人协调多个并行 AI 会话,把一个含前端/BFF/多个后端服务/网关/审计的内部产品持续交付。这个案例说明来源,不限定人数;一个 Builder 可用,多个 Builder 也可共享 Git 后按工作包分别闭环。方法论与项目解耦,模板可直接拷贝。
8
+ 承诺:换会话能接着干,AI 自动推进工作,交付有证据。入口是 Skill,执行需要本地 `buildbeat` 运行时;文件始终可读,手工接管时必须如实说明哪些自动机制没有执行。
9
9
 
10
- > **会话随时换,项目接着干。** 继续工作所需的上下文落在项目文件中;会话按入口读取同一份目标、决定与证据,由 Loop 推进执行。关闭聊天前补齐未落盘事实;保留活动 Run 的台账与工作树。团队成员按已有权限同步项目文件与候选后可接手,有效的既有决定继续保留;新机器无活动项不代表原机器无 Run。跨成员、跨会话、跨工具和跨机器的具体边界见 [接续指南](docs/v2/guide/11-session-handoff.md)。
10
+ ## 运行时版本
11
11
 
12
- ## 0. 何时用 / 不用
12
+ 先跑 `buildbeat --version`,按结果选命令:
13
13
 
14
- - **用**:项目要跑多期迭代,或存在多个仓/部署单元/AI 上下文;一个或多个 Builder 需要让需求、契约、决定与证据长期同步。
15
- - **不用**:单仓小任务、一次性脚本、预计一周内收尾的事——直接开一个会话干完,套流程纯属 ceremony(要快就用 `fast` 风险预设,见 §5)。
14
+ - 4.x:按下文操作。
15
+ - 3.x:下文的 `run`、`status --work`、`decide`、`check`、`history` 和 `work.md` 在 3.x 不存在,沿用项目现有的 3.x 写法:`intent.md` + `plan.md`,分别 `accept --artifact intent` 与 `accept --artifact plan`;`start --config <config> --attempt new` 开工,`resume --config <config> [--run <RUN>] [--adopt <sha> --by <name>]` 续跑;`overview`、`inbox`、`status --run <RUN>` 看进度;`approve --transition <t>` / `reject --reason <why>` 决定;`findings adjudicate` 裁决问题;`doctor` 检查配置;run-config 保留 `workflow:` 与 `riskPreset:`。
16
+ - 3.x 的活动 Run 只能用 3.x 运行时完成或取消。升级到 4.x 前先问用户,并按[迁移说明](docs/MIGRATION.md)处理。
17
+ - 没有运行时:按[不装运行时也能参与](docs/v2/guide/12-without-runtime.md)只读状态、写 `work.md` 和规定格式的决定行;不得代批 Run,不得声称验证、审查或回读已通过。
16
18
 
17
- ## 0.5 驾驶手册 —— Skill 是入口,CLI 是它调用的引擎
19
+ ## 会话操作
18
20
 
19
- > 绝大多数人在 Claude Code / Codex / Cursor 这类 AI 会话里使用 BuildBeat,而不是亲手敲 `buildbeat`。所以**这一节是给会话读的**:用户说一句人话,会话按下表调命令、读输出、按格式收口。用户不需要知道任何命令;会话不得把命令名当成对用户的要求。方法论正文(§1–§10)按需读,见文末「按需再读」。
20
- > 装载方式:项目根 `AGENTS.md`(模板 [templates/v2/AGENTS.md](templates/v2/AGENTS.md))按所用工具的方式装载——多数 AI 编程工具自动读根目录 `AGENTS.md` 或 `CLAUDE.md`(后者只是一行指针);不自动读的工具由用户开场贴给会话。运行时 `npm install --global @haiyangbg/buildbeat@latest`(预发布才用 `@next`),Node ≥ 20。**没装 CLI 时**本节的"会话背后调什么"一列退化为会话手工维护同名文件(`delivery/work/<ID>/` 与 `decisions.jsonl`):工件协议照用,但自动闭环、隔离 worktree、digest 绑定批准校验、预算与恢复都不存在,会话不得把手工维护表述成等价能力。
21
+ | 用户意图 | 操作 |
22
+ |---|---|
23
+ | 接手、查看进度、有什么待批 | `buildbeat status --repo .`;主仓的 run 配置中 `repo:` 指向其他仓时,查看全部代码仓加 `--all-repos`(运行时 4.1 起;可加 `--work`、`--json`);单仓指定 `--work` 或 `--run` 查看细节 |
24
+ | 准备一项工作 | 写 `delivery/work/<ID>/work.md`,包含目标、范围、验收、实施计划;复制 run-config 样板并填真实命令 |
25
+ | 接受工作说明 | `buildbeat accept --repo . --work <ID> --by <owner>`;用户已有明确授权时直接记录,不重复问同一个决定 |
26
+ | 开工、继续 | `buildbeat run --config <config>`;首次编号,已有运行则恢复;明确新一轮时加 `--new` |
27
+ | 批准、拒绝 | 读取状态卡,再 `buildbeat decide --repo . --run <RUN> --action approve|reject --transition <t> --by <owner>`;非终态决定后续跑 |
28
+ | 问题接受、驳回 | `buildbeat decide --repo . --work <ID> --action accept|dismiss --fingerprint <fp> --by <owner> --note <reason>` |
29
+ | 已手修并提交 | `buildbeat run --config <config> --run <RUN> --adopt <sha> --by <name>`;检查干净工作树与实际 HEAD 后从 verify 继续 |
30
+ | 配置或环境有问题 | `buildbeat check --config <config>`;显式 `--step <step>` 会在主检出执行 worker,只有用户任务需要才调用,结果不是正式证据 |
31
+ | 上线后回读、关窗 | 人完成上线后 `buildbeat release --config <config> [--note <text>]`;最近一次回读通过再 `buildbeat decide --repo . --work <ID> --action close --result <text> --by <owner>`。回读失败不能关窗 |
32
+ | 结束一轮 | `buildbeat stop --repo . --run <RUN> --reason <reason>`;活动驱动持锁时先处理进程,不能把 stop 当作进程杀手 |
33
+ | 清理 | `buildbeat gc --repo .` 查看计划,授权范围内再加 `--apply`;不得丢唯一候选或脏工作树 |
21
34
 
22
- > 给用户看的完整版(按项目阶段:未开始 → 立项定方案 → 准备执行 → 执行推进 → 验收合并 → 上线 → 完结换期复盘)在 [docs/v2/guide/00-how-to-talk.md](docs/v2/guide/00-how-to-talk.md);用户问"我该怎么说"时把它给用户,不要复述命令。
35
+ ## 执行规则
23
36
 
24
- ### 0.5.1 用户一句话 → 会话做什么
37
+ - 用户只需理解工作、进度和决定;命令与 Run 编号由会话处理。
38
+ - 一个端到端 Work 对一个可验收结果负责。范围内继续推进,不能因单个文件或步骤完成就结束任务。
39
+ - 默认固定 build → verify → review → wait-merge,失败经 fix → verify。配置全部检查后才启动;不要生成 workflow.yaml 或 Policy 文件。
40
+ - Reviewer 独立、只读;任何自述不能代替 Git 和真实命令的证据。提供 builder/verifier/reviewer/fixer,缺 worker 时明确停下接管。
41
+ - 只在目标确认、真正例外和最终决定处请求用户。review 默认不分诊;不收敛、环境故障、预算耗尽照常停人,不能由驾驶会话冒充人批准。
42
+ - Work review 预算默认 6 轮,跨所有 Run 累计;保留缓存、增量审查、人工修复接管和环境故障分类。
43
+ - 长运行脱离宿主短超时启动。状态、最近输出、耗时和通知用于发现停顿;STALLED 不等于进程已终止。
44
+ - 新会话先读项目入口、work.md、Git 与状态。旧的 intent/plan 和历史记录继续读取;活动运行不能随意删除或重复启动。
45
+ - 既有项目规范由项目所有者维护,不覆盖;项目治理模板不在 BuildBeat 范围内。生产监控与部署放在项目工具中。有 UI 的交付在 run-config 写 `requireScreenshot: true`,verify 把真渲染截图以 PNG 写进 `BUILDBEAT_SCREENSHOT_DIR`。
46
+ - merge、push、发布、部署需要对应授权;最终批准只表示候选具备合并条件。不要用 `git add -A`,只提交本次具体文件。
47
+ - 保留范围检查、环境变量白名单、批准绑定、台账校验。它们不替代宿主沙箱和服务端保护。
48
+ - 新项目配置通知时确认用户希望使用的通道;已有决定直接沿用,URL 只来自环境变量。无通知时如实说明。
25
49
 
26
- | 用户说 | 会话背后调什么 | 会话回给用户什么 |
27
- |---|---|---|
28
- | 「换会话」「删旧会话」「继续这个项目」「同事接手」 | 按 [接续指南](docs/v2/guide/11-session-handoff.md) 核对项目入口、Work、Git、`overview` / `inbox` / `status`;离开前补齐未落盘事实,接手后区分活动 Run / 中断 / 待批 / 终态 | 「已保存哪些上下文、工作停在哪、下一步」;不把删聊天当删工作树,不重启仍活动的 Run,不伪造或代批决定 |
29
- | 「当前进度」「待办是什么」「X 上线了吗」「离上线还差多远」 | `buildbeat overview --repo .`(每个 Work 的阶段 + 下一步该谁 + `cost:` 已花的 Run/review 轮/等人次数/worker 时长)+ `observe status --repo .` | 每件事一句:走到哪、卡在谁、下一步;**不列命令**;花费超过 intent 止损线的 Work 要主动说「已 N 轮 review / N 小时,继续还是砍」 |
30
- | 「有什么要我拍板」 | `buildbeat inbox --repo .` | 逐项:等什么、证据在哪、推荐 A/B;用户回「批准/拒绝」后会话调 `approve`/`reject` |
31
- | 「开个 Work:〔目标〕」 | 写 `delivery/work/<ID>/intent.md`(为什么做 + **止损线**:最多几个 Run / 几轮 review / 几小时,越线先问人)+ `plan.md`(怎么做)+ `run-config.yaml`(`budgets.reviewRoundsPerWork` 对应止损线);给用户看摘要 | 「看完说接受」;用户说一次「接受」→ `accept --artifact intent,plan`(一条命令,两份各自 digest 绑定;不要分两次问) |
32
- | 「开工」「再来一轮」 | 先 `buildbeat doctor --config <run-config.yaml>`(会报本仓 intent/plan 是否存在且已接受、哪条 policy 会把 start 挡在哪步、每步预算),再 `start --config <run-config.yaml> --attempt new`(自动编号 RUN-X-01/02…,自动作废同 Work 的旧等待;**用 nohup/setsid 脱离启动**) | 「已起 RUN-X-02,停在合并决定时会通知/我会告诉你」 |
33
- | 「怎么样了」「卡住了吗」「正常吗」 | `buildbeat status --repo . --run <RUN>` | 一句:在跑第几步、跑了多久、历史通常多久、最后一次输出几分钟前;`STALLED` 就说「疑似卡住,建议停/等」;停在 kind `infra` 就说「worker 环境/后端故障,不是代码问题,恢复后我重跑,预算不扣」 |
34
- | 「批准 RUN-X」「拒绝,原因…」 | 先看 `inbox` 该 Run 等的是哪条 transition,再 `approve --transition <t> --by <用户名>` / `reject --reason`;非终态转换(`enter-fix` / `resume-<step>` / `enter-review`)批准后再 `resume --config <cfg>` 续跑;用 `--attempt new` 自动编号时会选择该家族唯一未终态 Run,也可 `--run <RUN-ID>` 指定;多个候选或没有未终态 Run 时按报错处理 | 说清批的是哪一步:「放行 fixer,续跑中」/「再跑一次,续跑中」/「合并决定已落,候选 <sha> 具备合并条件;合并/push/部署要你另说」。`SUCCEEDED` 不等于已合并 |
35
- | 会话自己在 Run 的 worktree 里把 finding 修完并提交了(Run 停在 enter-fix / resume-fix) | `resume --config <cfg> --adopt <sha> --by <会话名>`(跳过 fixer,从 verify 续跑;树必须干净、HEAD 必须是该 sha) | 「我已手修并提交 <sha>,验证重跑中」;**不要**为了让 fixer 空跑而 approve enter-fix |
36
- | 「这条 finding 不算,那条接受」 | `findings list` / `findings adjudicate --action dismiss|accept` → `approve --transition enter-fix` | 裁决结果一句 |
37
- | 「上线」「做生产动作」 | 用 `release-readback` 预设 + `riskPreset: release` 开 Run:preflight 回读 → 停 `enter-apply-readback` | 「回读全绿,现在轮到你做〔动作〕;做完说一声」→ 用户说「做完了」→ `approve enter-apply-readback` → 回读+观察 → 停关窗 |
38
- | 「打扫卫生」 | `buildbeat gc --repo .`(先出计划)→ 用户点头 → `--apply true` | 清了几个工作树、留了哪些分支及为什么 |
39
- | 「生产报警」「体检」 | `observe run --config .buildbeat/observe.yaml` → 看 `delivery/observe/intents/` | 草稿一句 + 「fix_now / schedule / dismiss 你选」 |
50
+ ## 配置样板
40
51
 
41
- ### 0.5.2 会话必须遵守的读法
42
-
43
- - **能实查的不问人**:`overview` / `status` / `inbox` / `metrics` / `observe status` 全是只读,先跑再答;不信文档、不信上游转述。
44
- - **环境故障不是候选缺陷**:超时、崩溃、非 JSON 输出、退出码 75 内核判 `infra` 停人;会话只做两件事——查后端/环境(worker 后端是否 404、端口是否被占、PATH 是否缺工具),恢复后 `approve --transition resume-<step>`;**不要**为了绕过去手写探针循环或起新 Run。verify / 包装脚本发现环境不满足就 `exit 75`。
45
- - **数字要落地**:`status` 给了耗时和历史中位数,回答「正常吗」必须带对比("verify 已 14 分钟,历史中位 6 分钟,最后输出 2 分钟前,还在动");没数据就说没数据。
46
- - **输出里的 `next:` 行是给会话的**,会话据此调命令,不把命令原文丢给用户;用户只需要回「批准 / 拒绝 / 接受 / 做完了 / A / B」。
47
- - **人批三级**(§4.2):`STOP_NOW` 只用于跨发布门 / 扩范围 / 改冻结契约 / 不可逆外部动作 / 接受风险;可逆取舍攒到门前一次批 2~5 个;事实与派生约束自己定。**所有者以后要看见或念出来的名字与参数(域名、服务名、环境名、自停时长、窗口时长)属于门前决策项,不由 worker 顺手定**——真实事故:一个按内部术语起的服务名让所有者连问四轮才改成他听得懂的业务名。
48
- - **环境事实是交付物**:跑出来的"目标机 Python 3.6 / Redis 必须 ≥7 / 端口 8080 被占"写进 `delivery/work/<ID>/env-facts.md`,并尽量转成 run-config `requires:` 的 `probe:` 条目,下窗直接引用,禁止口口相传。
49
- - **收口格式**统一「已做 → 未做 → 下一步」,各一句,证据紧跟事项(§6.4);中间探索不套模板。
50
-
51
- ### 0.5.3 写 run-config 时的最小样板(会话代写,用户不用看)
52
+ 以下为完整样板。路径相对工作目录,替换 Work 标识、变更范围和真实工具命令。worker.sh 与 prompts 复制到 delivery/envelope/。
52
53
 
53
54
  ```yaml
55
+ # BuildBeat v2 run 配置样板。拷到 delivery/work/<WORK-ID>/run-config.yaml 后改 work / run / allowedPaths / workers。
56
+ # 路径相对本文件解析。严格 YAML 子集:只有块列表与块映射(列表项可与键同缩进),行内只允许空的 [] / {},无锚点,注释必须独占一行。
57
+ # 起跑前:buildbeat check --config <本文件>;起跑:buildbeat run --config <本文件>
54
58
  repo: ../../..
55
59
  work: WORK-X
56
- # 家族名;start --attempt new 自动编成 RUN-X-01/02…
60
+ # 家族名;run 自动编成 RUN-X-01/02…,--new 开新一轮
57
61
  run: RUN-X
58
- # 从 $(npm root -g)/@haiyangbg/buildbeat/src/v2/presets/software-delivery.yaml 复制到本目录
59
- workflow: workflow.yaml
60
- # fast | standard | controlled | release(配 release-readback 预设)
61
- riskPreset: standard
62
- entry: build
62
+ # builder / fixer 只能改这些目录;越界改动不成为候选
63
63
  allowedPaths:
64
64
  - src
65
65
  - tests
66
- # off = P0/P1 直接派 fixer;高风险项目改 required,每轮先停人分诊
66
+ # off = P0/P1 finding 直接派 fixer;高风险项目改成 required,每轮先停人分诊再派 fixer
67
67
  reviewTriage: off
68
- # 可省;run 配置 > 预设 > 默认。非只读步成功不扣次数;review 仍按轮计费。
69
- # review 不收敛(修过的 finding 又出现/阻断数变多)才在 enter-fix 停人;
70
- # reviewRoundsPerWork(默认 6)是 review 轮数唯一上限,跨本 Work 所有 Run 累计,到顶一次批准修复、重验、再审
68
+ # 非只读步成功不扣次数;review 按轮计费。review 不收敛(修过的 finding 又出现,或阻断数多于上一轮)才在 enter-fix 停人。
69
+ # reviewRoundsPerWork 是 review 轮数唯一的上限(默认 6),跨本 Work 所有 Run 累计,对应 intent 的止损线;
70
+ # 到顶的阻断 review 在 enter-fix 一次批准修复、重验、再审。总 attempt 超过(配置值 + 人批扩额)的 3 倍前仍兜底停人。
71
71
  budgets:
72
72
  reviewRoundsPerWork: 6
73
- # 同树+同命令+同信封已通过就复用证据(标 REUSED)
73
+ # 默认一个仓库同时只驱动一个 Run。确认本项目的测试不抢固定端口、不共用数据库后,
74
+ # 可加 parallel: true,让本 Work 的 Run 与其他同样打开开关的 Work 并行(同一 Work 仍互斥)
75
+ # 同树 + 同命令 + 同信封已通过就复用 verify 证据
74
76
  cache:
75
77
  verify: tree
76
- # prompts/<component>-<worker>.md 或 <worker>.md;内核喂给 worker($BUILDBEAT_PROMPT)。冻结信封时加 pin: <meta 提交 sha>
78
+ # 内核把 prompts/<worker>.md 喂给 worker($BUILDBEAT_PROMPT);模板见 templates/v2/envelope/prompts/
77
79
  envelope:
78
80
  prompts: ../../envelope/prompts
79
81
  vars:
80
- component: auth
81
- requires:
82
- - command: node
83
- min: "20"
84
- - probe: "redis-cli -h $REDIS_HOST ping"
85
- expect: PONG
86
- name: redis-reachable
82
+ component: app
83
+ # worker 输出落成证据前按这些 JS 正则脱敏(不支持 (?i) 这类内联标志)
87
84
  redact:
88
85
  - "(token|secret|password|TOKEN|SECRET|PASSWORD)=\\S+"
89
- # worker.sh 与三份 prompt 从 templates/v2/envelope/ 拷到仓级 delivery/envelope/;换工具只改 -- 后面的命令
86
+ # 有 UI 的交付:verify 把真渲染截图以 PNG 写进 $BUILDBEAT_SCREENSHOT_DIR(只收可解码的 PNG),合并检查要求当前候选有截图
87
+ # requireScreenshot: true
88
+ # 合并并上线后由 buildbeat release 在主检出运行的只读回读命令(形状同 worker);回读通过后才能关窗
89
+ # release:
90
+ # command: bash
91
+ # args:
92
+ # - scripts/readback.sh
93
+ # worker 以隔离 worktree 为 cwd 运行;delivery/envelope/worker.sh 已随仓库进 worktree。
94
+ # 换工具只改 `--` 后面的命令:codex exec … / claude -p … / 任意脚本。
90
95
  workers:
91
96
  builder:
92
97
  command: bash
@@ -98,6 +103,7 @@ workers:
98
103
  - exec
99
104
  - -s
100
105
  - workspace-write
106
+ # 真实测试命令;环境不满足就 exit 75(内核当基础设施故障停人)
101
107
  verifier:
102
108
  command: bash
103
109
  args:
@@ -113,6 +119,7 @@ workers:
113
119
  - exec
114
120
  - -s
115
121
  - read-only
122
+ # 不能省:没配它,verify 失败 / review 阻断时 Run 停人等手修
116
123
  fixer:
117
124
  command: bash
118
125
  args:
@@ -125,32 +132,14 @@ workers:
125
132
  - workspace-write
126
133
  ```
127
134
 
128
- (严格 YAML 子集:只有块列表与块映射,行内只允许空的 `[]` / `{}`,列表项可与键同缩进,**注释必须独占一行**;上面这份可原样解析,机器验证在 `tests/v2-templates-firstrun.test.js`。**`fixer` 不能省**:没配它,verify 失败或 review 阻断时 Run 停 `WAITING_HUMAN` 等人手修,不会自动修。完整样板 [templates/v2/run-config.example.yaml](templates/v2/run-config.example.yaml),信封 [templates/v2/envelope/](templates/v2/envelope/worker.sh)。)通知通道另放 `.buildbeat/notify.yaml`(URL 只能来自环境变量),见 [docs/v2/guide/07-approval-guide.md](docs/v2/guide/07-approval-guide.md);指南索引 [docs/v2/guide/README.md](docs/v2/guide/README.md)。
129
-
130
- **第一次为一个项目写 run-config 时,会话要多问用户一句**:「Run 停下来等你批、跑完、或疑似卡住时,要不要推到钉钉/webhook?给我一个只放在环境变量里的 URL 就行」——试点一直没启用通知,一张合并卡就绪后隔夜等了 9.5 小时。用户说不要就记一句「通知未启用,等待只在 inbox 里」。
131
-
132
- worker prompt 里要写清三条环境事实(模板 AGENTS 第 ⑨ 条):沙箱不能监听端口(socket 测试交给 verify)、PATH 只认 POSIX 工具、环境不满足就 `exit 75`。
133
-
134
- ## 红线摘要(全文与理由见 [05-red-lines.md](docs/v2/skill/05-red-lines.md),单点写进项目根 AGENTS.md §3)
135
-
136
- 1. **凭据不入 git、不出本机**:文档只标位置不写值,默认装 gitleaks pre-commit 闸;worker 只拿点名的环境变量,通知 URL 只走环境变量。
137
- 2. **不 `git add -A`**:只 stage 自己工作包的具体文件,多仓按仓分别提交。
138
- 3. **不未授权部署**、不 force-push、不 `--amend` 已推送历史、不 `--no-verify`;合并/push/发布是人的动作,逐项授权。
139
- 4. **每次部署完必更对应仓 CHANGELOG**,部署后 `observe run` 一轮。
140
- 5. **写者≠审者**:Run 内置只读 reviewer 机器强制,写者转述不构成证据。
141
- 6. **事实分层**:已确认 / 待核 / 拟议 / 已实现四类分开,未实查一律写「待核」。
142
- 7. 资源选型 **稳定 > 便宜**;长连接服务部署带优雅下线。
143
-
144
- ## 按需再读:方法论正文(原 §1–§10)
135
+ ## 按需阅读
145
136
 
146
- 驾驶手册里提到的 `§N` 都在下列文件里,原节号不变。遇到对应场景再读,不必每次装载。
137
+ - [快速开始](docs/v2/guide/01-quickstart.md)
138
+ - [固定流程与配置](docs/v2/guide/02-workflow-guide.md)
139
+ - [决定与证据](docs/v2/guide/07-approval-guide.md)
140
+ - [恢复](docs/v2/guide/10-recovery.md)、[接续](docs/v2/guide/11-session-handoff.md)
141
+ - [安全边界](docs/v2/guide/09-security-boundaries.md)
142
+ - [不装运行时也能参与](docs/v2/guide/12-without-runtime.md)
143
+ - [迁移](docs/MIGRATION.md)
147
144
 
148
- | 原节号 | 什么时候读 | 文件 |
149
- |---|---|---|
150
- | §1 四根支柱、§2 工作包与 AI 视角 | 解释 BuildBeat 为什么这样设计、决定要不要拆视角 | [01-principles.md](docs/v2/skill/01-principles.md) |
151
- | §3 项目文件布局 | 新建或核对项目目录、`.gitignore`、装载入口 | [02-project-layout.md](docs/v2/skill/02-project-layout.md) |
152
- | §4 协作规则、§4.1 任务包、§4.2 审批分层、§4.3 决策包 | 判断一件事要不要问人、怎么批量问、会话何时可以结束 | [03-collaboration-rules.md](docs/v2/skill/03-collaboration-rules.md) |
153
- | §5 风险预设、§6 三个仪式、§6.4 收口格式、§6.5 读数、§6.6 拍板与换期 | 开工 / 收工 / 收口 / 解读 `overview`、`status` 读数 / 换期 | [04-rhythm-and-rituals.md](docs/v2/skill/04-rhythm-and-rituals.md) |
154
- | §7 红线全文 | 任何涉及凭据、提交、部署、审查边界的动作之前 | [05-red-lines.md](docs/v2/skill/05-red-lines.md) |
155
- | §8 Bootstrap 新项目、§8.5 接管存量项目 | 用户要「搭骨架 / 给项目套上 BuildBeat / 接管老项目」 | [06-bootstrap-and-takeover.md](docs/v2/skill/06-bootstrap-and-takeover.md) |
156
- | §9 模板索引、§10 实战教训 | 找模板、查某条机制背后的事故([lessons.md](lessons.md)) | [07-templates-and-lessons.md](docs/v2/skill/07-templates-and-lessons.md) |
145
+ 启动前将 work.md 和 worker 脚本提交到所选 base,确保隔离工作树能读到同一份已确认范围;接受记录可以随后提交。
@@ -1,39 +1,30 @@
1
- # BuildBeat 能力矩阵 / Capability Matrix
2
-
3
- > 状态:BuildBeat `@haiyangbg/buildbeat`(dist-tag `latest`;发布证据按版本归档在 [`releases/`](releases/) 的 `*-RELEASE-EVIDENCE-*.md`)。本页按**产品层次**区分三个可用面:Skill-only 手工路径、运行时 `buildbeat`、Claude Code 插件。源码、registry artifact 与真实项目证据仍分别核验。
4
-
5
- ## 0. 三个可用面
6
-
7
- | 层 | 是什么 | 装在哪 | 权威文档 | 已验证到什么程度 |
8
- |---|---|---|---|---|
9
- | **Skill-only 手工路径** | 工件协议(Work 目录、intent/plan、决策台账、证据分级)由 AI 会话按 `SKILL.md` 手工维护 | Skill 本身(仓库 `SKILL.md` / 插件) | `SKILL.md` | 协议完整可用;**没有**自动闭环、隔离 worktree、digest 绑定批准校验、预算与恢复 |
10
- | **运行时 `buildbeat`** | 隔离 worktree 内 Build→Verify→Review→Fix 自动闭环,停在人的合并决定;`accept / start / resume / status / inbox / overview / approve / reject / findings / doctor / preflight / gc / metrics / observe / watch` | `npm install --global @haiyangbg/buildbeat@latest` | [`v2/guide/`](v2/guide/README.md)、RFC-0001/2/3、SPEC-0001 | 单元与 CLI 端到端测试(`tests/v2-*.test.js`,含脚本 worker 的模板首跑)与打包首跑(`tests/pack-firstrun.test.sh`);真实 AI worker 试点见 `docs/v2/M4-*`、迭代记录(`codex exec` 实证;其他工具"可通过命令接入",未逐一验证) |
11
- | **Claude Code 插件** | 把 Skill、模板、文档、lessons 装进 Claude Code;**不含**任何 CLI `bin/` | `claude plugin marketplace add HaiYangBG1/BuildBeat` + `claude plugin install buildbeat@buildbeat-plugins` | [`plugins/buildbeat/README.md`](../plugins/buildbeat/README.md) | `tests/plugin-marketplace.test.sh`(manifest 校验、隔离安装、缓存自包含);装了插件不等于装了运行时,两者分别检查 |
12
-
13
- 一句话:Skill 是入口(会话读它决定调什么),`buildbeat` 是引擎(跑 Run、回读事实),项目文件是事实(Git 面 `delivery/` 与本机 `.buildbeat/`),插件只是把入口送进 Claude Code。
14
-
15
- ## 1. 运行时面:`buildbeat`
16
-
17
- | 能力 | Skill-only / 手工路径 | 运行时 `buildbeat` | 权威与边界 |
18
- |---|---|---|---|
19
- | 工件接受 | 会话记一行到 `decisions.jsonl` | `accept --artifact intent\|plan\|spec`(逗号分隔可一次接受多份,如 `intent,plan`):每份各自 digest 绑定;改过即 `stale`,`doctor` / `overview` 报出 | 接受不是开工;policy 按 riskPreset 决定 build 前要求哪些工件已接受 |
20
- | 自动闭环 | 无 | `start --config <run-config> [--attempt new]`:隔离 worktree、builder→verify→review→fix 自动路由、停 `WAITING_HUMAN` | 一仓同时只有一个活动 Run;worker 是配置的任意命令,内核不内置模型 |
21
- | 进度与等待 | 会话读目录 | `overview`(每 Work 阶段 / 下一步 / 成本)、`inbox`(等人的 Run + 下一句命令)、`status`(步、耗时、STALLED、证据、findings)、`metrics` | 全部只读;本机绝对路径不进输出 |
22
- | 人批 | 会话记一行 | `approve --transition <t>` / `reject`:绑定 transition + candidate + planDigest + evidenceDigest,盖章前重读实况;非终态转换后 `resume` | 合并决定 = 候选具备合并条件;合并 / push / 部署无调用路径(不变量 20) |
23
- | 发现分诊与锚定 | 无 | `reviewTriage: required` + `findings list / adjudicate`;reviewer 输入带历史裁决 `anchor` | dismiss 后同指纹不阻断;严重度升级 = 新指纹 |
24
- | 预算与成本 | 无 | 每步 `maxAttempts`、Work 级 `reviewRoundsPerWork`、`BUDGET_EXTENDED` 续批、`overview` 的 `cost:` 行 | 预算耗尽是停人不是失败 |
25
- | 故障与恢复 | 无 | timeout / crash / invalid-output / exit 75 判 `infra` 停人不扣预算;`resume`(含 `--adopt <sha>`);`replay` 校验台账;`gc` 清工作树 | 重启后可能重跑未落账的步;台账人工改过不保证可重建 |
26
- | 上线回读 | 手工记录 | `release-readback` 预设 + `riskPreset: release`:preflight 回读 → 人做 → apply 回读 → observe → 关窗 | 生产动作永远在 Runner 之外 |
27
- | 生产体检 | 无 | `observe run / status / triage`:探针 → 分层 → Intent 草稿入队 | 草稿绝不自动执行 |
28
- | 通知 | 无 | `.buildbeat/notify.yaml`(钉钉 / webhook,URL 只能来自环境变量) | 通知不是审批通道 |
29
- | 环境合同 | 无 | `requires:`(command / probe)启动前 fail-closed;worker env 白名单,`env:` 点名注入,`inheritEnv` 显式打开 | 见 [安全边界](v2/guide/09-security-boundaries.md):内核检测与移除的边界 vs 宿主沙箱 |
30
- | 首跑验证 | — | `tests/v2-templates-firstrun.test.js`:脚本 worker 从模板走到合并决定(含 verify 失败→fixer);`tests/pack-firstrun.test.sh` 从安装后的包再走一遍 | 证明路径与合同连得上,不证明真实模型能完成任务 |
31
-
32
- ## 2. Distribution status / 分发状态
33
-
34
- - **Skill-only:** first-class and complete for protocol semantics; it does not need the runtime.
35
- - **Runtime:** `@haiyangbg/buildbeat@latest` ships one executable, `buildbeat`, with zero third-party runtime dependencies. Each published version is independently read back (registry identity, provenance, signatures, isolated install, packaged first run) before the tag moves; the dated evidence files in this directory are the record, [`RELEASING.md`](RELEASING.md) is the procedure.
36
- - **Claude Code plugin:** the local marketplace candidate distributes the canonical Skill/templates/docs, not the top-level npm CLI `bin/`; installation evidence does not authorize project writes or npm publication.
37
- - **Project runtime:** the Git files remain independently usable without the runtime. BuildBeat has no account service, telemetry, remote project database, or hosted agents; the runtime is a local process that orchestrates the commands you configure and never carries a model of its own.
38
-
39
- The command surface is documented in [`v2/guide/`](v2/guide/README.md) with RFC-0003 as the workflow authority. Removed generations (the file bus, its lifecycle CLI, and the pre-3.0 executable names) live only in the dated history under this directory and in [`CHANGELOG-v1.md`](../CHANGELOG-v1.md).
1
+ # BuildBeat capability matrix / 能力矩阵
2
+
3
+ Current release: 4.1.0. One product path: Skill → local runtime →
4
+ project records. The Claude Code plugin distributes the Skill and references;
5
+ install the runtime separately. Files remain readable without the runtime, but
6
+ manual work has no automatic loop, isolation, budget or approval enforcement;
7
+ [Taking part without the runtime](v2/guide/12-without-runtime.en.md) states what
8
+ may be written by hand.
9
+
10
+ | Capability | Current implementation | Boundary |
11
+ |---|---|---|
12
+ | Work context | work.md, accepted digest, decisions, candidate and evidence | Chat discussions must be saved explicitly |
13
+ | Delivery loop | Fixed build/verify/review/fix flow | External CLI tools do the actual work |
14
+ | Recovery | Run/step ledger, resume, manual candidate adoption, stale locks | Active runtime is not transferred by Git clone |
15
+ | Trusted result | Real command evidence, current candidate, read-only review | Script tests do not prove real AI business capability |
16
+ | Decisions | Acceptance, exact approval, frozen checks, budget/convergence stops | No automatic merge, push or deployment |
17
+ | Efficiency | Verify cache, review range hints, parallel Work isolation | External test state must be isolated and stable |
18
+ | Feedback | Unified status/cost/decisions, also across a main repository and its code repositories (`--all-repos`), liveness, webhook/DingTalk | Notifications do not approve |
19
+ | UI evidence | `requireScreenshot`: screenshots from verify, bound to the candidate and required at merge | The project's verify renders and captures |
20
+ | Release closeout | `release` records the project's readback in the Work; `decide --action close` on a passing readback | No deployment; observation stays with project monitoring |
21
+ | Maintenance | Check, history/replay, safe gc | Not a production monitoring service |
22
+
23
+ The runtime has no account service, telemetry, remote project database, hosted
24
+ agents or built-in model. Recorded real AI-worker evidence covers codex exec;
25
+ other CLI integrations require their own validation.
26
+
27
+ Production observation, the release-readback lane, UI policy files, custom rule
28
+ languages and the shipped governance templates are retired; the release
29
+ closeout and the screenshot switch above cover the release and UI cases. [Migration](MIGRATION.md) preserves the old-record and
30
+ active-run boundary. [Guides](v2/guide/README.md) describe current usage.
@@ -0,0 +1,93 @@
1
+ # Product simplification migration / 减法迁移
2
+
3
+ Status: applies to 4.0.0 and later. Installing the runtime changes no project
4
+ file; finish or cancel 3.x runs still in progress with their 3.x runtime first.
5
+
6
+ ## Existing work / 存量工作
7
+
8
+ - Keep candidate branches, raw logs, decisions, findings and run-record.json.
9
+ The CLI does not delete or rewrite them during migration. Old event schemas
10
+ remain readable; historical release records still display RELEASED.
11
+ - Finish existing 3.x active runs with their original 3.3.1 runtime: those
12
+ ledgers do not contain frozen deliveryChecks, so this major refuses to resume
13
+ or approve them. They remain readable and cancellable. Official legacy
14
+ software-delivery configurations can start NEW attempts on this version;
15
+ their exact workflow digest and original safeguards are retained. Never edit
16
+ the workflow or switch bound artifacts during a run. Legacy intent/plan/spec
17
+ records remain readable.
18
+ - fast/standard/controlled are compatibility inputs, mapped to the same required
19
+ artifacts and severity floor. controlled cannot silently fall back to standard.
20
+ A legacy config that names a workflow but no riskPreset had no artifact gate
21
+ and keeps none (it runs as fast); the merge evidence floor now always applies.
22
+ - The legacy planner steps (entry intent/spec/plan) cannot be combined with a
23
+ preset that requires acceptance: the accepted artifact is bound and checked in
24
+ base before the run starts. Write, accept and commit it, then use entry: build.
25
+ - Custom workflow graphs, policy files and release/observe execution are retired.
26
+ Their configurations fail before starting workers. Finish/cancel active work
27
+ using its existing 3.3.1 runtime; preserve the records and configure project
28
+ verification/CI scripts explicitly before creating new delivery work.
29
+ - Never run 3.3.1 against a new 4.x run: it does not enforce the new frozen-check
30
+ fields. Roll back the tool only after new runs are stopped and their state is
31
+ retained. Use separate installation prefixes when comparing versions.
32
+ - 旧项目文件不自动删除、不自动改写。先核对活动运行和外部使用,再迁移。
33
+ 自定义/生产流程要先完成或停止旧运行、保留证据,随后显式迁入项目工具。
34
+
35
+ ## New work / 新工作
36
+
37
+ Write delivery/work/<ID>/work.md with goal, scope, acceptance and implementation
38
+ plan; accept that one file. Omit workflow, riskPreset and policies in new run
39
+ configurations. The fixed build/verify/review/fix graph and acceptance/evidence
40
+ checks are built in. Optional maxReviewSeverity: P3 tightens review; stopAt and
41
+ reviewTriage: required add explicit human boundaries when actually needed.
42
+
43
+ Creation freezes deliveryChecks in the event ledger. Resume cannot weaken them;
44
+ approval derives them from the ledger even without --config. Changing work.md
45
+ invalidates its acceptance and cannot authorize an old candidate implicitly;
46
+ the same holds for a candidate that edits its own copy, and for intent.md under
47
+ the legacy controlled safeguards. Start pins the base to one commit, refuses an
48
+ artifact missing from it, and compares the isolated checkout itself with the
49
+ accepted bytes before the run is recorded.
50
+ Legacy projects may keep their old files; do not add work.md in the middle of an
51
+ active legacy run because that changes the bound artifact.
52
+
53
+ ## Command consolidation / 命令合并
54
+
55
+ | Old entry | Current entry |
56
+ |---|---|
57
+ | start / resume / resume --adopt | run; --new explicitly starts another attempt |
58
+ | overview / inbox / status / metrics | status, optionally --work / --run / --json |
59
+ | approve / reject / findings adjudicate | decide --action ... with the exact subject |
60
+ | doctor / preflight | check; explicit --step still executes in the main checkout |
61
+ | events / replay | history / history --verify |
62
+
63
+ Old core spellings remain aliases over shared handlers. accept, stop and gc stay
64
+ explicit. watch is internal feedback plumbing. The old observe command returns a
65
+ migration error; it never runs a probe or changes old records.
66
+
67
+ ## Removed scope / 移出范围
68
+
69
+ Production monitoring and diagnosis/intent queues move to project-owned
70
+ monitoring, scripts and CI. A delivery run still stops at the merge decision.
71
+ The release-readback lane is replaced by `buildbeat release` (the project's own
72
+ read-only readback command, recorded in the Work's releases.jsonl) and
73
+ `decide --action close`, which closes the window only on a passing readback.
74
+ UI delivery sets `requireScreenshot: true`: verify writes PNG screenshots of
75
+ the real render to BUILDBEAT_SCREENSHOT_DIR and the merge check requires them.
76
+
77
+ The optional governance templates (standards, ADR, decision log, contracts,
78
+ architecture) were never generated by default. They sit outside the delivery
79
+ loop 4.0 focuses on, are no longer shipped, and stay readable under
80
+ docs/history/retired-templates. Projects keep and maintain their own copies.
81
+
82
+ Without the runtime, people and tools still take part through the files under
83
+ the rules in [Taking part without the runtime](v2/guide/12-without-runtime.en.md):
84
+ they read state, write work.md and append decision lines in the documented
85
+ format, and never approve runs or claim evidence. The archived Skill-only
86
+ manual rulebook is not restored.
87
+
88
+ ## Validation / 验证
89
+
90
+ Compare candidate/evidence/decision outcomes, worker attempts and human stops in
91
+ the deterministic first-run, repair, resume and stale-approval scenarios. Run the
92
+ package-installed first-run test, not only source tests. A change in test-suite
93
+ wall time or package size does not establish real-model delivery speed.
package/docs/README.md CHANGED
@@ -1,39 +1,10 @@
1
- # docs/ 总入口
1
+ # BuildBeat documentation
2
2
 
3
- > 这一页只回答"我该读哪份"。文件按**现行**与**历史**分开:现行文档描述今天的包(`@haiyangbg/buildbeat@latest`)并受 `tests/check_docs.py` 的时效检查约束;历史文档保存当时的事实与数字,只加状态说明、不改原文。
3
+ - [Usage guides](v2/guide/README.md)
4
+ - [Capabilities and boundaries](CAPABILITY-MATRIX.md)
5
+ - [Migration](MIGRATION.md)
6
+ - [Release procedure](RELEASING.md)
7
+ - [Original product RFC](v2/RFC-0001-product-definition.md), [domain RFC](v2/RFC-0002-domain-model.md), [workflow RFC](v2/RFC-0003-workflow-policy.md), [event schema](v2/SPEC-0001-events-v1.md): read their dated revision notes first.
4
8
 
5
- ## 现行:用户读
6
-
7
- | 你要做什么 | 读 |
8
- |---|---|
9
- | 第一次用,在 AI 会话里 | [`v2/guide/00-how-to-talk.md`](v2/guide/00-how-to-talk.md) → 会话读 [`SKILL.md`](../SKILL.md) §0.5 |
10
- | 第一次用,自己敲命令核对 | [`v2/guide/01-quickstart.md`](v2/guide/01-quickstart.md) · [English](v2/guide/01-quickstart.en.md) |
11
- | 指南索引(日常 / 配置) | [`v2/guide/README.md`](v2/guide/README.md) |
12
- | 关闭旧会话后继续,或由其他成员/工具接手 | [`跨会话接续`](v2/guide/11-session-handoff.md) · [English](v2/guide/11-session-handoff.en.md) |
13
- | 三个可用面各能做什么(Skill-only / 运行时 / 插件) | [`CAPABILITY-MATRIX.md`](CAPABILITY-MATRIX.md) |
14
- | 项目装载入口与信封模板 | [`../templates/v2/`](../templates/v2/AGENTS.md) |
15
- | 填好之后长什么样:一个 Work 跑到合并决定的快照 | [`../example/`](../example/README.md) |
16
-
17
- ## 现行:规范与维护
18
-
19
- | 内容 | 读 |
20
- |---|---|
21
- | 产品定位 / 域模型 / workflow 与 policy / 事件 schema | [`v2/RFC-0001`](v2/RFC-0001-product-definition.md) / [`RFC-0002`](v2/RFC-0002-domain-model.md) / [`RFC-0003`](v2/RFC-0003-workflow-policy.md) / [`SPEC-0001`](v2/SPEC-0001-events-v1.md)(`FINAL`;带日期的生效修订写在正文顶部) |
22
- | 发布手册、通道、发布后同步清单 | [`RELEASING.md`](RELEASING.md) |
23
- | 分支策略、测试分层、文档权威分层 | [`../CONTRIBUTING.md`](../CONTRIBUTING.md)、[`../tests/README.md`](../tests/README.md) |
24
- | 每条机制背后的真实事故 | [`../lessons.md`](../lessons.md) |
25
-
26
- ## 历史(保存当时事实,不改原文)
27
-
28
- | 类别 | 文件 |
29
- |---|---|
30
- | 发布证据([`releases/`](releases/)) | 每个发布一份 `<版本>-RELEASE-EVIDENCE-<日期>.md`;当前 `latest` 是哪一版以 [`RELEASING.md`](RELEASING.md) 顶部的现状段与 registry 回读为准 |
31
- | 规划与决策(2026-08) | [`V2-PLAN.md`](history/V2-PLAN.md)(执行基线,已交付)、[`V2-PROPOSAL.md`](history/V2-PROPOSAL.md)、[`V2-DECISIONS.md`](history/V2-DECISIONS.md)、[`V2-D2-DECISION-CARD.md`](history/V2-D2-DECISION-CARD.md)、[《BuildBeat v2:AI 原生软件交付控制平面》](history/BuildBeat%20v2%EF%BC%9AAI%20%E5%8E%9F%E7%94%9F%E8%BD%AF%E4%BB%B6%E4%BA%A4%E4%BB%98%E6%8E%A7%E5%88%B6%E5%B9%B3%E9%9D%A2.md) |
32
- | 迭代与里程碑记录 | [`history/`](history/) 下的 `V2-ITERATION-01~08.md`、[`v2/`](v2/) 下的 M1/M2/M4 验收与试点记录 |
33
- | M-1 脚本驱动试点(2026-08,已被运行时取代,不再执行) | [`history/pilot/`](history/pilot/README.md)(`loop.sh`、试点度量与证据) |
34
- | 早期版本史 | [`../CHANGELOG-v1.md`](../CHANGELOG-v1.md)(2026-06 ~ 2026-08 的条目原文;当前条目在根 [`CHANGELOG.md`](../CHANGELOG.md)) |
35
- | 早期路线与阶段试点(2026-08,已移除的文件总线时代) | [`ROADMAP.md`](history/ROADMAP.md)、[`EXECUTION-PLAN.md`](history/EXECUTION-PLAN.md)、[`history/`](history/) 下的 `PHASE1/2/4-*.md`、[`CLI-STRATEGY-2026-08.md`](history/CLI-STRATEGY-2026-08.md)、[`CLI-PILOT-2026-08-23.md`](history/CLI-PILOT-2026-08-23.md)、[`PHASE4-STABILITY-AUDIT-2026-08-25.md`](history/PHASE4-STABILITY-AUDIT-2026-08-25.md) |
36
-
37
- 历史文件里的版本号、通道与测试数字是它们日期当天的事实,出现已被移除的旧机制和旧通道策略是正常的;判断现状只看现行文档与 registry 回读(`npm view @haiyangbg/buildbeat dist-tags`)。
38
-
39
- 历史文件放在 [`history/`](history/),发布证据放在 [`releases/`](releases/),都只保存在 GitHub 仓库里、不随 npm 包分发(`package.json` 的 `files` 对 `docs/` 用白名单,只收现行文档);从安装目录点开现行文档里指向历史文件的链接会落空,到 [`HaiYangBG1/BuildBeat`](https://github.com/HaiYangBG1/BuildBeat/tree/main/docs) 看即可。现行文档全部随包分发,`tests/pack-firstrun.test.sh` 守着这两条边界。
9
+ Historical planning, retired methodology/templates, and release evidence remain
10
+ in the repository under history/ and releases/ and are excluded from npm.
package/docs/RELEASING.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  This runbook governs BuildBeat's public npm distribution. The canonical package is `@haiyangbg/buildbeat` in `HaiYangBG1/BuildBeat`; the only executable is `buildbeat`. No other package name or executable alias receives publications.
4
4
 
5
- Release evidence at source package version `@haiyangbg/buildbeat@3.3.1`; latest independently verified BuildBeat npm distribution `@haiyangbg/buildbeat@3.3.0` (dist-tags `latest` and `next`; the owner moved `next` from `3.2.1` to `3.3.0` with npm 2FA on 2026-10-02), anchored by annotated tag `v3.3.0` at commit `1ce1a7e`, workflow run [36973733935](https://github.com/HaiYangBG1/BuildBeat/actions/runs/36973733935), and archived in [`V3.3.0-RELEASE-EVIDENCE-2026-10-02.md`](releases/V3.3.0-RELEASE-EVIDENCE-2026-10-02.md). The 3.2.1 chain (`latest` from 2026-09-26 until 3.3.0 took over on 2026-10-02; the owner moved `next` from `3.0.1` to `3.2.1` with npm 2FA on 2026-09-26) stays archived in [`V3.2.1-RELEASE-EVIDENCE-2026-09-26.md`](releases/V3.2.1-RELEASE-EVIDENCE-2026-09-26.md). The 3.2.0 chain (`latest` on 2026-09-26 until 3.2.1 took over the same day) stays archived in [`V3.2.0-RELEASE-EVIDENCE-2026-09-26.md`](releases/V3.2.0-RELEASE-EVIDENCE-2026-09-26.md). The 3.1.0 chain (`latest` on 2026-09-26 until 3.2.0 took over the same day) stays archived in [`V3.1.0-RELEASE-EVIDENCE-2026-09-26.md`](releases/V3.1.0-RELEASE-EVIDENCE-2026-09-26.md). The 3.0.1 chain (`latest` from 2026-09-09 until 3.1.0 took over on 2026-09-26) stays archived in [`V3.0.1-RELEASE-EVIDENCE-2026-09-09.md`](releases/V3.0.1-RELEASE-EVIDENCE-2026-09-09.md). The 3.0.0 chain (`latest` from 2026-09-09 until 3.0.1 took over the same day; the first version without the removed generation) stays archived in [`V3.0.0-RELEASE-EVIDENCE-2026-09-09.md`](releases/V3.0.0-RELEASE-EVIDENCE-2026-09-09.md). The 2.0.2 chain (`latest` from 2026-09-09 until 3.0.0 took over the same day; the last version carrying the removed generation) stays archived in [`V2.0.2-RELEASE-EVIDENCE-2026-09-09.md`](releases/V2.0.2-RELEASE-EVIDENCE-2026-09-09.md). The 2.0.1 chain (`latest` from 2026-09-06 until 2.0.2 took over on 2026-09-09) stays archived in [`V2.0.1-RELEASE-EVIDENCE-2026-09-06.md`](releases/V2.0.1-RELEASE-EVIDENCE-2026-09-06.md). The 2.0.0 chain (`latest` from 2026-09-05 until 2.0.1 took over on 2026-09-06) stays archived in [`V2.0.0-RELEASE-EVIDENCE-2026-09-05.md`](releases/V2.0.0-RELEASE-EVIDENCE-2026-09-05.md). The beta.5 chain stays archived in [`V2.0.0-BETA.5-RELEASE-EVIDENCE-2026-09-05.md`](releases/V2.0.0-BETA.5-RELEASE-EVIDENCE-2026-09-05.md). The beta.4 chain stays archived in [`V2.0.0-BETA.4-RELEASE-EVIDENCE-2026-09-03.md`](releases/V2.0.0-BETA.4-RELEASE-EVIDENCE-2026-09-03.md); the beta.3 chain in [`V2.0.0-BETA.3-RELEASE-EVIDENCE-2026-09-01.md`](releases/V2.0.0-BETA.3-RELEASE-EVIDENCE-2026-09-01.md). The beta.2 chain stays archived in [`V2.0.0-BETA.2-RELEASE-EVIDENCE-2026-08-28.md`](releases/V2.0.0-BETA.2-RELEASE-EVIDENCE-2026-08-28.md); the beta.1 chain stays archived in [`V2.0.0-BETA.1-RELEASE-EVIDENCE-2026-08-28.md`](releases/V2.0.0-BETA.1-RELEASE-EVIDENCE-2026-08-28.md). Earlier distributions and the retired legacy package name are archived in the dated evidence files under `docs/releases/`.
5
+ Release evidence at source package version `@haiyangbg/buildbeat@4.1.0`; latest independently verified BuildBeat npm distribution `@haiyangbg/buildbeat@4.0.0` (dist-tags `latest` and `next`; the owner moved `next` from `3.3.1` to `4.0.0` with npm 2FA on 2026-10-05), anchored by annotated tag `v4.0.0` at commit `c15fbe0`, workflow run [37262387333](https://github.com/HaiYangBG1/BuildBeat/actions/runs/37262387333), and archived in [`V4.0.0-RELEASE-EVIDENCE-2026-10-05.md`](releases/V4.0.0-RELEASE-EVIDENCE-2026-10-05.md). The 3.3.1 chain (`latest` from 2026-10-02 until 4.0.0 took over on 2026-10-05; the owner moved `next` from `3.3.0` to `3.3.1` with npm 2FA on 2026-10-02) stays archived in [`V3.3.1-RELEASE-EVIDENCE-2026-10-02.md`](releases/V3.3.1-RELEASE-EVIDENCE-2026-10-02.md). The 3.3.0 chain (`latest` on 2026-10-02 until 3.3.1 took over the same day; the owner moved `next` from `3.2.1` to `3.3.0` with npm 2FA that day) stays archived in [`V3.3.0-RELEASE-EVIDENCE-2026-10-02.md`](releases/V3.3.0-RELEASE-EVIDENCE-2026-10-02.md). The 3.2.1 chain (`latest` from 2026-09-26 until 3.3.0 took over on 2026-10-02; the owner moved `next` from `3.0.1` to `3.2.1` with npm 2FA on 2026-09-26) stays archived in [`V3.2.1-RELEASE-EVIDENCE-2026-09-26.md`](releases/V3.2.1-RELEASE-EVIDENCE-2026-09-26.md). The 3.2.0 chain (`latest` on 2026-09-26 until 3.2.1 took over the same day) stays archived in [`V3.2.0-RELEASE-EVIDENCE-2026-09-26.md`](releases/V3.2.0-RELEASE-EVIDENCE-2026-09-26.md). The 3.1.0 chain (`latest` on 2026-09-26 until 3.2.0 took over the same day) stays archived in [`V3.1.0-RELEASE-EVIDENCE-2026-09-26.md`](releases/V3.1.0-RELEASE-EVIDENCE-2026-09-26.md). The 3.0.1 chain (`latest` from 2026-09-09 until 3.1.0 took over on 2026-09-26) stays archived in [`V3.0.1-RELEASE-EVIDENCE-2026-09-09.md`](releases/V3.0.1-RELEASE-EVIDENCE-2026-09-09.md). The 3.0.0 chain (`latest` from 2026-09-09 until 3.0.1 took over the same day; the first version without the removed generation) stays archived in [`V3.0.0-RELEASE-EVIDENCE-2026-09-09.md`](releases/V3.0.0-RELEASE-EVIDENCE-2026-09-09.md). The 2.0.2 chain (`latest` from 2026-09-09 until 3.0.0 took over the same day; the last version carrying the removed generation) stays archived in [`V2.0.2-RELEASE-EVIDENCE-2026-09-09.md`](releases/V2.0.2-RELEASE-EVIDENCE-2026-09-09.md). The 2.0.1 chain (`latest` from 2026-09-06 until 2.0.2 took over on 2026-09-09) stays archived in [`V2.0.1-RELEASE-EVIDENCE-2026-09-06.md`](releases/V2.0.1-RELEASE-EVIDENCE-2026-09-06.md). The 2.0.0 chain (`latest` from 2026-09-05 until 2.0.1 took over on 2026-09-06) stays archived in [`V2.0.0-RELEASE-EVIDENCE-2026-09-05.md`](releases/V2.0.0-RELEASE-EVIDENCE-2026-09-05.md). The beta.5 chain stays archived in [`V2.0.0-BETA.5-RELEASE-EVIDENCE-2026-09-05.md`](releases/V2.0.0-BETA.5-RELEASE-EVIDENCE-2026-09-05.md). The beta.4 chain stays archived in [`V2.0.0-BETA.4-RELEASE-EVIDENCE-2026-09-03.md`](releases/V2.0.0-BETA.4-RELEASE-EVIDENCE-2026-09-03.md); the beta.3 chain in [`V2.0.0-BETA.3-RELEASE-EVIDENCE-2026-09-01.md`](releases/V2.0.0-BETA.3-RELEASE-EVIDENCE-2026-09-01.md). The beta.2 chain stays archived in [`V2.0.0-BETA.2-RELEASE-EVIDENCE-2026-08-28.md`](releases/V2.0.0-BETA.2-RELEASE-EVIDENCE-2026-08-28.md); the beta.1 chain stays archived in [`V2.0.0-BETA.1-RELEASE-EVIDENCE-2026-08-28.md`](releases/V2.0.0-BETA.1-RELEASE-EVIDENCE-2026-08-28.md). Earlier distributions and the retired legacy package name are archived in the dated evidence files under `docs/releases/`.
6
6
 
7
7
  ## Channels and branches
8
8
 
@@ -135,8 +135,9 @@ Publishing the artifact is one surface. These are the others; each has drifted a
135
135
  - [ ] `CHANGELOG.md`: `## Unreleased` renamed to the version with date and the publication paragraph (run id, dist-tag, readback).
136
136
  - [ ] `docs/releases/<VERSION>-RELEASE-EVIDENCE-<date>.md` archived; the current-state paragraph at the top of this runbook names the new version and the previous stable moves to a dated past tense — never two "current" versions in one runbook.
137
137
  - [ ] `README.md` / `README.en.md`: version and channel claims (`@latest` is what it says it is), no `@next` install line unless a pre-release is being announced as such.
138
- - [ ] `SKILL.md` §0.5 install line and `docs/v2/guide/01-quickstart.md` install line: stable channel.
139
- - [ ] `docs/CLI.md` status line, `docs/CAPABILITY-MATRIX.md` status line and distribution section.
138
+ - [ ] `README.md` / `README.en.md` getting-started install block and the opening of `docs/v2/guide/01-quickstart.md` / `.en.md`: a stable-channel install line, with no unreleased-candidate wording left behind.
139
+ - [ ] `SKILL.md` runtime-version section: names the runtime majors the released Skill supports, so a plugin refresh never hands an older installed runtime commands it lacks.
140
+ - [ ] `docs/CAPABILITY-MATRIX.md` status line and distribution section.
140
141
  - [ ] Active RFC / plan documents whose channel policy the release changed get a dated "生效修订" note; history keeps its original text.
141
142
  - [ ] GitHub repository About (description, topics, homepage) still describes the product that was just released — cannot be checked from the repository, do it by hand.
142
143
  - [ ] GitHub Release marked Latest for a stable release, not for a pre-release.
@@ -1,5 +1,8 @@
1
1
  # RFC-0001:BuildBeat v2 产品定位
2
2
 
3
+ > 2026-10-03 revision (unreleased 4.0.0-dev.0): the owner approved product simplification. New work uses work.md, a fixed delivery loop and built-in checks. Observe/release execution, UI-specific policies, custom workflow/Policy authoring and default governance scaffolding are retired. Legacy official delivery files and historical events remain readable; unsupported configurations fail explicitly. RUN_CREATED may carry optional deliveryChecks, frozen for resume/approval. See [migration](../MIGRATION.md). The original dated specification below is preserved as history.
4
+
5
+
3
6
  > 状态:`FINAL`(2026-08-28 项目所有者定稿,`V2-D3`;M0 随三份 RFC 与 [`SPEC-0001-events-v1.md`](SPEC-0001-events-v1.md) 定稿退出)
4
7
  > 日期:2026-08-28
5
8
  > 上游:[`V2-PLAN.md`](../history/V2-PLAN.md)(执行基线,`V2-D0=B`);内核范围:完整内核(`V2-D2=A`,[`V2-DECISIONS.md`](../history/V2-DECISIONS.md))
@@ -1,5 +1,8 @@
1
1
  # RFC-0002:BuildBeat v2 领域模型
2
2
 
3
+ > 2026-10-03 revision (unreleased 4.0.0-dev.0): the owner approved product simplification. New work uses work.md, a fixed delivery loop and built-in checks. Observe/release execution, UI-specific policies, custom workflow/Policy authoring and default governance scaffolding are retired. Legacy official delivery files and historical events remain readable; unsupported configurations fail explicitly. RUN_CREATED may carry optional deliveryChecks, frozen for resume/approval. See [migration](../MIGRATION.md). The original dated specification below is preserved as history.
4
+
5
+
3
6
  > 状态:`FINAL`(2026-08-28 项目所有者定稿,`V2-D3`)
4
7
  > 日期:2026-08-28
5
8
  > 上游:[`V2-PLAN.md`](../history/V2-PLAN.md) §3–4;报告 B §6 / §13 / §14(经基线裁决修订)
@@ -1,5 +1,8 @@
1
1
  # RFC-0003:BuildBeat v2 Workflow 与 Policy
2
2
 
3
+ > 2026-10-03 revision (unreleased 4.0.0-dev.0): the owner approved product simplification. New work uses work.md, a fixed delivery loop and built-in checks. Observe/release execution, UI-specific policies, custom workflow/Policy authoring and default governance scaffolding are retired. Legacy official delivery files and historical events remain readable; unsupported configurations fail explicitly. RUN_CREATED may carry optional deliveryChecks, frozen for resume/approval. See [migration](../MIGRATION.md). The original dated specification below is preserved as history.
4
+
5
+
3
6
  > 状态:`FINAL`(2026-08-28 项目所有者定稿,`V2-D3`;§8 observe/bands schema 已随定稿冻结)
4
7
  > 日期:2026-08-28
5
8
  > 上游:[`V2-PLAN.md`](../history/V2-PLAN.md) §3.2–3.7;报告 B §8–11 / WP1.4–1.5 / WP4.3–4.5
@@ -1,5 +1,8 @@
1
1
  # SPEC-0001:Event Ledger 格式 v1(冻结)
2
2
 
3
+ > 2026-10-03 revision (unreleased 4.0.0-dev.0): the owner approved product simplification. New work uses work.md, a fixed delivery loop and built-in checks. Observe/release execution, UI-specific policies, custom workflow/Policy authoring and default governance scaffolding are retired. Legacy official delivery files and historical events remain readable; unsupported configurations fail explicitly. RUN_CREATED may carry optional deliveryChecks, frozen for resume/approval. See [migration](../MIGRATION.md). The original dated specification below is preserved as history.
4
+
5
+
3
6
  > 状态:**FROZEN**(2026-08-28 项目所有者定稿,`V2-D3`;[`V2-PLAN.md`](../history/V2-PLAN.md) 裁决 #8:格式 day-1 冻结,此后 additive-only)
4
7
  > 日期:2026-08-28
5
8
  > 冻结范围:**信封字段、通用规则、损坏处理、reducer 合同、初始事件类型注册表的语义**。文件摆放位置、快照格式、CLI 展示均为非规范内容,可变。