//! Cross-platform scenario tests (CLAUDE.md section 7). //! //! This crate holds the **golden decision tables**: declarative schedules, //! inputs, and expected decisions that are run against the core engine. //! //! # Why this is a contract, not a test suite //! //! Section 7 requires that the same table runs against the core and serves as //! the parity contract for all platforms. Android, Linux and Windows each //! implement a mapping from a platform app identity to a `Target`, but they all //! hand the same [`blocker_core`] engine the same schedule set and get back the //! same decision. A platform crate runs this table against its own mapping, so //! if Linux disagrees with Android the build fails rather than the user filing //! a bug. //! //! # The rule that keeps it honest //! //! **A case is added before the engine changes.** If a table were written after //! the code, it would only record current behaviour and could never catch a //! regression — it would be a transcript, not a specification. Reviewing a PR //! that changes engine behaviour therefore means checking that a case was added //! or updated in the same commit. //! //! # Layout //! //! - `golden/` — the tables themselves, one JSON file per concern //! - [`purity`] — a mechanical check that the core has not gained I/O //! //! The mandatory case list is in [`golden::MANDATORY_COVERAGE`]. //! //! [`purity`] is `cfg(test)` because its checks are `#[test]` functions in this //! library's unit-test build, not library API. They run under `cargo test`. pub mod golden; #[cfg(test)] mod purity;