tix-tracker 0.11.0

A terminal issue tracker: markdown + YAML frontmatter issues with a kanban TUI and CLI
Documentation
//! Burndown and scope analytics (mission `burndown-scope-analytics-01M3C9J1`).
//!
//! A **pure projection** over what the tree already records: the append-only
//! History, issue frontmatter, cycle/milestone planning and snapshots, and the
//! shared status categories (C-001). Nothing here opens a store, reads a clock,
//! writes an issue, or introduces a second cycle/status model — an analytics value
//! is derived on read and persisted nowhere (except the local chart document WP04
//! exports, which is output rather than state).
//!
//! # What is recorded, and what is therefore reportable
//!
//! The classification in [`events`] maps **recorded** events only. A day with no
//! recorded history is `unknown`/coverage-limited, never zero by assumption
//! (C-005), and a scope change that was never logged is never reconstructed — the
//! mission's non-goal. Two of the four classes needed a producer rather than a
//! guess, and WP01 added them at the seam `tix edit --parent` already appends to
//! ([`crate::model::HistoryEventKind::EstimateChanged`] and
//! [`crate::model::HistoryEventKind::CycleMembershipChanged`]), so
//! `scope_addition` and `estimate_change` fold something recorded instead of
//! staying permanently unproducible.
//!
//! # Ownership of this root
//!
//! This file is WP01's and is **frozen** after it: all six children are declared
//! here, and each later work package fills in its own child rather than declaring
//! one (T045). Without that split this single file would be owned by three lanes at
//! once — the same shape [`crate::capacity`] and [`crate::time_tracking`] use for
//! their own children.
//!
//! [`events`] carries the scope, the period, the closed classification vocabulary,
//! the provenance-bearing event value and the idempotency index; it is the
//! vocabulary every later child consumes. [`series`], [`diagnostics`], [`units`],
//! [`projection`] and [`chart`] are declared here as compile-clean stubs and are
//! filled in by WP02 (daily series, coverage, diagnostics), WP03 (unit conversion,
//! end-date projection) and WP04 (deterministic chart export).
//!
//! # The boundary of the record
//!
//! A class is only as wide as the recorded evidence. The values `tix edit
//! --estimate`/`--cycles`/`--parent` write carry an event, so they are visible to the
//! classification; a path that writes a field without appending — the bulk patch
//! service writes through `Store::update` — leaves no event and therefore cannot
//! appear in `estimate_change` or `scope_addition`. A surface reports that as an
//! explicit coverage marker, never by reading the current frontmatter back into the
//! past.

pub mod chart;
pub mod diagnostics;
pub mod events;
pub mod projection;
pub mod series;
pub mod units;

pub use events::{
    AnalyticsEvent, AnalyticsScope, Contribution, EventClass, EventIndex, EventSource, Period,
    ScopeKind, cycle_scope, milestone_scope,
};