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

---

# BENCHMARK_RESULT

BENCH-RUN T05 R01
状态：**PASS**

## 任务

为 `python3 -m ledger summary` 增加 `--format json` 选项：默认输出保持基线行为；JSON 含 `count`、`total_cents`、`by_category` 三字段，金额为整数分，`by_category` 键为原始类别文本、按 Unicode 码点升序；相同输入输出稳定；stdout 仅含 JSON。新增测试与用法说明，不删改已有测试、不加运行时依赖（仅用标准库）。

## 实际改动（均在 workspace 内）

1. `ledger/summary.py`
   - `summarize()` 返回值新增 `by_category`：逐笔按原始类别文本累加 `amount_cents`，用 `sorted()`（str 即 Unicode 码点升序）构造有序 dict。
   - 新增 `format_summary_json()`：按 `count`、`total_cents`、`by_category` 顺序构造 payload，`json.dumps(payload)` 单行输出（默认 `ensure_ascii=True`，非 ASCII 类别以 `\uXXXX` 转义，标准 JSON 解析器可读；dict 插入顺序保证键序稳定）。
   - `format_summary()` 未改动，默认文本输出不变。
2. `ledger/cli.py`
   - `summary` 子命令新增 `--format` 参数（`choices=["text", "json"]`，`default="text"`），不带选项时走原路径。
   - `main()` 在 summary 分支按 `args.format` 选择 `format_summary_json` 或 `format_summary`。
3. `tests/test_summary_json.py`（新增，未触碰 `tests/test_baseline.py`）
   - 5 个用例：JSON 可解析且字段齐全/整型；`by_category` 值与码点升序（`Food, Transit, Travel, food, 家庭`）；stdout 为单行 JSON；相同输入两次运行输出一致；默认 summary 输出与基线逐字节一致（`Transactions: 6\nTotal: $117.56\n`）。
4. `docs/usage.md`：「汇总」一节追加 `--format json` 简短用法说明与字段释义。

`git status --porcelain`（改动后）：
```
 M docs/usage.md
 M ledger/cli.py
 M ledger/summary.py
?? tests/test_summary_json.py
```
未修改 `tests_t08/`、题目源文件或任何 workspace 外文件；未新增依赖。

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

改动前基线（冻结提交 `ed2390f2df8252f062abd9123e20f6fffca7e5ed`，git 工作区干净）：

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

$ python3 -m unittest discover -s tests -v   # 改动前
Ran 4 tests in 0.001s
OK
```

改动后：

```
$ 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_by_category_values_and_codepoint_order (test_summary_json.SummaryJsonTests) ... ok
test_default_summary_output_unchanged (test_summary_json.SummaryJsonTests) ... ok
test_json_output_parses_and_has_required_fields (test_summary_json.SummaryJsonTests) ... ok
test_same_input_stable_output (test_summary_json.SummaryJsonTests) ... ok
test_stdout_is_single_json_line (test_summary_json.SummaryJsonTests) ... ok

----------------------------------------------------------------------
Ran 9 tests in 0.002s

OK
exit=0
```

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

$ python3 -m ledger summary   # 默认输出与基线一致
Transactions: 6
Total: $117.56
exit=0
```

JSON 可解析性 / 字段 / 排序验证（`json.load` 方式）：

```
$ python3 -m ledger summary --format json | python3 -c "import json, sys; ...(断言脚本)"
fields: ['by_category', 'count', 'total_cents']
count: 6 int
total_cents: 11756 int
by_category: {'Food': 1195, 'Transit': 200, 'Travel': 10010, 'food': 1, '家庭': 350}
keys codepoint-ascending: True ['Food', 'Transit', 'Travel', 'food', '家庭']
all int values: True
```

stdout 纯净度与稳定性：

```
$ python3 -m ledger summary --format json 2>/dev/null | wc -l
       1                          # stdout 恰好一行 JSON
$ python3 -m ledger summary --format json 2>&1 1>/dev/null | wc -c
       0                          # stderr 为空，无日志/说明混入
# 两次运行输出逐字节相同：STABLE: identical across runs
```

## 耗时

UNKNOWN（未做精确计时；全程为单次会话内数分钟量级）。

## 尚未完成要求

无。题面全部要求均已实现并验证。

## 会话隔离状态

- 所有读写均限于本次运行 workspace：`输出/deepseek-harness/T05/R01/workspace`；结果文件写入本次运行目录根部 `输出/deepseek-harness/T05/R01/BENCHMARK_RESULT.md`。
- 未修改题目源文件、基准仓库或其他运行目录；未联网；未增加依赖；未删改既有测试。
- workspace 基于冻结提交 `ed2390f2df8252f062abd9123e20f6fffca7e5ed`，改动前 `git status` 干净。
