文件
hyb-oa/.trellis/tasks/07-27-offhost-backup-final-fixes/implement.md
T
wangsli 01f1259557
ci-e2e / e2e (push) Waiting to run
ci-minimal / check-minimal (push) Waiting to run
修复异机备份凭证与中断恢复(07-27-offhost-backup-final-fixes)
2026-07-27 17:58:11 +08:00

4.3 KiB

异机备份最终收尾修复实施计划

实施步骤

  • 先扩展合成测试:记录 mock Docker argv 与继承环境,证明四条凭证路径不含合成密码/完整连接串且容器能收到 PGPASSWORD。
  • 修改 run-automatic-backup.sh,在隔离子 shell内导出成对备份变量后调用 capture_command,移除生产路径 env KEY=value argv。
  • 修改 backup-db.sh 和 restore-db.sh 三处 Docker 调用,使用前缀环境赋值配合无值 -e PGPASSWORD;不批量改写测试夹具。
  • 为 receiver 增加锁内 self-validation 与 orphan reconciliation helper,严格实现 design.md 的日归档和周检查点状态表。
  • 增加孤儿测试矩阵:明确恢复、明确清理、周点重建、非法类型/链接/重复候选/校验失败全量保留,以及 fail-closed 到源端状态的合成传播。
  • 更新 runbook 恢复卡标题和正文为单管理员口径;同步 .trellis/spec/hyb-oa/deployment-trialrun.md 的凭证 argv 与中断恢复稳定合同,不新建平行文档。
  • 运行聚焦与全量相关门禁,完成只读差异复核;不连接真实告警、不写 ARM/生产、不执行 migration。
  • 经用户确认后提交中文 commit;推送和生产/ARM 部署另行批准。
  • 部署验证完成后归档本任务,硬收口运维主线并返回产品 backlog;不得因本轮审查再新增运维加固 task。

预计文件边界

  • scripts/run-automatic-backup.sh
  • scripts/backup-db.sh
  • scripts/restore-db.sh
  • scripts/receive-offhost-backup.sh
  • scripts/qa/run-automatic-backup-contract.sh
  • 必要时扩展现有 scripts/qa/run-backup-restore-drill.sh 的 argv 断言,不新增平行 runner。
  • deploy/trialrun/runbook.md
  • .trellis/spec/hyb-oa/deployment-trialrun.md
  • 当前 Trellis task 三份规划/证据文件。

验证命令

  • bash -n scripts/run-automatic-backup.sh scripts/backup-db.sh scripts/restore-db.sh scripts/receive-offhost-backup.sh scripts/qa/run-automatic-backup-contract.sh scripts/qa/run-backup-restore-drill.sh
  • bash scripts/qa/run-automatic-backup-contract.sh
  • bash scripts/qa/run-backup-restore-drill.sh
  • node deploy/trialrun/validate-env-contract.js
  • python3 ./.trellis/scripts/task.py validate .trellis/tasks/07-27-offhost-backup-final-fixes
  • node scripts/qa/check-trellis-governance.mjs
  • node scripts/qa/check-sensitive-content.mjs
  • node scripts/qa/audit-docs.mjs --check-registry
  • node scripts/qa/check-process-contract.mjs --baseline --json
  • git diff --check

外部门禁与回滚点

  • 生产 Docker 无值 -e VAR 继承只读实测已完成;实施阶段不重复读取生产配置或凭证。
  • 推送当前 3 个未推送提交与本任务提交,需要提交完成后另行批准。
  • 更新生产自动备份脚本、ARM receiver、手工触发真实备份或复制恢复卡到 ARM,均需分别明确批准。
  • 生产部署前只读确认活动构建、62 项 migration、四组 timer 和最近成功状态;本任务没有 migration。
  • 任一 orphan 合成负例发生对象减少、正式恢复点丢失或歧义状态被自动选择,立即停止,不进入部署。
  • 回滚只回退本任务脚本/文档,不清理现场备份、partial、rollback 或已归档 task。

本地实施与验证证据(2026-07-27)

  • 凭证传递已覆盖 wrapper、nightly Docker 备份、Docker 影子确认和恢复;mock 捕获的 argv 不含合成连接串/口令,容器命令仍收到继承的 PGPASSWORD。
  • receiver 合同共 73 项通过。除原有同日取代、保留轮转、dead-man 和失败传播外,新增日/周孤儿恢复、重复/链接/损坏歧义 fail closed,以及“周 reconciliation 失败时日 rollback 不提前删除”的回归断言。
  • run-backup-restore-drill.sh 通过,隔离合成 RTO 为 9 秒;validate-env-contract.js 返回 [R26][PASS]。
  • shell 语法、task validate、Trellis governance、敏感内容扫描、文档注册审计、流程 baseline 和 git diff --check 均通过。文档审计仅报告仓库既有 22 个未注册 docs 文件警告,本任务未新增 docs 文件。
  • 只读复核发现并修复了“先删日 rollback、后重建周点”的顺序缺陷;稳定规则已同步到 deployment-trialrun.md。本地过程未连接真实企微、ARM 或生产,也未执行 migration。