Lock the three-layer contract, no tenant_id, union-deny delete, and scratch-only recover before storage work. Co-authored-by: Cursor <cursoragent@cursor.com>
1.5 KiB
1.5 KiB
ADR:最终成果保险库(FAV)
状态
已接受(2026-09-14,落地计划 V0–V6)
背景
运行库 PostgreSQL 与 workspace 投影会一起丢失或错挂。需要独立保存已确认终态的精确字节,但不能成为第三套完整业务真相源,也不能用目录扫描猜测“最终文件”。
决策
- 三层权威:PostgreSQL 管项目/权限/工作流/版本关系;workspace 是可清理投影;FAV 只对已归档 payload、manifest、来源证据和删除状态权威。
- 无 tenant_id:安全边界沿用
environment + project_members + role-admin。未来组织层另立 ADR。 - 事件准入:只接受方案准入表中的数据库事实。显式 publish/pin 不能绕过终态 allowlist。禁止扫描 workspace。
- 同事务冻结:终态事务把精确 payload/SHA 写入 staging 并写 unpublished outbox;publisher 不得重读可变消息行。
- union-deny 删除:运行库删除账本或 vault tombstone 任一侧删除即拒绝读取/恢复。
- 恢复:只进 scratch 库,默认
recover-as-collection。禁止 GET 自动写回或覆盖现有 head。 - 互补:FAV、migration corpus、完整 DB backup/PITR 互相不能替代。不作为 409/split-brain 绕行。
后果
- 实现从
feature/final-artifact-vault推进;mutex=artifact-vault。 - Goose 从 00034 增加 FAV 表(00033 已被 task-run 治理占用)。
- 降级读取默认关闭(
FAV_DEGRADED_READ),Unit A 纠挂完成前不得对现网开启。