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

---

# BENCH-RUN T07 R01

- 状态：PASS

## 重构前后职责变化

- 重构前：`ledger/cli.py::_parse_cli_date`（基于 `datetime.strptime`）与 `ledger/query.py::_parse_date_bound`（基于 `date.fromisoformat`）各自重复实现 ISO 日期边界解析。
- 重构后：唯一实现收敛到新增模块 `workspace/ledger/dates.py::parse_iso_date_bound(value, field_name)`（先 `date.fromisoformat`，失败回退 `strptime("%Y-%m-%d")`，再回校验 `isoformat() == value`，错误统一抛 `ValueError("<field> must use YYYY-MM-DD")`）。`query.py` 与 `cli.py` 分别 `from .dates import parse_iso_date_bound as _parse_date_bound / _parse_cli_date`，两处共用同一实现。合并后语义覆盖原两个实现的并集（`fromisoformat` 与 `strptime` 各自可解析、且满足零填充回校验的输入集合一致），无行为变化。

## 实际改动文件

- 新增 `workspace/ledger/dates.py`
- 修改 `workspace/ledger/query.py`（删除本地 `_parse_date_bound`，改为导入）
- 修改 `workspace/ledger/cli.py`（删除本地 `_parse_cli_date` 与 `datetime` 导入，改为导入）
- 新增 `workspace/tests/test_dates_refactor.py`（兼容性测试）

未做无关格式化或改名；`filter_by_date(transactions, start_date=None, end_date=None)` 签名、返回类型与 `ValueError` 行为未变；未删改既有测试、未加依赖。

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

```text
$ python3 -m unittest discover -s tests -v
Ran 10 tests in 0.002s
OK          （4 个基线 + 6 个兼容/共用实现测试，全部通过）

$ python3 -m ledger list                  → 6 条记录，退出码 0（与基准一致）
$ python3 -m ledger list --start-date 2025-1-1
ledger: error: start_date must use YYYY-MM-DD   → 退出码 2（错误输出与退出状态保持基准）

$ git status --porcelain
 M ledger/cli.py
 M ledger/query.py
?? ledger/dates.py
?? tests/test_dates_refactor.py
```

## 会话隔离

改动仅限 `输出/cursor/T07/R01/workspace/`。耗时约 2 分钟。无未完成项。
