Compare commits

...
Author SHA1 Message Date
weichen ca9b128f18 Document the storage-migrate tool and the switch/drill runbook (U4)
Why: U4 ships the managed migration entry; the runbook is the operator-facing contract for inventory/backup/migrate, migration identity and resume rules, verification semantics, and the authorized-window switch sequence.

Evidence: backend branch feature/collab-storage-u4-migrator - integration tests green against real PostgreSQL (idempotent rerun, resume, foreign-data refusal, wrong-snapshot refusal, unknown-owner block).

Impact: docs only.

Refs: proposals/2026-10-11-collaboration-storage-and-distribution.md U4 and section 6.
2026-10-11 08:29:38 +00:00
weichen 5ac58dcd7e Merge pull request 'Document the execution budget settings and the KTD13 action-authz compat plan' (#64) from feature/collab-storage-u3-budget-authz into main 2026-10-11 05:16:45 +00:00
+42
View File
@@ -154,3 +154,45 @@ EXT-8 的 `ProjectAuthz` 公开契约(新增 action 参数的变体接口 +
下游适配器按动作逐一声明能力;未声明动作保持默认拒绝,与宿主侧矩阵同语义。
旧 bool 契约在该版本内继续可用(映射为仅 read);Core/Host 与下游适配器
(RDM 的 ProjectAuthz 实现)一起验收,不另建成员权威。
## 10. SQLite → PostgreSQL 切换与恢复演练(U4 已实施)
工具:`make build` 产出 `bin/storage-migrate`(受管迁移入口;只处理 Backend 库,
不执行 SQLite dump 作为 PG SQL)。三个子命令:
```bash
# 1) 只读盘点:schema 版本、完整性、逐表计数、工件清单与哈希(§6.1)
storage-migrate inventory --source runtime/dev/data/agent-system.db \
--artifacts runtime/dev/data/artifacts --out inv.json
# 2) 一致性快照:VACUUM INTO(在线安全含 WAL)+ 可打开校验 + 逐表计数对账(§6.2)
storage-migrate backup --source runtime/dev/data/agent-system.db --out snap.db
# 3) 受管迁移:目标建 schema/扩展后按行复制;身份登记 + 逐表校验和 + 终验(§6.3)
storage-migrate migrate --source snap.db --target "$DSN" \
--migration-id <名> --artifacts runtime/dev/data/artifacts --out report.json
```
迁移身份与续传:`migration_id + source_snapshot_id(快照 SHA-256)+
source_schema_version` 登记在目标 `migration_control`;**仅同一冻结快照可续传**
(换快照/换身份均拒绝);目标业务表已有数据而身份为空即拒绝(不覆盖)。
校验与报告:逐表源/目标计数与主键序哈希链校验和(布尔列按目标 schema 对称
归一);复制后推进 SERIAL 序列;未知 owner(users 之外,''/'local' 单租户默认
除外)阻塞迁移;报告只含计数/校验和/清单哈希——无 DSN、密钥与行正文(KTD14)。
类型映射以目标 schema 为准(SQLite 0/1→BOOLEAN、BLOB→BYTEA、生成列不迁、
FTS5 影子表不迁——PG 侧生成列与索引自动重建);`admission_leases` 为运行态
不随迁。
### 切换顺序(正式窗口须另行授权;当前仅隔离演练已验证)
1. 固定源制品与路径,`inventory` 盘点;指定迁移 owner、窗口、回退判据。
2. `backup` 冻结快照(活跃 WAL 库不得只拷 `.db` 文件)。
3. 预演:独立测试目标 PG 上 `migrate`,核对报告全绿;预演库不作为正式目标。
4. 正式窗口:停新写 → 等待/收口在途 run(未知副作用记 recovery hold)→
停旧写者 → 终快照 → 空正式目标 `migrate` → 报告全绿。
5. 单入口切 team 档冒烟(登录/项目/会话/审批/检索/下载);fail-closed 不回 SQLite。
6. **PG 接受新写入前**可撤回;**之后**禁直切回旧 SQLite(向前修复或专项回迁)。
备份基线(正式目标启用后):pg_dump 逻辑备份 + pg_basebackup 物理基础备份与
WAL 归档/PITR;pg_dump 不能作 WAL 回放基础。每次演练恢复到新目标并核对。