@haiyangbg/buildbeat 2.0.2 → 3.0.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 +25 -301
- package/README.en.md +9 -22
- package/README.md +6 -19
- package/SKILL.md +169 -220
- package/bin/buildbeat.js +14 -2
- package/docs/CAPABILITY-MATRIX.md +13 -55
- package/docs/README.md +13 -14
- package/docs/RELEASING.md +10 -9
- package/docs/v2/RFC-0001-product-definition.md +2 -0
- package/docs/v2/RFC-0003-workflow-policy.md +2 -0
- package/docs/v2/guide/00-how-to-talk.md +3 -3
- package/docs/v2/guide/01-quickstart.en.md +163 -0
- package/docs/v2/guide/01-quickstart.md +15 -13
- package/docs/v2/guide/03-policy-guide.md +1 -1
- package/docs/v2/guide/06-evidence-guide.en.md +51 -0
- package/docs/v2/guide/06-evidence-guide.md +5 -3
- package/docs/v2/guide/07-approval-guide.en.md +115 -0
- package/docs/v2/guide/07-approval-guide.md +12 -10
- package/docs/v2/guide/10-recovery.en.md +83 -0
- package/docs/v2/guide/10-recovery.md +8 -6
- package/docs/v2/guide/11-session-handoff.en.md +2 -2
- package/docs/v2/guide/11-session-handoff.md +2 -2
- package/docs/v2/guide/README.md +4 -10
- package/example/.buildbeat/notify.yaml +13 -0
- package/example/.buildbeat/observe.yaml +31 -0
- package/example/AGENTS.md +67 -13
- package/example/BUILDBEAT.md +8 -11
- package/example/CLAUDE.md +1 -1
- package/example/README.md +17 -67
- package/example/delivery/envelope/prompts/builder.md +10 -0
- package/example/delivery/envelope/prompts/fixer.md +10 -0
- package/example/delivery/envelope/prompts/reviewer.md +13 -0
- package/example/delivery/envelope/worker.sh +70 -0
- package/example/delivery/work/WORK-EXPORT-DATE-FILTER/decisions.jsonl +3 -0
- package/example/delivery/work/WORK-EXPORT-DATE-FILTER/intent.md +24 -0
- package/example/delivery/work/WORK-EXPORT-DATE-FILTER/plan.md +20 -0
- package/example/delivery/work/WORK-EXPORT-DATE-FILTER/run-config.yaml +66 -0
- package/example/delivery/work/WORK-EXPORT-DATE-FILTER/runs/RUN-EXPORT-01/run-record.json +108 -0
- package/example/delivery/work/WORK-EXPORT-DATE-FILTER/workflow.yaml +44 -0
- package/example/gitignore.template +20 -0
- package/example/package.json +13 -0
- package/example/pm/decisions.md +3 -15
- package/example/src/export.js +25 -0
- package/example/src/ledger.js +16 -0
- package/example/tests/export.test.js +35 -0
- package/example//346/214/207/346/214/245/345/217/260.md +40 -0
- package/lessons.md +52 -71
- package/package.json +3 -7
- package/src/v2/cli/run.js +33 -23
- package/src/v2/engine/risk-preset.js +1 -1
- package/src/v2/runtime/notify.js +5 -5
- package/src/v2/runtime/overview.js +7 -7
- package/templates/ARCHITECTURE.md +1 -1
- package/templates/contracts/PROTOCOL.md +2 -10
- package/templates/gitignore.template +0 -3
- package/templates/pm/adr/README.md +1 -1
- package/templates/pm/decisions.md +4 -5
- package/templates/standards/CODE.md +1 -1
- package/templates/standards/DESIGN.md +1 -1
- package/templates/standards/REVIEW.md +2 -2
- package/templates/standards/STACK.md +2 -8
- package/templates/v2/AGENTS.md +18 -18
- package/templates/v2/BUILDBEAT.md +2 -3
- package/templates/v2/CLAUDE.md +1 -1
- package/templates/v2/run-config.example.yaml +1 -1
- package/templates/v2//346/214/207/346/214/245/345/217/260.md +6 -6
- package/bin/buildbeat-v2.js +0 -18
- package/bin/solobaton.js +0 -6
- package/docs/CHECKS.md +0 -326
- package/docs/CLI.md +0 -245
- package/docs/LEGACY-V1.16-MIGRATION.md +0 -54
- package/docs/v2/guide/08-migration-v1.md +0 -72
- package/example/.buildbeat/manifest.json +0 -45
- package/example/ARCHITECTURE.md +0 -39
- package/example/contracts/PROTOCOL.md +0 -38
- package/example/pm/NOW.md +0 -22
- package/example/pm/adr/ADR-0001-local-first-sqlite.md +0 -25
- package/example/pm/adr/README.md +0 -7
- package/example/pm/archive//344/270/200/346/234/237/evidence/gate1.md +0 -5
- package/example/pm/archive//344/270/200/346/234/237/evidence/gate2.md +0 -5
- package/example/pm/archive//344/270/200/346/234/237/evidence/gate3.md +0 -5
- package/example/pm/archive//344/270/200/346/234/237/evidence/gate4.md +0 -5
- package/example/pm/archive//344/270/200/346/234/237/evidence/implementation.md +0 -5
- package/example/pm/status//344/272/247/345/223/201.md +0 -20
- package/example/pm/status//345/205/250/346/240/210.md +0 -15
- package/example/pm/status//346/265/213/350/257/225.md +0 -15
- package/example/pm//344/270/200/346/234/237-/347/234/213/346/235/277.md +0 -97
- package/example/standards/CODE.md +0 -18
- package/example/standards/DESIGN.md +0 -34
- package/example/standards/REVIEW.md +0 -16
- package/example/standards/STACK.md +0 -31
- package/src/cli.js +0 -323
- package/src/constants.js +0 -202
- package/src/doctor.js +0 -267
- package/src/planner.js +0 -251
- package/src/project.js +0 -844
- package/src/upgrader.js +0 -1249
- package/src/v2/presets/risk/legacy-four-gates.yaml +0 -44
- package/src/writer.js +0 -534
- package/templates/.claude/agents/reviewer.md +0 -62
- package/templates/AGENTS.md +0 -85
- package/templates/BUILDBEAT.md +0 -13
- package/templates/CLAUDE.md +0 -7
- package/templates/pm/NOW.md +0 -26
- package/templates/pm/changes/README.md +0 -44
- package/templates/pm/status/README.md +0 -32
- package/templates/pm//345/275/223/346/234/237/347/234/213/346/235/277.md +0 -62
- package/templates/scripts/bus-check.sh +0 -1875
- package/templates/scripts/design-preview.sh +0 -44
- package/templates/scripts/drift-check.sh +0 -112
- package/templates/scripts/pre-commit.sh +0 -74
- package/templates/scripts/verify-status.sh +0 -105
- package/templates//346/214/207/346/214/245/345/217/260.md +0 -58
package/templates/AGENTS.md
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
# AGENTS.md — <项目名> 工作区 · 工作包路由 + 协作总线
|
|
2
|
-
|
|
3
|
-
> 本文件走开放标准 `AGENTS.md`,被工作区下**任意会话**自动装载(Claude Code / Cursor / Codex / Gemini CLI / Aider / Zed 等均认)。目的:每个会话开工即知道「当前工作包 / AI 视角 / 读哪 / 写哪」,不靠人转述上下文。
|
|
4
|
-
> **层叠规则**(标准语义):会话从被编辑文件所在目录向上收集沿途所有 `AGENTS.md` 合并,**离得越近优先级越高**。所以本文件只写全局的(路由 / 总线规则 / 红线),各代码子仓的局部细节写进**该仓自己的 `AGENTS.md`**,别往上堆。
|
|
5
|
-
> 全栈总图(架构/基础设施/凭据位置)见 `./ARCHITECTURE.md`,按需读、别全文灌(重)。
|
|
6
|
-
> 根目录的 `CLAUDE.md` 只是一行指针(兼容只认该文件名的工具),**内容单点在本文件**,别往那份里复制任何规则。
|
|
7
|
-
|
|
8
|
-
## 1. 工作包路由 —— Builder 端到端负责,会话按 AI 视角隔离
|
|
9
|
-
|
|
10
|
-
> 协作单元是需求/功能工作包。一个 Builder 对工作包的产品判断、实现、测试、合并和发布证据端到端负责;下表只是可调用的 AI 专业视角与文件写边界,不是人类岗位或审批链。多个 Builder 默认认领不同工作包,共享事实仍走 Git 文件总线。
|
|
11
|
-
|
|
12
|
-
| AI 视角 | cwd | 可写(拥有) | 只读 | 开工先读 | 状态写回 |
|
|
13
|
-
|---|---|---|---|---|---|
|
|
14
|
-
| **产品**(规格/编排) | `pm/` | `pm/**` | 全仓 | `pm/NOW.md` | 当期看板 + `pm/status/产品.md` |
|
|
15
|
-
| **全栈**(实现,含运维) | 工作区根(同持 <N> 个代码仓) | `<代码仓1>/**` + `<代码仓2>/**`(**按仓分别 stage,不 `git add -A`**) | `pm/*` 当期文件、契约 | 各代码仓自己的 `AGENTS.md` + `pm/NOW.md` | `pm/status/全栈.md`(带 hash)+ 各仓 `CHANGELOG.md` + `contracts/PROTOCOL.md` |
|
|
16
|
-
| **测试**(E2E·走查) | `<被测仓>/` | `tests/**` · 视觉基线 · 走查报告 | 实现 + spec + 设计稿 + 契约 | `pm/NOW.md` + `tests/README.md` | `pm/status/测试.md` + 核查门证据(E2E 报告/视觉 diff/对比图,**落 `pm/archive/<期>/evidence/`,换期零搬运**) |
|
|
17
|
-
|
|
18
|
-
> **设计生成 = 外部工具**(非会话):产品视角写 brief(必须要求**单 HTML 可渲染入口 + 关键流可点**)→ 人喂设计工具 → 稿落 `design/design_N期/` → 测试视角走查 + 提带图 bug。
|
|
19
|
-
> 🔴 **同一 Builder 合并多视角的补偿控制**:里程碑候选必须由 reviewer subagent(只读,见 `.claude/agents/reviewer.md`)全核 + 测试视角独立核两端;实现中出现冻结契约/鉴权/租户/Secret/fail-closed/持久化或不可逆副作用变化时做 `risk-delta` 定向核。写者≠审者不变,但不按每个草稿或小任务重复全审。
|
|
20
|
-
> **开工/收工护栏**:任意会话开工**先跑 `bash scripts/bus-check.sh`** + 各仓 `git pull`;收工前回写证据/状态后再跑 `bus-check --strict`,并保留 warning/unverified 边界。
|
|
21
|
-
|
|
22
|
-
## 1.5 UI 规范摘要(非 UI 项目可删)
|
|
23
|
-
|
|
24
|
-
> 项目若启用可选规范,完整设计原则、token、组件、交互、状态与可访问性单点见 `standards/DESIGN.md`;本文件只保留开工必读摘要,不复制正文。该文件缺失不报错。
|
|
25
|
-
|
|
26
|
-
- 延用既定设计语言与 token;每个可见流程处理 loading / empty / error / disabled / 适用的移动端状态,关键操作提供明确且可访问的反馈。
|
|
27
|
-
- 上线界面零调试信息、实现说明、mock 标记或开发者元注释;Gate2 与终签都以真渲染可点结果走查,静态稿或规范数值不能替代。
|
|
28
|
-
|
|
29
|
-
## 2. 协作总线十条规则
|
|
30
|
-
|
|
31
|
-
**① 唯一看板指针** —— 入口永远是 `pm/NOW.md`,它指向当期看板;**换期只改 NOW 一处,看板文件名不得写死进本文件或其它文档**。
|
|
32
|
-
**② 契约落盘不喊话** —— 跨边界接口先改 `contracts/PROTOCOL.md` 再动代码;收到协议声明**独立核查再信**(实测/读代码/查部署配置),不照单全收。
|
|
33
|
-
**③ 交接靠 commit + 落盘** —— 工作包完成或到真实阻塞点 → 状态行带**交付候选/报告** commit hash,下游读 repo 即知进度;hash 不是 status 行自身 commit(禁止自引用)。原子 commit 可以多次,但不为每个 commit 单独收尾和打断人;尚无新候选就写已核基线 hash +「无新候选」,不得编 hash。
|
|
34
|
-
**④ 开工 + 收工护栏** —— 开工先 `bash scripts/bus-check.sh` + 各仓 `git pull`;**部署/改契约/migration 等不可逆动作前再跑一次**。收工前跑受影响测试,回写 contracts/decisions/看板/status/证据,再跑 `bus-check --strict`;它的 exit 0 不消除 warning/unverified。pre-commit 挂同一 strict 机器闸(见 `scripts/pre-commit.sh`)。
|
|
35
|
-
**⑤ 三轨制** —— 快轨(小改:直接改+核查门)/ 标准轨(单功能全流程)/ 重轨(契约变更/大改:+`pm/changes/` 提案+多 agent 评审);NOW 标本期轨道。工作包默认取一条可独立验收的纵向结果或下一个 Gate/里程碑候选,不按文件、commit 或验收条目拆会话。
|
|
36
|
-
**⑥ 核查门(review-ready + 一次候选核查)** —— 轻量机器闸每次提交都跑,受影响自动化测试按变更批次跑。**首次 milestone reviewer 只能在 review-ready 后启动**:工作包内实现与写者自查已完成;所有候选仓 `HEAD=candidate` 且工作树干净;受影响/全量 L3 与真渲染证据已绿;没有已知待修项或计划中的 candidate 修改。此前发现的鉴权/租户/Secret/fail-closed/持久化等实现问题统一记入实现语义清单并先自行收敛,**不得边改 candidate 边开 reviewer**;只有要修改已冻结对外契约或产生不可逆外部副作用才 `STOP_NOW`,批准后按一个风险批次做 `risk-delta`。默认每个工作包、每道 Gate 只启动 **1 次 milestone**;P0/P1 全部修完后再做 **1 次合并 closure**,P2 不复核。reviewer 返回前 candidate 若变化,原审查立即标 `SUPERSEDED`,不得把写者自发现的连续修补包装成 delta 链;重新满足 review-ready 后才启动替代 milestone。已完成 milestone 后出现新的高风险语义变化才核 `risk-delta`;同一 candidate 且机器证据仍绿直接复用。首轮报告保留原文,closure 只追加表。**完成 = hash + 可核验证据**;标准轨最低 L3,重轨与上线必须 L4,L1 只作补充定位。
|
|
37
|
-
**⑦ 变更提案 + 状态分写** —— 跨工作包/共享边界变更走 `pm/changes/` delta 提案;**各 AI 视角只写自己的 `pm/status/{视角}.md`**,别人只读。状态按工作包/里程碑批量更新,不为每个子产物另起一次交接。
|
|
38
|
-
**⑧ 视觉问题带图对比** —— 提 UI bug / 判设计符合性必附『实现截图 ⟷ 设计稿截图』并排 + 标注差异点;纯文字不算证据。
|
|
39
|
-
**⑨ 单点事实** —— 线上版本只信 `bus-check` 实查(任何文档不写"当前线上 vX",契约快照版本仅 `PROTOCOL.md` 头部);多仓项目的 repo/契约/本地部署基线 app 关系只写在 `PROTOCOL.md` 的 `buildbeat-multirepo-map:v1`,不从自然语言猜;每个收敛后的**真实决策包**只在 `pm/decisions.md` 记一行并回写落点,验收条目/推导结论/部分对话进度不单独记拍板;换期必跑压缩仪式(NOW 底部 checklist),**NOW 永远是薄指针、禁堆流水**。
|
|
40
|
-
**⑩ Gate2 真渲染拍板** —— 设计拍板对象必须是真渲染可点原型(`bash scripts/design-preview.sh <期号>`);静态稿/截图只作参考。终签同样含真渲染走查。
|
|
41
|
-
|
|
42
|
-
> **元原则:能实查的不问人** —— 查代码 / 配置 / 部署平台能得到的事实,不拿去问用户、不信文档、不信上游转述(规则⑨与②的推广)。
|
|
43
|
-
|
|
44
|
-
## 2.5 任务包与人批节奏
|
|
45
|
-
|
|
46
|
-
**任务包信封** —— 多步骤工作开工时,从用户目标与当期看板明确 `objective / in_scope / terminal_condition`。需求 ID、验收项、文档和原子 commit 可以细分,但只是追踪单位;默认一个工作包覆盖多个子项。一个工作包可由多个域按写边界接力,多个独立目标也可并行,但每个会话同时只认领一个工作包。只要仍有安全、可逆、在 `in_scope` 内且能推进 `objective` 的工作,会话就继续做。单个文档提交、reviewer 返回、status 回写或普通 P2 只报中间进展,**不得因此结束任务等用户说“继续”**。只在以下三种情况结束:目标带证据完成;遇到必须由人处理的真实阻塞;用户明确只要阶段性检查点。
|
|
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
|
-
|
|
69
|
-
**审批三级**:
|
|
70
|
-
|
|
71
|
-
1. **STOP_NOW 立即停**:跨 Gate;扩大已批准范围或重开 non-goal;修改已冻结对外契约;部署/发布/花费/删除等不可逆外部动作;接受安全/合规风险;权威事实冲突且无法实查。停在动作前,一次给推荐方案、影响和最小问题。
|
|
72
|
-
2. **BATCH_AT_GATE 门前批**:冻结前可逆草案选择,或批准目标内的默认值/阈值/失败态归类/实现语义。先写进当期看板「决策收件箱」,继续不依赖它的工作;到 Gate 或约定节奏一次提交**默认 2–5 个真实取舍**(确实只有 1 个就单项),每项带推荐值和后果。若阻塞关键路径,也要合并成一次提问,不得逐条连环问。
|
|
73
|
-
3. **NO_APPROVAL 无需批**:能实查的事实、已批准信封内的派生约束、文案/归档/status/证据整理、普通 P2、不改变外部语义的可逆实现细节。自主完成并说明,不把告知包装成审批。
|
|
74
|
-
|
|
75
|
-
**人批预算** —— 默认每个工作包、每道 Gate 只有 1 个 `BATCH_AT_GATE` 请求;`STOP_NOW` 是越界例外。用户只回答一部分或要求解释时,保持同一决策包编号,补充说明并更新收件箱,不得包装成一轮新审批。只有当未决项真实阻塞关键路径时才回到同一包追问;否则继续范围内工作。
|
|
76
|
-
|
|
77
|
-
**决策包口径** —— 验收清单先拆成「人必须取舍的独立决策变量」和「由已选变量/现有契约推导的约束」;只把前者送人批。用户分轮回答时,未收敛项留在看板决策收件箱;收敛后按决策包在 `pm/decisions.md` 记一次,不得为 `3/14 → 11/14 → 14/14` 之类部分进度制造三条永久拍板。
|
|
78
|
-
|
|
79
|
-
## 3. 红线(每个会话受约束)
|
|
80
|
-
|
|
81
|
-
1. **凭据不入 git、不出本机**:文档只标位置不写值;本地 .env 必须 gitignore + 600 权限;机器闸 = gitleaks pre-commit 默认装(`scripts/pre-commit.sh`),报警即拦。
|
|
82
|
-
2. **不 `git add -A`**:只 stage 自己域的具体文件;同持多仓按仓分别提交。
|
|
83
|
-
3. **不未授权部署**、不 force-push、不 `--amend`、不 `--no-verify`。
|
|
84
|
-
4. **每次部署完必更对应仓 `CHANGELOG.md`**;长连接服务部署带优雅下线(<PreStop/drain 机制>)。
|
|
85
|
-
5. **写者≠审者**:review-ready 的里程碑候选必过独立 reviewer;写者自发现问题先收敛,不把未稳定候选反复送审。同一 candidate 复用结论,P0/P1 默认合并修复后只做一次 closure。
|
package/templates/BUILDBEAT.md
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# BUILDBEAT.md — 本项目的协作骨架版本标记
|
|
2
|
-
|
|
3
|
-
**本项目使用 BuildBeat `v<X.Y>`**(<yyyy-mm-dd> 拷入)
|
|
4
|
-
**协调层布局:`<默认|紧凑>`**(默认 = 脚本在 `scripts/`;紧凑 = 在 `pm/scripts/`,见上游 SKILL §3)
|
|
5
|
-
来源:<https://github.com/HaiYangBG1/BuildBeat>
|
|
6
|
-
|
|
7
|
-
## 升级
|
|
8
|
-
|
|
9
|
-
对照上游 [CHANGELOG.md](https://github.com/HaiYangBG1/BuildBeat/blob/main/CHANGELOG.md),从本文件记录的版本**往后**逐版看「拷出项目升级」标注的文件,同步后更新上面的版本行。拿不准就让 AI 会话对比上游 `templates/` 与本项目对应文件的差异。
|
|
10
|
-
|
|
11
|
-
## 回灌(比升级更重要)
|
|
12
|
-
|
|
13
|
-
本项目踩到 BuildBeat **没覆盖的新坑**(新反模式/机制漏洞)→ 回上游 `lessons.md` 登记一条(症状→根因→解药),提 issue/PR 或直接改上游仓。换期压缩仪式的 checklist 里有"回灌一问",别跳过——没有回灌,N 个项目的坑不会变成组织资产,只会各踩各的。
|
package/templates/CLAUDE.md
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# CLAUDE.md — 指针(🔴 勿在此处写内容)
|
|
2
|
-
|
|
3
|
-
本工作区的会话路由、协作总线十条规则、红线,**单点在同目录的 [`AGENTS.md`](AGENTS.md)** —— 请立即读取那份。
|
|
4
|
-
|
|
5
|
-
> 本文件只为兼容「只认 `CLAUDE.md` 这个文件名的工具」而存在,**永远保持这几行**。
|
|
6
|
-
> 往这里复制任何规则 = 两份文档必然漂移(上游 `lessons.md` 第 1 条:SSOT 腐烂)。
|
|
7
|
-
> 也不要改成符号链接:Windows 上 git 默认 `core.symlinks=false`,clone 出来会静默退化成一个内容是路径字符串的普通文件,装载即失效。
|
package/templates/pm/NOW.md
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# NOW — 当前冲刺指针(各工作包/AI 视角会话开工先读这里)
|
|
2
|
-
|
|
3
|
-
> 本文件**永远只是薄指针**:当前期是什么 + 看哪些文件。🔴 **禁止在这里堆流水日志**(那是 `status/<域>.md` 的事;NOW 长肥 = SSOT 腐烂的开端)。
|
|
4
|
-
> 🔴 **线上版本不写在任何文档里**(规则⑨):查 `bash scripts/bus-check.sh`;契约快照对应版本只看 `contracts/PROTOCOL.md` 头部。
|
|
5
|
-
|
|
6
|
-
**当前期:<期名>**(<一句话状态>)
|
|
7
|
-
**本期轨道:<快轨|标准轨|重轨>**
|
|
8
|
-
|
|
9
|
-
| 看哪 | 文件 |
|
|
10
|
-
|---|---|
|
|
11
|
-
| 🧭 当期看板 | `<期>-看板.md` |
|
|
12
|
-
| 🗳 拍板台账(决策单点) | `decisions.md` |
|
|
13
|
-
| 🔌 契约 | `contracts/PROTOCOL.md` |
|
|
14
|
-
| 📊 各 AI 视角状态(各写各的) | `status/产品.md` · `status/全栈.md` · `status/测试.md` |
|
|
15
|
-
| 🔁 在途变更提案 | `changes/`(在途几个跑 bus-check 看,别在这里记) |
|
|
16
|
-
| 📦 历史期归档 | `archive/` |
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
### 换期 checklist(当前工作包 Builder / 产品视角)—— 含压缩仪式
|
|
21
|
-
1. **压缩仪式**:① 当期 看板/需求/todo/验收清单 `git mv` 进 `archive/<期>/`(归档文件超 40 个会触发 pre-commit 闸④,这一单用 `BUS_ALLOW_BULK=1 git commit` 提交);② `status/*.md` 全文 `cp` 进 `archive/<期>/status-<域>-<期>全程.md`,live 文件截断只留「当前基线 + 最近 1 条 + 归档指针」;③ NOW 流水清零(只留指针区);④ 核对本期证据产物已在 `archive/<期>/evidence/`(走查图/E2E 报告生成时就该写进去,换期零搬运),工作区根与 pm/ 无散落临时文件。
|
|
22
|
-
2. 新建下一期 `<期>-看板.md`(+需求/todo),回来把上表指针换掉、更新「当前期」「本期轨道」两行。
|
|
23
|
-
3. `decisions.md` 追加一行「换期」;新看板开第一个阶段门。
|
|
24
|
-
4. **回灌一问**:本期踩到 BuildBeat 没覆盖的新坑了吗?有 → 回上游 lessons.md 登记(见根 `BUILDBEAT.md`)。
|
|
25
|
-
|
|
26
|
-
> 全工作区换期 = 只动本文件的指针区。看板文件名**不得**写死进 `AGENTS.md` 等别处。
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# pm/changes/ —— 变更提案(治跨域 race + drift)
|
|
2
|
-
|
|
3
|
-
> 跨域变更(尤其动**契约/需求/多域**的)**不要直接抢改看板/契约文件** —— 先在这写一个独立 change。冻结前允许在已批准目标内持续收敛草案和补证;一次冻结决策后先把批准的 delta 合并进 canonical,再让新语义进入共享实现。
|
|
4
|
-
|
|
5
|
-
## 何时用
|
|
6
|
-
- **重轨**改动:跨期 / 契约变更 / 多域大改。小改快轨、单需求标准轨,都不用建 change。
|
|
7
|
-
|
|
8
|
-
## 流程
|
|
9
|
-
1. **开草案** → 新建 `pm/changes/<yyyymmdd>-<短名>.md`(用下方模板),标 `草案收敛`。建草案本身不等于申请人批。
|
|
10
|
-
2. **收敛** → 在已批准 objective/in_scope 内自查、补证、做可抛弃原型;把需要人取舍的独立决策变量汇入当期看板「决策收件箱」(默认 2–5 个一包,确实只有 1 个就单项)。验收条目和推导约束不逐项问。
|
|
11
|
-
3. **冻结** → 到 Gate 或关键路径确实被阻塞时,一次提交决策包:批 / 改 / 否。收敛后在 `../decisions.md` 记一行,先把批准的 Delta 合并进 canonical(`contracts/PROTOCOL.md` / 需求文档),再把 change 标 `已冻结`。冻结前草案不得被冒充 canonical,也不得让未批语义进入共享实现。
|
|
12
|
-
4. **实现** → 各域按已冻结 change 的"分工"动手,轻量机器闸每次提交、受影响测试按变更批次;只把实现期新增的失败态、不可达状态、默认值/阈值、fail-closed 方向记进同一份「实现语义清单」,不为每个小任务新建完整审查报告。
|
|
13
|
-
5. **候选** → 先完成实现/写者自查,把自行发现的鉴权/租户/Secret/fail-closed/持久化问题合并收敛进同一候选。只有要修改**已冻结对外契约**或产生不可逆副作用才 STOP_NOW,获批后按一个风险批次做 `risk-delta`;不得边改 candidate 边开 reviewer。
|
|
14
|
-
6. **review-ready + 核查 + 归档** → 所有候选仓 `HEAD=candidate` 且干净、受影响/全量 L3 与真渲染证据绿、无已知待修后,对里程碑候选做一次完整核查;P0/P1 合并修完后做一次 closure。产品域确认 canonical 与已冻结、已实现语义一致后归档。reviewer 返回前 hash 变化则旧审查 `SUPERSEDED`,重新收敛后再核;同一 candidate 合并前复用结论。
|
|
15
|
-
|
|
16
|
-
## 模板(复制改)
|
|
17
|
-
```md
|
|
18
|
-
# CHANGE: <短名>
|
|
19
|
-
- 状态:草案收敛 / 待冻结 / 已冻结 / 实现中 / 已归档
|
|
20
|
-
- 发起:<域> | 日期:<yyyy-mm-dd> | 轨道:重 / 标准
|
|
21
|
-
- 工作包:<当期看板 objective 或锚点>
|
|
22
|
-
- 冻结基线:<未冻结 / decisions.md 日期+决策包>
|
|
23
|
-
## 动机(为什么)
|
|
24
|
-
## Delta(改什么 —— 逐条标 ADDED / MODIFIED / REMOVED)
|
|
25
|
-
- [MODIFIED] PROTOCOL.md §X:<旧 → 新>
|
|
26
|
-
## 决策变量(只列人必须取舍的变量;推导约束不列)
|
|
27
|
-
| ID | 取舍 | 推荐值 + 理由 | 另一选择的后果 | 状态 |
|
|
28
|
-
|---|---|---|---|---|
|
|
29
|
-
| D1 | | | | 待收件箱 / 已收敛 |
|
|
30
|
-
## 保护项(这次改动不许伤到的既有能力,逐条列)
|
|
31
|
-
## 分工(谁做)
|
|
32
|
-
| 域 | 做什么 | commit |
|
|
33
|
-
|---|---|---|
|
|
34
|
-
## 实现语义清单(只记实现期新产生的自由度;没有就写「无」)
|
|
35
|
-
| 类别 | 决定/发现 | 契约覆盖 | 处置 |
|
|
36
|
-
|---|---|---|---|
|
|
37
|
-
| 新失败态 / 不可达状态 / 默认值或阈值 / fail-closed 方向 | | 已覆盖 / 需回流 / 改实现 | |
|
|
38
|
-
## 里程碑候选
|
|
39
|
-
- base:<hash 或多仓 hash 集>
|
|
40
|
-
- candidate:<hash 或多仓 hash 集>
|
|
41
|
-
- 机器证据:<测试 / gitleaks / bus-check / L3-L4 指针>
|
|
42
|
-
## 验收点(怎么验 —— 核查门逐条核,必带可核验证据)
|
|
43
|
-
- [ ] <证据:测试命令 / 文件:行 / 线上实测 / 截图>
|
|
44
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# pm/status/ —— 各 AI 视角状态文件(治看板 race)
|
|
2
|
-
|
|
3
|
-
> 一个 Builder 端到端拥有当前工作包;产品/全栈/测试只是可选 AI 视角。**每个视角只写自己的 `pm/status/{视角}.md`**(带 commit hash),别人只读 —— 物理上消除"同文件互踩"。NOW/看板做聚合视图,这里不记录成员或岗位。
|
|
4
|
-
|
|
5
|
-
## 约定
|
|
6
|
-
- 写法:**倒序**,每条带 commit hash / 版本 / 状态(✅完成 / 🔄进行 / ⏸阻塞)。
|
|
7
|
-
- 🔒 **hash 必须写在反引号里**(`` `hash` `` 或 `` `仓名 hash` ``):bus-check 的幽灵 hash 核验**只认反引号内的 token**——约定即解析规则,裸写的 hash 不被核验。
|
|
8
|
-
- hash 指向**工作包交付候选/测试或评审报告**的 commit,不是 status 行自身 commit(那会形成不可能的自引用并诱发无穷 status 提交)。同仓交付先提交候选,再集中写一次 status;阻塞且无新候选时写已核基线 hash +「无新候选」,不得臆造。
|
|
9
|
-
- **条目克制**:下游只需要「做了什么 + hash + 证据指针」,长篇分析放报告文件、此处放链接。
|
|
10
|
-
- **按工作包更新**:原子 commit 可保持细粒度,但 status 只在工作包完成、里程碑候选形成或真实阻塞时更新一次;不得为每个子任务/文档/commit 追加一条并把它当成向用户交接。
|
|
11
|
-
- reviewer 结论只写 `mode + candidate hash 集 + P0/P1 是否清零 + 报告/closure 表指针`;不得把问题原文和逐轮整改全文复制进 status。
|
|
12
|
-
- 跨域要对齐的(契约/依赖)→ 走 `../changes/` 变更提案;决策包收敛 → 先落 `../decisions.md`(规则⑨)。
|
|
13
|
-
- 🗜 **压缩仪式(换期时当前工作包 Builder / 产品视角执行)**:当期条目全文 `cp` 进 `../archive/<期>/status-{视角}-<期>全程.md`,live 文件截断只留「当前基线 + 最近 1 条 + 归档指针」。
|
|
14
|
-
|
|
15
|
-
## 收工核对
|
|
16
|
-
|
|
17
|
-
1. 工作包真正到达 terminal condition,受影响测试/必要的 L3、L4 证据已落盘。
|
|
18
|
-
2. candidate/report hash 已回读可解析;完成工作包的看板块含唯一 `**证据**:` 行。
|
|
19
|
-
3. contracts / decisions / 当期看板 / 本视角 status 与候选一致,无流水式重复记录。
|
|
20
|
-
4. 跑 `bash scripts/bus-check.sh --strict`;非阻断 warning/unverified 也写入收尾边界,不外推为全局已验证。
|
|
21
|
-
|
|
22
|
-
## 模板(每个域文件)
|
|
23
|
-
```md
|
|
24
|
-
# 状态 · <域>
|
|
25
|
-
> 只此域写,别人只读。倒序。
|
|
26
|
-
|
|
27
|
-
## 当前基线
|
|
28
|
-
- <长期成立的事实;会腐的事实(版本等)放"怎么查"的指针>
|
|
29
|
-
|
|
30
|
-
## 倒序日志
|
|
31
|
-
- **<yyyy-mm-dd>** 工作包:<objective 的结果> · candidate/report `<hash 或 hash 集>`(无新候选则写 base `<hash>`) · 证据:<命令/文件:行/截图路径> · ✅/🔄/⏸
|
|
32
|
-
```
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# <期名> · 协调看板
|
|
2
|
-
|
|
3
|
-
> 谁做什么、什么顺序、卡点在哪。工作包完成口径 = **用户级结果 + commit hash + 可核验证据**(核查门);子任务完成不等于会话结束。
|
|
4
|
-
> 线上实况:`bash scripts/bus-check.sh`。拍板记 `decisions.md`。
|
|
5
|
-
|
|
6
|
-
## 当前工作包(每个会话同时只认领一个;不同目标可有少量并行包)
|
|
7
|
-
|
|
8
|
-
> 每个需求/功能工作包由一个 Builder 端到端负责;下方产品/全栈/测试只表示该工作包调用的 AI 专业视角,不是人类岗位交接或人员分配。
|
|
9
|
-
|
|
10
|
-
### WP-1 · <工作包名>
|
|
11
|
-
|
|
12
|
-
- **objective**:<这轮最终要交付什么结果,不用文件名代替>
|
|
13
|
-
- **AI视角**:<产品 / 全栈 / 测试;按需调用,各自仍只写自己的边界>
|
|
14
|
-
- **in_scope**:<为达成结果可自动继续的关联任务/AI视角/文件边界>
|
|
15
|
-
- **terminal_condition**:<带证据完成 / 必须由人处理的真实阻塞 / 用户明确的检查点>
|
|
16
|
-
- **状态**:🔄进行 / ⏸阻塞 / ✅完成
|
|
17
|
-
- **证据**:<完成时填一条可核验的仓库相对路径 / candidate hash;未完成留空>
|
|
18
|
-
|
|
19
|
-
> 同一工作包可由多个域接力;复制本小节即可增加并行包,但不要按文件造包。原子 commit 可以细;单个文档提交、reviewer 返回、status 回写、普通 P2 只是包内事件。只要还有安全、可逆、在 `in_scope` 内的工作,会话继续推进,不结束等用户说“继续”。
|
|
20
|
-
|
|
21
|
-
## 决策收件箱(只收 BATCH_AT_GATE;默认一次提交 2–5 个真实取舍,确实只有 1 个就单项)
|
|
22
|
-
|
|
23
|
-
| 包ID | 变量ID | 真实取舍 | 推荐值 + 理由 | 另一选择的后果 | 截止 Gate | 状态 |
|
|
24
|
-
|---|---|---|---|---|---|---|
|
|
25
|
-
| DP-<Gate>-01 | D1 | | | | Gate1 / Gate2 / Gate3 | 待批 / 已收敛 |
|
|
26
|
-
|
|
27
|
-
> 能实查的事实、已批准范围内的推导结论和普通实现细节不进收件箱;STOP_NOW 事项立即停在动作前问,不可混在批量队列里。用户分轮回答/要求解释时沿用同一包ID、只更新本表;整个决策包收敛后再在 `decisions.md` 记一行。
|
|
28
|
-
|
|
29
|
-
## 阶段门
|
|
30
|
-
|
|
31
|
-
- Gate1: pending
|
|
32
|
-
- Gate2: pending
|
|
33
|
-
- Gate3: pending
|
|
34
|
-
- Gate4: pending
|
|
35
|
-
|
|
36
|
-
> 上述四行是机器权威令牌:`n/a` 必须同行带 `理由:`;`passed` 应同行带 `决策: pm/decisions.md:<行号>` 或 `证据:` 可追溯引用。决策须精确到已存在的日期表格行,本地证据统一归档到 `pm/archive/<期>/evidence/`。下表仅作给人的展示与进度摘要。
|
|
37
|
-
|
|
38
|
-
| 阶段 | 产出 | 负责 | 状态 |
|
|
39
|
-
|---|---|---|---|
|
|
40
|
-
| ① 需求(⛔Gate1 人批) | 需求与决策 | 产品 | ☐ |
|
|
41
|
-
| ② 设计(⛔Gate2 人对**真渲染原型**批,规则⑩) | `design/design_<N>期/`(含可渲染 HTML) | 外部设计工具 | ☐ |
|
|
42
|
-
| ③ 实现 | 代码 + 契约 + 实现语义清单;机器闸每提交 | 全栈 | ☐ |
|
|
43
|
-
| ④ 验证 + 核查门 | review-ready(`HEAD=candidate` + 干净 + L3/渲染绿 + 无待修) + milestone **一次** + P0/P1 合并 closure | 测试 + 产品 | ☐ |
|
|
44
|
-
| ⑤ 上线(⛔Gate3 合并 / ⛔Gate4 上线,人批) | 部署 + CHANGELOG | 全栈 | ☐ |
|
|
45
|
-
|
|
46
|
-
## 能力视角表(需求 → 调用哪些 AI 视角)
|
|
47
|
-
| 需求 | 全栈 | 测试 | 备注 |
|
|
48
|
-
|---|---|---|---|
|
|
49
|
-
| <需求1> | ★ | E2E+走查 | |
|
|
50
|
-
|
|
51
|
-
## 🔴 关键对齐点(开工先定,别各做各的)
|
|
52
|
-
1. <跨边界接口/字段/机制 约定;契约口径落 `contracts/PROTOCOL.md`>
|
|
53
|
-
|
|
54
|
-
## 挂账(实时;工作包认领后各 AI 视角写回自己的 status,此处只改 ☐/✅)
|
|
55
|
-
| # | 项 | 域 | 状态 | 依据/出处 |
|
|
56
|
-
|---|---|---|---|---|
|
|
57
|
-
| 1 | | | ☐ | |
|
|
58
|
-
|
|
59
|
-
## 验收口径
|
|
60
|
-
<对照需求清单 + 设计稿逐屏;上线前必过的清单>
|
|
61
|
-
|
|
62
|
-
> 核查节奏:首次 milestone 前写者先收敛,文件数/草稿/归档/status/P2 不触发 reviewer;每工作包每 Gate 默认一次 milestone,P0/P1 合并修完后一次 closure。同一 candidate 合并前复用结论;reviewer 返回前 hash 变化则旧审查 `SUPERSEDED`,不得边改边 delta。
|