P1-P4 拆分 R5 审批链与企业微信门禁
这个提交包含在:
@@ -63,26 +63,39 @@
|
|||||||
|
|
||||||
- 正式审批口径:`majianyong` 是员工可见的直属主管;`wangshunli` 是后台公司负责人,配置为 `ceo + admin`,不配置为普通 `manager`;`admin` 不代表业务审批权。
|
- 正式审批口径:`majianyong` 是员工可见的直属主管;`wangshunli` 是后台公司负责人,配置为 `ceo + admin`,不配置为普通 `manager`;`admin` 不代表业务审批权。
|
||||||
- 试运行验收不使用真实员工日常账号,使用测试替身账号模拟正式组织链路:`SMOKE002 -> SMOKE101 -> SMOKE201 -> SMOKE302/SMOKE301`。
|
- 试运行验收不使用真实员工日常账号,使用测试替身账号模拟正式组织链路:`SMOKE002 -> SMOKE101 -> SMOKE201 -> SMOKE302/SMOKE301`。
|
||||||
- `SMOKE001` 仅作为测试管理员,不具备业务审批权;企业微信原生身份验收必须使用企业微信侧测试成员绑定 OA 测试账号。
|
- `SMOKE001` 仅作为测试管理员,不具备业务审批权。
|
||||||
- 若没有企业微信测试成员,只能记录手机浏览器或企业微信 WebView 登录结果,企业微信原生身份验收记为 `BLOCKED`,不得宣称 R5 完成。
|
- 审批链正确性是业务逻辑验收,优先通过 PC 公网网页或自动化证明,不要求所有审批角色绑定企业微信。
|
||||||
- 正式审批链验收矩阵:
|
- 企业微信真机验收只覆盖工作台入口、绑定/免登录、移动布局、待办、详情、PDF 上传入口和通知 deeplink;当前 `oa_smoke_01 -> SMOKE002` 与 `oa_smoke_02 -> SMOKE101` 足够覆盖“提交人 + 审批人”的核心移动体验。
|
||||||
|
- `SMOKE201`、`SMOKE301`、`SMOKE302` 可通过 PC 公网网页验证负责人、财务、财务主管流程,不再作为企业微信原生身份硬门槛。
|
||||||
|
|
||||||
| 验收项 | 账号角色 | 直属上级 | 提交人 | 期望审批人 | 结果 | 截图或录屏位置 |
|
### PC/自动化审批链验收矩阵
|
||||||
|
|
||||||
|
| 验收项 | 验收方式 | 账号角色 | 提交或处理 | 期望结果 | 结果 | 证据位置 |
|
||||||
| --- | --- | --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- | --- | --- |
|
||||||
| 普通低/中额单据 | `SMOKE002` / 测试员工 | `SMOKE101` | `SMOKE002` | `SMOKE101` | 通过:`oa_smoke_01 -> SMOKE002` 提交,`oa_smoke_02 -> SMOKE101` 审批 | 用户确认;截图/录屏不提交仓库 |
|
| 普通低/中额单据 | PC/自动化 | `SMOKE002` / 测试员工 | 提交低/中额单据 | 待办分配给 `SMOKE101` | 通过 | S4 自动化证据 |
|
||||||
| 高额/高风险/例外单据 | `SMOKE002` / 测试员工 | `SMOKE101` | `SMOKE002` | `SMOKE101 -> SMOKE201 -> SMOKE302/SMOKE301`,以现有金额和财务规则为准 | | |
|
| 高额/高风险/例外单据 | PC/自动化 | `SMOKE002` / 测试员工 | 提交高额/例外单据 | `SMOKE101 -> SMOKE201 -> SMOKE302/SMOKE301`,以现有金额和财务规则为准 | 通过 | S4 自动化证据 |
|
||||||
| 主管本人申请 | `SMOKE101` / 测试主管 | `SMOKE201` | `SMOKE101` | `SMOKE201` | | |
|
| 主管本人申请 | PC/自动化 | `SMOKE101` / 测试主管 | `SMOKE101` 提交本人申请 | 待办分配给 `SMOKE201` | 通过 | S4 自动化证据 |
|
||||||
| 公司负责人本人申请 | `SMOKE201` / 测试负责人 | 无直属上级 | `SMOKE201` | 阻断或非本人兜底审批人 | | |
|
| 公司负责人本人申请 | PC/自动化 | `SMOKE201` / 测试负责人 | `SMOKE201` 提交本人申请 | 不允许自审;无非本人兜底时阻断 | 通过 | S4 自动化证据 |
|
||||||
| 系统管理员无业务审批权 | `SMOKE001` / 测试管理员 | 无直属上级 | 任意测试单据 | 不允许仅凭 `admin` 审批 | | |
|
| 系统管理员无业务审批权 | PC/自动化 | `SMOKE001` / 测试管理员 | 尝试审批测试单据 | 不允许仅凭 `admin` 审批 | 通过 | S4 自动化证据 |
|
||||||
| 财务复核与付款/导出 | `SMOKE301` / `SMOKE302` | `SMOKE201` | 已批准测试单据 | 按财务与财务主管权限处理 | | |
|
| 财务复核与付款/导出 | PC/自动化 | `SMOKE301` / `SMOKE302` | 处理已批准测试单据 | 按财务与财务主管权限处理 | 自动化已覆盖财务节点,PC 页面证据按 R5 收口补充 | S4 自动化证据 / 后续 PC 记录 |
|
||||||
|
|
||||||
自动化补充证据(不替代企业微信真机):
|
### 企业微信/移动体验验收矩阵
|
||||||
|
|
||||||
|
| 验收项 | 企业微信测试成员 | OA 账号 | 期望结果 | 当前结果 | 截图或录屏位置 |
|
||||||
|
| --- | --- | --- | --- | --- | --- |
|
||||||
|
| 工作台入口与免登录 | `oa_smoke_01` | `SMOKE002` | 从企业微信工作台进入 OA,已绑定后免登录 | 通过 | 用户确认;截图/录屏不提交仓库 |
|
||||||
|
| 提交人移动报销体验 | `oa_smoke_01` | `SMOKE002` | 移动首页、报销页、详情页、PDF 发票入口可用 | 待 `491b42a` 部署后复测 | 待补 |
|
||||||
|
| 审批人移动待办体验 | `oa_smoke_02` | `SMOKE101` | 移动审批待办、审批详情、结果反馈可用 | 提交与审批链路已通过;布局待部署后复测 | 待补 |
|
||||||
|
| 移动底部导航与深层页 | `oa_smoke_01` / `oa_smoke_02` | `SMOKE002` / `SMOKE101` | 首页、审批、报销、我的固定可见;报销详情隐藏底部 Tab,吸底双按钮不遮挡 | 本地已修复,待公网复测 | 待补 |
|
||||||
|
| 通知与 deeplink | `oa_smoke_01` / `oa_smoke_02` | `SMOKE002` / `SMOKE101` | 通知能回到移动待办或详情页 | 待复测 | 待补 |
|
||||||
|
|
||||||
|
自动化补充证据(用于审批链业务验收):
|
||||||
|
|
||||||
- `2026-05-10`:公网 live smoke、真实 OCR 和测试替身审批链已通过;证据目录 `artifacts/qa-flow/live-smoke-readiness-20260510-205136`。
|
- `2026-05-10`:公网 live smoke、真实 OCR 和测试替身审批链已通过;证据目录 `artifacts/qa-flow/live-smoke-readiness-20260510-205136`。
|
||||||
- `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 绑定、通知 deeplink 和真机截图/录屏仍待使用企业微信测试成员完成;未完成前 R5/O3 不标 `DONE`。
|
- 企业微信工作台、OAuth 绑定和提交人/审批人核心移动链路已有 `oa_smoke_01/oa_smoke_02` 真机阶段性通过;移动布局、PDF 上传和通知 deeplink 需在 `491b42a` 部署后复测,未完成前 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`。
|
||||||
|
|
||||||
|
|||||||
@@ -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) 真实 OCR 样票上传能进入可解释终态;4) 缺配置时继续 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;人工真机:手机企业微信工作台打开海音达工作台 -> deeplink 回 OA 审批或详情页 -> 记录结果。,node|bash|playwright|manual,DOING,TODO,TODO,scripts/qa/*|docs/trialrun/live-smoke-readiness.md|docs/trialrun/real-device-public-checklist.md,"[""R4""]",R5 smoke 密码重置合同 issues/2026-05-10_17-10-42-r5-smoke-password-reset-and-live-smoke.csv 已完成 K1-K5;SMOKE001/SMOKE002 已重置为仓库外安全凭据,登录标识按公网 auth 契约使用 smoke 邮箱;check-live-smoke-env --strict 通过;run-live-smoke-readiness.sh 通过,证据目录 artifacts/qa-flow/live-smoke-readiness-20260510-172421,公网 bundle findings=0,live smoke 3 passed,真实 OCR 样票不再 SKIP 且终态为重复发票/ocr_failed 可解释;pending OCR 辅助扫描因缺 DATABASE_URL 继续 SKIP;K4 审计 authSessions 555->572、auditLogs 258->263,发票/报销数量未新增;本轮 R5 真机反馈与正式运行口径代码收口已完成:issues/2026-05-10_17-47-39-r5-real-device-feedback-mobile-ux.csv M1-M5 DONE,后端禁止自审/admin-only 审批,移动底部 Tab 改为报销,头像中文首字;审批规约与正式组织口径文档同步已完成:issues/2026-05-10_19-24-06-approval-governance-doc-sync.csv G1-G5 DONE;O2 正式组织配置已完成并部署最新 RC,C2/C3 R4 复检通过;C4 自动化 live smoke/真实 OCR 再次通过,证据 artifacts/qa-flow/live-smoke-readiness-20260510-201403,SMOKE002 请假待办已确认分配给 majianyong。主 R5 仍保持 DOING/TODO/TODO:缺企业微信真机正式矩阵截图/录屏,缺 majianyong 实际审批、wangshunli 二审或主管本人申请人工验收;R6 保持 TODO。 S 合同 issues/2026-05-10_20-33-04-formal-smoke-test-accounts.csv 已完成 S1-S3:为避免真实负责人/主管/财务参与验收,已创建/更新 SMOKE101 测试主管、SMOKE201 测试负责人、SMOKE301 测试财务、SMOKE302 测试财务主管、SMOKE401 测试 HR;SMOKE002 已改挂 SMOKE101,SMOKE001 仅测试管理员且 admin 不代表业务审批权;后续 R5/O3 必须使用测试替身账号链路和企业微信测试成员,缺测试成员则企业微信原生身份验收 BLOCKED,R6 继续 TODO。 S4 已完成自动化收口:公网 live smoke/真实 OCR 再次通过,证据 artifacts/qa-flow/live-smoke-readiness-20260510-205136;测试替身正式链路已覆盖 SMOKE002->SMOKE101、SMOKE101->SMOKE201、SMOKE201 自身阻断、SMOKE001 admin-only 403、小额 finance 与大额 ceo/finance_mgr;主 R5 仍 DOING/TODO/TODO:缺企业微信测试成员真机工作台、移动审批、报销详情、通知 deeplink 截图/录屏记录;R6 继续 TODO。 R5 updated 2026-05-10:企业微信真机提交人与主管链路阶段性通过:oa_smoke_01->SMOKE002 绑定/免登录/提交通过,oa_smoke_02->SMOKE101 绑定/审批待办/审批详情结果通过;发现移动底部导航和报销详情深层页在 iPhone 11/Redmi K60 下不稳定,以及发票上传需 PDF-only 收口。已通过 issues/2026-05-10_22-44-06-r5-mobile-viewport-pdf-invoice.csv 在本地修复并验证,但尚未部署公网,R5 继续 DOING/TODO/TODO;部署、R4 复检、公网 live smoke、PDF 样票真实 OCR、企业微信真机复测和负责人/财务替身矩阵完成前不得进入 R6。
|
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 gate split 2026-05-10:R5 完成条件拆为四块:公网 live smoke、真实 PDF OCR、PC/自动化审批链、企业微信移动体验。审批链业务正确性不再依赖所有角色企业微信绑定;SMOKE201/SMOKE301/SMOKE302 可通过 PC 公网网页或自动化验证负责人/财务流程。企业微信只验证 oa_smoke_01->SMOKE002 和 oa_smoke_02->SMOKE101 的工作台入口、绑定免登录、移动首页、待办、报销详情、PDF 上传入口、底部导航、吸底双按钮和 deeplink。当前 R5 仍 DOING/TODO/TODO:491b42a 尚未部署,需部署后 R4 复检、公网 live smoke、PDF OCR 和企业微信移动体验复测;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。
|
||||||
|
|||||||
|
@@ -1,4 +1,4 @@
|
|||||||
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
||||||
O1,正式审批组织配置确认,按正式公司运行口径确认公网组织关系和业务审批角色:majianyong 是员工可见直属主管;wangshunli 是后台公司负责人,使用 ceo+admin,不配置为普通 manager。,1) 远端当前角色和直属上级只读核实;2) 形成待写配置清单;3) 明确 admin 不自动获得业务审批权;4) 未经批准不写远端数据库。,流程级验证:只读查询公网员工 wangshunli/majianyong 的 roleCodes、directManagerId、department;核对 docs/需求-统一审批中心规约.md;不执行 UPDATE。,ssh|manual,DONE,DONE,DONE,external|issues/2026-05-10_18-25-33-formal-approval-org-config.csv,[],"O1 read-only 2026-05-10T11:41:02Z:wangshunli=HYD000006 active dept=管理部 roles=[admin] directManager=null;majianyong=HYD000007 active dept=管理部 roles=[manager] directManager=null;SMOKE001 active roles=[admin,employee] directManager=null;SMOKE002 active roles=[employee] directManager=SMOKE001。docs/需求-统一审批中心规约.md 已核对正式口径:admin 不代表业务审批权。O2 required=yes;待写清单:employee_roles(wangshunli) add ceo rollback=delete ceo;employees(majianyong).direct_manager_id null -> wangshunli rollback=null;employees(SMOKE002).direct_manager_id SMOKE001 -> majianyong rollback=SMOKE001;可选 employee_roles(SMOKE001) 保持 admin+employee 仅作 smoke admin,不作为正式主管;不得把 wangshunli 配为 manager。未部署、未迁移、未重启、未改远端 .env、未执行 UPDATE。"
|
O1,正式审批组织配置确认,按正式公司运行口径确认公网组织关系和业务审批角色:majianyong 是员工可见直属主管;wangshunli 是后台公司负责人,使用 ceo+admin,不配置为普通 manager。,1) 远端当前角色和直属上级只读核实;2) 形成待写配置清单;3) 明确 admin 不自动获得业务审批权;4) 未经批准不写远端数据库。,流程级验证:只读查询公网员工 wangshunli/majianyong 的 roleCodes、directManagerId、department;核对 docs/需求-统一审批中心规约.md;不执行 UPDATE。,ssh|manual,DONE,DONE,DONE,external|issues/2026-05-10_18-25-33-formal-approval-org-config.csv,[],"O1 read-only 2026-05-10T11:41:02Z:wangshunli=HYD000006 active dept=管理部 roles=[admin] directManager=null;majianyong=HYD000007 active dept=管理部 roles=[manager] directManager=null;SMOKE001 active roles=[admin,employee] directManager=null;SMOKE002 active roles=[employee] directManager=SMOKE001。docs/需求-统一审批中心规约.md 已核对正式口径:admin 不代表业务审批权。O2 required=yes;待写清单:employee_roles(wangshunli) add ceo rollback=delete ceo;employees(majianyong).direct_manager_id null -> wangshunli rollback=null;employees(SMOKE002).direct_manager_id SMOKE001 -> majianyong rollback=SMOKE001;可选 employee_roles(SMOKE001) 保持 admin+employee 仅作 smoke admin,不作为正式主管;不得把 wangshunli 配为 manager。未部署、未迁移、未重启、未改远端 .env、未执行 UPDATE。"
|
||||||
O2,专用正式测试账号准备,准备不使用真实员工日常账号的公网专用测试账号,并按正式组织关系挂到 majianyong 主管链路。,1) 专用员工、主管、财务或负责人测试账号 active;2) 密码只保存在仓库外安全位置;3) 自动化不使用真实员工日常账号;4) 账号角色满足正式审批链验证。,流程级验证:只读检查账号存在与状态;如需创建或重置密码,必须另行批准远端写操作;node scripts/qa/check-live-smoke-env.mjs --strict。,ssh|node|manual,DONE,DONE,DONE,external,"[""O1""]","O2 completed 2026-05-10T12:03:14Z:受控写入三项正式组织配置;before wangshunli roles=[admin] directManager=null, majianyong roles=[manager] directManager=null, SMOKE002 directManager=SMOKE001;after wangshunli roles=[admin,ceo] directManager=null, majianyong roles=[manager] directManager=wangshunli, SMOKE002 directManager=majianyong;SMOKE001 保持 admin+employee 仅作 smoke admin。回滚:删除 wangshunli 的 ceo 角色;majianyong.direct_manager_id 置空;SMOKE002.direct_manager_id 恢复 SMOKE001。node scripts/qa/check-live-smoke-env.mjs --strict 通过,liveSmokeReady=true liveOcrReady=true publicReady=true wecom=ready。未部署、未迁移、未重启、未改远端 .env、未改密码、未清理数据。"
|
O2,专用正式测试账号准备,准备不使用真实员工日常账号的公网专用测试账号,并按正式组织关系挂到 majianyong 主管链路。,1) 专用员工、主管、财务或负责人测试账号 active;2) 密码只保存在仓库外安全位置;3) 自动化不使用真实员工日常账号;4) 账号角色满足正式审批链验证。,流程级验证:只读检查账号存在与状态;如需创建或重置密码,必须另行批准远端写操作;node scripts/qa/check-live-smoke-env.mjs --strict。,ssh|node|manual,DONE,DONE,DONE,external,"[""O1""]","O2 completed 2026-05-10T12:03:14Z:受控写入三项正式组织配置;before wangshunli roles=[admin] directManager=null, majianyong roles=[manager] directManager=null, SMOKE002 directManager=SMOKE001;after wangshunli roles=[admin,ceo] directManager=null, majianyong roles=[manager] directManager=wangshunli, SMOKE002 directManager=majianyong;SMOKE001 保持 admin+employee 仅作 smoke admin。回滚:删除 wangshunli 的 ceo 角色;majianyong.direct_manager_id 置空;SMOKE002.direct_manager_id 恢复 SMOKE001。node scripts/qa/check-live-smoke-env.mjs --strict 通过,liveSmokeReady=true liveOcrReady=true publicReady=true wecom=ready。未部署、未迁移、未重启、未改远端 .env、未改密码、未清理数据。"
|
||||||
O3,正式审批链公网验收,使用专用测试替身账号验证正式审批链:SMOKE002 -> SMOKE101 -> SMOKE201 -> SMOKE302/SMOKE301;生产组织事实源仍为 majianyong/wangshunli,但不使用真实人员日常账号参与验收。,1) 普通低/中额员工单据由 SMOKE101 处理;2) 高额/高风险/例外进入 SMOKE101 -> SMOKE201,并按现有规则进入 SMOKE302/SMOKE301 财务节点;3) SMOKE101 本人申请由 SMOKE201 处理;4) SMOKE201 本人不能自审;5) SMOKE001 仅 admin 时不能审批业务单据;6) 企业微信测试成员真机记录完成后才可 DONE。,流程级验证:公网/企业微信测试成员使用 SMOKE002/SMOKE101/SMOKE201/SMOKE301/SMOKE302 提交和处理报销或请假 -> 检查 workflow task、审批历史、通知 deeplink 和业务状态;失败项记录截图/录屏位置;不使用真实员工日常账号。,playwright|manual,TODO,TODO,TODO,docs/trialrun/real-device-public-checklist.md,"[""O2""]",O3 updated for test substitutes:S 合同已创建正式测试组织账号矩阵,验收链路改为 SMOKE002->SMOKE101->SMOKE201->SMOKE302/SMOKE301;SMOKE001 仅测试管理员,不代表业务审批权;真实 majianyong/wangshunli 仍是生产组织事实源,但不参与 R5/O3 日常账号验收。O3 仍 TODO:待 S4 自动化正式测试链路、企业微信测试成员真机矩阵截图/录屏、财务复核/付款或导出权限验证;如无企业微信测试成员,记录 BLOCKED,不得把主 R5 标记为 DONE。 S4 自动化已通过:SMOKE002->SMOKE101 请假分配、SMOKE101->SMOKE201 主管本人分配、SMOKE201 自身提交阻断、SMOKE001 admin-only 审批 403、小额报销进入 finance role、大额报销进入 ceo -> finance_mgr role 均已验证;证据见 issues/2026-05-10_20-33-04-formal-smoke-test-accounts.csv S4 Notes。O3 仍 TODO:缺企业微信测试成员真机矩阵截图/录屏和 deeplink/工作台入口人工记录;未完成前主 R5 不得 DONE。 O3 updated 2026-05-10:提交人与主管替身真机链路已通过:oa_smoke_01->SMOKE002 提交,oa_smoke_02->SMOKE101 审批,工作台入口和免登录通过;O3 仍 TODO,因为本轮移动视口/PDF-only 修复尚未部署复测,且 SMOKE201/SMOKE301/SMOKE302 的负责人/财务替身真机矩阵、通知 deeplink 与财务复核/付款导出仍待完成。
|
O3,正式审批链公网验收,使用专用测试替身账号验证正式审批链:SMOKE002 -> SMOKE101 -> SMOKE201 -> SMOKE302/SMOKE301;审批链业务正确性由 PC 公网网页或自动化证明,企业微信只作为移动体验验收补充。,1) 普通低/中额员工单据由 SMOKE101 处理;2) 高额/高风险/例外进入 SMOKE101 -> SMOKE201,并按现有规则进入 SMOKE302/SMOKE301 财务节点;3) SMOKE101 本人申请由 SMOKE201 处理;4) SMOKE201 本人不能自审;5) SMOKE001 仅 admin 时不能审批业务单据;6) PC/自动化证据足以完成审批链业务验收,不要求 SMOKE201/SMOKE301/SMOKE302 绑定企业微信。,流程级验证:PC 公网网页或自动化使用 SMOKE002/SMOKE101/SMOKE201/SMOKE301/SMOKE302 提交和处理报销或请假 -> 检查 workflow task、审批历史、业务状态和财务节点;企业微信只验证移动入口、待办、详情和 deeplink,不承担全角色审批链证明。,playwright|manual,TODO,TODO,TODO,docs/trialrun/real-device-public-checklist.md,"[""O2""]",O3 gate split 2026-05-10:审批链业务验收与企业微信移动体验已拆分。O3 关注 PC/自动化正式测试链路:SMOKE002->SMOKE101、SMOKE101->SMOKE201、SMOKE201 自身阻断、SMOKE001 admin-only 403、小额 finance 与大额 ceo/finance_mgr;这些 S4 自动化证据已存在。O3 不再要求 SMOKE201/SMOKE301/SMOKE302 绑定企业微信测试成员;如需补 PC 页面证据,可在 R5 收口中登录公网 PC 页面补截图/记录。O3 仍 TODO:需按拆分后的 PC 审批链验收口径确认是否复用 S4 证据或补 PC 页面记录;未部署 491b42a 前不把主 R5 置 DONE。
|
||||||
|
|||||||
|
@@ -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 测试账号并完成真机矩阵;若测试成员缺失,记录 BLOCKED,不宣称 R5 通过。,1) 企业微信工作台测试成员可进入 OA;2) 移动首页、审批待办、报销详情、通知 deeplink 有截图/录屏位置;3) O3/R5 仅在真机和自动化均通过后 DONE;4) R6 仍等待 R5 完成。,流程级验证:按 docs/trialrun/real-device-public-checklist.md 用测试成员执行;校验新合同、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 BLOCKED:自动化和测试替身审批链已通过,但尚无企业微信侧测试成员绑定 SMOKE002/SMOKE101/SMOKE201/SMOKE301/SMOKE302 的真机截图或录屏证据;因此 S5、O3、主 R5 继续保持未完成,不能宣称企业微信原生身份验收或 R6 小范围试运行已解锁。 S5 updated 2026-05-10:用户已用 iPhone 11/iOS14 与 Redmi K60/MIUI 最新企业微信真机确认 oa_smoke_01->SMOKE002、oa_smoke_02->SMOKE101 绑定通过,工作台进入 OA、已绑定免登录、SMOKE002 提交单据、SMOKE101 审批待办与审批详情/结果通过;当前 S5 仍 DOING/TODO/TODO,因为移动底部导航和报销详情深层页修复、PDF-only 发票上传需部署后复测,且 SMOKE201/SMOKE301/SMOKE302 负责人/财务替身企业微信真机矩阵仍待补齐。
|
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 gate split 2026-05-10:企业微信真机门禁改为移动体验验收,不再承担全角色审批链证明;现有 oa_smoke_01->SMOKE002、oa_smoke_02->SMOKE101 足够覆盖提交人和审批人核心移动体验。SMOKE201/SMOKE301/SMOKE302 负责人/财务替身账号通过 PC 公网网页或自动化验证,不再要求企业微信绑定。S5 仍 DOING/TODO/TODO:491b42a 尚未部署,移动底部导航、报销详情吸底双按钮、PDF 上传入口和通知 deeplink 需部署后复测;主 R5 和 R6 仍未解锁。
|
||||||
|
|||||||
|
@@ -0,0 +1,5 @@
|
|||||||
|
"ID","Title","Description","Acceptance","Test_Method","Tools","Dev_Status","Review1_Status","Regression_Status","Files","Dependencies","Notes"
|
||||||
|
"P1","验收门禁拆分合同建档","建立 R5/O3 门禁拆分合同,明确审批链业务正确性由 PC/公网网页或自动化证明,企业微信真机只验证移动入口和体验。","1) 新合同创建并校验通过;2) 明确本轮不改业务代码、不部署、不改远端数据;3) R5/O3/S5 不因门禁拆分自动完成;4) 不要求 SMOKE201/SMOKE301/SMOKE302 绑定企业微信。","流程级验证:读取当前 R5/O3/S5 合同和真机清单;python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-10_23-37-06-r5-gate-split-pc-approval-mobile-wecom.csv。","python3|manual","DONE","DONE","DONE","issues/2026-05-10_23-37-06-r5-gate-split-pc-approval-mobile-wecom.csv","[]","P1 completed:已创建门禁拆分合同并校验,不改业务代码、不部署、不改远端数据;R5/O3/S5 不因本轮文档调整自动完成。"
|
||||||
|
"P2","真机清单拆分为 PC 审批链与移动体验","更新 docs/trialrun/real-device-public-checklist.md,将正式审批链矩阵改为 PC/公网网页验收,将企业微信真机矩阵改为移动体验验收。","1) PC 审批链矩阵覆盖 SMOKE002->SMOKE101->SMOKE201->SMOKE302/SMOKE301;2) 企业微信矩阵只覆盖 oa_smoke_01/oa_smoke_02 的工作台入口、绑定免登录、移动首页、待办、详情、PDF 上传、底部导航和 deeplink;3) 明确 SMOKE201/SMOKE301/SMOKE302 不再是企业微信绑定硬门槛。","流程级验证:rg -n 'PC|公网网页|移动体验|企业微信|SMOKE201|SMOKE301|SMOKE302|oa_smoke_01|oa_smoke_02' docs/trialrun/real-device-public-checklist.md。","rg|manual","DONE","DONE","DONE","docs/trialrun/real-device-public-checklist.md","[""P1""]","P2 completed:真机清单已拆分为 PC/自动化审批链验收矩阵与企业微信移动体验验收矩阵;SMOKE201/SMOKE301/SMOKE302 不再作为企业微信绑定硬门槛。"
|
||||||
|
"P3","更新 O3/S5/R5 合同 Notes","更新正式组织配置合同、测试组织账号合同和主 R5 合同 Notes,拆开 O3 业务审批链完成条件与 S5 企业微信移动体验完成条件。","1) O3 Notes 说明 PC/自动化可证明审批链;2) S5 Notes 说明企业微信不承担全角色审批链证明;3) R5 Notes 保留公网 live smoke、真实 PDF OCR、PC 审批链和企业微信移动体验全部通过后才能完成;4) R6 保持 TODO。","流程级验证:校验 issues/2026-05-10_18-25-33-formal-approval-org-config.csv、issues/2026-05-10_20-33-04-formal-smoke-test-accounts.csv、issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv;rg -n 'PC 审批链|移动体验|R6|SMOKE201|SMOKE301|SMOKE302' issues。","python3|rg|manual","DONE","DONE","DONE","issues/2026-05-10_18-25-33-formal-approval-org-config.csv|issues/2026-05-10_20-33-04-formal-smoke-test-accounts.csv|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv","[""P2""]","P3 completed:O3/S5/R5 合同 Notes 已同步门禁拆分口径;R5 仍需公网 live smoke、真实 PDF OCR、PC 审批链和企业微信移动体验全部通过,R6 继续 TODO。"
|
||||||
|
"P4","校验与提交","校验新合同、既有合同、文档搜索和 diff;通过后提交本轮文档治理。","1) 四个 CSV 校验通过;2) 文档一致性搜索通过;3) git diff --check 通过;4) 提交中文 commit。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-10_23-37-06-r5-gate-split-pc-approval-mobile-wecom.csv;python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv;python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-10_18-25-33-formal-approval-org-config.csv;python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-10_20-33-04-formal-smoke-test-accounts.csv;git diff --check。","python3|rg|git","DONE","DONE","DONE","docs/trialrun/real-device-public-checklist.md|issues/*.csv","[""P3""]","P4 completed:四个 CSV 校验通过,文档一致性搜索通过,git diff --check 通过;本轮仅文档与合同治理,不部署、不改远端数据、不改业务代码。后续仍需部署 491b42a 或更新 RC、R4 复检、公网 live smoke、PDF OCR 和企业微信移动体验复测。"
|
||||||
|
在新工单中引用
屏蔽一个用户