文件
hyb-oa/issues/2026-05-13_18-23-52-wf8-approval-notification.csv
T
wangsli 8cd4b92857 R7E WF8 真机 deeplink 验证与收口回填
引用 R7E-9 WF8-11 WF8-12 WF8-CLOSE QAOPS8-17 BIZ8-12
2026-05-15 10:18:02 +08:00

18 行
13 KiB
CSV

ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
WF8-0,WF8 连续合同建档,"建立审批与通知增强连续型合同,把转审、通知、催办、邮件通道决策、三渠道验收和审批历史一致性放入同一 CSV。","1) 本 CSV 校验通过;2) 文档索引和状态矩阵指向本合同;3) 不进入复杂 BPM 或审批设计器;4) 不改业务代码;5) 执行前确认 ORG8 角色边界。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-13_18-23-52-wf8-approval-notification.csv;rg -n 'WF8|审批|通知' docs/文档索引.md docs/文档事实源状态矩阵.md issues/README.md。",python3|rg|manual,DONE,DONE,DONE,issues/2026-05-13_18-23-52-wf8-approval-notification.csv|docs/文档索引.md|docs/文档事实源状态矩阵.md|issues/README.md,[],CSV validator 和索引 rg 均通过;本次仅合同建档和入口登记,未改业务代码,执行前仍需 ORG8 角色边界和方案批准。
WF8-1,审批通知需求规约更新,"复核统一审批中心规约,把转审、通知失败、催办、deeplink 和邮件通道决策写清楚或确认已覆盖。","1) 审批和通知边界清楚;2) 不引入复杂 BPM;3) 企业微信审批动作回 OA;4) 邮件是否验收有决策。","流程级验证:rg -n '转审|通知|催办|邮件|deeplink|复杂 BPM|审批设计器' docs/需求-统一审批中心规约.md docs/需求-企业微信基础设施规约.md。",rg|manual,DONE,DONE,DONE,docs/需求-统一审批中心规约.md|docs/需求-企业微信基础设施规约.md,"[""WF8-0""]",统一审批中心规约已覆盖转审、通知失败、催办、deeplink、复杂 BPM 和审批设计器冻结;已补 WF8 邮件通道决策;未改 workflow 代码。
WF8-2,转审扩展设计,"设计请假、采购和报销的转审扩展规则,明确权限、状态、历史和通知影响。","1) 转审发起人和接收人规则清楚;2) 原审批人和新审批人历史可追溯;3) 不造成重复审批;4) 回滚路径明确。","流程级验证:人工审查状态流;rg -n '转审|delegat|reassign|审批历史|workflow' docs/需求-统一审批中心规约.md server/src。",rg|manual,DONE,DONE,DONE,docs/需求-统一审批中心规约.md|server/src,"[""WF8-1""]",已将 docs/需求-统一审批中心规约.md 更新到 1.3 并新增 WF8 转审扩展设计,明确发起人、接收人、状态历史、并发重复、请假采购报销副作用和回滚路径;rg Test_Method 通过;node --check src/routes/workflow.js 通过;npm test -- tests/unit/routes/workflow.transfer.test.js 通过 7 tests。
WF8-3,请假转审,"实现或补强请假审批转审,保证请假流程和团队状态一致。","1) 请假待办可合法转审;2) 被转审人可审批;3) 历史记录完整;4) 团队状态不被错误更新。","流程级验证:员工提交请假 -> 审批人转审 -> 新审批人通过或驳回 -> 检查请假状态和审批历史。",node|bash|manual,DONE,DONE,DONE,server/src|client/src|server/scripts,"[""WF8-2""]",本地真实 API 闭环通过:员工提交请假 df0648b5-f564-42a0-a38a-0027646b0f50;manager 转审 task cf6e23c1-0043-40d5-bc9f-659fe4028dc5 给 CEO;原审批人再审批返回 403;CEO 审批后请假状态 approved;history 包含 transfer/approve;不扩展考勤 API。
WF8-4,采购转审,"实现或补强采购审批转审,保证采购状态、附件和审批历史一致。","1) 采购待办可合法转审;2) 附件和状态不丢失;3) 重复转审有防护;4) 历史可追溯。","流程级验证:员工提交采购 -> 审批人转审 -> 新审批人处理 -> 检查采购状态和历史。",node|bash|manual,DONE,DONE,DONE,server/src|client/src|server/scripts,"[""WF8-2""]",本地真实 API 闭环通过:员工提交采购 ac507147-74de-48c7-a4f3-95846ea87b3f;附件 565ac2ff-847e-41cd-99b6-2fbd4ed2e8f8 在转审和审批后仍存在;manager 转审 task cf5ccf97-938f-4ae2-8f40-d042dcf0bd69 给 CEO;原审批人再审批返回 403;CEO 审批后采购状态 approved;history 包含 transfer/approve;不引入复杂预算和供应商准入。
WF8-5,报销转审复核,"复核既有报销转审能力,补齐权限、历史或通知缺口。","1) 报销转审符合权限;2) 发票和附件不受影响;3) 财务状态不被非法改变;4) 通知到正确处理人。","流程级验证:员工提交报销 -> 审批人转审 -> 新审批人审批 -> 财务查看台账 -> 检查历史和通知。",node|bash|manual,DONE,DONE,DONE,server/src|client/src|server/scripts,"[""WF8-2""]",本地真实 API 闭环通过:员工提交报销 52ed3c3b-39bf-4178-8014-7458d091910d;manager 转审 task d2bd491d-e1c1-4302-9c1c-20bcaa51db63 给 CEO;原审批人再审批返回 403;CEO 审批后报销状态 approved;发票 ed13493b-62cf-4f91-89fe-2017fb11a88c 仍绑定;目标审批人通知已检查;history 包含 transfer/approve;不得改变付款状态机。
WF8-6,通知失败可追溯,"补强企业微信、站内和可选邮件通知失败的追踪口径。","1) 发送失败有摘要和错误类型;2) 不打印 token 或手机号;3) 业务流程不因非关键通知失败误完成;4) 可人工排障。","流程级验证:模拟通知失败 -> 检查通知记录或日志摘要 -> 确认业务状态和错误提示可解释。",node|manual,DONE,DONE,DONE,server/src|scripts/qa|docs/试运行与自动化验证手册.md,"[""WF8-1""]",现有能力已覆盖:notificationDelivery 持久化 attempt/status/result_code/error_message/response_body 且管理员接口按 notification.channel.manage 查看摘要;失败或跳过不回滚主业务;通知渠道读模型脱敏 secret;已执行 npm test -- tests/unit/services/notificationDispatcher.test.js tests/unit/services/imEnqueue.test.js tests/unit/routes/notifications.test.js 通过 26 tests;node --check notificationDispatcher.js/notifications.js 通过。
WF8-7,邮件通道决策记录,"决定邮件通道是否进入当前验收,若不进入则冻结并说明替代通知通道。","1) 邮件是否验收有明确结论;2) 不影响企业微信和站内通知验收;3) 冻结原因可追溯;4) 后续解锁条件清楚。","流程级验证:人工核对需求规约和 Issue Notes 中邮件通道决策。",manual,DONE,DONE,DONE,docs/需求-统一审批中心规约.md|issues/2026-05-13_18-23-52-wf8-approval-notification.csv,"[""WF8-1""]",邮件通道当前冻结,不作为 WF8 硬门禁;站内通知和企业微信个人应用消息继续验收;解锁条件已写入规约和本 Notes。
WF8-8,三渠道通知验收设计,"设计站内、企业微信个人应用消息和邮件或冻结替代通道的三渠道验收口径。","1) 三渠道或二渠道加冻结说明清楚;2) deeplink 回 OA;3) 缺配置时 SKIP 不等于 PASS;4) 真机和公网边界明确。","流程级验证:人工审查通知矩阵;必要时执行 live readiness 和企业微信真机验证。",manual|bash|playwright,DONE,DONE,DONE,docs/试运行与自动化验证手册.md|docs/需求-企业微信基础设施规约.md,"[""WF8-6"",""WF8-7""]",Runbook 已新增 WF8 通知渠道验收矩阵:站内/企业微信个人应用/邮件冻结/失败追溯四类口径;明确本地自动化/公网匿名/公网带凭据/企业微信真机证据边界;rg Test_Method 已通过;本任务仅设计验收口径 未执行真机验收。
WF8-9,催办和超时提醒回归,"回归既有催办和超时提醒,避免转审或通知增强引入倒退。","1) 催办不改变审批状态;2) 超时提醒不重复刷屏;3) 通知对象正确;4) 历史记录可追溯。","流程级验证:创建待审批任务 -> 触发催办或超时提醒 -> 检查通知和 workflow history。",node|bash|manual,DONE,DONE,DONE,server/src|server/scripts|docs/需求-统一审批中心规约.md,"[""WF8-6""]",AP6 后提醒能力是当前事实;已跑 E2E AP6 审批催办与待办汇总 1 passed 覆盖申请人催办/经理和 admin 禁止/重复 24h 限制/history/notification/audit/summary;已跑 workflow.travel、workflowOverdueReminderJob、notificationTypes 单测 7 passed 覆盖超时提醒 job 和通知类型;node --check workflow.js/workflowOverdueReminderJob.js 通过。
WF8-10,审批历史一致性,"确保转审、催办、通过、驳回和通知事件在审批历史中一致展示。","1) 历史顺序清楚;2) 操作人和目标人可解释;3) 不泄露敏感字段;4) PC 和移动展示一致。","流程级验证:提交审批 -> 转审 -> 催办 -> 审批处理 -> PC 和移动查看历史。",playwright|node|manual,DONE,DONE,DONE,server/src|client/src,"[""WF8-3"",""WF8-4"",""WF8-5"",""WF8-9""]",完成:MobileApprovalsPage 渲染 selectedTask.history 的移动处理历史卡片并复用动作中文映射;仅展示动作 操作人 意见 时间和空态 不渲染 payload;不改后端 数据结构 权限或状态机;验证 npm run typecheck 通过;npm run build 通过;npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts --workers=1 --reporter=list 在启动本地 3000 服务后 5 passed。
WF8-11,通知 deeplink 回 OA 验证,"验证企业微信个人应用消息或站内通知 deeplink 能回到 OA 目标页面。","1) deeplink 指向具体业务目标;2) 不只返回通知中心;3) 未登录或未绑定有可解释提示;4) 移动布局正常。","流程级验证:触发通知 -> 点击 deeplink -> 企业微信或移动浏览器打开 OA 目标详情 -> 检查权限和页面。",playwright|manual,DONE,DONE,DONE,client/src|server/src|docs/trialrun/真机公网测试清单.md,"[""WF8-8"",""WF8-10"",""WF8-11A""]",2026-05-14 用户真机反馈为企业微信免登录通过 但个人应用消息点击均提示 requestid tokenexpired 或深链已过期;2026-05-14 22:05 修复提交 5491e92 已部署到 oa.hyinda.com 并通过公网 /ready public bundle live readiness WeCom UA 自动化;2026-05-15 用户确认 wangshunli 当前手机点击企业微信个人应用审批消息已可免登录进入对应详情 不再出现 requestid tokenexpired 或深链已过期;代表消息 taskId 822b2159-dc3c-4a65-8a49-abd70000f1b8 目标 /mobile/approvals?taskId=822b2159-dc3c-4a65-8a49-abd70000f1b8;本结论为代表设备真机证据 不扩大为全设备承诺。
WF8-11A,企业微信消息过期深链修复,"修复企业微信个人应用消息中的 OA deeplink 过期后无法回到目标单据或审批页的问题,保留签名校验和内部路径白名单。","1) 签名有效且 targetPath 为内部相对路径时 过期旧 token 也能回 OA;2) 企业微信 WebView 优先进入 wecom login 并带 returnTo;3) 普通浏览器仍走目标路径和现有登录 redirect;4) 无效签名 绝对 URL 和 // 路径仍拒绝。","流程级验证:cd server && node --check src/routes/auth.js src/services/notifications/detailUrl.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。",node|npm,DONE,DONE,DONE,server/src/routes/auth.js|server/src/services/notifications/detailUrl.js|server/tests/unit,"[""WF8-10""]",回滚路径:恢复 /api/auth/deeplink 的 exp 硬过期检查和旧 detailUrl payload;不会修改 workflow 状态机或通知通道配置。
WF8-12,workflow reviewer 审查,"对 WF8 涉及的 workflow 状态、权限和通知副作用做独立 review。","1) 非法状态跳转无阻断;2) 权限泄漏无阻断;3) 重复审批和并发风险可控;4) 漏测项有归属。","流程级验证:reviewer 人工审查 diff、Issue CSV 和测试证据。",manual,DONE,DONE,DONE,issues/2026-05-13_18-23-52-wf8-approval-notification.csv|server/src|client/src,"[""WF8-10"",""WF8-11""]",只读 reviewer 复核结论:deeplink 仅接受签名有效且 targetPath 为 OA 内部相对路径的目标 无效签名 绝对 URL 和 // 路径仍拒绝;企业微信 UA 通过 /api/auth/wecom/login returnTo 免登录回流;本轮不修改 workflow 状态机 权限模型 审批动作或通知通道配置;后端相关单测 4 files 29 tests passed。
WF8-13,WF8 收口准备,"整理 WF8 验证摘要、通知矩阵、未完成项和后续业务影响。","1) DONE 行均有证据;2) 通知渠道结论清楚;3) 未完成项不伪装完成;4) 文档入口同步。","流程级验证:人工核对 WF8 CSV 状态、验证摘要、通知矩阵和 git diff。",manual|git,DONE,DONE,DONE,issues/2026-05-13_18-23-52-wf8-approval-notification.csv|docs/文档索引.md,"[""WF8-12""]",WF8 DONE 行均有自动化或代表真机证据;邮件通道继续冻结不作为当前门禁;企业微信个人应用消息 deeplink 已经代表设备验证回目标页;后续通知模板 偏好 失败重试扩展转入 P2 另行规划。
WF8-CLOSE,WF8 阶段 CLOSE,"阶段性关闭 WF8,完成状态回填、验证摘要和中文提交。","1) CSV 校验通过;2) git diff --check 通过;3) 所有 DONE 有命令或人工证据;4) 中文提交引用 WF8;5) 后续风险有归属。","流程级验证:validate_issues_csv.py 本 CSV;git diff --check;人工核对最终摘要。",python3|git|manual,DONE,DONE,DONE,issues/2026-05-13_18-23-52-wf8-approval-notification.csv,"[""WF8-13""]",WF8 阶段关闭:转审 通知失败追踪 催办 超时 历史一致性 deeplink 回流均完成;P2 仅保留通知模板 偏好设置 失败重试 邮件通道解冻等扩展项;本次提交将引用 WF8。