//! Cross-cutting primitives that every indusagi crate depends on.
//!
//! This is the foundational crate of the 100%-Rust indusagi rebuild — the
//! "packaging skin and shared vocabulary" that no single subsystem owns but all
//! of them need. It deliberately carries no subsystem logic; it ships the
//! load-bearing primitives:
//!
//! - [`cancel`] — the framework's single cancellation currency
//!   ([`cancel::CancellationToken`]) with the parent→round→child chain helpers
//!   and the typed-error gate (cancel yields a typed [`errors::CoreError`], never
//!   a panic).
//! - [`canonical`] — the character-faithful `JSON.stringify` encoder and
//!   [`canonical::content_hash`], the parity-critical content-addressing surface.
//! - [`env`] — the single environment-variable registry (brand grammar,
//!   `INDUSAGI_HOME`, the provider-table skeleton).
//! - [`brand`] — the one source of naming truth ([`brand::BRAND`], [`brand::env_name`]).
//! - [`locate`] — the unified [`locate::Locator`] honoring `INDUSAGI_HOME` on all
//!   state paths.
//! - [`version`] — the single-source [`version::VERSION`] (kills the TS 3-way drift).
//! - [`ids`] — ULID id helpers.
//! - [`errors`] — the shared closed [`errors::CoreError`] vocabulary.
//! - [`channel`] — the re-iterable [`channel::Channel`] stream factory.
//! - [`time`] — the single wall-clock surface ([`time::now_ms`], the canonical
//!   `Date.now()` analogue) that replaces a dozen per-module copies.

pub mod brand;
pub mod cancel;
pub mod canonical;
pub mod channel;
pub mod env;
pub mod errors;
pub mod ids;
pub mod locate;
pub mod time;
pub mod version;

// Re-export the most frequently reached-for symbols at the crate root so
// downstream crates can `use indusagi_core::{VERSION, CoreError, CancellationToken}`.
pub use brand::{BRAND, Brand, env_name};
pub use cancel::{CancelExt, CancellationToken};
pub use canonical::{HASH_WIDTH, canonical_json, content_hash};
pub use channel::{BoxStream, Channel};
pub use errors::{CoreError, CoreResult};
pub use locate::{Locator, LocatorOverrides};
pub use time::now_ms;
pub use version::VERSION;
