R6 收口并创建后续优化合同
这个提交包含在:
@@ -4,4 +4,4 @@ R2,本地门禁与 Runbook 补强,把 A8 本地回归真实需要的本地服务
|
||||
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 仍未执行。
|
||||
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""]","R6 准备合同已创建:issues/2026-05-11_10-23-41-r6-small-trialrun-prep.csv;R6-2 已固定 SMOKE002、SMOKE101、wangzhiling、wangshunli、默认窗口和回滚/问题负责人;R6-3 自动检查已通过,报告 artifacts/qa-flow/live-smoke-readiness-20260512-001722,通知渠道 wecom_app_message enabled,旧 mock disabled,备份可追溯。WZ6 已创建并只读核验 wangzhiling 真实财务候选账号为 active,角色 employee,finance,一次性密码仅保存在仓库外安全文件,R6-4 执行前已完成首次登录改密。2026-05-12 R6-4 已部分执行:报销 paid、请假 approved、财务报销付款通过、企业微信绑定用户 delivery 审计通过;采购提交在公网触发 `ReferenceError: budgetPrecheckGate is not defined`,登记 R6-ISSUE-003 并新建采购提交热修合同。主 R6 继续 TODO/TODO/TODO,R6-5/R6-6 不推进;修复并复跑采购提交 -> 审批 -> 历史查看后再恢复小范围试运行。小范围试运行前不得扩 P2 预算、ERP、AI、完整差旅、复杂 BPM,反馈必须进入新 Issue CSV。"
|
||||
R6,小范围试运行,公网和真机 smoke 通过后,只开放 2-3 个内部用户按清单试运行报销、请假、采购、审批、企业微信移动入口、付款和导出;反馈转新 Issue。,1) 试运行名单、角色、时间窗口和回滚联系人明确;2) 员工提交、审批人审批、财务付款/导出、企业微信 deeplink 回 OA 均有记录;3) 每日问题只登记和分级,不现场扩大 P2 功能范围;4) 试运行结束形成继续/回滚/修复判断。,流程级验证:员工提交报销/请假/采购 -> 主管或财务审批 -> 财务付款或导出 -> 企业微信通知 deeplink 回 OA -> 管理员检查审计和状态;人工记录问题、截图和处理结论。,manual|playwright,DONE,DONE,DONE,docs/trialrun/release-readiness-checklist.md|docs/trialrun/manual-trialrun-report.md|issues/*.csv,"[""R5""]","R6 completed 2026-05-12:准备合同 issues/2026-05-11_10-23-41-r6-small-trialrun-prep.csv 中 R6-1 到 R6-6 已 DONE/DONE/DONE;名单固定为 SMOKE002、SMOKE101、wangzhiling、wangshunli,回滚联系人和问题负责人为 wangshunli。R6-3 自动检查通过,报告 artifacts/qa-flow/live-smoke-readiness-20260512-001722。R6-4 首次执行报销 paid、请假 approved、财务付款通过,采购提交触发 `budgetPrecheckGate is not defined` 并登记 R6-ISSUE-003;PS6 热修 a8b7351 已部署,/ready ok,public bundle findings=0,live smoke readiness PASS,报告 artifacts/qa-flow/live-smoke-readiness-20260512-013114。公网采购复跑 `CG-20260512-0001` / `538c3c92-edce-4c28-bcdd-9bb8065c1d0e` 已由 SMOKE101 审批至 approved,企业微信个人应用消息 delivery=`wecom_app_sent`、errcode=`0`;R6-ISSUE-003 closed。R6 通过不解释为全面正式上线;后续 PC/移动/审批效率/财务台账/报销票据/请假采购/权限审计/QA 治理必须拆独立 Issue,且不得把预算、ERP、AI、完整差旅、复杂 BPM、审批设计器混入 R6 首轮。"
|
||||
|
||||
|
@@ -2,6 +2,6 @@ ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regr
|
||||
R6-1,R6 基线与准备合同,固定 R6 小范围试运行准备合同,记录 R5 已完成、当前公网版本、回滚口径和不扩范围原则;本项不启动真实试运行。,"1) 本 CSV 存在且校验通过;2) 主 R5 为 DONE/DONE/DONE;3) 主 R6 仍为 TODO;4) R6 范围限定报销、请假、采购、审批、企业微信入口通知、财务付款导出;5) 不改业务代码、不部署、不改远端数据。","流程级验证:git status --short;git log --oneline -5;python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-11_10-23-41-r6-small-trialrun-prep.csv;人工核对 issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv 中 R5 DONE、R6 TODO。",git|python3|manual,DONE,DONE,DONE,issues/2026-05-11_10-23-41-r6-small-trialrun-prep.csv,[],基线为 c8b6749;公网 R5 运行代码包含 b1ae41f;回滚优先使用最近部署包、数据库备份、storage 备份和配置备份;本合同只做 R6 准备。
|
||||
R6-2,固定试运行名单与窗口,固定 R6 首批 2-3 个内部用户、角色、时间窗口、回滚联系人和问题登记负责人;名单未确定时不得启动 R6。,"1) 至少覆盖员工、审批人、财务或管理员;2) 每个用户有角色、入口、设备和预期流程;3) 时间窗口、回滚联系人、问题登记负责人明确;4) 若名单缺失,本项保持 TODO,R6 不进入 DOING。","流程级验证:人工填写 docs/trialrun/manual-trialrun-report.md 的 R6 试运行记录模板;检查不得写入密码、secret、个人隐私截图或真实票据文件。",manual,DONE,DONE,DONE,docs/trialrun/manual-trialrun-report.md,"[""R6-1""]","R6-2 completed:已固定员工 SMOKE002、经理/审批人 SMOKE101、财务 wangzhiling、管理员/拍板人 wangshunli;回滚联系人和问题登记负责人均为 wangshunli;默认窗口为 2026-05-12 14:00-17:00 Asia/Shanghai,若现场无法执行则顺延到 2026-05-13 14:00-17:00。R6-ISSUE-001/002 已关闭;不记录密码、secret、隐私截图或真实票据文件。"
|
||||
R6-3,R6 试运行前自动检查,在名单与窗口确认后,复核公网健康、企业微信个人应用消息、live smoke、真实 PDF OCR、测试账号和回滚证据。,"1) /ready 正常;2) 公网 bundle findings=0;3) check-live-smoke-env --strict 通过;4) run-live-smoke-readiness.sh 通过;5) 企微个人应用消息渠道 enabled 且旧 mock 不作为验收依据;6) 回滚联系人和备份位置可追溯。","流程级验证: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;只读确认通知渠道 mode=wecom_app_message;记录最新 artifacts/qa-flow/live-smoke-readiness-*。",node|bash|ssh|manual,DONE,DONE,DONE,scripts/qa/*|artifacts/qa-flow|docs/trialrun/manual-trialrun-report.md,"[""R6-2""]","DONE:2026-05-12 自动检查已执行,/ready ok,public bundle findings=0,strict live env 通过,run-live-smoke-readiness PASS,真实 OCR 样票为重复发票可解释终态,报告 artifacts/qa-flow/live-smoke-readiness-20260512-001722;通知渠道 R5-WECOM-APP-PERSONAL enabled=true mode=wecom_app_message,旧 R50-MOCK-007334 enabled=false;远端 Prisma up to date,容器健康,备份 hyb-oa-db-20260510_134340.dump 与 hyb-oa-storage-20260510_134341.tar.gz 可追溯。WZ6 已通过受控管理员 API 创建 wangzhiling,active 且角色 employee,finance;一次性密码仅保存在仓库外 ~/.hyb-oa/wangzhiling-onetime.env。R6-4 可在试运行窗口内按清单执行,但主 R6 仍保持 TODO,直到真实流程和每日收口完成。"
|
||||
R6-4,R6 小范围真实流程执行,按已确认名单执行员工、审批人、财务或管理员的真实或准真实业务流程,并把所有问题登记到模板或新 Issue。,"1) 员工提交报销并上传 PDF 发票或附件;2) 请假和采购各至少一条轻量流程;3) 审批人从 PC 或企业微信移动入口处理待办;4) 财务完成复核、付款标记或导出验证;5) 企业微信消息能收到并回流 OA。","流程级验证:按 docs/trialrun/manual-trialrun-report.md 的 R6 流程矩阵逐项记录;必要时用 Playwright 辅助 PC 1440x960、iPhone 12/iOS14、iPhone 14/iOS16、Redmi K60 和企业微信 UA 视觉验证;问题按阻断、严重、一般、体验建议分级。",manual|playwright,DONE,DONE,TODO,docs/trialrun/manual-trialrun-report.md|output/playwright,"[""R6-3""]","2026-05-12 R6-4 已自动辅助执行但未通过完整验收:报销 `BX-20260512-0011` 终态 paid,请假 `639acec8-bbfc-462c-bc3b-eaaa70e72153` 终态 approved,`wangzhiling` 已完成首次登录改密并完成报销财务付款;采购 `ab69db11-87e3-48b0-8a8a-43324d1c70e5` 提交返回 500,server 日志为 `ReferenceError: budgetPrecheckGate is not defined`,已登记 R6-ISSUE-003。R6-5/R6-6 不推进;先执行采购提交热修合同并复跑采购提交 -> 审批 -> 历史查看。R6 期间不扩预算、ERP、AI、完整差旅、复杂 BPM、审批设计器或新组织规则;发现需求只登记。"
|
||||
R6-5,R6 每日收口与风险处置,试运行期间每日汇总问题,判断继续、修复后继续、暂停或回滚。,"1) 每日问题按阻断、严重、一般、体验建议分级;2) 阻断问题暂停试运行;3) 严重问题当天判断修复、降级或回滚;4) 一般和体验建议进入后续 Issue;5) 每日结论有负责人和时间。","流程级验证:检查 docs/trialrun/manual-trialrun-report.md 每日收口区;若触发回滚,记录触发条件、决策人、执行人、回滚点和复检结果。",manual,TODO,TODO,TODO,docs/trialrun/manual-trialrun-report.md|issues/*.csv,"[""R6-4""]","当前受 R6-ISSUE-003 阻断,R6-5 不推进到完成;只有阻断主流程或数据安全的问题才立即修复,其余问题进入后续批次。"
|
||||
R6-6,R6 结论与后续优化入口,汇总 R6 结果,形成继续、修复后继续、暂停回滚或进入下一批优化的结论。,"1) 试运行结论明确;2) 主 R6 仅在真实流程和每日收口全部满足后才可回填 DONE/DONE/DONE;3) 后续优化拆成新 Issue;4) 不把 R6 通过解释为全面正式上线。","流程级验证:校验本 CSV、主 R5/R6 合同和试运行报告;git diff --check;人工核对所有问题均已登记、分级和指派。",python3|git|manual,TODO,TODO,TODO,issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|docs/trialrun/manual-trialrun-report.md,"[""R6-5""]",R6 通过后优先规划 PC 信息架构统一、移动深层页体验、审批催办/超时和财务台账增强。
|
||||
R6-4,R6 小范围真实流程执行,按已确认名单执行员工、审批人、财务或管理员的真实或准真实业务流程,并把所有问题登记到模板或新 Issue。,"1) 员工提交报销并上传 PDF 发票或附件;2) 请假和采购各至少一条轻量流程;3) 审批人从 PC 或企业微信移动入口处理待办;4) 财务完成复核、付款标记或导出验证;5) 企业微信消息能收到并回流 OA。","流程级验证:按 docs/trialrun/manual-trialrun-report.md 的 R6 流程矩阵逐项记录;必要时用 Playwright 辅助 PC 1440x960、iPhone 12/iOS14、iPhone 14/iOS16、Redmi K60 和企业微信 UA 视觉验证;问题按阻断、严重、一般、体验建议分级。",manual|playwright,DONE,DONE,DONE,docs/trialrun/manual-trialrun-report.md|output/playwright,"[""R6-3""]","DONE:2026-05-12 R6-4 已完成。保留已通过证据:报销 `BX-20260512-0011` 终态 paid,请假 `639acec8-bbfc-462c-bc3b-eaaa70e72153` 终态 approved,`wangzhiling` 已完成首次登录改密并完成报销财务付款。采购初次执行 `ab69db11-87e3-48b0-8a8a-43324d1c70e5` 曾触发 `ReferenceError: budgetPrecheckGate is not defined`;PS6 热修部署后公网复跑 `CG-20260512-0001` / `538c3c92-edce-4c28-bcdd-9bb8065c1d0e`,`SMOKE101` 审批任务 `6d3cf41c-2a44-4bc3-9245-db6383fabdf0` 后终态 approved;企业微信 delivery=`wecom_app_sent`、errcode=`0`。R6 期间未扩预算、ERP、AI、完整差旅、复杂 BPM、审批设计器或新组织规则。"
|
||||
R6-5,R6 每日收口与风险处置,试运行期间每日汇总问题,判断继续、修复后继续、暂停或回滚。,"1) 每日问题按阻断、严重、一般、体验建议分级;2) 阻断问题暂停试运行;3) 严重问题当天判断修复、降级或回滚;4) 一般和体验建议进入后续 Issue;5) 每日结论有负责人和时间。","流程级验证:检查 docs/trialrun/manual-trialrun-report.md 每日收口区;若触发回滚,记录触发条件、决策人、执行人、回滚点和复检结果。",manual,DONE,DONE,DONE,docs/trialrun/manual-trialrun-report.md|issues/*.csv,"[""R6-4""]","DONE:每日收口已登记 2026-05-12 两条记录。`R6-ISSUE-003` 初始为阻断,已通过 PS6 修复、部署、公网复跑关闭;当前阻断数 0、严重数 0。一般问题和体验建议进入后续独立 Issue,不在 R6 现场扩功能。"
|
||||
R6-6,R6 结论与后续优化入口,汇总 R6 结果,形成继续、修复后继续、暂停回滚或进入下一批优化的结论。,"1) 试运行结论明确;2) 主 R6 仅在真实流程和每日收口全部满足后才可回填 DONE/DONE/DONE;3) 后续优化拆成新 Issue;4) 不把 R6 通过解释为全面正式上线。","流程级验证:校验本 CSV、主 R5/R6 合同和试运行报告;git diff --check;人工核对所有问题均已登记、分级和指派。",python3|git|manual,DONE,DONE,DONE,issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv|docs/trialrun/manual-trialrun-report.md,"[""R6-5""]","DONE:R6 首轮小范围试运行通过,结论为进入下一批优化,不解释为全面正式上线。后续优先新建独立 Issue:PC 信息架构统一、移动二轮体验、审批催办/超时、审批效率摘要、财务台账增强、报销/票据体验完善、请假/采购轻量完善、权限审计回归和 QA 治理升级。"
|
||||
|
||||
|
@@ -2,5 +2,5 @@ ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regr
|
||||
PS6-1,R6 采购提交阻断建档,记录 R6-4 采购主链路在公网提交时触发服务端 500 的事实证据,并固定本热修合同范围。,"1) `docs/trialrun/manual-trialrun-report.md` 已登记 `R6-ISSUE-003`;2) R6 小范围合同 R6-4 保持未完整通过,R6-5/R6-6 不推进;3) 本合同只处理采购提交预算预检变量缺失,不扩功能、不改远端数据、不清理 smoke 数据。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-12_01-12-20-r6-purchase-submit-budget-precheck-hotfix.csv;rg -n 'R6-ISSUE-003|budgetPrecheckGate|ab69db11-87e3-48b0-8a8a-43324d1c70e5' docs/trialrun/manual-trialrun-report.md issues server/src/routes/purchaseRequests.js。",python3|rg|manual,DONE,DONE,DONE,issues/2026-05-12_01-12-20-r6-purchase-submit-budget-precheck-hotfix.csv|docs/trialrun/manual-trialrun-report.md,[],R6-4 已创建公网测试数据,采购草稿 `ab69db11-87e3-48b0-8a8a-43324d1c70e5` 停在 draft;不得清理或篡改历史数据,修复后新建或复用可解释测试单据复跑。
|
||||
PS6-2,修复采购提交预算预检变量,在 `server/src/routes/purchaseRequests.js` 的提交路径中正确求值或传递 `budgetPrecheckGate`,避免缺预算池分支引用未定义变量。,"1) `/api/purchase-requests/:id/submit` 不再因 `budgetPrecheckGate is not defined` 返回 500;2) 保持预算预检既有语义:开启 budget_precheck 时以 authoritative precheck 为准,未开启时走 legacy fallback control mode;3) 无 Prisma migration、无 API 契约变更、无权限模型变更。","流程级验证:cd server && npm run prisma:validate;cd server && node --check src/routes/purchaseRequests.js;补充或更新采购提交测试,覆盖无预算池、预算预检开关关闭/继承、提交进入审批或返回可解释 4xx 的路径;确认不会生成 500。",node|npm,DONE,DONE,DONE,server/src/routes/purchaseRequests.js|server/tests/**,"[""PS6-1""]","DONE:已在采购提交事务中求值 `FEATURE_FLAG_KEYS.budgetPrecheck`,预算预检关闭时使用 legacy fallback control mode,开启时沿用 authoritative precheck 结果;新增 `server/tests/unit/routes/purchase.submit-budget-precheck.test.js` 覆盖无预算池、预算预检关闭且 precheck hint=block 时仍进入审批并返回 `missing_budget_pool` warning,不再 500。验证通过:`cd server && npm run prisma:validate`;`cd server && node --check src/routes/purchaseRequests.js`;`cd server && npm test -- tests/unit/routes/purchase.submit-budget-precheck.test.js tests/unit/routes/purchase.submit-side-effects.test.js`。回滚路径:还原本 Issue 对 `server/src/routes/purchaseRequests.js` 和测试文件的变更后重新部署;不涉及 schema 和数据回滚。"
|
||||
PS6-3,采购主链路本地回归,复跑采购业务自动化,确认员工提交采购、经理审批、历史查看不再被预算预检变量阻断。,"1) 本地采购业务流通过;2) 若缺预算池,结果必须是可解释业务校验或正常进入审批,不允许 500;3) 不要求新增预算、ERP、AI、完整差旅或复杂 BPM。","流程级验证:BUSINESS_FLOW_GROUPS=procurement bash scripts/qa/run-business-flow-gates.sh local;如该脚本不可用,则用现有 Playwright/接口脚本登录 `SMOKE002` 创建采购 -> 提交 -> `SMOKE101` 审批 -> 查询历史,并记录替代命令。",bash|playwright,DONE,DONE,DONE,scripts/qa/*|client/tests/e2e/*,"[""PS6-2""]","DONE:`BUSINESS_FLOW_GROUPS=procurement bash scripts/qa/run-business-flow-gates.sh local` 通过,`procurement-flow.spec.ts` 1 passed,报告 `artifacts/qa-flow/business-flow-20260512-012612/summary.txt`;本地链路覆盖员工提单、经理审批、财务归档,不新增预算、ERP、AI、完整差旅或复杂 BPM。"
|
||||
PS6-4,部署与公网复检,本地验证通过后受控部署到 `https://oa.hyinda.com`,复检公网健康和基础 smoke。,"1) `bash deploy/trialrun/deploy.sh` 成功,不覆盖远端 `.env`;2) `/ready` 正常;3) public bundle 扫描 findings=0;4) live smoke readiness 通过;5) 企业微信个人应用消息通道仍为 `wecom_app_message enabled=true`。","流程级验证:bash deploy/trialrun/deploy.sh;curl -fsS https://oa.hyinda.com/ready;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;只读确认通知渠道和公网运行文件哈希。",bash|curl|ssh,TODO,TODO,TODO,deploy/trialrun/*|scripts/qa/*,"[""PS6-3""]","若部署失败,停止并记录错误;不手工修远端代码、不改 `.env`、不继续 R6。"
|
||||
PS6-5,恢复 R6-4 采购复跑与状态回填,热修部署后恢复 R6-4 的采购路径复跑,完成采购提交、审批和历史查看后再判断是否进入 R6-5。,"1) 采购从草稿提交进入审批或可解释业务状态;2) `SMOKE101` 可处理采购待办;3) 采购历史与审批中心一致;4) `docs/trialrun/manual-trialrun-report.md` 和 R6 合同已回填;5) 主 R6 仍不标 DONE,直到 R6-5/R6-6 完成。","流程级验证:公网 `SMOKE002` 创建/提交采购 -> `SMOKE101` 审批 -> 员工/管理员查看采购历史和审批日志 -> 记录到 R6 流程矩阵;必要时补企业微信消息审计。",manual|playwright|curl,TODO,TODO,TODO,docs/trialrun/manual-trialrun-report.md|issues/2026-05-11_10-23-41-r6-small-trialrun-prep.csv,"[""PS6-4""]","复跑通过后可把 R6-4 Regression_Status 置为 DONE,并进入 R6-5 每日收口;若仍失败,保持 R6-ISSUE-003 open 并暂停 R6。"
|
||||
PS6-4,部署与公网复检,本地验证通过后受控部署到 `https://oa.hyinda.com`,复检公网健康和基础 smoke。,"1) `bash deploy/trialrun/deploy.sh` 成功,不覆盖远端 `.env`;2) `/ready` 正常;3) public bundle 扫描 findings=0;4) live smoke readiness 通过;5) 企业微信个人应用消息通道仍为 `wecom_app_message enabled=true`。","流程级验证:bash deploy/trialrun/deploy.sh;curl -fsS https://oa.hyinda.com/ready;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;只读确认通知渠道和公网运行文件哈希。",bash|curl|ssh,DONE,DONE,DONE,deploy/trialrun/*|scripts/qa/*,"[""PS6-3""]","DONE:`bash deploy/trialrun/deploy.sh` 成功,默认跳过 `.env` 同步;公网 `/ready` ok;远端与本机 `server/src/routes/purchaseRequests.js` sha256 一致;public bundle 扫描 `findings=0`;strict live env 通过;`LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh` PASS,报告 `artifacts/qa-flow/live-smoke-readiness-20260512-013114`;通知渠道只读确认 `R5-WECOM-APP-PERSONAL mode=wecom_app_message enabled=true`,旧 `R50-MOCK-007334 mode=mock enabled=false`。"
|
||||
PS6-5,恢复 R6-4 采购复跑与状态回填,热修部署后恢复 R6-4 的采购路径复跑,完成采购提交、审批和历史查看后再判断是否进入 R6-5。,"1) 采购从草稿提交进入审批或可解释业务状态;2) `SMOKE101` 可处理采购待办;3) 采购历史与审批中心一致;4) `docs/trialrun/manual-trialrun-report.md` 和 R6 合同已回填;5) 主 R6 仍不标 DONE,直到 R6-5/R6-6 完成。","流程级验证:公网 `SMOKE002` 创建/提交采购 -> `SMOKE101` 审批 -> 员工/管理员查看采购历史和审批日志 -> 记录到 R6 流程矩阵;必要时补企业微信消息审计。",manual|playwright|curl,DONE,DONE,DONE,docs/trialrun/manual-trialrun-report.md|issues/2026-05-11_10-23-41-r6-small-trialrun-prep.csv,"[""PS6-4""]","DONE:公网 `SMOKE002` 创建并提交 `CG-20260512-0001`,采购 id `538c3c92-edce-4c28-bcdd-9bb8065c1d0e`,返回 `warnings=[missing_budget_pool]` 且无 500;`SMOKE101` 审批任务 `6d3cf41c-2a44-4bc3-9245-db6383fabdf0` 后采购终态 `approved`;通知 delivery 为 `wecom_app_sent`、errcode=`0`;`R6-ISSUE-003` 已关闭,R6-4 可回填 DONE 并进入 R6-5/R6-6 收口。"
|
||||
|
||||
|
@@ -0,0 +1,6 @@
|
||||
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
||||
PC6-1,PC 信息架构优化合同建档,在 R6 首轮通过后固定 PC 工作台和高频业务页第一批优化范围。,"1) 本 CSV 校验通过;2) 范围限定 PC 工作台、审批中心、报销、财务、采购;3) 不扩预算、ERP、AI、完整差旅、复杂 BPM、审批设计器;4) 不改移动统一设计。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-12_01-40-00-r6-pc-workbench-ia-polish.csv;人工核对主 R6 已 DONE。",python3|manual,DONE,DONE,DONE,issues/2026-05-12_01-40-00-r6-pc-workbench-ia-polish.csv,[],R6 通过后才允许实施;本合同不代表全面 PC 重构。
|
||||
PC6-2,PC 工作台角色化摘要,优化 PC 工作台按员工、审批人、财务、管理员展示待办、通知、我的申请、财务待处理和最近业务摘要。,"1) 同一工作台框架按角色裁剪摘要和入口;2) 员工不看到财务付款和管理配置;3) 管理员不获得业务审批按钮;4) 入口与服务端权限一致。","流程级验证:员工、审批人、财务、管理员分别登录 PC 工作台 -> 检查摘要、入口和无权动作隐藏;直连无权 API 仍拒绝。",playwright|manual,TODO,TODO,TODO,client/src/pages/PortalHomePage.tsx|server/src/routes/portal.js,"[""PC6-1""]",如需后端摘要字段,先复用现有 portal 接口,新增字段必须保持向后兼容。
|
||||
PC6-3,PC 审批中心统一信息架构,统一待办、已办、我发起和通知入口,列表展示业务类型、编号、申请人、金额或天数、当前节点、状态和更新时间。,"1) PC 审批列表可按状态和业务类型筛选;2) 详情页展示摘要、业务字段、附件发票、审批流和日志;3) 自审阻断和 admin-only 禁止审批不回归。","流程级验证:SMOKE002 提交报销/请假/采购 -> SMOKE101 在 PC 审批中心处理 -> 查看已办和发起记录 -> 检查审批历史一致。",playwright|node,TODO,TODO,TODO,client/src/pages/WorkflowTasksPage.tsx|server/src/routes/workflow.js,"[""PC6-2""]",涉及审批权限时需 reviewer 复核。
|
||||
PC6-4,PC 业务详情页第一批收口,优化报销、采购和财务详情页的信息分区,突出发票、附件、审批流、付款状态和采购状态解释。,"1) 报销详情突出发票、附件、审批流、付款状态;2) 采购详情突出状态、附件、审批历史;3) 财务页展示待复核、待付款、已付款和导出入口;4) 不引入桌面页面到移动路由。","流程级验证:PC 1440x960 打开报销详情、采购详情、财务页面 -> 核对核心字段和操作;移动路由静态检查无 PC 页面误挂。",playwright|node,TODO,TODO,TODO,client/src/pages/ReimbursementsPage.tsx|client/src/pages/PurchaseRequestsPage.tsx|client/src/pages/ApOperationsPage.tsx,"[""PC6-3""]",只做第一批高频页面,不全站重构。
|
||||
PC6-5,PC 优化回归与部署,完成 PC 第一批优化后执行类型检查、构建、PC 视觉和公网复检。,"1) client typecheck/build 通过;2) PC 1440x960 视觉截图通过;3) 关键业务流不回归;4) 部署后 /ready、bundle 扫描和 live smoke 通过。","流程级验证:cd client && npm run typecheck && npm run build;PC Playwright 视觉;bash deploy/trialrun/deploy.sh;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh。",npm|playwright|bash,TODO,TODO,TODO,client|scripts/qa|deploy/trialrun,"[""PC6-4""]",面向用户可测前必须完成部署和公网复检。
|
||||
|
@@ -0,0 +1,6 @@
|
||||
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
||||
ME6-1,移动二轮体验合同建档,在 MUD6 已完成的统一移动设计基础上启动第二轮体验巡检和小修。,"1) 本 CSV 校验通过;2) 范围限定专用 /mobile 路由;3) 不重做 MUD6;4) 不新增业务功能、不改审批链和通知通道。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-12_01-41-00-r6-mobile-experience-second-pass.csv;人工核对 docs/product-design-rules.md 移动统一规则。",python3|manual,DONE,DONE,DONE,issues/2026-05-12_01-41-00-r6-mobile-experience-second-pass.csv,[],只修布局、文案、可点击性和视觉密度问题。
|
||||
ME6-2,移动路由全量巡检,覆盖首页、审批、报销列表、报销详情、我的、个人设置、通知、票据上传、请假和资产扫码。,"1) 所有专用 /mobile 路由可达;2) 无 PC 壳、无桌面表格、无横向滚动;3) 底部 Tab 和深层页返回符合规约。","流程级验证:Playwright 遍历 /mobile 路由,视口覆盖 320/360/375/390/393/414/430,输出截图到 output/playwright/r6-mobile-experience-second-pass。",playwright,TODO,TODO,TODO,client/tests/e2e|client/src/pages/Mobile*.tsx,"[""ME6-1""]",自动化不替代代表性真机抽查。
|
||||
ME6-3,企业微信真机抽查闭环,用 iPhone 12 iOS14、iPhone 14 iOS16.2、Redmi K60 抽查首页、审批、报销详情、我的和通知。,"1) 图文不重叠;2) 底部审批可点;3) 报销详情吸底按钮不遮挡;4) 通知 deeplink 能回 OA。","流程级验证:人工企业微信打开海音达工作台 -> 抽查指定路径 -> 记录文字结论和敏感截图外部位置。",manual,TODO,TODO,TODO,docs/trialrun/manual-trialrun-report.md,"[""ME6-2""]",敏感截图不提交仓库。
|
||||
ME6-4,移动小修实施,按巡检结果只修影响识别和点击的问题,复用 mobile-card、槽位、safe-area 和吸底操作。,"1) 不新增业务功能;2) 不引入桌面 card-std p-4 为移动主容器;3) 不按单机型写补丁;4) 所有改动符合 docs/product-design-rules.md。","流程级验证:client typecheck/build;移动视觉矩阵复跑;人工核对修复项没有破坏 MUD6 统一设计。",npm|playwright|manual,TODO,TODO,TODO,client/src/pages/Mobile*.tsx|client/src/styles,"[""ME6-3""]",若发现业务缺口,另拆功能 Issue。
|
||||
ME6-5,移动二轮部署复检,部署移动小修并完成公网视觉和 live smoke。,"1) 部署成功且 /ready ok;2) public bundle findings=0;3) live smoke readiness 通过;4) 公网移动视觉专项通过。","流程级验证:bash deploy/trialrun/deploy.sh;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;公网 baseURL 跑移动视觉专项。",bash|playwright,TODO,TODO,TODO,deploy/trialrun|scripts/qa|output/playwright,"[""ME6-4""]",未部署不得提示用户公网测试新改动。
|
||||
|
@@ -0,0 +1,6 @@
|
||||
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
||||
AP6-1,审批效率 v1 合同建档,在 R6 通过后规划催办、超时提醒、待办聚合和效率摘要第一版。,"1) 本 CSV 校验通过;2) 不进入 R6 门禁;3) 不改现有审批状态机;4) 不做复杂 BPM。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-12_01-42-00-r6-approval-productivity-v1.csv;人工核对统一审批中心规约。",python3|manual,DONE,DONE,DONE,issues/2026-05-12_01-42-00-r6-approval-productivity-v1.csv,[],涉及审批权限、状态机或通知需 reviewer 复核。
|
||||
AP6-2,审批催办能力,申请人可对自己的待审批单据发起催办,催办留痕并通过企业微信个人应用消息提醒审批人。,"1) 仅申请人或提交人可催办自己的待审批单据;2) 催办有频率限制;3) 通知失败不阻断业务且可审计;4) 催办记录可在详情页查看。","流程级验证:员工提交单据 -> 催办 -> 审批人收到站内通知和企微投递审计 -> 重复催办触发频率限制 -> 详情页留痕。",node|playwright|manual,TODO,TODO,TODO,server/src/routes/workflow.js|server/src/services/notificationDispatcher.js|client/src/pages/WorkflowTasksPage.tsx,"[""AP6-1""]","新增接口和审计字段需保持向后兼容,不记录 secret。"
|
||||
AP6-3,超时提醒任务,按业务类型和节点配置首版固定阈值,自动提醒超时待办。,"1) 超时任务只提醒 pending 待办;2) 不改变审批状态;3) 提醒记录可审计;4) 可重复运行且幂等。","流程级验证:构造超时待办 -> 运行提醒脚本或 job -> 检查通知投递、审计和幂等。",node|manual,TODO,TODO,TODO,server/src/jobs|server/src/services,"[""AP6-2""]",首版可用固定策略,复杂配置后续拆分。
|
||||
AP6-4,待办聚合与效率摘要,PC 和移动展示待办数量、最早待处理时间、业务类型分布,并提供管理端只读效率摘要。,"1) 不影响审批动作;2) 统计按业务类型、节点和角色聚合;3) 管理端只读;4) 普通员工只看自己的摘要。","流程级验证:创建报销/请假/采购待办 -> 检查 PC/移动摘要 -> 管理端查看平均处理时长、超时数量和积压数量。",node|playwright,TODO,TODO,TODO,server/src/routes/workflow.js|client/src/pages/PortalHomePage.tsx|client/src/pages/MobilePortalPage.tsx,"[""AP6-3""]",统计口径写入统一审批中心规约或接口注释。
|
||||
AP6-5,审批效率 v1 回归部署,完成审批效率 v1 后做权限、通知、PC/移动和公网复检。,"1) 后端语法和单测通过;2) PC/移动 E2E 通过;3) 企业微信投递审计通过;4) 部署后 live smoke 通过。","流程级验证:cd server && npm run prisma:validate;node --check workflow/notification 文件;cd client && npm run typecheck && npm run build;部署和 live smoke。",node|npm|bash|playwright,TODO,TODO,TODO,server|client|deploy/trialrun,"[""AP6-4""]","不得把催办误用为强制审批或状态跳转。"
|
||||
|
@@ -0,0 +1,6 @@
|
||||
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
||||
FL6-1,财务台账导出合同建档,在 R6 通过后规划财务台账、付款标记增强、附件下载留痕和导出第一版。,"1) 本 CSV 校验通过;2) 不接银行和 ERP 实时付款;3) PDF-only 和重复票据规则保持不变;4) 财务不获得管理员能力。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-12_01-43-00-r6-finance-ledger-export-v1.csv;人工核对报销发票规约。",python3|manual,DONE,DONE,DONE,issues/2026-05-12_01-43-00-r6-finance-ledger-export-v1.csv,[],涉及导出和敏感字段需权限审计。
|
||||
FL6-2,财务台账查询,提供报销单号、申请人、部门、金额、审批状态、付款状态、发票状态和更新时间的财务台账查询。,"1) 财务可筛选和分页;2) 普通员工不可看全量台账;3) 付款和发票状态与报销详情一致。","流程级验证:财务登录 -> 按状态和时间筛选台账 -> 普通员工直连 API 被拒绝 -> 与报销详情交叉核对。",node|playwright,TODO,TODO,TODO,server/src/routes/reimbursements.js|client/src/pages/ApOperationsPage.tsx,"[""FL6-1""]",优先复用现有 AP/报销接口,新增接口需保持只读边界。
|
||||
FL6-3,付款标记审计增强,增强付款备注、付款时间、操作者审计和状态展示。,"1) 付款标记记录操作者和时间;2) 可填写备注;3) 非财务不可付款;4) 重复付款被拒绝或可解释。","流程级验证:财务标记付款 -> 查看审计日志和详情;非财务尝试付款 -> 服务端拒绝;重复付款 -> 可解释结果。",node|playwright,TODO,TODO,TODO,server/src/routes/reimbursements.js|client/src/pages/ReimbursementsPage.tsx,"[""FL6-2""]",不接真实银行付款。
|
||||
FL6-4,附件下载留痕与导出,财务下载附件和发票时留痕,台账支持财务核对导出。,"1) 下载动作写审计;2) 导出敏感字段按权限裁剪;3) 导出文件不提交仓库;4) 重复票据例外状态可解释。","流程级验证:财务下载附件 -> 审计可查;导出台账 -> 文件字段符合权限;普通员工无全量导出。",node|playwright|manual,TODO,TODO,TODO,server/src/routes/exports*|client/src/pages/ApOperationsPage.tsx,"[""FL6-3""]",导出临时文件不得提交仓库。
|
||||
FL6-5,财务台账回归部署,完成财务台账增强后执行回归、部署和公网复检。,"1) server/client 验证通过;2) 财务链路 E2E 通过;3) 权限直连检查通过;4) 部署后 live smoke 通过。","流程级验证:server prisma validate 和 node --check;client typecheck/build;财务 Playwright;bash deploy/trialrun/deploy.sh;live smoke readiness。",node|npm|playwright|bash,TODO,TODO,TODO,server|client|deploy/trialrun,"[""FL6-4""]",涉及财务权限必须 reviewer 复核。
|
||||
|
@@ -0,0 +1,6 @@
|
||||
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
||||
RI6-1,报销票据体验合同建档,规划 R6 后报销和票据体验第一批完善。,"1) 本 CSV 校验通过;2) 员工仍不进入票据中心;3) 不展示 OCR、发票池等内部术语;4) PDF-only 口径保持不变。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-12_01-44-00-r6-reimbursement-invoice-polish-v1.csv;人工核对 docs/reimbursement-invoice-rules.md。",python3|manual,DONE,DONE,DONE,issues/2026-05-12_01-44-00-r6-reimbursement-invoice-polish-v1.csv,[],普通员工发票入口仍为报销详情添加发票。
|
||||
RI6-2,PC 移动报销能力对齐,对齐 PC 和移动的草稿、编辑、删除、附件、PDF 发票和提交审批能力。,"1) PC 和移动都能完成报销草稿主流程;2) 员工不见票据中心入口;3) 移动不使用桌面表格;4) data-testid 稳定。","流程级验证:PC 和移动分别新建草稿 -> 编辑明细 -> 添加附件/PDF 发票 -> 提交审批 -> 删除草稿或验证非草稿不可删。",playwright|npm,TODO,TODO,TODO,client/src/pages/ReimbursementsPage.tsx|client/src/pages/MobileReimbursementDetailPage.tsx,"[""RI6-1""]",只做体验和一致性,不改 OCR provider。
|
||||
RI6-3,发票状态解释优化,统一可用、识别中、识别失败、已绑定、重复票据、已归档等状态文案和下一步提示。,"1) 重复票据给出可理解原因;2) 识别失败有下一步;3) 已绑定和已归档不可误操作;4) 内部术语扫描为 0。","流程级验证:上传 PDF 样票 -> 模拟或真实 OCR 终态 -> 检查各状态文案;node scripts/qa/check-ui-design-rules.mjs --strict。",node|playwright,TODO,TODO,TODO,client/src/pages/*Reimbursement*|scripts/qa/check-ui-design-rules.mjs,"[""RI6-2""]",真实 OCR 重复票据可解释终态继续视为通过。
|
||||
RI6-4,报销详情信息架构收口,PC 详情高密度展示,移动详情轻任务展示,突出发票、附件、审批流和付款状态。,"1) PC 列表和详情适合筛选和查看;2) 移动详情无横向滚动和遮挡;3) 付款状态与财务动作一致。","流程级验证:PC 1440x960 和移动多视口打开报销详情;审批和付款后状态同步;视觉截图输出。",playwright,TODO,TODO,TODO,client/src/pages/ReimbursementsPage.tsx|client/src/pages/MobileReimbursementDetailPage.tsx,"[""RI6-3""]",遵循 docs/product-design-rules.md。
|
||||
RI6-5,报销票据回归部署,完成后执行报销业务流、视觉、部署和公网复检。,"1) 报销业务流 gate 通过;2) R109/R111/R125 相关回归通过;3) 部署后 /ready、bundle 扫描和 live smoke 通过。","流程级验证:BUSINESS_FLOW_GROUPS=reimbursement bash scripts/qa/run-business-flow-gates.sh local;client typecheck/build;deploy;live smoke readiness。",bash|npm|playwright,TODO,TODO,TODO,client|server|scripts/qa|deploy/trialrun,"[""RI6-4""]",敏感票据和截图不提交仓库。
|
||||
|
@@ -0,0 +1,6 @@
|
||||
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
||||
LP6-1,请假采购轻量完善合同建档,规划 R6 后请假与采购轻量体验完善。,"1) 本 CSV 校验通过;2) 不扩复杂预算、供应商准入、招投标、ERP;3) 不改审批链硬规则;4) 统一审批展示保持一致。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-12_01-45-00-r6-leave-procurement-polish-v1.csv;人工核对产品设计规则和统一审批中心规约。",python3|manual,DONE,DONE,DONE,issues/2026-05-12_01-45-00-r6-leave-procurement-polish-v1.csv,[],轻量完善只覆盖主链路体验。
|
||||
LP6-2,请假体验完善,优化请假提交、经理审批、状态查看、退回和驳回说明。,"1) 员工能清楚查看天数、日期、原因和状态;2) 经理审批动作清晰;3) 退回/驳回说明可见;4) 移动轻量展示。","流程级验证:员工提交请假 -> 经理通过/驳回/退回 -> 员工查看状态和说明 -> PC/移动均可理解。",playwright|node,TODO,TODO,TODO,server/src/routes/leave.js|client/src/pages/LeaveRequestPage.tsx|client/src/pages/MobileLeavePage.tsx,"[""LP6-1""]",不接企业微信打卡和排班。
|
||||
LP6-3,采购体验完善,优化采购提交、经理审批、历史查看、附件说明和缺预算池 warning 解释。,"1) 员工提交采购不暴露内部错误;2) 缺预算池 warning 可理解;3) 审批历史清晰;4) 不扩预算和 ERP。","流程级验证:员工提交采购 -> 缺预算池返回可解释 warning -> 经理审批 -> 查看历史和状态说明。",playwright|node,TODO,TODO,TODO,server/src/routes/purchaseRequests.js|client/src/pages/PurchaseRequestsPage.tsx,"[""LP6-2""]",PS6 热修后的 warning 需要转为用户可理解文案。
|
||||
LP6-4,统一审批展示一致性,请假和采购详情页审批流展示与报销一致,自审和 admin-only 禁止审批继续验证。,"1) 三类单据审批流视觉和字段一致;2) 自审阻断;3) admin-only 无业务审批按钮;4) 服务端越权拒绝。","流程级验证:报销、请假、采购各提交一单 -> 审批流展示对比 -> 自审和 admin-only 路径验证。",playwright|node,TODO,TODO,TODO,server/src/routes/workflow.js|client/src/pages,"[""LP6-3""]",涉及审批权限需 reviewer 复核。
|
||||
LP6-5,请假采购回归部署,完成轻量完善后执行业务流、视觉、权限和公网复检。,"1) leave/procurement 业务流通过;2) PC/移动视觉通过;3) 权限回归通过;4) 部署后 live smoke 通过。","流程级验证:BUSINESS_FLOW_GROUPS=leave,procurement bash scripts/qa/run-business-flow-gates.sh local;client typecheck/build;deploy;live smoke readiness。",bash|npm|playwright,TODO,TODO,TODO,client|server|deploy/trialrun,"[""LP6-4""]",不把采购轻量完善扩成复杂招采。
|
||||
|
@@ -0,0 +1,7 @@
|
||||
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
||||
PA6-1,权限审计回归合同建档,规划 R6 后角色矩阵、服务端权限、自审规则和审计留痕回归。,"1) 本 CSV 校验通过;2) 覆盖员工、审批人、财务、管理员、负责人;3) 前端隐藏不作为权限边界;4) 不改组织规则。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-12_01-46-00-r6-permission-audit-regression.csv。",python3,DONE,DONE,DONE,issues/2026-05-12_01-46-00-r6-permission-audit-regression.csv,[],权限问题发现后单独修复,不顺手扩功能。
|
||||
PA6-2,角色入口矩阵回归,检查 PC 和移动入口按员工、审批人、财务、管理员、负责人裁剪。,"1) 员工不见财务和管理入口;2) 财务不见系统管理入口;3) 管理员不见业务审批按钮;4) 移动入口与 PC 权限一致。","流程级验证:各角色登录 PC 和移动 -> 记录入口矩阵 -> 与 docs/需求-统一审批中心规约.md 对齐。",playwright|manual,TODO,TODO,TODO,client/src/components/navigation|client/src/features/mobile/navigation.ts,"[""PA6-1""]",角色显示差异采用同框架裁剪。
|
||||
PA6-3,服务端直连越权回归,对备用模块和业务动作做 API 直连拒绝验证。,"1) 普通员工直连预算、AP、ERP、票据中心等备用路径不得泄露数据;2) 财务和管理员边界正确;3) 无权动作返回 403 或可解释 4xx。","流程级验证:用员工、财务、管理员 token 直连关键 API -> 记录 HTTP 状态和是否泄露数据。",curl|playwright,TODO,TODO,TODO,server/src/routes|client/tests/e2e/permission-direct-access.spec.ts,"[""PA6-2""]",不得打印 token。
|
||||
PA6-4,自审与 admin-only 回归,覆盖报销、请假、采购的自审阻断和 admin-only 禁止业务审批。,"1) 提交人本人不能审批本人单据;2) admin-only 不能获得业务审批权;3) 正式审批人可以处理自己的待办;4) 服务端强制拒绝。","流程级验证:构造三类单据 -> 本人尝试审批被拒绝 -> admin-only 尝试审批被拒绝 -> 正式审批人通过。",playwright|node,TODO,TODO,TODO,server/src/routes/workflow.js|client/tests/e2e,"[""PA6-3""]",涉及 workflow 需 reviewer 复核。
|
||||
PA6-5,审计留痕回归,核对登录、审批、付款、导出、附件下载和通知投递的审计可追溯。,"1) 关键动作有审计或 delivery;2) 审计不含密码和 secret;3) 查询权限正确;4) 失败动作也有可解释记录。","流程级验证:执行关键动作 -> 管理员查询审计 -> 检查字段和脱敏;通知投递查询 delivery。",playwright|manual,TODO,TODO,TODO,server/src/routes/audit*|server/src/services/notificationDispatcher.js,"[""PA6-4""]",敏感数据不得入库日志。
|
||||
PA6-6,权限审计回归部署,完成后执行权限 E2E、后端单测、部署和公网复检。,"1) permission-direct-access 通过;2) workflow 权限回归通过;3) 部署后 live smoke 通过;4) 问题全部登记。","流程级验证:cd client && npm run test:e2e -- permission-direct-access.spec.ts settings-governance.spec.ts;server 相关单测;deploy;live smoke readiness。",npm|node|bash,TODO,TODO,TODO,client/tests/e2e|server/tests|deploy/trialrun,"[""PA6-5""]",权限变更必须单独 commit。
|
||||
|
@@ -0,0 +1,6 @@
|
||||
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
||||
QG6-1,QA 治理升级合同建档,规划 R6 后自动化、视觉和设计规则扫描升级。,"1) 本 CSV 校验通过;2) 不改业务功能;3) 输出路径和敏感截图规则明确;4) 后续页面改动默认带视觉或业务回归。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-12_01-47-00-r6-qa-governance-upgrade.csv。",python3,DONE,DONE,DONE,issues/2026-05-12_01-47-00-r6-qa-governance-upgrade.csv,[],治理升级可与后续页面优化并行规划。
|
||||
QG6-2,设计规则静态扫描增强,扩展 `check-ui-design-rules.mjs` 扫描 UUID 主展示、内部术语、英文上传、桌面表格误入移动和 PC 壳误入 /mobile。,"1) 扫描规则覆盖已知问题;2) 误报有白名单说明;3) strict 模式用于门禁;4) 不扫描 secret 内容。","流程级验证:node scripts/qa/check-ui-design-rules.mjs --strict;构造或保留 fixture 验证规则命中。",node,TODO,TODO,TODO,scripts/qa/check-ui-design-rules.mjs|client/src,"[""QG6-1""]",白名单必须有理由。
|
||||
QG6-3,固定视觉矩阵脚本,建立 PC 1440x960、移动 320/360/375/390/393/414/430、企业微信 iOS/Android UA 和普通移动 UA 的巡检脚本。,"1) 矩阵可按 issue-id 输出截图;2) 支持本地和公网 baseURL;3) 核心断言包含无横向滚动、底部 Tab 命中和无 PC 壳。","流程级验证:运行视觉矩阵脚本,截图输出到 output/playwright/<issue-id>/,检查摘要报告。",playwright|node,TODO,TODO,TODO,client/tests/e2e|scripts/qa,"[""QG6-2""]",真实企业微信仍需代表性真机确认。
|
||||
QG6-4,业务流报告规范化,统一 artifacts/qa-flow 的业务流、live smoke、OCR 和公网扫描报告命名与摘要。,"1) 每轮报告能追溯 issue-id、baseURL、commit;2) 不包含密码和 token;3) 失败摘要可直接登记 Issue。","流程级验证:运行 run-business-flow-gates 和 run-live-smoke-readiness -> 检查报告字段。",bash|node,TODO,TODO,TODO,scripts/qa|artifacts/qa-flow,"[""QG6-3""]",历史报告不强制迁移。
|
||||
QG6-5,QA 治理回归部署,完成治理脚本后运行静态扫描、视觉矩阵、业务流和公网复检。,"1) 静态扫描通过;2) 视觉矩阵通过;3) 业务流关键组通过;4) 部署后 live smoke 通过。","流程级验证:node scripts/qa/check-ui-design-rules.mjs --strict;Playwright 视觉矩阵;BUSINESS_FLOW_GROUPS=reimbursement,leave,procurement bash scripts/qa/run-business-flow-gates.sh local;deploy;live smoke readiness。",node|playwright|bash,TODO,TODO,TODO,scripts/qa|client/tests/e2e|deploy/trialrun,"[""QG6-4""]",治理脚本变更不应修改业务行为。
|
||||
|
在新工单中引用
屏蔽一个用户