FEATURED · 精选文章

ADR-326 技术解读:RuView 租户隔离的 RuVector 空间记忆与异常解释架构

发布时间 / 2026/9/10 13:52:53
来源 / 创域科博编辑部
栏目 / 资讯中心
ADR-326 技术解读:RuView 租户隔离的 RuVector 空间记忆与异常解释架构 ADR-326 技术解读RuView 租户隔离的 RuVector 空间记忆与异常解释架构【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView本文以 ADR-326: Tenant-scoped RuVector spatial memory and anomaly explanations 为骨架结合其实现 crateruview-spatial-memory源码见 v2/crates/ruview-spatial-memory/src/lib.rs与 Rust v2 workspace 工程组织深入讲解 RuView 如何在多租户场景下安全落地基于空间历史记忆的异常解释先按认证租户分区再做相似度检索、语义记录的类型级隐私边界、血缘与重放防护、加密快照持久化、按键轮换以及相似不等于因果的解释约束。读完你将掌握该组件的数据结构、安全不变量、完整 API 语义与测试验证矩阵可直接用于阅读或集成 v2 相关代码。问题背景为什么需要一个独立的租户级空间记忆ADR-325 提出的产品链路见 docs/adr/ADR-325-cognitum-spaces-activation-and-governed-spatial-exchange.md要求异常解释必须以租户本地的空间历史为依据——记忆只提供上下文不提供权限。但当时已部署的客户端只返回当前列表没有可查询的历史能力。若简单用一个全局向量索引则即使在检索后按租户过滤结果也依然泄漏信息排名本身已跨租户边界ANN 的最近邻排序在过滤之前就已发生被过滤掉的另一个租户的近距离命中仍然影响甚至决定了返回顺序状态洗白laundering一条从 RuView 派生的云端记录被当成第二次独立观测回流可重置新鲜度、增加佐证源计数、形成循环证据。此外空间记忆的隐私边界非常严格不允许存储 OAuth/API 凭据、原始 CSI/CIR、RF 张量、姿态帧、生命体征波形、录像、身份观测或不受限的 Agent 转录。持久化还必须具备明确的保留期、删除、溯源与密钥轮换语义。由此形成 ADR-326 的五项核心决策并落地为独立 crate v2/crates/ruview-spatial-memory在 v2/Cargo.toml workspace members 中登记为 ADR-326 tenant-scoped Cognitum Spaces history。决策一先分区、后相似度——物理隔离而非事后过滤设计原则SpatialMemory是一个以精确认证的(tenant_id, workspace_id)对为键的映射每个分区各自拥有独立的 RuVector HNSW 索引。数据写入ingest与检索search都先解析分区不存在任何全局 ANN 查询路径。站site、空间space、模式版本schema version与时间窗口等约束都只在选定分区内进一步收窄结果。源码中的映射结构印证了这一点pub struct SpatialMemory { dimension: usize, partitions: BTreeMapPartitionKey, Partition, } struct Partition { records: VecMemoryRecord, by_id: BTreeMapString, usize, messages: BTreeMap(String, String), usize, source_sequences: BTreeMapString, u64, index: HnswIndex, }每个Partition携带一个wifi_densepose_ruvector::HnswIndex源码位于 v2/crates/wifi-densepose-ruvector本 crate 通过path依赖引用。分区构造时以余弦距离Metric::Cosine和默认 HNSW 参数初始化索引。测试ann_is_physically_partitioned_before_search直接验证了这一安全语义同一 workspace 下 tenant-a 与 tenant-b、以及 tenant-a 下不同 workspace 各写一条特征完全相同[1.0, 0.0, 0.0]的记录检索 tenant-a/ws 时只返回[a]检索不存在的分区返回空数组。检索内部先在分区内全量取候选再应用次约束search的实现顺序值得注意lib.rs校验分区键、查询特征维度与k必须1..100校验 site/space/schema 可选约束的标识符合法性及时间窗口有效性通过分区键取出或不取出该租户/workspace 的独立索引直接以分区全部记录数为候选数调用 HNSW——避免先取回少量 top-k 再过滤导致次要谓词降低结果质量注释明确写着 Request all candidates inside this already isolated partition so secondary site/space/time predicates cannot reduce result quality逐条剔除已过期expires_at_ms now_ms或retention_until_ms now_ms以及不满足 site/space/schema/时间窗约束的记录命中数量达到k即截断返回。SearchQuery上的可选now_ms由调用方注入使过期判断可测、确定不依赖墙钟。边界常量一览从源码顶部的常量定义lib.rs可看到全部有界约束这是类型与运行时双层有界的证据常量值含义FILE_MAGICbRVSM01\0\0快照文件魔数标识存储格式FORMAT_VERSION1加密信封格式版本MAX_FILE_BYTES16 MiB加密快照文件上限MAX_RECORDS10,000全部租户分区的总记录上限MAX_FEATURES1,024语义特征向量维度上限MAX_ID_BYTES128各类标识符长度上限MAX_DERIVATIONS32单条记录的派生引用条数上限MAX_KEY_ID_BYTES128密钥 ID 长度上限MAX_K100单次检索返回条数上限决策二有界语义记录——类型层面就没有 P0/P1 与凭据ADR-326 对可接受记录定义了严格的字段白名单。核心类型MemoryRecordlib.rs只承载租户/workspace/站点/空间与稳定的记录标识record_id、message_id、source_id、单调递增的source_sequence、schema_version原始observed_at_ms/expires_at_ms与强制的保留截止retention_until_ms均以 Unix 毫秒计定长有限语义特征向量features、[0,1]区间校准不确定性uncertainty、证据等级evidence_gradeprovenance_digest源事件归一化摘要32 字节与可选的witness_digest见证链收据摘要有界的派生引用列表derived_from。同时提供两个强类型枚举EvidenceGradeL0合成/仿真、L1实验室、L2无留出验证的部署、L3留出验证的部署——证据等级会被原样保留进每一次解释绝不升级RecordClassObservationP2/P3 观测或Inference由早期记录派生的有界推断。校验函数validate_record实行失败即关闭fail-closed标识符必须非空、≤128 字节、仅含 ASCII 字母数字与-_.:source_sequence必须为正时间戳不变量observed_at_ms now_ms、expires_at_ms now_ms、retention_until_ms now_ms、expires_at_ms retention_until_ms不确定性必须有限且落在[0.0, 1.0]特征向量长度必须精确等于建库维度且全部有限拒绝 NaN/Inf类型一致性Observation不得携带derived_fromInference必须有非空derived_fromderived_from中不得自引用或重复引用。凭据与 P0/P1 字段在这套类型系统中根本没有表示——文档与#![forbid(unsafe_code)]的注释一致This crate accepts semantic P2/P3 records only. It deliberately has no field for CSI, RF tensors, recordings, biometrics, or identity observations.决策三血缘与重放防护——建立禁止产生循环证据的持久化闭环ingestlib.rs在真正索引之前执行整套拒绝逻辑分区会拒绝变更式复用(source_id, message_id)若同样键已存在且内容完全相同幂等返回Ok(())内容不同则返回ReplayConflict同一 source 的非递增序号新记录的source_sequence必须大于该 source 已记录的最大值否则StaleSequence重复的派生引用BTreeSet去重检测自引用、缺失父记录与一切前向引用因此所有环都被结构性排除父记录必须在分区中已存在by_id不存在即InvalidDerivation已过期输入或 provenance/witness 替换过期记录无法写入摘要字段是类型固定的一部分无法在写入后被悄悄替换。这也保证一条recollection回忆永远保留其原始血缘、时间戳、不确定性与证据标签——它不能增加佐证源计数也不能成为其自身祖先的独立支持。这正回应了 ADR-325 的无反馈洗白要求云端投影回流时只能以同一血缘的派生形式存在。决策四加密持久化与密钥轮换——明文永不上盘ADR-326 拒绝明文 JSONL 持久化方案因为租户空间历史即使排除原始感知数据仍属敏感。实现采用XChaCha20-Poly1305认证加密依赖chacha20poly1305 0.10见 v2/crates/ruview-spatial-memory/Cargo.toml并满足密文下明文永不写盘、信封有界且带版本、加载需要包含具名密钥的 keyring。save_newcreate-if-absent 的原子快照save_newlib.rs流程目标路径已存在则返回AlreadyExists快照从不隐式覆盖已有路径序列化PersistedState { format_version, dimension, records }超过 16 MiB 即拒绝以getrandom生成 24 字节随机 nonce构造认证关联数据AAD 文件魔数 key_id 长度 key_id 字节把存储格式与密钥 ID 绑定进认证标签用调用方提供的 256 位密钥加密组织信封magic ‖ key_len ‖ key_id ‖ nonce ‖ ciphertext写入随机后缀临时文件后sync_all再用fs::hard_link做原子 create-if-absent 提交——代码注释特别说明这比 Unix 上 rename 更严格无法覆盖存在性检查之后、提交之前被并发创建的目标。解密端load做镜像校验文件大小范围、魔数、key_id 长度与字符集、AAD 重算、认证解密失败一律返回InvalidEnvelope随后反序列化、版本核对、逐条ingest复验含时间戳与血缘确保加载即验证。加载过程通过闭包key_for(str) - Option[u8; 32]解析密钥 IDkeyring 中没有该 ID 则KeyUnavailable。rotate_key旧钥解密→新钥新代际→回读验证密钥轮换lib.rs是reload-verify语义的完整闭环用旧 key 从 source 加载并完整复验以新key_id与 256 位新密钥调用save_new写到新的、不存在的目标路径回读目标路径并仅用新密钥重新加载验证成功才返回源文件保持原样测试断言source.exists()。对应测试key_rotation_writes_new_generation_and_preserves_source覆盖了旧钥仍可读、新代际用新钥可完整加载、源保留。删除语义HNSW 索引必须重建ADR-326 提供三类删除purge_expired(now_ms)同时以expires_at_ms与retention_until_ms驱逐且级联删除依赖已删记录的 Inference循环迭代直到不动点分区为空则整体移除否则重建索引erase_partition(key)删除整个租户/workspace 分区erase_record(key, record_id)删除单条记录并传递闭包式级联其全部派生推断。无论哪种删除只要分区仍有记录就调用Partition::rebuild重插全部剩余向量确保被删记录无法从陈旧图节点返回。测试expiry_cascades_to_derived_records_and_erasure_is_exact验证了过期级联计数为 2record_erasure_cascades_to_dependent_inferences_only验证删base只连带删derived独立记录independent仍可被检索到。决策五解释即证据引用——相似性不等于因果explainlib.rs把有界查询向量与最近的本租户历史比较返回结构AnomalyExplanation精确认证的分区partition与生成时间generated_at_ms按 RuVector 距离排序的matches: VecSearchMatch每条含record_id、distance、原始uncertainty、evidence_grade、provenance_digest与可选witness_digest克制而坦诚的basis文案源码中固定为nearest bounded semantic records in the same authenticated tenant/workspace; similarity is not causation——接口不暴露向量本身也不编造因果性解释。解释基准确立了权限边界历史提供上下文而非权威。一条解释不能授权动作、不能提升证书等级、不能替代策略决策该约束由 ADR-321 的ruview-policy执行。测试explanation_is_bounded_and_preserves_evidence断言解释携带的仍是写入时的L1证据等级且basis必须包含 not causation。验证矩阵从安全语义到密码学故障注入ADR-326 的 Validation 段与 crate 内联测试一一对应lib.rs 测试模块dev-dependencies 使用tempfile威胁 / 需求对应测试跨租户/跨 workspace 最近邻拒绝ann_is_physically_partitioned_before_search重复记录/消息复用、乱序、自引用/重复/缺失父、provenance 替换replay_sequence_and_derivation_fail_closed过期、保留期删除、整分区删除、封口往返、篡改拒绝、错误密钥拒绝、密钥轮换expiry_cascades_to_derived_records_and_erasure_is_exact、record_erasure_cascades_to_dependent_inferences_only、encrypted_snapshot_rejects_tamper_wrong_key_and_overwrite、key_rotation_writes_new_generation_and_preserves_source解释引用与保留证据/provenance 标签explanation_is_bounded_and_preserves_evidence密码学测试直接对密文文件做单字节翻转翻转最后一个字节随后任何密钥都只能得到InvalidEnvelope用错误密钥加载返回InvalidEnvelope而非区分性错误避免帮助攻击者探测重复save_new到同一路径返回AlreadyExists。证据纪律贯穿始终ADR 明确声明本组件当前无检测质量或延迟声明除复现器显式标记为测量外测试证据一律为SYNTHETIC。文档同时记录了发布门槛现状——2026-08-19 聚焦的ruview-spatial-memorycrate 测试套件通过SYNTHETIC 证据全 workspace 的 Windows 门禁曾是非终止态并行时编译器崩溃、串行时超时因此 Linux CI、RustSec 公告扫描与包审查仍是发布门槛。被否决的替代方案与其教训方案否决理由单个全局 HNSW 事后过滤排序本身就已跨越租户边界过滤无法撤销排名泄漏云端向量记忆作为默认在本地解释并不需要的情况下无谓扩大隐私与凭据边界ADR 同时说明云 Cognitum 不会收到本地加密记忆文件明文 JSONL 持久化租户空间历史即使排除原始感知仍属敏感必须以认证加密落盘在 v2 架构中的位置与进一步阅读实现 cratev2/crates/ruview-spatial-memory/src/lib.rs 与 Cargo.toml声明式描述 Tenant-scoped encrypted RuVector spatial memory for Cognitum Spaces父决策ADR-325 定义了 OAuth 激活、(org_id, workspace_id)认证绑定与无反馈洗白上游规则租户身份来自 v2/crates/ruview-auth/src/principal.rs 等认证路径配套设计脉络长期空间记忆基线ADR-312 语义v2/crates/ruview-memory/src/lib.rs 是独立的 SYNTHETIC/L0 学习模型与本文的租户检索记忆职责不同、见证链 ADR-319v2/crates/ruview-witness、治理交换 ADR-325workspace 登记见 v2/Cargo.toml 中 ADR-300 phase 3 依赖波注释。对本组件而言安全是类型、算法与密码学三者的合力类型上拒绝承载敏感字段算法上保证租户分区先于一切 ANN 计算密码学上保证静态快照经过认证加密、具备显式密钥 ID 与回读验证的轮换语义——这正是 ADR-326 在 RuView 隐私与多租户安全体系中的完整定位。【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻