diff --git a/.agents/skills/hyb-oa-delivery/SKILL.md b/.agents/skills/hyb-oa-delivery/SKILL.md index 91b18a04..eed39b82 100644 --- a/.agents/skills/hyb-oa-delivery/SKILL.md +++ b/.agents/skills/hyb-oa-delivery/SKILL.md @@ -17,7 +17,7 @@ Read only what is relevant: - For approval workflow, roles, self-approval, notification, deeplink, reminder, or escalation work, read `docs/需求-统一审批中心规约.md`. - For HR lifecycle, employee onboarding/offboarding, Enterprise WeChat directory sync, account disablement, or Enterprise WeChat API work, read `docs/需求-企业微信基础设施规约.md`, `docs/企微API能力目录.md`, `docs/管理员手册.md`, and the latest HCLT/HRWD/WAPI/WRRA Issue CSV evidence first. - For any Enterprise WeChat capability, Secret, callback, approval, check-in, HR assistant, or contact-directory task, read `docs/企微API能力目录.md` before planning or coding. WAPI fixes the current Secret matrix: contacts use `WECOM_CONTACT_SECRET`; workbench/OAuth/messages/HR assistant/roster/check-in/approval use `WECOM_AGENT_SECRET`; `WECOM_CHECKIN_SECRET` is only an explicit check-in override; `WECOM_HR_ASSISTANT_SECRET` is historical compatibility and not a default. Do not write runtime code that tries multiple Secrets to guess the correct one. -- For Enterprise WeChat-first HR/attendance runtime migration, read `docs/企微优先开发路线图.md` before planning or coding. WDRG makes the roadmap authoritative for stage order; WAPI adds the runtime-first stage before deep mirror work; WRRA states that WOUA `PASS_WITH_FINDINGS` does not clear deep mirror work; WOUA-FIX has now soft-archived the 7 OA active test accounts missing in WeCom, fixed the `T0000` seed reactivation behavior, transferred the `SMOKE201` test-manager side effects, and rerun WOUA with `oaActiveMissingInWecom=0`. WCPC has rerun the capability POC with an existing active test account and reached `GO_TO_HR_MASTER_SYNC`; WHMS/WHMSLIVE has implemented, deployed, and publicly verified `wecom_hr_master_sync_v1`, with the production flag restored to `force_off` and production real-employee batch apply not approved. WMSG1 proves real app-message delivery and Deeplink return only; WAPC1 fixes the approval configuration preparation checklist before mirror work; WAPC2 adds the leave/missed-punch approval template and low-risk `sp_no` read-only POC runner. Do not start `wecom_attendance_approval_mirror_v1`, `oa_hr_emergency_mode_v1`, `wecom_recovery_writeback_v1`, or `wecom_ruleops_v1` without the next stage's own Issue CSV. +- For Enterprise WeChat-first HR/attendance runtime migration, read `docs/企微优先开发路线图.md` before planning or coding. WDRG makes the roadmap authoritative for stage order; WAPI adds the runtime-first stage before deep mirror work; WRRA states that WOUA `PASS_WITH_FINDINGS` does not clear deep mirror work; WOUA-FIX has now soft-archived the 7 OA active test accounts missing in WeCom, fixed the `T0000` seed reactivation behavior, transferred the `SMOKE201` test-manager side effects, and rerun WOUA with `oaActiveMissingInWecom=0`. WCPC has rerun the capability POC with an existing active test account and reached `GO_TO_HR_MASTER_SYNC`; WHMS/WHMSLIVE has implemented, deployed, and publicly verified `wecom_hr_master_sync_v1`, with the production flag restored to `force_off` and production real-employee batch apply not approved. WMSG1 proves real app-message delivery and Deeplink return only; WAPC1 fixes the approval configuration preparation checklist before mirror work; WAPC2 adds the leave/missed-punch approval template and low-risk `sp_no` read-only POC runner. WPROC1 fixes the engineering route: WAPC2 must be followed by WAPC2F automatic POC fixtures, WAPC2 rerun, WCBK1 callback POC, WACP3 compensation-pull POC, and WADM1 mirror data model design before `wecom_attendance_approval_mirror_v1`. Do not start `wecom_attendance_approval_mirror_v1`, `oa_hr_emergency_mode_v1`, `wecom_recovery_writeback_v1`, or `wecom_ruleops_v1` without the next stage's own Issue CSV. - For reimbursement, invoice, OCR, duplicate invoice, or attachment work, read `docs/报销发票附件规则.md` and `references/reimbursement.md`. - For local/WeCom/public trial-run, OCR runtime, Caddy, or DB drift work, read `docs/试运行与自动化验证手册.md` and `references/trialrun.md`. - For how this skill should evolve, read `docs/Agent开发交付实践.md`. @@ -106,10 +106,11 @@ Final responses should include: - R6 scope defaults to reimbursement, leave, procurement, approval, Enterprise WeChat entry/notification, finance payment/export. - Do not expand to budget, ERP, AI, full travel, or complex BPM during R6; record those as follow-up Issues. - Enterprise WeChat personal app message is the formal approval notification channel after R5; mock and group bots are not acceptance evidence for R6 business notification. -- After WAPI, ERP is not a future OA integration target. HR/attendance employee daily approvals (leave, missed punch, outing, overtime) should reuse mature Enterprise WeChat capabilities first, while OA provides domain-based mirror, manual takeover, recovery writeback, finance closeout, and audit. Reimbursement, payment batches, AP, accounting handoff, procurement, expenses, contracts, projects, sensitive attachments, invoices, bank receipts, and accounting handoff materials remain OA-primary unless a later Issue changes that domain explicitly. OA-primary approvals may send Enterprise WeChat personal-app notifications, but messages must contain only dehydrated title/type/no/status/deeplink; do not upload procurement forms, contract bodies, quotes, supplier files, invoices, bank receipts, or accounting materials to WeCom native approvals or WeCom attachments. Before runtime migration, read `docs/企微API能力目录.md` and `docs/企微优先开发路线图.md`, run or check `WECOM-CAPABILITY-POC-V1`/WCPC, and classify each capability as `CAN_REUSE_NOW`, `NEEDS_CONFIG`, `NEEDS_API_POC`, `KEEP_OA_PRIMARY`, or `NOT_SUPPORTED_BY_API`; missing Secret, callback, template, trusted IP, visible scope, or API permission must be recorded as `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`, not PASS. Current WAPI rule: contacts read with `WECOM_CONTACT_SECRET` and `POST /cgi-bin/user/list_id`; HR assistant/roster uses `WECOM_AGENT_SECRET` and `POST /cgi-bin/hr/get_staff_info`; check-in defaults to `WECOM_AGENT_SECRET` with optional explicit `WECOM_CHECKIN_SECRET`; approval template/detail reads use `WECOM_AGENT_SECRET`; no runtime Secret guessing. Current WCPC status: existing active test account `SMOKE002/测试员工` (reported only as `oa_smoke***`) reran successfully with report `/tmp/wecom-capability-poc-wcpc-smoke002/summary.json`, `status=PASS`, `conclusion=GO_TO_HR_MASTER_SYNC`, and `blockingCapabilities=[]`. Current WHMSLIVE status: `wecom_hr_master_sync_v1` is implemented and deployed with feature flag default/final `force_off`, HR/contact read service, dry-run/apply, sync run/item records, People management card, and QA-only runner `scripts/qa/check-wecom-hr-master-sync.mjs`; public verification applied migration `20260518184319_wecom_hr_master_sync_v1`, temporarily forced the flag on, ran dry-run and explicit apply for `SMOKE002` (`oa_smoke***`), verified ordinary employee API denial with 403, then restored `force_off`. The SMOKE002 apply did not write OA master data because WeCom lacks phone/email/department and was correctly skipped as `missing_required_field`; production real-employee batch apply is not approved. WHMS rules: missing OA-required fields are skipped as `missing_required_field`, inactive WeCom status becomes `needs_offboarding_confirmation`, and OA accounts are not auto-disabled. WOUA-FIX rerun result remains `PASS_WITH_FINDINGS` only because 5 matched WeCom users lack accepted fields and one archived test binding is retained; `oaActiveMissingInWecom=0`, active OA employees 5/5 match WeCom. WRV1 adds QA-only `npm run check:wecom-runtime-ready` to verify entry, OAuth/bindings, dehydrated app-message dry-run, OA deeplink, contact `user/list_id`, HR assistant `get_staff_info`, and check-in short-window reads; WRA1 fixes the check-in gate so `WECOM_CHECKIN_SYNC_ENABLED` remains only the formal sync-batch switch, while QA-only runtime checks pass `requireSyncEnabled=false` for read-only probing and still block on real Secret, trusted IP, visible scope, permission, or WeCom API failures. WRA1 public report `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T180506Z/summary.json` is `PASS_WITH_CONFIG_GAPS`: entry/OAuth, Secret matrix, OA active bindings, contact, HR assistant, message dry-run, and check-in read passed, with check-in recorded as `readable_sync_disabled`. Real message sending still requires both `--send-test-message` and `WECOM_RUNTIME_TEST_SEND=1`. Approval template ID, approval `sp_no`, callback config, attendance/approval mirror, emergency mode, recovery writeback, RuleOps, and HR write APIs remain later-stage gaps. WAPC1 fixed the approval configuration preparation checklist but did not implement callbacks or mirror. WAPC2 adds `npm run check:wecom-approval-poc` for leave/missed-punch `gettemplatedetail` and low-risk `getapprovaldetail`; missing template ID or `sp_no` must remain `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`, and API/permission/trusted-IP/scope failures remain `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`. Do not skip stage order: `WECOM-CAPABILITY-POC-V1`/WCPC -> `wecom_hr_master_sync_v1`/WHMSLIVE -> `runtime_first_wecom_enablement`/WAPI+WOUA rerun -> `WOUA-FIX / WECOM-RUNTIME-READY-V1` -> `WAPC1 审批配置准备` -> `WAPC2 请假/补卡只读 POC` -> `wecom_attendance_approval_mirror_v1` -> `oa_hr_emergency_mode_v1` -> `wecom_recovery_writeback_v1` -> `wecom_ruleops_v1`. UI and API work must distinguish `OA 主办`, `企微镜像`, and `OA 应急接管`. OA-driven Enterprise WeChat directory create/update/disable is live verified; for later HR/WeCom directory issues, first check configuration, permission, department, and data-specific causes before treating the capability as unfinished. +- After WAPI, ERP is not a future OA integration target. HR/attendance employee daily approvals (leave, missed punch, outing, overtime) should reuse mature Enterprise WeChat capabilities first, while OA provides domain-based mirror, manual takeover, recovery writeback, finance closeout, and audit. Reimbursement, payment batches, AP, accounting handoff, procurement, expenses, contracts, projects, sensitive attachments, invoices, bank receipts, and accounting handoff materials remain OA-primary unless a later Issue changes that domain explicitly. OA-primary approvals may send Enterprise WeChat personal-app notifications, but messages must contain only dehydrated title/type/no/status/deeplink; do not upload procurement forms, contract bodies, quotes, supplier files, invoices, bank receipts, or accounting materials to WeCom native approvals or WeCom attachments. Before runtime migration, read `docs/企微API能力目录.md` and `docs/企微优先开发路线图.md`, run or check `WECOM-CAPABILITY-POC-V1`/WCPC, and classify each capability as `CAN_REUSE_NOW`, `NEEDS_CONFIG`, `NEEDS_API_POC`, `KEEP_OA_PRIMARY`, or `NOT_SUPPORTED_BY_API`; missing Secret, callback, template, trusted IP, visible scope, or API permission must be recorded as `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`, not PASS. Current WAPI rule: contacts read with `WECOM_CONTACT_SECRET` and `POST /cgi-bin/user/list_id`; HR assistant/roster uses `WECOM_AGENT_SECRET` and `POST /cgi-bin/hr/get_staff_info`; check-in defaults to `WECOM_AGENT_SECRET` with optional explicit `WECOM_CHECKIN_SECRET`; approval template/detail reads use `WECOM_AGENT_SECRET`; no runtime Secret guessing. Current WCPC status: existing active test account `SMOKE002/测试员工` (reported only as `oa_smoke***`) reran successfully with report `/tmp/wecom-capability-poc-wcpc-smoke002/summary.json`, `status=PASS`, `conclusion=GO_TO_HR_MASTER_SYNC`, and `blockingCapabilities=[]`. Current WHMSLIVE status: `wecom_hr_master_sync_v1` is implemented and deployed with feature flag default/final `force_off`, HR/contact read service, dry-run/apply, sync run/item records, People management card, and QA-only runner `scripts/qa/check-wecom-hr-master-sync.mjs`; public verification applied migration `20260518184319_wecom_hr_master_sync_v1`, temporarily forced the flag on, ran dry-run and explicit apply for `SMOKE002` (`oa_smoke***`), verified ordinary employee API denial with 403, then restored `force_off`. The SMOKE002 apply did not write OA master data because WeCom lacks phone/email/department and was correctly skipped as `missing_required_field`; production real-employee batch apply is not approved. WHMS rules: missing OA-required fields are skipped as `missing_required_field`, inactive WeCom status becomes `needs_offboarding_confirmation`, and OA accounts are not auto-disabled. WOUA-FIX rerun result remains `PASS_WITH_FINDINGS` only because 5 matched WeCom users lack accepted fields and one archived test binding is retained; `oaActiveMissingInWecom=0`, active OA employees 5/5 match WeCom. WRV1 adds QA-only `npm run check:wecom-runtime-ready` to verify entry, OAuth/bindings, dehydrated app-message dry-run, OA deeplink, contact `user/list_id`, HR assistant `get_staff_info`, and check-in short-window reads; WRA1 fixes the check-in gate so `WECOM_CHECKIN_SYNC_ENABLED` remains only the formal sync-batch switch, while QA-only runtime checks pass `requireSyncEnabled=false` for read-only probing and still block on real Secret, trusted IP, visible scope, permission, or WeCom API failures. WRA1 public report `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T180506Z/summary.json` is `PASS_WITH_CONFIG_GAPS`: entry/OAuth, Secret matrix, OA active bindings, contact, HR assistant, message dry-run, and check-in read passed, with check-in recorded as `readable_sync_disabled`. Real message sending still requires both `--send-test-message` and `WECOM_RUNTIME_TEST_SEND=1`. Approval template ID, approval `sp_no`, callback config, attendance/approval mirror, emergency mode, recovery writeback, RuleOps, and HR write APIs remain later-stage gaps. WAPC1 fixed the approval configuration preparation checklist but did not implement callbacks or mirror. WAPC2 adds `npm run check:wecom-approval-poc` for leave/missed-punch `gettemplatedetail` and low-risk `getapprovaldetail`; missing template ID or `sp_no` must remain `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`, and API/permission/trusted-IP/scope failures remain `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`. WPROC1 adds Definition of Ready, Definition of Done, automatic-first gates, and non-self approval requirements. WAPC2F defaults to applicant `SMOKE002` and approver `SMOKE101`; both must be active, bound, visible, and not the same OA employee or WeCom userid. If `SMOKE101` is unavailable, stop and ask the user instead of switching to another approver. Do not skip stage order: `WECOM-CAPABILITY-POC-V1`/WCPC -> `wecom_hr_master_sync_v1`/WHMSLIVE -> `runtime_first_wecom_enablement`/WAPI+WOUA rerun -> `WOUA-FIX / WECOM-RUNTIME-READY-V1` -> `WAPC1 审批配置准备` -> `WAPC2 请假/补卡只读 POC` -> `WAPC2F 自动生成 POC 样件` -> `WAPC2 自动复跑` -> `WCBK1 回调只读 POC` -> `WACP3 补偿拉取 POC` -> `WADM1 镜像数据模型设计` -> `wecom_attendance_approval_mirror_v1` -> `oa_hr_emergency_mode_v1` -> `wecom_recovery_writeback_v1` -> `wecom_ruleops_v1`. UI and API work must distinguish `OA 主办`, `企微镜像`, and `OA 应急接管`. OA-driven Enterprise WeChat directory create/update/disable is live verified; for later HR/WeCom directory issues, first check configuration, permission, department, and data-specific causes before treating the capability as unfinished. - WMSG1 has verified real Enterprise WeChat personal-app delivery and Deeplink return: report `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T234431Z/summary.json` has `checks.message.status=OK`, `errcode=0`, and `recipientCount=1`; the user confirmed receiving "OA 运行就绪检查" and opening the OA notifications page from the message. This only clears message/deeplink runtime evidence; approval template ID, approval `sp_no`, callback config, and deep mirror work remain separate later gates. - WAPC1 has fixed the WeCom approval configuration preparation gate: first templates are leave, missed punch, outing, and overtime; each needs template ID, scope, fields, approver rules, visible scope, and self-built app permission; low-risk test `sp_no` must not contain procurement, contract, reimbursement, invoice, bank receipt, sensitive attachment, or real sensitive business material; callback URL/Token/EncodingAESKey are deployment-only values and must not be written to repo docs or Issue CSV. Do not implement real approval callback handling, deep mirror, emergency mode, recovery writeback, or RuleOps until a later approved Issue covers the POC or implementation. - WAPC2 has added the WeCom approval template/detail read-only POC runner for leave and missed punch. Use `npm run check:wecom-approval-poc`; pass template IDs with `--template=leave:` / `--template=missed_punch:` and low-risk test approval numbers with `--sp-no=leave:` / `--sp-no=missed_punch:`. The runner must use only `WECOM_AGENT_SECRET`, redact full template IDs and `sp_no`, and never output form values, attachments, comments, full userid, token, Secret, or raw payload. +- WPROC1 fixes the WeCom approval engineering process. Future WeCom work must satisfy route gate, capability gate, and implementation gate; use automatic runners before asking the user to do manual work. Manual work is limited to write approval, secrets/callback config, WeCom backend settings that cannot be API-driven, real-device confirmation, and risk decisions. High-risk stages require POC before implementation: callback signature/decryption/idempotency, compensation pull, mirror data model, then mirror implementation. - Approval-chain correctness can be proven by PC or automation, while Enterprise WeChat validates entry, binding,免登录, notification, deeplink, and mobile layout. - If real-device mobile validation is paused after automation passes, record the gate as `PAUSED`; do not close RS6/UI6/R6 mobile blockers until representative real-device confirmation is recorded. - Role-specific pages should use one shared OA/mobile framework and tailor summaries, entries, actions, and sensitive fields by role. Do not create unrelated UI systems for employee, approver, finance, admin, or CEO views. diff --git a/docs/产品口径.md b/docs/产品口径.md index 3b370f21..e181881d 100644 --- a/docs/产品口径.md +++ b/docs/产品口径.md @@ -21,7 +21,7 @@ - 企业微信打卡用于原始采集,保留其定位、人脸、Wi-Fi、规则与设备能力。 - OA 后续同步企业微信打卡规则、排班、记录、日报、月报和 HR/考勤审批镜像,形成正式考勤口径。 - 请假、补卡、外出、加班等考勤修正正常在企业微信完成;OA 只在应急模式下接管,并在企微恢复后 dry-run 和自动回写。 -- `wecom_hr_master_sync_v1` 已本地实现并部署公网完成受控验证;最终保持 `force_off`。WOUA-FIX 已按用户确认软归档 7 个缺企微测试账号,复检 OA active 5、企微 active 5、匹配 5、OA active 缺企微 0;剩余企微缺字段先接受不补,归档绑定保留审计。后续考勤/审批镜像、应急接管、恢复回写或 RuleOps 仍必须先完成 WAPC1 审批配置准备和后续 POC,再另建 `wecom_attendance_approval_mirror_v1`(承接旧口径 `wecom_native_approval_mirror_v1`)、`oa_hr_emergency_mode_v1`、`wecom_recovery_writeback_v1` 或 `wecom_ruleops_v1` 合同。 +- `wecom_hr_master_sync_v1` 已本地实现并部署公网完成受控验证;最终保持 `force_off`。WOUA-FIX 已按用户确认软归档 7 个缺企微测试账号,复检 OA active 5、企微 active 5、匹配 5、OA active 缺企微 0;剩余企微缺字段先接受不补,归档绑定保留审计。后续考勤/审批镜像、应急接管、恢复回写或 RuleOps 仍必须先完成 WAPC1、WAPC2、WAPC2F、WCBK1、WACP3 和 WADM1,再另建 `wecom_attendance_approval_mirror_v1`(承接旧口径 `wecom_native_approval_mirror_v1`)、`oa_hr_emergency_mode_v1`、`wecom_recovery_writeback_v1` 或 `wecom_ruleops_v1` 合同。 ### P0-3 按域镜像定义 - 企微主办域镜像到 OA:通讯录/人事助手、打卡、请假、补卡、外出、加班、假期余额和 HR/考勤规则。 @@ -36,8 +36,8 @@ ### P0-5 WDRG 开发路线图门禁 - WDRG 后采用“路线图门禁 + 单功能 Issue CSV”:路线图只控制阶段顺序、准入/退出门禁、并行规则和禁止跳阶段,具体功能仍单独方案、单独 Issue CSV、单独验证。 -- 当前企微优先 HR/考勤路线顺序固定为:`WECOM-CAPABILITY-POC-V1` -> `wecom_hr_master_sync_v1` -> `runtime_first_wecom_enablement` -> `WOUA-FIX / WECOM-RUNTIME-READY-V1` -> `WAPC1 审批配置准备` -> `wecom_attendance_approval_mirror_v1` -> `oa_hr_emergency_mode_v1` -> `wecom_recovery_writeback_v1` -> `wecom_ruleops_v1`。 -- `WECOM-CAPABILITY-POC-V1` 已由 WCPC 收口,WHMS/WHMSLIVE 已完成 HR 主数据镜像实现和受控公网验证,WOUA-FIX 已完成测试账号差异收口;WRV1/WRA1/WMSG1 固定运行入口、OAuth/绑定、脱敏消息、Deeplink、通讯录、人事助手和打卡只读门禁。后续不得跳过 WAPC1 审批模板配置准备、低风险 `sp_no` 和真实回调配置,直接开发考勤/审批镜像、OA 应急接管、恢复回写或 RuleOps 正式写入。 +- 当前企微优先 HR/考勤路线顺序固定为:`WECOM-CAPABILITY-POC-V1` -> `wecom_hr_master_sync_v1` -> `runtime_first_wecom_enablement` -> `WOUA-FIX / WECOM-RUNTIME-READY-V1` -> `WAPC1 审批配置准备` -> `WAPC2 请假/补卡只读 POC` -> `WAPC2F 自动生成 POC 样件` -> `WAPC2 自动复跑` -> `WCBK1 回调只读 POC` -> `WACP3 补偿拉取 POC` -> `WADM1 镜像数据模型设计` -> `wecom_attendance_approval_mirror_v1` -> `oa_hr_emergency_mode_v1` -> `wecom_recovery_writeback_v1` -> `wecom_ruleops_v1`。 +- `WECOM-CAPABILITY-POC-V1` 已由 WCPC 收口,WHMS/WHMSLIVE 已完成 HR 主数据镜像实现和受控公网验证,WOUA-FIX 已完成测试账号差异收口;WRV1/WRA1/WMSG1 固定运行入口、OAuth/绑定、脱敏消息、Deeplink、通讯录、人事助手和打卡只读门禁。后续不得跳过 WAPC2F 自动样件、真实回调 POC、补偿拉取 POC 和镜像数据模型设计,直接开发考勤/审批镜像、OA 应急接管、恢复回写或 RuleOps 正式写入。 - 线上缺陷、正式使用阻断、真实反馈扫尾和 QA-only 脚本维护可以另开合同并行;采购、合同、报销、付款、AP、代账和高敏附件继续 OA 主办,不混入企微 HR/考勤路线。 - 路线图事实源为 [企微优先开发路线图](./企微优先开发路线图.md);该路线图不代表任何运行时迁移能力已完成。 - API 和 Secret 事实源为 [企微 API 能力目录](./企微API能力目录.md):通讯录用 `WECOM_CONTACT_SECRET`;人事助手、打卡、消息和 OAuth 默认用 `WECOM_AGENT_SECRET`;不得在运行时代码里轮询多个 Secret 试错。 @@ -45,14 +45,14 @@ ### P0-6 WCP1 企业微信能力 POC 结论 - WCP1 已完成 QA-only 只读 POC,历史结论为 `PAUSE_FOR_CONFIG`;该阻断已由 WCPC 复跑收口。 - 已可复用:工作台应用 token、核心配置、HCLT 通讯录 create/update/disable 证据、通讯录部门读取、人事助手字段配置读取;WCPC 又确认既有在职测试号的通讯录成员读取、人事助手花名册读取、打卡短窗口记录/规则读取和假期余额读取可用。 -- WCP1 初始缺口已留痕:通讯录测试成员读取 `wecom_errcode_48009`、人事助手测试员工读取 `wecom_errcode_60021`、打卡同步开关、审批模板 ID、测试审批单号、假期权限 `wecom_errcode_301062`、回调 URL/Token/AESKey。当前仍未补齐的是审批模板 ID、测试审批单号、真实回调配置和 HR 写接口 POC。 +- WCP1 初始缺口已留痕:通讯录测试成员读取 `wecom_errcode_48009`、人事助手测试员工读取 `wecom_errcode_60021`、打卡同步开关、审批模板 ID、测试审批单号、假期权限 `wecom_errcode_301062`、回调 URL/Token/AESKey。当前仍未补齐的是审批模板 ID、测试审批单号、真实回调配置、补偿拉取、镜像数据模型和 HR 写接口 POC。 - WCP1 报告继续作为初始配置缺口证据保留,当前 HR 主数据镜像准入以 WCPC 结论为准。 ### P0-7 WCPC 配置复跑口径 - WCPC 只做企业微信后台配置收口和只读 POC 复跑,不改业务代码、不部署、不持久写服务器 `.env`。 - 已按用户要求自动查找并使用既有在职低风险测试号 `SMOKE002/测试员工` 复跑;报告和文档只记录脱敏企业微信 userid 前缀 `oa_smoke***`,不得使用已离职/禁用的 `HRWDTEST-20260517214548` 作为主测试号。 - 复跑报告为远端 `/tmp/wecom-capability-poc-wcpc-smoke002/summary.json`,结论 `GO_TO_HR_MASTER_SYNC`,`nextStageAllowed=true`,`blockingCapabilities=[]`。 -- WCPC 已由 WHMS 承接;审批模板 ID、审批单号 `sp_no`、真实回调配置和 HR 写接口仍需后续独立合同处理。WAPC1 已固定审批配置准备清单,但不得据此直接跳到考勤/审批镜像、OA 应急接管、恢复回写或 RuleOps。 +- WCPC 已由 WHMS 承接;审批模板 ID、审批单号 `sp_no`、真实回调配置、补偿拉取、镜像数据模型和 HR 写接口仍需后续独立合同处理。WAPC1/WAPC2 已固定配置准备和只读 POC,但不得据此直接跳到考勤/审批镜像、OA 应急接管、恢复回写或 RuleOps。 ### P0-8 WHMS 企微 HR 主数据镜像口径 - WHMS 已本地实现并部署验证 `wecom_hr_master_sync_v1`,默认和最终均为 `force_off`,未执行生产真实员工批量 apply。 @@ -62,7 +62,7 @@ - WHMSLIVE 公网验证中,`SMOKE002/测试员工`(脱敏 `oa_smoke***`)因企微侧缺手机号、邮箱和部门按 `missing_required_field` 跳过,证明缺字段不会写入占位数据;普通员工访问同步 API 已验证为 403。 - 已有 OA 员工只更新安全主数据字段,不覆盖银行账户、身份证、工资、合同附件或历史审批。 - WAPI 后 WHMS/WOUA 读取策略修正为通讯录 `user/list_id` + 可选成员详情 + 人事助手 `get_staff_info`,通讯录用 `WECOM_CONTACT_SECRET`,人事助手用 `WECOM_AGENT_SECRET`,不再靠 fallback 试错。 -- WHMS/WOUA-FIX 不代表考勤/审批镜像、审批回调、OA 应急接管、恢复回写或 RuleOps 已完成;WRA1 后 WRV1 的 `PASS_WITH_CONFIG_GAPS` 只代表运行优先主链路可用且仍有审批/回调配置缺口;WMSG1 只证明消息和 Deeplink 可用;WAPC1 只证明审批配置准备清单已固化,之后再判断是否进入模板/`sp_no`/回调 POC 或另建 `wecom_attendance_approval_mirror_v1`。 +- WHMS/WOUA-FIX 不代表考勤/审批镜像、审批回调、OA 应急接管、恢复回写或 RuleOps 已完成;WRA1 后 WRV1 的 `PASS_WITH_CONFIG_GAPS` 只代表运行优先主链路可用且仍有审批/回调配置缺口;WMSG1 只证明消息和 Deeplink 可用;WAPC1 只证明审批配置准备清单已固化;WAPC2 只证明只读 runner 已具备。WPROC1 后,下一步先做 WAPC2F 自动样件、WAPC2 自动复跑、WCBK1、WACP3 和 WADM1,不直接另建 `wecom_attendance_approval_mirror_v1`。 --- diff --git a/docs/企微API能力目录.md b/docs/企微API能力目录.md index 683ad566..a48cfe1f 100644 --- a/docs/企微API能力目录.md +++ b/docs/企微API能力目录.md @@ -2,8 +2,8 @@ **文档状态**:当前企微 API 调研与本项目使用事实源。 **分类**:集成事实源 / API 能力目录。 -**适用时间**:WAPI / WAPC1 / WAPC2 之后。 -**关联 Issue**:`WAPI,WAPC1,WAPC2`。 +**适用时间**:WAPI / WAPC1 / WAPC2 / WPROC1 之后。 +**关联 Issue**:`WAPI,WAPC1,WAPC2,WPROC1`。 **最近核对**:2026-05-19。 **不得误读**:本文只记录本项目会用到的企业微信官方 API 摘要、链接和项目决策,不复制官方文档全文,不保存 Secret、access token、完整 userid、手机号、邮箱或企微原始 payload。官方文档和企业微信后台权限配置始终是最终依据。 @@ -13,6 +13,8 @@ - 每个企微 Issue 必须明确接口路径、请求方法、Secret 来源、应用可见范围、可信 IP、回调/模板要求、读写边界、脱敏输出和 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG` 语义。 - 产品 UI 支持不等于开放 API 支持。入职、转正、离职、工资条确认、考勤确认等人事助手产品能力,只有在官方 API 明确支持并通过 POC 后才能进入自动化实现。 - 生产写接口、真实员工批量同步、企微规则写入、应急模式开启和恢复回写都必须另建合同并获得明确批准。 +- WPROC1 后默认自动化优先:能用 runner 自动生成、自动检查、自动复跑的,不要求人工手动操作;人工只处理写入批准、Secret/Token/EncodingAESKey 配置、企微后台无法 API 化配置、真机确认和风险拍板。 +- 审批类 POC 默认禁止自审;WAPC2F 默认测试链为申请人 `SMOKE002`、审批人 `SMOKE101`,两者必须 active、已绑定企微、可见、不是同一 OA 员工且不是同一企微 userid。若 `SMOKE101` 不可用,不自动换人,返回配置缺口并问答确认。 ## 2. Secret 矩阵 @@ -56,7 +58,7 @@ | 审批申请详情 | [获取审批申请详情](https://developer.work.weixin.qq.com/document/path/91983) | `/cgi-bin/oa/getapprovaldetail` | `POST` | `WECOM_AGENT_SECRET` | `POC_RUNNER_READY_NEEDS_CONFIG` | WAPC2 已新增低风险 `sp_no` 只读 POC runner;测试单不得包含采购、合同、报销、发票、银行回单或高敏附件。 | | 审批状态回调 | [审批申请状态变化回调通知](https://developer.work.weixin.qq.com/document/path/91815) | 事件回调 | `POST` 事件 | `WECOM_AGENT_SECRET` 所属应用 | `NEEDS_CONFIG` | 需要真实回调 URL、Token、EncodingAESKey、验签、解密、幂等和重试设计;文档和报告只记录配置项名称,不保存密钥值。 | | 批量获取审批单号 | [批量获取审批单号](https://developer.work.weixin.qq.com/document/path/91816) | 官方审批单查询接口 | `POST` | `WECOM_AGENT_SECRET` | `NEEDS_API_POC` | 作为补偿拉取候选,WAPC1 后续 POC 前不得假定可用。 | -| 提交审批申请 | [提交审批申请](https://developer.work.weixin.qq.com/document/path/91853) | 官方提交审批接口 | `POST` | `WECOM_AGENT_SECRET` | `NOT_IN_CURRENT_SCOPE_WRITE` | 本项目当前不把 OA 主办报销、采购、合同、项目迁到企微原生审批。 | +| 提交审批申请 | [提交审批申请](https://developer.work.weixin.qq.com/document/path/91853) | 官方提交审批接口 | `POST` | `WECOM_AGENT_SECRET` | `WAPC2F_CANDIDATE_WRITE_POC` | 仅可用于 OA-POC 低风险请假/补卡测试审批单自动样件;默认 dry-run,live 写入需显式开关和批准,申请人/审批人必须非自审。OA 主办报销、采购、合同、项目不迁到企微原生审批。 | | 假期余额 | [获取成员假期余额](https://developer.work.weixin.qq.com/document/path/93376) | `/cgi-bin/oa/vacation/getuservacationquota` | `POST` | `WECOM_AGENT_SECRET` | `CAN_REUSE_NOW_OR_NEEDS_PERMISSION` | WCPC 已证明可读但历史有权限错误;后续作为考勤镜像的只读项。 | | 审批模板创建/更新 | [创建审批模板](https://developer.work.weixin.qq.com/document/path/97437)、[更新审批模板](https://developer.work.weixin.qq.com/document/path/97438) | 官方模板写接口 | `POST` | `WECOM_AGENT_SECRET` | `RULEOPS_LATER_WRITE` | 只允许 RuleOps 后期在人工确认、前后快照和回滚建议齐全时写入。 | @@ -85,13 +87,28 @@ WAPC2 将 WAPC1 的准备项先落为可运行的 QA-only 只读 POC,范围只 WAPC2 不代表真实回调、审批镜像、应急接管、恢复回写或 RuleOps 已实现。 -## 6. 运行优先结论 +## 6. WPROC1 后续门禁 + +WPROC1 将 WAPC2 之后的审批路线固定为: + +`WAPC2 -> WAPC2F 自动生成 POC 样件 -> WAPC2 自动复跑 -> WCBK1 回调只读 POC -> WACP3 补偿拉取 POC -> WADM1 镜像数据模型设计 -> wecom_attendance_approval_mirror_v1` + +门禁要求: + +- `WAPC2F` 只允许创建 OA-POC 前缀低风险测试模板和测试审批单;默认 dry-run,live 写入必须同时具备 CLI 写入参数和环境开关。 +- `WAPC2F` 固定 `WECOM_AGENT_SECRET`,不得 fallback 到通讯录、打卡或历史 HR assistant Secret。 +- `WAPC2F` 默认申请人 `SMOKE002`、审批人 `SMOKE101`;命中自审、同一企微 userid、不可见、未绑定或 inactive 时硬阻断。 +- `WCBK1` 必须先证明真实回调 URL 验证、验签、解密、幂等键和重复投递,不保存 Token、EncodingAESKey 或原始密文。 +- `WACP3` 必须先证明按时间窗口批量获取审批单号并可调用 `getapprovaldetail` 拉详情;缺权限、可信 IP 或可见范围时记录 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。 +- `WADM1` 必须先设计镜像字段、状态机、幂等键、索引、隐私保留和迁移回滚方案,再进入 schema 或业务代码实现。 + +## 7. 运行优先结论 - 近期优先利用:企业微信工作台入口、OAuth/免登、绑定、个人应用消息、OA deeplink、通讯录 userid 清单、可选成员详情、人事助手花名册读取、打卡记录和打卡规则读取。 -- 暂缓深度镜像:`wecom_attendance_approval_mirror_v1`、`oa_hr_emergency_mode_v1`、`wecom_recovery_writeback_v1`、`wecom_ruleops_v1` 均等 WOUA 差异收口或 WHMS 同步窗口决策、WAPC1 审批配置准备清单、WAPC2 请假/补卡只读 POC、外出/加班模板测试、真实回调配置和补偿拉取方案明确后再拆。 +- 暂缓深度镜像:`wecom_attendance_approval_mirror_v1`、`oa_hr_emergency_mode_v1`、`wecom_recovery_writeback_v1`、`wecom_ruleops_v1` 均等 WOUA 差异收口或 WHMS 同步窗口决策、WAPC1 审批配置准备清单、WAPC2 请假/补卡只读 POC、WAPC2F 自动样件、WCBK1 回调只读 POC、WACP3 补偿拉取 POC、WADM1 镜像数据模型设计、外出/加班模板测试和打卡细项明确后再拆。 - OA 主办边界不变:报销、采购、费用、合同、项目、付款批次、AP、代账交接、审计和高敏附件继续在 OA 内完成,只向企业微信发送脱敏提醒和 OA 链接。 -## 7. 后续使用要求 +## 8. 后续使用要求 - 新增企微能力前,先在本文补一行能力记录,再写 Issue CSV。 - POC 输出统一使用 `CAN_REUSE_NOW`、`NEEDS_CONFIG`、`NEEDS_API_POC`、`KEEP_OA_PRIMARY`、`NOT_SUPPORTED_BY_API`、`SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。 diff --git a/docs/企微优先开发路线图.md b/docs/企微优先开发路线图.md index 81fbf341..cf2649a2 100644 --- a/docs/企微优先开发路线图.md +++ b/docs/企微优先开发路线图.md @@ -2,10 +2,10 @@ **文档状态**:当前开发路线图事实源。 **分类**:开发治理 / 路线图。 -**适用时间**:WDRG / WCP1 / WHMSLIVE / WOUA / WAPI / WRRA / WOUA-FIX / WRV1 / WRA1 / WMSG1 / WAPC1 / WAPC2 之后。 -**关联 Issue**:`WDRG,WCP1,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WOUAFIX,WRV1,WRA1,WMSG1,WAPC1,WAPC2`。 +**适用时间**:WDRG / WCP1 / WHMSLIVE / WOUA / WAPI / WRRA / WOUA-FIX / WRV1 / WRA1 / WMSG1 / WAPC1 / WAPC2 / WPROC1 之后。 +**关联 Issue**:`WDRG,WCP1,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WOUAFIX,WRV1,WRA1,WMSG1,WAPC1,WAPC2,WPROC1`。 **最近审计**:2026-05-19。 -**不得误读**:本文只控制后续开发节奏、阶段顺序和门禁。WHMSLIVE 后只代表企微 HR 主数据镜像已部署并受控验证;WAPI 后进一步固定企微 API/Secret 口径并转为运行优先;WRRA 后明确 `PASS_WITH_FINDINGS` 只代表只读对账成功且存在差异,不代表企微考勤/审批镜像、OA 应急接管、恢复回写或 RuleOps 已完成运行时实现。WMSG1 只证明企业微信应用消息可达和 Deeplink 可回到 OA;WAPC1 只固化审批配置准备清单;WAPC2 只新增请假/补卡模板详情和低风险 `sp_no` 审批详情只读 POC,不代表真实回调或镜像能力已完成。 +**不得误读**:本文只控制后续开发节奏、阶段顺序和门禁。WHMSLIVE 后只代表企微 HR 主数据镜像已部署并受控验证;WAPI 后进一步固定企微 API/Secret 口径并转为运行优先;WRRA 后明确 `PASS_WITH_FINDINGS` 只代表只读对账成功且存在差异,不代表企微考勤/审批镜像、OA 应急接管、恢复回写或 RuleOps 已完成运行时实现。WMSG1 只证明企业微信应用消息可达和 Deeplink 可回到 OA;WAPC1 只固化审批配置准备清单;WAPC2 只新增请假/补卡模板详情和低风险 `sp_no` 审批详情只读 POC,不代表真实回调或镜像能力已完成。WPROC1 后,WAPC2 不直接放行深度镜像,必须先完成自动样件、回调、补偿拉取和镜像数据模型设计门禁。 ## 1. 路线图原则 @@ -35,6 +35,7 @@ | `WMSG1` | 已完成真机确认 | 使用现有 `check:wecom-runtime-ready` runner 单次发送脱敏企微应用消息;报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T234431Z/summary.json` 显示 `checks.message.status=OK`、`errcode=0`、`recipientCount=1`,用户确认收到“OA 运行就绪检查”并可点击进入 OA 通知页面。 | | `WAPC1` | 配置准备清单已固化 | WMSG1 后的下一步改为审批配置准备清单:首批关注请假、补卡、外出、加班模板;准备模板 ID、低风险测试 `sp_no`、真实回调 URL/Token/EncodingAESKey 和后续 POC 准入项。本阶段不接真实回调、不调用写接口、不进入深度镜像。 | | `WAPC2` | 已部署并公网只读复跑 | 新增 QA-only `npm run check:wecom-approval-poc`,范围先锁定请假和补卡;固定 `WECOM_AGENT_SECRET` 调用 `POST /cgi-bin/oa/gettemplatedetail` 与 `POST /cgi-bin/oa/getapprovaldetail`,报告只输出脱敏模板 ID/`sp_no` 前缀、字段/节点计数和错误分类。公网报告 `/app/artifacts/qa-flow/wecom-approval-poc-20260519T020429Z/summary.json` 为 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`:Secret 可用,但缺请假/补卡模板 ID 和两条低风险 `sp_no`,未伪造成 PASS。 | +| `WPROC1` | 路线与流程门禁已修正 | 固化三层门禁、Definition of Ready、Definition of Done、自动化优先和非自审规则。后续路线调整为 `WAPC2 -> WAPC2F 自动生成 POC 样件 -> WAPC2 自动复跑 -> WCBK1 回调只读 POC -> WACP3 补偿拉取 POC -> WADM1 镜像数据模型设计 -> wecom_attendance_approval_mirror_v1`。WAPC2F 默认测试链为 `SMOKE002 -> SMOKE101`,若 `SMOKE101` 不可用,不自动换人,先问答确认。 | ## 3. 阶段路线 @@ -43,10 +44,16 @@ | 1 | `WECOM-CAPABILITY-POC-V1` | 只读或低风险探测企微 API 能力,输出能力矩阵。 | WDRG 完成;企微后台权限、Secret、可信 IP、模板和可见范围按现状记录。 | 人事助手、通讯录、打卡、审批、假期余额、回调和权限配置均有 `CAN_REUSE_NOW`、`NEEDS_CONFIG`、`NEEDS_API_POC`、`KEEP_OA_PRIMARY` 或 `NOT_SUPPORTED_BY_API` 结论。 | | 2 | `wecom_hr_master_sync_v1` | 企微/人事助手员工、部门、主管、职位、联系方式和在职状态镜像到 OA。 | POC 证明人事助手/通讯录读取和回调能力可用,或明确缺口处理方式。 | WHMSLIVE 后已完成本地门禁、部署和受控公网验证;OA 可自动创建/更新员工档案、账号、角色、企微绑定和审计;最终 `force_off`,真实员工批量 apply 仍需单独批准;缺配置时记录 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。 | | 3 | `runtime_first_wecom_enablement` | 先把已可用企微能力用于系统运行:入口、免登/绑定、脱敏消息、deeplink、通讯录 userid 清单、人事助手读取、打卡读取和只读对账。 | WAPI API 目录和 Secret 矩阵完成;WOUA 按新读取策略复跑。 | WOUA-FIX 后 OA active 缺企微已清零;WRV1/WRA1 通过 `check:wecom-runtime-ready` 给出运行优先结论;WMSG1 已证明真实消息和 Deeplink 可用。`PASS_WITH_CONFIG_GAPS` 只允许继续入口、免登、消息和只读读取主链路,不放行深度镜像;审批模板、测试 `sp_no`、真实回调仍阻断 `wecom_attendance_approval_mirror_v1`。 | -| 4 | `wecom_attendance_approval_mirror_v1` | 企微打卡、请假、补卡、外出、加班、假期余额和审批历史镜像到 OA。 | 运行优先门禁完成且 WOUA 差异已收口或有明确处理决策;WAPC1 审批配置准备清单完成;WAPC2 请假/补卡模板详情与低风险 `sp_no` 只读 POC 完成;外出/加班模板和测试单、真实回调配置、打卡规则细项和补偿拉取 POC 均明确。 | OA 可查询企微 HR/考勤镜像、附件摘要、审批历史、考勤解释和审计;不把 OA 主办高敏审批迁到企微。 | -| 5 | `oa_hr_emergency_mode_v1` | 企业微信不可用时,由管理员人工开启 OA HR/考勤应急接管。 | 企微镜像数据可支撑对账;OA 应急入口、权限和审计方案明确。 | 管理员可填写原因、范围、预计结束时间和责任人后开启/关闭;应急单据带 `EMERGENCY` 标记。 | -| 6 | `wecom_recovery_writeback_v1` | 企微恢复后,OA 应急数据先 dry-run,再回写企微。 | 应急接管模式完成;企微写回接口、冲突规则和回滚策略已单独批准。 | 系统生成成功、失败、跳过和冲突清单;无冲突项可自动回写,冲突进入人工确认。 | -| 7 | `wecom_ruleops_v1` | AI 草拟企微规则、生成差异报告和 dry-run,人工确认后写入企微。 | 前述同步/回写链路稳定;企微规则 API 能力和权限已验证。 | 每次写入保存前后快照、确认人、API `errcode`、失败原因、回滚建议和审计记录。 | +| 4 | `WAPC1 / WAPC2` | 审批配置准备和请假/补卡模板详情、低风险审批详情只读 POC。 | 运行优先门禁完成;WMSG1 消息和 Deeplink 已确认。 | WAPC2 runner 已部署,缺模板 ID 或 `sp_no` 时真实记录 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`,不放行深度镜像。 | +| 5 | `WAPC2F 自动生成 POC 样件` | 尽量用 QA-only runner 自动创建 OA-POC 请假/补卡测试模板和低风险测试审批单。 | WAPC2 已证明 Secret 可用但缺模板或 `sp_no`;用户批准低风险企微测试样件写入。 | 默认 dry-run;live 写入必须显式开关;申请人 `SMOKE002`、审批人 `SMOKE101` 通过 active、绑定、可见和非自审预检;缺权限或不支持时记录 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。 | +| 6 | `WAPC2 自动复跑` | 使用 WAPC2F 生成的脱敏模板 ID 和 `sp_no` 自动复跑只读 POC。 | WAPC2F 生成全部或部分样件。 | 请假/补卡模板详情与审批详情可读为 `PASS_APPROVAL_POC`;部分缺项为 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`。 | +| 7 | `WCBK1 回调只读 POC` | 证明真实回调 URL 验证、验签、解密、幂等键和重复投递处理。 | 回调 URL、Token、EncodingAESKey 由部署环境配置;不得写入仓库或聊天。 | 真实回调可达、可验签/解密、重复投递幂等、失败重试语义明确;缺配置记录 `NEEDS_CONFIG`。 | +| 8 | `WACP3 补偿拉取 POC` | 证明按时间窗口批量获取审批单号并可拉取审批详情,作为回调丢失补偿。 | WAPC2 或 WAPC2F 至少能提供低风险样例;官方 API 和权限明确。 | 能按窗口拿到审批单号并拉详情;不能伪造成 PASS,权限或可信 IP 问题记录 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。 | +| 9 | `WADM1 镜像数据模型设计` | 先设计镜像字段、状态机、幂等键、索引、隐私保留和回滚方案。 | WAPC2/WAPC2F、WCBK1、WACP3 结论可支撑模型设计。 | 数据模型、状态流、幂等、索引、脱敏、审计和迁移回滚方案经 Issue CSV 固化后,才允许实现镜像。 | +| 10 | `wecom_attendance_approval_mirror_v1` | 企微打卡、请假、补卡、外出、加班、假期余额和审批历史镜像到 OA。 | 运行优先门禁完成且 WOUA 差异已收口或有明确处理决策;WAPC2F/WCBK1/WACP3/WADM1 均完成;外出/加班模板和打卡规则细项明确。 | OA 可查询企微 HR/考勤镜像、附件摘要、审批历史、考勤解释和审计;不把 OA 主办高敏审批迁到企微。 | +| 11 | `oa_hr_emergency_mode_v1` | 企业微信不可用时,由管理员人工开启 OA HR/考勤应急接管。 | 企微镜像数据可支撑对账;OA 应急入口、权限和审计方案明确。 | 管理员可填写原因、范围、预计结束时间和责任人后开启/关闭;应急单据带 `EMERGENCY` 标记。 | +| 12 | `wecom_recovery_writeback_v1` | 企微恢复后,OA 应急数据先 dry-run,再回写企微。 | 应急接管模式完成;企微写回接口、冲突规则和回滚策略已单独批准。 | 系统生成成功、失败、跳过和冲突清单;无冲突项可自动回写,冲突进入人工确认。 | +| 13 | `wecom_ruleops_v1` | AI 草拟企微规则、生成差异报告和 dry-run,人工确认后写入企微。 | 前述同步/回写链路稳定;企微规则 API 能力和权限已验证。 | 每次写入保存前后快照、确认人、API `errcode`、失败原因、回滚建议和审计记录。 | ## 4. 每阶段固定门禁 @@ -123,7 +130,7 @@ POC 默认只读或低风险探测。任何生产写操作、企微规则写入 - `callback.config=NEEDS_CONFIG`:本轮只读报告未证明真实回调配置存在。 - `hr.staff_update_classification=NEEDS_API_POC`:人事助手资料更新属于写接口,需单独批准后再做低风险 POC。 -WCPC 已允许进入 `wecom_hr_master_sync_v1`。WHMS 已承接该阶段,完成本地实现、部署和受控公网验证;考勤/审批镜像仍需先补审批模板、审批单、回调配置并另建 `wecom_attendance_approval_mirror_v1` 合同,不得把 WCPC 或 WHMS 误读为考勤/审批运行时迁移已完成。 +WCPC 已允许进入 `wecom_hr_master_sync_v1`。WHMS 已承接该阶段,完成本地实现、部署和受控公网验证;考勤/审批镜像仍需先补审批模板、审批单、回调配置、补偿拉取和镜像数据模型,并按 WPROC1 顺序完成 WAPC2F/WCBK1/WACP3/WADM1 后再另建 `wecom_attendance_approval_mirror_v1` 合同,不得把 WCPC 或 WHMS 误读为考勤/审批运行时迁移已完成。 ## 9. WHMS HR 主数据镜像状态 @@ -150,7 +157,7 @@ WCPC 已允许进入 `wecom_hr_master_sync_v1`。WHMS 已承接该阶段,完 - 公网验证窗口中临时将 `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`;后续若要正式批量同步真实员工,必须另行批准并先处理企微必填字段质量。 -- 下一步先处理 WOUA 用户一致性差异或明确 WHMS 批量同步窗口;`wecom_attendance_approval_mirror_v1` 暂缓到审批模板、测试审批单号、真实回调配置和打卡细项 POC 明确后再另建合同。 +- 下一步先处理 WOUA 用户一致性差异或明确 WHMS 批量同步窗口;`wecom_attendance_approval_mirror_v1` 暂缓到 WAPC2F 自动样件、WAPC2 自动复跑、真实回调 POC、补偿拉取 POC、镜像数据模型和打卡细项明确后再另建合同。 ## 10. WRRA 路线修正与下一阶段 @@ -163,7 +170,7 @@ WRRA 将 WAPI/WOUA 后的路线门禁修正为“运行优先 + 差异收口先 - WRA1 后,`WECOM_CHECKIN_SYNC_ENABLED` 只作为正式考勤同步开关;QA-only 打卡短窗口读取可以显式绕过该开关做只读探测,报告记录 `readable_sync_disabled`,但不得启动正式同步批次。 - 报告输出到 `artifacts/qa-flow/wecom-runtime-ready-/summary.json`,结论限定为 `PASS_RUNTIME_READY`、`PASS_WITH_CONFIG_GAPS` 或 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。 - 对剩余企微缺字段保持 accepted finding,不补企微资料;如后续要补字段或 WHMS 真实员工批量 apply,必须另建写入合同。 -- `wecom_attendance_approval_mirror_v1` 继续暂缓,直到审批模板 ID、测试 `sp_no`、真实回调配置、回调验签/解密/幂等和打卡细项 POC 明确。 +- `wecom_attendance_approval_mirror_v1` 继续暂缓,直到审批模板 ID、测试 `sp_no`、WAPC2F 自动样件、真实回调配置、回调验签/解密/幂等、补偿拉取、镜像数据模型和打卡细项 POC 明确。 ## 11. WAPC1 审批配置准备清单 @@ -205,4 +212,12 @@ WAPC2 承接 WAPC1 的配置准备清单,但范围先收窄到请假和补卡 - 报告输出到 `artifacts/qa-flow/wecom-approval-poc-/summary.json`,只记录类型、配置状态、脱敏 ID 前缀、字段类型计数、审批节点计数和错误分类。 - 若缺模板 ID 或低风险测试 `sp_no`,结论必须为 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`;若权限、可信 IP、可见范围、Secret 或企微 API 错误阻断,结论必须为 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。 -WAPC2 通过后,仍需补外出/加班模板 POC、真实回调 URL/Token/EncodingAESKey 配置验证、事件验签/解密/幂等和补偿拉取方案,才能拆 `wecom_attendance_approval_mirror_v1`。 +WAPC2 通过后,下一步不是直接进入 `wecom_attendance_approval_mirror_v1`。WPROC1 固定后续必须先做: + +1. `WAPC2F 自动生成 POC 样件`:默认申请人 `SMOKE002`、审批人 `SMOKE101`,两者必须 active、已绑定企微、可见、不是同一 OA 员工且不是同一企微 userid;若 `SMOKE101` 不可用,不自动换人,先问答确认。 +2. `WAPC2 自动复跑`:使用自动生成的脱敏模板 ID 和 `sp_no` 复跑只读 POC。 +3. `WCBK1 回调只读 POC`:证明 URL 验证、验签、解密、幂等和重复投递。 +4. `WACP3 补偿拉取 POC`:证明按时间窗口拿到审批单号并可拉取审批详情。 +5. `WADM1 镜像数据模型设计`:先设计字段、状态机、幂等键、索引和隐私保留边界。 + +上述门禁完成前,不拆 `wecom_attendance_approval_mirror_v1`。 diff --git a/docs/开发交付与变更管理规约.md b/docs/开发交付与变更管理规约.md index ab90217c..a661f1f9 100644 --- a/docs/开发交付与变更管理规约.md +++ b/docs/开发交付与变更管理规约.md @@ -3,8 +3,8 @@ **文档状态**:当前开发交付事实源。 **分类**:开发治理。 **适用范围**:hyb-oa 所有非微小代码、文档、测试、脚本和部署准备变更。 -**关联 Issue**:`GOV8,WDRG`。 -**最近审计**:2026-05-18。 +**关联 Issue**:`GOV8,WDRG,WPROC1`。 +**最近审计**:2026-05-19。 **不得误读**:本文定义开发和变更流程,不替代具体业务 PRD、模块规约或测试规约。 **路线口径**:开发必须围绕最新 Issue CSV 执行;WDRG 后企微优先 HR/考勤改造必须先读 [企微优先开发路线图](./企微优先开发路线图.md),再按单功能 Issue CSV 实施。采购、合同、报销、财务、AP、代账和高敏附件继续 OA 主办,ERP 未来不接入 OA。 @@ -22,7 +22,7 @@ WDRG 后,企微优先 HR/考勤改造增加一层路线图门禁;WAPI/WRRA `需求事实源 -> 设计门禁 -> 路线图门禁 -> 企微能力 POC -> 单功能 Issue CSV -> 方案批准 -> 开发实现 -> review -> QA 回归 -> 部署 / 公网验证` -路线图只控制顺序、边界、准入和退出条件;具体接口、schema、页面、权限、审计和测试仍必须在单功能 Issue CSV 中声明。阶段未退出前不得跳阶段:WOUA-FIX 已完成测试账号差异收口,但 `PASS_WITH_FINDINGS` 的剩余缺字段/归档绑定不直接放行深度镜像;WRA1 已完成 `WECOM-RUNTIME-READY-V1` 的运行入口、OAuth/绑定、脱敏消息、通讯录、人事助手和打卡只读门禁修正;WMSG1 已完成真实应用消息和 Deeplink 确认。当前 `PASS_WITH_CONFIG_GAPS` 只表示运行优先主链路可用,WAPC1 只表示审批配置准备清单已固化;审批模板、低风险测试 `sp_no` 和真实回调配置仍必须在进入 `wecom_attendance_approval_mirror_v1` 前补齐并验证。 +路线图只控制顺序、边界、准入和退出条件;具体接口、schema、页面、权限、审计和测试仍必须在单功能 Issue CSV 中声明。阶段未退出前不得跳阶段:WOUA-FIX 已完成测试账号差异收口,但 `PASS_WITH_FINDINGS` 的剩余缺字段/归档绑定不直接放行深度镜像;WRA1 已完成 `WECOM-RUNTIME-READY-V1` 的运行入口、OAuth/绑定、脱敏消息、通讯录、人事助手和打卡只读门禁修正;WMSG1 已完成真实应用消息和 Deeplink 确认。当前 `PASS_WITH_CONFIG_GAPS` 只表示运行优先主链路可用,WAPC1 只表示审批配置准备清单已固化;WAPC2 只证明请假/补卡模板详情和审批详情只读 runner 已具备。WPROC1 后,审批镜像前必须先完成 WAPC2F 自动样件、WAPC2 自动复跑、WCBK1 回调只读 POC、WACP3 补偿拉取 POC 和 WADM1 镜像数据模型设计。 ## 2. Issue 生命周期 @@ -97,10 +97,49 @@ WDRG 后,企微优先 HR/考勤路线采用“路线图门禁 + 单功能 Issu 当前企微优先路线顺序固定为: -`WECOM-CAPABILITY-POC-V1 -> wecom_hr_master_sync_v1 -> runtime_first_wecom_enablement -> WOUA-FIX / WECOM-RUNTIME-READY-V1 -> WAPC1 审批配置准备 -> wecom_attendance_approval_mirror_v1 -> oa_hr_emergency_mode_v1 -> wecom_recovery_writeback_v1 -> wecom_ruleops_v1` +`WECOM-CAPABILITY-POC-V1 -> wecom_hr_master_sync_v1 -> runtime_first_wecom_enablement -> WOUA-FIX / WECOM-RUNTIME-READY-V1 -> WAPC1 审批配置准备 -> WAPC2 请假/补卡只读 POC -> WAPC2F 自动生成 POC 样件 -> WAPC2 自动复跑 -> WCBK1 回调只读 POC -> WACP3 补偿拉取 POC -> WADM1 镜像数据模型设计 -> wecom_attendance_approval_mirror_v1 -> oa_hr_emergency_mode_v1 -> wecom_recovery_writeback_v1 -> wecom_ruleops_v1` 允许并行处理线上缺陷、正式使用阻断、真实反馈扫尾和 QA-only 脚本维护;但采购、合同、报销、付款、AP、代账和高敏附件等 OA 主办域必须另开合同,不得混入企微 HR/考勤路线。 +### 2.4 三层门禁 + +企微后续开发默认采用三层门禁: + +| 门禁 | 作用 | 退出口径 | +| --- | --- | --- | +| 路线门禁 | 决定阶段顺序、禁止跳过项和是否允许并行 | 最新路线图、PRD 和 Issue CSV 不冲突 | +| 能力门禁 | 证明官方 API、Secret、权限、可信 IP、模板、回调和测试数据可用 | POC runner 返回 `PASS`、`NEEDS_CONFIG` 或真实 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG` | +| 实现门禁 | 控制代码、单测、回归、公网验证、状态回填和提交 | `Test_Method` 通过或真实 SKIP,事实源和 Issue 状态已回写 | + +Definition of Ready: + +- 已有 Issue CSV,且依赖项满足。 +- 已读对应事实源、[企微优先开发路线图](./企微优先开发路线图.md) 和 [企微 API 能力目录](./企微API能力目录.md)。 +- 明确做什么、不做什么、读写边界、Secret 来源和失败分类,不允许运行时猜 Secret。 +- 明确测试账号、申请人、审批人和自审校验;审批类 POC 默认不得自己申请自己审批。 +- 明确 live 写入开关、回滚或清理方式、脱敏报告边界和人工确认点。 + +Definition of Done: + +- `Test_Method` 全部执行并真实通过,或按缺配置规则记录 `NEEDS_CONFIG` / `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。 +- Issue 状态和 Notes 反映实际结果,不用口头判断代替证据。 +- 文档事实源、索引、矩阵和必要 skill 已同步。 +- 本地门禁通过;面向公网或企微可测的能力已部署并通过 `/ready`、runtime smoke、public bundle scan 或对应 live runner。 +- 已完成中文 commit,并在最终说明中区分“已部署”和“仅本地验证”。 + +自动化优先规则: + +- 能用 runner 自动生成、自动检查、自动复跑的,不要求人工手动操作。 +- 人工只处理写入批准、Secret/Token/EncodingAESKey 配置、企微后台无法 API 化的配置、真机确认和风险拍板。 +- 缺配置必须输出 `NEEDS_CONFIG` 或 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`,不得伪造成 PASS。 + +高风险能力进入实现前必须先有 POC: + +- 真实回调先证明 URL 验证、验签、解密、幂等和重复投递。 +- 补偿拉取先证明按时间窗口拿到审批单号并可拉取审批详情。 +- 镜像表先设计字段、状态机、幂等键、索引和隐私保留边界。 +- 应急接管和恢复回写必须等镜像稳定后再做。 + ## 3. 开发边界 - 每次只做当前 Issue 范围内的事,不顺手重构无关模块。 diff --git a/docs/文档事实源状态矩阵.md b/docs/文档事实源状态矩阵.md index 93dd9f35..262cdea5 100644 --- a/docs/文档事实源状态矩阵.md +++ b/docs/文档事实源状态矩阵.md @@ -78,6 +78,7 @@ | `WMSG1` | `issues/2026-05-19_07-41-37-wecom-message-live-verify-v1.csv` | `EVIDENCE` | 企微应用消息实发与 Deeplink 真机验证已完成:远端单次设置 `WECOM_RUNTIME_TEST_SEND=1`,报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T234431Z/summary.json` 显示消息 `errcode=0`、`recipientCount=1`;用户确认收到“OA 运行就绪检查”并可点击进入 OA 通知页面;审批模板、测试 `sp_no` 和真实回调仍为后续配置缺口 | | `WAPC1` | `issues/2026-05-19_08-44-58-wecom-approval-config-prep-v1.csv` | `EVIDENCE` | 企微审批配置准备清单已完成:WMSG1 后不直接进入深度镜像;首批模板为请假、补卡、外出、加班;模板 ID、低风险 `sp_no`、真实回调配置项、验签/解密/幂等/重试和补偿拉取准入已固化;本轮不改业务代码、不部署、不接真实回调、不调用企微写接口 | | `WAPC2` | `issues/2026-05-19_09-34-16-wecom-approval-template-spno-poc-v1.csv` | `CURRENT` | 企微审批模板与低风险 `sp_no` 只读 POC 已部署并公网复跑:新增 `check:wecom-approval-poc` QA-only runner 和只读集成服务,范围请假/补卡,固定 `WECOM_AGENT_SECRET` 调用 `gettemplatedetail`/`getapprovaldetail`;远端报告 `/app/artifacts/qa-flow/wecom-approval-poc-20260519T020429Z/summary.json` 为 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`,缺模板或 `sp_no` 不放行深度镜像 | +| `WPROC1` | `issues/2026-05-19_10-43-50-wecom-process-route-engineering-v1.csv` | `CURRENT` | 企微路线与开发流程工程化修正:docs-only/contract-only 固化三层门禁、Definition of Ready、Definition of Done、自动化优先、非自审和高风险 POC 前置;修正 WAPC2F 默认链为 `SMOKE002 -> SMOKE101`,WAPC2 后不得直接进入深度镜像 | 旧 Issue CSV 保留为历史审计证据:不删除、不批量回写、不移动到 `docs/archive/` 或其他归档目录。新连续合同如替代旧合同,只在新合同 `Notes` 或文档索引中说明 supersedes。 @@ -85,24 +86,24 @@ | Doc_ID | Path | Category | Authority | Status | Owner | Related_Issues | Evidence | Supersedes | Last_Audited | Audit_Method | Risk | Notes | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| `IDX` | `docs/文档索引.md` | 入口索引 | 最高文档入口 | `CURRENT` | product/dev | `GOV8,QAOPS9,P2D,P2-ORG,P2-FIN-DECISION,P2-FIN-V1,P2-OCR-SAMPLE,P2Q,P2AUTO,P2AF,P2-FIN-LIVE-DECISION,P2-FIN-LIVE,PRELAUNCH,CASHIER-VOUCHER-V1,LAUNCH-DEPLOY-FINANCE,FIN-PROD-ENABLE,ACCOUNTING-HANDOFF-V1,SYSTEM-COMPLETE-GATE,LAUNCH-OPS-V1,REQ-COMPLETE-AUDIT,ATTV1,LAUNCH-AUTO-OPS-V1,AUTO-REMAINING-CLOSEOUT,HR-WECOM-DIRECTORY-V1,WFOC,DBWFOC,WFDG,WDRG,WCP1,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WOUAFIX,WRV1,WRA1,WMSG1,WAPC1,WAPC2` | `rg` | none | 2026-05-19 | `node scripts/qa/audit-docs.mjs --check-registry` | medium | 判断当前该读什么 | -| `REG` | `docs/文档事实源状态矩阵.md` | 文档台账 | 文档分类和状态事实源 | `CURRENT` | product/dev | `GOV8,QAOPS9,P2D,P2-ORG,P2-FIN-DECISION,P2-FIN-V1,P2-OCR-SAMPLE,P2Q,P2AUTO,P2AF,P2-FIN-LIVE-DECISION,P2-FIN-LIVE,PRELAUNCH,CASHIER-VOUCHER-V1,LAUNCH-DEPLOY-FINANCE,FIN-PROD-ENABLE,ACCOUNTING-HANDOFF-V1,SYSTEM-COMPLETE-GATE,LAUNCH-OPS-V1,REQ-COMPLETE-AUDIT,ATTV1,LAUNCH-AUTO-OPS-V1,AUTO-REMAINING-CLOSEOUT,HR-WECOM-DIRECTORY-V1,WFOC,DBWFOC,WFDG,WDRG,WCP1,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WOUAFIX,WRV1,WRA1,WMSG1,WAPC1,WAPC2` | `audit-docs` | none | 2026-05-19 | `audit-docs --check-registry` | medium | 判断文档权威性 | +| `IDX` | `docs/文档索引.md` | 入口索引 | 最高文档入口 | `CURRENT` | product/dev | `GOV8,QAOPS9,P2D,P2-ORG,P2-FIN-DECISION,P2-FIN-V1,P2-OCR-SAMPLE,P2Q,P2AUTO,P2AF,P2-FIN-LIVE-DECISION,P2-FIN-LIVE,PRELAUNCH,CASHIER-VOUCHER-V1,LAUNCH-DEPLOY-FINANCE,FIN-PROD-ENABLE,ACCOUNTING-HANDOFF-V1,SYSTEM-COMPLETE-GATE,LAUNCH-OPS-V1,REQ-COMPLETE-AUDIT,ATTV1,LAUNCH-AUTO-OPS-V1,AUTO-REMAINING-CLOSEOUT,HR-WECOM-DIRECTORY-V1,WFOC,DBWFOC,WFDG,WDRG,WCP1,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WOUAFIX,WRV1,WRA1,WMSG1,WAPC1,WAPC2,WPROC1` | `rg` | none | 2026-05-19 | `node scripts/qa/audit-docs.mjs --check-registry` | medium | 判断当前该读什么 | +| `REG` | `docs/文档事实源状态矩阵.md` | 文档台账 | 文档分类和状态事实源 | `CURRENT` | product/dev | `GOV8,QAOPS9,P2D,P2-ORG,P2-FIN-DECISION,P2-FIN-V1,P2-OCR-SAMPLE,P2Q,P2AUTO,P2AF,P2-FIN-LIVE-DECISION,P2-FIN-LIVE,PRELAUNCH,CASHIER-VOUCHER-V1,LAUNCH-DEPLOY-FINANCE,FIN-PROD-ENABLE,ACCOUNTING-HANDOFF-V1,SYSTEM-COMPLETE-GATE,LAUNCH-OPS-V1,REQ-COMPLETE-AUDIT,ATTV1,LAUNCH-AUTO-OPS-V1,AUTO-REMAINING-CLOSEOUT,HR-WECOM-DIRECTORY-V1,WFOC,DBWFOC,WFDG,WDRG,WCP1,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WOUAFIX,WRV1,WRA1,WMSG1,WAPC1,WAPC2,WPROC1` | `audit-docs` | none | 2026-05-19 | `audit-docs --check-registry` | medium | 判断文档权威性 | | `PRD-MVP` | `docs/海音达OA-MVP需求规格说明书.md` | 需求事实源 | PRD 主事实源 | `CURRENT` | product | `REQ8,P2T,GOV8,HR-WECOM-DIRECTORY-V1,WFOC,DBWFOC,WFDG,WDRG,WCP1,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WAPC1` | Issue CSV | `docs/requirements-specification.md` | 2026-05-19 | `rg` | high | WAPC1 后定义 HR 主数据镜像读取口径、运行优先、WOUA 差异收口、消息实发和审批配置准备边界;ERP 未来不接入 OA | | `PRODUCT-SCOPE` | `docs/产品口径.md` | 需求事实源 | 产品边界事实源 | `CURRENT` | product | `REQ8,P2T,WFDG,WDRG,WCP1,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WAPC1` | `rg` | none | 2026-05-19 | `rg` | high | 记录已拍板产品边界、企微/OA 设计门禁、开发路线图、WCPC 准入结论、WHMS 部署验证、WAPI 运行优先、WRRA 差异收口和 WAPC1 审批配置准备口径 | | `DESIGN-UI` | `docs/产品设计规则.md` | 设计事实源 | PC/移动/企业微信设计事实源 | `CURRENT` | design/frontend | `MIA7,MIF7,GOV8,DG8,DG9,WFDG` | Playwright/视觉审查/DG8/DG9/WFDG | none | 2026-05-18 | `rg` | high | 页面改动必须读取;DG8 后飞书为主 UI/布局参考;DG9 后按页面分层和样板选型;WFDG 后区分 OA 主办、企微镜像和 OA 应急接管 | -| `ROADMAP-WECOM` | `docs/企微优先开发路线图.md` | 开发治理 | 企微优先开发路线图事实源 | `CURRENT` | product/dev | `WDRG,WCP1,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WOUAFIX,WRV1,WRA1,WMSG1,WAPC1,WAPC2` | Issue CSV | none | 2026-05-19 | `rg` | high | WRV1/WRA1/WMSG1/WAPC1/WAPC2 后记录企微 HR/考勤路线阶段顺序、API/Secret 口径、运行优先门禁、消息实发真机验证、审批配置准备、请假/补卡只读 POC、用户一致性差异收口和禁止跳阶段 | -| `WECOM-API-CATALOG` | `docs/企微API能力目录.md` | 集成事实源 | 企微 API 能力目录和 Secret 矩阵事实源 | `CURRENT` | product/backend/qa | `WAPI,WRRA,WAPC1,WAPC2` | 官方企业微信开发者中心链接/Issue CSV | none | 2026-05-19 | `rg` | high | 企微开发先读;只保存摘要、链接和项目决策,不保存 Secret、token、完整 userid、手机号、邮箱或原始 payload;WAPC2 后审批模板/审批详情只读 POC 已建立,深度镜像等待模板、低风险 sp_no、真实回调和补偿拉取 POC | -| `DELIVERY` | `docs/开发交付与变更管理规约.md` | 开发治理 | 开发交付事实源 | `CURRENT` | dev/qa | `GOV8,WDRG,WRRA,WAPC1` | `rg` | none | 2026-05-19 | `rg` | high | Issue、review、commit、交付规则;WAPC1 后采用路线图门禁 + 运行优先 + WOUA 差异收口 + 审批配置准备 + 单功能 Issue CSV | -| `QA-GATE` | `docs/测试规约与回归门禁.md` | 测试验收 | 测试和回归门禁事实源 | `CURRENT` | qa | `QAF8,GOV8` | 回归脚本/Playwright | none | 2026-05-13 | `rg` | high | 测试计划和 DONE 门禁 | +| `ROADMAP-WECOM` | `docs/企微优先开发路线图.md` | 开发治理 | 企微优先开发路线图事实源 | `CURRENT` | product/dev | `WDRG,WCP1,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WOUAFIX,WRV1,WRA1,WMSG1,WAPC1,WAPC2,WPROC1` | Issue CSV | none | 2026-05-19 | `rg` | high | WPROC1 后记录企微 HR/考勤路线阶段顺序、API/Secret 口径、运行优先、消息实发、审批配置、只读 POC、WAPC2F 自动样件、WCBK1 回调、WACP3 补偿拉取、WADM1 模型设计和禁止跳阶段 | +| `WECOM-API-CATALOG` | `docs/企微API能力目录.md` | 集成事实源 | 企微 API 能力目录和 Secret 矩阵事实源 | `CURRENT` | product/backend/qa | `WAPI,WRRA,WAPC1,WAPC2,WPROC1` | 官方企业微信开发者中心链接/Issue CSV | none | 2026-05-19 | `rg` | high | 企微开发先读;只保存摘要、链接和项目决策,不保存 Secret、token、完整 userid、手机号、邮箱或原始 payload;WPROC1 后深度镜像等待自动样件、回调、补偿拉取和数据模型设计 | +| `DELIVERY` | `docs/开发交付与变更管理规约.md` | 开发治理 | 开发交付事实源 | `CURRENT` | dev/qa | `GOV8,WDRG,WRRA,WAPC1,WPROC1` | `rg` | none | 2026-05-19 | `rg` | high | Issue、review、commit、交付规则;WPROC1 后采用路线门禁、能力门禁、实现门禁、DoR/DoD 和自动化优先 | +| `QA-GATE` | `docs/测试规约与回归门禁.md` | 测试验收 | 测试和回归门禁事实源 | `CURRENT` | qa | `QAF8,GOV8,WPROC1` | 回归脚本/Playwright | none | 2026-05-19 | `rg` | high | 测试计划、DONE 门禁、企微三层门禁、自动化优先和非自审测试要求 | | `AGENT-PRACTICE` | `docs/Agent开发交付实践.md` | Agent 治理 | Agent 协作事实源 | `CURRENT` | dev | `GOV8,DG8` | Skill 校验 | none | 2026-05-13 | `rg` | medium | Agent 协作开发实践和设计主参考层级 | | `AGENTS` | `AGENTS.md` | 执行硬约束 | 项目硬规则 | `CURRENT` | lead | `GOV8` | 人工核对 | none | 2026-05-13 | `rg` | high | 不可违反约束 | -| `SKILL-HYB` | `.agents/skills/hyb-oa-delivery/SKILL.md` | Skill | 项目交付 Skill | `CURRENT` | dev | `GOV8,DG8,WFDG,WDRG,WCP1,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WRV1,WRA1,WMSG1,WAPC1,WAPC2` | quick_validate | none | 2026-05-19 | `quick_validate.py` | medium | 每轮交付操作入口;企微/OA 后续先读 API 能力目录、Secret 矩阵、路线图和 WHMSLIVE/WOUA/WAPI/WRRA/WRV1/WRA1/WMSG1/WAPC1/WAPC2 状态,不得跳过单功能合同直接做考勤审批镜像 | -| `REQ-WF` | `docs/需求-统一审批中心规约.md` | 需求事实源 | 审批模块规约 | `CURRENT` | product/backend | `AP6,WF8,WFOC,DBWFOC,WFDG,WOUA,WAPI,WRRA,WRV1,WRA1,WMSG1,WAPC1,WAPC2` | workflow 回归 | none | 2026-05-19 | `rg` | high | OA 主办审批、企微镜像、WRV1/WRA1/WMSG1/WAPC1/WAPC2 运行优先、审批配置和只读 POC 门禁、WOUA 差异收口前置和 OA 应急接管边界 | +| `SKILL-HYB` | `.agents/skills/hyb-oa-delivery/SKILL.md` | Skill | 项目交付 Skill | `CURRENT` | dev | `GOV8,DG8,WFDG,WDRG,WCP1,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WRV1,WRA1,WMSG1,WAPC1,WAPC2,WPROC1` | quick_validate | none | 2026-05-19 | `quick_validate.py` | medium | 每轮交付操作入口;企微/OA 后续先读 API 能力目录、Secret 矩阵、路线图和 WPROC1 状态,不得跳过 WAPC2F/WCBK1/WACP3/WADM1 直接做考勤审批镜像 | +| `REQ-WF` | `docs/需求-统一审批中心规约.md` | 需求事实源 | 审批模块规约 | `CURRENT` | product/backend | `AP6,WF8,WFOC,DBWFOC,WFDG,WOUA,WAPI,WRRA,WRV1,WRA1,WMSG1,WAPC1,WAPC2,WPROC1` | workflow 回归 | none | 2026-05-19 | `rg` | high | OA 主办审批、企微镜像、WRV1/WRA1/WMSG1/WAPC1/WAPC2/WPROC1 运行优先、审批配置、只读 POC、自动样件、回调/补偿/模型设计前置和 OA 应急接管边界 | | `REQ-OCR` | `docs/需求-报销发票OCR规约.md` | 需求事实源 | OCR 模块规约 | `CURRENT` | product/backend | `RI6,OCR8,BIZ8` | OCR 回归 | none | 2026-05-13 | `rg` | high | OCR 和发票边界 | | `RULE-REIMB` | `docs/报销发票附件规则.md` | 需求事实源 | 报销发票附件规则 | `CURRENT` | product/finance | `RI6,BIZ8` | 报销回归 | none | 2026-05-13 | `rg` | high | 报销、发票、附件细则 | -| `REQ-WECOM` | `docs/需求-企业微信基础设施规约.md` | 需求事实源 | 企业微信边界规约 | `CURRENT` | product/backend | `R7E,ORG8,WF8,ATTV1,HR-WECOM-DIRECTORY-V1,WFOC,DBWFOC,WFDG,WCP1,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WRV1,WRA1,WMSG1,WAPC1,WAPC2` | live smoke/真机反馈/Issue CSV | none | 2026-05-19 | `rg` | high | 企微优先承担 HR/考勤员工日常审批和人事/打卡能力;WRV1/WRA1/WMSG1/WAPC1/WAPC2 固定运行优先、消息实发、审批配置准备和请假/补卡只读 POC 口径;采购、合同、项目、报销和财务继续 OA 主办 | +| `REQ-WECOM` | `docs/需求-企业微信基础设施规约.md` | 需求事实源 | 企业微信边界规约 | `CURRENT` | product/backend | `R7E,ORG8,WF8,ATTV1,HR-WECOM-DIRECTORY-V1,WFOC,DBWFOC,WFDG,WCP1,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WRV1,WRA1,WMSG1,WAPC1,WAPC2,WPROC1` | live smoke/真机反馈/Issue CSV | none | 2026-05-19 | `rg` | high | 企微优先承担 HR/考勤员工日常审批和人事/打卡能力;WPROC1 固定运行优先、审批配置、只读 POC、自动样件、回调/补偿/模型设计前置;采购、合同、项目、报销和财务继续 OA 主办 | | `RUNBOOK-TRIAL` | `docs/试运行与自动化验证手册.md` | 操作手册 | 试运行验证手册 | `CURRENT` | qa/ops | `R7E,QAOPS8` | live readiness | none | 2026-05-13 | `rg` | medium | 本地、公网、企业微信和真实 OCR 验证 | -| `MANUAL-ADMIN` | `docs/管理员手册.md` | 操作手册 | 管理员手册 | `CURRENT` | ops/admin | `ORG8,R7E,WFOC,DBWFOC,WFDG,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WRV1,WRA1,WMSG1,WAPC1,WAPC2` | 人工验收 | none | 2026-05-19 | `rg` | medium | 管理员上线、企微优先边界、Secret 矩阵、OA 主办数据边界、HR 主数据镜像、WOUA 差异收口、WRV1/WRA1 运行门禁、WMSG1 消息实发、WAPC1 审批配置准备、WAPC2 请假/补卡只读 POC、OA 应急接管和恢复回写 | +| `MANUAL-ADMIN` | `docs/管理员手册.md` | 操作手册 | 管理员手册 | `CURRENT` | ops/admin | `ORG8,R7E,WFOC,DBWFOC,WFDG,WCPC,WHMS,WHMSLIVE,WOUA,WAPI,WRRA,WRV1,WRA1,WMSG1,WAPC1,WAPC2,WPROC1` | 人工验收 | none | 2026-05-19 | `rg` | medium | 管理员上线、企微优先边界、Secret 矩阵、OA 主办数据边界、HR 主数据镜像、运行门禁、消息实发、审批配置、只读 POC、WPROC1 自动化优先和非自审链路 | | `MANUAL-EMPLOYEE` | `docs/员工快速上手.md` | 操作手册 | 员工手册 | `CURRENT` | product | `R7E,WFOC,DBWFOC,WFDG` | 人工验收 | none | 2026-05-18 | `rg` | low | 员工侧使用说明,HR/考勤优先企业微信,采购/合同/财务仍在 OA;区分企微镜像和 OA 应急接管 | | `R7-DRAFT` | `docs/trialrun/R7扩大试运行草案.md` | 草案 | R7 准备材料 | `DRAFT` | product/qa | `R7E` | R7EP 报告 | none | 2026-05-13 | `rg` | medium | 不代表当前 R7E 执行状态 | | `OPS-RUNBOOK` | `docs/trialrun/OPS7运维交接Runbook.md` | 运维草案 | OPS 准备材料 | `DRAFT` | ops | `OPS8,QAOPS8` | 只读检查 | none | 2026-05-13 | `rg` | medium | 不代表恢复演练已执行 | @@ -119,14 +120,14 @@ | `docs/文档事实源状态矩阵.md` | 当前事实源 | 文档分类和恢复规则 | | `docs/海音达OA-MVP需求规格说明书.md` | 当前事实源 | PRD 主事实源 | | `docs/产品设计规则.md` | 当前事实源 | PC、移动、企业微信设计规则;DG8 主 UI/布局参考层级 | -| `docs/企微优先开发路线图.md` | 当前事实源 | WDRG/WCP1/WCPC/WHMS/WHMSLIVE/WOUA/WAPI/WRRA/WAPC2 后企微优先 HR/考勤改造阶段顺序、API/Secret 口径、运行优先、审批只读 POC 和禁止跳阶段 | -| `docs/企微API能力目录.md` | 当前事实源 | WAPI/WRRA/WAPC2 后企微官方 API、Secret 矩阵、权限/可信 IP/回调模板、读写边界、运行优先和审批只读 POC 决策 | +| `docs/企微优先开发路线图.md` | 当前事实源 | WDRG/WCP1/WCPC/WHMS/WHMSLIVE/WOUA/WAPI/WRRA/WAPC2/WPROC1 后企微优先 HR/考勤改造阶段顺序、API/Secret 口径、运行优先、审批只读 POC、自动样件、回调、补偿拉取、模型设计和禁止跳阶段 | +| `docs/企微API能力目录.md` | 当前事实源 | WAPI/WRRA/WAPC2/WPROC1 后企微官方 API、Secret 矩阵、权限/可信 IP/回调模板、读写边界、运行优先、审批只读 POC 和后续 POC 决策 | | `docs/产品口径.md` | 当前事实源 | 产品边界和业务规则 | | `docs/需求-统一审批中心规约.md` | 当前事实源 | 审批、催办、超时、效率摘要 | | `docs/报销发票附件规则.md` | 当前事实源 | 报销、发票、附件细则 | | `docs/需求-报销发票OCR规约.md` | 当前事实源 | OCR 和报销模块规约 | | `docs/需求-企业微信基础设施规约.md` | 当前事实源 | 企业微信入口、身份、消息、deeplink | -| `docs/需求-请假考勤修正规约.md` | 当前事实源 | 请假、补卡、考勤修正和 WAPC2 只读 POC | +| `docs/需求-请假考勤修正规约.md` | 当前事实源 | 请假、补卡、考勤修正、WAPC2 只读 POC 和 WPROC1 后续门禁 | | `docs/需求-采购费用审批规约.md` | 当前事实源 | 采购和费用审批 | | `docs/需求-合同附件归档规约.md` | 当前事实源 | 合同台账和附件归档 | | `docs/需求-项目轻管理规约.md` | 当前事实源 | 项目轻管理 | @@ -195,7 +196,8 @@ - `ME6-3` 代表性企业微信真机门禁已关闭。 - MIF7-1..7 与 MIF7T 已完成本地整改、公网部署、公网匿名复检和带凭据 live smoke/OCR 复检。 -- R7E 真实扩大试运行阶段验收、P2 排序、R7E 收口、QAOPS8 上线硬化阶段收口、QAOPS9 上线硬化连续合同、PRELAUNCH 正式启用前公网预回归、CASHIER-VOUCHER-V1 财务闭环与银行回单附件、LAUNCH-DEPLOY-FINANCE 部署复检、FIN-PROD-ENABLE 正式常开、ACCOUNTING-HANDOFF-V1 代账交接 SOP、SYSTEM-COMPLETE-GATE 系统完成门禁、LAUNCH-OPS-V1 首周运营保障、REQ-COMPLETE-AUDIT 需求完成度复核、ATTV1 考勤统一入口、AUTO-REMAINING-CLOSEOUT 剩余自动化收口、HRWD-CONTACT-LIVE-TEST 公网企微通讯录真实写入闭环、WFOC 需求重构、DBWFOC 数据边界修正、WFDG 设计门禁、WDRG 路线图门禁、WCPC 配置复跑、WHMSLIVE、WAPI、WRRA、WOUA-FIX、WRA1、WMSG1、WAPC1 和 WAPC2 均已完成,当前 P0/P1 阻断为 0;P2D 已完成决策分流,P2-ORG 只读巡检已完成且无需写修复合同。LAUNCH-AUTO-OPS-V1 发现的公网 `payment_batch_v1=force_off` 漂移已由 AUTOREM 恢复为 `force_on`,正式自动巡检结论为 `GO_TO_OPERATE`;`erp_sync=force_off`,ERP 未来不接入 OA,正式支付接口、图片 OCR 和银行流水导入继续不进入当前路线。WCP1 已完成企业微信能力 QA-only 只读 POC,历史结论为 `PAUSE_FOR_CONFIG`;WCPC 使用既有在职测试号 `SMOKE002/测试员工`(脱敏 `oa_smoke***`)完成远端只读复跑,报告 `/tmp/wecom-capability-poc-wcpc-smoke002/summary.json`,结论 `GO_TO_HR_MASTER_SYNC`,`nextStageAllowed=true`,`blockingCapabilities=[]`。WHMS 已实现并部署验证 `wecom_hr_master_sync_v1`、同步批次/逐员工记录、dry-run/apply、管理员 API、People 管理入口和 QA-only runner;默认和最终均为 `force_off`,公网 `SMOKE002` 因缺手机号、邮箱和部门按 `missing_required_field` 跳过,未执行生产真实员工批量 apply。WAPI 已将企微官方 API 能力目录、Secret 矩阵和运行优先路线落为当前事实源:通讯录读取使用 `WECOM_CONTACT_SECRET` 和 `user/list_id`,成员详情只作可选富化,人事助手/花名册、打卡、消息、OAuth 和审批读取默认使用 `WECOM_AGENT_SECRET`,`WECOM_CHECKIN_SECRET` 只作专用打卡 override,`WECOM_HR_ASSISTANT_SECRET` 不参与默认读取;后续企微能力不清楚时先查官方 API 和 [企微 API 能力目录](./企微API能力目录.md),不得靠运行时多个 Secret 试错。WOUA-FIX 已按用户确认执行受控写入并复检:7 个 OA active 缺企微测试账号软归档,`T0000` seed 复活问题修正,`SMOKE201` 测试主管和待办副作用已转交,最终 WOUA 报告 `/app/artifacts/qa-flow/wecom-oa-user-consistency-20260518T161716Z/summary.json` 为 `PASS_WITH_FINDINGS`,但 OA active 5、企微 active 5、匹配 5、OA active 缺企微 0;剩余 5 个企微缺字段先接受不补,`HRWDTEST-20260517214548` 归档绑定保留审计。WRV1 原始报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T173402Z/summary.json` 曾因同步开关误阻断;WRA1 已修正并公网复跑,报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T180506Z/summary.json` 为 `PASS_WITH_CONFIG_GAPS`,入口/OAuth、Secret 矩阵、OA active 绑定、通讯录、人事助手、消息 dry-run 和打卡只读链路均通过,打卡记录 `readable_sync_disabled`。WMSG1 已证明企业微信应用消息和 Deeplink 可用;WAPC1 已固定首批审批模板(请假、补卡、外出、加班)、低风险 `sp_no`、真实回调配置项、验签/解密/幂等/重试和补偿拉取准入清单;WAPC2 已新增请假/补卡模板详情和审批详情只读 POC runner。HR/考勤员工日常审批优先复用企业微信,OA 目标是按域镜像、人工接管、恢复回写和 RuleOps;采购、费用、合同、项目、报销、付款、AP、代账交接、审计和高敏附件继续 OA 主办。考勤/审批镜像、审批回调、OA 应急接管、恢复回写和 RuleOps 尚未实现;审批模板 ID、审批单号 `sp_no`、真实回调配置和 HR 写接口仍需后续独立合同处理;不得直接跳到 `wecom_attendance_approval_mirror_v1`、`oa_hr_emergency_mode_v1`、`wecom_recovery_writeback_v1` 或 `wecom_ruleops_v1`。HRWD 已完成 OA 驱动企业微信通讯录同步,并通过 `HRWDTEST-20260517214548` 真实公网 create/update/disable 验证;测试成员按审计要求保留离职/禁用状态。 +- R7E 真实扩大试运行阶段验收、P2 排序、R7E 收口、QAOPS8 上线硬化阶段收口、QAOPS9 上线硬化连续合同、PRELAUNCH 正式启用前公网预回归、CASHIER-VOUCHER-V1 财务闭环与银行回单附件、LAUNCH-DEPLOY-FINANCE 部署复检、FIN-PROD-ENABLE 正式常开、ACCOUNTING-HANDOFF-V1 代账交接 SOP、SYSTEM-COMPLETE-GATE 系统完成门禁、LAUNCH-OPS-V1 首周运营保障、REQ-COMPLETE-AUDIT 需求完成度复核、ATTV1 考勤统一入口、AUTO-REMAINING-CLOSEOUT 剩余自动化收口、HRWD-CONTACT-LIVE-TEST 公网企微通讯录真实写入闭环、WFOC 需求重构、DBWFOC 数据边界修正、WFDG 设计门禁、WDRG 路线图门禁、WCPC 配置复跑、WHMSLIVE、WAPI、WRRA、WOUA-FIX、WRA1、WMSG1、WAPC1、WAPC2 和 WPROC1 均已完成,当前 P0/P1 阻断为 0;P2D 已完成决策分流,P2-ORG 只读巡检已完成且无需写修复合同。LAUNCH-AUTO-OPS-V1 发现的公网 `payment_batch_v1=force_off` 漂移已由 AUTOREM 恢复为 `force_on`,正式自动巡检结论为 `GO_TO_OPERATE`;`erp_sync=force_off`,ERP 未来不接入 OA,正式支付接口、图片 OCR 和银行流水导入继续不进入当前路线。WCP1 已完成企业微信能力 QA-only 只读 POC,历史结论为 `PAUSE_FOR_CONFIG`;WCPC 使用既有在职测试号 `SMOKE002/测试员工`(脱敏 `oa_smoke***`)完成远端只读复跑,报告 `/tmp/wecom-capability-poc-wcpc-smoke002/summary.json`,结论 `GO_TO_HR_MASTER_SYNC`,`nextStageAllowed=true`,`blockingCapabilities=[]`。WHMS 已实现并部署验证 `wecom_hr_master_sync_v1`、同步批次/逐员工记录、dry-run/apply、管理员 API、People 管理入口和 QA-only runner;默认和最终均为 `force_off`,公网 `SMOKE002` 因缺手机号、邮箱和部门按 `missing_required_field` 跳过,未执行生产真实员工批量 apply。WAPI 已将企微官方 API 能力目录、Secret 矩阵和运行优先路线落为当前事实源:通讯录读取使用 `WECOM_CONTACT_SECRET` 和 `user/list_id`,成员详情只作可选富化,人事助手/花名册、打卡、消息、OAuth 和审批读取默认使用 `WECOM_AGENT_SECRET`,`WECOM_CHECKIN_SECRET` 只作专用打卡 override,`WECOM_HR_ASSISTANT_SECRET` 不参与默认读取;后续企微能力不清楚时先查官方 API 和 [企微 API 能力目录](./企微API能力目录.md),不得靠运行时多个 Secret 试错。WOUA-FIX 已按用户确认执行受控写入并复检:7 个 OA active 缺企微测试账号软归档,`T0000` seed 复活问题修正,`SMOKE201` 测试主管和待办副作用已转交,最终 WOUA 报告 `/app/artifacts/qa-flow/wecom-oa-user-consistency-20260518T161716Z/summary.json` 为 `PASS_WITH_FINDINGS`,但 OA active 5、企微 active 5、匹配 5、OA active 缺企微 0;剩余 5 个企微缺字段先接受不补,`HRWDTEST-20260517214548` 归档绑定保留审计。WRV1 原始报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T173402Z/summary.json` 曾因同步开关误阻断;WRA1 已修正并公网复跑,报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T180506Z/summary.json` 为 `PASS_WITH_CONFIG_GAPS`,入口/OAuth、Secret 矩阵、OA active 绑定、通讯录、人事助手、消息 dry-run 和打卡只读链路均通过,打卡记录 `readable_sync_disabled`。WMSG1 已证明企业微信应用消息和 Deeplink 可用;WAPC1 已固定首批审批模板(请假、补卡、外出、加班)、低风险 `sp_no`、真实回调配置项、验签/解密/幂等/重试和补偿拉取准入清单;WAPC2 已新增请假/补卡模板详情和审批详情只读 POC runner;WPROC1 已固定后续自动化优先、非自审和三层门禁。HR/考勤员工日常审批优先复用企业微信,OA 目标是按域镜像、人工接管、恢复回写和 RuleOps;采购、费用、合同、项目、报销、付款、AP、代账交接、审计和高敏附件继续 OA 主办。考勤/审批镜像、审批回调、OA 应急接管、恢复回写和 RuleOps 尚未实现;审批模板 ID、审批单号 `sp_no`、真实回调配置、补偿拉取、镜像数据模型和 HR 写接口仍需后续独立合同处理;不得跳过 WAPC2F、WCBK1、WACP3、WADM1 直接进入 `wecom_attendance_approval_mirror_v1`、`oa_hr_emergency_mode_v1`、`wecom_recovery_writeback_v1` 或 `wecom_ruleops_v1`。HRWD 已完成 OA 驱动企业微信通讯录同步,并通过 `HRWDTEST-20260517214548` 真实公网 create/update/disable 验证;测试成员按审计要求保留离职/禁用状态。 - WMSG1 已完成企微应用消息实发与 Deeplink 真机验证:远端报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T234431Z/summary.json` 显示 `checks.message.status=OK`、`errcode=0`、`recipientCount=1`,用户确认收到“OA 运行就绪检查”并可点击进入 OA 通知页面;本证据只证明消息和 Deeplink 可用,不放行审批模板、测试 `sp_no`、真实回调或深度镜像。 - WAPC1 已完成企微审批配置准备清单:首批只准备请假、补卡、外出、加班模板;每个模板需准备模板 ID、适用范围、字段项、审批人规则、可见范围和自建应用权限;测试 `sp_no` 必须低风险且不得含采购、合同、报销、发票、银行回单或高敏附件;真实回调 Token/EncodingAESKey 不写入仓库或文档。本证据只代表配置准备口径已固化,不代表真实回调、审批镜像、应急接管、恢复回写或 RuleOps 已实现。 - WAPC2 已完成企微审批模板与低风险 `sp_no` 只读 POC 本地实现、部署和公网只读复跑:范围只包括请假和补卡,固定 `WECOM_AGENT_SECRET`,远端报告为 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`;本证据只代表模板详情/审批详情只读 runner 已具备且远端 Secret 可用,不代表模板 ID、测试 `sp_no`、真实回调或深度镜像已配置完成。 +- WPROC1 已修正企微路线与开发流程工程化门禁:后续默认自动化优先,人工只处理批准、密钥/回调配置、企微后台不可 API 化配置、真机确认和风险拍板;WAPC2F 默认使用 `SMOKE002 -> SMOKE101` 非自审链,`SMOKE101` 不可用时停止问答确认;`wecom_attendance_approval_mirror_v1` 前必须完成 WAPC2F、WAPC2 自动复跑、WCBK1、WACP3 和 WADM1。 diff --git a/docs/文档索引.md b/docs/文档索引.md index d006d608..3915aaaa 100644 --- a/docs/文档索引.md +++ b/docs/文档索引.md @@ -20,7 +20,7 @@ ## 最近事实源链 -R6 -> PC6 -> PA6 -> FL6 -> AP6 -> RI6 -> LP6 -> ME6/QG6 -> DG7/MRF7 -> MIA7 -> MIF7/MIF7T(公网部署与带凭据公网复检已收口) -> DG8 -> DG9 -> R7E -> FBA -> QAOPS9/P2D -> P2-ORG -> P2-FIN-DECISION -> P2-FIN-V1 -> P2-OCR-SAMPLE -> P2Q -> P2AUTO -> P2AF -> P2-FIN-LIVE-DECISION -> P2-FIN-LIVE -> PRELAUNCH -> CASHIER-VOUCHER-V1 -> LAUNCH-DEPLOY-FINANCE -> FIN-PROD-ENABLE -> ACCOUNTING-HANDOFF-V1 -> SYSTEM-COMPLETE-GATE -> LAUNCH-OPS-V1 -> REQ-COMPLETE-AUDIT -> ATTV1 -> LAUNCH-AUTO-OPS-V1 -> AUTO-REMAINING-CLOSEOUT -> HR-WECOM-DIRECTORY-V1 -> HRWD-CONTACT-LIVE-TEST -> WCFB -> WFOC -> DBWFOC -> WFDG -> WDRG -> WCP1 -> WCPC -> WHMS -> WHMSLIVE -> WOUA -> WAPI -> WRRA -> WOUA-FIX -> WRV1 -> WRA1 -> WMSG1 -> WAPC1 -> WAPC2。 +R6 -> PC6 -> PA6 -> FL6 -> AP6 -> RI6 -> LP6 -> ME6/QG6 -> DG7/MRF7 -> MIA7 -> MIF7/MIF7T(公网部署与带凭据公网复检已收口) -> DG8 -> DG9 -> R7E -> FBA -> QAOPS9/P2D -> P2-ORG -> P2-FIN-DECISION -> P2-FIN-V1 -> P2-OCR-SAMPLE -> P2Q -> P2AUTO -> P2AF -> P2-FIN-LIVE-DECISION -> P2-FIN-LIVE -> PRELAUNCH -> CASHIER-VOUCHER-V1 -> LAUNCH-DEPLOY-FINANCE -> FIN-PROD-ENABLE -> ACCOUNTING-HANDOFF-V1 -> SYSTEM-COMPLETE-GATE -> LAUNCH-OPS-V1 -> REQ-COMPLETE-AUDIT -> ATTV1 -> LAUNCH-AUTO-OPS-V1 -> AUTO-REMAINING-CLOSEOUT -> HR-WECOM-DIRECTORY-V1 -> HRWD-CONTACT-LIVE-TEST -> WCFB -> WFOC -> DBWFOC -> WFDG -> WDRG -> WCP1 -> WCPC -> WHMS -> WHMSLIVE -> WOUA -> WAPI -> WRRA -> WOUA-FIX -> WRV1 -> WRA1 -> WMSG1 -> WAPC1 -> WAPC2 -> WPROC1。 - R6、PC6、PA6、FL6、AP6、RI6、LP6 已完成并部署。 - ME6 自动化、公网视觉矩阵和 `ME6-3` 代表性企业微信真机门禁已完成。 @@ -71,6 +71,7 @@ R6 -> PC6 -> PA6 -> FL6 -> AP6 -> RI6 -> LP6 -> ME6/QG6 -> DG7/MRF7 -> MIA7 -> M - WMSG1 是 WRA1 后的企微应用消息实发与 Deeplink 真机验证合同:使用现有 runner 单次设置 `WECOM_RUNTIME_TEST_SEND=1`,向管理员本人对应 OA 员工号 `HYD000006` 发送脱敏消息;报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T234431Z/summary.json` 显示 `errcode=0`、`recipientCount=1`,用户确认收到消息并可点击进入 OA 通知页面。审批模板、测试 `sp_no` 和真实回调仍需后续配置。 - WAPC1 是 WMSG1 后的企微审批配置准备清单合同:只固化请假、补卡、外出、加班模板准备项、低风险 `sp_no`、真实回调配置项和 POC 准入,不开发镜像。 - WAPC2 是 WAPC1 后的请假/补卡审批只读 POC 合同:新增 `server/src/scripts/check-wecom-approval-poc.js` 和 `npm run check:wecom-approval-poc`,固定 `WECOM_AGENT_SECRET` 读取 `gettemplatedetail`/`getapprovaldetail`;缺模板 ID 或低风险 `sp_no` 时报告 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`,不放行深度镜像。 +- WPROC1 是 WAPC2 后的企微路线与开发流程工程化修正合同:只更新合同和事实源,不写业务代码、不部署、不写 OA/企微数据;固定后续顺序为 `WAPC2F -> WAPC2 自动复跑 -> WCBK1 -> WACP3 -> WADM1 -> wecom_attendance_approval_mirror_v1`,并修正 WAPC2F 默认非自审链为 `SMOKE002 -> SMOKE101`。 ## 当前活跃治理流 @@ -129,6 +130,7 @@ R6 -> PC6 -> PA6 -> FL6 -> AP6 -> RI6 -> LP6 -> ME6/QG6 -> DG7/MRF7 -> MIA7 -> M | `WMSG1` | `issues/2026-05-19_07-41-37-wecom-message-live-verify-v1.csv` | 已完成:企微应用消息实发与 Deeplink 真机验证 | 远端单次设置 `WECOM_RUNTIME_TEST_SEND=1`,向管理员本人对应 OA 员工号 `HYD000006` 发送脱敏消息;报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T234431Z/summary.json` 为 `PASS_WITH_CONFIG_GAPS`,消息 `errcode=0`、`recipientCount=1`;用户确认收到并可点击进入 OA 通知页面 | 不改代码/schema/UI/远端持久 env;不补企微资料;不配置审批模板/`sp_no`/真实回调;不进入深度镜像 | | `WAPC1` | `issues/2026-05-19_08-44-58-wecom-approval-config-prep-v1.csv` | 已完成:企微审批配置准备清单 | 固化 WMSG1 后下一步为审批配置准备,不直接进入深度镜像;首批模板为请假、补卡、外出、加班;准备模板 ID、低风险 `sp_no`、真实回调配置项和后续 POC 准入 | 不改业务代码/API/schema/UI;不部署;不接真实回调;不调用企微写接口;不配置模板或 `sp_no` | | `WAPC2` | `issues/2026-05-19_09-34-16-wecom-approval-template-spno-poc-v1.csv` | 已部署并公网只读复跑:企微审批模板与低风险 `sp_no` 只读 POC | 新增 QA-only runner、只读集成服务和 focused 单测;范围请假+补卡;固定 `WECOM_AGENT_SECRET` 调用 `gettemplatedetail` / `getapprovaldetail`;远端报告 `/app/artifacts/qa-flow/wecom-approval-poc-20260519T020429Z/summary.json` 为 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG` | 不新增公开 API/schema/UI;不接真实回调;不调用企微写接口;不写 OA/企微数据;不进入深度镜像 | +| `WPROC1` | `issues/2026-05-19_10-43-50-wecom-process-route-engineering-v1.csv` | 当前路线与流程治理:企微工程化门禁修正 | 固化三层门禁、Definition of Ready、Definition of Done、自动化优先、非自审和高风险能力先 POC;修正 WAPC2F 默认链为 `SMOKE002 -> SMOKE101` | docs-only/contract-only;不改业务代码、不部署、不写 OA/企微数据;WAPC2 后仍需 WAPC2F、WCBK1、WACP3、WADM1 后才能进入深度镜像 | 旧 Issue CSV 不删除、不批量回写、不移动到归档目录。若新治理流替代旧合同,只在新 CSV 的 `Notes` 或本索引说明 supersedes,旧文件保留历史审计语义。 @@ -148,17 +150,17 @@ R6 -> PC6 -> PA6 -> FL6 -> AP6 -> RI6 -> LP6 -> ME6/QG6 -> DG7/MRF7 -> MIA7 -> M | 文档 | 用途 | | --- | --- | -| [海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md) | PRD 主事实源;WAPC1/WAPC2 后包含企微审批配置准备和只读 POC 前置 | +| [海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md) | PRD 主事实源;WAPC1/WAPC2/WPROC1 后包含企微审批配置、只读 POC 和后续工程化前置 | | [文档事实源状态矩阵](./文档事实源状态矩阵.md) | 文档分类、删除恢复和冲突规则 | | [产品设计规则](./产品设计规则.md) | PC、移动、企业微信 WebView 设计事实源;DG8 后飞书工作台/飞书审批为唯一主 UI/布局参考;DG9 后按页面分层和样板选型 | -| [企微优先开发路线图](./企微优先开发路线图.md) | WDRG/WCP1/WCPC/WHMS/WHMSLIVE/WOUA/WAPI/WRRA/WOUA-FIX/WRV1/WRA1/WMSG1/WAPC1/WAPC2 后企微优先 HR/考勤改造的阶段顺序、准入/退出门禁、并行规则、禁止跳阶段、API/Secret 口径、运行优先、消息实发、审批配置准备和只读 POC 事实源 | -| [企微 API 能力目录](./企微API能力目录.md) | WAPI/WAPC1/WAPC2 后企微官方 API、Secret 矩阵、权限/可信 IP/回调模板、读写边界、运行优先、审批配置准备和只读 POC 决策事实源 | -| [产品口径](./产品口径.md) | 已拍板产品边界和业务规则;WAPC1/WAPC2 后包含审批配置准备和只读 POC 阶段顺序 | +| [企微优先开发路线图](./企微优先开发路线图.md) | WDRG/WCP1/WCPC/WHMS/WHMSLIVE/WOUA/WAPI/WRRA/WOUA-FIX/WRV1/WRA1/WMSG1/WAPC1/WAPC2/WPROC1 后企微优先 HR/考勤改造的阶段顺序、准入/退出门禁、并行规则、禁止跳阶段、API/Secret 口径、运行优先、消息实发、审批配置、只读 POC、自动样件、回调、补偿拉取和模型设计事实源 | +| [企微 API 能力目录](./企微API能力目录.md) | WAPI/WAPC1/WAPC2/WPROC1 后企微官方 API、Secret 矩阵、权限/可信 IP/回调模板、读写边界、运行优先、审批配置、只读 POC、WAPC2F/WCBK1/WACP3/WADM1 决策事实源 | +| [产品口径](./产品口径.md) | 已拍板产品边界和业务规则;WAPC1/WAPC2/WPROC1 后包含审批配置、只读 POC 和工程化前置阶段顺序 | | [需求 - 统一审批中心规约](./需求-统一审批中心规约.md) | OA 主办审批、企微主办 HR/考勤员工日常审批镜像、催办、超时提醒、审批效率 | | [报销发票附件规则](./报销发票附件规则.md) | 报销、发票、OCR、附件细则 | | [需求 - 报销发票 OCR 规约](./需求-报销发票OCR规约.md) | 报销发票 OCR 模块规约 | | [需求 - 企业微信基础设施规约](./需求-企业微信基础设施规约.md) | 企业微信入口、身份、消息、deeplink、HR/考勤员工日常审批、打卡、人事助手、按域镜像、OA 接管和恢复回写 | -| [需求 - 请假考勤修正规约](./需求-请假考勤修正规约.md) | 企微请假/补卡/外出/加班、WAPC1 审批配置准备、WAPC2 请假/补卡只读 POC、考勤镜像、OA 应急接管和恢复回写 | +| [需求 - 请假考勤修正规约](./需求-请假考勤修正规约.md) | 企微请假/补卡/外出/加班、WAPC1 审批配置准备、WAPC2 请假/补卡只读 POC、WPROC1 后续门禁、考勤镜像、OA 应急接管和恢复回写 | | [需求 - 采购费用审批规约](./需求-采购费用审批规约.md) | 采购、费用、附件、审批规则 | | [需求 - 合同附件归档规约](./需求-合同附件归档规约.md) | 合同台账和附件归档边界 | | [需求 - 项目轻管理规约](./需求-项目轻管理规约.md) | 项目轻管理边界 | diff --git a/docs/测试规约与回归门禁.md b/docs/测试规约与回归门禁.md index b55c54a7..99fa5efe 100644 --- a/docs/测试规约与回归门禁.md +++ b/docs/测试规约与回归门禁.md @@ -2,7 +2,7 @@ **文档状态**:当前测试事实源。 **适用范围**:hyb-oa MVP 首轮开发 A3-A8,以及后续所有非微小改动。 -**路线口径**:WFOC/DBWFOC/WFDG/WDRG 后,HR/考勤员工日常审批优先复用企业微信成熟能力,OA 做按域镜像、人工接管、恢复回写、财务闭环和审计中台;报销、采购、合同、项目、PDF OCR、付款批次、AP 台账、代账交接和高敏附件继续由 OA 主办;企业微信只做脱敏消息和 OA deeplink;飞书不进入当前路线。后续企微/OA 运行时迁移前必须先读 [企微优先开发路线图](./企微优先开发路线图.md),再做 `WECOM-CAPABILITY-POC-V1`;缺配置或权限时记录 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`,不得伪造成通过。 +**路线口径**:WFOC/DBWFOC/WFDG/WDRG 后,HR/考勤员工日常审批优先复用企业微信成熟能力,OA 做按域镜像、人工接管、恢复回写、财务闭环和审计中台;报销、采购、合同、项目、PDF OCR、付款批次、AP 台账、代账交接和高敏附件继续由 OA 主办;企业微信只做脱敏消息和 OA deeplink;飞书不进入当前路线。后续企微/OA 运行时迁移前必须先读 [企微优先开发路线图](./企微优先开发路线图.md),再做对应 POC。WPROC1 后,WAPC2 不能直接进入 `wecom_attendance_approval_mirror_v1`,必须先完成 WAPC2F、WCBK1、WACP3 和 WADM1;缺配置或权限时记录 `NEEDS_CONFIG` 或 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`,不得伪造成通过。 本文回答“什么时候测试、测什么、怎么判定通过、怎么记录跳过”。具体业务验收仍以主 PRD、模块规约和最新 Issue CSV 为准。 @@ -13,6 +13,7 @@ - 自动化优先,自动化无法覆盖时必须写清人工步骤、执行人、环境和结论。 - 测试失败不得假通过;必须先归类为代码问题、测试桩问题、环境问题、数据问题或人工配置问题。 - 涉及公网、企业微信真机、真实 OCR、真实凭据时,只能在条件真实可用后给通过结论;缺配置必须标 `SKIP`。 +- 企微审批类测试默认禁止自审;自动化样件必须预检申请人和审批人不是同一 OA 员工、不是同一企微 userid。 ## 2. 测试分层 @@ -40,6 +41,31 @@ `Dev_Status=DONE` 表示开发完成且基础检查通过;`Review1_Status=DONE` 表示自查或 review 无阻断;`Regression_Status=DONE` 表示业务流程级验证通过或明确 SKIP。 +### 3.1 企微工程化测试门禁 + +WPROC1 后,企微 HR/考勤相关 Issue 在测试层面同步执行三层门禁: + +| 门禁 | 测试要求 | +| --- | --- | +| 路线门禁 | 测试前核对路线图,确认没有跳过 WAPC2F、WCBK1、WACP3、WADM1 等前置阶段。 | +| 能力门禁 | runner 必须输出真实 `PASS`、`NEEDS_CONFIG` 或 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`,不能把缺 Secret、权限、可信 IP、模板、回调或可见范围写成通过。 | +| 实现门禁 | Issue CSV、静态检查、单测、回归、公网验证、状态回填和中文提交必须按 `Test_Method` 闭环。 | + +Definition of Ready: + +- Issue CSV 已写清主流程、异常流程、权限、外部配置和脱敏报告边界。 +- 已明确 API、Secret、可信 IP、模板、回调、测试账号、申请人、审批人和自审校验。 +- live 写入必须有显式 CLI 参数和环境开关;默认 dry-run 或只读。 + +Definition of Done: + +- `Test_Method` 全部执行并记录实际结果。 +- 自动化能覆盖的样件生成、复跑、只读拉取、脱敏检查和错误分类已自动化执行。 +- 人工只保留批准、密钥/回调配置、企微后台不可 API 化配置、真机确认和风险拍板。 +- 若面向公网或企微可测,必须有 `/ready`、runtime smoke、public bundle scan 或对应 live runner 证据。 + +高风险企微能力的 POC 顺序固定为:WAPC2F 自动样件 -> WAPC2 自动复跑 -> WCBK1 回调只读 POC -> WACP3 补偿拉取 POC -> WADM1 镜像数据模型设计 -> `wecom_attendance_approval_mirror_v1`。真实回调必须先证明验签、解密、幂等和重复投递;补偿拉取必须先证明按时间窗口拿到审批单号并可拉详情;镜像实现前必须先有字段、状态机、幂等键、索引和隐私保留边界设计。 + ## 4. MVP 首轮测试矩阵 | Issue | 自动化测试 | 视觉 / 入口验证 | 备注 | diff --git a/docs/海音达OA-MVP需求规格说明书.md b/docs/海音达OA-MVP需求规格说明书.md index cf90cc1d..7ad1853a 100644 --- a/docs/海音达OA-MVP需求规格说明书.md +++ b/docs/海音达OA-MVP需求规格说明书.md @@ -56,7 +56,7 @@ | 恢复回写层 | OA + 企业微信 API | 企微恢复后由 `wecom_recovery_writeback_v1` 对应急数据执行 dry-run、自动回写、失败重试和冲突清单。 | | 财务主办层 | OA | 报销、PDF 发票 OCR、发票查重、付款批次、银行回单、AP 台账、代账交接继续 OA 主办,不迁移到企微。 | -无痛切换是长期目标,不代表本轮已实现完整替代。完整镜像按域定义:企微主办域镜像到 OA;OA 主办域不反向全量镜像到企微,只发送脱敏标题、业务类型、业务编号、状态和 OA 链接。后续必须按 `wecom_hr_master_sync_v1`、`runtime_first_wecom_enablement`、`WOUA-FIX / WECOM-RUNTIME-READY-V1`、`WAPC1 审批配置准备`、`wecom_attendance_approval_mirror_v1`(承接旧口径 `wecom_native_approval_mirror_v1`)、`oa_hr_emergency_mode_v1`、`wecom_recovery_writeback_v1` 和 `wecom_ruleops_v1` 分阶段拆 Issue CSV。 +无痛切换是长期目标,不代表本轮已实现完整替代。完整镜像按域定义:企微主办域镜像到 OA;OA 主办域不反向全量镜像到企微,只发送脱敏标题、业务类型、业务编号、状态和 OA 链接。后续必须按 `wecom_hr_master_sync_v1`、`runtime_first_wecom_enablement`、`WOUA-FIX / WECOM-RUNTIME-READY-V1`、`WAPC1 审批配置准备`、`WAPC2 请假/补卡只读 POC`、`WAPC2F 自动生成 POC 样件`、`WAPC2 自动复跑`、`WCBK1 回调只读 POC`、`WACP3 补偿拉取 POC`、`WADM1 镜像数据模型设计`、`wecom_attendance_approval_mirror_v1`(承接旧口径 `wecom_native_approval_mirror_v1`)、`oa_hr_emergency_mode_v1`、`wecom_recovery_writeback_v1` 和 `wecom_ruleops_v1` 分阶段拆 Issue CSV。 ### 1.5 DBWFOC 数据边界修正 @@ -77,7 +77,7 @@ WFDG 将 DBWFOC 后的产品方向固化为开发前设计门禁。本节只代 | 报销、采购、合同、项目、付款、AP、代账 | OA | 主办提交、审批、附件、导出、付款批次、审计和代账资料 | 只发送脱敏消息和 OA deeplink | 采购单附件、合同正文、报价、供应商资料、发票、银行回单和代账资料不进入企微原生审批或企微附件 | | RuleOps | OA + 企业微信 API | AI 草拟、差异报告、dry-run、人工确认、审计和回滚建议 | 接收经确认的审批模板、打卡规则、排班、假期余额或人事字段配置写入 | AI 不得直接改正式规则;每次写入保存前后快照、确认人、API `errcode` 和失败原因 | -`WECOM-CAPABILITY-POC-V1` / WCPC 已按 `CAN_REUSE_NOW`、`NEEDS_CONFIG`、`NEEDS_API_POC`、`KEEP_OA_PRIMARY`、`NOT_SUPPORTED_BY_API` 输出人事助手、通讯录、打卡、审批、假期余额、回调和权限配置能力矩阵,并达到 HR 主数据镜像准入。WHMS/WHMSLIVE 已完成 HR 主数据镜像实现和受控公网验证;WAPI 已固定 API/Secret 口径并复跑 WOUA;WRRA 后明确 `PASS_WITH_FINDINGS` 不能直接放行深度镜像;WOUA-FIX 已将 7 个缺企微测试账号软归档并复检 `oaActiveMissingInWecom=0`,企微缺字段先接受不补;WMSG1 已证明真实企微应用消息和 Deeplink 可用;WAPC1 已固化审批配置准备清单。生产写接口必须单独批准。正式开发顺序为 `wecom_hr_master_sync_v1` -> `runtime_first_wecom_enablement` -> `WOUA-FIX / WECOM-RUNTIME-READY-V1` -> `WAPC1 审批配置准备` -> `wecom_attendance_approval_mirror_v1`(承接旧口径 `wecom_native_approval_mirror_v1`)-> `oa_hr_emergency_mode_v1` -> `wecom_recovery_writeback_v1` -> `wecom_ruleops_v1`。 +`WECOM-CAPABILITY-POC-V1` / WCPC 已按 `CAN_REUSE_NOW`、`NEEDS_CONFIG`、`NEEDS_API_POC`、`KEEP_OA_PRIMARY`、`NOT_SUPPORTED_BY_API` 输出人事助手、通讯录、打卡、审批、假期余额、回调和权限配置能力矩阵,并达到 HR 主数据镜像准入。WHMS/WHMSLIVE 已完成 HR 主数据镜像实现和受控公网验证;WAPI 已固定 API/Secret 口径并复跑 WOUA;WRRA 后明确 `PASS_WITH_FINDINGS` 不能直接放行深度镜像;WOUA-FIX 已将 7 个缺企微测试账号软归档并复检 `oaActiveMissingInWecom=0`,企微缺字段先接受不补;WMSG1 已证明真实企微应用消息和 Deeplink 可用;WAPC1 已固化审批配置准备清单;WAPC2 已提供请假/补卡只读 POC runner;WPROC1 已固定自动化优先、非自审和高风险 POC 前置。生产写接口必须单独批准。正式开发顺序为 `wecom_hr_master_sync_v1` -> `runtime_first_wecom_enablement` -> `WOUA-FIX / WECOM-RUNTIME-READY-V1` -> `WAPC1 审批配置准备` -> `WAPC2 请假/补卡只读 POC` -> `WAPC2F 自动生成 POC 样件` -> `WAPC2 自动复跑` -> `WCBK1 回调只读 POC` -> `WACP3 补偿拉取 POC` -> `WADM1 镜像数据模型设计` -> `wecom_attendance_approval_mirror_v1`(承接旧口径 `wecom_native_approval_mirror_v1`)-> `oa_hr_emergency_mode_v1` -> `wecom_recovery_writeback_v1` -> `wecom_ruleops_v1`。 ### 1.7 WDRG 开发路线图门禁 @@ -106,14 +106,14 @@ WCP1 已按“Live 只读 + 测试员工优先”完成企业微信能力 POC。 | 通讯录 | `CAN_REUSE_NOW` | HCLT 已证明 `HRWDTEST-20260517214548` create/update/disable 成功,部门读取可用;WCPC 对既有在职测试号的成员读取已通过。 | | 人事助手 | `CAN_REUSE_NOW_FOR_READ` | 字段配置读取可用;WCPC 对既有在职测试号的花名册读取已通过;资料更新属于写接口,需后续单独批准 POC。 | | 打卡 | `CAN_REUSE_NOW_FOR_READ` | WCPC 短窗口打卡记录和规则读取已通过;日报、月报、排班等细分能力留到考勤镜像合同继续验证。 | -| 审批与假期余额 | `PARTIAL_NEEDS_CONFIG` | 假期余额读取已通过;审批模板 ID、测试审批单号和回调配置仍需后续考勤/审批镜像前补齐。 | +| 审批与假期余额 | `PARTIAL_NEEDS_CONFIG` | 假期余额读取已通过;审批模板 ID、测试审批单号、真实回调、补偿拉取和镜像数据模型仍需后续考勤/审批镜像前补齐。 | | OA 主办高敏审批 | `KEEP_OA_PRIMARY` | 报销、采购、合同、项目、付款、AP 和代账继续 OA 主办,企微只做脱敏消息和 OA deeplink。 | WCP1 历史结论为 `PAUSE_FOR_CONFIG`,不是 `GO_TO_HR_MASTER_SYNC`;该阻断已由 WCPC 复跑收口。WCP1 报告继续作为初始配置缺口证据保留,当前 HR 主数据镜像准入以 WCPC 结论为准。 ### 1.9 WCPC 配置收口 -WCPC 是 WCP1 后的配置复跑合同,只处理企业微信后台配置和只读 POC 复跑,不开发运行时功能。2026-05-18 已按用户要求自动查找并使用既有在职低风险测试号 `SMOKE002/测试员工` 复跑,报告只记录脱敏企业微信 userid 前缀 `oa_smoke***`;远端报告 `/tmp/wecom-capability-poc-wcpc-smoke002/summary.json` 的结论为 `GO_TO_HR_MASTER_SYNC`,`nextStageAllowed=true`,`blockingCapabilities=[]`。WHMS 已承接该结论并完成 `wecom_hr_master_sync_v1` 本地实现、部署和受控公网验证;审批模板 ID、审批单号 `sp_no`、真实回调配置和 HR 写接口仍需后续独立合同处理,不得直接跳到考勤/审批镜像、OA 应急接管、恢复回写或 RuleOps。 +WCPC 是 WCP1 后的配置复跑合同,只处理企业微信后台配置和只读 POC 复跑,不开发运行时功能。2026-05-18 已按用户要求自动查找并使用既有在职低风险测试号 `SMOKE002/测试员工` 复跑,报告只记录脱敏企业微信 userid 前缀 `oa_smoke***`;远端报告 `/tmp/wecom-capability-poc-wcpc-smoke002/summary.json` 的结论为 `GO_TO_HR_MASTER_SYNC`,`nextStageAllowed=true`,`blockingCapabilities=[]`。WHMS 已承接该结论并完成 `wecom_hr_master_sync_v1` 本地实现、部署和受控公网验证;审批模板 ID、审批单号 `sp_no`、真实回调配置、补偿拉取、镜像数据模型和 HR 写接口仍需后续独立合同处理,不得直接跳到考勤/审批镜像、OA 应急接管、恢复回写或 RuleOps。 ### 1.10 WHMS 企微 HR 主数据镜像 @@ -128,7 +128,7 @@ WHMS 将企业微信通讯录/人事助手作为 HR 主数据源的读取能力 - 企微不在职状态记录 `needs_offboarding_confirmation`,不自动禁用 OA 账号;离职仍走 OA checklist。 - 已有 OA 员工只更新姓名、部门、职位、直属主管、手机号、邮箱和企微绑定,不覆盖银行账户、身份证、工资、合同附件或历史审批。 -当前状态为已部署并完成受控公网验证:`WHMSLIVE` 已将 WHMS 部署到 `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。WOUA-FIX 后复检为 OA active 5、企微 active 5、匹配 5、OA active 缺企微 0;剩余 5 个企微缺字段按用户决策先不补,1 个归档测试绑定保留审计。`wecom_attendance_approval_mirror_v1` 暂缓到审批模板、测试审批单号、真实回调配置和打卡细项 POC 明确后再另建合同。 +当前状态为已部署并完成受控公网验证:`WHMSLIVE` 已将 WHMS 部署到 `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。WOUA-FIX 后复检为 OA active 5、企微 active 5、匹配 5、OA active 缺企微 0;剩余 5 个企微缺字段按用户决策先不补,1 个归档测试绑定保留审计。`wecom_attendance_approval_mirror_v1` 暂缓到 WAPC2F 自动样件、WAPC2 自动复跑、真实回调 POC、补偿拉取 POC、镜像数据模型和打卡细项明确后再另建合同。 --- diff --git a/docs/管理员手册.md b/docs/管理员手册.md index 6f93ea64..e0b8ecaf 100644 --- a/docs/管理员手册.md +++ b/docs/管理员手册.md @@ -1,6 +1,6 @@ # hyb-oa 管理员手册(10 人以下团队版) -**当前状态(2026-05-19 / WAPC2)**:R7E、PRELAUNCH、CASHIER-VOUCHER-V1、LAUNCH-DEPLOY-FINANCE、FIN-PROD-ENABLE、ACCOUNTING-HANDOFF-V1、ATTV1、HR-WECOM-DIRECTORY-V1、HRWD-CONTACT-LIVE-TEST、DBWFOC、WFDG、WDRG、WCPC、WHMSLIVE、WAPI、WRRA、WOUA-FIX、WRV1、WRA1、WMSG1、WAPC1 和 WAPC2 均已收口;SYSTEM-COMPLETE-GATE 结论为 `GO_TO_USE`。WCP1 历史结论为 `PAUSE_FOR_CONFIG`,WCPC 已使用既有在职测试号 `SMOKE002/测试员工`(报告只记录 `oa_smoke***`)复跑通过,结论为 `GO_TO_HR_MASTER_SYNC`。WHMS 已实现并部署验证 `wecom_hr_master_sync_v1`:企微/人事助手 HR 主数据可 dry-run/apply 到 OA 员工镜像、账号、角色、绑定和审计;默认和最终均为 `force_off`,公网 `SMOKE002` 因企微侧缺手机号、邮箱和部门按 `missing_required_field` 跳过,未对真实员工执行生产批量 apply。WAPI 后固定企微 API 能力目录和 Secret 矩阵:通讯录使用 `WECOM_CONTACT_SECRET`,人事助手/打卡/消息/OAuth/审批读取使用 `WECOM_AGENT_SECRET`,运行时代码不得靠多个 Secret 试错;WOUA-FIX 已按用户确认软归档 7 个缺企微测试账号,复检 OA active 5、企微 active 5、匹配 5、OA active 缺企微 0,剩余 5 个企微缺字段先接受不补,1 个归档绑定保留审计。WRV1 新增并部署 `npm run check:wecom-runtime-ready` 运行优先门禁;WRA1 已修正 QA-only 打卡只读门禁并公网复跑,报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T180506Z/summary.json` 为 `PASS_WITH_CONFIG_GAPS`;WMSG1 已完成真实企业微信应用消息和 Deeplink 真机确认;WAPC1 已固化审批配置准备清单;WAPC2 已新增请假/补卡模板详情和低风险 `sp_no` 只读 POC runner。审批模板、测试 `sp_no` 和真实回调缺口仍阻断 `wecom_attendance_approval_mirror_v1`。采购、费用、合同、项目、报销、付款、AP、代账交接和高敏附件继续 OA 主办,企业微信只做脱敏提醒和 OA deeplink。公网 `payment_batch_v1=force_on`,`erp_sync=force_off`。公司当前无 ERP/独立财务系统,且 ERP 未来不接入 OA;财务闭环以 OA 内审批、台账、付款批次、银行对公付款回单和月度代账交接为准。 +**当前状态(2026-05-19 / WPROC1)**:R7E、PRELAUNCH、CASHIER-VOUCHER-V1、LAUNCH-DEPLOY-FINANCE、FIN-PROD-ENABLE、ACCOUNTING-HANDOFF-V1、ATTV1、HR-WECOM-DIRECTORY-V1、HRWD-CONTACT-LIVE-TEST、DBWFOC、WFDG、WDRG、WCPC、WHMSLIVE、WAPI、WRRA、WOUA-FIX、WRV1、WRA1、WMSG1、WAPC1、WAPC2 和 WPROC1 均已收口;SYSTEM-COMPLETE-GATE 结论为 `GO_TO_USE`。WCP1 历史结论为 `PAUSE_FOR_CONFIG`,WCPC 已使用既有在职低风险测试号 `SMOKE002/测试员工`(报告只记录 `oa_smoke***`)复跑通过,结论为 `GO_TO_HR_MASTER_SYNC`。WHMS 已实现并部署验证 `wecom_hr_master_sync_v1`:企微/人事助手 HR 主数据可 dry-run/apply 到 OA 员工镜像、账号、角色、绑定和审计;默认和最终均为 `force_off`,公网 `SMOKE002` 因企微侧缺手机号、邮箱和部门按 `missing_required_field` 跳过,未对真实员工执行生产批量 apply。WAPI 后固定企微 API 能力目录和 Secret 矩阵:通讯录使用 `WECOM_CONTACT_SECRET`,人事助手/打卡/消息/OAuth/审批读取使用 `WECOM_AGENT_SECRET`,运行时代码不得靠多个 Secret 试错;WOUA-FIX 已按用户确认软归档 7 个缺企微测试账号,复检 OA active 5、企微 active 5、匹配 5、OA active 缺企微 0,剩余 5 个企微缺字段先接受不补,1 个归档绑定保留审计。WRV1 新增并部署 `npm run check:wecom-runtime-ready` 运行优先门禁;WRA1 已修正 QA-only 打卡只读门禁并公网复跑,报告 `/app/artifacts/qa-flow/wecom-runtime-ready-20260518T180506Z/summary.json` 为 `PASS_WITH_CONFIG_GAPS`;WMSG1 已完成真实企业微信应用消息和 Deeplink 真机确认;WAPC1 已固化审批配置准备清单;WAPC2 已新增请假/补卡模板详情和低风险 `sp_no` 只读 POC runner。WPROC1 明确 WAPC2 后必须先做 WAPC2F 自动样件、WAPC2 自动复跑、WCBK1 回调只读 POC、WACP3 补偿拉取 POC 和 WADM1 镜像数据模型设计,不能直接进入 `wecom_attendance_approval_mirror_v1`。采购、费用、合同、项目、报销、付款、AP、代账交接和高敏附件继续 OA 主办,企业微信只做脱敏提醒和 OA deeplink。公网 `payment_batch_v1=force_on`,`erp_sync=force_off`。公司当前无 ERP/独立财务系统,且 ERP 未来不接入 OA;财务闭环以 OA 内审批、台账、付款批次、银行对公付款回单和月度代账交接为准。 ## 1. 适用范围 - 适用于 `small_team_internal` 工作区模式。 @@ -198,7 +198,7 @@ WCP1/WCPC/WHMS 后续推进: 2. WCP1 历史结论为 `PAUSE_FOR_CONFIG`;WCPC 已用既有在职测试号完成远端只读复跑,报告 `/tmp/wecom-capability-poc-wcpc-smoke002/summary.json`,结论 `GO_TO_HR_MASTER_SYNC`。 3. WCPC 已证明 HR 主数据镜像准入项可用:通讯录成员读取、人事助手花名册读取、打卡短窗口记录/规则读取和假期余额读取均达到可复用状态;审批模板、审批实例和回调配置仍是后续考勤/审批镜像前置项。 4. WHMS 已实现并部署验证 `wecom_hr_master_sync_v1`,包括同步批次、逐员工结果、dry-run/apply、People 管理入口和 QA-only runner;公网验证后最终保持 `force_off`。 -5. 正式开发仍按 `wecom_hr_master_sync_v1` -> `runtime_first_wecom_enablement` -> `WOUA-FIX / WECOM-RUNTIME-READY-V1` -> `WAPC1 审批配置准备` -> `WAPC2 请假/补卡只读 POC` -> `wecom_attendance_approval_mirror_v1` -> `oa_hr_emergency_mode_v1` -> `wecom_recovery_writeback_v1` -> `wecom_ruleops_v1` 分合同实施;WOUA-FIX 已收口测试账号差异和处理决策,WRV1/WRA1/WMSG1 已验证运行入口、OAuth/绑定、脱敏消息、Deeplink、通讯录、人事助手和打卡读取主链路。审批模板 ID、测试 `sp_no`、真实回调配置、验签/解密/幂等和补偿拉取未明确前,不得进入深度考勤/审批镜像。 +5. 正式开发仍按 `wecom_hr_master_sync_v1` -> `runtime_first_wecom_enablement` -> `WOUA-FIX / WECOM-RUNTIME-READY-V1` -> `WAPC1 审批配置准备` -> `WAPC2 请假/补卡只读 POC` -> `WAPC2F 自动生成 POC 样件` -> `WAPC2 自动复跑` -> `WCBK1 回调只读 POC` -> `WACP3 补偿拉取 POC` -> `WADM1 镜像数据模型设计` -> `wecom_attendance_approval_mirror_v1` -> `oa_hr_emergency_mode_v1` -> `wecom_recovery_writeback_v1` -> `wecom_ruleops_v1` 分合同实施;WOUA-FIX 已收口测试账号差异和处理决策,WRV1/WRA1/WMSG1 已验证运行入口、OAuth/绑定、脱敏消息、Deeplink、通讯录、人事助手和打卡读取主链路。审批模板 ID、测试 `sp_no`、真实回调配置、验签/解密/幂等、补偿拉取和镜像数据模型未明确前,不得进入深度考勤/审批镜像。 6. 任何生产写接口、企微规则写入、应急模式开启或恢复回写都必须有单独批准、dry-run 或可审计记录。 WCPC 配置复跑清单: @@ -239,11 +239,12 @@ WAPC1 审批配置准备清单: WAPC2 请假/补卡只读 POC 操作口径: -1. 管理员先在企业微信后台确认请假和补卡模板 ID,并各创建一条低风险测试审批单。 -2. 测试单 `sp_no` 不得包含采购、合同、报销、发票、银行回单、高敏附件或真实敏感业务资料。 -3. QA 在服务器容器内执行 `npm run check:wecom-approval-poc -- --live --format=json`,并通过 CLI 或临时 env 传入请假/补卡模板 ID 和 `sp_no`。 -4. 报告结论 `PASS_APPROVAL_POC` 只代表模板详情和审批详情只读链路可用;`PARTIAL_APPROVAL_POC_NEEDS_CONFIG` 代表缺模板 ID 或 `sp_no`;`SKIP/BLOCKED_BY_EXTERNAL_CONFIG` 代表 Secret、权限、可信 IP、可见范围或企微 API 阻断。 -5. 报告只看脱敏模板 ID/`sp_no` 前缀、字段类型计数、审批节点计数和错误分类;不得截图或转存完整 `sp_no`、表单值、附件、评论、Secret、token 或原始 payload。 +1. 优先用 WAPC2F runner 自动生成 OA-POC 请假/补卡测试模板和低风险测试审批单;如果企微 API 或权限不支持,再记录 `NEEDS_CONFIG` 让管理员手工处理。 +2. WAPC2F 默认申请人为 `SMOKE002`,审批人为 `SMOKE101`;两者必须 active、已绑定企微、可见、不是同一 OA 员工、不是同一企微 userid。`SMOKE101` 不可用时不自动换人,先问答确认。 +3. 测试单 `sp_no` 不得包含采购、合同、报销、发票、银行回单、高敏附件或真实敏感业务资料。 +4. QA 在服务器容器内执行 `npm run check:wecom-approval-poc -- --live --format=json`,并通过 CLI 或临时 env 传入请假/补卡模板 ID 和 `sp_no`。 +5. 报告结论 `PASS_APPROVAL_POC` 只代表模板详情和审批详情只读链路可用;`PARTIAL_APPROVAL_POC_NEEDS_CONFIG` 代表缺模板 ID 或 `sp_no`;`SKIP/BLOCKED_BY_EXTERNAL_CONFIG` 代表 Secret、权限、可信 IP、可见范围或企微 API 阻断。 +6. 报告只看脱敏模板 ID/`sp_no` 前缀、字段类型计数、审批节点计数和错误分类;不得截图或转存完整 `sp_no`、表单值、附件、评论、Secret、token 或原始 payload。 ### 3.3 正式财务闭环与代账交接 @@ -419,7 +420,7 @@ WAPC2 请假/补卡只读 POC 操作口径: - `WECOM_ALLOWED_RETURN_HOSTS=oa.hyinda.com` 5. 先让管理员用账号密码登录,在 `个人设置` 完成一次绑定,再测试企业微信工作台直达;已绑定用户从手机企业微信进入时应直接看到移动工作台。 6. 若启用 OA 同步企业微信打卡数据,在企业微信打卡 API「可调用接口的应用」中授权 `海音达工作台`。OA 默认可复用 `WECOM_AGENT_SECRET`;只有单独创建考勤同步应用时才额外配置 `WECOM_CHECKIN_SECRET`。 -7. HR/考勤员工日常审批后续配置企业微信原生审批模板作为主流程;按 WAPC1 先准备请假、补卡、外出、加班模板 ID、低风险测试 `sp_no` 和回调配置,WAPC2 先只读验证请假/补卡模板详情和审批详情,再进入后续 POC。报销、财务、采购、合同和项目类 OA 主办审批仍使用企业微信消息提醒并回到 OA 页面完成。 +7. HR/考勤员工日常审批后续配置企业微信原生审批模板作为主流程;按 WAPC1 先准备请假、补卡、外出、加班模板 ID、低风险测试 `sp_no` 和回调配置,WAPC2 先只读验证请假/补卡模板详情和审批详情,再按 WPROC1 顺序做 WAPC2F 自动样件、WAPC2 自动复跑、WCBK1 回调 POC、WACP3 补偿拉取 POC 和 WADM1 镜像数据模型。报销、财务、采购、合同和项目类 OA 主办审批仍使用企业微信消息提醒并回到 OA 页面完成。 ### 员工会看到的典型状态 - 未绑定:登录页会提示“当前企业微信账号尚未绑定”,回退到账号密码登录。 diff --git a/docs/需求-企业微信基础设施规约.md b/docs/需求-企业微信基础设施规约.md index e9e7008e..d3095364 100644 --- a/docs/需求-企业微信基础设施规约.md +++ b/docs/需求-企业微信基础设施规约.md @@ -6,7 +6,7 @@ **上级事实源**:[海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md) **相关事实源**:[需求 - 统一审批中心规约](./需求-统一审批中心规约.md)、[企微 API 能力目录](./企微API能力目录.md) -本规约细化企业微信在 `hyb-oa` 中的基础设施边界、入口、免登/绑定、通讯录身份、消息通知、deeplink、打卡、人事助手、原生审批、OA 镜像、人工接管和恢复回写要求。WFOC 起产品方向调整为“企微优先 + OA 无痛接管”;DBWFOC 后进一步固定为:HR/考勤员工日常审批优先使用企业微信,OA 做按域镜像、备份接管、财务闭环和审计中台;采购、合同、项目、财务和高敏附件继续由 OA 主办。WAPI 后,所有企微相关开发必须先读取本规约和 [企微 API 能力目录](./企微API能力目录.md),确认官方 API、Secret、权限、可信 IP、回调/模板和读写边界,再拆 Issue CSV。WMSG1 已证明企业微信应用消息和 Deeplink 真机回流可用;WAPC1 后审批进入配置准备清单,WAPC2 后先做请假/补卡模板详情与低风险 `sp_no` 只读 POC,不是直接进入审批镜像实现。 +本规约细化企业微信在 `hyb-oa` 中的基础设施边界、入口、免登/绑定、通讯录身份、消息通知、deeplink、打卡、人事助手、原生审批、OA 镜像、人工接管和恢复回写要求。WFOC 起产品方向调整为“企微优先 + OA 无痛接管”;DBWFOC 后进一步固定为:HR/考勤员工日常审批优先使用企业微信,OA 做按域镜像、备份接管、财务闭环和审计中台;采购、合同、项目、财务和高敏附件继续由 OA 主办。WAPI 后,所有企微相关开发必须先读取本规约和 [企微 API 能力目录](./企微API能力目录.md),确认官方 API、Secret、权限、可信 IP、回调/模板和读写边界,再拆 Issue CSV。WMSG1 已证明企业微信应用消息和 Deeplink 真机回流可用;WAPC1 后审批进入配置准备清单,WAPC2 后先做请假/补卡模板详情与低风险 `sp_no` 只读 POC,WPROC1 后还必须先做自动样件、回调、补偿拉取和镜像数据模型门禁,不是直接进入审批镜像实现。 --- @@ -35,7 +35,7 @@ | 通讯录 | 成员创建、读取、更新、禁用或删除 | 近期已验证 OA 写企微;后续改为企微主源同步 OA,OA 保留修复和审计 | `CAN_REUSE_NOW`:HCLT create/update/disable、部门读取和 WCPC 既有在职测试号 `contact.member_read` 均已通过 | | 人事助手 | 员工字段配置、花名册读取、花名册更新 | 作为员工主数据源,驱动 OA 员工、账号、角色、绑定和状态镜像 | `LOCAL_IMPLEMENTED_FOR_READ_SYNC`:字段配置和既有在职测试号花名册读取已通过;WHMS 已本地实现只读同步到 OA;资料更新写接口仍需单独 POC | | 打卡 | 打卡记录、员工规则、日报、月报、排班、补卡、规则管理 | 企微主办规则和采集,OA 同步按域镜像和应急对账 | `CAN_REUSE_NOW_FOR_READ`:WCPC 短窗口打卡记录和规则读取通过;日报/月报/排班等细项留到考勤镜像合同继续验证 | -| 审批 | 模板详情、提交审批、审批状态回调、审批详情、模板创建/更新、假期余额 | HR/考勤员工日常审批企微主办,OA 同步镜像;OA 主办财务、采购、合同、项目和报销审批不迁移 | `POC_RUNNER_READY_NEEDS_CONFIG`:假期余额读取通过;WAPC1 已固化配置准备清单,WAPC2 已新增请假/补卡模板详情和审批详情只读 POC runner;模板 ID、低风险测试审批单号和回调配置仍需在考勤/审批镜像前补齐 | +| 审批 | 模板详情、提交审批、审批状态回调、审批详情、模板创建/更新、假期余额 | HR/考勤员工日常审批企微主办,OA 同步镜像;OA 主办财务、采购、合同、项目和报销审批不迁移 | `POC_RUNNER_READY_NEEDS_CONFIG`:假期余额读取通过;WAPC1 已固化配置准备清单,WAPC2 已新增请假/补卡模板详情和审批详情只读 POC runner;模板 ID、低风险测试审批单号、WAPC2F 自动样件、真实回调、补偿拉取和镜像数据模型仍需在考勤/审批镜像前补齐 | | 工作台和消息 | 自建应用入口、应用消息、deeplink | 继续作为 OA 移动入口和通知渠道 | `CAN_REUSE_NOW`;WRV1 新增 `check:wecom-runtime-ready` 对入口、OAuth、脱敏消息 dry-run 和 deeplink 做运行就绪门禁 | | 财务/报销 | 企微不提供本项目需要的 PDF OCR、付款批次、银行回单和代账闭环 | OA 主办 | `KEEP_OA_PRIMARY` | | 真实支付、ERP、图片 OCR、银行流水导入 | 非本路线目标 | 不进入当前路线 | `NOT_IN_SCOPE` | @@ -223,9 +223,10 @@ REQAUD 复核后,ATTV1 已完成统一入口实现,企业微信打卡边界 ## 7.8 WDRG 开发路线图门禁 - WDRG 后,企业微信相关运行时迁移采用“路线图门禁 + 单功能 Issue CSV”,路线图事实源为 [企微优先开发路线图](./企微优先开发路线图.md)。 -- WAPC2 后阶段顺序调整为 `WECOM-CAPABILITY-POC-V1` -> `wecom_hr_master_sync_v1` -> `runtime_first_wecom_enablement` -> `WOUA-FIX / WECOM-RUNTIME-READY-V1` -> `WAPC1 审批配置准备` -> `WAPC2 请假/补卡只读 POC` -> `wecom_attendance_approval_mirror_v1` -> `oa_hr_emergency_mode_v1` -> `wecom_recovery_writeback_v1` -> `wecom_ruleops_v1`。 +- WPROC1 后阶段顺序调整为 `WECOM-CAPABILITY-POC-V1` -> `wecom_hr_master_sync_v1` -> `runtime_first_wecom_enablement` -> `WOUA-FIX / WECOM-RUNTIME-READY-V1` -> `WAPC1 审批配置准备` -> `WAPC2 请假/补卡只读 POC` -> `WAPC2F 自动生成 POC 样件` -> `WAPC2 自动复跑` -> `WCBK1 回调只读 POC` -> `WACP3 补偿拉取 POC` -> `WADM1 镜像数据模型设计` -> `wecom_attendance_approval_mirror_v1` -> `oa_hr_emergency_mode_v1` -> `wecom_recovery_writeback_v1` -> `wecom_ruleops_v1`。 - `WECOM-CAPABILITY-POC-V1` 已由 WCPC 收口,WHMS/WHMSLIVE 已完成 HR 主数据镜像实现和受控公网验证;后续不得跳过运行优先门禁和 WOUA 差异处理决策直接开发企微 HR/考勤审批镜像、OA 应急接管、恢复回写或 RuleOps 正式写入。 -- 运行优先阶段先利用入口、免登/绑定、脱敏消息、deeplink、通讯录 userid 清单、人事助手花名册读取和打卡读取;WOUA-FIX 已按用户确认软归档 7 个缺企微测试账号,复检 `oaActiveMissingInWecom=0`;剩余企微缺字段先接受不补,归档测试绑定保留审计。WRV1 用 `server/src/scripts/check-wecom-runtime-ready.js` 固化运行优先门禁,WRA1 修正 QA-only 打卡只读门禁,WMSG1 完成真实消息和 Deeplink 真机确认。报告结论只能是 `PASS_RUNTIME_READY`、`PASS_WITH_CONFIG_GAPS` 或 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。该结论仍不能直接放行深度镜像,深度考勤/审批镜像需在 WAPC1 配置准备清单完成、WAPC2 请假/补卡只读 POC 和后续回调配置明确后再拆。 +- 运行优先阶段先利用入口、免登/绑定、脱敏消息、deeplink、通讯录 userid 清单、人事助手花名册读取和打卡读取;WOUA-FIX 已按用户确认软归档 7 个缺企微测试账号,复检 `oaActiveMissingInWecom=0`;剩余企微缺字段先接受不补,归档测试绑定保留审计。WRV1 用 `server/src/scripts/check-wecom-runtime-ready.js` 固化运行优先门禁,WRA1 修正 QA-only 打卡只读门禁,WMSG1 完成真实消息和 Deeplink 真机确认。报告结论只能是 `PASS_RUNTIME_READY`、`PASS_WITH_CONFIG_GAPS` 或 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。该结论仍不能直接放行深度镜像,深度考勤/审批镜像需在 WAPC1、WAPC2、WAPC2F、WCBK1、WACP3 和 WADM1 完成后再拆。 +- WAPC2F 自动样件默认申请人 `SMOKE002`、审批人 `SMOKE101`;两者必须 active、已绑定企微、可见、不是同一 OA 员工且不是同一企微 userid。`SMOKE101` 不可用时不自动换人,返回配置缺口并问答确认。 - 线上缺陷、正式使用阻断、真实反馈扫尾和 QA-only 脚本维护可另开合同并行;采购、合同、报销、付款、AP、代账和高敏附件继续 OA 主办,不混入企微 HR/考勤路线。 - 本路线图只代表开发节奏和门禁,不代表任何企微 HR/考勤镜像、OA 应急接管、恢复回写或 RuleOps 运行时能力已完成。 diff --git a/docs/需求-统一审批中心规约.md b/docs/需求-统一审批中心规约.md index a06c506d..b11e5821 100644 --- a/docs/需求-统一审批中心规约.md +++ b/docs/需求-统一审批中心规约.md @@ -5,7 +5,7 @@ **状态**:模块级开发规约 **上级事实源**:[海音达OA-MVP需求规格说明书](./海音达OA-MVP需求规格说明书.md) -本规约细化 `hyb-oa` 审批中心和企业微信原生审批镜像的产品边界、角色权限、状态模型、异常规则、留痕要求和验收场景。WFOC 起,审批按主办方分层;DBWFOC 后边界进一步收窄:报销、财务、采购、合同和项目类审批继续由 OA 主办;请假、补卡、外出、加班等 HR/考勤员工日常审批优先由企业微信主办,OA 同步按域镜像并保留人工接管和恢复回写能力。WMSG1 已验证企业微信应用消息和 Deeplink 回流,WAPC1 后审批镜像前置工作进入配置准备清单阶段。后续审批相关开发必须先从本规约拆分 Issue CSV,再进入技术方案和代码实现。 +本规约细化 `hyb-oa` 审批中心和企业微信原生审批镜像的产品边界、角色权限、状态模型、异常规则、留痕要求和验收场景。WFOC 起,审批按主办方分层;DBWFOC 后边界进一步收窄:报销、财务、采购、合同和项目类审批继续由 OA 主办;请假、补卡、外出、加班等 HR/考勤员工日常审批优先由企业微信主办,OA 同步按域镜像并保留人工接管和恢复回写能力。WMSG1 已验证企业微信应用消息和 Deeplink 回流,WAPC1 后审批镜像前置工作进入配置准备清单阶段,WAPC2 已提供请假/补卡只读 POC runner。WPROC1 后,WAPC2 不能直接放行镜像实现,必须先完成 WAPC2F、WCBK1、WACP3 和 WADM1 门禁。后续审批相关开发必须先从本规约拆分 Issue CSV,再进入技术方案和代码实现。 --- @@ -354,9 +354,9 @@ WF8-3、WF8-4、WF8-5 实现前必须基于本设计给技术方案;实现后 - 采购单附件、合同正文、报价、供应商资料、发票、银行回单、代账资料和其他高敏附件不进入企业微信原生审批或企业微信附件;企业微信只做提醒、deeplink 和免登录回流。 - 按域镜像是默认规则:企微主办 HR/考勤域镜像到 OA;OA 主办采购、合同、项目、财务和报销域不反向全量镜像到企微。 - WFDG 后,审批相关页面和接口必须区分 `OA 主办`、`企微镜像` 和 `OA 应急接管`;企微镜像不得被误用为 OA 日常新建入口,OA 应急接管单据必须带 `EMERGENCY` 并进入恢复回写队列。 -- WAPI/WRRA/WOUA-FIX/WAPC1/WAPC2 后,审批相关运行时迁移必须先读 [企微优先开发路线图](./企微优先开发路线图.md) 和 [企微 API 能力目录](./企微API能力目录.md),按 `wecom_hr_master_sync_v1` -> `runtime_first_wecom_enablement` -> `WOUA-FIX / WECOM-RUNTIME-READY-V1` -> `WAPC1 审批配置准备` -> `WAPC2 请假/补卡只读 POC` -> `wecom_attendance_approval_mirror_v1` -> `oa_hr_emergency_mode_v1` -> `wecom_recovery_writeback_v1` 的顺序拆单功能 Issue CSV;WOUA-FIX 只收口了用户一致性测试账号差异和处理决策,WRV1/WRA1/WMSG1 只验证入口、OAuth/绑定、脱敏消息、deeplink、通讯录、人事助手、打卡只读主链路和真实消息回流。WAPC1 只固化审批配置准备清单;WAPC2 只读模板详情和低风险 `sp_no` 审批详情;真实回调配置、验签/解密/幂等和补偿拉取未明确前,不得直接开发企微审批镜像或恢复回写。 +- WAPI/WRRA/WOUA-FIX/WAPC1/WAPC2/WPROC1 后,审批相关运行时迁移必须先读 [企微优先开发路线图](./企微优先开发路线图.md) 和 [企微 API 能力目录](./企微API能力目录.md),按 `wecom_hr_master_sync_v1` -> `runtime_first_wecom_enablement` -> `WOUA-FIX / WECOM-RUNTIME-READY-V1` -> `WAPC1 审批配置准备` -> `WAPC2 请假/补卡只读 POC` -> `WAPC2F 自动生成 POC 样件` -> `WAPC2 自动复跑` -> `WCBK1 回调只读 POC` -> `WACP3 补偿拉取 POC` -> `WADM1 镜像数据模型设计` -> `wecom_attendance_approval_mirror_v1` -> `oa_hr_emergency_mode_v1` -> `wecom_recovery_writeback_v1` 的顺序拆单功能 Issue CSV;WOUA-FIX 只收口了用户一致性测试账号差异和处理决策,WRV1/WRA1/WMSG1 只验证入口、OAuth/绑定、脱敏消息、deeplink、通讯录、人事助手、打卡只读主链路和真实消息回流。WAPC1 只固化审批配置准备清单;WAPC2 只读模板详情和低风险 `sp_no` 审批详情;WAPC2F 只能生成 OA-POC 低风险测试样件;真实回调配置、验签/解密/幂等、补偿拉取和镜像数据模型未明确前,不得直接开发企微审批镜像或恢复回写。 - WRV1/WRA1 runner `npm run check:wecom-runtime-ready` 中的审批模板、测试 `sp_no` 和真实回调检查只允许输出 `NEEDS_CONFIG`;这类缺口不阻断运行优先主链路的 `PASS_WITH_CONFIG_GAPS`,但必须阻断 `wecom_attendance_approval_mirror_v1`、应急恢复回写和 RuleOps。`WECOM_CHECKIN_SYNC_ENABLED` 只控制正式考勤同步批次,不阻断 QA-only 打卡只读能力探测。 -- WMSG1 已证明企业微信应用消息可达和 Deeplink 可进入 OA 通知页;该证据只清除通知链路,不清除审批模板、测试 `sp_no` 或真实回调前置。WAPC1 固化配置准备清单后,WAPC2 先提供请假/补卡模板详情和低风险审批详情只读 POC;仍需人工提供模板 ID、低风险测试审批单,并在后续合同中验证真实回调。 +- WMSG1 已证明企业微信应用消息可达和 Deeplink 可进入 OA 通知页;该证据只清除通知链路,不清除审批模板、测试 `sp_no` 或真实回调前置。WAPC1 固化配置准备清单后,WAPC2 先提供请假/补卡模板详情和低风险审批详情只读 POC;WPROC1 后优先用 WAPC2F 自动生成 POC 样件,不默认要求人工手动创建模板或测试单。人工介入限于写入批准、密钥/回调配置、企微后台无法 API 化配置、真机确认和风险拍板。 - 后续企微审批同步的 POC 必须输出 `CAN_REUSE_NOW`、`NEEDS_CONFIG`、`NEEDS_API_POC`、`KEEP_OA_PRIMARY`、`NOT_SUPPORTED_BY_API`,缺模板、回调、Secret 或权限时记录 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。 - 若企业微信返回 `invaliduser`、`unlicenseduser`、不可见范围或权限类错误,业务提交和审批动作不应回滚,但通知记录必须可审计、可重试,并提示管理员修正企业微信应用可见范围或账号绑定。 - 真机验收以企业微信手机端收到应用消息并可点击回流为准;系统级弹窗是否出现受客户端通知权限影响,不作为 OA 通知链路硬门槛。 @@ -398,7 +398,26 @@ WAPC2 是 WAPC1 后的首个审批只读 POC,范围只包括请假和补卡, - 报告只记录脱敏模板 ID/`sp_no` 前缀、字段类型计数、审批节点计数和状态摘要;不得输出表单值、附件、评论、完整 `sp_no` 或原始 payload。 - 缺模板 ID 或测试单号时结论为 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`;权限、可信 IP、可见范围或 Secret 阻断时结论为 `SKIP/BLOCKED_BY_EXTERNAL_CONFIG`。 -### 9.3 WF8 邮件通道决策 +### 9.3 WAPC2F 自动生成 POC 样件 + +WAPC2F 是 WAPC2 后的自动化优先补缺阶段,目标是尽量用 QA-only runner 自动创建 OA-POC 请假/补卡测试模板和低风险测试审批单,再自动复跑 WAPC2。它不是正式模板配置、不是真实业务审批,也不是镜像实现。 + +- 默认申请人固定 `SMOKE002`,审批人固定 `SMOKE101`。 +- 预检两者必须 active、已绑定企微、可见、不是同一 OA 员工、不是同一企微 userid。 +- 自审硬阻断,不因 `admin`、`manager`、`ceo`、`finance` 或其他角色放开。 +- 如果 `SMOKE101` 不可用,不自动换成 `HYD000007` 或其他人员;必须返回配置缺口并用问答方式确认新链路。 +- live 写入必须有显式 CLI 参数和 `WECOM_APPROVAL_FIXTURE_WRITE=1`,默认 dry-run。 +- 报告只保存脱敏模板 ID/`sp_no` 前缀、计数、状态和错误分类,不保存完整 `sp_no`、表单值、附件、评论、完整 userid、Secret、token 或原始 payload。 + +### 9.4 WCBK1 / WACP3 / WADM1 前置门禁 + +在 `wecom_attendance_approval_mirror_v1` 前必须补齐三个 POC/设计门禁: + +- `WCBK1 回调只读 POC`:证明真实回调 URL 验证、验签、解密、幂等键、重复投递和失败重试语义。 +- `WACP3 补偿拉取 POC`:证明可按时间窗口获取审批单号,并调用 `getapprovaldetail` 拉取详情。 +- `WADM1 镜像数据模型设计`:先设计字段、状态机、幂等键、索引、隐私保留、审计和迁移回滚方案。 + +### 9.5 WF8 邮件通道决策 WF8 当前正式验收通道为站内通知和企业微信个人应用消息。邮件通道先记录为冻结项,不作为当前 WF8 硬门禁;三渠道验收在本阶段按“两渠道验收 + 邮件冻结说明”处理。 diff --git a/docs/需求-请假考勤修正规约.md b/docs/需求-请假考勤修正规约.md index 750def40..b74ad259 100644 --- a/docs/需求-请假考勤修正规约.md +++ b/docs/需求-请假考勤修正规约.md @@ -7,7 +7,7 @@ **相关事实源**:[需求 - 统一审批中心规约](./需求-统一审批中心规约.md)、[需求 - 企业微信基础设施规约](./需求-企业微信基础设施规约.md) **体验总依据**:[产品设计规则基线](./产品设计规则.md) -本规约细化请假、补卡、外出、加班与考勤修正的产品要求。WFOC 起,企业微信作为 HR/考勤员工日常审批和打卡规则主操作端;OA 负责按域镜像、应急接管、恢复回写、查询导出和审计。WAPC2 后,请假和补卡先通过 QA-only runner 只读验证模板详情与低风险 `sp_no` 审批详情;这不代表真实回调或审批镜像已实现。PC 和移动页面体验以产品设计规则基线为依据,不重复定义通用审批链和移动导航规则。 +本规约细化请假、补卡、外出、加班与考勤修正的产品要求。WFOC 起,企业微信作为 HR/考勤员工日常审批和打卡规则主操作端;OA 负责按域镜像、应急接管、恢复回写、查询导出和审计。WAPC2 后,请假和补卡先通过 QA-only runner 只读验证模板详情与低风险 `sp_no` 审批详情;WPROC1 后还必须先完成 WAPC2F 自动样件、WAPC2 自动复跑、WCBK1 回调只读 POC、WACP3 补偿拉取 POC 和 WADM1 镜像数据模型设计,这不代表真实回调或审批镜像已实现。PC 和移动页面体验以产品设计规则基线为依据,不重复定义通用审批链和移动导航规则。 --- @@ -49,7 +49,7 @@ REQAUD 复核后,ATTV1 已完成统一入口实现,当前运行时完成度 | 请假对团队状态/日历的影响 | `DONE` | 已批准请假可作为团队状态和日历依据。 | | 企业微信打卡作为原始采集 | `DONE` | 由企业微信侧承载定位、人脸、Wi-Fi、设备和防作弊能力;OA 不重造。 | | 企业微信打卡 API 同步 | `PARTIAL` | 已新增同步批次和企微打卡摘要表;有已授权调用打卡 API 的自建应用 Secret 和企微权限时同步,缺配置时记录 `SKIP`。`WECOM_CHECKIN_SECRET` 可作为单独考勤同步应用的显式覆盖;未配置时复用已授权工作台应用的 `WECOM_AGENT_SECRET`。 | -| 企微 HR/考勤审批镜像 | `POC_RUNNER_READY_NEEDS_CONFIG` | WAPC2 已新增请假/补卡模板详情和低风险 `sp_no` 审批详情只读 POC;后续 `wecom_attendance_approval_mirror_v1` 仍需外出/加班 POC、真实回调配置、验签/解密/幂等和补偿拉取方案。 | +| 企微 HR/考勤审批镜像 | `POC_RUNNER_READY_NEEDS_CONFIG` | WAPC2 已新增请假/补卡模板详情和低风险 `sp_no` 审批详情只读 POC;后续 `wecom_attendance_approval_mirror_v1` 仍需 WAPC2F 自动样件、WAPC2 自动复跑、外出/加班 POC、真实回调配置、验签/解密/幂等、补偿拉取 POC 和 WADM1 镜像数据模型。 | | 员工补卡申请审批 | `DONE_AS_OA_FALLBACK` | 当前 OA 能提交补卡修正;WFOC 后正常入口迁往企微,OA 仅在应急模式开放并进入恢复回写。 | | 外出申请审批 | `DONE_AS_OA_FALLBACK` | 当前 OA 能提交外出修正;WFOC 后正常入口迁往企微,OA 仅在应急模式开放并进入恢复回写。 | | 加班申请审批 | `DONE_AS_OA_FALLBACK` | 当前 OA 能提交加班修正;WFOC 后正常入口迁往企微,OA 仅在应急模式开放并进入恢复回写。 | @@ -223,7 +223,12 @@ WFOC 后,正常审批规则优先以企业微信审批模板和打卡/假期 - WAPI/WRRA/WOUA-FIX 后:后续开发先读 [企微优先开发路线图](./企微优先开发路线图.md) 和 [企微 API 能力目录](./企微API能力目录.md),阶段未退出前不得跳阶段;WOUA-FIX 已完成测试账号差异收口,但 `PASS_WITH_FINDINGS` 剩余缺字段/归档绑定不能直接放行深度镜像。 - 当前 A0:`WECOM-RUNTIME-READY-V1` 已由 WRV1/WRA1/WMSG1 验证工作台入口、OAuth/绑定、脱敏消息、OA deeplink、通讯录 userid 清单、人事助手读取、打卡读取和真实消息回流;审批模板、测试 `sp_no` 和真实回调仍只记 `NEEDS_CONFIG`,继续阻断 A1。 - 当前 A0.5:`WAPC1 审批配置准备`,先准备请假、补卡、外出、加班模板 ID、适用范围、字段项、审批人规则、可见范围、低风险测试 `sp_no` 和真实回调配置项;本阶段不接真实回调、不调用写接口、不进入镜像。 -- 后续 A1:`wecom_attendance_approval_mirror_v1`,同步企微请假、补卡、外出、加班审批、附件、历史和状态回调;该命名承接旧口径 `wecom_native_approval_mirror_v1`。正式开发前必须补齐审批模板 ID、测试 `sp_no`、真实回调配置、回调验签/解密/幂等和必要打卡细项 POC。 +- 当前 A0.6:`WAPC2 请假/补卡只读 POC` 已实现 runner;缺模板 ID 或低风险 `sp_no` 时保持 `PARTIAL_APPROVAL_POC_NEEDS_CONFIG`。 +- 后续 A0.7:`WAPC2F 自动生成 POC 样件`,默认申请人 `SMOKE002`、审批人 `SMOKE101`,必须通过非自审预检;若 `SMOKE101` 不可用,不自动换人。 +- 后续 A0.8:`WAPC2 自动复跑`,用自动样件的脱敏模板 ID 和 `sp_no` 复跑只读 POC。 +- 后续 A0.9:`WCBK1 回调只读 POC` 和 `WACP3 补偿拉取 POC`,证明真实回调验签/解密/幂等和按时间窗口拉审批单号/详情。 +- 后续 A0.10:`WADM1 镜像数据模型设计`,先设计字段、状态机、幂等键、索引、隐私保留和迁移回滚。 +- 后续 A1:`wecom_attendance_approval_mirror_v1`,同步企微请假、补卡、外出、加班审批、附件、历史和状态回调;该命名承接旧口径 `wecom_native_approval_mirror_v1`。正式开发前必须补齐审批模板 ID、测试 `sp_no`、真实回调配置、回调验签/解密/幂等、补偿拉取、镜像数据模型和必要打卡细项 POC。 - 后续 A2:企微打卡规则、排班、记录、日报、月报按域镜像,覆盖 Secret/API 权限、短窗口同步、错误码和脱敏证据。 - 后续 A3:`oa_hr_emergency_mode_v1`,管理员人工接管、应急提交、应急审批和恢复队列。 - 后续 A4:`wecom_recovery_writeback_v1`,企微恢复后 dry-run、自动回写、失败重试和冲突清单。 diff --git a/issues/2026-05-19_10-24-43-wecom-approval-fixture-auto-generate-v1.csv b/issues/2026-05-19_10-24-43-wecom-approval-fixture-auto-generate-v1.csv new file mode 100644 index 00000000..520bce66 --- /dev/null +++ b/issues/2026-05-19_10-24-43-wecom-approval-fixture-auto-generate-v1.csv @@ -0,0 +1,10 @@ +ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes +"WAPC2F-0","合同建档与边界冻结","建立 WAPC2F 企微审批 POC 样件自动生成合同;承接 WAPC2 当前缺模板 ID 和低风险 sp_no 的配置缺口,本轮目标是尽量自动创建专用测试模板和测试审批单。","1) CSV 校验通过;2) 范围限定 OA-POC 前缀请假/补卡测试模板和低风险测试审批单;3) 固定 WECOM_AGENT_SECRET;4) 默认 dry-run;5) 默认测试链为申请人 SMOKE002 -> 审批人 SMOKE101,禁止自审;6) 不修改正式模板、不接真实回调、不写 OA 业务数据、不进入 wecom_attendance_approval_mirror_v1。","受影响流程:WAPC2 缺配置 -> 自动生成 POC 样件 -> 复跑模板/审批详情只读 POC;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-19_10-24-43-wecom-approval-fixture-auto-generate-v1.csv。","python3|manual","TODO","TODO","TODO","issues/2026-05-19_10-24-43-wecom-approval-fixture-auto-generate-v1.csv","[]","本合同允许规划自动写企微测试样件,但真实 live 写入仍需后续实施前确认;回滚路径:撤回本轮代码/文档,企微后台中 OA-POC 测试模板和测试单如已生成需人工隐藏/停用或保留审计。" +"WAPC2F-1","路线自动化优先修正","更新路线图和事实源,把 WAPC2 后续阶段调整为自动化优先:WAPC2F 自动生成样件 -> WAPC2 复跑 -> WCBK1 回调 POC -> WACP3 补偿拉取 POC -> WADM1 镜像数据模型 -> 镜像实现。","1) 文档明确后续能自动化的动作优先用 QA-only runner 执行;2) 人工只负责批准写入、配置不可自动化的后台项和确认风险;3) 不再默认要求手工创建模板或测试单;4) 不把自动生成 POC 样件误读为正式模板配置完成。","受影响流程:企微审批路线治理;验证步骤:node scripts/qa/audit-docs.mjs --check-registry;rg -n 'WAPC2F|自动生成|OA-POC|WCBK1|WACP3|WADM1|wecom_attendance_approval_mirror_v1' docs .agents/skills/hyb-oa-delivery/SKILL.md。","node|rg","TODO","TODO","TODO","docs/企微优先开发路线图.md|docs/企微API能力目录.md|docs/需求-统一审批中心规约.md|docs/需求-企业微信基础设施规约.md|docs/管理员手册.md|docs/文档索引.md|docs/文档事实源状态矩阵.md|.agents/skills/hyb-oa-delivery/SKILL.md","[""WAPC2F-0""]","文档只记录自动化策略和边界,不保存 Secret、Token、完整 template_id、完整 sp_no 或原始 payload。" +"WAPC2F-2","企微审批写接口调研与安全门禁","核对企业微信创建审批模板和提交审批申请官方 API 的实际字段、权限、可见范围、可信 IP、审批人规则和限制;固化 live 写入双重或三重确认。","1) create_template/applyevent 的方法、路径、Secret 和字段结构明确;2) 若官方接口不支持所需模板或测试单自动生成,改为 SKIP/BLOCKED_BY_EXTERNAL_CONFIG;3) live 写入必须同时指定 CLI 写入参数和 WECOM_APPROVAL_FIXTURE_WRITE=1;4) 不尝试其他 Secret。","受影响流程:自动样件生成前置安全审查;验证步骤:rg -n '创建审批模板|提交审批申请|applyevent|create_template|WECOM_APPROVAL_FIXTURE_WRITE' docs server/src/scripts server/tests。","rg|manual","TODO","TODO","TODO","docs/企微API能力目录.md|server/src/scripts/check-wecom-approval-fixtures.js|server/src/services/integrations/wecomApproval.js","[""WAPC2F-1""]","若官方文档或远端 API 返回能力不支持,后续只记录不可自动化项,不做绕路试错。" +"WAPC2F-3","QA-only 样件生成 runner","新增 QA-only runner check-wecom-approval-fixtures,用于 dry-run/live 创建 OA-POC 请假/补卡测试模板、提交低风险测试审批单,并输出脱敏 summary.json。","1) package.json 增加 check:wecom-approval-fixtures;2) 默认 dry-run 只构建脱敏 payload;3) live 写入必须显式 --live --create-templates --submit-test-approvals 且 WECOM_APPROVAL_FIXTURE_WRITE=1;4) 支持指定申请人/审批人员工号,默认申请人 SMOKE002、审批人 SMOKE101;5) 预检两者 active、已绑定企微、可见、不是同一 OA 员工且不是同一企微 userid;6) 命中自审时硬阻断;7) 报告不输出完整模板 ID、完整 sp_no、userid、手机号、邮箱、token、secret、表单值、附件、评论或原始 payload。","受影响流程:自动创建测试模板和测试审批单;验证步骤:cd server && node --check src/scripts/check-wecom-approval-fixtures.js;cd server && npx vitest run tests/unit/scripts/check-wecom-approval-fixtures.test.js --reporter=verbose。","node|vitest","TODO","TODO","TODO","server/src/scripts/check-wecom-approval-fixtures.js|server/package.json","[""WAPC2F-2""]","runner 只用于 QA 样件生成;不新增公开业务 API,不改 Prisma schema,不改前端;如果 SMOKE101 不可用,不自动切换为 HYD000007 或其他审批人,返回配置缺口并问答确认。" +"WAPC2F-4","审批模板创建与测试审批提交集成","扩展企微审批集成服务,固定 WECOM_AGENT_SECRET 调用创建审批模板和提交审批申请接口,并复用 WAPC2 脱敏、错误分类和无 fallback 规则。","1) 创建模板只创建 OA-POC 前缀测试模板;2) 提交审批只提交低风险无附件测试单;3) 申请人/审批人命中同一 OA 员工或同一企微 userid 时返回自审阻断;4) API 错误、权限、可见范围、可信 IP 或模板能力限制均返回 BLOCKED_BY_EXTERNAL_CONFIG;5) 不修改或覆盖正式模板。","受影响流程:企微审批测试样件写入;验证步骤:cd server && node --check src/services/integrations/wecomApproval.js;focused vitest 覆盖固定 Secret、无 fallback、dry-run/live 分支、自审阻断和 API 错误分类。","node|vitest","TODO","TODO","TODO","server/src/services/integrations/wecomApproval.js","[""WAPC2F-3""]","真实写企微测试模板可能在企微后台留下记录,报告和最终说明必须提醒管理员后续隐藏/停用/保留审计。" +"WAPC2F-5","自动复跑 WAPC2 只读 POC","样件生成成功后,runner 自动把生成的模板 ID 和 sp_no 传给现有 check:wecom-approval-poc,验证 gettemplatedetail/getapprovaldetail 只读链路。","1) 样件生成成功后自动复用 WAPC2 runner 或等价内部函数复跑;2) 目标结论 PASS_APPROVAL_POC;3) 若只生成部分样件则返回 PARTIAL_APPROVAL_POC_NEEDS_CONFIG;4) 若企微阻断则返回 SKIP/BLOCKED_BY_EXTERNAL_CONFIG。","受影响流程:自动生成样件 -> 自动只读验证 -> 输出一份可审计结论;验证步骤:cd server && npx vitest run tests/unit/scripts/check-wecom-approval-fixtures.test.js tests/unit/scripts/check-wecom-approval-poc.test.js --reporter=verbose。","vitest|node","TODO","TODO","TODO","server/src/scripts/check-wecom-approval-fixtures.js|server/src/scripts/check-wecom-approval-poc.js","[""WAPC2F-4""]","自动复跑不得把生成的完整 ID 或 sp_no 写入报告;只允许脱敏前缀和计数。" +"WAPC2F-6","Focused 单测与隐私回归","新增 focused vitest 覆盖样件生成 runner、写入保护、无 Secret fallback、脱敏报告、自动复跑和阻断分类。","1) 覆盖 dry-run 默认不写;2) 覆盖缺 WECOM_APPROVAL_FIXTURE_WRITE 时 live 不写;3) 覆盖 WECOM_AGENT_SECRET 固定选择;4) 覆盖创建模板、提交测试单、自动复跑;5) 覆盖申请人/审批人相同时自审硬阻断;6) 覆盖 SMOKE101 不可用时不自动换人;7) 覆盖隐私字段不泄露。","受影响流程:WAPC2F 本地质量门禁;验证步骤:cd server && npx vitest run tests/unit/scripts/check-wecom-approval-fixtures.test.js tests/unit/scripts/check-wecom-approval-poc.test.js --reporter=verbose。","vitest","TODO","TODO","TODO","server/tests/unit/scripts/check-wecom-approval-fixtures.test.js|server/tests/unit/scripts/check-wecom-approval-poc.test.js","[""WAPC2F-5""]","单测使用 mock fetch,不访问公网,不写企微。" +"WAPC2F-7","本地门禁与公网受控验证","本地门禁通过后,以 SYNC_ENV=0 受控部署;远端先 dry-run,再在单次进程内设置 WECOM_APPROVAL_FIXTURE_WRITE=1 执行 live 样件生成和 WAPC2 自动复跑。","1) 本地 CSV、node --check、prisma validate、focused vitest、文档审计、skill 校验和 git diff --check 通过;2) SYNC_ENV=0 部署,不同步本地 env;3) live 写入只创建 OA-POC 测试样件,申请链固定 SMOKE002 -> SMOKE101;4) 公网 /ready 和 runtime smoke 通过;5) 报告结论真实记录 PASS/PARTIAL/SKIP。","受影响流程:公网自动化 POC 样件生成和只读验证;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-19_10-24-43-wecom-approval-fixture-auto-generate-v1.csv;cd server && npm run prisma:validate;cd server && npx vitest run tests/unit/scripts/check-wecom-approval-fixtures.test.js tests/unit/scripts/check-wecom-approval-poc.test.js --reporter=verbose;node scripts/qa/audit-docs.mjs --check-registry;SYNC_ENV=0 bash deploy/trialrun/deploy.sh;远端 npm run check:wecom-approval-fixtures。","python3|node|npm|vitest|bash|ssh|curl","TODO","TODO","TODO","N/A","[""WAPC2F-6""]","公网 live 写入前最终说明必须再次提示会在企微后台留下 OA-POC 测试模板/审批记录;不得修改正式模板;若 SMOKE101 不可用,停止并问答确认,不自动换审批人。" +"WAPC2F-8","状态回填、中文提交与下一阶段问答","根据验证结果回填状态并中文提交;最终用问答方式让用户决定是否进入 WCBK1 回调只读 POC、WACP3 补偿拉取 POC 或暂停。","1) Issue 状态按 Test_Method 通过情况回填;2) 中文提交引用 WAPC2F;3) 最终说明包含当前状态、改了什么、测试了什么、结果是什么、剩余风险和下一步问答;4) 不直接进入回调或镜像实现。","受影响流程:WAPC2F 交付闭环和后续路线决策;验证步骤:git status --short;git log --oneline -1;最终问答列出 WCBK1/WACP3/WADM1 选择。","git|manual","TODO","TODO","TODO","issues/2026-05-19_10-24-43-wecom-approval-fixture-auto-generate-v1.csv|N/A","[""WAPC2F-7""]","后续动作默认自动化优先;人工只处理写入批准、企微后台无法 API 化的配置和真机确认。" diff --git a/issues/2026-05-19_10-43-50-wecom-process-route-engineering-v1.csv b/issues/2026-05-19_10-43-50-wecom-process-route-engineering-v1.csv new file mode 100644 index 00000000..a84294a3 --- /dev/null +++ b/issues/2026-05-19_10-43-50-wecom-process-route-engineering-v1.csv @@ -0,0 +1,8 @@ +ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes +"WPROC1-0","合同建档与边界冻结","建立 WPROC1 企微路线与开发流程工程化修正合同;本轮只做 docs-only/contract-only 治理,不写业务代码、不部署、不写 OA 或企微数据。","1) CSV 校验通过;2) 范围限定路线、流程、测试、API、审批规约、索引、矩阵和项目 skill;3) 不新增独立流程文档;4) 不进入 wecom_attendance_approval_mirror_v1。","受影响流程:企微后续路线治理;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-19_10-43-50-wecom-process-route-engineering-v1.csv。","python3|manual","DONE","DONE","DONE","issues/2026-05-19_10-43-50-wecom-process-route-engineering-v1.csv","[]","已验证 CSV;回滚路径:撤回本轮文档和合同变更;本轮无数据库、配置或企微写入。" +"WPROC1-1","修正 WAPC2F 非自审合同","修正 WAPC2F 自动生成 POC 样件合同,不再默认同一人申请和审批;固定低风险非本人链路 SMOKE002 -> SMOKE101,并加入自审硬阻断。","1) WAPC2F 不再出现默认 wangshunli 作为申请/审批默认人;2) 默认申请人为 SMOKE002、审批人为 SMOKE101;3) 预检两者 active、已绑定企微、可见、不是同一 OA 员工、不是同一企微 userid;4) SMOKE101 不可用时不自动换人,返回配置缺口并问答确认。","受影响流程:自动生成企微审批测试样件;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-19_10-24-43-wecom-approval-fixture-auto-generate-v1.csv;rg -n 'SMOKE002|SMOKE101|自审|默认 wangshunli' issues/2026-05-19_10-24-43-wecom-approval-fixture-auto-generate-v1.csv。","python3|rg","DONE","DONE","DONE","issues/2026-05-19_10-24-43-wecom-approval-fixture-auto-generate-v1.csv","[""WPROC1-0""]","已修正 WAPC2F 合同;不得自动替换为 HYD000007;如审批人不可用,后续必须问答确认新的非本人审批链。" +"WPROC1-2","收紧企微阶段路线","更新企微优先开发路线图和相关路线事实源,把 WAPC2 后续顺序固定为 WAPC2F 自动生成样件、WAPC2 自动复跑、WCBK1 回调 POC、WACP3 补偿拉取 POC、WADM1 镜像数据模型设计,再进入深度镜像。","1) 文档不再暗示 WAPC2 后可直接进入镜像;2) wecom_attendance_approval_mirror_v1 前必须完成回调 POC、补偿拉取 POC 和镜像数据模型设计;3) OA 主办域和企微主办域边界保持不变。","受影响流程:企微审批/考勤后续开发路线;验证步骤:rg -n 'WAPC2F|WCBK1|WACP3|WADM1|wecom_attendance_approval_mirror_v1' docs .agents/skills/hyb-oa-delivery/SKILL.md。","rg","DONE","DONE","DONE","docs/企微优先开发路线图.md|docs/海音达OA-MVP需求规格说明书.md|docs/产品口径.md|docs/需求-请假考勤修正规约.md|docs/需求-统一审批中心规约.md|docs/需求-企业微信基础设施规约.md|docs/管理员手册.md|.agents/skills/hyb-oa-delivery/SKILL.md","[""WPROC1-1""]","已更新路线事实源;路线修正只控制顺序和门禁,不实现镜像、回调、补偿拉取或数据模型。" +"WPROC1-3","固化三层门禁和 DoR/DoD","在开发交付规约中固化路线门禁、能力门禁、实现门禁三层流程,并新增 Definition of Ready / Definition of Done 和自动化优先规则。","1) Definition of Ready 覆盖 Issue CSV、事实源、API/Secret、测试账号、申请人/审批人、自审校验、写入开关、回滚和脱敏边界;2) Definition of Done 覆盖 Test_Method、状态回填、事实源、本地门禁、公网验证和中文提交;3) 人工介入限制为批准、密钥/回调配置、企微后台不可 API 化配置、真机确认和风险拍板。","受影响流程:后续所有非微小企微开发;验证步骤:rg -n 'Definition of Ready|Definition of Done|自动化优先|路线门禁|能力门禁|实现门禁' docs/开发交付与变更管理规约.md docs/测试规约与回归门禁.md。","rg","DONE","DONE","DONE","docs/开发交付与变更管理规约.md|docs/测试规约与回归门禁.md","[""WPROC1-2""]","已固化三层门禁;不替代 AGENTS.md 的方案批准和 Issue CSV 约束。" +"WPROC1-4","同步 API 与审批规约","更新企微 API 能力目录和统一审批规约,固定不清楚的企微能力先查官方 API 和本地目录;高风险能力先 POC,缺配置必须 NEEDS_CONFIG 或 SKIP/BLOCKED_BY_EXTERNAL_CONFIG。","1) API 目录记录 WAPC2F/WCBK1/WACP3/WADM1 后续门禁;2) 审批规约明确非自审、回调验签解密幂等、补偿拉取和镜像模型设计前置;3) 不记录 Secret、Token、完整 userid、完整 sp_no 或原始 payload。","受影响流程:企微 API 使用和审批镜像前置设计;验证步骤:rg -n 'WPROC1|WAPC2F|WCBK1|WACP3|WADM1|BLOCKED_BY_EXTERNAL_CONFIG|SMOKE002|SMOKE101' docs/企微API能力目录.md docs/需求-统一审批中心规约.md。","rg","DONE","DONE","DONE","docs/企微API能力目录.md|docs/需求-统一审批中心规约.md","[""WPROC1-3""]","已同步 API 与审批规约;WAPC2F 若后续进入写入 POC,必须另行批准 live 写入,不在 WPROC1 执行。" +"WPROC1-5","回写索引矩阵和 skill","更新文档索引、事实源矩阵和 hyb-oa-delivery skill,登记 WPROC1、修正后续路线和自动化优先口径。","1) 文档索引和事实源矩阵出现 WPROC1;2) skill 提醒企微开发先读 API 目录和路线图,并遵守 WAPC2F 非自审链路;3) quick_validate 通过。","受影响流程:后续 agent 读取顺序和事实源选择;验证步骤:node scripts/qa/audit-docs.mjs --check-registry;python3 /home/shunli/.codex/skills/.system/skill-creator/scripts/quick_validate.py .agents/skills/hyb-oa-delivery。","node|python3","DONE","DONE","DONE","docs/文档索引.md|docs/文档事实源状态矩阵.md|.agents/skills/hyb-oa-delivery/SKILL.md","[""WPROC1-4""]","已回写索引、矩阵和 skill;audit-docs errors=0,保留既有 unregistered docs files 警告。" +"WPROC1-6","门禁验证、状态回填和提交","执行 WPROC1 Test Plan,按真实结果回填 WPROC1 与 WAPC2F 状态,完成中文提交。","1) WPROC1 CSV 和 WAPC2F CSV 校验通过;2) 文档审计、skill 校验、关键词核验和 git diff --check 通过;3) Issue 状态回填真实;4) 中文 commit 引用 WPROC1。","受影响流程:WPROC1 交付闭环;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-19_10-43-50-wecom-process-route-engineering-v1.csv;python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-19_10-24-43-wecom-approval-fixture-auto-generate-v1.csv;node scripts/qa/audit-docs.mjs --check-registry;python3 /home/shunli/.codex/skills/.system/skill-creator/scripts/quick_validate.py .agents/skills/hyb-oa-delivery;git diff --check。","python3|node|git|rg","DONE","DONE","DONE","N/A","[""WPROC1-5""]","本轮未部署;无业务代码、无公网变更、无 OA/企微数据写入;提交前已完成门禁复跑。"