WOPS1 调整巡检告警降噪
Issue: WOPS1, WROAD2C, WREAL1P
这个提交包含在:
@@ -0,0 +1,8 @@
|
||||
"ID","Title","Description","Acceptance","Test_Method","Tools","Dev_Status","Review1_Status","Regression_Status","Files","Dependencies","Notes"
|
||||
"WOPS1-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|node","DONE","DONE","DONE","issues/2026-05-20_14-35-42-warch3-ops-alert-tuning-v1.csv","[]","回滚/清理:恢复本合同和告警脚本改动即可;不清理历史巡检报告或已发送的脱敏告警。企微应用消息 Secret 来源固定 WECOM_AGENT_SECRET,不允许运行时猜 Secret。"
|
||||
"WOPS1-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|vitest","DONE","DONE","DONE","server/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` 已写入基线。"
|
||||
"WOPS1-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|rg","DONE","DONE","DONE","server/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 且有企微绑定。"
|
||||
"WOPS1-3","WARCH3 脚本接入降噪告警","调整 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|vitest","DONE","DONE","DONE","scripts/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。"
|
||||
"WOPS1-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|git","DONE","DONE","DONE","issues/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。"
|
||||
"WOPS1-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|npm","DONE","DONE","DONE","deploy/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。"
|
||||
"WOPS1-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|manual","DONE","DONE","DONE","issues/2026-05-20_14-35-42-warch3-ops-alert-tuning-v1.csv|docs/*|.agents/skills/hyb-oa-delivery/SKILL.md","[""WOPS1-5""]","提交建议:WOPS1 调整巡检告警降噪。"
|
||||
|
@@ -0,0 +1,7 @@
|
||||
"ID","Title","Description","Acceptance","Test_Method","Tools","Dev_Status","Review1_Status","Regression_Status","Files","Dependencies","Notes"
|
||||
"WREAL1P-0","真实试用准备合同","建立 WREAL1-PREP 合同;只固化真实小范围试用前置清单,不启用真实员工。","1) 明确当前继续测试账号,不引入真实员工;2) 真实试用需等 WROAD2C 三天验收通过且用户提供人员;3) 默认建议 1 名真实员工 + 1 名审批人/管理员观察;4) 外出/加班 live 暂缓;5) 不写企业微信、不改生产配置。","受影响流程:WROAD2C 验收 -> WREAL1 准备 -> 后续真实试用问答;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-20_14-35-42-wecom-real-trial-prep-v1.csv;node scripts/qa/check-process-contract.mjs --issue issues/2026-05-20_14-35-42-wecom-real-trial-prep-v1.csv --profile docs-only --json。","python3|node","DONE","DONE","DONE","issues/2026-05-20_14-35-42-wecom-real-trial-prep-v1.csv","[]","回滚/清理:本合同仅文档/规划,不启用真实用户;恢复文档即可。"
|
||||
"WREAL1P-1","候选员工与审批人条件","固化真实试用人员选择条件,避免自审、权限缺失或敏感流程误入。","1) 候选员工必须 active、已绑定企微、可见范围正常;2) 审批人必须 active、已绑定企微、不是申请人本人;3) 默认不自动替换审批人;4) 员工号和真实姓名不写入 Issue 或文档,待执行时通过临时输入确认。","受影响流程:真实员工选择 -> 非自审预检 -> 试用启动;验证步骤:rg -n ""非自审|active|已绑定企微|HYD000006|真实小范围试用"" docs .agents/skills/hyb-oa-delivery/SKILL.md。","rg","DONE","DONE","DONE","docs/企微优先开发路线图.md|docs/管理员手册.md|docs/trialrun/人工试运行报告.md","[""WREAL1P-0""]","回滚/清理:恢复文档即可;不保存真实员工名单。"
|
||||
"WREAL1P-2","试用范围与暂停条件","固化 WREAL1 允许流程和暂停条件。","1) 允许流程只含请假、补卡、打卡摘要和 OA 历史查看;2) 外出/加班 live 暂缓;3) 出现企微权限、可信 IP、Secret、回调阻断、误审批、隐私泄露或 OA 留存失败时暂停;4) 暂停不删除已归档历史。","受影响流程:真实试用 -> 每日观察 -> 暂停/继续决策;验证步骤:rg -n ""请假|补卡|打卡摘要|暂停条件|外出/加班 live 暂缓|隐私泄露"" docs .agents/skills/hyb-oa-delivery/SKILL.md。","rg","DONE","DONE","DONE","docs/企微优先开发路线图.md|docs/需求-请假考勤修正规约.md|docs/管理员手册.md","[""WREAL1P-1""]","回滚/清理:恢复文档即可;不清理历史审计。"
|
||||
"WREAL1P-3","验收标准与人工问答","固化 WREAL1 启动和结束时的人工问答选项。","1) 启动前问:1 人、2 人或继续测试账号;2) 结束时问:扩大范围、先处理 finding 或暂停;3) 每次问答都说明当前状态、改了什么、测试了什么、结果是什么;4) 未确认前不扩大真实用户。","受影响流程:WREAL1 启动问答 -> 小范围试用 -> 验收问答;验证步骤:rg -n ""1 名真实员工|2 名真实员工|继续测试账号|扩大范围|暂停"" docs .agents/skills/hyb-oa-delivery/SKILL.md。","rg|manual","DONE","DONE","DONE","docs/管理员手册.md|docs/企微优先开发路线图.md|.agents/skills/hyb-oa-delivery/SKILL.md","[""WREAL1P-2""]","回滚/清理:恢复文档即可;未确认不启动真实试用。"
|
||||
"WREAL1P-4","事实源回写","更新路线图、管理员手册、试运行报告、文档索引、事实源矩阵和项目 skill,固化 WREAL1-PREP。","1) 文档明确当前只是准备,不启用真实员工;2) 后续路线仍为 WREAL1 -> 镜像 -> 应急 -> 回写 -> RuleOps;3) P2 大功能继续冻结;4) 记录 HYD000006 为巡检告警默认员工号。","受影响流程:事实源 -> 后续 WROAD2C/WREAL1/WEXT1-LIVE;验证步骤: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;rg -n ""WREAL1|真实小范围试用|暂停条件|回滚联系人|HYD000006|外出/加班 live 暂缓"" docs .agents/skills/hyb-oa-delivery/SKILL.md。","node|python3|rg","DONE","DONE","DONE","docs/企微优先开发路线图.md|docs/管理员手册.md|docs/trialrun/人工试运行报告.md|docs/文档索引.md|docs/文档事实源状态矩阵.md|.agents/skills/hyb-oa-delivery/SKILL.md","[""WREAL1P-3""]","回滚/清理:恢复文档即可。"
|
||||
"WREAL1P-5","状态回填与提交","完成 WREAL1-PREP 状态回填和中文提交。","1) Issue 状态回填;2) 文档门禁通过;3) git diff --check 通过;4) 中文提交包含 WREAL1P。","受影响流程:WREAL1-PREP -> 三天验收后可问答启动 WREAL1;验证步骤:git status --short;git diff --check;git log -1 --oneline。","git|manual","DONE","DONE","DONE","issues/2026-05-20_14-35-42-wecom-real-trial-prep-v1.csv|docs/*|.agents/skills/hyb-oa-delivery/SKILL.md","[""WREAL1P-4""]","提交建议:WREAL1P 固化真实试用准备清单。"
|
||||
|
@@ -0,0 +1,6 @@
|
||||
"ID","Title","Description","Acceptance","Test_Method","Tools","Dev_Status","Review1_Status","Regression_Status","Files","Dependencies","Notes"
|
||||
"WROAD2C-0","三天受控巡检验收合同","建立 WROAD2-CLOSEOUT 合同;延续 WROAD2/WARCH3 自动巡检,Day 1/2/3 结果出来后汇总验收。","1) 固定验收结论:PASS_CONTROLLED_OPS_READY、PASS_WITH_FINDINGS、PAUSED_MANUAL_CONFIRMATION 或 SKIP/BLOCKED_BY_EXTERNAL_CONFIG;2) 已知 observation 可接受:live smoke 凭据缺失、pending OCR 子检查、历史 callback gap;3) 企微主链必须通过:runtime、审批补偿归档、OA 离线读取、打卡摘要 offline 可读、隐私扫描;4) 不扩大真实用户、不写企业微信。","受影响流程:WARCH3 Day 1/2/3 自动巡检 -> 三天汇总 -> 人工确认验收;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-20_14-35-42-wroad2-controlled-ops-closeout-v1.csv;node scripts/qa/check-process-contract.mjs --issue issues/2026-05-20_14-35-42-wroad2-controlled-ops-closeout-v1.csv --profile wecom --json。","python3|node","DONE","DONE","DONE","issues/2026-05-20_14-35-42-wroad2-controlled-ops-closeout-v1.csv","[]","回滚/清理:本合同仅记录未来三天验收;如停止试用,保持 TODO 并在 Notes 写明暂停原因。企微 runtime、审批补偿和告警相关 Secret 来源固定 WECOM_AGENT_SECRET,不允许运行时猜 Secret。合同和 process gate 已通过;Day 1/2/3 仍待 timer 自动采集。"
|
||||
"WROAD2C-1","Day 1 自动巡检采集","采集 2026-05-21 07:30 CST WARCH3 timer 报告并检查主链路。","1) timer 自动执行或人工补触发;2) 记录 WARCH3 summary 路径、状态、findingCount 和告警状态;3) 主链路不为 SKIP/BLOCKED;4) 隐私扫描无命中。","受影响流程:Day 1 timer -> WARCH3 summary -> 巡检台账;验证步骤:ssh 远端 systemctl status hyb-oa-warch3-ops.service;读取最新 /app/artifacts/qa-flow/warch3-ops-*/summary.json;记录结论。","ssh|systemctl|node","TODO","TODO","TODO","external","[""WROAD2C-0""]","回滚/清理:如 timer 未执行,可人工 systemctl start 补跑;不得伪造成自动通过。"
|
||||
"WROAD2C-2","Day 2 自动巡检采集","采集 2026-05-22 07:30 CST WARCH3 timer 报告并检查趋势。","1) 记录 Day 2 报告路径和状态;2) 与 Day 1 比较状态是否恶化、finding 是否新增;3) 已知 observation 不阻断;4) 新增外部配置错误真实记录。","受影响流程:Day 2 timer -> 趋势比较 -> 巡检台账;验证步骤:读取 Day 2 WARCH3 summary;比对 Day 1 finding evidenceDigest。","ssh|node","TODO","TODO","TODO","external","[""WROAD2C-1""]","回滚/清理:如 Day 2 失败,保持失败事实并暂停 WREAL1。"
|
||||
"WROAD2C-3","Day 3 汇总验收","采集 2026-05-23 07:30 CST WARCH3 timer 报告并生成三天汇总结论。","1) 汇总 Day 0/1/2/3 报告;2) 企微主链连续可解释通过;3) 输出最终建议:进入 WREAL1、先处理 finding 或暂停;4) 等待人工确认。","受影响流程:Day 3 timer -> 三天汇总 -> 人工验收问答;验证步骤:汇总 WROAD2 Day 0 和 WARCH3 Day 1/2/3 summary 路径;形成结论并在事实源回写。","ssh|node|manual","TODO","TODO","TODO","docs/trialrun/人工试运行报告.md|docs/文档索引.md|docs/文档事实源状态矩阵.md","[""WROAD2C-2""]","回滚/清理:如结论为暂停,不进入 WREAL1;不清理历史报告。"
|
||||
"WROAD2C-4","人工验收问答","三天报告齐全后,按人工问答确认是否进入 WREAL1。","1) 向用户列出当前状态、改了什么、测试了什么、结果是什么;2) 选项为确认通过、先处理 finding、暂停;3) 未确认前不启用真实员工。","受影响流程:三天巡检 -> 用户拍板 -> WREAL1 是否启动;验证步骤:人工确认记录写入 Notes 和试运行报告。","manual","TODO","TODO","TODO","issues/2026-05-20_14-35-42-wroad2-controlled-ops-closeout-v1.csv|docs/trialrun/人工试运行报告.md","[""WROAD2C-3""]","回滚/清理:未获确认时保持 PAUSED_MANUAL_CONFIRMATION,不启动真实试用。"
|
||||
|
在新工单中引用
屏蔽一个用户