VectorSet lifecycle, replication, and compatibility gate
Primary Issue: #421
规划状态
这是一个 planning-only 提案,不解除当前 SDD 对 VectorSet 的 frozen 状态,也不授权直接修改生产源码。当前项目仍以 main@688d905fec31b54aec76f36676f55efd8b5cfa17 为实时基线;WP0 尚未完成 exact-main verification,VectorSet 仍是当前非目标。
背景与动机
PR #356 为 standalone Kiwi 增加了 VectorSet 命令,但最新评审暴露出跨层合同尚未闭合的问题。现有 Issue #418 只跟踪 VectorSet 的 known differences 与 Redis Oracle differential CI,不能作为完整 VectorSet 生命周期、迁移恢复、资源边界和集群门禁的 primary Issue。
本提案将这些问题收敛为一个独立的 VectorSet 工作包,避免以“补几条 review comment”的方式绕过 SDD 控制面。工作包只有在治理链、依赖工作包和全部验收证据完成后,才可以请求解除 VectorSet frozen 状态。
范围
治理链 :建立 SDD 工作包、primary Issue、正式 REQ-VECTOR-* 需求、设计/实现计划、依赖关系和 exact-ref 验收证据;实现 PR 只能使用 Refs,全部 required acceptance 通过后才允许使用 Closes。
RocksDB 生命周期与迁移 :定义 Vector CF、manifest、format version、generation、删除/过期/重建、compaction 和 snapshot/reopen 的一致合同;legacy → Head 升级必须有可恢复的迁移状态机。推荐采用 staged directory + 原子切换:先在独立目录完成 CF/manifest 迁移和校验,持久化切换标记,再切换目录并保留可验证的旧目录回滚点;任何中断都必须能明确继续、回滚或 fail closed。
VSIM 一致性 :ELE 查询向量读取与成员扫描必须属于同一个存储一致性视图。优先在 Storage 层合并为一次受控调用并持有同一 snapshot;若 API 生命周期不允许暴露 snapshot,则使用同一 key 的读锁覆盖准备和扫描,并由 VADD/VREM/DEL/重建使用写锁。不得用未经校验的 generation 作为唯一补丁。
资源 admission :在网络 runtime 将 argv 深拷贝到 storage runtime 之前,对所有消费 element/vector payload 的命令执行无分配 admission,统一覆盖 VADD、VSIM key ELE member、VEMB、VREM、VISMEMBER,并验证超限请求不会进入 storage 执行入口。
兼容性与测试隔离 :RESP2/RESP3 测试使用独立、明确协议的客户端;零向量分别覆盖 RESP2 array 和 RESP3 map;VectorSet manifest、raw differential、skip 记录和 trusted Oracle 路径必须闭合。Issue tracking: register vector-set known differences and trusted-oracle differential CI #418 作为 related/child 继续跟踪差异登记和 Oracle job。
安全与 CI :rkyv advisory 豁免必须配套 feature-graph sentinel,rkyv@0.7.46 一旦进入实际 resolve/feature graph 即使 CI 失败;新增 required Linux cluster gate,显式安装 grpcurl、构建当前 binary、设置 KIWI_RUN_CLUSTER_TESTS=1,并将 zero collected/skipped 视为失败。该 gate 只证明 cluster fail-closed,不开启 Raft Vector mutation。
非目标
不在本提案中实现源码、提交 PR、修改当前生产命令表或解除 cluster unsupported gate。
不实现 Embedded Redis Hot Tier、HNSW/IVF、Q8/BIN、VEMB RAW、Multi-Raft、跨 Slot 原子性或 2PC。
不将 Redis-derived 源码、动态 loader 或 redis-rs 引入生产 server 依赖。
不把当前 PR feat: add Redis Vector Set support #356 的局部绿色测试当作生命周期、迁移回滚、Raft replay 或 M6 stability 证据。
提议的需求合同
以下编号在 SDD 控制面正式接纳前只是本工作包提议,不能被实现 PR 当作已授权需求:
REQ-VECTOR-001:VectorSet 的 persisted generation、DEL/VREM-last、TTL、同名重建、compaction 和 reopen 在所有 read/scan/recreate 路径上保持旧代不可见。
REQ-VECTOR-002:VectorSet 的逻辑 mutation、binlog、Raft apply、snapshot/replay 和 cluster fail-closed 合同必须可验证;VSIM 结果必须对应单一一致性视图。
REQ-VECTOR-003:VectorSet public behavior 以 Redis 8.8.1 exact commit 为 Oracle,RESP2/RESP3 raw frame、error precedence、known difference 和 skip 都有可复现证据。
REQ-VECTOR-004:Vector CF/manifest/schema migration 在创建 CF、写 manifest、切换目录和进程重启的每个故障窗口都能继续、回滚或 fail closed;旧 Base 对未完成迁移的行为有实测证明。
REQ-VECTOR-005:Vector payload 在跨 runtime copy 前完成 bounded admission,安全豁免随实际 feature graph 失效,cluster fail-closed contract 由 required CI 真实执行。
既有需求映射:REQ-COMPAT-001..007、REQ-STORAGE-001..006、REQ-RAFT-001/002/005/008、REQ-STABILITY-002/003、REQ-OBS-001/002、REQ-WORK-005..007。正式接纳时必须把提议编号加入 .planning/REQUIREMENTS.md,并由 SDD validator 维护唯一注册和引用闭包。
依赖与关联
验收标准
SDD 中存在唯一、可解析的 WP8 条目,状态为 proposed/frozen,且明确 primary Issue、正式 REQ、依赖、scope、non-goals、acceptance 和 verification;在批准前不改变 current work package。
设计审查给出 manifest/generation、同一 snapshot/锁、迁移切换、跨 runtime admission 和 cluster gate 的状态机与失败语义。
设计计划列出真实源码、测试、manifest、CI 和文档文件,并将每个 P1 review finding 映射到一个独立可验证任务。
实现阶段必须有真实 non-empty legacy Base → Head interruption after CF creation → Head retry → Base reopen/read 矩阵;不得只依赖删除 CF 的人工 fixture。
实现阶段必须有带确定性 barrier 的 VSIM 与 VADD/VREM/DEL+recreate 并发测试,并证明结果对应一个合法串行时刻。
实现阶段必须有 TCP/网络入口的超限 admission 测试、RESP2/RESP3 隔离测试、rkyv feature sentinel 和 required cluster gate;skip/zero collection 均失败。
解除 frozen 前,所有 required VectorSet compatibility、lifecycle、recovery、cluster 和 M6 相关 P0/P1 风险均有 exact-ref evidence,且不再存在未登记的 known difference 或静默 skip。
下一步
本提案的 primary Issue 已创建为 #421 。下一步由维护者确认 WP8 是否接纳、正式需求编号是否写入 SDD 控制面、以及是否需要为 migration、admission/安全和 CI 基础设施拆分 child Issue。接纳前只维护规划材料,不在 PR #356 分支继续实现。
VectorSet lifecycle, replication, and compatibility gate
Primary Issue: #421
规划状态
这是一个 planning-only 提案,不解除当前 SDD 对 VectorSet 的 frozen 状态,也不授权直接修改生产源码。当前项目仍以
main@688d905fec31b54aec76f36676f55efd8b5cfa17为实时基线;WP0 尚未完成 exact-main verification,VectorSet 仍是当前非目标。背景与动机
PR #356 为 standalone Kiwi 增加了 VectorSet 命令,但最新评审暴露出跨层合同尚未闭合的问题。现有 Issue #418 只跟踪 VectorSet 的 known differences 与 Redis Oracle differential CI,不能作为完整 VectorSet 生命周期、迁移恢复、资源边界和集群门禁的 primary Issue。
本提案将这些问题收敛为一个独立的 VectorSet 工作包,避免以“补几条 review comment”的方式绕过 SDD 控制面。工作包只有在治理链、依赖工作包和全部验收证据完成后,才可以请求解除 VectorSet frozen 状态。
范围
REQ-VECTOR-*需求、设计/实现计划、依赖关系和 exact-ref 验收证据;实现 PR 只能使用Refs,全部 required acceptance 通过后才允许使用Closes。VADD、VSIM key ELE member、VEMB、VREM、VISMEMBER,并验证超限请求不会进入 storage 执行入口。rkyvadvisory 豁免必须配套 feature-graph sentinel,rkyv@0.7.46一旦进入实际 resolve/feature graph 即使 CI 失败;新增 required Linux cluster gate,显式安装grpcurl、构建当前 binary、设置KIWI_RUN_CLUSTER_TESTS=1,并将 zero collected/skipped 视为失败。该 gate 只证明 cluster fail-closed,不开启 Raft Vector mutation。非目标
redis-rs引入生产 server 依赖。提议的需求合同
以下编号在 SDD 控制面正式接纳前只是本工作包提议,不能被实现 PR 当作已授权需求:
REQ-VECTOR-001:VectorSet 的 persisted generation、DEL/VREM-last、TTL、同名重建、compaction 和 reopen 在所有 read/scan/recreate 路径上保持旧代不可见。REQ-VECTOR-002:VectorSet 的逻辑 mutation、binlog、Raft apply、snapshot/replay 和 cluster fail-closed 合同必须可验证;VSIM 结果必须对应单一一致性视图。REQ-VECTOR-003:VectorSet public behavior 以 Redis 8.8.1 exact commit 为 Oracle,RESP2/RESP3 raw frame、error precedence、known difference 和 skip 都有可复现证据。REQ-VECTOR-004:Vector CF/manifest/schema migration 在创建 CF、写 manifest、切换目录和进程重启的每个故障窗口都能继续、回滚或 fail closed;旧 Base 对未完成迁移的行为有实测证明。REQ-VECTOR-005:Vector payload 在跨 runtime copy 前完成 bounded admission,安全豁免随实际 feature graph 失效,cluster fail-closed contract 由 required CI 真实执行。既有需求映射:
REQ-COMPAT-001..007、REQ-STORAGE-001..006、REQ-RAFT-001/002/005/008、REQ-STABILITY-002/003、REQ-OBS-001/002、REQ-WORK-005..007。正式接纳时必须把提议编号加入.planning/REQUIREMENTS.md,并由 SDD validator 维护唯一注册和引用闭包。依赖与关联
验收标准
proposed/frozen,且明确 primary Issue、正式 REQ、依赖、scope、non-goals、acceptance 和 verification;在批准前不改变 current work package。下一步
本提案的 primary Issue 已创建为 #421。下一步由维护者确认 WP8 是否接纳、正式需求编号是否写入 SDD 控制面、以及是否需要为 migration、admission/安全和 CI 基础设施拆分 child Issue。接纳前只维护规划材料,不在 PR #356 分支继续实现。