# Changelog — klieo-runlog

All notable changes to this crate are documented here.
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
This crate adheres to [Semantic Versioning](https://semver.org/).

## [Unreleased]

### Changed

- Projector reads `Episode::LlmCall::provider`/`model`/`prompt_tokens`/
  `completion_tokens` when present:
  - `Episode::LlmCall::model` populates the `Step::name` fallback when
    no `LlmIo` sidecar provides one.
  - Split `prompt_tokens` + `completion_tokens` route into
    `Tokens::prompt_tokens` and `Tokens::completion_tokens`
    respectively. When either is `None`, the legacy behaviour holds
    (accumulate the single `tokens` total into `completion_tokens`).

  The `LlmIo` sidecar continues to take precedence for input/output
  payloads and remains the only source of cost-pricing data, since
  pricing is per-provider/model + per-token-class and `LlmIo` carries
  the price-table lookup key explicitly.
