//! El armador de kernel: catálogo de bundles, clausuras sobre Kconfig y modo reversa. //! //! Implementa `docs/22-configurador-kernel.md`, que a su vez contesta //! `tawasuyu/HANDOFF-KERNEL-CONFIG-A-HAMMER.md`. //! //! **El hecho que ordena todo el módulo** (SDD 22 §1): las fases de build entran en //! `Recipe::hash_inputs`, y el config del kernel vive en la fase `configure` ⇒ **el config ES la //! identidad del artefacto**. Cambiar un símbolo cambia el `ArtifactHash`. De ahí dos consecuencias //! que el código respeta literalmente: //! //! 1. Una «perilla» de la UI **no es un parámetro de runtime, es una edición de receta**. Por eso //! `plan` emite una **receta derivada**, no un binario parametrizable. //! 2. Atestar «este config booteó en esta huella» sale casi gratis: ya es un artefacto CAS. //! //! Y la regla dura que nunca se cruza: **takana no resuelve Kconfig**. Emite fragmentos //! (`scripts/config -e/-d`) y deja que el `olddefconfig` del propio kernel produzca el `.config`. //! Ver [`kconfig`]. pub mod catalog; pub mod config; pub mod contract; pub mod gate; pub mod hw; pub mod kconfig; pub mod modmap; pub mod plan; pub mod reverse; pub use catalog::{Bundle, Catalog, Knob, Objective, Side}; pub use gate::{GateReport, Verdict}; pub use modmap::ModMap; pub use config::{ConfigValue, KernelConfig}; pub use contract::{Capability, Contract, ContractReport, Profile as ContractProfile}; pub use hw::Hardware; pub use kconfig::{Expr, KconfigTree, SelectLeak, SymKind, Symbol}; pub use plan::{diff_back, make_plan, DiffBack, Plan}; pub use reverse::{BundleState, HwSignal, ReverseReport};