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

---

# BENCHMARK_RESULT

BENCH-RUN T05 R01

## 题面（逐字）

> # T05：增加 JSON 输出
>
> 为 `python3 -m ledger summary` 增加精确选项 `--format json`。不带该选项的默认输出必须保持基准行为。JSON 必须可由标准 JSON 解析器读取，并包含 `count`、`total_cents`、`by_category` 三个字段；金额为整数分，`by_category` 的键是原始类别文本、值为该类别整数分总和，键按 Unicode 码点升序输出。相同输入必须产生稳定结果；stdout 只能有 JSON，不得混入日志或说明文字。
>
> 为新选项新增测试和简短用法说明；不得删改已有测试或增加运行时依赖。运行 `python3 -m unittest discover -s tests -v`，并报告实际结果。

## 状态：PASS

## 实际改动

1. `ledger/summary.py`：
   - 新增 `summarize_by_category(transactions)`：按原始类别文本精确分组，累加整数分。
   - 新增 `format_summary_json(transactions)`：`payload = summarize(...) + by_category`，`json.dumps(payload, sort_keys=True, ensure_ascii=False)`。`sort_keys=True` 使所有键（含 `by_category` 嵌套键）按 Unicode 码点升序、输出对相同输入稳定。
   - 原有 `summarize` / `format_summary` 未改。
2. `ledger/cli.py`：
   - summary 子命令注册 `--format`，`choices=["json"]`、默认 `None`（非法值由 argparse 以标准参数错误拒绝，退出状态 2）。
   - `main()` summary 分支：`args.format == "json"` 时 `output = format_summary_json(transactions)`，否则维持 `format_summary(summarize(transactions))`；`print(output)` 单行 JSON，stdout 无其他内容。
3. `tests/test_summary_json.py`（新增，6 个测试方法）：字段与数值（count=6、total_cents=11756、各类别分总额）、stdout 纯 JSON 单行、by_category 键码点升序（实际顺序 `Food, Transit, Travel, food, 家庭`）、重复运行输出逐字节稳定、默认文本输出逐字节不变、非法 `--format` 非零退出。
4. `docs/usage.md`：在"汇总"下新增"JSON 输出"小节（简短用法说明）。文档原有 `transacton` 拼写属另一题范围，本题未触碰。
5. 未删改已有测试；仅使用标准库 `json`，无新增运行时依赖。

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

```
$ 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_default_summary_unchanged (test_summary_json.SummaryJsonTests) ... ok
test_invalid_format_rejected (test_summary_json.SummaryJsonTests) ... ok   # argparse: invalid choice 'xml'
test_json_by_category_key_order_is_codepoint_ascending (test_summary_json.SummaryJsonTests) ... ok
test_json_output_is_stable (test_summary_json.SummaryJsonTests) ... ok
test_json_stdout_is_pure_json (test_summary_json.SummaryJsonTests) ... ok
test_json_summary_fields (test_summary_json.SummaryJsonTests) ... ok
----------------------------------------------------------------------
Ran 10 tests in 0.003s
OK
```

CLI 手工验证：

```
$ python3 -m ledger summary --format json
{"by_category": {"Food": 1195, "Transit": 200, "Travel": 10010, "food": 1, "家庭": 350}, "count": 6, "total_cents": 11756}
exit=0

$ python3 -m ledger summary
Transactions: 6
Total: $117.56
exit=0

$ python3 -m ledger summary --format json | python3 -c "import sys,json; d=json.load(sys.stdin); ..."
parsed-ok 11756 ['Food', 'Transit', 'Travel', 'food', '家庭']   ← 外部标准解析器读取成功，键序正确
```

## 尚未完成的要求

无。

## 会话隔离状态

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

## 耗时

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