diff --git a/backend/internal/repository/recovery_reconciliation_test.go b/backend/internal/repository/recovery_reconciliation_test.go index 64da9f3..d82a648 100644 --- a/backend/internal/repository/recovery_reconciliation_test.go +++ b/backend/internal/repository/recovery_reconciliation_test.go @@ -77,6 +77,12 @@ func seedUncertainReconciliation(t *testing.T, repo *SQLDeploymentTransactionRep if !errors.Is(err, deployment.ErrRecoveryActionUncertain) || source.Status != deployment.RecoveryResultUncertain { t.Fatalf("未形成真实执行器不确定结果:%+v %v", source, err) } + // 比较实际持久化的前后快照,不能把内存纳秒与数据库时间精度差异误判为历史改写。 + persisted, err := repo.GetRecoveryDisposition(t.Context(), source.Intent.ID) + if err != nil || !persisted.Intent.SameRequest(source.Intent) || persisted.Status != source.Status || persisted.ResultCode != source.ResultCode { + t.Fatal("原不确定处置未可靠持久化", err) + } + source = persisted client.failClosed, client.readOnly = false, true client.writes = 0 return service, client, server, record, source diff --git a/deploy/systemd/Scert-admin服务管理说明.md b/deploy/systemd/Scert-admin服务管理说明.md index 82b883f..7071eb0 100644 --- a/deploy/systemd/Scert-admin服务管理说明.md +++ b/deploy/systemd/Scert-admin服务管理说明.md @@ -38,7 +38,7 @@ systemctl stop Scert-admin ## 部署事务核查与人工处置 -主服务提供相应能力时,菜单还包含“只读核查部署事务”“人工处置部署事务”“查询人工处置结果”。 +主服务提供相应能力时,菜单还包含“只读核查部署事务”“人工处置部署事务”“查询人工处置结果”“重新核查不确定处置”。 - 只读核查不修改原事务、远端文件或锁。 - 人工处置先输入事务编号,再选择“仅记录核查”“完成提交”或“恢复基线”。终端展示服务器、阶段、动作、有效期和风险,必须完整输入确认文字后才提交。 @@ -46,6 +46,14 @@ systemctl stop Scert-admin - 提交前保留显示的处置编号。断连、超时或响应不明确时重新启动终端,选择“查询人工处置结果”,输入处置编号而不是事务编号。 - `running` 或 `uncertain` 不是成功。查询不会重放动作、释放占用或删除远端锁;不得手动删锁、重写历史证据或直接修改事务终态来绕过阻塞。 +## 重新核查不确定处置 + +选择菜单 `5`,输入已经结束并持久化为 `uncertain` 的原处置编号。原动作必须是提交或回滚,且原事务处于相应的已核验阶段。系统重新绑定服务器身份、历史记录和当前现场;不接受仍为 `running` 的处置,不因超时自动接管。 + +核对原编号、新核查编号、事务、服务器及原动作方向后,完整输入终端显示的确认文字。新核查只读远端文件,确认目标摘要正确、临时文件与备份及锁全部不存在、严格 HTTPS 和最终关闭均通过;不会重载服务、删除锁或重放原动作。成功后以新审计结束原事务并释放占用,原不确定记录永久保留。 + +核查拒绝或失败继续保留占用;审计不能可靠落盘时不报告成功。断连后只能通过菜单 `4` 按新核查编号查询。证据不足或现场不满足条件时不得手动补造历史基线、删占用或修改事务终态。 + ## 安全限制说明 systemd 无法阻止 root 或具备等效系统权限的操作者调用 `status`、`kill`、`restart`、`mask` 等管理命令。因此,本项目的可落地安全边界是: