数据库与迁移规范
Managed Schema 从单一 descriptor 和 Catalog 派生当前物理清单:392 张受管表、备份 payload 391 张、ACCESS EXCLUSIVE 锁目标 392 张。迁移 Journal 当前包含 74 个不可变 SQL(0000_full_system 至 0073_digital_asset_das_001_008),不是业务完成度指标。
migration_ledger 进入 managed/锁定/指纹合同,payload 固定为空,恢复 preserve;auth_session payload 固定为空;backup_manifest 不递归进入 payload 且 preserve。Record Kernel 继续使用 record_core、record_revision、feature_execution;0010 只追加可空 revision module、memory_text_entry_v2、record_migration_operation 和 maintenance_state,不复制或切换业务数据。
Batch 004 的 0010 继续保持 Expand-only:只追加 record_revision.module_code 可空边界、memory_text_entry_v2、record_migration_operation 与 maintenance_state,不执行旧业务数据 UPDATE/DELETE/COPY/DROP,也不切换 MEM-001 或运行主链。
普通数据库写入通过持久化维护状态与 shared transaction advisory lock 失败关闭;维护激活把数据库操作互斥锁、active 状态、exclusive 排空锁和 operation 的 PostgreSQL 排空证据放在同一外层事务,超时、台账冲突或证据失败都会整体回滚。Capture 长流程使用 session shared lease,避免在 Provider 或长计算期间持有长数据库事务。
Batch 005R 已实现 Catalog 固定的 24 模块/72 来源表映射、版本化 canonical JSON、七类 reconciliation、Planning/Frozen Preflight、只复制 legacy_only 的 Copy、响应丢失精确重放和新事务独立 Verify。Frozen/Copy/Verify 会在数据库事务内复核 running operation、maintenance owner 与 PostgreSQL drain proof,并按固定顺序取得来源/目标表锁;台账只保存计数和 SHA-256,不保存业务正文。
迁移阶段仍固定为 preflight → maintenance → copy → verify → cutover → runtime_acceptance → completed。文档生成器不执行数据库迁移、Copy、Verify 或恢复演练;这些状态必须读取同一轮独立运行报告,不能从源码存在或本机工具可用性推导。
备份窗口分为 pre-cutover、migration-window 和 post-cutover。pre-cutover 在迁移 operation 尚未开始时,按 migration_ledger 最后一条 passed 记录绑定历史 schema generation;因此待迁移数据库可以安全导出当时实际存在的表,而不会伪造当前 Journal 最新清单。migration-window/post-cutover 仍必须绑定当前完整 schema、running/passed operation 与 active/inactive maintenance。
0000_full_system 至 0073_digital_asset_das_001_008 后列合同状态为 已验证(Two independent PostgreSQL 16 Testcontainers after migrations 0000-0073 on 2026-08-29)。未在 PostgreSQL 16 一次性环境重新测量列指纹前,备份创建与恢复失败关闭;静态列数 5062 不能冒充真实物理合同。payload v4 记录 schema generation、managed-schema 版本、列/约束 fingerprint 和 migration_ledger 的源物理 schema fingerprint,后者由三者共同重算绑定。
恢复仍依赖目标数据库中的 backup_manifest、SHA-256、不可变迁移前缀和历史 ledger target fingerprint;post-cutover 还依赖源迁移 operation 已在目标数据库中保留为 passed/completed。运维事实表不从 payload 恢复,历史 pre-cutover 恢复只把迁移后新增表保持为空;0035 前快照保留当前授权控制面并只补入无角色禁用用户。
真实 PostgreSQL Runner 按 Journal 顺序、LF 归一化 SHA-256、managed 清单和 advisory lock 失败关闭;迁移 SQL 与 passed 在同一事务提交,既有库 baseline 必须通过表、列和约束 fingerprint。pg-mem 不伪造 PostgreSQL lock、排空证明或恢复合同。