# CEO 本人报销财务兜底实施计划 ## 1. Implementation - [x] 扩展后端 owner-self fallback 白名单为 `finance|finance_mgr`,创建默认值改为 `finance`。 - [x] 将三档种子默认规则统一为财务 `finance` 收口,保留大额 `ceo` 节点。 - [x] 更新前端 API 类型、创建/编辑选项、默认值和推荐文案;兼容展示 `finance_mgr`。 - [x] 更新工作流、规则 API、报销提交回归测试,覆盖 CEO 三档唯一 `finance`、普通员工链、自审、无持有人和 legacy `finance_mgr`。 - [x] 修正 `seed:config` 对既有审批规则的删除重建副作用;仅空库创建默认规则,生产既有规则保留到独立原子回填阶段。 - [x] 新增默认 dry-run、双确认 apply 的生产规则回填脚本;事务内锁定并校验三档规则、CEO/财务/admin/binding 基线,更新三条规则、写三条脱敏审计并复核受保护计数。 - [x] 生产 dry-run 发现原生 `audit_logs` 插入未携带 Prisma 客户端侧 UUID;事务已回滚。脚本已改为显式写入审计 UUID,并新增执行级回归覆盖三条审计 SQL 与 dry-run 回滚。 - [x] 更新当前业务事实源,区分目标、代码部署和生产规则回填状态。 ## 2. Local Validation - [x] `cd server && node --check src/utils/workflow.js && node --check src/routes/approvalRules.js && node --check src/scripts/seed-config.js && node --check src/scripts/apply-ceo-finance-fallback.js` - [x] `cd server && npx vitest run tests/unit/utils/workflow.test.js tests/unit/routes/approvalRules.permissions.test.js tests/unit/routes/reimbursements.expense-standards.test.js tests/unit/scripts/seed-config.defaults.test.js tests/unit/scripts/apply-ceo-finance-fallback.test.js`(58 项通过) - [x] `cd server && npm run prisma:validate` - [x] `cd client && npm run typecheck && npm run build` - [x] `node scripts/qa/check-process-contract.mjs --baseline --json` - [x] `node scripts/qa/audit-docs.mjs --check-registry`(0 error,保留既有 22 个未注册文档 warning) - [x] `python3 ./.trellis/scripts/task.py validate 07-28-ceo-finance-fallback` - [x] `node scripts/qa/check-trellis-governance.mjs && git diff --check` - [x] `bash scripts/check-minimal.sh`(167 个测试文件、1053 项后端测试、前端 build 与矩阵门禁通过) - [x] dry-run 缺陷修复后复跑 Prisma validate 与 5 个聚焦测试文件(59 项通过)。 ## 3. Review Gate - [x] 只读 review 权限白名单、自审阻断、普通员工链、历史快照不回写、API/UI 类型一致性和生产事务边界;发现并修复部署 seed 提前覆盖规则问题后复核无剩余阻断。 ## 4. Deployment And Production Apply - [x] 提交并推送已验证代码。 - [x] 修复部署脚本已知的数据目录保护缺陷:同步根目录与数据目录任一方向重叠时在 SSH 前阻断,自定义同步树内 `.env` 动态保护;隔离备份/恢复合同通过。 - [x] 部署后核对 `/ready` 构建号、migration 状态、runtime smoke、external deps smoke 和前端 bundle。 - [x] 生产只读冻结规则结构、active `finance`、CEO、角色、binding、历史快照和审计基线。 - [x] 原子更新恰好 3 条启用规则并逐条写脱敏审计;任一预条件漂移则零写入停止。 - [x] 只读解析 CEO 小/中/大额快照均为唯一 `finance`,普通员工链符合目标;不创建真实报销。 - [x] 复核无角色、主管、binding、历史快照或企微写入变化。 部署执行备注:`3594872` 首次部署通过,并将附件从同步树内迁至独立数据目录、保留校验一致的回退副本;首次生产 dry-run 因审计表 UUID 缺失失败并完整回滚。修复提交 `a74cba1` 随后部署,`/ready`、migration、runtime/external-deps smoke、92 个公网资源扫描通过;4 个自动运维 timer 已刷新运行身份。第二次 dry-run 为 `DRY_RUN_PASS`,apply 原子写入 3 条规则与 3 条脱敏审计,受保护计数稳定;只读解析 CEO 三档均为唯一 `finance`、普通员工链符合目标,0 条真实报销、0 次企微写入。 ## 5. Stop Conditions - 生产 active `finance` 不是唯一非 CEO 持有人,或目标人员 inactive/unbound。 - 启用规则不是恰好 3 条,金额区间或角色结构与冻结基线不符。 - 部署路径仍可能删除 `.env`、附件或数据库宿主目录。 - 任一测试出现自审、管理员代批、历史快照重写或普通员工链异常。 - 真实 CEO 报销验证未取得单独批准。