文件
hyb-oa/docs/trialrun/人工试运行报告.md
T

590 行
125 KiB
Markdown
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# 人工试运行报告
**文档状态**:当前试运行证据摘要。
**适用时间**:DCL7 之后。
DCL7 已删除本文件中 R70-R91 的长流水历史,避免旧环境、旧开关和旧公网状态误导当前工作。历史全文可通过 git 恢复:`git show 5da05eb:docs/trialrun/人工试运行报告.md`。
## 当前结论
- R6 首轮小范围试运行已通过;范围是报销、请假、采购、审批、企业微信入口/通知、财务付款/导出。
- PC6、PA6、FL6、AP6、RI6、LP6、ME6 自动化、QG6、DG7/MRF7、MIA7 已完成相应收口。
- 2026-05-13 用户完成 iPhone 12、iPhone 14、Redmi K60 企业微信代表性真机主流程复测,`ME6-3` 已按主流程门禁关闭;iPhone 12 图文上下间距偏紧按非阻断观察项记录。
- MIF7-1..7 与 MIF7T 已完成本地整改、公网部署、公网匿名复检和带凭据 live smoke/OCR 复检;2026-05-13 已将包含 `cf2bba0` 的 MIF7T 代码部署到 `https://oa.hyinda.com`。
- MIF7TD 收口报告为 `artifacts/qa-flow/live-smoke-readiness-20260513-115455/`:公网 live smoke `3 passed`,真实 OCR `1 passed`,样票为重复发票可解释终态;`pending OCR` 因本地未注入 `DATABASE_URL` 记录 `SKIP`,不作为 MIF7-7 硬阻断。
- R7/OPS7/DOC7 是准备材料;R7EP 自动门禁和 OPS8 只读检查已完成;R7E 已于 2026-05-15 23:35 CST 由用户确认阶段验收通过,并于 2026-05-16 完成 R7E-19/R7E-20 和 QAOPS8-19/QAOPS8-20 阶段收口。
- 2026-05-13 后续计划调整直接回写现有 R7EP、OPS8、QAF8、UX8、P2T 合同,不新建专门调整 Issue;调整后 R7EP 门禁可并行执行,OPS8-1/2/4 纳入 R7EP Go/No-Go,UX8 和 P2T 候选按真实反馈并行推进。
- ORG8 组织账号与权限主数据已完成本地代表性角色验收和阶段收口;后续组织主数据治理只作为 P2 只读巡检候选,不自动进入写修复。
- 2026-05-16 已建立并细化 QAOPS9 上线硬化连续合同和 P2D 功能决策合同;QAOPS9 固定隔离本地业务流与公网 flag-off 证据分离,P2D 固定 `GO_TO_CONTRACT`、`HOLD_FOR_PREREQ`、`FREEZE` 三类结论;本次只更新 Issue CSV、既有事实源和 QA 脚本过滤参数,未改业务代码、API/schema、feature flag 或前端功能,未部署,公网运行状态不变。
- 2026-05-16 QAOPS9 已完成隔离核心业务流稳定化、恢复演练 dry-run checklist、公网 live smoke、真实 OCR 和公网移动矩阵复核;`pending OCR` 因本地未注入 `DATABASE_URL` 继续按规则记非阻断 `SKIP`。P2D 已完成分流:`P2-ORG` 只读巡检可进入独立合同,其余 P2 候选先保持前置条件等待。
- 2026-05-16 P2D 旧口径已修正:live smoke 凭据、员工 OCR 凭据和授权 PDF 样票已具备,不再作为 P2-FIN/P2-OCR 的 HOLD 原因。P2-ORG 已完成只读巡检:当前连接数据源 high=0、medium=0、low=9,建议 `NO_WRITE_FIX_NEEDED`;低风险项为 CEO/root 无直属主管观察 1 和 active 员工无企业微信绑定 8。
- 2026-05-16 P2-FIN-DECISION 已完成付款批次启用决策准备:只读核对代码/flag/空态、角色账号、导出字段、审计事件、公网 readiness 和 flag off 回滚口径,结论为 `GO_TO_IMPLEMENT`,后续可另建 `P2-FIN-V1`;当前仍不启用 `payment_batch_v1`、不写付款批次业务数据、不部署。
- 2026-05-16 P2-FIN-V1 已完成付款批次启用前本地/隔离硬化:后端 focused 回归、前端 typecheck/build、隔离付款批次闭环、权限直连审计、公网 readiness 和只读 review 均通过;本轮只修补 E2E 对当前状态胶囊和二次确认 UI 的断言,不改业务 API/schema/UI,不部署,公网 `payment_batch_v1` 继续关闭。
- 2026-05-16 P2-OCR-SAMPLE 已完成图片 OCR 样票治理和实现前置确认;P2AF 纠偏后当前默认结论为 `FREEZE_BY_DEFAULT`:正式能力只维护 PDF-only OCR,图片继续作为普通附件,不开放图片 OCR。
- 2026-05-16 P2Q 已完成 P2OCRS 后续任务队列规划;P2AF 后图片 OCR 不再作为默认主线等待样票,后续默认按 UX8 真实反馈池、P2-FIN-LIVE 公网启用窗口、P2-WF、P2-BIZ 和持续上线门禁拆独立合同推进。
- 2026-05-16 P2AUTO 已完成自动化优先回归:后端 focused、前端 typecheck/build、高风险确认、隔离核心业务流、隔离付款批次闭环、公网 readiness/PDF live OCR、公网移动矩阵和企业微信 UA/渲染自动化均通过;PDF 样票和 live smoke 凭据可用,P2AF 后 provider-only 默认结论为 `FREEZE_BY_DEFAULT`,不开放图片 OCR,不启用公网 `payment_batch_v1`,未部署。
- 2026-05-16 P2AF 已完成可自动实施收口:图片 OCR 默认 `FREEZE_BY_DEFAULT`,PDF-only OCR 继续维护;新增 QA-only 回归聚合和付款批次公网关闭态只读门禁,公网 `payment_batch_v1` 继续 `flag_force_off`,本轮不做业务实现、不部署。
- 2026-05-16 P2-FIN-LIVE-DECISION 已完成公网付款批次启用窗口决策:live smoke/PDF OCR readiness 通过,付款批次公网关闭态只读门禁通过;初始结论为 `HOLD_FOR_WINDOW`,随后用户批准立即短窗口、现有 live smoke 测试账号和新建测试报销,进入 `P2-FIN-LIVE`。
- 2026-05-17 P2-FIN-LIVE 已按用户批准完成公网付款批次短窗口受控测试:使用现有 live smoke 测试账号新建专用测试报销,临时打开 `payment_batch_v1`,完成付款批次创建、复核、执行、AP 导出和审计核验后强制回到 `flag_force_off`;未部署,不接真实支付,不写 ERP 实时凭证,不开放图片 OCR。
- 2026-05-17 PRELAUNCH 已按“系统尚未正式使用”的新前提完成正式启用前公网预回归:公网 `/ready`、public bundle、live smoke、PDF live OCR、远端 Caddy/compose/migration 只读基线、隔离核心业务流、付款批次公网 PRELAUNCH 窗口、公网移动矩阵和企业微信 UA/渲染矩阵均形成证据;公网测试数据均带 `PRELAUNCH` marker。最终 `payment_batch_v1=flag_force_off`,未部署、不接真实支付、不写 ERP 实时凭证、不开放图片 OCR。浏览器全链路 `all` 中报销 PDF 因样票重复记可解释 `SKIP`,采购分流程功能报告通过但手工 live spec 存在长等待/退出码稳定性缺口,后续作为 QA 自动化维护项。
- 2026-05-17 CASHIER-VOUCHER-V1 已按“无 ERP/独立财务系统、只有代账”的新业务前提完成正式启用前财务闭环补强:新增付款批次银行回单附件、复核后补凭证、银行渠道执行前回单阻断和 PC 付款批次详情操作区;业务口径为 `wangzhiling` 出纳执行、`wangshunli` 管理员复核,后续正式流程是 OA 内审批/台账/付款批次 + 银行对公付款回单 + 月度代账交接。CASHV 代码已由 `LAUNCH-DEPLOY-FINANCE` 部署到公网,不接真实支付、不写 ERP、不开放图片 OCR、不导入银行流水;下一步需另建或延续 `FIN-PROD-ENABLE` 和 `ACCOUNTING-HANDOFF-V1` 合同。
- 2026-05-17 LAUNCH-DEPLOY-FINANCE 已按用户要求完成“本地全流程/页面门禁 -> 部署 -> 公网复检”:本地基础代码门禁、业务流、PC/移动/企业微信页面矩阵均通过;部署 commit `ab5ab4d` 到 `https://oa.hyinda.com`,`SYNC_ENV=0` 未覆盖远端 env,新增回单附件 migration 已应用;公网 readiness、PDF live OCR、移动/企业微信矩阵和 CASHV 短窗口均通过。CASHV 公网测试报销 `BX-20260517-0025` 完成无回单执行阻断、上传/下载回单、付款执行、AP 导出和审计核验;最终 `payment_batch_v1=flag_force_off`,正式常开仍需 `FIN-PROD-ENABLE`。
- 2026-05-17 FIN-PROD-ENABLE 已完成公网付款批次正式常开:未重新部署业务代码;新增 QA-only 正式启用 runner 后,公网测试报销 `BX-20260517-0026` 完成审批、付款批次创建/复核、无回单执行阻断、回单上传/下载、付款执行、报销 `paid`、票据 `archived`、AP 台账 `paid`、AP 导出和审计核验;公网移动矩阵 6 passed、企业微信渲染矩阵 8 passed。最终 `payment_batch_v1=force_on`,`erp_sync=force_off`;不接真实支付、不接 ERP、不开放图片 OCR、不导入银行流水。
- 2026-05-17 ACCOUNTING-HANDOFF-V1 已固化月度代账交接 SOP:OA 侧导出 AP 台账、报销、票据中心、付款批次/回单附件清单和审计日志;银行流水和银行回单原件由 `wangzhiling` 从银行渠道导出,交给代账人工核对。公网只读/导出核对显示付款批次清单、回单附件列表/下载、AP 导出、报销导出、票据导出和审计日志导出均返回 200;不开发银行流水导入或一键 zip 包。
- 2026-05-17 SYSTEM-COMPLETE-GATE 已完成系统开发完成门禁:公网 `/ready`、public bundle、live smoke `3 passed`、PDF live OCR `1 passed`,只读 flag 核验显示 `payment_batch_v1=force_on`、`erp_sync=force_off`;公网移动/企业微信 UA 矩阵 `14 passed`;结论 `GO_TO_USE`。当前首批正式能力为员工报销、PDF OCR、审批、请假、采购、通知、移动/企业微信入口、财务台账、付款批次、银行回单附件和代账交接。
- 2026-05-17 LAUNCH-OPS-V1 已固定首周正式使用运营口径:`wangshunli` 为上线拍板、管理员复核和回滚决策人,`wangzhiling` 为出纳/付款执行和代账资料准备人;首周问题登记、每日巡检、暂停条件、代账交接节奏和 UX8/可选功能冻结口径已回写现有手册。后续新增功能只按真实反馈和业务频次另建 Issue CSV。
- 2026-05-17 REQ-COMPLETE-AUDIT 已完成需求完成度复核和考勤边界校正:首批正式能力保持 `GO_TO_USE` 结论不变;企业微信打卡作为原始采集和风控底座,OA 不重造定位、人脸、Wi-Fi、排班、设备和防作弊。
- 2026-05-17 ATTV1 已完成考勤统一入口实现并部署到公网:历史 OA 自建打卡 `attendance_v1` 关闭;OA 新增企微打卡摘要同步、补卡/外出/加班修正审批和月度考勤解释;所有审批继续统一在 OA,企业微信只负责打卡原始采集和风控。公网复检显示旧打卡 API 返回 409、统一考勤月度汇总和修正列表可读、移动/企业微信矩阵 14 passed;企微 live 同步依赖已授权调用打卡 API 的自建应用 Secret 和企微权限,`WECOM_CHECKIN_SECRET` 可显式覆盖,未配置时复用已授权工作台应用的 `WECOM_AGENT_SECRET`,缺配置时记 `SKIP`。
- 2026-05-17 LAUNCH-AUTO-OPS-V1 已完成正式启用后自动化收口脚本和证据刷新:本地 Prisma/node check/focused 单测、前端 typecheck/build、公网 readiness、PDF live OCR、统一考勤 live 检查、公网移动矩阵和企业微信 UA/渲染矩阵均通过;显式企微打卡同步检查返回 `SKIP wecom_checkin_sync_disabled`;但只读 flag 检查发现当前公网 `payment_batch_v1=force_off`,与 FIN-PROD-ENABLE 记录的正式常开口径不一致,结论为 `PAUSE_FOR_FIX`。runner 已跳过付款批次写入,未切换 flag、未部署、不接真实支付、不接 ERP。
- 2026-05-17 AUTO-REMAINING-CLOSEOUT 已完成剩余无需人工操作收口:受控恢复公网 `payment_batch_v1=force_on`,保持 `erp_sync=force_off`;复跑 `run-launch-auto-ops.sh` 通过,公网测试报销 `BX-20260517-0027` 完成审批、付款批次创建/复核、回单上传/下载、付款执行、AP 导出和审计核验;公网移动矩阵 6 passed、企业微信渲染矩阵 8 passed。显式企微打卡同步仍为 `SKIP wecom_checkin_sync_disabled`,属于外部后台配置缺口,不阻断 OA 统一考勤入口和正式运营门禁;结论 `GO_TO_OPERATE`。
- 2026-05-17 HR-WECOM-DIRECTORY-V1 已完成并部署公网:产品口径已调整为 ERP 未来不接入 OA;人事生命周期和考勤同属 HR 大域但分模块实现。OA 继续作为员工、权限、审批和审计主事实源;企业微信作为通讯录、入口、通知和打卡采集基础设施。HRWD 新增企业微信通讯录同步 flag、配置、同步记录、入职创建/资料更新/离职禁用钩子和员工管理重试入口。本地后端/前端/Playwright 通过,部署后公网 readiness、PDF live OCR、HRWD 端点 SKIP 检查和公网移动/企微矩阵通过;部署过程中发现 `seed-config` 会覆盖正式 feature flag,已修正为只创建缺失开关并复部署验证,最终 `payment_batch_v1=force_on`、`erp_sync=force_off`。
- 2026-05-17 HRWD-CONTACT-LIVE-TEST 已完成公网企业微信通讯录真实写入闭环:使用 `HRWDTEST-20260517214548` 测试员工,验证 OA 创建员工后由 onboarding 触发企微 create、资料更新触发企微 update、离职 checklist 完成后禁用 OA 账号并触发企微 disable;三次企微同步均为 `wecom_contact_synced` 且 `errcode=0`。普通员工查看/重试他人同步状态被拒绝,审计日志包含 `WECOM_DIRECTORY_CREATE/UPDATE/DISABLE`;测试成员按约定保留离职/禁用状态,不删除。
- 2026-05-17 WCFB 已完成企微打卡同步 Secret 兼容修正并随 WRV1 部署到公网:用户确认「工作台」就是 OA 企业微信入口应用,且该应用已在企业微信打卡 API「可调用接口的应用」中授权。OA 后端调整为 `WECOM_CHECKIN_SECRET` 显式优先,未配置时复用已授权工作台应用的 `WECOM_AGENT_SECRET`,避免重复维护同一个 Secret;本地语法检查、focused 单测、文档和项目 skill 校验通过。WRA1 已确认此前 WRV1 阻断是 QA-only 门禁误判,正式同步仍由 `WECOM_CHECKIN_SYNC_ENABLED` 控制。
- 2026-05-18 WFOC 已完成“企微优先 + OA 无痛接管”需求重构:用户确认能用企业微信成熟能力就优先使用企业微信,第一批聚焦 HR/考勤员工日常审批;OA 目标调整为镜像、人工接管、恢复回写、RuleOps、财务闭环和审计中台。员工主数据后续以企微/人事助手为主,OA 同步镜像;企微故障时由管理员人工开启 OA 应急模式;企微恢复后 OA 对应急数据 dry-run 并自动回写。本轮只更新需求事实源、手册、索引和 Issue CSV,不改业务代码、不部署、不改公网配置;后续实现需另拆 `wecom_hr_master_sync_v1`、`wecom_native_approval_mirror_v1`、`oa_hr_emergency_mode_v1`、`wecom_recovery_writeback_v1`、`wecom_ruleops_v1`。DBWFOC 后该口径进一步收窄为按域镜像和 OA 主办数据边界。
- 2026-05-18 DBWFOC 已完成“企微能力参考 + OA 主办数据边界”修正:HR/考勤员工日常审批优先复用企业微信;采购、费用、合同、项目、报销、付款、AP、代账交接、审计和高敏附件继续 OA 主办。企业微信成熟功能可作为流程、字段、交互和规则参考,但不默认托管 OA 主办业务数据;企业微信消息只承载脱敏标题、业务类型、编号、状态和 OA deeplink。采购单附件、合同正文、报价、供应商资料、发票、银行回单和代账资料不进入企业微信原生审批或企业微信附件。本轮只更新需求事实源、手册、索引、项目 skill 和 Issue CSV,不改业务代码、不部署、不改公网配置。
- 2026-05-18 WFDG 已完成“企微优先 + OA 主办数据边界”的设计规约门禁:后续开发前必须先判定业务域主办方、主事实源、操作端、镜像方向、附件归属和审计责任;PC/移动页面需区分 `OA 主办`、`企微镜像` 和 `OA 应急接管`;企微同步必须具备幂等、重试、脱敏日志、审计记录和 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。下一轮先做 `WECOM-CAPABILITY-POC-V1`,输出 `CAN_REUSE_NOW`、`NEEDS_CONFIG`、`NEEDS_API_POC`、`KEEP_OA_PRIMARY`、`NOT_SUPPORTED_BY_API` 能力矩阵;本轮不改业务代码、不部署、不调用生产写接口。
- 2026-05-18 WDRG 已完成“企微优先后续开发路线图”门禁:新增 `docs/企微优先开发路线图.md`,固定“路线图门禁 + 单功能 Issue CSV”的工程节奏。后续顺序为 `WECOM-CAPABILITY-POC-V1` -> `wecom_hr_master_sync_v1` -> `wecom_attendance_approval_mirror_v1` -> `oa_hr_emergency_mode_v1` -> `wecom_recovery_writeback_v1` -> `wecom_ruleops_v1`;阶段未退出前禁止跳阶段。本轮只更新路线图、交付规约、事实源、手册、项目 skill 和 Issue CSV,不改业务代码、不部署、不调用公网写接口。
- 2026-05-18 WCP1 已完成企业微信能力 POC:新增 QA-only 只读 runner `scripts/qa/check-wecom-capability-poc.mjs`,本地不开启 live read 时可解释为 `PAUSE_FOR_API_POC`,本地开启 live read 但无真实 env 时可解释为 `PAUSE_FOR_CONFIG`;部署服务器容器内 live 只读探测报告为远端 `/tmp/wecom-capability-poc-wcp1/summary.json`,历史结论为 `PAUSE_FOR_CONFIG`。该报告继续作为初始配置缺口证据保留,当前 HR 主数据镜像准入以 WCPC 复跑结论为准。
- 2026-05-18 WCPC 已完成 WCP1 配置收口复跑:先完成未补配置前远端基线复跑,报告目录 `/tmp/wecom-capability-poc-wcpc-baseline`,结论为 `PAUSE_FOR_CONFIG`;随后按用户要求自动查找并使用既有在职低风险测试号 `SMOKE002/测试员工`(报告只记录 `oa_smoke***`)复跑,只读报告 `/tmp/wecom-capability-poc-wcpc-smoke002/summary.json` 返回 `PASS / GO_TO_HR_MASTER_SYNC`,`nextStageAllowed=true`,`blockingCapabilities=[]`,状态计数为 `CAN_REUSE_NOW=15`、`NEEDS_CONFIG=3`、`NEEDS_API_POC=1`、`KEEP_OA_PRIMARY=1`。本轮不部署、不改业务代码、不持久写服务器 `.env`;下一步允许规划 `wecom_hr_master_sync_v1`,审批模板/实例、回调配置和 HR 写接口仍留后续合同。
- 2026-05-18 WHMS 已完成企微 HR 主数据镜像本地实现、部署和受控公网验证:新增 `wecom_hr_master_sync_v1` 默认 `force_off`,实现企业微信通讯录/人事助手读取、dry-run/apply、同步批次/逐员工记录、管理员 API、People 管理卡片和 QA-only runner。WHMSLIVE 部署到 `https://oa.hyinda.com` 并应用 migration `20260518184319_wecom_hr_master_sync_v1`;公网临时 `force_on` 后对 `SMOKE002/测试员工`(脱敏 `oa_smoke***`)执行 dry-run 和显式 userids apply,企微读取链路通过,因企微侧缺手机号、邮箱和部门按 `missing_required_field` 跳过,未写 OA 主数据;普通员工访问同步 API 返回 403;最终 `wecom_hr_master_sync_v1=force_off`。未执行生产真实员工批量 apply,不代表考勤/审批镜像、应急接管、恢复回写或 RuleOps 已完成。
- 2026-05-18 WOUA 已完成 OA active 员工 vs 企业微信通讯录 + 人事助手的只读对账 runner、本地门禁、受控部署和公网执行。初始公网报告因旧读取路径返回 `SKIP / BLOCKED_BY_EXTERNAL_CONFIG`;WAPI 固化 Secret 矩阵和 `user/list_id` + 人事助手读取后复跑成功,远端脱敏报告 `/app/artifacts/qa-flow/wecom-oa-user-consistency-20260518T142544Z/summary.json` 结论为 `PASS_WITH_FINDINGS`。当前只读计数:`oaEmployees=13`、`oaActiveEmployees=12`、`oaActiveWithBinding=5`、`wecomProfiles=5`、`matchedActive=5`、`oaActiveMissingInWecom=7`、`inactiveWithBinding=1`、`missingRequiredFields=5`。本轮未修改 OA 或企微用户,未执行真实员工批量 apply,不能据此判定“OA 和企微用户已一致”;下一步应按差异决定 WOUA-FIX 或 WHMS 批量同步窗口。
- 2026-05-18 WOUA-FIX 已按用户确认执行受控写入:7 个 OA active 缺企微账号均确认为测试/Smoke 数据并软归档,`oaActiveMissingInWecom` 复检为 0;`T0000` seed 逻辑已修正为存在真实 active admin 时不再复活已归档 fallback 管理员;`SMOKE201` 归档后遗留的 `SMOKE101` 主管和 2 个测试请假待办已转交 `HYD000007`。复检报告 `/app/artifacts/qa-flow/wecom-oa-user-consistency-20260518T161716Z/summary.json`:OA active 5、企微 active 5、匹配 5、OA active 缺企微 0;剩余 `missingRequiredFields=5` 按用户决策先接受不补,`HRWDTEST-20260517214548` 归档绑定保留为审计项。本轮不写企微资料,不执行真实员工 WHMS 批量 apply,不代表考勤/审批镜像可直接开工。
- 2026-05-19 WRV1 新增企业微信运行优先 QA-only 门禁:`server/src/scripts/check-wecom-runtime-ready.js` / `npm run check:wecom-runtime-ready`。该门禁检查工作台入口、OAuth/绑定概况、脱敏消息 dry-run、OA deeplink、通讯录 `user/list_id`、人事助手 `get_staff_info`、打卡短窗口读取,并把审批模板、测试 `sp_no` 和真实回调配置缺口记录为 `NEEDS_CONFIG`。已以 `SYNC_ENV=0` 部署并远端执行 live 只读报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T173402Z/summary.json`,结论为 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`:入口/OAuth、Secret 矩阵、OA active 绑定、通讯录和人事助手读取、消息 dry-run 均通过,打卡读取因 `WECOM_CHECKIN_SYNC_ENABLED=true` 未启用而阻断。默认不发送真实消息,不补企微资料,不写 OA/企微用户数据,不进入深度镜像。
- 2026-05-19 WRA1 修正 WRV1 运行验收门禁并完成公网复跑:`WECOM_CHECKIN_SYNC_ENABLED` 保留为正式考勤同步批次开关,但 QA-only 打卡短窗口读取显式使用 `requireSyncEnabled=false` 做只读探测,不再把同步开关未启用误判为运行主链路阻断。远端报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T180506Z/summary.json` 结论为 `PASS_WITH_CONFIG_GAPS`:入口/OAuth、Secret 矩阵、OA active 绑定、通讯录、人事助手、消息 dry-run 和打卡只读链路均通过,打卡读取记录 `readable_sync_disabled`;审批模板、测试 `sp_no` 和真实回调继续为 `NEEDS_CONFIG`。未发送真实消息,未写 OA/企微用户资料。
- 2026-05-19 WMSG1 完成企微应用消息实发与 Deeplink 真机验证:使用现有 `check:wecom-runtime-ready` runner,在远端容器内仅对单次命令设置 `WECOM_RUNTIME_TEST_SEND=1`,向管理员本人对应 OA 员工号 `HYD000006` 发送一条脱敏运行就绪消息。第一次按 `wangshunli` 参数执行未命中 OA `employee_no`,`recipientCount=0` 且未实际发出;随后按 `HYD000006` 重跑成功,报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T234431Z/summary.json` 显示 `checks.message.status=OK`、`code=wecom_app_sent`、`errcode=0`、`recipientCount=1`、收件企微前缀 `WangShun***`。用户确认企业微信可收到“OA 运行就绪检查”,点击“打开 OA”后可进入 OA 通知页面,结论 `PASS_MESSAGE_DELIVERY_CONFIRMED`。本轮不补企微资料、不配置审批模板/`sp_no`/真实回调、不进入深度镜像。
- 2026-05-19 WAPC1 完成企微审批配置准备清单回写:WMSG1 只证明消息和 Deeplink 可用,不放行 `wecom_attendance_approval_mirror_v1`。本轮固化首批模板为请假、补卡、外出、加班;每个模板需准备模板 ID、适用范围、字段项、审批人规则、可见范围和所属自建应用权限;低风险测试 `sp_no` 不得包含采购、合同、报销、发票、银行回单或高敏附件;真实回调 Token/EncodingAESKey 只允许保存在部署环境,不写入文档或 Issue。后续 POC 需验证模板详情、审批详情、回调验签/解密/幂等、重试语义和补偿拉取。本轮不改业务代码、不部署、不接真实回调、不调用企微写接口。
- 2026-05-19 WAPC2 新增企微审批模板与低风险 `sp_no` 只读 POC:新增 `server/src/scripts/check-wecom-approval-poc.js` / `npm run check:wecom-approval-poc` 和只读集成服务,范围先锁定请假、补卡;固定 `WECOM_AGENT_SECRET` 调用 `POST /cgi-bin/oa/gettemplatedetail` 与 `POST /cgi-bin/oa/getapprovaldetail`,报告只输出脱敏模板 ID/`sp_no` 前缀、字段类型计数、审批节点计数和错误分类。本地 focused vitest 已覆盖 Secret 固定选择、无 fallback、缺配置、API 错误分类和脱敏输出。已以 `SYNC_ENV=0` 部署并远端执行 live 只读 POC,报告 `/app/artifacts/qa-flow/wecom-approval-poc-20260519T020429Z/summary.json` 结论为 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`:远端 `WECOM_AGENT_SECRET` 可用,但缺请假/补卡模板 ID 和两条低风险 `sp_no`;未伪造成 PASS。本轮不接真实回调、不调用企微写接口、不写 OA/企微数据、不进入深度镜像。
- 2026-05-19 WAPC2F 新增企微审批 POC 样件自动生成 dry-run:新增 `server/src/scripts/check-wecom-approval-fixtures.js` / `npm run check:wecom-approval-fixtures`,固定 `WECOM_AGENT_SECRET` 构建 OA-POC 请假/补卡最小通用模板候选和低风险审批申请候选;默认 dry-run 不获取写入 token、不调用企微写接口、不创建模板、不提交审批单。已以 `SYNC_ENV=0` 部署并远端执行 dry-run,报告 `/app/artifacts/qa-flow/wecom-approval-fixtures-20260519T045001Z/summary.json` 结论为 `PASS_FIXTURE_DRY_RUN_READY`:`SMOKE002 -> SMOKE101` 均 active、已绑定企微、非自审,payload 脱敏输出通过。live 创建 OA-POC 测试模板和测试审批单仍未批准、未执行;WAPC2 自动复跑需等 live 生成真实模板 ID 和 `sp_no` 后再执行。
- 2026-05-19 WAPC2FLIVE 完成企微审批 OA-POC 样件 live 创建和 WAPC2 自动复跑:用户批准一次 live 创建并选择保留审计后,先以 `SYNC_ENV=0` 部署修正后的 runner,再远端 dry-run 复核 `/app/artifacts/qa-flow/wecom-approval-fixtures-20260519T053335Z/summary.json` 为 `PASS_FIXTURE_DRY_RUN_READY`。首次 live 写入 API 因旧 `create_template` payload 返回 `301086 zh_CN text empty`,未创建任何模板或审批单;随后将 payload 修正为官方 `template_name` + `property` controls 结构并复跑有效 live,报告 `/app/artifacts/qa-flow/wecom-approval-fixtures-20260519T053400Z/summary.json` 为 `PASS_FIXTURE_CREATED`,请假/补卡 OA-POC 测试模板和低风险测试审批单均创建成功,`checks.autoRerun.status=OK` 且结论 `PASS_APPROVAL_POC`。报告只记录脱敏 template_id / `sp_no` 前缀;测试模板和测试审批记录保留审计,不自动删除。本轮不配置真实回调、不做补偿拉取、不建镜像表、不进入 `wecom_attendance_approval_mirror_v1`。
- 2026-05-19 WCBK1 实现并完成企微审批回调只读 POC:新增只读 `GET/POST /api/wecom/approval/callback`、企微回调验签/AES 解密/事件归一化服务、`npm run check:wecom-approval-callback-poc` 和 `wecom-callback` process gate。已以 `SYNC_ENV=0` 部署并复检 `/ready`;初始远端报告 `/app/artifacts/qa-flow/wecom-approval-callback-poc-20260519T065414Z/summary.json` 为 `PARTIAL_CALLBACK_NEEDS_CONFIG`,synthetic 回调验签、解密和审批事件解析通过。配置真实回调后,远端报告 `/app/artifacts/qa-flow/wecom-approval-callback-poc-20260519T083422Z/summary.json` 达到 `PASS_CALLBACK_URL_VERIFIED`;用户随后由 `SMOKE101` 同意一条现有 OA-POC 补卡测试审批单,复跑报告 `/app/artifacts/qa-flow/wecom-approval-callback-poc-20260519T092648Z/summary.json` 达到 `PASS_CALLBACK_EVENT_CONFIRMED`,脱敏证据记录 1 条已通过审批状态事件。本轮不建镜像表、不写 OA 业务数据、不写企微数据、不创建新模板或审批单。
- 2026-05-19 WEGOV1 完成企微主办治理与 OA 自建留存路线修正:本轮只更新 Issue CSV 和事实源,不改业务代码、不部署、不写 OA/企微数据。结论固定为“企微成熟功能优先上线,OA 做自建数据留存、审计、入口、消息和应急兜底”;HR/考勤日常流程优先企微主办,报销、采购、合同、项目、付款、发票、银行回单、高敏附件和经营审计继续 OA 主办。后续顺序调整为 `WACP3 -> WREAD1 -> WADM1 -> WARCH1 -> wecom_attendance_approval_mirror_v1`,其中 WARCH1 先保证企微不可用时可查看已保存历史,再进入完整镜像增强。
- 2026-05-19 WACP3/WACP3R 完成企微审批补偿拉取只读 POC:新增 `server/src/scripts/check-wecom-approval-compensation-poc.js` / `npm run check:wecom-approval-compensation-poc`,固定 `WECOM_AGENT_SECRET` 调用 `POST /cgi-bin/oa/getapprovalinfo`,按时间窗口和模板过滤拉审批单号,再复用 `getapprovaldetail` 拉详情并与 WCBK1 回调证据脱敏比对。初始公网报告因缺模板 ID 为 `PARTIAL_COMPENSATION_NEEDS_CONFIG`;WACP3R 改为按 `SMOKE002` creator 自动发现 OA-POC 请假/补卡模板并复跑,公网报告 `/app/artifacts/qa-flow/wecom-approval-compensation-poc-20260519T115944Z/summary.json` 为 `PASS_WITH_FINDINGS`:请假/补卡各拉到 1 条详情,当时 finding 为回调证据文件未持久化,已由后续 WARCH1 DB 回调事件承接。本轮未写 OA/企微数据,未保存完整模板 ID。
- 2026-05-19 WREAD1 新增企微审批可读性与误审批防护门禁:新增 `server/src/scripts/check-wecom-approval-readability-gate.js` / `npm run check:wecom-approval-readability-gate`,只读汇总 OA-POC 请假/补卡证据并输出真机确认清单。本轮以 `SYNC_ENV=0` 部署,不同步本地 env;部署后先只读复跑 WACP3R 自动发现模板并生成 `/app/artifacts/qa-flow/wecom-approval-compensation-poc-20260519T125515Z/summary.json`,再执行 WREAD1,报告 `/app/artifacts/qa-flow/wecom-approval-readability-gate-20260519T125532Z/summary.json` 为 `PAUSED_MANUAL_CONFIRMATION`。本轮未新建企微模板或审批单,未写 OA/企微数据;下一步需要审批人真机分别确认请假/补卡消息卡片、列表、详情页和快捷同意/驳回误点风险。
- 2026-05-19 WREAD1F 按用户选择重新生成新样例:复用 `check:wecom-approval-fixtures` 远端 dry-run,`SMOKE002 -> SMOKE101` 预检通过。第一次 live 因企微模板名按日期重复返回 `301086`,未创建模板或审批单;随后将 OA-POC 模板名修正为带时间戳的唯一名称,focused vitest 17 tests 通过并以 `SYNC_ENV=0` 重新部署。第二次 live 报告 `/app/artifacts/qa-flow/wecom-approval-fixtures-20260519T131958Z/summary.json` 为 `PASS_FIXTURE_CREATED`,已创建新的请假/补卡 OA-POC 测试模板和两条低风险测试审批单,自动复跑 WAPC2 为 `PASS_APPROVAL_POC`。随后只读复跑 WACP3R `/app/artifacts/qa-flow/wecom-approval-compensation-poc-20260519T132031Z/summary.json` 为 `PASS_WITH_FINDINGS`,并生成 WREAD1 报告 `/app/artifacts/qa-flow/wecom-approval-readability-gate-20260519T132054Z/summary.json`,结论仍为 `PAUSED_MANUAL_CONFIRMATION`,等待审批人真机确认。
- 2026-05-19 WREAD1 人工真机确认收口:用户确认请假和补卡在企业微信消息卡片、列表、详情页均可以看清;驳回有二次确认,但同意按钮单击即通过;当前暂无额外字段补充建议。已用 `check:wecom-approval-readability-gate` 录入人工结果,远端报告 `/app/artifacts/qa-flow/wecom-approval-readability-gate-20260519T133628Z/summary.json` 为 `PASS_READABLE`,下一阶段允许进入 `WADM1 自建留存/镜像数据模型设计`。同意单击风险需在后续提示、审计留存或操作规程中处理;本轮未写 OA/企微业务数据,未创建新样例。
- 2026-05-19 WADM1 完成企微自建留存/镜像数据模型设计:本轮只更新 Issue CSV 和事实源,不改 Prisma schema、不写业务代码、不部署、不写 OA/企微业务数据。设计固定 `WecomApprovalArchive`、参与人/动作/字段摘要、附件摘要、回调事件、补偿拉取 run/item、对账 finding、打卡/人事快照复用边界、隐私保留、权限和迁移回滚策略。WACP3R “回调证据文件未持久化”的 finding 进入 WARCH1 入库实现;同意单击即通过进入 WARCH1 历史留存、审批轨迹和操作规程提示。该阶段已由下一条 WARCH1 承接,仍不能直接进入完整审批镜像、应急接管、恢复回写或 RuleOps。
- 2026-05-19 WARCH1 实现企微审批最小自建历史留存:新增审批留存 Prisma 表、回调事件表、补偿 run/item/finding、`wecomApprovalArchive` 规范化服务、回调 DB 入库默认路径、补偿拉取 `--persist-to-db` + `WECOM_ARCHIVE_WRITE=1` 双开关和 `npm run check:wecom-approval-archive` 离线读取 runner。已以 `SYNC_ENV=0` 部署并应用 migration;远端补偿持久化报告 `/app/artifacts/qa-flow/wecom-approval-compensation-poc-20260519T160306Z/summary.json` 为 `PASS_WITH_FINDINGS`,`archivePersistence.status=OK`、`storedCount=2`;离线读取报告 `/app/artifacts/qa-flow/wecom-approval-archive-20260519T160330Z/summary.json` 为 `PASS_WITH_FINDINGS`,可读请假/补卡 2 条已通过历史。finding 是 WARCH1 前旧回调未持久化到 DB 的历史 gap,已作为对账 finding 留存,不是当前写入链路阻断。范围仅请假/补卡;不写企微数据、不创建模板或审批单、不新增正式管理页、不进入完整镜像、应急接管、恢复回写或 RuleOps。报告和日志只输出脱敏 `sp_no`、template、userid 前缀,DB 内保存完整外部键用于审计和补偿。
- 2026-05-20 WARCH2 实现并部署企微审批历史正式只读查询:新增 `/api/wecom/approval-archive` 列表和详情 API、PC/移动共用历史页、备用模块入口和移动考勤卡片入口。查询只读 OA DB,不调用企微 API、不读取企微 Secret;普通员工看本人相关,主管看直属下属和本人相关,HR/admin/* 看全量;`leave.view_all` / `attendance.view_all` 不单独代表全量企微归档权限;申请人未映射、callback-only 或外部-only 记录仅 HR/admin/* 可见。页面固定“企业微信主办,OA 自建留存”“仅已归档记录”,不展示审批按钮或 pending 待办语义。已以 `SYNC_ENV=0` 部署,公网 `/ready` 正常,新 API 未登录返回 401;远端离线归档报告 `/app/artifacts/qa-flow/wecom-approval-archive-20260520T013610Z/summary.json` 为 `PASS_WITH_FINDINGS`,可读 2 条请假/补卡历史,finding 仍为 WARCH1 前旧回调未入库历史 gap。
- 2026-05-20 WROAD2+OPS 建立受控上线与每日巡检合同:当前不直接进入完整镜像,改为测试账号 `SMOKE002 -> SMOKE101` 3 天受控试用,管理员观察和告警员工号使用 `HYD000006`(`wangshunli` 的员工号),每日触发 `scripts/qa/run-wroad2-ops-daily.sh` 或 WARCH3 timer。脚本复用公网 `/ready`、live smoke、feature flag、企微 runtime、审批补偿和 OA 归档离线读取;默认只读,唯一允许写入是补偿归档以进程级 `WECOM_ARCHIVE_WRITE=1` 写 OA 自建留存库,不写企业微信、不创建模板或审批单。Day 0 公网巡检报告 `/app/artifacts/qa-flow/wroad2-ops-20260520-041941/summary.json` 为 `PASS_WITH_FINDINGS`,finding 按 observation 管理。
## 关键证据索引
| 批次 | 当前状态 | 证据入口 |
| --- | --- | --- |
| R6 | 已通过 | `issues/2026-05-11_10-23-41-r6-small-trialrun-prep.csv` |
| PS6 | 采购提交阻断已修复 | `issues/2026-05-12_01-12-20-r6-purchase-submit-budget-precheck-hotfix.csv` |
| PC6 | PC 工作台与审批信息架构已完成 | `issues/2026-05-12_01-40-00-r6-pc-workbench-ia-polish.csv` |
| PA6 | 权限与审计回归已完成 | `issues/2026-05-12_01-46-00-r6-permission-audit-regression.csv` |
| FL6 | 财务台账/导出增强已完成 | `issues/2026-05-12_01-43-00-r6-finance-ledger-export-v1.csv` |
| AP6 | 审批催办、超时提醒和效率摘要已完成 | `issues/2026-05-12_01-42-00-r6-approval-productivity-v1.csv` |
| RI6 | 报销票据体验已完成 | `issues/2026-05-12_01-44-00-r6-reimbursement-invoice-polish-v1.csv` |
| LP6 | 请假采购体验已完成 | `issues/2026-05-12_01-45-00-r6-leave-procurement-polish-v1.csv` |
| ME6 | 自动化、公网视觉和代表性企业微信真机门禁已完成 | `issues/2026-05-12_01-41-00-r6-mobile-experience-second-pass.csv` |
| QG6 | QA 治理已完成 | `issues/2026-05-12_01-47-00-r6-qa-governance-upgrade.csv` |
| MIA7 | 移动信息架构审查已完成 | `issues/2026-05-12_21-48-39-mobile-ia-visual-flow-review.csv` |
| MIF7 | 已收口;本地整改、返回语义、部署、公网匿名、真机门禁、带凭据 live smoke/OCR 均已通过 | `issues/2026-05-12_21-48-40-mobile-ia-flow-remediation.csv`、`issues/2026-05-13_00-38-05-mif7-follow-up-return-and-release.csv`、`issues/2026-05-13_11-37-02-mif7t-deploy-live-closeout.csv`、`artifacts/qa-flow/live-smoke-readiness-20260513-115455/summary.json` |
| MIF7T | 真机反馈移动体验统一整改已部署并完成公网复检 | `issues/2026-05-13_09-18-05-mif7-real-device-feedback-mobile-unification.csv`、`issues/2026-05-13_11-37-02-mif7t-deploy-live-closeout.csv` |
| ORG8 | 组织账号和权限主数据本地代表性验收已收口;不替代 R7E 真实人工试运行 | `issues/2026-05-13_18-23-51-org8-master-data-permission.csv` |
| R7E | 阶段验收和 P2 排序收口已完成;当前 P0/P1 阻断为 0 | `issues/2026-05-13_17-11-44-r7e-human-trialrun.csv` |
| QAOPS8 | Go/No-Go 与上线硬化阶段收口已完成;后续建议另起 QAOPS9 或等价连续合同 | `issues/2026-05-13_17-30-00-qaops8-test-release-ops.csv` |
| FBA | R7E 后全端功能边界审计已收口;只作为功能边界和 P2 候选证据 | `issues/2026-05-15_23-45-41-r7e-post-function-boundary-audit.csv`、`docs/trialrun/R7E后功能边界审计.md` |
| QAOPS9 | 已收口:隔离核心业务流、恢复演练 dry-run、公网 live smoke、真实 OCR 和公网移动矩阵均已形成证据;`pending OCR` 缺 `DATABASE_URL` 为非阻断 SKIP | `issues/2026-05-16_00-19-20-qaops9-release-hardening.csv`、`artifacts/qa-flow/business-flow-20260516-012215/summary.txt`、`artifacts/qa-flow/live-smoke-readiness-20260516-013727/summary.json` |
| P2D | 已完成决策分流:`P2-ORG` 只读巡检可进入独立合同;付款批次、图片 OCR、UX8、审批通知和轻业务增强均需前置条件;冻结项继续冻结 | `issues/2026-05-16_00-19-21-p2-decision-followup.csv` |
| P2-ORG | 已收口:组织账号主数据只读巡检完成,高/中风险为 0,低风险观察 9,不需要写修复合同 | `issues/2026-05-16_02-04-27-p2-org-readonly-master-data-audit.csv`、`artifacts/qa-flow/p2-org-readonly-audit-20260516-020427/report.json` |
| P2-FIN-DECISION | 已收口:付款批次决策准备完成,结论 `GO_TO_IMPLEMENT`;后续进入单独 `P2-FIN-V1` 合同前仍需方案批准 | `issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv` |
| P2-FIN-V1 | 已收口:付款批次启用前本地/隔离硬化完成;隔离付款批次闭环 1 passed、权限直连审计 8 passed、公网 readiness ready | `issues/2026-05-16_09-42-43-p2-fin-payment-batch-v1.csv`、`artifacts/qa-flow/business-flow-20260516-095719/summary.txt`、`artifacts/qa-flow/business-flow-20260516-095900/summary.txt` |
| P2-OCR-SAMPLE | 已收口:图片 OCR 样票治理前置完成;P2AF 后当前默认 `FREEZE_BY_DEFAULT`,PDF live OCR 基线继续有效 | `issues/2026-05-16_10-15-21-p2-ocr-image-sample-governance.csv` |
| P2Q | 已收口:P2OCRS 后续队列和启动门槛完成;图片 OCR 默认冻结,所有实现或公网启用均需另建独立合同 | `issues/2026-05-16_10-35-22-p2-post-p2ocrs-followup-queue.csv` |
| P2AUTO | 已收口:自动化优先回归和样票 provider 门禁完成;核心隔离业务流通过、付款批次隔离闭环 1 passed、公网 readiness/PDF live OCR 通过、公网移动矩阵 6 passed、企业微信渲染矩阵 8 passed;provider 默认结论改为 `FREEZE_BY_DEFAULT` | `issues/2026-05-16_20-09-49-p2-automated-regression-sweep.csv`、`artifacts/qa-flow/business-flow-20260516-203001/summary.txt`、`artifacts/qa-flow/business-flow-20260516-203856/summary.txt`、`artifacts/qa-flow/live-smoke-readiness-20260516-204157/` |
| P2AF | 已收口:可自动实施收口完成;安全回归聚合 PASS,付款批次公网关闭态只读门禁 PASS,UX8 自动矩阵通过且 UX8-1..5 保持真实反馈驱动 | `issues/2026-05-16_22-11-10-p2-automatable-followup.csv`、`artifacts/qa-flow/p2-safe-regression-20260516-222222/summary.json` |
| P2-FIN-LIVE-DECISION | 已收口:公网付款批次启用窗口决策完成,初始结论 `HOLD_FOR_WINDOW`;readiness 和 flag-off 证据通过,后续由用户批准进入 P2-FIN-LIVE 短窗口 | `issues/2026-05-16_22-49-05-p2-fin-payment-batch-live-decision.csv` |
| P2-FIN-LIVE | 已收口:公网短窗口受控测试 PASS;专用测试报销 `BX-20260517-0022` 付款闭环到 paid,票据 archived,AP 台账 paid,导出和审计核验通过;公网移动矩阵 6 passed,企业微信渲染矩阵 8 passed;最终 `payment_batch_v1=flag_force_off` | `issues/2026-05-16_23-42-08-p2-fin-payment-batch-live-enable.csv`、`artifacts/qa-flow/p2-fin-live-20260517-001022/summary.json`、`artifacts/qa-flow/p2-fin-live-20260517-001022/live-result.json` |
| PRELAUNCH | 已收口:正式启用前公网预回归完成;公网 readiness/PDF live OCR、远端只读基线、隔离核心业务流、PRELAUNCH 付款批次窗口、公网移动和企业微信渲染矩阵通过;最终 `payment_batch_v1=flag_force_off` | `issues/2026-05-17_00-46-49-prelaunch-production-readiness.csv`、`artifacts/qa-flow/p2-fin-live-20260517-014144/live-result.json`、`artifacts/qa-flow/p2-safe-regression-20260517-014436/summary.json`、`artifacts/prelaunch/browser-business/report.md`、`artifacts/prelaunch/browser-business-purchase-rerun/report.md` |
| CASHIER-VOUCHER-V1 | 已收口:正式启用前财务闭环与银行回单附件完成;后端 focused 回归 12 tests passed,前端 typecheck/build 通过,本地隔离 reimbursement 业务域 10 passed/1 skipped,governance 业务域 9 passed;已由 LDF 部署 | `issues/2026-05-17_09-04-37-cashier-payment-voucher-v1.csv`、`artifacts/qa-flow/business-flow-20260517-091904/summary.txt`、`artifacts/qa-flow/business-flow-20260517-092824/summary.txt` |
| LAUNCH-DEPLOY-FINANCE | 已收口:CASHV 部署和公网复检完成;本地全流程/页面门禁通过,公网 readiness/PDF live OCR、移动/企业微信矩阵和 CASHV 短窗口通过;最终 `payment_batch_v1=flag_force_off` | `issues/2026-05-17_09-38-55-launch-deploy-finance.csv`、`artifacts/qa-flow/business-flow-20260517-094407/summary.txt`、`artifacts/qa-flow/live-smoke-readiness-20260517-102904/summary.json`、`artifacts/qa-flow/p2-fin-live-20260517-103450/live-result.json` |
| FIN-PROD-ENABLE | 已收口:公网付款批次正式启用完成;测试报销 `BX-20260517-0026` 付款闭环到 paid,票据 archived,AP 台账 paid,导出和审计核验通过;公网移动矩阵 6 passed,企业微信渲染矩阵 8 passed;最终 `payment_batch_v1=force_on`、`erp_sync=force_off` | `issues/2026-05-17_11-40-47-fin-prod-enable-payment-batch.csv`、`artifacts/qa-flow/fin-prod-enable-20260517-114731/summary.json`、`artifacts/qa-flow/fin-prod-enable-20260517-114731/live-result.json` |
| ACCOUNTING-HANDOFF-V1 | 已收口:月度代账交接 SOP 固化;OA 侧 AP/报销/票据/付款批次/回单附件/审计资料清单可用,公网导出和回单下载状态核对 200;银行流水和回单原件由出纳线下导出给代账 | `issues/2026-05-17_11-40-48-accounting-handoff-v1.csv`、`docs/管理员手册.md` |
| SYSTEM-COMPLETE-GATE | 已收口:系统开发完成门禁通过,结论 `GO_TO_USE`;live smoke 3 passed、PDF live OCR 1 passed、public bundle findings=0、pending OCR 非阻断 SKIP、正式 flag 状态正确、公网移动/企微矩阵 14 passed | `issues/2026-05-17_12-55-49-system-complete-gate.csv`、`artifacts/qa-flow/live-smoke-readiness-20260517-125805/summary.json` |
| LAUNCH-OPS-V1 | 已收口:首周运营保障口径固定;支持人、问题登记、每日巡检、暂停条件、代账交接节奏和可选功能冻结口径已回写手册 | `issues/2026-05-17_12-55-50-launch-ops-v1.csv`、`docs/管理员手册.md`、`docs/员工快速上手.md`、`docs/试运行与自动化验证手册.md` |
| REQ-COMPLETE-AUDIT | 已收口:需求完成度复核和考勤边界校正完成;企微打卡与 OA 考勤解释边界已纠偏,补卡/外出/加班缺口已分级 | `issues/2026-05-17_13-32-26-requirements-completion-audit.csv`、`docs/海音达OA-MVP需求规格说明书.md`、`docs/需求-请假考勤修正规约.md`、`docs/需求-企业微信基础设施规约.md` |
| ATTV1 | 已收口:考勤统一入口与企微打卡同步 V1 已部署公网;关闭 OA 自建打卡,新增企微打卡摘要同步、OA 补卡/外出/加班审批和月度解释;公网 readiness、移动/企微矩阵和考勤关键接口复检通过 | `issues/2026-05-17_14-59-28-attendance-unified-wecom-sync-v1.csv`、`artifacts/qa-flow/live-smoke-readiness-20260517-171535/summary.json`、`docs/需求-请假考勤修正规约.md`、`docs/需求-企业微信基础设施规约.md` |
| LAUNCH-AUTO-OPS-V1 | 阶段收口:自动化证据完成,结论 `PAUSE_FOR_FIX`;除付款批次正式 flag 漂移外,本地门禁、公网 readiness/PDF live OCR、统一考勤、公网移动和企业微信 UA/渲染矩阵均通过;付款批次写入因前置失败被跳过 | `issues/2026-05-17_17-47-45-launch-auto-ops-v1.csv`、`artifacts/qa-flow/launch-auto-ops-20260517-175548/summary.json`、`artifacts/qa-flow/live-smoke-readiness-20260517-175755/summary.json` |
| AUTO-REMAINING-CLOSEOUT | 已收口:剩余自动化运营门禁通过,结论 `GO_TO_OPERATE`;公网 `payment_batch_v1=force_on`、`erp_sync=force_off`,付款批次常开闭环、AP 导出、审计、公网移动和企业微信渲染矩阵均通过;企微打卡同步外部配置仍记 `SKIP` | `issues/2026-05-17_19-30-44-auto-remaining-closeout.csv`、`artifacts/qa-flow/launch-auto-ops-20260517-193317/summary.json`、`artifacts/qa-flow/launch-auto-ops-20260517-193317/live-result.json` |
| HR-WECOM-DIRECTORY-V1 | 已收口:人事生命周期与企业微信通讯录同步闭环已部署公网;ERP 改为未来不接入 OA;员工创建/入职/调岗/资料变更/离职可触发企微通讯录创建、更新、禁用并记录同步状态;缺外部配置时公网重试记录 `SKIP wecom_contact_sync_disabled`,不阻断 OA 人事流程;部署 seed 已修正为不覆盖正式 flag | `issues/2026-05-17_20-00-40-hr-wecom-directory-v1.csv`、`server/tests/unit/routes/employees.wecomDirectory.test.js`、`artifacts/qa-flow/live-smoke-readiness-20260517-205813/summary.json`、`docs/需求-企业微信基础设施规约.md` |
| HRWD-CONTACT-LIVE-TEST | 已收口:公网企微通讯录真实写入闭环通过;测试员工 `HRWDTEST-20260517214548` 完成 create/update/disable,企微 `errcode=0`,OA 最终 archived/inactive,离职后登录负例、普通员工权限负例和审计动作均通过;最终保留离职/禁用,不删除成员 | `issues/2026-05-17_21-41-43-hrwd-contact-live-test.csv`、`artifacts/qa-flow/hrwd-contact-live-test-20260517T134548Z/summary.json`、`artifacts/qa-flow/live-smoke-readiness-20260517-214632/summary.json` |
| WOUA/WAPI | 已收口:OA/企微用户一致性只读审计 runner 已按 WAPI 读取口径复跑;公网报告 `PASS_WITH_FINDINGS`,OA 侧脱敏计数 13/12/5,企微可见 active 5,匹配 5,OA active 缺企微 7,已归档仍有绑定 1,缺必填字段 5;未修改 OA/企微用户,未执行真实员工批量 apply | `issues/2026-05-18_20-45-58-wecom-oa-user-consistency-audit.csv`、`issues/2026-05-18_21-46-41-wecom-api-capability-catalog-runtime-first.csv`、`/app/artifacts/qa-flow/wecom-oa-user-consistency-20260518T142544Z/summary.json` |
| WOUA-FIX | 已受控写入并复检:7 个缺企微测试账号软归档,T0000 seed 不再复活,SMOKE201 归档后的测试主管和待办副作用已转交;复检 OA active 5、企微 active 5、匹配 5、OA active 缺企微 0;剩余 5 个企微缺字段先接受不补,1 个归档绑定保留审计 | `issues/2026-05-18_23-45-45-wecom-oa-user-consistency-fix-runtime-ready.csv`、`/app/artifacts/qa-flow/wecom-oa-user-consistency-fix-20260518T160944Z/summary.json`、`/app/artifacts/qa-flow/wecom-oa-user-consistency-20260518T161716Z/summary.json` |
| WRV1 | 已部署并公网只读验证:`check-wecom-runtime-ready` 返回 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`,阻断点为 `WECOM_CHECKIN_SYNC_ENABLED=true` 未启用;入口/OAuth、Secret 矩阵、OA active 绑定、通讯录、人事助手和消息 dry-run 已通过;审批模板、测试 `sp_no`、真实回调缺口记为 `NEEDS_CONFIG`,不放行深度镜像 | `issues/2026-05-19_01-10-32-wecom-runtime-ready-v1.csv`、`server/src/scripts/check-wecom-runtime-ready.js`、`/app/artifacts/qa-flow/wecom-runtime-ready-20260518T173402Z/summary.json` |
| WMSG1 | 已完成:企微应用消息真实发送和 Deeplink 真机确认通过;报告 `checks.message.status=OK`、`errcode=0`、`recipientCount=1`,用户确认收到消息并可点击进入 OA 通知页面 | `issues/2026-05-19_07-41-37-wecom-message-live-verify-v1.csv`、`/app/artifacts/qa-flow/wecom-runtime-ready-20260518T234431Z/summary.json` |
| WAPC1 | 已完成:企微审批配置准备清单已回写;首批模板为请假、补卡、外出、加班;低风险 `sp_no`、真实回调和后续 POC 准入项已固定;不代表审批镜像或回调接收已实现 | `issues/2026-05-19_08-44-58-wecom-approval-config-prep-v1.csv`、`docs/企微优先开发路线图.md`、`docs/企微API能力目录.md` |
| WAPC2 | 已部署并公网只读复跑:新增请假/补卡模板详情和低风险审批详情 QA-only 只读 POC runner;远端 Secret 矩阵 OK,因缺请假/补卡模板 ID 和两条低风险 `sp_no` 返回 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`;不代表真实回调或审批镜像已实现 | `issues/2026-05-19_09-34-16-wecom-approval-template-spno-poc-v1.csv`、`server/src/scripts/check-wecom-approval-poc.js`、`server/src/services/integrations/wecomApproval.js`、`/app/artifacts/qa-flow/wecom-approval-poc-20260519T020429Z/summary.json` |
| WAPC2F | 已部署并公网 dry-run 通过:新增企微审批 POC 样件 runner;远端 dry-run 报告为 `PASS_FIXTURE_DRY_RUN_READY`,确认 `SMOKE002 -> SMOKE101` 非自审链、Secret 矩阵和脱敏报告边界 | `issues/2026-05-19_10-24-43-wecom-approval-fixture-auto-generate-v1.csv`、`server/src/scripts/check-wecom-approval-fixtures.js`、`/app/artifacts/qa-flow/wecom-approval-fixtures-20260519T045001Z/summary.json` |
| WAPC2FLIVE | 已部署并完成 live 创建:修正 `create_template` payload 后,远端报告 `PASS_FIXTURE_CREATED`,OA-POC 请假/补卡测试模板和低风险测试审批单已创建并保留审计;自动复跑 WAPC2 为 `PASS_APPROVAL_POC`。不代表真实回调、补偿拉取、镜像模型或深度镜像已完成 | `issues/2026-05-19_13-24-12-wecom-approval-fixture-live-create-v1.csv`、`/app/artifacts/qa-flow/wecom-approval-fixtures-20260519T053400Z/summary.json` |
| WCBK1 | 已完成公网真实回调只读 POC:只读回调端点和 synthetic runner 通过本地加密链路;远端配置真实回调后达到 `PASS_CALLBACK_URL_VERIFIED`,`SMOKE101` 同意现有 OA-POC 补卡测试单后达到 `PASS_CALLBACK_EVENT_CONFIRMED`;只保存脱敏事件证据,不写业务镜像 | `issues/2026-05-19_14-11-20-wecom-approval-callback-readonly-poc-v1.csv`、`/app/artifacts/qa-flow/wecom-approval-callback-poc-20260519T092648Z/summary.json` |
| WEGOV1 | 已完成 docs-only 路线治理:固定企微主办域、OA 主办域、OA 留存域、OA 应急域、受控测试域和自动化/人工边界;明确 WCBK1 证据不直接放行完整镜像,后续先做 WACP3/WACP3R、WREAD1、WADM1 和 WARCH1 | `issues/2026-05-19_18-17-44-wecom-governance-owned-oa-archive-route-v1.csv` |
| WACP3/WACP3R | 已实现并公网只读复跑:新增补偿拉取 runner 和 `getapprovalinfo` 只读封装;WACP3R 不再要求人工填写模板 ID,改为按 `SMOKE002` creator 自动发现 OA-POC 请假/补卡模板并复跑。远端报告 `/app/artifacts/qa-flow/wecom-approval-compensation-poc-20260519T115944Z/summary.json` 为 `PASS_WITH_FINDINGS`:请假/补卡各拉到 1 条详情,finding 为回调证据文件未持久化,未写 OA/企微数据 | `issues/2026-05-19_19-03-06-wecom-approval-compensation-pull-poc-v1.csv`、`issues/2026-05-19_19-42-22-wecom-approval-compensation-config-rerun-v1.csv`、`/app/artifacts/qa-flow/wecom-approval-compensation-poc-20260519T115944Z/summary.json` |
| WREAD1 | 已完成人工真机确认:请假/补卡消息卡片、列表、详情页均可看清,远端人工结果为 `PASS_READABLE`;风险记录为驳回有二次确认、同意单击即通过,后续进入 WADM1/WARCH1 的提示、审计留存或操作规程设计 | `issues/2026-05-19_20-39-40-wecom-approval-readability-gate-v1.csv`、`/app/artifacts/qa-flow/wecom-approval-readability-gate-20260519T133628Z/summary.json` |
| WREAD1F | 已按用户选择生成新真机样例:修正 OA-POC 模板唯一命名后,公网 live 创建新的请假/补卡测试模板和两条低风险审批单;新样例支撑 WREAD1 人工确认并收口为 `PASS_READABLE` | `issues/2026-05-19_21-15-47-wecom-readability-fresh-fixture-v1.csv`、`/app/artifacts/qa-flow/wecom-approval-fixtures-20260519T131958Z/summary.json`、`/app/artifacts/qa-flow/wecom-approval-readability-gate-20260519T133628Z/summary.json` |
| WADM1 | 已完成 docs-only 数据模型设计:固定企微审批留存、回调事件、补偿拉取、对账 finding、打卡/人事快照边界、隐私权限和 WARCH1 最小实现切片;不改 schema、不部署、不写业务数据 | `issues/2026-05-19_21-55-33-wecom-archive-mirror-data-model-design-v1.csv` |
| WARCH1 | 已实现并部署验证最小审批历史留存:新增 Prisma 留存表和 migration、回调 DB 入库、补偿拉取双开关入库、离线 OA DB 读取 runner;公网已写入 OA 留存 2 条请假/补卡历史并离线可读,历史回调 gap 已审计化 | `issues/2026-05-19_22-32-06-wecom-approval-archive-minimum-v1.csv`、`/app/artifacts/qa-flow/wecom-approval-compensation-poc-20260519T160306Z/summary.json`、`/app/artifacts/qa-flow/wecom-approval-archive-20260519T160330Z/summary.json` |
| WARCH2 | 已实现并部署验证正式只读历史查询:新增企微审批历史 API、PC/移动历史页、分层权限和脱敏白名单;只读 OA DB,不调用企微 API;远端离线归档复跑可读 2 条请假/补卡历史,保留历史 callback gap finding | `issues/2026-05-20_00-26-04-wecom-approval-archive-query-v1.csv`、`/app/artifacts/qa-flow/wecom-approval-archive-20260520T013610Z/summary.json`、`server/src/routes/wecomApprovalArchive.js`、`client/src/pages/WecomApprovalArchivePage.tsx` |
| WROAD2+OPS | 当前受控上线与每日巡检合同:试用范围固定测试账号,3 天每日脚本化触发;巡检可写 OA 自建留存库但不写企业微信;Day 0 公网报告 `/app/artifacts/qa-flow/wroad2-ops-20260520-041941/summary.json` 为 `PASS_WITH_FINDINGS`,企微 runtime、补偿归档、离线归档读取和隐私扫描通过,finding 为缺 live smoke 登录凭据/pending OCR 子检查异常以及历史 callback gap,不阻断受控试用;WARCH3 已承接后续 07:30 systemd 自动巡检 | `issues/2026-05-20_11-30-22-wroad2-ops-controlled-launch-v1.csv`、`scripts/qa/run-wroad2-ops-daily.sh` |
## 当前门禁
| 门禁 | 状态 | 说明 |
| --- | --- | --- |
| 公网地址 | 可用 | `https://oa.hyinda.com` |
| `/ready` | 通过 | 2026-05-13 `curl -fsS https://oa.hyinda.com/ready` 返回 `ok=true` |
| 企业微信个人应用消息 | 正式通知通道 | 企业微信只做入口、身份、消息和 deeplink |
| `ME6-3` 真机抽查 | 已关闭 | 2026-05-13 用户确认 iPhone 12、iPhone 14、Redmi K60 企业微信主流程通过;iPhone 12 间距偏紧为非阻断观察项 |
| MIF7-7 | 已关闭 | MIF7T 已部署;公网 `/ready`、public bundle、公网 MIF7 移动矩阵、带凭据 live smoke/OCR 均通过 |
| R7E 真实执行 | 已收口 | 阶段验收通过,当前 P0/P1 阻断为 0;付款批次、图片 OCR、Android 系统选择器等按 P2 或平台限制延期 |
| QAOPS9 核心业务流 | 通过 | 隔离临时库业务流 `reimbursement/approval/leave/procurement/governance` 通过;付款批次 spec 已排除,报告 `artifacts/qa-flow/business-flow-20260516-012215/summary.txt` |
| QAOPS9 live readiness | 通过,含非阻断 pending OCR SKIP | `/ready`、WeCom config、public bundle 通过;公网 live smoke 3 passed,真实 OCR 1 passed;pending OCR 因本地未注入 `DATABASE_URL` 记录 SKIP,报告 `artifacts/qa-flow/live-smoke-readiness-20260516-013727/` |
| QAOPS9 公网移动矩阵 | 通过 | `E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts tests/e2e/r124-mobile-entry-matrix.spec.ts --workers=1 --reporter=list`,6 passed |
| P2-ORG 只读巡检 | 通过,含低风险观察项 | `server/src/scripts/audit-org-master-data.js` 在 READ ONLY 事务中执行;当前连接数据源 high=0、medium=0、low=9,未输出手机号、邮箱、token 或企业微信真实标识,报告 `artifacts/qa-flow/p2-org-readonly-audit-20260516-020427/` |
| P2-FIN 决策准备 | 通过 | `LIVE_SMOKE_BASE_URL=https://oa.hyinda.com node scripts/qa/check-live-smoke-env.mjs` 显示 publicReady/liveSmokeReady/liveOcrReady 均为 true;只读核对付款批次 flag、权限、导出、审计和回滚口径;未执行付款批次业务写入 |
| P2-FIN-V1 启用前硬化 | 通过,未部署 | 后端 focused 回归 8 tests passed;`client` typecheck/build 通过;隔离临时库 `reimbursement-payment-batch-flow` 1 passed,覆盖创建批次、复核、二次确认执行、报销 paid、票据 archived、AP 台账和 ERP outbox;权限直连审计 8 passed;公网只做 readiness,不启用 `payment_batch_v1` |
| P2-OCR-SAMPLE 样票治理 | 默认冻结,未部署 | 已确认当前发票 OCR 仍为 PDF-only,图片仅作为普通附件;腾讯云 `image_native` 只证明技术路径存在,不等同于当前产品能力;正式图片 OCR 默认 `FREEZE_BY_DEFAULT`,除非用户明确重启评估 |
| P2Q 后续队列 | 已收口,未部署 | 图片 OCR 不再作为默认主线等待样票;UX8 等待真实反馈;P2-FIN-LIVE 等待公网启用窗口批准;后续 P2-WF/P2-BIZ 均需独立合同 |
| P2AUTO 自动化优先回归 | 通过,未部署 | 后端 focused 43 tests passed;`client` typecheck/build 通过;核心隔离业务流 auth/reimbursement/approval/leave/procurement/governance PASS;付款批次隔离 flag-on 1 passed;公网 `/ready`、public bundle、live smoke 3 passed、PDF live OCR 1 passed;公网移动矩阵 6 passed;企业微信渲染矩阵 8 passed;P2AF 后 provider-only 默认结论为 `FREEZE_BY_DEFAULT` |
| P2AF 可自动实施收口 | 通过,未部署 | `run-p2-safe-regression.sh` PASS:后端 focused 43 tests passed,`client` typecheck/build 通过,核心隔离业务流 auth/reimbursement/approval/leave/procurement/governance PASS,公网 readiness/PDF live OCR 通过,付款批次公网关闭态 409 `payment_batch_v1_disabled / flag_force_off`,公网移动矩阵 6 passed,企业微信渲染矩阵 8 passed,OCR provider-only 默认 `FREEZE_BY_DEFAULT`;不启用公网 `payment_batch_v1`,不开放图片 OCR,不做业务实现 |
| P2-FIN-LIVE-DECISION | 已完成,未部署 | `check-live-smoke-env --strict` 通过,`check-payment-batch-flag-off --json` 通过,财务/员工/admin 对付款批次公网只读访问均为 409 `payment_batch_v1_disabled / flag_force_off`;初始 `HOLD_FOR_WINDOW`,后续用户批准立即短窗口并由 P2-FIN-LIVE 承接 |
| P2-FIN-LIVE 公网短窗口 | 通过,未部署,最终关闭 | `run-p2-fin-live-window.sh` PASS:live-env strict PASS,pre flag-off PASS,公网付款批次 live spec 1 passed,移动矩阵 6 passed,企业微信渲染矩阵 8 passed,final flag-off check PASS;测试中只临时开启 `payment_batch_v1`,未开启 `erp_sync`,未接真实支付,最终恢复 409 `payment_batch_v1_disabled / flag_force_off` |
| PRELAUNCH 正式启用前预回归 | 通过,含 QA 稳定性观察项,未部署 | 公网 live readiness PASS,远端 Caddy active、compose db/server Up、Prisma migration up to date;脱敏数据清点 activeEmployees=12、activeWecomBindings=5、pendingWorkflowTasks=7;`run-p2-fin-live-window.sh` PRELAUNCH PASS,测试报销 `BX-20260517-0024` 付款闭环 paid、票据 archived、AP 台账 paid;`run-p2-safe-regression.sh` PASS。浏览器 `all` 长链路中 PDF 样票重复和采购超时按证据分流:采购分流程报告 PASS,本地隔离 procurement PASS,记录为手工 live spec 稳定性维护项,不作为业务 P0/P1 阻断。 |
| CASHIER-VOUCHER-V1 财务闭环与银行回单附件 | 通过,已部署 | 新增付款批次回单附件模型/API/PC 操作区,银行渠道执行付款前必须上传回单,复核后仍可补凭证号/付款日期/付款渠道;`prisma validate`、`node --check`、后端 focused 单测、前端 typecheck/build、隔离 reimbursement 业务流和 governance 权限直连业务流均通过;已由 LDF 部署并完成公网 CASHV 短窗口复检。正式启用前仍需设置 `payment_batch_v1=force_on` 并完成代账交接 SOP。 |
| LAUNCH-DEPLOY-FINANCE 部署与公网复检 | 通过,最终关闭付款批次 | 本地业务流 auth/reimbursement/approval/leave/procurement/governance 通过,本地 PC/移动/企业微信矩阵通过;部署 commit `ab5ab4d`,`SYNC_ENV=0`,新增 migration `20260517090437_cashier_payment_receipts` 已应用,公网 readiness/PDF live OCR 通过,公网移动/企微矩阵通过;CASHV 短窗口验证无回单执行 409、回单上传/下载、付款 executed、报销 paid、票据 archived、AP 台账 paid、AP 导出 200 和审计可查;最终 `payment_batch_v1=flag_force_off`。 |
| FIN-PROD-ENABLE 付款批次正式常开 | 通过,未重新部署,最终开启付款批次 | 新增 QA-only `run-fin-prod-enable-window.sh` 和 Playwright force-on 模式;`client` typecheck/build 通过;公网 pre flag-off PASS 后完成 FINPROD 付款闭环,`BX-20260517-0026` paid、票据 archived、AP 台账 paid、无回单执行 409、回单下载 200、AP 导出 200、关键审计可查;公网移动矩阵 6 passed、企业微信渲染矩阵 8 passed;最终 `payment_batch_v1=force_on`、`erp_sync=force_off`。 |
| ACCOUNTING-HANDOFF-V1 代账交接 | 通过,无需开发一键包 | 现有能力核对:付款批次清单 200,回单附件列表 200,回单下载 200,AP 导出 200,报销导出 200,票据中心导出 200,审计日志导出 200;`docs/管理员手册.md` 已补月度交接 SOP。AP 台账不是银行流水,银行流水和回单原件由出纳从银行侧导出,不导入 OA。 |
| SYSTEM-COMPLETE-GATE 系统完成门禁 | 通过,结论 `GO_TO_USE` | `check-live-smoke-env --strict` PASS;`run-live-smoke-readiness.sh` PASS,报告 `artifacts/qa-flow/live-smoke-readiness-20260517-125805/`;只读 flag 核验 `payment_batch_v1=force_on`、`erp_sync=force_off`;公网移动/企业微信矩阵 14 passed。 |
| LAUNCH-OPS-V1 首周运营保障 | 通过,无新增业务功能 | 管理员手册、员工快速上手和试运行手册已更新正式启用口径;首周问题登记、每日巡检、暂停条件、回滚联系人、代账交接节奏和 UX8/冻结项处理方式已固定。 |
| REQ-COMPLETE-AUDIT 需求完成度复核 | 通过,无运行时变更 | 完成首批能力和考勤边界复核;企业微信打卡为原始采集,OA 不重造打卡风控。 |
| ATTV1 考勤统一入口 | 通过,已部署 | 部署提交 `916cc3b` + 移动入口修正 `b2b4447`;历史 OA 自建打卡关闭,补卡、外出、加班已进入 OA 统一审批和月度解释;公网 `/ready`、live smoke、PDF live OCR、移动/企业微信矩阵 14 passed;企微 live 同步缺配置时按 `SKIP` 记录。 |
| LAUNCH-AUTO-OPS-V1 正式启用后自动化收口 | 暂停,结论 `PAUSE_FOR_FIX` | `run-launch-auto-ops.sh` 报告 `artifacts/qa-flow/launch-auto-ops-20260517-175548/`;本地门禁、live readiness、PDF live OCR、考勤统一入口、公网移动矩阵 6 passed、企业微信渲染矩阵 8 passed;只读 flag 检查失败:`payment_batch_v1=force_off`,期望为正式常开 `force_on`,因此付款批次写入回归被安全跳过。 |
| AUTO-REMAINING-CLOSEOUT 剩余自动化收口 | 通过,结论 `GO_TO_OPERATE` | 新增 QA-only flag 恢复脚本并受控恢复 `payment_batch_v1=force_on`;`run-launch-auto-ops.sh` 报告 `artifacts/qa-flow/launch-auto-ops-20260517-193317/`,本地门禁、live readiness、PDF live OCR、正式 flag、统一考勤、付款批次常开闭环、公网移动矩阵 6 passed、企业微信渲染矩阵 8 passed;测试报销 `BX-20260517-0027` paid,票据 archived,AP 台账 paid;企微打卡同步缺后台配置按 `SKIP wecom_checkin_sync_disabled` 记录。 |
| HRWD-CONTACT-LIVE-TEST 企微通讯录公网闭环 | 通过,结论 `PASS` | 新增 QA-only runner `scripts/qa/run-hrwd-contact-live-test.mjs`;公网创建 `HRWDTEST-20260517214548` 测试员工,onboarding 触发企微 create、资料变更触发 update、offboarding checklist 触发 disable,三次同步均 `errcode=0`;OA 账号最终 archived/inactive,离职后登录 403 `AUTH_003`,普通员工同步状态权限负例和审计动作均通过;报告 `artifacts/qa-flow/hrwd-contact-live-test-20260517T134548Z/summary.json`。 |
| WCFB 企微打卡 Secret 复用 | 已部署,WRA1 纠正只读门禁 | Issue `issues/2026-05-17_22-57-39-wecom-checkin-agent-secret-fallback.csv`;`WECOM_CHECKIN_SECRET` 显式优先,未配置时复用已授权工作台应用的 `WECOM_AGENT_SECRET`;WRA1 公网复跑证明打卡 API 只读链路可用,正式同步批次仍由 `WECOM_CHECKIN_SYNC_ENABLED` 控制。 |
| WFOC 企微优先 + OA 无痛接管需求重构 | 通过,无运行时变更 | Issue `issues/2026-05-18_10-25-18-wecom-first-oa-continuity-requirements.csv`;PRD、企业微信基础设施规约、统一审批规约、请假考勤规约、管理员手册、员工快速上手、文档索引和事实源矩阵已回写。结论只代表需求方向冻结,不代表企微审批镜像、OA 接管或恢复回写已实现。 |
| DBWFOC 企微能力参考 + OA 主办数据边界 | 通过,无运行时变更 | Issue `issues/2026-05-18_11-35-39-data-boundary-wfoc-revision.csv`;PRD、产品口径、企微基础设施规约、统一审批规约、请假考勤规约、采购/合同/报销/项目规约、管理员手册、员工快速上手、文档索引、事实源矩阵和项目 skill 已回写。结论固定:HR/考勤员工日常审批企微优先,OA 主办高敏业务不进企微原生审批或企微附件。 |
| WFDG 企微优先设计门禁 | 通过,无运行时变更 | Issue `issues/2026-05-18_12-21-01-wecom-first-design-gate.csv`;产品口径、PRD、产品设计规则、企业微信基础设施规约、统一审批规约、请假考勤规约、管理员手册、员工快速上手、文档索引、事实源矩阵和项目 skill 已回写。结论 `DONE_DESIGN_READY`,下一步进入 `WECOM-CAPABILITY-POC-V1`;不代表企微 HR/考勤镜像、OA 应急接管、恢复回写或 RuleOps 已实现。 |
| WDRG 企微优先开发路线图门禁 | 通过,无运行时变更 | Issue `issues/2026-05-18_12-44-10-wecom-development-roadmap-gate.csv`;新增 `docs/企微优先开发路线图.md`,并回写交付规约、产品口径、PRD、管理员手册、员工快速上手、文档索引、事实源矩阵和项目 skill。结论 `DONE_ROADMAP_READY`;其下一步 `WECOM-CAPABILITY-POC-V1` 已由 WCP1/WCPC 执行并收口,不代表运行时迁移已完成。 |
| WCP1 企业微信能力 POC | 完成只读 POC,历史结论 `PAUSE_FOR_CONFIG` | Issue `issues/2026-05-18_13-30-07-wecom-capability-poc-v1.csv`;新增 `scripts/qa/check-wecom-capability-poc.mjs`。本地脚本门禁通过,远端容器内 live 只读报告为 `/tmp/wecom-capability-poc-wcp1/summary.json`:`CAN_REUSE_NOW=9`、`NEEDS_CONFIG=8`、`NEEDS_API_POC=1`、`KEEP_OA_PRIMARY=1`。阻断为 `contact.member_read=wecom_errcode_48009`、`hr.staff_read=wecom_errcode_60021`、打卡同步未开启、缺审批模板/实例、假期权限 `wecom_errcode_301062` 和回调配置;该历史阻断已由 WCPC 复跑收口。 |
| WCPC 企业微信能力 POC 配置收口 | 通过,结论 `GO_TO_HR_MASTER_SYNC` | Issue `issues/2026-05-18_15-01-23-wecom-capability-poc-config-closeout-v1.csv`;未补配置前远端基线复跑报告 `/tmp/wecom-capability-poc-wcpc-baseline` 为 `PASS / PAUSE_FOR_CONFIG`;随后使用既有在职测试号 `SMOKE002/测试员工`(脱敏 `oa_smoke***`)完成只读复跑,报告 `/tmp/wecom-capability-poc-wcpc-smoke002/summary.json`,`nextStageAllowed=true`,`blockingCapabilities=[]`,`CAN_REUSE_NOW=15`、`NEEDS_CONFIG=3`、`NEEDS_API_POC=1`、`KEEP_OA_PRIMARY=1`。该准入已由 WHMS 承接;审批模板/实例、回调配置和 HR 写接口仍留后续合同。 |
| WHMS 企微 HR 主数据镜像 | 已部署并完成受控公网验证 | Issue `issues/2026-05-18_18-43-19-wecom-hr-master-sync-v1.csv`、`issues/2026-05-18_19-28-25-whms-deploy-live-verify-v1.csv`;已部署 `wecom_hr_master_sync_v1`、同步批次/逐员工记录、企微通讯录/人事助手读取服务、管理员 API、People 管理卡片和 `scripts/qa/check-wecom-hr-master-sync.mjs`。公网 dry-run/apply 对 `SMOKE002` 返回 `missing_required_field` skip,未写 OA 主数据;权限负例 403;最终 `force_off`,未执行生产真实员工批量 apply。 |
| WOUA/WAPI OA/企微用户一致性只读对账 | 已复跑,结论 `PASS_WITH_FINDINGS` | Issue `issues/2026-05-18_20-45-58-wecom-oa-user-consistency-audit.csv` 和 `issues/2026-05-18_21-46-41-wecom-api-capability-catalog-runtime-first.csv`;WAPI 修正读取口径为通讯录 `user/list_id` + 可选成员详情 + 人事助手花名册。公网只读报告 `/app/artifacts/qa-flow/wecom-oa-user-consistency-20260518T142544Z/summary.json`:`oaEmployees=13`、`oaActiveEmployees=12`、`oaActiveWithBinding=5`、`wecomProfiles=5`、`matchedActive=5`、`oaActiveMissingInWecom=7`、`inactiveWithBinding=1`、`missingRequiredFields=5`。未打开 `wecom_hr_master_sync_v1`,未调用 WHMS dry-run/apply API,未修改 OA/企微用户。 |
## R7EP / OPS8 / QAF8 / UX8 / P2T 预检推进
执行时间:2026-05-13 14:10-15:25 前后。
| 检查项 | 结果 | 证据 |
| --- | --- | --- |
| R7EP 公网匿名健康 | 通过 | `curl -fsS https://oa.hyinda.com/ready` 返回 `ok=true`;`PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs`:scanned=57,focused=4,findings=0 |
| R7EP 带凭据 live readiness | 通过,含非阻断 pending OCR SKIP | 报告 `artifacts/qa-flow/live-smoke-readiness-20260513-141253/`;live smoke `3 passed`,真实 OCR `1 passed`;`pending OCR` 因本地未注入 `DATABASE_URL` 记录 `SKIP` |
| R7EP 公网移动矩阵 | 通过 | `cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts --workers=1 --reporter=list`,5 passed |
| R7EP 核心业务流 | 分段通过 | 长组合命令在当前工具会话中不稳定中断,不采用不完整 `summary.json` 作为通过证据;采用同一 groups 的可追溯分段结果:`business-flow-20260513-142857/summary.txt` 中 reimbursement/approval/leave/procurement PASS,`business-flow-20260513-145759/summary.txt` 中 approval PASS,`business-flow-20260513-144801/summary.txt` 中 governance PASS |
| R7EP 账号角色只读核验 | 通过 | 只读 SQL 证据 `artifacts/qa-flow/r7ep-account-role-readonly-20260513-152121/`;`SMOKE002`、`SMOKE101`、`SMOKE201`、`SMOKE301`、`SMOKE302`、`SMOKE001`、`wangzhiling`、`wangshunli` 均为 `active`;角色、直属主管、企业微信绑定布尔状态已核验;`SMOKE001` 和 `admin` role 当前无 pending 审批任务,财务角色无 admin 混授 |
| WOUA-FIX 后账号事实 | 已更新 | 2026-05-18 后,`SMOKE001`、`SMOKE201`、`SMOKE301`、`SMOKE302`、`SMOKE401`、`T0000` 已作为缺企微测试数据软归档;R7EP 账号角色只读核验保留为 2026-05-13 历史证据,不再代表当前可执行测试账号清单。 |
| OPS8 最小准备 | 已补文档并通过远端只读检查 | `docs/trialrun/OPS7运维交接Runbook.md` 已补当前部署版本追踪、`SYNC_ENV=0` 口径、备份/回滚占位和 live readiness 归档规则;OPS8-3 远端只读证据 `artifacts/qa-flow/ops8-remote-readonly-20260513-152024/`,Caddy active,compose db/server Up,Prisma migration up to date |
| QAF8 覆盖刷新 | 已补文档 | `docs/测试规约与回归门禁.md` 已补当前最小回归组合、本地/公网匿名/带凭据门禁边界、R108/R109 历史专项分类 |
| UX8 反馈池 | 阶段性收口 | 本轮未新增 UX8 代码实现;iPhone 12 间距、详情扫读性、财务摘要、移动采购创建和列表卡片反馈继续按真实反馈进入后续项 |
| P2T 候选盘点 | 已补文档 | `docs/海音达OA-MVP需求规格说明书.md` 已补 P2T 候选优先级:组织账号主数据、审批通知扩展、OCR/票据增强、费用预算项目轻量增强、运维上线增强;冻结项继续不进入当前实现 |
R7EP 历史结论:公网、live smoke/OCR、移动矩阵、核心业务流、账号角色只读核验和 OPS8 远端只读状态检查均已通过,可进入 R7E 人工确认环节。后续用户已确认参与名单、时间窗口、回滚联系人、问题登记负责人、每日收口节奏和暂停/回滚决策人,R7E 已按本报告后续章节推进。
## ORG8 组织账号与权限主数据验收
执行时间:2026-05-13。
| 检查项 | 结果 | 证据 |
| --- | --- | --- |
| 主管、审批人和角色风险只读审计 | 通过 | `disabled_manager_chain=0`;`inactive_pending_assignees=0`;`roles_without_active_holder=0`;`admin_only_pending=0`;`approval_rules_use_admin=0`;`finance_admin_mixed_roles=0` |
| 新员工账号和企业微信绑定流程 | 通过 | `cd server && npm test -- tests/unit/routes/users.write.test.js tests/unit/routes/users.import.test.js tests/unit/routes/users.list.test.js tests/unit/routes/employees.patch.test.js tests/unit/routes/auth.login.test.js tests/unit/routes/wecomAuth.test.js tests/unit/routes/workflow.permissions.test.js`,7 files,33 tests passed |
| 禁用、启用回滚和角色变更审计 | 通过 | 本地 Fastify route 注入验证覆盖 disable -> archived + session revoke + `SYSTEM_USER_DISABLED`;enable -> active + `SYSTEM_USER_ENABLED`;roles set -> `SYSTEM_USER_ROLES_SET`;inactive login -> `AUTH_003` |
| 前端入口和权限直连 | 通过 | `permission-direct-access.spec.ts` 中前端直连备用路径、员工自助直连、角色入口矩阵、后端直连接口、请假采购自审和 admin-only 拒绝用例均已通过 |
结论:ORG8 可作为组织账号和权限主数据的阶段性完成证据。该验收是本地代表性验证,不包含真实参与人名单、试运行时间窗口、回滚联系人、问题登记负责人或每日收口节奏;这些人工确认仍归 R7E。
## MIF7-7 非人工自动化补验
执行时间:2026-05-13 01:35 前后。
| 检查项 | 结果 | 证据 |
| --- | --- | --- |
| MIF7 CSV 校验 | 通过 | `python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-12_21-48-40-mobile-ia-flow-remediation.csv` |
| MIF7F follow-up CSV 校验 | 通过 | `python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-13_00-38-05-mif7-follow-up-return-and-release.csv` |
| 前端类型与构建 | 通过 | `cd client && npm run typecheck`、`cd client && npm run build` |
| UI 设计规则 strict | 通过 | `node scripts/qa/check-ui-design-rules.mjs --strict`,扫描 126 个文件,0 findings |
| MIF7 移动专项 Playwright | 通过 | `cd client && npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts --workers=1 --reporter=list`,5 passed;截图目录 `output/playwright/mobile-ia-flow-remediation/` |
| R124 移动入口矩阵 | 通过 | `cd client && npx playwright test tests/e2e/r124-mobile-entry-matrix.spec.ts --workers=1 --reporter=list`,1 passed;截图目录 `output/playwright/r124-mobile-entry-matrix/` |
| 公网 `/ready` | 通过 | `curl -fsS https://oa.hyinda.com/ready` 返回 `ok=true` |
| 公网前端资源文案扫描 | 通过 | `PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs`,scanned=56,focused=4,findings=0 |
| 公网 live readiness | 通过,含 SKIP | `LIVE_SMOKE_BASE_URL=https://oa.hyinda.com QA_ISSUE_ID=MIF7-7 bash scripts/qa/run-live-smoke-readiness.sh`;报告目录 `artifacts/qa-flow/live-smoke-readiness-20260513-013545/`;live smoke、真实 OCR 因缺少凭据或样票按脚本规则 SKIP |
| 旧 R6 响应式专项 | MIF7T 后通过 | `tests/e2e/r6-mobile-responsive-system-hotfix.spec.ts` 7 个视口通过,截图目录 `output/playwright/r6-mobile-responsive-system-hotfix/` |
| 旧 MUD6 统一设计专项 | MIF7T 后通过 | `tests/e2e/r6-mobile-unified-design-rollout.spec.ts` 7 个视口通过,截图目录 `output/playwright/r6-mobile-unified-design-rollout/` |
| 旧 WCM6 企业微信渲染专项 | MIF7T 后通过 | `tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts` 8 项通过,截图目录 `output/playwright/r6-wecom-mobile-rendering-hardening/` |
| R108/R109 移动专项 | 明确跳过 | 两个专项仍因测试初始化 API 不可用按测试内规则 SKIP,未将 SKIP 伪造成视觉通过 |
历史结论:该轮非人工补验已证明 MIF7 当前专项、本地构建和公网匿名基础门禁通过;代表性企业微信真机主流程随后补充并关闭 `ME6-3`。当时 `MIF7-7` 因 live smoke 和真实 OCR 缺凭据/样票保持未完成;后续 MIF7TD 已补齐带凭据复检并关闭 `MIF7-7`。
## MIF7T 真机反馈与移动体验统一
执行时间:2026-05-13。
用户真机反馈已记录:三台设备主流程没问题;首页常用入口没有重复底部 Tab;财务首页已和普通/审批首页区分;审批人“已处理”详情返回仍停留在已处理;通知可直达详情并返回来源页;请假详情、采购详情和财务首页主流程通过。iPhone 12 图文上下间距相比其他设备偏紧,但未出现重叠或压字,按非阻断观察项处理。
新增问题已进入 MIF7T 并完成本地整改:普通角色首页降低资产扫码曝光,采购权限用户新增移动采购列表入口;请假页默认先展示记录,并保留“新建请假 / 请假记录”分段;报销、请假、采购列表卡片统一为整卡可点和右侧状态;删除草稿进入“更多”后再二次确认;在线无草稿时审批页不显示空“离线草稿”;报销、请假、采购、审批详情进入时滚动到顶部,返回按钮和 label-value 字段排布统一。
本批本地验证结果:
| 检查项 | 结果 | 证据 |
| --- | --- | --- |
| MIF7 / MIF7F / MIF7T CSV 校验 | 通过 | `validate_issues_csv.py` 三个合同均通过 |
| 前端类型与构建 | 通过 | `cd client && npm run typecheck`、`cd client && npm run build` |
| UI 设计规则 strict | 通过 | `node scripts/qa/check-ui-design-rules.mjs --strict`,扫描 127 个文件,0 findings |
| MIF7 移动专项 | 通过 | `tests/e2e/dg7-mobile-information-dedupe.spec.ts`,5 passed;截图目录 `output/playwright/mobile-ia-flow-remediation/` |
| R6 响应式矩阵 | 通过 | `tests/e2e/r6-mobile-responsive-system-hotfix.spec.ts`,7 passed;覆盖 320/360/375/390/393/414/430 |
| MUD6 统一设计矩阵 | 通过 | `tests/e2e/r6-mobile-unified-design-rollout.spec.ts`,7 passed;覆盖 320/360/375/390/393/414/430 |
| WCM6 企业微信渲染矩阵 | 通过 | `tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts`,8 passed;含 390 iPhone12 字体失败模拟 |
| R101 / R124 移动入口回归 | 通过 | `tests/e2e/r101-mobile-wip-closeout.spec.ts` 3 passed;`tests/e2e/r124-mobile-entry-matrix.spec.ts` 1 passed |
| R108 / R109 视觉专项 | SKIP | 初始化 API 不可用,按测试内规则跳过;不作为视觉通过证据 |
部署状态:MIF7T 已在 MIF7TD 中部署到 `https://oa.hyinda.com`,公网复检和带凭据 live smoke/OCR 已通过。
## MIF7TD 部署与带凭据收口
执行时间:2026-05-13。
| 检查项 | 结果 | 证据 |
| --- | --- | --- |
| MIF7TD / MIF7 / MIF7F / MIF7T / ME6 CSV 校验 | 通过 | `validate_issues_csv.py` 均通过 |
| 部署前本地门禁 | 通过 | `client typecheck`、`client build`、设计规则 strict、MIF7 专项 5 passed、R6/MUD6/WCM6 组合 22 passed、`git diff --check` 通过 |
| 受控部署 | 通过 | `bash deploy/trialrun/deploy.sh`;默认 `SYNC_ENV=0`,未覆盖远端 `.env`;部署包含 `cf2bba0` 的 MIF7T 代码 |
| 公网匿名复检 | 通过 | `curl -fsS https://oa.hyinda.com/ready` 返回 `ok=true`;public bundle `scanned=57 focused=4 findings=0` |
| 公网移动重点矩阵 | 通过 | `E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts --workers=1 --reporter=list`,5 passed;截图目录 `output/playwright/mobile-ia-flow-remediation/` |
| 带凭据 live smoke | 通过 | 报告 `artifacts/qa-flow/live-smoke-readiness-20260513-115455/`;`live-smoke.txt` 不含 `SKIP`,公网 live smoke `3 passed` |
| 真实 OCR | 通过 | 同一报告目录;`live-ocr.txt` 不含 `SKIP`,用例 `1 passed`;样票命中“该发票已用于报销,不能重复添加”,为重复发票可解释终态 |
| pending OCR 辅助扫描 | 非阻断跳过 | `pending-ocr.txt` 因本地未注入 `DATABASE_URL` 记录 `SKIP`,不作为 MIF7-7 硬阻断 |
历史结论:`MIF7-7` 已完成 `DONE/DONE/DONE`。公网当时可用于企业微信和浏览器复测 MIF7T 移动体验;真实扩大试运行随后已另建 R7E 执行合同推进。
## R7E 人工启动确认
确认时间:2026-05-13。
用户确认采用 R7E 推荐启动配置,并补充 `SMOKE301` / `SMOKE302` 尚未启用且没有对应企业微信,因此不作为本轮真实企业微信参与账号。
| 确认项 | 结论 |
| --- | --- |
| 参与人 | 员工 `SMOKE002`;审批人 `SMOKE101`;负责人 `SMOKE201`;财务 `wangzhiling`;管理员/拍板人 `wangshunli` |
| 企业微信边界 | `SMOKE002`、`SMOKE101`、`wangzhiling`、`wangshunli` 作为企业微信或真机优先账号;`SMOKE201` 使用账号密码兜底;`SMOKE301` / `SMOKE302` 不参与本轮 |
| 角色边界 | `wangshunli` 作为管理员、回滚联系人和最终拍板人,不作为普通 `manager` 代行业务审批;`admin-only` 不处理业务审批 |
| 试运行窗口 | 北京时间 2026-05-14 09:30 至 2026-05-15 18:30;每日 17:30 收口 |
| 暂停条件 | 公网 `/ready` 异常、企业微信入口不可达、审批/报销/请假/采购任一主流程阻断、权限越权、数据错误或真实用户无法继续 |
| 回滚联系人 | `wangshunli`;真实联系方式放在仓库外企业微信或电话通讯录,不写入仓库 |
| 问题登记 | `wangshunli` 为业务侧登记负责人;可审计摘要写入本报告和 R7E CSV;按阻断/高/中/低分级 |
| 暂停/回滚决策 | `wangshunli` 最终拍板;触发 P0 阻断、权限泄漏、财务数据错误、审批链错误、无法登录/无法回 OA 或两个以上高优先级问题当天无法解释清楚时暂停或回滚 |
确认结论:`R7E-1..7` 人工确认完成,可以进入 `R7E-8` 公网健康复核。真实业务流程试运行仍需按 `R7E-9..18` 逐项记录,不得用自动化结果替代企业微信真机或人工业务结论。
启动前公网预检:
| 时间 | 检查项 | 结果 | 说明 |
| --- | --- | --- | --- |
| 2026-05-13 20:42 CST | `curl -fsS https://oa.hyinda.com/ready` | 通过 | 返回 `ok=true` |
| 2026-05-13 20:42 CST | `PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs` | 通过 | `scanned=57`,`focused=4`,`findings=0` |
## R7E 最新代码部署与启动当天复核
执行时间:2026-05-14。
| 检查项 | 结果 | 证据 |
| --- | --- | --- |
| 试运行基线 | 已锁定 | `4b14c92 DG9 统一全站 UI 布局样板迁移` |
| 部署前本地门禁 | 通过 | `cd client && npm run typecheck`;`cd client && npm run build` |
| 受控部署 | 通过 | `bash deploy/trialrun/deploy.sh`;默认 `SYNC_ENV=0`,未覆盖远端 `.env` |
| 迁移处理 | 通过 | 部署首次停止于未应用迁移 `20260513214500_biz8_purchase_project_link`;该迁移为 BIZ8 既有加性迁移,给采购申请增加可空项目关联;执行前已创建 DB 和附件备份 |
| 备份 | 已生成 | DB 备份 `hyb-oa-db-20260514_011940.dump`;附件备份 `hyb-oa-storage-20260514_011940.tar.gz`;均位于远端 `deploy/trialrun/backups/` |
| 远端 migration 状态 | 通过 | `npx prisma migrate deploy` 应用缺失迁移后,`npx prisma migrate status` 返回 up to date |
| 公网 `/ready` | 通过 | `curl -fsS https://oa.hyinda.com/ready` 返回 `ok=true` |
| 公网前端资源文案扫描 | 通过 | `PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs`:`scanned=57`,`focused=4`,`findings=0` |
| 公网移动矩阵 | 通过 | `E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts --workers=1 --reporter=list`:5 passed |
| 带凭据 live smoke | SKIP | 本地未提供完整 `LIVE_SMOKE_*` 凭据,部署脚本按规则跳过;不得记为真实业务通过 |
结论:`R7E-8` 已完成 `DONE/DONE/DONE`,公网可进入最新代码试运行。真实企业微信入口、报销、审批、请假、采购、财务、通知 deeplink 和真机反馈仍需按 `R7E-9..18` 逐项人工记录,不能由自动化替代。
## R7E PC / 移动网页自动化补测
执行时间:2026-05-14。范围是公网 PC 网页、移动浏览器和企业微信 UA 模拟;真实手机企业微信免登录、系统文件选择器和消息弹窗仍需人工或代表设备确认。
| 检查项 | 结果 | 证据和结论 |
| --- | --- | --- |
| 公网 live readiness | 通过 | 报告 `artifacts/qa-flow/live-smoke-readiness-20260514-013133/`;live smoke 3 passed;真实 OCR 1 passed;pending OCR 因本地无 `DATABASE_URL` 记录 `SKIP` |
| R7E 角色页面 smoke | 通过 | 员工、经理、财务、财务主管、管理员共 32 个 PC/移动核心入口通过;覆盖 `/portal`、报销、请假、采购、待办、财务台账、付款批次、系统管理、审计、`/mobile`、移动报销、移动请假、票据上传、移动审批、通知和我的 |
| 移动信息架构和 WeCom UA 矩阵 | 部分通过 | `dg7-mobile-information-dedupe` 5 passed;`r6-mobile-unified-design-rollout` 7 passed;`r6-wecom-mobile-rendering-hardening` 8 passed;`r124-mobile-entry-matrix` 1 passed |
| 移动路由分流 | 需测试维护 | `r110-mobile-pc-routing` 1 failed / 1 not run;失败原因是旧断言要求 `/mobile/leave` 默认展示 `mobile-leave-form`,而当前产品事实为默认记录页、`?view=form` 才展示新建请假;未发现 PC 壳回退证据 |
| 公网视觉验收 | 部分通过 | `r104-public-visual-acceptance` 4 passed;`r105-pretrial-visual` 3 passed / 1 failed;失败为测试选择器 `/审批/` 同时匹配“审批”和“待我审批”的 strict mode 冲突,页面已渲染为移动审批页 |
| UI 一致性和 BIZ8 台账 | 通过 | `r103-cross-page-ui-consistency` 3 passed;`biz8-ap-ledger-project` 1 passed |
| 默认本地 E2E 业务流对公网 | 失败,需分流 | `workflow-quick-approve`、`procurement-flow`、`reimbursement-workflow-progress`、`reimbursement-payment-batch-flow` 未通过;主要原因是默认 `[email protected]` 链路缺直属主管、`[email protected]` 凭据不匹配、报销 PDF 上传后未在报销发票区出现。该组使用旧本地种子账号,不作为 R7E `SMOKE002 -> SMOKE101` 真实账号结论,但应进入后续测试维护和 R7E 人工关注项 |
结论:公网 PC 和移动网页自动化基线可继续试运行;`R7E-9..18` 仍需真实角色按企业微信/浏览器操作后记录,且默认本地 E2E 账号链路与当前 R7E smoke 账号链路不一致,需要后续把公网业务流测试切换到 R7E live 凭据或维护测试数据。
## R7E 浏览器业务先行试运行
执行时间:2026-05-14。范围是无需人工操作即可完成的公网 PC 浏览器、移动浏览器和企业微信 UA 模拟补测;真实企业微信免登录、消息弹窗、消息 deeplink、WebView 文件选择器和代表设备反馈仍后置。报告路径为 `artifacts/r7e/browser-business-trialrun/`,截图路径为 `output/playwright/r7e-browser-business-trialrun/`。
### 无需人工操作补测结果
| 流程 | 账号角色 | 测试单据 | PC 结果 | 移动浏览器结果 | 问题编号 | 结论 |
| --- | --- | --- | --- | --- | --- | --- |
| 公共前置 | 员工、审批人、财务、财务主管、管理员 | N/A | 5 类账号登录 `/portal` 通过;`/ready` 通过;public bundle `findings=0`;live smoke env ready;授权 PDF 文件存在且为 PDF | N/A | - | 通过 |
| 报销 | 员工、审批人 | `BX-20260514-0016` | 员工创建报销、添加明细、上传授权 PDF、提交;审批人处理通过;申请人回看状态和审批历史 | N/A | - | 报销业务链路通过;财务付款另记 `R7E-14` |
| 审批 | 员工、管理员、审批人 | `BX-20260514-0016`、`CG-20260514-0005`、请假单 `a22e45f8-b3d6-4862-97f2-30cbe4815e09`、审批边界请假单 `b0cd3e00-2e67-4f51-9aaf-63aa2c53b47e` | 报销、采购、请假均完成待办处理并可回看历史;申请人本人和 admin-only 对真实待办调用审批接口均被拒绝,经理正常通过收尾 | N/A | - | 通过;`R7E-11` 可关闭 |
| 请假 | 员工、审批人 | `a22e45f8-b3d6-4862-97f2-30cbe4815e09` | 员工提交未来工作日请假;审批人通过;员工 PC 回看已通过 | `/mobile/leave` 记录页可见且无横向滚动 | - | 通过 |
| 采购 | 员工、审批人 | `CG-20260514-0005` | PC 创建、明细、无敏感测试附件上传、提交、审批、状态和审批历史回看通过 | 移动采购列表、详情和附件可见且无横向滚动 | - | 通过 |
| 财务 | 财务 | `BX-20260514-0016` | 报销状态为 `approved`;`/api/ap-operations/reimbursement-ledger` 和 `/api/payment-batches` 均返回 `payment_batch_v1_disabled / flag_force_off`,未创建付款批次、未复核、未执行付款、未验证导出 | N/A | R7E-ISSUE-BROWSER-005 | 当时暂停;后续按用户确认的“付款批次延期到 P2”口径收口 `R7E-14` |
| 移动通用 | 员工、审批人、财务 | N/A | N/A | `/mobile`、移动报销、请假、审批、通知、采购入口通过;无 PC 壳和横向滚动 | - | 通过 |
| 企业微信 UA 模拟 | 匿名 | N/A | N/A | 登录入口、企业微信配置和 OAuth 边界可达 | - | 通过;不代表真机验收 |
| 补充移动矩阵 | 本地 mock 前置 | N/A | N/A | 启动 Vite `http://127.0.0.1:5173` 后重跑 `dg7-mobile-information-dedupe`,5 passed;临时服务已关闭 | - | 通过;前次 `127.0.0.1:3000` 失败确认为前置服务未启动 |
本轮新增测试辅助:`r7e-browser-business-trialrun.spec.ts` 支持 `R7E_BROWSER_FLOW=preflight|reimbursement-finance|leave|purchase-attachment|mobile|wecom-ua|finance-closeout|approval-boundary|all` 分段执行;移动 flow 使用浏览器 storage state 注入登录态并写入匹配的 device fingerprint,避免反复 UI 登录触发限流。
阶段结论:无人工自动化已完成公网健康、报销提交审批、请假、采购附件、审批边界、移动浏览器、企业微信 UA 模拟和本地移动矩阵前置修正。`R7E-10`、`R7E-11`、`R7E-12`、`R7E-13` 已按浏览器业务线证据关闭;`R7E-14` 后续按用户确认的付款批次延期到 P2 口径收口;`R7E-9`、`R7E-15`、`R7E-18` 仍需真实企业微信和人工验收,不由本轮自动化替代。
## R7E 真机反馈修复记录
执行时间:2026-05-14。用户已完成代表设备人工反馈,本轮先在本地代码和现有 Issue 流中处理,随后按受控部署步骤发布到试运行环境。
| 反馈项 | 级别 | 归属 | 本轮处理 |
| --- | --- | --- | --- |
| 所有设备可企业微信免登录进入 OA | PASS | `R7E-9` | 记录为真机通过项 |
| 企业微信消息点击均提示 `requestid tokenexpired` 或深链已过期 | HIGH | `WF8-11A` | 修复签名 deeplink 过期回流;企业微信 UA 走免登录 returnTo |
| iOS 只能上传 PDF,Android 选择器仍显示拍照和选择文件 | MEDIUM | `R7E-16B` | OA 前端增加 PDF-only 过滤;Android 系统选择器表现记录为 WebView 限制 |
| 通知卡片和待审批卡片右侧状态只显示首字 | MEDIUM | `R7E-16A` | 修复移动状态槽样式并加入 Playwright 遮挡断言 |
| 财务移动入口和付款未启用状态不清楚 | MEDIUM | `BIZ8-12A` | 增加 `/mobile/me` 财务入口;付款批次关闭时显示未启用空态 |
部署状态:本节对应修复已在 2026-05-14 22:05 左右部署到 `https://oa.hyinda.com`,公网 `/ready`、public bundle、live readiness、真实 OCR 样票、移动矩阵和 R7E 分段自动化前置均已复核通过。企业微信消息点击已在 2026-05-15 补充代表设备真机通过;WebView 文件选择器、移动状态标签、财务入口和代表设备渲染仍需继续记录最终反馈。
## R7E 真机反馈修复部署复核
执行时间:2026-05-14。部署基线为 `5491e92 修复 R7E 真机反馈回流与移动入口 WF8-11A R7E-16A R7E-16B BIZ8-12A`。
| 检查项 | 结果 | 证据和结论 |
| --- | --- | --- |
| 部署前本地门禁 | 通过 | `cd client && npm run typecheck`;`cd client && npm run build`;`cd server && node --check src/routes/auth.js src/services/notifications/detailUrl.js src/routes/portal.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`,4 files / 29 tests passed |
| 受控部署 | 通过,含瞬时扫描失败 | `bash deploy/trialrun/deploy.sh` 默认 `SYNC_ENV=0`;远端 build、server 重建、init、migration status 均通过;脚本末尾 public bundle 首次扫描遇到短暂 `GET / failed: 502`,随后公网复核恢复正常 |
| 远端 runtime smoke | 通过 | 手动补跑 `smoke-external-deps.js` 和 `smoke-trialrun-runtime.js`;企业微信、OCR、消息桥接、Prisma、功能开关和导航构建均通过 |
| 公网匿名复核 | 通过 | `curl -fsS https://oa.hyinda.com/ready` 返回 `ok=true`;首页 200;`PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs`:`scanned=57 focused=4 findings=0` |
| 公网 live readiness | 通过,含非阻断 SKIP | 报告 `artifacts/qa-flow/live-smoke-readiness-20260514-220617/`;live smoke 3 passed;真实 OCR 样票 1 passed,重复发票为可解释终态;pending OCR 因本地无 `DATABASE_URL` 记录 `SKIP` |
| 公网移动矩阵 | 通过 | `E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts tests/e2e/r124-mobile-entry-matrix.spec.ts --workers=1 --reporter=list`,6 passed |
| R7E 分段自动化前置 | 通过或可解释跳过 | `R7E_BROWSER_FLOW=mobile` 通过,员工/审批人/财务移动入口可见且无横向滚动;`R7E_BROWSER_FLOW=wecom-ua` 通过;`R7E_BROWSER_FLOW=finance-closeout` 通过但 AP/payment-batches 按 `payment_batch_v1_disabled / flag_force_off` 记录 SKIP |
阶段结论:最新修复已经进入企业微信代表设备复测。`R7E-14` 按用户确认的“付款批次先不启用,延期到 P2”口径收口;该结论不代表付款批次已启用或付款闭环已完成。
## R7E 企业微信 deeplink 代表设备复测
执行时间:2026-05-15。用户反馈:“企业微信点击消息可以来了,可以免登录进到对应的详情里。”
| 检查项 | 结果 | 证据和结论 |
| --- | --- | --- |
| 企业微信个人应用消息点击 | 通过 | `wangshunli` 当前手机点击新企业微信审批消息后可免登录进入对应审批详情,不再出现 `requestid`、`tokenexpired` 或“深链已过期”提示 |
| 代表消息 | 通过 | 触发消息为 `【催办】请假单 2026-06-22 待审批`,目标为 `/mobile/approvals?taskId=822b2159-dc3c-4a65-8a49-abd70000f1b8`;仓库不记录 deeplink token |
| 验收边界 | 代表设备通过 | 该证据足以关闭 `WF8-11` 和 `R7E-9` 的入口/免登录/deeplink 代表设备验收;不扩大写成所有设备均已复测 |
当前剩余真机项:移动状态标签完整显示、Android 选择器 PDF-only 口径、财务角色 `/mobile` 与 `/mobile/me` 入口,以及 `R7E-18` 阶段验收结论。
## R7E 真机反馈二次修复记录
执行时间:2026-05-15。用户补充使用员工、主管、财务和 `wangshunli` 账号复测后的真机反馈。
| 反馈项 | 级别 | 归属 | 本轮处理 |
| --- | --- | --- | --- |
| 通知首页卡片只显示“新”,浏览详情后“新”消失 | PASS | `R7E-15` | 按未读提醒行为接受,不改成“已读/未读”常驻状态 |
| 移动详情页左上返回按钮和报销单号贴得太近 | PASS | `R7E-16C` | 用户确认左上返回按钮已有清楚间距 |
| 审批卡片右侧仍只显示“待”,详情处理按钮居中且三按钮分两行 | PASS | `R7E-16C` | 用户确认右侧完整显示“待处理”,详情三个按钮在一行 |
| 财务 `/mobile/me` 有入口,但点击后像回首页,付款未启用提示不可发现 | PASS | `BIZ8-12B` | 用户确认直接定位到财务卡片并显示“付款批次未启用” |
| `wangshunli` 当前没有通知 | INFO | `R7E-15` | 不作为阻断;deeplink 已由此前代表消息验证关闭 |
| 审批详情中“退回”和“驳回”语义容易混淆 | MEDIUM | `R7E-16D` | 按产品决策保留短按钮“通过 / 驳回 / 退回”,在二次确认弹窗说明具体后果 |
本节对应修复已于 2026-05-15 19:31 CST 通过 `bash deploy/trialrun/deploy.sh` 部署到 `https://oa.hyinda.com`,部署基线为 `f945c0b R7E 真机二次反馈移动修复`,`SYNC_ENV=0`,未覆盖远端 `.env`。部署脚本内置远端构建、init、Prisma migration status、`/ready`、external deps smoke、runtime smoke 和公网 bundle 扫描均通过。部署后补充验证:`curl -fsS https://oa.hyinda.com/ready` 通过,`PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs` 扫描 57 个资源且 findings=0,live smoke env readiness 通过,`cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts tests/e2e/r124-mobile-entry-matrix.spec.ts --workers=1 --reporter=list` 通过 6 项。2026-05-15 用户补充确认 `SMOKE101` 审批状态和操作区、`SMOKE002` 详情头部间距、`wangzhiling` 财务入口定位均通过;审批动作二次确认进入 `R7E-16D`。
`R7E-16D` 已于 2026-05-15 21:46 CST 部署到 `https://oa.hyinda.com`,部署基线为 `96488d8 R7E-16D 审批动作二次确认`,`SYNC_ENV=0`,未覆盖远端 `.env`。部署脚本内置远端构建、init、Prisma migration status、`/ready`、external deps smoke、runtime smoke 和公网 bundle 扫描均通过。部署后补充验证:`curl -fsS https://oa.hyinda.com/ready` 通过,`PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs` findings=0,live smoke env readiness 显示公网、企业微信和真实 OCR 条件 ready,`cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts tests/e2e/r124-mobile-entry-matrix.spec.ts --workers=1 --reporter=list` 复跑 6 passed,`cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/workflow-action-confirm-ui.spec.ts tests/e2e/r89-mobile-login-navigation.spec.ts --workers=1 --reporter=list` 5 passed。审批动作二次确认仍需代表真机复测后才能关闭 `R7E-15/R7E-17/R7E-18`。
## R7E 全站高风险操作确认统一
执行时间:2026-05-15。根据用户确认,将 `R7E-16D` 的审批二次确认模式推广到全站高风险动作,但不覆盖普通保存、筛选、分页、查看、预览或非敏感导航,避免确认疲劳。
| 检查项 | 结果 | 证据和结论 |
| --- | --- | --- |
| 高风险确认统一 | 通过 | 新增 `ActionConfirmDialog` 和确认文案 helper;报销删除、敏感导出、付款批次执行、采购/差旅预检、头像/合同删除、票据判重例外、流程定义发布/归档等入口改为 OA 内确认弹窗 |
| 原生确认框清理 | 通过 | `rg -n 'window\.(confirm\|prompt)' client/src` 无结果;不再使用浏览器原生阻塞弹窗作为业务确认 |
| PC 自动化替代人工 | 通过 | `system-action-confirmation.spec.ts` 覆盖取消不调用接口、确认后才调用接口;`workflow-action-confirm-ui.spec.ts` 覆盖审批确认;PC 端不再安排人工点击验收 |
| 移动和视觉矩阵 | 通过 | `DG7+R124` 本地移动矩阵 6 passed;`project-wide-visual-local` 通过 1 passed,并由脚本自动准备临时数据库和种子数据 |
| 公网状态 | 通过 | `bf791d7` 已于 2026-05-15 23:18 CST 部署到 `https://oa.hyinda.com`,`SYNC_ENV=0`,未覆盖远端 `.env`;部署后 `/ready`、public bundle、live smoke env、PC mock 自动化和移动矩阵均通过 |
部署复核:`bash deploy/trialrun/deploy.sh` 通过,远端构建、init、Prisma migration status、`/ready`、external deps smoke、runtime smoke 和 public bundle 扫描均通过。部署后补充验证:`curl -fsS https://oa.hyinda.com/ready` 返回 `ok=true`;`PUBLIC_BASE_URL=https://oa.hyinda.com node scripts/qa/check-public-bundle-copy.mjs` 扫描 57 个资源且 findings=0;`LIVE_SMOKE_BASE_URL=https://oa.hyinda.com node scripts/qa/check-live-smoke-env.mjs` 显示 public ready、企业微信 ready、live smoke ready、live OCR ready;`E2E_BASE_URL=https://oa.hyinda.com` 跑 `system-action-confirmation + workflow-action-confirm-ui` 4 passed;`DG7+R124` 公网移动矩阵 6 passed。
补充说明:曾直接把 `project-wide-visual.spec.ts` 挂到裸 Vite 服务运行,因默认 E2E 用户和后端种子前置不足触发登录 API `HTTP_500`。已改用项目标准门禁 `QA_SKIP_CLIENT_BUILD=1 bash scripts/qa/run-web-gates.sh project-wide-visual-local`,该门禁会准备临时库、写入种子并启动本地服务,结果通过;前述失败归类为测试前置问题,不作为业务回归。
`BIZ8-13/BIZ8-CLOSE` 已完成权限回归和阶段收口:`cd server && npm run prisma:validate` 通过;`cd server && npm test -- tests/unit/routes/exports.apOperations.test.js tests/unit/routes/paymentBatches.reimbursement.test.js tests/unit/routes/purchase.project-link.test.js tests/unit/routes/projects.test.js tests/unit/routes/workflow.permissions.test.js tests/unit/services/financeLedger.test.js` 6 files / 27 tests passed;`cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/biz8-ap-ledger-project.spec.ts --workers=1 --reporter=list` 1 passed。付款批次仍按 P2 延期,不作为当前 R7E 阻断。
## QAOPS8 Go/No-Go 当前结论
执行时间:2026-05-15。
`QAOPS8-17` 当前结论为 `Go`。2026-05-15 23:35 CST,用户明确确认“阶段验收通过”。R7E-16D 已部署、自动化通过且代表真机确认,R7E-16E/R7E-16F 也已部署并通过公网自动化复核;当前 P0/P1 阻断为 0。
| 检查项 | 当前状态 | 处理 |
| --- | --- | --- |
| QAOPS8 发布、备份、回滚和 SLO 基线 | 已形成 | 可作为 R7E 启动前准备证据 |
| R7E-1..7 人工启动确认 | 已确认 | 可以进入启动当天公网健康复核 |
| R7E-8 公网健康复核 | 已完成 | 最新代码 `bf791d7` 已部署;`/ready`、public bundle、远端 migration 状态、live readiness、公网 PC 确认自动化和移动矩阵通过 |
| R7E-9..15 真实业务和真机流程 | 已完成 | 浏览器业务线已关闭报销、审批边界、请假、采购;`R7E-9` 入口、免登录和消息 deeplink 已按代表设备关闭;`R7E-14` 按付款批次延期到 P2 口径收口;`R7E-15` 审批二次确认代表真机反馈已确认 |
| R7E-16..18 每日问题和验收结论 | 已完成 | `R7E-16E/R7E-16F` 已部署并公网验证;`R7E-17` 按无 P0/P1 阻断关闭;`R7E-18` 用户确认阶段验收通过 |
| WF8-11 通知 deeplink 回 OA | 已完成 | 2026-05-15 代表设备企业微信消息点击可免登录进入目标审批详情;WF8 可阶段关闭 |
| BIZ8-12/13 移动业务入口和权限回归 | 已完成 | `wangzhiling` 已确认财务入口定位和付款未启用空态;财务/项目权限回归通过,BIZ8 可阶段关闭 |
Go 结论边界:
- R7E 阶段验收通过,允许进入后续 P2 排序和上线硬化收口。
- PC 高风险动作确认由 Playwright 和视觉门禁验收,不再安排人工 PC 点击。
- 企业微信真机后续只保留消息、免登录、WebView 文件选择器和系统选择器这类真实环境差异项。
- 付款批次闭环已完成 P2-FIN 决策准备,后续只能进入单独 `P2-FIN-V1` 实现合同,不作为当前 R7E 阻断。
结论:当前可以关闭 `WF8-11`、`R7E-9`、`R7E-15`、`R7E-17`、`R7E-18`、`R7E-19`、`R7E-20`、`QAOPS8-17`、`QAOPS8-19`、`QAOPS8-20` 和 BIZ8 阶段流。`R7E-14` 已按付款批次延期到 P2 的变更口径收口;P2-FIN 决策准备已完成,后续优先级为 `P2-FIN-V1` 独立实现合同、图片 OCR 样票治理、UX8 真机反馈、审批通知和轻业务增强。P2 功能开发必须另建或延续对应连续合同,本报告不启动新功能。
## WARCH3 / WCHECK1 / WEXT1 受控上线后续
执行时间:2026-05-20。WROAD2 Day 0 公网巡检 `/app/artifacts/qa-flow/wroad2-ops-20260520-041941/summary.json` 为 `PASS_WITH_FINDINGS` 后,后续路线按“受控上线稳定化 -> 打卡摘要留存 -> 外出/加班 dry-run -> 小范围真实试用”推进。
| 项 | 当前结果 | 证据和边界 |
| --- | --- | --- |
| WARCH3 自动巡检 | 公网已验证,`PASS_WITH_FINDINGS` | 新增 `scripts/qa/run-warch3-ops-daily.sh`、`deploy/trialrun/install-warch3-ops-timer.sh` 和 `npm run send:wecom-ops-alert`;服务器已安装 `hyb-oa-warch3-ops.timer`,下次触发为 2026-05-21 07:30 CST;手动 service 报告 `/app/artifacts/qa-flow/warch3-ops-20260520-054841/summary.json` 为 `PASS_WITH_FINDINGS`,告警报告 `/app/artifacts/qa-flow/wecom-ops-alert-20260520T054851Z/summary.json` 为 `PASS_ALERT_SENT_WITH_CONFIG_GAPS`,已向管理员 `wangshunli` 的员工号 `HYD000006` 发送脱敏消息;后续脚本不再把姓名字符串 `wangshunli` 当作 employee_no 使用 |
| WCHECK1 打卡摘要留存 | 公网已验证,live/offline 均通过 | 新增打卡日/月摘要、规则快照、`wecomCheckinArchive` 服务和 `npm run check:wecom-checkin-summary-archive`;live 报告 `/app/artifacts/qa-flow/wecom-checkin-summary-archive-20260520T054907Z/summary.json` 为 `PASS_CHECKIN_ARCHIVE_READY`,本窗口 0 条打卡明细、2 条规则快照已写 OA 留存;offline 报告 `/app/artifacts/qa-flow/wecom-checkin-summary-archive-20260520T054926Z/summary.json` 为 `PASS_CHECKIN_ARCHIVE_OFFLINE_READY` |
| WEXT1 外出/加班 | 公网 dry-run 通过,live 未批准 | `npm run check:wecom-approval-fixtures` 支持 `--target=outing --target=overtime`;公网报告 `/app/artifacts/qa-flow/wecom-approval-fixtures-20260520T054940Z/summary.json` 为 `PASS_FIXTURE_DRY_RUN_READY`;本轮只构建最小通用模板和审批申请 payload,不创建企微模板、不提交审批单 |
| 隐私边界 | 保持 | 报告和告警只输出状态、计数、报告路径、脱敏 userid/template/sp_no 前缀;不输出手机号、邮箱、token、Secret、完整外部键、位置、人脸、设备明文、表单值、附件、评论或原始 payload |
上述能力仍不代表完整审批镜像、应急接管、恢复回写或 RuleOps 已完成。WROAD2-CLOSEOUT 三天验收期间同步执行 WROAD2-BIZ1 三天业务冒烟和 WAPPR1 审批规则规范化门禁;通过后再问答是否进入 WEXT1-FORMAL 正式模板外出/加班测试。请假、补卡、外出、加班四类测试号证据和审批规则门禁均通过后,才单独问答是否启动 WREAL1 小范围真实试用。
## WOPS1 / WROAD2-CLOSEOUT / WREAL1-PREP 后续规划
执行时间:2026-05-20。基于 WARCH3/WCHECK1/WEXT1 后的受控上线结果和用户后续选择,当前不扩大真实员工、不立即创建外出/加班 live 样件,先完成三天稳态验收,并在三天内并行执行 WROAD2-BIZ1 人工业务冒烟与 WAPPR1 审批规则规范化;WREMOTE1 后改为 WEXT1-FORMAL 正式模板人工提交测试,四类测试号证据和审批规则门禁通过后才问是否进入真实小范围试用。
| 项 | 当前结果 | 证据和边界 |
| --- | --- | --- |
| WOPS1 巡检告警降噪 | 公网已验证 | 告警默认收件员工号修正为 `HYD000006`,即管理员 `wangshunli` 的员工号;不再把 `wangshunli` 字符串当作 employee_no。`send-wecom-ops-alert` 增加状态文件,首次 `PASS_WITH_FINDINGS` 记录为基线;远端二次触发 WARCH3 报告 `/app/artifacts/qa-flow/warch3-ops-20260520-070731/summary.json` 为 `PASS_WITH_FINDINGS`,告警报告 `/app/artifacts/qa-flow/wecom-ops-alert-20260520T070740Z/summary.json` 为 `PASS_ALERT_SKIPPED_NO_FINDINGS`,原因 `no_new_findings_or_status_worsening`。后续只有阻断、脚本失败、新增 finding、状态恶化或人工 `--force` 才发送脱敏消息。 |
| WROAD2-CLOSEOUT 三天验收 | 待 Day 1/2/3 自动采集 | Day 0 报告 `/app/artifacts/qa-flow/wroad2-ops-20260520-041941/summary.json` 为 `PASS_WITH_FINDINGS`。已知 observation 为 live smoke 凭据、pending OCR 子检查和历史 callback gap,不阻断受控试用;企微 runtime、审批补偿归档、OA 离线读取、打卡摘要 offline 可读和隐私扫描仍是主链路。三天内正常或已知 finding 不打扰,仅新增异常、状态恶化、阻断或脚本失败时通知。 |
| WROAD2-BIZ1 三天业务冒烟 | 已建档,待人工执行 | 三天内补充真实业务动作:`SMOKE002` 每天按企微规则尝试上/下班打卡,提交低风险请假和补卡;`SMOKE101` 每条审批必须先打开详情再审批;`HYD000006` 每天查看 OA 企微审批归档历史和打卡摘要。人工业务冒烟不替代 WARCH3 自动巡检;无法打卡、无法审批或仍需手选审批人时,真实记录为 finding。 |
| WAPPR1 审批规则规范化 | 已建档,作为真实试用前门禁 | 用户发现补卡申请需要申请人手动选择审批人,该现象作为 blocking finding 治理。测试模板固定 `SMOKE002 -> SMOKE101`;正式请假、补卡、外出、加班模板必须按直属主管、部门负责人或指定审批角色自动带出审批人;申请人不得任意选择审批人,审批人缺失、停用、未绑定、不可见或自审时阻断。 |
| WRULE1 审批链校验器 | 已建档并进入本地 POC | 固定“单一组织规则,两个执行域”:OA 维护主管链、业务审批角色和管理员兜底,企微执行 HR/考勤审批,OA 只读已归档审批详情并校验理论审批人是否匹配实际审批链。WRULE1 不读取企微后台规则、不写企微、不替代 WAPPR1 人工门禁。 |
| WREAL1-PREP 真实试用准备 | 仅规划,不启用真实员工 | 固化候选员工 active/已绑定/可见、审批人非本人、回滚联系人、允许流程、暂停条件和验收标准。当前继续测试账号;真实试用必须等请假、补卡、外出、加班四类测试号证据和 WAPPR1/WRULE1 审批规则门禁通过后再问答确认,默认仍从 1 名真实员工 + 1 名审批人/管理员观察开始。 |
| 外出/加班 | 正式模板测试待远端收口后问答 | WEXT1 dry-run 证据保留;当前不创建企微外出/加班模板或审批单。已锁定 WEXT1-FORMAL 方向:使用现有正式模板,由 `SMOKE002` 真机提交低风险外出/加班测试单,`SMOKE101` 先看详情再审批,系统只读补偿、归档和 WRULE1。 |
三天验收结束后的人工问答选项固定为:进入 WEXT1-FORMAL、先处理指定 finding、或暂停。外出/加班正式模板人工测试前必须再次说明当前状态、改了什么、测了什么、结果是什么和会留下什么企微记录;四类测试号证据和 WAPPR1/WRULE1 审批规则门禁通过后,再问是否进入真实小范围试用。
## WAUTO1 / WEXT1LD 自动证据汇总与 live 前 dry-run
执行时间:2026-05-20。本轮不写企业微信、不启用真实员工,先把三天受控试用证据汇总、WAPPR1 人工确认清单和外出/加班 live 前 dry-run 脚本化。
| 项 | 当前结果 | 证据和边界 |
| --- | --- | --- |
| WAUTO1 自动证据汇总 | 远端 `PAUSED_MANUAL_CONFIRMATION` | 新增 `scripts/qa/collect-wecom-controlled-trial-evidence.sh`,汇总 WROAD2/WARCH3/WCHECK1/WROAD2-BIZ1/WAPPR1/WEXT1 dry-run 证据,复跑公网 `/ready`、审批补偿只读、审批归档离线、打卡摘要 offline、外出/加班 dry-run 和隐私扫描。公网报告 `/app/artifacts/qa-flow/wecom-controlled-trial-evidence-20260520-103617/summary.json`:`/ready` 通过,外出/加班 dry-run 通过,审批补偿和归档离线为 `PASS_WITH_FINDINGS`,WARCH3 历史 summary 在容器内不可见记为人工缺口;脚本默认不设置 `WECOM_ARCHIVE_WRITE=1`、`WECOM_CHECKIN_ARCHIVE_WRITE=1` 或 `WECOM_APPROVAL_FIXTURE_WRITE=1`,不写 OA DB、不写企业微信、不创建模板或审批单。 |
| WAPPR1 人工确认模板 | 已补充 | 请假、补卡、外出、加班逐模板确认:A 审批人自动带出且申请人不能任意选择;B 默认带出但申请人仍可改人;C 必须申请人手选审批人;D 当前看不到或模板未配置。B/C/D 均不得直接进入真实员工试用。不要记录 Secret、token、完整 userid、完整审批单号、完整 template_id、表单值、附件、评论或原始 payload。 |
| WAPPR1 人工门禁结果 | `PASS_APPROVER_RULES_READY` | 2026-05-21 用户确认测试员工直属上级已设置为测试主管;请假、补卡、外出、加班提交页均自动带出测试主管,且申请人不能删除、改人或新增审批人,四类模板均为 A。该结论仍需结合 WRULE1 提交后实际审批链校验、WROAD2-BIZ1 业务动作和三天自动汇总,不自动触发 WEXT1-FORMAL 或 WREAL1。 |
| WEXT1LD 外出/加班 dry-run gate | 远端 dry-run 通过 | 远端只执行 `npm run check:wecom-approval-fixtures -- --format=json --target=outing --target=overtime`,不带 live 写入参数,不设置写入环境变量。报告 `/app/artifacts/qa-flow/wecom-controlled-trial-evidence-20260520-103617/wecom-approval-fixtures-dryrun/summary.json` 为 `PASS_FIXTURE_DRY_RUN_READY`,且 `liveWrite.requested=false`、`liveWrite.allowed=false`。dry-run 通过后,不自动创建模板或审批单;下一步按 WEXT1-FORMAL 问答决定是否人工提交正式模板测试单。 |
| 后续人工问答 | 待三天汇总 | 三天汇总后选项固定为:接受 `PASS_AUTO_EVIDENCE_READY` 并进入 WEXT1-FORMAL 问答;接受 `PASS_WITH_FINDINGS` 但先处理指定 finding;暂停,不进入外出/加班正式模板测试或真实试用。 |
## WFULLSMOKE1 三天全域最终目标测试
执行时间:2026-05-20 建档。本轮把三天测试从企微 HR/考勤受控巡检扩展为全系统最终目标主路径闭环,仍限定测试账号和公网试运行环境。
| 项 | 当前结果 | 证据和边界 |
| --- | --- | --- |
| 总控合同 | 已建档 | 新增 `issues/2026-05-20_19-01-12-three-day-full-goal-smoke-v1.csv`,覆盖企微 HR/考勤、OA 报销、采购、合同/项目、付款批次、移动端和运维巡检。 |
| QA 编排脚本 | 已新增 | 新增 `scripts/qa/run-three-day-full-goal-smoke.sh`,聚合公网 `/ready`、feature flag、WARCH3/WAUTO1、审批补偿与归档离线读取、打卡摘要 offline、OA 主办域浏览器主路径、移动/企微入口矩阵和隐私扫描。 |
| 数据边界 | 已固定 | 允许创建带 `TEST-SMOKE-WFULL` 标记的 OA 测试业务数据并保留审计;不写企业微信、不创建外出/加班样件、不启用真实员工、不真实付款、不接真实支付、不写 ERP、不导入银行流水。 |
| 人工门禁 | 待执行 | Day 1/2/3 仍由 `SMOKE002`、`SMOKE101`、`HYD000006` 完成打卡、请假/补卡、审批详情确认、OA 历史查看和四类模板审批规则 A/B/C/D 确认;只有 WAPPR1 为 A 才能进入后续 live 或真实试用问答。 |
| 后续问答 | 待三天汇总 | 三天汇总后按结果选择:接受主路径闭环、先处理 finding、或暂停;外出/加班 live 和 WREAL1 真实小范围试用均不能由 WFULLSMOKE1 自动启动。 |
## WROUTE2 测试号收口到最小完整镜像路线锁定
执行时间:2026-05-20 建档。本轮只锁定后续路线,不部署、不写企业微信、不启用真实员工、不创建外出/加班样件。
| 项 | 当前结果 | 证据和边界 |
| --- | --- | --- |
| 路线合同 | 已建档 | 新增 `issues/2026-05-20_20-15-29-wecom-test-account-closeout-to-minimal-mirror-route-v1.csv`,作为 WFULLSMOKE1 后的路线锁定合同。 |
| 测试号收口 | 已锁定 | 当前优先完成 WROAD2-CLOSEOUT、WROAD2-BIZ1、WAPPR1、WRULE1、WAUTO1、WEXT1LD 和 WFULLSMOKE1;WAPPR1 四类模板必须为 A,WRULE1 必须为 `PASS_RULE_MATCH` 或可解释 `PASS_WITH_ADMIN_FALLBACK`,否则不进入 WEXT1-FORMAL 或 WREAL1。 |
| 外出/加班正式模板测试 | 待后续问答 | 只有三天验收、全域主路径、业务冒烟、规则门禁和 dry-run 均可解释通过后,才另建 WEXT1-FORMAL 合同并再次问答是否让 `SMOKE002` 人工提交正式模板外出+加班测试单。 |
| 真实试用与镜像 | 后置 | WREAL1 首批固定为 1 名真实员工 + 1 名审批人/管理员观察;WREAL1 通过后优先规划 `wecom_attendance_approval_mirror_v1` 最小完整镜像,应急接管、恢复回写和 RuleOps 均后置。 |
## WTCLOSE1 小团队自动审批规则与测试号全域收口 dry-run
执行时间:2026-05-20。用户确认公司当前不到 10 人,并批准按选项 A 推进。本轮执行范围为自动证据汇总、全域 smoke 和外出/加班 live 前 dry-run;不写企业微信、不创建外出/加班模板或审批单、不启用真实员工。
| 项 | 当前结果 | 证据和边界 |
| --- | --- | --- |
| 执行合同 | 已建档 | 新增 `issues/2026-05-20_21-10-00-wecom-test-account-closeout-auto-dryrun-v1.csv`,ID 为 `WTCLOSE1-0..WTCLOSE1-8`。 |
| 审批规则 | 执行目标 A | 小团队 HR/考勤审批采用一层直属主管或指定审批角色自动带出审批人;申请人不能任意改人;主管链缺失、审批人不可见/停用/未绑定或命中自审时,由管理员兜底或阻断。请假、补卡、外出、加班四类模板若为 B/C/D,均为阻断 finding。 |
| WAPPR1 API 边界调研 | 已确认需人工门禁 | 企业微信 `gettemplatedetail` 只返回模板控件,`getapprovaldetail` 只返回已提交审批单的实际审批节点和审批人,均不能只读读取“申请人是否可手选审批人/审批规则配置”。`applyevent` 的 `use_template_approver=1` 可使用后台流程,但属于写入型验证且存在模板限制,不能作为通用只读门禁。因此 WAPPR1 必须由后台人工确认、真机提交页确认和 API 提交后实际审批链校验共同组成。 |
| 自动范围 | 只到汇总和 dry-run | 复跑 WAUTO1、WFULLSMOKE1 和外出/加班 dry-run;公网 OA 测试业务数据必须带 `TEST-SMOKE-WFULL` 标记并保留审计;不设置企微写入开关,不执行 live 创建。 |
| WAUTO1 公网汇总 | `PAUSED_MANUAL_CONFIRMATION` | 公网报告 `/app/artifacts/qa-flow/wecom-controlled-trial-evidence-20260520-130010/summary.json`;`/ready`、审批补偿只读、审批归档离线、打卡摘要 offline、外出/加班 dry-run 和隐私扫描完成;finding 为 WARCH3 历史 summary 缺口、审批补偿和归档离线既有 `PASS_WITH_FINDINGS`。人工门禁仍待 WROAD2-BIZ1 三天业务动作和 WAPPR1 四类模板确认。 |
| WFULLSMOKE1 公网全域 smoke | `PASS_WITH_FINDINGS` | 公网报告 `/app/artifacts/qa-flow/three-day-full-goal-smoke-20260520-125909/summary.json`;主控脚本完成三天全域目标聚合。finding 为 live feature flag/OA 公网写流程需凭据或人工确认、运行镜像缺部分浏览器 spec、既有 WARCH3/WROAD2/WAUTO1 观察项;未写企业微信,未创建外出/加班样件,未启用真实员工。 |
| 外出/加班 live 前 dry-run | `PASS_FIXTURE_DRY_RUN_READY` | 公网报告 `/app/artifacts/qa-flow/wecom-approval-fixtures-20260520T125941Z/summary.json`;`secretMatrix=OK`、`actors=OK`、`liveWrite=DRY_RUN_READY`、`autoRerun=DRY_RUN_SKIPPED`。本轮没有设置 `WECOM_APPROVAL_FIXTURE_WRITE=1`,没有带 `--live --create-templates --submit-test-approvals`,没有创建企微模板或审批单。 |
| 后续问答 | 待自动复核和三天业务收口 | dry-run 已具备进入问答的自动证据,且 2026-05-21 WAPPR1 四类模板人工门禁均为 A。下一步需复跑只读证据汇总和 WRULE1 实际审批链校验,并结合三天业务动作可解释通过后,再问是否进入 WEXT1-FORMAL;真实员工试用仍固定后置为 1 名真实员工 + 1 名审批人/管理员观察。 |
## WRULE1 企微 HR/考勤审批链校验器 POC
执行时间:2026-05-20。本轮只做本地只读 POC,不部署、不写 OA 业务数据、不写企业微信、不启用真实员工。
| 项目 | 状态 | 证据与边界 |
| --- | --- | --- |
| 执行合同 | 已建档 | 新增 `issues/2026-05-20_23-56-15-wecom-hr-approval-rule-validator-v1.csv`,ID 为 `WRULE1-0..WRULE1-7`。 |
| 校验器 | 已实现 | 新增 `server/src/services/integrations/wecomApprovalRuleValidator.js` 和 `server/src/scripts/check-wecom-approval-rule-validator.js`;按 OA 直属主管、业务审批角色和管理员兜底计算理论审批人,再与 OA 已归档企微审批参与人/动作对比。 |
| 结论分类 | 已固定 | `PASS_RULE_MATCH`、`PASS_WITH_ADMIN_FALLBACK`、`FAIL_APPLICANT_CAN_CHOOSE`、`FAIL_SELF_APPROVAL`、`FAIL_APPROVER_MISMATCH`、`PAUSED_MANUAL_CONFIRMATION`、`SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。 |
| 人工门禁关系 | 不替代 WAPPR1 | `--manual-gate=<template>:A/B/C/D` 只登记管理员后台和真机提交页结论;缺门禁时输出 `PAUSED_MANUAL_CONFIRMATION`。WRULE1 只能证明已提交审批链是否匹配 OA 理论规则,不能证明申请页是否允许改审批人。 |
| 隐私边界 | 已固化 | 报告只输出脱敏 `sp_no`、template、employee 前缀、计数和 finding 类型;不输出完整 userid、完整 template_id、完整审批单号、手机号、邮箱、token、Secret、表单值、附件、评论或原始 payload。 |
## WTCLOSE2 测试号最终收口与证据复核
执行时间:2026-05-22 建档。本轮承接 2026-05-21 WAPPR1 四类模板均为 A 的人工门禁结论,自动复跑测试号最终收口证据;不写企业微信、不创建外出/加班模板或审批单、不启用真实员工。
| 项目 | 状态 | 证据与边界 |
| --- | --- | --- |
| 执行合同 | 已建档 | 新增 `issues/2026-05-22_10-21-12-wecom-test-account-final-closeout-v1.csv`,ID 为 `WTCLOSE2-0..WTCLOSE2-8`。 |
| QA 编排脚本 | 已新增 | 新增 `scripts/qa/run-wecom-test-account-final-closeout.sh`,复跑公网 `/ready`、WAUTO1、WFULLSMOKE1、外出/加班 dry-run 和 WRULE1,并汇总 WROAD2/WARCH3 既有报告索引。 |
| 写入边界 | 已固定 | WFULLSMOKE1 在 WTCLOSE2 中以 `WFULLSMOKE_ALLOW_PUBLIC_WRITES=0` 运行,不新增 OA 测试业务数据;外出/加班仅 dry-run,不设置 `WECOM_APPROVAL_FIXTURE_WRITE=1`,不带 live 写入参数。 |
| 规则门禁 | 已固定 | WRULE1 复跑时使用 `--manual-gate=all:A`,引用用户 2026-05-21 真机确认;该证据仍只支持进入问答,不等于批准 WEXT1-FORMAL 或 WREAL1。 |
| 结论分类 | 已固定 | `PASS_TEST_ACCOUNT_CLOSEOUT_READY`、`PASS_WITH_FINDINGS`、`PAUSED_MANUAL_CONFIRMATION`、`SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。 |
| 后续问答 | 待 WTCLOSE2 汇总 | 若 WTCLOSE2 可解释通过,再问是否批准 WEXT1-FORMAL 正式模板外出+加班人工测试;真实员工试用仍固定后置为 1 名真实员工 + 1 名审批人/管理员观察,且需另行问答。 |
## WTCLOSE2F 远端可信 IP 执行口径修正
执行时间:2026-05-22。用户确认企业微信后台已限制 API 只能由部署服务器访问,本地执行 WTCLOSE2 会因缺远端 env、DB 和可信 IP 产生误导性阻断,因此修正如下:
| 项目 | 状态 | 证据与边界 |
| --- | --- | --- |
| 执行合同 | 已建档 | 新增 `issues/2026-05-22_11-10-06-wecom-test-account-closeout-remote-only-v1.csv`,ID 为 `WTCLOSE2F-0..WTCLOSE2F-5`。 |
| 执行入口 | 已修正 | WTCLOSE2 真实运行命令改为 `bash scripts/qa/run-wecom-test-account-final-closeout.sh --remote`,由 SSH 到部署服务器并在 server 容器中执行。 |
| 本地边界 | 已固定 | 本地直接执行脚本默认拒绝跑企微链路;本地只用于 `bash -n`、合同、文档和静态门禁。此前本地缺 env/DB 造成的 WTCLOSE2 阻断不能作为企微业务阻断证据。 |
| 写入边界 | 不变 | 远端 WTCLOSE2 仍不写企业微信、不创建外出/加班模板或审批单、不启用真实员工;WFULLSMOKE1 仍以 `WFULLSMOKE_ALLOW_PUBLIC_WRITES=0` 运行。 |
## WREMOTE1 / WFULLSMOKE2 / WEXT1-FORMAL 后续路线执行口径
执行时间:2026-05-22。WTCLOSE2F 后,后续路线改为先远端可信 IP 收口,再用正式模板做外出/加班测试号人工提交,最后再问答进入 1 人真实试用。
| 项目 | 状态 | 证据与边界 |
| --- | --- | --- |
| 执行合同 | 已建档 | 新增 `issues/2026-05-22_12-34-41-wecom-remote-closeout-and-full-smoke-v1.csv`,ID 为 `WREMOTE1-0..WREMOTE1-8`。 |
| 全域 smoke | 已规划 | `scripts/qa/run-three-day-full-goal-smoke.sh` 增加 `--remote`,必须在部署服务器执行;允许 `TEST-SMOKE-WFULL` 标记 OA 测试数据,不写企业微信。 |
| 外出/加班 | 路线修正 | 不自动创建 OA-POC 外出/加班模板;由 `SMOKE002` 在正式模板真机提交,`SMOKE101` 先看详情再审批,系统只读补偿、归档和 WRULE1。 |
| 真实试用 | 待问答 | 首批仍为 1 名真实员工 + 1 名审批人/管理员观察;真实员工号只通过 `/tmp/hyb-oa-wreal1.env` 临时文件提供,不进仓库。 |
## 历史恢复
需要追溯 R70-R91 的详细流水时,使用:
```bash
git show 5da05eb:docs/trialrun/人工试运行报告.md
```