From 7658051321189c6ac4222dbde0062d695334cfd5 Mon Sep 17 00:00:00 2001 From: shunli Date: Sun, 26 Jul 2026 20:58:12 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=B0=E5=BD=95=E7=9C=9F=E5=AE=9E=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E6=81=A2=E5=A4=8D=E5=8F=AA=E8=AF=BB=E5=9F=BA=E7=BA=BF?= =?UTF-8?q?=EF=BC=8807-26-internal-ops-recovery-baseline=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../implement.md | 3 +- .../prd.md | 8 +++ .../research/live-read-only-baseline.md | 71 +++++++++++++++++++ .../task.json | 2 +- 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 .trellis/tasks/07-26-internal-ops-recovery-baseline/research/live-read-only-baseline.md diff --git a/.trellis/tasks/07-26-internal-ops-recovery-baseline/implement.md b/.trellis/tasks/07-26-internal-ops-recovery-baseline/implement.md index 8379b011..527b5bbb 100644 --- a/.trellis/tasks/07-26-internal-ops-recovery-baseline/implement.md +++ b/.trellis/tasks/07-26-internal-ops-recovery-baseline/implement.md @@ -9,7 +9,8 @@ - [x] 增加隔离合成数据演练,覆盖成功往返及关键负向场景。 - [x] 更新 runbook/checklist 和部署规约,区分普通备份、影子演练和真实事故恢复。 - [x] 运行任务测试计划和 Trellis 治理门禁;按实际结果记录本地 RTO,不伪造 `/ready` 或异机证据。 -- [ ] 在单独授权后再执行真实运行来源、职责分离、异机副本和 `/ready` 验收。 +- [x] 在单独授权后完成真实运行来源、职责分离、异机副本和 `/ready` 的只读核查,并如实记录 `NO_GO` 缺口。 +- [ ] 经后续明确授权完成提交发布、成对异机备份、真实职责分配、部署/迁移和真实格式影子恢复后复验。 ## 推荐文件边界 diff --git a/.trellis/tasks/07-26-internal-ops-recovery-baseline/prd.md b/.trellis/tasks/07-26-internal-ops-recovery-baseline/prd.md index a49e8a96..95691519 100644 --- a/.trellis/tasks/07-26-internal-ops-recovery-baseline/prd.md +++ b/.trellis/tasks/07-26-internal-ops-recovery-baseline/prd.md @@ -70,6 +70,14 @@ - 演练覆盖 manifest/校验和、错误确认、正式风格库名、损坏 DB、损坏 tar、非空附件目录、默认试运行附件目录和危险 tar 路径拒绝。 - 该证据不包含真实业务数据、真实运行实例、异机副本或部署后 `/ready`,因此最后一项验收保持未完成。 +## Live Read-Only Evidence + +- 获批只读核查结果见 `research/live-read-only-baseline.md`,结论为 `NO_GO_FOR_FORMAL_INTERNAL_USE`。 +- 公开 HTTPS、TLS、HSTS 和 `/ready` 当前可用,但运行环境没有后端/前端构建标识,且远端迁移少于本地当前基线。 +- 真实角色只有一个活跃账号,财务和付款复核候选均为 0,不满足 maker-checker。 +- 历史 DB/附件备份约 55 天未更新、无 manifest,且与运行数据位于同一设备;不能证明 RPO、异机副本或可恢复性。 +- 当前本地提交尚未进入 upstream;未执行生产备份、角色修改、部署、迁移或恢复,因此最后一项验收继续保持未勾选。 + ## Notes - Keep `prd.md` focused on requirements, constraints, and acceptance criteria. diff --git a/.trellis/tasks/07-26-internal-ops-recovery-baseline/research/live-read-only-baseline.md b/.trellis/tasks/07-26-internal-ops-recovery-baseline/research/live-read-only-baseline.md new file mode 100644 index 00000000..d5b93de0 --- /dev/null +++ b/.trellis/tasks/07-26-internal-ops-recovery-baseline/research/live-read-only-baseline.md @@ -0,0 +1,71 @@ +# 真实内部实例只读基线 + +## 边界 + +- 核查日期:2026-07-26。 +- 已获得只读核查授权。 +- 未修改远程文件、环境变量、数据库、角色、容器、反向代理或企微配置;未执行备份、恢复、部署和业务写入。 +- 证据只记录布尔值、数量、时间和短构建标识状态,不保存主机名、IP、SSH 别名、Secret、连接串、账号标识或业务正文。 + +## 公开入口 + +| 检查 | 结果 | 判断 | +| --- | --- | --- | +| HTTPS 首页 | `200` | 可访问 | +| TLS 证书 | 存在,截止 2026-10-19 | 当前有效,需纳入到期提醒 | +| HSTS | 存在 | 通过 | +| CSP | 未发现 | 非本批 P0,但公网继续使用时列入后续安全任务 | +| `/ready` | `data.ok=true` | 当前进程与基础依赖可用 | +| `/ready` 构建标识 | 缺失 | 无法由公开接口追溯运行 commit | + +## 运行来源与迁移 + +| 检查 | 结果 | 判断 | +| --- | --- | --- | +| 容器 | server/db 正在运行,容器内 `/ready=true` | 运行中 | +| 运行端口 | 仍使用历史宿主端口基线 | 与当前 Compose 基线不一致 | +| `BUILD_SHA` | 容器未配置 | 无法证明运行来源 | +| 前端 build marker | 缺失 | 无法从静态资源证明运行来源 | +| Prisma migration | 远端已应用 58,本地当前 61;最新项不匹配 | 远端落后,禁止直接宣称当前版本已部署 | +| 本地来源门禁 | `commit_not_in_upstream` | 当前本地提交尚未进入 upstream,标准部署前必须先发布提交 | + +## 角色和付款职责 + +只读聚合结果: + +- 活跃员工账号:1。 +- 活跃角色只有 `admin` 和 `employee`,属于同一账号的组合。 +- 财务处理角色数量:0。 +- `manager`/`ceo` 付款复核候选数量:0。 +- 可形成不同自然人的制单/复核组合:否。 +- 远端旧 schema 尚无当前 `system_admin` 角色值。 + +结论:当前真实角色配置不满足付款 maker-checker,也不满足“系统管理员与业务审批职责分开”的当前规约。不得启用真实付款闭环。 + +## 备份和恢复 + +| 检查 | 结果 | 判断 | +| --- | --- | --- | +| DB dump | 7 份 | 有历史产物 | +| 附件 tar | 7 份 | 数量上可配对,但无 manifest 证明批次关系 | +| manifest | 0 | 不符合新成对备份合同 | +| 最新产物年龄 | 约 1316 小时(约 55 天) | 明显过期 | +| 备份介质 | 与 DB 数据和附件目录位于同一设备 | 不构成异机/异盘副本 | +| 目录权限 | `755` | 备份目录可读范围偏宽,后续应按运维账号收紧 | +| 真实恢复证据 | 无 | 本地 6 秒合成演练不能替代真实格式影子恢复和 `/ready` | + +结论:当前历史备份不能证明满足 RPO 24 小时、异机副本或可恢复性,不得作为正式启用依据。 + +## Go / No-Go + +结论:`NO_GO_FOR_FORMAL_INTERNAL_USE`。 + +服务当前可访问不等于运行与恢复底线通过。进入下一步前必须按顺序完成: + +1. 将当前获批代码提交进入 upstream,确保部署来源门禁可通过。 +2. 在任何部署前,用新成对备份合同生成 DB + 附件 + manifest,并复制到异机/异盘。 +3. 明确至少一名财务处理人和另一名 `manager`/`ceo` 付款复核人;系统管理职责单独分配,应急 `admin` 独立托管。 +4. 通过获批部署任务升级代码和 3 项迁移,验证 `BUILD_SHA`、前端 marker、`/ready`、权限矩阵和回滚点。 +5. 在独立影子目标恢复同一批次 DB/附件,验证应用 `/ready` 和关键附件引用,记录真实 RPO/RTO。 + +以上动作分别涉及发布、远程备份、真实角色写入、部署和影子恢复,必须继续取得明确授权,不能由本次只读批准推导。 diff --git a/.trellis/tasks/07-26-internal-ops-recovery-baseline/task.json b/.trellis/tasks/07-26-internal-ops-recovery-baseline/task.json index 5a90976e..0ba4f383 100644 --- a/.trellis/tasks/07-26-internal-ops-recovery-baseline/task.json +++ b/.trellis/tasks/07-26-internal-ops-recovery-baseline/task.json @@ -32,6 +32,6 @@ "server/README.md", ".trellis/spec/hyb-oa/deployment-trialrun.md" ], - "notes": "本地阶段完成:成对备份、脱敏 manifest、影子库/空目录恢复门禁和合成数据演练已通过,最近本地参考 RTO 6 秒;真实运行来源、职责分离、异机副本和部署后 /ready 仍待单独授权。", + "notes": "本地安全基线已提交;获批真实环境只读核查结论 NO_GO:运行 commit 不可追溯、迁移落后、无财务/复核职责分离、备份约55天且同设备无manifest。提交发布、成对异机备份、角色写入、部署/迁移和影子恢复仍需另行授权。", "meta": {} }