# `CommBus.Budget.Planner`
[🔗](https://github.com/fosferon/comm_bus/blob/v0.1.0/{path}#L{line})

Simple helper for deriving section budgets and completion allowances.

## Example

    plan = CommBus.Budget.Planner.plan(total: 8000, completion: 1000)
    # => %{total: 8000, completion: 1000, sections: %{system: 800, pre_history: 2400, history: 3200, post_history: 1600}}

# `plan`
[🔗](https://github.com/fosferon/comm_bus/blob/v0.1.0/{path}#L{line})

```elixir
@spec plan(keyword()) :: %{
  total: pos_integer(),
  completion: non_neg_integer(),
  sections: map()
}
```

Computes a budget plan that allocates tokens across prompt sections.

Subtracts the completion reserve from the total budget, then distributes
the remainder across sections using the provided ratios (or defaults:
system 10%, pre_history 30%, history 40%, post_history 20%).

## Parameters

  - `opts` — Keyword list with:
    - `:total` (required) — Total token budget for the context window.
    - `:completion` — Tokens reserved for LLM completion (default: total ÷ 4).
    - `:section_ratios` — Map of section atoms to ratio floats.

## Returns

A map with `:total`, `:completion`, and `:sections` (map of section → token count).

---

*Consult [api-reference.md](api-reference.md) for complete listing*
