### Capacity (what a cycle, team or assignee may commit)
- `[capacity.<id>]` in `tix.toml` targets **exactly one** scope: `cycle` (a cycle name
or a generated cycle's stable id — the two spellings fold to one scope), `team` (a
`[teams.<label>]` key) or `assignee` (a handle, `@ada` folding with `ada`), with an
explicit `capacity` at or above zero and an explicit `unit` a board declares.
`enabled = false` keeps the numbers and enforces nothing. Validation is
field-aware and happens before the write, so a bad field is refused by name and
nothing changes
- `tix capacity list` / `show <REF>` / `delete --scope … --id …` manage the section;
`tix capacity set --scope cycle|team|assignee --id <REF> --value <N> --unit <UNIT>`
is the one write path. A reference is a name **or** its stable id
- `tix capacity calculate --scope cycle|team|assignee --id <REF>` prints the shared
calculation: `committed`, `completed`, `remaining`, `overflow` and `utilization`,
plus the ceiling, unit, state and the counted/uncounted/unestimated issue counts.
`--warnings` adds the overflow report on stderr
- Units convert **only explicitly** (a board's `[kanban.<board>.wip.units]` ratio:
`1w` counts as `5d` when `w = 5`). An estimate in an undeclared or incompatible
unit is a `missing_conversion` diagnostic — never a silent zero — and an issue with
no estimate stays visible as unestimated. An absent value prints `-` (JSON `null`),
never `0`; a scope with no ceiling in force is the explicit `unconfigured` state
- Every finding carries a machine-readable kind (`capacity_overflow`,
`missing_conversion`, `unknown_scope`, …), the scope, the numbers, the unit and the
offending issues, with a **reason** and a **remedy**. Overflow is a **report**: no
surface moves, resizes or rewrites an issue, a record or a snapshot, and reading
capacity writes nothing
- A close captures the scope's calculation **once** as immutable evidence under
`docs/cycle_snapshots/` (`tix capacity snapshot <CYCLE>` reads it back); a reopen
appends one `## History` event and leaves the prior snapshot byte-identical
- The TUI's `F8` Schedule page has a **Capacity** tab (`Tab` between `[Series]`,
`[Cycle schedules]`, `[Capacity]`; `j`/`k` move, `q` back) rendering exactly the CLI's
values, and appends the compact per-cycle cell to the board's cycle-grouped headers.
MCP exposes `capacity_list`/`capacity_show`/`capacity_calculate`/`capacity_snapshot`
(read-only; configuration is the CLI's write)
- `tix export --target capacity` writes the versioned local document (scopes,
snapshots, history, diagnostics); remote `tix export --target gitlab|linear` mirrors
issues and is **separate** — a remote target that cannot carry capacity is diagnosed
as `unsupported_remote_field` rather than dropping data