# 人工试运行报告 **文档状态**:当前试运行证据摘要。 **适用时间**:DCL7 之后。 DCL7 已删除本文件中 R70-R91 的长流水历史,避免旧环境、旧开关和旧公网状态误导当前工作。历史全文可通过 git 恢复:`git show 5da05eb:docs/trialrun/人工试运行报告.md`。 ## 当前结论 - R6 首轮小范围试运行已通过;范围是报销、请假、采购、审批、企业微信入口/通知、财务付款/导出。 - PC6、PA6、FL6、AP6、RI6、LP6、ME6 自动化、QG6、DG7/MRF7、MIA7 已完成相应收口。 - 2026-05-13 用户完成 iPhone 12、iPhone 14、Redmi K60 企业微信代表性真机主流程复测,`ME6-3` 已按主流程门禁关闭;iPhone 12 图文上下间距偏紧按非阻断观察项记录。 - MIF7-1..7 与 MIF7T 已完成本地整改、公网部署、公网匿名复检和带凭据 live smoke/OCR 复检;2026-05-13 已将包含 `cf2bba0` 的 MIF7T 代码部署到 `https://oa.hyinda.com`。 - MIF7TD 收口报告为 `artifacts/qa-flow/live-smoke-readiness-20260513-115455/`:公网 live smoke `3 passed`,真实 OCR `1 passed`,样票为重复发票可解释终态;`pending OCR` 因本地未注入 `DATABASE_URL` 记录 `SKIP`,不作为 MIF7-7 硬阻断。 - R7/OPS7/DOC7 是准备材料;R7EP 自动门禁和 OPS8 只读检查已完成;R7E 已完成参与人、窗口、回滚联系人、问题登记负责人和每日收口节奏确认,并已进入试运行收口阶段。 - 2026-05-13 后续计划调整直接回写现有 R7EP、OPS8、QAF8、UX8、P2T 合同,不新建专门调整 Issue;调整后 R7EP 门禁可并行执行,OPS8-1/2/4 纳入 R7EP Go/No-Go,UX8 和 P2T 候选按真实反馈并行推进。 - ORG8 组织账号与权限主数据已完成本地代表性角色验收和阶段收口;该结论只覆盖本地自动化/只读/注入验证,不代表 R7E 真实人工试运行已启动或完成。 ## 关键证据索引 | 批次 | 当前状态 | 证据入口 | | --- | --- | --- | | R6 | 已通过 | `issues/2026-05-11_10-23-41-r6-small-trialrun-prep.csv` | | PS6 | 采购提交阻断已修复 | `issues/2026-05-12_01-12-20-r6-purchase-submit-budget-precheck-hotfix.csv` | | PC6 | PC 工作台与审批信息架构已完成 | `issues/2026-05-12_01-40-00-r6-pc-workbench-ia-polish.csv` | | PA6 | 权限与审计回归已完成 | `issues/2026-05-12_01-46-00-r6-permission-audit-regression.csv` | | FL6 | 财务台账/导出增强已完成 | `issues/2026-05-12_01-43-00-r6-finance-ledger-export-v1.csv` | | AP6 | 审批催办、超时提醒和效率摘要已完成 | `issues/2026-05-12_01-42-00-r6-approval-productivity-v1.csv` | | RI6 | 报销票据体验已完成 | `issues/2026-05-12_01-44-00-r6-reimbursement-invoice-polish-v1.csv` | | LP6 | 请假采购体验已完成 | `issues/2026-05-12_01-45-00-r6-leave-procurement-polish-v1.csv` | | ME6 | 自动化、公网视觉和代表性企业微信真机门禁已完成 | `issues/2026-05-12_01-41-00-r6-mobile-experience-second-pass.csv` | | QG6 | QA 治理已完成 | `issues/2026-05-12_01-47-00-r6-qa-governance-upgrade.csv` | | MIA7 | 移动信息架构审查已完成 | `issues/2026-05-12_21-48-39-mobile-ia-visual-flow-review.csv` | | MIF7 | 已收口;本地整改、返回语义、部署、公网匿名、真机门禁、带凭据 live smoke/OCR 均已通过 | `issues/2026-05-12_21-48-40-mobile-ia-flow-remediation.csv`、`issues/2026-05-13_00-38-05-mif7-follow-up-return-and-release.csv`、`issues/2026-05-13_11-37-02-mif7t-deploy-live-closeout.csv`、`artifacts/qa-flow/live-smoke-readiness-20260513-115455/summary.json` | | MIF7T | 真机反馈移动体验统一整改已部署并完成公网复检 | `issues/2026-05-13_09-18-05-mif7-real-device-feedback-mobile-unification.csv`、`issues/2026-05-13_11-37-02-mif7t-deploy-live-closeout.csv` | | ORG8 | 组织账号和权限主数据本地代表性验收已收口;不替代 R7E 真实人工试运行 | `issues/2026-05-13_18-23-51-org8-master-data-permission.csv` | ## 当前门禁 | 门禁 | 状态 | 说明 | | --- | --- | --- | | 公网地址 | 可用 | `https://oa.hyinda.com` | | `/ready` | 通过 | 2026-05-13 `curl -fsS https://oa.hyinda.com/ready` 返回 `ok=true` | | 企业微信个人应用消息 | 正式通知通道 | 企业微信只做入口、身份、消息和 deeplink | | `ME6-3` 真机抽查 | 已关闭 | 2026-05-13 用户确认 iPhone 12、iPhone 14、Redmi K60 企业微信主流程通过;iPhone 12 间距偏紧为非阻断观察项 | | MIF7-7 | 已关闭 | MIF7T 已部署;公网 `/ready`、public bundle、公网 MIF7 移动矩阵、带凭据 live smoke/OCR 均通过 | | R7E 真实执行 | 当前执行 | 浏览器业务线已通过,`f945c0b` 已部署;企业微信消息 deeplink 已按代表设备关闭,移动二次修复真机反馈和最终验收结论仍待关闭 | ## R7EP / OPS8 / QAF8 / UX8 / P2T 预检推进 执行时间:2026-05-13 14:10-15:25 前后。 | 检查项 | 结果 | 证据 | | --- | --- | --- | | R7EP 公网匿名健康 | 通过 | `curl -fsS https://oa.hyinda.com/ready` 返回 `ok=true`;`PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs`:scanned=57,focused=4,findings=0 | | R7EP 带凭据 live readiness | 通过,含非阻断 pending OCR SKIP | 报告 `artifacts/qa-flow/live-smoke-readiness-20260513-141253/`;live smoke `3 passed`,真实 OCR `1 passed`;`pending OCR` 因本地未注入 `DATABASE_URL` 记录 `SKIP` | | R7EP 公网移动矩阵 | 通过 | `cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts --workers=1 --reporter=list`,5 passed | | R7EP 核心业务流 | 分段通过 | 长组合命令在当前工具会话中不稳定中断,不采用不完整 `summary.json` 作为通过证据;采用同一 groups 的可追溯分段结果:`business-flow-20260513-142857/summary.txt` 中 reimbursement/approval/leave/procurement PASS,`business-flow-20260513-145759/summary.txt` 中 approval PASS,`business-flow-20260513-144801/summary.txt` 中 governance PASS | | R7EP 账号角色只读核验 | 通过 | 只读 SQL 证据 `artifacts/qa-flow/r7ep-account-role-readonly-20260513-152121/`;`SMOKE002`、`SMOKE101`、`SMOKE201`、`SMOKE301`、`SMOKE302`、`SMOKE001`、`wangzhiling`、`wangshunli` 均为 `active`;角色、直属主管、企业微信绑定布尔状态已核验;`SMOKE001` 和 `admin` role 当前无 pending 审批任务,财务角色无 admin 混授 | | OPS8 最小准备 | 已补文档并通过远端只读检查 | `docs/trialrun/OPS7运维交接Runbook.md` 已补当前部署版本追踪、`SYNC_ENV=0` 口径、备份/回滚占位和 live readiness 归档规则;OPS8-3 远端只读证据 `artifacts/qa-flow/ops8-remote-readonly-20260513-152024/`,Caddy active,compose db/server Up,Prisma migration up to date | | QAF8 覆盖刷新 | 已补文档 | `docs/测试规约与回归门禁.md` 已补当前最小回归组合、本地/公网匿名/带凭据门禁边界、R108/R109 历史专项分类 | | UX8 反馈池 | 阶段性收口 | 本轮未新增 UX8 代码实现;iPhone 12 间距、详情扫读性、财务摘要、移动采购创建和列表卡片反馈继续按真实反馈进入后续项 | | P2T 候选盘点 | 已补文档 | `docs/海音达OA-MVP需求规格说明书.md` 已补 P2T 候选优先级:组织账号主数据、审批通知扩展、OCR/票据增强、费用预算项目轻量增强、运维上线增强;冻结项继续不进入当前实现 | R7EP 历史结论:公网、live smoke/OCR、移动矩阵、核心业务流、账号角色只读核验和 OPS8 远端只读状态检查均已通过,可进入 R7E 人工确认环节。后续用户已确认参与名单、时间窗口、回滚联系人、问题登记负责人、每日收口节奏和暂停/回滚决策人,R7E 已按本报告后续章节推进。 ## ORG8 组织账号与权限主数据验收 执行时间:2026-05-13。 | 检查项 | 结果 | 证据 | | --- | --- | --- | | 主管、审批人和角色风险只读审计 | 通过 | `disabled_manager_chain=0`;`inactive_pending_assignees=0`;`roles_without_active_holder=0`;`admin_only_pending=0`;`approval_rules_use_admin=0`;`finance_admin_mixed_roles=0` | | 新员工账号和企业微信绑定流程 | 通过 | `cd server && npm test -- tests/unit/routes/users.write.test.js tests/unit/routes/users.import.test.js tests/unit/routes/users.list.test.js tests/unit/routes/employees.patch.test.js tests/unit/routes/auth.login.test.js tests/unit/routes/wecomAuth.test.js tests/unit/routes/workflow.permissions.test.js`,7 files,33 tests passed | | 禁用、启用回滚和角色变更审计 | 通过 | 本地 Fastify route 注入验证覆盖 disable -> archived + session revoke + `SYSTEM_USER_DISABLED`;enable -> active + `SYSTEM_USER_ENABLED`;roles set -> `SYSTEM_USER_ROLES_SET`;inactive login -> `AUTH_003` | | 前端入口和权限直连 | 通过 | `permission-direct-access.spec.ts` 中前端直连备用路径、员工自助直连、角色入口矩阵、后端直连接口、请假采购自审和 admin-only 拒绝用例均已通过 | 结论:ORG8 可作为组织账号和权限主数据的阶段性完成证据。该验收是本地代表性验证,不包含真实参与人名单、试运行时间窗口、回滚联系人、问题登记负责人或每日收口节奏;这些人工确认仍归 R7E。 ## MIF7-7 非人工自动化补验 执行时间:2026-05-13 01:35 前后。 | 检查项 | 结果 | 证据 | | --- | --- | --- | | MIF7 CSV 校验 | 通过 | `python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-12_21-48-40-mobile-ia-flow-remediation.csv` | | MIF7F follow-up CSV 校验 | 通过 | `python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-13_00-38-05-mif7-follow-up-return-and-release.csv` | | 前端类型与构建 | 通过 | `cd client && npm run typecheck`、`cd client && npm run build` | | UI 设计规则 strict | 通过 | `node scripts/qa/check-ui-design-rules.mjs --strict`,扫描 126 个文件,0 findings | | MIF7 移动专项 Playwright | 通过 | `cd client && npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts --workers=1 --reporter=list`,5 passed;截图目录 `output/playwright/mobile-ia-flow-remediation/` | | R124 移动入口矩阵 | 通过 | `cd client && npx playwright test tests/e2e/r124-mobile-entry-matrix.spec.ts --workers=1 --reporter=list`,1 passed;截图目录 `output/playwright/r124-mobile-entry-matrix/` | | 公网 `/ready` | 通过 | `curl -fsS https://oa.hyinda.com/ready` 返回 `ok=true` | | 公网前端资源文案扫描 | 通过 | `PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs`,scanned=56,focused=4,findings=0 | | 公网 live readiness | 通过,含 SKIP | `LIVE_SMOKE_BASE_URL=https://oa.hyinda.com QA_ISSUE_ID=MIF7-7 bash scripts/qa/run-live-smoke-readiness.sh`;报告目录 `artifacts/qa-flow/live-smoke-readiness-20260513-013545/`;live smoke、真实 OCR 因缺少凭据或样票按脚本规则 SKIP | | 旧 R6 响应式专项 | MIF7T 后通过 | `tests/e2e/r6-mobile-responsive-system-hotfix.spec.ts` 7 个视口通过,截图目录 `output/playwright/r6-mobile-responsive-system-hotfix/` | | 旧 MUD6 统一设计专项 | MIF7T 后通过 | `tests/e2e/r6-mobile-unified-design-rollout.spec.ts` 7 个视口通过,截图目录 `output/playwright/r6-mobile-unified-design-rollout/` | | 旧 WCM6 企业微信渲染专项 | MIF7T 后通过 | `tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts` 8 项通过,截图目录 `output/playwright/r6-wecom-mobile-rendering-hardening/` | | R108/R109 移动专项 | 明确跳过 | 两个专项仍因测试初始化 API 不可用按测试内规则 SKIP,未将 SKIP 伪造成视觉通过 | 历史结论:该轮非人工补验已证明 MIF7 当前专项、本地构建和公网匿名基础门禁通过;代表性企业微信真机主流程随后补充并关闭 `ME6-3`。当时 `MIF7-7` 因 live smoke 和真实 OCR 缺凭据/样票保持未完成;后续 MIF7TD 已补齐带凭据复检并关闭 `MIF7-7`。 ## MIF7T 真机反馈与移动体验统一 执行时间:2026-05-13。 用户真机反馈已记录:三台设备主流程没问题;首页常用入口没有重复底部 Tab;财务首页已和普通/审批首页区分;审批人“已处理”详情返回仍停留在已处理;通知可直达详情并返回来源页;请假详情、采购详情和财务首页主流程通过。iPhone 12 图文上下间距相比其他设备偏紧,但未出现重叠或压字,按非阻断观察项处理。 新增问题已进入 MIF7T 并完成本地整改:普通角色首页降低资产扫码曝光,采购权限用户新增移动采购列表入口;请假页默认先展示记录,并保留“新建请假 / 请假记录”分段;报销、请假、采购列表卡片统一为整卡可点和右侧状态;删除草稿进入“更多”后再二次确认;在线无草稿时审批页不显示空“离线草稿”;报销、请假、采购、审批详情进入时滚动到顶部,返回按钮和 label-value 字段排布统一。 本批本地验证结果: | 检查项 | 结果 | 证据 | | --- | --- | --- | | MIF7 / MIF7F / MIF7T CSV 校验 | 通过 | `validate_issues_csv.py` 三个合同均通过 | | 前端类型与构建 | 通过 | `cd client && npm run typecheck`、`cd client && npm run build` | | UI 设计规则 strict | 通过 | `node scripts/qa/check-ui-design-rules.mjs --strict`,扫描 127 个文件,0 findings | | MIF7 移动专项 | 通过 | `tests/e2e/dg7-mobile-information-dedupe.spec.ts`,5 passed;截图目录 `output/playwright/mobile-ia-flow-remediation/` | | R6 响应式矩阵 | 通过 | `tests/e2e/r6-mobile-responsive-system-hotfix.spec.ts`,7 passed;覆盖 320/360/375/390/393/414/430 | | MUD6 统一设计矩阵 | 通过 | `tests/e2e/r6-mobile-unified-design-rollout.spec.ts`,7 passed;覆盖 320/360/375/390/393/414/430 | | WCM6 企业微信渲染矩阵 | 通过 | `tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts`,8 passed;含 390 iPhone12 字体失败模拟 | | R101 / R124 移动入口回归 | 通过 | `tests/e2e/r101-mobile-wip-closeout.spec.ts` 3 passed;`tests/e2e/r124-mobile-entry-matrix.spec.ts` 1 passed | | R108 / R109 视觉专项 | SKIP | 初始化 API 不可用,按测试内规则跳过;不作为视觉通过证据 | 部署状态:MIF7T 已在 MIF7TD 中部署到 `https://oa.hyinda.com`,公网复检和带凭据 live smoke/OCR 已通过。 ## MIF7TD 部署与带凭据收口 执行时间:2026-05-13。 | 检查项 | 结果 | 证据 | | --- | --- | --- | | MIF7TD / MIF7 / MIF7F / MIF7T / ME6 CSV 校验 | 通过 | `validate_issues_csv.py` 均通过 | | 部署前本地门禁 | 通过 | `client typecheck`、`client build`、设计规则 strict、MIF7 专项 5 passed、R6/MUD6/WCM6 组合 22 passed、`git diff --check` 通过 | | 受控部署 | 通过 | `bash deploy/trialrun/deploy.sh`;默认 `SYNC_ENV=0`,未覆盖远端 `.env`;部署包含 `cf2bba0` 的 MIF7T 代码 | | 公网匿名复检 | 通过 | `curl -fsS https://oa.hyinda.com/ready` 返回 `ok=true`;public bundle `scanned=57 focused=4 findings=0` | | 公网移动重点矩阵 | 通过 | `E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts --workers=1 --reporter=list`,5 passed;截图目录 `output/playwright/mobile-ia-flow-remediation/` | | 带凭据 live smoke | 通过 | 报告 `artifacts/qa-flow/live-smoke-readiness-20260513-115455/`;`live-smoke.txt` 不含 `SKIP`,公网 live smoke `3 passed` | | 真实 OCR | 通过 | 同一报告目录;`live-ocr.txt` 不含 `SKIP`,用例 `1 passed`;样票命中“该发票已用于报销,不能重复添加”,为重复发票可解释终态 | | pending OCR 辅助扫描 | 非阻断跳过 | `pending-ocr.txt` 因本地未注入 `DATABASE_URL` 记录 `SKIP`,不作为 MIF7-7 硬阻断 | 历史结论:`MIF7-7` 已完成 `DONE/DONE/DONE`。公网当时可用于企业微信和浏览器复测 MIF7T 移动体验;真实扩大试运行随后已另建 R7E 执行合同推进。 ## R7E 人工启动确认 确认时间:2026-05-13。 用户确认采用 R7E 推荐启动配置,并补充 `SMOKE301` / `SMOKE302` 尚未启用且没有对应企业微信,因此不作为本轮真实企业微信参与账号。 | 确认项 | 结论 | | --- | --- | | 参与人 | 员工 `SMOKE002`;审批人 `SMOKE101`;负责人 `SMOKE201`;财务 `wangzhiling`;管理员/拍板人 `wangshunli` | | 企业微信边界 | `SMOKE002`、`SMOKE101`、`wangzhiling`、`wangshunli` 作为企业微信或真机优先账号;`SMOKE201` 使用账号密码兜底;`SMOKE301` / `SMOKE302` 不参与本轮 | | 角色边界 | `wangshunli` 作为管理员、回滚联系人和最终拍板人,不作为普通 `manager` 代行业务审批;`admin-only` 不处理业务审批 | | 试运行窗口 | 北京时间 2026-05-14 09:30 至 2026-05-15 18:30;每日 17:30 收口 | | 暂停条件 | 公网 `/ready` 异常、企业微信入口不可达、审批/报销/请假/采购任一主流程阻断、权限越权、数据错误或真实用户无法继续 | | 回滚联系人 | `wangshunli`;真实联系方式放在仓库外企业微信或电话通讯录,不写入仓库 | | 问题登记 | `wangshunli` 为业务侧登记负责人;可审计摘要写入本报告和 R7E CSV;按阻断/高/中/低分级 | | 暂停/回滚决策 | `wangshunli` 最终拍板;触发 P0 阻断、权限泄漏、财务数据错误、审批链错误、无法登录/无法回 OA 或两个以上高优先级问题当天无法解释清楚时暂停或回滚 | 确认结论:`R7E-1..7` 人工确认完成,可以进入 `R7E-8` 公网健康复核。真实业务流程试运行仍需按 `R7E-9..18` 逐项记录,不得用自动化结果替代企业微信真机或人工业务结论。 启动前公网预检: | 时间 | 检查项 | 结果 | 说明 | | --- | --- | --- | --- | | 2026-05-13 20:42 CST | `curl -fsS https://oa.hyinda.com/ready` | 通过 | 返回 `ok=true` | | 2026-05-13 20:42 CST | `PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs` | 通过 | `scanned=57`,`focused=4`,`findings=0` | ## R7E 最新代码部署与启动当天复核 执行时间:2026-05-14。 | 检查项 | 结果 | 证据 | | --- | --- | --- | | 试运行基线 | 已锁定 | `4b14c92 DG9 统一全站 UI 布局样板迁移` | | 部署前本地门禁 | 通过 | `cd client && npm run typecheck`;`cd client && npm run build` | | 受控部署 | 通过 | `bash deploy/trialrun/deploy.sh`;默认 `SYNC_ENV=0`,未覆盖远端 `.env` | | 迁移处理 | 通过 | 部署首次停止于未应用迁移 `20260513214500_biz8_purchase_project_link`;该迁移为 BIZ8 既有加性迁移,给采购申请增加可空项目关联;执行前已创建 DB 和附件备份 | | 备份 | 已生成 | DB 备份 `hyb-oa-db-20260514_011940.dump`;附件备份 `hyb-oa-storage-20260514_011940.tar.gz`;均位于远端 `deploy/trialrun/backups/` | | 远端 migration 状态 | 通过 | `npx prisma migrate deploy` 应用缺失迁移后,`npx prisma migrate status` 返回 up to date | | 公网 `/ready` | 通过 | `curl -fsS https://oa.hyinda.com/ready` 返回 `ok=true` | | 公网前端资源文案扫描 | 通过 | `PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs`:`scanned=57`,`focused=4`,`findings=0` | | 公网移动矩阵 | 通过 | `E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts --workers=1 --reporter=list`:5 passed | | 带凭据 live smoke | SKIP | 本地未提供完整 `LIVE_SMOKE_*` 凭据,部署脚本按规则跳过;不得记为真实业务通过 | 结论:`R7E-8` 已完成 `DONE/DONE/DONE`,公网可进入最新代码试运行。真实企业微信入口、报销、审批、请假、采购、财务、通知 deeplink 和真机反馈仍需按 `R7E-9..18` 逐项人工记录,不能由自动化替代。 ## R7E PC / 移动网页自动化补测 执行时间:2026-05-14。范围是公网 PC 网页、移动浏览器和企业微信 UA 模拟;真实手机企业微信免登录、系统文件选择器和消息弹窗仍需人工或代表设备确认。 | 检查项 | 结果 | 证据和结论 | | --- | --- | --- | | 公网 live readiness | 通过 | 报告 `artifacts/qa-flow/live-smoke-readiness-20260514-013133/`;live smoke 3 passed;真实 OCR 1 passed;pending OCR 因本地无 `DATABASE_URL` 记录 `SKIP` | | R7E 角色页面 smoke | 通过 | 员工、经理、财务、财务主管、管理员共 32 个 PC/移动核心入口通过;覆盖 `/portal`、报销、请假、采购、待办、财务台账、付款批次、系统管理、审计、`/mobile`、移动报销、移动请假、票据上传、移动审批、通知和我的 | | 移动信息架构和 WeCom UA 矩阵 | 部分通过 | `dg7-mobile-information-dedupe` 5 passed;`r6-mobile-unified-design-rollout` 7 passed;`r6-wecom-mobile-rendering-hardening` 8 passed;`r124-mobile-entry-matrix` 1 passed | | 移动路由分流 | 需测试维护 | `r110-mobile-pc-routing` 1 failed / 1 not run;失败原因是旧断言要求 `/mobile/leave` 默认展示 `mobile-leave-form`,而当前产品事实为默认记录页、`?view=form` 才展示新建请假;未发现 PC 壳回退证据 | | 公网视觉验收 | 部分通过 | `r104-public-visual-acceptance` 4 passed;`r105-pretrial-visual` 3 passed / 1 failed;失败为测试选择器 `/审批/` 同时匹配“审批”和“待我审批”的 strict mode 冲突,页面已渲染为移动审批页 | | UI 一致性和 BIZ8 台账 | 通过 | `r103-cross-page-ui-consistency` 3 passed;`biz8-ap-ledger-project` 1 passed | | 默认本地 E2E 业务流对公网 | 失败,需分流 | `workflow-quick-approve`、`procurement-flow`、`reimbursement-workflow-progress`、`reimbursement-payment-batch-flow` 未通过;主要原因是默认 `employee@hyinda.com` 链路缺直属主管、`finance_mgr@hyinda.com` 凭据不匹配、报销 PDF 上传后未在报销发票区出现。该组使用旧本地种子账号,不作为 R7E `SMOKE002 -> SMOKE101` 真实账号结论,但应进入后续测试维护和 R7E 人工关注项 | 结论:公网 PC 和移动网页自动化基线可继续试运行;`R7E-9..18` 仍需真实角色按企业微信/浏览器操作后记录,且默认本地 E2E 账号链路与当前 R7E smoke 账号链路不一致,需要后续把公网业务流测试切换到 R7E live 凭据或维护测试数据。 ## R7E 浏览器业务先行试运行 执行时间:2026-05-14。范围是无需人工操作即可完成的公网 PC 浏览器、移动浏览器和企业微信 UA 模拟补测;真实企业微信免登录、消息弹窗、消息 deeplink、WebView 文件选择器和代表设备反馈仍后置。报告路径为 `artifacts/r7e/browser-business-trialrun/`,截图路径为 `output/playwright/r7e-browser-business-trialrun/`。 ### 无需人工操作补测结果 | 流程 | 账号角色 | 测试单据 | PC 结果 | 移动浏览器结果 | 问题编号 | 结论 | | --- | --- | --- | --- | --- | --- | --- | | 公共前置 | 员工、审批人、财务、财务主管、管理员 | N/A | 5 类账号登录 `/portal` 通过;`/ready` 通过;public bundle `findings=0`;live smoke env ready;授权 PDF 文件存在且为 PDF | N/A | - | 通过 | | 报销 | 员工、审批人 | `BX-20260514-0016` | 员工创建报销、添加明细、上传授权 PDF、提交;审批人处理通过;申请人回看状态和审批历史 | N/A | - | 报销业务链路通过;财务付款另记 `R7E-14` | | 审批 | 员工、管理员、审批人 | `BX-20260514-0016`、`CG-20260514-0005`、请假单 `a22e45f8-b3d6-4862-97f2-30cbe4815e09`、审批边界请假单 `b0cd3e00-2e67-4f51-9aaf-63aa2c53b47e` | 报销、采购、请假均完成待办处理并可回看历史;申请人本人和 admin-only 对真实待办调用审批接口均被拒绝,经理正常通过收尾 | N/A | - | 通过;`R7E-11` 可关闭 | | 请假 | 员工、审批人 | `a22e45f8-b3d6-4862-97f2-30cbe4815e09` | 员工提交未来工作日请假;审批人通过;员工 PC 回看已通过 | `/mobile/leave` 记录页可见且无横向滚动 | - | 通过 | | 采购 | 员工、审批人 | `CG-20260514-0005` | PC 创建、明细、无敏感测试附件上传、提交、审批、状态和审批历史回看通过 | 移动采购列表、详情和附件可见且无横向滚动 | - | 通过 | | 财务 | 财务 | `BX-20260514-0016` | 报销状态为 `approved`;`/api/ap-operations/reimbursement-ledger` 和 `/api/payment-batches` 均返回 `payment_batch_v1_disabled / flag_force_off`,未创建付款批次、未复核、未执行付款、未验证导出 | N/A | R7E-ISSUE-BROWSER-005 | 当时暂停;后续按用户确认的“付款批次延期到 P2”口径收口 `R7E-14` | | 移动通用 | 员工、审批人、财务 | N/A | N/A | `/mobile`、移动报销、请假、审批、通知、采购入口通过;无 PC 壳和横向滚动 | - | 通过 | | 企业微信 UA 模拟 | 匿名 | N/A | N/A | 登录入口、企业微信配置和 OAuth 边界可达 | - | 通过;不代表真机验收 | | 补充移动矩阵 | 本地 mock 前置 | N/A | N/A | 启动 Vite `http://127.0.0.1:5173` 后重跑 `dg7-mobile-information-dedupe`,5 passed;临时服务已关闭 | - | 通过;前次 `127.0.0.1:3000` 失败确认为前置服务未启动 | 本轮新增测试辅助:`r7e-browser-business-trialrun.spec.ts` 支持 `R7E_BROWSER_FLOW=preflight|reimbursement-finance|leave|purchase-attachment|mobile|wecom-ua|finance-closeout|approval-boundary|all` 分段执行;移动 flow 使用浏览器 storage state 注入登录态并写入匹配的 device fingerprint,避免反复 UI 登录触发限流。 阶段结论:无人工自动化已完成公网健康、报销提交审批、请假、采购附件、审批边界、移动浏览器、企业微信 UA 模拟和本地移动矩阵前置修正。`R7E-10`、`R7E-11`、`R7E-12`、`R7E-13` 已按浏览器业务线证据关闭;`R7E-14` 后续按用户确认的付款批次延期到 P2 口径收口;`R7E-9`、`R7E-15`、`R7E-18` 仍需真实企业微信和人工验收,不由本轮自动化替代。 ## R7E 真机反馈修复记录 执行时间:2026-05-14。用户已完成代表设备人工反馈,本轮先在本地代码和现有 Issue 流中处理,随后按受控部署步骤发布到试运行环境。 | 反馈项 | 级别 | 归属 | 本轮处理 | | --- | --- | --- | --- | | 所有设备可企业微信免登录进入 OA | PASS | `R7E-9` | 记录为真机通过项 | | 企业微信消息点击均提示 `requestid tokenexpired` 或深链已过期 | HIGH | `WF8-11A` | 修复签名 deeplink 过期回流;企业微信 UA 走免登录 returnTo | | iOS 只能上传 PDF,Android 选择器仍显示拍照和选择文件 | MEDIUM | `R7E-16B` | OA 前端增加 PDF-only 过滤;Android 系统选择器表现记录为 WebView 限制 | | 通知卡片和待审批卡片右侧状态只显示首字 | MEDIUM | `R7E-16A` | 修复移动状态槽样式并加入 Playwright 遮挡断言 | | 财务移动入口和付款未启用状态不清楚 | MEDIUM | `BIZ8-12A` | 增加 `/mobile/me` 财务入口;付款批次关闭时显示未启用空态 | 部署状态:本节对应修复已在 2026-05-14 22:05 左右部署到 `https://oa.hyinda.com`,公网 `/ready`、public bundle、live readiness、真实 OCR 样票、移动矩阵和 R7E 分段自动化前置均已复核通过。企业微信消息点击已在 2026-05-15 补充代表设备真机通过;WebView 文件选择器、移动状态标签、财务入口和代表设备渲染仍需继续记录最终反馈。 ## R7E 真机反馈修复部署复核 执行时间:2026-05-14。部署基线为 `5491e92 修复 R7E 真机反馈回流与移动入口 WF8-11A R7E-16A R7E-16B BIZ8-12A`。 | 检查项 | 结果 | 证据和结论 | | --- | --- | --- | | 部署前本地门禁 | 通过 | `cd client && npm run typecheck`;`cd client && npm run build`;`cd server && node --check src/routes/auth.js src/services/notifications/detailUrl.js src/routes/portal.js`;`cd server && npm test -- tests/unit/services/imEnqueue.test.js tests/unit/services/notificationDispatcher.test.js tests/unit/routes/auth.login.test.js tests/unit/routes/wecomAuth.test.js`,4 files / 29 tests passed | | 受控部署 | 通过,含瞬时扫描失败 | `bash deploy/trialrun/deploy.sh` 默认 `SYNC_ENV=0`;远端 build、server 重建、init、migration status 均通过;脚本末尾 public bundle 首次扫描遇到短暂 `GET / failed: 502`,随后公网复核恢复正常 | | 远端 runtime smoke | 通过 | 手动补跑 `smoke-external-deps.js` 和 `smoke-trialrun-runtime.js`;企业微信、OCR、消息桥接、Prisma、功能开关和导航构建均通过 | | 公网匿名复核 | 通过 | `curl -fsS https://oa.hyinda.com/ready` 返回 `ok=true`;首页 200;`PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs`:`scanned=57 focused=4 findings=0` | | 公网 live readiness | 通过,含非阻断 SKIP | 报告 `artifacts/qa-flow/live-smoke-readiness-20260514-220617/`;live smoke 3 passed;真实 OCR 样票 1 passed,重复发票为可解释终态;pending OCR 因本地无 `DATABASE_URL` 记录 `SKIP` | | 公网移动矩阵 | 通过 | `E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts tests/e2e/r124-mobile-entry-matrix.spec.ts --workers=1 --reporter=list`,6 passed | | R7E 分段自动化前置 | 通过或可解释跳过 | `R7E_BROWSER_FLOW=mobile` 通过,员工/审批人/财务移动入口可见且无横向滚动;`R7E_BROWSER_FLOW=wecom-ua` 通过;`R7E_BROWSER_FLOW=finance-closeout` 通过但 AP/payment-batches 按 `payment_batch_v1_disabled / flag_force_off` 记录 SKIP | 阶段结论:最新修复已经进入企业微信代表设备复测。`R7E-14` 按用户确认的“付款批次先不启用,延期到 P2”口径收口;该结论不代表付款批次已启用或付款闭环已完成。 ## R7E 企业微信 deeplink 代表设备复测 执行时间:2026-05-15。用户反馈:“企业微信点击消息可以来了,可以免登录进到对应的详情里。” | 检查项 | 结果 | 证据和结论 | | --- | --- | --- | | 企业微信个人应用消息点击 | 通过 | `wangshunli` 当前手机点击新企业微信审批消息后可免登录进入对应审批详情,不再出现 `requestid`、`tokenexpired` 或“深链已过期”提示 | | 代表消息 | 通过 | 触发消息为 `【催办】请假单 2026-06-22 待审批`,目标为 `/mobile/approvals?taskId=822b2159-dc3c-4a65-8a49-abd70000f1b8`;仓库不记录 deeplink token | | 验收边界 | 代表设备通过 | 该证据足以关闭 `WF8-11` 和 `R7E-9` 的入口/免登录/deeplink 代表设备验收;不扩大写成所有设备均已复测 | 当前剩余真机项:移动状态标签完整显示、Android 选择器 PDF-only 口径、财务角色 `/mobile` 与 `/mobile/me` 入口,以及 `R7E-18` 阶段验收结论。 ## R7E 真机反馈二次修复记录 执行时间:2026-05-15。用户补充使用员工、主管、财务和 `wangshunli` 账号复测后的真机反馈。 | 反馈项 | 级别 | 归属 | 本轮处理 | | --- | --- | --- | --- | | 通知首页卡片只显示“新”,浏览详情后“新”消失 | PASS | `R7E-15` | 按未读提醒行为接受,不改成“已读/未读”常驻状态 | | 移动详情页左上返回按钮和报销单号贴得太近 | PASS | `R7E-16C` | 用户确认左上返回按钮已有清楚间距 | | 审批卡片右侧仍只显示“待”,详情处理按钮居中且三按钮分两行 | PASS | `R7E-16C` | 用户确认右侧完整显示“待处理”,详情三个按钮在一行 | | 财务 `/mobile/me` 有入口,但点击后像回首页,付款未启用提示不可发现 | PASS | `BIZ8-12B` | 用户确认直接定位到财务卡片并显示“付款批次未启用” | | `wangshunli` 当前没有通知 | INFO | `R7E-15` | 不作为阻断;deeplink 已由此前代表消息验证关闭 | | 审批详情中“退回”和“驳回”语义容易混淆 | MEDIUM | `R7E-16D` | 按产品决策保留短按钮“通过 / 驳回 / 退回”,在二次确认弹窗说明具体后果 | 本节对应修复已于 2026-05-15 19:31 CST 通过 `bash deploy/trialrun/deploy.sh` 部署到 `https://oa.hyinda.com`,部署基线为 `f945c0b R7E 真机二次反馈移动修复`,`SYNC_ENV=0`,未覆盖远端 `.env`。部署脚本内置远端构建、init、Prisma migration status、`/ready`、external deps smoke、runtime smoke 和公网 bundle 扫描均通过。部署后补充验证:`curl -fsS https://oa.hyinda.com/ready` 通过,`PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs` 扫描 57 个资源且 findings=0,live smoke env readiness 通过,`cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts tests/e2e/r124-mobile-entry-matrix.spec.ts --workers=1 --reporter=list` 通过 6 项。2026-05-15 用户补充确认 `SMOKE101` 审批状态和操作区、`SMOKE002` 详情头部间距、`wangzhiling` 财务入口定位均通过;审批动作二次确认进入 `R7E-16D`。 `R7E-16D` 已于 2026-05-15 21:46 CST 部署到 `https://oa.hyinda.com`,部署基线为 `96488d8 R7E-16D 审批动作二次确认`,`SYNC_ENV=0`,未覆盖远端 `.env`。部署脚本内置远端构建、init、Prisma migration status、`/ready`、external deps smoke、runtime smoke 和公网 bundle 扫描均通过。部署后补充验证:`curl -fsS https://oa.hyinda.com/ready` 通过,`PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs` findings=0,live smoke env readiness 显示公网、企业微信和真实 OCR 条件 ready,`cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts tests/e2e/r124-mobile-entry-matrix.spec.ts --workers=1 --reporter=list` 复跑 6 passed,`cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/workflow-action-confirm-ui.spec.ts tests/e2e/r89-mobile-login-navigation.spec.ts --workers=1 --reporter=list` 5 passed。审批动作二次确认仍需代表真机复测后才能关闭 `R7E-15/R7E-17/R7E-18`。 `BIZ8-13/BIZ8-CLOSE` 已完成权限回归和阶段收口:`cd server && npm run prisma:validate` 通过;`cd server && npm test -- tests/unit/routes/exports.apOperations.test.js tests/unit/routes/paymentBatches.reimbursement.test.js tests/unit/routes/purchase.project-link.test.js tests/unit/routes/projects.test.js tests/unit/routes/workflow.permissions.test.js tests/unit/services/financeLedger.test.js` 6 files / 27 tests passed;`cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/biz8-ap-ledger-project.spec.ts --workers=1 --reporter=list` 1 passed。付款批次仍按 P2 延期,不作为当前 R7E 阻断。 ## QAOPS8 Go/No-Go 当前结论 执行时间:2026-05-15。 `QAOPS8-17` 当前结论为 `Pause`,原因不是自动化基础门禁失败,也不是 WF8 deeplink 阻断;R7E-16D 已部署并通过公网自动化,剩余门禁是 R7E-16D 代表真机复测和最终人工验收结论。该结论用于防止把自动化或单台代表设备证据误解释为正式上线 `Go`。 | 检查项 | 当前状态 | 处理 | | --- | --- | --- | | QAOPS8 发布、备份、回滚和 SLO 基线 | 已形成 | 可作为 R7E 启动前准备证据 | | R7E-1..7 人工启动确认 | 已确认 | 可以进入启动当天公网健康复核 | | R7E-8 公网健康复核 | 已完成 | 最新代码 `96488d8` 已部署;`/ready`、public bundle、远端 migration 状态、live readiness、公网移动矩阵和审批确认专项通过 | | R7E-9..15 真实业务和真机流程 | 部分完成 | 浏览器业务线已关闭报销、审批边界、请假、采购;`R7E-9` 入口、免登录和消息 deeplink 已按代表设备关闭;`R7E-14` 按付款批次延期到 P2 口径收口;`R7E-15` 等待 R7E-16D 审批二次确认代表设备真机反馈 | | R7E-16..18 每日问题和验收结论 | 未完成 | 需试运行窗口内记录 | | WF8-11 通知 deeplink 回 OA | 已完成 | 2026-05-15 代表设备企业微信消息点击可免登录进入目标审批详情;WF8 可阶段关闭 | | BIZ8-12/13 移动业务入口和权限回归 | 已完成 | `wangzhiling` 已确认财务入口定位和付款未启用空态;财务/项目权限回归通过,BIZ8 可阶段关闭 | 保持 `Pause` 的剩余门禁: - `SMOKE101` 或 `wangshunli` 复测企业微信审批消息或 `/mobile/approvals` 详情:确认 `通过 / 驳回 / 退回` 位于底部操作区,点击后先出现二次确认且文案可理解。 - `SMOKE101` 在 PC 审批详情和待办列表快捷通过抽查:未确认前不执行审批,确认后才执行。 - `SMOKE002` 可抽查移动报销/通知/详情返回,确认部署后仍无 PC 外壳、无横向滚动。 - 付款批次闭环已延期到 P2,不作为当前 R7E 阻断。 结论:当前可以关闭 `WF8-11`、`R7E-9` 和 BIZ8 阶段流,但不能给正式上线 `Go`,也不能关闭 `R7E-15`、`R7E-17`、`R7E-18` 或 QAOPS8 后续收口项。`R7E-14` 已按付款批次延期到 P2 的变更口径收口。 ## 历史恢复 需要追溯 R70-R91 的详细流水时,使用: ```bash git show 5da05eb:docs/trialrun/人工试运行报告.md ```