文件
hyb-oa/issues/2026-05-18_20-45-58-wecom-oa-user-consistency-audit.csv
T

5.8 KiB

1IDTitleDescriptionAcceptanceTest_MethodToolsDev_StatusReview1_StatusRegression_StatusFilesDependenciesNotes
2WOUA-0合同建档与边界冻结建立 OA 与企微用户一致性只读对账合同,锁定本轮只生成脱敏差异报告,不执行真实员工批量 apply,不打开 wecom_hr_master_sync_v1,不修改 OA 或企微用户数据。1) CSV 校验通过;2) 范围限定为 QA-only 只读 runner、脱敏匹配单测、公网只读审计、事实源回写;3) 不新增公开 API、Prisma schema、前端 UI 或 feature flag;4) 不调用会持久化同步批次的 WHMS dry-run API。受影响流程:OA active 员工 -> 企业微信通讯录/人事助手 -> 用户一致性审计 -> 后续修复合同决策;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-18_20-45-58-wecom-oa-user-consistency-audit.csv。python3|manualDONEDONEDONEissues/2026-05-18_20-45-58-wecom-oa-user-consistency-audit.csv[]回滚路径:删除本 CSV 和本轮 QA-only 代码/文档回写;本轮不涉及运行时数据变更。
3WOUA-1新增只读对账 runner新增 QA-only CLI,读取 OA 员工和企业微信通讯录/人事助手资料,按 WHMS 匹配优先级生成脱敏一致性报告。1) OA 侧使用 PostgreSQL BEGIN READ ONLY;2) 企微侧只读调用通讯录和人事助手;3) 报告包含 matchedActive、oaActiveMissingInWecom、wecomActiveMissingInOa、oaActiveMissingBinding、inactiveWithBinding、statusMismatch、missingRequiredFields、matchConflict;4) 不输出手机号、邮箱、完整 userid、token、secret 或原始 payload。受影响流程:管理员/QA 执行只读审计 -> 生成脱敏差异报告;验证步骤:cd server && node --check src/scripts/audit-wecom-oa-user-consistency.js;cd server && node src/scripts/audit-wecom-oa-user-consistency.js --help。node|pg|wecomDONEDONEDONEserver/src/scripts/audit-wecom-oa-user-consistency.js|server/package.json["WOUA-0"]本 runner 不作为应用运行时依赖;缺企微配置时必须输出 SKIP/BLOCKED_BY_EXTERNAL_CONFIG,不伪造成 PASS。
4WOUA-2脱敏与匹配单测新增 focused 单测覆盖全匹配、OA active 缺企微、企微 active 缺 OA、企微缺必填字段、inactive 仍绑定和重复匹配冲突。1) 测试覆盖匹配优先级 external_user_id -> employee_no/userid -> phone -> email;2) 输出不含手机号、邮箱或完整 userid;3) status 可判定 PASS_NO_DRIFT 或 PASS_WITH_FINDINGS;4) 单测可独立运行。受影响流程:对账逻辑 -> 报告分类 -> 后续修复分流;验证步骤:cd server && npx vitest run tests/unit/scripts/audit-wecom-oa-user-consistency.test.js --reporter=verbose。vitestDONEDONEDONEserver/tests/unit/scripts/audit-wecom-oa-user-consistency.test.js["WOUA-1"]只测纯逻辑和脱敏,不访问真实数据库或企业微信。
5WOUA-3公网只读对账执行本地门禁通过后,以 SYNC_ENV=0 受控部署 QA 脚本,在远端 server 容器内执行只读对账并保存报告。1) 部署不覆盖远端 env;2) 公网执行命令只读,不打开 feature flag,不写 OA/企微用户数据;3) 报告结论为 PASS_WITH_FINDINGS、PASS_NO_DRIFT 或 SKIP/BLOCKED_BY_EXTERNAL_CONFIG;4) 报告路径可审计。受影响流程:公网 OA 员工和企微可见成员 -> 只读差异审计 -> 后续修复决策;验证步骤:SYNC_ENV=0 bash deploy/trialrun/deploy.sh;ssh [email protected] 在 /opt/hyb-oa-trialrun 容器内执行 npm run audit:wecom-oa-users -- --live --format=json。bash|ssh|nodeDONEDONEDONEexternal|artifacts/qa-flow/wecom-oa-user-consistency-*["WOUA-2"]公网审计实际结论为 SKIP/BLOCKED_BY_EXTERNAL_CONFIG,企微读取返回 wecom_errcode_60011;OA 侧只读计数 oaEmployees=13、oaActiveEmployees=12、oaActiveWithBinding=5;未打印 Secret/token/完整 userid/手机号/邮箱,未写 OA/企微数据。
6WOUA-4报告和事实源回写更新人工试运行报告、文档索引和事实源矩阵,记录本轮只是只读对账,不代表真实员工已批量同步。1) 文档记录 WOUA 当前结论、报告路径和下一步建议;2) 明确不执行真实员工 apply;3) 明确如差异较大先进入 WOUA-FIX 或 WHMS 批量同步窗口决策;4) 文档审计和关键词核对通过。受影响流程:事实源读取 -> 判断 OA/企微用户一致性 -> 后续派工;验证步骤:node scripts/qa/audit-docs.mjs --check-registry;rg -n 'WOUA|用户一致性|PASS_WITH_FINDINGS|wecom-oa-user-consistency|批量同步' docs issues。node|rgDONEDONEDONEdocs/trialrun/人工试运行报告.md|docs/文档索引.md|docs/文档事实源状态矩阵.md["WOUA-3"]事实源记录 WOUA 为只读审计且被外部配置阻断,不承诺自动修复;下一步需处理企微读权限或另建 WOUA-FIX/WHMS 批量同步窗口。
7WOUA-5状态回填与中文提交完成 WOUA 状态回填、本地门禁、公网报告核对和中文提交。1) WOUA-0..4 均按实际结果回填;2) validate_issues_csv、node --check、focused vitest、prisma validate、git diff --check 通过;3) 中文 commit 引用 WOUA;4) 最终说明是否部署和用户是否可查看报告。受影响流程:Issue CSV -> 验证证据 -> 中文提交 -> 后续实施入口;验证步骤:git status --short;git log -1 --oneline。git|manualDONEDONEDONEissues/2026-05-18_20-45-58-wecom-oa-user-consistency-audit.csv|docs|server/src/scripts/audit-wecom-oa-user-consistency.js|server/tests/unit/scripts/audit-wecom-oa-user-consistency.test.js|server/package.json["WOUA-4"]提交前确认不包含 Secret、token、手机号、邮箱、完整 userid 或企微原始 payload;本地门禁和公网只读审计证据已核对,中文提交引用 WOUA。