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

---

PASS

# T11 R01 基准测试结果

## 状态
PASS — 全部要求已实现，`python3 -m unittest discover -s tests -v` 16 个测试全部通过（OK，退出码 0）。

## 实际改动（仅 workspace 内）

1. `ledger/query.py`
   - 新增 `sort_transactions(transactions, sort_by="date", order="asc")` 及内部 `_SORT_KEYS` 映射（date→`transaction.date`，amount→`transaction.amount_cents`，id→`transaction.id`）。
   - 采用分两步稳定排序：先按 `id` 升序排，再按主键排（`reverse` 仅作用于主键步骤），保证主键并列时始终以 `id` Unicode 码点升序打破并列；`--sort-by id --order desc` 时整体按 id 降序。
   - 非法 `sort_by`/`order` 抛出 `ValueError`。
   - `filter_by_date` 与 `list_transactions` 未改动（排他边界保持冻结基线原样）。

2. `ledger/cli.py`
   - `list` 子命令新增 `--sort-by`（choices=["date","amount","id"]，默认 `date`）与 `--order`（choices=["asc","desc"]，默认 `asc`）；非法值由 argparse 标准参数错误拒绝，退出码 2。
   - `main()` 中在 `list_transactions(...)`（日期过滤）之后调用 `sort_transactions(...)`，过滤结果不变；输出仍走原有 `format_transactions`，默认列表字段格式未改。

3. `tests/test_sorting.py`（新增文件，未触碰 `tests/test_baseline.py`）
   - 单元测试：默认 date asc + id 并列打破、date desc（tie-break 仍 id 升序）、amount asc/desc、id desc、非法 sort_by/order 抛 ValueError。
   - CLI 测试：默认顺序、amount desc、id desc、排序与日期过滤组合（验证排他过滤结果不变后再排序）、非法 `--sort-by`/`--order` 的 SystemExit 退出码非零（实际为 2）。

4. `docs/usage.md`（追加"## 排序"一节，原有内容未删改）

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

所有命令均先 `cd <评测根目录>/zcode/输出/zcode/T11/R01/workspace`。

1. `python3 -m unittest discover -s tests -v`
   - 首轮：15 ok / 1 FAIL —— 失败原因是新增测试自身的期望值写错（amount desc 下 B-01 100.10 应排在 A-02 12.00 前），实现无误；修正测试期望后重跑。
   - 最终：`Ran 16 tests in 0.005s` → `OK`，`EXIT=0`。16 个测试（4 个既有 baseline + 12 个新增）全部通过。

2. 手动 CLI 验证（均实际执行，退出码已记录）：
   - `python3 -m ledger list` → EXIT=0，顺序 E-01, A-01, A-02, B-01, C-01, D-01（默认日期升序，2025-01-01 并列按 id 升序 A-01 在 A-02 前）。
   - `python3 -m ledger list --sort-by amount --order desc` → EXIT=0，顺序 B-01, A-02, D-01, E-01, C-01, A-01。
   - `python3 -m ledger list --sort-by id --order desc` → EXIT=0，顺序 E-01, D-01, C-01, B-01, A-02, A-01。
   - `python3 -m ledger list --sort-by date --order desc` → EXIT=0，顺序 D-01, C-01, B-01, A-01, A-02, E-01（desc 下 tie-break 仍为 id 升序）。
   - `python3 -m ledger list --start-date 2024-12-31 --end-date 2025-02-01` → EXIT=0，仅 A-01, A-02, B-01, C-01（排他过滤行为不变，排序在过滤后执行）。
   - `python3 -m ledger list --sort-by bogus` → EXIT=2，argparse 标准错误 `invalid choice: 'bogus'`。
   - `python3 -m ledger list --order up` → EXIT=2，argparse 标准错误 `invalid choice: 'up'`。
   - `python3 -m ledger summary` → EXIT=0，输出 `Transactions: 6` / `Total: $117.56`（汇总功能未受影响）。

注：输出中负数金额显示为 `$-1.95` 是冻结基线中刻意保留的 formatting 问题（T10 范围），本题未修改。

## 耗时
约 5 分钟（含实现、测试、手动验证与本文档）。

## 尚未完成的要求
无。

## 会话隔离状态
- 仅读写了运行目录 `<评测根目录>/zcode/输出/zcode/T11/R01/` 内的文件（workspace 子目录及本结果文件）。
- 未修改题目源文件、基准仓库或其他运行目录；未访问其他路径。
- 未联网、未安装任何包、未增加运行时依赖（仅标准库 argparse/datetime 等）。
- 未删改 `tests/test_baseline.py` 及任何既有测试；workspace 内 `.git` 保持冻结提交状态，未做任何 git 提交。
