已关闭
[issue] baseline create 不支持 --file 独立文件输入 #21
cezarbbb创建于  9月9日关闭于  9月16日
cezarbbb
9月9日 创建
name about title labels
BotMetric 问题单 报告 BotMetric 中可复现的问题 [Issue] baseline create 不支持 --file 独立文件输入,报 BM402 退出 2 bug, baseline, low

问题概述

baseline create 仅接受目录/Cargo 清单输入,传 --file 报 BM402(参数无效),退出码 2;baseline 机制与 analyze 的输入能力不对齐(analyze 支持 --file,baseline create 不支持)。首次出现版本:v1.0.0 即存在,v1.1.0 延续。受影响对象:--file 独立文件输入。实际影响:独立文件场景无法直接建基线,需目录/Cargo 包装。本问题涉及工作流能力口径,不涉及指标数值。

影响范围

项目 内容
分析对象 ☑ 独立 .rs 文件(Cargo 软件包/工作空间不受影响)
受影响的指标、规则或报告字段 baseline create 子命令的输入能力(与 analyze 的 --file 能力不对齐);BM402
影响程度 ☑ 轻微
临时规避办法 ① 将独立文件放入目录后对目录建基线;② 用最小 Cargo 包装(Cargo.toml + src)后建基线

复现步骤

最小源码样例:夹具 fixtures\standalone(app.rs,5 个 .rs 文件、26 行)。自包含最小样例如下(独立 .rs 文件,可直接创建后复现;下述命令中的 <standalone> 即指向该样例目录):

standalone/
└── app.rs

app.rs:

// app.rs — standalone fixture with a moderate function and a cfg block.

pub fn pipeline(input: &[i32]) -> Vec<i32> {
    let mut out = Vec::new();
    for v in input {
        if *v % 2 == 0 {
            out.push(*v * 2);
        } else if *v < 0 {
            out.push(-*v);
        } else {
            out.push(*v + 1);
        }
    }
    out
}

#[cfg(feature = "advanced")]
pub fn advanced_mode() -> &'static str {
    "advanced enabled"
}

#[cfg(not(feature = "extra"))]
pub fn fallback() -> &'static str {
    "basic mode"
}

#[cfg(feature = "extra")]
pub fn extra_path() -> &'static str {
    "extra feature path"
}
  1. BM110 baseline create --output b.json --file <standalone>\app.rs
  2. 观察错误码与消息
  3. 对照:BM110 analyze --file <standalone>\app.rs --format json(analyze 支持同输入)
  4. x86 与 ARM64 各执行一次并对比

预期结果

baseline create 支持 --file 输入(与 analyze 能力对齐),或文档明确 baseline 仅支持目录/Cargo 输入。

实际结果

BM402 参数无效,退出码 2;analyze 对同一输入正常。两平台行为一致。证据:x86_linux\records\batch-07\;arm_linux\records-arm64\batch-07\。

证据原文(x86_linux\records\batch-07\BATCH-07-SUMMARY.md 观察项节选):

## 观察项

1. **baseline compare 1-ULP 假差异(建议反馈上游)**:相同输入、相同配置下,compare 路径计算的比率指标与 analyze/baseline-create 路径相差 1 ULP(确定性可复现,两版本一致)。CI 严格相等比较会误报 Changes;建议统一计算路径或引入容差。
2. **quality_targets 输出顺序为实现固定序**,未在文档说明;跨版本稳定但与配置书写顺序无关,依赖顺序的消费方需注意。
3. **cfg_policy 不影响文件级词法 NBNC**:剔除只作用于 AST 项,size.nbnc_lines 分母不变;文档未明示该边界,用户可能预期 NBNC 随 cfg 变化。
4. **--cfg 传参引号敏感**:`--cfg 'feature="extra"'` 才能精确匹配 `cfg(feature = "extra")`;传 `feature=extra`(bash 去引号)会因"同键不同值"规则使 `cfg(feature = "extra")` 判为 False。行为与实现一致但易误用,建议文档示例。
5. **baseline create 不支持 --file 输入**(BM402 unexpected argument),仅支持 PATH 形式;独立文件场景需用目录或 Cargo 工程包装。

证据原文(arm_linux\records-arm64\batch-07\BATCH-07-SUMMARY.md 节选,两处):

- 观察⑤复现:baseline create --file → BM402 unexpected argument(仅支持 PATH 形式)。

| ⑤ | baseline create 不支持 --file | ✅ 复现(BM402) |

证据原文(x86_linux\records\batch-07\out\t75-base-create.json,PATH 形式创建成功对照,4 行全文):

BotMetric baseline create
   OK baseline created

  Path        /tmp/bm-base-t7/baseline-md5.json

(注:BM402 报错无独立产物文件,原文记录于两平台 BATCH-07-SUMMARY.md;t75-base-create.json 为 PATH 形式创建成功的对照记录)

分析环境与范围

项目 内容
BotMetric 版本或提交号 v1.1.0(commit 8ef52f6);v1.0.0 行为一致
操作系统与架构 x86_64 Linux(rustc/cargo 1.95.0)+ aarch64 Linux(rustc/cargo 1.98.0),均 root 用户
软件包 / 目标 / 特性 / 范围参数 standalone(--file app.rs);baseline create
文件数 / 代码行数 5 个 .rs 文件 / 26 行
模块层级 / 重复窗口 app.rs + app/ 子目录模块对;不涉及重复分析

指标、发现与报告证据

  • ☑ 已说明发现条目的编号、严重级别、位置和 human_message:BM402 / error / 无位置 / 参数无效消息(原文见证据文件)
  • ☑ 已附 analysis-report:错误输出存于 batch-07 证据文件
  • ☐ 指标口径:不适用(工作流能力问题,分析未执行)
  • ☑ 已说明 Cargo/独立文件口径差异:本条即独立文件口径的工作流差异(analyze 支持而 baseline create 不支持)

性能与资源证据

项目 内容
冷缓存 / 热缓存 不适用(参数校验失败,未进入分析)
执行次数 / 基线 每平台 ≥2 次,结果一致
总耗时 <100ms(立即失败)
处理器占用 / 内存峰值 未采样(不适用)
采样工具 无
测试数据集规模 / 硬件条件 standalone 5 文件 26 行;x86_64 与 aarch64 Linux 服务器(root)

附件与提交确认

  • ☑ 已检索现有问题单,确认不是重复问题
  • ☑ 已提供最小复现步骤、预期结果和实际结果
  • ☑ 已明确指标公式、统计范围和实际证据(如适用)——本条为工作流能力问题,不涉及指标
  • ☑ 已完成日志、配置、源码和附件脱敏(输出不含本机用户路径)
likedislike
WWangZijun成员
9月15日 关联了pull request:fix: support standalone baselines and stable paths (issue#8_21)
WangZijun成员
9月15日 评论:

https://gitcode.com/xuanwu/bot-metric/merge_requests/7

结论:

  • 问题可复现:已通过修复前最小复现/回归测试确认。
  • 问题可修复:当前分支集成测试已验证修复行为。

具体修复:

  • 支持 baseline create/compare 的独立 --file 输入并校验互斥参数。
  • 将小于 1e-15 的 baseline delta 归零,避免未变化输入产生假差异。
  • 增加 standalone baseline 集成测试并同步命令文档。
likedislike
VVaynNecol成员
9月16日 关闭了 issue