c28c1655a4
评审修复(4 项 Important + 8 项 Minor): - DB 事务化:site→connection→snapshots 全部落库包进 db.transaction 单事务 ("任何失败零落库"字面成立);助手改收 Pick<select|insert|execute> 结构类型 (tx 与直连 db 通用)。并发撞唯一约束不在事务内补查(语句失败后续查 25P02), 改为 registerSource 层事务级重试(≤3 次,第二次 select 命中复用分支) - connection 并发:select-then-insert 无约束可兜底,事务内 pg_advisory_xact_lock (siteId:name) 串行化同键登记(kind 枚举扩展推迟 REST 通道,注释注明) - storageRoot 绝对路径固化进每条 snapshot metadata 与报告 inputs(快照不可变, 事后无法补写——永久缺口封堵) - ensureSite 返回 created;RegisterResult.siteCreated;CLI 站点已存在时提示 --name/--locale/--origin 未生效 - 媒体复制期逐文件 sha 复核(copyAndHash 对拍清单,源中途变更 → COPY_FAILED) - 空媒体目录拒绝(EMPTY_MEDIA_DIR) - CLI:PATH_NOT_ALLOWED 追加 --allow 提示;--origin 经 new URL 校验(http/s)、 --locale 语言标签形状校验,fail fast;开跑打印生效白名单(审计) - makeRunId 服务导出、CLI 复用;.tmp 残留手工清理策略写入文件头注释 - 测试 +2:并发同输入恰好一组行/双方同 id/新建标志恰一(3 次重跑稳定); isUniqueViolation 形状单测(drizzle cause.code / 裸 code / 其他) 全套 263 绿;typecheck / lint 绿;CLI 冒烟对临时库验证事务路径、siteCreated 输出、defaults 落库(en-US / https://qa.example)、白名单打印与校验报错 Co-Authored-By: Claude Code <noreply@anthropic.com>