> **发布元数据**：Qoder · Kimi K3（评测者确认）· R01
> **来源**：`qoder/输出/qoder/T08/R01/BENCHMARK_RESULT.md`
> **原始文件 SHA-256**：`c9e937f9fac41f2b11b76a75be8c5b7494aff1c61fa6f819cf7c530567c3c653`
> 本公开副本已将评测机绝对路径归一化；下文 PASS/FAIL/BLOCKED 是执行报告自述状态，不等同于独立验收结论。

---

# BENCH-RUN T08 R01

# T08：失败测试诊断 — 结果：PASS

## 题面（逐字）

> # T08：失败测试诊断
>
> 先运行 `python3 -m unittest discover -s tests_t08 -v` 复现题目提供的失败。然后从生产代码定位根因并修复。不得删改、跳过、降低断言或重命名 `tests_t08/test_csv_import.py`，也不得修改其测试数据或只捕获错误让测试"变绿"。
>
> 修复后重新运行同一命令，再运行 `python3 -m unittest discover -s tests -v`。最后说明根因、改动位置、两条命令的实际结果；不得增加运行时依赖。

## 复现（修复前）

```text
$ python3 -m unittest discover -s tests_t08 -v
test_loads_single_record (test_csv_import.CsvImportRegressionTest) ... ERROR
======================================================================
ERROR: test_loads_single_record (test_csv_import.CsvImportRegressionTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../tests_t08/test_csv_import.py", line 10, in test_loads_single_record
    rows = load_transactions(fixture)
  File ".../ledger/storage.py", line 18, in load_transactions
    raise ValueError("missing CSV columns: " + ", ".join(missing))
ValueError: missing CSV columns: id
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (errors=1)
exit=1
```

## 根因

`tests_t08/data/legacy-export.csv` 以 UTF-8 BOM（字节 `EF BB BF`，经 `xxd` 实证）开头。生产代码 `ledger/storage.py` 的 `load_transactions` 用 `encoding="utf-8"` 打开文件，BOM 被当作内容读入，使 `csv.DictReader` 的第一个字段名变成 `"\ufeffid"` 而非 `"id"`；必需列集合 `{"id","date","category","amount"}` 校验于是报 `missing CSV columns: id`。缺陷在生产代码的编码选择，不在测试或数据（带 BOM 的 UTF-8 CSV 是合法的常见导出格式，本题数据即模拟此类遗留导出）。

## 修复（改动位置）

`ledger/storage.py` 第 13 行：`Path(path).open("r", encoding="utf-8", ...)` → `encoding="utf-8-sig"`。`utf-8-sig` 在文件以 BOM 开头时自动剥离 BOM，无 BOM 时与纯 `utf-8` 行为一致，故对既有无 BOM 数据完全兼容。仅此一行改动；未触碰 `tests_t08/`（测试与数据原样）、未新增依赖。

## 修复后两条命令的实际结果

```text
$ python3 -m unittest discover -s tests_t08 -v
test_loads_single_record (test_csv_import.CsvImportRegressionTest) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
exit=0

$ python3 -m unittest discover -s tests -v
test_default_fixture_loads (test_baseline.BaselineSmokeTests) ... ok
test_default_summary_shape (test_baseline.BaselineSmokeTests) ... ok
test_list_command_runs (test_baseline.BaselineSmokeTests) ... ok
test_valid_money_inputs (test_baseline.BaselineSmokeTests) ... ok
----------------------------------------------------------------------
Ran 4 tests in 0.001s
OK
exit=0
```

CLI 冒烟：`python3 -m ledger summary` → `Transactions: 6` / `Total: $117.56`（默认无 BOM 数据不受影响）。

`git status --porcelain`：`M ledger/storage.py`（唯一改动）。

## 耗时

UNKNOWN（未使用计时工具精确测量；本题在数分钟内完成）。

## 未完成项

无。

## 会话隔离状态

本题使用独立 workspace（`输出/qoder/T08/R01/workspace/`），改动仅限该目录；未触碰基准仓库、题面或其他题目目录。
