9.2 KiB
9.2 KiB
Inbox V2 P1
本文档定义 inbox v2 的 P1 范围。
P1 只包含“独立模块”。
这里的独立模块,不是指“所有包彼此完全隔离”,而是指:
- 不依赖
store、runtime、agent runner、HTTP route、app service - 可以单独实现、单独测试
- 可以作为后续
HTTP、app service、store、client的公共基础 - 允许按分层方向依赖更底层的
P1模块
换句话说:
P1要先固定“底层规则和模型”P1不要先混入“流程装配和基础设施”P1内部允许存在清晰的自底向上依赖
P1 的目标不是先把服务跑起来,而是先把最底层、最稳定、最可复用的规则和模型固定下来。
数据库设计草案见 docs/inbox-v2-database.md。
背景
inbox v2 的主线已经明确:
HTTP是唯一业务入口server是唯一正式启动入口CLI只是给 AI 使用的HTTP封装clarifier角色移除product接管需求整理,并继续输出:PRDDecision Log
discovery保留- 交互路径暂时保持:
- discovery
- 需求整理
- pool
- workflow
在这条主线下,最先该实现的不是 server,也不是 client,而是底层独立模块。
P1 设计原则
P1模块必须独立于基础设施层,但允许依赖更底层的P1模块。P1模块优先承载“稳定规则”,而不是“流程编排”。P1模块一旦定型,后续P2/P3都应复用它们,而不是复制一份。P1模块必须有单元测试。P1不实现 HTTP route、不实现 runtime 装配、不实现数据库。
P1 分层
为了让后续实现可落地,P1 采用下面这套分层:
| 层级 | 类型 | 可以依赖 |
|---|---|---|
L0 |
基础工具 | Go 标准库 |
L1 |
文档规范 | L0 + Go 标准库 |
L2 |
核心领域 | L0/L1 + Go 标准库 |
L3 |
领域组合规则 | L0/L1/L2 + Go 标准库 |
约束只有一条:
- 依赖只能向下,不能横向乱连,更不能回依赖
P2/P3
P1 模块清单
下面这些是 inbox v2 第一阶段应先落下的独立模块。
| 模块 | 建议路径 | 作用 | 说明 |
|---|---|---|---|
| 时间模块 | internal/base/timeutil |
UTC 时间、标准时间格式、可注入 clock | 给记录、文档更新时间、事件时间统一格式 |
| 标识符模块 | internal/base/idgen |
topic / message / requirement / merge request 等 ID 生成规则 | 先固定命名和生成策略 |
| slug 模块 | internal/base/slug |
topic、workspace、project 的 slug 规范化 | 这是所有上层都会复用的基础规则 |
| HTTP 通用模块 | internal/base/httpx |
状态错误、JSON 编解码、通用响应封装 | 只做 transport 基础工具,不做具体业务 |
| 文档模板模块 | internal/domain/docspec |
PRD、Decision Log、Discovery request/result 的模板与渲染规则 |
product 将直接依赖它 |
| 消息模块 | internal/domain/message |
message envelope、front matter 解析、渲染、收件人规则 | 统一所有消息文档格式 |
| Topic 模块 | internal/domain/topic |
topic 的 space/status 生命周期规则 | 明确 clarify/pool/workflow/discovery 的推进规则 |
| Role 模块 | internal/domain/role |
角色分类、角色定义、角色能力边界 | 包括 product、backend、frontend、reviewer、discovery 系列 |
| Requirement 模块 | internal/domain/requirement |
requirement 的结构、状态、优先级与验证规则 | pool 的结构化实体先独立出来 |
| Discovery 模块 | internal/domain/discovery |
discovery 提案、投票、共识计算、结果文档规则 | 保留 discovery 的核心领域逻辑 |
| Workflow 模块 | internal/domain/workflow |
workflow 阶段枚举、阶段合法流转、角色协作规则 | 只管规则,不管看板聚合 |
| Merge 模块 | internal/domain/merge |
merge request 状态、元数据结构、状态流转规则 | 只管领域规则,不管 git 命令 |
P1 依赖关系
下面是建议的依赖方向。
| 模块 | 层级 | 可依赖模块 |
|---|---|---|
timeutil |
L0 |
无 |
slug |
L0 |
无 |
idgen |
L0 |
timeutil, slug |
httpx |
L0 |
无 |
docspec |
L1 |
timeutil |
role |
L2 |
无 |
topic |
L2 |
slug |
workflow |
L2 |
role, topic |
requirement |
L2 |
slug |
merge |
L2 |
timeutil, idgen, slug |
message |
L3 |
role, topic, workflow, slug, timeutil |
discovery |
L3 |
role, docspec, idgen, timeutil, slug |
这张表的意义是:
P1仍然是独立模块集合- 但不是人为禁止复用
- 后续实现时可以从
L0往上逐层推进
P1 模块详细职责
1. timeutil
负责:
NowUTC()- RFC3339 / RFC3339Nano 格式化
- 可注入 clock
不负责:
- 调度
- 轮询
- timeout 策略
2. idgen
负责:
- message ID 规则
- requirement ID 规则
- merge request ID 规则
- discovery round ID / candidate ID 规则
不负责:
- 数据库存储
- 去重查询
3. slug
负责:
- topic slugify
- workspace slugify
- project slugify
- 安全截断规则
不负责:
- 校验是否重名
- 路径解析
4. httpx
负责:
WriteJSONWriteErrorErrorWithStatus- 通用 JSON decode 辅助
- CORS 等通用 transport helper
不负责:
- route 注册
- 业务 request/response
5. docspec
这是 P1 里非常关键的模块。
负责:
PRD模板Decision Log模板- Discovery request 文档格式
- Discovery result 文档格式
- 文档 front matter 规范
- 文档固定章节顺序
不负责:
- 文档存储
- 文档版本管理
- 文档归属权限
这里要明确:
- 第二版中
product会直接使用PRD和Decision Log - 模板沿用当前澄清模板,但所有权从
clarifier转到product
6. message
负责:
- message envelope 结构
- YAML front matter 解析
- markdown 渲染
from / to / type / topic / stage / reply_to / round规则- 收件人解析
- 基础合法性校验
- 面向消息文档的稳定结构定义
不负责:
- 消息存储
- mailbox 查询
- HTTP handler
7. topic
负责:
- topic
spaceclarifypoolworkflowdiscovery
- topic
status - space/status 的默认值
- 合法推进规则
- “能升不能降”之类的基础约束
不负责:
- topic record 存储
- topic 列表聚合
注意:
虽然 v2 去掉 clarifier 角色,但 clarify 这个对话整理阶段可以在兼容期继续存在;只是它背后的角色从 clarifier 变成 product。
8. role
负责:
- 角色枚举和分类
- 角色合法性校验
- 角色阶段边界
- 哪些角色属于 discovery
- 哪些角色属于 workflow
product的正式职责定义
不负责:
- role 存储
- role 技能绑定
9. requirement
负责:
- requirement 结构
- requirement 状态
pendingdispatchedcompletedarchived
- 优先级范围和校验
- requirement 文本字段校验
不负责:
- requirement 查询
- requirement dispatch 执行
10. discovery
负责:
- discovery candidate 结构
- vote 结构
- 共识判断
- result markdown 生成
- discovery request 文本格式规则
- discovery 阶段的固定角色集合规则
不负责:
- 并发执行
- codex 调用
- round 持久化
11. workflow
负责:
- workflow 阶段枚举
planreviewexecutionverification
- workflow 阶段流转规则
- workflow 角色协作边界
- workflow 消息的基础规则
不负责:
- workflow board 聚合
- dispatch 查询
12. merge
负责:
- merge request 结构
- merge request 状态流转
- merge metadata 规则
不负责:
- git diff
- merge 命令执行
P1 明确不做的东西
下面这些不属于 P1:
serverclienthttp routeapp servicestoreruntimeagent runnerworkflow boardpool dispatchmerge的 git 执行
这些模块都依赖更高层或外部设施,不属于独立底层模块。
P1 实现顺序
建议顺序如下:
timeutilslugidgenhttpxdocspecroletopicworkflowrequirementmergemessagediscovery
原因很简单:
- 先做通用基础能力
- 再做文档规范
- 再做核心领域规则
- 最后做组合型领域模块
- 最后才进入
P2的server/app/store
P1 输出结果
P1 完成后,应该得到这些结果:
- 一组独立于基础设施的底层模块。
- 一组稳定的领域结构、模板和状态流转规则。
- 第二版可以明确复用的文档标准:
PRDDecision Log- Discovery request
- Discovery result
- 一套从
L0 -> L3的清晰依赖方向。 - 后续
P2实现HTTP server和app services时,不再需要重新发明这些规则。
P1 完成标准
满足下面条件,P1 才算完成:
- 上述每个模块都有明确目录。
- 每个模块都有单元测试。
- 每个模块都只依赖下层
P1模块,不依赖任何P2/P3模块。 - 文档模板和领域规则已经固定。
product接管需求文档这一决策已经在底层模型中可以表达。