8.4 KiB
8.4 KiB
Claude生产复核结论只读核验
Goal
以仓库历史、当前生产只读状态和两个既有 Trellis task 为证据,逐项核验 Claude 的复核结论,区分“当前事实”“历史事实”“合理建议”和“需要另行批准的改进”,避免因时间点或指标口径不同误判真实登录、备份风险和当前业务阻断。
Background
- Claude 认为 02:30 自动备份因附件宿主挂载身份不匹配而失败,守卫按设计拒绝错误备份;并建议把备份 unit 刷新并入部署收尾。
- Claude 认为个人 Trellis workspace 曾被提交后删除,但历史仍可取得;内容扫描风险低,不建议改写 Git 历史。
- Claude 认为 CEO
financefallback 与企微免登实现正确。 - Claude 认为截至其检查时没有任何真实登录,两个既有任务的真机验收和杨俊真实报销仍未完成,因此下一步应暂停新开发、先让马建勇真机登录,再让杨俊提交。
Scope
- 自动备份历史失败、当前 runtime identity、恢复点新鲜度和标准部署脚本的 unit 刷新能力。
- 两个 Trellis workspace 历史提交及当前忽略规则。
- CEO
financefallback 与企微首次免密绑定的代码、测试和生产只读状态。 - active 账户成功登录统计、企微真机覆盖、杨俊主管链和真实报销状态。
Requirements
- 只读核验自动备份最近一次 02:30 失败的稳定类别、运行身份差异、最近成功恢复点年龄,以及当前 unit 与活动 Compose/PGDATA/附件/构建身份是否已经一致。
- 静态核验标准部署脚本是否会自动刷新自动备份 units;区分“当前已经人工刷新”与“未来部署仍可能再次漂移”。
- 核验
0d58ff1、0551212和.trellis/.gitignore,只对相关历史 blob 做敏感模式扫描,不输出 workspace 原文。 - 核验 R-5
financefallback 的白名单、active 非本人持有人、自审阻断、默认规则与常量单一来源。 - 核验企微首次免密绑定的服务端映射错误码与前端提示,不把前端文案修正误判为完整后端实现来源。
- 以生产只读数据和既有任务证据核验真实企微/OA 登录次数、人员范围、杨俊报销状态及未勾选验收项;明确证据时间,避免把“此前为 0”写成“当前仍为 0”。
- 最终给出按优先级排序的行动建议,但不安装 timer、不修改部署脚本、不改任务勾选、不写生产数据、不创建报销、不发送企微消息。
Acceptance Criteria
- 每一项 Claude 结论均标记为“确认 / 部分确认 / 已过时 / 不成立”,并附不泄密的证据来源。
- 明确当前自动备份数据风险、最近成功点、unit 当前一致性和 deploy 自动刷新缺口是否同时成立。
- 明确真实登录的统计口径及当前计数,不以 task checkbox 单独代替生产证据。
- 明确杨俊真实报销是否已提交,以及 CEO fallback 是否位于其直接阻断路径。
- 给出一个最小下一步,区分立即人工操作与后续需要新 Trellis task 的工程改进。
- 全程零生产写入、零企微写入、零真实业务单据创建,聊天和任务文件不出现 Secret、完整账号或原始 payload。
Test Plan
- 用 systemd、Docker inspect 和本地备份状态文件做生产只读身份矩阵;只输出布尔值、计数、短构建号和相对时间。
- 用 Git object/history 检查 workspace 提交与删除,并只报告敏感模式计数。
- 静态检查 workflow、approval rules、seed、企微路由/服务/前端提示并运行聚焦 Vitest。
- 用生产 PostgreSQL 聚合查询成功认证审计、binding、active session、目标员工主管链和报销计数。
- 运行 task validate、Trellis governance、敏感内容、流程合同、文档注册和
git diff --check。
Out of Scope
- 自动修复或重装备份 units。
- 修改
deploy.sh、认证、审批或前端代码。 - 代替马建勇、杨俊或其他员工完成真机登录与真实报销。
- 改写 Git 历史清除已确认低风险的 workspace 提交。
Technical Notes
- 本任务不需要架构设计;因治理脚本将跨部署、认证和审批核验判定为复杂任务,补充
implement.md记录只读执行顺序和门禁。 - 生产查询只输出计数、布尔值、稳定类别、短构建号和相对时间,不输出人员完整账号、完整远端路径或审计原文。
Review Results(2026-07-28)
1. 自动备份
- 确认:02:30 的稳定类别为
phase_runtime_identity_failed,唯一身份漂移是附件宿主挂载;07:10 的phase_stale_check_failed是同一 runtime identity 预检失败,不是第二个归档损坏。runner 在数据库 dump、附件归档和传输前失败关闭。 - 已过时:unit 仍绑定旧附件路径的说法只描述故障时点。当前唯一 server/db、Compose project、PGDATA、附件挂载和四个 service 的构建身份均一致;三项自动备份 timer 与 WARCH3 timer 均 enabled/active。
- 部分确认:最近成功点在 Claude 核验时约 11 小时;本次复核时约 8.1 小时且仍在 24/26 小时窗口内,但恢复点属于上一构建。当前数据新鲜度风险低,构建差异按合同是 finding,不是备份失败。
- 确认:
deploy/trialrun/deploy.sh没有调用自动备份或 WARCH3 安装器。规约已要求部署后比较并按需刷新,但标准脚本没有自动执行,未来部署仍可能再次漂移。
2. Trellis workspace Git 历史
- 确认:
0d58ff1新增两份 workspace 文件共 394 行,0551212删除;原提交已被远端分支包含,因此删除不等于从 Git 历史清除。 - 确认:对原提交 blob 做值形态扫描,凭证赋值、完整企微机器人地址、邮箱、手机号、私钥和银行卡样式均为 0;不建议为低风险内容改写共享历史。
- 确认:
.trellis/.gitignore当前已忽略workspace/。
3. CEO finance fallback
- 确认:
finance与finance_mgr共用OWNER_SELF_FALLBACK_ROLE_CODES,路由不再重复定义白名单;新规则默认 fallback 为finance,三档 seed 的财务节点和 fallback 均为finance。 - 确认:fallback 只接受 active、未归档且非申请人本人的角色持有人;申请人本人持有 fallback 角色、无非本人持有人和不支持角色均失败关闭。
- 确认:生产三条 active 规则的 fallback 均为
finance,active finance 持有人唯一。相关 5 个测试文件共 73 项通过。 - 确认但非杨俊直接阻断:杨俊的直属主管是 active CEO,
ceo具备expense.approve;CEO fallback 解决的是 CEO 本人申请且无主管时的链路。
4. 企微首次免密绑定
- 确认:服务端普通 OAuth 登录先走已有 binding;缺失时按精确 userid 或唯一企业邮箱匹配 active OA 员工,在事务中复核双向冲突、创建 binding、写脱敏审计并创建会话;冲突或 inactive 均失败关闭。
- 确认:服务端输出
account_mapping_required、account_mapping_conflict、account_mapping_inactive,前端分别展示对应提示。 - 不成立:
9b12451“只有前端改动”的说法不成立。该提交同时修改后端路由并新增自动绑定服务及后端测试;“后端能力确实存在”的最终结论成立。
5. 真实登录与杨俊报销
- 已过时:“当前没有任何人登录过”。生产口径为成功认证审计:6 个 active 账户、6 个 active binding,累计 12 次成功登录事件、3 个 active 登录人;其中企微成功 1 人,且该人是管理员,最近一次约 3.3 小时前。当前另有 1 个 active 会话人、2 个 active session。
- 部分确认:其余人员的企微真机验收仍未完成。生产企微成功登录仅 1 人、非管理员为 0;两个既有 task 的全员/目标员工验收项仍未勾选。
- 确认:杨俊 active 且 binding 唯一,但企微成功登录为 0;其名下真实报销总数和非草稿数均为 0。生产当前也没有任何报销单。
Recommended Next Step
立即人工操作只做一件事:请马建勇本人从企微工作台进入 OA。若成功,再请杨俊本人进入并提交真实报销;若失败,只记录页面稳定提示,不连续试错。后续工程改进另建 Trellis task,把部署后的 unit 身份比较与按需刷新收敛进标准部署收尾;本只读任务不实施该改动。