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

---

# BENCHMARK_RESULT

BENCH-RUN T12 R01

## 题面（逐字，两轮）

> # T12：多轮约束保留
>
> ## 第一轮
>
> 为 `python3 -m ledger summary` 增加 `--by-category`。启用时按原始类别文本精确分组，每行输出 `类别: 金额`，按类别 Unicode 码点升序排列；不启用时默认汇总输出保持不变。新增可复用的按类别汇总函数、测试和简短用法说明。不要删除或修改原测试。完成第一轮后先给出完整回复。
>
> ## 固定第二轮追问
>
> 补充约束：`--by-category` 的类别比较改为不区分大小写（使用 Unicode `casefold`）。合并大小写不同的类别时，显示拥有最小 `id` 记录的原始类别拼写；输出按 casefold 后的类别键升序，结果必须稳定且与 CSV 输入行顺序无关。请在现有改动上满足约束，并重新运行相关检查。

## 状态：PASS

## 第一轮（按原始类别文本精确分组）

**改动**：
- `ledger/summary.py` 新增可复用函数 `summarize_by_category(transactions)`（按原始类别文本精确分组累加整数分）与 `format_by_category(totals)`（`sorted(totals)` 即 Unicode 码点升序，逐行 `f"{category}: {format_money(cents)}"`）。
- `ledger/cli.py`：summary 子命令新增 `--by-category`（`store_true`）；启用时输出分组行，不启用时 `format_summary(summarize(...))` 不变。
- `tests/test_by_category.py` 第一轮版本（4 个测试）与 `docs/usage.md` 用法小节。

**第一轮验证**（实际运行）：`python3 -m unittest discover -s tests -v` → `Ran 8 tests ... OK`；`python3 -m ledger summary --by-category` 输出：

```
Food: $11.95
Transit: $2.00
Travel: $100.10
food: $0.01
家庭: $3.50
```

（`Food` 与 `food` 当时为两行，精确分组；默认 `python3 -m ledger summary` 输出不变。）第一轮完成后已在本会话内给出完整回复，随后在同一题会话中继续第二轮。

## 第二轮（casefold 合并 + 最小 id 原始拼写）

**在第一轮改动之上修改**：
- `ledger/summary.py` `summarize_by_category`：分组键改为 `item.category.casefold()`；每组记录 `total`、`display`（原始拼写）、`min_id`，遍历时若 `item.id < group["min_id"]`（Unicode 码点升序）则更新 display 为该记录的原始类别拼写。合并逻辑与输入行顺序无关（顺序只影响遍历先后，不影响总和与最小 id 的选择）。
- `format_by_category`：按 `sorted(groups)`（casefold 键码点升序）输出 `display: 金额`。
- `tests/test_by_category.py` 更新为第二轮语义（6 个测试）：casefold 合并取最小 id 拼写（`B-02 "Food"` 胜过 `B-05 "FOOD"`、`B-09 "food"`，合计 $6.00）、id 码点比较（`"A-1" < "a-1"`）、按 casefold 键排序、与输入顺序无关的稳定性、fixture 端到端输出、默认汇总不变。
- `docs/usage.md` 用法小节更新为最终（第二轮）语义；`ledger/cli.py` 无需再改。
- 两轮均未删改原有测试；无新增运行时依赖。

## 实际运行的命令与原始结果（第二轮后重跑）

```
$ 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_merge_uses_min_id_spelling (test_by_category.ByCategoryCasefoldTests) ... ok
test_cli_fixture_output (test_by_category.ByCategoryCasefoldTests) ... ok
test_default_summary_unchanged (test_by_category.ByCategoryCasefoldTests) ... ok
test_min_id_uses_codepoint_order (test_by_category.ByCategoryCasefoldTests) ... ok
test_sorted_by_casefold_key (test_by_category.ByCategoryCasefoldTests) ... ok
test_stable_regardless_of_input_order (test_by_category.ByCategoryCasefoldTests) ... ok
----------------------------------------------------------------------
Ran 10 tests in 0.002s
OK

$ python3 -m ledger summary --by-category
Food: $11.96        ← Food/food 已合并：1195+1=1196 分；最小 id 为 A-01，其拼写为 "Food"
Transit: $2.00
Travel: $100.10
家庭: $3.50
exit=0

$ python3 -m ledger summary
Transactions: 6
Total: $117.56      ← 默认输出不变
exit=0

$ python3 -c "… 正序与逆序 CSV 各算一次 …"
stable: True        ← 输出与 CSV 行顺序无关
```

## 尚未完成的要求

无。

## 会话隔离状态

两轮提示在同一题（T12）的同一执行上下文内依次完成，共用 `输出/minimax-code/T12/R01/workspace/` 独立副本，第二轮直接在第一轮改动上演进，符合题面"T12 两轮共用该题自己的会话"的要求。实际执行为单个批量会话内按题隔离的独立 workspace。其余会话级隔离元数据：UNKNOWN。

## 耗时

约 4 分钟（两轮合计；秒级精确耗时 UNKNOWN）。
