R5 完成企业微信个人消息真机验收
这个提交包含在:
@@ -87,7 +87,7 @@
|
|||||||
| 提交人移动报销体验 | `oa_smoke_01` | `SMOKE002` | 移动首页、报销页、详情页、PDF 发票入口可用 | 公网自动视觉通过;企业微信真机待补 | `output/playwright/r5-live-mobile-wecom-visual/` |
|
| 提交人移动报销体验 | `oa_smoke_01` | `SMOKE002` | 移动首页、报销页、详情页、PDF 发票入口可用 | 公网自动视觉通过;企业微信真机待补 | `output/playwright/r5-live-mobile-wecom-visual/` |
|
||||||
| 审批人移动待办体验 | `oa_smoke_02` | `SMOKE101` | 移动审批待办、审批详情、结果反馈可用 | 公网自动视觉通过;企业微信真机待补 | `output/playwright/r5-live-mobile-wecom-visual/` |
|
| 审批人移动待办体验 | `oa_smoke_02` | `SMOKE101` | 移动审批待办、审批详情、结果反馈可用 | 公网自动视觉通过;企业微信真机待补 | `output/playwright/r5-live-mobile-wecom-visual/` |
|
||||||
| 移动底部导航与深层页 | `oa_smoke_01` / `oa_smoke_02` | `SMOKE002` / `SMOKE101` | 首页、审批、报销、我的固定可见;报销详情隐藏底部 Tab,吸底双按钮不遮挡 | 公网自动视觉通过;企业微信真机待补 | `output/playwright/r5-live-mobile-wecom-visual/` |
|
| 移动底部导航与深层页 | `oa_smoke_01` / `oa_smoke_02` | `SMOKE002` / `SMOKE101` | 首页、审批、报销、我的固定可见;报销详情隐藏底部 Tab,吸底双按钮不遮挡 | 公网自动视觉通过;企业微信真机待补 | `output/playwright/r5-live-mobile-wecom-visual/` |
|
||||||
| 通知与 deeplink | `oa_smoke_01` / `oa_smoke_02` | `SMOKE002` / `SMOKE101` | 通知能回到移动待办或详情页 | 个人企微应用消息 delivery 成功;手机端收到和点击回流待用户确认 | `output/playwright/r5-wecom-app-message-live/` |
|
| 通知与 deeplink | `oa_smoke_01` / `oa_smoke_02` | `SMOKE002` / `SMOKE101` | 通知能回到移动待办或详情页 | 真机通过:收到个人应用消息,点击后首次需点进入工作台,后续可直达移动审批 | `output/playwright/r5-wecom-app-message-live/` |
|
||||||
|
|
||||||
自动化补充证据(用于审批链业务验收):
|
自动化补充证据(用于审批链业务验收):
|
||||||
|
|
||||||
@@ -95,12 +95,12 @@
|
|||||||
- `SMOKE002` 请假待办已分配给 `SMOKE101`;`SMOKE101` 本人请假待办已分配给 `SMOKE201`;`SMOKE201` 本人请假提交被 `no_actionable_approver` 阻断。
|
- `SMOKE002` 请假待办已分配给 `SMOKE101`;`SMOKE101` 本人请假待办已分配给 `SMOKE201`;`SMOKE201` 本人请假提交被 `no_actionable_approver` 阻断。
|
||||||
- `SMOKE001` 仅凭 `admin` 审批业务待办被拒绝,HTTP `403/PERM_002`。
|
- `SMOKE001` 仅凭 `admin` 审批业务待办被拒绝,HTTP `403/PERM_002`。
|
||||||
- 小额报销经 `SMOKE101` 后进入 `finance` role;大额报销进入 `SMOKE101 -> ceo -> finance_mgr`,由 `SMOKE301/SMOKE302` 测试角色验证。
|
- 小额报销经 `SMOKE101` 后进入 `finance` role;大额报销进入 `SMOKE101 -> ceo -> finance_mgr`,由 `SMOKE301/SMOKE302` 测试角色验证。
|
||||||
- 企业微信工作台、OAuth 绑定和提交人/审批人核心移动链路已有 `oa_smoke_01/oa_smoke_02` 真机阶段性通过;移动布局、PDF 上传和通知 deeplink 需在 `491b42a` 部署后复测,未完成前 R5/S5 不标 `DONE`。
|
- 企业微信工作台、OAuth 绑定和提交人/审批人核心移动链路已有 `oa_smoke_01/oa_smoke_02` 真机通过;移动布局、PDF 上传、通知 deeplink 已完成公网自动视觉和真机确认,R5/S5 可按合同回填 `DONE`。
|
||||||
- `2026-05-10` 真机补充:iPhone 11(iOS 14)与 Redmi K60(MIUI)企业微信最新版下,`oa_smoke_01 -> SMOKE002`、`oa_smoke_02 -> SMOKE101` 绑定、工作台进入、免登录、提交和审批详情/结果均通过。
|
- `2026-05-10` 真机补充:iPhone 11(iOS 14)与 Redmi K60(MIUI)企业微信最新版下,`oa_smoke_01 -> SMOKE002`、`oa_smoke_02 -> SMOKE101` 绑定、工作台进入、免登录、提交和审批详情/结果均通过。
|
||||||
- `2026-05-10` 阻断:真机发现移动底部导航和报销详情深层页在不同分辨率下存在底部区域不可见或控件挤压;发票上传正式口径改为 PDF-only。本地修复已完成,部署与真机复测完成前,S5/O3/R5 不标 `DONE`。
|
- `2026-05-10` 阻断:真机发现移动底部导航和报销详情深层页在不同分辨率下存在底部区域不可见或控件挤压;发票上传正式口径改为 PDF-only。本地修复已完成,部署与真机复测完成前,S5/O3/R5 不标 `DONE`。
|
||||||
- `2026-05-11` 公网自动视觉补充:部署 `795e976` 后,Playwright 企业微信 UA 覆盖 iPhone 11/iOS14 与 Redmi K60 视口;`SMOKE002` 移动首页、报销列表、报销详情、PDF-only 上传入口通过,`SMOKE101` 移动审批列表通过;截图目录 `output/playwright/r5-live-mobile-wecom-visual/`。用户已确认真实企业微信工作台入口和免登录通过。
|
- `2026-05-11` 公网自动视觉补充:部署 `795e976` 后,Playwright 企业微信 UA 覆盖 iPhone 11/iOS14 与 Redmi K60 视口;`SMOKE002` 移动首页、报销列表、报销详情、PDF-only 上传入口通过,`SMOKE101` 移动审批列表通过;截图目录 `output/playwright/r5-live-mobile-wecom-visual/`。用户已确认真实企业微信工作台入口和免登录通过。
|
||||||
- `2026-05-11` 通知与 deeplink 自动视觉补充:`SMOKE101` 现有两条未读报销待办站内通知,iPhone 11 与 Redmi K60 近似视口、企业微信 UA 下通知页无横向溢出,通知卡片和“查看”按钮可见;点击后进入 `/mobile/approvals?taskId=177b3a9e-67fe-447d-92f4-96a652a06841` 移动审批详情,无 PC 壳混入,截图目录 `output/playwright/r5-notification-deeplink-live/`。该历史待办已处理,因此本证据只证明站内通知和移动 deeplink,不证明新待办审批按钮;通知投递审计显示渠道 `R50-MOCK-007334` 为 `mock_sent`,真实企业微信外发应用消息仍待通道确认或真机记录。
|
- `2026-05-11` 通知与 deeplink 自动视觉补充:`SMOKE101` 现有两条未读报销待办站内通知,iPhone 11 与 Redmi K60 近似视口、企业微信 UA 下通知页无横向溢出,通知卡片和“查看”按钮可见;点击后进入 `/mobile/approvals?taskId=177b3a9e-67fe-447d-92f4-96a652a06841` 移动审批详情,无 PC 壳混入,截图目录 `output/playwright/r5-notification-deeplink-live/`。该历史待办已处理,因此本证据只证明站内通知和移动 deeplink,不证明新待办审批按钮;通知投递审计显示渠道 `R50-MOCK-007334` 为 `mock_sent`,真实企业微信外发应用消息仍待通道确认或真机记录。
|
||||||
- `2026-05-11` 个人企微应用消息补充:部署 `b1ae41f` 后启用 `R5-WECOM-APP-PERSONAL / wecom_app_message`,停用旧 mock 渠道;`SMOKE002` 创建请假测试单据并生成 `SMOKE101` 待办 `936362d8-c4e0-454f-a589-9c9653bcbfda`,通知 `9ee0602e-66a5-4a6e-81e5-04d41908c782` 投递审计为 `wecom_app_sent`、`errcode=0`、无 `invaliduser`。iPhone 11 与 Redmi K60 企业微信 UA 自动视觉验证通知列表和审批详情均无横向溢出,截图目录 `output/playwright/r5-wecom-app-message-live/`。仍需用户在手机企业微信 `oa_smoke_02` 上确认是否收到“海音达工作台”应用消息并可点击免登录回流,确认前 S5/R5 不标 `DONE`。
|
- `2026-05-11` 个人企微应用消息补充:部署 `b1ae41f` 后启用 `R5-WECOM-APP-PERSONAL / wecom_app_message`,停用旧 mock 渠道;`SMOKE002` 创建请假测试单据并生成 `SMOKE101` 待办 `936362d8-c4e0-454f-a589-9c9653bcbfda`,通知 `9ee0602e-66a5-4a6e-81e5-04d41908c782` 投递审计为 `wecom_app_sent`、`errcode=0`、无 `invaliduser`。iPhone 11 与 Redmi K60 企业微信 UA 自动视觉验证通知列表和审批详情均无横向溢出,截图目录 `output/playwright/r5-wecom-app-message-live/`。用户确认手机企业微信 `oa_smoke_02` 收到“海音达工作台”应用消息,标题正确;点击后首次进入会提示进入工作台,进入后可看到移动审批,后续再次进入可直接看到移动审批;存在消息通知但未观察到系统弹窗。
|
||||||
|
|
||||||
- 经理账号可在移动端看到审批待办。
|
- 经理账号可在移动端看到审批待办。
|
||||||
- 审批详情可查看申请摘要、附件、发票、审批记录。
|
- 审批详情可查看申请摘要、附件、发票、审批记录。
|
||||||
|
|||||||
@@ -3,5 +3,5 @@ R1,发布候选证据整理,固定首轮主线 release candidate,汇总 A1-A8
|
|||||||
R2,本地门禁与 Runbook 补强,把 A8 本地回归真实需要的本地服务参数、命令顺序、live smoke 检查和 SKIP 规则写入当前操作手册,避免后续误判。,1) Runbook 写明 SERVE_CLIENT_DIST、OCR_PROVIDER、IM_NOTIFIER_ENABLED、FIELD_ENCRYPTION_KEY 和项目 feature env 的本地门禁用途;2) live smoke 清单链接到发布准备清单;3) 不新增业务 API、数据库迁移或部署操作。,流程级验证:人工阅读 Runbook 能复现 A8 本地门禁准备;命令:rg -n '发布候选|SERVE_CLIENT_DIST|OCR_PROVIDER|IM_NOTIFIER_ENABLED|FIELD_ENCRYPTION_KEY|PROJECT_DOMAIN_ENABLED|release-readiness-checklist' docs/trialrun-runbook.md docs/trialrun/live-smoke-readiness.md docs/文档索引.md。,rg|manual,DONE,DONE,DONE,docs/trialrun-runbook.md|docs/trialrun/live-smoke-readiness.md|docs/文档索引.md,"[""R1""]",仅补文档和清单;测试 FIELD_ENCRYPTION_KEY 只能用于本地回归,生产必须使用安全密钥且不得提交。
|
R2,本地门禁与 Runbook 补强,把 A8 本地回归真实需要的本地服务参数、命令顺序、live smoke 检查和 SKIP 规则写入当前操作手册,避免后续误判。,1) Runbook 写明 SERVE_CLIENT_DIST、OCR_PROVIDER、IM_NOTIFIER_ENABLED、FIELD_ENCRYPTION_KEY 和项目 feature env 的本地门禁用途;2) live smoke 清单链接到发布准备清单;3) 不新增业务 API、数据库迁移或部署操作。,流程级验证:人工阅读 Runbook 能复现 A8 本地门禁准备;命令:rg -n '发布候选|SERVE_CLIENT_DIST|OCR_PROVIDER|IM_NOTIFIER_ENABLED|FIELD_ENCRYPTION_KEY|PROJECT_DOMAIN_ENABLED|release-readiness-checklist' docs/trialrun-runbook.md docs/trialrun/live-smoke-readiness.md docs/文档索引.md。,rg|manual,DONE,DONE,DONE,docs/trialrun-runbook.md|docs/trialrun/live-smoke-readiness.md|docs/文档索引.md,"[""R1""]",仅补文档和清单;测试 FIELD_ENCRYPTION_KEY 只能用于本地回归,生产必须使用安全密钥且不得提交。
|
||||||
R3,权限直连审计,在部署前用员工、主管、财务、管理员账号直连主路径和备用路径,确认导航隐藏没有掩盖服务端授权缺口。,1) 形成角色 x 路径允许/拒绝矩阵;2) 普通员工直连预算、AP、ERP、完整差旅、票据中心、合同台账、付款批次等备用路径不得获得越权数据;3) 若发现服务端权限缺口,先拆独立修复 Issue,不进入部署。,流程级验证:分别登录员工、主管、财务、管理员账号 -> 直连 /budgets、/ap、/system/integrations/erp、/travel-requests、/invoice-pool、/contracts-registry、/payment-batches 和对应 API -> 记录 HTTP 状态、页面提示和是否泄露数据;命令:cd client && npm run test:e2e -- permission-direct-access.spec.ts settings-governance.spec.ts login-portal-ux.spec.ts --workers=1。,playwright|curl|manual,DONE,DONE,DONE,client/tests/e2e/permission-direct-access.spec.ts|docs/trialrun/permission-direct-access-audit.md|docs/trialrun/release-readiness-checklist.md|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv,"[""R2""]",R3 已完成:新增权限直连 E2E 和审计记录;首次 E2E 因 127.0.0.1:3000 未启动失败,启动本地 OA 服务后重跑通过 10 passed;typecheck/build/CSV/diff check 通过;未发现权限泄漏,未改业务代码,R4 仍未执行。
|
R3,权限直连审计,在部署前用员工、主管、财务、管理员账号直连主路径和备用路径,确认导航隐藏没有掩盖服务端授权缺口。,1) 形成角色 x 路径允许/拒绝矩阵;2) 普通员工直连预算、AP、ERP、完整差旅、票据中心、合同台账、付款批次等备用路径不得获得越权数据;3) 若发现服务端权限缺口,先拆独立修复 Issue,不进入部署。,流程级验证:分别登录员工、主管、财务、管理员账号 -> 直连 /budgets、/ap、/system/integrations/erp、/travel-requests、/invoice-pool、/contracts-registry、/payment-batches 和对应 API -> 记录 HTTP 状态、页面提示和是否泄露数据;命令:cd client && npm run test:e2e -- permission-direct-access.spec.ts settings-governance.spec.ts login-portal-ux.spec.ts --workers=1。,playwright|curl|manual,DONE,DONE,DONE,client/tests/e2e/permission-direct-access.spec.ts|docs/trialrun/permission-direct-access-audit.md|docs/trialrun/release-readiness-checklist.md|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv,"[""R2""]",R3 已完成:新增权限直连 E2E 和审计记录;首次 E2E 因 127.0.0.1:3000 未启动失败,启动本地 OA 服务后重跑通过 10 passed;typecheck/build/CSV/diff check 通过;未发现权限泄漏,未改业务代码,R4 仍未执行。
|
||||||
R4,部署预检,检查生产/公网环境变量、数据库迁移状态、备份、回滚命令、Caddy/systemd 状态、/ready 和前端资源版本;未经批准不部署。,1) 生产环境变量缺项和敏感项不打印;2) 数据库迁移状态明确且有备份/回滚路径;3) Caddy/systemd 或既有部署方式健康;4) /ready 与前端资源版本可核对;5) 若需要修改生产配置,必须先获得确认。,流程级验证:只读检查部署目录、服务状态和 /ready;命令:node scripts/qa/check-live-smoke-env.mjs;命令:LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;生产变更前必须停止等待批准。,ssh|bash|node|manual,DONE,DONE,DONE,deploy/*|scripts/qa/*|docs/trialrun/release-readiness-checklist.md,"[""R3""]",R4 完成:先发现远端运行时代码未对齐,后续按治理合同完成部署前备份、D3 受控同步和 D4 只读复检;远端关键运行时文件哈希已对齐,本机/公网 /ready 200,Prisma up to date,Caddy 正常,企业微信 config 不含 secret,公网 bundle 扫描 0 findings;R5 仍未执行。
|
R4,部署预检,检查生产/公网环境变量、数据库迁移状态、备份、回滚命令、Caddy/systemd 状态、/ready 和前端资源版本;未经批准不部署。,1) 生产环境变量缺项和敏感项不打印;2) 数据库迁移状态明确且有备份/回滚路径;3) Caddy/systemd 或既有部署方式健康;4) /ready 与前端资源版本可核对;5) 若需要修改生产配置,必须先获得确认。,流程级验证:只读检查部署目录、服务状态和 /ready;命令:node scripts/qa/check-live-smoke-env.mjs;命令:LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;生产变更前必须停止等待批准。,ssh|bash|node|manual,DONE,DONE,DONE,deploy/*|scripts/qa/*|docs/trialrun/release-readiness-checklist.md,"[""R3""]",R4 完成:先发现远端运行时代码未对齐,后续按治理合同完成部署前备份、D3 受控同步和 D4 只读复检;远端关键运行时文件哈希已对齐,本机/公网 /ready 200,Prisma up to date,Caddy 正常,企业微信 config 不含 secret,公网 bundle 扫描 0 findings;R5 仍未执行。
|
||||||
R5,公网企业微信和真实 OCR live smoke,在 R4 预检通过且真实测试账号、企业微信配置和真实 OCR 样票齐备后,执行公网登录、企业微信入口、移动审批、报销/OCR 上传和通知 deeplink。,1) LIVE_SMOKE_* 从缺失变为可执行;2) 企业微信 config、OAuth 跳转和手机入口可验证;3) 真实 PDF OCR 样票上传能进入可解释终态;4) PC/自动化审批链证明 SMOKE002->SMOKE101->SMOKE201->SMOKE302/SMOKE301、自审禁止和 admin-only 不能审批;5) 企业微信移动体验验证入口、绑定、免登录、移动待办、报销详情、PDF 上传、底部导航和 deeplink;6) 缺配置时继续 SKIP,不得宣称真机或真实 OCR 通过。,流程级验证:node scripts/qa/check-live-smoke-env.mjs --strict;命令:LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;PC 审批链:公网 PC 登录 SMOKE002/SMOKE101/SMOKE201/SMOKE301/SMOKE302 或复用自动化证据验证正式链路;人工真机:手机企业微信工作台打开海音达工作台 -> 免登录 -> 移动待办/报销详情/PDF 上传/deeplink -> 记录结果。,node|bash|playwright|manual,DOING,TODO,TODO,scripts/qa/*|docs/trialrun/live-smoke-readiness.md|docs/trialrun/real-device-public-checklist.md,"[""R4""]",R5 partial 2026-05-11:最新 RC 795e976 已部署并完成 R4 只读复检;公网 live smoke 3 passed,真实 PDF OCR 不再 SKIP,终态为 ocr_failed/该发票已用于报销不能重复添加,证据 artifacts/qa-flow/live-smoke-readiness-20260511-001603;O3 PC/自动化审批链已完成并回填 DONE;公网自动移动视觉通过,截图 output/playwright/r5-live-mobile-wecom-visual/;用户确认真实企业微信工作台入口和免登录通过;站内通知与移动 deeplink 自动视觉通过,截图 output/playwright/r5-notification-deeplink-live/。2026-05-11 追加:b1ae41f 已部署,R4 复检通过;通知渠道切换为 R5-WECOM-APP-PERSONAL/wecom_app_message,旧 R50-MOCK-007334 已停用;strict 准入通过,live smoke 报告 artifacts/qa-flow/live-smoke-readiness-20260511-092236;SMOKE002->SMOKE101 新待办 936362d8-c4e0-454f-a589-9c9653bcbfda 的 delivery=wecom_app_sent/errcode=0/无 invaliduser,企业微信 UA 自动视觉通过,截图 output/playwright/r5-wecom-app-message-live/。主 R5 仍 DOING/TODO/TODO:等待用户在手机企业微信 oa_smoke_02 上确认个人应用消息到达并可点击回流;R6 继续 TODO。
|
R5,公网企业微信和真实 OCR live smoke,在 R4 预检通过且真实测试账号、企业微信配置和真实 OCR 样票齐备后,执行公网登录、企业微信入口、移动审批、报销/OCR 上传和通知 deeplink。,1) LIVE_SMOKE_* 从缺失变为可执行;2) 企业微信 config、OAuth 跳转和手机入口可验证;3) 真实 PDF OCR 样票上传能进入可解释终态;4) PC/自动化审批链证明 SMOKE002->SMOKE101->SMOKE201->SMOKE302/SMOKE301、自审禁止和 admin-only 不能审批;5) 企业微信移动体验验证入口、绑定、免登录、移动待办、报销详情、PDF 上传、底部导航和 deeplink;6) 缺配置时继续 SKIP,不得宣称真机或真实 OCR 通过。,流程级验证:node scripts/qa/check-live-smoke-env.mjs --strict;命令:LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;PC 审批链:公网 PC 登录 SMOKE002/SMOKE101/SMOKE201/SMOKE301/SMOKE302 或复用自动化证据验证正式链路;人工真机:手机企业微信工作台打开海音达工作台 -> 免登录 -> 移动待办/报销详情/PDF 上传/deeplink -> 记录结果。,node|bash|playwright|manual,DONE,DONE,DONE,scripts/qa/*|docs/trialrun/live-smoke-readiness.md|docs/trialrun/real-device-public-checklist.md,"[""R4""]",R5 completed 2026-05-11:最新 RC 795e976 已部署并完成 R4 只读复检;公网 live smoke 3 passed,真实 PDF OCR 不再 SKIP,终态为 ocr_failed/该发票已用于报销不能重复添加,证据 artifacts/qa-flow/live-smoke-readiness-20260511-001603;O3 PC/自动化审批链已完成并回填 DONE;公网自动移动视觉通过,截图 output/playwright/r5-live-mobile-wecom-visual/;用户确认真实企业微信工作台入口和免登录通过;站内通知与移动 deeplink 自动视觉通过,截图 output/playwright/r5-notification-deeplink-live/。2026-05-11 追加:b1ae41f 已部署,R4 复检通过;通知渠道切换为 R5-WECOM-APP-PERSONAL/wecom_app_message,旧 R50-MOCK-007334 已停用;strict 准入通过,live smoke 报告 artifacts/qa-flow/live-smoke-readiness-20260511-092236;SMOKE002->SMOKE101 新待办 936362d8-c4e0-454f-a589-9c9653bcbfda 的 delivery=wecom_app_sent/errcode=0/无 invaliduser,企业微信 UA 自动视觉通过,截图 output/playwright/r5-wecom-app-message-live/。用户已确认 oa_smoke_02 手机企业微信收到“海音达工作台”个人应用消息,标题正确;点击后首次进入提示进入工作台,进入后可看到移动审批,后续再次进入可直接看到移动审批;有消息通知但未观察到系统弹窗。主 R5 已回填 DONE/DONE/DONE;R6 继续 TODO,需单独规划和批准。
|
||||||
R6,小范围试运行,公网和真机 smoke 通过后,只开放 2-3 个内部用户按清单试运行报销、请假、采购、审批、企业微信移动入口、付款和导出;反馈转新 Issue。,1) 试运行名单、角色、时间窗口和回滚联系人明确;2) 员工提交、审批人审批、财务付款/导出、企业微信 deeplink 回 OA 均有记录;3) 每日问题只登记和分级,不现场扩大 P2 功能范围;4) 试运行结束形成继续/回滚/修复判断。,流程级验证:员工提交报销/请假/采购 -> 主管或财务审批 -> 财务付款或导出 -> 企业微信通知 deeplink 回 OA -> 管理员检查审计和状态;人工记录问题、截图和处理结论。,manual|playwright,TODO,TODO,TODO,docs/trialrun/release-readiness-checklist.md|docs/trialrun/manual-trialrun-report.md|issues/*.csv,"[""R5""]",小范围试运行前不得扩 P2 预算、ERP、AI、完整差旅、复杂 BPM;反馈必须进入新 Issue CSV。
|
R6,小范围试运行,公网和真机 smoke 通过后,只开放 2-3 个内部用户按清单试运行报销、请假、采购、审批、企业微信移动入口、付款和导出;反馈转新 Issue。,1) 试运行名单、角色、时间窗口和回滚联系人明确;2) 员工提交、审批人审批、财务付款/导出、企业微信 deeplink 回 OA 均有记录;3) 每日问题只登记和分级,不现场扩大 P2 功能范围;4) 试运行结束形成继续/回滚/修复判断。,流程级验证:员工提交报销/请假/采购 -> 主管或财务审批 -> 财务付款或导出 -> 企业微信通知 deeplink 回 OA -> 管理员检查审计和状态;人工记录问题、截图和处理结论。,manual|playwright,TODO,TODO,TODO,docs/trialrun/release-readiness-checklist.md|docs/trialrun/manual-trialrun-report.md|issues/*.csv,"[""R5""]",小范围试运行前不得扩 P2 预算、ERP、AI、完整差旅、复杂 BPM;反馈必须进入新 Issue CSV。
|
||||||
|
|||||||
|
@@ -3,4 +3,4 @@ S1,测试组织账号合同与现状确认,建立正式审批链测试替身账
|
|||||||
S2,创建测试组织账号与本机凭据,创建或更新 SMOKE101/SMOKE201/SMOKE301/SMOKE302/SMOKE401,并更新 SMOKE002 直属主管到测试主管;密码只写入仓库外本机凭据文件。,1) SMOKE002 直属主管为 SMOKE101;2) SMOKE101=manager+employee 直属领导 SMOKE201;3) SMOKE201=ceo+employee;4) SMOKE301=finance+employee;5) SMOKE302=finance+finance_mgr+employee;6) SMOKE401=hr+employee;7) ~/.hyb-oa/live-smoke.env 权限 600 且不提交。,流程级验证:stat -c '%a %n' ~/.hyb-oa/live-smoke.env;远端 Prisma transaction 写入后只读复核 employeeNo/email/status/roles/directManager;node scripts/qa/check-live-smoke-env.mjs --strict。,ssh|node|manual,DONE,DONE,DONE,external|~/.hyb-oa/live-smoke.env,"[""S1""]",S2 completed:因上一轮工具输出污染过生成密码,本轮已轮换全部 SMOKE 测试密码;~/.hyb-oa/live-smoke.env 权限 600,未提交、未打印密码;远端 Prisma transaction 已创建/更新 SMOKE001/SMOKE002/SMOKE101/SMOKE201/SMOKE301/SMOKE302/SMOKE401,部门=管理部,法人=试运行法体;SMOKE002.directManager=SMOKE101,SMOKE101.directManager=SMOKE201,SMOKE201=ceo+employee,SMOKE301=finance+employee,SMOKE302=finance+finance_mgr+employee,SMOKE401=hr+employee;已撤销测试账号旧会话 23 个;check-live-smoke-env --strict 通过。回滚:删除新增 SMOKE101/SMOKE201/SMOKE301/SMOKE302/SMOKE401,SMOKE002.direct_manager_id 恢复 HYD000007/majianyong,按需要再次重置 SMOKE001/SMOKE002 密码;未部署、未迁移、未重启、未改远端 .env。
|
S2,创建测试组织账号与本机凭据,创建或更新 SMOKE101/SMOKE201/SMOKE301/SMOKE302/SMOKE401,并更新 SMOKE002 直属主管到测试主管;密码只写入仓库外本机凭据文件。,1) SMOKE002 直属主管为 SMOKE101;2) SMOKE101=manager+employee 直属领导 SMOKE201;3) SMOKE201=ceo+employee;4) SMOKE301=finance+employee;5) SMOKE302=finance+finance_mgr+employee;6) SMOKE401=hr+employee;7) ~/.hyb-oa/live-smoke.env 权限 600 且不提交。,流程级验证:stat -c '%a %n' ~/.hyb-oa/live-smoke.env;远端 Prisma transaction 写入后只读复核 employeeNo/email/status/roles/directManager;node scripts/qa/check-live-smoke-env.mjs --strict。,ssh|node|manual,DONE,DONE,DONE,external|~/.hyb-oa/live-smoke.env,"[""S1""]",S2 completed:因上一轮工具输出污染过生成密码,本轮已轮换全部 SMOKE 测试密码;~/.hyb-oa/live-smoke.env 权限 600,未提交、未打印密码;远端 Prisma transaction 已创建/更新 SMOKE001/SMOKE002/SMOKE101/SMOKE201/SMOKE301/SMOKE302/SMOKE401,部门=管理部,法人=试运行法体;SMOKE002.directManager=SMOKE101,SMOKE101.directManager=SMOKE201,SMOKE201=ceo+employee,SMOKE301=finance+employee,SMOKE302=finance+finance_mgr+employee,SMOKE401=hr+employee;已撤销测试账号旧会话 23 个;check-live-smoke-env --strict 通过。回滚:删除新增 SMOKE101/SMOKE201/SMOKE301/SMOKE302/SMOKE401,SMOKE002.direct_manager_id 恢复 HYD000007/majianyong,按需要再次重置 SMOKE001/SMOKE002 密码;未部署、未迁移、未重启、未改远端 .env。
|
||||||
S3,更新 R5/O3 与真机清单口径,把 O3/R5 和真机验收清单从真实人员链路调整为测试替身账号链路,同时保留生产组织事实源说明。,1) 真机矩阵使用 SMOKE002->SMOKE101->SMOKE201->SMOKE302/SMOKE301;2) SMOKE001 仅管理员不具备业务审批权;3) 企业微信测试成员缺失时记录 BLOCKED;4) 主 R5/O3 不因文档调整自动完成。,流程级验证:rg -n 'SMOKE101|SMOKE201|SMOKE301|SMOKE302|测试替身|企业微信测试成员|admin 不代表业务审批权' docs/trialrun/real-device-public-checklist.md issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv issues/2026-05-10_18-25-33-formal-approval-org-config.csv;git diff --check。,rg|manual,DONE,DONE,DONE,docs/trialrun/real-device-public-checklist.md|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|issues/2026-05-10_18-25-33-formal-approval-org-config.csv,"[""S2""]",S3 completed:真机清单、O3 合同和主 R5 Notes 已改为测试替身账号验收口径;生产正式组织事实源仍为 majianyong/wangshunli,但 R5/O3 验收使用 SMOKE002->SMOKE101->SMOKE201->SMOKE302/SMOKE301;SMOKE001 仅测试管理员,不代表业务审批权;若无企业微信测试成员,企业微信原生身份验收记 BLOCKED,R5/O3 不得 DONE。
|
S3,更新 R5/O3 与真机清单口径,把 O3/R5 和真机验收清单从真实人员链路调整为测试替身账号链路,同时保留生产组织事实源说明。,1) 真机矩阵使用 SMOKE002->SMOKE101->SMOKE201->SMOKE302/SMOKE301;2) SMOKE001 仅管理员不具备业务审批权;3) 企业微信测试成员缺失时记录 BLOCKED;4) 主 R5/O3 不因文档调整自动完成。,流程级验证:rg -n 'SMOKE101|SMOKE201|SMOKE301|SMOKE302|测试替身|企业微信测试成员|admin 不代表业务审批权' docs/trialrun/real-device-public-checklist.md issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv issues/2026-05-10_18-25-33-formal-approval-org-config.csv;git diff --check。,rg|manual,DONE,DONE,DONE,docs/trialrun/real-device-public-checklist.md|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|issues/2026-05-10_18-25-33-formal-approval-org-config.csv,"[""S2""]",S3 completed:真机清单、O3 合同和主 R5 Notes 已改为测试替身账号验收口径;生产正式组织事实源仍为 majianyong/wangshunli,但 R5/O3 验收使用 SMOKE002->SMOKE101->SMOKE201->SMOKE302/SMOKE301;SMOKE001 仅测试管理员,不代表业务审批权;若无企业微信测试成员,企业微信原生身份验收记 BLOCKED,R5/O3 不得 DONE。
|
||||||
S4,测试组织自动化验收,用测试组织账号执行公网自动化 live smoke、真实 OCR 和正式审批链自动化覆盖,验证不依赖真实员工。,1) run-live-smoke-readiness.sh 通过;2) 普通员工低/中额待办给 SMOKE101;3) 高额/例外链路进入 SMOKE101->SMOKE201 或按现有规则进入财务节点;4) SMOKE101 本人申请给 SMOKE201;5) SMOKE201 自审被阻断或进入非本人兜底;6) SMOKE001 不能仅凭 admin 审批;7) 财务/财务主管权限由 SMOKE301/SMOKE302 验证。,流程级验证:LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;执行临时/仓库脚本提交请假/报销/采购并只读检查 workflowTask assignee;远端 audit-smoke-data 只读统计。,bash|node|ssh|playwright,DONE,DONE,DONE,scripts/qa/*|external,"[""S3""]","S4 completed:run-live-smoke-readiness.sh 通过,证据 artifacts/qa-flow/live-smoke-readiness-20260510-205136,public-bundle findings=0,live smoke 3 passed,真实 OCR 样票不再 SKIP,终态 ocr_failed/重复发票可解释,pending OCR 因缺 DATABASE_URL 辅助 SKIP;临时正式测试组织链路脚本通过:SMOKE002 请假 214cb9d1-4b5a-4cef-9b3f-07243e9ea100 -> task 8a72bc3a-7773-4cc9-af3f-ce8b08c66a72,由 SMOKE101 可见;SMOKE001 admin-only 审批该任务被拒绝 403/PERM_002;SMOKE101 本人请假 af74a8e3-3df4-4a0b-b33d-8ab1f9116652 -> task da6cc325-4621-4992-a5a8-96ffd56b442a,由 SMOKE201 可见;SMOKE201 本人请假 81dcded2-e455-4568-9d25-9152f725ef33 提交被 409/VALID_001 阻断,details.workflow=no_actionable_approver reason=no_manager_found;小额报销 735095fa-dec1-492b-ab00-1d042a85d838 经 SMOKE101 审批后进入 finance role task 262f25d2-0203-470b-a4fc-fa4f81d62448,可由 SMOKE301 验证;大额报销 edfc6bbb-3210-433d-94fe-61eaacfb1eff 链路为 SMOKE101 task 177b3a9e-67fe-447d-92f4-96a652a06841 -> ceo role task 2b3a28d9-bfbb-42f8-8349-870d488577b6 -> finance_mgr role task 61af7b2f-5463-4c1c-97e9-b1c68dad6b63,可由 SMOKE302 验证;只读 smoke 审计 employees=7, authSessions=613, reimbursements=3, reimbursementItems=2, invoices=7, leaveRequests=4, workflowInstances=5, workflowTasksAssigned=4, workflowTasksCompleted=3, workflowHistory=8, notifications=6, auditLogs=280;本轮不清理测试数据,清理需另拆 destructive cleanup Issue。"
|
S4,测试组织自动化验收,用测试组织账号执行公网自动化 live smoke、真实 OCR 和正式审批链自动化覆盖,验证不依赖真实员工。,1) run-live-smoke-readiness.sh 通过;2) 普通员工低/中额待办给 SMOKE101;3) 高额/例外链路进入 SMOKE101->SMOKE201 或按现有规则进入财务节点;4) SMOKE101 本人申请给 SMOKE201;5) SMOKE201 自审被阻断或进入非本人兜底;6) SMOKE001 不能仅凭 admin 审批;7) 财务/财务主管权限由 SMOKE301/SMOKE302 验证。,流程级验证:LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;执行临时/仓库脚本提交请假/报销/采购并只读检查 workflowTask assignee;远端 audit-smoke-data 只读统计。,bash|node|ssh|playwright,DONE,DONE,DONE,scripts/qa/*|external,"[""S3""]","S4 completed:run-live-smoke-readiness.sh 通过,证据 artifacts/qa-flow/live-smoke-readiness-20260510-205136,public-bundle findings=0,live smoke 3 passed,真实 OCR 样票不再 SKIP,终态 ocr_failed/重复发票可解释,pending OCR 因缺 DATABASE_URL 辅助 SKIP;临时正式测试组织链路脚本通过:SMOKE002 请假 214cb9d1-4b5a-4cef-9b3f-07243e9ea100 -> task 8a72bc3a-7773-4cc9-af3f-ce8b08c66a72,由 SMOKE101 可见;SMOKE001 admin-only 审批该任务被拒绝 403/PERM_002;SMOKE101 本人请假 af74a8e3-3df4-4a0b-b33d-8ab1f9116652 -> task da6cc325-4621-4992-a5a8-96ffd56b442a,由 SMOKE201 可见;SMOKE201 本人请假 81dcded2-e455-4568-9d25-9152f725ef33 提交被 409/VALID_001 阻断,details.workflow=no_actionable_approver reason=no_manager_found;小额报销 735095fa-dec1-492b-ab00-1d042a85d838 经 SMOKE101 审批后进入 finance role task 262f25d2-0203-470b-a4fc-fa4f81d62448,可由 SMOKE301 验证;大额报销 edfc6bbb-3210-433d-94fe-61eaacfb1eff 链路为 SMOKE101 task 177b3a9e-67fe-447d-92f4-96a652a06841 -> ceo role task 2b3a28d9-bfbb-42f8-8349-870d488577b6 -> finance_mgr role task 61af7b2f-5463-4c1c-97e9-b1c68dad6b63,可由 SMOKE302 验证;只读 smoke 审计 employees=7, authSessions=613, reimbursements=3, reimbursementItems=2, invoices=7, leaveRequests=4, workflowInstances=5, workflowTasksAssigned=4, workflowTasksCompleted=3, workflowHistory=8, notifications=6, auditLogs=280;本轮不清理测试数据,清理需另拆 destructive cleanup Issue。"
|
||||||
S5,企业微信移动体验门禁与状态回填,使用现有 oa_smoke_01/oa_smoke_02 企业微信测试成员绑定 OA 测试员工和测试主管,完成移动入口与体验复测;不再要求负责人、财务、财务主管替身账号绑定企业微信。,1) 企业微信工作台可进入 OA;2) 已绑定免登录、移动首页、审批待办、报销详情、PDF 上传入口、底部导航、吸底双按钮和通知 deeplink 有记录;3) SMOKE201/SMOKE301/SMOKE302 通过 PC/自动化验收,不作为企业微信硬门槛;4) O3/R5 仅在 PC 审批链、自动化 live smoke、真实 PDF OCR 和企业微信移动体验均通过后 DONE;5) R6 仍等待 R5 完成。,流程级验证:按 docs/trialrun/real-device-public-checklist.md 用 oa_smoke_01->SMOKE002 和 oa_smoke_02->SMOKE101 执行企业微信移动体验;负责人/财务替身角色通过 PC 公网网页或自动化验证;校验新合同、O3 合同和主 R5 合同;git diff --check。,manual|python3,DOING,TODO,TODO,docs/trialrun/real-device-public-checklist.md|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|issues/2026-05-10_18-25-33-formal-approval-org-config.csv,"[""S4""]",S5 partial 2026-05-11:部署 795e976 后,公网自动视觉已通过,Playwright 企业微信 UA 覆盖 iPhone 11/iOS14 与 Redmi K60;SMOKE002 移动首页、报销列表、报销详情、PDF-only 上传入口通过,SMOKE101 移动审批列表通过;截图目录 output/playwright/r5-live-mobile-wecom-visual/。用户已确认真实企业微信工作台入口和免登录通过。站内通知与移动 deeplink 自动视觉通过:SMOKE101 两条未读报销待办通知可见,点击“查看”进入移动审批详情,截图 output/playwright/r5-notification-deeplink-live/。2026-05-11 已部署 b1ae41f 并切换个人企微应用消息渠道;SMOKE002->SMOKE101 新待办 936362d8-c4e0-454f-a589-9c9653bcbfda 的 delivery=wecom_app_sent/errcode=0/无 invaliduser,企业微信 UA 自动视觉通过,截图 output/playwright/r5-wecom-app-message-live/。仍待用户手机确认 oa_smoke_02 是否收到并可点击回流;完成前 S5/R5 不标 DONE。
|
S5,企业微信移动体验门禁与状态回填,使用现有 oa_smoke_01/oa_smoke_02 企业微信测试成员绑定 OA 测试员工和测试主管,完成移动入口与体验复测;不再要求负责人、财务、财务主管替身账号绑定企业微信。,1) 企业微信工作台可进入 OA;2) 已绑定免登录、移动首页、审批待办、报销详情、PDF 上传入口、底部导航、吸底双按钮和通知 deeplink 有记录;3) SMOKE201/SMOKE301/SMOKE302 通过 PC/自动化验收,不作为企业微信硬门槛;4) O3/R5 仅在 PC 审批链、自动化 live smoke、真实 PDF OCR 和企业微信移动体验均通过后 DONE;5) R6 仍等待 R5 完成。,流程级验证:按 docs/trialrun/real-device-public-checklist.md 用 oa_smoke_01->SMOKE002 和 oa_smoke_02->SMOKE101 执行企业微信移动体验;负责人/财务替身角色通过 PC 公网网页或自动化验证;校验新合同、O3 合同和主 R5 合同;git diff --check。,manual|python3,DONE,DONE,DONE,docs/trialrun/real-device-public-checklist.md|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|issues/2026-05-10_18-25-33-formal-approval-org-config.csv,"[""S4""]",S5 completed 2026-05-11:部署 795e976 后,公网自动视觉已通过,Playwright 企业微信 UA 覆盖 iPhone 11/iOS14 与 Redmi K60;SMOKE002 移动首页、报销列表、报销详情、PDF-only 上传入口通过,SMOKE101 移动审批列表通过;截图目录 output/playwright/r5-live-mobile-wecom-visual/。用户已确认真实企业微信工作台入口和免登录通过。站内通知与移动 deeplink 自动视觉通过:SMOKE101 两条未读报销待办通知可见,点击“查看”进入移动审批详情,截图 output/playwright/r5-notification-deeplink-live/。2026-05-11 已部署 b1ae41f 并切换个人企微应用消息渠道;SMOKE002->SMOKE101 新待办 936362d8-c4e0-454f-a589-9c9653bcbfda 的 delivery=wecom_app_sent/errcode=0/无 invaliduser,企业微信 UA 自动视觉通过,截图 output/playwright/r5-wecom-app-message-live/。用户已确认 oa_smoke_02 手机企业微信收到“海音达工作台”个人应用消息,标题正确;点击后首次进入提示进入工作台,进入后可看到移动审批,后续再次进入可直接看到移动审批;有消息通知但未观察到系统弹窗。S5 已满足企业微信移动体验门禁。
|
||||||
|
|||||||
|
@@ -5,5 +5,5 @@ Q3,受控部署最新 RC,执行既有 deploy/trialrun/deploy.sh 将当前 RC 同
|
|||||||
Q4,部署后 R4 只读复检,部署成功后复检公网运行环境已对齐 795e976,并确认公网基础服务健康。,1) 关键文件哈希本地与远端一致;2) /ready 200;3) Prisma migrate status up to date;4) server/db 容器健康;5) Caddy active 且反代正确;6) 企业微信 config 可读且不暴露 secret;7) 公网 bundle 扫描 findings=0。,流程级验证:sha256sum 对比关键文件;ssh 只读检查容器和 Prisma status;curl https://oa.hyinda.com/ready;node scripts/qa/check-public-bundle-copy.mjs https://oa.hyinda.com;node scripts/qa/check-live-smoke-env.mjs --strict。,ssh|curl|node|manual,DONE,DONE,DONE,scripts/qa/*|deploy/trialrun/*,"[""Q3""]",Q4 completed:workspaceSettings/NavLinks/workflow/invoicePool/MobileReimbursementDetail/MobileReimbursements/EmployeeAvatar 本地与远端 sha256 一致;公网 /ready ok;远端 server Up、db Up healthy;Prisma 46 migrations up to date;Caddy active/enabled,127.0.0.1:3000 /ready ok;check-live-smoke-env 非 strict 显示 publicReady=true wecom=ready;未 source 凭据时 strict 缺 LIVE_SMOKE_*,已转入 Q5 source 凭据验证;公网 bundle scanned=54 focused=4 findings=0。
|
Q4,部署后 R4 只读复检,部署成功后复检公网运行环境已对齐 795e976,并确认公网基础服务健康。,1) 关键文件哈希本地与远端一致;2) /ready 200;3) Prisma migrate status up to date;4) server/db 容器健康;5) Caddy active 且反代正确;6) 企业微信 config 可读且不暴露 secret;7) 公网 bundle 扫描 findings=0。,流程级验证:sha256sum 对比关键文件;ssh 只读检查容器和 Prisma status;curl https://oa.hyinda.com/ready;node scripts/qa/check-public-bundle-copy.mjs https://oa.hyinda.com;node scripts/qa/check-live-smoke-env.mjs --strict。,ssh|curl|node|manual,DONE,DONE,DONE,scripts/qa/*|deploy/trialrun/*,"[""Q3""]",Q4 completed:workspaceSettings/NavLinks/workflow/invoicePool/MobileReimbursementDetail/MobileReimbursements/EmployeeAvatar 本地与远端 sha256 一致;公网 /ready ok;远端 server Up、db Up healthy;Prisma 46 migrations up to date;Caddy active/enabled,127.0.0.1:3000 /ready ok;check-live-smoke-env 非 strict 显示 publicReady=true wecom=ready;未 source 凭据时 strict 缺 LIVE_SMOKE_*,已转入 Q5 source 凭据验证;公网 bundle scanned=54 focused=4 findings=0。
|
||||||
Q5,公网 R5 自动化,使用仓库外 live smoke 凭据执行公网 readiness、live smoke、真实 PDF OCR 和公网 bundle 检查。,1) ~/.hyb-oa/live-smoke.env 权限 600;2) check-live-smoke-env --strict 通过;3) run-live-smoke-readiness.sh 通过;4) live smoke 不 SKIP;5) 真实 PDF OCR 不 SKIP 且进入可解释终态;6) public bundle findings=0。,流程级验证:stat -c '%a %n' ~/.hyb-oa/live-smoke.env;source 凭据但不打印;node scripts/qa/check-live-smoke-env.mjs --strict;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;检查最新 artifacts/qa-flow/live-smoke-readiness-*。,node|bash|playwright,DONE,DONE,DONE,scripts/qa/*|artifacts/qa-flow|client/tests/e2e/helpers/liveInvoiceOcr.ts|client/tests/e2e/manual/live-invoice-ocr.spec.ts,"[""Q4""]",Q5 completed:~/.hyb-oa/live-smoke.env 权限 600;source 后 check-live-smoke-env --strict 通过,publicReady=true wecom=ready liveSmokeReady=true liveOcrReady=true;首次 live OCR 因重复样票上传返回不可新增而 helper 等待旧详情超时,已修正测试 helper 处理重复/相同发票可解释终态;client typecheck 通过;重跑 run-live-smoke-readiness.sh 通过,证据 artifacts/qa-flow/live-smoke-readiness-20260511-001603,live smoke 3 passed,真实 PDF OCR 1 passed,终态 ocr_failed/已用于报销不能重复添加,public bundle findings=0,pending OCR 因缺 DATABASE_URL 辅助 SKIP。 后续收紧 helper 判断,避免非重复失败被误判为重复;client typecheck 通过,单独重跑 live-invoice-ocr.spec.ts 1 passed。
|
Q5,公网 R5 自动化,使用仓库外 live smoke 凭据执行公网 readiness、live smoke、真实 PDF OCR 和公网 bundle 检查。,1) ~/.hyb-oa/live-smoke.env 权限 600;2) check-live-smoke-env --strict 通过;3) run-live-smoke-readiness.sh 通过;4) live smoke 不 SKIP;5) 真实 PDF OCR 不 SKIP 且进入可解释终态;6) public bundle findings=0。,流程级验证:stat -c '%a %n' ~/.hyb-oa/live-smoke.env;source 凭据但不打印;node scripts/qa/check-live-smoke-env.mjs --strict;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;检查最新 artifacts/qa-flow/live-smoke-readiness-*。,node|bash|playwright,DONE,DONE,DONE,scripts/qa/*|artifacts/qa-flow|client/tests/e2e/helpers/liveInvoiceOcr.ts|client/tests/e2e/manual/live-invoice-ocr.spec.ts,"[""Q4""]",Q5 completed:~/.hyb-oa/live-smoke.env 权限 600;source 后 check-live-smoke-env --strict 通过,publicReady=true wecom=ready liveSmokeReady=true liveOcrReady=true;首次 live OCR 因重复样票上传返回不可新增而 helper 等待旧详情超时,已修正测试 helper 处理重复/相同发票可解释终态;client typecheck 通过;重跑 run-live-smoke-readiness.sh 通过,证据 artifacts/qa-flow/live-smoke-readiness-20260511-001603,live smoke 3 passed,真实 PDF OCR 1 passed,终态 ocr_failed/已用于报销不能重复添加,public bundle findings=0,pending OCR 因缺 DATABASE_URL 辅助 SKIP。 后续收紧 helper 判断,避免非重复失败被误判为重复;client typecheck 通过,单独重跑 live-invoice-ocr.spec.ts 1 passed。
|
||||||
Q6,O3 PC/自动化审批链收口,按门禁拆分口径,用 S4 自动化证据或 PC 公网页面补充证明正式测试组织审批链,不要求负责人/财务账号绑定企业微信。,1) SMOKE002->SMOKE101 普通链路通过;2) SMOKE101->SMOKE201 主管本人链路通过;3) SMOKE201 自审阻断通过;4) SMOKE001 admin-only 不能审批通过;5) 小额 finance 与大额 ceo/finance_mgr 节点通过;6) O3 可回填 DONE。,流程级验证:复核 S4 证据;必要时 PC 公网网页登录 SMOKE201/SMOKE301/SMOKE302 补负责人、财务、财务主管页面记录;校验 O3 合同。,playwright|manual|python3,DONE,DONE,DONE,issues/2026-05-10_18-25-33-formal-approval-org-config.csv|docs/trialrun/real-device-public-checklist.md,"[""Q5""]",Q6 completed:按 P 合同门禁拆分口径复用 S4 公网自动化正式测试组织链路证据,且 Q5 最新公网 live smoke 通过;O3 已回填 DONE/DONE/DONE。SMOKE201/SMOKE301/SMOKE302 负责人/财务替身账号不再作为企业微信绑定硬门槛。
|
Q6,O3 PC/自动化审批链收口,按门禁拆分口径,用 S4 自动化证据或 PC 公网页面补充证明正式测试组织审批链,不要求负责人/财务账号绑定企业微信。,1) SMOKE002->SMOKE101 普通链路通过;2) SMOKE101->SMOKE201 主管本人链路通过;3) SMOKE201 自审阻断通过;4) SMOKE001 admin-only 不能审批通过;5) 小额 finance 与大额 ceo/finance_mgr 节点通过;6) O3 可回填 DONE。,流程级验证:复核 S4 证据;必要时 PC 公网网页登录 SMOKE201/SMOKE301/SMOKE302 补负责人、财务、财务主管页面记录;校验 O3 合同。,playwright|manual|python3,DONE,DONE,DONE,issues/2026-05-10_18-25-33-formal-approval-org-config.csv|docs/trialrun/real-device-public-checklist.md,"[""Q5""]",Q6 completed:按 P 合同门禁拆分口径复用 S4 公网自动化正式测试组织链路证据,且 Q5 最新公网 live smoke 通过;O3 已回填 DONE/DONE/DONE。SMOKE201/SMOKE301/SMOKE302 负责人/财务替身账号不再作为企业微信绑定硬门槛。
|
||||||
Q7,S5 企业微信移动体验复测,使用现有 oa_smoke_01->SMOKE002 和 oa_smoke_02->SMOKE101 真机复测移动入口与体验,验证部署后的移动布局和 PDF-only 修复。,1) 工作台入口和免登录通过;2) 移动首页、审批待办、报销列表、报销详情通过;3) 底部导航首页/审批/报销/我的首屏固定可见;4) 报销详情隐藏底部 Tab;5) 吸底双按钮同行不遮挡;6) PDF 上传入口可用;7) 通知/deeplink 有记录。,流程级验证:按 docs/trialrun/real-device-public-checklist.md 在 iPhone 11/iOS14 和 Redmi K60/MIUI 最新企业微信复测;记录设备、版本、账号角色、URL、步骤、截图或录屏位置。,manual|playwright,DOING,TODO,TODO,docs/trialrun/real-device-public-checklist.md|issues/2026-05-10_20-33-04-formal-smoke-test-accounts.csv,"[""Q5""]",Q7 partial 2026-05-11:公网自动视觉已通过,Playwright 企业微信 UA 覆盖 iPhone 11/iOS14 与 Redmi K60;SMOKE002 移动首页、报销列表、报销详情、PDF-only 上传入口通过,SMOKE101 移动审批列表通过;截图目录 output/playwright/r5-live-mobile-wecom-visual/。用户已确认真实企业微信工作台入口和免登录通过。通知与 deeplink 自动视觉通过:SMOKE101 两条未读报销待办站内通知可见,iPhone 11/Redmi K60 企业微信 UA 下无横向溢出,点击“查看”进入 /mobile/approvals?taskId=177b3a9e-67fe-447d-92f4-96a652a06841,截图 output/playwright/r5-notification-deeplink-live/。2026-05-11 已部署 b1ae41f 并切换到 R5-WECOM-APP-PERSONAL,触发 SMOKE002->SMOKE101 新待办 936362d8-c4e0-454f-a589-9c9653bcbfda,delivery=wecom_app_sent/errcode=0/无 invaliduser;企业微信 UA 自动视觉通过,截图 output/playwright/r5-wecom-app-message-live/。仍待用户手机确认 oa_smoke_02 是否收到个人应用消息并可点击回流,未完成前 S5/R5 不标 DONE。
|
Q7,S5 企业微信移动体验复测,使用现有 oa_smoke_01->SMOKE002 和 oa_smoke_02->SMOKE101 真机复测移动入口与体验,验证部署后的移动布局和 PDF-only 修复。,1) 工作台入口和免登录通过;2) 移动首页、审批待办、报销列表、报销详情通过;3) 底部导航首页/审批/报销/我的首屏固定可见;4) 报销详情隐藏底部 Tab;5) 吸底双按钮同行不遮挡;6) PDF 上传入口可用;7) 通知/deeplink 有记录。,流程级验证:按 docs/trialrun/real-device-public-checklist.md 在 iPhone 11/iOS14 和 Redmi K60/MIUI 最新企业微信复测;记录设备、版本、账号角色、URL、步骤、截图或录屏位置。,manual|playwright,DONE,DONE,DONE,docs/trialrun/real-device-public-checklist.md|issues/2026-05-10_20-33-04-formal-smoke-test-accounts.csv,"[""Q5""]",Q7 completed 2026-05-11:公网自动视觉已通过,Playwright 企业微信 UA 覆盖 iPhone 11/iOS14 与 Redmi K60;SMOKE002 移动首页、报销列表、报销详情、PDF-only 上传入口通过,SMOKE101 移动审批列表通过;截图目录 output/playwright/r5-live-mobile-wecom-visual/。用户已确认真实企业微信工作台入口和免登录通过。通知与 deeplink 自动视觉通过:SMOKE101 两条未读报销待办站内通知可见,iPhone 11/Redmi K60 企业微信 UA 下无横向溢出,点击“查看”进入 /mobile/approvals?taskId=177b3a9e-67fe-447d-92f4-96a652a06841,截图 output/playwright/r5-notification-deeplink-live/。2026-05-11 已部署 b1ae41f 并切换到 R5-WECOM-APP-PERSONAL,触发 SMOKE002->SMOKE101 新待办 936362d8-c4e0-454f-a589-9c9653bcbfda,delivery=wecom_app_sent/errcode=0/无 invaliduser;企业微信 UA 自动视觉通过,截图 output/playwright/r5-wecom-app-message-live/。用户已确认 oa_smoke_02 手机企业微信收到“海音达工作台”个人应用消息,标题正确;点击后首次进入提示进入工作台,进入后可看到移动审批,后续再次进入可直接看到移动审批;有消息通知但未观察到系统弹窗。Q7/S5 已完成。
|
||||||
Q8,R5/R6 Gate 与提交,汇总 Q4-Q7 结果,回填主 R5、O3、S5;R5 全部通过后仅创建 R6 小范围试运行准备口径,不直接扩大试运行。,1) Q4-Q7 均通过时 R5 回填 DONE/DONE/DONE;2) O3/S5 按实际结果回填;3) R6 未获名单和窗口前保持 TODO 或仅新建准备合同;4) 新合同、主 R5、O3、S5 CSV 校验通过;5) git diff --check 通过;6) 中文提交。,流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py 本合同、主 R5、O3、S5;git diff --check;git status --short;提交 Q1-Q8 部署最新 RC 并完成 R5 验收门禁。,python3|git|manual,TODO,TODO,TODO,issues/*.csv|docs/trialrun/real-device-public-checklist.md,"[""Q6"",""Q7""]",Q8 blocked:Q1-Q6 已完成,Q7 公网自动视觉、真实企业微信入口/免登录用户确认、站内通知与移动 deeplink 自动视觉均已通过;2026-05-11 已实现并部署 wecom_app_message,delivery 审计为 R5-WECOM-APP-PERSONAL/wecom_app_sent,errcode=0 且无 invaliduser,移动通知 deeplink 自动视觉通过。仍缺用户在手机企业微信 oa_smoke_02 上确认应用消息到达和点击回流,因此主 R5 保持 DOING/TODO/TODO,R6 继续 TODO。
|
Q8,R5/R6 Gate 与提交,汇总 Q4-Q7 结果,回填主 R5、O3、S5;R5 全部通过后仅创建 R6 小范围试运行准备口径,不直接扩大试运行。,1) Q4-Q7 均通过时 R5 回填 DONE/DONE/DONE;2) O3/S5 按实际结果回填;3) R6 未获名单和窗口前保持 TODO 或仅新建准备合同;4) 新合同、主 R5、O3、S5 CSV 校验通过;5) git diff --check 通过;6) 中文提交。,流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py 本合同、主 R5、O3、S5;git diff --check;git status --short;提交 Q1-Q8 部署最新 RC 并完成 R5 验收门禁。,python3|git|manual,DONE,DONE,DONE,issues/*.csv|docs/trialrun/real-device-public-checklist.md,"[""Q6"",""Q7""]",Q8 completed:Q1-Q7 已完成,公网自动视觉、真实企业微信入口/免登录用户确认、站内通知与移动 deeplink 自动视觉均已通过;2026-05-11 已实现并部署 wecom_app_message,delivery 审计为 R5-WECOM-APP-PERSONAL/wecom_app_sent,errcode=0 且无 invaliduser;用户已确认 oa_smoke_02 手机企业微信收到应用消息并可点击回流。主 R5 已满足门禁并回填 DONE/DONE/DONE;R6 继续 TODO,需单独规划和批准。
|
||||||
|
|||||||
|
@@ -3,4 +3,4 @@ W1,合同建档与现状确认,固定本轮目标为企业微信个人应用消
|
|||||||
W2,后端企业微信个人应用消息适配器,新增 wecom_app_message 通知渠道模式,复用现有 WECOM_* 应用配置向绑定成员发送企业微信应用消息。,1) 渠道模式支持 wecom_app_message;2) textcard 带 deeplink,缺 deeplink 时降级 text;3) 仅向已绑定且启用通知的收件人发送;4) 无绑定不阻断业务并记录 wecom_app_no_bound_recipients;5) delivery 不记录 secret/token。,流程级验证:cd server && npm run prisma:validate;cd server && node --check src/services/integrations/im/wecom.js;cd server && node --check src/services/notificationDispatcher.js;cd server && npm test -- tests/unit/routes/notifications.test.js tests/unit/services/notificationDispatcher.test.js tests/unit/services/integrations/dispatcher.test.js tests/unit/routes/wecomAuth.test.js。,node|npm,DONE,DONE,DONE,server/src/services/integrations/im/wecom.js|server/src/services/notificationDispatcher.js|server/src/routes/notifications.js,"[""W1""]",不新增 Prisma migration;如企业微信 API 权限错误,记录错误码并停止 R5 完成。已通过 Prisma validate、node --check 和 4 组通知/企微单测。
|
W2,后端企业微信个人应用消息适配器,新增 wecom_app_message 通知渠道模式,复用现有 WECOM_* 应用配置向绑定成员发送企业微信应用消息。,1) 渠道模式支持 wecom_app_message;2) textcard 带 deeplink,缺 deeplink 时降级 text;3) 仅向已绑定且启用通知的收件人发送;4) 无绑定不阻断业务并记录 wecom_app_no_bound_recipients;5) delivery 不记录 secret/token。,流程级验证:cd server && npm run prisma:validate;cd server && node --check src/services/integrations/im/wecom.js;cd server && node --check src/services/notificationDispatcher.js;cd server && npm test -- tests/unit/routes/notifications.test.js tests/unit/services/notificationDispatcher.test.js tests/unit/services/integrations/dispatcher.test.js tests/unit/routes/wecomAuth.test.js。,node|npm,DONE,DONE,DONE,server/src/services/integrations/im/wecom.js|server/src/services/notificationDispatcher.js|server/src/routes/notifications.js,"[""W1""]",不新增 Prisma migration;如企业微信 API 权限错误,记录错误码并停止 R5 完成。已通过 Prisma validate、node --check 和 4 组通知/企微单测。
|
||||||
W3,管理端通知渠道支持个人应用消息,通知渠道管理页新增企微应用消息个人模式,隐藏 webhook 必填和 secret 要求,保留路由与模板配置。,1) 管理页模式可选 wecom_app_message;2) 该模式不要求 Webhook URL/Secret;3) Mock 和 webhook 旧配置不回归;4) typecheck/build 通过。,流程级验证:cd client && npm run typecheck;cd client && npm run build;人工或 Playwright 打开 /system/notification-channels 确认模式选项和字段可理解。,npm|playwright,DONE,DONE,DONE,client/src/pages/NotificationChannelsPage.tsx|client/src/api/notificationChannels.ts,"[""W2""]",仅管理端配置 UI;不改变普通用户页面。已通过前端 typecheck 与生产 build。
|
W3,管理端通知渠道支持个人应用消息,通知渠道管理页新增企微应用消息个人模式,隐藏 webhook 必填和 secret 要求,保留路由与模板配置。,1) 管理页模式可选 wecom_app_message;2) 该模式不要求 Webhook URL/Secret;3) Mock 和 webhook 旧配置不回归;4) typecheck/build 通过。,流程级验证:cd client && npm run typecheck;cd client && npm run build;人工或 Playwright 打开 /system/notification-channels 确认模式选项和字段可理解。,npm|playwright,DONE,DONE,DONE,client/src/pages/NotificationChannelsPage.tsx|client/src/api/notificationChannels.ts,"[""W2""]",仅管理端配置 UI;不改变普通用户页面。已通过前端 typecheck 与生产 build。
|
||||||
W4,公网部署与真实个人消息渠道配置,部署当前 RC,完成 R4 复检,并将公网通知渠道从 mock 切到 wecom_app_message 个人应用消息模式。,1) deploy/trialrun/deploy.sh 成功;2) R4 只读复检通过;3) R5-WECOM-APP-PERSONAL enabled=true mode=wecom_app_message;4) R50-MOCK-007334 不再参与投递;5) 不修改远端 .env。,流程级验证:bash deploy/trialrun/deploy.sh;curl https://oa.hyinda.com/ready;Prisma migrate status;公网 bundle 扫描;管理员 API 或远端受控脚本 upsert 通知渠道后只读复核。,bash|ssh|node|manual,DONE,DONE,DONE,deploy/trialrun/deploy.sh|server/src/*|client/src/*,"[""W3""]",远端写操作仅限 notification_channels 配置;回滚:禁用 R5-WECOM-APP-PERSONAL 并恢复/启用 R50-MOCK-007334。完成 2026-05-11:部署 b1ae41f,SYNC_ENV=0 未同步远端 .env;公网 /ready 200;关键文件哈希本地/远端一致;Prisma migrate status up to date;Caddy active;external deps smoke PASS;公网 bundle 扫描 findings=0;R5-WECOM-APP-PERSONAL enabled=true mode=wecom_app_message,R50-MOCK-007334 enabled=false。
|
W4,公网部署与真实个人消息渠道配置,部署当前 RC,完成 R4 复检,并将公网通知渠道从 mock 切到 wecom_app_message 个人应用消息模式。,1) deploy/trialrun/deploy.sh 成功;2) R4 只读复检通过;3) R5-WECOM-APP-PERSONAL enabled=true mode=wecom_app_message;4) R50-MOCK-007334 不再参与投递;5) 不修改远端 .env。,流程级验证:bash deploy/trialrun/deploy.sh;curl https://oa.hyinda.com/ready;Prisma migrate status;公网 bundle 扫描;管理员 API 或远端受控脚本 upsert 通知渠道后只读复核。,bash|ssh|node|manual,DONE,DONE,DONE,deploy/trialrun/deploy.sh|server/src/*|client/src/*,"[""W3""]",远端写操作仅限 notification_channels 配置;回滚:禁用 R5-WECOM-APP-PERSONAL 并恢复/启用 R50-MOCK-007334。完成 2026-05-11:部署 b1ae41f,SYNC_ENV=0 未同步远端 .env;公网 /ready 200;关键文件哈希本地/远端一致;Prisma migrate status up to date;Caddy active;external deps smoke PASS;公网 bundle 扫描 findings=0;R5-WECOM-APP-PERSONAL enabled=true mode=wecom_app_message,R50-MOCK-007334 enabled=false。
|
||||||
W5,R5 真实企微消息与 deeplink 收口,触发 SMOKE002->SMOKE101 新待办,自动验证企业微信应用消息 delivery、站内通知、移动 deeplink 和视觉;等待用户真机确认消息到达。,1) 最新待办 delivery resultCode=wecom_app_sent 且 errcode=0;2) 无 invaliduser;3) 移动通知和 deeplink 自动视觉通过;4) run-live-smoke-readiness.sh 通过;5) 用户确认 oa_smoke_02 手机企业微信收到并可点击回流后,S5/R5 才可 DONE。,流程级验证:source ~/.hyb-oa/live-smoke.env;触发测试单据;查询 /api/notifications/deliveries;Playwright 企业微信 UA 覆盖 iPhone 11 和 Redmi K60;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;校验主 R5/S5/Q 合同并 git diff --check。,node|bash|playwright|manual,DONE,DONE,TODO,docs/trialrun/real-device-public-checklist.md|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|issues/2026-05-10_20-33-04-formal-smoke-test-accounts.csv,"[""W4""]",若 delivery 成功但手机无提醒,先记录为企业微信客户端通知权限/应用可见范围待确认,不伪造 R5 DONE。自动化完成 2026-05-11:strict 准入通过;live smoke 3 passed;真实 PDF OCR 不 SKIP,终态为重复票据可解释;报告 artifacts/qa-flow/live-smoke-readiness-20260511-092236。SMOKE002 创建请假单 a8473c1b-bcb4-45b9-ab96-929afe346615 并生成 SMOKE101 待办 936362d8-c4e0-454f-a589-9c9653bcbfda;通知 9ee0602e-66a5-4a6e-81e5-04d41908c782 delivery=wecom_app_sent,errcode=0,无 invaliduser;移动通知和审批 deeplink 视觉通过,截图 output/playwright/r5-wecom-app-message-live/。Regression 仍待用户确认 oa_smoke_02 手机企业微信是否收到应用消息并可点击回流。
|
W5,R5 真实企微消息与 deeplink 收口,触发 SMOKE002->SMOKE101 新待办,自动验证企业微信应用消息 delivery、站内通知、移动 deeplink 和视觉,并记录用户真机确认消息到达。,1) 最新待办 delivery resultCode=wecom_app_sent 且 errcode=0;2) 无 invaliduser;3) 移动通知和 deeplink 自动视觉通过;4) run-live-smoke-readiness.sh 通过;5) 用户确认 oa_smoke_02 手机企业微信收到并可点击回流后,S5/R5 才可 DONE。,流程级验证:source ~/.hyb-oa/live-smoke.env;触发测试单据;查询 /api/notifications/deliveries;Playwright 企业微信 UA 覆盖 iPhone 11 和 Redmi K60;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;校验主 R5/S5/Q 合同并 git diff --check。,node|bash|playwright|manual,DONE,DONE,DONE,docs/trialrun/real-device-public-checklist.md|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|issues/2026-05-10_20-33-04-formal-smoke-test-accounts.csv,"[""W4""]",若 delivery 成功但手机无提醒,先记录为企业微信客户端通知权限/应用可见范围待确认,不伪造 R5 DONE。自动化完成 2026-05-11:strict 准入通过;live smoke 3 passed;真实 PDF OCR 不 SKIP,终态为重复票据可解释;报告 artifacts/qa-flow/live-smoke-readiness-20260511-092236。SMOKE002 创建请假单 a8473c1b-bcb4-45b9-ab96-929afe346615 并生成 SMOKE101 待办 936362d8-c4e0-454f-a589-9c9653bcbfda;通知 9ee0602e-66a5-4a6e-81e5-04d41908c782 delivery=wecom_app_sent,errcode=0,无 invaliduser;移动通知和审批 deeplink 视觉通过,截图 output/playwright/r5-wecom-app-message-live/。Regression completed:用户确认 oa_smoke_02 手机企业微信收到“海音达工作台”个人应用消息,标题正确;点击后首次进入提示进入工作台,进入后可看到移动审批,后续再次进入可直接看到移动审批;有消息通知但未观察到系统弹窗,不影响应用消息到达与回流结论。
|
||||||
|
|||||||
|
在新工单中引用
屏蔽一个用户