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

---

# BENCH-RUN T11 R01

状态：PASS

## 任务

为 `python3 -m ledger list` 增加 `--sort-by date|amount|id` 与 `--order asc|desc`，默认按日期升序；主键并列时一律按 id 的 Unicode 码点升序打破并列；`--sort-by id --order desc` 时主排序按 id 降序；排序在日期过滤之后执行且不改变过滤结果；非法字段/方向由 argparse 标准参数错误拒绝并非零退出。

## 实际改动（仅限 workspace 内）

1. `ledger/query.py`
   - 新增 `_SORT_KEYS`（date→`transaction.date`，amount→`amount_cents`，id→`id`）与 `_ORDERS`。
   - 新增 `sort_transactions(transactions, sort_by="date", order="asc")`：先按 id 升序稳定排序，再按主键稳定排序（`reverse=(order=="desc")`），保证任何排序下并列组内仍按 id 码点升序；非法 `sort_by`/`order` 抛出 `ValueError`。
   - `list_transactions` 扩展签名为 `(transactions, start_date=None, end_date=None, sort_by="date", order="asc")`，先 `filter_by_date` 后 `sort_transactions`。`filter_by_date` 的排他边界行为未改动（题面不要求）。
2. `ledger/cli.py`
   - `list` 子命令新增 `--sort-by`（`choices=["date","amount","id"]`，默认 `date`）与 `--order`（`choices=["asc","desc"]`，默认 `asc`），非法值由 argparse 标准错误拒绝、退出码 2。
   - `main` 中把 `args.sort_by`/`args.order` 传入 `list_transactions`。列表字段格式、`summary` 与其他接口未改动。
3. `tests/test_sort.py`（新增文件，未删改任何已有测试）
   - 默认日期升序（E-01 在最前）、amount desc、id desc、并列打破（内存构造同日期/同金额数据，验证 asc 与 desc 下并列组均按 id 升序）、排序不改变过滤结果（排他边界过滤 + amount desc）、非法 `--sort-by`/`--order` 均触发非零 `SystemExit`。
4. `docs/usage.md`：新增排序参数、默认值、并列打破规则、过滤后排序及非法值拒绝的简短说明。

未增加任何运行时依赖，仅使用标准库。

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

### 1. 单元测试

命令：`python3 -m unittest discover -s tests -v`（在 workspace 根目录）

原始输出：

```
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_sort_is_date_ascending (test_sort.SortTests) ... ok
test_invalid_order_rejected_nonzero (test_sort.SortTests) ... ok
test_invalid_sort_by_rejected_nonzero (test_sort.SortTests) ... ok
test_sort_by_amount_desc (test_sort.SortTests) ... ok
test_sort_by_id_desc (test_sort.SortTests) ... ok
test_sort_does_not_change_filter_results (test_sort.SortTests) ... ok
test_ties_broken_by_id_ascending (test_sort.SortTests) ... ok

----------------------------------------------------------------------
Ran 11 tests in 0.004s

OK
```

耗时：real 0m0.066s（`time` 实测）；11 个测试全部通过（原有 4 个基线测试保持通过，未改动）。

### 2. CLI 各排序/顺序组合（均退出码 0）

- `python3 -m ledger list`（默认）→ `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 date --order desc` → `D-01, C-01, B-01, A-01, A-02, E-01`（并列组内仍 id 升序）。
- `python3 -m ledger list --sort-by amount --order asc` → `A-01, C-01, E-01, D-01, A-02, B-01`。
- `python3 -m ledger list --sort-by amount --order desc` → `B-01, A-02, D-01, E-01, C-01, A-01`。
- `python3 -m ledger list --sort-by id` → `A-01, A-02, B-01, C-01, D-01, E-01`。
- `python3 -m ledger list --sort-by id --order desc` → `E-01, D-01, C-01, B-01, A-02, A-01`。
- `python3 -m ledger list --start-date 2024-12-31 --end-date 2025-02-01 --sort-by amount --order desc` → `B-01, A-02, C-01, A-01`（过滤结果与基线排他边界一致，仅顺序改变；E-01/D-01 被边界排除）。

### 3. 非法值验证

- `python3 -m ledger list --sort-by bogus` → 退出码 `2`，stderr：`ledger list: error: argument --sort-by: invalid choice: 'bogus' (choose from 'date', 'amount', 'id')`。
- `python3 -m ledger list --order sideways` → 退出码 `2`，stderr：`ledger list: error: argument --order: invalid choice: 'sideways' (choose from 'asc', 'desc')`。

## 尚未完成的要求

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

## 会话隔离说明

- 所有读写仅限本次运行 workspace：`<评测根目录>/deepseek-harness/输出/deepseek-harness/T11/R01/workspace`；结果文件写入该运行目录根部的 `BENCHMARK_RESULT.md`。
- 未修改题目源文件、基准仓库或其他运行目录；未联网；未增加依赖；未删改 `tests/` 中已有测试（`tests/test_baseline.py` 原样保留并全部通过）。
- 本报告中列出的每条命令均已实际执行，输出为原始结果，未声称任何未运行的检查。
