完善借款、编号、付款与预算并发及验收(09-06-release-gate-integrity)
汇总已落盘的借款本金与还款、兼容历史编号的周期化编号、付款责任与回单核验、报销进度和排序、PWA/采购事务、错误原因与日期校验及ERP退役。 统一共享预算池锁序和锁后判断,恢复差旅原预算选择,补原因码固定夹具及反向完整性检查。 纳入配套迁移、测试、受管QA、分层验收合同、规约及任务记录;原始证据留在ignored artifacts。 关联任务:09-17-company-loan-principal-repayment、09-17-erp-exclusive-retirement、09-18-reimbursement-periodic-numbering、09-08-reimbursement-payment-closeout、09-18-local-concurrency-product-fixes、09-19-budget-pool-concurrency、09-05-error-explainability-payment-readiness。 预算补审由Claude定向验证2文件928项通过,原4446/28及r6结果仍仅对应各自历史输入;本轮未重跑测试。 完整新候选门禁、R1真实入口接入与12项公网义务仍开放。生产编号未启用、差旅仍冻结;不推送、不部署,不宣称发布资格。
这个提交包含在:
@@ -1,5 +1,46 @@
|
||||
# 隔离备份恢复演练
|
||||
|
||||
## 2026-09-19 K0 独立静态复核与范围澄清
|
||||
|
||||
K0 加解密合成合同经 Claude 定向静态复核 PASS,未新增运行时或真实恢复结果。它不覆盖 `maskBankAccount`、`maskIdNumber`、`maskKeepEnds` 的脱敏正确性,不能作为“敏感字段完整闸门”引用;本轮不扩建脱敏测试或修改产品函数。
|
||||
|
||||
`server/src/scripts/migrate-notification-channel-secrets.js` 会读取配置、连接目标数据库并批量改写通知渠道密钥字段;它属于数据迁移工具,明确排除在 K0 以及 K1/K2 的默认执行范围之外,不得为恢复验证运行或导入该入口。未来 K2 若选择通知类加密字段,只按另批绑定方案只读验证适用密文;无适用样本记 NOT_TESTED。迁移、轮换、明文回写或真实通知均需独立方案与明确授权,不由恢复批准附带取得。
|
||||
|
||||
## 2026-09-17 原密钥保管与敏感恢复后续规划
|
||||
|
||||
本增量的K0本地合同检查与合成验证已于本日另获批准并完成;K1/K2仍仅规划,原受限演练已经结束且不可重跑。目标从“追查密钥何时生成”改为“原密钥是否有受控保管及能否恢复对应敏感字段”;来源UNKNOWN可以继续如实记录,不能用生成新密钥替代原密钥或把格式合法等同于高熵来源已证实。
|
||||
|
||||
范围分三段:K0仅本地源码/环境分类合同与合成密文验证;K1另批后只核实际保管可用性;K2再绑定具体新鲜源、制品、隔离目标及受限原密钥注入方案并另批实际恢复。已有环境恢复分类与双角色保管规约复用,不新建密钥平台、不将.env装进普通数据备份。
|
||||
|
||||
新增验收(不替代原AC4/AC5):
|
||||
- [x] K0:本地缺密钥、错误密钥、篡改密文均停止;正确合成密钥成功,输出不含密钥/密钥摘要/密文/明文或原始异常,生产未访问。30项定向测试及7类合成检查通过;只证明本地合同,不证明真实密钥或数据可恢复。
|
||||
- [ ] K1:管理员与公司责任人均有受控取用原密钥的渠道,非仅依赖原主机或单人记忆;记录角色/渠道类别/验证时间/可用状态,不保存值或保管位置细节。
|
||||
- [ ] K2:在另批的隔离范围验证选定备份中实际存在的加密字段,原密钥匹配、适用字段解密检查和清理分列有据;没有适用密文时记NOT_TESTED,不拿合成通过替代。
|
||||
|
||||
任何保管、原密钥取用/转移、真实备份读取和恢复均非本次K0授权。无法安全取得原密钥时停止真实验证,报告影响与待批方案,不读取shell历史、不索要聊天明文、不擅自轮换。实际执行方案必须重新独立只读复核;本次主会话检查不计为独立复核。
|
||||
|
||||
## 2026-09-17 本次受限演练实际结果
|
||||
|
||||
已获批准的一次R3绑定恢复于01:33Z完成:DB及影子认证只读应用PASS;附件62引用中仅精确已接受历史缺件1、未知不一致0;清理及源/生产/监控后验PASS。整体PARTIAL_KNOWN_MISSING_AND_SENSITIVE_DECRYPTION_NOT_TESTED,RPO7小时2分52秒。原始全量附件标准及完整计时指标未因此豁免,敏感字段解密未验;本次无需再执行,task保留未覆盖范围,不自动归档。详情与三摘要绑定证据见implement最新节。
|
||||
|
||||
## 2026-09-17 单条历史缺件例外(已批准)
|
||||
|
||||
本日后续另获固定b1d25d3c源码的ARM64镜像构建批准,仅构建及元数据验证,不部署、不启动应用、不恢复、不读生产密钥。匹配制品已构建不代表R3独立复核或最终恢复源绑定完成,详见design/implement最新节;其他版本/范围不自动授权。
|
||||
|
||||
用户批准按design的精确身份/七类零关联条件修订验收、测试并独立复核后再执行一次受限恢复。本增量仅允许将指定历史缺件作为已接受但仍未恢复的事实,逐项报告原始不一致数、已接受数、未知数;其他缺件/大小/摘要/路径异常仍阻断,不能把任意归档件排除。原R2与NO_GO不改,最终最高结论保留历史缺件及解密未验的PARTIAL。生产零写入、资源/网络/清理边界不变。
|
||||
|
||||
09-15旧源现已超过24小时,禁止重用旧入口或放宽新鲜度;先完成本地修订和只读选源事实,实际重跑必须重新绑定新鲜源与同来源镜像并经复核。源/平台/风险实质变化时说明差异,未解决之前不生成可执行入口。当前批准不授权任意镜像构建、生产密钥读取或新备份写入。
|
||||
|
||||
## 2026-09-16 配对恢复规划增量(当前优先合同)
|
||||
|
||||
关联09-08总任务P1/P2/P3。先读取08-28的新自然备份/异机完整性事实,再冻结单次演练输入;本轮只更新规划,没有恢复授权。优先ARM最新合格正式日归档,不把09-15固定8d历史方案或09-16生产同机手工备份当默认源;若需使用后者,必须另外明确向ARM复制的范围并重新核源副本。未知/超龄/损坏不得静默换源。
|
||||
|
||||
恢复覆盖分为DB_RESTORE、STORAGE_REFERENCES、APP_READONLY三个独立结果;下文旧“不启动OA server”仅属于最初数据恢复阶段,本增量允许将匹配应用的一次性启动纳入拟申请范围,但未批准之前不启动。应用镜像必须绑定源build并核平台;生产镜像能归档不代表在ARM可运行,不默认仿真或随意换最新镜像。
|
||||
|
||||
应用只读验收的访问身份、字段解密能力、禁后台任务/外联配置必须先可证明安全。临时登录/数据库凭据只用于隔离环境且不得复用生产.env;若恢复数据的密钥不可安全提供或身份条件不满足,则记录APP_BLOCKED或APP_PARTIAL及原因,不用随机替换业务加密密钥、仅/ready成功或DB PASS代替全应用可恢复。密钥来源未知与是否获批安全使用为不同问题,不要求用户把值发给代理。
|
||||
|
||||
本task只有三项实际验收与清理/生产无影响证据齐全才可宣布本次配对演练完成;是否符合业务RTO另按预先确认的目标判断,不能仅因记录了耗时就认定满足SLA。历史缺失附件保留原引用,不在恢复演练中代做生产治理或删除。
|
||||
|
||||
## Goal
|
||||
|
||||
在不覆盖、不暂停腾讯云生产 OA 的前提下,使用 ARM 备份机上最新的完整异机批次完成一次数据库与附件的隔离影子恢复,证明“备份存在”进一步达到“最新成对数据备份可恢复”,并记录实测数据恢复 RTO、RPO 和脱敏证据。
|
||||
@@ -61,13 +102,13 @@
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [ ] AC1:ARM 最新正式日批次通过文件集、manifest、字节数和 SHA-256 校验,来源构建是当前构建的祖先或相同,且实测 RPO 不超过 24 小时;是否已形成当前构建同源恢复点单独记录。
|
||||
- [ ] AC2:腾讯云生产在演练前后 `/ready` 均正常,生产容器、数据库、附件、配置、timer 和业务数据零写入、零重启、零切换。
|
||||
- [ ] AC3:一次性 PostgreSQL 16 影子库无宿主端口,数据库恢复成功;恢复 migration 集合与 manifest 来源提交一致且无失败/未知项,来源与当前 migration 差异已明确;固定 12 类关键表均可读并形成仅含数量的脱敏摘要。
|
||||
- [x] AC1:ARM 最新正式日批次通过文件集、manifest、字节数和 SHA-256 校验,来源构建是当前构建的祖先或相同,且实测 RPO 不超过 24 小时;是否已形成当前构建同源恢复点单独记录。
|
||||
- [x] AC2:腾讯云生产在演练前后 `/ready` 均正常,本次操作对生产容器、数据库、附件、配置、timer 和业务数据零写入、零重启、零切换。
|
||||
- [x] AC3:一次性 PostgreSQL 16 影子库无宿主端口,数据库恢复成功;恢复 migration 集合与 manifest 来源提交一致且无失败/未知项,来源与当前 migration 差异已明确;固定 12 类关键表均可读并形成仅含数量的脱敏摘要。
|
||||
- [ ] AC4:附件安全恢复成功,归档与解包普通文件数一致;所有纳入范围的本地附件引用均安全且存在,适用的哈希/大小核对无不一致。
|
||||
- [ ] AC5:记录本轮数据恢复 RTO、RPO、同源恢复点可用滞后、开始/结束时间、失败点或 finding、Go/Pause/No-Go 结论;即使恢复未开始也保留已观测空窗,不把任何指标表述为完整应用灾备 RTO 或 SLA。
|
||||
- [ ] AC6:演练结束后本轮容器、端口、网络和临时数据全部清理,ARM 正式归档与现有 dead-man/健康监控不受影响。
|
||||
- [ ] AC7:任务校验、Trellis 治理、流程合同、文档审计、敏感扫描和 `git diff --check` 通过;证据不含敏感信息。
|
||||
- [x] AC6:演练结束后本轮容器、端口、网络和临时数据全部清理,ARM 正式归档与现有 dead-man/健康监控不受影响。
|
||||
- [x] AC7:任务校验、Trellis 治理、流程合同、文档审计、敏感扫描和 `git diff --check` 通过;证据不含敏感信息。
|
||||
|
||||
## Out of Scope
|
||||
|
||||
@@ -79,7 +120,7 @@
|
||||
|
||||
## Blocking Open Questions
|
||||
|
||||
- 无。构建门禁已裁决为“来源提交是当前构建祖先或相同 + 批次年龄不超过 24 小时”;实施仍需用户审阅本次修订后的最终规划摘要并再次明确批准。
|
||||
- 本次受限演练已批准并完成,入口已消费,不再申请同范围重跑。完整密钥保管/敏感解密恢复、历史缺件及完整计时覆盖仍按顶部结果保留;未来新增实质恢复范围需另行规划,不复用本次单次授权。
|
||||
|
||||
## Test Plan
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户