记录Claude生产复核结论(07-28-claude-production-review-verification)

这个提交包含在:
2026-07-28 15:35:35 +08:00
父节点 eaa2dc0ff3
当前提交 ac0abafc0e
共修改 5 个文件,包含 154 行新增和 0 行删除
@@ -0,0 +1 @@
{"_example": "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. Put spec/research files only — no code paths. Run `python3 .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."}
@@ -0,0 +1 @@
{"_example": "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. Put spec/research files only — no code paths. Run `python3 .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."}
@@ -0,0 +1,22 @@
# Claude生产复核结论只读核验:执行记录
## 1. 只读核验
- [x] 核验 02:30/07:10 稳定类别、当前 runtime identity、timer 状态和恢复点新鲜度。
- [x] 静态确认 `deploy.sh` 不自动刷新 automatic-backup/WARCH3 units。
- [x] 核验 workspace 历史提交、删除、远端可达性、忽略规则和敏感值模式计数。
- [x] 核验 CEO fallback 白名单、默认值、active 非本人持有人、自审阻断和常量复用。
- [x] 核验企微免密自动绑定的服务端、事务冲突、审计、稳定错误码和前端提示。
- [x] 聚合核验生产成功登录、企微登录、binding、session、杨俊主管和报销状态。
## 2. 验证
- [x] 5 个聚焦 Vitest 文件、73 项测试通过。
- [x] 全部生产命令为只读;未安装 timer、未改配置/数据、未发企微、未创建单据。
- [x] task validate、Trellis governance、敏感内容、流程合同、文档注册和 Git 差异检查全部收口;文档审计仅保留既有 22 项 warning。
## 3. 输出边界
- 只记录计数、布尔值、稳定类别、短构建号和相对时间。
- 不记录完整账号、userid、邮箱、手机号、宿主路径、Secret、日志原文或 payload。
- 工程改进只列为后续任务,不在本任务实施。
@@ -0,0 +1,96 @@
# Claude生产复核结论只读核验
## Goal
以仓库历史、当前生产只读状态和两个既有 Trellis task 为证据,逐项核验 Claude 的复核结论,区分“当前事实”“历史事实”“合理建议”和“需要另行批准的改进”,避免因时间点或指标口径不同误判真实登录、备份风险和当前业务阻断。
## Background
- Claude 认为 02:30 自动备份因附件宿主挂载身份不匹配而失败,守卫按设计拒绝错误备份;并建议把备份 unit 刷新并入部署收尾。
- Claude 认为个人 Trellis workspace 曾被提交后删除,但历史仍可取得;内容扫描风险低,不建议改写 Git 历史。
- Claude 认为 CEO `finance` fallback 与企微免登实现正确。
- Claude 认为截至其检查时没有任何真实登录,两个既有任务的真机验收和杨俊真实报销仍未完成,因此下一步应暂停新开发、先让马建勇真机登录,再让杨俊提交。
## Scope
- 自动备份历史失败、当前 runtime identity、恢复点新鲜度和标准部署脚本的 unit 刷新能力。
- 两个 Trellis workspace 历史提交及当前忽略规则。
- CEO `finance` fallback 与企微首次免密绑定的代码、测试和生产只读状态。
- active 账户成功登录统计、企微真机覆盖、杨俊主管链和真实报销状态。
## Requirements
- 只读核验自动备份最近一次 02:30 失败的稳定类别、运行身份差异、最近成功恢复点年龄,以及当前 unit 与活动 Compose/PGDATA/附件/构建身份是否已经一致。
- 静态核验标准部署脚本是否会自动刷新自动备份 units;区分“当前已经人工刷新”与“未来部署仍可能再次漂移”。
- 核验 `0d58ff1`、`0551212` 和 `.trellis/.gitignore`,只对相关历史 blob 做敏感模式扫描,不输出 workspace 原文。
- 核验 R-5 `finance` fallback 的白名单、active 非本人持有人、自审阻断、默认规则与常量单一来源。
- 核验企微首次免密绑定的服务端映射错误码与前端提示,不把前端文案修正误判为完整后端实现来源。
- 以生产只读数据和既有任务证据核验真实企微/OA 登录次数、人员范围、杨俊报销状态及未勾选验收项;明确证据时间,避免把“此前为 0”写成“当前仍为 0”。
- 最终给出按优先级排序的行动建议,但不安装 timer、不修改部署脚本、不改任务勾选、不写生产数据、不创建报销、不发送企微消息。
## Acceptance Criteria
- [x] 每一项 Claude 结论均标记为“确认 / 部分确认 / 已过时 / 不成立”,并附不泄密的证据来源。
- [x] 明确当前自动备份数据风险、最近成功点、unit 当前一致性和 deploy 自动刷新缺口是否同时成立。
- [x] 明确真实登录的统计口径及当前计数,不以 task checkbox 单独代替生产证据。
- [x] 明确杨俊真实报销是否已提交,以及 CEO fallback 是否位于其直接阻断路径。
- [x] 给出一个最小下一步,区分立即人工操作与后续需要新 Trellis task 的工程改进。
- [x] 全程零生产写入、零企微写入、零真实业务单据创建,聊天和任务文件不出现 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 身份比较与按需刷新收敛进标准部署收尾;本只读任务不实施该改动。
@@ -0,0 +1,34 @@
{
"id": "claude-production-review-verification",
"name": "claude-production-review-verification",
"title": "Claude生产复核结论只读核验",
"description": "只读核验Claude对自动备份、Trellis历史、CEO财务兜底、企微免登和真实登录/报销状态的复核结论。",
"status": "in_progress",
"dev_type": null,
"scope": "只读核验自动备份、Git历史、审批fallback、企微免登和真实登录/报销状态",
"package": null,
"priority": "P2",
"creator": "shunli",
"assignee": "shunli",
"createdAt": "2026-07-28",
"completedAt": null,
"branch": null,
"base_branch": "main",
"worktree_path": null,
"commit": null,
"pr_url": null,
"subtasks": [],
"children": [],
"parent": null,
"relatedFiles": [
"deploy/trialrun/deploy.sh",
"server/src/utils/workflow.js",
"server/src/routes/approvalRules.js",
"server/src/routes/wecomAuth.js",
"server/src/services/integrations/wecomLoginAutoBinding.js",
".trellis/tasks/07-27-yang-jun-reimbursement-readiness/prd.md",
".trellis/tasks/07-28-all-account-login-readiness/prd.md"
],
"notes": "只读核验完成:Claude关于历史备份失败、Git历史、CEO fallback和企微后端能力的主体判断成立;无人登录已过时,杨俊尚未企微首登或提交报销。",
"meta": {}
}