# R70 人工业务试运行清单 日期:2026-04-28 ## 目标 用 10 人以下科技公司的真实日常路径验证系统是否可试运行。R70 不追求覆盖所有功能,重点发现阻断真实使用的问题。 ## 执行原则 - 每个角色试用 30-60 分钟。 - 发现问题先记录,不现场扩展需求。 - P0/P1 才中断并进入立即修复判断。 - 涉及 workflow、权限、状态机、审批规则、迁移的问题必须单独 review。 - 截图放在本地即可,不提交到仓库;问题记录写入 `artifacts/r70/issue-log.csv`。 ## 严重级别 - P0:无法登录、系统不可用、核心数据丢失、权限泄露。 - P1:核心业务无法完成,例如请假/报销/审批/关键管理入口阻断。 - P2:业务可绕过但明显影响效率或理解,例如入口难找、文案误导、状态不清。 - P3:轻微体验问题,例如间距、提示、非关键排序。 ## 环境记录 - 环境 URL:`http://192.168.123.7:3000` - 执行日期:`2026-04-28` - 浏览器:`Firefox (Playwright CLI)` - 数据库/分支:`hyb_oa_manual_trialrun_20260428172231 / 2bce9c9` - 执行人:`Codex Playwright 辅助复核` ## R79 公网部署态辅助复核(2026-05-04) 当前已核实部署基线: - 公网地址:`https://oa.hyinda.com` - 服务器:`118.89.77.218` - 反向代理:`caddy` - SSH:常规 `deploy`,系统配置 `root` - 部署目录:`/opt/hyb-oa-trialrun` - 远端容器命令:`docker-compose` Codex 可代做: 1. SSH 登录服务器做只读巡检。 2. 执行 `deploy/trialrun/deploy.sh`、`/ready`、`smoke-external-deps.js`、`smoke-trialrun-runtime.js`。 3. 查看 `Caddyfile`、容器状态、日志、feature flag 与工作区配置。 4. 在你提供账号后执行 `smoke-live` 和 Playwright 公网只读复核。 必须人工配合: 1. 企业微信后台配置工作台入口与 OAuth 回调。 2. 提供独立 smoke 账号凭据,不使用真实业务账号。 3. 若需要真实企微绑定、手机扫码、二次验证,必须由你本人完成。 最小人工操作清单: 1. 企微后台配置: - 工作台入口 URL:`https://oa.hyinda.com/api/auth/wecom/login?returnTo=%2Fmobile` - OAuth 回调 URL:`https://oa.hyinda.com/api/auth/wecom/callback` 2. 确认至少两组公网只读 smoke 账号可用: - `smoke-admin` - `smoke-employee` 3. 若公网运行时 smoke 继续提示公告或搜索缺失,用管理员账号进入“功能开关”页,核对: - `portal_home_v1` - `announcements_v1` - `global_search_v1` - `wecom_entry_v1` 4. 若你让我继续代跑公网 smoke,只需要把账号标识和密码给我;我会继续完成自动化部分。 ## R80 企微公网启用回填(2026-05-04) - 企业微信域名校验文件已可访问: - `https://oa.hyinda.com/WW_verify_StBYfdlboMaIoRRE.txt` - 公网企微入口运行时已启用: - 远端 `.env`:`WECOM_ENABLED=true`、`WECOM_ENTRY_ENABLED=true`、`WECOM_OAUTH_ENABLED=true` - 数据库 `feature_flags`:`wecom_entry_v1=inherit` - 自动化核验已完成: - `GET https://oa.hyinda.com/api/auth/wecom/config` 返回 `status=ready` - `GET https://oa.hyinda.com/api/auth/wecom/login?returnTo=%2Fmobile` 返回 `302`,并跳转到 `open.weixin.qq.com` - Playwright 公网登录页快照已确认出现“使用企业微信进入工作台”按钮 - Playwright 点击后,桌面浏览器落到企微提示页“请在企业微信客户端打开链接”,符合预期 - 截图:`output/playwright/2026-05-04-wecom-login-page.png` 你现在必须人工完成的动作: 1. 用手机企业微信或桌面企业微信打开该应用,不要用普通浏览器代替。 2. 若首次进入后回到 OA 登录页并带 `wecom=unbound`: - 用已有 OA 账号密码登录 - 进入“个人设置” - 执行企微绑定 - 绑定成功后,再次从企业微信工作台进入 OA 3. 首次人工闭环时,建议只用 1 个员工测试账号,不要直接用高权限真实业务账号。 4. 若你完成首次绑定后要我继续代跑公网 smoke,再把该 smoke 账号标识告诉我,我继续补 Playwright / curl 只读核验。 ## R81 企微回调身份取证(2026-05-04) - 当前线上已追加最小安全诊断: - 企微回调若缺少 `UserId`,server 会记录: - `requestId` - `mode` - `hasUserId` - `hasOpenId` - `hasDeviceId` - 不记录 token、secret、完整敏感回包。 - 当前服务器复核结果: - `https://oa.hyinda.com/ready`:正常 - `https://oa.hyinda.com/api/auth/wecom/config`:`status=ready` - `https://oa.hyinda.com/api/auth/wecom/login?returnTo=%2Fmobile`:返回 `302` 到企微 OAuth 你现在需要做的人工操作: 1. 在手机企业微信里进入工作台,打开 OA 应用一次。 2. 如果仍然失败,不要反复点,先停在错误页。 3. 记录以下任一信息发给我: - 页面里的 `requestId` - 错误截图 - 大致时间点(精确到分钟) 4. 如果页面重新跳回登录页,也把最终 URL 或截图发给我。 我收到后会立刻去服务器抓对应日志,判断腾讯这次回包到底是: - 有 `OpenId` 但没有 `UserId` - 还是两个字段都没有 - 还是另外一种接口异常 ## R83-R86 用户开通与首次绑定收口(2026-05-04) - 本轮新增自动化覆盖: - `client/tests/e2e/user-onboarding.spec.ts` - 管理员在“系统用户管理”中创建用户时,不再手填工号和初始密码。 - 创建成功后,页面展示系统生成的员工号与一次性口令。 - 新用户首次登录后,被强制跳转到“修改密码”页,改密成功再进入 Portal。 - `client/tests/e2e/wecom-first-bind.spec.ts` - 企业微信未绑定场景回退到密码登录页后,用户仍可继续进入目标页。 - 当前代码口径: - 单个新建用户:系统自动生成员工号,管理员只维护基础资料与角色。 - 首次登录:使用一次性口令登录,必须先改密。 - 企微首次绑定:服务端已支持“未绑定回退登录后自动补绑定”的闭环,不再要求用户必须手动去“个人设置”补绑定。 - 仍需人工完成的最小动作: 1. 把本轮代码部署到目标环境。 2. 用真实手机企业微信打开 OA 应用一次,确认真实 OAuth 回调、cookie 与企业身份都正常。 3. 若仍失败,记录 `requestId`、错误截图和时间点给我,我继续抓线上日志定位。 ## R89 登录与移动端 UX 自动复核(2026-05-05) - 本轮目标:把登录页从说明型入口收敛为操作型入口,并修复手机端菜单/导航不可用的问题。 - 本地验证地址:`http://127.0.0.1:5173` - 自动化覆盖: - 企业微信移动 UA 打开 `/login` 时,首屏只突出“进入工作台”,并生成 `returnTo=/mobile` 的企微 OAuth URL。 - iPhone 视口密码登录后默认进入 `/mobile`,并完成:首页今日重点 -> 移动审批 -> 票据上传 -> 我的/更多入口。 - Pixel 视口进入非 `/mobile` 页面时,顶部菜单抽屉可打开、可关闭。 - 回归命令: - `cd client && E2E_BASE_URL=http://127.0.0.1:5173 npx playwright test tests/e2e/r89-mobile-login-navigation.spec.ts --workers=1 --reporter=list` - `cd client && npm run typecheck` - `cd client && npm run build` - 当前结论:R89 移动端自动化关键路径已通过;仍需真实手机企业微信在公网应用中复核一次真实 OAuth、cookie 与移动工作台落点。 ## 员工路径 账号:员工测试账号。 1. 登录并进入 Portal。 2. 查看今日动作、常用入口、公告和通知。 3. 新建请假草稿,提交或撤回一次。 4. 新建报销草稿,确认空白报销入口可理解。 5. 写一份周报并生成待办,完成待办。 6. 使用全局搜索查找一个业务对象。 7. 打开移动入口,确认移动审批/移动工作台入口可理解。 8. 将问题写入 `artifacts/r70/issue-log.csv`。 验收关注: - 是否知道下一步该点哪里。 - 表单必填项和错误提示是否清楚。 - 提交后状态是否能理解。 - 移动端是否能完成最小查看/处理。 ## 经理路径 账号:经理测试账号。 1. 登录并确认 Portal 是管理视角。 2. 进入待我处理,完成一条快捷审批或详情审批。 3. 查看请假团队日历,判断团队成员可用性。 4. 查看团队状态和通知。 5. 进入项目工作台,确认项目协同信息是否可理解。 6. 将问题写入 `artifacts/r70/issue-log.csv`。 验收关注: - 审批入口是否明显。 - 快捷审批和详情审批是否有足够上下文。 - 团队日历是否能支持实际排班/请假判断。 - 审批后状态是否及时刷新。 ## 管理员路径 账号:管理员测试账号。 1. 登录并确认管理入口可见。 2. 检查人员管理、组织架构入口。 3. 检查系统设置和功能开关文案。 4. 查询审计日志,确认关键操作可追踪。 5. 用普通员工视角对比,确认不应出现的管理入口不可见。 6. 将问题写入 `artifacts/r70/issue-log.csv`。 验收关注: - 管理入口是否按小团队常用频率排序。 - 配置项是否会误导非技术管理员。 - 权限边界是否符合预期。 - 审计日志是否足以追踪关键操作。 ## 结束条件 - 员工、经理、管理员三类路径都完成。 - 所有发现的问题已记录严重级别。 - P0/P1 已明确是否暂停试运行。 - `artifacts/r70/manual-trialrun-report.md` 已回填结论。 ## R71 定向复测回填 - 复测时间:`2026-04-28 19:08 - 19:11 CST` - manager:`/leave-requests` 的“团队日历”页签打开成功,显示 `2026-04-27 ~ 2026-05-03` 窗口内本部门请假数据,通过。 - employee:无发票时,报销详情页在提交按钮附近即时提示“提交前需先绑定至少 1 张发票,可在‘关联票据’区域添加。”,通过。 - employee:上传 `/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf` -> 绑定 -> 再次提交后,报销单 `4931211b-34b4-43b8-9e9f-917569d47c33` 进入 `reviewing`,编号 `BX-20260428-0001`,通过。 - 结论:R70 初始两条问题已闭环,可恢复下一轮本地人工试运行。 ## R73 自动化覆盖回填 - 自动化环境:`http://127.0.0.1:3001` - 自动化数据库:`hyb_oa_manual_trialrun_20260428172231` - 执行时间:`2026-04-28 20:49 - 21:08 CST` - 已自动化覆盖: - `client/tests/e2e/reimbursement-workflow-progress.spec.ts` - 报销提交后详情页展示当前审批进度。 - `client/tests/e2e/invoice-ocr-flow.spec.ts` - 报销详情:上传发票 -> OCR 完成 -> 自动进入可绑定候选 -> 绑定 -> 提交报销。 - 票据中心:OCR 缺关键字段 -> 当前页提示原因 -> 补齐字段 -> 标记 available。 - 显式开关的辅助自动化: - `client/tests/e2e/manual/live-invoice-ocr.spec.ts` - 用途:接入真实腾讯 OCR + 真实 VAT 发票时做本地辅助复核,不进入常规本地回归。 - 启动示例:`PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_FILE=/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf npm run test:e2e -- tests/e2e/manual/live-invoice-ocr.spec.ts` - 仍需人工体验判断: - Portal 信息架构是否易懂。 - 审批上下文是否足够。 - 移动入口与管理员入口的认知负担。 - 真实腾讯 OCR 在不同票样下的识别质量与耗时体感。 ## R73 本地环境基线回填 - 2026-04-28 本地辅助复核中,`client/tests/e2e/manual/r70-trialrun-assist.spec.ts` 首次出现 5 个失败步骤;复盘确认根因是本地运行时 env 未开启试运行所需模块,不是当前业务链路回归。 - 本地试运行前,server 运行时至少应开启: - `PORTAL_HOME_ENABLED=true` - `GLOBAL_SEARCH_ENABLED=true` - `ANNOUNCEMENTS_ENABLED=true` - `PRESENCE_BOARD_ENABLED=true` - `ATTENDANCE_ENABLED=true` - `WEEKLY_REPORT_ENABLED=true` - `EMPLOYEE_LIFECYCLE_ENABLED=true` - `TODO_BOARD_ENABLED=true` - `PROJECT_DOMAIN_ENABLED=true` - `PROJECT_LINKING_ENABLED=true` - `PROJECT_COMMUNICATION_LOG_ENABLED=true` - `PROJECT_CLOSURE_CHECKLIST_ENABLED=true` - 当前 trialrun 数据库内的 `feature_flags` 与 `workspace_settings` 已具备小团队试运行配置;若页面仍显示模块缺失,优先检查 server 进程的运行时 env,而不是先怀疑数据库种子。 - 本地 HTTP 辅助复核不要强制 `COOKIE_SECURE=true`,否则 `127.0.0.1` / `192.168.123.7` 下登录态会失效;该项只在 HTTPS 试运行部署时开启。 - 真实腾讯 OCR 已用运行时注入方式接入旧项目本地配置完成验证;不要把腾讯密钥写回仓库内 `.env`。 - 本地先跑门禁: - `cd server && TRIALRUN_RUNTIME_MODE=local node src/scripts/smoke-trialrun-runtime.js` - 深层真实业务辅助回归: - `cd client && PLAYWRIGHT_MANUAL=1 R70_TRIALRUN_DEEP_ASSIST=1 E2E_BASE_URL=http://127.0.0.1:3001 npm run test:e2e -- tests/e2e/manual/r70-trialrun-deep-assist.spec.ts` - 批量真实腾讯 OCR 辅助回归: - `cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_BATCH=1 PLAYWRIGHT_OCR_LIVE_DIR=<目录> E2E_BASE_URL=http://127.0.0.1:3001 npm run test:e2e -- tests/e2e/manual/live-invoice-ocr-batch.spec.ts` ## R77 OCR 收口回填 - 2026-04-29 已在 `http://127.0.0.1:3001` 上用真实 PDF 发票完成单张与 batch Playwright 复测,两个用例均正常通过并退出。 - 推荐本地 live OCR 复测顺序: - 先跑 `cd server && TRIALRUN_RUNTIME_MODE=local node src/scripts/smoke-trialrun-runtime.js` - 再跑单张:`cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_FILE=/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf E2E_BASE_URL=http://127.0.0.1:3001 npx playwright test tests/e2e/manual/live-invoice-ocr.spec.ts --workers=1 --reporter=list` - 最后跑 batch:`cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_BATCH=1 PLAYWRIGHT_OCR_LIVE_FILE=/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf E2E_BASE_URL=http://127.0.0.1:3001 npx playwright test tests/e2e/manual/live-invoice-ocr-batch.spec.ts --workers=1 --reporter=list` - 默认策略继续保持 `PDF first`,仅当后续遇到新的真实票样兼容性问题时,再评估是否补 PDF 转图片 fallback。