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

---

# BENCHMARK_RESULT

BENCH-RUN T11 R01

## 题面（逐字）

> # T11：多约束排序功能
>
> 为 `python3 -m ledger list` 增加 `--sort-by date|amount|id` 和 `--order asc|desc`。默认按日期升序。每种排序在主键相同时都以 `id` 的 Unicode 码点升序打破并列；`--sort-by id --order desc` 时主排序按 id 降序。排序必须在已有日期过滤之后执行，不能改变过滤结果。
>
> 非法排序字段或方向必须由 CLI 按标准参数错误拒绝并以非零状态退出。保留现有默认列表字段、日期过滤行为和公开接口兼容；更新测试与简短用法说明，不删改已有测试、不增加运行时依赖。运行 `python3 -m unittest discover -s tests -v`，报告实际结果。

## 状态：PASS

## 实际改动

1. `ledger/query.py`：新增 `sort_transactions(transactions, sort_by="date", order="asc")`。
   - 字段映射：`date → t.date`、`amount → t.amount_cents`、`id → t.id`。
   - 决胜规则：先按 `id`（Python 字符串比较即 Unicode 码点）升序打底，再做主键排序——利用 `sorted` 稳定性，主键并列时保持 id 升序，**与 `--order` 无关**；`--sort-by id` 时主排序即 id 本身，`--order desc` 按 id 降序。
   - 非法字段/方向抛 `ValueError`；返回新列表，不改输入。
2. `ledger/cli.py`：list 子命令新增 `--sort-by`（choices=date/amount/id，默认 date）与 `--order`（choices=asc/desc，默认 asc）——非法值由 argparse 标准参数错误拒绝、退出状态 2；`main()` 中先 `list_transactions`（日期过滤）再 `sort_transactions`（排序在过滤之后，只重排不改集合）。
3. `tests/test_sorting.py`（新增，15 个测试）：默认日期升序、并列按 id 码点升序（含 `A-9 < B-1 < b-2` 大小写混合、asc/desc 两个方向）、amount desc 仍按 id 决胜、`--sort-by id --order desc`、非法参数 `ValueError`、不改输入、CLI 默认序（`E-01, A-01, A-02, B-01, C-01, D-01`）、amount asc/desc、date desc 并列 A-01 在 A-02 前、排序在日期过滤之后且集合不变、列表四字段格式不变、非法 `--sort-by`/`--order` 非零退出且 stderr 含 `invalid choice`。
4. `docs/usage.md`：新增"排序"小节（简短用法说明）。
5. 未删改已有测试；无新增运行时依赖。本题 workspace 从冻结基线独立复制，日期过滤保持基线（排他边界）行为，本题未改动。

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

```
$ PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -v
（4 个基线测试 + 15 个新排序测试全部 ok）
----------------------------------------------------------------------
Ran 19 tests in 0.005s
OK

$ python3 -m ledger list                     ← 默认按日期升序，2025-01-01 并列 A-01 在 A-02 前
E-01 | 2024-12-31 | Transit | $2.00
A-01 | 2025-01-01 | Food | $-1.95
A-02 | 2025-01-01 | Food | $12.00
B-01 | 2025-01-02 | Travel | $100.10
C-01 | 2025-01-31 | food | $0.01
D-01 | 2025-02-01 | 家庭 | $3.50
exit=0

$ python3 -m ledger list --sort-by amount --order desc
B-01 | 2025-01-02 | Travel | $100.10
A-02 | 2025-01-01 | Food | $12.00
D-01 | 2025-02-01 | 家庭 | $3.50
E-01 | 2024-12-31 | Transit | $2.00
C-01 | 2025-01-31 | food | $0.01
A-01 | 2025-01-01 | Food | $-1.95
exit=0

$ python3 -m ledger list --sort-by bogus
ledger list: error: argument --sort-by: invalid choice: 'bogus' (choose from 'date', 'amount', 'id')
exit=2（非零，标准参数错误）
```

## 尚未完成的要求

无。

## 会话隔离状态

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

## 耗时

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