ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes "QAOPS9-0","QAOPS9 连续合同建档","建立 R7E 后上线硬化连续合同,承接 QAOPS8 收口后的公网业务流测试数据、live smoke 账号链路、恢复演练窗口和 SLO/Go-No-Go 自动化增强;本合同只规划和硬化,不改业务需求。","1) CSV 校验通过;2) 文档索引和事实源矩阵登记 QAOPS9;3) 不修改 server/src 或 client/src 业务代码;4) 允许仅为门禁安全补 scripts/qa 过滤能力;5) 不部署、不执行生产恢复、不重置数据库、不打印远端 env。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-16_00-19-20-qaops9-release-hardening.csv;node scripts/qa/audit-docs.mjs --check-registry;git diff --check;人工核对 git diff 仅包含 issues/docs/scripts/qa。","python3|node|git|manual","DONE","DONE","DONE","issues/2026-05-16_00-19-20-qaops9-release-hardening.csv|docs/文档索引.md|docs/文档事实源状态矩阵.md|docs/trialrun/人工试运行报告.md|scripts/qa/run-business-flow-gates.sh","[]","2026-05-16 建档并二次细化;承接 QAOPS8-19/20 和 FBA 建议;回滚路径为回退本 CSV、索引登记和脚本过滤参数;不影响运行环境。" "QAOPS9-1","公网业务流测试数据稳定化","把 R7E 暴露的本地旧种子账号和公网真实 smoke 账号链路差异收敛为可复跑测试数据方案,覆盖报销、审批、请假、采购、财务只读确认和权限边界。","1) 明确公网业务流推荐账号链路;2) 旧本地种子失败项不误判为产品失败;3) 隔离本地可变更测试和公网 flag-off 证据分离;4) 失败时能区分账号、权限、数据和产品缺陷。","受影响流程:员工提交报销、请假、采购后由审批人处理,财务只读查看已审批报销且 payment_batch_v1 仍关闭;验证步骤:先用 LIVE_SMOKE_BASE_URL=https://oa.hyinda.com node scripts/qa/check-live-smoke-env.mjs --json 只读核对前置;再在隔离临时库执行 BUSINESS_FLOW_GROUPS=reimbursement,approval,leave,procurement,governance BUSINESS_FLOW_EXCLUDE_SPECS=tests/e2e/reimbursement-payment-batch-flow.spec.ts bash scripts/qa/run-business-flow-gates.sh local 并核对 summary;公网付款批次仍只能以 flag_force_off 或 payment_batch_v1_disabled 作为关闭证据。","bash|node|manual","DONE","DONE","DONE","scripts/qa/run-business-flow-gates.sh|scripts/qa/check-live-smoke-env.mjs|client/tests/e2e/invoice-ocr-flow.spec.ts|client/tests/e2e/r102-reimbursement-main-flow.spec.ts|client/tests/e2e/mobile-approvals-offline.spec.ts|client/tests/e2e/leave-flow.spec.ts|client/tests/e2e/procurement-flow.spec.ts|artifacts/qa-flow|docs/trialrun/人工试运行报告.md","[""QAOPS9-0""]","完成:公网只读前置显示 /ready 200 且 WeCom ready;隔离本地核心业务流最终报告 artifacts/qa-flow/business-flow-20260516-012215/summary.txt,reimbursement 9 passed 1 skipped、approval 3 passed、leave 6 passed、procurement 1 passed、governance 9 passed;排除了会开启 payment_batch_v1 的 reimbursement-payment-batch-flow.spec.ts;本轮只维护过期 E2E 断言,不改业务代码。" "QAOPS9-2","live smoke 账号链路校准","校准 live smoke 账号、角色、直属主管、企业微信绑定和真实 OCR 样票前置,避免凭据缺失或账号链路漂移导致公网门禁不可解释。","1) live smoke 所需账号和角色矩阵清楚;2) 凭据缺失只记录 SKIP;3) 不打印 token、密码、cookie 或远端 env;4) 企业微信入口、deeplink、PDF OCR 和图片 OCR 前置条件分离。","受影响流程:员工、审批人、财务和管理员通过公网入口完成登录、待办、通知 deeplink 和 OCR readiness 检查;验证步骤:LIVE_SMOKE_BASE_URL=https://oa.hyinda.com node scripts/qa/check-live-smoke-env.mjs --json 生成前置摘要;如具备凭据和 PDF 样票,再执行 LIVE_SMOKE_BASE_URL=https://oa.hyinda.com QA_ISSUE_ID=QAOPS9 bash scripts/qa/run-live-smoke-readiness.sh;缺正式凭据、DATABASE_URL、授权 PDF 样票或授权图片样票时按脚本规则记录 SKIP,不回填 DONE。","bash|node|manual","DONE","DONE","DONE","scripts/qa/run-live-smoke-readiness.sh|scripts/qa/check-live-smoke-env.mjs|docs/trialrun/公网LiveSmoke准备清单.md","[""QAOPS9-0""]","完成:已 source ~/.hyb-oa/live-smoke.env 且不打印 env 明文;check-live-smoke-env --strict 通过,liveSmokeReady/liveOcrReady 均为 true;报告 artifacts/qa-flow/live-smoke-readiness-20260516-013727/;公网 live smoke 3 passed,真实 OCR 1 passed,样票进入重复发票可解释终态;pending OCR 因本地未注入 DATABASE_URL 保持非阻断 SKIP。" "QAOPS9-3","恢复演练窗口与 dry-run 设计","把 QAOPS8 的恢复演练准备推进为可执行 dry-run 方案,先限定非生产或隔离环境,明确窗口、责任人、备份核验、恢复验证和停止条件。","1) 恢复演练范围、窗口和负责人明确;2) 演练优先非生产或隔离环境;3) 生产只做只读预检或步骤复盘;4) 未获单独批准不得执行生产恢复或服务切换。","受影响流程:备份清单核对、隔离库恢复、/ready、登录和核心业务只读验证;验证步骤:rg -n '备份|恢复演练|RTO|RPO|停止条件|生产恢复|migrate reset|SYNC_ENV' docs/trialrun/OPS7运维交接Runbook.md docs/ops/非功能基线.md;人工形成 dry-run checklist,若执行恢复只能在非生产或隔离环境记录命令摘要、RTO/RPO 实测和验证截图路径。","manual|rg","DONE","DONE","DONE","docs/trialrun/OPS7运维交接Runbook.md|docs/ops/非功能基线.md|artifacts/qa-flow","[""QAOPS9-0""]","完成:rg 已核对 OPS7 Runbook 和非功能基线;docs/trialrun/OPS7运维交接Runbook.md 已补 QAOPS9 恢复演练 dry-run checklist,限定非生产或隔离环境,登记前置、RTO/RPO 记录、Go/Pause/No-Go 和禁止项;未执行生产恢复、数据库重置或远端 env 操作。" "QAOPS9-4","SLO 与 Go-No-Go 自动化增强","增强上线或扩大试运行前的 SLO、错误预算和 Go/No-Go 自动化汇总,形成可复跑、可审计的门禁结果。","1) /ready、public bundle、live smoke、核心业务流和移动矩阵状态能汇总;2) Go、Pause、No-Go 条件清楚;3) SKIP 不被写成 PASS;4) 输出可关联 Issue 和证据路径。","受影响流程:上线前门禁汇总覆盖匿名健康、带凭据业务流、移动矩阵和人工真机结论;验证步骤:curl -fsS https://oa.hyinda.com/ready;PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com QA_ISSUE_ID=QAOPS9 bash scripts/qa/run-live-smoke-readiness.sh;隔离业务流使用 BUSINESS_FLOW_EXCLUDE_SPECS=tests/e2e/reimbursement-payment-batch-flow.spec.ts;移动矩阵按 DG7/R124 或当前试运行手册指定用例执行;人工汇总 Go/Pause/No-Go,SKIP 不计 PASS。","curl|node|bash|playwright|manual","DONE","DONE","DONE","scripts/qa|docs/ops/SLO错误预算.md|docs/trialrun/发布试运行准备清单.md","[""QAOPS9-1"",""QAOPS9-2""]","完成:/ready 通过、public bundle findings=0、隔离核心业务流通过;公网 live smoke 3 passed、真实 OCR 1 passed;公网移动矩阵 dg7-mobile-information-dedupe + r124-mobile-entry-matrix 6 passed;pending OCR 缺 DATABASE_URL 仅为非阻断 SKIP;Go/No-Go 当前可判定 Go for release-hardening evidence,不代表已部署新 commit。" "QAOPS9-5","证据归档与阶段收口","在 QAOPS9 执行完成后回填 CSV 状态、证据路径、文档索引和事实源矩阵,形成是否可进入 P2 功能决策或上线动作的结论。","1) QAOPS9 各行 DONE 均有 Test_Method 证据;2) 未完成项有 owner、阻断原因和下一步;3) 文档索引与事实源矩阵一致;4) 本轮是否部署和公网状态明确。","受影响流程:测试、发布和运维治理闭环;验证步骤:validate_issues_csv.py 本 CSV;node scripts/qa/audit-docs.mjs --check-registry;rg -n 'QAOPS9|Go-No-Go|live smoke|恢复演练|SLO' docs issues;git diff --check。","python3|node|rg|git|manual","DONE","DONE","DONE","issues/2026-05-16_00-19-20-qaops9-release-hardening.csv|docs/文档索引.md|docs/文档事实源状态矩阵.md|docs/trialrun/人工试运行报告.md","[""QAOPS9-1"",""QAOPS9-2"",""QAOPS9-3"",""QAOPS9-4""]","完成:QAOPS9 全行已按真实 Test_Method 回填;证据路径包括 business-flow-20260516-012215、live-smoke-readiness-20260516-013727 和公网移动矩阵 6 passed;未部署新 commit;payment_batch_v1 和图片 OCR 仍未启用,P2 功能继续按 P2D 分流执行。"