Skip to content

meta feature inventory

ZP edited this page Aug 30, 2026 · 2 revisions

← 返回 Wiki 首页 | 元文档 · 功能全量清单 | 上一篇:DSH 装载验证


功能全量清单

把设计文档里所有功能逐条列出并标注实现状态。与 TODO.md 的分工: TODO 跟踪 P0-a 的实现顺序,本文件回答「文档一共要求了多少,做到哪儿了」。

本文件按文档条目组织,不按代码结构。 因此会出现「一个代码模块对应多条」 或「一条横跨多个模块」的情况 —— 那是对的,清单要对得上文档才有对账价值。

最后核对:2026-08-30 · 插件侧 574 个测试、relay 侧 295 个测试

一句话结论

P0-a 已完成,P0-b 未开始,P1–P4 全部未开始。

按条目粗数:文档共约 180 项可辨识的功能条目,已实现约 65 项(36%)。 P0 之后的三个阶段体量都大于 P0,所以「完成度 34%」这个数字会随后续阶段推进而 先降后升 —— 现在它主要说明基础设施已就位,业务面还很窄。


一、P0-a:已完成

§44.1.1 定义的第一个验收关口。骨架第 1、3、5、6、7、8、9、11、14 步与 §44.1.2 的 13 条失败路径全部覆盖。

领域 条目 状态
契约 §46 错误码目录 32 条,与文档双向锁定 ✅
契约 11 组领域状态集合,与文档双向锁定 ✅
契约 品牌化标识符与持久化类型 ✅
契约 命令与 16 个领域事件的定义 ✅
契约 AuditEvent 结构(§37 的 16 个字段) ✅
契约 ProtocolVersion 与协议版本协商编解码 ✅
服务端 /protocol/negotiate 端点(认证之前) ✅
host relay 客户端与转发层 ✅
集成 插件经真实 relay 进程的端到端验收 ✅
持久化 SQLite schema,§27 要求的七类必备字段 ✅
持久化 迁移单调递增、单事务原子、只做扩展 ✅
身份 邀请码签发与一次性消费 ✅
身份 设备注册(Ed25519,私钥不上传) ✅
身份 请求签名校验(§7.1 的五条拒绝路径) ✅
身份 nonce 去重与时间偏移容忍窗口 ✅
组织 组织/工作区/项目三级层次 ✅
组织 双层授权判定,10 个角色的能力表 ✅
组织 成员邀请与接受,版本冲突检测 ✅
组织 组织切换时的缓存隔离(§9) ✅
私聊 联系人请求、接受、拒绝、删除 ✅
私聊 有向拉黑,双向独立判定 ✅
私聊 准入判定 contactAccepted && !Block×2 ✅
私聊 消息与队列项同事务,DeliverySeq 单调 ✅
私聊 (senderId, messageId) 幂等 ✅
私聊 队列满在写入前拒绝,不淘汰未 ACK ✅
私聊 按设备租约拉取,ACK 幂等,到期重投 ✅
私聊 消息编辑与撤回(追加事件) ✅
私聊 发送方本地三态状态机 ✅
私聊 会话列表与消息记录查询 ✅
私聊 打开会话标记已读 ✅
工作项 创建、分派、版本控制 ✅
工作项 签收状态机(独立于工作项状态) ✅
工作项 依赖成环检测,返回环路径 ✅
工作项 评审关口与产物变化自动 superseded ✅
工作项 评论与 CommentRevision ✅
通知 收件箱、去重键、游标补拉 ✅
通知 聚合(5 分钟窗口,四类不参与) ✅
通知 outbox 消费、抖动退避、dead_letter ✅
通知 SSE 事件流 ✅
审计 仅追加、与领域写入同事务 ✅
审计 被拒绝的尝试同样留痕、表中无正文 ✅
审计 序列缺口检测 ✅
限流 多维度按最严格者生效 ✅
客户端 离线三态呈现、错误按可重试性分级 ✅
客户端 会话列表、消息视图、输入框 ✅
客户端 右侧抽屉与「聊天」标签页 ✅
客户端 打包为 DSH 闭包工厂产物 ✅
集成 三进程验收(relay + 两个 host) ✅
集成 §44.1.2 的 13 条失败路径 ✅
工程 仓库治理、CI、分支保护、双语文档 ✅
工程 vendored 运行时带外锚点校验 ✅
服务端 relay 拆为独立仓库 ✅

小计:约 53 项。


二、P0-a 范围内但仍有缺口

这些不阻塞关口,但确实没做完。

条目 现状
plugin 与 relay 尚未对接 已接通。配 relayUrl + relaySharedSecret 即走 relay,含 §41 协议协商与真实进程间的端到端验收
relay 无账号开通端点 §7 规定注册走邀请码,消费逻辑已实现但没有 HTTP 入口,账号目前要直接写库
relay 认证只到「授权接入的 host」 共享密钥不证明请求来自哪个账号。设备签名校验侧已实现,缺会话建立与 token 下发
contract 未发布成包 两仓各持一份,靠带外锚点校验防漂移。发布需要 write:packages 凭证
host 端的本地身份是临时口子 单机模式直接用配置里的账号充当已认证主体
「聊天」标签页下原生输入框仍在 DSH 的输入框永远存在,conversation.view 只换正文区。详见下方「已确认做不到的事」
SSE 未接到界面 端点已实现,界面是打开时拉一次,没有订阅
组织与成员的部分端点缺失 有创建/邀请/接受/查自己,缺列出全部成员、改角色、移除成员
测试偶发 worker 崩溃 全量 vitest run 约每 12 次一次,改动前即存在

三、P0-b:未开始

§44.1.1 的第二个验收关口。骨架第 2、4、10、12、13 步。

领域 条目
第二因素 TOTP 登记与校验、备用码、已消费时间步防重放
第二因素 组织强制策略(未登记前只能访问账号安全设置)
恢复 RecoveryKit 生成与恢复口令加密导出
恢复 守护人阈值拆分(2/3 之类)与批准流程
恢复 recovery_pending 状态、冻结旧设备、安全通知
在线状态 在线/空闲/离线阈值与可见范围设置
在线状态 状态过期与订阅变化通知
搜索 host 本地索引与查询
搜索 索引条目状态机(pending→indexed→suppressed/purged)
搜索 撤回消息不在索引中残留
协议 版本协商的完整验收(编解码已实现,端到端未验)
安全 凭证重放与时间偏移滥用的验收(实现已有,验收未做)
观测 §40 指标面与 SLO 基线实测值

小计:约 13 项。


四、P1:未开始

§44.2。交付 L2 团队 bundle,是体量最大的一个阶段。

领域 条目
部署 PostgreSQL / Redis / 对象存储 / SMTP 提供者替换 L1 默认实现
群聊 群创建、绑定项目、群主管理、群成员版本
群聊 GroupLog、GroupMessageSeq、成员游标、群事件
群聊 群邀请状态机(pending/accepted/rejected/expired/withdrawn)
群聊 历史授权、续期、按范围授予
群聊 群日志容量与 GROUP_LOG_CAPACITY_EXCEEDED
消息 引用快照(非递归、标记原消息已编辑/已撤回)
消息 受限 Markdown 与安全渲染
消息 表情回应(四元组幂等、白名单、撤回后隐藏)
附件 上传预约、并发限额、单文件大小限额
附件 BlobObject、去重、MessageContentGrant
附件 下载授权、attachmentState = pending 与重试
附件 图片/文件传输、保留期与稳定下载授权
资源库 版本化资源、同名覆盖创建新版本
资源库 目录权限、快照禁止策略
资源库 共享对象与选择性共享
仓库 仓库链接登记、EgressService 来源验证
仓库 webhook 签名验证、提交更新进群与工作项
仓库 已验证 hash 去重、CodeChangeRecord
搜索 群消息与资源元数据的服务端索引
搜索 结果逐条复检 ACL
通知 团队版 notification 插件(邮件等外部通道)
组织 多组织成员关系、邀请过期

小计:约 23 项。


五、P2:未开始

§44.3。协作会话、群 Bot、富文件。

领域 条目
协作会话 个人会话选择性公开、隔离协作会话
协作会话 只读输入快照、可写执行租约
协作会话 候选产物与接受流程、ARTIFACT_NOT_ACCEPTED
协作会话 分支/版本合并、VERSION_CONFLICT 处理
执行 沙箱执行 provider、配额与终止
执行 无 host 文件系统/环境变量/未授权网络访问
Bot 显式安装、隔离的 (GroupId, BotId) 会话
Bot 调用策略、上下文冻结、工具能力授权
Bot 预算 BOT_BUDGET_EXCEEDED、审计与结果发布
Bot 输出不触发二次命令解析
消息 线程(ThreadId、ThreadMessageSeq、不扩大可见范围)
消息 转发(逐条复检读取权、跨组织拒绝、复用 BlobObject)
消息 群公告、置顶、只读群
文件 文件预览、受控视频

小计:约 14 项。


六、P3:未开始

§44.4。团队版、治理、分析。

领域 条目
订阅 自建/团队版 PlanLimits、订阅状态、容量
订阅 MEMBER_LIMIT_REACHED / STORAGE_QUOTA_EXCEEDED
插件目录 公共插件提交、审核、发布、撤销
插件目录 撤销后停止排队任务、终止运行实例、PLUGIN_REVOKED
分析 原始用量事件、最小化与匿名化
分析 组织成本大屏、按项目/模型/插件/Bot 分布
分析 个人 token 工作台、预算告警
分析 周报/月报草稿
分析 同层级可解释排行(样本不足不展示名次)
治理 第二因素的组织强制策略与按角色分级
治理 数据导出流程(按请求者权限逐条裁剪)
治理 账号注销宽限期与匿名化
治理 组织删除宽限期、双人确认、物理清理
搜索 工作项、代码更新与插件目录搜索
代码 已验证代码更新与提交关联

小计:约 15 项。


七、P4:未开始

§44.5。企业版、安全、分片、E2EE。

领域 条目
分片 按组织分片、分片健康与故障转移
基础设施 DDoS/WAF、KMS/HSM、加密备份
基础设施 受控出口、隔离执行
审计 逐条哈希链、每日锚点、外部不可篡改归档
审计 哈希链断裂检测 audit_chain_broken
身份 webauthn、企业单点登录与强度传递
身份 目录同步(成员与部门)
安全 密钥轮换、风险地理位置管制、黑名单
安全 relay 指纹变更与 SERVER_IDENTITY_MISMATCH 端到端
安全 异地登录安全邮件与一键停止设备
安全 SSRF 拒绝(私有地址、DNS rebinding)
恢复 恢复演练、备份回滚后的水位对账
恢复 sync_diverged 对账与 read_only_recovery
E2EE 私聊/群端到端加密(需独立审计)
E2EE 密钥 epoch、成员变化后的新旧隔离
E2EE 离线成员的密钥轮换
E2EE 按 OrganizationEncryptionPolicy 的功能矩阵降级
E2EE 服务端正文索引强制禁用、设备侧索引区间可见

小计:约 18 项。


八、已确认做不到的事

不是「还没做」,是在当前上游契约下做不了,需要上游改动。

想做的 为什么做不了
一个输入框切换「对 AI / 对同事」 conversation.composer 是 chain 槽,其选择器契约要求「MUST be pure — a function of the owner props only, no external mutable reads」。官方 ui-approval 靠 pendingInteraction instanceof PendingApproval 选中 —— 那是框架塞进 props 的状态;而「用户切了聊天模式」不在 props 里,表达不出来。conversation.composer.bar 是 single 槽且已被 ui-conversation 自己的 InputBar 占用。值得给上游提 issue:让插件能驱动一个 pendingInteraction
切到「聊天」标签后隐藏原生输入框 试过了 —— 官方的「轨迹」标签同样保留原生输入框。conversation.view 只替换正文区,输入框由 ConversationRoot 常驻渲染,没有 opt-out
右侧栏 slot DSH 一共 58 个 slot,没有 rail/aside 这类。当前用会话头部工具区 + position: fixed portal 变通
拖拽文件发给同事 前端可做(DSH 有 drop target 类 slot),但后端整套附件子系统(预约上传、BlobObject、MessageContentGrant、保留策略)属 P1,一行都没有。硬做只能把文件塞进消息正文,绕过大小限额与内容授权

九、文档自身的缺口

需要文档变更 PR才能关闭,实现里刻意没有自行发明。

缺口 影响
字段类型标注与非 ID 字段的英文名 契约层只能按中文描述推断
设备状态枚举没有集中声明 P0 只用 active/restricted/revoked
工作项完整转换矩阵未定义 只实现了文档明确约束的 in_review → done
签收状态与工作项状态的耦合未说明 两台状态机各自独立演进
非消息命令的幂等键字段名 只有消息侧明确
角色的英文标识符 §11.1 的 10 个角色全为中文
联系人关系状态枚举不完整 removed 单列在实现侧
消息编辑窗口的默认值与起算点 实现取 15 分钟、从创建时间算,两个取值都无依据
合规撤回权限对应的能力名 §11.1 能力表中没有对应条目

另有两条 §50 开放决策标注为 (P0) 但尚未关闭(第二因素是否对组织所有者强制、 在线状态阈值)—— 按文档维护规范 §3.3, 它们本应在 P0-a 启动前关闭。


十、下一步建议

按「解锁后续工作的程度」排序,不按工作量:

  1. 接通 plugin ↔ relay —— 已完成。
  2. relay 的账号开通与设备会话。P0-b 的恢复、第二因素全都建立在 「有真实的设备身份」之上,先做这个后面才有地方挂。
  3. contract 发布成包。两仓各持一份副本靠校验和防漂移,能撑一阵, 但每次改协议都要手动同步一次。需要 write:packages 凭证。
  4. 关闭那两条 (P0) 开放决策,否则 P0-b 一启动就踩在未定义的需求上。
  5. 然后才是 P1 的群聊与附件 —— 那是体量最大的一块,值得单独排期。

← 上一篇:DSH 装载验证 | 返回 Wiki 首页

Clone this wiki locally