安全与备份架构

以 Git 为中心的完整保存方案 · 三层防护 · 六步安全上传 · Bloodbound 项目核心规范

一 · 核心理念

「保存」= Git 上传

在 Bloodbound 项目中,「保存」就是 Git 上传。不存在单独的「保存按钮」, 每一次点击「Git 上传」按钮,都会经过三层安全机制,确保代码和内容不会丢失。

为什么以 Git 为中心?

  • 可追溯 每次上传都有提交记录,知道谁在什么时候改了什么
  • 可回滚 任何时候都可以回到之前的任意版本
  • 可协作 多人同时工作不冲突,各自提交自动合并
  • 异地容灾 远程 Gitee 仓库 + 本地自动备份 = 双保险

三层安全防护

🟣 第一层 · 本地自动备份
时机:每次 Git push 之前自动触发,无论 push 成功与否
内容:完整项目快照(canvas、screenplay、content、references、根配置文件)
位置:archive/backups/auto/ · 保留最近 20 个
特点:独立于 Git,即使 Git 仓库损坏,备份也不受影响
🔵 第二层 · Git 本地仓库
时机:commit 后,文件变更记录在 .git 目录中
内容:所有代码和文档的变更历史
特点:支持任意版本回滚、分支、对比差异
位置:.git/ · 项目根目录下
🟢 第三层 · Gitee 远程仓库
时机:push 成功后,代码同步到云端
内容:与本地仓库完全一致
特点:异地容灾,多设备同步,团队协作

理念总结

本地备份保底 → Git 记录历史 → 远程仓库容灾。
这不是三个独立的工具。而是一个以 Git 为纽带串联的完整保存链条

二 · 六步安全上传流程

每次点击「Git 上传」按钮,后端自动执行以下六步。每一步都有独立的成功/失败状态和耗时记录。

流程图

┌─ ① 本地备份 ──────────────────────────────────────────┐ │ backup.create_backup() │ │ → archive/backups/auto/push-YYYYMMDD_HHMMSS/ │ │ → 备份 canvas/screenplay/content/references + 根文件 │ │ → 写入 manifest.json(文件清单 + git 状态) │ │ → 轮转旧备份(保留最近 20 个) │ └────────────────────────────────────────────────────────┘ │ 耗时:~1-3s(取决于文件数量) ┌─ ② 文档日志 ──────────────────────────────────────────┐ │ 自动追加会话记录到 canvas/session-log.json │ │ → 有摘要时写入内容,无摘要时自动生成 Git 自动上传记录 │ │ → 插入数组头部,记录时间+来源+模型+内容 │ └────────────────────────────────────────────────────────┘ │ 耗时:< 100ms ┌─ ③ git add -A ───────────────────────────────────────┐ │ 暂存所有变更文件 │ │ → CRLF 行尾警告自动过滤 │ │ → 超时 30s,超时后自动清理 index.lock │ └────────────────────────────────────────────────────────┘ │ 耗时:~1s ┌─ ④ git commit ───────────────────────────────────────┐ │ 提交变更,生成历史记录 │ │ → 提交信息:自动备份 YYYY-MM-DD HH:MM │ │ → 无变更时自动跳过 │ │ → 超时 120s,超时后自动清理 index.lock │ └────────────────────────────────────────────────────────┘ │ 耗时:~2s(无 hook 时) ┌─ ⑤ git push origin master ───────────────────────────┐ │ 推送到 Gitee 远程仓库 │ │ → 首次推送自动设置 upstream │ │ → 无变更时跳过 │ │ → 超时 120s │ └────────────────────────────────────────────────────────┘ │ 耗时:~3-15s(取决于网络) ┌─ ⑥ 远程同步提醒 ─────────────────────────────────────┐ │ 推送成功后自动检查是否有其他服务器需要同步 │ │ → 返回需同步的服务器列表 + git pull 命令 │ │ → 前端展示提醒行(青色高亮),告知用户手动同步 │ │ → 已知服务器:192.168.1.98:8080(NAS 192.168.1.3 备用)│ │ → 无变更或失败时自动跳过 │ └────────────────────────────────────────────────────────┘ │ 耗时:< 1ms(前端展示) ✓ 六步全部完成 · 总计耗时约 10-30 秒

每一步的状态显示

前端模态框实时显示六步状态:

步骤 图标 状态 说明
本地备份运行中正在复制文件到备份目录
本地备份完成234 文件 (12.5 MB) · push-20260703_091200
文档日志完成自动记录 · 累计 36 次
git add完成ok (234ms)
git commit完成[master abc1234] 自动备份 2026-07-03 09:12 (456ms)
git push完成master -> master (2341ms)
git push失败rejected: non-fast-forward · 参见故障处理
远程同步提醒提醒需手动同步: 192.168.1.3:8080 (NAS备用) · git pull origin master
远程同步提醒无需无其他服务器需同步

三 · 现有保存方案整合

以下是 Bloodbound 项目中所有与「保存」相关的机制,它们都被整合在以 Git 为中心的架构中:

本地备份 backup.py
独立 Python 脚本,可命令行手动调用。Git push 前自动触发。
备份范围:canvas/screenplay/content/references + 根文件
保留策略:最近 20 个自动轮转
Git 上传 server.py + 前端
六步安全流程的后端引擎。前端一键触发,后端依次执行备份→日志→add→commit→push,并返回同步提醒。
每个步骤独立计时、独立报错、独立可重试。
会话日志 session-log.json
记录每次 AI 会话的日期、时间、来源、模型、工作内容。
上传时自动追加一条记录。首页「积分消耗」卡片统计消耗总量。
规范文档 上传规范 + 架构
Git 上传操作说明(upload-spec.html)+ 本安全架构文档(safety-backup-arch.html)。
覆盖完整流程、错误速查、回滚步骤。

整合关系

用户点击「Git 上传」 [ backup.py ] ──── 创建本地副本 → archive/backups/auto/ [ session-log.json ] ──── 追加会话记录 [ git add → commit → push ] ──── 推送到 Gitee [ 前端展示 ] ──── 六步结果 + 同步提醒 + 耗时统计 + 详细输出

四 · 故障恢复方案

故障矩阵

故障类型 影响 恢复方案
备份失败 缺少本地安全网,但不影响后续步骤 手动运行 python scripts/backup.py
日志写入失败 仅影响会话历史记录,不影响代码保存 不影响,可忽略。下次上传会重新尝试
git add 失败 文件未暂存,后续步骤无法进行(但备份已完成) 检查 .git/index.lock,删除后重试
git commit 失败 变更未提交,但备份已完成 检查 pre-commit 钩子,手动提交或跳过钩子
git push 失败 远程未同步,但本地备份+commit 都已完成 检查网络/Gitee 状态,pull 后重推
服务未启动 完全无法上传 双击 scripts/server/启动服务器.bat

关键原则

  • 备份优先 备份是第一步,即使后续所有步骤失败,备份也已存在。这是最底线的安全保障。
  • 独立失败 每一步独立报错。备份失败不影响 add,add 失败不影响之前的备份。
  • 可恢复 任何一步失败都可以单独重试。重试会重新走完整流程(包括创建新备份)。

紧急回滚

# 场景:push 后发现严重错误,需要回退 # 方案 A:从本地备份恢复(最安全) cp -r archive/backups/auto/push-YYYYMMDD_HHMMSS/canvas/* canvas/ # 然后用 Git 上传按钮重新推送 # 方案 B:Git 回滚(保留历史) git revert HEAD # 创建一个反向提交来撤销 git push origin master # 方案 C:Git 硬回滚(丢弃历史,慎用) git reset --hard HEAD~1 # 回退到上一版本 git push --force origin master # 强制覆盖远程

五 · 架构文件索引

核心 safety-backup-arch.html
本文档。安全与备份的核心架构说明。以 Git 为中心的三层防护 + 六步上传流程。
操作 upload-spec.html
Git 上传操作规范。一键上传说明、常见错误速查、回滚步骤、安全注意事项。
规范 version-control-spec.html
版本管理规范。commit 规范、分支策略、session-log.json 格式定义。
代码 backup.py
本地备份系统源码。scripts/backup.py · 支持命令行和 API 调用。
代码 server.py
HTTP 服务器,包含六步上传的后端逻辑。scripts/server/server.py
数据 session-log.json
AI 会话日志。每次上传自动追加记录。canvas/session-log.json