文件
hyb-oa/issues/2026-05-20_14-35-42-warch3-ops-alert-tuning-v1.csv
wangsli 3ce183ddcf WOPS1 调整巡检告警降噪
Issue: WOPS1, WROAD2C, WREAL1P
2026-05-20 15:17:07 +08:00

8.1 KiB

1IDTitleDescriptionAcceptanceTest_MethodToolsDev_StatusReview1_StatusRegression_StatusFilesDependenciesNotes
2WOPS1-0巡检告警降噪合同建立 WOPS1 合同;在 WARCH3 已公网验证基础上,将告警策略从 finding 即发改为新增异常或状态恶化才发。1) 默认不重复发送已知 finding;2) SKIP/BLOCKED_BY_EXTERNAL_CONFIG、脚本失败、新增 finding、状态恶化仍发送;3) 默认收件员工号改为 HYD000006;4) HYD000006 是管理员 wangshunli 的 employee_no,脚本不再把姓名字符串 wangshunli 当 employee_no 使用;5) 不写企微业务数据、不创建模板或审批单、不扩大真实用户。受影响流程:WARCH3 07:30 巡检 -> 状态比较 -> 管理员脱敏企微告警;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-20_14-35-42-warch3-ops-alert-tuning-v1.csv;node scripts/qa/check-process-contract.mjs --issue issues/2026-05-20_14-35-42-warch3-ops-alert-tuning-v1.csv --profile wecom --json。python3|nodeDONEDONEDONEissues/2026-05-20_14-35-42-warch3-ops-alert-tuning-v1.csv[]回滚/清理:恢复本合同和告警脚本改动即可;不清理历史巡检报告或已发送的脱敏告警。企微应用消息 Secret 来源固定 WECOM_AGENT_SECRET,不允许运行时猜 Secret。
3WOPS1-1告警状态记忆与新增异常判断为 send-wecom-ops-alert 增加状态文件,记录上次状态、finding 摘要和报告路径,用于判断新增 finding 或状态恶化。1) 默认 state 文件位于 artifacts/qa-flow/warch3-ops-alert-state.json;2) 支持 --state-file 覆盖;3) 首次运行写入基线但不因既有 PASS_WITH_FINDINGS 重复告警;4) 新增 finding evidenceDigest 或状态等级升高时发送;5) force 仍可强制发送。受影响流程:读取 WARCH3 summary -> 读取 alert state -> 计算 alertDecision -> 写回 state;验证步骤:cd server && node --check src/scripts/send-wecom-ops-alert.js;focused vitest 覆盖首次基线、无新增跳过、新增 finding 发送、状态恶化发送。node|vitestDONEDONEDONEserver/src/scripts/send-wecom-ops-alert.js|server/tests/unit/scripts/send-wecom-ops-alert.test.js["WOPS1-0"]回滚/清理:删除状态文件支持后恢复旧行为;远端 state 文件仅含脱敏状态和 finding digest,可保留审计。远端 state `/app/artifacts/qa-flow/warch3-ops-alert-state.json` 已写入基线。
4WOPS1-2默认收件人修正为 HYD000006将巡检告警默认收件人和 WARCH3 调用参数改为 HYD000006,避免把 wangshunli 姓名字符串当员工号产生配置 gap。1) 默认 recipientEmployeeNos 为 HYD000006;2) run-warch3-ops-daily.sh 调用不再传 wangshunli;3) 文档说明 HYD000006 是管理员 wangshunli 的 employee_no;4) 缺 HYD000006 绑定仍记录 NEEDS_CONFIG。受影响流程:WARCH3 finding/失败 -> 告警收件人解析 -> 企微应用消息;验证步骤:cd server && npx vitest run tests/unit/scripts/send-wecom-ops-alert.test.js --reporter=verbose;rg -n "recipient.*HYD000006|wangshunli" scripts server/src docs .agents/skills/hyb-oa-delivery/SKILL.md。node|vitest|rgDONEDONEDONEserver/src/scripts/send-wecom-ops-alert.js|scripts/qa/run-warch3-ops-daily.sh|docs/*|.agents/skills/hyb-oa-delivery/SKILL.md["WOPS1-1"]回滚/清理:恢复默认双收件人即可;不影响企微业务数据。公网报告显示 recipient `HYD000006` active 且有企微绑定。
5WOPS1-3WARCH3 脚本接入降噪告警调整 WARCH3 巡检脚本,由 send-wecom-ops-alert 负责判断是否发送;报告中写明告警策略为新增异常或状态恶化。1) PASS_ARCHIVE_OPS_READY 无告警;2) PASS_WITH_FINDINGS 且无新增 finding 时产生 alert report 但 delivery 为 skipped;3) 新增 finding 或阻断时发送;4) WARCH3 summary 的 alertPolicy 更新为 HYD000006 与新增异常策略。受影响流程:systemd service -> WARCH3 汇总 -> alert runner -> 脱敏报告;验证步骤:bash -n scripts/qa/run-warch3-ops-daily.sh;cd server && npx vitest run tests/unit/scripts/send-wecom-ops-alert.test.js --reporter=verbose;公网阶段再用 systemd service 真实验证降噪,不在本地发送企微消息。bash|node|vitestDONEDONEDONEscripts/qa/run-warch3-ops-daily.sh["WOPS1-2"]回滚/清理:恢复脚本调用即可;/tmp 或 artifacts 报告可保留审计。本地不发送企微消息,避免把测试告警误发到管理员。公网二次触发报告 `/app/artifacts/qa-flow/wecom-ops-alert-20260520T070740Z/summary.json` 为 PASS_ALERT_SKIPPED_NO_FINDINGS。
6WOPS1-4本地门禁执行 WOPS1 本地合同、语法、focused 单测、文档和最小门禁。1) CSV 校验通过;2) process gate 通过;3) node --check 通过;4) focused vitest 覆盖新增异常、HYD000006 默认收件人、已知 finding 不重复发送、失败/新增 finding 仍发送和脱敏输出;5) docs audit、skill 校验、git diff --check、scripts/check-minimal.sh 通过。受影响流程:WOPS1 实施候选 -> 本地 QA -> 可部署候选;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-20_14-35-42-warch3-ops-alert-tuning-v1.csv;node scripts/qa/check-process-contract.mjs --baseline --json;node scripts/qa/check-process-contract.mjs --issue issues/2026-05-20_14-35-42-warch3-ops-alert-tuning-v1.csv --profile wecom --json;cd server && node --check src/scripts/send-wecom-ops-alert.js;cd server && npx vitest run tests/unit/scripts/send-wecom-ops-alert.test.js --reporter=verbose;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;bash scripts/check-minimal.sh。python3|node|vitest|bash|gitDONEDONEDONEissues/2026-05-20_14-35-42-warch3-ops-alert-tuning-v1.csv|server/src/scripts/send-wecom-ops-alert.js|server/tests/unit/scripts/send-wecom-ops-alert.test.js|scripts/qa/run-warch3-ops-daily.sh|docs/*|.agents/skills/hyb-oa-delivery/SKILL.md["WOPS1-3"]回滚/清理:门禁失败不部署;修复后重跑。已通过 CSV/process gate/node --check/bash -n/focused vitest/docs audit/skill/git diff --check/scripts/check-minimal.sh。
7WOPS1-5公网部署与远端验证本地门禁通过后以 SYNC_ENV=0 部署,远端手动触发一次降噪验证并确认 timer 仍启用。1) 使用 SYNC_ENV=0,不同步本地 env;2) /ready 正常;3) systemd timer 仍为 07:30;4) 远端触发 WARCH3 service 生成报告;5) 既有 finding 不重复发送,或仅在新增异常时发送;6) 报告不泄露敏感字段。受影响流程:部署 -> /ready -> timer -> 手动 service -> 降噪告警;验证步骤:SYNC_ENV=0 bash deploy/trialrun/deploy.sh;ssh 远端 systemctl list-timers hyb-oa-warch3-ops.timer;systemctl start hyb-oa-warch3-ops.service;检查 /app/artifacts/qa-flow/warch3-ops-*/summary.json 和 wecom-ops-alert-*。bash|ssh|systemctl|npmDONEDONEDONEdeploy/trialrun/deploy.sh|scripts/qa/run-warch3-ops-daily.sh|server/src/scripts/send-wecom-ops-alert.js["WOPS1-4"]回滚/清理:如远端异常,重新部署上一提交或停用 timer;不清理 OA 业务数据。SYNC_ENV=0 部署通过;/ready ok;timer 下次 2026-05-21 07:30 CST;远端 WARCH3 `/app/artifacts/qa-flow/warch3-ops-20260520-070731/summary.json` 为 PASS_WITH_FINDINGS;告警 `/app/artifacts/qa-flow/wecom-ops-alert-20260520T070740Z/summary.json` 为 PASS_ALERT_SKIPPED_NO_FINDINGS。
8WOPS1-6状态回填与提交回填 WOPS1 实际结果、远端报告路径、告警状态和中文提交。1) Issue 状态真实回填;2) 事实源同步;3) git diff --check 通过;4) 中文提交包含 WOPS1。受影响流程:WOPS1 -> WROAD2C/WREAL1P 后续;验证步骤:git status --short;git diff --check;git log -1 --oneline。git|manualDONEDONEDONEissues/2026-05-20_14-35-42-warch3-ops-alert-tuning-v1.csv|docs/*|.agents/skills/hyb-oa-delivery/SKILL.md["WOPS1-5"]提交建议:WOPS1 调整巡检告警降噪。