tix-tracker 0.12.0

A terminal issue tracker: markdown + YAML frontmatter issues with a kanban TUI and CLI
Documentation
//! Work-in-progress limits: the configuration, the estimate arithmetic, and — in
//! the work packages that follow — one shared move policy over them (mission
//! `configurable-wip-limits-01M3C6WX`).
//!
//! # Why this module exists
//!
//! A board can already say *which* columns a project uses and *what* each column
//! means ([`crate::workflow`], the status categories from tix #183). What it could
//! not say is **how much work is allowed in one of them**. This module adds that as
//! a policy the surfaces ask about, not as a rule each surface implements: CLI,
//! TUI, MCP, the keyboard, the mouse, drag-and-drop, bulk moves, `tix lint` and
//! `tix status` all call the same decision (C-006), so WIP cannot be bypassed by
//! using a different door.
//!
//! # What is deliberately absent
//!
//! Nothing here reads or writes an issue. The configuration lives in `tix.toml`
//! (C-001), the counts are derived from the issues the caller already holds (the
//! same index shape [`crate::workflow`] uses), and a decision is a value a caller
//! acts on. There is no database, no hosted service, no new unit system, and no
//! implicit conversion between estimate units: a missing conversion is an error,
//! never a zero and never a guess (C-003, C-008).
//!
//! # The pieces
//!
//! - [`config`] — the `[kanban.<name>.wip]` schema, its validation, and the
//!   estimate-unit arithmetic. It is the only module that knows what a limit *is*.
//! - [`aggregate`] — one pass over the issues a caller already holds, producing
//!   what each column holds and where that stands against its limit.
//! - [`override`] — an authorized, complete, limit-bound request to pass a blocking
//!   limit.
//! - [`policy`] — the one decision every surface asks, and the one History event an
//!   applied override writes.
//! - [`diagnostics`] — the sentences the surfaces print, in one place.

pub mod aggregate;
pub mod bulk;
pub mod config;
pub mod diagnostics;
pub mod r#override;
pub mod policy;

pub use aggregate::{ColumnUsage, LimitState, WipSnapshot};
pub use bulk::{ItemWip, evaluate_batch};
pub use config::{
    ColumnLimit, Estimate, LimitPolicy, WipConfig, WipDiagnostic, WipDiagnosticKind, WipError,
};
pub use diagnostics::{render_decision, render_snapshot};
pub use r#override::{BoundLimit, OverrideRequest};
pub use policy::{HistoryIntent, MoveContext, MoveRequest, WipDecision, WipOutcome, evaluate};