# Reasonix Worker A:SQLite control-plane store 骨架 Project root: `/mnt/Data1T/mnote` 你不是独自在代码库中工作。其他 worker 可能并行修改 auth、access policy 或迁移脚本。不要还原、覆盖或清理不属于你任务范围的改动。不要提交 git。 ## 背景 上位设计稿: `design/02-convex-rust-long-term-architecture/process/2-8-convex-replace-with-rust-sqlite-control-plane-v1.md` 目标是用 Rust + SQLite 完全替换 Convex 控制面。你的任务只负责 SQLite store 骨架,不接运行时 route。 ## Ownership 允许修改: - 优先新增 `rust/crates/control-plane/**` - 必要时修改 `rust/Cargo.toml` - 必要时新增/修改 `rust/crates/mnote-web/Cargo.toml` 仅用于依赖引用建议 禁止修改: - `rust/crates/mnote-web/src/routes/gateway.rs` - `rust/crates/mnote-web/src/routes/local_folder_source.rs` - `rust/crates/mnote-web/src/routes/session.rs` - `rust/crates/mnote-web/src/ssr/**` - `infra/convex/**` - `.env*` 如果发现 workspace crate 接入风险过大,先实现为可编译独立 crate;不要跨模块硬接 runtime。 ## 任务 1. 新增 `control-plane` Rust crate 或等价最小模块,优先独立 crate。 2. 定义核心 model 与 `ControlPlaneStore` trait。 3. 实现 `SqliteControlPlaneStore`,支持临时路径 DB。 4. 实现 migration v1,包含至少: - `users` - `auth_identities` - `auth_sessions` - `workspaces` - `workspace_members` - `directory_grants` - `share_links` - `sync_state` - `ai_policies` - `audit_log` - `outbox_events` - `legacy_id_map` 5. 实现最小 CRUD: - upsert user - create/get session - ensure default workspace - grant/revoke directory access - append/drain outbox 6. 补单测:migration 幂等、默认 workspace、owner grant、outbox drain。 ## 验收命令 优先运行: ```bash cargo test --manifest-path rust/Cargo.toml -p control-plane -- --nocapture cargo fmt --check --all ``` 如果没有新增独立 crate,而是放入 mnote-web: ```bash cargo test --manifest-path rust/Cargo.toml -p mnote-web control_plane -- --nocapture cargo fmt --check --all ``` ## 最终回复格式 请列出: - 修改文件 - 新增表和核心 API - 实际运行过的命令及结果 - 未完成项/风险