已关闭
[issue] duplication_output_bytes 超限时 BM403 human 输出 Cause 误显 "format unsupported" #14
cezarbbb创建于 9月9日关闭于 9月17日
WangZijun
9月15日 评论:
9月15日 评论:
https://gitcode.com/xuanwu/bot-metric/merge_requests/8
结论:
- 问题可复现:已通过修复前最小复现/回归测试确认。
- 问题可修复:当前分支集成测试已验证修复行为。
具体修复:
- 在输出预算检查前完成机器 JSON 序列化,避免 stdout 产生截断 JSON。
- 区分输出预算超限与格式错误的 BM403 原因。
- 明确 duplication top 模式的重复行数及 stable_subject 字典序取舍规则并增加测试。


问题概述
触发
duplication_output_bytes输出预算超限(实测 4899 字节 > 100 字节预算)时,BM403 的 human 输出 Cause 行与"输出格式非法"(OUTPUT_FORMAT_INVALID)共用文案,显示 format unsupported,与真实原因(输出预算超限)不符;真实原因需查看 stderr 错误首行。首次出现版本:v1.1.0(该预算键为 v1.1.0 新增)。受影响对象:所有输入类型(输出层问题,与输入无关)。实际影响:超限场景错误归因错误,延长排查时间。本问题不涉及指标数值,涉及诊断文案口径。影响范围
--output或调大预算)避免触发该场景复现步骤
最小源码样例:夹具
fixtures\dup-many(48 个 .rs 文件、831 行)。自包含最小样例如下(与夹具同构的重复文件对,足以触发输出预算超限;下述命令中的<dup-pair>即指向该样例目录):Cargo.toml:[package] name = "dup-pair" version = "0.1.0" edition = "2021"src/lib.rs:pub mod dup_a; pub mod dup_b;src/dup_a.rs:// dup_a.rs — intentionally duplicated with dup_b.rs (12 identical NBNC lines). pub fn transform_a(values: Vec<u32>, factor: u32) -> Vec<u32> { let mut out = Vec::with_capacity(values.len()); for v in values { if v == 0 { continue; } let scaled = v * factor; if scaled > 1000 { out.push(1000); } else { out.push(scaled); } } out } pub fn summarize_a(values: &[u32]) -> u32 { values.iter().copied().sum() }src/dup_b.rs:// dup_b.rs — intentionally duplicated with dup_a.rs (12 identical NBNC lines). pub fn transform_b(values: Vec<u32>, factor: u32) -> Vec<u32> { let mut out = Vec::with_capacity(values.len()); for v in values { if v == 0 { continue; } let scaled = v * factor; if scaled > 1000 { out.push(1000); } else { out.push(scaled); } } out } pub fn summarize_b(values: &[u32]) -> u32 { values.iter().copied().sum() }配置
bot-metric-dup-out.toml(同 BM-OBS-5-2):[thresholds] duplication_output_bytes = 100 [rules] duplication_findings = "all"BM110 analyze <dup-many> --config bot-metric-dup-out.toml --format human预期结果
Cause 应指向输出预算超限(如 report output budget exceeded),与"输出格式非法"场景文案区分。
实际结果
human 输出 Cause 显示 format unsupported(与格式非法共用文案);stderr 首行才是真实原因(输出超限 4899 > 100)。两平台行为一致。证据:
x86_linux\records\batch-09\verify-groupB_5-2_5-3_5-4.txt;arm_linux\records-arm64\batch-09\verify-groupB_5-2_5-3_5-4.txt。证据原文(x86_linux\records\batch-09\verify-groupB_5-2_5-3_5-4.txt,5-3 部分):
证据原文(arm_linux\records-arm64\batch-09\verify-groupB_5-2_5-3_5-4.txt,5-3 部分):
分析环境与范围
--config bot-metric-dup-out.toml --format human指标、发现与报告证据
性能与资源证据
附件与提交确认