@haiyangbg/buildbeat 1.20.0 → 2.0.0-beta.1
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.
- package/CHANGELOG.md +29 -7
- package/README.en.md +6 -4
- package/README.md +6 -4
- package/SKILL.md +33 -2
- package/bin/buildbeat-v2.js +6 -0
- 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" +2053 -0
- package/docs/CAPABILITY-MATRIX.md +4 -4
- package/docs/CLI.md +6 -6
- package/docs/EXECUTION-PLAN.md +9 -9
- package/docs/PHASE4-STABILITY-AUDIT-2026-08-25.md +10 -8
- package/docs/PHASE4-V1.20-PILOT-2026-08-25.md +4 -0
- package/docs/RELEASING.md +6 -6
- package/docs/ROADMAP.md +16 -14
- package/docs/V1.21-RELEASE-EVIDENCE-2026-08-25.md +55 -0
- package/docs/V2-D2-DECISION-CARD.md +37 -0
- package/docs/V2-DECISIONS.md +11 -0
- package/docs/V2-ITERATION-01.md +60 -0
- package/docs/V2-ITERATION-02.md +32 -0
- package/docs/V2-ITERATION-03.md +30 -0
- package/docs/V2-ITERATION-04.md +29 -0
- package/docs/V2-ITERATION-05.md +20 -0
- package/docs/V2-ITERATION-06.md +18 -0
- package/docs/V2-ITERATION-07.md +36 -0
- package/docs/V2-PLAN.md +333 -0
- package/docs/V2-PROPOSAL.md +319 -0
- package/docs/WP4.3-RELEASE-EVIDENCE-2026-08-25.md +73 -0
- package/docs/v2/M1-ACCEPTANCE-2026-08-28.md +38 -0
- package/docs/v2/M2-DOD-2026-08-28.md +34 -0
- package/docs/v2/M4-CHICKAI-PILOT-2026-08-28.md +44 -0
- package/docs/v2/M4-EXTERNAL-PILOT-2026-08-28.md +46 -0
- package/docs/v2/M4-SELFHOST-2026-08-28.md +53 -0
- package/docs/v2/RFC-0001-product-definition.md +92 -0
- package/docs/v2/RFC-0002-domain-model.md +149 -0
- package/docs/v2/RFC-0003-workflow-policy.md +204 -0
- package/docs/v2/SPEC-0001-events-v1.md +98 -0
- package/docs/v2/guide/01-quickstart.md +92 -0
- package/docs/v2/guide/02-workflow-guide.md +42 -0
- package/docs/v2/guide/03-policy-guide.md +53 -0
- package/docs/v2/guide/04-adapter-guide.md +45 -0
- package/docs/v2/guide/05-worker-contract.md +37 -0
- package/docs/v2/guide/06-evidence-guide.md +38 -0
- package/docs/v2/guide/07-approval-guide.md +34 -0
- package/docs/v2/guide/08-migration-v1.md +68 -0
- package/docs/v2/guide/09-security-boundaries.md +28 -0
- package/docs/v2/guide/10-recovery.md +55 -0
- package/docs/v2/guide/README.md +18 -0
- package/example/.buildbeat/manifest.json +3 -3
- package/example/BUILDBEAT.md +1 -1
- package/example/README.md +22 -0
- package/lessons.md +8 -0
- package/package.json +4 -2
- package/src/constants.js +4 -1
- package/src/project.js +6 -1
- package/src/v2/adapters/mock.js +67 -0
- package/src/v2/adapters/shell.js +78 -0
- package/src/v2/cli/run.js +494 -0
- package/src/v2/domain/event-registry.js +100 -0
- package/src/v2/domain/model.js +61 -0
- package/src/v2/engine/reducer.js +253 -0
- package/src/v2/engine/risk-preset.js +48 -0
- package/src/v2/engine/workflow.js +201 -0
- package/src/v2/engine/yaml-subset.js +194 -0
- package/src/v2/evidence/collector.js +63 -0
- package/src/v2/observe/observe-config.js +194 -0
- package/src/v2/observe/observe-reducer.js +117 -0
- package/src/v2/observe/observe.js +420 -0
- package/src/v2/policy/policy.js +302 -0
- package/src/v2/presets/observe.yaml +45 -0
- package/src/v2/presets/policies/ui-render-gate.yaml +13 -0
- package/src/v2/presets/risk/controlled.yaml +39 -0
- package/src/v2/presets/risk/fast.yaml +19 -0
- package/src/v2/presets/risk/legacy-four-gates.yaml +44 -0
- package/src/v2/presets/risk/standard.yaml +28 -0
- package/src/v2/presets/software-delivery.yaml +39 -0
- package/src/v2/runtime/decisions.js +288 -0
- package/src/v2/runtime/metrics.js +140 -0
- package/src/v2/runtime/orchestrator.js +754 -0
- package/src/v2/runtime/run-record.js +55 -0
- package/src/v2/storage/event-ledger.js +154 -0
- package/src/v2/workspace/workspace-manager.js +137 -0
- package/templates/AGENTS.md +21 -0
- package/templates//346/214/207/346/214/245/345/217/260.md +23 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# BuildBeat 能力矩阵 / Capability Matrix
|
|
2
2
|
|
|
3
|
-
> 状态:
|
|
3
|
+
> 状态:BuildBeat v1.21 scoped 分发合同(2026-08-25)。本页同时区分 Skill-only、legacy npm v0 和 BuildBeat 1.21;源码、registry artifact 与真实项目证据仍分别核验。
|
|
4
4
|
|
|
5
5
|
## 1. 三组生命周期入口
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@ WP4.2 所说的“CLI 三命令”按职责分成三组,不是把 `version`
|
|
|
16
16
|
|
|
17
17
|
## 2. 可用面与权威边界
|
|
18
18
|
|
|
19
|
-
| 能力 | Skill-only / 手工路径 | legacy `solobaton@1.16.3` | BuildBeat `@haiyangbg/buildbeat@1.
|
|
19
|
+
| 能力 | Skill-only / 手工路径 | legacy `solobaton@1.16.3` | BuildBeat `@haiyangbg/buildbeat@1.21.0` | 权威与边界 |
|
|
20
20
|
|---|---|---|---|---|
|
|
21
21
|
| 理解新/存量项目,只问剩余问题 | 完整;读代码/配置后做 Bootstrap/Adopt | 不提供语义判断 | 不提供语义判断,只输出有界事实/问题 | Skill 与当前 AI 会话承担语义,CLI 不内置模型 |
|
|
22
22
|
| 安装与能力体检 | 读文件并运行项目脚本 | `doctor` 只读可用 | `doctor` 只读可用 | `doctor` 是 CLI 体检;同步检查唯一权威仍是项目 `bus-check` |
|
|
@@ -43,8 +43,8 @@ WP4.2 所说的“CLI 三命令”按职责分成三组,不是把 `version`
|
|
|
43
43
|
|
|
44
44
|
- **Skill-only:** first-class and complete for protocol semantics; it does not need a lifecycle manifest or a runtime CLI.
|
|
45
45
|
- **Legacy npm v0:** `solobaton@latest` is frozen on `doctor`, `init/adopt --dry-run`, and version inspection, then deprecated toward the scoped package. Project writes and `upgrade` remain unavailable there.
|
|
46
|
-
- **BuildBeat 1.
|
|
46
|
+
- **BuildBeat 1.21:** `@haiyangbg/buildbeat@1.21.0` is the independently verified canonical scoped distribution. It keeps the bounded `init/adopt` and schema-2-only mechanical `upgrade` surface established in 1.20, and adds the standard domain-response contract to Skill/scaffold handoffs. Registry availability, provenance, signatures, and exact artifact identity are archived in [`V1.21-RELEASE-EVIDENCE-2026-08-25.md`](V1.21-RELEASE-EVIDENCE-2026-08-25.md) and remain live-recheck requirements for future releases.
|
|
47
47
|
- **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.
|
|
48
48
|
- **Project runtime:** after scaffolding, the Git files and project-local scripts remain independently usable. BuildBeat has no account service, telemetry, remote project database, or agent runtime.
|
|
49
49
|
|
|
50
|
-
The real version-increment and multi-repository evidence
|
|
50
|
+
The real version-increment and multi-repository evidence remains archived in [`PHASE4-V1.20-PILOT-2026-08-25.md`](PHASE4-V1.20-PILOT-2026-08-25.md); release readiness is tracked in [`PHASE4-STABILITY-AUDIT-2026-08-25.md`](PHASE4-STABILITY-AUDIT-2026-08-25.md), the first scoped publication in [`WP4.3-RELEASE-EVIDENCE-2026-08-25.md`](WP4.3-RELEASE-EVIDENCE-2026-08-25.md), and the current v1.21 distribution in [`V1.21-RELEASE-EVIDENCE-2026-08-25.md`](V1.21-RELEASE-EVIDENCE-2026-08-25.md). Command details remain authoritative in [`CLI.md`](CLI.md); legacy migration uses [`LEGACY-V1.16-MIGRATION.md`](LEGACY-V1.16-MIGRATION.md).
|
package/docs/CLI.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# BuildBeat CLI lifecycle contract
|
|
2
2
|
|
|
3
|
-
Status: **BuildBeat `1.
|
|
3
|
+
Status: **BuildBeat `1.21.0` independently verified scoped distribution** · canonical package `@haiyangbg/buildbeat` · canonical executable `buildbeat` · legacy package `solobaton@1.16.3` remains the independently verified read-only v0 · Node.js 20+ · zero third-party runtime dependencies. The 1.21 release keeps the verified 1.20 lifecycle command and safety boundaries, and adds the standard domain-response contract to the Skill and managed scaffold. The genuine lifecycle version-increment pilot remains archived in [`PHASE4-V1.20-PILOT-2026-08-25.md`](PHASE4-V1.20-PILOT-2026-08-25.md); exact 1.21 registry and supply-chain evidence is archived in [`V1.21-RELEASE-EVIDENCE-2026-08-25.md`](V1.21-RELEASE-EVIDENCE-2026-08-25.md).
|
|
4
4
|
|
|
5
|
-
The CLI does not replace `SKILL.md`. The Skill owns code-aware reasoning, minimal questions, project semantics, and human Gates. The CLI owns deterministic inspection, scaffold mechanics, manifest/hash bookkeeping, and bounded mechanical upgrade in the current
|
|
5
|
+
The CLI does not replace `SKILL.md`. The Skill owns code-aware reasoning, minimal questions, project semantics, and human Gates. The CLI owns deterministic inspection, scaffold mechanics, manifest/hash bookkeeping, and bounded mechanical upgrade in the current scoped distribution. Synchronous file-bus checks remain authoritative in the project-local scripts specified by [`CHECKS.md`](CHECKS.md).
|
|
6
6
|
|
|
7
|
-
The bilingual [`CAPABILITY-MATRIX.md`](CAPABILITY-MATRIX.md) is the compact authority for what Skill-only, the legacy npm v0, and BuildBeat 1.
|
|
7
|
+
The bilingual [`CAPABILITY-MATRIX.md`](CAPABILITY-MATRIX.md) is the compact authority for what Skill-only, the legacy npm v0, and BuildBeat 1.21 can each do. Command details and safety semantics remain authoritative in this document.
|
|
8
8
|
|
|
9
9
|
## Command boundary and phased availability
|
|
10
10
|
|
|
@@ -46,7 +46,7 @@ The target command whitelist is intentionally small:
|
|
|
46
46
|
| Milestone | Enabled main commands | Boundary |
|
|
47
47
|
|---|---|---|
|
|
48
48
|
| legacy `solobaton@1.16.3` | `doctor`, `init --dry-run`, `adopt --dry-run`, `version` | independently verified read-only v0; deprecated distribution ID after scoped migration |
|
|
49
|
-
| BuildBeat `1.
|
|
49
|
+
| BuildBeat `1.21.0` | `doctor`, `init`, `adopt`, `upgrade`, `version` | unchanged Phase 0–3 command set; writes remain bounded by the transaction and human-Gate contracts below |
|
|
50
50
|
|
|
51
51
|
`help`, `--help`, and `--version` are meta entry points. `diff` and `uninstall` stay reserved and return `command_not_available`; `gate`, `adr`, `standards`, `check`, and other workflow commands are outside the approved CLI scope. HELP text and regression tests must lock this boundary.
|
|
52
52
|
|
|
@@ -127,8 +127,8 @@ Schema 2 is the first write-capable shape targeted by Wave 1:
|
|
|
127
127
|
```json
|
|
128
128
|
{
|
|
129
129
|
"schemaVersion": 2,
|
|
130
|
-
"scaffoldVersion": "v1.
|
|
131
|
-
"cliVersion": "
|
|
130
|
+
"scaffoldVersion": "v1.21",
|
|
131
|
+
"cliVersion": "2.0.0-beta.1",
|
|
132
132
|
"layout": "default",
|
|
133
133
|
"installedAt": "2026-08-24T00:00:00.000Z",
|
|
134
134
|
"files": {
|
package/docs/EXECUTION-PLAN.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# BuildBeat 落地执行计划(v3:CLI 选择性解冻版)
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 文档状态:v1 历史执行基线(WP0.1–WP4.3 已全部完成收口;项目所有者已于 2026-08-27 拍板 `V2-D0=B`,新开发按 [`V2-PLAN.md`](V2-PLAN.md) 与 [`V2-ITERATION-01.md`](V2-ITERATION-01.md) 执行,决策见 [`V2-DECISIONS.md`](V2-DECISIONS.md),v1 转入维护线)
|
|
4
4
|
> 基线日期:2026-08-24
|
|
5
5
|
> 上游文档:[`ROADMAP.md`](ROADMAP.md)(下称“演进书”);竞品调研见 [`CLI-STRATEGY-2026-08.md`](CLI-STRATEGY-2026-08.md)
|
|
6
|
-
>
|
|
7
|
-
> 实施状态(更新于 2026-08-25):**WP0.1–WP4.
|
|
6
|
+
> 基线代码:`@haiyangbg/buildbeat@1.20.0`(npm 已验证发布,Git tag `v1.20.0`);legacy `solobaton@1.16.3` 保留并已 deprecate
|
|
7
|
+
> 实施状态(更新于 2026-08-25):**WP0.1–WP4.3 已完成**。Phase 0–3 合并为 `1.20.0`,未补造 v1.17/v1.18/v1.19 artifacts;canonical package/repository 已迁移为 `@haiyangbg/buildbeat` / `HaiYangBG1/BuildBeat`。真实 schema 2 `v1.16 → v1.20` 升级试点以 `a136ff6f33d5814d36593f85a3b9ec2f1e223827` 闭合;GitHub 改名、push、Trusted Publisher、受保护 tag、OIDC publish、registry/provenance/签名/隔离安装、GitHub Release 与 legacy deprecation 已逐项回读。真实项目边界见 [`PHASE4-V1.20-PILOT-2026-08-25.md`](PHASE4-V1.20-PILOT-2026-08-25.md),外部分发关闭证据见 [`WP4.3-RELEASE-EVIDENCE-2026-08-25.md`](WP4.3-RELEASE-EVIDENCE-2026-08-25.md)。
|
|
8
8
|
>
|
|
9
9
|
> **决策链(2026-08-24)**:
|
|
10
10
|
> ① 先拍板"CLI 全冻结于 v0 只读";
|
|
11
11
|
> ② 经对 Spec Kit / OpenSpec / BMAD 官方能力的限定范围调研(结论:CLI 分发/更新有明确价值,命令面并不相同;所核对页面未记录三方合并),修订为**选择性解冻**;
|
|
12
12
|
> ③ 最终边界:解冻 **Wave 1(init/adopt 真写入)** 与 **Wave 2(机械 upgrade)**;三方合并、uninstall 引擎、CLI 命令面扩张(gate/adr/standards/check)**继续冻结**。
|
|
13
|
-
> 原待拍板决策 D1(双实现权威)按"bus-check 唯一同步权威"执行;D3(写入事实注入)的"哑脚手架 + AI 渲染"已通过旧名与 BuildBeat canonical 两轮真实目录本地 Git/Hook/hash 验证。WP2.8 Gate3
|
|
13
|
+
> 原待拍板决策 D1(双实现权威)按"bus-check 唯一同步权威"执行;D3(写入事实注入)的"哑脚手架 + AI 渲染"已通过旧名与 BuildBeat canonical 两轮真实目录本地 Git/Hook/hash 验证。WP2.8 Gate3、WP3.1–WP3.4、WP4.1–WP4.2 与真实版本增量 upgrade 试点均已完成。WP4.3 选择 scoped package + 新仓库名并合并首发 `1.20.0`,现已完成外部分发和独立回读;后续版本仍须重新执行 [`RELEASING.md`](RELEASING.md) 的可变远端检查。
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
@@ -373,7 +373,7 @@ Skill = 全部语义:占位符渲染、Bootstrap 提问、Adopt 摸底、Gat
|
|
|
373
373
|
|---|---|
|
|
374
374
|
| WP4.1(完成) | `example/` 换新协议全貌(standards + ADR + Gate 四态 + 证据行 + manifest);legacy 项目迁移指南一页(v1.16 拷出项目 → 新版协议 + 建基线路径) |
|
|
375
375
|
| WP4.2(完成) | 能力矩阵定稿(Skill-only ⟷ CLI 三命令);双语文档终校;演进书 §15 硬门槛按修订后逐条打勾存档 |
|
|
376
|
-
| WP4.3
|
|
376
|
+
| WP4.3(完成) | 已迁移到 `@haiyangbg/buildbeat` 与 `HaiYangBG1/BuildBeat`;legacy npm 包只读保留并加迁移提示;仓库重定向、Trusted Publishing、registry/provenance/签名/隔离安装与 Release 已独立回读 |
|
|
377
377
|
|
|
378
378
|
### WP4.1 示例全貌与 legacy 迁移(完成)
|
|
379
379
|
|
|
@@ -393,12 +393,12 @@ Skill = 全部语义:占位符渲染、Bootstrap 提问、Adopt 摸底、Gat
|
|
|
393
393
|
|
|
394
394
|
**候选验收**:Node `55/55`、Shell `221/221`、Skill-only + CLI/Skill 双向互操作、Claude plugin `7/7`、109 份 Markdown 契约检查、78 文件 pack dry-run、ShellCheck、Bash/Node 语法、actionlint、gitleaks 与 `git diff --check` 全部通过。本次未重跑真实项目、未查询 npm/GitHub 可变远端状态,未执行任何外部动作。
|
|
395
395
|
|
|
396
|
-
### WP4.3 scoped
|
|
396
|
+
### WP4.3 scoped 分发迁移(完成)
|
|
397
397
|
|
|
398
398
|
- 用户已拍板 canonical npm package=`@haiyangbg/buildbeat`、repository=`HaiYangBG1/BuildBeat`;unscoped `buildbeat` 已被其他项目占用,不冒用。
|
|
399
399
|
- 版本序列选择合并 `1.20.0`:Phase 0–3 的真实代码和文档一次交付,不补造从未发布的 v1.17/v1.18/v1.19 artifacts。
|
|
400
400
|
- package/workflow/plugin/docs 已切换 scoped identity;真实 `v1.16 → v1.20` schema 2 upgrade 与真实多仓刷新证据见 [`PHASE4-V1.20-PILOT-2026-08-25.md`](PHASE4-V1.20-PILOT-2026-08-25.md)。
|
|
401
|
-
-
|
|
401
|
+
- 外部执行已按固定顺序完成:本地全门禁与候选提交 → GitHub 仓库改名并核规则/环境 → push/CI → scoped 包 bootstrap → 绑定 Trusted Publisher → 受保护 tag 驱动 `1.20.0` publish → registry/provenance/签名/隔离安装回读 → GitHub Release → legacy `solobaton` deprecation。精确身份和偏差记录见 [`WP4.3-RELEASE-EVIDENCE-2026-08-25.md`](WP4.3-RELEASE-EVIDENCE-2026-08-25.md)。
|
|
402
402
|
|
|
403
403
|
---
|
|
404
404
|
|
|
@@ -460,9 +460,9 @@ Skill = 全部语义:占位符渲染、Bootstrap 提问、Adopt 摸底、Gat
|
|
|
460
460
|
14. [x] **Phase 4 / WP4.1**:`example/` 已补齐四态语法与 schema 2 合成教学 manifest,v1.16 legacy 拷出项目的手工维护/受控建基线路径已集中成指南;未执行发布或真实项目升级。
|
|
461
461
|
15. [x] **Phase 4 / WP4.2**:Skill-only ↔ CLI 三组生命周期入口矩阵、双语终校、双向互操作回归和§15 硬门槛归档已闭合;真实升级补证后 12 条达到源码/试点候选口径。
|
|
462
462
|
16. [x] **Phase 4 / WP4.3 决策**:迁移到 `@haiyangbg/buildbeat` 与 `HaiYangBG1/BuildBeat`,合并首发 `1.20.0`,legacy `solobaton` 保留只读并 deprecate。
|
|
463
|
-
17. [
|
|
463
|
+
17. [x] **Phase 4 / WP4.3 外部执行**:远端改名/push、Trusted Publisher、受保护 `v1.20.0` tag、OIDC npm publish、registry/provenance/签名/隔离安装回读、GitHub Release 与 legacy deprecation 已完成;关闭证据见 [`WP4.3-RELEASE-EVIDENCE-2026-08-25.md`](WP4.3-RELEASE-EVIDENCE-2026-08-25.md)。
|
|
464
464
|
|
|
465
|
-
Phase 0–2 已由 `b062f25` 本地提交保全,WP3.1–WP3.4 分别由 `a378b2f`、`168dfd3`、`7f4cf08`、`f02686f`
|
|
465
|
+
Phase 0–2 已由 `b062f25` 本地提交保全,WP3.1–WP3.4 分别由 `a378b2f`、`168dfd3`、`7f4cf08`、`f02686f` 形成后续源码候选,WP4.1/WP4.2 由 `5179e99` / `1887cf2` 保全。BuildBeat Wave 1、真实 v1.20 Wave 2 upgrade 试点与 WP4.3 外部分发均已完成;可变远端状态未来仍按发布 runbook 重新读回。
|
|
466
466
|
|
|
467
467
|
---
|
|
468
468
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Phase 4 / WP4.3 稳定性硬门槛刷新(2026-08-25)
|
|
2
2
|
|
|
3
3
|
> 审计对象:以本地提交 `1887cf2` 为已保全输入,叠加 scoped `1.20.0` 迁移候选、真实版本增量 upgrade、多仓刷新与根内 legacy link 兼容修复。
|
|
4
|
-
> 证据等级:本地源码/文档静态闭合 + disposable 沙箱 + Wave 1/2 真实 Git 项目 +
|
|
5
|
-
> 结论:**12
|
|
4
|
+
> 证据等级:本地源码/文档静态闭合 + disposable 沙箱 + Wave 1/2 真实 Git 项目 + 真实多仓只读投影。下表保留发布前审计口径,不倒改当时尚未执行 push、tag、Release、publish 或远端改名的边界;后续外部分发另由 [`WP4.3-RELEASE-EVIDENCE-2026-08-25.md`](WP4.3-RELEASE-EVIDENCE-2026-08-25.md) 关闭。
|
|
5
|
+
> 结论:**12 条源码/真实试点候选口径与后续 scoped 外部分发证据均已闭合;两类证据继续分开,不以发布成功外推业务项目 Gate、部署或生产状态。**
|
|
6
6
|
|
|
7
7
|
## 逐条审计
|
|
8
8
|
|
|
@@ -21,13 +21,15 @@
|
|
|
21
21
|
| 11 | `[x]` | 真实项目试点通过,而不仅是模板测试 | [`PHASE4-V1.20-PILOT-2026-08-25.md`](PHASE4-V1.20-PILOT-2026-08-25.md):真实 schema 2 `v1.16 → v1.20` upgrade、project-owned 零 diff、doctor 0/0、项目 strict 0;另对真实四子仓协调层完成只读刷新 | 多仓刷新正确暴露业务仓 `lessons.md` 断链和 map/适配器未验证,不把目标业务仓冒充全绿 |
|
|
22
22
|
| 12 | `[x]` | README、SKILL、AGENTS、示例和 CLI 帮助不存在相互矛盾的定位 | 中英 README 终校;[`CAPABILITY-MATRIX.md`](CAPABILITY-MATRIX.md) 三面区分;`check_docs.py` 锁定定位/能力/发布边界 | 远端 npm README 是不可变已发布产物,须在真实发布后独立 registry 回读 |
|
|
23
23
|
|
|
24
|
-
##
|
|
24
|
+
## 发布前外部分发清单(后续已关闭)
|
|
25
25
|
|
|
26
|
-
1.
|
|
27
|
-
2.
|
|
28
|
-
3.
|
|
29
|
-
4.
|
|
26
|
+
1. [x] 候选提交保全,GitHub 仓库改名、remote 更新、push、默认分支 CI、规则集和 `npm-publish` Environment 回读。
|
|
27
|
+
2. [x] `@haiyangbg/buildbeat` 最小 bootstrap 与 GitHub Actions Trusted Publisher 绑定。
|
|
28
|
+
3. [x] 受保护 `v1.20.0` tag 驱动 publish,registry version、integrity、provenance attestation、signature、隔离安装与 npm README 回读。
|
|
29
|
+
4. [x] GitHub Release、旧 URL 重定向与 legacy `solobaton` deprecation 回读;未 unpublish。
|
|
30
|
+
|
|
31
|
+
首包实际出现过 `latest=0.0.0` 的短暂偏差,正式 OIDC 发布后已收敛为 `bootstrap=0.0.0`、`latest=1.20.0`;精确证据和处理边界见外部分发关闭文档。
|
|
30
32
|
|
|
31
33
|
## WP4.3 当前口径
|
|
32
34
|
|
|
33
|
-
WP4.2
|
|
35
|
+
WP4.2、真实升级、多仓刷新和 WP4.3 外部分发均已关闭。`@haiyangbg/buildbeat@1.20.0` 可称为已独立验证发布;该结论仅覆盖 BuildBeat 分发,不替任何业务项目批准 Gate。
|
|
@@ -50,3 +50,7 @@
|
|
|
50
50
|
- 已验证:真实 schema 2 项目从 `v1.16 / 1.16.3` 机械升级到 `v1.20 / 1.20.0`,项目所有权和 Git 边界成立;真实多仓刷新能诚实阻断真实断链并显式暴露未验证范围。
|
|
51
51
|
- 未验证:`@haiyangbg/buildbeat@1.20.0` registry artifact、Trusted Publisher、provenance、签名、隔离安装、GitHub tag/Release 与旧包 deprecation。它们须在外部分发 Gate 中逐项回读。
|
|
52
52
|
- 不可外推:本文不证明任何业务仓 Gate、部署、生产健康或常态流量。
|
|
53
|
+
|
|
54
|
+
## 后续状态
|
|
55
|
+
|
|
56
|
+
上述“未验证”是本试点关闭时的证据边界,未被倒改。后续 WP4.3 外部分发已逐项完成并独立读回,见 [`WP4.3-RELEASE-EVIDENCE-2026-08-25.md`](WP4.3-RELEASE-EVIDENCE-2026-08-25.md);发布结果仍不能反向扩大本页对业务仓 Gate、部署或生产状态的结论。
|
package/docs/RELEASING.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# BuildBeat CLI package release runbook
|
|
2
2
|
|
|
3
|
-
This runbook governs BuildBeat's public npm distribution. The canonical package is `@haiyangbg/buildbeat` in `HaiYangBG1/BuildBeat`; the canonical executable is `buildbeat`, while `solobaton` remains an executable alias. The old `solobaton` npm package is a frozen legacy distribution ID and must not receive the
|
|
3
|
+
This runbook governs BuildBeat's public npm distribution. The canonical package is `@haiyangbg/buildbeat` in `HaiYangBG1/BuildBeat`; the canonical executable is `buildbeat`, while `solobaton` remains an executable alias. The old `solobaton` npm package is a frozen legacy distribution ID and must not receive the scoped write/upgrade command surface.
|
|
4
4
|
|
|
5
|
-
Release evidence at
|
|
5
|
+
Release evidence at source package version `@haiyangbg/buildbeat@2.0.0-beta.1` (v2 beta, dist-tag `next`, pending owner-authorized publication); latest independently verified BuildBeat npm distribution `@haiyangbg/buildbeat@1.21.0`, anchored by annotated tag `v1.21.0` at commit `ce69a05`, workflow run [32864438692](https://github.com/HaiYangBG1/BuildBeat/actions/runs/32864438692), and the matching [GitHub Release](https://github.com/HaiYangBG1/BuildBeat/releases/tag/v1.21.0). Exact registry identity, provenance, signatures, isolated-install readback, Environment approval, and immutable-artifact boundary are archived in [`V1.21-RELEASE-EVIDENCE-2026-08-25.md`](V1.21-RELEASE-EVIDENCE-2026-08-25.md). First-scoped-release bootstrap behavior and legacy deprecation remain archived in [`WP4.3-RELEASE-EVIDENCE-2026-08-25.md`](WP4.3-RELEASE-EVIDENCE-2026-08-25.md). The legacy distribution remains `solobaton@1.16.3`; all three published legacy versions are retained and deprecated toward the scoped package.
|
|
6
6
|
|
|
7
7
|
## Release invariants
|
|
8
8
|
|
|
9
9
|
1. One npm version maps to one immutable annotated Git tag and one exact source commit. Never move a published version's tag.
|
|
10
|
-
2. `CLI_VERSION` comes from `package.json`; the scaffold version is
|
|
10
|
+
2. `CLI_VERSION` comes from `package.json`; the scaffold version is the pinned `SCAFFOLD_VERSION` literal in `src/constants.js` and tracks the frozen v1 scaffold content bundle, not the CLI. Since the v2 package line it stays at `v1.21` until the scaffold surface itself changes — a package release never invents a scaffold upgrade.
|
|
11
11
|
3. Publish only from a clean worktree whose `HEAD`, tag target, tested commit, and packed artifact all match.
|
|
12
12
|
4. `publishConfig.registry` stays pinned to `https://registry.npmjs.org/`; a developer's mirror configuration must not redirect a public release.
|
|
13
13
|
5. A successful `npm publish` response is not enough. Registry metadata, tarball contents, an isolated install, the executable version, and a read-only command must be checked independently.
|
|
@@ -15,7 +15,7 @@ Release evidence at this candidate: source package version `@haiyangbg/buildbeat
|
|
|
15
15
|
7. After a version is published, later `main` documentation changes carrying that same `package.json` version do not redefine its artifact and are not releasable candidates. The next publication requires a new package version, Changelog heading, and annotated tag.
|
|
16
16
|
8. Canonical examples use `@haiyangbg/buildbeat@latest`, not a hard-coded release number. Reproducible consumers first resolve `npm view @haiyangbg/buildbeat@latest version`, record that exact version, and substitute it for `@latest`; exact release evidence remains in this runbook and the matching GitHub Release. One-off commands use `npx --yes --package=@haiyangbg/buildbeat@latest buildbeat ...`.
|
|
17
17
|
9. The active repository ruleset `Protect release tags` must match `refs/tags/v*`, forbid tag updates and deletions, and grant no bypass actor. It deliberately does not forbid creation, so a reviewed new release tag can still be created once.
|
|
18
|
-
10. The write-enabled first-screen command `npx --yes --package=@haiyangbg/buildbeat@latest buildbeat init my-project`
|
|
18
|
+
10. The write-enabled first-screen command `npx --yes --package=@haiyangbg/buildbeat@latest buildbeat init my-project` is active because the exact 1.21 scoped artifact passed registry/provenance/signature/isolated-install/README readback. The old-name WP2.7 pilots remain historical compatibility evidence and do not redefine the scoped artifact.
|
|
19
19
|
|
|
20
20
|
## Candidate checks
|
|
21
21
|
|
|
@@ -60,7 +60,7 @@ npm publish --access public --tag bootstrap --registry=https://registry.npmjs.or
|
|
|
60
60
|
npm view @haiyangbg/buildbeat dist-tags --json --registry=https://registry.npmjs.org/
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
The
|
|
63
|
+
The intended bootstrap readback is `bootstrap: 0.0.0` without a stable `latest` claim. During the first BuildBeat package creation, npm also attached `latest: 0.0.0` despite the explicit non-default tag and rejected the authenticated delete with HTTP 400. Treat any such first-package `latest` as temporary bootstrap exposure: do not activate launch documentation, do not republish or unpublish the immutable version, and complete the reviewed OIDC release so the real version takes over `latest`. The current BuildBeat readback is `bootstrap: 0.0.0` and `latest: 1.21.0`. The bootstrap package page is registry-creation evidence only: it is not a BuildBeat release, is not tagged in Git, and has no provenance claim. The npm documentation requires 2FA or an allowed granular token for direct publication; no long-lived publish token belongs in Git, shell history, logs, or a chat transcript. See npm's guides for [scoped public packages](https://docs.npmjs.com/creating-and-publishing-scoped-public-packages/) and [Trusted Publishing](https://docs.npmjs.com/trusted-publishers/).
|
|
64
64
|
|
|
65
65
|
## Independent readback
|
|
66
66
|
|
|
@@ -114,4 +114,4 @@ The workflow waits for exact registry-version readback, requires `dist.attestati
|
|
|
114
114
|
|
|
115
115
|
Trusted Publishing removes the long-lived write token and automatically emits provenance for supported public GitHub repositories. Configure the exact owner, repository, workflow filename, allowed `npm publish` action, and the exact `npm-publish` environment on npmjs.com. A GitHub Environment without the matching npm-side environment binding is not sufficient evidence. See npm's [Trusted Publishing](https://docs.npmjs.com/trusted-publishers/) and [provenance](https://docs.npmjs.com/generating-provenance-statements/) documentation.
|
|
116
116
|
|
|
117
|
-
The bootstrap `0.0.0` package is not retroactively provenance-backed and must remain on the non-default `bootstrap` tag. The existence of the workflow and trusted-publisher binding is configuration evidence only; npm validates the binding during the real
|
|
117
|
+
The bootstrap `0.0.0` package is not retroactively provenance-backed and must remain on the non-default `bootstrap` tag. The existence of the workflow and trusted-publisher binding is configuration evidence only; npm validates the binding during the real publish. After the first OIDC release succeeds, set `npm access set mfa=publish @haiyangbg/buildbeat` and independently read back npm's most restrictive Publishing access option, currently labeled `Require two-factor authentication and disallow bypass 2fa tokens (recommended)`, while preserving the Trusted Publisher. Then deprecate every legacy `solobaton` version with a concise migration pointer to `@haiyangbg/buildbeat`; do not unpublish it, because existing read-only installations and redirects remain useful compatibility paths. Because package access, trust, tags, and deprecation are mutable registry state, future release operators must recheck them live.
|
package/docs/ROADMAP.md
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
# BuildBeat 新版演进规划书:面向人和 AI 会话的工程交付协议
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 文档状态:v1 历史方向基线(受下述 2026-08-24 执行修订约束;2026-08-27 起被 v2 方向取代,见下方修订框)
|
|
4
4
|
> 基线日期:2026-08-23
|
|
5
5
|
> 适用项目:BuildBeat 后续产品设计、协议演进与 CLI 开发
|
|
6
6
|
> 本文替代此前《BuildBeat 演进规划书:从单人工具到尺度无关的工程协议》。旧规划中的团队激活层、Preset/extends、emit 编译层及相应路线不再执行。
|
|
7
7
|
|
|
8
|
+
> **2026-08-27 方向变更(`V2-D0=B`,已生效)**
|
|
9
|
+
> 项目所有者已正式拍板 BuildBeat v2:新开发方向与执行以 [`V2-PLAN.md`](V2-PLAN.md) 为准,决策记录见 [`V2-DECISIONS.md`](V2-DECISIONS.md),当前迭代见 [`V2-ITERATION-01.md`](V2-ITERATION-01.md)。v1(本文所述协议与 CLI)转入维护线——只修缺陷与安全问题,不再按本文及 [`EXECUTION-PLAN.md`](EXECUTION-PLAN.md) 追加新能力。本文保留为 v1 决策存档。
|
|
10
|
+
|
|
8
11
|
> **2026-08-24 执行修订(生效)**
|
|
9
12
|
> 本文保留产品方向与问题定义;交付范围、顺序和验收以 [`EXECUTION-PLAN.md`](EXECUTION-PLAN.md) v3 的 §0 为准,冲突时由执行计划覆盖本文。CLI 仅选择性解冻 `init` / `adopt` 脚手架写入与 `upgrade` 机械升级,`doctor` 保持只读;`gate` / `adr` / `standards` / `check` 等命令面扩张、三方合并引擎和项目卸载引擎继续冻结。具体覆盖关系如下:
|
|
10
13
|
>
|
|
@@ -181,15 +184,14 @@ contracts / decisions / status / evidence
|
|
|
181
184
|
|
|
182
185
|
### 3.2 当前 CLI 状态
|
|
183
186
|
|
|
184
|
-
legacy `solobaton@1.16.3` CLI v0 只承担检查和只读规划,`init/adopt` 必须带 `--dry-run`,所有项目写入 fail-closed
|
|
187
|
+
legacy `solobaton@1.16.3` CLI v0 只承担检查和只读规划,`init/adopt` 必须带 `--dry-run`,所有项目写入 fail-closed;该分发 ID 已 deprecate 但未 unpublish。Canonical `@haiyangbg/buildbeat@1.20.0` / bundle `v1.20` 已通过 Trusted Publishing 独立发布验证:Wave 1 `init/adopt`、schema 2、Confirmed STACK、机械 `upgrade`、Gate/证据强关联、多仓 join、扫描边界和 marketplace plugin 已完成源码/沙箱回归,Wave 1 有 BuildBeat canonical 真实目录与 Gate3 证据,Wave 2 完成真实 schema 2 `v1.16 → v1.20` 升级;registry exact artifact、provenance、签名、隔离安装与 Release 另由 [`WP4.3-RELEASE-EVIDENCE-2026-08-25.md`](WP4.3-RELEASE-EVIDENCE-2026-08-25.md) 闭合。项目 `uninstall`、`diff`、工作流命令扩张与三方合并引擎继续冻结。Skill 仍承担项目语义和人工 Gate。
|
|
185
188
|
|
|
186
189
|
### 3.3 主要缺口
|
|
187
190
|
|
|
188
191
|
| 缺口 | 影响 |
|
|
189
192
|
|---|---|
|
|
190
|
-
| scoped artifact 尚未发布回读 | 源码和真实项目试点不等于 registry artifact;Trusted Publisher、provenance、签名、integrity 与隔离安装必须独立验证 |
|
|
191
193
|
| 真实业务仓仍可有自身冲突 | 多仓刷新已完成,但目标仓存在真实 `lessons.md` 断链、未登记 map 和未升级适配器;检查器必须保持 blocked/unverified,不能替业务仓修事实 |
|
|
192
|
-
|
|
|
194
|
+
| 发布远端是可变状态 | 首次 scoped 发布已闭合,但 GitHub ruleset/Environment、Trusted Publisher、publishing access、dist-tags 和版本占用仍须每次发布前重查 |
|
|
193
195
|
|
|
194
196
|
---
|
|
195
197
|
|
|
@@ -558,7 +560,7 @@ buildbeat upgrade
|
|
|
558
560
|
buildbeat version
|
|
559
561
|
```
|
|
560
562
|
|
|
561
|
-
`diff` / `uninstall` 只保留不可用名并明确返回 `command_not_available`;`check/status/gate/adr/standards` 属 Skill 与项目脚本边界,不加入 CLI
|
|
563
|
+
`diff` / `uninstall` 只保留不可用名并明确返回 `command_not_available`;`check/status/gate/adr/standards` 属 Skill 与项目脚本边界,不加入 CLI。legacy v0 仅开放 `doctor`、`init/adopt --dry-run` 和 `version`;WP2.4–WP2.6 当时形成的源码候选已在后续 `@haiyangbg/buildbeat@1.20.0` 中通过真实项目试点、发布门禁与 registry/供应链回读,因此 scoped npm 写能力可用,legacy 包能力不变。
|
|
562
564
|
|
|
563
565
|
### 10.3 CLI 智能边界
|
|
564
566
|
|
|
@@ -692,7 +694,7 @@ CLI 侧:
|
|
|
692
694
|
|
|
693
695
|
**目标**:在 Wave 1 的 schema 2 基线上补齐有边界的机械升级,并完善多仓和 Gate 检查,不扩张工作流命令面。
|
|
694
696
|
|
|
695
|
-
当前进度:WP3.1–WP3.4 的机械 upgrade、Gate/证据强关联、多仓漂移与扫描边界报告源码及 disposable Git 沙箱候选已完成;真实 schema 2 `v1.16 → v1.20` upgrade 和真实四子仓只读刷新也已归档。WP4.1–WP4.2 的示例/迁移、能力矩阵、双语终校与硬门槛归档已完成;WP4.3
|
|
697
|
+
当前进度:WP3.1–WP3.4 的机械 upgrade、Gate/证据强关联、多仓漂移与扫描边界报告源码及 disposable Git 沙箱候选已完成;真实 schema 2 `v1.16 → v1.20` upgrade 和真实四子仓只读刷新也已归档。WP4.1–WP4.2 的示例/迁移、能力矩阵、双语终校与硬门槛归档已完成;WP4.3 scoped package、新仓库名与 `1.20.0` 外部分发已关闭。
|
|
696
698
|
|
|
697
699
|
交付:
|
|
698
700
|
|
|
@@ -719,9 +721,9 @@ CLI 侧:
|
|
|
719
721
|
- 兼容性声明;
|
|
720
722
|
- 完成 BuildBeat 外部分发标识决策:继续沿用 legacy `solobaton` 包/仓库地址,或另行批准 scoped package 与远端改名。
|
|
721
723
|
|
|
722
|
-
品牌名与外部分发标识均已在 2026-08-25
|
|
724
|
+
品牌名与外部分发标识均已在 2026-08-25 拍板并执行:`@haiyangbg/buildbeat` + `HaiYangBG1/BuildBeat`。远端仓库、npm 包和发布动作已按独立读回关闭;这不改变未来版本仍须重新核验可变远端的要求。
|
|
723
725
|
|
|
724
|
-
当前进度:WP4.1 已补齐 schema 2 教学 manifest 与 legacy 指南;WP4.2 已完成能力矩阵、双语终校、双向互操作回归与§15 归档;真实升级和多仓刷新已补证。WP4.3
|
|
726
|
+
当前进度:WP4.1 已补齐 schema 2 教学 manifest 与 legacy 指南;WP4.2 已完成能力矩阵、双语终校、双向互操作回归与§15 归档;真实升级和多仓刷新已补证。WP4.3 已完成远端改名、Trusted Publishing、scoped `1.20.0` 首发、供应链/安装回读、GitHub Release 与 legacy deprecation。
|
|
725
727
|
|
|
726
728
|
---
|
|
727
729
|
|
|
@@ -813,7 +815,7 @@ CLI 侧:
|
|
|
813
815
|
11. 真实项目试点通过,而不仅是模板测试通过;
|
|
814
816
|
12. README、SKILL、AGENTS、示例和 CLI 帮助不存在相互矛盾的定位。
|
|
815
817
|
|
|
816
|
-
2026-08-25 的逐条归档见 [`PHASE4-STABILITY-AUDIT-2026-08-25.md`](PHASE4-STABILITY-AUDIT-2026-08-25.md),真实试点补证见 [`PHASE4-V1.20-PILOT-2026-08-25.md`](PHASE4-V1.20-PILOT-2026-08-25.md)
|
|
818
|
+
2026-08-25 的逐条归档见 [`PHASE4-STABILITY-AUDIT-2026-08-25.md`](PHASE4-STABILITY-AUDIT-2026-08-25.md),真实试点补证见 [`PHASE4-V1.20-PILOT-2026-08-25.md`](PHASE4-V1.20-PILOT-2026-08-25.md),外部分发关闭见 [`WP4.3-RELEASE-EVIDENCE-2026-08-25.md`](WP4.3-RELEASE-EVIDENCE-2026-08-25.md)。12/12 源码/真实试点口径与 scoped registry/供应链证据均已闭合,但仍不替业务项目批准 Gate 或外推生产状态。
|
|
817
819
|
|
|
818
820
|
---
|
|
819
821
|
|
|
@@ -839,12 +841,12 @@ CLI 侧:
|
|
|
839
841
|
- 技术雷达产品化;
|
|
840
842
|
- 远程服务或云端协作。
|
|
841
843
|
|
|
842
|
-
### 16.3
|
|
844
|
+
### 16.3 已拍板并执行
|
|
843
845
|
|
|
844
|
-
- legacy npm 包 `solobaton`
|
|
845
|
-
-
|
|
846
|
+
- legacy npm 包 `solobaton` 保留为已 deprecate 的只读兼容分发 ID,不 unpublish;canonical 分发迁移到 `@haiyangbg/buildbeat`。
|
|
847
|
+
- GitHub 仓库已改名为 `HaiYangBG1/BuildBeat`;旧 URL 重定向、文档、Trusted Publishing 与 `v1.20.0` 首发已回读。
|
|
846
848
|
|
|
847
|
-
|
|
849
|
+
后续版本按 [`RELEASING.md`](RELEASING.md) 重新核验可变远端状态。
|
|
848
850
|
|
|
849
851
|
---
|
|
850
852
|
|
|
@@ -862,7 +864,7 @@ CLI 侧:
|
|
|
862
864
|
10. [x] 完成 schema 2 机械升级、多仓增强、真实版本增量 upgrade 和真实多仓只读刷新;项目卸载继续走手册;
|
|
863
865
|
11. [x] 完成 BuildBeat 本地 namespace、能力矩阵、双语文档与硬门槛归档;
|
|
864
866
|
12. [x] 人工决定 WP4.3 外部标识:`@haiyangbg/buildbeat` 与 `HaiYangBG1/BuildBeat`,Phase 0–3 合并首发 `1.20.0`;
|
|
865
|
-
13. [
|
|
867
|
+
13. [x] 完成远端改名、push、Trusted Publisher、受保护 `v1.20.0` tag、OIDC npm publish、registry/provenance/签名/隔离安装回读、GitHub Release 与 legacy deprecation;关闭证据见 [`WP4.3-RELEASE-EVIDENCE-2026-08-25.md`](WP4.3-RELEASE-EVIDENCE-2026-08-25.md)。
|
|
866
868
|
|
|
867
869
|
---
|
|
868
870
|
|
|
@@ -0,0 +1,55 @@
|
|
|
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、部署和生产状态仍需在其自身边界独立验证。
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
- ChickAI、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)。
|
|
@@ -0,0 +1,11 @@
|
|
|
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 第三个目标项目选定为 `AI底座/底座`;该项目开发活跃,已按 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 首批选择两个真实工作项:① ChickAI 额度耗尽时仍可正常登录网站,但模型不可用且不得补发 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 分叉结论 |
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# v2 迭代 01:M-1 人肉内核试点
|
|
2
|
+
|
|
3
|
+
> 状态:**已收尾——`V2-D2=A` 已拍板(2026-08-28,完整内核)**。ChickAI、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`)**:首批工作项为 ChickAI 额度耗尽仍可登录(含 UI)与 Tide 悬浮球空闲收纳(小功能);第三个目标项目已选定为 `AI底座/底座`,具体采用该项目下一项自然发生、已授权、低风险的非生产开发任务,不另造演示需求。
|
|
19
|
+
- [ ] **T2(每个执行工作项)**:ChickAI 与 Tide 均已准备独立 `ACCEPT_CMD`,在原基线先失败、实现后通过;第三项尚未冻结工作项与 oracle。
|
|
20
|
+
- [ ] **T3(每个执行工作项)**:ChickAI 与 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(每轮)**:ChickAI 候选与两个精确 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
|
+
- **ChickAI(含 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
|
+
- **共同边界**:ChickAI 的 push/deploy 来自试点之后的单独生产授权,不反向扩大 M-1 权限;Tide 未更新 `tide.zip`、未发布。两个交付完成与一次生产发布都不等于两轮自动 Loop 通过。
|
|
34
|
+
|
|
35
|
+
## 使用判定(回答“两个例子够不够”)
|
|
36
|
+
|
|
37
|
+
- **够投入使用**:含 UI 与小功能两种任务都走通了冻结 oracle、隔离 worktree、实现、回归与证据;ChickAI 的独立 reviewer 还真实阻止了一次不安全的单阶段生产滚动,证明协议不是摆设。
|
|
38
|
+
- **足够形成 `V2-D2` 决策卡,但不支持薄内核结论**:三次真实工作均没有自动激活;F5/F6 已确认 `MISSING`,暂定可组装覆盖率仍为 45.8%。这些负向证据不能冒充成功 Run,却已满足完整内核路线的提前止损信号。
|
|
39
|
+
- **第三项目已选定**:`AI底座/底座` 同时覆盖 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;ChickAI 后续生产动作来自项目所有者另行明确授权,不能外推给 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 冻结)。
|
|
@@ -0,0 +1,32 @@
|
|
|
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)。
|
|
@@ -0,0 +1,30 @@
|
|
|
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。
|