@haiyangbg/buildbeat 2.0.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/CHANGELOG.md +18 -301
  2. package/README.en.md +6 -19
  3. package/README.md +6 -19
  4. package/SKILL.md +168 -219
  5. package/bin/buildbeat.js +14 -2
  6. package/docs/CAPABILITY-MATRIX.md +13 -55
  7. package/docs/README.md +12 -14
  8. package/docs/RELEASING.md +8 -9
  9. package/docs/v2/RFC-0001-product-definition.md +2 -0
  10. package/docs/v2/RFC-0003-workflow-policy.md +2 -0
  11. package/docs/v2/guide/00-how-to-talk.md +3 -3
  12. package/docs/v2/guide/01-quickstart.md +12 -12
  13. package/docs/v2/guide/03-policy-guide.md +1 -1
  14. package/docs/v2/guide/06-evidence-guide.md +3 -3
  15. package/docs/v2/guide/07-approval-guide.md +10 -10
  16. package/docs/v2/guide/10-recovery.md +6 -6
  17. package/docs/v2/guide/11-session-handoff.en.md +2 -2
  18. package/docs/v2/guide/11-session-handoff.md +2 -2
  19. package/docs/v2/guide/README.md +0 -6
  20. package/lessons.md +52 -71
  21. package/package.json +3 -8
  22. package/src/v2/cli/run.js +33 -23
  23. package/src/v2/engine/risk-preset.js +1 -1
  24. package/src/v2/runtime/notify.js +5 -5
  25. package/src/v2/runtime/overview.js +7 -7
  26. package/templates/ARCHITECTURE.md +1 -1
  27. package/templates/contracts/PROTOCOL.md +2 -10
  28. package/templates/gitignore.template +0 -3
  29. package/templates/pm/adr/README.md +1 -1
  30. package/templates/pm/decisions.md +4 -5
  31. package/templates/standards/CODE.md +1 -1
  32. package/templates/standards/DESIGN.md +1 -1
  33. package/templates/standards/REVIEW.md +2 -2
  34. package/templates/standards/STACK.md +2 -8
  35. package/templates/v2/AGENTS.md +18 -18
  36. package/templates/v2/BUILDBEAT.md +2 -3
  37. package/templates/v2/CLAUDE.md +1 -1
  38. package/templates/v2/run-config.example.yaml +1 -1
  39. package/templates/v2//346/214/207/346/214/245/345/217/260.md +6 -6
  40. package/bin/buildbeat-v2.js +0 -18
  41. package/bin/solobaton.js +0 -6
  42. package/docs/CHECKS.md +0 -326
  43. package/docs/CLI.md +0 -245
  44. package/docs/LEGACY-V1.16-MIGRATION.md +0 -54
  45. package/docs/v2/guide/08-migration-v1.md +0 -72
  46. package/example/.buildbeat/manifest.json +0 -45
  47. package/example/AGENTS.md +0 -19
  48. package/example/ARCHITECTURE.md +0 -39
  49. package/example/BUILDBEAT.md +0 -17
  50. package/example/CLAUDE.md +0 -7
  51. package/example/README.md +0 -75
  52. package/example/contracts/PROTOCOL.md +0 -38
  53. package/example/pm/NOW.md +0 -22
  54. package/example/pm/adr/ADR-0001-local-first-sqlite.md +0 -25
  55. package/example/pm/adr/README.md +0 -7
  56. package/example/pm/archive//344/270/200/346/234/237/evidence/gate1.md +0 -5
  57. package/example/pm/archive//344/270/200/346/234/237/evidence/gate2.md +0 -5
  58. package/example/pm/archive//344/270/200/346/234/237/evidence/gate3.md +0 -5
  59. package/example/pm/archive//344/270/200/346/234/237/evidence/gate4.md +0 -5
  60. package/example/pm/archive//344/270/200/346/234/237/evidence/implementation.md +0 -5
  61. package/example/pm/decisions.md +0 -20
  62. package/example/pm/status//344/272/247/345/223/201.md +0 -20
  63. package/example/pm/status//345/205/250/346/240/210.md +0 -15
  64. package/example/pm/status//346/265/213/350/257/225.md +0 -15
  65. package/example/pm//344/270/200/346/234/237-/347/234/213/346/235/277.md +0 -97
  66. package/example/standards/CODE.md +0 -18
  67. package/example/standards/DESIGN.md +0 -34
  68. package/example/standards/REVIEW.md +0 -16
  69. package/example/standards/STACK.md +0 -31
  70. package/src/cli.js +0 -323
  71. package/src/constants.js +0 -202
  72. package/src/doctor.js +0 -267
  73. package/src/planner.js +0 -251
  74. package/src/project.js +0 -844
  75. package/src/upgrader.js +0 -1249
  76. package/src/v2/presets/risk/legacy-four-gates.yaml +0 -44
  77. package/src/writer.js +0 -534
  78. package/templates/.claude/agents/reviewer.md +0 -62
  79. package/templates/AGENTS.md +0 -85
  80. package/templates/BUILDBEAT.md +0 -13
  81. package/templates/CLAUDE.md +0 -7
  82. package/templates/pm/NOW.md +0 -26
  83. package/templates/pm/changes/README.md +0 -44
  84. package/templates/pm/status/README.md +0 -32
  85. package/templates/pm//345/275/223/346/234/237/347/234/213/346/235/277.md +0 -62
  86. package/templates/scripts/bus-check.sh +0 -1875
  87. package/templates/scripts/design-preview.sh +0 -44
  88. package/templates/scripts/drift-check.sh +0 -112
  89. package/templates/scripts/pre-commit.sh +0 -74
  90. package/templates/scripts/verify-status.sh +0 -105
  91. package/templates//346/214/207/346/214/245/345/217/260.md +0 -58
@@ -1,38 +0,0 @@
1
- # 简账 跨边界契约 · PROTOCOL(SSOT)
2
-
3
- > **这是跨仓边界唯一的契约入口。** 谁改接口行为,先改这里;谁要接接口,先读这里。
4
- > 🔴 协议变更不照单全收——独立核查后再信,并在 §3 登记一行。本文件不含任何凭据明文。
5
-
6
- **契约快照对应版本:`v0.2.0`**(2026-06-20 上线)
7
- > 🔴 线上实况唯一查询口 = `bash scripts/bus-check.sh`;本行只标「本快照写就时对应的版本」。
8
-
9
- <!-- buildbeat-multirepo-map:v1
10
- repo=jz-web|contract=contracts/PROTOCOL.md|deployment=n/a
11
- repo=jz-api|contract=contracts/PROTOCOL.md|deployment=n/a
12
- -->
13
-
14
- ---
15
-
16
- ## 1. 当前契约快照
17
-
18
- ### 边界:jz-web ↔ jz-api(REST,JSON)
19
-
20
- | 端点/字段 | 行为 | 备注 |
21
- |---|---|---|
22
- | `POST /api/entries` | 记一笔:`{amount, category, note?, ts}` → 201 | `amount` 一律**整数分**,前端负责展示为元 |
23
- | `GET /api/entries?month=YYYY-MM` | 当月流水,按 `ts` 倒序 | 分页二期再说 |
24
- | `GET /api/reports/monthly?month=YYYY-MM` | `{total, byCategory:[{category,sum}]}` | **按自然月**汇总(拍板 2026-06-12);空月返回 `{total:0, byCategory:[]}`,**不 404** |
25
- | 鉴权 | 单用户:`Authorization: Bearer <token>` | token 位置见 `ARCHITECTURE.md` §凭据 |
26
- | 错误 | `{error:{code,message}}` + 4xx/5xx | code 枚举:`INVALID_MONTH` / `UNAUTHORIZED` |
27
-
28
- ## 2. 🔴 当前关键对齐点(开工前各域必须一致)
29
-
30
- 1. 金额单位 = **分**(整数),序列化任何环节不得出现浮点——两端各有一条测试盯这条。
31
- 2. 空月份返回空结构不 404——前端按"有数据/空数据"两态渲染,不做 404 分支。
32
-
33
- ## 3. 契约变更记录(changelog · 倒序)
34
-
35
- | 版本 | 日期 | 变更 | 独立核查 |
36
- |---|---|---|---|
37
- | v0.2.0 | 2026-06-18 | 新增 `GET /api/reports/monthly`;定「空月返回空结构不 404」 | 测试域实测 `curl …?month=2026-01` → 200 + 空结构;读 `jz-web` Report 页确认无 404 分支,两端一致 |
38
- | v0.1.0 | 2026-06-13 | 首版:entries 两端点 + Bearer 鉴权 + 金额单位分 | reviewer 只读核两端代码,字段名/类型/错误码一致 |
package/example/pm/NOW.md DELETED
@@ -1,22 +0,0 @@
1
- # NOW — 当前冲刺指针(各工作包/AI 视角会话开工先读这里)
2
-
3
- > 本文件**永远只是薄指针**:当前期 + 看哪些文件,🔴 禁堆流水日志。
4
- > 🔴 线上版本不写在任何文档里:查 `bash scripts/bus-check.sh`。
5
-
6
- **当前期:一期(记账主流程 + 月度报表)**(已收尾:Gate4 已过、上线复核完,待换期)
7
- **本期轨道:标准轨**
8
-
9
- | 看哪 | 文件 |
10
- |---|---|
11
- | 🧭 当期看板 | `一期-看板.md` |
12
- | 🗳 拍板台账(决策单点) | `decisions.md` |
13
- | 🔌 契约 | `contracts/PROTOCOL.md` |
14
- | 📊 各 AI 视角状态(各写各的) | `status/产品.md` · `status/全栈.md` · `status/测试.md` |
15
- | 🔁 在途变更提案 | `changes/`(本期无提案,目录未建) |
16
- | 📦 历史期归档 | `archive/`(证据产物期中即写 `archive/一期/evidence/`;看板等文档换期时归档) |
17
-
18
- ---
19
-
20
- ### 换期 checklist(当前工作包 Builder / 产品视角)—— 含压缩仪式
21
-
22
- > 与上游 NOW 模板的换期 checklist 一致,沙盘从略;二期立项时逐条执行。
@@ -1,25 +0,0 @@
1
- # ADR-0001: 账本采用本地优先 SQLite
2
-
3
- - Status: Accepted
4
- - Date: 2026-06-13
5
- - Superseded by: n/a
6
-
7
- ## Context
8
-
9
- 一期需要单用户快速记账、离线可用和低运维成本;当前没有多人实时协作或跨区域数据库需求。
10
-
11
- ## Decision
12
-
13
- API 使用 SQLite 作为一期账本存储,金额以整数分保存;数据库文件仅由 API 服务拥有,Web 不直连。
14
-
15
- ## Consequences
16
-
17
- 部署和备份简单,但多实例写入能力受限。若进入多人实时协作或水平扩容,必须另建 ADR,不把 SQLite 直接外推为长期通用方案。
18
-
19
- ## Alternatives considered
20
-
21
- PostgreSQL 能支持后续多实例,但一期运维成本与真实需求不匹配;浏览器本地存储无法满足服务端备份与 API 契约。
22
-
23
- ## Related contracts / work packages / evidence
24
-
25
- 一期记账主流程工作包;`contracts/PROTOCOL.md` 金额与账目字段;`pm/archive/一期/evidence/implementation.md`。
@@ -1,7 +0,0 @@
1
- # 简账 ADR 索引
2
-
3
- 只有长期、难回退的技术决定进入本目录。普通产品拍板、Gate 确认和短期可逆选择继续记录在 `pm/decisions.md`。
4
-
5
- 当前 ADR:
6
-
7
- - [ADR-0001:账本采用本地优先 SQLite](ADR-0001-local-first-sqlite.md)
@@ -1,5 +0,0 @@
1
- # Gate1 证据(沙盘)
2
-
3
- - 决策落点:`pm/decisions.md`
4
- - 验收结果:一期规格、范围与非目标已确认。
5
- - 边界:本文为虚构教学证据,不是真实项目或线上验收。
@@ -1,5 +0,0 @@
1
- # Gate2 证据(沙盘)
2
-
3
- - 决策落点:`pm/decisions.md`
4
- - 走查结果:柱状图与移动端单列方案按真渲染原型收敛。
5
- - 边界:沙盘不携带真实截图/原型,仅展示证据路径和可追溯格式。
@@ -1,5 +0,0 @@
1
- # Gate3 证据(沙盘)
2
-
3
- - 决策落点:`pm/decisions.md`
4
- - 候选结论:review-ready 条件齐备,milestone 与 P1 closure 已收敛。
5
- - 边界:本文不授权真实合并。
@@ -1,5 +0,0 @@
1
- # Gate4 证据(沙盘)
2
-
3
- - 决策落点:`pm/decisions.md`
4
- - 收尾结果:沙盘表达一期上线、L4 复核与挂账移交的文件形态。
5
- - 边界:这是虚构证据,不能外推为任何真实部署状态。
@@ -1,5 +0,0 @@
1
- # 实现候选证据(沙盘)
2
-
3
- - 范围:`jz-web` + `jz-api` + `contracts/PROTOCOL.md`。
4
- - 自动化:示意 E2E 12 例通过;candidate hash 见各 AI 视角 status。
5
- - 边界:example 中的 hash 为教学占位,不得引用为真实 L3 证据。
@@ -1,20 +0,0 @@
1
- # decisions — 拍板台账(全工作区唯一决策单点)
2
-
3
- > **规则(总线⑨)**:一个真实决策包收敛后,第一动作 = 在此追加一行(倒序),再回写受影响的 SSOT;「回写」列没销完 = 欠账可见。验收条目与部分回答不单独记拍板。
4
- > v1.13 起新决策沿用看板收件箱包ID;历史行不追补编号。v1.14 起 reviewer 只在 review-ready 后启动。
5
-
6
- | 日期 | 拍板人 | 决策包 | 回写(落点 → 状态) |
7
- |---|---|---|---|
8
- | 2026-08-25 | 你 | 【FLOW-BUILDBEAT-RENAME】协作骨架品牌从 Solobaton 迁移为 BuildBeat;历史升级记录不回改,后续只写 canonical 新名 | BUILDBEAT.md / README / 产品 status → ✅;旧名行保留为历史 |
9
- | 2026-08-22 | 你 | 【FLOW-CLI-PREVIEW】升级 Solobaton v1.16:业务模板零替换;CLI v0 只读检查/规划,不允许写入、升级或卸载 | SOLOBATON.md / 产品 status → ✅;现有 Shell 护栏不变 |
10
- | 2026-08-22 | 你 | 【FLOW-UPSTREAM-TESTS】升级 Solobaton v1.15:替换 3 个路径健壮性脚本;上游 README/CI/测试不拷入业务项目;流程语义不变 | SOLOBATON.md / 产品 status → ✅;历史决策与看板不回改 |
11
- | 2026-08-22 | 你 | 【FLOW-REVIEW-READY】升级 Solobaton v1.14:候选满足 `HEAD=candidate`、干净、L3/渲染绿、无待修后才做一次 milestone;P0/P1 合并 closure;reviewer 静默返回 | AGENTS.md 规则⑥ / SOLOBATON.md / 一期-看板.md → ✅;历史报告不回改 |
12
- | 2026-08-22 | 你 | 【FLOW-20260822】升级 Solobaton v1.13:会话按工作包持续推进;审批分 STOP_NOW/BATCH_AT_GATE/NO_APPROVAL;决策包收敛后只记一次 | AGENTS.md §2.5 / SOLOBATON.md / 一期-看板.md / status 口径 → ✅;历史部分记录不回改 |
13
- | 2026-08-22 | 你 | 升级 Solobaton v1.12:机器闸常驻;高风险 delta 定向核;里程碑候选只全核一次;同一 hash 复用结论 | AGENTS.md 规则⑥ / SOLOBATON.md / 一期-看板.md 核查节奏 → ✅;历史报告不回改 |
14
- | 2026-06-20 | 你 | 一期验收通过,批准上线(⛔Gate4);报表导出 CSV 挪二期 | 一期-看板.md ⑤ → ✅;看板挂账 #1 → ✅ |
15
- | 2026-06-19 | 你 | ⛔Gate3 批准合并:月度报表(走查 P1「空月除零」已修复复验) | 一期-看板.md ⑤ 合并项 → ✅ |
16
- | 2026-06-15 | 你 | ⛔Gate2 真渲染过:报表用柱状图不用折线;移动端两列改单列 | design brief → ✅;一期-看板.md ② → ✅ |
17
- | 2026-06-13 | 你 | 【ADR-0001】一期账本采用本地优先 SQLite;多人实时协作或水平扩容时必须重开架构决策 | [ADR-0001](adr/ADR-0001-local-first-sqlite.md) / PROTOCOL.md / STACK.md → ✅ |
18
- | 2026-06-12 | 你 | 月度报表**按自然月**汇总,不做滚动 30 天 | PROTOCOL.md §1 → ✅ |
19
- | 2026-06-11 | 你 | ⛔Gate1 批准一期规格:记一笔 / 列表 / 月度报表;多币种不做 | 一期-看板.md → ✅ |
20
- | 2026-06-10 | 你 | Bootstrap 结论:两仓(jz-web / jz-api),同一 Builder 端到端负责,按需调用三种 AI 视角,标准轨 | AGENTS.md §1 → ✅ |
@@ -1,20 +0,0 @@
1
- # 状态 · 产品
2
-
3
- > 只此域写,别人只读。倒序。hash 均为示意值(真项目必须可 `git cat-file` 核验)。
4
-
5
- ## 当前基线
6
-
7
- - 一期已收尾,待换期;二期候选:报表导出 CSV、SQLite 每日备份(看板挂账)
8
- - 线上版本:查 bus-check(不写在这里)
9
-
10
- ## 倒序日志
11
-
12
- - **2026-08-25** 工作包:协作骨架品牌迁移为 BuildBeat,canonical marker/文档入口完成换名,历史 Solobaton 记录保留 · 证据:decisions.md FLOW-BUILDBEAT-RENAME · ✅
13
- - **2026-08-22** 工作包:升级 Solobaton v1.16 CLI 生命周期预览 · candidate `meta e16c0de` · 证据:decisions.md FLOW-CLI-PREVIEW;模板零替换、写操作未开放 · ✅
14
- - **2026-08-22** 工作包:升级 Solobaton v1.15 仓库测试与路径健壮性补丁 · candidate `meta d15c0de` · 证据:decisions.md FLOW-UPSTREAM-TESTS;业务流程语义不变 · ✅
15
- - **2026-08-22** 工作包:升级 Solobaton v1.14 review-ready 与 reviewer 调用预算 · candidate `meta c14c0de` · 证据:decisions.md FLOW-REVIEW-READY + 一期-看板.md 核查口径 · ✅
16
- - **2026-08-22** 工作包:升级 Solobaton v1.13 任务/审批节奏并同步看板、决策与状态口径 · candidate `meta b13c0de` · 证据:decisions.md v1.13 行 + 一期-看板.md 工作包快照/决策收件箱 · ✅
17
- - **2026-08-22** 升级 Solobaton v1.12 核查节奏:高风险 delta 定向核 + 里程碑候选一次全核,历史不回改 · 证据:decisions.md 08-22 行 · ✅
18
- - **2026-06-20** 一期收尾记账:Gate4 拍板落台账、挂账 3 条移交看板 · 证据:decisions.md 06-20 行 · ✅
19
- - **2026-06-15** Gate2 组织真渲染走查,2 条修改意见拍板采纳 · 证据:decisions.md 06-15 行 · ✅
20
- - **2026-06-11** 一期立项:规格三条,Gate1 已批;设计 brief 已交(要求单 HTML 可渲染) · 证据:一期-看板.md 阶段① · ✅
@@ -1,15 +0,0 @@
1
- # 状态 · 全栈
2
-
3
- > 只此域写,别人只读。倒序。hash 均为示意值(真项目必须可 `git cat-file` 核验)。
4
-
5
- ## 当前基线
6
-
7
- - 两仓:jz-web(React + Vite)/ jz-api(Node + SQLite);部署见 ARCHITECTURE.md §2
8
- - 线上版本:查 bus-check(不写在这里)
9
-
10
- ## 倒序日志
11
-
12
- - **2026-06-20** 部署 v0.2.0(两仓)+ 更新两仓 CHANGELOG · commit `jz-api a3f21c9` / `jz-web 7be04d2` · 证据:bus-check 线上实况 v0.2.0 · ✅
13
- - **2026-06-19** 修走查 P1:月报空月除零白屏 · commit `jz-web c91e77a` · 证据:`npx vitest run reports`(12/12)· ✅
14
- - **2026-06-18** 月度报表 API + 前端页,**契约先行**改 PROTOCOL v0.2.0 再动代码(规则②)· commit `jz-api 5d8b310` / `jz-web 2fa9c44` · 证据:PROTOCOL §3 v0.2.0 行 + 两端测试 · ✅
15
- - **2026-06-13** 记一笔 / 列表 两端点 + Bearer 鉴权(契约 v0.1.0) · commit `jz-api 9c07e12` / `jz-web e51ab08` · 证据:`curl` 实测 201/200 + 单测 · ✅
@@ -1,15 +0,0 @@
1
- # 状态 · 测试
2
-
3
- > 只此域写,别人只读。倒序。
4
-
5
- ## 当前基线
6
-
7
- - E2E:Playwright,12 例;证据产物:`pm/archive/一期/evidence/`(生成时即写归档位,换期零搬运;沙盘略)
8
- - 契约核查:两端独立核(不信全栈自述,规则②)
9
-
10
- ## 倒序日志
11
-
12
- - **2026-06-19** 复验 P1 修复 + 全量回归:E2E 12/12 绿;一期候选 milestone 核查一次,P0/P1=0 · 证据:`npx playwright test` 报告 + 空月空态截图 · ✅
13
- - **2026-06-19** 月报走查发现 **P1:空月份页面白屏**(分类占比除零),带图提 bug · 证据:实现⟷设计稿并排截图(规则⑧,沙盘略) · ✅
14
- - **2026-06-18** 独立核契约两端:实测空月 `curl` 返回 200 空结构、读 Report 页无 404 分支,登记 PROTOCOL §3「独立核查」列 · ✅
15
- - **2026-06-15** Gate2 前真渲染走查:提折线图改柱状、移动端两列改单列,均被拍板采纳 · 证据:decisions.md 06-15 行 · ✅
@@ -1,97 +0,0 @@
1
- # 一期(记账主流程 + 月度报表) · 协调看板
2
-
3
- > 谁做什么、什么顺序、卡点在哪。工作包完成口径 = **用户级结果 + commit hash + 可核验证据**(核查门);子任务完成不等于会话结束。
4
- > 线上实况:`bash scripts/bus-check.sh`。拍板记 `decisions.md`。
5
-
6
- ## 工作包快照(沙盘展示一期全程;live 看板只需保留在途 + 最近完成)
7
-
8
- > 简账由同一 Builder 端到端拥有一期工作包;产品/全栈/测试是该 Builder 调用的 AI 专业视角,不是三个人类岗位接力。
9
-
10
- ### WP-1 · Gate2 候选
11
-
12
- - **objective**:把一期三条需求、契约和真渲染原型收敛到可拍板状态
13
- - **AI视角**:产品 / 测试(设计稿由外部工具交付)
14
- - **in_scope**:规格、契约、设计 brief、原型走查、Gate1/Gate2 决策包
15
- - **terminal_condition**:Gate2 真渲染拍板完成并留证据;或出现范围冲突
16
- - **状态**:✅完成(06-15)
17
- - **证据**:`pm/archive/一期/evidence/gate2.md`
18
-
19
- ### WP-2 · 实现候选
20
-
21
- - **objective**:形成可测试的 jz-web + jz-api + 契约 v0.2.0 候选
22
- - **AI视角**:全栈
23
- - **in_scope**:一期三条需求实现、实现语义清单、受影响测试、两仓 CHANGELOG
24
- - **terminal_condition**:候选 hash 集和机器证据齐备;或出现冻结契约 delta
25
- - **状态**:✅完成(06-19)
26
- - **证据**:`pm/archive/一期/evidence/implementation.md`
27
-
28
- ### WP-3 · Gate3 候选
29
-
30
- - **objective**:把实现候选验证到可合并状态
31
- - **AI视角**:测试 / 产品
32
- - **in_scope**:E2E 12 例、带图走查、review-ready 自检、一次 milestone reviewer、P0/P1 合并 closure
33
- - **terminal_condition**:两仓 `HEAD=candidate`、工作树干净、L3/渲染证据绿且无待修后一次核查,P0/P1 清零再提交 Gate3;或发现需修改冻结语义的真实阻塞
34
- - **状态**:✅完成(06-19)
35
- - **证据**:`pm/archive/一期/evidence/gate3.md`
36
-
37
- ### WP-4 · 上线收尾
38
-
39
- - **objective**:完成受控上线、L4 复核与一期记账
40
- - **AI视角**:全栈 / 测试 / 产品
41
- - **in_scope**:Gate3 合并、部署、Gate4 上线、线上复核、挂账移交
42
- - **terminal_condition**:Gate4 后 L4 证据与状态/看板收尾完成;或部署前真实阻塞
43
- - **状态**:✅完成(06-20)
44
- - **证据**:`pm/archive/一期/evidence/gate4.md`
45
-
46
- > 每个工作包都覆盖多个需求 ID、文档、commit 或 reviewer 事件;子项完成只报中间进展,到用户级结果/Gate 候选才交接,没有让人反复说“继续”。
47
-
48
- ## 决策收件箱
49
-
50
- | 包ID | 变量ID | 真实取舍 | 推荐值 + 理由 | 另一选择的后果 | 截止 Gate | 状态 |
51
- |---|---|---|---|---|---|---|
52
- | WP1-G1 | D1 | 月度统计周期 | 自然月,与账期一致 | 滚动 30 天更实时但难对账 | Gate1 | ✅ 06-12 已收敛 |
53
- | WP1-G2 | D1 | 报表图形 | 柱状图,真渲染下类别对比更清楚 | 折线更适合连续趋势,不适合本页类别比较 | Gate2 | ✅ 06-15 同包收敛 |
54
- | WP1-G2 | D2 | 移动端布局 | 单列,小屏信息不拥挤 | 双列信息密度高但卡片过窄 | Gate2 | ✅ 06-15 同包收敛 |
55
-
56
- > 验收清单的其余条目均由上述选择与契约推导,没有逐项要求人批。收敛结论只在 `decisions.md` 各记一次。
57
-
58
- ## 阶段门
59
-
60
- - Gate1: passed | 决策: `pm/decisions.md:19` | 证据: `pm/archive/一期/evidence/gate1.md`
61
- - Gate2: passed | 决策: `pm/decisions.md:16` | 证据: `pm/archive/一期/evidence/gate2.md`
62
- - Gate3: passed | 决策: `pm/decisions.md:15` | 证据: `pm/archive/一期/evidence/gate3.md`
63
- - Gate4: passed | 决策: `pm/decisions.md:14` | 证据: `pm/archive/一期/evidence/gate4.md`
64
-
65
- > 四行机器令牌是 Gate 状态权威;下表是给人的阶段摘要。
66
-
67
- | 阶段 | 产出 | 负责 | 状态 |
68
- |---|---|---|---|
69
- | ① 需求(⛔Gate1 人批) | 一期规格:记一笔 / 列表 / 月度报表;多币种不做 | 产品 | ✅ 06-11 |
70
- | ② 设计(⛔Gate2 人对**真渲染原型**批) | `design/design_1期/`(沙盘略) | 外部设计工具 | ✅ 06-15(改 2 处:柱状图、移动端单列) |
71
- | ③ 实现 | jz-web + jz-api + 契约 v0.2.0 + 实现语义清单;机器闸每提交 | 全栈 | ✅ 06-19 |
72
- | ④ 验证 + 核查门 | review-ready 候选 hash 集 + E2E 12 例 + 带图走查 + milestone 一次 + P1 合并 closure 一次 | 测试 + 产品 | ✅ 06-19(P1 空月除零已修复复验) |
73
- | ⑤ 上线(⛔Gate3 合并 / ⛔Gate4 上线,人批) | 部署 + 两仓 CHANGELOG | 全栈 | ✅ 06-20 |
74
-
75
- ## 能力视角表(需求 → 调用哪些 AI 视角)
76
-
77
- | 需求 | 全栈 | 测试 | 备注 |
78
- |---|---|---|---|
79
- | 记一笔 + 列表 | ★ | E2E+走查 | 契约 v0.1.0 |
80
- | 月度报表 | ★ | E2E+走查 | 按自然月(拍板 06-12) |
81
-
82
- ## 🔴 关键对齐点(开工先定,别各做各的)
83
-
84
- 1. 金额单位 = 分(整数)→ `contracts/PROTOCOL.md` §2
85
- 2. 空月份返回空结构不 404 → PROTOCOL §1
86
-
87
- ## 挂账(实时;工作包认领后各 AI 视角写回自己的 status,此处只改 ☐/✅)
88
-
89
- | # | 项 | 域 | 状态 | 依据/出处 |
90
- |---|---|---|---|---|
91
- | 1 | 报表导出 CSV → 移交二期 | 产品 | ✅(已入二期候选) | 拍板 06-20 |
92
- | 2 | SQLite 每日备份 | 全栈 | ☐ | ARCHITECTURE.md §2 |
93
- | 3 | 上线 7 天数据回看 | 产品 | ☐ | BuildBeat lessons 第 8 条 |
94
-
95
- ## 验收口径
96
-
97
- 对照一期规格三条 + 设计稿逐屏;两仓 `HEAD=candidate` 且干净;E2E 全绿;无已知待修后 milestone reviewer 无 P0/P1;真渲染走查含移动端与空月空态。同一候选 hash 在 Gate3 前复用该结论;reviewer 返回前 hash 变化则旧审查 `SUPERSEDED`,重新 review-ready 后再核。
@@ -1,18 +0,0 @@
1
- # CODE.md — 简账代码与安全规范
2
-
3
- > **Optional**: 本文件由项目拥有;缺失时 BuildBeat 直接跳过,不作为告警或错误。
4
- > **AI write boundary**: 默认只读;普通需求、修构建或装依赖不得顺手改规范。
5
- > **Status**: Confirmed
6
-
7
- ## Rules
8
-
9
- - `CODE-MUST-001`: Secret、真实账本、身份数据和生产配置值不得进入 Git、日志、测试夹具或证据。
10
- - `CODE-MUST-002`: API 输入先做 schema 校验;账目写入失败必须回滚,不返回伪成功。
11
- - `CODE-MUST-003`: 前后端共享字段变化先同步 `contracts/PROTOCOL.md`,再分别实现。
12
- - `CODE-MUST-004`: 新依赖必须提交 lockfile,并通过许可证与安全检查。
13
- - `CODE-SHOULD-001`: 金额在 API 与存储层使用整数分,界面边界才格式化为元。
14
- - `CODE-MAY-001`: 局部重构可随工作包完成,但不得趁机更换框架或持久化方案。
15
-
16
- ## 项目禁止事项
17
-
18
- 不得用浮点数持久化金额;不得在前端日志输出完整账目内容。
@@ -1,34 +0,0 @@
1
- # DESIGN.md — 简账 UI / 视觉 / 交互规范
2
-
3
- > **Optional**: 仅有 UI、视觉或交互交付的项目按需创建;缺失时 BuildBeat 直接跳过,不作为告警或错误。
4
- > **AI write boundary**: 默认只读;普通页面实现不得顺手重写设计系统。
5
- > **Status**: Confirmed
6
-
7
- ## Principles
8
-
9
- 清晰、克制、账目优先;不用装饰性渐变掩盖信息层级。
10
-
11
- ## Tokens
12
-
13
- 字体、颜色、间距与圆角统一来自 jz-web 的 CSS variables;页面不得自建平行 token。
14
-
15
- ## Components
16
-
17
- 金额输入、账目行、月份选择器和空态组件优先复用;差异通过 props 或明确变体表达。
18
-
19
- ## Interaction Patterns
20
-
21
- - `DESIGN-MUST-001`: 新增账目在 100ms 内给出按压或 loading 反馈,保存结果提供可访问确认。
22
- - `DESIGN-MUST-002`: 上线界面不得出现调试信息、实现说明、mock 标记或开发者元注释。
23
-
24
- ## States
25
-
26
- - `DESIGN-MUST-003`: 账目列表和报表必须覆盖 loading、empty、error、disabled 与移动端状态。
27
-
28
- ## Accessibility
29
-
30
- - `DESIGN-MUST-004`: 表单标签、键盘路径、焦点、图表替代文本和颜色对比进入真渲染走查。
31
-
32
- ## Project-specific exceptions
33
-
34
- 月度报表移动端使用单列柱状图;不复用桌面双列布局。
@@ -1,16 +0,0 @@
1
- # REVIEW.md — 简账 Review 规范
2
-
3
- > **Optional**: 本文件由项目拥有;缺失时 BuildBeat 直接跳过,不作为告警或错误。
4
- > **AI write boundary**: 默认只读;只在项目 Review 口径被明确改变时修改。
5
- > **Status**: Confirmed
6
-
7
- ## Rules
8
-
9
- - `REVIEW-MUST-001`: 逐项核对一期范围、非目标、错误态与金额口径,不以测试绿替代需求覆盖。
10
- - `REVIEW-MUST-002`: 核对跨仓契约、SQLite migration 与向后兼容边界。
11
- - `REVIEW-MUST-003`: 核对单元、API 集成、主流程 E2E、真渲染和 evidence 路径。
12
- - `REVIEW-MUST-004`: 核对输入校验、日志脱敏、账目持久化和回滚风险。
13
- - `REVIEW-SHOULD-001`: 拒绝无需求支撑的抽象、依赖或复杂状态层。
14
- - `REVIEW-SHOULD-002`: 确认看板、status、decisions 与同一候选一致。
15
-
16
- review-ready 与 reviewer 调用节奏仍以 `AGENTS.md` 为准。
@@ -1,31 +0,0 @@
1
- # STACK.md — 简账技术栈约束
2
-
3
- > **Optional**: 本文件由项目拥有;缺失时 BuildBeat 直接跳过,不作为告警或错误。
4
- > **AI write boundary**: 默认只读;用户确认或明确要求技术栈变化后才可修改。
5
- > **Status**: Confirmed
6
-
7
- ## 声明
8
-
9
- | 维度 | 项目约束 | 事实来源 |
10
- |---|---|---|
11
- | Runtime | Node.js 22 LTS | 两仓 package engines 与 CI |
12
- | 包管理器 | npm;各仓提交 package-lock.json | 两仓 lockfile |
13
- | 语言与框架 | React + TypeScript;Node.js API | 两仓 package.json 与源码入口 |
14
- | 数据设施 | SQLite 单机账本 | API schema 与 migration |
15
- | 部署 | Web/API 两个独立 PaaS 服务 | 部署配置与 `ARCHITECTURE.md` |
16
- | CI 与测试 | 单元、API 集成、主流程 E2E | 两仓 CI 与 verify-status suites |
17
- | 供应链 | MIT;依赖必须锁定并过安全检查 | LICENSE、lockfile、CI |
18
-
19
- ## 可核对基线(bus-check v1)
20
-
21
- <!-- buildbeat-stack-baseline:v1
22
- nodeConstraint=22
23
- lockfileKind=package-lock.json
24
- dockerFromImage=n/a
25
- -->
26
-
27
- ## Rules
28
-
29
- - `STACK-MUST-001`: 声明与 package、lockfile、容器或部署配置冲突时只报告漂移,不自动选择一方。
30
- - `STACK-MUST-002`: 更换 Node、React、SQLite、包管理器或部署平台前必须建立 ADR,并同步 `contracts/PROTOCOL.md`。
31
- - `STACK-SHOULD-001`: 版本结论必须能回到仓库配置或运行平台证据。