关于 speed

speed 是一个多租户 SaaS 产品家族的共享基础设施。它不是一个应用 程序:它是一组版本锁步、独立发布的 Go module 与 npm 包,由业务方 项目接入后编译成单一的二进制文件。各模块在进程内互相调用——没有 服务发现,也没有 Kubernetes 那一套基础设施。

整体形态

方面设计
依赖关系严格自底向上:基础模块(pkgcoredbkitobservabilityratelimittenancy)支撑着上层的一切。
部署模式与实现组合两条正交的轴。每一个基础设施依赖都是一个接口,可以有多种实现(一种进程内实现,加上 PostgreSQL、Redis、S3 等外部实现)。部署模式并不选择实现,它只约束实现:每个实现声明自己的能力,当某种组合无法在声明的模式下运行时,装配会失败。单进程部署可以连接真实的外部服务。业务代码从不对模式分支判断。
多租户共享数据库配合 tenant_id 隔离,由 GORM 插件、强制使用的泛型 repository 基类,以及分布式模式下的 PostgreSQL 行级安全三重把关。
版本管理锁步版本:所有模块与包共享同一个版本号、一起发布;只支持相同版本号的组合。

文档如何分发

每个模块都在自己内部带一份 AGENTS.md——面向 AI 编码工具的速览: 职责边界、公开 API、典型用法,以及明确的禁止事项——再加一份普通的 README.md,让文档随代码一起分发,并且始终与业务方实际拉取的版本 保持一致。(每模块一份的 docs/usage.mddocs/internal/13 记录的长期计划;截至本文写作,恰好只有一个模块 go/notification 建了这样一份—— go/notification/docs/usage.md, 其自己的文件头就说明这是写给其他模块参考的模板——其余每一个 Go module 和每一个 npm 包目前都还只靠自己的 AGENTS.mdREADME.md。)本站是跨模块的中心参考——完整索引见 模块索引——计划按发布版本分目录,模块自己的文档会 指向这里获取总览。

本站现状与计划的对照

机制决策已经落定:本站基于 Hugohugo-book 主题构建,把 docs/internal/13-documentation-standards.md 刻意推迟到 M4 的静态站点生成器决策提前落地——这与本仓库 storage/notification 两个模块此前"提前排期落地"的先例是同一种 模式。在候选主题之间选择 hugo-book 而不是 Docsy 的原因:Docsy 需要 Hugo Modules 加一整套 Node/PostCSS 资源构建流水线(按其现行的安装 文档,它的 Bootstrap 与 Font Awesome 资源来自 npm,且需要 PATH 上 存在一个 Dart Sass 编译器),这会重新引入本目录此前一直刻意回避的 Node 依赖,而 hugo-book 没有这个依赖——它现行的版本(v0.15.0)甚至 去掉了更早版本里的 Sass 依赖——只需要 Hugo 这一个二进制本身。中英 双语内容靠的是 Hugo 自身的多语言机制,不是某个主题的功能:两个 候选主题本可以同样好地满足 i18n 这条需求,因为无论是 Docsy 的 Bootstrap 外观还是 hugo-book 朴素的外观,底下都是同一套 Hugo 核心的 语言机制。

现在真实存在的:content.en/content.zh-cn/ 下两种语言各自 真实的内容(Hugo 按内容目录分语言的约定,与这个主题自己文档化的结构 一致)、每一页页眉里真正可用的语言切换器、hugo --minifypublic/ 下产出的站点(已加入 .gitignore,从不提交),以及站点 构建产物根部一份真实的 llms.txt,其中的链接已经更新为这份 Hugo 配置实际产出的 URL。让构建产物保持诚实的结构检查是 tools/check_docs_site.py(docs-check 流水线)——它现在会先构建站点, 再对照 public/ 检查同样的属性(必需页面存在、内部链接可解析、 站点能被访问),而不是对照手写的 HTML 源码树。

推迟到更晚里程碑(M4)的:按发布版本分目录(本站像它记录的代码一样 按版本管理),以及完整的文档集合(错误码索引、站点上呈现的 ADR、由 配置 schema 生成的配置参考)。