已关闭
[Issue] stable_subject 内嵌绝对路径 #10
cezarbbb创建于 9月9日关闭于 9月15日
WangZijun
9月15日 评论:
9月15日 评论:
https://gitcode.com/xuanwu/bot-metric/merge_requests/9
结论:
- 问题可复现:已通过修复前最小复现/回归测试确认。
- 问题可修复:当前分支集成测试已验证修复行为。
具体修复:
- 移除 BM007 stable_subject 中的绝对工作区路径。
- 使用文件内容哈希、字节长度和文件数生成稳定身份。
- 增加跨临时根目录 baseline compare 回归测试。


问题概述
BM007(完全重复文件)finding 的 stable_subject 稳定标识内嵌绝对路径;项目根目录移动或改名后
baseline compare报 BM007 Added+Resolved 成对假差异;BM006(连续重复块)使用相对路径无此问题,两类 finding 行为不对称。首次出现版本:v1.0.0 即存在,v1.1.0 延续(非回归)。受影响对象:含完全重复文件的 Cargo 软件包/目录输入。实际影响:CI 中 checkout 路径变化(目录改名、容器挂载点不同)产生假差异噪音,掩盖真实变化。本问题涉及报告字段口径(stable_subject 稳定标识的路径口径),不涉及指标数值。影响范围
复现步骤
最小源码样例:夹具
fixtures\dup-many(48 个 .rs 文件、831 行,含 tiny_dup_a.rs / tiny_dup_b.rs 完全重复文件对)。自包含最小样例如下(完全重复文件对触发 BM007;下述命令中的<dup-files>即指向该样例目录):Cargo.toml:[package] name = "dup-filepair" version = "0.1.0" edition = "2021"src/lib.rs:pub mod tiny_dup_a; pub mod tiny_dup_b;src/tiny_dup_a.rs:// tiny_dup_a.rs - exact duplicate of tiny_dup_b.rs (file-level duplication). pub fn tiny_dup_pair() -> u32 { let mut x = 7; x += 11; x += 22; x += 33; x += 44; x += 55; x }src/tiny_dup_b.rs:// tiny_dup_b.rs - exact duplicate of tiny_dup_b.rs (file-level duplication). pub fn tiny_dup_pair() -> u32 { let mut x = 7; x += 11; x += 22; x += 33; x += 44; x += 55; x }配置
bot-metric-dup-top.toml:[rules] duplication_findings = "top"BM110 baseline create --output base.json <dup-many> --config bot-metric-dup-top.tomldup-many-moved)BM110 baseline compare --baseline base.json <dup-many-moved> --config bot-metric-dup-top.toml --format json预期结果
stable_subject 路径无关,项目根移动后 compare 无差异项,退出码 0。
实际结果
BM007 报 Added+Resolved 成对假差异;BM006 无差异(相对路径,行为不对称)。ARM64 批次 9 复现(R2)实测通过,与 x86 位级一致。证据:
x86_linux\records\batch-09\verify-groupA_7-1_8-1.txt;arm_linux\records-arm64\batch-09\verify-groupA_7-1_8-1.txt、arm_linux\records-arm64\batch-08\out\t81-pathmove.json。证据原文(x86_linux\records\batch-09\verify-groupA_7-1_8-1.txt,8-1 部分):
证据原文(arm_linux\records-arm64\batch-09\verify-groupA_7-1_8-1.txt,8-1 部分):
证据原文(arm_linux\records-arm64\batch-08\out\t81-pathmove.json,Added/Resolved 相关部分):
{ "metric_deltas": { "complexity.cca.adequacy": 0.0, "complexity.cca.average": 0.0, "complexity.cca.huge_ratio": 0.0, "complexity.cyclomatic.average": 0.0, "complexity.cyclomatic.huge_ratio": 0.0, "diagnostic.compiler_warning_density": 0.0, "diagnostic.static_warning_density": 0.0, "directory.huge_ratio": 0.0, "duplication.code_ratio": 0.0, "duplication.file_exact_ratio": 0.0, "file.lines.average": 0.0, "file.lines.huge_ratio": 0.0, "function.lines.average": 0.0, "function.lines.huge_ratio": 0.0, "redundancy.commented_code_density": 0.0, "rules.conformity.function": 1.1102230246251565e-16, "rules.conformity.function.maintainability": 0.0, "rules.conformity.function.performance_efficiency": 0.0, "rules.conformity.function.portability": 0.0, "rules.conformity.function.readability": 0.0, "rules.conformity.function.reliability": 1.1102230246251565e-16, "rules.conformity.function.security": 1.1102230246251565e-16, "rules.conformity.function.testability": 0.0, "rules.conformity.maintainability": 0.0, "rules.conformity.performance_efficiency": 0.0, "rules.conformity.portability": 0.0, "rules.conformity.project": 0.0, "rules.conformity.project.maintainability": 0.0, "rules.conformity.project.performance_efficiency": 0.0, "rules.conformity.project.portability": 0.0, "rules.conformity.project.readability": 0.0, "rules.conformity.project.reliability": 0.0, "rules.conformity.project.security": 0.0, "rules.conformity.project.testability": 0.0, "rules.conformity.readability": 0.0, "rules.conformity.reliability": 0.0, "rules.conformity.security": 0.0, "rules.conformity.testability": 0.0, "rules.conformity.total": 0.0, "rules.coverage.function": 0.0, "rules.coverage.function.maintainability": 0.0, "rules.coverage.function.performance_efficiency": 0.0, "rules.coverage.function.portability": 0.0, "rules.coverage.function.readability": 0.0, "rules.coverage.function.reliability": 0.0, "rules.coverage.function.security": 0.0, "rules.coverage.function.testability": 0.0, "rules.coverage.maintainability": 0.0, "rules.coverage.performance_efficiency": 0.0, "rules.coverage.portability": 0.0, "rules.coverage.project": 0.0, "rules.coverage.project.maintainability": 0.0, "rules.coverage.project.performance_efficiency": 0.0, "rules.coverage.project.portability": 0.0, "rules.coverage.project.readability": 0.0, "rules.coverage.project.reliability": 0.0, "rules.coverage.project.security": 0.0, "rules.coverage.project.testability": 0.0, "rules.coverage.readability": 0.0, "rules.coverage.reliability": 0.0, "rules.coverage.security": 0.0, "rules.coverage.testability": 0.0, "rules.coverage.total": 0.0, "safety.unsafe_density": -3.469446951953614e-18, "size.nbnc_lines": 0.0 }, "added_metrics": {}, "removed_metrics": {}, "added_findings": [ "{\"owners\":[\"demo-pkg::demo_pkg\"],\"package\":\"demo-pkg\",\"path\":\"src/copy1.rs\",\"rule\":\"rust.file.exact_duplicate\",\"subject\":\"duplicate-file:/tmp/bm-t8/copyB/src/copy1.rs:286:3\"}" ], "resolved_findings": [ "{\"owners\":[\"demo-pkg::demo_pkg\"],\"package\":\"demo-pkg\",\"path\":\"src/copy1.rs\",\"rule\":\"rust.file.exact_duplicate\",\"subject\":\"duplicate-file:/tmp/bm-t8/copyA/src/copy1.rs:286:3\"}" ] }分析环境与范围
--config bot-metric-dup-top.toml;baseline create / compare指标、发现与报告证据
t81-pathmove.json与verify-groupA_7-1_8-1.txt性能与资源证据
附件与提交确认