文件
hyb-oa/artifacts/r70/manual-trialrun-checklist.md
T

285 行
14 KiB
Markdown
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# 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。