文件
hyb-oa/docs/trialrun/release-readiness-checklist.md
T

12 KiB
原始文件 Blame 文件历史

发布试运行准备清单

文档状态:当前操作手册,用于首轮主线发布候选、live smoke 和小范围试运行准备。 适用范围:hyb-oa MVP 首轮主线 A1-A8 之后,部署前和部署后试运行前。

本文不替代 PRD、模块规约或 Issue CSV;它只回答“当前是否可以从本地可回归进入公网/企业微信/真实 OCR 验收”。

1. 当前结论

  • Release candidate:537e608 A8 完成首轮主线总回归门禁。
  • 主开发合同:issues/2026-05-09_20-57-19-mvp-mainline-dev-kickoff.csv,A1-A8 已全部 DONE/DONE/DONE。
  • 剩余主线批次合同:issues/2026-05-10_10-48-03-mvp-remaining-mainline-closeout.csv,B1-B5 已全部 DONE/DONE/DONE。
  • 当前状态:本地门禁已闭环;R4 部署预检、D3 受控同步和 D4 只读复检已完成;公网已部署本轮 release candidate。
  • 当前最大缺口:R5 公网自动化和真实 OCR 已通过;企业微信真机人工验收尚未执行,因此 R5 尚未完成,R6 仍不能开始。

首轮路线保持不变:OA 是唯一业务主系统和正式审批中心;企业微信只做入口、身份、通知、deeplink 和打卡原始采集边界;不接飞书,不接企业微信原生审批。

2. 已完成证据

范围 证据 结论
A1 代码差距盘点 644852f A1 完成MVP主线代码差距盘点 已确认复用现有能力,不从零重写
A2 统一审批中心 d871a40、f8c99c8、28be209 PC/移动审批、状态展示和本地回归已闭环
A3 报销/发票/OCR e79d252 A3 收口报销发票 OCR 主链路 mock OCR、查重、主流程和视觉验证已通过
A4 企业微信入口/通知 86451b3 A4 收口企业微信入口与通知回 OA 自动化入口和通知 deeplink 已收口,真机留到 live smoke
测试与交付规约 9d6abc7 A1-A5 落地测试与交付规约 测试、视觉、SKIP、commit 规则已固定
A5 请假考勤 d2bd4dc A5 收口请假考勤审批口径 请假审批、团队状态/日历本地通过
A6 采购合同项目 d6ee25f A6 收口采购合同项目最小可用 采购、合同、项目最小可用验证已完成
A7 权限导航 a18d477 A7 收口权限导航与备用模块护栏 导航护栏完成,部署前仍需直连权限审计
A8 总回归 537e608 A8 完成首轮主线总回归门禁 本地总回归通过,公网/真机/真实 OCR 仍 SKIP

3. 本地门禁复跑条件

A8 的本地门禁不是裸跑脚本即可完成,必须先用本地回归配置启动服务。推荐本地服务参数:

SERVE_CLIENT_DIST=true
OCR_PROVIDER=mock
IM_NOTIFIER_ENABLED=true
FIELD_ENCRYPTION_KEY=<local-test-key>
PROJECT_DOMAIN_ENABLED=true
PROJECT_LINKING_ENABLED=true
PROJECT_COMMUNICATION_LOG_ENABLED=true
PROJECT_CLOSURE_CHECKLIST_ENABLED=true

说明:

  • FIELD_ENCRYPTION_KEY 必须只使用本地测试值;生产密钥不得提交、打印或写入文档。
  • OCR_PROVIDER=mock 只证明本地 OCR 状态机和页面链路,不能替代真实 OCR 验收。
  • IM_NOTIFIER_ENABLED=true 用于覆盖通知 outbox 和企业微信通知分支;缺真实企业微信配置时仍不能宣称真机通过。
  • 项目相关开关用于复跑项目轻管理 E2E 和本地 smoke,不表示扩大 P2 范围。

部署前建议复跑:

cd server && npm run prisma:validate
cd server && ./scripts/regression-all.sh
cd client && npm run typecheck
cd client && npm run build
bash scripts/qa/run-web-gates.sh smoke-local
node scripts/qa/check-live-smoke-env.mjs

4. 权限直连审计矩阵

部署前必须补一轮“直连 URL / API 权限审计”。导航隐藏只能改善体验,不能替代服务端授权。

角色 必查主路径 备用或敏感路径 期望
普通员工 /portal、/workflow/tasks、/reimbursements、/leave、/purchase-requests、/mobile /budgets、/ap、/integrations/erp、/travel、/invoice-pool、/contracts-registry、/payment-batches 主路径可用;备用或敏感路径不得泄露数据
主管/审批人 /workflow/tasks、业务详情、移动审批 预算、ERP、票据中心、付款批次 只可见其审批和管理范围内数据
财务 报销复核、付款、导出、发票相关页面 管理员配置、员工敏感档案 财务能力可用,不越权到系统管理
管理员 系统配置、权限、审计、企业微信配置 真实凭据和密钥明文 可配置系统,但接口不得返回 secret 明文

如发现服务端权限缺口,必须停止部署并拆独立修复 Issue;不得用前端隐藏临时绕过。

R3 审计执行记录见 permission-direct-access-audit.md。2026-05-10 本地自动化直连审计已通过,未发现权限泄漏;R4/D3/D4 记录见 deployment-preflight-2026-05-10.md,当前远端运行时代码已对齐 release candidate。

5. 部署预检

部署前只做只读确认,不直接改生产:

2026-05-10 R4/D3/D4 结论:DONE。已创建部署前 DB/storage 备份,执行 bash deploy/trialrun/deploy.sh 同步远端文件树并完成脚本内置 smoke;部署后只读复检显示关键运行时文件哈希对齐、Prisma migration up to date、/ready 200、Caddy 正常、企业微信 config 不返回 secret、公网资源文案扫描 0 findings。R5 公网自动化和真实 OCR 已在后续 smoke 密码重置后通过,仍需企业微信真机人工验收后才能关闭。

  • 当前生产 commit、部署目录和本地 release candidate 是否一致。
  • 生产 .env 必需项是否完整;检查时不得打印 secret。
  • 数据库迁移状态是否干净;若存在 drift,先备份并拆数据库治理 Issue。
  • 对象存储、附件目录、OCR provider、IM provider、企业微信回调域名是否与试运行目标一致。
  • Caddy/systemd 或既有部署脚本状态是否健康。
  • /ready、前端资源、企业微信 config 探活是否正常。
  • 回滚方式是否明确:上一个部署包、上一个 commit、数据库备份和配置备份位置。

6. 公网 live smoke 条件

执行前必须准备以下环境变量或本机安全文件,不提交到仓库:

  • LIVE_SMOKE_ADMIN_IDENTIFIER / LIVE_SMOKE_ADMIN_PASSWORD
  • LIVE_SMOKE_EMPLOYEE_IDENTIFIER / LIVE_SMOKE_EMPLOYEE_PASSWORD
  • LIVE_EXPECT_WECOM_STATUS=ready
  • PLAYWRIGHT_OCR_LIVE_FILE 或 PLAYWRIGHT_OCR_LIVE_DIR
  • 可选:PLAYWRIGHT_OCR_LIVE_IDENTIFIER / PLAYWRIGHT_OCR_LIVE_PASSWORD

命令:

node scripts/qa/check-live-smoke-env.mjs
LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh

2026-05-10 R5 准入执行记录:

  • node scripts/qa/check-live-smoke-env.mjs:publicReady=true,wecom=ready,liveSmokeReady=false,liveOcrReady=false。
  • node scripts/qa/check-live-smoke-env.mjs --strict:按预期失败,缺 LIVE_SMOKE_* 与 OCR live 文件或目录。
  • LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh:公网 /ready 可访问,公网资源文案扫描 scanned=54 focused=4 findings=0;live smoke 与真实 OCR 因缺凭据和样票 SKIP。
  • 证据目录:artifacts/qa-flow/live-smoke-readiness-20260510-161113/。

2026-05-10 R5 解阻复查:

  • 执行合同:issues/2026-05-10_16-28-34-r5-live-smoke-unblock.csv。
  • node scripts/qa/check-live-smoke-env.mjs:publicReady=true,wecom=ready,liveSmokeReady=false,liveOcrReady=false。
  • node scripts/qa/check-live-smoke-env.mjs --strict:仍失败,缺 LIVE_SMOKE_* 与 OCR live 文件或目录。
  • 结论:F3 公网业务 smoke、F4 企业微信真机验收和 R6 小范围试运行仍不能开始。

2026-05-10 R5 credentialed 复查:

  • 执行合同:issues/2026-05-10_16-39-17-r5-credentialed-live-smoke.csv。
  • /home/shunli/.hyb-oa/live-smoke.env 不存在,未执行 source。
  • node scripts/qa/check-live-smoke-env.mjs:publicReady=true,wecom=ready,liveSmokeReady=false,liveOcrReady=false。
  • node scripts/qa/check-live-smoke-env.mjs --strict:仍失败,缺公网 smoke 账号和 OCR live 文件或目录。
  • 结论:H3 公网自动化业务 smoke、H4 企业微信真机验收和 R6 小范围试运行仍不能开始。

2026-05-10 R5 历史凭据自动化复查:

  • 执行合同:issues/2026-05-10_16-56-44-r5-history-credential-live-smoke.csv。
  • 历史 LIVE_SMOKE_* 可临时提取,OCR 样票存在,check-live-smoke-env --strict 通过;凭据未落盘、未打印。
  • 公网 /ready 与企业微信 config 正常,公网资源文案扫描 scanned=54 focused=4 findings=0。
  • 公网 live smoke 未通过:管理员登录后停留 /login,接口返回 401;员工 smoke 和真实 OCR 未执行。
  • 证据目录:artifacts/qa-flow/live-smoke-readiness-20260510-165833/。
  • smoke 数据只读审计:SMOKE001/SMOKE002 均 active,authSessions=555,invoices=5,ocrResultsLinkedFromInvoices=1,auditLogs=258。
  • 结论:R5 仍未通过,下一步需重置或重新提供 SMOKE001/SMOKE002 密码后重跑;R6 仍不能开始。

2026-05-10 R5 smoke 密码重置与自动化复查:

  • 执行合同:issues/2026-05-10_17-10-42-r5-smoke-password-reset-and-live-smoke.csv。
  • K1 只读确认:R4 已完成,R5 仍未完成;SMOKE001/SMOKE002 均 active;部署前备份 hyb-oa-db-20260510_134340.dump 与 hyb-oa-storage-20260510_134341.tar.gz 可追溯。
  • K2 已受控重置两个 smoke 账号密码和登录失败状态;新凭据仅写入仓库外 ~/.hyb-oa/live-smoke.env,权限 600,未打印或提交密码。当前登录接口按邮箱/手机号查询,live smoke 登录标识使用 smoke 邮箱,员工编号仍为 SMOKE001/SMOKE002。
  • node scripts/qa/check-live-smoke-env.mjs --strict:通过,liveSmokeReady=true,liveOcrReady=true。
  • LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh:通过;公网资源文案扫描 scanned=54 focused=4 findings=0;公网 live smoke 3 passed;真实 OCR 样票不再 SKIP。
  • 真实 OCR 终态:样票识别出发票代码/号码、销售方、金额和日期;因历史样票重复,页面提示“已识别出相同发票,不能重复添加”,记录为可解释终态。
  • 证据目录:artifacts/qa-flow/live-smoke-readiness-20260510-172421/。
  • pending OCR 辅助扫描仍因缺 DATABASE_URL 记录 SKIP,不作为 R5 硬阻断。
  • K4 副作用只读审计:authSessions=555 -> 572,auditLogs=258 -> 263;reimbursements=1、invoices=5、ocrResultsLinkedFromInvoices=1 保持不变;未清理数据。
  • 结论:公网自动化和真实 OCR 已通过;企业微信真机人工验收尚未执行,所以主 R5 仍不能置为 DONE/DONE/DONE,R6 仍不能开始。

判定:

  • liveSmokeReady=false 时只能记录公网账号条件缺失。
  • liveOcrReady=false 时只能记录真实 OCR 条件缺失。
  • 手机企业微信入口必须用真实企业微信客户端补测;普通浏览器 UA 不等于真机通过。

7. 小范围试运行

只有 R3-R5 无阻断后,才开放 2-3 个内部用户试运行。

建议首批角色:

  • 普通员工 1 人:提交报销、请假、采购,使用移动入口补资料。
  • 审批人 1 人:处理待办、驳回或退回一条测试申请。
  • 财务或管理员 1 人:复核发票、标记付款、导出、检查审计和通知记录。

试运行规则:

  • 每日固定收集问题,按阻断、重要、体验、后续需求分级。
  • 问题先登记到新 Issue CSV,不在试运行现场扩大范围。
  • P2 的预算、ERP、AI、完整差旅、复杂 BPM 继续不进入首轮试运行。
  • 出现权限泄漏、付款状态错乱、真实 OCR 大面积失败、企业微信入口无法进入时,应暂停试运行并回滚或修复。