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

---

# BENCHMARK_RESULT

BENCH-RUN T07 R01

## 题面（逐字）

> # T07：保持兼容性的重构
>
> `ledger/cli.py` 与 `ledger/query.py` 各自实现了一份 ISO 日期边界解析逻辑。把重复逻辑抽取到 `ledger/dates.py`，让 CLI 校验和查询过滤共用同一实现。
>
> 必须保持 `ledger.query.filter_by_date(transactions, start_date=None, end_date=None)` 的函数签名、返回类型、日期错误的 `ValueError` 行为，以及 CLI 对非法日期的错误输出和退出状态兼容。不得做无关格式化或全仓库改名；不得删改已有测试或增加运行时依赖。可增加兼容性测试。
>
> 运行 `python3 -m unittest discover -s tests -v`，并说明重构前后的职责变化和实际验证结果。

## 状态：PASS

## 职责变化

**重构前**：ISO `YYYY-MM-DD` 边界解析存在两份实现——`ledger/cli.py` `_parse_cli_date`（基于 `datetime.strptime`，带"# Intentionally duplicates query.py"注释）和 `ledger/query.py` `_parse_date_bound`（基于 `date.fromisoformat`）。两份都做 None 直通、isoformat 回环校验、抛 `ValueError("{field} must use YYYY-MM-DD")`，但代码重复、演化时会漂移。

**重构后**：
- `ledger/dates.py`（新模块）唯一拥有边界解析实现 `parse_date_bound(value, field_name)`（`date.fromisoformat` + 回环校验，错误消息逐字节不变）。
- `ledger/cli.py`：删除本地实现与 `datetime` 导入；`_parse_cli_date` 成为一行委托（保留原名以免触动 `main()`），CLI 校验改由 `ledger.dates` 提供。
- `ledger/query.py`：删除本地 `_parse_date_bound` 与 `datetime` 导入，`filter_by_date` 改调 `parse_date_bound`；过滤逻辑（含基线既有的排他边界语义，本题未改动，那是 T04 的范围）与其他代码不变。
- `main()`、`filter_by_date` 签名/返回类型、错误消息文本、CLI 退出状态全部保持兼容。`strptime` 与 `fromisoformat` 的接受集差异被原有 isoformat 回环校验抹平（任何解析成功但非规范 `YYYY-MM-DD` 的输入仍被同一 `ValueError` 拒绝），故对外行为无变化。

## 实际改动

- 新增 `ledger/dates.py`（`parse_date_bound`）。
- `ledger/cli.py`：-13/+4 行（删重复实现，改委托）。
- `ledger/query.py`：-18/+4 行（删重复实现，改调用共享实现）。
- 新增 `tests/test_dates_refactor.py`（8 个兼容性测试）：解析基本行为、逐字节错误消息、CLI 与 query 对同一非法输入产生逐字节一致的 `ValueError`（证明共用实现）、`filter_by_date` 签名（参数名/默认值）与返回类型、CLI 错误输出（`ledger: error: end_date must use YYYY-MM-DD\n`）与退出状态 2、合法日期 CLI 正常、`dates` 模块不反向依赖 CLI/query。
- 未删改已有测试；无新增运行时依赖；无无关格式化或改名。

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

```
$ 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_cli_and_query_share_implementation (test_dates_refactor.SharedDateParsingTests) ... ok
test_cli_error_output_and_exit_status_compatible (test_dates_refactor.SharedDateParsingTests) ... ok
test_cli_valid_dates_still_work (test_dates_refactor.SharedDateParsingTests) ... ok
test_dates_module_has_no_cli_or_query_deps (test_dates_refactor.SharedDateParsingTests) ... ok
test_filter_by_date_return_type_and_valueerror (test_dates_refactor.SharedDateParsingTests) ... ok
test_filter_by_date_signature_compatible (test_dates_refactor.SharedDateParsingTests) ... ok
test_parse_date_bound_basics (test_dates_refactor.SharedDateParsingTests) ... ok
test_parse_date_bound_errors (test_dates_refactor.SharedDateParsingTests) ... ok
----------------------------------------------------------------------
Ran 12 tests in 0.002s
OK

$ python3 -m ledger list --start-date 2025-01-02
C-01 | 2025-01-31 | food | $0.01
D-01 | 2025-02-01 | 家庭 | $3.50
exit=0          ← 基线排他边界语义保持不变（2025-01-02 当日 B-01 仍被排除，与基线一致）

$ python3 -m ledger list --start-date 2025-13-40
ledger: error: start_date must use YYYY-MM-DD
exit=2          ← 错误输出与退出状态与基线逐字节一致

$ git diff --stat
 ledger/cli.py   | 13 ++-----------
 ledger/query.py | 18 +++---------------
 2 files changed, 5 insertions(+), 26 deletions(-)
```

## 尚未完成的要求

无。

## 会话隔离状态

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

## 耗时

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