> **发布元数据**：Kimi Code · Kimi K3（评测者确认）· R01
> **来源**：`kimi-code/输出/kimi-code/T01/R01/BENCHMARK_RESULT.md`
> **归属更正**：此批结果由 Kimi Code 执行；历史输出 slug `zcode` 为命名错误，原始报告 SHA-256 留存。
> **原始文件 SHA-256**：`4bf74b80674f95f40729e8bfc1552caa74d7f737c564aa45870fae37c77e0b8d`
> 本公开副本已将评测机绝对路径归一化；下文 PASS/FAIL/BLOCKED 是执行报告自述状态，不等同于独立验收结论。

---

PASS

# T01 R01 BENCHMARK_RESULT

## 状态
- 首行状态：PASS
- 会话隔离状态：本题为独立子会话（subagent）执行；仅在本题独立 workspace 内读取文件，未触碰题目源文件、基准仓库或其他运行目录；workspace 内文件零修改。

## 实际改动
- 无（本题为只读题；唯一写入的文件为本结果文件 `输出/kimi-code/T01/R01/BENCHMARK_RESULT.md`，位于 workspace 之外）。

## 耗时
- 开始（`date`）：Thu Sep 24 10:05:20 CST 2026
- 结束（`date`）：Thu Sep 24 10:06:18 CST 2026
- 合计：约 58 秒

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

### 1. 枚举 workspace 文件（只读）
`find .../workspace -type f -not -path '*/.git/*'` → ledger 包共 9 个 `.py` 文件 + `ledger/data/transactions.csv`；另有 tests/、tests_t08/、docs/、README.md 等（本题未依赖其内容作结论）。

### 2. 验证命令（题面要求，实际执行一次）
工作目录：`<评测根目录>/kimi-code/输出/kimi-code/T01/R01/workspace`
```
$ python3 -m ledger list; echo "EXIT_CODE=$?"
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_CODE=0
```
输出 6 行，与 `ledger/data/transactions.csv` 的 6 条数据行一一对应、顺序一致；退出码 0。

### 3. 持久化写入核查（只读 grep）
对 workspace 内 `ledger/*.py` 检索 `open|write|dump|save`，唯一命中：
`ledger/storage.py:13: with Path(path).open("r", encoding="utf-8", newline="") as stream:`（只读模式）。
即整个包不存在任何写文件/持久化调用。

## 完整调用链分析（`python3 -m ledger list`）

以下相对路径均以 workspace 为根。"直接"指源码中可见的显式调用；"推断"指标注出的间接/标准库行为推断。

### 0. 进程入口（直接）
- `python3 -m ledger` 使 Python 把 `ledger/__main__.py` 作为 `__main__` 执行（`-m` 为标准库语义，推断；文件本身为直接证据）。
- `ledger/__main__.py:1` `from .cli import main`；`ledger/__main__.py:3-4` `raise SystemExit(main())`：调用 `ledger.cli.main()`（无参，`argv=None`），其返回值成为进程退出码。

### 1. 参数解析（直接）
- `ledger/cli.py:38-40` `main()`：`build_parser()`（`ledger/cli.py:26-35`）构造 `argparse.ArgumentParser(prog="ledger")`，全局选项 `--config`、`--data-file`；`add_subparsers(dest="command", required=True)`；子命令 `list` 增加 `--start-date`、`--end-date`（`cli.py:31-33`）。
- `cli.py:40` `parser.parse_args(argv)`，`argv=None` 时 argparse 解析 `sys.argv[1:]`（argparse 标准行为，推断）。
- `list` 分支内 `cli.py:45-46` 调用 `_parse_cli_date(args.start_date, "start_date")` / `_parse_cli_date(args.end_date, "end_date")`（`cli.py:13-23`）仅作校验（返回值被丢弃）；本次运行两者均为 None，立即返回 None，无副作用。

### 2. 数据文件选择（直接）
- `ledger/cli.py:42`：`resolve_data_file(cli_path=args.data_file, environ=os.environ, config_path=args.config)`，定义于 `ledger/settings.py:8`。
- `settings.resolve_data_file` 的优先级（`settings.py:13-30`，直接）：`--data-file` CLI 参数 > 环境变量 `LEDGER_DATA_FILE` > `--config` 指向的 JSON 配置（读取 `data_file` 键；相对路径基于配置文件所在目录解析，`settings.py:28,32-33`）> 默认 `DEFAULT_DATA_FILE`（`settings.py:5`）= `Path(__file__).resolve().parent / "data" / "transactions.csv"`，即包内 `ledger/data/transactions.csv`。
- 本次裸 `python3 -m ledger list`（无 flag、未设置该环境变量）走默认分支返回包内 CSV（代码路径为直接；运行结果输出恰为该 CSV 的 6 行，可作行为佐证）。

### 3. 数据读取（直接）
- `ledger/cli.py:43`：`load_transactions(path)`，定义于 `ledger/storage.py:11`。
- `storage.load_transactions`：`Path(path).open("r", encoding="utf-8", newline="")`（`storage.py:13`，只读）；`csv.DictReader` 解析；校验必需列 `{id, date, category, amount}`（`storage.py:8,15-18`）；逐行构造 `Transaction`（`ledger/model.py:5-10` 的 frozen dataclass，字段 id/date/category/amount_cents），其中日期经 `date.fromisoformat`（`storage.py:23`）、金额经 `parse_money`（`ledger/money.py:4`，调用点 `storage.py:25`）解析为整数美分（float 实现，如 `"-0.05"` → -5）。

### 4. 查询（直接）
- `ledger/cli.py:47`：`rows = list_transactions(transactions, args.start_date, args.end_date)`，定义于 `ledger/query.py:30`。
- `query.list_transactions` 是直接转发包装：`return filter_by_date(...)`（`query.py:31` → `query.py:16`）。
- `filter_by_date` 先用 `_parse_date_bound`（`query.py:4`）解析边界，再过滤：跳过 `transaction.date <= start` 与 `transaction.date >= end` 的记录（`query.py:22-25`）——两端均为**排他**边界（`query.py:17` 注释说明系冻结基线有意为之）。无边界时原样返回全部记录，无任何排序（排序缺失为对全链路代码的推断；输出顺序与 CSV 行序一致，行为佐证）。

### 5. 格式化（直接）
- `ledger/cli.py:48`：`output = format_transactions(rows)`，定义于 `ledger/formatting.py:15`。
- `format_transactions` 对每行调用 `format_transaction`（`formatting.py:8`）后以 `"\n"` 连接；行格式为 `{id} | {date.isoformat()} | {category} | {format_money(amount_cents)}`；`format_money`（`formatting.py:1`）用整除/取模渲染 `$whole.fraction`（负数有已知缺陷：-5 美分 → `$-1.95`，`formatting.py:2` 注释标明为 T10 有意保留；验证输出第 2 行即 `$-1.95`）。

### 6. stdout 输出（直接 + 标注推断）
- `ledger/cli.py:51-52`：`if output: print(output)`——内置 `print` 写入 `sys.stdout` 并追加换行（print 的标准库默认行为，推断；调用点直接）。
- `main` 返回 0（`cli.py:53`）→ `__main__.py:4` 的 `SystemExit(0)` → 进程退出码 0（本次实测 `EXIT_CODE=0`）。
- 错误路径（本次未触发，直接代码证据）：`cli.py:54-56` 捕获 `(FileNotFoundError, ValueError, OSError)`，向 `sys.stderr` 打印 `ledger: error: {exc}` 并返回 2。

### 7. 是否写入持久化存储
- **否。** `list` 全链路无任何写操作：对 workspace 内 `ledger/*.py` 检索 `open|write|dump|save` 仅命中 `storage.py:13` 的只读 `open("r", ...)`。结果只存在于内存并经 stdout 输出，不落盘、不写任何持久化存储（直接：代码审查 + grep 证据）。

## 调用链总览（按执行顺序）
```
__main__.py → cli.main → cli.build_parser / parse_args
           → settings.resolve_data_file（选数据文件）
           → storage.load_transactions → model.Transaction / money.parse_money（读 CSV）
           → cli._parse_cli_date（仅校验日期参数）
           → query.list_transactions → query.filter_by_date / _parse_date_bound（查询过滤）
           → formatting.format_transactions → format_transaction → format_money（格式化）
           → print → stdout；return 0 → SystemExit(0)
```

## 未完成项
- 无。题面全部要求（逐阶段调用链、真实路径与符号名、直接/推断区分、实际运行验证、持久化结论）均已完成。

## 元数据
- 冻结提交：ed2390f2df8252f062abd9123e20f6fffca7e5ed（由题面给定，未独立校验 git 历史）
- Python 版本：未单独采集 → UNKNOWN（命令以系统 `python3` 执行成功）
- 执行机器/用户：UNKNOWN
