Skip to content

00 · 方法与版本口径

这份拆解复用了 dg-ai-notes 最有效的阅读方式:每章先回答“它解决什么”,再追真实流程和源码,最后讨论设计理由、边界、未完成项与继续阅读入口。变化只在于 Buzz 的体量更大,必须额外处理多语言、多运行时、规范文档和实现状态漂移

1. 分析对象

本地快照包含:

维度规模/形态
Rust workspace27 个 crate,Rust 1.88,edition 2024
客户端Tauri + React Desktop、React Web、Flutter Mobile、React Admin
数据PostgreSQL schema + 26 个迁移、Redis、S3-compatible object storage
协议Nostr/NIP 扩展、ACP、Git smart HTTP、Iroh QUIC mesh
工程化Hermit、Just、Docker Compose、Helm、GitHub Actions、TLA+/Tamarin/Python 模型

快照目录不是 Git worktree。因而本文用“核验日期 + 文件路径 + 符号/行号”定位证据,不虚构提交号。

2. 证据优先级

当实现和文字冲突时,采用以下顺序:

text
运行代码 / SQL 迁移

单元、集成、E2E 与形式化模型

crate README / 部署文档 / NIP 规范

根 ARCHITECTURE.md

VISION*.md 与 README 路线图

原因不是“代码永远正确”,而是本任务要解释这个快照当前会做什么。愿景文档仍有价值,但只用来说明目标,而不冒充落地状态。

3. 统一章节模板

每章尽量覆盖六个问题:

  1. 职责:子系统负责什么,不负责什么。
  2. 核心模型:关键类型、表、事件 Kind、进程或状态机。
  3. 真实流程:输入怎样穿过边界,什么时候算成功。
  4. 设计理由:为什么选这种拆分、一致性或隔离策略。
  5. 失败与边界:错误如何传播,哪里 fail closed,哪里允许最终一致。
  6. 源码索引:从哪些文件/符号继续验证。

4. 状态标记

标记含义判定方式
已实现主链路有生产代码,通常还有测试或部署接线不等于功能已经完美
部分实现数据结构或基础设施存在,但用户闭环缺口明确会列出具体断点
愿景主要存在于 VISION/规范或接口草图不把设计承诺写成现状

例如:

  • Redis 固定窗口限流器在当前代码中已接入 Relay,属于已实现;根架构文档把它列为缺口,是文档漂移。
  • 工作流 approval token、表与事件 Kind 都存在,但执行器遇到审批步骤会主动把 run 标失败,属于部分实现
  • “跨 Relay 的完整共享 Agent 计算市场”有 Mesh 基础设施和局部接线,但产品闭环仍偏愿景。

5. 怎样阅读行号

正文使用两类引用:

  • crates/buzz-relay/src/handlers/ingest.rs::ingest_event:稳定的“文件 + 符号”入口。
  • GitHub 链接中的 #L1461:方便跳转,但随上游修改可能漂移。

优先相信符号名与邻近注释,不要把行号当永久 API。

6. 本文刻意不做什么

  • 不逐行翻译源码。
  • 不复述所有 CLI flags、React components 或 SQL 列。
  • 不把 Nostr、ACP、TLA+ 写成从零入门教程;只解释它们在 Buzz 中承担的角色。
  • 不运行完整 Buzz 测试矩阵。分析使用静态源码、测试结构和已有规范取证;站点自身会执行 VitePress 生产构建。
  • 不复制上游长段文档;所有分析均为重新组织后的中文表述。

7. 关键校验清单

阅读每条链路时持续检查:

text
[ ] community_id 是否在查询第一个约束位置?
[ ] 写入和 fan-out 是否都重新执行权限判断?
[ ] 事务提交前后分别发生了什么?
[ ] Redis/S3/副本延迟会不会改变安全结论?
[ ] agent 身份能否追溯到 owning human?
[ ] 事件是权威事实,还是数据库派生视图/通知?
[ ] 崩溃、重连、重复投递时是否幂等或可恢复?

8. 参考入口

独立源码研究笔记 · 非 Buzz 官方文档