> **发布元数据**：MiniMax Code · Kimi K3（评测者确认）· R01
> **来源**：`minimax-code/输出/minimax-code/T06/R01/BENCHMARK_RESULT.md`
> **原始文件 SHA-256**：`c82977ec60e7bb3a69dbc7a8e0813e247df11f5127c9a3c840946749a308e944`
> **规程说明**：本工具报告记载 12 题在单个批量会话中执行；与冻结会话隔离规程不符，本轮暂不进入严格排名。
> 本公开副本已将评测机绝对路径归一化；下文 PASS/FAIL/BLOCKED 是执行报告自述状态，不等同于独立验收结论。

---

# BENCHMARK_RESULT

BENCH-RUN T06 R01

## 题面（逐字）

> # T06：增加类别过滤
>
> 为 `python3 -m ledger list` 增加精确选项 `--category <NAME>`。比较前对查询值和数据类别都去除首尾空白，并使用 Unicode `casefold` 做不区分大小写比较；输出保留记录中的原始类别拼写。未匹配类别返回空结果且成功退出。类别过滤必须能与 `--start-date`、`--end-date` 同时生效，不能绕过日期过滤。
>
> 保持无选项时的现有行为和公开接口兼容；新增测试与简短用法说明，不删改已有测试、不增加运行时依赖。运行 `python3 -m unittest discover -s tests -v`，并报告实际结果。

## 状态：PASS

## 实际改动

1. `ledger/query.py`：
   - 新增 `filter_by_category(transactions, category)`：`wanted = category.strip().casefold()`，保留 `transaction.category.strip().casefold() == wanted` 的记录——查询值与数据类别两侧都去除首尾空白并用 Unicode `casefold` 比较；记录本身不改动，输出保留原始类别拼写。
   - `list_transactions` 签名扩展为 `(transactions, start_date=None, end_date=None, category=None)`（向后兼容的追加默认参数）：先 `filter_by_date` 再做类别过滤，保证类别过滤不绕过日期过滤。
2. `ledger/cli.py`：list 子命令新增 `--category`；`main()` 传 `args.category`。未匹配时 `format_transactions([])` 为空串，`main()` 不打印、返回 0——空结果成功退出。
3. `tests/test_category_filter.py`（新增，9 个测试方法）：casefold 混合大小写匹配且保留原始拼写、双侧去空白、Unicode casefold（`straße`/`STRASSE`）、无匹配返回空、CLI 混合大小写类别（FOOD 命中 A-02/A-01 的 `Food` 与 C-01 的 `food`）、CLI 查询值去空白、CLI 无匹配空输出 exit 0、与 `--start-date`/`--end-date` 组合生效且不绕过日期过滤、不带选项时输出 6 行不变。
4. `docs/usage.md`：新增"按类别过滤"小节（简短用法说明）。原文档其他内容（含既有拼写）未动。
5. 未删改已有测试；无新增运行时依赖。

注意：本题 workspace 从冻结基线独立复制，日期过滤保持基线既有（排他边界）行为，本题未改动它。

## 实际运行的命令与原始结果

```
$ PYTHONDONTWRITEBYTECODE=1 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
test_casefold_match_keeps_original_spelling (test_category_filter.CategoryFilterTests) ... ok
test_cli_combines_with_date_filter (test_category_filter.CategoryFilterTests) ... ok
test_cli_matches_mixed_case_categories (test_category_filter.CategoryFilterTests) ... ok
test_cli_no_match_empty_success (test_category_filter.CategoryFilterTests) ... ok
test_cli_query_value_is_stripped (test_category_filter.CategoryFilterTests) ... ok
test_cli_without_option_unchanged (test_category_filter.CategoryFilterTests) ... ok
test_no_match_returns_empty (test_category_filter.CategoryFilterTests) ... ok
test_strips_whitespace_on_both_sides (test_category_filter.CategoryFilterTests) ... ok
test_unicode_casefold (test_category_filter.CategoryFilterTests) ... ok
----------------------------------------------------------------------
Ran 13 tests in 0.003s
OK
```

CLI 手工验证：

```
$ python3 -m ledger list --category FOOD
A-02 | 2025-01-01 | Food | $12.00
A-01 | 2025-01-01 | Food | $-1.95
C-01 | 2025-01-31 | food | $0.01      ← 大小写不敏感，原始拼写保留
exit=0

$ python3 -m ledger list --category Nope
exit=0                               ← 空结果，成功退出

$ python3 -m ledger list --category food --start-date 2025-01-02
C-01 | 2025-01-31 | food | $0.01     ← 与日期过滤同时生效
exit=0
```

## 尚未完成的要求

无。

## 会话隔离状态

改动只发生在 `输出/minimax-code/T06/R01/workspace/` 独立副本内。实际执行为单个批量会话内按题隔离的独立 workspace。其余会话级隔离元数据：UNKNOWN。

## 耗时

约 3 分钟（秒级精确耗时 UNKNOWN）。
