Skip to content

feat(storage): align per-window KV storage with ref - #532

Open
MFSGA wants to merge 7 commits into
masterfrom
codex/ref-kv-storage-sync
Open

MFSGA wants to merge 7 commits into
masterfrom
codex/ref-kv-storage-sync

Conversation

@MFSGA

@MFSGA MFSGA commented Oct 26, 2026 •

Copy link
Copy Markdown
Owner

目标与变更范围

把窗口级 KV 存储按本地 ref 的 revision 模型对齐,保证每个窗口共用一个状态源,并防止并发读写和事件通知乱序。保留 legacy UI 及其旧事件适配。

非目标:不迁移持久化格式,不移除旧消费者,不改网络、Service、TUN 或权限行为。

基线及 ref 对齐记录

  • 目标分支当前基线:master 6317cad35bfd94c4257bc3b0a172f331bc924853(已包含 PR feat(traffic): align Flow topology with ref Sankey #533)。
  • ref 上游 main 与本地只读工作区均为 03ab6e5824cb44e527bde7cca28b699e8bf3a766,工作区干净;本 PR 将 Chimera 的 ref gitlink 更新到该 SHA。
  • ref backend/tauri/src/core/storage.rs 的 revision、事件和 lag resync 模型,以及 ipc.rs 的读/写/删命令,对齐到 Chimera 同路径;ref frontend/query/src/provider/{kv-storage-state.ts,kv-storage-provider.tsx} 和 hooks/use-kv-storage.ts 对齐到 Chimera frontend/interface/src/provider/ 与同名 hook。
  • 必要边界差异:Tauri command/Specta bindings 替代 ref RPC wrapper;保留旧 tuple 事件、旧 getStorageItem 返回形状及 legacy 消费端。没有复制 ref 的 HTTP SSE 服务端,因为 Chimera 没有对应事件总线。Agent 当前没有 KV hook 消费端。
  • 兼容桥仅位于旧消费者边界;迁移 legacy 消费者到共享 hook 后再单独移除。

用户入口及业务调用链

Main Dashboard 和 legacy UI 共用 RootProvider 的 per-window 状态与 useKvStorage,经 Tauri IPC 进入同一 Rust Storage/Redb 实例;提交事件带单调 revision,消费者遇到广播 lag 时重读快照。Agent 当前没有 KV hook 使用入口。

风险等级与回滚

  • 风险:L2,共享持久化接口、IPC 返回值及事件顺序变化。
  • 回滚:revert 本 PR;旧事件和 persisted keys 均保留。
  • 不改系统网络、Service/TUN 或权限。

实际验证(精确到当前 head)

当前 head:944b24f21751c664bf50e645bbf754c8ca2909c3,基线为 master 6317cad35bfd94c4257bc3b0a172f331bc924853。新增修复提交 7f62f261251cbd42ef97354e44899c9417f4c1cb 与基线同步提交均由 GitHub 标记为 verified。

检查 实际结果 限制
pnpm --filter chimera-ui test:dashboard-widget-config 本机通过 22/22 包含 legacy namespaced-event 回归与 KV/UI 测试
pnpm typecheck:chimera、E2E typecheck、pnpm lint:frontend-boundaries、受影响 TS Oxlint、Prettier、Tauri crate rustfmt、git diff --check 本机通过 本批改动
Rust storage 回归 removing_a_namespaced_value_also_removes_its_legacy_fallback 1/1;ipc::tests 16/16 通过 macOS,外接构建目录;同一代码树的测试二进制
提交钩子 pnpm typecheck:chimera、pnpm lint:clippy、rustfmt、Oxlint 和 Prettier 全通过 提交 7f62f261
CI run 40422919747 pending 当前 head
Desktop E2E run 40422919746 pending 当前 head;旧 SHA 的 E2E 结果不作为本次证明

独立 Reviewer

独立复核已检查 ref 映射、事件适配、fallback allowlist、原子删除、内部键保护及测试注册;当前差异未发现 P0–P2 阻塞。已记录的限制:clear_storage 仍是既有的快照加逐键删除流程,并非并发原子清空。

合并门禁

必需多平台 CI 与 Desktop E2E 必须针对当前 head 944b24f21751c664bf50e645bbf754c8ca2909c3 通过后再合并;当前两组工作流仍 pending。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant