From 2ae179b66784336217286367fa379672e618f4ae Mon Sep 17 00:00:00 2001 From: yuqei Date: Sat, 16 May 2026 22:49:30 +0800 Subject: [PATCH] feat: expand phase14 legal articles --- ...µ·草与审查助手-当前工作进度保存-2026-05-11.md | 45 +++++ .../legal-article-expansion-batch-001.json | 179 ++++++++++++++++++ scripts/run-capacity-governance.ps1 | 17 +- 3 files changed, 236 insertions(+), 5 deletions(-) create mode 100644 project-docs/phase14-legal-fulltext-library/legal-article-expansion-batch-001.json diff --git a/project-docs/AI合同起草与审查助手-当前工作进度保存-2026-05-11.md b/project-docs/AI合同起草与审查助手-当前工作进度保存-2026-05-11.md index 43181909..7975d54a 100644 --- a/project-docs/AI合同起草与审查助手-当前工作进度保存-2026-05-11.md +++ b/project-docs/AI合同起草与审查助手-当前工作进度保存-2026-05-11.md @@ -2017,6 +2017,51 @@ - 本轮无 required 阻塞项。 - 仍保留旧的非 required 项:外部告警 Webhook 未配置。 +## 2026-05-16 Phase14 第二批法条全文扩容与告警 dry-run 收口 +### 本轮完成项 +- 已新增第二批合同高频法条清单: + - `project-docs/phase14-legal-fulltext-library/legal-article-expansion-batch-001.json` + - 覆盖 6 个正式法源、85 条合同高频条文。 + - 分布:民法典 23 条、电子签名法 6 条、个人信息保护法 13 条、劳动合同法 13 条、数据安全法 9 条、公司法 21 条。 +- 已将第二批法条正式吸收到生产运行层: + - 导入结果:`PHASE14_LEGAL_FULLTEXT_IMPORT_PASS` + - 产物:`project-docs/qa-artifacts/phase14-legal-fulltext-import/2026-05-16T22-40-13-393/phase14-legal-fulltext-import-summary.md` + - 本批 `legal_articles_bulk_upsert`:`total=85, created=85, updated=0` + - 目标知识库:`AI合同平台法条全文库(Phase14)` + - 知识库编号:`kb-0d88d5b54114` +- 已抽查生产真相源: + - `published_status=published` + - `index_status=indexed` + - 当前总数:`118` +- 已复跑 Chat/报告法条引用冒烟: + - 结果:`PHASE14_CHAT_REPORT_LEGAL_REFS_SMOKE_PASS` + - 产物:`project-docs/qa-artifacts/phase14-chat-report-legal-refs-smoke/2026-05-16T14-41-17-051Z/phase14-chat-report-legal-refs-smoke-summary.md` +- 已修复 `scripts/run-capacity-governance.ps1` 的远端执行方式: + - 原问题:多行 shell 脚本作为 SSH 命令参数执行时,Docker/备份扫描输出被错误解释为命令,导致 exit 127,并把缺失的 after 磁盘值误报为 100%。 + - 现状态:远端脚本通过 `bash -s` 从 stdin 执行;缺失磁盘值时明确报“无法读取”,不再伪装为 100%。 +- 已复跑容量治理: + - 结果:`PHASE7_CAPACITY_GOVERNANCE_WARN` + - 产物:`project-docs/qa-artifacts/phase7-capacity-governance/2026-05-16T22-46-28-403/capacity-governance-summary.md` + - required 检查:远端容量脚本 PASS、磁盘阈值 PASS,远端磁盘使用率 30%。 +- 已复跑生产 watchdog + Webhook dry-run: + - 结果:`PHASE7_WATCHDOG_SCHEDULER_WARN` + - 产物:`project-docs/qa-artifacts/phase7.5-watchdog-scheduler/2026-05-16T22-47-12-032/watchdog-scheduler-summary.md` + - Webhook:dry-run payload 已生成,证明告警消息格式和发送前置链路可验证。 + +### 当前状态 +- Phase14 不再只是首批 33 条高频条文,生产运行层已扩容到 118 条已发布、已索引法条全文。 +- “审查风险 -> 法条引用 -> 法条全文库 -> 知识库追溯”链路在第二批扩容后仍通过冒烟验证。 +- 外部告警链路已经具备 dry-run 验证能力;真实外部送达仍需要正式 Webhook 地址。 + +### 未完成项 +- 法条全文库仍不是全国全量法规库;当前是 Phase14 面向合同业务的高频条文库,后续可继续按批次扩展司法解释、部门规章、地方示范文本和更多合同相关条文。 +- 外部告警 Webhook 真实送达未配置;需要正式的企业微信、飞书或通用 Webhook URL 后才能从 dry-run 切到真实发送。 +- 容量治理 dry-run 发现 2 个旧前端备份可清理,并提示 Docker builder cache 有可回收空间;本轮未执行 `-Apply` 清理,避免在未明确授权时删除备份或 prune 缓存。 + +### 阻塞项 +- 本轮无 required 阻塞项。 +- 当前剩余均为 non-required 运维增强项:真实外部 Webhook 地址、可选容量清理、后续法条批次扩展。 + ## 2026-05-16 Phase14 生产巡检与 Chat/报告法条引用闭环 ### 本轮完成项 - 已完成 Chat/报告法条引用闭环代码补齐并推送远程 `main`: diff --git a/project-docs/phase14-legal-fulltext-library/legal-article-expansion-batch-001.json b/project-docs/phase14-legal-fulltext-library/legal-article-expansion-batch-001.json new file mode 100644 index 00000000..71235ed5 --- /dev/null +++ b/project-docs/phase14-legal-fulltext-library/legal-article-expansion-batch-001.json @@ -0,0 +1,179 @@ +{ + "name": "Phase14 法条全文库扩容清单-第二批合同高频条文", + "source_system": "国家法律法规数据库", + "source_homepage": "https://flk.npc.gov.cn/", + "generated_at": "2026-05-16", + "batch": "phase14-expansion-batch-001", + "description": "在首批 6 个法源、33 条高频合同条文基础上,继续补充合同订立、履行、解除、违约责任、电子签名、个人信息、劳动合同、数据安全和公司治理相关高频条文。", + "sources": [ + { + "source_id": "LAW-CIVIL-CODE-2020", + "title": "中华人民共和国民法典", + "bbbs": "ff808081729d1efe01729d50b5c500bf", + "source_type": "法律", + "authority": "全国人民代表大会", + "published_date": "2020-05-28", + "effective_date": "2021-01-01", + "validity_status": "现行有效", + "region": "CN", + "knowledge_domain": "civil-code-contract-expansion", + "articles": [ + { "article_no": "第四百七十一条", "chapter_title": "第三编 合同", "section_title": "第二章 合同的订立", "tags": ["要约承诺", "合同订立", "合同审查"] }, + { "article_no": "第四百七十二条", "chapter_title": "第三编 合同", "section_title": "第二章 合同的订立", "tags": ["要约", "合同订立", "意思表示"] }, + { "article_no": "第四百七十九条", "chapter_title": "第三编 合同", "section_title": "第二章 合同的订立", "tags": ["承诺", "合同成立", "意思表示"] }, + { "article_no": "第四百八十三条", "chapter_title": "第三编 合同", "section_title": "第二章 合同的订立", "tags": ["承诺生效", "合同成立", "成立时间"] }, + { "article_no": "第四百八十八条", "chapter_title": "第三编 合同", "section_title": "第二章 合同的订立", "tags": ["实质性变更", "承诺变更", "合同审查"] }, + { "article_no": "第五百条", "chapter_title": "第三编 合同", "section_title": "第二章 合同的订立", "tags": ["缔约过失", "赔偿责任", "合同谈判"] }, + { "article_no": "第五百零一条", "chapter_title": "第三编 合同", "section_title": "第二章 合同的订立", "tags": ["保密义务", "合同谈判", "商业秘密"] }, + { "article_no": "第五百零二条", "chapter_title": "第三编 合同", "section_title": "第三章 合同的效力", "tags": ["合同生效", "批准登记", "效力审查"] }, + { "article_no": "第五百零六条", "chapter_title": "第三编 合同", "section_title": "第三章 合同的效力", "tags": ["免责条款", "无效条款", "人身损害"] }, + { "article_no": "第五百一十条", "chapter_title": "第三编 合同", "section_title": "第四章 合同的履行", "tags": ["补充协议", "约定不明", "合同履行"] }, + { "article_no": "第五百一十一条", "chapter_title": "第三编 合同", "section_title": "第四章 合同的履行", "tags": ["约定不明", "履行规则", "质量价款"] }, + { "article_no": "第五百一十二条", "chapter_title": "第三编 合同", "section_title": "第四章 合同的履行", "tags": ["电子合同", "交付时间", "合同履行"] }, + { "article_no": "第五百六十三条", "chapter_title": "第三编 合同", "section_title": "第七章 合同的权利义务终止", "tags": ["法定解除", "合同解除", "违约解除"] }, + { "article_no": "第五百六十五条", "chapter_title": "第三编 合同", "section_title": "第七章 合同的权利义务终止", "tags": ["解除通知", "合同解除", "异议期限"] }, + { "article_no": "第五百六十六条", "chapter_title": "第三编 合同", "section_title": "第七章 合同的权利义务终止", "tags": ["解除后果", "恢复原状", "赔偿损失"] }, + { "article_no": "第五百七十八条", "chapter_title": "第三编 合同", "section_title": "第八章 违约责任", "tags": ["预期违约", "违约责任", "履行拒绝"] }, + { "article_no": "第五百七十九条", "chapter_title": "第三编 合同", "section_title": "第八章 违约责任", "tags": ["金钱债务", "继续履行", "违约责任"] }, + { "article_no": "第五百八十条", "chapter_title": "第三编 合同", "section_title": "第八章 违约责任", "tags": ["非金钱债务", "继续履行", "履行不能"] }, + { "article_no": "第五百八十一条", "chapter_title": "第三编 合同", "section_title": "第八章 违约责任", "tags": ["替代履行", "费用负担", "违约责任"] }, + { "article_no": "第五百八十二条", "chapter_title": "第三编 合同", "section_title": "第八章 违约责任", "tags": ["瑕疵履行", "补救措施", "违约责任"] }, + { "article_no": "第五百八十三条", "chapter_title": "第三编 合同", "section_title": "第八章 违约责任", "tags": ["补救后赔偿", "损失赔偿", "违约责任"] }, + { "article_no": "第五百八十四条", "chapter_title": "第三编 合同", "section_title": "第八章 违约责任", "tags": ["损失赔偿范围", "可预见规则", "违约责任"] }, + { "article_no": "第五百八十六条", "chapter_title": "第三编 合同", "section_title": "第八章 违约责任", "tags": ["定金", "担保", "违约责任"] } + ] + }, + { + "source_id": "LAW-E-SIGNATURE-2019", + "title": "中华人民共和国电子签名法", + "bbbs": "ff8080816f135f46016f2163e4261aa1", + "source_type": "法律", + "authority": "全国人民代表大会常务委员会", + "published_date": "2019-04-23", + "effective_date": "2019-04-23", + "validity_status": "现行有效", + "region": "CN", + "knowledge_domain": "electronic-signature-expansion", + "articles": [ + { "article_no": "第六条", "chapter_title": "第二章 数据电文", "section_title": null, "tags": ["数据电文保存", "原件形式", "电子合同"] }, + { "article_no": "第七条", "chapter_title": "第二章 数据电文", "section_title": null, "tags": ["数据电文效力", "证据效力", "电子合同"] }, + { "article_no": "第八条", "chapter_title": "第二章 数据电文", "section_title": null, "tags": ["证据审查", "数据电文", "真实性"] }, + { "article_no": "第十一条", "chapter_title": "第二章 数据电文", "section_title": null, "tags": ["发送接收时间", "数据电文", "履行时间"] }, + { "article_no": "第十六条", "chapter_title": "第三章 电子签名与认证", "section_title": null, "tags": ["电子认证", "第三方认证", "签名验证"] }, + { "article_no": "第十七条", "chapter_title": "第三章 电子签名与认证", "section_title": null, "tags": ["电子认证服务", "资质条件", "签名合规"] } + ] + }, + { + "source_id": "LAW-PIPL-2021", + "title": "中华人民共和国个人信息保护法", + "bbbs": "ff8081817b6472a3017b656cc2040044", + "source_type": "法律", + "authority": "全国人民代表大会常务委员会", + "published_date": "2021-08-20", + "effective_date": "2021-11-01", + "validity_status": "现行有效", + "region": "CN", + "knowledge_domain": "personal-information-protection-expansion", + "articles": [ + { "article_no": "第六条", "chapter_title": "第一章 总则", "section_title": null, "tags": ["最小必要", "个人信息处理", "数据合规"] }, + { "article_no": "第七条", "chapter_title": "第一章 总则", "section_title": null, "tags": ["公开透明", "个人信息处理", "规则公开"] }, + { "article_no": "第九条", "chapter_title": "第一章 总则", "section_title": null, "tags": ["处理者责任", "安全保障", "数据合规"] }, + { "article_no": "第二十一条", "chapter_title": "第二章 个人信息处理规则", "section_title": "第一节 一般规定", "tags": ["委托处理", "受托方", "处理协议"] }, + { "article_no": "第二十四条", "chapter_title": "第二章 个人信息处理规则", "section_title": "第一节 一般规定", "tags": ["自动化决策", "透明度", "个人权益"] }, + { "article_no": "第二十五条", "chapter_title": "第二章 个人信息处理规则", "section_title": "第一节 一般规定", "tags": ["公开个人信息", "单独同意", "数据合规"] }, + { "article_no": "第二十九条", "chapter_title": "第二章 个人信息处理规则", "section_title": "第二节 敏感个人信息的处理规则", "tags": ["敏感个人信息", "单独同意", "数据合规"] }, + { "article_no": "第三十条", "chapter_title": "第二章 个人信息处理规则", "section_title": "第二节 敏感个人信息的处理规则", "tags": ["敏感信息告知", "必要性", "影响说明"] }, + { "article_no": "第三十一条", "chapter_title": "第二章 个人信息处理规则", "section_title": "第二节 敏感个人信息的处理规则", "tags": ["未成年人信息", "专门规则", "敏感信息"] }, + { "article_no": "第五十五条", "chapter_title": "第五章 个人信息处理者的义务", "section_title": null, "tags": ["影响评估", "处理记录", "数据合规"] }, + { "article_no": "第五十六条", "chapter_title": "第五章 个人信息处理者的义务", "section_title": null, "tags": ["影响评估内容", "风险评估", "合规留痕"] }, + { "article_no": "第五十九条", "chapter_title": "第五章 个人信息处理者的义务", "section_title": null, "tags": ["受托方义务", "处理者责任", "数据合规"] }, + { "article_no": "第六十六条", "chapter_title": "第七章 法律责任", "section_title": null, "tags": ["法律责任", "行政处罚", "数据合规"] } + ] + }, + { + "source_id": "LAW-LABOR-CONTRACT-2012", + "title": "中华人民共和国劳动合同法", + "bbbs": "2c909fdd678bf17901678bf74d7106b3", + "source_type": "法律", + "authority": "全国人民代表大会常务委员会", + "published_date": "2012-12-28", + "effective_date": "2013-07-01", + "validity_status": "现行有效", + "region": "CN", + "knowledge_domain": "labor-contract-expansion", + "articles": [ + { "article_no": "第二十六条", "chapter_title": "第二章 劳动合同的订立", "section_title": null, "tags": ["劳动合同无效", "欺诈胁迫", "免除责任"] }, + { "article_no": "第三十五条", "chapter_title": "第三章 劳动合同的履行和变更", "section_title": null, "tags": ["协商变更", "书面变更", "劳动合同"] }, + { "article_no": "第三十六条", "chapter_title": "第四章 劳动合同的解除和终止", "section_title": null, "tags": ["协商解除", "劳动合同解除", "用工风险"] }, + { "article_no": "第三十七条", "chapter_title": "第四章 劳动合同的解除和终止", "section_title": null, "tags": ["劳动者解除", "提前通知", "试用期"] }, + { "article_no": "第三十八条", "chapter_title": "第四章 劳动合同的解除和终止", "section_title": null, "tags": ["被迫解除", "用人单位违约", "劳动权益"] }, + { "article_no": "第三十九条", "chapter_title": "第四章 劳动合同的解除和终止", "section_title": null, "tags": ["过错解除", "用工管理", "解除风险"] }, + { "article_no": "第四十条", "chapter_title": "第四章 劳动合同的解除和终止", "section_title": null, "tags": ["无过失解除", "提前通知", "经济补偿"] }, + { "article_no": "第四十一条", "chapter_title": "第四章 劳动合同的解除和终止", "section_title": null, "tags": ["经济性裁员", "裁员程序", "劳动合同"] }, + { "article_no": "第四十六条", "chapter_title": "第四章 劳动合同的解除和终止", "section_title": null, "tags": ["经济补偿", "解除终止", "劳动权益"] }, + { "article_no": "第四十七条", "chapter_title": "第四章 劳动合同的解除和终止", "section_title": null, "tags": ["补偿计算", "工作年限", "经济补偿"] }, + { "article_no": "第四十八条", "chapter_title": "第四章 劳动合同的解除和终止", "section_title": null, "tags": ["违法解除", "继续履行", "赔偿金"] }, + { "article_no": "第五十条", "chapter_title": "第四章 劳动合同的解除和终止", "section_title": null, "tags": ["离职手续", "证明出具", "档案社保"] }, + { "article_no": "第九十条", "chapter_title": "第七章 法律责任", "section_title": null, "tags": ["劳动者赔偿", "违约责任", "劳动合同"] } + ] + }, + { + "source_id": "LAW-DATA-SECURITY-2021", + "title": "中华人民共和国数据安全法", + "bbbs": "ff80818179f5e0800179f885c7e70392", + "source_type": "法律", + "authority": "全国人民代表大会常务委员会", + "published_date": "2021-06-10", + "effective_date": "2021-09-01", + "validity_status": "现行有效", + "region": "CN", + "knowledge_domain": "data-security-expansion", + "articles": [ + { "article_no": "第二十一条", "chapter_title": "第三章 数据安全制度", "section_title": null, "tags": ["数据分类分级", "重要数据", "数据安全"] }, + { "article_no": "第二十二条", "chapter_title": "第三章 数据安全制度", "section_title": null, "tags": ["风险监测", "预警机制", "数据安全"] }, + { "article_no": "第二十四条", "chapter_title": "第三章 数据安全制度", "section_title": null, "tags": ["应急处置", "数据安全事件", "风险治理"] }, + { "article_no": "第二十五条", "chapter_title": "第三章 数据安全制度", "section_title": null, "tags": ["出口管制", "数据出口", "国家安全"] }, + { "article_no": "第二十六条", "chapter_title": "第三章 数据安全制度", "section_title": null, "tags": ["反制措施", "歧视限制", "数据合规"] }, + { "article_no": "第三十条", "chapter_title": "第四章 数据安全保护义务", "section_title": null, "tags": ["重要数据", "风险评估", "定期报送"] }, + { "article_no": "第三十二条", "chapter_title": "第四章 数据安全保护义务", "section_title": null, "tags": ["合法正当", "数据收集", "数据交易"] }, + { "article_no": "第三十三条", "chapter_title": "第四章 数据安全保护义务", "section_title": null, "tags": ["数据交易中介", "审核义务", "交易记录"] }, + { "article_no": "第四十五条", "chapter_title": "第六章 法律责任", "section_title": null, "tags": ["法律责任", "责令改正", "行政处罚"] } + ] + }, + { + "source_id": "LAW-COMPANY-2023", + "title": "中华人民共和国公司法", + "bbbs": "ff8081818c9108eb018cb6922f750c07", + "source_type": "法律", + "authority": "全国人民代表大会常务委员会", + "published_date": "2023-12-29", + "effective_date": "2024-07-01", + "validity_status": "现行有效", + "region": "CN", + "knowledge_domain": "company-commercial-expansion", + "articles": [ + { "article_no": "第十三条", "chapter_title": "第一章 总则", "section_title": null, "tags": ["经营范围", "章程记载", "主体审查"] }, + { "article_no": "第十四条", "chapter_title": "第一章 总则", "section_title": null, "tags": ["分公司", "民事责任", "主体审查"] }, + { "article_no": "第十五条", "chapter_title": "第一章 总则", "section_title": null, "tags": ["转投资", "投资限制", "公司治理"] }, + { "article_no": "第十六条", "chapter_title": "第一章 总则", "section_title": null, "tags": ["公司担保", "决议程序", "主体审查"] }, + { "article_no": "第二十一条", "chapter_title": "第一章 总则", "section_title": null, "tags": ["关联关系", "损害赔偿", "公司治理"] }, + { "article_no": "第二十二条", "chapter_title": "第一章 总则", "section_title": null, "tags": ["股东会决议", "董事会决议", "无效决议"] }, + { "article_no": "第二十三条", "chapter_title": "第一章 总则", "section_title": null, "tags": ["人格混同", "连带责任", "股东责任"] }, + { "article_no": "第四十七条", "chapter_title": "第四章 有限责任公司的设立和组织机构", "section_title": "第一节 设立", "tags": ["注册资本", "出资期限", "股东义务"] }, + { "article_no": "第四十八条", "chapter_title": "第四章 有限责任公司的设立和组织机构", "section_title": "第一节 设立", "tags": ["出资方式", "非货币财产", "股权出资"] }, + { "article_no": "第四十九条", "chapter_title": "第四章 有限责任公司的设立和组织机构", "section_title": "第一节 设立", "tags": ["出资缴纳", "验资", "出资证明"] }, + { "article_no": "第五十七条", "chapter_title": "第四章 有限责任公司的设立和组织机构", "section_title": "第二节 组织机构", "tags": ["股东会职权", "公司治理", "决议权限"] }, + { "article_no": "第五十九条", "chapter_title": "第四章 有限责任公司的设立和组织机构", "section_title": "第二节 组织机构", "tags": ["股东会决议", "表决权", "重大事项"] }, + { "article_no": "第六十条", "chapter_title": "第四章 有限责任公司的设立和组织机构", "section_title": "第二节 组织机构", "tags": ["董事会职权", "经营决策", "公司治理"] }, + { "article_no": "第六十五条", "chapter_title": "第四章 有限责任公司的设立和组织机构", "section_title": "第二节 组织机构", "tags": ["法定代表人", "董事经理", "公司代表"] }, + { "article_no": "第六十六条", "chapter_title": "第四章 有限责任公司的设立和组织机构", "section_title": "第二节 组织机构", "tags": ["监事会", "监事", "公司治理"] }, + { "article_no": "第六十七条", "chapter_title": "第四章 有限责任公司的设立和组织机构", "section_title": "第二节 组织机构", "tags": ["审计委员会", "监事会替代", "公司治理"] }, + { "article_no": "第六十八条", "chapter_title": "第四章 有限责任公司的设立和组织机构", "section_title": "第二节 组织机构", "tags": ["经理", "董事会聘任", "公司治理"] }, + { "article_no": "第六十九条", "chapter_title": "第四章 有限责任公司的设立和组织机构", "section_title": "第二节 组织机构", "tags": ["一人公司", "组织机构", "公司治理"] }, + { "article_no": "第一百八十条", "chapter_title": "第八章 公司董事、监事、高级管理人员的资格和义务", "section_title": null, "tags": ["忠实勤勉", "董监高义务", "公司治理"] }, + { "article_no": "第一百八十一条", "chapter_title": "第八章 公司董事、监事、高级管理人员的资格和义务", "section_title": null, "tags": ["禁止行为", "董监高责任", "利益冲突"] }, + { "article_no": "第一百八十二条", "chapter_title": "第八章 公司董事、监事、高级管理人员的资格和义务", "section_title": null, "tags": ["关联交易", "报告义务", "公司治理"] } + ] + } + ] +} diff --git a/scripts/run-capacity-governance.ps1 b/scripts/run-capacity-governance.ps1 index 25eafd3d..fd46e492 100644 --- a/scripts/run-capacity-governance.ps1 +++ b/scripts/run-capacity-governance.ps1 @@ -95,12 +95,13 @@ function Invoke-Remote { "-o", "StrictHostKeyChecking=accept-new", "-o", "ConnectTimeout=10", $target, - $Command + "bash", + "-s" ) $previousErrorActionPreference = $ErrorActionPreference $ErrorActionPreference = "Continue" try { - $output = & ssh @args 2>&1 + $output = $Command | & ssh @args 2>&1 $exitCode = $LASTEXITCODE } finally { $ErrorActionPreference = $previousErrorActionPreference @@ -278,9 +279,15 @@ echo "DOCKER_SYSTEM_DF_AFTER_END" } } - $beforeDisk = if ($remoteData.DISK_BEFORE_USED_PERCENT) { [int]$remoteData.DISK_BEFORE_USED_PERCENT } else { 100 } - $afterDisk = if ($remoteData.DISK_AFTER_USED_PERCENT) { [int]$remoteData.DISK_AFTER_USED_PERCENT } else { 100 } - if ($afterDisk -ge $DiskFailPercent) { + $beforeDisk = if ($remoteData.DISK_BEFORE_USED_PERCENT) { [int]$remoteData.DISK_BEFORE_USED_PERCENT } else { $null } + $afterDisk = if ($remoteData.DISK_AFTER_USED_PERCENT) { [int]$remoteData.DISK_AFTER_USED_PERCENT } else { $null } + if ($null -eq $afterDisk) { + Add-Check -Key "disk_threshold" -Label "disk threshold" -Status "fail" -Detail "Disk usage could not be read from remote capacity output" -Meta @{ + before = $beforeDisk + after = $null + artifact = $remoteCapacityPath + } + } elseif ($afterDisk -ge $DiskFailPercent) { Add-Check -Key "disk_threshold" -Label "disk threshold" -Status "fail" -Detail "Disk usage is $afterDisk%, fail threshold is $DiskFailPercent%" -Meta @{ before = $beforeDisk after = $afterDisk