已关闭
[issue] mutation 按单行去重追加残缺尾块,可致 cargo 配置损坏 #34
cezarbbb创建于  28 天前关闭于  27 天前
cezarbbb
28 天前 创建
name about title labels
BotForge 问题单 报告 BotForge 中可复现的问题 [Issue] mutation 按单行去重追加残缺尾块,可致 cargo 配置损坏 bug

问题概述

目录 mutation 追加逻辑按单行去重(environment.rs:318-350),重复执行时追加残缺尾块:裸 replace-with 行落入 [net] 节、[source.mirror] 节为空,cargo 解析失败 exit 101。首次出现:本版 1.0.3 新发现(绿区 Linux aarch64 独有记录,源码级定位)。受影响安装场景:目录 mutation 重复执行(多次 install)后的 cargo 配置文件。实际影响:TOML 节结构被破坏后,后续所有 cargo 调用均受影响。

影响范围

项目 内容
执行模式 □ plan ☑ install □ status □ doctor
受影响的工具、资源或目标版本 cargo 配置文件(mutation 追加尾块;[net]/[source.mirror] 节结构)
安装后端 □ cargo ☑ 托管 Cargo(mutation 配置写入) □ archive □ apt-mirror □ 其他
影响程度 ☑ 一般
临时规避办法 手工修复配置文件节结构,或删除后重新生成

复现步骤

  1. 执行一次 install(mutation 写入镜像配置)
  2. 再次执行 install(触发单行去重追加路径)
  3. 检查生成的 cargo 配置文件节结构并执行任意 cargo 命令

预期结果

mutation 幂等:重复执行不改变配置语义;cargo 正常解析。

实际结果

残缺尾块:裸 replace-with 落 [net] + 空 [source.mirror],cargo exit 101。探针复现,边界场景触发。源码定位:environment.rs:318-350。证据:探针实验(对照 A3/F/C2)。实测输出:

warning: unused config key `net.replace-with` in `…/testhome/.cargo/config.toml`   ← 裸 replace-with 落 [net]
对照探针:cargo exit 101 "no source location specified"(空 [source.mirror] 表)
源码:environment.rs:323-327 existing.contains(line) 单行去重 → 部分行存在时整段追加残缺尾块
clean 文件(不含任何 fragment 行)场景不触发(exit 0)

各平台确认:绿区 Linux aarch64 复现(探针复现 + 源码定位,单区独有记录)。

运行环境与供应信息

项目 内容
BotForge 版本或提交号 bot-forge-hw 1.0.3
操作系统与架构 Linux aarch64
Shell bash
配置来源 目录 mutation(environment.rs:318-350 追加逻辑)
软件仓库 / 镜像 内部镜像(replace-with 配置)
校验和清单 不涉及
相关工具及版本 cargo(exit 101 解析失败)

安全、性能与恢复证据

  • ☐ 已提供校验和、签名或来源验证结果
  • ☐ 已提供冷缓存/热缓存、执行次数和基线
  • ☐ 已提供总耗时、并发度、处理器、内存、磁盘或网络数据
  • ☑ 已提供取消、事务日志、失败恢复、回滚或幂等性表现(mutation 重复执行的幂等性缺陷)
  • ☑ 已说明失败后的残留文件、进程或系统状态(损坏的 cargo 配置文件残留,后续 cargo 调用均失败)

附件与提交确认

  • ☑ 已检索现有问题单,确认不是重复问题
  • ☑ 已提供最小复现步骤、预期结果和实际结果
  • ☑ 已提供可核对的安装、校验或恢复证据(如适用)
  • ☑ 已完成日志、配置和附件脱敏
likedislike
Ccezarbbb
28 天前 修改了issue 的描述
KKarliosQu成员
27 天前 关联了pull request:修复 #34:按 TOML 结构合并 Cargo 配置片段
VVaynNecol成员
27 天前 关闭了 issue