35 KiB
35 KiB
name, description
| name | description |
|---|---|
| hyb-oa-delivery | Use for hyb-oa project delivery tasks: natural-language triage, planning with Issue CSV, implementing Fastify/Prisma or React/Vite changes, refining PC/mobile/WeCom UI, reimbursement/invoice/OCR/attachment work, trial-run troubleshooting, automated/visual verification, and Chinese batch commits. |
hyb-oa Delivery
Use this skill when working in /home/shunli/Projects/hyb-oa or when the user asks to continue planning, implementation, trial-run validation, visual QA, reimbursement/invoice improvements, Enterprise WeChat checks, deployment preparation, or project-wide review.
Required Reading
Read only what is relevant:
- Always read
AGENTS.mdand the newest relevantissues/*.csv. - After R5, first check the main R5/R6 contract status before planning trial-run or follow-up work; R5 must remain the completed gate and R6 must have its own Issue CSV before expanding scope.
- For UI/page work, PC/mobile/WeCom experience, approval UX, or domestic OA benchmarking, read
docs/产品设计规则.mdandreferences/visual-qa.md. DG8 makes Feishu workbench/approval the single main UI/layout reference, with Hyinda branding and project rules taking priority. DG9 adds the A/B/C page layering and shared workbench/mobile samples; choose the DG9 sample before designing or coding a page. Other products are only function/process/control references. Mobile page work must treatdocs/产品设计规则.mdas the source of truth for the unified mobile shell, icon grid, card lists, deep Push pages, sticky actions, safe-area, and cross-viewport matrix. 移动页必须先对齐该设计事实源,再进入实现或验证。 - 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能力目录.mdbefore planning or coding. WAPI fixes the current Secret matrix: contacts useWECOM_CONTACT_SECRET; workbench/OAuth/messages/HR assistant/roster/check-in/approval useWECOM_AGENT_SECRET;WECOM_CHECKIN_SECRETis only an explicit check-in override;WECOM_HR_ASSISTANT_SECRETis 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/企微优先开发路线图.mdbefore planning or coding. WDRG makes the roadmap authoritative for stage order; WAPI adds the runtime-first stage before deep mirror work; WRRA states that WOUAPASS_WITH_FINDINGSdoes not clear deep mirror work; WOUA-FIX has now soft-archived the 7 OA active test accounts missing in WeCom, fixed theT0000seed reactivation behavior, transferred theSMOKE201test-manager side effects, and rerun WOUA withoaActiveMissingInWecom=0. WCPC has rerun the capability POC with an existing active test account and reachedGO_TO_HR_MASTER_SYNC; WHMS/WHMSLIVE has implemented, deployed, and publicly verifiedwecom_hr_master_sync_v1, with the production flag restored toforce_offand 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-risksp_noread-only POC runner. WPROC1/WPROC2 fixed the engineering process gate; WEGOV1 is the route gate, and WACP3R has now rerun the compensation-pull POC by automatically discovering OA-POC leave/missed-punch template IDs fromSMOKE002creator. Public report/app/artifacts/qa-flow/wecom-approval-compensation-poc-20260519T115944Z/summary.jsonisPASS_WITH_FINDINGS: compensation pull and detail read work, with finding that callback evidence files are not persisted across deploys. WREAD1/WREAD1F have now completed real-device readability confirmation for leave and missed-punch: public report/app/artifacts/qa-flow/wecom-approval-readability-gate-20260519T133628Z/summary.jsonisPASS_READABLE; the user confirmed cards/lists/details are readable, reject has second confirmation, and approve is single-tap. WADM1 has completed the self-owned archive/mirror data-model design. WARCH1 has implemented and publicly verified the minimum leave/missed-punch archive slice: Prisma archive/callback/compensation/finding tables, callback DB persistence with non-200 retry on DB failure, compensation persistence behind--persist-to-db+WECOM_ARCHIVE_WRITE=1, and offlinenpm run check:wecom-approval-archive; public reports/app/artifacts/qa-flow/wecom-approval-compensation-poc-20260519T160306Z/summary.jsonand/app/artifacts/qa-flow/wecom-approval-archive-20260519T160330Z/summary.jsonarePASS_WITH_FINDINGS, with 2 archived histories readable and only a historical pre-WARCH1 callback gap finding. WARCH2 has now added the formal OA read-only archive API/page:/api/wecom/approval-archive,/wecom-approval-archive, and/mobile/wecom-approval-archiveread OA DB only, do not call WeCom API or read WeCom Secrets, and enforce self/direct-report/HR-admin visibility with unmapped applicant records HR/admin-only. WROAD2+OPS is the controlled launch gate: use test accountsSMOKE002 -> SMOKE101, observe/admin-alert via employee_noHYD000006(the employee id forwangshunli), run daily checks for 3 days, allow only compensation archive writes to OA DB viaWECOM_ARCHIVE_WRITE=1, and do not create WeCom templates/approvals, write WeCom, or expand real users. Day 0 public report/app/artifacts/qa-flow/wroad2-ops-20260520-041941/summary.jsonisPASS_WITH_FINDINGS: WeCom runtime, compensation archive persistence, offline archive read, and privacy smoke pass; findings are missing live-smoke login credentials/pending OCR subcheck and historical callback gap. It still does not implement full mirror, outing/overtime live, emergency mode, writeback, or RuleOps. WAUTO1 addsscripts/qa/collect-wecom-controlled-trial-evidence.shfor read-only controlled-trial evidence aggregation; it must not setWECOM_ARCHIVE_WRITE=1,WECOM_CHECKIN_ARCHIVE_WRITE=1, orWECOM_APPROVAL_FIXTURE_WRITE=1. WEXT1LD is the outing/overtime live-before dry-run gate and does not authorize live fixture creation. WFULLSMOKE1 addsscripts/qa/run-three-day-full-goal-smoke.shas the three-day full-goal smoke controller; it may create only OA test business data markedTEST-SMOKE-WFULL, and must not write WeCom, create outing/overtime fixtures, enable real employees, make real payments, connect real payment providers, write ERP, or import bank statements. WTCLOSE2 adds the final test-account closeout and disables WFULLSMOKE1 public writes during that closeout. WPROC2 adds the executableprocess gate: before WAPC2F or other high-risk WeCom work, runnode scripts/qa/check-process-contract.mjs --baselineand the issue-specific profile check to enforce DoR/DoD, fixed Secret source, non-self approval, live write switches, missing-config classification, and redaction boundaries. Do not startwecom_attendance_approval_mirror_v1,oa_hr_emergency_mode_v1,wecom_recovery_writeback_v1, orwecom_ruleops_v1without WROAD2-CLOSEOUT, WROAD2-BIZ1, WAPPR1, WRULE1, WAUTO1/WEXT1LD, WFULLSMOKE1 evidence, WTCLOSE2, WEXT1-FORMAL, WREAL1 question gates or explicit approval, and the next stage's own Issue CSV and acceptance gates. - WARCH3/WCHECK1/WEXT1 update the route after WROAD2 Day 0: WARCH3 adds
scripts/qa/run-warch3-ops-daily.sh,deploy/trialrun/install-warch3-ops-timer.sh, andnpm run send:wecom-ops-alertfor 07:30 systemd巡检和脱敏企微告警;public report/app/artifacts/qa-flow/warch3-ops-20260520-054841/summary.jsonisPASS_WITH_FINDINGS, and WOPS1 now fixes alert noise: default recipient isHYD000006(the employee_no forwangshunli), repeated known findings are skipped viaartifacts/qa-flow/warch3-ops-alert-state.json, and only blocked/failure/new-finding/status-worsening/force sends a message. WOPS1 public rerun/app/artifacts/qa-flow/warch3-ops-20260520-070731/summary.jsonisPASS_WITH_FINDINGS, and alert report/app/artifacts/qa-flow/wecom-ops-alert-20260520T070740Z/summary.jsonisPASS_ALERT_SKIPPED_NO_FINDINGSwithno_new_findings_or_status_worsening. WCHECK1 addsnpm run check:wecom-checkin-summary-archive, daily/monthly check-in summaries, and rule snapshots with--persist-to-db+WECOM_CHECKIN_ARCHIVE_WRITE=1as the only OA DB write gate; public reports/app/artifacts/qa-flow/wecom-checkin-summary-archive-20260520T054907Z/summary.jsonand/app/artifacts/qa-flow/wecom-checkin-summary-archive-20260520T054926Z/summary.jsonarePASS_CHECKIN_ARCHIVE_READYandPASS_CHECKIN_ARCHIVE_OFFLINE_READY. WEXT1 only extends approval fixtures for--target=outing --target=overtimedry-run; public report/app/artifacts/qa-flow/wecom-approval-fixtures-20260520T054940Z/summary.jsonisPASS_FIXTURE_DRY_RUN_READY. WAUTO1/WEXT1LD now add a read-only evidence aggregation script and a live-before dry-run contract; WFULLSMOKE1 adds full-domain main-path smoke orchestration across WeCom HR/attendance, OA-primary reimbursement/procurement/contract-project/payment-batch flows, mobile/WeCom entry, and ops checks. These do not create outing/overtime WeCom templates/approvals, expand real users, or implement full mirror/emergency/writeback/RuleOps. WEXT1-FORMAL needs WREMOTE1/WFULLSMOKE2 remote closeout, a new Issue CSV, and explicit approval for manual formal-template submission; WREAL1 real users are asked only after leave, missed punch, outing, and overtime test-account evidence plus approver-rule gate, WRULE1, WFULLSMOKE1, WTCLOSE2 and WEXT1-FORMAL are passable/explainable. - WROAD2-BIZ1/WAPPR1/WRULE1 adjust the post-WOPS1 route: during the 3-day window, add manual business smoke on test accounts without replacing WARCH3 automation.
SMOKE002should try WeCom check-in and submit low-risk leave/missed-punch,SMOKE101must open details before approving, andHYD000006checks OA archived approval/check-in summaries. WAPPR1 treats "applicant must manually choose approver" as a blocking rule finding: test templates remainSMOKE002 -> SMOKE101, formal leave/missed-punch/outing/overtime templates must auto-resolve approvers from direct manager, department owner, or configured approval role, and applicant-chosen arbitrary approvers/self-approval must block WREAL1. Official WeCom APIs do not expose a read-only native-template approval-rule configuration surface:gettemplatedetailreturns controls,getapprovaldetailreturns actual submitted flow, andapplyevent use_template_approver=1is a write-style check, so do not design WAPPR1 as pure API automation. WRULE1 addsnpm run check:wecom-approval-rule-validatorto compare OA theoretical approvers with archived WeCom actual approval chains; it is read-only, does not read WeCom backend rules, and does not replace WAPPR1 A/B/C/D manual gates. WAUTO1 can automate evidence collection, and WFULLSMOKE1 can aggregate full-domain smoke evidence, but WAPPR1 choices A/B/C/D and real-device business actions remain manual gates. Do not start WEXT1-FORMAL, WREAL1, deep mirror, emergency, writeback, or RuleOps until WROAD2-CLOSEOUT, WROAD2-BIZ1, WAPPR1, WRULE1, WAUTO1/WEXT1LD, WFULLSMOKE1, WTCLOSE2, WREMOTE1/WFULLSMOKE2, and the relevant question gates or explicit approval are complete. - WROUTE2 locks the post-WFULLSMOKE1 route: first close out test-account evidence, then ask for WREMOTE1/WFULLSMOKE2 remote closeout and WEXT1-FORMAL formal-template outing+overtime manual test, then ask WREAL1 with exactly 1 real employee + 1 approver/admin observer, then prioritize
wecom_attendance_approval_mirror_v1minimum complete mirror. WTCLOSE1 adds the small-team execution rule: because the company has fewer than 10 people, WAPPR1 targets option A for leave/missed-punch/outing/overtime; formal HR/attendance approvals use one direct manager or configured approval role with admin fallback/blocking when the approver chain is missing, unavailable, invisible, unbound, or self-approval. WRULE1 enforces this as an OA-side validator over archived WeCom approval details;PASS_RULE_MATCHor explainablePASS_WITH_ADMIN_FALLBACKcan support test-account closeout, whileFAIL_APPLICANT_CAN_CHOOSE,FAIL_SELF_APPROVAL,FAIL_APPROVER_MISMATCH, missing manual gates, or external config blockers stop WEXT1-FORMAL/WREAL1. WTCLOSE1 only authorizes WAUTO1/WFULLSMOKE1 aggregation and WEXT1LD dry-run; WTCLOSE2 only performs final test-account evidence closeout. Neither authorizes WeCom writes, real employees, outing/overtime fixture creation, emergency mode, writeback, or RuleOps. - WAPPR1 2026-05-21 manual gate result: the user set the test employee's direct manager to the test supervisor and confirmed on a real device that leave, missed punch, outing, and overtime all auto-fill the test supervisor and the applicant cannot delete/change/add approvers. Treat all four templates as A /
PASS_APPROVER_RULES_READY, but still require WRULE1 actual-chain validation, WROAD2-BIZ1 business evidence, WTCLOSE2 final test-account closeout, and explicit WEXT1-FORMAL/WREAL1 question gates before any WeCom write or real-employee trial. - WTCLOSE2/WTCLOSE2F adds
scripts/qa/run-wecom-test-account-final-closeout.shas the final automatic test-account closeout before WEXT1-FORMAL. Enterprise WeChat API checks must run from the deployment server trusted IP, so usebash scripts/qa/run-wecom-test-account-final-closeout.sh --remote; local direct execution is blocked by default and may only be used for syntax/static gates. The remote run reruns/ready, WAUTO1, WFULLSMOKE1 withWFULLSMOKE_ALLOW_PUBLIC_WRITES=0, outing/overtime dry-run without live flags, and WRULE1 with--manual-gate=all:A; it must not set WeCom write switches, create templates/approvals, enable real employees, or treat WAPPR1=A as live approval. Do not treat previous local missing-env/DB WTCLOSE2 output as a WeCom business blocker. - WREMOTE1/WFULLSMOKE2/WEXT1-FORMAL supersedes the earlier fixture-creation route for the next step: first deploy/sync and run WTCLOSE2 from the deployment server trusted IP, then run WFULLSMOKE2 from the deployment server with
WFULLSMOKE_ALLOW_PUBLIC_WRITES=1when OATEST-SMOKE-WFULLpublic test data is approved, then use existing formal WeCom outing/overtime templates by havingSMOKE002manually submit andSMOKE101review details before approving. WEXT1F addsWEXT1F_MANUAL_CONFIRMATION=SMOKE002_SUBMITTED_SMOKE101_REVIEWED bash scripts/qa/run-wecom-formal-outing-overtime-evidence.sh --remotefor the post-manual evidence run: it explicitly pulls--target=outing --target=overtimewith--filter-creator-employee-no=SMOKE002, may persist only to OA archive viaWECOM_ARCHIVE_WRITE=1+--persist-to-db, and then runs archive offline read + WRULE1. Missing manual confirmation must producePAUSED_MANUAL_CONFIRMATIONand no WeCom API calls. Public WEXT1F report/app/artifacts/qa-flow/wecom-formal-outing-overtime-evidence-20260522-091957/summary.jsonisPASS_WITH_FINDINGS: outing/overtime read/archive/rule validation work and privacy smoke passes, overtime is approved, but outing remains pending, so do not auto-start WREAL1 until the finding is confirmed or handled. Do not auto-create outing/overtime OA-POC templates, auto-submit approvals, write WeCom, broadly pull formal-template records from other employees, or run WeCom API evidence locally in this route. WREAL1 uses/tmp/hyb-oa-wreal1.envfor real employee/approver values and must not write real employee identifiers to repo docs, Issue CSV, or chat. - WAPC2FLIVE supersedes the WAPC2F dry-run gap for OA-POC samples: after user approval, the runner was corrected to the official
template_name+propertycontrols create-template payload, deployed withSYNC_ENV=0, and the public live report/app/artifacts/qa-flow/wecom-approval-fixtures-20260519T053400Z/summary.jsonreachedPASS_FIXTURE_CREATED; leave/missed-punch OA-POC templates and low-risk test approvals were created and retained for audit, with WAPC2 auto-rerunPASS_APPROVAL_POC. WCBK1 has added and deployed read-onlyGET/POST /api/wecom/approval/callback,wecomCallbackCrypto,npm run check:wecom-approval-callback-poc, and thewecom-callbackprocess gate. After remote callback config was set, public report/app/artifacts/qa-flow/wecom-approval-callback-poc-20260519T083422Z/summary.jsonreachedPASS_CALLBACK_URL_VERIFIED; afterSMOKE101approved an existing OA-POC missed-punch test approval,/app/artifacts/qa-flow/wecom-approval-callback-poc-20260519T092648Z/summary.jsonreachedPASS_CALLBACK_EVENT_CONFIRMEDwith one redacted event. WACP3/WACP3R has added and deployednpm run check:wecom-approval-compensation-poc,POST /cgi-bin/oa/getapprovalinforead support, and automatic template discovery bySMOKE002creator; WREAD1 deploy reran WACP3R at/app/artifacts/qa-flow/wecom-approval-compensation-poc-20260519T125515Z/summary.jsonand then generated/app/artifacts/qa-flow/wecom-approval-readability-gate-20260519T125532Z/summary.jsonasPAUSED_MANUAL_CONFIRMATION. WREAD1F then fixed duplicate OA-POC template names by adding timestamp uniqueness and created fresh leave/missed-punch approvals at/app/artifacts/qa-flow/wecom-approval-fixtures-20260519T131958Z/summary.json; final WREAD1 manual report/app/artifacts/qa-flow/wecom-approval-readability-gate-20260519T133628Z/summary.jsonisPASS_READABLE. This clears leave/missed-punch readability only; mirror data model, minimum archive, emergency mode, writeback, RuleOps, and outing/overtime sample decisions remain later gates. - WEGOV1 changes the current WeCom route to "Enterprise WeChat owns mature HR/attendance flows; OA stores self-owned history, audit, entry, messages, and emergency fallback." Treat four domains explicitly: WeCom-owned domain is check-in, leave, missed punch, outing, overtime, leave balance, and HR assistant; OA-owned domain remains reimbursement, procurement, contracts, projects, payments, invoices, bank receipts, sensitive attachments, and operating audit; OA archive domain stores WeCom business history, full external keys, and necessary snapshots; OA emergency domain is manually enabled only when WeCom is unavailable. Do not assume a full isolated WeCom sandbox; use the controlled test domain
SMOKE002 -> SMOKE101,OA-POCtemplates, low-risk approvals, synthetic tests, public live runners, and limited real-device confirmation. WARCH1 now supplies the minimum leave/missed-punch archive implementation, WARCH2 supplies the formal read-only history query surface, and WROAD2 supplies controlled ops daily checks. Do not start deep mirror until WROAD2-CLOSEOUT, WROAD2-BIZ1, WAPPR1, WRULE1, WAUTO1/WEXT1LD, WFULLSMOKE1, WTCLOSE2, WEXT1-FORMAL, WREAL1 question gates or explicit approval, and the mirror stage's own contract are complete. - For reimbursement, invoice, OCR, duplicate invoice, or attachment work, read
docs/报销发票附件规则.mdandreferences/reimbursement.md. - For local/WeCom/public trial-run, OCR runtime, Caddy, or DB drift work, read
docs/试运行与自动化验证手册.mdandreferences/trialrun.md. - For how this skill should evolve, read
docs/Agent开发交付实践.md.
Natural-Language Triage
Users may assign work with a plain paragraph. Before asking follow-up questions, classify the request into defect, feature, acceptance feedback, plan, review, QA, deployment, design, or product-flow optimization.
Default behavior:
- Extract intent, target surface, constraints, approval state, and next action.
- Check existing assets before declaring a blocker:
issues/,docs/,artifacts/,output/, scripts, Playwright tests, runbooks, and prior trial-run evidence. - Ask only when required by
AGENTS.mdor safety: missing approval for non-trivial coding, destructive data work, production config, secrets/accounts, conflicting goals, or unclear high-risk acceptance. - Treat a plain "确认" as approval for the immediately preceding explicit plan or Issue CSV, unless multiple candidates exist.
- If the user asks whether a problem is real, verify first with automation, code inspection, public checks, or visual evidence before proposing broad changes.
Delivery Loop
- Check
git status --short; do not revert unrelated user changes. - Identify the current active continuous Issue CSV before non-trivial work. Same-type trial-run feedback, real-device feedback, single-surface defects, and small follow-up fixes must append rows or update Notes in the active flow instead of creating one-off CSVs. Create a new CSV only when no active same-type flow exists, the current flow is closed, the change crosses risk/business domains, or the user explicitly asks for a new contract; if creating one, state why the active flows cannot carry it. After R5, distinguish R6 preparation from actual trial-run execution.
- State the implementation approach before editing code; if already approved, proceed.
- Keep changes scoped to the current Issue.
- Prefer existing project patterns, official SDKs, and the main UI/layout hierarchy in
docs/产品设计规则.md; for page work, classify the page into DG9 A/B/C layering and reuse the matching workbench/mobile sample before adding local layout code. Do not mix multiple competitor visual systems or copy competitor flows/text directly. - Verify with the narrowest relevant automated tests, then expand by risk.
- Use Playwright screenshots or visual metrics for PC/mobile/WeCom UI changes. New or changed mobile pages must join the unified responsive system and the 320/360/375/390/393/414/430px 统一视觉矩阵 rather than adding page-specific layout fixes.
- Dedicated
/mobilepages must use the shared mobile slot/card/list/sticky-action system fromdocs/产品设计规则.md: fixed icon/avatar/status slots,minmax(0, 1fr)copy slots,mobile-card/mobile list cards,mobile-field-row, mobile tokens, and no desktopcard-std p-4/p-5/p-6as a mobile main container. - Mobile homepage, approval, notification, and business cards must follow the display dedupe rules in
docs/产品设计规则.md: one pending/progress summary per page, notifications as event stream with direct target links, bottom badges as counts only, and one visible business identifier/status per card or row. - Update Issue CSV statuses only after the stated
Test_Methodpasses. - Commit in Chinese batches with Issue IDs.
- 面向用户可测试的改动,最终必须明确“是否已部署”。只有部署与公网检查通过后,才能告知用户可以去企业微信或公网试运行环境测试。
Default Verification Matrix
Backend:
cd server && npm run prisma:validate
cd server && node --check src/routes/reimbursements.js
cd server && node --check src/routes/workflow.js
Frontend:
cd client && npm run typecheck
cd client && npm run build
Cross-device UI:
cd client && npx playwright test <relevant-spec> --workers=1 --reporter=list
Docs/Skill:
python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py <issue.csv>
python3 /home/shunli/.codex/skills/.system/skill-creator/scripts/quick_validate.py .agents/skills/hyb-oa-delivery
git diff --check
Stop Conditions
Pause for user confirmation before:
- Resetting, rebuilding, or destructively modifying a database.
- Resolving Prisma migration drift by editing migration history.
- Changing production Caddy/systemd/remote deployment state.
- Using or exposing real secrets.
- Reverting unrelated dirty files.
Output Contract
Final responses should include:
- What changed.
- What was verified, with commands.
- 面向用户可测改动的部署状态:commit hash、公网 URL、
/ready、公网前端资源/文案检查,以及用户现在是否可以测试。 - What remains blocked and why.
- Commit hashes when commits were made.
R6 and Trial-Run Defaults
- R6 can start only from a new Issue CSV that fixes users, roles, time window, rollback contact, issue log, and daily closeout rhythm.
- 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 self-owned archive, 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. Current WAPI rule: contacts read with
WECOM_CONTACT_SECRET; HR assistant/roster/check-in/approval default toWECOM_AGENT_SECRET, withWECOM_CHECKIN_SECRETonly as explicit check-in override; no runtime Secret guessing. Current stage order isWOPS1 巡检告警降噪 -> WROAD2-CLOSEOUT 三天验收 -> WROAD2-BIZ1 三天业务冒烟 -> WAPPR1 审批规则规范化 -> WRULE1 审批链校验器 POC -> WAUTO1 自动证据汇总 -> WEXT1LD 外出/加班 dry-run -> WFULLSMOKE1 三天全域最终目标测试 -> WROUTE2 测试号收口到最小镜像路线锁定 -> WTCLOSE2 测试号最终收口与证据复核 -> WTCLOSE2F 远端可信 IP 执行口径修正 -> WREMOTE1/WFULLSMOKE2 远端收口 -> WEXT1-FORMAL 正式模板外出/加班测试 -> 四类测试号证据和审批规则门禁通过后问答 WREAL1 小范围真实试用(首批 1 名真实员工 + 1 名审批人/管理员观察) -> wecom_attendance_approval_mirror_v1 最小完整镜像 -> oa_hr_emergency_mode_v1 -> wecom_recovery_writeback_v1 -> wecom_ruleops_v1. UI and API work must distinguishOA 主办,企微主办,OA 自建留存, andOA 应急接管. Do not treat WEXT1 dry-run, WEXT1LD, WFULLSMOKE1, WROUTE2, WTCLOSE2, or WTCLOSE2F as permission to live-create outing/overtime templates or approvals; live needs explicit user approval. - Current post-WROAD2 route wording is:
WOPS1 巡检告警降噪 -> WROAD2-CLOSEOUT 三天验收 -> WROAD2-BIZ1 三天业务冒烟 -> WAPPR1 审批规则规范化 -> WRULE1 审批链校验器 POC -> WAUTO1 自动证据汇总 -> WEXT1LD 外出/加班 dry-run -> WFULLSMOKE1 三天全域最终目标测试 -> WROUTE2 测试号收口到最小镜像路线锁定 -> WTCLOSE2 测试号最终收口与证据复核 -> WTCLOSE2F 远端可信 IP 执行口径修正 -> WREMOTE1/WFULLSMOKE2 远端收口 -> WEXT1-FORMAL 正式模板外出/加班测试 -> 四类测试号证据和审批规则门禁通过后问答 WREAL1 小范围真实试用(首批 1 名真实员工 + 1 名审批人/管理员观察) -> wecom_attendance_approval_mirror_v1 最小完整镜像. WREAL1-PREP only prepared the checklist and does not enable real employees. Do not treat WEXT1 dry-run, WEXT1LD, WFULLSMOKE1, WROUTE2, WTCLOSE2, or WTCLOSE2F as permission to live-create outing/overtime templates or approvals; live needs explicit user approval. - WMSG1 has verified real Enterprise WeChat personal-app delivery and Deeplink return: report
/app/artifacts/qa-flow/wecom-runtime-ready-20260518T234431Z/summary.jsonhaschecks.message.status=OK,errcode=0, andrecipientCount=1; the user confirmed receiving "OA 运行就绪检查" and opening the OA notifications page from the message. This only clears message/deeplink runtime evidence; template/detail, callback evidence, compensation pull, readability, self-owned archive model design, and minimum archive implementation are covered by WAPC2FLIVE/WCBK1/WACP3R/WREAD1/WADM1/WARCH1 in the OA-POC leave/missed-punch scope, while deep mirror work remains a separate later gate. - 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_nomust 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:<id>/--template=missed_punch:<id>and low-risk test approval numbers with--sp-no=leave:<sp_no>/--sp-no=missed_punch:<sp_no>. The runner must use onlyWECOM_AGENT_SECRET, redact full template IDs andsp_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. WPROC2 makes this executable through
node scripts/qa/check-process-contract.mjs --baselineplus issue-specific profiles such as--profile wecom-approval-fixture; run it before WAPC2F and later high-risk WeCom contracts. 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. - WAPC2F has added the WeCom approval fixture dry-run runner. Use
npm run check:wecom-approval-fixtures; it defaults to applicantSMOKE002, approverSMOKE101, fixedWECOM_AGENT_SECRET, minimal generic OA-POC leave/missed-punch template payloads, and no write token or WeCom writes. Real fixture creation requires--live --create-templates --submit-test-approvalsplus one-processWECOM_APPROVAL_FIXTURE_WRITE=1and explicit user approval. The public dry-run report is/app/artifacts/qa-flow/wecom-approval-fixtures-20260519T045001Z/summary.jsonwithPASS_FIXTURE_DRY_RUN_READY. - WAPC2FLIVE has executed that approved live path once after fixing the template payload shape; current public evidence is
/app/artifacts/qa-flow/wecom-approval-fixtures-20260519T053400Z/summary.json,PASS_FIXTURE_CREATED,checks.autoRerun.status=OK, andPASS_APPROVAL_POC. Do not create more approval fixtures without a new Issue CSV and explicit approval. - WCBK1 has implemented and verified the WeCom approval callback read-only POC path. Use
npm run check:wecom-approval-callback-poc; default synthetic mode verifies local encrypted callback samples, while--livechecks the configured public callback URL and redacted event evidence. The route uses onlyWECOM_APPROVAL_CALLBACK_URL,WECOM_CALLBACK_TOKEN,WECOM_CALLBACK_ENCODING_AES_KEY, andWECOM_CORP_ID; do not use contact Secret or legacy callback env names. Current public status isPASS_CALLBACK_EVENT_CONFIRMED: URL verification passed, and one existing OA-POC missed-punch approval handled bySMOKE101produced a redacted approval-status event. Do not store raw XML, ciphertext, fullsp_no, full userid, Token, EncodingAESKey, form values, attachments, comments, or raw payload. - 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.
- After MUD6,
R6-ISSUE-001is treated as resolved based on representative real-device confirmation; future mobile regressions should be recorded as new Issues rather than reopening the old WCM6/MME6 gate unless the same production behavior returns. - After AP6, approval reminder, overdue reminder, and workflow productivity summary are current product facts, not open planning items. Reuse
POST /api/workflow/tasks/:taskId/remind,GET /api/workflow/tasks/summary,job:workflow-overdue-reminders, existing workflow history, audit logs, notifications, and WeCom personal app delivery semantics. Do not add a parallel reminder channel, change approval status from reminders, or expand into complex BPM/SLA escalation without a new Issue. - After DG7/MRF7, mobile approval is an "approval and progress" entry: employees may use it for submitted-item progress, while approvers use it for assigned tasks. Do not reintroduce disabled approval tabs for ordinary employees, duplicated home pending lists, or notification cards that only bounce users back to the notification center when a business target exists.
- After RI6, LP6, ME6 automation, QG6, MIF7/MIF7T, MIF7TD, R7/OPS7/DOC7 draft materials, R7EP automatic gates, and OPS8 remote read-only checks, treat
ME6-3as closed by representative iPhone 12, iPhone 14, and Redmi K60 Enterprise WeChat feedback. R7EP may conclude that the project can enter R7E human confirmation, butR7E-*true execution rows must stayTODOuntil the user confirms participants, roles, window, rollback contact, issue owner, daily closeout, and pause/rollback decision maker. Do not start real R7 from documentation or automation gates alone; future mobile or real-device regressions must be recorded as new Issues such as UX8/R7E follow-ups. - After DCL7, document governance must start from
docs/文档索引.mdanddocs/文档事实源状态矩阵.md. Use Chinese-first current docs. Confirmed obsolete docs may be physically removed from the current tree and restored from git history when needed; do not createdocs/archive/just to move clutter. Do not rewrite old Issue CSV snapshots when cleaning current docs.