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

---

# BENCH-RUN T01 R01

- 状态：PASS
- 任务 ID：T01
- 运行 ID：R01

## 调用链分析：`python3 -m ledger list`

所有结论均来自实际阅读 workspace 内源码（冻结提交 ed2390f2df8252f062abd9123e20f6fffca7e5ed），并在 workspace 中实际运行了 `python3 -m ledger list` 验证。路径均为相对 workspace 根的路径。

### 1. 入口

- `python3 -m ledger` 使 CPython 执行 `ledger/__main__.py`（Python 解释器对 `-m <package>` 的标准行为，推断）。
- `ledger/__main__.py` 第 1 行 `from .cli import main` 导入 `ledger/cli.py` 中的 `main`；第 4 行 `raise SystemExit(main())` 调用它并以返回值作为进程退出码（直接调用）。

### 2. 参数解析

- `ledger/cli.py` 中 `main(argv=None)`（第 38 行）首先调用同模块的 `build_parser()`（第 26 行，直接调用），后者构造 `argparse.ArgumentParser(prog="ledger")`，注册全局参数 `--config`、`--data-file` 和子命令 `list`（含 `--start-date`、`--end-date`）与 `summary`。
- `main` 第 40 行 `args = parser.parse_args(argv)`（`argv=None` 时 argparse 使用 `sys.argv[1:]`，推断为标准库行为）解析得到 `args.command == "list"`、`args.start_date/end_date/data_file/config`。

### 3. 数据文件选择与读取

- 选择：`main` 第 42 行直接调用 `ledger/settings.py` 的 `resolve_data_file(cli_path=args.data_file, environ=os.environ, config_path=args.config)`。其优先级（`settings.py` 第 13–30 行，直接阅读可见）：`--data-file` > 环境变量 `LEDGER_DATA_FILE` > `--config` 指定的 JSON 中的 `data_file`（相对路径相对配置文件目录解析，第 32–33 行）> 默认 `DEFAULT_DATA_FILE`（第 5 行，定义为 `ledger/data/transactions.csv`，即包内数据文件）。本次运行未传任何选项、未设环境变量，故解析到 `ledger/data/transactions.csv`（推断：基于代码逻辑 + 运行环境与输出内容一致）。
- 读取：`main` 第 43 行直接调用 `ledger/storage.py` 的 `load_transactions(path)`。该函数用 `csv.DictReader` 读 CSV（第 13–14 行），校验必需列 `{id, date, category, amount}`（第 8、16–18 行），逐行构造 `ledger/model.py` 的冻结数据类 `Transaction`（第 21–26 行，直接调用），其中金额由 `ledger/money.py` 的 `parse_money(row["amount"])` 解析为整数美分（直接调用），日期用 `date.fromisoformat` 解析。

### 4. 查询

- `main` 第 44 行判断 `args.command == "list"` 后，第 45–46 行先用 `ledger/cli.py` 的 `_parse_cli_date` 校验 `--start-date/--end-date` 格式（仅校验，丢弃返回值；直接调用）。
- 第 47 行直接调用 `ledger/query.py` 的 `list_transactions(transactions, args.start_date, args.end_date)`；它第 31 行直接委托给同模块 `filter_by_date`，后者用 `_parse_date_bound` 解析日期边界并做**排他**区间过滤（第 22–25 行：`date <= start` 或 `date >= end` 被排除；代码注释说明这是冻结基线的有意行为）。本次运行未传日期参数，返回全部 6 条交易。

### 5. 格式化

- `main` 第 48 行直接调用 `ledger/formatting.py` 的 `format_transactions(rows)`，它逐条调用同模块 `format_transaction`（第 16 行 `"\n".join(...)` 生成器，直接调用），金额部分由同模块 `format_money(cents)` 格式化为 `$<元>.<美分两位>`（直接调用；注释指出负数在冻结基线下有意显示异常，如输出中的 `$-1.95`）。

### 6. stdout 输出

- `main` 第 51–52 行：若 `output` 非空则 `print(output)`（内置函数，直接调用），结果写到 stdout，随后第 53 行 `return 0`；`ledger/__main__.py` 的 `raise SystemExit(main())` 使进程以退出码 0 结束。错误路径（第 54–56 行）捕获 `FileNotFoundError/ValueError/OSError`，向 stderr 打印并返回 2，本次未触发。

### 7. 是否写入持久化存储

- **否**。整条链路只调用 `load_transactions`（只读打开 CSV，`storage.py` 第 13 行 `"r"` 模式），源码中不存在任何写文件/写数据库调用；`print` 只写 stdout（直接阅读全部 8 个模块源码确认）。运行前后 `git status --porcelain` 均为空，workspace 无任何变化（实证）。

### 调用链总览（直接调用，自上而下）

```
python3 -m ledger
└─ ledger/__main__.py: SystemExit(main())
   └─ ledger/cli.py: main()
      ├─ build_parser() / parser.parse_args()          [argparse]
      ├─ ledger/settings.py: resolve_data_file(...)    → ledger/data/transactions.csv
      ├─ ledger/storage.py: load_transactions(path)
      │   ├─ csv.DictReader                            [stdlib]
      │   ├─ ledger/model.py: Transaction(...)         [dataclass]
      │   └─ ledger/money.py: parse_money(...)
      ├─ ledger/cli.py: _parse_cli_date(...)           [仅校验 list 日期参数]
      ├─ ledger/query.py: list_transactions(...) → filter_by_date(...) → _parse_date_bound(...)
      ├─ ledger/formatting.py: format_transactions(...) → format_transaction(...) → format_money(...)
      └─ print(output) → stdout, return 0
```

## 实际运行的命令及原始输出

在 workspace 根目录执行：

```
$ time python3 -m ledger list; echo "exit=$?"
A-02 | 2025-01-01 | Food | $12.00
A-01 | 2025-01-01 | Food | $-1.95
B-01 | 2025-01-02 | Travel | $100.10
C-01 | 2025-01-31 | food | $0.01
D-01 | 2025-02-01 | 家庭 | $3.50
E-01 | 2024-12-31 | Transit | $2.00
exit=0

real	0m0.049s
user	0m0.032s
sys	0m0.014s
```

另执行了只读校验命令：`git status --porcelain`（运行前后均无输出，工作区干净）、`git rev-parse HEAD`（输出 `ed2390f2df8252f062abd9123e20f6fffca7e5ed`，与冻结提交一致）、`find . -name __pycache__`（无结果，运行未产生字节码缓存）、`head -5 / wc -l ledger/data/transactions.csv`（查看数据文件，7 行含表头）。

## 耗时

- `python3 -m ledger list` 实测 real 0.049s（`time` 输出，单次运行）。
- 整体任务耗时：UNKNOWN（未测量端到端墙钟时间）。

## 未完成项

无。

## 会话隔离说明

- 所有读取与命令执行均限定在本次运行 workspace `<评测根目录>/deepseek-harness/输出/deepseek-harness/T01/R01/workspace` 内；未访问或修改题目源文件、基准仓库或其他运行目录。
- 未修改 workspace 内任何文件：唯一写入操作是运行目录根部的 `BENCHMARK_RESULT.md`（位于 workspace 之外，按题面要求）。`python3 -m ledger list` 为只读操作，运行前后 `git status --porcelain` 均为空，未产生 `__pycache__`。
- 未联网、未增加依赖、未修改任何测试。
