@haiyangbg/buildbeat 1.20.0 → 1.21.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.
package/CHANGELOG.md CHANGED
@@ -2,24 +2,32 @@
2
2
 
3
3
  > 本项目吃自己的狗粮(红线④:必更 CHANGELOG)。格式循 Keep a Changelog,倒序。
4
4
 
5
- ## Unreleased
5
+ ## v1.21.0 — 2026-08-25
6
+
7
+ > 主题:统一各域的收口回复,让人一眼看清做成了什么、证据在哪、还有什么没做,以及下一棒或真实求助。
8
+ > **拷出项目升级**:在根 `AGENTS.md` 的任务包规则后补入「域回复格式」;未改过的 `指挥台.md` 可随后续版本机械替换。历史 status、看板和证据不回改,`pm/status/**` 持久口径不变。
9
+
10
+ - **域回复契约**:产品/全栈/测试等 AI 视角面向人收口时统一按「已做 → 未做 → 下一步」输出;已做只写功能/业务结果,证据紧跟对应事项,未做必须写原因,下一步明确交棒对象或真实求助
11
+ - **发挥边界**:回复契约只约束收口/交接,不要求中间进展和探索讨论套模板;本域仍能安全推进时继续做,不伪造求助或固定域流水线
12
+ - **多入口同步**:`SKILL.md`、`templates/AGENTS.md`、`指挥台.md`、中英 README、教学沙盘与文档回归检查同步新口径;Claude Code 插件版本升至 `0.2.1` 以刷新缓存;`lessons.md` 新增「域回复各说各话」失败模式
13
+ - **Node 23 macOS 测试兼容**:符号链接安全回归用 `unlinkSync` 删除符号链接,避免 `fs.rmSync` 在 Node 23.6 上误报 `ERR_FS_EISDIR`;不改运行时写入逻辑
6
14
 
7
15
  ## v1.20.0 — 2026-08-25
8
16
 
9
- > 主题:把 Phase 0–3 合并为 BuildBeat 首个 scoped 正式候选,canonical 分发迁移到 `@haiyangbg/buildbeat` 与 `HaiYangBG1/BuildBeat`;旧 `solobaton` 包冻结为只读兼容入口。
17
+ > 主题:把 Phase 0–3 合并为 BuildBeat 首个 scoped 正式版本,canonical 分发迁移到 `@haiyangbg/buildbeat` 与 `HaiYangBG1/BuildBeat`;旧 `solobaton` 包冻结为只读兼容入口。
10
18
  > **拷出项目升级**:真实 schema 2 v1.16 安装可先运行 `buildbeat upgrade --dry-run`,无 blocker 后再机械升级到 v1.20;legacy/无 manifest 项目继续走手工迁移指南。`--force` 不覆盖 project-owned,项目 uninstall 仍不开放。
11
- > **发布状态**:本条随不可变候选进入 tag;只有官方 registry 的 scoped artifact、SLSA provenance、签名、隔离安装、README 与 GitHub Release 全部回读后,才能补记为已验证发布。
19
+ > **发布状态**:`@haiyangbg/buildbeat@1.20.0` 已通过 GitHub Actions OIDC / Trusted Publishing 发布;官方 registry exact artifact、SLSA provenance、签名、attestation、隔离安装、README 与 GitHub Release 均已独立回读。关闭证据见 [`docs/WP4.3-RELEASE-EVIDENCE-2026-08-25.md`](docs/WP4.3-RELEASE-EVIDENCE-2026-08-25.md)。
12
20
 
13
21
  - **WP4.3 scoped 分发决策**:用户拍板立即迁移到 `@haiyangbg/buildbeat` 和 `HaiYangBG1/BuildBeat`;不冒用已被占用的 unscoped `buildbeat`。canonical executable 保持 `buildbeat`,`solobaton` 只保留包内兼容别名
14
22
  - **版本序列合并**:未对外发布的 v1.17/v1.18/v1.19 不伪造成中间 artifact;当前 Phase 0–3 统一进入 `1.20.0`,scaffold version 从 v1.16 形成真实增量到 v1.20
15
- - **legacy 包退场策略**:新 scoped artifact 与迁移回读全绿后,`solobaton@*` 只做 deprecation 提示,不 unpublish、不获得写入/upgrade 能力,避免破坏既有只读安装
23
+ - **legacy 包退场完成**:`solobaton@1.16.1`、`1.16.2`、`1.16.3` 已逐版本读回指向 `@haiyangbg/buildbeat` 的 deprecation 提示;未 unpublish,旧包不获得写入/upgrade 能力
16
24
  - **Claude plugin 迁移**:仓库入口更新为 `HaiYangBG1/BuildBeat`,插件版本升至 `0.2.0` 以刷新分发缓存;npm CLI `bin/` 仍不进入插件包
17
25
  - **真实 v1.20 升级试点**:在专用分支将真实 schema 2 项目从 scaffold `v1.16` / CLI `1.16.3` 升至 `v1.20` / `1.20.0`;默认 dry-run 对四个改写文件零写阻断,force 后人工回灌项目事实,project-owned 零 diff,doctor 0/0、strict exit 0、提交后 dry-run up-to-date,目标仓 clean 且无 remote
18
26
  - **真实多仓刷新与兼容修复**:当前检查器在真实四子仓协调层投影中发现 legacy prose 根内 `../` 误判;现只对 scoped prose 允许 realpath 留在根内的 source-relative link,canonical Gate/evidence 仍禁 traversal,根外逃逸回归继续阻断。Shell 回归增至 `222/222`;最终刷新精确保留业务仓真实 `lessons.md` 断链、未登记 map 与适配器/远端/live unverified,不冒充全绿
19
27
  - **Linux CI 可移植性**:JSON renderer 的 awk quote 正则改为 BSD awk / mawk 共通写法,避免 Linux stderr warning 污染机器 JSON;同时展开旧式 `A && B || C` Shell 断言并兼容 ShellCheck 0.9/0.11,macOS 与 Ubuntu 共用同一语义
20
28
  - **品牌正式定名 BuildBeat**:2026-08-25 用户拍板产品名为 BuildBeat;canonical CLI/Skill/Claude plugin 标识统一为 `buildbeat` / `buildbeat@buildbeat-plugins`,新骨架入口改为 `BUILDBEAT.md`
21
29
  - **canonical namespace 迁移**:新写入只生成 `.buildbeat/manifest.json`、BuildBeat `.gitignore` marker 与 `buildbeat-stack-baseline:v1`;doctor/bus-check 继续读取旧 `SOLOBATON.md`、`.solobaton/manifest.json`、marker 与 STACK 基线,双 manifest 或混合安装 fail-closed
22
- - **legacy 分发兼容**:已发布 npm 包 `solobaton` 保留为 BuildBeat 的 legacy read-only distribution ID,并同时暴露 canonical `buildbeat` 与兼容 `solobaton` executable;未加 scope 的 `buildbeat` 包名已被其他项目占用,用户已批准迁移 scoped package 和新仓库名,远端完成状态仍逐项回读
30
+ - **legacy 分发兼容**:已发布 npm 包 `solobaton` 保留为 BuildBeat 的 legacy read-only distribution ID;新 scoped 包同时暴露 canonical `buildbeat` 与兼容 `solobaton` executable。未加 scope 的 `buildbeat` 包名已被其他项目占用,canonical package/repository 已迁移并完成远端回读
23
31
  - **改名证据边界**:WP2.7 三条真实目录试点及其 hash 保持为 legacy namespace 历史证据;WP2.8 已用全新的隔离目录完成 BuildBeat canonical init/adopt/Skill-only 回归,二者不混写、不互相外推
24
32
  - **新版方向与执行基线入库**:新增 `docs/ROADMAP.md`、`docs/EXECUTION-PLAN.md` 与官方来源可复核的 CLI 策略对照;产品方向由路线图承载,当前交付范围与依赖顺序由执行计划 v3 承载
25
33
  - **CLI 选择性解冻决策**:未来只开放 `init/adopt` 哑脚手架写入与 manifest/hash 驱动的机械 `upgrade`;三方合并、项目 uninstall 引擎、`gate/adr/standards/check` 命令扩张继续冻结,语义渲染和冲突合并归 AI 会话/Skill
@@ -42,7 +50,7 @@
42
50
  - **仓库安全基线**:新增 npm/GitHub Actions Dependabot 周检、JavaScript/TypeScript CodeQL、SECURITY/贡献/行为规范、CODEOWNERS、Issue/PR 模板;CI 中第三方 Action 改为不可变完整 commit SHA
43
51
  - **发布引用保护**:GitHub 服务端 `Protect release tags` ruleset 覆盖 `refs/tags/v*`,禁止更新和删除已创建的发布 tag,且无绕过角色;发布 runbook 增加回读步骤
44
52
  - **CLI v0 真实试点**:使用官方 npm registry 的 `solobaton@1.16.3` 对三个存量项目运行只读 `doctor` 和 `adopt --dry-run`;Git 可见状态前后一致,并正确区分未安装、旧版已安装和部分安装状态
45
- - **当前能力边界不冒进**:已独立验证的 npm `solobaton@1.16.3` 仍对所有项目写入 fail-closed;scoped `1.20.0` 源码候选已完成真实旧 schema 2 → 新 bundle 试点,但源码/项目证据不替代 registry artifact、provenance、签名、隔离安装与 GitHub Release 回读
53
+ - **真实 scoped 发布验收**:`@haiyangbg/buildbeat@1.20.0` 已由 `v1.20.0@5aaa9e8` 和 workflow run `32826832379` 保全;registry `latest=1.20.0`、exact integrity、SLSA v1 provenance、registry signature、attestation、隔离安装及 GitHub Release 全绿。legacy `solobaton@1.16.3` 仍对所有项目写入 fail-closed
46
54
  - **产品扩张边界**:多人账号/权限/组织管理和遥测/效能评分/指标仪表盘明确为当前非目标;CLI 不采集或上传项目使用数据,未来若扩展须独立立项并审查数据口径、隐私和权限治理
47
55
  - **不变量与输出合同落地**:`docs/CHECKS.md` 冻结八条文件总线不变量、Gate/证据令牌、五级结论、finding code 命名空间、JSON 外形和严格模式退出语义;`bus-check --format=json` 已由同一 finding 集合渲染,默认人类报告保持 exit 0,strict 只拦 `conflict/error`
48
56
  - **Phase 1 执行同步**:`SKILL.md` 与 AGENTS/status 模板固化开工 7 步、执行中 5 守则、收工 7 步;看板模板和教学沙盘新增四行 canonical Gate 状态与完成工作包 `**证据**:` 令牌
@@ -72,7 +80,7 @@
72
80
  - **端到端 Builder 模型对齐**:`SKILL.md`、模板、示例和中英 README 统一为“按需求/功能工作包并行,单个 Builder 端到端负责产品判断、实现、测试与交付证据”;产品/全栈/测试保留为 AI 专业视角,不建人类角色接力或团队管理层
73
81
  - **Phase 0 回归地基**:新增健康/坏指针项目夹具和 `expected-findings.json` 过渡合同,并增加无 Node、无 CLI manifest 的 Skill-only 脚手架回归;两条 Shell 套件纳入 `prepublishOnly`,但未授权 v1.17 tag、GitHub Release 或 npm 发布
74
82
 
75
- > **拷出项目升级(当前 Unreleased 候选,尚未发布)**:
83
+ > **拷出项目升级(v1.20 已验证发布)**:
76
84
  > 1. 若 `scripts/bus-check.sh` 未被项目修改,可整文件替换;紧凑布局替换 `pm/scripts/bus-check.sh`。
77
85
  > 2. `verify-status.sh` 属 project-owned:保留现有 `SUITES`,仅人工合并 `--format=machine` 与 L3 新鲜度逻辑,不整文件覆盖。
78
86
  > 3. 旧看板人工补 Gate1–Gate4 四行;每个 `✅完成` 工作包补恰好一行 `**证据**:`;NOW/看板的新机器引用改用仓库根相对路径(不用 `../`),并按需把开工/收工核对措辞合入 AGENTS/status 约定。
package/README.en.md CHANGED
@@ -79,7 +79,7 @@ npm uninstall --global @haiyangbg/buildbeat # remove only the global CLI p
79
79
 
80
80
  Package-manager install, update, and removal operations manage only the **CLI package and executables**; they never create, upgrade, or delete a project's scaffold. `doctor` is read-only. `init/adopt` show the complete plan and write only after clean-Git, collision, blocker, and confirmation checks. `upgrade` accepts only a canonical schema 2 baseline and performs manifest/hash-based mechanical changes with zero writes on unresolved conflict. `diff/uninstall` and workflow-command expansion remain frozen. `buildbeat` is canonical; the `solobaton` executable remains only as a compatibility alias. See [`docs/CLI.md`](docs/CLI.md) for the complete contract.
81
81
 
82
- `1.20.0` is the merged Phase 0–3 version: bounded Wave 1 `init/adopt` writes, schema-2-only `upgrade`, stronger Gate/evidence joins, multi-repository drift, and scan-boundary reporting. `--force` still cannot overwrite project-owned content or unsafe paths, and a major transition separately requires `--major`. A source checkout, Git tag, and npm artifact remain different evidence surfaces; use [`docs/RELEASING.md`](docs/RELEASING.md) plus the matching GitHub Release and registry readback for release and pilot status.
82
+ `1.21.0` adds a standard domain-response format on top of the verified `1.20.0` lifecycle: close out with Done → Not done → Next, and keep evidence directly under the completed outcome it supports. CLI commands and safety boundaries do not expand. `--force` still cannot overwrite project-owned content or unsafe paths, and a major transition separately requires `--major`. A source checkout, Git tag, and npm artifact remain different evidence surfaces; use [`docs/RELEASING.md`](docs/RELEASING.md) plus the matching GitHub Release and registry readback for release and pilot status.
83
83
 
84
84
  Copied v1.16 legacy projects must not hand-author, copy, or rename a manifest to fabricate schema 2 ownership. Continue with manual CHANGELOG-based maintenance by default; if mechanical upgrades are genuinely required, use the [v1.16 legacy migration guide](docs/LEGACY-V1.16-MIGRATION.md) to rebuild the baseline under review on a dedicated Git branch.
85
85
 
@@ -128,6 +128,8 @@ You are the Fullstack perspective for the current work package. Own implementati
128
128
  You are the Testing perspective for the current work package. Own black-box acceptance, E2E, and evidence. Verify the current candidate.
129
129
  ```
130
130
 
131
+ Every perspective closes its user-facing response as **Done → Not done → Next**. Done contains only functional or business outcomes, and evidence stays directly under the completed outcome it supports. Not done names the remaining outcome and its reason. A completed perspective says who takes the next baton and what they own; an incomplete perspective says who must provide or confirm what. If it can continue safely on its own, it keeps working instead of inventing a handoff or help request. See [`templates/指挥台.md`](templates/%E6%8C%87%E6%8C%A5%E5%8F%B0.md) for the full template.
132
+
131
133
  At the start of every session, synchronize the repository and run the guardrail:
132
134
 
133
135
  ```bash
package/README.md CHANGED
@@ -77,7 +77,7 @@ npm uninstall --global @haiyangbg/buildbeat # 只移除全局 CLI 包
77
77
 
78
78
  包管理器的安装、更新、移除只管理 **CLI 包和可执行文件**,不会创建、升级或删除项目里的协作骨架。`doctor` 只读检查;`init/adopt` 必须先看完整计划,并在无 blocker、干净 Git 和明确确认后才写入;`upgrade` 只接受 canonical schema 2 基线,按 manifest/hash 做机械升级,冲突时零写。`diff/uninstall` 与工作流命令扩张继续冻结。canonical 命令是 `buildbeat`;`solobaton` executable 只保留兼容别名。完整契约见 [`docs/CLI.md`](docs/CLI.md)。
79
79
 
80
- `1.20.0` 是 Phase 0–3 的合并版本:包含 Wave 1 `init/adopt` 受控写入、schema-2-only `upgrade`、Gate/证据强关联、多仓漂移与扫描边界报告。`--force` 也永不覆盖 project-owned 内容或不安全路径;跨 major 另需 `--major`。源码 checkout、Git tag 和 npm artifact 仍是不同证据面,发布状态与真实试点边界必须以 [`docs/RELEASING.md`](docs/RELEASING.md) 和对应 GitHub Release/registry 回读为准。
80
+ `1.21.0` 在已验证的 `1.20.0` 生命周期上新增统一域回复格式:收口时按「已做 → 未做 → 下一步」输出,证据紧跟对应的已做事项;CLI 命令和安全边界不扩张。`--force` 仍永不覆盖 project-owned 内容或不安全路径,跨 major 另需 `--major`。源码 checkout、Git tag 和 npm artifact 是不同证据面,发布状态与真实试点边界必须以 [`docs/RELEASING.md`](docs/RELEASING.md) 和对应 GitHub Release/registry 回读为准。
81
81
 
82
82
  已拷出的 v1.16 legacy 项目不得手写、复制或重命名 manifest 来伪造 schema 2 所有权。默认继续按 CHANGELOG 手工维护;如果确需进入机械升级,按 [v1.16 legacy 迁移指南](docs/LEGACY-V1.16-MIGRATION.md) 在专用 Git 分支受控重建基线。
83
83
 
@@ -126,6 +126,8 @@ chmod +x .git/hooks/pre-commit
126
126
  你是当前工作包的测试视角,负责黑盒验收、E2E 和证据。验收当前候选。
127
127
  ```
128
128
 
129
+ 每个视角面向人收口时统一按「已做 → 未做 → 下一步」回复:`已做`只写功能/业务结果,证据紧跟对应的已做事项;`未做`写清事项和原因;本域完成就说下一棒是谁、接什么,未完成就说需要谁提供或确认什么。自己能继续就不交棒、不伪求助。完整模板见 [`templates/指挥台.md`](templates/%E6%8C%87%E6%8C%A5%E5%8F%B0.md)。
130
+
129
131
  每个会话开工先同步代码,再运行护栏:
130
132
 
131
133
  ```bash
package/SKILL.md CHANGED
@@ -154,7 +154,38 @@ Gate1 规格(人批) → Gate2 设计(人对着真渲染原型批) → 实现+
154
154
  6. 确认各仓工作树与 staged 范围;他人 WIP、散落临时文件或计划中的 candidate 修改未收敛时,不声称 review-ready。
155
155
  7. 一屏收尾:交付结果、证据、未验证边界、挂账/真实阻塞、是否命中下一道人工 Gate。
156
156
 
157
- ### 6.4 检查结果怎么读
157
+ ### 6.4 域回复格式
158
+
159
+ 每个 AI 视角面向用户收口、交接或回复明确检查点时,统一按「已做 → 未做 → 下一步」输出。这个格式只约束收口事实,不要求中间进展或探索讨论套模板。
160
+
161
+ ```md
162
+ ## 〔当前域〕|✅ 已完成 / 🔄 未完成
163
+
164
+ ### 已做
165
+
166
+ 1. 〔功能或业务结果〕
167
+ - 证据:〔commit、测试结果或报告〕
168
+
169
+ ### 未做
170
+
171
+ 1. 〔还没完成或没验证什么〕
172
+ - 原因:〔具体原因〕
173
+
174
+ ### 下一步
175
+
176
+ - **本域已完成:** 下一棒是〔哪个域 / AI 视角〕,负责〔业务级目标〕。
177
+ - **本域未完成:** 需要〔谁〕提供或确认〔什么〕。
178
+ - **无需协助:** 我继续做,暂不交棒。
179
+ ```
180
+
181
+ 口径:
182
+
183
+ - `已做`只写功能或业务级结果,不罗列文件和实现细节;证据紧跟它所支持的事项。多项共用同一份证据时,改在列表末尾写一次「共同证据」。
184
+ - `未做`必须同时写原因;未验证范围也放这里。没有就写「无」,不把局部验证外推为整体完成。
185
+ - `下一步`只保留符合当前状态的一项。下一棒按剩余目标决定,不是固定的产品 → 全栈 → 测试流水线;整个工作包已完成就写「下一棒:无」。
186
+ - 本域未完成但仍能在已批范围内安全推进时,不向用户伪求助;继续做。只有真实阻塞或用户明确要检查点时,才用「需要帮助」或「我继续做,暂不交棒」收口。
187
+
188
+ ### 6.5 检查结果怎么读
158
189
 
159
190
  先按级别处理,不要只看退出码。`bus-check --strict` 只让 `conflict/error` 非零退出;`warning/unverified` 不阻断,但仍必须写进本次证据边界。需要给自动化消费时用 `--format=json --strict`,同时看 `summary`、`coverage.complete` 和 `strict.blocked`。
160
191
 
@@ -196,7 +227,7 @@ Gate1 规格(人批) → Gate2 设计(人对着真渲染原型批) → 实现+
196
227
  > 🔴 收到「搭骨架 / 用 BuildBeat 起项目」类请求时,流程 = **先自查代码 → 只问查不到的 → 一屏确认 → 生成**;不许直接拷模板留 `<占位符>` 让用户手改,也**不许把看代码就能搞清的事拿去问用户**。
197
228
  > **提问三原则:① 能从代码/配置查到的不问;② 问就问不懂技术的人也能答的话**(话术不出现"仓/部署单元/契约/CLI"这类词,能给选项就不开放问);**③ 合并一次问完(常规 3 问,查到有 UI 时 +1),不连环追问**。有 AskUserQuestion 类工具就用,没有就在对话里问;用户说「你定 / 随便」就取默认值,并在收尾报告标注。
198
229
  >
199
- > **CLI 是确定性机械层,不是 Bootstrap 替身。** 旧 npm 包 `solobaton` 已发布的 v0 仍只读;当前未发布源码候选可先运行 `node bin/buildbeat.js init <项目根> --dry-run --json`,存量项目改用 `adopt ... --dry-run --json`。旧 `bin/solobaton.js` 只作为迁移别名保留。把仓/部署标记/UI/测试/碰撞结果作为自查证据,随后仍要读代码、只问剩余问题并做一屏确认。只有同一屏已获用户确认且 dry-run 无 blocker,才可用源码候选去掉 `--dry-run` 交互写入;非交互时 `--yes` 只复用这次确认,不能绕过碰撞/脏 Git/路径检查。CLI 只填确定项,必须继续按输出的 `pendingPlaceholders` 完成语义渲染;不得声称它已初始化 Git、安装 Hook、跨 Gate 或发布 npm。
230
+ > **CLI 是确定性机械层,不是 Bootstrap 替身。** Canonical npm 入口已发布为 `@haiyangbg/buildbeat@latest`;先运行 `npx --yes --package=@haiyangbg/buildbeat@latest buildbeat init <项目根> --dry-run --json`,存量项目改用 `adopt ... --dry-run --json`。旧 npm 包 `solobaton` 已 deprecate 且仍只读;新包内的 `solobaton` executable 只作为迁移别名保留。把仓/部署标记/UI/测试/碰撞结果作为自查证据,随后仍要读代码、只问剩余问题并做一屏确认。只有同一屏已获用户确认且 dry-run 无 blocker,才可去掉 `--dry-run` 交互写入;非交互时 `--yes` 只复用这次确认,不能绕过碰撞/脏 Git/路径检查。CLI 只填确定项,必须继续按输出的 `pendingPlaceholders` 完成语义渲染;不得声称它已初始化 Git、安装 Hook、跨 Gate 或替业务项目批准发布。
200
231
 
201
232
  ### 8.1 先自查,后提问
202
233
 
@@ -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.20:** `@haiyangbg/buildbeat` is the canonical scoped distribution for bounded `init/adopt` writes and schema-2-only mechanical `upgrade`. Registry availability, provenance, and exact artifact identity must be read back independently.
46
+ - **BuildBeat 1.20:** `@haiyangbg/buildbeat@1.20.0` is the independently verified canonical scoped distribution for bounded `init/adopt` writes and schema-2-only mechanical `upgrade`. Registry availability, provenance, signatures, and exact artifact identity are archived in [`WP4.3-RELEASE-EVIDENCE-2026-08-25.md`](WP4.3-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 is archived in [`PHASE4-V1.20-PILOT-2026-08-25.md`](PHASE4-V1.20-PILOT-2026-08-25.md); release readiness is tracked separately in [`PHASE4-STABILITY-AUDIT-2026-08-25.md`](PHASE4-STABILITY-AUDIT-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).
50
+ The real version-increment and multi-repository evidence is 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), and the completed external distribution is recorded in [`WP4.3-RELEASE-EVIDENCE-2026-08-25.md`](WP4.3-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,6 +1,6 @@
1
1
  # BuildBeat CLI lifecycle contract
2
2
 
3
- Status: **BuildBeat `1.20.0` scoped-distribution candidate** · 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.20 candidate merges Phase 0–3, including bounded `init/adopt` writes and schema-2-only mechanical `upgrade`; the genuine version-increment pilot is archived in [`PHASE4-V1.20-PILOT-2026-08-25.md`](PHASE4-V1.20-PILOT-2026-08-25.md), while exact registry publication remains separately gated by [`RELEASING.md`](RELEASING.md).
3
+ Status: **BuildBeat `1.21.0` scoped-distribution candidate** · 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 candidate 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), while exact 1.21 registry publication is separately gated by [`RELEASING.md`](RELEASING.md).
4
4
 
5
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 source candidate. Synchronous file-bus checks remain authoritative in the project-local scripts specified by [`CHECKS.md`](CHECKS.md).
6
6
 
@@ -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.20.0` | `doctor`, `init`, `adopt`, `upgrade`, `version` | merged Phase 0–3 command set; writes remain bounded by the transaction and human-Gate contracts below |
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.20",
131
- "cliVersion": "1.20.0",
130
+ "scaffoldVersion": "v1.21",
131
+ "cliVersion": "1.21.0",
132
132
  "layout": "default",
133
133
  "installedAt": "2026-08-24T00:00:00.000Z",
134
134
  "files": {
@@ -3,14 +3,14 @@
3
3
  > 文档状态:当前执行基线(本版替代 2026-08-24 早先两版)
4
4
  > 基线日期:2026-08-24
5
5
  > 上游文档:[`ROADMAP.md`](ROADMAP.md)(下称“演进书”);竞品调研见 [`CLI-STRATEGY-2026-08.md`](CLI-STRATEGY-2026-08.md)
6
- > 基线代码:`solobaton@1.16.3`(npm 已发布,Git tag `v1.16.3`)
7
- > 实施状态(更新于 2026-08-25):**WP0.1–WP4.2 已完成;WP4.3 已由用户决定迁移到 `@haiyangbg/buildbeat` 与 `HaiYangBG1/BuildBeat`,当前处于外部分发执行中**。Phase 0–3 合并为 `1.20.0`,不伪造未发布的 v1.17/v1.18/v1.19 artifacts;package metadata 与 bundle 已升为 `1.20.0` / `v1.20`。真实 schema 2 `v1.16 → v1.20` 升级试点以 `a136ff6f33d5814d36593f85a3b9ec2f1e223827` 闭合,真实多仓只读刷新及边界见 [`PHASE4-V1.20-PILOT-2026-08-25.md`](PHASE4-V1.20-PILOT-2026-08-25.md)。`ROADMAP.md` §15 的 12 条已达到源码/真实试点候选口径;这不等于新仓已改名、源码已 push、tag/Release 已创建或 scoped npm artifact 已发布,外部动作须按 [`RELEASING.md`](RELEASING.md) 逐项回读。
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 已确认;WP3.1–WP3.4 源码候选、WP4.1–WP4.2 文档/互操作收口与真实版本增量 upgrade 试点均已完成。WP4.3 的外部分发标识和发布序列已拍板:scoped package + 新仓库名,Phase 0–3 合并为 `1.20.0`;当前只剩远端改名、push、Trusted Publisher、registry/provenance/签名/隔离安装和 GitHub Release 的逐项执行与回读。
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(执行中) | 迁移到 `@haiyangbg/buildbeat` 与 `HaiYangBG1/BuildBeat`;legacy npm 包只读保留并加迁移提示;独立验收仓库重定向、Trusted Publishing、registry/provenance/签名/隔离安装与 Release |
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
- - 外部执行顺序固定为:本地全门禁与候选提交 → GitHub 仓库改名并核规则/环境 → push/CI → scoped 包 bootstrap → 绑定 Trusted Publisher → 受保护 tag 驱动 `1.20.0` publish → registry/provenance/签名/隔离安装回读 → GitHub Release → legacy `solobaton` deprecation。任何一步失败都停在当前证据层,不把后续状态写成完成。
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. [ ] **Phase 4 / WP4.3 外部执行**:完成远端改名/push、Trusted Publisher、受保护 tag、npm publish、registry/provenance/签名/隔离安装回读、GitHub Release 与 legacy deprecation。
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` 形成后续本地源码候选,WP4.1/WP4.2 由 `5179e99` / `1887cf2` 保全。BuildBeat Wave 1 与真实 v1.20 Wave 2 upgrade 试点均已完成;WP4.3 外部分发执行已获当前用户指令授权,但每一步仍以独立远端回读为完成条件。
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 项目 + 真实多仓只读投影。npm/GitHub 身份已做发布前只读预检;本页刷新时尚未执行 push、tag、Release、publish、部署或远端改名。
5
- > 结论:**12 条已达到源码/真实试点候选口径;外部分发仍未完成,因此不得把本结论写成“已发布”或“scoped npm artifact 已可用”。**
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. 将候选提交保全,完成 GitHub 仓库改名、remote 更新、push 与默认分支 CI 回读,并确认规则集和 `npm-publish` environment 未因改名丢失。
27
- 2. 为 `@haiyangbg/buildbeat` 建立最小 bootstrap package,再绑定 GitHub Actions Trusted Publisher;bootstrap 不占用 `latest`。
28
- 3. 由受保护 `v1.20.0` tag 驱动 publish,逐项回读 registry version、integrity、provenance attestation、signature、隔离安装/doctor 和 npm README。
29
- 4. 创建 GitHub Release;确认新旧仓库 URL 行为后,对 legacy `solobaton` 加迁移 deprecation,不 unpublish。
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 已关闭;真实升级和多仓刷新又关闭了第 11 条源码/试点证据缺口。用户已批准 scoped package + 新仓库名迁移,但只有完成上节每项远端回读后,才能关闭 WP4.3 并宣称 `@haiyangbg/buildbeat@1.20.0` 已发布。
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
@@ -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 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 1.20 write/upgrade command surface.
4
4
 
5
- Release evidence at this candidate: source package version `@haiyangbg/buildbeat@1.20.0`; latest independently verified BuildBeat npm distribution: **pending first scoped publication**. The latest independently verified legacy distribution remains `solobaton@1.16.3`, anchored by annotated tag `v1.16.3` at commit `821ea3e` and historical workflow run [32587162679](https://github.com/HaiYangBG1/BuildBeat/actions/runs/32587162679). The candidate must not be called published until the scoped artifact, provenance, signatures, isolated install, executable behavior, registry README, and matching GitHub Release are independently read back.
5
+ Release evidence at source package version `@haiyangbg/buildbeat@1.21.0`; latest independently verified BuildBeat npm distribution `@haiyangbg/buildbeat@1.20.0`, anchored by annotated tag `v1.20.0` at commit `5aaa9e8`, workflow run [32826832379](https://github.com/HaiYangBG1/BuildBeat/actions/runs/32826832379), and the matching [GitHub Release](https://github.com/HaiYangBG1/BuildBeat/releases/tag/v1.20.0). The 1.21 source candidate adds the standard domain-response contract without expanding the CLI command or safety boundary; it must not be described as a verified distribution until its own protected tag, OIDC workflow, registry identity, provenance, signatures, isolated install, and GitHub Release are read back. Exact 1.20 evidence, bootstrap behavior, and legacy deprecation are 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
 
@@ -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` becomes active only after the exact 1.20 scoped artifact passes registry/provenance/signature/isolated-install/README readback. The old-name WP2.7 pilots remain historical compatibility evidence and do not authorize the scoped artifact.
18
+ 10. The write-enabled first-screen command `npx --yes --package=@haiyangbg/buildbeat@latest buildbeat init my-project` is active because the exact 1.20 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 expected bootstrap readback contains `bootstrap: 0.0.0` and no `latest` tag. Its 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/).
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 final BuildBeat readback is `bootstrap: 0.0.0` and `latest: 1.20.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 1.20 publish. After the first OIDC release succeeds, separately set scoped-package publishing access to disallow traditional tokens 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.
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
@@ -181,15 +181,14 @@ contracts / decisions / status / evidence
181
181
 
182
182
  ### 3.2 当前 CLI 状态
183
183
 
184
- legacy `solobaton@1.16.3` CLI v0 只承担检查和只读规划,`init/adopt` 必须带 `--dry-run`,所有项目写入 fail-closed。当前 scoped BuildBeat 候选已将 Phase 0–3 合并为 package `@haiyangbg/buildbeat@1.20.0` / bundle `v1.20`: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` 升级。真实多仓只读刷新能精确区分业务仓断链与未验证范围。scoped registry artifact、provenance 与仓库改名仍属于外部分发执行,不因源码/项目试点自动成立。项目 `uninstall`、`diff`、工作流命令扩张与三方合并引擎继续冻结。Skill 仍承担项目语义和人工 Gate。
184
+ 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
185
 
186
186
  ### 3.3 主要缺口
187
187
 
188
188
  | 缺口 | 影响 |
189
189
  |---|---|
190
- | scoped artifact 尚未发布回读 | 源码和真实项目试点不等于 registry artifact;Trusted Publisher、provenance、签名、integrity 与隔离安装必须独立验证 |
191
190
  | 真实业务仓仍可有自身冲突 | 多仓刷新已完成,但目标仓存在真实 `lessons.md` 断链、未登记 map 和未升级适配器;检查器必须保持 blocked/unverified,不能替业务仓修事实 |
192
- | 外部分发迁移执行中 | GitHub 改名、push、受保护 tag、Release、legacy deprecation 与旧 URL 重定向须逐项完成和回读 |
191
+ | 发布远端是可变状态 | 首次 scoped 发布已闭合,但 GitHub ruleset/Environment、Trusted Publisher、publishing access、dist-tags 和版本占用仍须每次发布前重查 |
193
192
 
194
193
  ---
195
194
 
@@ -558,7 +557,7 @@ buildbeat upgrade
558
557
  buildbeat version
559
558
  ```
560
559
 
561
- `diff` / `uninstall` 只保留不可用名并明确返回 `command_not_available`;`check/status/gate/adr/standards` 属 Skill 与项目脚本边界,不加入 CLI。已发布 v0 仅开放 `doctor`、`init/adopt --dry-run` 和 `version`;未发布 WP2.4–WP2.6 源码候选已实现 `init/adopt` 受控写入、脚本侧 STACK 漂移检查与 Claude plugin marketplace 打包,但只有完成真实项目试点、发布门禁与 registry 回读后才能宣称 npm 写能力可用。
560
+ `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
561
 
563
562
  ### 10.3 CLI 智能边界
564
563
 
@@ -692,7 +691,7 @@ CLI 侧:
692
691
 
693
692
  **目标**:在 Wave 1 的 schema 2 基线上补齐有边界的机械升级,并完善多仓和 Gate 检查,不扩张工作流命令面。
694
693
 
695
- 当前进度:WP3.1–WP3.4 的机械 upgrade、Gate/证据强关联、多仓漂移与扫描边界报告源码及 disposable Git 沙箱候选已完成;真实 schema 2 `v1.16 → v1.20` upgrade 和真实四子仓只读刷新也已归档。WP4.1–WP4.2 的示例/迁移、能力矩阵、双语终校与硬门槛归档已完成;WP4.3 已决定 scoped package + 新仓库名并进入外部分发执行。
694
+ 当前进度: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
695
 
697
696
  交付:
698
697
 
@@ -719,9 +718,9 @@ CLI 侧:
719
718
  - 兼容性声明;
720
719
  - 完成 BuildBeat 外部分发标识决策:继续沿用 legacy `solobaton` 包/仓库地址,或另行批准 scoped package 与远端改名。
721
720
 
722
- 品牌名与外部分发标识均已在 2026-08-25 拍板:`@haiyangbg/buildbeat` + `HaiYangBG1/BuildBeat`。远端仓库、npm 包和发布动作不由本地改名自动成立,仍按独立回读确认。
721
+ 品牌名与外部分发标识均已在 2026-08-25 拍板并执行:`@haiyangbg/buildbeat` + `HaiYangBG1/BuildBeat`。远端仓库、npm 包和发布动作已按独立读回关闭;这不改变未来版本仍须重新核验可变远端的要求。
723
722
 
724
- 当前进度:WP4.1 已补齐 schema 2 教学 manifest 与 legacy 指南;WP4.2 已完成能力矩阵、双语终校、双向互操作回归与§15 归档;真实升级和多仓刷新已补证。WP4.3 的 package/repository/版本序列决策已完成,当前执行远端改名、Trusted Publishing 和 scoped `1.20.0` 首发回读。
723
+ 当前进度:WP4.1 已补齐 schema 2 教学 manifest 与 legacy 指南;WP4.2 已完成能力矩阵、双语终校、双向互操作回归与§15 归档;真实升级和多仓刷新已补证。WP4.3 已完成远端改名、Trusted Publishing、scoped `1.20.0` 首发、供应链/安装回读、GitHub Release 与 legacy deprecation。
725
724
 
726
725
  ---
727
726
 
@@ -813,7 +812,7 @@ CLI 侧:
813
812
  11. 真实项目试点通过,而不仅是模板测试通过;
814
813
  12. README、SKILL、AGENTS、示例和 CLI 帮助不存在相互矛盾的定位。
815
814
 
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)。当前 12/12 达到源码/真实试点候选口径;这仍不宣称新版协议已稳定发布或写入式 CLI 已在 npm 可用,必须等 scoped registry artifact 和外部分发链独立回读。
815
+ 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
816
 
818
817
  ---
819
818
 
@@ -839,12 +838,12 @@ CLI 侧:
839
838
  - 技术雷达产品化;
840
839
  - 远程服务或云端协作。
841
840
 
842
- ### 16.3 尚未拍板
841
+ ### 16.3 已拍板并执行
843
842
 
844
- - legacy npm 包 `solobaton` 是长期兼容分发 ID,还是迁移到新的 scoped package;
845
- - 当前 GitHub 仓库何时改名,以及重定向、文档和 Trusted Publishing 如何迁移。
843
+ - legacy npm 包 `solobaton` 保留为已 deprecate 的只读兼容分发 ID,不 unpublish;canonical 分发迁移到 `@haiyangbg/buildbeat`。
844
+ - GitHub 仓库已改名为 `HaiYangBG1/BuildBeat`;旧 URL 重定向、文档、Trusted Publishing 与 `v1.20.0` 首发已回读。
846
845
 
847
- 该事项不阻塞当前路线图。
846
+ 后续版本按 [`RELEASING.md`](RELEASING.md) 重新核验可变远端状态。
848
847
 
849
848
  ---
850
849
 
@@ -862,7 +861,7 @@ CLI 侧:
862
861
  10. [x] 完成 schema 2 机械升级、多仓增强、真实版本增量 upgrade 和真实多仓只读刷新;项目卸载继续走手册;
863
862
  11. [x] 完成 BuildBeat 本地 namespace、能力矩阵、双语文档与硬门槛归档;
864
863
  12. [x] 人工决定 WP4.3 外部标识:`@haiyangbg/buildbeat` 与 `HaiYangBG1/BuildBeat`,Phase 0–3 合并首发 `1.20.0`;
865
- 13. [ ] 逐项完成远端改名、push、Trusted Publisher、受保护 tag、npm publish、registry/provenance/签名/隔离安装回读、GitHub Release 与 legacy deprecation。
864
+ 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
865
 
867
866
  ---
868
867
 
@@ -0,0 +1,73 @@
1
+ # WP4.3 BuildBeat scoped 分发关闭证据(2026-08-25)
2
+
3
+ > 证据等级:GitHub / npm 可变远端的当次独立读回 + 不可变 annotated tag + 官方 registry artifact + 本地隔离安装。本文关闭 BuildBeat 外部分发迁移,不证明任何业务项目 Gate、部署、生产健康或常态流量。
4
+
5
+ ## 1. Canonical 标识
6
+
7
+ | 项 | 已验证结果 |
8
+ |---|---|
9
+ | 产品 / CLI | BuildBeat / `buildbeat` |
10
+ | GitHub 仓库 | [`HaiYangBG1/BuildBeat`](https://github.com/HaiYangBG1/BuildBeat) |
11
+ | npm package | [`@haiyangbg/buildbeat`](https://www.npmjs.com/package/@haiyangbg/buildbeat) |
12
+ | legacy compatibility | 包内继续提供 `solobaton` executable;旧 npm 包 `solobaton` 保留但已 deprecate |
13
+ | 发布版本 | `1.20.0`,scaffold `v1.20` |
14
+
15
+ 旧 GitHub 地址 `https://github.com/HaiYangBG1/solobaton` 在关闭时返回 `301` 并重定向到新仓库;这是可变远端行为,未来使用前仍须重新检查。
16
+
17
+ ## 2. 仓库、tag 与发布工作流
18
+
19
+ | 项 | 已验证结果 |
20
+ |---|---|
21
+ | `main` 发布提交 | `5aaa9e8ec96113970e7ce0ed0e43bec86a8743a0` |
22
+ | annotated tag | `v1.20.0`,tag object 精确指向上述提交 |
23
+ | tag ruleset | `Protect release tags` active,include=`refs/tags/v*`,rules=`update,deletion`,bypass actors 为空 |
24
+ | 发布工作流 | [`Publish BuildBeat scoped npm package` run 32826832379](https://github.com/HaiYangBG1/BuildBeat/actions/runs/32826832379) |
25
+ | GitHub Environment | `npm-publish`,仅 protected branches,required reviewer;本次 run 由当前授权 reviewer 对唯一 pending deployment 批准 |
26
+ | publish job | success;tag / checkout / event SHA / `origin/main` / package version 全等检查通过 |
27
+ | verify job | success;exact artifact、provenance、隔离安装、registry signature 与 attestation 全部通过 |
28
+ | GitHub Release | [`BuildBeat v1.20.0`](https://github.com/HaiYangBG1/BuildBeat/releases/tag/v1.20.0),非 draft、非 prerelease、标记为 latest |
29
+ | Publishing access | `Require two-factor authentication and disallow bypass 2fa tokens (recommended)` 已独立读回为 checked;OIDC Trusted Publisher 保持可用 |
30
+
31
+ npm Trusted Publisher 当次读回为 GitHub Actions、repository `HaiYangBG1/BuildBeat`、workflow `publish.yml`、environment `npm-publish`、permission `createPackage`。绑定和包设置属于可变状态,未来发布前必须重新读回,不能只引用本文。
32
+
33
+ ## 3. npm bootstrap 与正式 artifact
34
+
35
+ 为先建立 scoped package 再绑定 Trusted Publisher,使用只有 `README.md` 与 `package.json` 的最小 `0.0.0` 占位包。它不提供 CLI、不对应 Git tag、没有 retroactive provenance,只保留 `bootstrap` dist-tag。
36
+
37
+ 本次首包有一个需要保留的实际偏差:尽管命令显式使用 `--tag bootstrap`,npm 首次创建 package 后仍短暂返回 `latest=0.0.0`;带 2FA 的 `npm dist-tag rm ... latest` 被 registry 以 `400` 拒绝。没有删除或重发版本,也没有把占位包写成正式入口。随后 `1.20.0` 通过 OIDC 正式发布并接管 `latest`,最终读回为:
38
+
39
+ ```json
40
+ {
41
+ "bootstrap": "0.0.0",
42
+ "latest": "1.20.0"
43
+ }
44
+ ```
45
+
46
+ 正式 artifact 的独立 registry 读回:
47
+
48
+ | 字段 | 值 |
49
+ |---|---|
50
+ | name / version | `@haiyangbg/buildbeat@1.20.0` |
51
+ | repository | `git+https://github.com/HaiYangBG1/BuildBeat.git` |
52
+ | integrity | `sha512-Q9hcRNSwuhYulNR7+XxAyILSmujzhj01tDqHR+C8RgROSdP99O/oAhZgSpiHW441jdvCWPmnl4yDvtQGpfffUg==` |
53
+ | shasum | `dc0c960f4f12a08b0733515dddb5614313a85381` |
54
+ | attestation URL | `https://registry.npmjs.org/-/npm/v1/attestations/@haiyangbg%2fbuildbeat@1.20.0` |
55
+ | provenance predicate | `https://slsa.dev/provenance/v1` |
56
+
57
+ 工作流外的本地隔离安装再次证明:`buildbeat --version` 与包内兼容入口 `solobaton --version` 均返回 `1.20.0`;`npm audit signatures` 返回 1 个 verified registry signature 和 1 个 verified attestation。由该安装运行 `doctor` 得到合法 schema 2 JSON;对没有 lifecycle manifest 的源仓根诚实返回 exit `1`,执行前后 Git 可见状态完全一致,未把诊断失败伪装成绿灯或写入项目。
58
+
59
+ registry README 也单独读回了 `# BuildBeat`、`HaiYangBG1/BuildBeat`、`npm view @haiyangbg/buildbeat@latest version` 及 `npx --yes --package=@haiyangbg/buildbeat@latest buildbeat ...`,证明 npm 落地页不是 bootstrap README 或旧包文案。
60
+
61
+ ## 4. Legacy npm 包退场
62
+
63
+ 旧包没有 unpublish,`latest` 仍为 `solobaton@1.16.3`,既有只读安装继续可解析。`1.16.1`、`1.16.2`、`1.16.3` 三个版本已逐一读回相同 deprecation 文案:
64
+
65
+ > Solobaton has moved to @haiyangbg/buildbeat. Install @haiyangbg/buildbeat and use the buildbeat CLI; this package remains available for legacy read-only compatibility.
66
+
67
+ 旧包不会获得 BuildBeat `1.20.0` 的项目写入或机械升级能力,也不会通过 unpublish 破坏历史消费者。
68
+
69
+ ## 5. 关闭结论与边界
70
+
71
+ - 已验证:新仓库名、旧 URL 重定向、scoped public package、Trusted Publisher、最严格 publishing access、受保护 annotated tag、OIDC 发布、最终 dist-tags、exact integrity、SLSA provenance、registry signature、attestation、隔离安装、GitHub Release 和 legacy deprecation。
72
+ - 持续要求:发布前重新检查 GitHub tag ruleset、Environment、npm Trusted Publisher、package publishing access、dist-tags 与目标版本是否已存在;可变设置不能由本次截图、日志或文档永久代表。
73
+ - 不可外推:本次发布不替任何业务项目批准 Gate,不证明真实业务仓已升级,不证明部署、生产健康或常态流量。
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "scaffoldVersion": "v1.20",
4
- "cliVersion": "1.20.0",
3
+ "scaffoldVersion": "v1.21",
4
+ "cliVersion": "1.21.0",
5
5
  "layout": "default",
6
6
  "installedAt": "2026-08-25T00:00:00.000Z",
7
7
  "files": {
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "BUILDBEAT.md": {
17
17
  "policy": "replace-if-unmodified",
18
- "baselineSha256": "039ac488b5b3a06857e0c19002ba3fee027ba732aef23e3987c2983fb0c4358d"
18
+ "baselineSha256": "0b766dcfaa98bcc6b4e3373bb9111d49ede2c2dcd75a8232a677d97c53bdec3f"
19
19
  },
20
20
  "CLAUDE.md": {
21
21
  "policy": "replace-if-unmodified",
@@ -1,6 +1,6 @@
1
1
  # BUILDBEAT.md — 本项目的协作骨架版本标记
2
2
 
3
- **本项目使用 BuildBeat `v1.20`**(2026-06-10 初次拷入;2026-08-22 升级;2026-08-25 scoped 分发迁移,沙盘示意)
3
+ **本项目使用 BuildBeat `v1.21`**(2026-06-10 初次拷入;2026-08-22 升级;2026-08-25 scoped 分发迁移与域回复格式升级,沙盘示意)
4
4
  **协调层布局:`默认`**(脚本在 `scripts/`;简账是从零起的项目,根上本来没别的东西 —— 接管存量项目才用紧凑布局)
5
5
  来源:<https://github.com/HaiYangBG1/BuildBeat>
6
6
 
package/example/README.md CHANGED
@@ -37,6 +37,28 @@
37
37
 
38
38
  `n/a` 必须同行带非占位的 `理由:`;`passed` 应同行指向已存在的决策表行或归档证据。`blocked` 也应说明真实阻塞,不把“还没做”包装成审批。
39
39
 
40
+ ## 域回复示例
41
+
42
+ 下面展示一期实现候选形成时,全栈视角如何面向人收口。这是回复格式示例,status 和证据文件仍是持久事实。
43
+
44
+ ```md
45
+ ## 全栈视角|✅ 已完成
46
+
47
+ ### 已做
48
+
49
+ 1. 记账主流程和月度报表已形成可验收候选。
50
+ - 证据:`pm/archive/一期/evidence/implementation.md`
51
+
52
+ ### 未做
53
+
54
+ 1. 黑盒 E2E 和带图走查。
55
+ - 原因:需要测试视角独立验收当前候选。
56
+
57
+ ### 下一步
58
+
59
+ - **本域已完成:** 下一棒是测试视角,负责黑盒 E2E 和带图走查。
60
+ ```
61
+
40
62
  ## Manifest 的教学边界
41
63
 
42
64
  - `files` 只记录这份合成快照声明的 8 个基线路径;当前文档字节与 `baselineSha256` 一致,是为了防止教材漂移,不是为 legacy 项目追认历史所有权。
package/lessons.md CHANGED
@@ -117,3 +117,11 @@
117
117
  **根因**:规则只说“稳定候选”,没有把稳定变成可核前置;又把“高风险领域”误写成“实现中一碰就立即派 reviewer”。于是 reviewer 代替了写者应先完成的自查,而 `risk-delta` 被滥用于首次 milestone 前的普通候选收敛。subagent 还分批播报 findings/进度,视觉上一个 reviewer 像开了多轮审查。
118
118
 
119
119
  **解药**:引入 **review-ready** 四项硬前置:工作包实现与写者自查完成;所有候选仓 `HEAD=candidate` 且工作树干净;受影响/全量 L3 与真渲染证据绿;无已知待修或计划改 hash。首次 milestone 前的鉴权/Secret/fail-closed 等自发现问题先集中进实现语义清单并自行收敛,不送审;只有修改已冻结对外契约或不可逆副作用才提前 `STOP_NOW + risk-delta`。每工作包每 Gate 默认一次 milestone,P0/P1 合并修完后一次 closure,P2 不复核。reviewer 单次静默核完再返回;返回前 candidate 改变就标 `SUPERSEDED` 并停止,不得把连续修补包装成 delta 链。通用原则:**独立审查应消费稳定候选,不能成为写者边实现边找问题的后台 lint。**
120
+
121
+ ## 19. 域回复各说各话,人还要自己拼交接结论
122
+
123
+ **症状**:产品视角回一屏分析,全栈视角罗列文件和实现细节,测试视角只回一个通过/不通过。人要再追问「到底做了什么、还没做什么、该谁接」,证据又和业务结果分开,很难一眼对上。
124
+
125
+ **根因**:BuildBeat 规定了 `pm/status/{视角}.md` 的持久状态写法,却只笼统要求「一屏收尾」,没有给面向人的回复一个简单统一的出口。模型便按各自任务的局部叙事优化,交接信息结构自然漂移。
126
+
127
+ **解药**:每个 AI 视角面向人收口时统一用「已做 → 未做 → 下一步」。`已做`只写功能/业务结果,证据紧跟它支持的事项;多项共用才放一条共同证据。`未做`必须写原因,同时承载未验证边界。本域完成就说下一棒是谁、做什么;未完成就说需要谁提供或确认什么;自己还能继续就不伪求助。格式只约束收口,不约束中间探索;持久真相仍在 Git/status/证据文件。通用原则:**统一交接接口,不统一模型怎么思考。**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haiyangbg/buildbeat",
3
- "version": "1.20.0",
3
+ "version": "1.21.0",
4
4
  "description": "BuildBeat: a Git-based, human-gated engineering delivery protocol for humans and AI sessions.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -45,6 +45,27 @@
45
45
 
46
46
  **任务包信封** —— 多步骤工作开工时,从用户目标与当期看板明确 `objective / in_scope / terminal_condition`。需求 ID、验收项、文档和原子 commit 可以细分,但只是追踪单位;默认一个工作包覆盖多个子项。一个工作包可由多个域按写边界接力,多个独立目标也可并行,但每个会话同时只认领一个工作包。只要仍有安全、可逆、在 `in_scope` 内且能推进 `objective` 的工作,会话就继续做。单个文档提交、reviewer 返回、status 回写或普通 P2 只报中间进展,**不得因此结束任务等用户说“继续”**。只在以下三种情况结束:目标带证据完成;遇到必须由人处理的真实阻塞;用户明确只要阶段性检查点。
47
47
 
48
+ **域回复格式** —— 面向用户收口、交接或回复明确检查点时,统一写「已做 → 未做 → 下一步」;中间进展和探索讨论不强制套模板。
49
+
50
+ ```md
51
+ ## 〔当前域〕|✅ 已完成 / 🔄 未完成
52
+
53
+ ### 已做
54
+ 1. 〔功能或业务结果〕
55
+ - 证据:〔commit、测试结果或报告〕
56
+
57
+ ### 未做
58
+ 1. 〔还没完成或没验证什么〕
59
+ - 原因:〔具体原因〕
60
+
61
+ ### 下一步
62
+ - **本域已完成:** 下一棒是〔哪个域 / AI 视角〕,负责〔业务级目标〕。
63
+ - **本域未完成:** 需要〔谁〕提供或确认〔什么〕。
64
+ - **无需协助:** 我继续做,暂不交棒。
65
+ ```
66
+
67
+ 只保留符合当前状态的一条。`已做`只写功能/业务结果,证据紧跟对应事项;多项共用时在列表末写一次「共同证据」。`未做`同时写原因,没有就写「无」;未验证边界也放这里。整个工作包已完成就写「下一棒:无」;下一棒按剩余目标决定,不固定按域流转。本域自己仍能在范围内推进时,继续做,不向用户伪求助或交棒。
68
+
48
69
  **审批三级**:
49
70
 
50
71
  1. **STOP_NOW 立即停**:跨 Gate;扩大已批准范围或重开 non-goal;修改已冻结对外契约;部署/发布/花费/删除等不可逆外部动作;接受安全/合规风险;权威事实冲突且无法实查。停在动作前,一次给推荐方案、影响和最小问题。
@@ -20,6 +20,29 @@
20
20
  > **核查门不按任务数收费**:首次 milestone 前不启动 reviewer;review-ready 后每工作包每 Gate 默认 1 次 milestone,P0/P1 合并修完后 1 次 closure,P2 不复核。reviewer 单次静默核完再返回,不播报中间 findings。同一 candidate 复用结论;返回前 hash 变化就标 `SUPERSEDED` 并停止,不得边改边 delta。
21
21
  > **4 个 Gate 不可自动跨过**;reviewer 批准 ≠ 你合并。你只是节拍器,信息全在 repo 里流动,不用你搬运。
22
22
 
23
+ ## 域回复怎么写
24
+
25
+ 每个 AI 视角面向人收口或交接时,统一按「已做 → 未做 → 下一步」回复:
26
+
27
+ ```md
28
+ ## 〔当前域〕|✅ 已完成 / 🔄 未完成
29
+
30
+ ### 已做
31
+ 1. 〔功能或业务结果〕
32
+ - 证据:〔commit、测试结果或报告〕
33
+
34
+ ### 未做
35
+ 1. 〔还没完成或没验证什么〕
36
+ - 原因:〔具体原因〕
37
+
38
+ ### 下一步
39
+ - **本域已完成:** 下一棒是〔哪个域 / AI 视角〕,负责〔业务级目标〕。
40
+ - **本域未完成:** 需要〔谁〕提供或确认〔什么〕。
41
+ - **无需协助:** 我继续做,暂不交棒。
42
+ ```
43
+
44
+ `已做`只写功能/业务结果,证据紧跟对应事项;多项共用时在列表末写「共同证据」。`未做`要写原因,没有就写「无」。`下一步`只保留符合当前状态的一条;工作包已完成就写「下一棒:无」。没有真实阻塞就继续做,不把自己能解决的事包装成求助。完整口径见 `AGENTS.md` 的「域回复格式」。
45
+
23
46
  ## 检查结果怎么读
24
47
 
25
48
  先跑 `bash scripts/bus-check.sh --strict`,再按级别读摘要;exit 0 只表示没有 `conflict/error`,不表示所有范围都核过。